Changes in / [1048b31:1f6e009]
- Files:
-
- 5 added
- 16 deleted
- 49 edited
-
doc/LaTeXmacros/common.tex (deleted)
-
doc/LaTeXmacros/indexstyle (deleted)
-
doc/bibliography/cfa.bib (deleted)
-
doc/refrat/Makefile (modified) (3 diffs)
-
doc/refrat/indexstyle (added)
-
doc/refrat/refrat.tex (modified) (165 diffs)
-
doc/user/Cdecl.fig (deleted)
-
doc/user/Makefile (modified) (4 diffs)
-
doc/user/indexstyle (added)
-
doc/user/user.bib (added)
-
doc/user/user.tex (modified) (63 diffs)
-
src/CodeGen/CodeGenerator.cc (modified) (2 diffs)
-
src/CodeGen/CodeGenerator.h (modified) (1 diff)
-
src/GenPoly/Box.cc (modified) (51 diffs)
-
src/GenPoly/ErasableScopedMap.h (deleted)
-
src/GenPoly/FindFunction.cc (modified) (3 diffs)
-
src/GenPoly/GenPoly.cc (modified) (3 diffs)
-
src/GenPoly/GenPoly.h (modified) (3 diffs)
-
src/GenPoly/Lvalue.cc (modified) (3 diffs)
-
src/GenPoly/PolyMutator.cc (modified) (1 diff)
-
src/GenPoly/ScopedMap.h (modified) (12 diffs)
-
src/GenPoly/ScopedSet.h (deleted)
-
src/GenPoly/ScrubTyVars.cc (modified) (2 diffs)
-
src/InitTweak/InitModel.h (modified) (1 diff)
-
src/Parser/DeclarationNode.cc (modified) (3 diffs)
-
src/Parser/ExpressionNode.cc (modified) (3 diffs)
-
src/Parser/ParseNode.h (modified) (7 diffs)
-
src/Parser/TypedefTable.cc (modified) (3 diffs)
-
src/Parser/TypedefTable.h (modified) (2 diffs)
-
src/Parser/parser.cc (modified) (117 diffs)
-
src/Parser/parser.yy (modified) (5 diffs)
-
src/ResolvExpr/AlternativeFinder.cc (modified) (1 diff)
-
src/ResolvExpr/AlternativeFinder.h (modified) (1 diff)
-
src/ResolvExpr/CastCost.cc (modified) (2 diffs)
-
src/SymTab/AddVisit.h (modified) (3 diffs)
-
src/SymTab/Indexer.cc (modified) (26 diffs)
-
src/SymTab/Indexer.h (modified) (2 diffs)
-
src/SymTab/Validate.cc (modified) (18 diffs)
-
src/SynTree/Expression.cc (modified) (4 diffs)
-
src/SynTree/Expression.h (modified) (3 diffs)
-
src/SynTree/Mutator.cc (modified) (3 diffs)
-
src/SynTree/Mutator.h (modified) (3 diffs)
-
src/SynTree/SynTree.h (modified) (3 diffs)
-
src/SynTree/Visitor.cc (modified) (3 diffs)
-
src/SynTree/Visitor.h (modified) (3 diffs)
-
src/Tuples/FlattenTuple.cc (modified) (1 diff)
-
src/Tuples/FlattenTuple.h (modified) (1 diff)
-
src/driver/cfa.cc (modified) (3 diffs)
-
src/examples/io.c (deleted)
-
src/examples/io.data (deleted)
-
src/examples/math.c (deleted)
-
src/examples/rational.c (deleted)
-
src/examples/rational.cc (deleted)
-
src/examples/read.c (added)
-
src/examples/read.data (added)
-
src/examples/swap.c (modified) (2 diffs)
-
src/libcfa/Makefile.am (modified) (2 diffs)
-
src/libcfa/Makefile.in (modified) (3 diffs)
-
src/libcfa/fstream (modified) (3 diffs)
-
src/libcfa/fstream.c (modified) (8 diffs)
-
src/libcfa/iostream (modified) (4 diffs)
-
src/libcfa/iostream.c (modified) (20 diffs)
-
src/libcfa/limits (modified) (1 diff)
-
src/libcfa/limits.c (deleted)
-
src/libcfa/math (deleted)
-
src/libcfa/math.c (deleted)
-
src/libcfa/rational (deleted)
-
src/libcfa/rational.c (deleted)
-
src/libcfa/stdlib (modified) (5 diffs)
-
src/libcfa/stdlib.c (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
doc/refrat/Makefile
r1048b31 r1f6e009 1 1 ## Define the appropriate configuration variables. 2 2 3 TeXLIB = .:../bibliography/:../LaTeXmacros/: 3 Macros = 4 TeXLIB = .:${Macros}: 4 5 LaTeX = TEXINPUTS=${TeXLIB} && export TEXINPUTS && latex 5 BibTeX = B IBINPUTS=${TeXLIB} && export BIBINPUTS && bibtex6 BibTeX = BSTINPUTS=${TeXLIB} && export BSTINPUTS && bibtex 6 7 7 8 ## Define the text source files. … … 43 44 dvips $< -o $@ 44 45 45 ${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex \ 46 ../LaTeXmacros/common.tex ../LaTeXmacros/indexstyle ../bibliography/cfa.bib 46 ${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex ${basename ${DOCUMENT}}.bib 47 47 # Conditionally create an empty *.ind (index) file for inclusion until makeindex is run. 48 48 if [ ! -r ${basename $@}.ind ] ; then touch ${basename $@}.ind ; fi … … 54 54 -${BibTeX} ${basename $@} 55 55 # Make index from *.aux entries and input index at end of document 56 makeindex -s ../LaTeXmacros/indexstyle ${basename $@}.idx56 makeindex -s indexstyle ${basename $@}.idx 57 57 ${LaTeX} ${basename $@}.tex 58 58 # Run again to get index title into table of contents -
doc/refrat/refrat.tex
r1048b31 r1f6e009 1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -*- Mode: Latex -*- %%%%%%%%%%%%%%%%%%%%%%%%%%%%2 %%3 %% Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo4 %%5 %% The contents of this file are covered under the licence agreement in the6 %% file "LICENCE" distributed with Cforall.7 %%8 %% refrat.tex --9 %%10 %% Author : Peter A. Buhr11 %% Created On : Wed Apr 6 14:52:25 201612 %% Last Modified By : Peter A. Buhr13 %% Last Modified On : Sat Apr 30 13:45:40 201614 %% Update Count : 2915 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%16 17 1 % requires tex packages: texlive-base texlive-latex-base tex-common texlive-humanities texlive-latex-extra texlive-fonts-recommended 18 19 % red highlighting ®...® (registered trademark sumbol)20 % blue highlighting ©...© (copyright symbol)21 % latex escape §...§ (section symbol)22 % keyword escape ¶...¶ (pilcrow symbol)23 % math escape $...$ (dollar symbol)24 2 25 3 \documentclass[openright,twoside]{report} … … 27 5 28 6 % Latex packages used in the document. 7 29 8 \usepackage{fullpage,times} 30 9 \usepackage{xspace} … … 32 11 \usepackage{listings} 33 12 \usepackage{comment} 34 \usepackage{latexsym} % \Box35 \usepackage{mathptmx} % better math font with "times"13 \usepackage{latexsym} % \Box 14 \usepackage{mathptmx} % better math font with "times" 36 15 \usepackage[pagewise]{lineno} 37 16 \renewcommand{\linenumberfont}{\scriptsize\sffamily} … … 42 21 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 43 22 23 % Names used in the document. 24 25 \newcommand{\CFA}{C$\forall$\xspace} % set language symbolic name 26 \newcommand{\CFL}{Cforall\xspace} % set language text 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 44 32 % Bespoke macros used in the document. 45 \input{common} 46 47 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 48 49 \setcounter{secnumdepth}{3} % number subsubsections 50 \setcounter{tocdepth}{3} % subsubsections in table of contents 33 34 \makeatletter 35 % allow escape sequence in lstinline 36 %\usepackage{etoolbox} 37 %\patchcmd{\lsthk@TextStyle}{\let\lst@DefEsc\@empty}{}{}{\errmessage{failed to patch}} 38 39 \renewcommand\small{% 40 \@setfontsize\small{8.5}{11}% 41 \abovedisplayskip 8.5pt \@plus 3pt \@minus 4pt 42 \abovedisplayshortskip \z@ \@plus 2pt 43 \belowdisplayshortskip 4pt \@plus 2pt \@minus 2pt 44 \def\@listi{\leftmargin\leftmargini 45 \topsep 4pt \@plus 2pt \@minus 2pt 46 \parsep 2pt \@pluspt \@minuspt 47 \itemsep \parsep}% 48 \belowdisplayskip \abovedisplayskip 49 } 50 \usepackage{relsize} % must be after change to small 51 52 \renewcommand{\labelitemi}{{\raisebox{0.25ex}{\footnotesize$\bullet$}}} 53 \renewenvironment{itemize}{\begin{list}{\labelitemi}{\topsep=5pt\itemsep=5pt\parsep=0pt}}{\end{list}} 54 55 % Reduce size of chapter/section titles 56 \def\@makechapterhead#1{% 57 \vspace*{50\p@}% 58 {\parindent \z@ \raggedright \normalfont 59 \ifnum \c@secnumdepth >\m@ne 60 \large\bfseries \@chapapp\space \thechapter 61 \par\nobreak 62 \vskip 5\p@ 63 \fi 64 \interlinepenalty\@M 65 \Large \bfseries #1\par\nobreak 66 \vskip 50\p@ 67 }} 68 \def\@makeschapterhead#1{% 69 \vspace*{50\p@}% 70 {\parindent \z@ \raggedright 71 \normalfont 72 \interlinepenalty\@M 73 \Large \bfseries #1\par\nobreak 74 \vskip 50\p@ 75 }} 76 \renewcommand\section{\@startsection{section}{1}{\z@}{-3.0ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\large\bfseries}} 77 \renewcommand\subsection{\@startsection{subsection}{2}{\z@}{-2.5ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\normalsize\bfseries}} 78 \renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}{-2.5ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\normalsize\bfseries}} 79 \renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}{-2.0ex \@plus -1ex \@minus -.2ex}{-1em}{\normalfont\normalsize\bfseries}} 80 81 % index macros 82 \newcommand{\italic}[1]{\emph{\hyperpage{#1}}} 83 \newcommand{\definition}[1]{\textbf{\hyperpage{#1}}} 84 \newcommand{\see}[1]{\emph{see} #1} 85 86 % Define some commands that produce formatted index entries suitable for cross-references. 87 % ``\spec'' produces entries for specifications of entities. ``\impl'' produces entries for their 88 % implementations, and ``\use'' for their uses. 89 90 % \newcommand{\bold}[1]{{\bf #1}} 91 % \def\spec{\@bsphack\begingroup 92 % \def\protect##1{\string##1\space}\@sanitize 93 % \@wrxref{|bold}} 94 \def\impl{\@bsphack\begingroup 95 \def\protect##1{\string##1\space}\@sanitize 96 \@wrxref{|definition}} 97 \newcommand{\indexcode}[1]{{\lstinline$#1$}} 98 \def\use{\@bsphack\begingroup 99 \def\protect##1{\string##1\space}\@sanitize 100 \@wrxref{|hyperpage}} 101 \def\@wrxref#1#2{\let\thepage\relax 102 \xdef\@gtempa{\write\@indexfile{\string 103 \indexentry{#2@{\lstinline$#2$}#1}{\thepage}}}\endgroup\@gtempa 104 \if@nobreak \ifvmode\nobreak\fi\fi\@esphack} 105 %\newcommand{\use}[1]{\index{#1@{\lstinline$#1$}}} 106 %\newcommand{\impl}[1]{\index{\protect#1@{\lstinline$\protect#1$}|definition}} 107 108 % inline text and lowercase index: \Index{inline and lowercase index text} 109 % inline text and as-in index: \Index[as-is index text]{inline text} 110 % inline text but index with different as-is text: \Index[index text]{inline text} 111 \newcommand{\Index}{\@ifstar\@sIndex\@Index} 112 \newcommand{\@Index}[2][\@empty]{\lowercase{\def\temp{#2}}#2\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi} 113 \newcommand{\@sIndex}[2][\@empty]{#2\ifx#1\@empty\index{#2}\else\index{#1@{\protect#2}}\fi} 114 \makeatother 115 116 % blocks and titles 117 \newenvironment{rationale}{% 118 \begin{quotation}\noindent$\Box$\enspace 119 }{% 120 \hfill\enspace$\Box$\end{quotation} 121 }% 122 \newcommand{\define}[1]{\emph{#1\/}\index{#1}} 123 \newcommand{\rewrite}{\(\Rightarrow\)} 124 \newcommand{\rewriterules}{\paragraph{Rewrite Rules}~\par\noindent} 125 \newcommand{\examples}{\paragraph{Examples}~\par\noindent} 126 \newcommand{\semantics}{\paragraph{Semantics}~\par\noindent} 127 \newcommand{\constraints}{\paragraph{Constraints}~\par\noindent} 128 \newcommand{\predefined}{\paragraph{Predefined Identifiers}~\par\noindent} 129 130 % BNF macros 131 \def\syntax{\paragraph{Syntax}\trivlist\parindent=.5in\item[\hskip.5in]} 132 \let\endsyntax=\endtrivlist 133 \newcommand{\lhs}[1]{\par{\emph{#1:}}\index{#1@{\emph{#1}}|italic}} 134 \newcommand{\rhs}{\hfil\break\hbox{\hskip1in}} 135 \newcommand{\oldlhs}[1]{\emph{#1: \ldots}\index{#1@{\emph{#1}}|italic}} 136 \newcommand{\nonterm}[1]{\emph{#1\/}\index{#1@{\emph{#1}}|italic}} 137 \newcommand{\opt}{$_{opt}$\ } 138 139 % adjust varioref package with default "section" and "page" titles, and optional title with faraway page numbers 140 % \VRef{label} => Section 2.7, \VPageref{label} => page 17 141 % \VRef[Figure]{label} => Figure 3.4, \VPageref{label} => page 17 142 \renewcommand{\reftextfaceafter}{\unskip} 143 \renewcommand{\reftextfacebefore}{\unskip} 144 \renewcommand{\reftextafter}{\unskip} 145 \renewcommand{\reftextbefore}{\unskip} 146 \renewcommand{\reftextfaraway}[1]{\unskip, p.~\pageref{#1}} 147 \renewcommand{\reftextpagerange}[2]{\unskip, pp.~\pageref{#1}--\pageref{#2}} 148 \newcommand{\VRef}[2][Section]{\ifx#1\@empty\else{#1}\nobreakspace\fi\vref{#2}} 149 \newcommand{\VPageref}[2][page]{\ifx#1\@empty\else{#1}\nobreakspace\fi\pageref{#2}} 150 151 % CFA based on ANSI C 152 \lstdefinelanguage{CFA}[ANSI]{C}% 153 {morekeywords={asm,_Alignas,_Alignof,_At,_Atomic,_Bool,catch,catchResume,choose,_Complex,trait,disable,dtype,enable, 154 fallthru,finally,forall,ftype,_Generic,_Imaginary,inline,lvalue,_Noreturn,otype,restrict,_Static_assert, 155 _Thread_local,throw,throwResume,try,}, 156 }% 157 158 \lstset{ 159 language=CFA, 160 columns=flexible, 161 basicstyle=\sf\relsize{-1}, 162 tabsize=4, 163 xleftmargin=\parindent, 164 escapechar=@, 165 keepspaces=true, 166 showstringspaces=false, 167 showlines=true, 168 }% 169 170 \makeatletter 171 % replace/adjust listings characters that look bad in sanserif 172 \lst@CCPutMacro 173 \lst@ProcessOther{"2D}{\lst@ttfamily{-{}}{{\ttfamily\upshape -}}} % replace minus 174 \lst@ProcessOther{"3C}{\lst@ttfamily{<}{\texttt{<}}} % replace less than 175 \lst@ProcessOther{"3E}{\lst@ttfamily{<}{\texttt{>}}} % replace greater than 176 \lst@ProcessOther{"5E}{\raisebox{0.4ex}{$\scriptstyle\land\,$}} % replace circumflex 177 \lst@ProcessLetter{"5F}{\lst@ttfamily{\char95}{{\makebox[1.2ex][c]{\rule{1ex}{0.1ex}}}}} % replace underscore 178 \lst@ProcessOther{"7E}{\raisebox{0.3ex}{$\scriptstyle\sim\,$}} % replace tilde 179 %\lst@ProcessOther{"7E}{\raisebox{-.4ex}[1ex][0pt]{\textasciitilde}} % lower tilde 180 \@empty\z@\@empty 181 \makeatother 182 183 \setcounter{secnumdepth}{3} % number subsubsections 184 \setcounter{tocdepth}{3} % subsubsections in table of contents 51 185 \makeindex 52 186 … … 55 189 \begin{document} 56 190 \pagestyle{headings} 57 \linenumbers % comment out to turn off line numbering191 \linenumbers % comment out to turn off line numbering 58 192 59 193 \title{\Huge 60 \vspace*{1in}61 194 \CFA (\CFL) Reference Manual and Rationale 62 195 }% title … … 93 226 94 227 This document is a reference manual and rationale for \CFA, a polymorphic extension of the C programming language. 95 It makes frequent reference to the {\c11} standard \cite{ C11}, and occasionally compares \CFA to {\CC} \cite{C++}.228 It makes frequent reference to the {\c11} standard \cite{ANS:C11}, and occasionally compares \CFA to {\CC} \cite{c++}. 96 229 97 230 The manual deliberately imitates the ordering of the {\c11} standard (although the section numbering differs). … … 131 264 \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 132 265 \Index{name space}, instead of hiding them. 133 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} or134 \lstinline @typedef@\use{typedef} declaration and the other is not. The outer declaration becomes266 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 267 \lstinline$typedef$\use{typedef} declaration and the other is not. The outer declaration becomes 135 268 \Index{visible} when the scope of the inner declaration terminates. 136 269 \begin{rationale} 137 Hence, a \CFA program can declare an \lstinline @int v@ and a \lstinline@float v@in the same scope;270 Hence, a \CFA program can declare an \lstinline$int v$ and a \lstinline$float v$ in the same scope; 138 271 a {\CC} program can not. 139 272 \end{rationale} … … 149 282 Identifiers with \Index{no linkage} always denote unique entities. 150 283 \begin{rationale} 151 A \CFA program can declare an \lstinline @extern int v@ and an \lstinline@extern float v@;284 A \CFA program can declare an \lstinline$extern int v$ and an \lstinline$extern float v$; 152 285 a C program cannot. 153 286 \end{rationale} … … 172 305 \end{lstlisting} 173 306 174 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@.307 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$. 175 308 The instantiation then has the semantics that would result if the type parameters were substituted into the type generator declaration by macro substitution. 176 309 … … 233 366 In \CFA, these conversions play a role in overload resolution, and collectively are called the \define{safe arithmetic conversion}s. 234 367 235 Let \ lstinline@int$_r$@ and \lstinline@unsigned$_r$@be the signed and unsigned integer types with integer conversion rank\index{integer conversion rank}\index{rank|see{integer conversion rank}} $r$.236 Let \ lstinline@unsigned$_{mr}$@be the unsigned integer type with maximal rank.368 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$. 369 Let \(unsigned_{mr}\) be the unsigned integer type with maximal rank. 237 370 238 371 The following conversions are \emph{direct} safe arithmetic conversions. … … 241 374 The \Index{integer promotion}s. 242 375 \item 243 For every rank $r$ greater than or equal to the rank of \lstinline @int@, conversion from \lstinline@int$_r$@ to \lstinline@unsigned$_r$@.244 \item 245 For every rank $r$ greater than or equal to the rank of \lstinline @int@, where \lstinline@int$_{r+1}$@ exists and can represent all values of \lstinline@unsigned$_r$@, conversion from \lstinline@unsigned$_r$@ to \lstinline@int$_{r+1}$@.246 \item 247 Conversion from \ lstinline@unsigned$_{mr}$@ to \lstinline@float@.376 For every rank $r$ greater than or equal to the rank of \lstinline$int$, conversion from \(int_r\) to \(unsigned_r\). 377 \item 378 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}\). 379 \item 380 Conversion from \(unsigned_{mr}\) to \lstinline$float$. 248 381 \item 249 382 Conversion from an enumerated type to its compatible integer type. 250 383 \item 251 Conversion from \lstinline @float@ to \lstinline@double@, and from \lstinline@double@ to \lstinline@long double@.252 \item 253 Conversion from \lstinline @float _Complex@ to \lstinline@double _Complex@, and from \lstinline@double _Complex@ to \lstinline@long double _Complex@.384 Conversion from \lstinline$float$ to \lstinline$double$, and from \lstinline$double$ to \lstinline$long double$. 385 \item 386 Conversion from \lstinline$float _Complex$ to \lstinline$double _Complex$, and from \lstinline$double _Complex$ to \lstinline$long double _Complex$. 254 387 \begin{sloppypar} 255 388 \item 256 Conversion from \lstinline @float _Imaginary@ to \lstinline@double _Imaginary@, and from \lstinline@double _Imaginary@ to \lstinline@long double _Imaginary@, if the implementation supports imaginary types.389 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. 257 390 \end{sloppypar} 258 391 \end{itemize} 259 392 260 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.393 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. 261 394 262 395 \begin{rationale} … … 281 414 int x, y; 282 415 }; 283 void move_by( struct point * p1, struct point * p2 ) { §\impl{move_by}§416 void move_by( struct point * p1, struct point * p2 ) {@\impl{move_by}@ 284 417 p1->x += p2.x; 285 418 p1->y += p2.y; … … 291 424 move_to( &cp1, &cp2 ); 292 425 \end{lstlisting} 293 Thanks to implicit conversion, the two arguments that \lstinline @move_by()@receives are pointers to294 \lstinline @cp1@'s second member and \lstinline@cp2@'s second member.426 Thanks to implicit conversion, the two arguments that \lstinline$move_by()$ receives are pointers to 427 \lstinline$cp1$'s second member and \lstinline$cp2$'s second member. 295 428 296 429 … … 334 467 a direct safe arithmetic conversion; 335 468 \item 336 from any object type or incomplete type to \lstinline @void@;337 \item 338 from a pointer to any non-\lstinline @void@ type to a pointer to \lstinline@void@;469 from any object type or incomplete type to \lstinline$void$; 470 \item 471 from a pointer to any non-\lstinline$void$ type to a pointer to \lstinline$void$; 339 472 \item 340 473 from a pointer to any type to a pointer to a more qualified version of the type\index{qualified type}; … … 347 480 Conversions that are not safe conversions are \define{unsafe conversion}s. 348 481 \begin{rationale} 349 As in C, there is an implicit conversion from \lstinline @void *@to any pointer type.482 As in C, there is an implicit conversion from \lstinline$void *$ to any pointer type. 350 483 This is clearly dangerous, and {\CC} does not have this implicit conversion. 351 484 \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. … … 373 506 \begin{itemize} 374 507 \item 375 The cost of an implicit conversion from \lstinline @int@ to \lstinline@long@is 1.376 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@.377 378 \item 379 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:380 \lstinline @unsigned short@ to \lstinline@int@ to \lstinline@unsigned@.381 Otherwise, \lstinline @unsigned short@ is converted directly to \lstinline@unsigned@, and the cost is 1.382 383 \item 384 If \lstinline @long@ can represent all the values of \lstinline@unsigned@, then the conversion cost of \lstinline@unsigned@ to \lstinline@long@is 1.508 The cost of an implicit conversion from \lstinline$int$ to \lstinline$long$ is 1. 509 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$. 510 511 \item 512 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: 513 \lstinline$unsigned short$ to \lstinline$int$ to \lstinline$unsigned$. 514 Otherwise, \lstinline$unsigned short$ is converted directly to \lstinline$unsigned$, and the cost is 1. 515 516 \item 517 If \lstinline$long$ can represent all the values of \lstinline$unsigned$, then the conversion cost of \lstinline$unsigned$ to \lstinline$long$ is 1. 385 518 Otherwise, the conversion is an unsafe conversion, and its conversion cost is undefined. 386 519 \end{itemize} … … 390 523 \begin{syntax} 391 524 \oldlhs{keyword} 392 \rhs \lstinline @forall@393 \rhs \lstinline @lvalue@394 \rhs \lstinline @trait@395 \rhs \lstinline @dtype@396 \rhs \lstinline @ftype@397 \rhs \lstinline @otype@525 \rhs \lstinline$forall$ 526 \rhs \lstinline$lvalue$ 527 \rhs \lstinline$trait$ 528 \rhs \lstinline$dtype$ 529 \rhs \lstinline$ftype$ 530 \rhs \lstinline$type$ 398 531 \end{syntax} 399 532 … … 402 535 403 536 \CFA allows operator \Index{overloading} by associating operators with special function identifiers. 404 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.537 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. 405 538 Programmers can use these identifiers to declare functions and objects that implement operators and constants for their own types. 406 539 … … 411 544 \begin{syntax} 412 545 \oldlhs{identifier} 413 \rhs \lstinline @0@414 \rhs \lstinline @1@546 \rhs \lstinline$0$ 547 \rhs \lstinline$1$ 415 548 \end{syntax} 416 549 417 \index{constant identifiers}\index{identifiers!for constants} The tokens ``\lstinline @0@''\impl{0} and ``\lstinline@1@''\impl{1} are identifiers.550 \index{constant identifiers}\index{identifiers!for constants} The tokens ``\lstinline$0$''\impl{0} and ``\lstinline$1$''\impl{1} are identifiers. 418 551 No other tokens defined by the rules for integer constants are considered to be identifiers. 419 552 \begin{rationale} 420 Why ``\lstinline @0@'' and ``\lstinline@1@''? Those integers have special status in C.553 Why ``\lstinline$0$'' and ``\lstinline$1$''? Those integers have special status in C. 421 554 All scalar types can be incremented and decremented, which is defined in terms of adding or subtracting 1. 422 The operations ``\lstinline @&&@'', ``\lstinline@||@'', and ``\lstinline@!@'' can be applied to any scalar arguments, and are defined in terms of comparison against 0.555 The operations ``\lstinline$&&$'', ``\lstinline$||$'', and ``\lstinline$!$'' can be applied to any scalar arguments, and are defined in terms of comparison against 0. 423 556 A \nonterm{constant-expression} that evaluates to 0 is effectively compatible with every pointer type. 424 557 425 558 In C, the integer constants 0 and 1 suffice because the integer promotion rules can convert them to any arithmetic type, and the rules for pointer expressions treat constant expressions evaluating to 0 as a special case. 426 559 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. 427 Defining special constants for a user-defined type is more efficient than defining a conversion to the type from \lstinline @_Bool@.428 429 Why \emph{just} ``\lstinline @0@'' and ``\lstinline@1@''? Why not other integers? No other integers have special status in C.430 A facility that let programmers declare specific constants---``\lstinline @const Rational 12@'', for instance---would not be much of an improvement.560 Defining special constants for a user-defined type is more efficient than defining a conversion to the type from \lstinline$_Bool$. 561 562 Why \emph{just} ``\lstinline$0$'' and ``\lstinline$1$''? Why not other integers? No other integers have special status in C. 563 A facility that let programmers declare specific constants---``\lstinline$const Rational 12$'', for instance---would not be much of an improvement. 431 564 Some facility for defining the creation of values of programmer-defined types from arbitrary integer tokens would be needed. 432 565 The complexity of such a feature doesn't seem worth the gain. … … 444 577 \begin{tabular}[t]{ll} 445 578 %identifier & operation \\ \hline 446 \lstinline @?[?]@& subscripting \impl{?[?]}\\447 \lstinline @?()@& function call \impl{?()}\\448 \lstinline @?++@& postfix increment \impl{?++}\\449 \lstinline @?--@& postfix decrement \impl{?--}\\450 \lstinline @++?@& prefix increment \impl{++?}\\451 \lstinline @--?@& prefix decrement \impl{--?}\\452 \lstinline @*?@& dereference \impl{*?}\\453 \lstinline @+?@& unary plus \impl{+?}\\454 \lstinline @-?@& arithmetic negation \impl{-?}\\455 \lstinline @~?@& bitwise negation \impl{~?}\\456 \lstinline @!?@& logical complement \impl{"!?}\\457 \lstinline @?*?@& multiplication \impl{?*?}\\458 \lstinline @?/?@& division \impl{?/?}\\579 \lstinline$?[?]$ & subscripting \impl{?[?]}\\ 580 \lstinline$?()$ & function call \impl{?()}\\ 581 \lstinline$?++$ & postfix increment \impl{?++}\\ 582 \lstinline$?--$ & postfix decrement \impl{?--}\\ 583 \lstinline$++?$ & prefix increment \impl{++?}\\ 584 \lstinline$--?$ & prefix decrement \impl{--?}\\ 585 \lstinline$*?$ & dereference \impl{*?}\\ 586 \lstinline$+?$ & unary plus \impl{+?}\\ 587 \lstinline$-?$ & arithmetic negation \impl{-?}\\ 588 \lstinline$~?$ & bitwise negation \impl{~?}\\ 589 \lstinline$!?$ & logical complement \impl{"!?}\\ 590 \lstinline$?*?$ & multiplication \impl{?*?}\\ 591 \lstinline$?/?$ & division \impl{?/?}\\ 459 592 \end{tabular}\hfil 460 593 \begin{tabular}[t]{ll} 461 594 %identifier & operation \\ \hline 462 \lstinline @?%?@& remainder \impl{?%?}\\463 \lstinline @?+?@& addition \impl{?+?}\\464 \lstinline @?-?@& subtraction \impl{?-?}\\465 \lstinline @?<<?@& left shift \impl{?<<?}\\466 \lstinline @?>>?@& right shift \impl{?>>?}\\467 \lstinline @?<?@& less than \impl{?<?}\\468 \lstinline @?<=?@& less than or equal \impl{?<=?}\\469 \lstinline @?>=?@& greater than or equal \impl{?>=?}\\470 \lstinline @?>?@& greater than \impl{?>?}\\471 \lstinline @?==?@& equality \impl{?==?}\\472 \lstinline @?!=?@& inequality \impl{?"!=?}\\473 \lstinline @?&?@& bitwise AND \impl{?&?}\\595 \lstinline$?%?$ & remainder \impl{?%?}\\ 596 \lstinline$?+?$ & addition \impl{?+?}\\ 597 \lstinline$?-?$ & subtraction \impl{?-?}\\ 598 \lstinline$?<<?$ & left shift \impl{?<<?}\\ 599 \lstinline$?>>?$ & right shift \impl{?>>?}\\ 600 \lstinline$?<?$ & less than \impl{?<?}\\ 601 \lstinline$?<=?$ & less than or equal \impl{?<=?}\\ 602 \lstinline$?>=?$ & greater than or equal \impl{?>=?}\\ 603 \lstinline$?>?$ & greater than \impl{?>?}\\ 604 \lstinline$?==?$ & equality \impl{?==?}\\ 605 \lstinline$?!=?$ & inequality \impl{?"!=?}\\ 606 \lstinline$?&?$ & bitwise AND \impl{?&?}\\ 474 607 \end{tabular}\hfil 475 608 \begin{tabular}[t]{ll} 476 609 %identifier & operation \\ \hline 477 \lstinline @?^?@& exclusive OR \impl{?^?}\\478 \lstinline @?|?@& inclusive OR \impl{?"|?}\\479 \lstinline @?=?@& simple assignment \impl{?=?}\\480 \lstinline @?*=?@& multiplication assignment \impl{?*=?}\\481 \lstinline @?/=?@& division assignment \impl{?/=?}\\482 \lstinline @?%=?@& remainder assignment \impl{?%=?}\\483 \lstinline @?+=?@& addition assignment \impl{?+=?}\\484 \lstinline @?-=?@& subtraction assignment \impl{?-=?}\\485 \lstinline @?<<=?@& left-shift assignment \impl{?<<=?}\\486 \lstinline @?>>=?@& right-shift assignment \impl{?>>=?}\\487 \lstinline @?&=?@& bitwise AND assignment \impl{?&=?}\\488 \lstinline @?^=?@& exclusive OR assignment \impl{?^=?}\\489 \lstinline @?|=?@& inclusive OR assignment \impl{?"|=?}\\610 \lstinline$?^?$ & exclusive OR \impl{?^?}\\ 611 \lstinline$?|?$ & inclusive OR \impl{?"|?}\\ 612 \lstinline$?=?$ & simple assignment \impl{?=?}\\ 613 \lstinline$?*=?$ & multiplication assignment \impl{?*=?}\\ 614 \lstinline$?/=?$ & division assignment \impl{?/=?}\\ 615 \lstinline$?%=?$ & remainder assignment \impl{?%=?}\\ 616 \lstinline$?+=?$ & addition assignment \impl{?+=?}\\ 617 \lstinline$?-=?$ & subtraction assignment \impl{?-=?}\\ 618 \lstinline$?<<=?$ & left-shift assignment \impl{?<<=?}\\ 619 \lstinline$?>>=?$ & right-shift assignment \impl{?>>=?}\\ 620 \lstinline$?&=?$ & bitwise AND assignment \impl{?&=?}\\ 621 \lstinline$?^=?$ & exclusive OR assignment \impl{?^=?}\\ 622 \lstinline$?|=?$ & inclusive OR assignment \impl{?"|=?}\\ 490 623 \end{tabular} 491 624 \hfil … … 502 635 503 636 \begin{rationale} 504 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 a505 \CFA compiler detects a syntax error because it treats ``\lstinline @?--@'' as an identifier, not as the two tokens ``\lstinline@?@'' and ``\lstinline@--@''.637 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 638 \CFA compiler detects a syntax error because it treats ``\lstinline$?--$'' as an identifier, not as the two tokens ``\lstinline$?$'' and ``\lstinline$--$''. 506 639 \end{rationale} 507 640 … … 510 643 \begin{itemize} 511 644 \item 512 The logical operators ``\lstinline @&&@'' and ``\lstinline@||@'', and the conditional operator513 ``\lstinline @?:@''.645 The logical operators ``\lstinline$&&$'' and ``\lstinline$||$'', and the conditional operator 646 ``\lstinline$?:$''. 514 647 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. 515 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.648 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. 516 649 517 650 \item … … 522 655 \item 523 656 The ``address of'' operator. 524 It would seem useful to define a unary ``\lstinline @&@'' operator that returns values of some programmer-defined pointer-like type.657 It would seem useful to define a unary ``\lstinline$&$'' operator that returns values of some programmer-defined pointer-like type. 525 658 The problem lies with the type of the operator. 526 Consider the expression ``\lstinline @p = &x@'', where \lstinline@x@is of type527 \lstinline @T@ and \lstinline@p@ has the programmer-defined type \lstinline@T_ptr@.528 The expression might be treated as a call to the unary function ``\lstinline @&?@''.529 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.530 Hence the parameter must have type \lstinline @T *@.531 But then the expression must be rewritten as ``\lstinline @p = &?( &x )@''659 Consider the expression ``\lstinline$p = &x$'', where \lstinline$x$ is of type 660 \lstinline$T$ and \lstinline$p$ has the programmer-defined type \lstinline$T_ptr$. 661 The expression might be treated as a call to the unary function ``\lstinline$&?$''. 662 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. 663 Hence the parameter must have type \lstinline$T *$. 664 But then the expression must be rewritten as ``\lstinline$p = &?( &x )$'' 532 665 ---which doesn't seem like progress! 533 666 534 667 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''. 535 It seems simpler to define a conversion function from \lstinline @T *@ to \lstinline@T_ptr@.536 537 \item 538 The \lstinline @sizeof@operator.668 It seems simpler to define a conversion function from \lstinline$T *$ to \lstinline$T_ptr$. 669 670 \item 671 The \lstinline$sizeof$ operator. 539 672 It is already defined for every object type, and intimately tied into the language's storage allocation model. 540 673 Redefining it seems pointless. 541 674 542 675 \item 543 The ``member of'' operators ``\lstinline @.@'' and ``\lstinline@->@''.676 The ``member of'' operators ``\lstinline$.$'' and ``\lstinline$->$''. 544 677 These are not really infix operators, since their right ``operand'' is not a value or object. 545 678 … … 578 711 The ``fewest unsafe conversions'' rule ensures that the usual conversions are done, if possible. 579 712 The ``lowest total expression cost'' rule chooses the proper common type. 580 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@.713 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$. 581 714 582 715 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. 583 716 It also gives preference to monomorphic values (such as the 584 \lstinline @int@ \lstinline@0@) over polymorphic values (such as the \Index{null pointer}585 \lstinline @0@\use{0}).717 \lstinline$int$ \lstinline$0$) over polymorphic values (such as the \Index{null pointer} 718 \lstinline$0$\use{0}). 586 719 However, interpretations that call polymorphic functions are preferred to interpretations that perform unsafe conversions, because those conversions potentially lose accuracy or violate strong typing. 587 720 588 721 There are two notable differences between \CFA's overload resolution rules and the rules for 589 {\CC} defined in \cite{ C++}.722 {\CC} defined in \cite{c++}. 590 723 First, the result type of a function plays a role. 591 724 In {\CC}, a function call must be completely resolved based on the arguments to the call in most circumstances. … … 603 736 \begin{rationale} 604 737 Predefined functions and constants have internal linkage because that simplifies optimization in traditional compile-and-link environments. 605 For instance, ``\lstinline @an_int + an_int@'' is equivalent to ``\lstinline@?+?(an_int, an_int)@''.738 For instance, ``\lstinline$an_int + an_int$'' is equivalent to ``\lstinline$?+?(an_int, an_int)$''. 606 739 If integer addition has not been redefined in the current scope, a compiler can generate code to perform the addition directly. 607 740 If predefined functions had external linkage, this optimization would be difficult. … … 629 762 \rhs \nonterm{constant} 630 763 \rhs \nonterm{string-literal} 631 \rhs \lstinline @(@ \nonterm{expression} \lstinline@)@764 \rhs \lstinline$($ \nonterm{expression} \lstinline$)$ 632 765 \rhs \nonterm{generic-selection} 633 766 \end{syntax} … … 635 768 \predefined 636 769 \begin{lstlisting} 637 const int 1; §\use{1}§638 const int 0; §\use{0}§770 const int 1;@\use{1}@ 771 const int 0;@\use{0}@ 639 772 forall( dtype DT ) DT * const 0; 640 773 forall( ftype FT ) FT * const 0; … … 645 778 646 779 A \nonterm{constant} or \nonterm{string-literal} has one valid interpretation, which has the type and value defined by {\c11}. 647 The predefined integer identifiers ``\lstinline @1@'' and ``\lstinline@0@'' have the integer values 1 and 0, respectively.648 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.780 The predefined integer identifiers ``\lstinline$1$'' and ``\lstinline$0$'' have the integer values 1 and 0, respectively. 781 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. 649 782 650 783 A parenthesised expression has the same interpretations as the contained \nonterm{expression}. 651 784 652 785 \examples 653 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 *@.786 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 *$. 654 787 In each case, the null pointer conversion is better\index{best valid interpretations} than the unsafe conversion of the integer 655 \lstinline @0@to a pointer.788 \lstinline$0$ to a pointer. 656 789 657 790 \begin{rationale} … … 659 792 660 793 \CFA does not have C's concept of ``null pointer constants'', which are not typed values but special strings of tokens. 661 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.794 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. 662 795 Similarly, 663 ``\lstinline @(void *)0@ is an expression of type \lstinline@(void *)@whose value is a null pointer, and it also is a null pointer constant.664 However, in C, ``\lstinline @(void *)(void *)0@'' is796 ``\lstinline$(void *)0$ is an expression of type \lstinline$(void *)$ whose value is a null pointer, and it also is a null pointer constant. 797 However, in C, ``\lstinline$(void *)(void *)0$'' is 665 798 \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. 666 799 … … 669 802 \begin{lstlisting} 670 803 forall( dtype DT ) DT * const 0; 671 \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.804 \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. 672 805 The only such value is the null pointer. 673 806 Therefore the type \emph{alone} is enough to identify a null pointer. … … 679 812 680 813 \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. 681 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.814 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. 682 815 683 816 \semantics … … 690 823 \lhs{postfix-expression} 691 824 \rhs \nonterm{primary-expression} 692 \rhs \nonterm{postfix-expression} \lstinline @[@ \nonterm{expression} \lstinline@]@693 \rhs \nonterm{postfix-expression} \lstinline @(@694 \nonterm{argument-expression-list}\opt \lstinline @)@695 \rhs \nonterm{postfix-expression} \lstinline @.@\nonterm{identifier}696 \rhs \nonterm{postfix-expression} \lstinline @->@\nonterm{identifier}697 \rhs \nonterm{postfix-expression} \lstinline @++@698 \rhs \nonterm{postfix-expression} \lstinline @--@699 \rhs \lstinline @(@ \nonterm{type-name} \lstinline@)@ \lstinline@{@ \nonterm{initializer-list} \lstinline@}@700 \rhs \lstinline @(@ \nonterm{type-name} \lstinline@)@ \lstinline@{@ \nonterm{initializer-list} \lstinline@,@ \lstinline@}@825 \rhs \nonterm{postfix-expression} \lstinline$[$ \nonterm{expression} \lstinline$]$ 826 \rhs \nonterm{postfix-expression} \lstinline$($ 827 \nonterm{argument-expression-list}\opt \lstinline$)$ 828 \rhs \nonterm{postfix-expression} \lstinline$.$ \nonterm{identifier} 829 \rhs \nonterm{postfix-expression} \lstinline$->$ \nonterm{identifier} 830 \rhs \nonterm{postfix-expression} \lstinline$++$ 831 \rhs \nonterm{postfix-expression} \lstinline$--$ 832 \rhs \lstinline$($ \nonterm{type-name} \lstinline$)$ \lstinline${$ \nonterm{initializer-list} \lstinline$}$ 833 \rhs \lstinline$($ \nonterm{type-name} \lstinline$)$ \lstinline${$ \nonterm{initializer-list} \lstinline$,$ \lstinline$}$ 701 834 \lhs{argument-expression-list} 702 835 \rhs \nonterm{assignment-expression} 703 \rhs \nonterm{argument-expression-list} \lstinline @,@836 \rhs \nonterm{argument-expression-list} \lstinline$,$ 704 837 \nonterm{assignment-expression} 705 838 \end{syntax} … … 707 840 \rewriterules 708 841 \begin{lstlisting} 709 a[b] §\rewrite§ ?[?]( b, a ) // if a has integer type§\use{?[?]}§710 a[b] §\rewrite§?[?]( a, b ) // otherwise711 a( §\emph{arguments}§ ) §\rewrite§ ?()( a, §\emph{arguments}§ )§\use{?()}§712 a++ §\rewrite§ ?++(&( a ))§\use{?++}§713 a-- §\rewrite§ ?--(&( a ))§\use{?--}§842 a[b] @\rewrite@ ?[?]( b, a ) // if a has integer type@\use{?[?]}@ 843 a[b] @\rewrite@ ?[?]( a, b ) // otherwise 844 a( @\emph{arguments}@ ) @\rewrite@ ?()( a, @\emph{arguments}@ )@\use{?()}@ 845 a++ @\rewrite@ ?++(&( a ))@\use{?++}@ 846 a-- @\rewrite@ ?--(&( a ))@\use{?--}@ 714 847 \end{lstlisting} 715 848 … … 719 852 \predefined 720 853 \begin{lstlisting} 721 forall( otype T ) lvalue T ?[?]( T *, ptrdiff_t ); §\use{ptrdiff_t}§854 forall( otype T ) lvalue T ?[?]( T *, ptrdiff_t );@\use{ptrdiff_t}@ 722 855 forall( otype T ) lvalue _Atomic T ?[?]( _Atomic T *, ptrdiff_t ); 723 856 forall( otype T ) lvalue const T ?[?]( const T *, ptrdiff_t ); … … 739 872 The interpretations of subscript expressions are the interpretations of the corresponding function call expressions. 740 873 \begin{rationale} 741 C defines subscripting as pointer arithmetic in a way that makes \lstinline @a[i]@and742 \lstinline @i[a]@ equivalent. \CFA provides the equivalence through a rewrite rule to reduce the number of overloadings of \lstinline@?[?]@.874 C defines subscripting as pointer arithmetic in a way that makes \lstinline$a[i]$ and 875 \lstinline$i[a]$ equivalent. \CFA provides the equivalence through a rewrite rule to reduce the number of overloadings of \lstinline$?[?]$. 743 876 744 877 Subscript expressions are rewritten as function calls that pass the first parameter by value. 745 878 This is somewhat unfortunate, since array-like types tend to be large. 746 The alternative is to use the rewrite rule ``\lstinline @a[b]@ \rewrite \lstinline@?[?](&(a), b)@''.747 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.879 The alternative is to use the rewrite rule ``\lstinline$a[b]$ \rewrite \lstinline$?[?](&(a), b)$''. 880 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. 748 881 749 882 The repetitive form of the predefined identifiers shows up a deficiency\index{deficiencies!pointers … … 760 893 \nonterm{postfix-expression} in a function call may have some interpretations that are function designators and some that are not. 761 894 762 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 @?()@''.895 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$?()$''. 763 896 The valid interpretations of the rewritten expression are determined in the manner described below. 764 897 … … 768 901 \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 769 902 \item if the function designator's type does not include a prototype or if the argument corresponds to 770 ``\lstinline @...@'' in a prototype, a \Index{default argument promotion} is applied to it.903 ``\lstinline$...$'' in a prototype, a \Index{default argument promotion} is applied to it. 771 904 \end{itemize} 772 905 The type of the valid interpretation is the return type of the function designator. … … 776 909 \begin{itemize} 777 910 \item 778 If the declaration of the implicit parameter uses \Index{type-class} \lstinline @type@\use{type}, the implicit argument must be an object type;779 if it uses \lstinline @dtype@, the implicit argument must be an object type or an incomplete type;780 and if it uses \lstinline @ftype@, the implicit argument must be a function type.911 If the declaration of the implicit parameter uses \Index{type-class} \lstinline$type$\use{type}, the implicit argument must be an object type; 912 if it uses \lstinline$dtype$, the implicit argument must be an object type or an incomplete type; 913 and if it uses \lstinline$ftype$, the implicit argument must be a function type. 781 914 782 915 \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. … … 797 930 \begin{rationale} 798 931 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}. 799 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@.932 For instance, it should be possible to replace a function ``\lstinline$int f( int );$'' with ``\lstinline$forall( otype T ) T f( T );$'' without affecting any calls of \lstinline$f$. 800 933 801 934 \CFA\index{deficiencies!generalizability} does not fully possess this property, because … … 811 944 f = g( d, f ); // (3) (unsafe conversion to float) 812 945 \end{lstlisting} 813 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 to814 \lstinline @double@, and the result would be a \lstinline@double@.815 816 Another example is the function ``\lstinline @void h( int *);@''.946 If \lstinline$g$ was replaced by ``\lstinline$forall( otype T ) T g( T, T );$'', the first and second calls would be unaffected, but the third would change: \lstinline$f$ would be converted to 947 \lstinline$double$, and the result would be a \lstinline$double$. 948 949 Another example is the function ``\lstinline$void h( int *);$''. 817 950 This function can be passed a 818 \lstinline @void *@ argument, but the generalization ``\lstinline@forall( otype T ) void h( T *);@'' can not.819 In this case, \lstinline @void@ is not a valid value for \lstinline@T@because it is not an object type.820 If unsafe conversions were allowed, \lstinline @T@could be inferred to be \emph{any} object type, which is undesirable.951 \lstinline$void *$ argument, but the generalization ``\lstinline$forall( otype T ) void h( T *);$'' can not. 952 In this case, \lstinline$void$ is not a valid value for \lstinline$T$ because it is not an object type. 953 If unsafe conversions were allowed, \lstinline$T$ could be inferred to be \emph{any} object type, which is undesirable. 821 954 \end{rationale} 822 955 823 956 \examples 824 A function called ``\lstinline @?()@'' might be part of a numerical differentiation package.957 A function called ``\lstinline$?()$'' might be part of a numerical differentiation package. 825 958 \begin{lstlisting} 826 959 extern otype Derivative; … … 833 966 d = sin_dx( 12.9 ); 834 967 \end{lstlisting} 835 Here, the only interpretation of \lstinline @sin_dx@ is as an object of type \lstinline@Derivative@.836 For that interpretation, the function call is treated as ``\lstinline @?()( sin_dx, 12.9 )@''.968 Here, the only interpretation of \lstinline$sin_dx$ is as an object of type \lstinline$Derivative$. 969 For that interpretation, the function call is treated as ``\lstinline$?()( sin_dx, 12.9 )$''. 837 970 \begin{lstlisting} 838 971 int f( long ); // (1) … … 841 974 int i = f( 5 ); // calls (1) 842 975 \end{lstlisting} 843 Function (1) provides a valid interpretation of ``\lstinline @f( 5 )@'', using an implicit \lstinline@int@ to \lstinline@long@conversion.844 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.976 Function (1) provides a valid interpretation of ``\lstinline$f( 5 )$'', using an implicit \lstinline$int$ to \lstinline$long$ conversion. 977 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. 845 978 846 979 \begin{lstlisting} … … 848 981 double d = h( 1.5 ); 849 982 \end{lstlisting} 850 ``\lstinline @1.5@'' is a \lstinline@double@ constant, so \lstinline@T@is inferred to be851 \lstinline @double@, and the result of the function call is a \lstinline@double@.983 ``\lstinline$1.5$'' is a \lstinline$double$ constant, so \lstinline$T$ is inferred to be 984 \lstinline$double$, and the result of the function call is a \lstinline$double$. 852 985 853 986 \begin{lstlisting} … … 864 997 g( i, p ); // calls (4) 865 998 \end{lstlisting} 866 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).999 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). 867 1000 868 1001 For the second call, (7) is again discarded. 869 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.1002 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. 870 1003 871 1004 The third call has valid interpretations for all of the functions; … … 876 1009 forall( otype T ) T min( T, T ); 877 1010 double max( double, double ); 878 trait min_max( T ) { §\impl{min_max}§1011 trait min_max( T ) {@\impl{min_max}@ 879 1012 T min( T, T ); 880 1013 T max( T, T ); … … 883 1016 shuffle( 9, 10 ); 884 1017 \end{lstlisting} 885 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@, and886 \lstinline @min@ must be specialized with \lstinline@T@ bound to \lstinline@double@.1018 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 1019 \lstinline$min$ must be specialized with \lstinline$T$ bound to \lstinline$double$. 887 1020 \begin{lstlisting} 888 1021 extern void q( int ); // (8) … … 892 1025 r( 0 ); 893 1026 \end{lstlisting} 894 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).895 The former is chosen because the \lstinline @int@ \lstinline@0@is \Index{less polymorphic}.896 For the same reason, \lstinline @int@ \lstinline@0@ is passed to \lstinline@r()@, even though it has \emph{no} declared parameter types.1027 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). 1028 The former is chosen because the \lstinline$int$ \lstinline$0$ is \Index{less polymorphic}. 1029 For the same reason, \lstinline$int$ \lstinline$0$ is passed to \lstinline$r()$, even though it has \emph{no} declared parameter types. 897 1030 898 1031 899 1032 \subsubsection{Structure and union members} 900 1033 901 \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@.902 If two or more interpretations of \lstinline @s@have members named903 \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.904 If an interpretation of \lstinline @s@ has a member \lstinline@m@whose type is not compatible with any other905 \lstinline @s@'s \lstinline@m@, then the expression has an interpretation with the member's type.1034 \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$. 1035 If two or more interpretations of \lstinline$s$ have members named 1036 \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. 1037 If an interpretation of \lstinline$s$ has a member \lstinline$m$ whose type is not compatible with any other 1038 \lstinline$s$'s \lstinline$m$, then the expression has an interpretation with the member's type. 906 1039 The expression has no other interpretations. 907 1040 908 The expression ``\lstinline@p->m@'' has the same interpretations as the expression ``\lstinline@(*p).m@''. 1041 The expression ``\lstinline$p->m$'' has the same interpretations as the expression 1042 ``\lstinline$(*p).m$''. 909 1043 910 1044 … … 1001 1135 * ?--( _Atomic const restrict volatile T * _Atomic restrict volatile * ); 1002 1136 \end{lstlisting} 1003 For every extended integer type \lstinline @X@there exist1137 For every extended integer type \lstinline$X$ there exist 1004 1138 % Don't use predefined: keep this out of prelude.cf. 1005 1139 \begin{lstlisting} … … 1007 1141 ?--( volatile X * ), ?--( _Atomic volatile X * ); 1008 1142 \end{lstlisting} 1009 For every complete enumerated type \lstinline @E@there exist1143 For every complete enumerated type \lstinline$E$ there exist 1010 1144 % Don't use predefined: keep this out of prelude.cf. 1011 1145 \begin{lstlisting} … … 1015 1149 1016 1150 \begin{rationale} 1017 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.1151 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. 1018 1152 This partially enforces the C semantic rule that such operands must be \emph{modifiable} lvalues. 1019 1153 \end{rationale} … … 1021 1155 \begin{rationale} 1022 1156 In C, a semantic rule requires that pointer operands of increment and decrement be pointers to object types. 1023 Hence, \lstinline @void *@objects cannot be incremented.1024 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@.1157 Hence, \lstinline$void *$ objects cannot be incremented. 1158 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$. 1025 1159 \end{rationale} 1026 1160 1027 1161 \semantics 1028 1162 First, each interpretation of the operand of an increment or decrement expression is considered separately. 1029 For each interpretation that is a bit-field or is declared with the \Indexc{register}\index{storage-class specifier}, the expression has one valid interpretation, with the type of the operand, and the expression is ambiguous if the operand is. 1163 For each interpretation that is a bit-field or is declared with the 1164 \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. 1030 1165 1031 1166 For the remaining interpretations, the expression is rewritten, and the interpretations of the expression are the interpretations of the corresponding function call. … … 1040 1175 \end{lstlisting} 1041 1176 \begin{sloppypar} 1042 Since \lstinline@&(vs)@ has type \lstinline@volatile short int *@, the best valid interpretation of 1043 \lstinline@vs++@ calls the \lstinline@?++@ function with the \lstinline@volatile short *@ parameter. 1044 \lstinline@s++@ does the same, applying the safe conversion from \lstinline@short int *@ to \lstinline@volatile short int *@. 1045 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. 1177 Since \lstinline$&(vs)$ has type \lstinline$volatile short int *$, the best valid interpretation of 1178 \lstinline$vs++$ calls the \lstinline$?++$ function with the \lstinline$volatile short *$ parameter. 1179 \lstinline$s++$ does the same, applying the safe conversion from \lstinline$short int *$ to 1180 \lstinline$volatile short int *$. 1181 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. 1046 1182 \end{sloppypar} 1047 1183 1048 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.1049 1050 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.1184 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. 1185 1186 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. 1051 1187 \begin{lstlisting} 1052 1188 char * const restrict volatile * restrict volatile pqpc; … … 1055 1191 ppc++; 1056 1192 \end{lstlisting} 1057 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 *@.1058 1059 \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@.1193 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 *$. 1194 1195 \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$. 1060 1196 1061 1197 \begin{rationale} … … 1071 1207 \begin{enumerate} 1072 1208 \item 1073 ``\lstinline @char * p; p++;@''.1074 The argument to \lstinline @?++@ has type \lstinline@char * *@, and the result has type \lstinline@char *@.1075 The expression would be valid if \lstinline @?++@were declared by1209 ``\lstinline$char * p; p++;$''. 1210 The argument to \lstinline$?++$ has type \lstinline$char * *$, and the result has type \lstinline$char *$. 1211 The expression would be valid if \lstinline$?++$ were declared by 1076 1212 \begin{lstlisting} 1077 1213 forall( otype T ) T * ?++( T * * ); 1078 \end{lstlisting} with \lstinline @T@ inferred to be \lstinline@char@.1079 1080 \item 1081 ``\lstinline @char *restrict volatile qp; qp++@''.1082 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.1214 \end{lstlisting} with \lstinline$T$ inferred to be \lstinline$char$. 1215 1216 \item 1217 ``\lstinline$char *restrict volatile qp; qp++$''. 1218 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. 1083 1219 Hence the actual predefined function is 1084 1220 \begin{lstlisting} 1085 1221 forall( otype T ) T * ?++( T * restrict volatile * ); 1086 \end{lstlisting} which also accepts a \lstinline @char * *@argument, because of the safe conversions that add1087 \lstinline @volatile@ and \lstinline@restrict@qualifiers. (The parameter is not const-qualified, so constant pointers cannot be incremented.)1088 1089 \item 1090 ``\lstinline @char *_Atomic ap; ap++@''.1091 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.1092 A separate overloading of \lstinline @?++@is required.1093 1094 \item 1095 ``\lstinline @char const volatile * pq; pq++@''.1222 \end{lstlisting} which also accepts a \lstinline$char * *$ argument, because of the safe conversions that add 1223 \lstinline$volatile$ and \lstinline$restrict$ qualifiers. (The parameter is not const-qualified, so constant pointers cannot be incremented.) 1224 1225 \item 1226 ``\lstinline$char *_Atomic ap; ap++$''. 1227 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. 1228 A separate overloading of \lstinline$?++$ is required. 1229 1230 \item 1231 ``\lstinline$char const volatile * pq; pq++$''. 1096 1232 Here the result has type 1097 \lstinline @char const volatile *@, so a new overloading is needed:1233 \lstinline$char const volatile *$, so a new overloading is needed: 1098 1234 \begin{lstlisting} 1099 1235 forall( otype T ) T const volatile * ?++( T const volatile *restrict volatile * ); … … 1102 1238 1103 1239 \item 1104 ``\lstinline @float *restrict * prp; prp++@''.1105 The \lstinline @restrict@ qualifier is handled just like \lstinline@const@ and \lstinline@volatile@in the previous case:1240 ``\lstinline$float *restrict * prp; prp++$''. 1241 The \lstinline$restrict$ qualifier is handled just like \lstinline$const$ and \lstinline$volatile$ in the previous case: 1106 1242 \begin{lstlisting} 1107 1243 forall( otype T ) T restrict * ?++( T restrict *restrict volatile * ); 1108 \end{lstlisting} with \lstinline @T@ inferred to be \lstinline@float *@.1109 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.1244 \end{lstlisting} with \lstinline$T$ inferred to be \lstinline$float *$. 1245 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. 1110 1246 \end{enumerate} 1111 1247 \end{rationale} … … 1123 1259 \lhs{unary-expression} 1124 1260 \rhs \nonterm{postfix-expression} 1125 \rhs \lstinline @++@\nonterm{unary-expression}1126 \rhs \lstinline @--@\nonterm{unary-expression}1261 \rhs \lstinline$++$ \nonterm{unary-expression} 1262 \rhs \lstinline$--$ \nonterm{unary-expression} 1127 1263 \rhs \nonterm{unary-operator} \nonterm{cast-expression} 1128 \rhs \lstinline @sizeof@\nonterm{unary-expression}1129 \rhs \lstinline @sizeof@ \lstinline@(@ \nonterm{type-name} \lstinline@)@1130 \lhs{unary-operator} one of \rhs \lstinline @&@ \lstinline@*@ \lstinline@+@ \lstinline@-@ \lstinline@~@ \lstinline@!@1264 \rhs \lstinline$sizeof$ \nonterm{unary-expression} 1265 \rhs \lstinline$sizeof$ \lstinline$($ \nonterm{type-name} \lstinline$)$ 1266 \lhs{unary-operator} one of \rhs \lstinline$&$ \lstinline$*$ \lstinline$+$ \lstinline$-$ \lstinline$~$ \lstinline$!$ 1131 1267 \end{syntax} 1132 1268 1133 1269 \rewriterules 1134 1270 \begin{lstlisting} 1135 *a §\rewrite§ *?( a ) §\use{*?}§1136 +a §\rewrite§ +?( a ) §\use{+?}§1137 -a §\rewrite§ -?( a ) §\use{-?}§1138 ~a §\rewrite§ ~?( a ) §\use{~?}§1139 !a §\rewrite§ !?( a ) §\use{"!?}§1140 ++a §\rewrite§ ++?(&( a )) §\use{++?}§1141 --a §\rewrite§ --?(&( a )) §\use{--?}§1271 *a @\rewrite@ *?( a ) @\use{*?}@ 1272 +a @\rewrite@ +?( a ) @\use{+?}@ 1273 -a @\rewrite@ -?( a ) @\use{-?}@ 1274 ~a @\rewrite@ ~?( a ) @\use{~?}@ 1275 !a @\rewrite@ !?( a ) @\use{"!?}@ 1276 ++a @\rewrite@ ++?(&( a )) @\use{++?}@ 1277 --a @\rewrite@ --?(&( a )) @\use{--?}@ 1142 1278 \end{lstlisting} 1143 1279 … … 1235 1371 * --?( _Atomic const restrict volatile T * _Atomic restrict volatile * ); 1236 1372 \end{lstlisting} 1237 For every extended integer type \lstinline @X@there exist1373 For every extended integer type \lstinline$X$ there exist 1238 1374 % Don't use predefined: keep this out of prelude.cf. 1239 1375 \begin{lstlisting} … … 1243 1379 --?( _Atomic volatile X * ); 1244 1380 \end{lstlisting} 1245 For every complete enumerated type \lstinline @E@there exist1381 For every complete enumerated type \lstinline$E$ there exist 1246 1382 % Don't use predefined: keep this out of prelude.cf. 1247 1383 \begin{lstlisting} … … 1280 1416 1281 1417 \constraints 1282 The operand of the unary ``\lstinline @&@'' operator shall have exactly one1418 The operand of the unary ``\lstinline$&$'' operator shall have exactly one 1283 1419 \Index{interpretation}\index{ambiguous interpretation}, which shall be unambiguous. 1284 1420 1285 1421 \semantics 1286 The ``\lstinline @&@'' expression has one interpretation which is of type \lstinline@T *@, where1287 \lstinline @T@is the type of the operand.1422 The ``\lstinline$&$'' expression has one interpretation which is of type \lstinline$T *$, where 1423 \lstinline$T$ is the type of the operand. 1288 1424 1289 1425 The interpretations of an indirection expression are the interpretations of the corresponding function call. … … 1314 1450 forall( ftype FT ) int !?( FT * ); 1315 1451 \end{lstlisting} 1316 For every extended integer type \lstinline @X@ with \Index{integer conversion rank} greater than the rank of \lstinline@int@there exist1452 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 1317 1453 % Don't use predefined: keep this out of prelude.cf. 1318 1454 \begin{lstlisting} … … 1327 1463 \begin{lstlisting} 1328 1464 long int li; 1329 void eat_double( double ); §\use{eat_double}§1330 eat_double(-li ); // §\rewrite§eat_double( -?( li ) );1331 \end{lstlisting} 1332 The valid interpretations of ``\lstinline @-li@'' (assuming no extended integer types exist) are1465 void eat_double( double );@\use{eat_double}@ 1466 eat_double(-li ); // @\rewrite@ eat_double( -?( li ) ); 1467 \end{lstlisting} 1468 The valid interpretations of ``\lstinline$-li$'' (assuming no extended integer types exist) are 1333 1469 \begin{center} 1334 1470 \begin{tabular}{llc} interpretation & result type & expression conversion cost \\ 1335 1471 \hline 1336 \lstinline @-?( (int)li )@ & \lstinline@int@& (unsafe) \\1337 \lstinline @-?( (unsigned)li)@ & \lstinline@unsigned int@& (unsafe) \\1338 \lstinline @-?( (long)li)@ & \lstinline@long@& 0 \\1339 \lstinline @-?( (long unsigned int)li)@ & \lstinline@long unsigned int@& 1 \\1340 \lstinline @-?( (long long int)li)@ & \lstinline@long long int@& 2 \\1341 \lstinline @-?( (long long unsigned int)li)@ & \lstinline@long long unsigned int@& 3 \\1342 \lstinline @-?( (float)li)@ & \lstinline@float@& 4 \\1343 \lstinline @-?( (double)li)@ & \lstinline@double@& 5 \\1344 \lstinline @-?( (long double)li)@ & \lstinline@long double@& 6 \\1345 \lstinline @-?( (_Complex float)li)@ & \lstinline@float@& (unsafe) \\1346 \lstinline @-?( (_Complex double)li)@ & \lstinline@double@& (unsafe) \\1347 \lstinline @-?( (_Complex long double)li)@ & \lstinline@long double@& (unsafe) \\1472 \lstinline$-?( (int)li )$ & \lstinline$int$ & (unsafe) \\ 1473 \lstinline$-?( (unsigned)li)$ & \lstinline$unsigned int$ & (unsafe) \\ 1474 \lstinline$-?( (long)li)$ & \lstinline$long$ & 0 \\ 1475 \lstinline$-?( (long unsigned int)li)$ & \lstinline$long unsigned int$ & 1 \\ 1476 \lstinline$-?( (long long int)li)$ & \lstinline$long long int$ & 2 \\ 1477 \lstinline$-?( (long long unsigned int)li)$ & \lstinline$long long unsigned int$& 3 \\ 1478 \lstinline$-?( (float)li)$ & \lstinline$float$ & 4 \\ 1479 \lstinline$-?( (double)li)$ & \lstinline$double$ & 5 \\ 1480 \lstinline$-?( (long double)li)$ & \lstinline$long double$ & 6 \\ 1481 \lstinline$-?( (_Complex float)li)$ & \lstinline$float$ & (unsafe) \\ 1482 \lstinline$-?( (_Complex double)li)$ & \lstinline$double$ & (unsafe) \\ 1483 \lstinline$-?( (_Complex long double)li)$ & \lstinline$long double$ & (unsafe) \\ 1348 1484 \end{tabular} 1349 1485 \end{center} 1350 The valid interpretations of the \lstinline @eat_double@call, with the cost of the argument conversion and the cost of the entire expression, are1486 The valid interpretations of the \lstinline$eat_double$ call, with the cost of the argument conversion and the cost of the entire expression, are 1351 1487 \begin{center} 1352 1488 \begin{tabular}{lcc} interpretation & argument cost & expression cost \\ 1353 1489 \hline 1354 \lstinline @eat_double( (double)-?( (int)li) )@& 7 & (unsafe) \\1355 \lstinline @eat_double( (double)-?( (unsigned)li) )@& 6 & (unsafe) \\1356 \lstinline @eat_double( (double)-?(li) )@& 5 & \(0+5=5\) \\1357 \lstinline @eat_double( (double)-?( (long unsigned int)li) )@& 4 & \(1+4=5\) \\1358 \lstinline @eat_double( (double)-?( (long long int)li) )@& 3 & \(2+3=5\) \\1359 \lstinline @eat_double( (double)-?( (long long unsigned int)li) )@& 2 & \(3+2=5\) \\1360 \lstinline @eat_double( (double)-?( (float)li) )@& 1 & \(4+1=5\) \\1361 \lstinline @eat_double( (double)-?( (double)li) )@& 0 & \(5+0=5\) \\1362 \lstinline @eat_double( (double)-?( (long double)li) )@& (unsafe) & (unsafe) \\1363 \lstinline @eat_double( (double)-?( (_Complex float)li) )@& (unsafe) & (unsafe) \\1364 \lstinline @eat_double( (double)-?( (_Complex double)li) )@& (unsafe) & (unsafe) \\1365 \lstinline @eat_double( (double)-?( (_Complex long double)li) )@& (unsafe) & (unsafe) \\1490 \lstinline$eat_double( (double)-?( (int)li) )$ & 7 & (unsafe) \\ 1491 \lstinline$eat_double( (double)-?( (unsigned)li) )$ & 6 & (unsafe) \\ 1492 \lstinline$eat_double( (double)-?(li) )$ & 5 & \(0+5=5\) \\ 1493 \lstinline$eat_double( (double)-?( (long unsigned int)li) )$ & 4 & \(1+4=5\) \\ 1494 \lstinline$eat_double( (double)-?( (long long int)li) )$ & 3 & \(2+3=5\) \\ 1495 \lstinline$eat_double( (double)-?( (long long unsigned int)li) )$& 2 & \(3+2=5\) \\ 1496 \lstinline$eat_double( (double)-?( (float)li) )$ & 1 & \(4+1=5\) \\ 1497 \lstinline$eat_double( (double)-?( (double)li) )$ & 0 & \(5+0=5\) \\ 1498 \lstinline$eat_double( (double)-?( (long double)li) )$ & (unsafe) & (unsafe) \\ 1499 \lstinline$eat_double( (double)-?( (_Complex float)li) )$ & (unsafe) & (unsafe) \\ 1500 \lstinline$eat_double( (double)-?( (_Complex double)li) )$ & (unsafe) & (unsafe) \\ 1501 \lstinline$eat_double( (double)-?( (_Complex long double)li) )$ & (unsafe) & (unsafe) \\ 1366 1502 \end{tabular} 1367 1503 \end{center} 1368 Each has result type \lstinline @void@, so the best must be selected.1504 Each has result type \lstinline$void$, so the best must be selected. 1369 1505 The interpretations involving unsafe conversions are discarded. 1370 1506 The remainder have equal expression conversion costs, so the 1371 1507 ``highest argument conversion cost'' rule is invoked, and the chosen interpretation is 1372 \lstinline @eat_double( (double)-?(li) )@.1373 1374 1375 \subsubsection [The sizeof and \_Alignof operators]{The \lstinline@sizeof@ and \lstinline@_Alignof@operators}1508 \lstinline$eat_double( (double)-?(li) )$. 1509 1510 1511 \subsubsection{The \lstinline$sizeof$ and \lstinline$_Alignof$ operators} 1376 1512 1377 1513 \constraints 1378 The operand of \lstinline@sizeof@ or \lstinline@_Alignof@ shall not be \lstinline@type@, \lstinline@dtype@, or \lstinline@ftype@. 1379 1380 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@. 1381 1382 When \lstinline@sizeof@ is applied to an identifier declared by a \nonterm{type-declaration} or a 1514 The operand of \lstinline$sizeof$ or \lstinline$_Alignof$ shall not be \lstinline$type$, 1515 \lstinline$dtype$, or \lstinline$ftype$. 1516 1517 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$. 1518 1519 When \lstinline$sizeof$ is applied to an identifier declared by a \nonterm{type-declaration} or a 1383 1520 \nonterm{type-parameter}, it yields the size in bytes of the type that implements the operand. 1384 1521 When the operand is an opaque type or an inferred type parameter\index{inferred parameter}, the expression is not a constant expression. 1385 1522 1386 When \lstinline @_Alignof@is applied to an identifier declared by a \nonterm{type-declaration} or a1523 When \lstinline$_Alignof$ is applied to an identifier declared by a \nonterm{type-declaration} or a 1387 1524 \nonterm{type-parameter}, it yields the alignment requirement of the type that implements the operand. 1388 1525 When the operand is an opaque type or an inferred type parameter\index{inferred parameter}, the expression is not a constant expression. … … 1391 1528 otype Pair = struct { int first, second; }; 1392 1529 size_t p_size = sizeof(Pair); // constant expression 1393 extern otype Rational; §\use{Rational}§1530 extern otype Rational;@\use{Rational}@ 1394 1531 size_t c_size = sizeof(Rational); // non-constant expression 1395 1532 forall(type T) T f(T p1, T p2) { … … 1398 1535 } 1399 1536 \end{lstlisting} 1400 ``\lstinline @sizeof Rational@'', although not statically known, is fixed.1401 Within \lstinline @f()@,1402 ``\lstinline @sizeof(T)@'' is fixed for each call of \lstinline@f()@, but may vary from call to call.1537 ``\lstinline$sizeof Rational$'', although not statically known, is fixed. 1538 Within \lstinline$f()$, 1539 ``\lstinline$sizeof(T)$'' is fixed for each call of \lstinline$f()$, but may vary from call to call. 1403 1540 \end{rationale} 1404 1541 … … 1409 1546 \lhs{cast-expression} 1410 1547 \rhs \nonterm{unary-expression} 1411 \rhs \lstinline @(@ \nonterm{type-name} \lstinline@)@\nonterm{cast-expression}1548 \rhs \lstinline$($ \nonterm{type-name} \lstinline$)$ \nonterm{cast-expression} 1412 1549 \end{syntax} 1413 1550 1414 1551 \constraints 1415 The \nonterm{type-name} in a \nonterm{cast-expression} shall not be \lstinline @type@,1416 \lstinline @dtype@, or \lstinline@ftype@.1552 The \nonterm{type-name} in a \nonterm{cast-expression} shall not be \lstinline$type$, 1553 \lstinline$dtype$, or \lstinline$ftype$. 1417 1554 1418 1555 \semantics 1419 1556 1420 In a \Index{cast expression} ``\lstinline @(@\nonterm{type-name}\lstinline@)e@'', if1421 \nonterm{type-name} is the type of an interpretation of \lstinline @e@, then that interpretation is the only interpretation of the cast expression;1422 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.1557 In a \Index{cast expression} ``\lstinline$($\nonterm{type-name}\lstinline$)e$'', if 1558 \nonterm{type-name} is the type of an interpretation of \lstinline$e$, then that interpretation is the only interpretation of the cast expression; 1559 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. 1423 1560 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. 1424 1561 … … 1433 1570 \lhs{multiplicative-expression} 1434 1571 \rhs \nonterm{cast-expression} 1435 \rhs \nonterm{multiplicative-expression} \lstinline @*@\nonterm{cast-expression}1436 \rhs \nonterm{multiplicative-expression} \lstinline @/@\nonterm{cast-expression}1437 \rhs \nonterm{multiplicative-expression} \lstinline @%@\nonterm{cast-expression}1572 \rhs \nonterm{multiplicative-expression} \lstinline$*$ \nonterm{cast-expression} 1573 \rhs \nonterm{multiplicative-expression} \lstinline$/$ \nonterm{cast-expression} 1574 \rhs \nonterm{multiplicative-expression} \lstinline$%$ \nonterm{cast-expression} 1438 1575 \end{syntax} 1439 1576 1440 1577 \rewriterules 1441 1578 \begin{lstlisting} 1442 a * b §\rewrite§ ?*?( a, b )§\use{?*?}§1443 a / b §\rewrite§ ?/?( a, b )§\use{?/?}§1444 a % b §\rewrite§ ?%?( a, b )§\use{?%?}§1579 a * b @\rewrite@ ?*?( a, b )@\use{?*?}@ 1580 a / b @\rewrite@ ?/?( a, b )@\use{?/?}@ 1581 a % b @\rewrite@ ?%?( a, b )@\use{?%?}@ 1445 1582 \end{lstlisting} 1446 1583 … … 1469 1606 ?*?( _Complex long double, _Complex long double ), ?/?( _Complex long double, _Complex long double ); 1470 1607 \end{lstlisting} 1471 For every extended integer type \lstinline @X@ with \Index{integer conversion rank} greater than the rank of \lstinline@int@there exist1608 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 1472 1609 % Don't use predefined: keep this out of prelude.cf. 1473 1610 \begin{lstlisting} … … 1487 1624 int i; 1488 1625 long li; 1489 void eat_double( double ); §\use{eat_double}§1626 void eat_double( double );@\use{eat_double}@ 1490 1627 eat_double( li % i ); 1491 1628 \end{lstlisting} 1492 ``\lstinline @li % i@'' is rewritten as ``\lstinline@?%?(li, i )@''.1493 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 ) are1629 ``\lstinline$li % i$'' is rewritten as ``\lstinline$?%?(li, i )$''. 1630 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 1494 1631 \begin{center} 1495 1632 \begin{tabular}{lcc} interpretation & argument cost & result cost \\ 1496 1633 \hline 1497 \lstinline @ ?%?( (int)li, i )@& (unsafe) & 6 \\1498 \lstinline @ ?%?( (unsigned)li,(unsigned)i )@& (unsafe) & 5 \\1499 \lstinline @ ?%?( li, (long)i )@& 1 & 4 \\1500 \lstinline @ ?%?( (long unsigned)li,(long unsigned)i )@& 3 & 3 \\1501 \lstinline @ ?%?( (long long)li,(long long)i )@& 5 & 2 \\1502 \lstinline @ ?%?( (long long unsigned)li, (long long unsigned)i )@& 7 & 1 \\1634 \lstinline$ ?%?( (int)li, i )$ & (unsafe) & 6 \\ 1635 \lstinline$ ?%?( (unsigned)li,(unsigned)i )$ & (unsafe) & 5 \\ 1636 \lstinline$ ?%?( li, (long)i )$ & 1 & 4 \\ 1637 \lstinline$ ?%?( (long unsigned)li,(long unsigned)i )$ & 3 & 3 \\ 1638 \lstinline$ ?%?( (long long)li,(long long)i )$ & 5 & 2 \\ 1639 \lstinline$ ?%?( (long long unsigned)li, (long long unsigned)i )$ & 7 & 1 \\ 1503 1640 \end{tabular} 1504 1641 \end{center} 1505 The best interpretation of \lstinline @eat_double( li, i )@is1506 \lstinline @eat_double( (double)?%?(li, (long)i ))@, which has no unsafe conversions and the lowest total cost.1507 1508 \begin{rationale} 1509 {\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@.If1510 \lstinline @s@ is a \lstinline@short int@, ``\lstinline@s *s@'' does not have type \lstinline@short int@;1511 it is treated as ``\lstinline @( (int)s ) * ( (int)s )@'', and has type \lstinline@int@. \CFA matches that pattern;1512 it does not predefine ``\lstinline @short ?*?( short, short )@''.1642 The best interpretation of \lstinline$eat_double( li, i )$ is 1643 \lstinline$eat_double( (double)?%?(li, (long)i ))$, which has no unsafe conversions and the lowest total cost. 1644 1645 \begin{rationale} 1646 {\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 1647 \lstinline$s$ is a \lstinline$short int$, ``\lstinline$s *s$'' does not have type \lstinline$short int$; 1648 it is treated as ``\lstinline$( (int)s ) * ( (int)s )$'', and has type \lstinline$int$. \CFA matches that pattern; 1649 it does not predefine ``\lstinline$short ?*?( short, short )$''. 1513 1650 1514 1651 These ``missing'' operators limit polymorphism. … … 1519 1656 square( s ); 1520 1657 \end{lstlisting} 1521 Since \CFA does not define a multiplication operator for \lstinline @short int@,1522 \lstinline @square( s )@ is treated as \lstinline@square( (int)s )@, and the result has type1523 \lstinline @int@.1658 Since \CFA does not define a multiplication operator for \lstinline$short int$, 1659 \lstinline$square( s )$ is treated as \lstinline$square( (int)s )$, and the result has type 1660 \lstinline$int$. 1524 1661 This is mildly surprising, but it follows the {\c11} operator pattern. 1525 1662 … … 1531 1668 \end{lstlisting} 1532 1669 This has no valid interpretations, because \CFA has no conversion from ``array of 1533 \lstinline @short int@'' to ``array of \lstinline@int@''.1670 \lstinline$short int$'' to ``array of \lstinline$int$''. 1534 1671 The alternatives in such situations include 1535 1672 \begin{itemize} 1536 1673 \item 1537 Defining monomorphic overloadings of \lstinline @product@ for \lstinline@short@and the other1674 Defining monomorphic overloadings of \lstinline$product$ for \lstinline$short$ and the other 1538 1675 ``small'' types. 1539 1676 \item 1540 Defining ``\lstinline @short ?*?( short, short )@'' within the scope containing the call to1541 \lstinline @product@.1542 \item 1543 Defining \lstinline @product@to take as an argument a conversion function from the ``small'' type to the operator's argument type.1677 Defining ``\lstinline$short ?*?( short, short )$'' within the scope containing the call to 1678 \lstinline$product$. 1679 \item 1680 Defining \lstinline$product$ to take as an argument a conversion function from the ``small'' type to the operator's argument type. 1544 1681 \end{itemize} 1545 1682 \end{rationale} … … 1551 1688 \lhs{additive-expression} 1552 1689 \rhs \nonterm{multiplicative-expression} 1553 \rhs \nonterm{additive-expression} \lstinline @+@\nonterm{multiplicative-expression}1554 \rhs \nonterm{additive-expression} \lstinline @-@\nonterm{multiplicative-expression}1690 \rhs \nonterm{additive-expression} \lstinline$+$ \nonterm{multiplicative-expression} 1691 \rhs \nonterm{additive-expression} \lstinline$-$ \nonterm{multiplicative-expression} 1555 1692 \end{syntax} 1556 1693 1557 1694 \rewriterules 1558 1695 \begin{lstlisting} 1559 a + b §\rewrite§ ?+?( a, b )§\use{?+?}§1560 a - b §\rewrite§ ?-?( a, b )§\use{?-?}§1696 a + b @\rewrite@ ?+?( a, b )@\use{?+?}@ 1697 a - b @\rewrite@ ?-?( a, b )@\use{?-?}@ 1561 1698 \end{lstlisting} 1562 1699 … … 1611 1748 * ?-?( _Atomic const restrict volatile T *, _Atomic const restrict volatile T * ); 1612 1749 \end{lstlisting} 1613 For every extended integer type \lstinline @X@ with \Index{integer conversion rank} greater than the rank of \lstinline@int@there exist1750 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 1614 1751 % Don't use predefined: keep this out of prelude.cf. 1615 1752 \begin{lstlisting} … … 1621 1758 1622 1759 \begin{rationale} 1623 \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.1760 \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. 1624 1761 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. 1625 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.1762 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. 1626 1763 \end{rationale} 1627 1764 … … 1632 1769 \lhs{shift-expression} 1633 1770 \rhs \nonterm{additive-expression} 1634 \rhs \nonterm{shift-expression} \lstinline @<<@\nonterm{additive-expression}1635 \rhs \nonterm{shift-expression} \lstinline @>>@\nonterm{additive-expression}1771 \rhs \nonterm{shift-expression} \lstinline$<<$ \nonterm{additive-expression} 1772 \rhs \nonterm{shift-expression} \lstinline$>>$ \nonterm{additive-expression} 1636 1773 \end{syntax} 1637 1774 1638 1775 \rewriterules \use{?>>?}%use{?<<?} 1639 1776 \begin{lstlisting} 1640 a << b §\rewrite§?<<?( a, b )1641 a >> b §\rewrite§?>>?( a, b )1777 a << b @\rewrite@ ?<<?( a, b ) 1778 a >> b @\rewrite@ ?>>?( a, b ) 1642 1779 \end{lstlisting} 1643 1780 … … 1651 1788 long long unsigned int ?<<?( long long unsigned int, int ), ?>>?( long long unsigned int, int); 1652 1789 \end{lstlisting} 1653 For every extended integer type \lstinline @X@ with \Index{integer conversion rank} greater than the rank of \lstinline@int@there exist1790 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 1654 1791 % Don't use predefined: keep this out of prelude.cf. 1655 1792 \begin{lstlisting} … … 1671 1808 \lhs{relational-expression} 1672 1809 \rhs \nonterm{shift-expression} 1673 \rhs \nonterm{relational-expression} \lstinline @< @\nonterm{shift-expression}1674 \rhs \nonterm{relational-expression} \lstinline @> @\nonterm{shift-expression}1675 \rhs \nonterm{relational-expression} \lstinline @<=@\nonterm{shift-expression}1676 \rhs \nonterm{relational-expression} \lstinline @>=@\nonterm{shift-expression}1810 \rhs \nonterm{relational-expression} \lstinline$< $ \nonterm{shift-expression} 1811 \rhs \nonterm{relational-expression} \lstinline$> $ \nonterm{shift-expression} 1812 \rhs \nonterm{relational-expression} \lstinline$<=$ \nonterm{shift-expression} 1813 \rhs \nonterm{relational-expression} \lstinline$>=$ \nonterm{shift-expression} 1677 1814 \end{syntax} 1678 1815 1679 1816 \rewriterules\use{?>?}\use{?>=?}%use{?<?}%use{?<=?} 1680 1817 \begin{lstlisting} 1681 a < b §\rewrite§?<?( a, b )1682 a > b §\rewrite§?>?( a, b )1683 a <= b §\rewrite§?<=?( a, b )1684 a >= b §\rewrite§?>=?( a, b )1818 a < b @\rewrite@ ?<?( a, b ) 1819 a > b @\rewrite@ ?>?( a, b ) 1820 a <= b @\rewrite@ ?<=?( a, b ) 1821 a >= b @\rewrite@ ?>=?( a, b ) 1685 1822 \end{lstlisting} 1686 1823 … … 1714 1851 ?>=?( _Atomic const restrict volatile DT *, _Atomic const restrict volatile DT * ); 1715 1852 \end{lstlisting} 1716 For every extended integer type \lstinline @X@ with \Index{integer conversion rank} greater than the rank of \lstinline@int@there exist1853 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 1717 1854 % Don't use predefined: keep this out of prelude.cf. 1718 1855 \begin{lstlisting} … … 1732 1869 \lhs{equality-expression} 1733 1870 \rhs \nonterm{relational-expression} 1734 \rhs \nonterm{equality-expression} \lstinline @==@\nonterm{relational-expression}1735 \rhs \nonterm{equality-expression} \lstinline @!=@\nonterm{relational-expression}1871 \rhs \nonterm{equality-expression} \lstinline$==$ \nonterm{relational-expression} 1872 \rhs \nonterm{equality-expression} \lstinline$!=$ \nonterm{relational-expression} 1736 1873 \end{syntax} 1737 1874 1738 1875 \rewriterules 1739 1876 \begin{lstlisting} 1740 a == b §\rewrite§ ?==?( a, b )§\use{?==?}§1741 a != b §\rewrite§ ?!=?( a, b )§\use{?"!=?}§1877 a == b @\rewrite@ ?==?( a, b )@\use{?==?}@ 1878 a != b @\rewrite@ ?!=?( a, b )@\use{?"!=?}@ 1742 1879 \end{lstlisting} 1743 1880 … … 1792 1929 ?==?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * ), ?!=?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * ); 1793 1930 \end{lstlisting} 1794 For every extended integer type \lstinline @X@ with \Index{integer conversion rank} greater than the rank of \lstinline@int@there exist1931 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 1795 1932 % Don't use predefined: keep this out of prelude.cf. 1796 1933 \begin{lstlisting} … … 1800 1937 1801 1938 \begin{rationale} 1802 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.1939 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. 1803 1940 In the last case, a special constraint rule for null pointer constant operands has been replaced by a consequence of the \CFA type system. 1804 1941 \end{rationale} … … 1821 1958 \lhs{AND-expression} 1822 1959 \rhs \nonterm{equality-expression} 1823 \rhs \nonterm{AND-expression} \lstinline @&@\nonterm{equality-expression}1960 \rhs \nonterm{AND-expression} \lstinline$&$ \nonterm{equality-expression} 1824 1961 \end{syntax} 1825 1962 1826 1963 \rewriterules 1827 1964 \begin{lstlisting} 1828 a & b §\rewrite§ ?&?( a, b )§\use{?&?}§1965 a & b @\rewrite@ ?&?( a, b )@\use{?&?}@ 1829 1966 \end{lstlisting} 1830 1967 … … 1838 1975 long long unsigned int ?&?( long long unsigned int, long long unsigned int ); 1839 1976 \end{lstlisting} 1840 For every extended integer type \lstinline @X@ with \Index{integer conversion rank} greater than the rank of \lstinline@int@there exist1977 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 1841 1978 % Don't use predefined: keep this out of prelude.cf. 1842 1979 \begin{lstlisting} … … 1853 1990 \lhs{exclusive-OR-expression} 1854 1991 \rhs \nonterm{AND-expression} 1855 \rhs \nonterm{exclusive-OR-expression} \lstinline @^@\nonterm{AND-expression}1992 \rhs \nonterm{exclusive-OR-expression} \lstinline$^$ \nonterm{AND-expression} 1856 1993 \end{syntax} 1857 1994 1858 1995 \rewriterules 1859 1996 \begin{lstlisting} 1860 a ^ b §\rewrite§ ?^?( a, b )§\use{?^?}§1997 a ^ b @\rewrite@ ?^?( a, b )@\use{?^?}@ 1861 1998 \end{lstlisting} 1862 1999 … … 1870 2007 long long unsigned int ?^?( long long unsigned int, long long unsigned int ); 1871 2008 \end{lstlisting} 1872 For every extended integer type \lstinline @X@ with \Index{integer conversion rank} greater than the rank of \lstinline@int@there exist2009 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 1873 2010 % Don't use predefined: keep this out of prelude.cf. 1874 2011 \begin{lstlisting} … … 1885 2022 \lhs{inclusive-OR-expression} 1886 2023 \rhs \nonterm{exclusive-OR-expression} 1887 \rhs \nonterm{inclusive-OR-expression} \lstinline @|@\nonterm{exclusive-OR-expression}2024 \rhs \nonterm{inclusive-OR-expression} \lstinline$|$ \nonterm{exclusive-OR-expression} 1888 2025 \end{syntax} 1889 2026 1890 2027 \rewriterules\use{?"|?} 1891 2028 \begin{lstlisting} 1892 a | b §\rewrite§?|?( a, b )2029 a | b @\rewrite@ ?|?( a, b ) 1893 2030 \end{lstlisting} 1894 2031 … … 1902 2039 long long unsigned int ?|?( long long unsigned int, long long unsigned int ); 1903 2040 \end{lstlisting} 1904 For every extended integer type \lstinline @X@ with \Index{integer conversion rank} greater than the rank of \lstinline@int@there exist2041 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 1905 2042 % Don't use predefined: keep this out of prelude.cf. 1906 2043 \begin{lstlisting} … … 1917 2054 \lhs{logical-AND-expression} 1918 2055 \rhs \nonterm{inclusive-OR-expression} 1919 \rhs \nonterm{logical-AND-expression} \lstinline @&&@\nonterm{inclusive-OR-expression}2056 \rhs \nonterm{logical-AND-expression} \lstinline$&&$ \nonterm{inclusive-OR-expression} 1920 2057 \end{syntax} 1921 2058 1922 \semantics The operands of the expression ``\lstinline @a && b@'' are treated as1923 ``\lstinline @(int)((a)!=0)@'' and ``\lstinline@(int)((b)!=0)@'', which shall both be unambiguous.1924 The expression has only one interpretation, which is of type \lstinline @int@.1925 \begin{rationale} 1926 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.1927 1928 A common C idiom omits comparisons to \lstinline @0@in the controlling expressions of loops and1929 \lstinline @if@statements.1930 For instance, the loop below iterates as long as \lstinline @rp@ points at a \lstinline@Rational@value that is non-zero.1931 1932 \begin{lstlisting} 1933 extern otype Rational; §\use{Rational}§1934 extern const Rational 0; §\use{0}§2059 \semantics The operands of the expression ``\lstinline$a && b$'' are treated as 2060 ``\lstinline$(int)((a)!=0)$'' and ``\lstinline$(int)((b)!=0)$'', which shall both be unambiguous. 2061 The expression has only one interpretation, which is of type \lstinline$int$. 2062 \begin{rationale} 2063 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. 2064 2065 A common C idiom omits comparisons to \lstinline$0$ in the controlling expressions of loops and 2066 \lstinline$if$ statements. 2067 For instance, the loop below iterates as long as \lstinline$rp$ points at a \lstinline$Rational$ value that is non-zero. 2068 2069 \begin{lstlisting} 2070 extern otype Rational;@\use{Rational}@ 2071 extern const Rational 0;@\use{0}@ 1935 2072 extern int ?!=?( Rational, Rational ); 1936 2073 Rational *rp; 1937 2074 while ( rp && *rp ) { ... } 1938 2075 \end{lstlisting} 1939 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.1940 In contrast, {\CC} would apply a programmer-defined \lstinline @Rational@-to-\lstinline@int@ conversion to \lstinline@*rp@in the equivalent situation.1941 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.2076 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. 2077 In contrast, {\CC} would apply a programmer-defined \lstinline$Rational$-to-\lstinline$int$ conversion to \lstinline$*rp$ in the equivalent situation. 2078 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. 1942 2079 \end{rationale} 1943 2080 … … 1948 2085 \lhs{logical-OR-expression} 1949 2086 \rhs \nonterm{logical-AND-expression} 1950 \rhs \nonterm{logical-OR-expression} \lstinline @||@\nonterm{logical-AND-expression}2087 \rhs \nonterm{logical-OR-expression} \lstinline$||$ \nonterm{logical-AND-expression} 1951 2088 \end{syntax} 1952 2089 1953 2090 \semantics 1954 2091 1955 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.1956 The expression has only one interpretation, which is of type \lstinline @int@.2092 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. 2093 The expression has only one interpretation, which is of type \lstinline$int$. 1957 2094 1958 2095 … … 1962 2099 \lhs{conditional-expression} 1963 2100 \rhs \nonterm{logical-OR-expression} 1964 \rhs \nonterm{logical-OR-expression} \lstinline @?@\nonterm{expression}1965 \lstinline @:@\nonterm{conditional-expression}2101 \rhs \nonterm{logical-OR-expression} \lstinline$?$ \nonterm{expression} 2102 \lstinline$:$ \nonterm{conditional-expression} 1966 2103 \end{syntax} 1967 2104 1968 2105 \semantics 1969 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 to2106 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 1970 2107 \begin{lstlisting} 1971 2108 ( int)(( a)!=0) ? ( void)( b) : ( void)( c) 1972 2109 \end{lstlisting} 1973 2110 1974 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 as2111 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 1975 2112 \begin{lstlisting} 1976 2113 forall( otype T ) T cond( int, T, T ); … … 2024 2161 rand() ? i : l; 2025 2162 \end{lstlisting} 2026 The best interpretation infers the expression's type to be \lstinline @long@and applies the safe2027 \lstinline @int@-to-\lstinline@long@ conversion to \lstinline@i@.2163 The best interpretation infers the expression's type to be \lstinline$long$ and applies the safe 2164 \lstinline$int$-to-\lstinline$long$ conversion to \lstinline$i$. 2028 2165 2029 2166 \begin{lstlisting} … … 2032 2169 rand() ? cip : vip; 2033 2170 \end{lstlisting} 2034 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.2171 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. 2035 2172 2036 2173 \begin{lstlisting} 2037 2174 rand() ? cip : 0; 2038 2175 \end{lstlisting} 2039 The expression has type \lstinline @const int *@, with a specialization conversion applied to2040 \lstinline @0@.2176 The expression has type \lstinline$const int *$, with a specialization conversion applied to 2177 \lstinline$0$. 2041 2178 2042 2179 … … 2049 2186 \nonterm{assignment-expression} 2050 2187 \lhs{assignment-operator} one of 2051 \rhs \lstinline @=@\ \ \lstinline@*=@\ \ \lstinline@/=@\ \ \lstinline@%=@\ \ \lstinline@+=@\ \ \lstinline@-=@\ \2052 \lstinline @<<=@\ \ \lstinline@>>=@\ \ \lstinline@&=@\ \ \lstinline@^=@\ \ \lstinline@|=@2188 \rhs \lstinline$=$\ \ \lstinline$*=$\ \ \lstinline$/=$\ \ \lstinline$%=$\ \ \lstinline$+=$\ \ \lstinline$-=$\ \ 2189 \lstinline$<<=$\ \ \lstinline$>>=$\ \ \lstinline$&=$\ \ \lstinline$^=$\ \ \lstinline$|=$ 2053 2190 \end{syntax} 2054 2191 … … 2059 2196 \use{?>>=?}\use{?&=?}\use{?^=?}\use{?"|=?}%use{?<<=?} 2060 2197 \begin{lstlisting} 2061 a §$\leftarrow$§ b §\rewrite§ ?§$\leftarrow$§?( &( a ), b )2198 a @$\leftarrow$@ b @\rewrite@ ?@$\leftarrow$@?( &( a ), b ) 2062 2199 \end{lstlisting} 2063 2200 2064 2201 \semantics 2065 2202 Each interpretation of the left operand of an assignment expression is considered separately. 2066 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.2203 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. 2067 2204 The right operand is cast to that type, and the assignment expression is ambiguous if either operand is. 2068 2205 For the remaining interpretations, the expression is rewritten, and the interpretations of the assignment expression are the interpretations of the corresponding function call. … … 2297 2434 \end{lstlisting} 2298 2435 \begin{rationale} 2299 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.2300 \end{rationale} 2301 2302 For every complete structure or union type \lstinline @S@there exist2436 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. 2437 \end{rationale} 2438 2439 For every complete structure or union type \lstinline$S$ there exist 2303 2440 % Don't use predefined: keep this out of prelude.cf. 2304 2441 \begin{lstlisting} … … 2306 2443 \end{lstlisting} 2307 2444 2308 For every extended integer type \lstinline @X@there exist2445 For every extended integer type \lstinline$X$ there exist 2309 2446 % Don't use predefined: keep this out of prelude.cf. 2310 2447 \begin{lstlisting} … … 2312 2449 \end{lstlisting} 2313 2450 2314 For every complete enumerated type \lstinline @E@there exist2451 For every complete enumerated type \lstinline$E$ there exist 2315 2452 % Don't use predefined: keep this out of prelude.cf. 2316 2453 \begin{lstlisting} … … 2318 2455 \end{lstlisting} 2319 2456 \begin{rationale} 2320 The right-hand argument is \lstinline @int@ because enumeration constants have type \lstinline@int@.2457 The right-hand argument is \lstinline$int$ because enumeration constants have type \lstinline$int$. 2321 2458 \end{rationale} 2322 2459 … … 2579 2716 \end{lstlisting} 2580 2717 2581 For every extended integer type \lstinline @X@there exist2718 For every extended integer type \lstinline$X$ there exist 2582 2719 % Don't use predefined: keep this out of prelude.cf. 2583 2720 \begin{lstlisting} … … 2594 2731 \end{lstlisting} 2595 2732 2596 For every complete enumerated type \lstinline @E@there exist2733 For every complete enumerated type \lstinline$E$ there exist 2597 2734 % Don't use predefined: keep this out of prelude.cf. 2598 2735 \begin{lstlisting} … … 2615 2752 \lhs{expression} 2616 2753 \rhs \nonterm{assignment-expression} 2617 \rhs \nonterm{expression} \lstinline @,@\nonterm{assignment-expression}2754 \rhs \nonterm{expression} \lstinline$,$ \nonterm{assignment-expression} 2618 2755 \end{syntax} 2619 2756 2620 2757 \semantics 2621 In the comma expression ``\lstinline @a, b@'', the first operand is interpreted as2622 ``\lstinline @( void )(a)@'', which shall be unambiguous\index{ambiguous interpretation}.2758 In the comma expression ``\lstinline$a, b$'', the first operand is interpreted as 2759 ``\lstinline$( void )(a)$'', which shall be unambiguous\index{ambiguous interpretation}. 2623 2760 The interpretations of the expression are the interpretations of the second operand. 2624 2761 … … 2655 2792 { ... } 2656 2793 \end{lstlisting} 2657 Without the rule, \lstinline @Complex@would be a type in the first case, and a parameter name in the second.2794 Without the rule, \lstinline$Complex$ would be a type in the first case, and a parameter name in the second. 2658 2795 \end{rationale} 2659 2796 … … 2681 2818 \examples 2682 2819 \begin{lstlisting} 2683 struct point { §\impl{point}§2820 struct point {@\impl{point}@ 2684 2821 int x, y; 2685 2822 }; 2686 struct color_point { §\impl{color_point}§2823 struct color_point {@\impl{color_point}@ 2687 2824 enum { RED, BLUE, GREEN } color; 2688 2825 struct point; … … 2691 2828 cp.x = 0; 2692 2829 cp.color = RED; 2693 struct literal { §\impl{literal}§2830 struct literal {@\impl{literal}@ 2694 2831 enum { NUMBER, STRING } tag; 2695 2832 union { … … 2712 2849 \begin{syntax} 2713 2850 \lhs{forall-specifier} 2714 \rhs \lstinline @forall@ \lstinline@(@ \nonterm{type-parameter-list} \lstinline@)@2851 \rhs \lstinline$forall$ \lstinline$($ \nonterm{type-parameter-list} \lstinline$)$ 2715 2852 \end{syntax} 2716 2853 … … 2724 2861 } mkPair( T, T ); // illegal 2725 2862 \end{lstlisting} 2726 If an instance of \lstinline @struct Pair@was declared later in the current scope, what would the members' type be?2863 If an instance of \lstinline$struct Pair$ was declared later in the current scope, what would the members' type be? 2727 2864 \end{rationale} 2728 2865 \end{comment} … … 2731 2868 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}. 2732 2869 2733 If, in the declaration ``\lstinline @T D@'', \lstinline@T@contains \nonterm{forall-specifier}s and2734 \lstinline @D@has the form2735 \begin{lstlisting} 2736 D( §\normalsize\nonterm{parameter-type-list}§)2737 \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 following2870 If, in the declaration ``\lstinline$T D$'', \lstinline$T$ contains \nonterm{forall-specifier}s and 2871 \lstinline$D$ has the form 2872 \begin{lstlisting} 2873 D( @\normalsize\nonterm{parameter-type-list}@ ) 2874 \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 2738 2875 \nonterm{type-parameter-list} or it and an inferred parameter are used as arguments of a 2739 2876 \Index{specification} in one of the \nonterm{forall-specifier}s. … … 2746 2883 If this restriction were lifted, it would be possible to write 2747 2884 \begin{lstlisting} 2748 forall( otype T ) T * alloc( void ); §\use{alloc}§int *p = alloc();2749 \end{lstlisting} 2750 Here \lstinline @alloc()@ would receive \lstinline@int@as an inferred argument, and return an2751 \lstinline @int *@.2752 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.2753 2754 With the current restriction, \lstinline @alloc()@must be given an argument that determines2755 \lstinline @T@:2756 \begin{lstlisting} 2757 forall( otype T ) T * alloc( T initial_value ); §\use{alloc}§2885 forall( otype T ) T * alloc( void );@\use{alloc}@ int *p = alloc(); 2886 \end{lstlisting} 2887 Here \lstinline$alloc()$ would receive \lstinline$int$ as an inferred argument, and return an 2888 \lstinline$int *$. 2889 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. 2890 2891 With the current restriction, \lstinline$alloc()$ must be given an argument that determines 2892 \lstinline$T$: 2893 \begin{lstlisting} 2894 forall( otype T ) T * alloc( T initial_value );@\use{alloc}@ 2758 2895 \end{lstlisting} 2759 2896 \end{rationale} … … 2780 2917 forall( otype T ) T fT( T ); 2781 2918 \end{lstlisting} 2782 \lstinline @fi()@ takes an \lstinline@int@ and returns an \lstinline@int@. \lstinline@fT()@takes a2783 \lstinline @T@ and returns a \lstinline@T@, for any type \lstinline@T@.2919 \lstinline$fi()$ takes an \lstinline$int$ and returns an \lstinline$int$. \lstinline$fT()$ takes a 2920 \lstinline$T$ and returns a \lstinline$T$, for any type \lstinline$T$. 2784 2921 \begin{lstlisting} 2785 2922 int (*pfi )( int ) = fi; 2786 2923 forall( otype T ) T (*pfT )( T ) = fT; 2787 2924 \end{lstlisting} 2788 \lstinline @pfi@ and \lstinline@pfT@ are pointers to functions. \lstinline@pfT@is not polymorphic, but the function it points at is.2925 \lstinline$pfi$ and \lstinline$pfT$ are pointers to functions. \lstinline$pfT$ is not polymorphic, but the function it points at is. 2789 2926 \begin{lstlisting} 2790 2927 int (*fvpfi( void ))( int ) { … … 2795 2932 } 2796 2933 \end{lstlisting} 2797 \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.2934 \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. 2798 2935 \begin{lstlisting} 2799 2936 forall( otype T ) int ( *fTpfi( T ) )( int ); … … 2801 2938 forall( otype T, otype U ) U ( *fTpfU( T ) )( U ); 2802 2939 \end{lstlisting} 2803 \lstinline @fTpfi()@is a polymorphic function that returns a pointer to a monomorphic function taking an integer and returning an integer.2804 It could return \lstinline @pfi@. \lstinline@fTpfT()@is subtle: it is a polymorphic function returning a \emph{monomorphic} function taking and returning2805 \lstinline @T@, where \lstinline@T@ is an inferred parameter of \lstinline@fTpfT()@.2806 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)@'' and2807 ``\lstinline @fTpfT("yes")("no")@'' are legal, but ``\lstinline@fTpfT(17)("no")@'' is illegal.2808 \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 type2809 \lstinline @char *@.2940 \lstinline$fTpfi()$ is a polymorphic function that returns a pointer to a monomorphic function taking an integer and returning an integer. 2941 It could return \lstinline$pfi$. \lstinline$fTpfT()$ is subtle: it is a polymorphic function returning a \emph{monomorphic} function taking and returning 2942 \lstinline$T$, where \lstinline$T$ is an inferred parameter of \lstinline$fTpfT()$. 2943 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 2944 ``\lstinline$fTpfT("yes")("no")$'' are legal, but ``\lstinline$fTpfT(17)("no")$'' is illegal. 2945 \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 2946 \lstinline$char *$. 2810 2947 \begin{lstlisting} 2811 2948 forall( otype T, otype U, otype V ) U * f( T *, U, V * const ); 2812 2949 forall( otype U, otype V, otype W ) U * g( V *, U, W * const ); 2813 2950 \end{lstlisting} 2814 The functions \lstinline @f()@ and \lstinline@g()@have compatible types.2951 The functions \lstinline$f()$ and \lstinline$g()$ have compatible types. 2815 2952 Let \(f\) and \(g\) be their types; 2816 then \(f_1\) = \lstinline @T@, \(f_2\) = \lstinline@U@, \(f_3\) = \lstinline@V@, \(g_1\)2817 = \lstinline @V@, \(g_2\) = \lstinline@U@, and \(g_3\) = \lstinline@W@.2953 then \(f_1\) = \lstinline$T$, \(f_2\) = \lstinline$U$, \(f_3\) = \lstinline$V$, \(g_1\) 2954 = \lstinline$V$, \(g_2\) = \lstinline$U$, and \(g_3\) = \lstinline$W$. 2818 2955 Replacing every \(f_i\) by \(g_i\) in \(f\) gives 2819 2956 \begin{lstlisting} … … 2821 2958 \end{lstlisting} which has a return type and parameter list that is compatible with \(g\). 2822 2959 \begin{rationale} 2823 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.2960 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. 2824 2961 2825 2962 Even without parameterized types, I might try to allow … … 2847 2984 \subsection{Type qualifiers} 2848 2985 2849 \CFA defines a new type qualifier \lstinline @lvalue@\impl{lvalue}\index{lvalue}.2986 \CFA defines a new type qualifier \lstinline$lvalue$\impl{lvalue}\index{lvalue}. 2850 2987 \begin{syntax} 2851 2988 \oldlhs{type-qualifier} 2852 \rhs \lstinline @lvalue@2989 \rhs \lstinline$lvalue$ 2853 2990 \end{syntax} 2854 2991 2855 2992 \constraints 2856 \ Indexc{restrict} Types other than type parameters and pointer types whose referenced type is an object type shall not be restrict-qualified.2993 \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. 2857 2994 2858 2995 \semantics 2859 An object's type may be a restrict-qualified type parameter. 2860 \lstinline@restrict@ does not establish any special semantics in that case. 2996 An object's type may be a restrict-qualified type parameter. \lstinline$restrict$ does not establish any special semantics in that case. 2861 2997 2862 2998 \begin{rationale} … … 2864 3000 \end{rationale} 2865 3001 2866 \lstinline @lvalue@may be used to qualify the return type of a function type.2867 Let \lstinline @T@be an unqualified version of a type;3002 \lstinline$lvalue$ may be used to qualify the return type of a function type. 3003 Let \lstinline$T$ be an unqualified version of a type; 2868 3004 then the result of calling a function with return type 2869 \lstinline @lvalue T@ is a \Index{modifiable lvalue} of type \lstinline@T@.2870 \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.2871 \begin{rationale} 2872 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.3005 \lstinline$lvalue T$ is a \Index{modifiable lvalue} of type \lstinline$T$. 3006 \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. 3007 \begin{rationale} 3008 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. 2873 3009 \end{rationale} 2874 3010 … … 2877 3013 2878 3014 \begin{rationale} 2879 \lstinline @lvalue@ provides some of the functionality of {\CC}'s ``\lstinline@T&@'' ( reference to object of type \lstinline@T@) type.3015 \lstinline$lvalue$ provides some of the functionality of {\CC}'s ``\lstinline$T&$'' ( reference to object of type \lstinline$T$) type. 2880 3016 Reference types have four uses in {\CC}. 2881 3017 \begin{itemize} 2882 3018 \item 2883 They are necessary for user-defined operators that return lvalues, such as ``subscript'' and ``dereference''. 2884 2885 \item 2886 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. 3019 They are necessary for user-defined operators that return lvalues, such as ``subscript'' and 3020 ``dereference''. 3021 3022 \item 3023 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. 2887 3024 The following {\CC} code gives an example. 2888 3025 \begin{lstlisting} … … 2897 3034 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. 2898 3035 This is most useful for user-defined assignment operators. 2899 In {\CC}, plain assignment is done by a function called ``\lstinline @operator=@'', and the two expressions3036 In {\CC}, plain assignment is done by a function called ``\lstinline$operator=$'', and the two expressions 2900 3037 \begin{lstlisting} 2901 3038 a = b; 2902 3039 operator=( a, b ); 2903 3040 \end{lstlisting} are equivalent. 2904 If \lstinline @a@ and \lstinline@b@ are of type \lstinline@T@, then the first parameter of \lstinline@operator=@ must have type ``\lstinline@T&@''.3041 If \lstinline$a$ and \lstinline$b$ are of type \lstinline$T$, then the first parameter of \lstinline$operator=$ must have type ``\lstinline$T&$''. 2905 3042 It cannot have type 2906 \lstinline @T@, because then assignment couldn't alter the variable, and it can't have type2907 ``\lstinline @T *@'', because the assignment would have to be written ``\lstinline@&a = b;@''.2908 2909 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 to2910 ``\lstinline @operator=(&( a), b )@''.2911 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 @&@''.3043 \lstinline$T$, because then assignment couldn't alter the variable, and it can't have type 3044 ``\lstinline$T *$'', because the assignment would have to be written ``\lstinline$&a = b;$''. 3045 3046 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 3047 ``\lstinline$operator=(&( a), b )$''. 3048 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$&$''. 2912 3049 2913 3050 \item 2914 3051 References to \Index{const-qualified} types can be used instead of value parameters. Given the 2915 {\CC} function call ``\lstinline @fiddle( a_thing )@'', where the type of \lstinline@a_thing@is2916 \lstinline @Thing@, the type of \lstinline@fiddle@could be either of3052 {\CC} function call ``\lstinline$fiddle( a_thing )$'', where the type of \lstinline$a_thing$ is 3053 \lstinline$Thing$, the type of \lstinline$fiddle$ could be either of 2917 3054 \begin{lstlisting} 2918 3055 void fiddle( Thing ); 2919 3056 void fiddle( const Thing & ); 2920 3057 \end{lstlisting} 2921 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.2922 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.3058 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. 3059 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. 2923 3060 An implementation may switch between them without causing trouble for well-behaved clients. 2924 3061 This leaves the implementor to define ``too large'' and ``too expensive''. … … 2928 3065 void fiddle( const volatile Thing ); 2929 3066 \end{lstlisting} with call-by-reference. 2930 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''.3067 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''. 2931 3068 \end{itemize} 2932 3069 … … 2948 3085 \begin{syntax} 2949 3086 \lhs{spec-definition} 2950 \rhs \lstinline @spec@\nonterm{identifier}2951 \lstinline @(@ \nonterm{type-parameter-list} \lstinline@)@2952 \lstinline @{@ \nonterm{spec-declaration-list}\opt \lstinline@}@3087 \rhs \lstinline$spec$ \nonterm{identifier} 3088 \lstinline$($ \nonterm{type-parameter-list} \lstinline$)$ 3089 \lstinline${$ \nonterm{spec-declaration-list}\opt \lstinline$}$ 2953 3090 \lhs{spec-declaration-list} 2954 \rhs \nonterm{spec-declaration} \lstinline @;@2955 \rhs \nonterm{spec-declaration-list} \nonterm{spec-declaration} \lstinline @;@3091 \rhs \nonterm{spec-declaration} \lstinline$;$ 3092 \rhs \nonterm{spec-declaration-list} \nonterm{spec-declaration} \lstinline$;$ 2956 3093 \lhs{spec-declaration} 2957 3094 \rhs \nonterm{specifier-qualifier-list} \nonterm{declarator-list} 2958 3095 \lhs{declarator-list} 2959 3096 \rhs \nonterm{declarator} 2960 \rhs \nonterm{declarator-list} \lstinline @,@\nonterm{declarator}3097 \rhs \nonterm{declarator-list} \lstinline$,$ \nonterm{declarator} 2961 3098 \end{syntax} 2962 3099 \begin{rationale} … … 2980 3117 \rhs \nonterm{assertion-list} \nonterm{assertion} 2981 3118 \lhs{assertion} 2982 \rhs \lstinline @|@ \nonterm{identifier} \lstinline@(@ \nonterm{type-name-list} \lstinline@)@2983 \rhs \lstinline @|@\nonterm{spec-declaration}3119 \rhs \lstinline$|$ \nonterm{identifier} \lstinline$($ \nonterm{type-name-list} \lstinline$)$ 3120 \rhs \lstinline$|$ \nonterm{spec-declaration} 2984 3121 \lhs{type-name-list} 2985 3122 \rhs \nonterm{type-name} 2986 \rhs \nonterm{type-name-list} \lstinline @,@\nonterm{type-name}3123 \rhs \nonterm{type-name-list} \lstinline$,$ \nonterm{type-name} 2987 3124 \end{syntax} 2988 3125 … … 2991 3128 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}. 2992 3129 If the 2993 \nonterm{type-parameter} uses type-class \lstinline @type@\use{type}, the argument shall be the type name of an \Index{object type};2994 if it uses \lstinline @dtype@, the argument shall be the type name of an object type or an \Index{incomplete type};2995 and if it uses \lstinline @ftype@, the argument shall be the type name of a \Index{function type}.3130 \nonterm{type-parameter} uses type-class \lstinline$type$\use{type}, the argument shall be the type name of an \Index{object type}; 3131 if it uses \lstinline$dtype$, the argument shall be the type name of an object type or an \Index{incomplete type}; 3132 and if it uses \lstinline$ftype$, the argument shall be the type name of a \Index{function type}. 2996 3133 2997 3134 \semantics … … 3006 3143 \examples 3007 3144 \begin{lstlisting} 3008 forall( otype T | T ?*?( T, T )) §\use{?*?}§3009 T square( T val ) { §\impl{square}§3145 forall( otype T | T ?*?( T, T ))@\use{?*?}@ 3146 T square( T val ) {@\impl{square}@ 3010 3147 return val + val; 3011 3148 } 3012 trait summable( otype T ) { §\impl{summable}§3013 T ?+=?( T *, T ); §\use{?+=?}§3014 const T 0; §\use{0}§3149 trait summable( otype T ) {@\impl{summable}@ 3150 T ?+=?( T *, T );@\use{?+=?}@ 3151 const T 0;@\use{0}@ 3015 3152 }; 3016 trait list_of( otype List, otype Element ) { §\impl{list_of}§3153 trait list_of( otype List, otype Element ) {@\impl{list_of}@ 3017 3154 Element car( List ); 3018 3155 List cdr( List ); … … 3023 3160 trait sum_list( otype List, otype Element | summable( Element ) | list_of( List, Element ) ) {}; 3024 3161 \end{lstlisting} 3025 \lstinline @sum_list@contains seven declarations, which describe a list whose elements can be added up.3026 The assertion ``\lstinline @|sum_list( i_list, int )@''\use{sum_list} produces the assertion parameters3162 \lstinline$sum_list$ contains seven declarations, which describe a list whose elements can be added up. 3163 The assertion ``\lstinline$|sum_list( i_list, int )$''\use{sum_list} produces the assertion parameters 3027 3164 \begin{lstlisting} 3028 3165 int ?+=?( int *, int ); … … 3041 3178 \lhs{type-parameter-list} 3042 3179 \rhs \nonterm{type-parameter} 3043 \rhs \nonterm{type-parameter-list} \lstinline @,@\nonterm{type-parameter}3180 \rhs \nonterm{type-parameter-list} \lstinline$,$ \nonterm{type-parameter} 3044 3181 \lhs{type-parameter} 3045 3182 \rhs \nonterm{type-class} \nonterm{identifier} \nonterm{assertion-list}\opt 3046 3183 \lhs{type-class} 3047 \rhs \lstinline @type@3048 \rhs \lstinline @dtype@3049 \rhs \lstinline @ftype@3184 \rhs \lstinline$type$ 3185 \rhs \lstinline$dtype$ 3186 \rhs \lstinline$ftype$ 3050 3187 \lhs{type-declaration} 3051 \rhs \nonterm{storage-class-specifier}\opt \lstinline @type@\nonterm{type-declarator-list} \verb|;|3188 \rhs \nonterm{storage-class-specifier}\opt \lstinline$type$ \nonterm{type-declarator-list} \verb|;| 3052 3189 \lhs{type-declarator-list} 3053 3190 \rhs \nonterm{type-declarator} 3054 \rhs \nonterm{type-declarator-list} \lstinline @,@\nonterm{type-declarator}3191 \rhs \nonterm{type-declarator-list} \lstinline$,$ \nonterm{type-declarator} 3055 3192 \lhs{type-declarator} 3056 \rhs \nonterm{identifier} \nonterm{assertion-list}\opt \lstinline @=@\nonterm{type-name}3193 \rhs \nonterm{identifier} \nonterm{assertion-list}\opt \lstinline$=$ \nonterm{type-name} 3057 3194 \rhs \nonterm{identifier} \nonterm{assertion-list}\opt 3058 3195 \end{syntax} … … 3065 3202 3066 3203 An identifier declared by a \nonterm{type-parameter} has \Index{no linkage}. 3067 Identifiers declared with type-class \lstinline @type@\use{type} are \Index{object type}s;3204 Identifiers declared with type-class \lstinline$type$\use{type} are \Index{object type}s; 3068 3205 those declared with type-class 3069 \lstinline @dtype@\use{dtype} are \Index{incomplete type}s;3206 \lstinline$dtype$\use{dtype} are \Index{incomplete type}s; 3070 3207 and those declared with type-class 3071 \lstinline @ftype@\use{ftype} are \Index{function type}s.3208 \lstinline$ftype$\use{ftype} are \Index{function type}s. 3072 3209 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}. 3073 3210 … … 3077 3214 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. 3078 3215 3079 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}.3216 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}. 3080 3217 If a 3081 3218 \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). … … 3097 3234 3098 3235 A type declaration without an initializer and with \Index{storage-class specifier} 3099 \lstinline @extern@\use{extern} is an \define{opaque type declaration}.3236 \lstinline$extern$\use{extern} is an \define{opaque type declaration}. 3100 3237 Opaque types are 3101 3238 \Index{object type}s. … … 3112 3249 \end{rationale} 3113 3250 3114 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@.3115 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@.3251 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$. 3252 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$. 3116 3253 A 3117 \Index{function type} is a value of type-class \lstinline @ftype@.3254 \Index{function type} is a value of type-class \lstinline$ftype$. 3118 3255 \begin{rationale} 3119 3256 Syntactically, a type value is a \nonterm{type-name}, which is a declaration for an object which omits the identifier being declared. … … 3125 3262 Type qualifiers are a weak point of C's type system. 3126 3263 Consider the standard library function 3127 \lstinline @strchr()@which, given a string and a character, returns a pointer to the first occurrence of the character in the string.3128 \begin{lstlisting} 3129 char *strchr( const char *s, int c ) { §\impl{strchr}§3264 \lstinline$strchr()$ which, given a string and a character, returns a pointer to the first occurrence of the character in the string. 3265 \begin{lstlisting} 3266 char *strchr( const char *s, int c ) {@\impl{strchr}@ 3130 3267 char real_c = c; // done because c was declared as int. 3131 3268 for ( ; *s != real_c; s++ ) … … 3134 3271 } 3135 3272 \end{lstlisting} 3136 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.3273 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. 3137 3274 Hence the body must perform a cast, and ( even worse) 3138 \lstinline @strchr()@provides a type-safe way to attempt to modify constant strings.3139 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.3275 \lstinline$strchr()$ provides a type-safe way to attempt to modify constant strings. 3276 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. 3140 3277 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. 3141 Instead, overloading can be used to define \lstinline @strchr()@for each combination of qualifiers.3278 Instead, overloading can be used to define \lstinline$strchr()$ for each combination of qualifiers. 3142 3279 \end{rationale} 3143 3280 … … 3164 3301 \end{lstlisting} 3165 3302 Without this restriction, \CFA might require ``module initialization'' code ( since 3166 \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@.3303 \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$. 3167 3304 3168 3305 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. … … 3181 3318 \nonterm{struct-declaration}, type declarations can not be structure members. 3182 3319 The form of 3183 \nonterm{type-declaration} forbids arrays of, pointers to, and functions returning \lstinline @type@.3320 \nonterm{type-declaration} forbids arrays of, pointers to, and functions returning \lstinline$type$. 3184 3321 Hence the syntax of \nonterm{type-specifier} does not have to be extended to allow type-valued expressions. 3185 3322 It also side-steps the problem of type-valued expressions producing different values in different declarations. … … 3196 3333 #include <stdlib.h> 3197 3334 T * new( otype T ) { return ( T * )malloc( sizeof( T) ); }; 3198 §\ldots§int * ip = new( int );3199 \end{lstlisting} 3200 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@;3335 @\ldots@ int * ip = new( int ); 3336 \end{lstlisting} 3337 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$; 3201 3338 it could be undefined, or a type name, or a function or variable name. 3202 3339 Nothing good can result from such a situation. … … 3215 3352 f2( v2 ); 3216 3353 \end{lstlisting} 3217 \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]@.3354 \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]$. 3218 3355 3219 3356 A translation unit containing the declarations 3220 3357 \begin{lstlisting} 3221 extern type Complex; §\use{Complex}§// opaque type declaration3222 extern float abs( Complex ); §\use{abs}§3223 \end{lstlisting} can contain declarations of complex numbers, which can be passed to \lstinline @abs@.3224 Some other translation unit must implement \lstinline @Complex@ and \lstinline@abs@.3358 extern type Complex;@\use{Complex}@ // opaque type declaration 3359 extern float abs( Complex );@\use{abs}@ 3360 \end{lstlisting} can contain declarations of complex numbers, which can be passed to \lstinline$abs$. 3361 Some other translation unit must implement \lstinline$Complex$ and \lstinline$abs$. 3225 3362 That unit might contain the declarations 3226 3363 \begin{lstlisting} 3227 otype Complex = struct { float re, im; }; §\impl{Complex}§3228 Complex cplx_i = { 0.0, 1.0 }; §\impl{cplx_i}§3229 float abs( Complex c ) { §\impl{abs( Complex )}§3364 otype Complex = struct { float re, im; };@\impl{Complex}@ 3365 Complex cplx_i = { 0.0, 1.0 };@\impl{cplx_i}@ 3366 float abs( Complex c ) {@\impl{abs( Complex )}@ 3230 3367 return sqrt( c.re * c.re + c.im * c.im ); 3231 3368 } 3232 3369 \end{lstlisting} 3233 Note that \lstinline @c@ is implicitly converted to a \lstinline@struct@so that its components can be retrieved.3234 3235 \begin{lstlisting} 3236 otype Time_of_day = int; §\impl{Time_of_day}§// seconds since midnight.3237 Time_of_day ?+?( Time_of_day t1, int seconds ) { §\impl{?+?}§3370 Note that \lstinline$c$ is implicitly converted to a \lstinline$struct$ so that its components can be retrieved. 3371 3372 \begin{lstlisting} 3373 otype Time_of_day = int;@\impl{Time_of_day}@ // seconds since midnight. 3374 Time_of_day ?+?( Time_of_day t1, int seconds ) {@\impl{?+?}@ 3238 3375 return (( int)t1 + seconds ) % 86400; 3239 3376 } 3240 3377 \end{lstlisting} 3241 \lstinline @t1@must be cast to its implementation type to prevent infinite recursion.3378 \lstinline$t1$ must be cast to its implementation type to prevent infinite recursion. 3242 3379 3243 3380 \begin{rationale} 3244 3381 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. 3245 In the \lstinline @Time_of_day@example, the difference is important.3382 In the \lstinline$Time_of_day$ example, the difference is important. 3246 3383 Different languages have treated the distinction between the abstraction and the implementation in different ways. 3247 3384 \begin{itemize} 3248 3385 \item 3249 Inside a Clu cluster \cite{ CLU}, the declaration of an instance states which view applies.3250 Two primitives called \lstinline @up@ and \lstinline@down@can be used to convert between the views.3251 \item 3252 The Simula class \cite{S IMULA87} is essentially a record type.3386 Inside a Clu cluster \cite{clu}, the declaration of an instance states which view applies. 3387 Two primitives called \lstinline$up$ and \lstinline$down$ can be used to convert between the views. 3388 \item 3389 The Simula class \cite{Simula87} is essentially a record type. 3253 3390 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. 3254 3391 In {\CC} 3255 \cite{ C++}, operations on class instances include assignment and ``\lstinline@&@'', which can be overloaded.3392 \cite{c++}, operations on class instances include assignment and ``\lstinline$&$'', which can be overloaded. 3256 3393 A ``scope resolution'' operator can be used inside the class to specify whether the abstract or implementation version of the operation should be used. 3257 3394 \item 3258 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.3395 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. 3259 3396 The derived subprograms are clones of the existing subprograms with the old type replaced by the derived type. 3260 3397 Literals and aggregates of the old type are also cloned. … … 3266 3403 In this case, explicit conversions between the derived type and the old type can be used. 3267 3404 \end{itemize} 3268 \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@.3405 \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$. 3269 3406 \end{rationale} 3270 3407 … … 3272 3409 \subsubsection{Default functions and objects} 3273 3410 3274 A declaration\index{type declaration} of a type identifier \lstinline @T@with type-class3275 \lstinline @type@implicitly declares a \define{default assignment} function3276 \lstinline @T ?=?( T *, T )@\use{?=?}, with the same \Index{scope} and \Index{linkage} as the identifier \lstinline@T@.3411 A declaration\index{type declaration} of a type identifier \lstinline$T$ with type-class 3412 \lstinline$type$ implicitly declares a \define{default assignment} function 3413 \lstinline$T ?=?( T *, T )$\use{?=?}, with the same \Index{scope} and \Index{linkage} as the identifier \lstinline$T$. 3277 3414 \begin{rationale} 3278 3415 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). 3279 3416 Without this rule, nearly every inferred type parameter would need an accompanying assignment assertion parameter. 3280 3417 If a type parameter should not have an assignment operation, 3281 \lstinline @dtype@should be used.3418 \lstinline$dtype$ should be used. 3282 3419 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. 3283 3420 \end{rationale} 3284 3421 3285 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.3286 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 and3422 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. 3423 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 3287 3424 \define{default object}s as declared by the assertion declarations. 3288 The default objects and functions have the same \Index{scope} and \Index{linkage} as the identifier \lstinline @T@.3425 The default objects and functions have the same \Index{scope} and \Index{linkage} as the identifier \lstinline$T$. 3289 3426 Their values are determined as follows: 3290 3427 \begin{itemize} 3291 3428 \item 3292 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.3293 Otherwise the scope of the declaration of \lstinline @T@must contain a definition of the default object.3429 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. 3430 Otherwise the scope of the declaration of \lstinline$T$ must contain a definition of the default object. 3294 3431 3295 3432 \item 3296 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.3297 3298 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.3299 3300 Otherwise the scope of the declaration of \lstinline @T@must contain a definition of the default function.3433 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. 3434 3435 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. 3436 3437 Otherwise the scope of the declaration of \lstinline$T$ must contain a definition of the default function. 3301 3438 \end{itemize} 3302 3439 \begin{rationale} … … 3304 3441 \end{rationale} 3305 3442 3306 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.3443 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. 3307 3444 3308 3445 \examples … … 3314 3451 Pair b = { 1, 1 }; 3315 3452 \end{lstlisting} 3316 The definition of \lstinline @Pair@ implicitly defines two objects \lstinline@a@ and \lstinline@b@.3317 \lstinline @Pair a@ inherits its value from the \lstinline@struct impl a@.3453 The definition of \lstinline$Pair$ implicitly defines two objects \lstinline$a$ and \lstinline$b$. 3454 \lstinline$Pair a$ inherits its value from the \lstinline$struct impl a$. 3318 3455 The definition of 3319 \lstinline @Pair b@ is compulsory because there is no \lstinline@struct impl b@to construct a value from.3456 \lstinline$Pair b$ is compulsory because there is no \lstinline$struct impl b$ to construct a value from. 3320 3457 \begin{lstlisting} 3321 3458 trait ss( otype T ) { … … 3323 3460 void munge( T * ); 3324 3461 } 3325 otype Whatsit | ss( Whatsit ); §\use{Whatsit}§3326 otype Doodad | ss( Doodad ) = struct doodad { §\use{Doodad}§3462 otype Whatsit | ss( Whatsit );@\use{Whatsit}@ 3463 otype Doodad | ss( Doodad ) = struct doodad {@\use{Doodad}@ 3327 3464 Whatsit; // anonymous member 3328 3465 int extra; … … 3330 3467 Doodad clone( Doodad ) { ... } 3331 3468 \end{lstlisting} 3332 The definition of \lstinline @Doodad@implicitly defines three functions:3469 The definition of \lstinline$Doodad$ implicitly defines three functions: 3333 3470 \begin{lstlisting} 3334 3471 Doodad ?=?( Doodad *, Doodad ); … … 3336 3473 void munge( Doodad * ); 3337 3474 \end{lstlisting} 3338 The assignment function inherits \lstinline @struct doodad@'s assignment function because the types match when \lstinline@struct doodad@ is replaced by \lstinline@Doodad@throughout.3339 \lstinline @munge()@ inherits \lstinline@Whatsit@'s \lstinline@munge()@because the types match when3340 \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 with3341 \lstinline @Doodad@'s \lstinline@clone()@'s type.3475 The assignment function inherits \lstinline$struct doodad$'s assignment function because the types match when \lstinline$struct doodad$ is replaced by \lstinline$Doodad$ throughout. 3476 \lstinline$munge()$ inherits \lstinline$Whatsit$'s \lstinline$munge()$ because the types match when 3477 \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 3478 \lstinline$Doodad$'s \lstinline$clone()$'s type. 3342 3479 Hence the definition of 3343 ``\lstinline @Doodad clone( Doodad )@'' is necessary.3480 ``\lstinline$Doodad clone( Doodad )$'' is necessary. 3344 3481 3345 3482 Default functions and objects are subject to the normal scope rules. 3346 3483 \begin{lstlisting} 3347 otype T = §\ldots§;3348 T a_T = §\ldots§; // Default assignment used.3484 otype T = @\ldots@; 3485 T a_T = @\ldots@; // Default assignment used. 3349 3486 T ?=?( T *, T ); 3350 T a_T = §\ldots§; // Programmer-defined assignment called.3487 T a_T = @\ldots@; // Programmer-defined assignment called. 3351 3488 \end{lstlisting} 3352 3489 \begin{rationale} … … 3381 3518 \begin{syntax} 3382 3519 \oldlhs{labeled-statement} 3383 \rhs \lstinline @case@\nonterm{case-value-list} : \nonterm{statement}3520 \rhs \lstinline$case$ \nonterm{case-value-list} : \nonterm{statement} 3384 3521 \lhs{case-value-list} 3385 3522 \rhs \nonterm{case-value} 3386 \rhs \nonterm{case-value-list} \lstinline @,@\nonterm{case-value}3523 \rhs \nonterm{case-value-list} \lstinline$,$ \nonterm{case-value} 3387 3524 \lhs{case-value} 3388 3525 \rhs \nonterm{constant-expression} 3389 3526 \rhs \nonterm{subrange} 3390 3527 \lhs{subrange} 3391 \rhs \nonterm{constant-expression} \lstinline @~@\nonterm{constant-expression}3528 \rhs \nonterm{constant-expression} \lstinline$~$ \nonterm{constant-expression} 3392 3529 \end{syntax} 3393 3530 … … 3402 3539 case 1~4, 9~14, 27~32: 3403 3540 \end{lstlisting} 3404 The \lstinline @case@ and \lstinline@default@ clauses are restricted within the \lstinline@switch@ and \lstinline@choose@statements, precluding Duff's device.3541 The \lstinline$case$ and \lstinline$default$ clauses are restricted within the \lstinline$switch$ and \lstinline$choose$ statements, precluding Duff's device. 3405 3542 3406 3543 3407 3544 \subsection{Expression and null statements} 3408 3545 3409 The expression in an expression statement is treated as being cast to \lstinline @void@.3546 The expression in an expression statement is treated as being cast to \lstinline$void$. 3410 3547 3411 3548 … … 3414 3551 \begin{syntax} 3415 3552 \oldlhs{selection-statement} 3416 \rhs \lstinline @choose@ \lstinline@(@ \nonterm{expression} \lstinline@)@\nonterm{statement}3553 \rhs \lstinline$choose$ \lstinline$($ \nonterm{expression} \lstinline$)$ \nonterm{statement} 3417 3554 \end{syntax} 3418 3555 3419 The controlling expression \lstinline @E@ in the \lstinline@switch@ and \lstinline@choose@statement:3556 The controlling expression \lstinline$E$ in the \lstinline$switch$ and \lstinline$choose$ statement: 3420 3557 \begin{lstlisting} 3421 3558 switch ( E ) ... … … 3423 3560 \end{lstlisting} may have more than one interpretation, but it shall have only one interpretation with an integral type. 3424 3561 An \Index{integer promotion} is performed on the expression if necessary. 3425 The constant expressions in \lstinline @case@statements with the switch are converted to the promoted type.3562 The constant expressions in \lstinline$case$ statements with the switch are converted to the promoted type. 3426 3563 3427 3564 3428 3565 \setcounter{subsubsection}{3} 3429 \subsubsection [The choose statement]{The \lstinline@choose@statement}3430 3431 The \lstinline @choose@ statement is the same as the \lstinline@switch@ statement except control transfers to the end of the \lstinline@choose@ statement at a \lstinline@case@ or \lstinline@default@labeled statement.3432 The \lstinline @fallthru@ statement is used to fall through to the next \lstinline@case@ or \lstinline@default@labeled statement.3566 \subsubsection{The \lstinline$choose$ statement} 3567 3568 The \lstinline$choose$ statement is the same as the \lstinline$switch$ statement except control transfers to the end of the \lstinline$choose$ statement at a \lstinline$case$ or \lstinline$default$ labeled statement. 3569 The \lstinline$fallthru$ statement is used to fall through to the next \lstinline$case$ or \lstinline$default$ labeled statement. 3433 3570 The following have identical meaning: 3434 3571 \begin{flushleft} … … 3455 3592 \end{tabular} 3456 3593 \end{flushleft} 3457 The \lstinline @choose@ statement addresses the problem of accidental fall-through associated with the \lstinline@switch@statement.3594 The \lstinline$choose$ statement addresses the problem of accidental fall-through associated with the \lstinline$switch$ statement. 3458 3595 3459 3596 3460 3597 \subsection{Iteration statements} 3461 3598 3462 The controlling expression \lstinline @E@in the loops3599 The controlling expression \lstinline$E$ in the loops 3463 3600 \begin{lstlisting} 3464 3601 if ( E ) ... 3465 3602 while ( E ) ... 3466 3603 do ... while ( E ); 3467 \end{lstlisting} is treated as ``\lstinline @( int )((E)!=0)@''.3604 \end{lstlisting} is treated as ``\lstinline$( int )((E)!=0)$''. 3468 3605 3469 3606 The statement 3470 3607 \begin{lstlisting} 3471 for ( a; b; c ) §\ldots§3608 for ( a; b; c ) @\ldots@ 3472 3609 \end{lstlisting} is treated as 3473 3610 \begin{lstlisting} … … 3480 3617 \begin{syntax} 3481 3618 \oldlhs{jump-statement} 3482 \rhs \lstinline @continue@\nonterm{identifier}\opt3483 \rhs \lstinline @break@\nonterm{identifier}\opt3619 \rhs \lstinline$continue$ \nonterm{identifier}\opt 3620 \rhs \lstinline$break$ \nonterm{identifier}\opt 3484 3621 \rhs \ldots 3485 \rhs \lstinline @throw@\nonterm{assignment-expression}\opt3486 \rhs \lstinline @throwResume@\nonterm{assignment-expression}\opt \nonterm{at-expression}\opt3487 \lhs{at-expression} \lstinline @_At@\nonterm{assignment-expression}3622 \rhs \lstinline$throw$ \nonterm{assignment-expression}\opt 3623 \rhs \lstinline$throwResume$ \nonterm{assignment-expression}\opt \nonterm{at-expression}\opt 3624 \lhs{at-expression} \lstinline$_At$ \nonterm{assignment-expression} 3488 3625 \end{syntax} 3489 3626 3490 Labeled \lstinline @continue@ and \lstinline@break@ allow useful but restricted control-flow that reduces the need for the \lstinline@goto@statement for exiting multiple nested control-structures.3627 Labeled \lstinline$continue$ and \lstinline$break$ allow useful but restricted control-flow that reduces the need for the \lstinline$goto$ statement for exiting multiple nested control-structures. 3491 3628 \begin{lstlisting} 3492 3629 L1: { // compound … … 3515 3652 3516 3653 \setcounter{subsubsection}{1} 3517 \subsubsection [The continue statement]{The \lstinline@continue@statement}3518 3519 The identifier in a \lstinline @continue@statement shall name a label located on an enclosing iteration statement.3520 3521 3522 \subsubsection [The break statement]{The \lstinline@break@statement}3523 3524 The identifier in a \lstinline @break@statement shall name a label located on an enclosing compound, selection or iteration statement.3525 3526 3527 \subsubsection [The return statement]{The \lstinline@return@statement}3528 3529 An expression in a \lstinline @return@statement is treated as being cast to the result type of the function.3530 3531 3532 \subsubsection [The throw statement]{The \lstinline@throw@statement}3654 \subsubsection{The \lstinline$continue$ statement} 3655 3656 The identifier in a \lstinline$continue$ statement shall name a label located on an enclosing iteration statement. 3657 3658 3659 \subsubsection{The \lstinline$break$ statement} 3660 3661 The identifier in a \lstinline$break$ statement shall name a label located on an enclosing compound, selection or iteration statement. 3662 3663 3664 \subsubsection{The \lstinline$return$ statement} 3665 3666 An expression in a \lstinline$return$ statement is treated as being cast to the result type of the function. 3667 3668 3669 \subsubsection{The \lstinline$throw$ statement} 3533 3670 3534 3671 When an exception is raised, \Index{propagation} directs control from a raise in the source execution to a handler in the faulting execution. 3535 3672 3536 3673 3537 \subsubsection [The throwResume statement]{The \lstinline@throwResume@statement}3674 \subsubsection{The \lstinline$throwResume$ statement} 3538 3675 3539 3676 … … 3542 3679 \begin{syntax} 3543 3680 \lhs{exception-statement} 3544 \rhs \lstinline @try@\nonterm{compound-statement} \nonterm{handler-list}3545 \rhs \lstinline @try@\nonterm{compound-statement} \nonterm{finally-clause}3546 \rhs \lstinline @try@\nonterm{compound-statement} \nonterm{handler-list} \nonterm{finally-clause}3681 \rhs \lstinline$try$ \nonterm{compound-statement} \nonterm{handler-list} 3682 \rhs \lstinline$try$ \nonterm{compound-statement} \nonterm{finally-clause} 3683 \rhs \lstinline$try$ \nonterm{compound-statement} \nonterm{handler-list} \nonterm{finally-clause} 3547 3684 \lhs{handler-list} 3548 3685 \rhs \nonterm{handler-clause} 3549 \rhs \lstinline @catch@ \lstinline@(@ \ldots \lstinline@)@\nonterm{compound-statement}3550 \rhs \nonterm{handler-clause} \lstinline @catch@ \lstinline@(@ \ldots \lstinline@)@\nonterm{compound-statement}3551 \rhs \lstinline @catchResume@ \lstinline@(@ \ldots \lstinline@)@\nonterm{compound-statement}3552 \rhs \nonterm{handler-clause} \lstinline @catchResume@ \lstinline@(@ \ldots \lstinline@)@\nonterm{compound-statement}3686 \rhs \lstinline$catch$ \lstinline$($ \ldots \lstinline$)$ \nonterm{compound-statement} 3687 \rhs \nonterm{handler-clause} \lstinline$catch$ \lstinline$($ \ldots \lstinline$)$ \nonterm{compound-statement} 3688 \rhs \lstinline$catchResume$ \lstinline$($ \ldots \lstinline$)$ \nonterm{compound-statement} 3689 \rhs \nonterm{handler-clause} \lstinline$catchResume$ \lstinline$($ \ldots \lstinline$)$ \nonterm{compound-statement} 3553 3690 \lhs{handler-clause} 3554 \rhs \lstinline @catch@ \lstinline@(@ \nonterm{exception-declaration} \lstinline@)@\nonterm{compound-statement}3555 \rhs \nonterm{handler-clause} \lstinline @catch@ \lstinline@(@ \nonterm{exception-declaration} \lstinline@)@\nonterm{compound-statement}3556 \rhs \lstinline @catchResume@ \lstinline@(@ \nonterm{exception-declaration} \lstinline@)@\nonterm{compound-statement}3557 \rhs \nonterm{handler-clause} \lstinline @catchResume@ \lstinline@(@ \nonterm{exception-declaration} \lstinline@)@\nonterm{compound-statement}3691 \rhs \lstinline$catch$ \lstinline$($ \nonterm{exception-declaration} \lstinline$)$ \nonterm{compound-statement} 3692 \rhs \nonterm{handler-clause} \lstinline$catch$ \lstinline$($ \nonterm{exception-declaration} \lstinline$)$ \nonterm{compound-statement} 3693 \rhs \lstinline$catchResume$ \lstinline$($ \nonterm{exception-declaration} \lstinline$)$ \nonterm{compound-statement} 3694 \rhs \nonterm{handler-clause} \lstinline$catchResume$ \lstinline$($ \nonterm{exception-declaration} \lstinline$)$ \nonterm{compound-statement} 3558 3695 \lhs{finally-clause} 3559 \rhs \lstinline @finally@\nonterm{compound-statement}3696 \rhs \lstinline$finally$ \nonterm{compound-statement} 3560 3697 \lhs{exception-declaration} 3561 3698 \rhs \nonterm{type-specifier} … … 3565 3702 \rhs \nonterm{new-abstract-declarator-tuple} 3566 3703 \lhs{asynchronous-statement} 3567 \rhs \lstinline @enable@\nonterm{identifier-list} \nonterm{compound-statement}3568 \rhs \lstinline @disable@\nonterm{identifier-list} \nonterm{compound-statement}3704 \rhs \lstinline$enable$ \nonterm{identifier-list} \nonterm{compound-statement} 3705 \rhs \lstinline$disable$ \nonterm{identifier-list} \nonterm{compound-statement} 3569 3706 \end{syntax} 3570 3707 … … 3572 3709 3573 3710 3574 \subsubsection [The try statement]{The \lstinline@try@statement}3575 3576 The \lstinline @try@statement is a block with associated handlers, called a \Index{guarded block};3711 \subsubsection{The \lstinline$try$ statement} 3712 3713 The \lstinline$try$ statement is a block with associated handlers, called a \Index{guarded block}; 3577 3714 all other blocks are \Index{unguarded block}s. 3578 A \lstinline @goto@, \lstinline@break@, \lstinline@return@, or \lstinline@continue@statement can be used to transfer control out of a try block or handler, but not into one.3579 3580 3581 \subsubsection [The enable/disable statements]{The \lstinline@enable@/\lstinline@disable@statements}3582 3583 The \lstinline @enable@/\lstinline@disable@statements toggle delivery of \Index{asynchronous exception}s.3715 A \lstinline$goto$, \lstinline$break$, \lstinline$return$, or \lstinline$continue$ statement can be used to transfer control out of a try block or handler, but not into one. 3716 3717 3718 \subsubsection{The \lstinline$enable$/\lstinline$disable$ statements} 3719 3720 The \lstinline$enable$/\lstinline$disable$ statements toggle delivery of \Index{asynchronous exception}s. 3584 3721 3585 3722 … … 3591 3728 \subsection{Predefined macro names} 3592 3729 3593 The implementation shall define the macro names \lstinline @__LINE__@, \lstinline@__FILE__@,3594 \lstinline @__DATE__@, and \lstinline@__TIME__@, as in the {\c11} standard.3595 It shall not define the macro name \lstinline @__STDC__@.3596 3597 In addition, the implementation shall define the macro name \lstinline @__CFORALL__@to be the decimal constant 1.3730 The implementation shall define the macro names \lstinline$__LINE__$, \lstinline$__FILE__$, 3731 \lstinline$__DATE__$, and \lstinline$__TIME__$, as in the {\c11} standard. 3732 It shall not define the macro name \lstinline$__STDC__$. 3733 3734 In addition, the implementation shall define the macro name \lstinline$__CFORALL__$ to be the decimal constant 1. 3598 3735 3599 3736 … … 3612 3749 The pointer, integral, and floating-point types are all \define{scalar types}. 3613 3750 All of these types can be logically negated and compared. 3614 The assertion ``\lstinline @scalar( Complex )@'' should be read as ``type \lstinline@Complex@is scalar''.3615 \begin{lstlisting} 3616 trait scalar( otype T ) { §\impl{scalar}§3751 The assertion ``\lstinline$scalar( Complex )$'' should be read as ``type \lstinline$Complex$ is scalar''. 3752 \begin{lstlisting} 3753 trait scalar( otype T ) {@\impl{scalar}@ 3617 3754 int !?( T ); 3618 3755 int ?<?( T, T ), ?<=?( T, T ), ?==?( T, T ), ?>=?( T, T ), ?>?( T, T ), ?!=?( T, T ); … … 3624 3761 This is equivalent to inheritance of specifications. 3625 3762 \begin{lstlisting} 3626 trait arithmetic( otype T | scalar( T ) ) { §\impl{arithmetic}§§\use{scalar}§3763 trait arithmetic( otype T | scalar( T ) ) {@\impl{arithmetic}@@\use{scalar}@ 3627 3764 T +?( T ), -?( T ); 3628 3765 T ?*?( T, T ), ?/?( T, T ), ?+?( T, T ), ?-?( T, T ); … … 3630 3767 \end{lstlisting} 3631 3768 3632 The various flavors of \lstinline @char@ and \lstinline@int@and the enumerated types make up the3769 The various flavors of \lstinline$char$ and \lstinline$int$ and the enumerated types make up the 3633 3770 \define{integral types}. 3634 3771 \begin{lstlisting} 3635 trait integral( otype T | arithmetic( T ) ) { §\impl{integral}§§\use{arithmetic}§3772 trait integral( otype T | arithmetic( T ) ) {@\impl{integral}@@\use{arithmetic}@ 3636 3773 T ~?( T ); 3637 3774 T ?&?( T, T ), ?|?( T, T ), ?^?( T, T ); … … 3647 3784 The only operation that can be applied to all modifiable lvalues is simple assignment. 3648 3785 \begin{lstlisting} 3649 trait m_lvalue( otype T ) { §\impl{m_lvalue}§3786 trait m_lvalue( otype T ) {@\impl{m_lvalue}@ 3650 3787 T ?=?( T *, T ); 3651 3788 }; … … 3657 3794 Scalars can also be incremented and decremented. 3658 3795 \begin{lstlisting} 3659 trait m_l_scalar( otype T | scalar( T ) | m_lvalue( T ) ) { §\impl{m_l_scalar}§3660 T ?++( T * ), ?--( T * ); §\use{scalar}§§\use{m_lvalue}§3796 trait m_l_scalar( otype T | scalar( T ) | m_lvalue( T ) ) {@\impl{m_l_scalar}@ 3797 T ?++( T * ), ?--( T * );@\use{scalar}@@\use{m_lvalue}@ 3661 3798 T ++?( T * ), --?( T * ); 3662 3799 }; … … 3664 3801 3665 3802 Modifiable arithmetic lvalues are both modifiable scalar lvalues and arithmetic. 3666 Note that this results in the ``inheritance'' of \lstinline @scalar@along both paths.3667 \begin{lstlisting} 3668 trait m_l_arithmetic( otype T | m_l_scalar( T ) | arithmetic( T ) ) { §\impl{m_l_arithmetic}§3669 T ?/=?( T *, T ), ?*=?( T *, T ); §\use{m_l_scalar}§§\use{arithmetic}§3803 Note that this results in the ``inheritance'' of \lstinline$scalar$ along both paths. 3804 \begin{lstlisting} 3805 trait m_l_arithmetic( otype T | m_l_scalar( T ) | arithmetic( T ) ) {@\impl{m_l_arithmetic}@ 3806 T ?/=?( T *, T ), ?*=?( T *, T );@\use{m_l_scalar}@@\use{arithmetic}@ 3670 3807 T ?+=?( T *, T ), ?-=?( T *, T ); 3671 3808 }; 3672 trait m_l_integral( otype T | m_l_arithmetic( T ) | integral( T ) ) { §\impl{m_l_integral}§3673 T ?&=?( T *, T ), ?|=?( T *, T ), ?^=?( T *, T ); §\use{m_l_arithmetic}§3674 T ?%=?( T *, T ), ?<<=?( T *, T ), ?>>=?( T *, T ); §\use{integral}§3809 trait m_l_integral( otype T | m_l_arithmetic( T ) | integral( T ) ) {@\impl{m_l_integral}@ 3810 T ?&=?( T *, T ), ?|=?( T *, T ), ?^=?( T *, T );@\use{m_l_arithmetic}@ 3811 T ?%=?( T *, T ), ?<<=?( T *, T ), ?>>=?( T *, T );@\use{integral}@ 3675 3812 }; 3676 3813 \end{lstlisting} … … 3680 3817 3681 3818 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 3682 ``\lstinline @a[i]@'' is equivalent to the dereferencing expression ``\lstinline@(*( a+( i )))@''.3683 Technically, pointer arithmetic and pointer comparisons other than ``\lstinline @==@'' and3684 ``\lstinline @!=@'' are only defined for pointers to array elements, but the type system does not enforce those restrictions.3819 ``\lstinline$a[i]$'' is equivalent to the dereferencing expression ``\lstinline$(*( a+( i )))$''. 3820 Technically, pointer arithmetic and pointer comparisons other than ``\lstinline$==$'' and 3821 ``\lstinline$!=$'' are only defined for pointers to array elements, but the type system does not enforce those restrictions. 3685 3822 Consequently, there is no need for a separate ``array type'' specification. 3686 3823 3687 3824 Pointer types are scalar types. 3688 Like other scalar types, they have ``\lstinline @+@'' and3689 ``\lstinline @-@'' operators, but the types do not match the types of the operations in3690 \lstinline @arithmetic@, so these operators cannot be consolidated in \lstinline@scalar@.3691 \begin{lstlisting} 3692 trait pointer( type P | scalar( P ) ) { §\impl{pointer}§§\use{scalar}§3825 Like other scalar types, they have ``\lstinline$+$'' and 3826 ``\lstinline$-$'' operators, but the types do not match the types of the operations in 3827 \lstinline$arithmetic$, so these operators cannot be consolidated in \lstinline$scalar$. 3828 \begin{lstlisting} 3829 trait pointer( type P | scalar( P ) ) {@\impl{pointer}@@\use{scalar}@ 3693 3830 P ?+?( P, long int ), ?+?( long int, P ), ?-?( P, long int ); 3694 3831 ptrdiff_t ?-?( P, P ); 3695 3832 }; 3696 trait m_l_pointer( type P | pointer( P ) | m_l_scalar( P ) ) { §\impl{m_l_pointer}§3833 trait m_l_pointer( type P | pointer( P ) | m_l_scalar( P ) ) {@\impl{m_l_pointer}@ 3697 3834 P ?+=?( P *, long int ), ?-=?( P *, long int ); 3698 3835 P ?=?( P *, void * ); … … 3703 3840 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. 3704 3841 Different specifications are needed for each set of \Index{type qualifier}s, because qualifiers are not included in types. 3705 The assertion ``\lstinline @|ptr_to( Safe_pointer, int )@'' should be read as3706 ``\lstinline @Safe_pointer@ acts like a pointer to \lstinline@int@''.3707 \begin{lstlisting} 3708 trait ptr_to( otype P | pointer( P ), otype T ) {§\impl{ptr_to}§§\use{pointer}§3842 The assertion ``\lstinline$|ptr_to( Safe_pointer, int )$'' should be read as 3843 ``\lstinline$Safe_pointer$ acts like a pointer to \lstinline$int$''. 3844 \begin{lstlisting} 3845 trait ptr_to( type P | pointer( P ), otype T ) {@\impl{ptr_to}@@\use{pointer}@ 3709 3846 lvalue T *?( P ); 3710 3847 lvalue T ?[?]( P, long int ); 3711 3848 }; 3712 trait ptr_to_const( otype P | pointer( P ), otype T ) {§\impl{ptr_to_const}§3849 trait ptr_to_const( type P | pointer( P ), otype T ) {@\impl{ptr_to_const}@ 3713 3850 const lvalue T *?( P ); 3714 const lvalue T ?[?]( P, long int ); §\use{pointer}§3851 const lvalue T ?[?]( P, long int );@\use{pointer}@ 3715 3852 }; 3716 trait ptr_to_volatile( otype P | pointer( P ), otype T ) }§\impl{ptr_to_volatile}§3853 trait ptr_to_volatile( type P | pointer( P ), otype T ) }@\impl{ptr_to_volatile}@ 3717 3854 volatile lvalue T *?( P ); 3718 volatile lvalue T ?[?]( P, long int ); §\use{pointer}§3855 volatile lvalue T ?[?]( P, long int );@\use{pointer}@ 3719 3856 }; 3720 trait ptr_to_const_volatile( otype P | pointer( P ), otype T ) }§\impl{ptr_to_const_volatile}§3721 const volatile lvalue T *?( P ); §\use{pointer}§3857 trait ptr_to_const_volatile( type P | pointer( P ), otype T ) }@\impl{ptr_to_const_volatile}@ 3858 const volatile lvalue T *?( P );@\use{pointer}@ 3722 3859 const volatile lvalue T ?[?]( P, long int ); 3723 3860 }; 3724 3861 \end{lstlisting} 3725 3862 3726 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 *@''.3863 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 *$''. 3727 3864 Again, the pointed-at type is passed in, so that assertions can connect these specifications to the 3728 ``\lstinline @ptr_to@'' specifications.3729 \begin{lstlisting} 3730 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}§{3865 ``\lstinline$ptr_to$'' specifications. 3866 \begin{lstlisting} 3867 trait m_l_ptr_to( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to}@ otype T | ptr_to( P, T )@\use{ptr_to}@ { 3731 3868 P ?=?( P *, T * ); 3732 3869 T * ?=?( T **, P ); 3733 3870 }; 3734 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}§) {3871 trait m_l_ptr_to_const( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to_const}@ otype T | ptr_to_const( P, T )@\use{ptr_to_const}@) { 3735 3872 P ?=?( P *, const T * ); 3736 3873 const T * ?=?( const T **, P ); 3737 3874 }; 3738 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}§3875 trait m_l_ptr_to_volatile( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to_volatile}@ otype T | ptr_to_volatile( P, T )) {@\use{ptr_to_volatile}@ 3739 3876 P ?=?( P *, volatile T * ); 3740 3877 volatile T * ?=?( volatile T **, P ); 3741 3878 }; 3742 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}§3743 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}§3879 trait m_l_ptr_to_const_volatile( type P | ptr_to_const_volatile( P ),@\use{ptr_to_const_volatile}@@\impl{m_l_ptr_to_const_volatile}@ 3880 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}@ 3744 3881 P ?=?( P *, const volatile T * ); 3745 3882 const volatile T * ?=?( const volatile T **, P ); … … 3750 3887 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. 3751 3888 \begin{lstlisting} 3752 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 ) ) {3889 trait m_l_ptr_like( type MyP | m_l_pointer( MyP ),@\use{m_l_pointer}@@\impl{m_l_ptr_like}@ type CP | m_l_pointer( CP ) ) { 3753 3890 MyP ?=?( MyP *, CP ); 3754 3891 CP ?=?( CP *, MyP ); 3755 3892 }; 3756 3893 \end{lstlisting} 3757 The assertion ``\lstinline @| m_l_ptr_like( Safe_ptr, const int * )@'' should be read as3758 ``\lstinline @Safe_ptr@ is a pointer type like \lstinline@const int *@''.3894 The assertion ``\lstinline$| m_l_ptr_like( Safe_ptr, const int * )$'' should be read as 3895 ``\lstinline$Safe_ptr$ is a pointer type like \lstinline$const int *$''. 3759 3896 This specification has two defects, compared to the original four: there is no automatic assertion that dereferencing a 3760 \lstinline @MyP@ produces an lvalue of the type that \lstinline@CP@points at, and the3761 ``\lstinline @|m_l_pointer( CP )@'' assertion provides only a weak assurance that the argument passed to \lstinline@CP@really is a pointer type.3897 \lstinline$MyP$ produces an lvalue of the type that \lstinline$CP$ points at, and the 3898 ``\lstinline$|m_l_pointer( CP )$'' assertion provides only a weak assurance that the argument passed to \lstinline$CP$ really is a pointer type. 3762 3899 3763 3900 … … 3765 3902 3766 3903 Different operators often have related meanings; 3767 for instance, in C, ``\lstinline @+@'',3768 ``\lstinline @+=@'', and the two versions of ``\lstinline@++@'' perform variations of addition.3904 for instance, in C, ``\lstinline$+$'', 3905 ``\lstinline$+=$'', and the two versions of ``\lstinline$++$'' perform variations of addition. 3769 3906 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. 3770 3907 Completeness and consistency is left to the good taste and discretion of the programmer. … … 3779 3916 The different comparison operators have obvious relationships, but there is no obvious subset of the operations to use in the implementation of the others. 3780 3917 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; 3781 the library function \lstinline @strcmp@is an example.3782 3783 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.3918 the library function \lstinline$strcmp$ is an example. 3919 3920 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. 3784 3921 \begin{lstlisting} 3785 3922 trait comparable( otype T ) { … … 3830 3967 3831 3968 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 3832 \lstinline @int_base@, \lstinline@arith_base@ and \lstinline@comparable@.3969 \lstinline$int_base$, \lstinline$arith_base$ and \lstinline$comparable$. 3833 3970 Note also that these declarations provide guidance and assistance, but they do not define an absolutely minimal set of requirements. 3834 A truly minimal implementation of an arithmetic type might only provide \lstinline@0@, \lstinline@1@, and \lstinline@?-=?@, which would be used by polymorphic \lstinline@?+=?@, \lstinline@?*=?@, and \lstinline@?/=?@ functions. 3835 3836 Note also that \lstinline@short@ is an integer type in C11 terms, but has no operations! 3971 A truly minimal implementation of an arithmetic type might only provide 3972 \lstinline$0$, \lstinline$1$, and \lstinline$?-=?$, which would be used by polymorphic 3973 \lstinline$?+=?$, \lstinline$?*=?$, and \lstinline$?/=?$ functions. 3974 3975 Note also that \lstinline$short$ is an integer type in C11 terms, but has no operations! 3837 3976 3838 3977 … … 3841 3980 3842 3981 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.3982 This gets into \lstinline$noalias$ territory. 3983 Qualifying anything (``\lstinline$short restrict rs$'') means pointer parameters of \lstinline$?++$, etc, would need restrict qualifiers. 3845 3984 3846 3985 Enumerated types. … … 3852 3991 Color, enum Color ) really make sense? ?++ does, but it adds (int)1. 3853 3992 3854 Operators on {,signed,unsigned} char and other small types. \lstinline@?<?@harmless;3993 Operators on {,signed,unsigned} char and other small types. ?<? harmless; 3855 3994 ?*? questionable for chars. 3856 3995 Generic selections make these choices visible. … … 3858 3997 ``promotion'' function? 3859 3998 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.3861 3862 Don't use \lstinline@ptrdiff_t@by name in the predefineds.3999 \lstinline$register$ assignment might be handled as assignment to a temporary with copying back and forth, but copying must not be done by assignment. 4000 4001 Don't use ptrdiff\_t by name in the predefineds. 3863 4002 3864 4003 Polymorphic objects. … … 3867 4006 3868 4007 \bibliographystyle{plain} 3869 \bibliography{ cfa}4008 \bibliography{refrat} 3870 4009 3871 4010 -
doc/user/Makefile
r1048b31 r1f6e009 1 1 ## Define the appropriate configuration variables. 2 2 3 TeXLIB = .: ../bibliography/:../LaTeXmacros/:3 TeXLIB = .:: 4 4 LaTeX = TEXINPUTS=${TeXLIB} && export TEXINPUTS && latex 5 BibTeX = B IBINPUTS=${TeXLIB} && export BIBINPUTS && bibtex5 BibTeX = BSTINPUTS=${TeXLIB} && export BSTINPUTS && bibtex 6 6 7 7 ## Define the text source files. … … 12 12 13 13 FIGURES = ${addsuffix .tex, \ 14 Cdecl \15 14 } 16 15 … … 44 43 dvips $< -o $@ 45 44 46 ${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex \ 47 ../LaTeXmacros/common.tex ../LaTeXmacros/indexstyle ../bibliography/cfa.bib 45 ${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex ${basename ${DOCUMENT}}.bib /usr/local/bibliographies/pl.bib 48 46 # Conditionally create an empty *.ind (index) file for inclusion until makeindex is run. 49 47 if [ ! -r ${basename $@}.ind ] ; then touch ${basename $@}.ind ; fi … … 55 53 -${BibTeX} ${basename $@} 56 54 # Make index from *.aux entries and input index at end of document 57 makeindex -s ../LaTeXmacros/indexstyle ${basename $@}.idx55 makeindex -s indexstyle ${basename $@}.idx 58 56 ${LaTeX} ${basename $@}.tex 59 57 # Run again to get index title into table of contents -
doc/user/user.tex
r1048b31 r1f6e009 1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -*- Mode: Latex -*- %%%%%%%%%%%%%%%%%%%%%%%%%%%%2 %%3 %% Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo4 %%5 %% The contents of this file are covered under the licence agreement in the6 %% file "LICENCE" distributed with Cforall.7 %%8 %% user.tex --9 %%10 %% Author : Peter A. Buhr11 %% Created On : Wed Apr 6 14:53:29 201612 %% Last Modified By : Peter A. Buhr13 %% Last Modified On : Sat Apr 30 13:54:32 201614 %% Update Count : 22115 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%16 17 1 % requires tex packages: texlive-base texlive-latex-base tex-common texlive-humanities texlive-latex-extra texlive-fonts-recommended 18 19 % red highlighting ®...® (registered trademark sumbol)20 % blue highlighting ©...© (copyright symbol)21 % latex escape §...§ (section symbol)22 % keyword escape ¶...¶ (pilcrow symbol)23 % math escape $...$ (dollar symbol)24 2 25 3 \documentclass[openright,twoside]{article} … … 27 5 28 6 % Latex packages used in the document. 29 \usepackage[T1]{fontenc} % allow Latin1 (extended ASCII) characters 30 \usepackage{textcomp} 31 \usepackage[latin1]{inputenc} 32 \usepackage{upquote} 7 33 8 \usepackage{fullpage,times} 34 \usepackage{epic,eepic}35 9 \usepackage{xspace} 36 10 \usepackage{varioref} … … 38 12 \usepackage{footmisc} 39 13 \usepackage{comment} 40 \usepackage{latexsym} % \Box41 \usepackage{mathptmx} % better math font with "times"14 \usepackage{latexsym} % \Box 15 \usepackage{mathptmx} % better math font with "times" 42 16 \usepackage[pagewise]{lineno} 43 17 \renewcommand{\linenumberfont}{\scriptsize\sffamily} … … 48 22 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 49 23 24 % Names used in the document. 25 26 \newcommand{\CFA}{C$\forall$\xspace} % set language symbolic name 27 \newcommand{\CFL}{Cforall\xspace} % set language text name 28 \newcommand{\CC}{C\kern-.1em\hbox{+\kern-.25em+}\xspace} % CC symbolic name 29 \def\c11{ISO/IEC C} % C11 name (cannot have numbers in latex command name) 30 \newcommand{\CS}{C\raisebox{-0.9ex}{\large$^\sharp$}\xspace} 31 32 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 33 50 34 % Bespoke macros used in the document. 51 \input{common} 52 53 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 54 55 % Names used in the document. 56 57 \newcommand{\Version}{1.0.0} 58 \newcommand{\CS}{C\raisebox{-0.9ex}{\large$^\sharp$}\xspace} 59 60 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 61 62 \setcounter{secnumdepth}{3} % number subsubsections 63 \setcounter{tocdepth}{3} % subsubsections in table of contents 35 36 \makeatletter 37 % allow escape sequence in lstinline 38 %\usepackage{etoolbox} 39 %\patchcmd{\lsthk@TextStyle}{\let\lst@DefEsc\@empty}{}{}{\errmessage{failed to patch}} 40 41 \renewcommand\small{% 42 \@setfontsize\small{8.5}{11}% 43 \abovedisplayskip 8.5pt \@plus 3pt \@minus 4pt 44 \abovedisplayshortskip \z@ \@plus 2pt 45 \belowdisplayshortskip 4pt \@plus 2pt \@minus 2pt 46 \def\@listi{\leftmargin\leftmargini 47 \topsep 4pt \@plus 2pt \@minus 2pt 48 \parsep 2pt \@pluspt \@minuspt 49 \itemsep \parsep}% 50 \belowdisplayskip \abovedisplayskip 51 } 52 \usepackage{relsize} % must be after change to small 53 54 \renewcommand{\labelitemi}{{\raisebox{0.25ex}{\footnotesize$\bullet$}}} 55 \renewenvironment{itemize}{\begin{list}{\labelitemi}{\topsep=5pt\itemsep=5pt\parsep=0pt}}{\end{list}} 56 57 % Reduce size of section titles 58 \renewcommand\section{\@startsection{section}{1}{\z@}{-3.0ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\large\bfseries}} 59 \renewcommand\subsection{\@startsection{subsection}{2}{\z@}{-2.5ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\normalsize\bfseries}} 60 \renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}{-2.5ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\normalsize\bfseries}} 61 \renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}{-2.0ex \@plus -1ex \@minus -.2ex}{-1em}{\normalfont\normalsize\bfseries}} 62 63 % index macros 64 \newcommand{\italic}[1]{\emph{\hyperpage{#1}}} 65 \newcommand{\definition}[1]{\textbf{\hyperpage{#1}}} 66 \newcommand{\see}[1]{\emph{see} #1} 67 68 % Define some commands that produce formatted index entries suitable for cross-references. 69 % ``\spec'' produces entries for specifications of entities. ``\impl'' produces entries for their 70 % implementations, and ``\use'' for their uses. 71 72 % \newcommand{\bold}[1]{{\bf #1}} 73 % \def\spec{\@bsphack\begingroup 74 % \def\protect##1{\string##1\space}\@sanitize 75 % \@wrxref{|bold}} 76 \def\impl{\@bsphack\begingroup 77 \def\protect##1{\string##1\space}\@sanitize 78 \@wrxref{|definition}} 79 \newcommand{\indexcode}[1]{{\lstinline$#1$}} 80 \def\use{\@bsphack\begingroup 81 \def\protect##1{\string##1\space}\@sanitize 82 \@wrxref{|hyperpage}} 83 \def\@wrxref#1#2{\let\thepage\relax 84 \xdef\@gtempa{\write\@indexfile{\string 85 \indexentry{#2@{\lstinline$#2$}#1}{\thepage}}}\endgroup\@gtempa 86 \if@nobreak \ifvmode\nobreak\fi\fi\@esphack} 87 %\newcommand{\use}[1]{\index{#1@{\lstinline$#1$}}} 88 %\newcommand{\impl}[1]{\index{\protect#1@{\lstinline$\protect#1$}|definition}} 89 90 % inline text and lowercase index: \Index{inline and lowercase index text} 91 % inline text and as-in index: \Index[as-is index text]{inline text} 92 % inline text but index with different as-is text: \Index[index text]{inline text} 93 \newcommand{\Index}{\@ifstar\@sIndex\@Index} 94 \newcommand{\@Index}[2][\@empty]{\lowercase{\def\temp{#2}}#2\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi} 95 \newcommand{\@sIndex}[2][\@empty]{#2\ifx#1\@empty\index{#2}\else\index{#1@{\protect#2}}\fi} 96 97 \newcommand{\newtermFontInline}{\emph} 98 \newcommand{\newterm}{\@ifstar\@snewterm\@newterm} 99 \newcommand{\@newterm}[2][\@empty]{\lowercase{\def\temp{#2}}{\newtermFontInline{#2}}\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi} 100 \newcommand{\@snewterm}[2][\@empty]{{\newtermFontInline{#2}}\ifx#1\@empty\index{#2}\else\index{#1@{\protect#2}}\fi} 101 \makeatother 102 103 % blocks and titles 104 \newenvironment{quote2}{% 105 \list{}{\lstset{resetmargins=true}\leftmargin=\parindent\rightmargin\leftmargin}% 106 \item\relax 107 }{% 108 \endlist 109 }% quote2 110 \newenvironment{rationale}{% 111 \begin{quotation}\noindent$\Box$\enspace 112 }{% 113 \hfill\enspace$\Box$\end{quotation} 114 }% 115 \newcommand{\define}[1]{\emph{#1\/}\index{#1}} 116 \newcommand{\rewrite}{\(\Rightarrow\)} 117 \newcommand{\rewriterules}{\paragraph{Rewrite Rules}~\par\noindent} 118 \newcommand{\examples}{\paragraph{Examples}~\par\noindent} 119 \newcommand{\semantics}{\paragraph{Semantics}~\par\noindent} 120 \newcommand{\constraints}{\paragraph{Constraints}~\par\noindent} 121 \newcommand{\predefined}{\paragraph{Predefined Identifiers}~\par\noindent} 122 123 % BNF macros 124 \def\syntax{\paragraph{Syntax}\trivlist\parindent=.5in\item[\hskip.5in]} 125 \let\endsyntax=\endtrivlist 126 \newcommand{\lhs}[1]{\par{\emph{#1:}}\index{#1@{\emph{#1}}|italic}} 127 \newcommand{\rhs}{\hfil\break\hbox{\hskip1in}} 128 \newcommand{\oldlhs}[1]{\emph{#1: \ldots}\index{#1@{\emph{#1}}|italic}} 129 \newcommand{\nonterm}[1]{\emph{#1\/}\index{#1@{\emph{#1}}|italic}} 130 \newcommand{\opt}{$_{opt}$\ } 131 132 % adjust varioref package with default "section" and "page" titles, and optional title with faraway page numbers 133 % \VRef{label} => Section 2.7, \VPageref{label} => page 17 134 % \VRef[Figure]{label} => Figure 3.4, \VPageref{label} => page 17 135 \renewcommand{\reftextfaceafter}{\unskip} 136 \renewcommand{\reftextfacebefore}{\unskip} 137 \renewcommand{\reftextafter}{\unskip} 138 \renewcommand{\reftextbefore}{\unskip} 139 \renewcommand{\reftextfaraway}[1]{\unskip, p.~\pageref{#1}} 140 \renewcommand{\reftextpagerange}[2]{\unskip, pp.~\pageref{#1}--\pageref{#2}} 141 \newcommand{\VRef}[2][Section]{\ifx#1\@empty\else{#1}\nobreakspace\fi\vref{#2}} 142 \newcommand{\VPageref}[2][page]{\ifx#1\@empty\else{#1}\nobreakspace\fi\pageref{#2}} 143 144 % Go programming language 145 \lstdefinelanguage{Golang}% 146 {morekeywords=[1]{package,import,func,type,struct,return,defer,panic, recover,select,var,const,iota,},% 147 morekeywords=[2]{string,uint,uint8,uint16,uint32,uint64,int,int8,int16, int32,int64, 148 bool,float32,float64,complex64,complex128,byte,rune,uintptr, error,interface},% 149 morekeywords=[3]{map,slice,make,new,nil,len,cap,copy,close,true,false, delete,append,real,imag,complex,chan,},% 150 morekeywords=[4]{for,break,continue,range,goto,switch,case,fallthrough,if, else,default,},% 151 morekeywords=[5]{Println,Printf,Error,},% 152 sensitive=true,% 153 morecomment=[l]{//},% 154 morecomment=[s]{/*}{*/},% 155 morestring=[b]',% 156 morestring=[b]",% 157 morestring=[s]{`}{`},% 158 } 159 160 % CFA based on ANSI C 161 \lstdefinelanguage{CFA}[ANSI]{C}% 162 {morekeywords={asm,_Alignas,_Alignof,_At,_Atomic,_Bool,catch,catchResume,choose,_Complex,trait,disable,dtype,enable, 163 fallthru,finally,forall,ftype,_Generic,_Imaginary,inline,lvalue,_Noreturn,otype,restrict,_Static_assert, 164 _Thread_local,throw,throwResume,try,}, 165 }% 166 167 \lstset{ 168 language=CFA, 169 columns=flexible, 170 basicstyle=\sf\relsize{-1}, 171 tabsize=4, 172 xleftmargin=\parindent, 173 escapechar=@, 174 mathescape=true, 175 keepspaces=true, 176 showstringspaces=false, 177 showlines=true, 178 }% 179 180 \makeatletter 181 % replace/adjust listings characters that look bad in sanserif 182 \lst@CCPutMacro 183 \lst@ProcessOther{"2D}{\lst@ttfamily{-{}}{{\ttfamily\upshape -}}} % replace minus 184 \lst@ProcessOther{"3C}{\lst@ttfamily{<}{\texttt{<}}} % replace less than 185 \lst@ProcessOther{"3E}{\lst@ttfamily{<}{\texttt{>}}} % replace greater than 186 \lst@ProcessOther{"5E}{\raisebox{0.4ex}{$\scriptstyle\land\,$}} % replace circumflex 187 \lst@ProcessLetter{"5F}{\lst@ttfamily{\char95}{{\makebox[1.2ex][c]{\rule{1ex}{0.1ex}}}}} % replace underscore 188 \lst@ProcessOther{"7E}{\raisebox{0.3ex}{$\scriptstyle\sim\,$}} % replace tilde 189 %\lst@ProcessOther{"7E}{\raisebox{-.4ex}[1ex][0pt]{\textasciitilde}} % lower tilde 190 \@empty\z@\@empty 191 \makeatother 192 193 \setcounter{secnumdepth}{3} % number subsubsections 194 \setcounter{tocdepth}{3} % subsubsections in table of contents 64 195 \makeindex 65 196 … … 68 199 \begin{document} 69 200 \pagestyle{headings} 70 \linenumbers % comment out to turn off line numbering201 \linenumbers % comment out to turn off line numbering 71 202 72 203 \title{\Huge … … 82 213 }% author 83 214 \date{ 84 DRAFT \\ 85 \today 215 DRAFT\\\today 86 216 }% date 87 217 … … 111 241 112 242 \CFA\footnote{Pronounced ``C-for-all'', and written \CFA, CFA, or \CFL.} is a modern general-purpose programming-language, designed an as evolutionary step forward from the C programming language. 113 The syntax of the \CFA language builds from C, and should look immediately familiar to C programmers.243 The syntax of the \CFA language builds from that of C, and should look immediately familiar to C programmers. 114 244 % Any language feature that is not described here can be assumed to be using the standard C11 syntax. 115 \CFA adds many modern programming-language features, which directly leads to increased safety and productivity, while maintaining interoperability with existing C programs and achieving Cperformance.245 \CFA has added many modern programming-language features, which directly leads to increased safety and productivity, while maintaining interoperability with existing C programs, and maintaining C-like performance. 116 246 Like C, \CFA is a statically typed, procedural language with a low-overhead runtime, meaning there is no global garbage-collection. 117 247 The primary new features include parametric-polymorphism routines and types, exceptions, concurrency, and modules. … … 124 254 New programs can be written in \CFA using a combination of C and \CFA features. 125 255 \CC had a similar goal 30 years ago, but has struggled over the intervening time to incorporate modern programming-language features because of early design choices. 126 \CFA has 30 years of hindsight and clean starting point.256 \CFA has 30 years of hindsight and a much cleaner starting point than \CC. 127 257 128 258 Like \CC, there may be both an old and new ways to achieve the same effect. … … 149 279 \end{quote2} 150 280 Both programs output the same result. 151 While the \CFA I/O looks similar to the \CC output style, there are several important differences, such as automatic spacing between variables as in Python (see also~\VRef{s:IOLibrary}).281 While the \CFA I/O looks similar to the \CC style of output, there are several important differences, such as automatic spacing between variables as in Python (see also~\VRef{s:IOLibrary}). 152 282 153 283 This document is a reference manual for the \CFA programming language, targeted at \CFA programmers. 154 Implementers may refer to the \CFA Programming Language Specification for details about the language syntax and semantics.284 Implementers may also refer to the \CFA Programming Language Specification for details about the language syntax and semantics. 155 285 In its current state, this document covers the intended core features of the language. 156 286 Changes to the syntax and additional features are expected to be included in later revisions. … … 164 294 The original \CFA project~\cite{Ditchfield92} extended the C type system with parametric polymorphism and overloading, as opposed to the \CC approach of object-oriented extensions to the C type-system. 165 295 A first implementation of the core Cforall language was created~\cite{Bilson03,Esteves04}, but at the time there was little interesting in extending C, so work did not continue. 166 As the saying goes, ``What goes around, comes around'', and there is now renewed interest in the C programming language because of legacy code-bases, so the \CFA project has been restarted.167 168 169 \section{ Why fix C?}296 As the saying goes, ``What goes around, comes around'', and there is now renewed interest in the C programming language, so the \CFA project has been restarted. 297 298 299 \section{Motivation: Why fix C?} 170 300 171 301 Even with all its problems, C is a very popular programming language because it allows writing software at virtually any level in a computer system without restriction. … … 184 314 Java~\cite{Java8}, Go~\cite{Go}, Rust~\cite{Rust} and D~\cite{D} are examples of the revolutionary approach for modernizing C/\CC, resulting in a new language rather than an extension of the descendent. 185 315 These languages have different syntax and semantics from C, and do not interoperate directly with C, largely because of garbage collection. 186 As a result, there is a significant learning curve to move to these languages, and C legacy-code must be rewritten.316 As a result, there is a significant learning curve to move to these languages, and C legacy-code must be complete rewritten. 187 317 These costs can be prohibitive for many companies with a large software base in C/\CC, and many programmers that require retraining to a new programming language. 188 318 … … 201 331 This feature allows users of \CFA to take advantage of the existing panoply of C libraries from inside their \CFA code. 202 332 In fact, one of the biggest issues for any new programming language is establishing a minimum level of library code to support a large body of activities. 203 Programming-language developers often state that adequate library support takes more workthan designing and implementing the language itself.333 Programming-language developers often state that adequate library support costs many times more than designing and implementing the language itself. 204 334 Like \CC, \CFA starts with immediate access to all exiting C libraries, and in many cases, can easily wrap library routines with simpler and safer interfaces, at very low cost. 205 335 … … 208 338 Whereas, \CFA wraps each of these routines into one with the common name \lstinline@abs@. 209 339 \begin{lstlisting} 340 extern "C" { 341 #include <stdlib.h> // provide C prototype for integer "abs" routine 342 } // extern "C" 343 210 344 char abs( char ); 211 extern "C" { 212 int abs( int ); // use default C routine for int 213 } // extern "C" 214 long int abs( long int ); 345 long int abs( long int ); // @{\CFA}@ overload name "abs" for other types 215 346 long long int abs( long long int ); 216 347 float abs( float ); … … 229 360 The name ``\lstinline@abs@'' evokes the notion of absolute value, and many mathematical types provide the notion of absolute value. 230 361 Hence, knowing the name \lstinline@abs@ should be sufficient to apply it to any type where it is applicable. 231 The time savings and safety of using one name uniformly versus $N$unique names should not be underestimated.232 233 234 \section [Compiling CFA Program]{Compiling \CFA Program}362 The time savings and safety of using one name uniformly versus @N@ unique names should not be underestimated. 363 364 365 \section{Compiling \CFA} 235 366 236 367 The command \lstinline@cfa@ is used to compile \CFA program(s). 237 This command works like the GNU \lstinline@gcc@\index{gcc} command, e.g.: 238 \begin{lstlisting} 239 cfa [ gcc-options ] C/§\CFA§-files [ assembler/loader-files ] 240 \end{lstlisting} 241 \indexc{cfa}\index{compilation!cfa@\lstinline$cfa$} 242 By default, \CFA programs having the following \lstinline@gcc@ flags turned on: 368 This command works like the GNU \lstinline@gcc@ command, e.g.: 369 \begin{lstlisting} 370 cfa [ gcc-options ] C/@{\CFA}@-files [ assembler/loader-files ] 371 \end{lstlisting} 372 The following additional option is available: 243 373 \begin{description} 244 \item\hspace*{-4pt}\Indexc{-std=gnu99}\index{compilation option!-std=gnu99@{\lstinline$-std=gnu99$}} 245 The 1999 C standard plus GNU extensions. 246 \item\hspace*{-4pt}\Indexc{-fgnu89-¶inline¶}\index{compilation option!-fgnu89-inline@{\lstinline$-fgnu89-¶inline¶$}} 247 Use the traditional GNU semantics for inline routines in C99 mode. 248 \end{description} 249 The following new \CFA option is available: 250 \begin{description} 251 \item\hspace*{-4pt}\Indexc{-CFA}\index{compilation option!-CFA@{\lstinline$-CFA$}} 374 \item 375 \hspace*{-4pt}\lstinline@-CFA@ 252 376 Only the C preprocessor and the \CFA translator steps are performed and the transformed program is written to standard output, which makes it possible to examine the code generated by the \CFA translator. 253 377 \end{description} 254 378 255 The following preprocessor variables are available:256 \begin{description}257 \item\hspace*{-4pt}\Indexc{__CFA__}\index{preprocessor variables!__CFA__@{\lstinline$__CFA__$}}258 is always available during preprocessing and its value is the current major \Index{version number} of \CFA.\footnote{259 The C preprocessor allows only integer values in a preprocessor variable so a value like ``\Version'' is not allowed.260 Hence, the need to have three variables for the major, minor and patch version number.}261 262 \item\hspace*{-4pt}\Indexc{__CFA_MINOR__}\index{preprocessor variables!__CFA_MINOR__@{\lstinline$__CFA_MINOR__$}}263 is always available during preprocessing and its value is the current minor \Index{version number} of \CFA.264 265 \item\hspace*{-4pt}\Indexc{__CFA_PATCH__}\index{preprocessor variables!__CFA_PATCH__@\lstinline$__CFA_PATCH__$}266 is always available during preprocessing and its value is the current patch \Index{version number} of \CFA.267 268 \item\hspace*{-4pt}\Indexc{__CFORALL__}\index{preprocessor variables!__CFORALL__@\lstinline$__CFORALL__$}269 is always available during preprocessing and it has no value.270 \end{description}271 272 These preprocessor variables allow conditional compilation of programs that must work differently in these situations.273 For example, to toggle between C and \CFA extensions, using the following:274 \begin{lstlisting}275 #ifndef __CFORALL__276 #include <stdio.h> // C header file277 #else278 #include <fstream> // §\CFA{}§ header file279 #endif280 \end{lstlisting}281 which conditionally includes the correct header file, if the program is compiled using \lstinline@gcc@ or \lstinline@cfa@.282 283 379 284 380 \section{Underscores in Constants} … … 286 382 Numeric constants are extended to allow \Index{underscore}s within constants\index{constant!underscore}, e.g.: 287 383 \begin{lstlisting} 288 2 ®_®147®_®483®_®648; // decimal constant384 2_147_483_648; // decimal constant 289 385 56_ul; // decimal unsigned long constant 290 386 0_377; // octal constant … … 312 408 the type suffixes \lstinline@U@, \lstinline@L@, etc. may start with an underscore \lstinline@1_U@, \lstinline@1_ll@ or \lstinline@1.0E10_f@. 313 409 \end{enumerate} 314 It is significantly easier to read and enterlong constants when they are broken up into smaller groupings (most cultures use comma or period among digits for the same purpose).410 It is significantly easier to read and type long constants when they are broken up into smaller groupings (most cultures use comma or period among digits for the same purpose). 315 411 This extension is backwards compatible, matches with the use of underscore in variable names, and appears in Ada and Java. 316 412 … … 321 417 C declaration syntax is notoriously confusing and error prone. 322 418 For example, many C programmers are confused by a declaration as simple as: 323 \begin{quote2} 324 \begin{tabular}{@{}ll@{}} 325 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt] 326 int *x[ 5 ] 327 \end{lstlisting} 328 & 329 \raisebox{-0.75\totalheight}{\input{Cdecl}} 330 \end{tabular} 331 \end{quote2} 332 Is this an array of 5 pointers to integers or a pointer to an array of 5 integers? 419 \begin{lstlisting} 420 int *x[ 10 ] 421 \end{lstlisting} 422 Is this a pointer to an array of 10 integers or an array of 10 pointers to integers? 333 423 Another example of confusion results from the fact that a routine name and its parameters are embedded within the return type, mimicking the way the return value is used at the routine's call site. 334 424 For example, a routine returning a pointer to an array of integers is defined and used in the following way: 335 425 \begin{lstlisting} 336 int (*f())[ 5 ] {...}; // definition mimics usage337 ... (*f())[ 3 ] += 1; 426 int (*f())[ 10 ] {...}; 427 ... (*f())[ 3 ] += 1; // definition mimics usage 338 428 \end{lstlisting} 339 429 Essentially, the return type is wrapped around the routine name in successive layers (like an onion). … … 344 434 The only exception is bit field specification, which always appear to the right of the base type. 345 435 C and the new \CFA declarations may appear together in the same program block, but cannot be mixed within a specific declaration. 436 Unsupported are K\&R C declarations where the base type defaults to \lstinline@int@, if no type is specified\footnote{ 437 At least one type specifier shall be given in the declaration specifiers in each declaration, and in the specifier-qualifier list in each structure declaration and type name~\cite[\S~6.7.2(2)]{C11}}, 438 e.g.: 439 \begin{lstlisting} 440 x; // int x 441 *y; // int *y 442 f( p1, p2 ); // int f( int p1, int p2 ); 443 f( p1, p2 ) {} // int f( int p1, int p2 ) {} 444 \end{lstlisting} 346 445 347 446 In \CFA declarations, the same tokens are used as in C: the character \lstinline@*@ is used to indicate a pointer, square brackets \lstinline@[@\,\lstinline@]@ are used to represent an array, and parentheses \lstinline@()@ are used to indicate a routine parameter. … … 352 451 \multicolumn{1}{c@{\hspace{30pt}}}{\textbf{\CFA}} & \multicolumn{1}{c}{\textbf{C}} \\ 353 452 \begin{lstlisting} 354 ®* int x, y;® 453 * int x, y; 355 454 \end{lstlisting} 356 455 & … … 365 464 \multicolumn{1}{c@{\hspace{30pt}}}{\textbf{\CFA}} & \multicolumn{1}{c@{\hspace{20pt}}}{\textbf{C}} \\ 366 465 \begin{lstlisting} 367 [ 5] int z;368 [ 5] * char w;369 * [ 5] double v;466 [ 10 ] int z; 467 [ 10 ] * char w; 468 * [ 10 ] double v; 370 469 struct s { 371 int f0:3;470 int f0:3; 372 471 * int f1; 373 [ 5] * int f2;472 [ 10 ] * int f2; 374 473 }; 375 474 \end{lstlisting} 376 475 & 377 476 \begin{lstlisting} 378 int z[ 5];379 char *w[ 5];380 double (*v)[ 5];477 int z[ 10 ]; 478 char *w[ 10 ]; 479 double (*v)[ 10 ]; 381 480 struct s { 382 481 int f0:3; 383 482 int *f1; 384 int *f2[ 5]483 int *f2[ 10 ] 385 484 }; 386 485 \end{lstlisting} 387 486 & 388 487 \begin{lstlisting} 389 // array of 5integers390 // array of 5pointers to char391 // pointer to array of 5doubles488 // array of 10 integers 489 // array of 10 pointers to char 490 // pointer to array of 10 doubles 392 491 393 492 // common bit field syntax … … 398 497 \end{tabular} 399 498 \end{quote2} 499 500 As stated above, the two styles of declaration may appear together in the same block. 501 Therefore, a programmer has the option of either continuing to use traditional C declarations or take advantage of the new style. 502 Clearly, both styles need to be supported for some time due to existing C-style header-files, particularly for UNIX systems. 503 In general, mixing declaration styles in a routine or even a translation unit is not recommended, as it makes a program more difficult to read. 504 Therefore, it is suggested that an entire translation unit be written in one declaration style or the other. 400 505 401 506 All type qualifiers, i.e., \lstinline@const@ and \lstinline@volatile@, are used in the normal way with the new declarations but appear left to right, e.g.: … … 405 510 \begin{lstlisting} 406 511 const * const int x; 407 const * [ 5] const int y;512 const * [ 10 ] const int y; 408 513 \end{lstlisting} 409 514 & 410 515 \begin{lstlisting} 411 516 int const * const x; 412 const int (* const y)[ 5]517 const int (* const y)[ 10 ] 413 518 \end{lstlisting} 414 519 & 415 520 \begin{lstlisting} 416 521 // const pointer to const integer 417 // const pointer to array of 5const integers522 // const pointer to array of 10 const integers 418 523 \end{lstlisting} 419 524 \end{tabular} … … 425 530 \multicolumn{1}{c@{\hspace{30pt}}}{\textbf{\CFA}} & \multicolumn{1}{c@{\hspace{20pt}}}{\textbf{C}} \\ 426 531 \begin{lstlisting} 427 extern [ 5] int x;532 extern [ 10 ] int x; 428 533 static * const int y; 429 534 \end{lstlisting} 430 535 & 431 536 \begin{lstlisting} 432 int extern x[ 5];537 int extern x[ 10 ]; 433 538 const int static *y; 434 539 \end{lstlisting} 435 540 & 436 541 \begin{lstlisting} 437 // externally visible array of 5integers542 // externally visible array of 10 integers 438 543 // internally visible pointer to constant int 439 544 \end{lstlisting} 440 545 \end{tabular} 441 546 \end{quote2} 442 443 Unsupported are K\&R C declarations where the base type defaults to \lstinline@int@, if no type is specified\footnote{444 At least one type specifier shall be given in the declaration specifiers in each declaration, and in the specifier-qualifier list in each structure declaration and type name~\cite[\S~6.7.2(2)]{C11}},445 e.g.:446 \begin{lstlisting}447 x; // int x448 *y; // int *y449 f( p1, p2 ); // int f( int p1, int p2 );450 f( p1, p2 ) {} // int f( int p1, int p2 ) {}451 \end{lstlisting}452 453 As stated above, the two styles of declaration may appear together in the same block.454 Therefore, a programmer has the option of either continuing to use traditional C declarations or take advantage of the new style.455 Clearly, both styles need to be supported for some time due to existing C-style header-files, particularly for UNIX systems.456 547 457 548 … … 464 555 \begin{lstlisting} 465 556 y = (* int)x; 466 i = sizeof([ 5] * int);557 i = sizeof([ 10 ] * int); 467 558 \end{lstlisting} 468 559 & 469 560 \begin{lstlisting} 470 561 y = (int *)x; 471 i = sizeof(int *[ 5]);562 i = sizeof(int *[ 10 ]); 472 563 \end{lstlisting} 473 564 \end{tabular} … … 480 571 The point of the new syntax is to allow returning multiple values from a routine~\cite{CLU,Galletly96}, e.g.: 481 572 \begin{lstlisting} 482 ®[ int o1, int o2, char o3 ]®f( int i1, char i2, char i3 ) {483 §\emph{routine body}§573 [ int o1, int o2, char o3 ] f( int i1, char i2, char i3 ) { 574 @\emph{routine body}@ 484 575 } 485 576 \end{lstlisting} … … 492 583 Declaration qualifiers can only appear at the start of a routine definition, e.g.: 493 584 \begin{lstlisting} 494 extern [ int x ] g( int y ) { §\,§}585 extern [ int x ] g( int y ) {} 495 586 \end{lstlisting} 496 587 Lastly, if there are no output parameters or input parameters, the brackets and/or parentheses must still be specified; 497 588 in both cases the type is assumed to be void as opposed to old style C defaults of int return type and unknown parameter types, respectively, as in: 498 589 \begin{lstlisting} 499 [ §\,§] g();// no input or output parameters590 [ ] g(); // no input or output parameters 500 591 [ void ] g( void ); // no input or output parameters 501 592 \end{lstlisting} … … 509 600 \CFA style declarations cannot be used to declare parameters for K\&R style routine definitions because of the following ambiguity: 510 601 \begin{lstlisting} 511 int (*f(x))[ 5] int x; {}512 \end{lstlisting} 513 The string ``\lstinline@int (*f(x))[ 5 ]@'' declares a K\&R style routine of type returning a pointer to an array of 5 integers, while the string ``\lstinline@[ 5 ] int x@'' declares a \CFA style parameter x of type array of 5integers.602 int (*f(x))[ 10 ] int x; {} 603 \end{lstlisting} 604 The string ``\lstinline@int (*f(x))[ 10 ]@'' declares a K\&R style routine of type returning a pointer to an array of 10 integers, while the string ``\lstinline@[ 10 ] int x@'' declares a \CFA style parameter x of type array of 10 integers. 514 605 Since the strings overlap starting with the open bracket, \lstinline@[@, there is an ambiguous interpretation for the string. 515 606 As well, \CFA-style declarations cannot be used to declare parameters for C-style routine-definitions because of the following ambiguity: … … 530 621 \begin{lstlisting} 531 622 #define ptoa( n, d ) int (*n)[ d ] 532 int f( ptoa(p, 5) ) ... // expands to int f( int (*p)[ 5] )533 [ int ] f( ptoa(p, 5) ) ... // expands to [ int ] f( int (*p)[ 5] )623 int f( ptoa(p,10) ) ... // expands to int f( int (*p)[ 10 ] ) 624 [ int ] f( ptoa(p,10) ) ... // expands to [ int ] f( int (*p)[ 10 ] ) 534 625 \end{lstlisting} 535 626 Again, programmers are highly encouraged to use one declaration form or the other, rather than mixing the forms. … … 548 639 Because the value in the return variable is automatically returned when a \CFA routine terminates, the \lstinline@return@ statement \emph{does not} contain an expression, as in: 549 640 \begin{lstlisting} 550 ®[ int x ]®f() {641 [ int x ] f() { 551 642 ... x = 0; ... x = y; ... 552 ®return;®// implicitly return x643 return; // implicitly return x 553 644 } 554 645 \end{lstlisting} … … 606 697 for example, the following is incorrect: 607 698 \begin{lstlisting} 608 * [ int x ] f () fp; // routine name "f"is not allowed699 * [ int x ] f () fp; // routine name ``f'' is not allowed 609 700 \end{lstlisting} 610 701 … … 612 703 \section{Named and Default Arguments} 613 704 614 Named and default arguments~\cite{Hardgrave76} \footnote{705 Named and default arguments~\cite{Hardgrave76}.\footnote{ 615 706 Francez~\cite{Francez77} proposed a further extension to the named-parameter passing style, which specifies what type of communication (by value, by reference, by name) the argument is passed to the routine.} 616 707 are two mechanisms to simplify routine call. … … 773 864 \subsection{Type Nesting} 774 865 775 \CFA allows \Index{type nesting}, and type qualification of the nested types, where as C hoists\index{type hoisting} (refactors) nested types into the enclosing scope and has no type qualification.866 C allows \Index{type nesting}, but the nested types are hoisted\index{type!hoisting} (refactored) into the enclosing scope. 776 867 \begin{quote2} 777 868 \begin{tabular}{@{}l@{\hspace{30pt}}l|l@{}} … … 828 919 829 920 int fred() { 830 s.t.c = ®S.®R; // type qualification831 struct ®S.®T t = { ®S.®R, 1, 2 };832 enum ®S.®C c;833 union ®S.T.®U u;921 s.t.c = S.R; 922 struct S.T t = { S.R, 1, 2 }; 923 enum S.C c; 924 union S.T.U u; 834 925 } 835 926 \end{lstlisting} 836 927 \end{tabular} 837 928 \end{quote2} 838 In the left example in C, types \lstinline@C@, \lstinline@U@ and \lstinline@T@ are implicitly hoisted outside of type \lstinline@S@ into the containing block scope. 839 In the right example in \CFA, the types are not hoisted and accessed using the field-selection operator ``\lstinline@.@'' for type qualification, as does Java, rather than the \CC type-selection operator ``\lstinline@::@''. 929 930 \CFA is C \emph{incompatible} on this issue, and provides semantics similar to \CC. 931 Nested types are not hoisted and can be referenced using the field selection operator ``\lstinline@.@'', unlike the \CC scope-resolution operator ``\lstinline@::@''. 932 Given that nested types in C are equivalent to not using them, i.e., they are essentially useless, it is unlikely there are any realistic usages that break because of this incompatibility. 840 933 841 934 … … 850 943 which can be used to sort in ascending and descending order by locally redefining the less-than operator into greater-than. 851 944 \begin{lstlisting} 852 const unsigned int size = 5; 853 int ia[size]; 854 ... // assign values to array ia 855 qsort( ia, size ); // sort ascending order using builtin ?<? 856 { 857 ®int ?<?( int x, int y ) { return x > y; }® // nested routine 858 qsort( ia, size ); // sort descending order by local redefinition 859 } 860 \end{lstlisting} 861 862 Nested routines are not first-class, meaning a nested routine cannot be returned if it has references to variables in its enclosing blocks; 863 the only exception is references to the external block of the translation unit, as these variables persist for the duration of the program. 864 The following program in undefined in \CFA (and \lstinline@gcc@\index{gcc}) 865 \begin{lstlisting} 866 [* [int]( int )] foo() { // int (*foo())( int ) 867 int ®i® = 7; 868 int bar( int p ) { 869 ®i® += 1; // dependent on local variable 870 sout | ®i® | endl; 871 } 872 return bar; // undefined because of local dependence 873 } 874 int main() { 875 * [int](int) fp = foo(); // int (*fp)(int) 876 sout | fp( 3 ) | endl; 877 } 878 \end{lstlisting} 879 because 880 881 Currently, there are no \Index{lambda} expressions, i.e., unnamed routines because routine names are very important to properly select the correct routine. 945 const unsigned int size = 10; 946 int a[size]; 947 948 qsort( a, size ); // ascending order using built in ?<? 949 { // descending order by local redefinition 950 int ?<?( int a, int b ) { return a > b; } // nested routine 951 qsort( a, size ); 952 } 953 \end{lstlisting} 954 955 956 \section{Incompatible} 957 958 The following incompatibles exist between C and \CFA, and are similar to Annex C for \CC~\cite{ANSI14:C++}. 959 960 \begin{enumerate} 961 \item 962 Change type of character literal \lstinline@int@ to \lstinline@char@. 963 This change allows overloading differentiation argument type matching, e.g.: 964 \begin{lstlisting} 965 int function( int i ); 966 int function( char c ); 967 function( 'x' ); 968 \end{lstlisting} 969 It is preferable that this call match the second version of function rather than the first. \\ 970 Effect on original feature: Change to semantics of well-defined feature. ISO C programs which depend on 971 \begin{lstlisting} 972 sizeof('x') == sizeof(int) 973 \end{lstlisting} 974 will not work the same as C++ programs. \\ 975 Difficulty of converting: Simple. \\ 976 How widely used: Programs which depend upon sizeof('x') are probably rare. 977 978 \item 979 Change: String literals made \lstinline@const@ \\ 980 The type of a string literal is changed from \lstinline@array of char@ to \lstinline@array of const char@. 981 The type of a wide string literal is changed from \lstinline@array of wchar_t@ to \lstinline@array of const wchar_t@. \\ 982 Rationale: This avoids calling an inappropriate overloaded function, which might expect to be able to modify its argument. 983 Effect on original feature: Change to semantics of well-defined feature. \\ 984 Difficulty of converting: Simple syntactic transformation, because string literals can be converted to \lstinline@char*;@ (4.2). 985 The most common cases are handled by a new but deprecated standard conversion: 986 \begin{lstlisting} 987 char* p = "abc"; // valid in C, deprecated in C++ 988 char* q = expr ? "abc" : "de"; // valid in C, invalid in C++ 989 \end{lstlisting} 990 How widely used: Programs that have a legitimate reason to treat string literals as pointers to potentially modifiable memory are probably rare. 991 992 \item 993 Change: C++ does not have \emph{tentative definitions} as in C. 994 E.g., at file scope, 995 \begin{lstlisting} 996 int i; 997 int i; 998 \end{lstlisting} 999 is valid in C, invalid in C++. 1000 This makes it impossible to define mutually referential file-local static 1001 objects, if initializers are restricted to the syntactic forms of C. For example, 1002 \begin{lstlisting} 1003 struct X { int i; struct X *next; }; 1004 static struct X a; 1005 static struct X b = { 0, &a }; 1006 static struct X a = { 1, &b }; 1007 \end{lstlisting} 1008 Rationale: This avoids having different initialization rules for builtin types and userdefined types. 1009 Effect on original feature: Deletion of semantically welldefined feature. \\ 1010 Difficulty of converting: Semantic transformation. 1011 In C++, the initializer for one of a set of mutuallyreferential filelocal static objects must invoke a function call to achieve the initialization. 1012 How widely used: Seldom. 1013 1014 \item 1015 Change: A struct is a scope in C++, not in C 1016 Rationale: Class scope is crucial to C++, and a struct is a class. 1017 Effect on original feature: Change to semantics of well-defined feature. 1018 Difficulty of converting: Semantic transformation. 1019 How widely used: C programs use struct extremely frequently, but the change is only noticeable when 1020 struct, enumeration, or enumerator names are referred to outside the struct. The latter is probably 1021 rare. 1022 1023 \item 1024 Change: In C++, the name of a nested class is local to its enclosing class. 1025 In C the name of the nested class belongs to the same scope as the name of the outermost enclosing class 1026 Example: 1027 \begin{lstlisting} 1028 struct X { 1029 struct Y { /* ... */ } y; 1030 }; 1031 struct Y yy; // valid C, invalid C++ 1032 \end{lstlisting} 1033 Rationale: C++ classes have member functions which require that classes establish scopes. The C rule 1034 would leave classes as an incomplete scope mechanism which would prevent C++ programmers from maintaining 1035 locality within a class. A coherent set of scope rules for C++ based on the C rule would be very 1036 complicated and C++ programmers would be unable to predict reliably the meanings of nontrivial examples 1037 involving nested or local functions. 1038 Effect on original feature: Change of semantics of welldefined 1039 feature. 1040 Difficulty of converting: Semantic transformation. To make the struct type name visible in the scope of 1041 the enclosing struct, the struct tag could be declared in the scope of the enclosing struct, before the enclosing 1042 struct is defined. Example: 1043 \begin{lstlisting} 1044 struct Y; // struct Y and struct X are at the same scope 1045 struct X { 1046 struct Y { /* ... */ } y; 1047 }; 1048 \end{lstlisting} 1049 All the definitions of C struct types enclosed in other struct definitions and accessed outside the scope of 1050 the enclosing struct could be exported to the scope of the enclosing struct. Note: this is a consequence of 1051 the difference in scope rules, which is documented in 3.3. 1052 How widely used: Seldom. 1053 \end{enumerate} 882 1054 883 1055 … … 889 1061 The general syntax of a tuple is: 890 1062 \begin{lstlisting} 891 [ §\emph{exprlist}§]1063 [ $\emph{exprlist}$ ] 892 1064 \end{lstlisting} 893 1065 where \lstinline@$\emph{exprlist}$@ is a list of one or more expressions separated by commas. … … 909 1081 The general syntax of a tuple type is: 910 1082 \begin{lstlisting} 911 [ §\emph{typelist}§]1083 [ @\emph{typelist}@ ] 912 1084 \end{lstlisting} 913 1085 where \lstinline@$\emph{typelist}$@ is a list of one or more legal \CFA or C type specifications separated by commas, which may include other tuple type specifications. … … 917 1089 [ double, double, double ] 918 1090 [ * int, int * ] // mix of CFA and ANSI 919 [ * [ 5] int, * * char, * [ [ int, int ] ] (int, int) ]1091 [ * [ 10 ] int, * * char, * [ [ int, int ] ] (int, int) ] 920 1092 \end{lstlisting} 921 1093 Like tuples, tuple types may be nested, such as \lstinline@[ [ int, int ], int ]@, which is a 2-element tuple type whose first element is itself a tuple type. … … 1013 1185 First the right-hand tuple is flattened and then the values are assigned individually. 1014 1186 Flattening is also performed on tuple types. 1015 For example, the type \lstinline@[ int, [ int, int ], int ]@ can be coerced, using flattening, into the type \lstinline@[ int, int, int, int ]@.1187 For example, the type \lstinline@[ int, [ int, int ], int ]@ can be coerced, using flattening, into the type lstinline@[ int, int, int, int ]@. 1016 1188 1017 1189 A \newterm{structuring coercion} is the opposite of flattening; … … 1039 1211 Mass assignment has the following form: 1040 1212 \begin{lstlisting} 1041 [ §\emph{lvalue}§, ..., §\emph{lvalue}§ ] = §\emph{expr}§;1042 \end{lstlisting} 1043 The left-hand side is a tuple of \ emph{lvalues}, which is a list of expressions each yielding an address, i.e., any data object that can appear on the left-hand side of a conventional assignment statement.1213 [ @\emph{lvalue}@, ..., @\emph{lvalue}@ ] = @\emph{expr}@; 1214 \end{lstlisting} 1215 The left-hand side is a tuple of \lstinline@$\emph{lvalues}$@, which is a list of expressions each yielding an address, i.e., any data object that can appear on the left-hand side of a conventional assignment statement. 1044 1216 \lstinline@$\emph{expr}$@ is any standard arithmetic expression. 1045 1217 Clearly, the types of the entities being assigned must be type compatible with the value of the expression. … … 1078 1250 Multiple assignment has the following form: 1079 1251 \begin{lstlisting} 1080 [ §\emph{lvalue}§, . . ., §\emph{lvalue}§ ] = [ §\emph{expr}§, . . ., §\emph{expr}§];1081 \end{lstlisting} 1082 The left-hand side is a tuple of \ emph{lvalues}, and the right-hand side is a tuple of \emph{expr}s.1083 Each \ emph{expr} appearing on the righthand side of a multiple assignment statement is assigned to the corresponding \emph{lvalues}on the left-hand side of the statement using parallel semantics for each assignment.1252 [ @\emph{lvalue}@, . . ., @\emph{lvalue}@ ] = [ @\emph{expr}@, . . ., @\emph{expr}@ ]; 1253 \end{lstlisting} 1254 The left-hand side is a tuple of \lstinline@$\emph{lvalues}$@, and the right-hand side is a tuple of \lstinline@$\emph{expr}$@s. 1255 Each \lstinline@$\emph{expr}$@ appearing on the righthand side of a multiple assignment statement is assigned to the corresponding \lstinline@$\emph{lvalues}$@ on the left-hand side of the statement using parallel semantics for each assignment. 1084 1256 An example of multiple assignment is: 1085 1257 \begin{lstlisting} … … 1118 1290 Cascade assignment has the following form: 1119 1291 \begin{lstlisting} 1120 §\emph{tuple}§ = §\emph{tuple}§ = ... = §\emph{tuple}§;1292 @\emph{tuple}@ = @\emph{tuple}@ = ... = @\emph{tuple}@; 1121 1293 \end{lstlisting} 1122 1294 and it has the same parallel semantics as for mass and multiple assignment. … … 1136 1308 Its general form is: 1137 1309 \begin{lstlisting} 1138 §\emph{expr}§ . [ §\emph{fieldlist}§]1139 §\emph{expr}§ -> [ §\emph{fieldlist}§]1140 \end{lstlisting} 1141 \ emph{expr}is any expression yielding a value of type record, e.g., \lstinline@struct@, \lstinline@union@.1142 Each element of \ emph{ fieldlist} is an element of the record specified by \emph{expr}.1310 @\emph{expr}@ . [ @\emph{fieldlist}@ ] 1311 @\emph{expr}@ -> [ @\emph{fieldlist}@ ] 1312 \end{lstlisting} 1313 \lstinline@$\emph{expr}$@ is any expression yielding a value of type record, e.g., \lstinline@struct@, \lstinline@union@. 1314 Each element of \lstinline@$\emph{ fieldlist}$@ is an element of the record specified by \lstinline@$\emph{expr}$@. 1143 1315 A record-field tuple may be used anywhere a tuple can be used. An example of the use of a record-field tuple is 1144 1316 the following: … … 1180 1352 \multicolumn{1}{c@{\hspace{30pt}}}{\textbf{\CFA}} & \multicolumn{1}{c}{\textbf{C}} \\ 1181 1353 \begin{lstlisting} 1182 ®L1:®for ( ... ) {1183 ®L2:®for ( ... ) {1184 ®L3:®for ( ... ) {1185 ... break ®L1®; ...1186 ... break ®L2®; ...1187 ... break ®L3®; // or break1354 L1: for ( ... ) { 1355 L2: for ( ... ) { 1356 L3: for ( ... ) { 1357 ... break L1; ... 1358 ... break L2; ... 1359 ... break L3; // or break 1188 1360 } 1189 1361 } … … 1210 1382 \multicolumn{1}{c@{\hspace{30pt}}}{\textbf{\CFA}} & \multicolumn{1}{c}{\textbf{C}} \\ 1211 1383 \begin{lstlisting} 1212 ®L1®: for ( ... ) {1213 ®L2®: for ( ... ) {1214 ®L3®: for ( ... ) {1215 ... continue ®L1®; ...1216 ... continue ®L2®; ...1217 ... continue ®L3®; ...1384 L1: for ( ... ) { 1385 L2: for ( ... ) { 1386 L3: for ( ... ) { 1387 ... continue L1; ... 1388 ... continue L2; ... 1389 ... continue L3; ... 1218 1390 1219 1391 } … … 1451 1623 \begin{lstlisting} 1452 1624 switch ( i ) { 1453 ®case 1, 3, 5®:1625 case 1, 3, 5: 1454 1626 ... 1455 ®case 2, 4, 6®:1627 case 2, 4, 6: 1456 1628 ... 1457 1629 } … … 1462 1634 case 1: case 3 : case 5: 1463 1635 ... 1464 case 2: case 4 : case 6: 1636 case 2: case 4 : case 6: /* even values */ 1465 1637 ... 1466 1638 } … … 1483 1655 \begin{lstlisting} 1484 1656 switch ( i ) { 1485 ®case 1~5:®1657 case 1~5 1486 1658 ... 1487 ®case 10~15:®1659 case 10~15 1488 1660 ... 1489 1661 } … … 1500 1672 & 1501 1673 \begin{lstlisting} 1502 1503 1674 // 1, 2, 3, 4, 5 1504 1675 … … 1997 2168 1998 2169 1999 \section{Auto Type-Inferencing} 2000 2001 Auto type-inferencing occurs in a declaration where a variable's type is inferred from its initialization expression type. 2002 \begin{quote2} 2003 \begin{tabular}{@{}l@{\hspace{30pt}}ll@{}} 2004 \multicolumn{1}{c@{\hspace{30pt}}}{\textbf{\CC}} & \multicolumn{1}{c}{\lstinline@gcc@}\index{gcc} \\ 2005 \begin{lstlisting} 2006 2007 auto j = 3.0 * 4; 2008 int i; 2009 auto k = i; 2010 \end{lstlisting} 2011 & 2012 \begin{lstlisting} 2013 #define expr 3.0 * i 2014 typeof(expr) j = expr; 2015 int i; 2016 typeof(i) k = i; 2017 \end{lstlisting} 2018 & 2019 \begin{lstlisting} 2020 2021 // use type of initialization expression 2022 2023 // use type of primary variable 2024 \end{lstlisting} 2025 \end{tabular} 2026 \end{quote2} 2027 The two important capabilities are: 2028 \begin{itemize} 2029 \item 2030 preventing having to determine or write out long generic types, 2031 \item 2032 ensure secondary variables, related to a primary variable, always have the same type. 2033 \end{itemize} 2034 2035 In \CFA, \lstinline@typedef@ provides a mechanism to alias long type names with short ones, both globally and locally, but not eliminate the use of the short name. 2036 \lstinline@gcc@ provides \lstinline@typeof@ to declare a secondary variable from a primary variable. 2037 \CFA also relies heavily on the specification of the left-hand side of assignment for type inferencing, so in many cases it is crucial to specify the type of the left-hand side to select the correct type of the right-hand expression. 2038 Only for overloaded routines with the same return type is variable type-inferencing possible. 2039 Finally, \lstinline@auto@ presents the programming problem of tracking down a type when the type is actually needed. 2040 For example, given 2041 \begin{lstlisting} 2042 auto j = ®...® 2043 \end{lstlisting} 2044 and the need to write a routine to compute using \lstinline@j@ 2045 \begin{lstlisting} 2046 void rtn( ®...® parm ); 2047 rtn( j ); 2048 \end{lstlisting} 2049 A programmer must work backwards to determine the type of \lstinline@j@'s initialization expression, reconstructing the possibly long generic type-name. 2050 In this situation, having the type name or a short alias is very useful. 2051 2052 There is also the conundrum in type inferencing of when to \emph{\Index{brand}} a type. 2053 That is, when is the type of the variable more important than the type of its initialization expression. 2054 For example, if a change is made in an initialization expression, it can cause hundreds or thousands of cascading type changes and/or errors. 2055 At some point, a programmer wants the type of the variable to remain constant and the expression to be in error when it changes. 2056 2057 Given \lstinline@typedef@ and \lstinline@typeof@ in \CFA, and the strong need to use the type of left-hand side in inferencing, auto type-inferencing is not supported at this time. 2058 Should a significant need arise, this feature can be revisited. 2059 2060 2061 \section{Generics} 2170 \section{Generics } 2062 2171 2063 2172 \CFA supports parametric polymorphism to allow users to define generic functions and types. … … 2259 2368 2260 2369 try { 2261 throw 13;2370 throw 13; 2262 2371 } 2263 2372 catch(int e) { 2264 printf(.caught an exception: %d\n., e);2373 printf(.caught an exception: %d\n., e); 2265 2374 } 2266 2375 \end{lstlisting} … … 2348 2457 2349 2458 2350 \section{Syntactic Anomalies} 2351 2352 The number 0 and 1 are treated specially in \CFA, and can be redefined as variables. 2353 One syntactic anomaly is when a field in an structure is names 0 or 1: 2354 \begin{lstlisting} 2355 struct S { 2356 int 0, 1; 2357 } s; 2358 \end{lstlisting} 2359 The problem occurs in accesing these fields using the selection operation ``\lstinline@.@'': 2360 \begin{lstlisting} 2361 s.0 = 0; // ambiguity with floating constant .0 2362 s.1 = 1; // ambiguity with floating constant .1 2363 \end{lstlisting} 2364 To make this work, a space is required after the field selection: 2365 \begin{lstlisting} 2366 ®s.§\textvisiblespace§0® = 0; 2367 ®s.§\textvisiblespace§1® = 1; 2368 \end{lstlisting} 2369 While this sytact is awkward, it is unlikely many programers will name fields of a structure 0 or 1. 2370 Like the \CC lexical problem with closing template-syntax, e.g, \lstinline@Foo<Bar<int®>>®@, this issue can be solved with a more powerful lexer/parser. 2371 2372 There are several ambiguous cases with operator identifiers, e.g., \lstinline@int *?*?()@, where the string \lstinline@*?*?@ can be lexed as \lstinline@*@/\lstinline@?*?@ or \lstinline@*?@/\lstinline@*?@. 2373 Since it is common practise to put a unary operator juxtaposed to an identifier, e.g., \lstinline@*i@, users will be annoyed if they cannot do this with respect to operator identifiers. 2374 Even with this special hack, there are 5 general cases that cannot be handled. 2375 The first case is for the function-call identifier \lstinline@?()@: 2376 \begin{lstlisting} 2377 int *§\textvisiblespace§?()(); // declaration: space required after '*' 2378 *§\textvisiblespace§?()(); // expression: space required after '*' 2379 \end{lstlisting} 2380 Without the space, the string \lstinline@*?()@ is ambiguous without N character look ahead; 2381 it requires scanning ahead to determine if there is a \lstinline@'('@, which is the start of an argument/parameter list. 2382 2383 The 4 remaining cases occur in expressions: 2384 \begin{lstlisting} 2385 i++§\textvisiblespace§?i:0; // space required before '?' 2386 i--§\textvisiblespace§?i:0; // space required before '?' 2387 i§\textvisiblespace§?++i:0; // space required after '?' 2388 i§\textvisiblespace§?--i:0; // space required after '?' 2389 \end{lstlisting} 2390 In the first two cases, the string \lstinline@i++?@ is ambiguous, where this string can be lexed as \lstinline@i@ / \lstinline@++?@ or \lstinline@i++@ / \lstinline@?@; 2391 it requires scanning ahead to determine if there is a \lstinline@'('@, which is the start of an argument list. 2392 In the second two cases, the string \lstinline@?++x@ is ambiguous, where this string can be lexed as \lstinline@?++@ / \lstinline@x@ or \lstinline@?@ / y\lstinline@++x@; 2393 it requires scanning ahead to determine if there is a \lstinline@'('@, which is the start of an argument list. 2459 \section{I/O Library} 2460 \label{s:IOLibrary} 2461 2462 The goal for \CFA I/O is to make I/O as simple as possible for the general case, while fully supporting polmorphism and user defined types in a consistent way. 2463 The general case is printing out a sequence of variables separated by whitespace. 2464 \begin{lstlisting} 2465 int x = 0, y = 1, z = 2; 2466 sout | x | y | z | endl; 2467 2468 cout << x << " " << y << " " << z << endl; 2469 \end{lstlisting} 2470 The \CC form takes almost twice as many characters. 2471 2472 The logical-or operator is used because it is the lowest priority overloadable operator, other than assignment. 2473 Therefore, most output expressions do not require parenthesis. 2474 \begin{lstlisting} 2475 int x = 0, y = 1, z = 2; 2476 sout | x * 3 | y + 1 | z << 2 | x == y | (x | y) | (x || y) | (x > z ? 1 : 2) | endl; 2477 2478 cout << x * 3 << y + 1 << (z << 2) << (x == y) << (x | y) << (x || y) << (x > z ? 1 : 2) << endl; 2479 \end{lstlisting} 2480 2481 Finally, the logical-or operator has a link with the Shell pipe-operator for moving data, although data flows in the opposite direction. 2482 2483 \begin{figure} 2484 \begin{lstlisting}[mathescape=off] 2485 #include <fstream> 2486 2487 int main() { 2488 char c; 2489 short int si; 2490 unsigned short int usi; 2491 int i; 2492 unsigned int ui; 2493 long int li; 2494 unsigned long int uli; 2495 long long int lli; 2496 unsigned long long int ulli; 2497 float f; 2498 double d; 2499 long double ld; 2500 float _Complex fc; 2501 double _Complex dc; 2502 long double _Complex ldc; 2503 char s1[10], s2[10]; 2504 2505 ifstream in; 2506 open( &in, "read.data", "r" ); 2507 2508 &in | &c 2509 | &si | &usi | &i | &ui | &li | &uli | &lli | &ulli 2510 | &f | &d | &ld 2511 | &fc | &dc | &ldc 2512 | str( s1 ) | str( s2, 10 ); 2513 2514 sout | c | ' ' | endl 2515 | si | usi | i | ui | li | uli | lli | ulli | endl 2516 | f | d | ld | endl 2517 | f | "" | d | "" | ld | endl; 2518 2519 sepSet( sout, ", $" ); 2520 sout | fc | dc | ldc | endl 2521 | sepOn | s1 | sepOff | s2 | endl 2522 | s1 | "" | s2 | endl; 2523 } 2524 2525 $ cat read.data 2526 A 1 2 3 4 5 6 7 8 1.1 1.2 1.3 1.1+2.3 1.1-2.3 1.1-2.3 abc xyz 2527 $ a.out 2528 A 2529 1 2 3 4 5 6 7 8 2530 1.1 1.2 1.3 2531 1.11.21.3 2532 1.1+2.3i, $1.1-2.3i, $1.1-2.3i 2533 , $abcxyz 2534 abcxyz 2535 \end{lstlisting} 2536 \end{figure} 2537 2538 2539 \section{Standard Library} 2540 \label{s:StandardLibrary} 2541 2542 The goal of the \CFA standard-library is to wrap many of the existing C library-routines that are explicitly polymorphic into implicitly polymorphic versions. 2543 2544 2545 \subsection{malloc} 2546 2547 \begin{lstlisting} 2548 forall( otype T ) T * malloc( void ); 2549 forall( otype T ) T * malloc( char fill ); 2550 forall( otype T ) T * malloc( T * ptr, size_t size ); 2551 forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill ); 2552 forall( otype T ) T * calloc( size_t size ); 2553 forall( otype T ) T * realloc( T * ptr, size_t size ); 2554 forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill ); 2555 2556 forall( otype T ) T * aligned_alloc( size_t alignment ); 2557 forall( otype T ) T * memalign( size_t alignment ); // deprecated 2558 forall( otype T ) int posix_memalign( T ** ptr, size_t alignment ); 2559 2560 forall( otype T ) T * memset( T * ptr, unsigned char fill ); // use default value '\0' for fill 2561 forall( otype T ) T * memset( T * ptr ); // remove when default value available 2562 \end{lstlisting} 2563 2564 2565 \subsection{ato/strto} 2566 2567 \begin{lstlisting} 2568 int ato( const char * ptr ); 2569 unsigned int ato( const char * ptr ); 2570 long int ato( const char * ptr ); 2571 unsigned long int ato( const char * ptr ); 2572 long long int ato( const char * ptr ); 2573 unsigned long long int ato( const char * ptr ); 2574 float ato( const char * ptr ); 2575 double ato( const char * ptr ); 2576 long double ato( const char * ptr ); 2577 float _Complex ato( const char * ptr ); 2578 double _Complex ato( const char * ptr ); 2579 long double _Complex ato( const char * ptr ); 2580 2581 int strto( const char * sptr, char ** eptr, int base ); 2582 unsigned int strto( const char * sptr, char ** eptr, int base ); 2583 long int strto( const char * sptr, char ** eptr, int base ); 2584 unsigned long int strto( const char * sptr, char ** eptr, int base ); 2585 long long int strto( const char * sptr, char ** eptr, int base ); 2586 unsigned long long int strto( const char * sptr, char ** eptr, int base ); 2587 float strto( const char * sptr, char ** eptr ); 2588 double strto( const char * sptr, char ** eptr ); 2589 long double strto( const char * sptr, char ** eptr ); 2590 float _Complex strto( const char * sptr, char ** eptr ); 2591 double _Complex strto( const char * sptr, char ** eptr ); 2592 long double _Complex strto( const char * sptr, char ** eptr ); 2593 \end{lstlisting} 2594 2595 2596 \subsection{bsearch/qsort} 2597 2598 \begin{lstlisting} 2599 forall( otype T | { int ?<?( T, T ); } ) 2600 T * bsearch( const T key, const T * arr, size_t dimension ); 2601 2602 forall( otype T | { int ?<?( T, T ); } ) 2603 void qsort( const T * arr, size_t dimension ); 2604 \end{lstlisting} 2605 2606 2607 \subsection{abs} 2608 2609 \begin{lstlisting} 2610 char abs( char ); 2611 extern "C" { 2612 int abs( int ); // use default C routine for int 2613 } // extern 2614 long int abs( long int ); 2615 long long int abs( long long int ); 2616 float abs( float ); 2617 double abs( double ); 2618 long double abs( long double ); 2619 float _Complex abs( float _Complex ); 2620 double _Complex abs( double _Complex ); 2621 long double _Complex abs( long double _Complex ); 2622 \end{lstlisting} 2623 2624 2625 \subsection{random} 2626 2627 \begin{lstlisting} 2628 void randseed( long int s ); 2629 char random(); 2630 int random(); 2631 unsigned int random(); 2632 long int random(); 2633 unsigned long int random(); 2634 float random(); 2635 double random(); 2636 float _Complex random(); 2637 double _Complex random(); 2638 long double _Complex random(); 2639 \end{lstlisting} 2640 2641 2642 \subsection{min/max/swap} 2643 2644 \begin{lstlisting} 2645 forall( otype T | { int ?<?( T, T ); } ) 2646 T min( const T t1, const T t2 ); 2647 2648 forall( otype T | { int ?>?( T, T ); } ) 2649 T max( const T t1, const T t2 ); 2650 2651 forall( otype T ) 2652 void swap( T * t1, T * t2 ); 2653 \end{lstlisting} 2394 2654 2395 2655 … … 2416 2676 2417 2677 task creates a type with implicit locking, separate stack, and a thread 2418 2419 2678 2420 2679 \subsection{Monitors} … … 3317 3576 3318 3577 3319 \subsection [Comparing Key Features of CFA]{Comparing Key Features of \CFA}3578 \subsection{Comparing Key Features of \CFA} 3320 3579 3321 3580 … … 3516 3775 \multicolumn{1}{c|}{\textbf{\CFA/\CC}} & \multicolumn{1}{c|}{\textbf{Go}} & \multicolumn{1}{c}{\textbf{Rust}} \\ 3517 3776 \hline 3518 \begin{lstlisting} [boxpos=t]3777 \begin{lstlisting} 3519 3778 extern "C" { 3520 3779 #include <sys/types.h> … … 3523 3782 } 3524 3783 size_t fileSize( const char *path ) { 3525 st ruct stat s;3784 stat s; 3526 3785 stat(path, &s); 3527 3786 return s.st_size; … … 3529 3788 \end{lstlisting} 3530 3789 & 3531 \begin{lstlisting} [boxpos=t]3790 \begin{lstlisting} 3532 3791 /* 3533 3792 #cgo … … 3548 3807 \end{lstlisting} 3549 3808 & 3550 \begin{lstlisting} [boxpos=t]3809 \begin{lstlisting} 3551 3810 use libc::{c_int, size_t}; 3811 3812 // The following declarations are 3552 3813 // translated from sys/stat.h 3553 3814 #[repr(C)] … … 3557 3818 ... 3558 3819 } 3820 3559 3821 #[link(name = "libc")] 3560 3822 extern { … … 3562 3824 buf: *mut stat_t) -> c_int; 3563 3825 } 3826 3564 3827 fn fileSize(path: *const u8) -> size_t 3565 3828 { 3566 3829 unsafe { 3567 let mut buf: stat_t = uninit();3568 stat(path, &mut buf);3569 buf.st_size3830 let mut buf: stat_t = uninit(); 3831 stat(path, &mut buf); 3832 buf.st_size 3570 3833 } 3571 3834 } … … 3690 3953 3691 3954 3692 \begin{comment} 3693 \subsubsection{Modules / Packages} 3955 \subsubsection{Modules/Packages} 3694 3956 3695 3957 \begin{lstlisting} … … 3770 4032 } 3771 4033 \end{lstlisting} 3772 \end{comment}3773 3774 4034 3775 4035 \subsubsection{Parallel Tasks} … … 3927 4187 \end{flushleft} 3928 4188 3929 \lstset{basicstyle=\sf\relsize{-1}}3930 3931 3932 4189 \subsection{Summary of Language Comparison} 3933 4190 3934 4191 3935 \subsubsection [C++]{\CC}4192 \subsubsection{\CC} 3936 4193 3937 4194 \CC is a general-purpose programming language. … … 3998 4255 3999 4256 4000 \appendix4001 4002 4003 \section{Incompatible}4004 4005 The following incompatibles exist between C and \CFA, and are similar to Annex C for \CC~\cite{ANSI14:C++}.4006 4007 \begin{enumerate}4008 \item4009 Change type of character literal \lstinline@int@ to \lstinline@char@.4010 This change allows overloading differentiation argument type matching, e.g.:4011 \begin{lstlisting}4012 int function( int i );4013 int function( char c );4014 function( 'x' );4015 \end{lstlisting}4016 It is preferable that this call match the second version of function rather than the first. \\4017 Effect on original feature: Change to semantics of well-defined feature. ISO C programs which depend on4018 \begin{lstlisting}4019 sizeof('x') == sizeof(int)4020 \end{lstlisting}4021 will not work the same as C++ programs. \\4022 Difficulty of converting: Simple. \\4023 How widely used: Programs which depend upon sizeof('x') are probably rare.4024 4025 \item4026 Change: String literals made \lstinline@const@ \\4027 The type of a string literal is changed from \lstinline@array of char@ to \lstinline@array of const char@.4028 The type of a wide string literal is changed from \lstinline@array of wchar_t@ to \lstinline@array of const wchar_t@. \\4029 Rationale: This avoids calling an inappropriate overloaded function, which might expect to be able to modify its argument.4030 Effect on original feature: Change to semantics of well-defined feature. \\4031 Difficulty of converting: Simple syntactic transformation, because string literals can be converted to \lstinline@char*;@ (4.2).4032 The most common cases are handled by a new but deprecated standard conversion:4033 \begin{lstlisting}4034 char* p = "abc"; // valid in C, deprecated in C++4035 char* q = expr ? "abc" : "de"; // valid in C, invalid in C++4036 \end{lstlisting}4037 How widely used: Programs that have a legitimate reason to treat string literals as pointers to potentially modifiable memory are probably rare.4038 4039 \item4040 Change: C++ does not have \emph{tentative definitions} as in C.4041 E.g., at file scope,4042 \begin{lstlisting}4043 int i;4044 int i;4045 \end{lstlisting}4046 is valid in C, invalid in C++.4047 This makes it impossible to define mutually referential file-local static4048 objects, if initializers are restricted to the syntactic forms of C. For example,4049 \begin{lstlisting}4050 struct X { int i; struct X *next; };4051 static struct X a;4052 static struct X b = { 0, &a };4053 static struct X a = { 1, &b };4054 \end{lstlisting}4055 Rationale: This avoids having different initialization rules for builtin types and userdefined types.4056 Effect on original feature: Deletion of semantically welldefined feature. \\4057 Difficulty of converting: Semantic transformation.4058 In C++, the initializer for one of a set of mutuallyreferential filelocal static objects must invoke a function call to achieve the initialization.4059 How widely used: Seldom.4060 4061 \item4062 Change: A struct is a scope in C++, not in C \\4063 Rationale: Class scope is crucial to C++, and a struct is a class. \\4064 Effect on original feature: Change to semantics of well-defined feature. \\4065 Difficulty of converting: Semantic transformation. \\4066 How widely used: C programs use struct extremely frequently, but the change is only noticeable when struct, enumeration, or enumerator names are referred to outside the struct.4067 The latter is probably rare.4068 4069 \CFA is C \emph{incompatible} on this issue, and provides semantics similar to \CC.4070 Nested types are not hoisted and can be referenced using the field selection operator ``\lstinline@.@'', unlike the \CC scope-resolution operator ``\lstinline@::@''.4071 Given that nested types in C are equivalent to not using them, i.e., they are essentially useless, it is unlikely there are any realistic usages that break because of this incompatibility.4072 4073 \item4074 Change: In C++, the name of a nested class is local to its enclosing class.4075 In C the name of the nested class belongs to the same scope as the name of the outermost enclosing class4076 Example:4077 \begin{lstlisting}4078 struct X {4079 struct Y { /* ... */ } y;4080 };4081 struct Y yy; // valid C, invalid C++4082 \end{lstlisting}4083 Rationale: C++ classes have member functions which require that classes establish scopes.4084 The C rule would leave classes as an incomplete scope mechanism which would prevent C++ programmers from maintaining locality within a class. A coherent set of scope rules for C++ based on the C rule would be very complicated and C++ programmers would be unable to predict reliably the meanings of nontrivial examples involving nested or local functions.4085 Effect on original feature: Change of semantics of welldefined feature.4086 Difficulty of converting: Semantic transformation. To make the struct type name visible in the scope of the enclosing struct, the struct tag could be declared in the scope of the enclosing struct, before the enclosing struct is defined. Example:4087 \begin{lstlisting}4088 struct Y; // struct Y and struct X are at the same scope4089 struct X {4090 struct Y { /* ... */ } y;4091 };4092 \end{lstlisting}4093 All the definitions of C struct types enclosed in other struct definitions and accessed outside the scope of the enclosing struct could be exported to the scope of the enclosing struct.4094 Note: this is a consequence of the difference in scope rules, which is documented in 3.3.4095 How widely used: Seldom.4096 \end{enumerate}4097 4098 4099 \section{I/O Library}4100 \label{s:IOLibrary}4101 \index{input/output library}4102 4103 The goal for \CFA I/O is to make I/O as simple as possible for the general case, while fully supporting polmorphism and user defined types in a consistent way.4104 The general case is printing out a sequence of variables separated by whitespace.4105 \begin{quote2}4106 \begin{tabular}{@{}l@{\hspace{30pt}}l@{}}4107 \multicolumn{1}{c@{\hspace{30pt}}}{\textbf{\CFA}} & \multicolumn{1}{c}{\textbf{\CC}} \\4108 \begin{lstlisting}4109 int x = 0, y = 1, z = 2;4110 ®sout® ®|® x ®|® y ®|® z ®| endl®;4111 \end{lstlisting}4112 &4113 \begin{lstlisting}4114 4115 cout << x << " " << y << " " << z << endl;4116 \end{lstlisting}4117 \end{tabular}4118 \end{quote2}4119 The \CFA form is half as many characters, and is similar to \Index{Python} I/O with respect to implicit separators.4120 4121 The logical-or operator is used because it is the lowest-priority overloadable operator, other than assignment.4122 Therefore, fewer output expressions require parenthesis.4123 \begin{quote2}4124 \begin{tabular}{@{}ll@{}}4125 \textbf{\CFA:}4126 &4127 \begin{lstlisting}4128 sout | x * 3 | y + 1 | z << 2 | x == y | (x | y) | (x || y) | (x > z ? 1 : 2) | endl;4129 \end{lstlisting}4130 \\4131 \textbf{\CC:}4132 &4133 \begin{lstlisting}4134 cout << x * 3 << y + 1 << (z << 2) << (x == y) << (x | y) << (x || y) << (x > z ? 1 : 2) << endl;4135 \end{lstlisting}4136 \end{tabular}4137 \end{quote2}4138 Finally, the logical-or operator has a link with the Shell pipe-operator for moving data, although data flows in the opposite direction.4139 4140 The implicit seperator\index{I/O separator} character (space/blank) is a separator not a terminator.4141 The rules for implicitly adding the separator are:4142 \begin{enumerate}4143 \item4144 A seperator does not appear at the start or end of a line.4145 \begin{lstlisting}[belowskip=0pt]4146 sout | 1 | 2 | 3 | endl;4147 \end{lstlisting}4148 \begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]4149 1 2 34150 \end{lstlisting}4151 \item4152 A seperator does not appear before or after a character literal or variable.4153 \begin{lstlisting}4154 sout | '1' | '2' | '3' | endl;4155 1234156 \end{lstlisting}4157 \item4158 A seperator does not appear before or after a null (empty) C string4159 \begin{lstlisting}4160 sout | 1 | "" | 2 | "" | 3 | endl;4161 1234162 \end{lstlisting}4163 which is a local mechanism to disable insertion of the separator character.4164 \item4165 A seperator does not appear before a C string starting with the (extended) \Index{ASCII}\index{ASCII!extended} characters: \lstinline[mathescape=off]@([{$£¥¡¿«@4166 %$4167 \begin{lstlisting}[mathescape=off]4168 sout | "x (" | 1 | "x [" | 2 | "x {" | 3 | "x $" | 4 | "x £" | 5 | "x ¥" | 6 | "x ¡" | 7 | "x ¿" | 8 | "x «" | 9 | endl;4169 \end{lstlisting}4170 %$4171 \begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]4172 x (1 x [2 x {3 x $4 x £5 x ¥6 x ¡7 x ¿8 x «94173 \end{lstlisting}4174 %$4175 \item4176 A seperator does not appear after a C string ending with the (extended) \Index{ASCII}\index{ASCII!extended} characters: \lstinline@,.:;!?)]}%¢»@4177 \begin{lstlisting}[belowskip=0pt]4178 sout | 1 | ", x" | 2 | ". x" | 3 | ": x" | 4 | "; x" | 5 | "! x" | 6 | "? x" | 7 | ") x" | 8 | "] x" | 9 | "} x"4179 | 10 | "% x" | 11 | "¢ x" | 12 | "» x" | endl;4180 \end{lstlisting}4181 \begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]4182 1, x 2. x 3: x 4; x 5! x 6? x 7) x 8] x 9} x 10% x 11¢ 12»4183 \end{lstlisting}4184 \item4185 A seperator does not appear before or after a C string begining/ending with the \Index{ASCII} quote or whitespace characters: \lstinline[showspaces=true]@`'" \t\v\f\r\n@4186 \begin{lstlisting}[belowskip=0pt]4187 sout | "x`" | 1 | "`x'" | 2 | "'x\"" | 3 | "\"x" | "x " | 4 | " x" | "x\t" | 1 | "\tx" | endl;4188 \end{lstlisting}4189 \begin{lstlisting}[mathescape=off,showspaces=true,showtabs=true,aboveskip=0pt,belowskip=0pt]4190 x`1`x'2'x"3"x x 4 x x 1 x4191 \end{lstlisting}4192 \end{enumerate}4193 The following \CC-style \Index{manipulator}s allow further control over implicit seperation.4194 \begin{lstlisting}[mathescape=off,belowskip=0pt]4195 sout | sepOn | 1 | 2 | 3 | sepOn | endl; // separator at start of line4196 \end{lstlisting}4197 \begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]4198 1 2 34199 \end{lstlisting}4200 \begin{lstlisting}[mathescape=off,aboveskip=0pt,belowskip=0pt]4201 sout | 1 | sepOff | 2 | 3 | endl; // turn off implicit separator temporarily4202 \end{lstlisting}4203 \begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]4204 12 34205 \end{lstlisting}4206 \begin{lstlisting}[mathescape=off,aboveskip=0pt,belowskip=0pt]4207 sout | sepDisable | 1 | 2 | 3 | endl; // turn off implicit separation, affects all subsequent prints4208 \end{lstlisting}4209 \begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]4210 1234211 \end{lstlisting}4212 \begin{lstlisting}[mathescape=off,aboveskip=0pt,belowskip=0pt]4213 sout | 1 | sepOn | 2 | 3 | endl; // turn on implicit separator temporarily4214 \end{lstlisting}4215 \begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]4216 1 234217 \end{lstlisting}4218 \begin{lstlisting}[mathescape=off,aboveskip=0pt,belowskip=0pt]4219 sout | sepEnable | 1 | 2 | 3 | endl; // turn on implicit separation, affects all subsequent prints4220 \end{lstlisting}4221 \begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]4222 1 2 34223 \end{lstlisting}4224 \begin{lstlisting}[mathescape=off,aboveskip=0pt,aboveskip=0pt,belowskip=0pt]4225 sepSet( sout, ", $" ); // change separator from " " to ", $"4226 sout | 1 | 2 | 3 | endl;4227 \end{lstlisting}4228 %$4229 \begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt]4230 1, $2, $34231 \end{lstlisting}4232 %$4233 \begin{comment}4234 #include <fstream>4235 4236 int main() {4237 int x = 3, y = 5, z = 7;4238 sout | x * 3 | y + 1 | z << 2 | x == y | (x | y) | (x || y) | (x > z ? 1 : 2) | endl;4239 sout | 1 | 2 | 3 | endl;4240 sout | '1' | '2' | '3' | endl;4241 sout | 1 | "" | 2 | "" | 3 | endl;4242 sout | "x (" | 1 | "x [" | 2 | "x {" | 3 | "x $" | 4 | "x £" | 5 | "x ¥" | 6 | "x ¡" | 7 | "x ¿" | 8 | "x «" | 9 | endl;4243 sout | 1 | ", x" | 2 | ". x" | 3 | ": x" | 4 | "; x" | 5 | "! x" | 6 | "? x" | 7 | ") x" | 8 | "] x" | 9 | "} x"4244 | 10 | "% x" | 11 | "¢ x" | 12 | "» x" | endl;4245 sout | "x`" | 1 | "`x'" | 2 | "'x\"" | 3 | "\"x" | "x " | 4 | " x" | "x\t" | 1 | "\tx" | endl;4246 sout | sepOn | 1 | 2 | 3 | sepOn | endl; // separator at start of line4247 sout | 1 | sepOff | 2 | 3 | endl; // turn off implicit separator temporarily4248 sout | sepDisable | 1 | 2 | 3 | endl; // turn off implicit separation, affects all subsequent prints4249 sout | 1 | sepOn | 2 | 3 | endl; // turn on implicit separator temporarily4250 sout | sepEnable | 1 | 2 | 3 | endl; // turn on implicit separation, affects all subsequent prints4251 sepSet( sout, ", $" ); // change separator from " " to ", $"4252 sout | 1 | 2 | 3 | endl;4253 4254 }4255 4256 // Local Variables: //4257 // tab-width: 4 //4258 // End: //4259 \end{comment}4260 %$4261 4262 4263 \section{Standard Library}4264 \label{s:StandardLibrary}4265 4266 The goal of the \CFA standard-library is to wrap many of the existing C library-routines that are explicitly polymorphic into implicitly polymorphic versions.4267 4268 4269 \subsection{malloc}4270 4271 \begin{lstlisting}4272 forall( otype T ) T * malloc( void );§\indexc{malloc}§4273 forall( otype T ) T * malloc( char fill );4274 forall( otype T ) T * malloc( T * ptr, size_t size );4275 forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill );4276 forall( otype T ) T * calloc( size_t nmemb );§\indexc{calloc}§4277 forall( otype T ) T * realloc( T * ptr, size_t size );§\indexc{ato}§4278 forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill );4279 4280 forall( otype T ) T * aligned_alloc( size_t alignment );§\indexc{ato}§4281 forall( otype T ) T * memalign( size_t alignment ); // deprecated4282 forall( otype T ) int posix_memalign( T ** ptr, size_t alignment );4283 4284 forall( otype T ) T * memset( T * ptr, unsigned char fill ); // use default value '\0' for fill4285 forall( otype T ) T * memset( T * ptr ); // remove when default value available4286 \end{lstlisting}4287 4288 4289 \subsection{ato / strto}4290 4291 \begin{lstlisting}4292 int ato( const char * ptr );§\indexc{ato}§4293 unsigned int ato( const char * ptr );4294 long int ato( const char * ptr );4295 unsigned long int ato( const char * ptr );4296 long long int ato( const char * ptr );4297 unsigned long long int ato( const char * ptr );4298 float ato( const char * ptr );4299 double ato( const char * ptr );4300 long double ato( const char * ptr );4301 float _Complex ato( const char * ptr );4302 double _Complex ato( const char * ptr );4303 long double _Complex ato( const char * ptr );4304 4305 int strto( const char * sptr, char ** eptr, int base );4306 unsigned int strto( const char * sptr, char ** eptr, int base );4307 long int strto( const char * sptr, char ** eptr, int base );4308 unsigned long int strto( const char * sptr, char ** eptr, int base );4309 long long int strto( const char * sptr, char ** eptr, int base );4310 unsigned long long int strto( const char * sptr, char ** eptr, int base );4311 float strto( const char * sptr, char ** eptr );4312 double strto( const char * sptr, char ** eptr );4313 long double strto( const char * sptr, char ** eptr );4314 float _Complex strto( const char * sptr, char ** eptr );4315 double _Complex strto( const char * sptr, char ** eptr );4316 long double _Complex strto( const char * sptr, char ** eptr );4317 \end{lstlisting}4318 4319 4320 \subsection{bsearch / qsort}4321 4322 \begin{lstlisting}4323 forall( otype T | { int ?<?( T, T ); } )4324 T * bsearch( const T key, const T * arr, size_t dimension );§\indexc{bsearch}§4325 4326 forall( otype T | { int ?<?( T, T ); } )4327 void qsort( const T * arr, size_t dimension );§\indexc{qsort}§4328 \end{lstlisting}4329 4330 4331 \subsection{abs}4332 4333 \begin{lstlisting}4334 char abs( char );§\indexc{abs}§4335 int abs( int );4336 long int abs( long int );4337 long long int abs( long long int );4338 float abs( float );4339 double abs( double );4340 long double abs( long double );4341 float abs( float _Complex );4342 double abs( double _Complex );4343 long double abs( long double _Complex );4344 \end{lstlisting}4345 4346 4347 \subsection{random}4348 4349 \begin{lstlisting}4350 void rand48seed( long int s );§\indexc{rand48seed}§4351 char rand48();§\indexc{rand48}§4352 int rand48();4353 unsigned int rand48();4354 long int rand48();4355 unsigned long int rand48();4356 float rand48();4357 double rand48();4358 float _Complex rand48();4359 double _Complex rand48();4360 long double _Complex rand48();4361 \end{lstlisting}4362 4363 4364 \subsection{min / max / swap}4365 4366 \begin{lstlisting}4367 forall( otype T | { int ?<?( T, T ); } )4368 T min( const T t1, const T t2 );§\indexc{min}§4369 4370 forall( otype T | { int ?>?( T, T ); } )4371 T max( const T t1, const T t2 );§\indexc{max}§4372 4373 forall( otype T )4374 void swap( T * t1, T * t2 );§\indexc{swap}§4375 \end{lstlisting}4376 4377 4378 \section{Math Library}4379 \label{s:Math Library}4380 4381 The goal of the \CFA math-library is to wrap many of the existing C math library-routines that are explicitly polymorphic into implicitly polymorphic versions.4382 4383 4384 \subsection{General}4385 4386 \begin{lstlisting}4387 float fabs( float );§\indexc{fabs}§4388 double fabs( double );4389 long double fabs( long double );4390 float cabs( float _Complex );4391 double cabs( double _Complex );4392 long double cabs( long double _Complex );4393 4394 float ?%?( float, float );§\indexc{fmod}§4395 float fmod( float, float );4396 double ?%?( double, double );4397 double fmod( double, double );4398 long double ?%?( long double, long double );4399 long double fmod( long double, long double );4400 4401 float remainder( float, float );§\indexc{remainder}§4402 double remainder( double, double );4403 long double remainder( long double, long double );4404 4405 [ int, float ] remquo( float, float );§\indexc{remquo}§4406 float remquo( float, float, int * );4407 [ int, double ] remquo( double, double );4408 double remquo( double, double, int * );4409 [ int, long double ] remquo( long double, long double );4410 long double remquo( long double, long double, int * );4411 4412 [ int, float ] div( float, float ); // alternative name for remquo4413 float div( float, float, int * );§\indexc{div}§4414 [ int, double ] div( double, double );4415 double div( double, double, int * );4416 [ int, long double ] div( long double, long double );4417 long double div( long double, long double, int * );4418 4419 float fma( float, float, float );§\indexc{fma}§4420 double fma( double, double, double );4421 long double fma( long double, long double, long double );4422 4423 float fdim( float, float );§\indexc{fdim}§4424 double fdim( double, double );4425 long double fdim( long double, long double );4426 4427 float nan( const char * );§\indexc{nan}§4428 double nan( const char * );4429 long double nan( const char * );4430 \end{lstlisting}4431 4432 4433 \subsection{Exponential}4434 4435 \begin{lstlisting}4436 float exp( float );§\indexc{exp}§4437 double exp( double );4438 long double exp( long double );4439 float _Complex exp( float _Complex );4440 double _Complex exp( double _Complex );4441 long double _Complex exp( long double _Complex );4442 4443 float exp2( float );§\indexc{exp2}§4444 double exp2( double );4445 long double exp2( long double );4446 float _Complex exp2( float _Complex );4447 double _Complex exp2( double _Complex );4448 long double _Complex exp2( long double _Complex );4449 4450 float expm1( float );§\indexc{expm1}§4451 double expm1( double );4452 long double expm1( long double );4453 4454 float log( float );§\indexc{log}§4455 double log( double );4456 long double log( long double );4457 float _Complex log( float _Complex );4458 double _Complex log( double _Complex );4459 long double _Complex log( long double _Complex );4460 4461 float log2( float );§\indexc{log2}§4462 double log2( double );4463 long double log2( long double );4464 float _Complex log2( float _Complex );4465 double _Complex log2( double _Complex );4466 long double _Complex log2( long double _Complex );4467 4468 float log10( float );§\indexc{log10}§4469 double log10( double );4470 long double log10( long double );4471 float _Complex log10( float _Complex );4472 double _Complex log10( double _Complex );4473 long double _Complex log10( long double _Complex );4474 4475 float log1p( float );§\indexc{log1p}§4476 double log1p( double );4477 long double log1p( long double );4478 4479 int ilogb( float );§\indexc{ilogb}§4480 int ilogb( double );4481 int ilogb( long double );4482 4483 float logb( float );§\indexc{logb}§4484 double logb( double );4485 long double logb( long double );4486 \end{lstlisting}4487 4488 4489 \subsection{Power}4490 4491 \begin{lstlisting}4492 float sqrt( float );§\indexc{sqrt}§4493 double sqrt( double );4494 long double sqrt( long double );4495 float _Complex sqrt( float _Complex );4496 double _Complex sqrt( double _Complex );4497 long double _Complex sqrt( long double _Complex );4498 4499 float cbrt( float );§\indexc{cbrt}§4500 double cbrt( double );4501 long double cbrt( long double );4502 4503 float hypot( float, float );§\indexc{hypot}§4504 double hypot( double, double );4505 long double hypot( long double, long double );4506 4507 float pow( float, float );§\indexc{pow}§4508 double pow( double, double );4509 long double pow( long double, long double );4510 float _Complex pow( float _Complex, float _Complex );4511 double _Complex pow( double _Complex, double _Complex );4512 long double _Complex pow( long double _Complex, long double _Complex );4513 \end{lstlisting}4514 4515 4516 \subsection{Trigonometric}4517 4518 \begin{lstlisting}4519 float sin( float );§\indexc{sin}§4520 double sin( double );4521 long double sin( long double );4522 float _Complex sin( float _Complex );4523 double _Complex sin( double _Complex );4524 long double _Complex sin( long double _Complex );4525 4526 float cos( float );§\indexc{cos}§4527 double cos( double );4528 long double cos( long double );4529 float _Complex cos( float _Complex );4530 double _Complex cos( double _Complex );4531 long double _Complex cos( long double _Complex );4532 4533 float tan( float );§\indexc{tan}§4534 double tan( double );4535 long double tan( long double );4536 float _Complex tan( float _Complex );4537 double _Complex tan( double _Complex );4538 long double _Complex tan( long double _Complex );4539 4540 float asin( float );§\indexc{asin}§4541 double asin( double );4542 long double asin( long double );4543 float _Complex asin( float _Complex );4544 double _Complex asin( double _Complex );4545 long double _Complex asin( long double _Complex );4546 4547 float acos( float );§\indexc{acos}§4548 double acos( double );4549 long double acos( long double );4550 float _Complex acos( float _Complex );4551 double _Complex acos( double _Complex );4552 long double _Complex acos( long double _Complex );4553 4554 float atan( float );§\indexc{atan}§4555 double atan( double );4556 long double atan( long double );4557 float _Complex atan( float _Complex );4558 double _Complex atan( double _Complex );4559 long double _Complex atan( long double _Complex );4560 4561 float atan2( float, float );§\indexc{atan2}§4562 double atan2( double, double );4563 long double atan2( long double, long double );4564 4565 float atan( float, float ); // alternative name for atan24566 double atan( double, double );§\indexc{atan}§4567 long double atan( long double, long double );4568 \end{lstlisting}4569 4570 4571 \subsection{Hyperbolic}4572 4573 \begin{lstlisting}4574 float sinh( float );§\indexc{sinh}§4575 double sinh( double );4576 long double sinh( long double );4577 float _Complex sinh( float _Complex );4578 double _Complex sinh( double _Complex );4579 long double _Complex sinh( long double _Complex );4580 4581 float cosh( float );§\indexc{cosh}§4582 double cosh( double );4583 long double cosh( long double );4584 float _Complex cosh( float _Complex );4585 double _Complex cosh( double _Complex );4586 long double _Complex cosh( long double _Complex );4587 4588 float tanh( float );§\indexc{tanh}§4589 double tanh( double );4590 long double tanh( long double );4591 float _Complex tanh( float _Complex );4592 double _Complex tanh( double _Complex );4593 long double _Complex tanh( long double _Complex );4594 4595 float asinh( float );§\indexc{asinh}§4596 double asinh( double );4597 long double asinh( long double );4598 float _Complex asinh( float _Complex );4599 double _Complex asinh( double _Complex );4600 long double _Complex asinh( long double _Complex );4601 4602 float acosh( float );§\indexc{acosh}§4603 double acosh( double );4604 long double acosh( long double );4605 float _Complex acosh( float _Complex );4606 double _Complex acosh( double _Complex );4607 long double _Complex acosh( long double _Complex );4608 4609 float atanh( float );§\indexc{atanh}§4610 double atanh( double );4611 long double atanh( long double );4612 float _Complex atanh( float _Complex );4613 double _Complex atanh( double _Complex );4614 long double _Complex atanh( long double _Complex );4615 \end{lstlisting}4616 4617 4618 \subsection{Error / Gamma}4619 4620 \begin{lstlisting}4621 float erf( float );§\indexc{erf}§4622 double erf( double );4623 long double erf( long double );4624 float _Complex erf( float _Complex );4625 double _Complex erf( double _Complex );4626 long double _Complex erf( long double _Complex );4627 4628 float erfc( float );§\indexc{erfc}§4629 double erfc( double );4630 long double erfc( long double );4631 float _Complex erfc( float _Complex );4632 double _Complex erfc( double _Complex );4633 long double _Complex erfc( long double _Complex );4634 4635 float lgamma( float );§\indexc{lgamma}§4636 double lgamma( double );4637 long double lgamma( long double );4638 float lgamma( float, int * );4639 double lgamma( double, int * );4640 long double lgamma( long double, int * );4641 4642 float tgamma( float );§\indexc{tgamma}§4643 double tgamma( double );4644 long double tgamma( long double );4645 \end{lstlisting}4646 4647 4648 \subsection{Nearest Integer}4649 4650 \begin{lstlisting}4651 float floor( float );§\indexc{floor}§4652 double floor( double );4653 long double floor( long double );4654 4655 float ceil( float );§\indexc{ceil}§4656 double ceil( double );4657 long double ceil( long double );4658 4659 float trunc( float );§\indexc{trunc}§4660 double trunc( double );4661 long double trunc( long double );4662 4663 float rint( float );§\indexc{rint}§4664 long double rint( long double );4665 long int rint( float );4666 long int rint( double );4667 long int rint( long double );4668 long long int rint( float );4669 long long int rint( double );4670 long long int rint( long double );4671 4672 long int lrint( float );§\indexc{lrint}§4673 long int lrint( double );4674 long int lrint( long double );4675 long long int llrint( float );4676 long long int llrint( double );4677 long long int llrint( long double );4678 4679 float nearbyint( float );§\indexc{nearbyint}§4680 double nearbyint( double );4681 long double nearbyint( long double );4682 4683 float round( float );§\indexc{round}§4684 long double round( long double );4685 long int round( float );4686 long int round( double );4687 long int round( long double );4688 long long int round( float );4689 long long int round( double );4690 long long int round( long double );4691 4692 long int lround( float );§\indexc{lround}§4693 long int lround( double );4694 long int lround( long double );4695 long long int llround( float );4696 long long int llround( double );4697 long long int llround( long double );4698 \end{lstlisting}4699 4700 4701 \subsection{Manipulation}4702 4703 \begin{lstlisting}4704 float copysign( float, float );§\indexc{copysign}§4705 double copysign( double, double );4706 long double copysign( long double, long double );4707 4708 float frexp( float, int * );§\indexc{frexp}§4709 double frexp( double, int * );4710 long double frexp( long double, int * );4711 4712 float ldexp( float, int );§\indexc{ldexp}§4713 double ldexp( double, int );4714 long double ldexp( long double, int );4715 4716 [ float, float ] modf( float );§\indexc{modf}§4717 float modf( float, float * );4718 [ double, double ] modf( double );4719 double modf( double, double * );4720 [ long double, long double ] modf( long double );4721 long double modf( long double, long double * );4722 4723 float nextafter( float, float );§\indexc{nextafter}§4724 double nextafter( double, double );4725 long double nextafter( long double, long double );4726 4727 float nexttoward( float, long double );§\indexc{nexttoward}§4728 double nexttoward( double, long double );4729 long double nexttoward( long double, long double );4730 4731 float scalbn( float, int );§\indexc{scalbn}§4732 double scalbn( double, int );4733 long double scalbn( long double, int );4734 4735 float scalbln( float, long int );§\indexc{scalbln}§4736 double scalbln( double, long int );4737 long double scalbln( long double, long int );4738 \end{lstlisting}4739 4740 4741 \section{Rational Numbers}4742 \label{s:RationalNumbers}4743 4744 Rational numbers are numbers written as a ratio, i.e., as a fraction, where the numerator (top number) and the denominator (bottom number) are whole numbers.4745 When creating and computing with rational numbers, results are constantly reduced to keep the numerator and denominator as small as possible.4746 4747 \begin{lstlisting}4748 // implementation4749 struct Rational {§\indexc{Rational}§4750 long int numerator, denominator; // invariant: denominator > 04751 }; // Rational4752 4753 // constants4754 extern struct Rational 0;4755 extern struct Rational 1;4756 4757 // constructors4758 Rational rational();4759 Rational rational( long int n );4760 Rational rational( long int n, long int d );4761 4762 // getter/setter for numerator/denominator4763 long int numerator( Rational r );4764 long int numerator( Rational r, long int n );4765 long int denominator( Rational r );4766 long int denominator( Rational r, long int d );4767 4768 // comparison4769 int ?==?( Rational l, Rational r );4770 int ?!=?( Rational l, Rational r );4771 int ?<?( Rational l, Rational r );4772 int ?<=?( Rational l, Rational r );4773 int ?>?( Rational l, Rational r );4774 int ?>=?( Rational l, Rational r );4775 4776 // arithmetic4777 Rational -?( Rational r );4778 Rational ?+?( Rational l, Rational r );4779 Rational ?-?( Rational l, Rational r );4780 Rational ?*?( Rational l, Rational r );4781 Rational ?/?( Rational l, Rational r );4782 4783 // conversion4784 double widen( Rational r );4785 Rational narrow( double f, long int md );4786 4787 // I/O4788 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, Rational * );4789 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, Rational );4790 \end{lstlisting}4791 4792 4793 4257 \bibliographystyle{plain} 4794 \bibliography{ cfa}4258 \bibliography{/usr/local/bibliographies/pl.bib} 4795 4259 4796 4260 -
src/CodeGen/CodeGenerator.cc
r1048b31 r1f6e009 455 455 456 456 void CodeGenerator::visit( UntypedOffsetofExpr *offsetofExpr ) { 457 assert( false && "UntypedOffsetofExpr should not reach code generation");457 assert( false ); 458 458 } 459 459 … … 464 464 output << ", " << mangleName( offsetofExpr->get_member() ); 465 465 output << ")"; 466 }467 468 void CodeGenerator::visit( OffsetPackExpr *offsetPackExpr ) {469 assert( false && "OffsetPackExpr should not reach code generation" );470 466 } 471 467 -
src/CodeGen/CodeGenerator.h
r1048b31 r1f6e009 65 65 virtual void visit( UntypedOffsetofExpr *offsetofExpr ); 66 66 virtual void visit( OffsetofExpr *offsetofExpr ); 67 virtual void visit( OffsetPackExpr *offsetPackExpr );68 67 virtual void visit( LogicalExpr *logicalExpr ); 69 68 virtual void visit( ConditionalExpr *conditionalExpr ); -
src/GenPoly/Box.cc
r1048b31 r1f6e009 30 30 #include "FindFunction.h" 31 31 #include "ScopedMap.h" 32 #include "ScopedSet.h"33 32 #include "ScrubTyVars.h" 34 33 … … 63 62 FunctionType *makeAdapterType( FunctionType *adaptee, const TyVarMap &tyVars ); 64 63 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 ) ) {} 64 /// Key for a unique concrete type; generic base type paired with type parameter list 65 struct ConcreteType { 66 ConcreteType() : base(NULL), params() {} 67 68 ConcreteType(AggregateDecl *_base, const std::list< Type* >& _params) : base(_base), params() { cloneAll(_params, params); } 69 70 ConcreteType(const ConcreteType& that) : base(that.base), params() { cloneAll(that.params, params); } 73 71 74 72 /// Extracts types from a list of TypeExpr* 75 TypeList( const std::list< TypeExpr* >& _params ) :params() {73 ConcreteType(AggregateDecl *_base, const std::list< TypeExpr* >& _params) : base(_base), params() { 76 74 for ( std::list< TypeExpr* >::const_iterator param = _params.begin(); param != _params.end(); ++param ) { 77 75 params.push_back( (*param)->get_type()->clone() ); … … 79 77 } 80 78 81 TypeList& operator= ( const TypeList &that) {79 ConcreteType& operator= (const ConcreteType& that) { 82 80 deleteAll( params ); 83 84 81 params.clear(); 82 83 base = that.base; 85 84 cloneAll( that.params, params ); 86 85 … … 88 87 } 89 88 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 { 89 ~ConcreteType() { deleteAll( params ); } 90 91 bool operator== (const ConcreteType& that) const { 92 if ( base != that.base ) return false; 93 94 SymTab::Indexer dummy; 101 95 if ( params.size() != that.params.size() ) return false; 102 103 SymTab::Indexer dummy;104 96 for ( std::list< Type* >::const_iterator it = params.begin(), jt = that.params.begin(); it != params.end(); ++it, ++jt ) { 105 97 if ( ! ResolvExpr::typesCompatible( *it, *jt, dummy ) ) return false; … … 108 100 } 109 101 102 AggregateDecl *base; ///< Base generic type 110 103 std::list< Type* > params; ///< Instantiation parameters 111 104 }; 112 105 113 /// Maps a key and a TypeListto the some value, accounting for scope114 template< typename Key, typenameValue >106 /// Maps a concrete type to the some value, accounting for scope 107 template< typename Value > 115 108 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 109 /// Information about a specific instantiation of a generic type 110 struct Instantiation { 111 ConcreteType key; ///< Instantiation parameters for this type 112 Value *value; ///< Value for this instantiation 113 114 Instantiation() : key(), value(0) {} 115 Instantiation(const ConcreteType &_key, Value *_value) : key(_key), value(_value) {} 116 }; 117 /// Map of generic types to instantiations of them 118 typedef std::map< AggregateDecl*, std::vector< Instantiation > > Scope; 119 120 std::vector< Scope > scopes; ///< list of scopes, from outermost to innermost 124 121 125 122 public: 126 123 /// Starts a new scope 127 void beginScope() { instantiations.beginScope(); } 124 void beginScope() { 125 Scope scope; 126 scopes.push_back(scope); 127 } 128 128 129 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; 130 void endScope() { 131 scopes.pop_back(); 132 } 133 134 /// Default constructor initializes with one scope 135 InstantiationMap() { beginScope(); } 136 137 // private: 138 /// Gets the value for the concrete instantiation of this type, assuming it has already been instantiated in the current scope. 139 /// Returns NULL on none such. 140 Value *lookup( AggregateDecl *generic, const std::list< TypeExpr* >& params ) { 141 ConcreteType key(generic, params); 142 // scan scopes from innermost out 143 for ( typename std::vector< Scope >::const_reverse_iterator scope = scopes.rbegin(); scope != scopes.rend(); ++scope ) { 144 // skip scope if no instantiations of this generic type 145 typename Scope::const_iterator insts = scope->find( generic ); 146 if ( insts == scope->end() ) continue; 147 // look through instantiations for matches to concrete type 148 for ( typename std::vector< Instantiation >::const_iterator inst = insts->second.begin(); inst != insts->second.end(); ++inst ) { 149 if ( inst->key == key ) return inst->value; 140 150 } 141 151 } 142 // no matching instantiation sfound152 // no matching instantiation found 143 153 return 0; 144 154 } 145 146 /// Adds a value for a (key, typeList) pair to the current scope 147 void insert( Key *key, const std::list< TypeExpr* > ¶ms, Value *value ) { 148 instantiations[ key ].push_back( Instantiation( TypeList( params ), value ) ); 149 } 155 public: 156 // StructDecl* lookup( StructInstType *inst, const std::list< TypeExpr* > &typeSubs ) { return (StructDecl*)lookup( inst->get_baseStruct(), typeSubs ); } 157 // UnionDecl* lookup( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs ) { return (UnionDecl*)lookup( inst->get_baseUnion(), typeSubs ); } 158 159 // private: 160 /// Adds a value for a concrete type to the current scope 161 void insert( AggregateDecl *generic, const std::list< TypeExpr* > ¶ms, Value *value ) { 162 ConcreteType key(generic, params); 163 scopes.back()[generic].push_back( Instantiation( key, value ) ); 164 } 165 // public: 166 // void insert( StructInstType *inst, const std::list< TypeExpr* > &typeSubs, StructDecl *decl ) { insert( inst->get_baseStruct(), typeSubs, decl ); } 167 // void insert( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs, UnionDecl *decl ) { insert( inst->get_baseUnion(), typeSubs, decl ); } 150 168 }; 151 169 … … 179 197 virtual void doEndScope(); 180 198 private: 199 /// Makes a new temporary array holding the offsets of the fields of `type`, and returns a new variable expression referencing it 200 Expression *makeOffsetArray( StructInstType *type ); 181 201 /// Pass the extra type parameters from polymorphic generic arguments or return types into a function application 182 202 void passArgTypeVars( ApplicationExpr *appExpr, Type *parmType, Type *argBaseType, std::list< Expression *>::iterator &arg, const TyVarMap &exprTyVars, std::set< std::string > &seenTypes ); … … 205 225 ObjectDecl *makeTemporary( Type *type ); 206 226 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 227 std::map< std::string, DeclarationWithType *> assignOps; 228 ResolvExpr::TypeMap< DeclarationWithType > scopedAssignOps; 229 ScopedMap< std::string, DeclarationWithType* > adapters; 211 230 DeclarationWithType *retval; 212 231 bool useRetval; … … 214 233 }; 215 234 216 /// * Moves polymorphic returns in function types to pointer-type parameters 217 /// * adds type size and assertion parameters to parameter lists 235 /// Moves polymorphic returns in function types to pointer-type parameters, adds type size and assertion parameters to parameter lists as well 218 236 class Pass2 : public PolyMutator { 219 237 public: … … 226 244 virtual Type *mutate( PointerType *pointerType ); 227 245 virtual Type *mutate( FunctionType *funcType ); 228 229 246 private: 230 247 void addAdapters( FunctionType *functionType ); … … 236 253 class GenericInstantiator : public DeclMutator { 237 254 /// Map of (generic type, parameter list) pairs to concrete type instantiations 238 InstantiationMap< AggregateDecl , AggregateDecl> instantiations;255 InstantiationMap< AggregateDecl > instantiations; 239 256 /// Namer for concrete types 240 257 UniqueName typeNamer; … … 261 278 }; 262 279 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: 280 /// Replaces member expressions for polymorphic types with calculated add-field-offset-and-dereference; 281 /// also fixes offsetof expressions. 282 class MemberExprFixer : public PolyMutator { 283 public: 269 284 template< typename DeclClass > 270 285 DeclClass *handleDecl( DeclClass *decl, Type *type ); … … 277 292 virtual Type *mutate( FunctionType *funcType ); 278 293 virtual Expression *mutate( MemberExpr *memberExpr ); 279 virtual Expression *mutate( SizeofExpr *sizeofExpr );280 virtual Expression *mutate( AlignofExpr *alignofExpr );281 294 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 initializer289 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 returns291 bool findGeneric( Type *ty );292 /// adds type parameters to the layout call; will generate the appropriate parameters if needed293 void addOtypeParamsToLayoutCall( UntypedExpr *layoutCall, const std::list< Type* > &otypeParams );294 295 /// Enters a new scope for type-variables, adding the type variables from ty296 void beginTypeScope( Type *ty );297 /// Exits the type-variable scope298 void endTypeScope();299 300 ScopedSet< std::string > knownLayouts; ///< Set of generic type layouts known in the current scope, indexed by sizeofName301 ScopedSet< std::string > knownOffsets; ///< Set of non-generic types for which the offset array exists in the current scope, indexed by offsetofName302 295 }; 303 296 … … 349 342 Pass2 pass2; 350 343 GenericInstantiator instantiator; 351 PolyGenericCalculator polyCalculator;344 MemberExprFixer memberFixer; 352 345 Pass3 pass3; 353 346 … … 355 348 mutateTranslationUnit/*All*/( translationUnit, pass1 ); 356 349 mutateTranslationUnit/*All*/( translationUnit, pass2 ); 350 // instantiateGeneric( translationUnit ); 357 351 instantiator.mutateDeclarationList( translationUnit ); 358 mutateTranslationUnit/*All*/( translationUnit, polyCalculator );352 mutateTranslationUnit/*All*/( translationUnit, memberFixer ); 359 353 mutateTranslationUnit/*All*/( translationUnit, pass3 ); 360 354 } … … 390 384 for ( std::list< TypeDecl* >::const_iterator param = otypeParams.begin(); param != otypeParams.end(); ++param ) { 391 385 TypeInstType paramType( Type::Qualifiers(), (*param)->get_name(), *param ); 392 std::string paramName = mangleType( ¶mType ); 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 ) ); 386 layoutFnType->get_parameters().push_back( new ObjectDecl( sizeofName( ¶mType ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignType.clone(), 0 ) ); 387 layoutFnType->get_parameters().push_back( new ObjectDecl( alignofName( ¶mType ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignType.clone(), 0 ) ); 395 388 } 396 389 } 397 390 398 391 /// Builds a layout function declaration 399 FunctionDecl *buildLayoutFunctionDecl( AggregateDecl *typeDecl, unsigned int functionNesting, FunctionType *layoutFnType ) {392 FunctionDecl *buildLayoutFunctionDecl( const std::string &typeName, unsigned int functionNesting, FunctionType *layoutFnType ) { 400 393 // Routines at global scope marked "static" to prevent multiple definitions is separate translation units 401 394 // because each unit generates copies of the default routines for each aggregate. 402 395 FunctionDecl *layoutDecl = new FunctionDecl( 403 layoutofName( typeDecl ), functionNesting > 0 ? DeclarationNode::NoStorageClass : DeclarationNode::Static, LinkageSpec::AutoGen, layoutFnType, new CompoundStmt( noLabels ), true, false );396 "__layoutof_" + typeName, functionNesting > 0 ? DeclarationNode::NoStorageClass : DeclarationNode::Static, LinkageSpec::AutoGen, layoutFnType, new CompoundStmt( noLabels ), true, false ); 404 397 layoutDecl->fixUniqueId(); 405 398 return layoutDecl; … … 468 461 PointerType *sizeAlignOutType = new PointerType( Type::Qualifiers(), sizeAlignType ); 469 462 470 ObjectDecl *sizeParam = new ObjectDecl( sizeofName( structDecl->get_name()), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType, 0 );463 ObjectDecl *sizeParam = new ObjectDecl( "__sizeof_" + structDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType, 0 ); 471 464 layoutFnType->get_parameters().push_back( sizeParam ); 472 ObjectDecl *alignParam = new ObjectDecl( alignofName( structDecl->get_name()), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );465 ObjectDecl *alignParam = new ObjectDecl( "__alignof_" + structDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 ); 473 466 layoutFnType->get_parameters().push_back( alignParam ); 474 ObjectDecl *offsetParam = new ObjectDecl( offsetofName( structDecl->get_name()), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );467 ObjectDecl *offsetParam = new ObjectDecl( "__offsetof_" + structDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 ); 475 468 layoutFnType->get_parameters().push_back( offsetParam ); 476 469 addOtypeParams( layoutFnType, otypeParams ); 477 470 478 471 // build function decl 479 FunctionDecl *layoutDecl = buildLayoutFunctionDecl( structDecl , functionNesting, layoutFnType );472 FunctionDecl *layoutDecl = buildLayoutFunctionDecl( structDecl->get_name(), functionNesting, layoutFnType ); 480 473 481 474 // calculate struct layout in function body … … 529 522 PointerType *sizeAlignOutType = new PointerType( Type::Qualifiers(), sizeAlignType ); 530 523 531 ObjectDecl *sizeParam = new ObjectDecl( sizeofName( unionDecl->get_name()), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType, 0 );524 ObjectDecl *sizeParam = new ObjectDecl( "__sizeof_" + unionDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType, 0 ); 532 525 layoutFnType->get_parameters().push_back( sizeParam ); 533 ObjectDecl *alignParam = new ObjectDecl( alignofName( unionDecl->get_name()), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );526 ObjectDecl *alignParam = new ObjectDecl( "__alignof_" + unionDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 ); 534 527 layoutFnType->get_parameters().push_back( alignParam ); 535 528 addOtypeParams( layoutFnType, otypeParams ); 536 529 537 530 // build function decl 538 FunctionDecl *layoutDecl = buildLayoutFunctionDecl( unionDecl , functionNesting, layoutFnType );531 FunctionDecl *layoutDecl = buildLayoutFunctionDecl( unionDecl->get_name(), functionNesting, layoutFnType ); 539 532 540 533 // calculate union layout in function body … … 660 653 661 654 DeclarationWithType *Pass1::mutate( FunctionDecl *functionDecl ) { 662 // if this is a assignment function, put it in the map for this scope655 // if this is a polymorphic assignment function, put it in the map for this scope 663 656 if ( Type *assignedType = isAssignment( functionDecl ) ) { 664 657 if ( ! dynamic_cast< TypeInstType* >( assignedType ) ) { … … 669 662 if ( functionDecl->get_statements() ) { // empty routine body ? 670 663 doBeginScope(); 671 scopeTyVars.beginScope();672 assignOps.beginScope();664 TyVarMap oldtyVars = scopeTyVars; 665 std::map< std::string, DeclarationWithType *> oldassignOps = assignOps; 673 666 DeclarationWithType *oldRetval = retval; 674 667 bool oldUseRetval = useRetval; … … 711 704 functionDecl->set_statements( functionDecl->get_statements()->acceptMutator( *this ) ); 712 705 713 scopeTyVars.endScope(); 714 assignOps.endScope(); 706 scopeTyVars = oldtyVars; 707 assignOps = oldassignOps; 708 // std::cerr << "end FunctionDecl: "; 709 // for ( TyVarMap::iterator i = scopeTyVars.begin(); i != scopeTyVars.end(); ++i ) { 710 // std::cerr << i->first << " "; 711 // } 712 // std::cerr << "\n"; 715 713 retval = oldRetval; 716 714 useRetval = oldUseRetval; … … 745 743 } 746 744 745 Expression *Pass1::makeOffsetArray( StructInstType *ty ) { 746 std::list< Declaration* > &baseMembers = ty->get_baseStruct()->get_members(); 747 748 // make a new temporary array 749 Type *offsetType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ); 750 std::stringstream lenGen; 751 lenGen << baseMembers.size(); 752 ConstantExpr *lenExpr = new ConstantExpr( Constant( offsetType->clone(), lenGen.str() ) ); 753 ObjectDecl *arrayTemp = makeTemporary( new ArrayType( Type::Qualifiers(), offsetType, lenExpr, false, false ) ); 754 755 // build initializer list for temporary 756 std::list< Initializer* > inits; 757 for ( std::list< Declaration* >::const_iterator member = baseMembers.begin(); member != baseMembers.end(); ++member ) { 758 DeclarationWithType *memberDecl; 759 if ( DeclarationWithType *origMember = dynamic_cast< DeclarationWithType* >( *member ) ) { 760 memberDecl = origMember->clone(); 761 } else { 762 memberDecl = new ObjectDecl( (*member)->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, offsetType->clone(), 0 ); 763 } 764 inits.push_back( new SingleInit( new OffsetofExpr( ty->clone(), memberDecl ) ) ); 765 } 766 arrayTemp->set_init( new ListInit( inits ) ); 767 768 // return variable pointing to temporary 769 return new VariableExpr( arrayTemp ); 770 } 771 747 772 void Pass1::passArgTypeVars( ApplicationExpr *appExpr, Type *parmType, Type *argBaseType, std::list< Expression *>::iterator &arg, const TyVarMap &exprTyVars, std::set< std::string > &seenTypes ) { 748 Type *poly Type = isPolyType( parmType, exprTyVars );749 if ( poly Type && ! dynamic_cast< TypeInstType* >( polyType ) ) {750 std::string typeName = mangleType( polyType );751 if ( seenTypes.count( typeName ) ) return;773 Type *polyBase = hasPolyBase( parmType, exprTyVars ); 774 if ( polyBase && ! dynamic_cast< TypeInstType* >( polyBase ) ) { 775 std::string sizeName = sizeofName( polyBase ); 776 if ( seenTypes.count( sizeName ) ) return; 752 777 753 778 arg = appExpr->get_args().insert( arg, new SizeofExpr( argBaseType->clone() ) ); … … 755 780 arg = appExpr->get_args().insert( arg, new AlignofExpr( argBaseType->clone() ) ); 756 781 arg++; 757 if ( dynamic_cast< StructInstType* >( poly Type ) ) {782 if ( dynamic_cast< StructInstType* >( polyBase ) ) { 758 783 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 } 784 arg = appExpr->get_args().insert( arg, makeOffsetArray( argBaseStructType ) ); 785 arg++; 764 786 } else { 765 787 throw SemanticError( "Cannot pass non-struct type for generic struct" ); … … 767 789 } 768 790 769 seenTypes.insert( typeName );791 seenTypes.insert( sizeName ); 770 792 } 771 793 } … … 909 931 return; 910 932 } 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 } 933 // VariableExpr and MemberExpr are lvalues 934 arg = new AddressExpr( arg ); 917 935 } else { 918 936 // use type computed in unification to declare boxed variables … … 1009 1027 } // for 1010 1028 } 1029 1030 1011 1031 1012 1032 FunctionDecl *Pass1::makeAdapter( FunctionType *adaptee, FunctionType *realType, const std::string &mangleName, const TyVarMap &tyVars ) { … … 1125 1145 addAssign->get_args().push_back( appExpr->get_args().front() ); 1126 1146 } // if 1127 addAssign->get_args().push_back( new NameExpr( sizeofName( mangleType( polyType )) ) );1147 addAssign->get_args().push_back( new NameExpr( sizeofName( polyType ) ) ); 1128 1148 addAssign->get_results().front() = appExpr->get_results().front()->clone(); 1129 1149 if ( appExpr->get_env() ) { … … 1152 1172 UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) ); 1153 1173 multiply->get_args().push_back( appExpr->get_args().back() ); 1154 multiply->get_args().push_back( new SizeofExpr( baseType1->clone() ) );1174 multiply->get_args().push_back( new NameExpr( sizeofName( baseType1 ) ) ); 1155 1175 ret->get_args().push_back( appExpr->get_args().front() ); 1156 1176 ret->get_args().push_back( multiply ); … … 1158 1178 UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) ); 1159 1179 multiply->get_args().push_back( appExpr->get_args().front() ); 1160 multiply->get_args().push_back( new SizeofExpr( baseType2->clone() ) );1180 multiply->get_args().push_back( new NameExpr( sizeofName( baseType2 ) ) ); 1161 1181 ret->get_args().push_back( multiply ); 1162 1182 ret->get_args().push_back( appExpr->get_args().back() ); … … 1221 1241 UntypedExpr *divide = new UntypedExpr( new NameExpr( "?/?" ) ); 1222 1242 divide->get_args().push_back( appExpr ); 1223 divide->get_args().push_back( new SizeofExpr( baseType1->clone() ) );1243 divide->get_args().push_back( new NameExpr( sizeofName( baseType1 ) ) ); 1224 1244 divide->get_results().push_front( appExpr->get_results().front()->clone() ); 1225 1245 if ( appExpr->get_env() ) { … … 1231 1251 UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) ); 1232 1252 multiply->get_args().push_back( appExpr->get_args().back() ); 1233 multiply->get_args().push_back( new SizeofExpr( baseType1->clone() ) );1253 multiply->get_args().push_back( new NameExpr( sizeofName( baseType1 ) ) ); 1234 1254 appExpr->get_args().back() = multiply; 1235 1255 } else if ( baseType2 ) { 1236 1256 UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) ); 1237 1257 multiply->get_args().push_back( appExpr->get_args().front() ); 1238 multiply->get_args().push_back( new SizeofExpr( baseType2->clone() ) );1258 multiply->get_args().push_back( new NameExpr( sizeofName( baseType2 ) ) ); 1239 1259 appExpr->get_args().front() = multiply; 1240 1260 } // if … … 1246 1266 UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) ); 1247 1267 multiply->get_args().push_back( appExpr->get_args().back() ); 1248 multiply->get_args().push_back( new SizeofExpr( baseType->clone() ) );1268 multiply->get_args().push_back( new NameExpr( sizeofName( baseType ) ) ); 1249 1269 appExpr->get_args().back() = multiply; 1250 1270 } // if … … 1283 1303 std::list< Expression *>::iterator paramBegin = appExpr->get_args().begin(); 1284 1304 1285 TyVarMap exprTyVars ( (TypeDecl::Kind)-1 );1305 TyVarMap exprTyVars; 1286 1306 makeTyVarMap( function, exprTyVars ); 1287 1307 ReferenceToType *polyRetType = isPolyRet( function ); … … 1306 1326 1307 1327 boxParams( appExpr, function, arg, exprTyVars ); 1328 1308 1329 passAdapters( appExpr, function, exprTyVars ); 1309 1330 … … 1385 1406 if ( TypeInstType *typeInst = dynamic_cast< TypeInstType *>( retval->get_type() ) ) { 1386 1407 // find assignment operator for type variable 1387 ScopedMap< std::string, DeclarationWithType *>::const_iterator assignIter = assignOps.find( typeInst->get_name() );1408 std::map< std::string, DeclarationWithType *>::const_iterator assignIter = assignOps.find( typeInst->get_name() ); 1388 1409 if ( assignIter == assignOps.end() ) { 1389 1410 throw SemanticError( "Attempt to return dtype or ftype object in ", returnStmt->get_expr() ); … … 1407 1428 std::list< TypeDecl* >::const_iterator forallIt = forallParams.begin(); 1408 1429 for ( ; tyIt != tyParams.end() && forallIt != forallParams.end(); ++tyIt, ++forallIt ) { 1409 // Add appropriate mapping to assignment expression environment 1430 if ( (*forallIt)->get_kind() != TypeDecl::Any ) continue; // skip types with no assign op (ftype/dtype) 1431 1432 std::list< DeclarationWithType* > &asserts = (*forallIt)->get_assertions(); 1433 assert( ! asserts.empty() && "Type param needs assignment operator assertion" ); 1434 DeclarationWithType *actualDecl = asserts.front(); 1435 TypeInstType *actualType = isTypeInstAssignment( actualDecl ); 1436 assert( actualType && "First assertion of type with assertions should be assignment operator" ); 1410 1437 TypeExpr *formalTypeExpr = dynamic_cast< TypeExpr* >( *tyIt ); 1411 1438 assert( formalTypeExpr && "type parameters must be type expressions" ); 1412 1439 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 1440 assignExpr->get_env()->add( actualType->get_name(), formalType ); 1441 1419 1442 DeclarationWithType *assertAssign = 0; 1420 1443 if ( TypeInstType *formalTypeInstType = dynamic_cast< TypeInstType* >( formalType ) ) { 1421 ScopedMap< std::string, DeclarationWithType *>::const_iterator assertAssignIt = assignOps.find( formalTypeInstType->get_name() );1444 std::map< std::string, DeclarationWithType *>::const_iterator assertAssignIt = assignOps.find( formalTypeInstType->get_name() ); 1422 1445 if ( assertAssignIt == assignOps.end() ) { 1423 1446 throw SemanticError( "No assignment operation found for ", formalTypeInstType ); … … 1430 1453 } 1431 1454 } 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(); 1455 1456 1437 1457 assignExpr->get_inferParams()[ actualDecl->get_uniqueId() ] 1438 1458 = ParamEntry( assertAssign->get_uniqueId(), assertAssign->get_type()->clone(), actualDecl->get_type()->clone(), wrapFunctionDecl( assertAssign ) ); … … 1460 1480 1461 1481 Type * Pass1::mutate( PointerType *pointerType ) { 1462 scopeTyVars.beginScope();1482 TyVarMap oldtyVars = scopeTyVars; 1463 1483 makeTyVarMap( pointerType, scopeTyVars ); 1464 1484 1465 1485 Type *ret = Mutator::mutate( pointerType ); 1466 1486 1467 scopeTyVars .endScope();1487 scopeTyVars = oldtyVars; 1468 1488 return ret; 1469 1489 } 1470 1490 1471 1491 Type * Pass1::mutate( FunctionType *functionType ) { 1472 scopeTyVars.beginScope();1492 TyVarMap oldtyVars = scopeTyVars; 1473 1493 makeTyVarMap( functionType, scopeTyVars ); 1474 1494 1475 1495 Type *ret = Mutator::mutate( functionType ); 1476 1496 1477 scopeTyVars .endScope();1497 scopeTyVars = oldtyVars; 1478 1498 return ret; 1479 1499 } … … 1540 1560 1541 1561 Type * Pass2::mutate( PointerType *pointerType ) { 1542 scopeTyVars.beginScope();1562 TyVarMap oldtyVars = scopeTyVars; 1543 1563 makeTyVarMap( pointerType, scopeTyVars ); 1544 1564 1545 1565 Type *ret = Mutator::mutate( pointerType ); 1546 1566 1547 scopeTyVars .endScope();1567 scopeTyVars = oldtyVars; 1548 1568 return ret; 1549 1569 } 1550 1570 1551 1571 Type *Pass2::mutate( FunctionType *funcType ) { 1552 scopeTyVars.beginScope();1572 TyVarMap oldtyVars = scopeTyVars; 1553 1573 makeTyVarMap( funcType, scopeTyVars ); 1554 1574 … … 1567 1587 ObjectDecl newPtr( "", DeclarationNode::NoStorageClass, LinkageSpec::C, 0, 1568 1588 new PointerType( Type::Qualifiers(), new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ) ), 0 ); 1589 // ObjectDecl *newFunPtr = new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, new PointerType( Type::Qualifiers(), new FunctionType( Type::Qualifiers(), true ) ), 0 ); 1569 1590 for ( std::list< TypeDecl *>::const_iterator tyParm = funcType->get_forall().begin(); tyParm != funcType->get_forall().end(); ++tyParm ) { 1570 1591 ObjectDecl *sizeParm, *alignParm; … … 1572 1593 if ( (*tyParm)->get_kind() == TypeDecl::Any ) { 1573 1594 TypeInstType parmType( Type::Qualifiers(), (*tyParm)->get_name(), *tyParm ); 1574 std::string parmName = mangleType( &parmType );1575 1595 1576 1596 sizeParm = newObj.clone(); 1577 sizeParm->set_name( sizeofName( parmName ) );1597 sizeParm->set_name( sizeofName( &parmType ) ); 1578 1598 last = funcType->get_parameters().insert( last, sizeParm ); 1579 1599 ++last; 1580 1600 1581 1601 alignParm = newObj.clone(); 1582 alignParm->set_name( alignofName( parmName ) );1602 alignParm->set_name( alignofName( &parmType ) ); 1583 1603 last = funcType->get_parameters().insert( last, alignParm ); 1584 1604 ++last; … … 1595 1615 std::set< std::string > seenTypes; // sizeofName for generic types we've seen 1596 1616 for ( std::list< DeclarationWithType* >::const_iterator fnParm = last; fnParm != funcType->get_parameters().end(); ++fnParm ) { 1597 Type *poly Type = isPolyType( (*fnParm)->get_type(), scopeTyVars );1598 if ( poly Type && ! dynamic_cast< TypeInstType* >( polyType ) ) {1599 std::string typeName = mangleType( polyType );1600 if ( seenTypes.count( typeName ) ) continue;1617 Type *polyBase = hasPolyBase( (*fnParm)->get_type(), scopeTyVars ); 1618 if ( polyBase && ! dynamic_cast< TypeInstType* >( polyBase ) ) { 1619 std::string sizeName = sizeofName( polyBase ); 1620 if ( seenTypes.count( sizeName ) ) continue; 1601 1621 1602 1622 ObjectDecl *sizeParm, *alignParm, *offsetParm; 1603 1623 sizeParm = newObj.clone(); 1604 sizeParm->set_name( size ofName( typeName ));1624 sizeParm->set_name( sizeName ); 1605 1625 last = funcType->get_parameters().insert( last, sizeParm ); 1606 1626 ++last; 1607 1627 1608 1628 alignParm = newObj.clone(); 1609 alignParm->set_name( alignofName( typeName ) );1629 alignParm->set_name( alignofName( polyBase ) ); 1610 1630 last = funcType->get_parameters().insert( last, alignParm ); 1611 1631 ++last; 1612 1632 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 } 1633 if ( dynamic_cast< StructInstType* >( polyBase ) ) { 1634 offsetParm = newPtr.clone(); 1635 offsetParm->set_name( offsetofName( polyBase ) ); 1636 last = funcType->get_parameters().insert( last, offsetParm ); 1637 ++last; 1621 1638 } 1622 1639 1623 seenTypes.insert( typeName );1640 seenTypes.insert( sizeName ); 1624 1641 } 1625 1642 } … … 1631 1648 mutateAll( funcType->get_parameters(), *this ); 1632 1649 1633 scopeTyVars .endScope();1650 scopeTyVars = oldtyVars; 1634 1651 return funcType; 1635 1652 } … … 1824 1841 } 1825 1842 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 } 1843 ////////////////////////////////////////// MemberExprFixer //////////////////////////////////////////////////// 1836 1844 1837 1845 template< typename DeclClass > 1838 DeclClass * PolyGenericCalculator::handleDecl( DeclClass *decl, Type *type ) { 1839 beginTypeScope( type ); 1840 knownLayouts.beginScope(); 1841 knownOffsets.beginScope(); 1846 DeclClass * MemberExprFixer::handleDecl( DeclClass *decl, Type *type ) { 1847 TyVarMap oldtyVars = scopeTyVars; 1848 makeTyVarMap( type, scopeTyVars ); 1842 1849 1843 1850 DeclClass *ret = static_cast< DeclClass *>( Mutator::mutate( decl ) ); 1844 1851 1845 knownOffsets.endScope(); 1846 knownLayouts.endScope(); 1847 endTypeScope(); 1852 scopeTyVars = oldtyVars; 1848 1853 return ret; 1849 1854 } 1850 1855 1851 ObjectDecl * PolyGenericCalculator::mutate( ObjectDecl *objectDecl ) {1856 ObjectDecl * MemberExprFixer::mutate( ObjectDecl *objectDecl ) { 1852 1857 return handleDecl( objectDecl, objectDecl->get_type() ); 1853 1858 } 1854 1859 1855 DeclarationWithType * PolyGenericCalculator::mutate( FunctionDecl *functionDecl ) {1860 DeclarationWithType * MemberExprFixer::mutate( FunctionDecl *functionDecl ) { 1856 1861 return handleDecl( functionDecl, functionDecl->get_functionType() ); 1857 1862 } 1858 1863 1859 TypedefDecl * PolyGenericCalculator::mutate( TypedefDecl *typedefDecl ) {1864 TypedefDecl * MemberExprFixer::mutate( TypedefDecl *typedefDecl ) { 1860 1865 return handleDecl( typedefDecl, typedefDecl->get_base() ); 1861 1866 } 1862 1867 1863 TypeDecl * PolyGenericCalculator::mutate( TypeDecl *typeDecl ) {1868 TypeDecl * MemberExprFixer::mutate( TypeDecl *typeDecl ) { 1864 1869 scopeTyVars[ typeDecl->get_name() ] = typeDecl->get_kind(); 1865 1870 return Mutator::mutate( typeDecl ); 1866 1871 } 1867 1872 1868 Type * PolyGenericCalculator::mutate( PointerType *pointerType ) { 1869 beginTypeScope( pointerType ); 1873 Type * MemberExprFixer::mutate( PointerType *pointerType ) { 1874 TyVarMap oldtyVars = scopeTyVars; 1875 makeTyVarMap( pointerType, scopeTyVars ); 1870 1876 1871 1877 Type *ret = Mutator::mutate( pointerType ); 1872 1878 1873 endTypeScope();1879 scopeTyVars = oldtyVars; 1874 1880 return ret; 1875 1881 } 1876 1882 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(); 1883 Type * MemberExprFixer::mutate( FunctionType *functionType ) { 1884 TyVarMap oldtyVars = scopeTyVars; 1885 makeTyVarMap( functionType, scopeTyVars ); 1886 1887 Type *ret = Mutator::mutate( functionType ); 1888 1889 scopeTyVars = oldtyVars; 1892 1890 return ret; 1893 1891 } 1894 1892 1895 Statement * PolyGenericCalculator::mutate( DeclStmt *declStmt ) {1893 Statement *MemberExprFixer::mutate( DeclStmt *declStmt ) { 1896 1894 if ( ObjectDecl *objectDecl = dynamic_cast< ObjectDecl *>( declStmt->get_decl() ) ) { 1897 if ( findGeneric( objectDecl->get_type()) ) {1895 if ( isPolyType( objectDecl->get_type(), scopeTyVars ) ) { 1898 1896 // change initialization of a polymorphic value object 1899 1897 // to allocate storage with alloca 1900 1898 Type *declType = objectDecl->get_type(); 1901 1899 UntypedExpr *alloc = new UntypedExpr( new NameExpr( "__builtin_alloca" ) ); 1902 alloc->get_args().push_back( new NameExpr( sizeofName( mangleType( declType )) ) );1900 alloc->get_args().push_back( new NameExpr( sizeofName( declType ) ) ); 1903 1901 1904 1902 delete objectDecl->get_init(); … … 1932 1930 ConstantExpr *fieldIndex = new ConstantExpr( Constant( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), offset_namer.str() ) ); 1933 1931 UntypedExpr *fieldOffset = new UntypedExpr( new NameExpr( "?[?]" ) ); 1934 fieldOffset->get_args().push_back( new NameExpr( offsetofName( mangleType( objectType )) ) );1932 fieldOffset->get_args().push_back( new NameExpr( offsetofName( objectType ) ) ); 1935 1933 fieldOffset->get_args().push_back( fieldIndex ); 1936 1934 return fieldOffset; … … 1947 1945 } 1948 1946 1949 Expression * PolyGenericCalculator::mutate( MemberExpr *memberExpr ) {1947 Expression *MemberExprFixer::mutate( MemberExpr *memberExpr ) { 1950 1948 // mutate, exiting early if no longer MemberExpr 1951 1949 Expression *expr = Mutator::mutate( memberExpr ); … … 1964 1962 Type *objectType = hasPolyBase( objectDecl->get_type(), scopeTyVars, &tyDepth ); 1965 1963 if ( ! objectType ) return memberExpr; 1966 findGeneric( objectType ); // ensure layout for this type is available1967 1964 1968 1965 Expression *newMemberExpr = 0; … … 1996 1993 } 1997 1994 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 ) { 1995 Expression *MemberExprFixer::mutate( OffsetofExpr *offsetofExpr ) { 2138 1996 // mutate, exiting early if no longer OffsetofExpr 2139 1997 Expression *expr = Mutator::mutate( offsetofExpr ); … … 2142 2000 2143 2001 // only mutate expressions for polymorphic structs/unions 2144 Type *ty = offsetofExpr->get_type();2145 if ( ! findGeneric( ty )) return offsetofExpr;2146 2002 Type *ty = isPolyType( offsetofExpr->get_type(), scopeTyVars ); 2003 if ( ! ty ) return offsetofExpr; 2004 2147 2005 if ( StructInstType *structType = dynamic_cast< StructInstType* >( ty ) ) { 2148 2006 // replace offsetof expression by index into offset array … … 2160 2018 } 2161 2019 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 information2168 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 type2173 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 array2181 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 it2193 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 2213 2020 ////////////////////////////////////////// Pass3 //////////////////////////////////////////////////// 2214 2021 2215 2022 template< typename DeclClass > 2216 2023 DeclClass * Pass3::handleDecl( DeclClass *decl, Type *type ) { 2217 scopeTyVars.beginScope();2024 TyVarMap oldtyVars = scopeTyVars; 2218 2025 makeTyVarMap( type, scopeTyVars ); 2219 2026 … … 2221 2028 ScrubTyVars::scrub( decl, scopeTyVars ); 2222 2029 2223 scopeTyVars .endScope();2030 scopeTyVars = oldtyVars; 2224 2031 return ret; 2225 2032 } … … 2251 2058 2252 2059 Type * Pass3::mutate( PointerType *pointerType ) { 2253 scopeTyVars.beginScope();2060 TyVarMap oldtyVars = scopeTyVars; 2254 2061 makeTyVarMap( pointerType, scopeTyVars ); 2255 2062 2256 2063 Type *ret = Mutator::mutate( pointerType ); 2257 2064 2258 scopeTyVars .endScope();2065 scopeTyVars = oldtyVars; 2259 2066 return ret; 2260 2067 } 2261 2068 2262 2069 Type * Pass3::mutate( FunctionType *functionType ) { 2263 scopeTyVars.beginScope();2070 TyVarMap oldtyVars = scopeTyVars; 2264 2071 makeTyVarMap( functionType, scopeTyVars ); 2265 2072 2266 2073 Type *ret = Mutator::mutate( functionType ); 2267 2074 2268 scopeTyVars .endScope();2075 scopeTyVars = oldtyVars; 2269 2076 return ret; 2270 2077 } -
src/GenPoly/FindFunction.cc
r1048b31 r1f6e009 55 55 TyVarMap::iterator var = tyVars.find( (*i)->get_name() ); 56 56 if ( var != tyVars.end() ) { 57 tyVars.erase( var ->first);57 tyVars.erase( var ); 58 58 } // if 59 59 } // for … … 61 61 62 62 Type * FindFunction::mutate( FunctionType *functionType ) { 63 tyVars.beginScope();63 TyVarMap oldTyVars = tyVars; 64 64 handleForall( functionType->get_forall() ); 65 65 mutateAll( functionType->get_returnVals(), *this ); … … 72 72 } // if 73 73 } // if 74 tyVars .endScope();74 tyVars = oldTyVars; 75 75 return ret; 76 76 } 77 77 78 78 Type * FindFunction::mutate( PointerType *pointerType ) { 79 tyVars.beginScope();79 TyVarMap oldTyVars = tyVars; 80 80 handleForall( pointerType->get_forall() ); 81 81 Type *ret = Mutator::mutate( pointerType ); 82 tyVars .endScope();82 tyVars = oldTyVars; 83 83 return ret; 84 84 } -
src/GenPoly/GenPoly.cc
r1048b31 r1f6e009 16 16 #include "GenPoly.h" 17 17 18 #include "SymTab/Mangler.h" 18 19 #include "SynTree/Expression.h" 19 20 #include "SynTree/Type.h" … … 37 38 ReferenceToType *isPolyRet( FunctionType *function ) { 38 39 if ( ! function->get_returnVals().empty() ) { 39 TyVarMap forallTypes ( (TypeDecl::Kind)-1 );40 TyVarMap forallTypes; 40 41 makeTyVarMap( function, forallTypes ); 41 42 return (ReferenceToType*)isPolyType( function->get_returnVals().front()->get_type(), forallTypes ); … … 217 218 } 218 219 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 219 232 } // namespace GenPoly 220 233 -
src/GenPoly/GenPoly.h
r1048b31 r1f6e009 17 17 #define GENPOLY_H 18 18 19 #include <map> 19 20 #include <string> 20 21 #include <iostream> 21 22 #include <utility> 22 23 #include "ErasableScopedMap.h"24 25 #include "SymTab/Mangler.h"26 23 27 24 #include "SynTree/Declaration.h" … … 30 27 31 28 namespace GenPoly { 32 typedef ErasableScopedMap< std::string, TypeDecl::Kind > TyVarMap;29 typedef std::map< std::string, TypeDecl::Kind > TyVarMap; 33 30 34 31 /// A function needs an adapter if it returns a polymorphic value or if any of its … … 72 69 void printTyVarMap( std::ostream &os, const TyVarMap &tyVarMap ); 73 70 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 ); 79 73 80 /// Gets the name of the alignof parameter for the type , given its mangled name81 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 ); 82 76 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 ); 89 79 } // namespace GenPoly 90 80 -
src/GenPoly/Lvalue.cc
r1048b31 r1f6e009 17 17 18 18 #include "Lvalue.h" 19 20 #include "GenPoly.h"21 19 22 20 #include "SynTree/Declaration.h" … … 65 63 66 64 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 71 71 } 72 72 … … 107 107 assert( function ); 108 108 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 ) ) { 117 111 UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) ); 118 deref->get_results().push_back( app Type->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 ); 121 115 return deref; 122 116 } else { -
src/GenPoly/PolyMutator.cc
r1048b31 r1f6e009 27 27 } 28 28 29 PolyMutator::PolyMutator() : scopeTyVars( (TypeDecl::Kind)-1 ), env( 0 ) {} 29 PolyMutator::PolyMutator() : env( 0 ) { 30 } 30 31 31 32 void PolyMutator::mutateStatementList( std::list< Statement* > &statements ) { -
src/GenPoly/ScopedMap.h
r1048b31 r1f6e009 17 17 #define _SCOPEDMAP_H 18 18 19 #include <cassert>20 19 #include <iterator> 21 20 #include <map> … … 51 50 typedef typename scope_list::size_type size_type; 52 51 53 /// Checks if this iterator points to a valid item54 bool is_valid() const {55 return it != (*scopes)[i].end();56 }57 58 /// Increments on invalid59 iterator& next_valid() {60 if ( ! is_valid() ) { ++(*this); }61 return *this;62 }63 64 /// Decrements on invalid65 iterator& prev_valid() {66 if ( ! is_valid() ) { --(*this); }67 return *this;68 }69 70 52 iterator(scope_list const &_scopes, const wrapped_iterator &_it, size_type _i) 71 53 : scopes(&_scopes), it(_it), i(_i) {} … … 85 67 --i; 86 68 it = (*scopes)[i].begin(); 87 } else {88 ++it;89 }90 return next_valid();69 return *this; 70 } 71 ++it; 72 return *this; 91 73 } 92 74 iterator& operator++ (int) { iterator tmp = *this; ++(*this); return tmp; } … … 99 81 } 100 82 --it; 101 return prev_valid();83 return *this; 102 84 } 103 85 iterator& operator-- (int) { iterator tmp = *this; --(*this); return tmp; } … … 122 104 typedef typename scope_list::size_type size_type; 123 105 124 /// Checks if this iterator points to a valid item125 bool is_valid() const {126 return it != (*scopes)[i].end();127 }128 129 /// Increments on invalid130 const_iterator& next_valid() {131 if ( ! is_valid() ) { ++(*this); }132 return *this;133 }134 135 /// Decrements on invalid136 const_iterator& prev_valid() {137 if ( ! is_valid() ) { --(*this); }138 return *this;139 }140 141 106 const_iterator(scope_list const &_scopes, const wrapped_const_iterator &_it, size_type _i) 142 107 : scopes(&_scopes), it(_it), i(_i) {} … … 161 126 --i; 162 127 it = (*scopes)[i].begin(); 163 } else {164 ++it;165 }166 return next_valid();128 return *this; 129 } 130 ++it; 131 return *this; 167 132 } 168 133 const_iterator& operator++ (int) { const_iterator tmp = *this; ++(*this); return tmp; } … … 175 140 } 176 141 --it; 177 return prev_valid();142 return *this; 178 143 } 179 144 const_iterator& operator-- (int) { const_iterator tmp = *this; --(*this); return tmp; } … … 199 164 void endScope() { 200 165 scopes.pop_back(); 201 assert( ! scopes.empty() );202 166 } 203 167 … … 205 169 ScopedMap() { beginScope(); } 206 170 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); } 210 174 iterator end() { return iterator(scopes, scopes[0].end(), 0); } 211 175 const_iterator end() const { return const_iterator(scopes, scopes[0].end(), 0); } … … 224 188 return end(); 225 189 } 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 ) ); } 229 191 230 192 /// Finds the given key in the outermost scope inside the given scope where it occurs … … 238 200 return end(); 239 201 } 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 ) ); } 243 203 244 204 /// Inserts the given key-value pair into the outermost scope … … 248 208 } 249 209 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 256 211 }; 257 212 } // namespace GenPoly -
src/GenPoly/ScrubTyVars.cc
r1048b31 r1f6e009 64 64 // sizeof( T ) => _sizeof_T parameter, which is the size of T 65 65 if ( Type *polyType = isPolyType( szeof->get_type() ) ) { 66 Expression *expr = new NameExpr( sizeofName( mangleType( polyType )) );66 Expression *expr = new NameExpr( sizeofName( polyType ) ); 67 67 return expr; 68 68 } else { … … 74 74 // alignof( T ) => _alignof_T parameter, which is the alignment of T 75 75 if ( Type *polyType = isPolyType( algnof->get_type() ) ) { 76 Expression *expr = new NameExpr( alignofName( mangleType( polyType )) );76 Expression *expr = new NameExpr( alignofName( polyType ) ); 77 77 return expr; 78 78 } else { -
src/InitTweak/InitModel.h
r1048b31 r1f6e009 75 75 void visit( UntypedOffsetofExpr * ) { throw 0; } 76 76 void visit( OffsetofExpr * ) { throw 0; } 77 void visit( OffsetPackExpr * ) { throw 0; }78 77 void visit( AttrExpr * ) { throw 0; } 79 78 void visit( LogicalExpr * ) { throw 0; } -
src/Parser/DeclarationNode.cc
r1048b31 r1f6e009 10 10 // Created On : Sat May 16 12:34:05 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Apr 13 16:53:17201613 // Update Count : 1 6112 // Last Modified On : Mon Mar 21 21:04:23 2016 13 // Update Count : 142 14 14 // 15 15 … … 188 188 newnode->type->aggregate->name = assign_strptr( name ); 189 189 if ( newnode->type->aggregate->name == "" ) { // anonymous aggregate ? 190 newnode->type->aggregate->name = anonymous.newName(); 190 newnode->type->aggregate->name = DeclarationNode::anonymous.newName(); 191 } else if ( ! typedefTable.exists( newnode->type->aggregate->name ) ) { 192 // SKULLDUGGERY: Generate a typedef for the aggregate name so the aggregate does not have to be qualified by 193 // "struct". Only generate the typedef, if the name is not in use. The typedef is implicitly (silently) removed 194 // if the name is explicitly used. 195 typedefTable.addToEnclosingScope( newnode->type->aggregate->name, TypedefTable::TD ); 196 DeclarationNode *typedf = new DeclarationNode; 197 typedf->name = newnode->type->aggregate->name; 198 newnode->appendList( typedf->addType( newnode->clone() )->addTypedef() ); 191 199 } // if 192 200 newnode->type->aggregate->actuals = actuals; … … 202 210 if ( newnode->type->enumeration->name == "" ) { // anonymous enumeration ? 203 211 newnode->type->enumeration->name = DeclarationNode::anonymous.newName(); 212 } else if ( ! typedefTable.exists( newnode->type->enumeration->name ) ) { 213 // SKULLDUGGERY: Generate a typedef for the enumeration name so the enumeration does not have to be qualified by 214 // "enum". Only generate the typedef, if the name is not in use. The typedef is implicitly (silently) removed if 215 // the name is explicitly used. 216 typedefTable.addToEnclosingScope( newnode->type->enumeration->name, TypedefTable::TD ); 217 DeclarationNode *typedf = new DeclarationNode; 218 typedf->name = newnode->type->enumeration->name; 219 newnode->appendList( typedf->addType( newnode->clone() )->addTypedef() ); 204 220 } // if 205 221 newnode->type->enumeration->constants = constants; -
src/Parser/ExpressionNode.cc
r1048b31 r1f6e009 10 10 // Created On : Sat May 16 13:17:07 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Apr 8 15:43:05201613 // Update Count : 2 9612 // Last Modified On : Sun Mar 13 12:34:38 2016 13 // Update Count : 272 14 14 // 15 15 … … 22 22 23 23 #include "ParseNode.h" 24 #include "TypeData.h"25 24 #include "SynTree/Constant.h" 26 25 #include "SynTree/Expression.h" 27 #include "SynTree/Declaration.h"28 26 #include "Common/UnimplementedError.h" 29 27 #include "parseutility.h" … … 874 872 } 875 873 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 type911 if ( DeclarationWithType * newDeclWithType = dynamic_cast< DeclarationWithType * >( newDecl ) ) { // non-sue compound-literal type912 return new CompoundLiteralExpr( newDeclWithType->get_type(), kids->build() );913 // these types do not have associated type information914 } 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 } // if923 }924 925 926 874 ExpressionNode *flattenCommas( ExpressionNode *list ) { 927 875 if ( CompositeExprNode *composite = dynamic_cast< CompositeExprNode * >( list ) ) { -
src/Parser/ParseNode.h
r1048b31 r1f6e009 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // ParseNode.h -- 7 // ParseNode.h -- 8 8 // 9 9 // Author : Rodolfo G. Esteves 10 10 // Created On : Sat May 16 13:28:16 2015 11 // Last Modified By : Rob Schluntz12 // Last Modified On : Mon Apr 11 11:50:52201613 // Update Count : 20511 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 17:26:35 2016 13 // Update Count : 190 14 14 // 15 15 … … 108 108 109 109 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 ) ) {}; 111 111 ~ConstantNode() { delete &value; } 112 112 … … 177 177 enum Type { TupleC, Comma, TupleFieldSel, // n-adic 178 178 // triadic 179 Cond, NCond, 179 Cond, NCond, 180 180 // 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, 183 183 Assign, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn, 184 184 Index, FieldSel, PFieldSel, Range, … … 309 309 ValofExprNode( const ValofExprNode &other ); 310 310 ~ValofExprNode(); 311 311 312 312 virtual ValofExprNode *clone() const { return new ValofExprNode( *this ); } 313 313 … … 333 333 enum BuiltinType { Valist }; 334 334 335 static const char *storageName[]; 335 static const char *storageName[]; 336 336 static const char *qualifierName[]; 337 337 static const char *basicTypeName[]; … … 427 427 class StatementNode : public ParseNode { 428 428 public: 429 enum Type { Exp, If, Switch, Case, Default, Choose, Fallthru, 429 enum Type { Exp, If, Switch, Case, Default, Choose, Fallthru, 430 430 While, Do, For, 431 431 Goto, Continue, Break, Return, Throw, … … 535 535 bool aggregate; 536 536 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;560 537 InitializerNode *kids; 561 538 }; -
src/Parser/TypedefTable.cc
r1048b31 r1f6e009 10 10 // Created On : Sat May 16 15:20:13 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Apr 13 16:57:30201613 // Update Count : 2 412 // Last Modified On : Mon Mar 21 18:18:58 2016 13 // Update Count : 23 14 14 // 15 15 … … 33 33 } 34 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 42 35 void TypedefTable::changeKind( const string &identifier, kind_t kind ) { 43 36 tableType::iterator id_pos = table.find( identifier ); … … 46 39 } 47 40 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 ); 54 } // if 41 int TypedefTable::isKind( const string &identifier ) const { 42 tableType::const_iterator id_pos = table.find( identifier ); 43 // Name lookup defaults to identifier, and then the identifier's kind is set by the parser. 44 if ( id_pos == table.end() ) return IDENTIFIER; 45 return id_pos->second.begin()->kind; 55 46 } 56 47 -
src/Parser/TypedefTable.h
r1048b31 r1f6e009 10 10 // Created On : Sat May 16 15:24:36 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Apr 13 16:59:56 201613 // Update Count : 2 712 // Last Modified On : Mon Mar 21 18:17:36 2016 13 // Update Count : 24 14 14 // 15 15 … … 59 59 int isKind( const std::string &identifier ) const; 60 60 void changeKind( const std::string &identifier, kind_t kind ); 61 62 void makeTypedef( const std::string &name ); 63 61 64 62 // "addToCurrentScope" adds the identifier/type pair to the current scope. This does less than you think it does, 65 63 // since each declaration is within its own scope. Mostly useful for type parameters. -
src/Parser/parser.cc
r1048b31 r1f6e009 590 590 #define YYFINAL 249 591 591 /* YYLAST -- Last index in YYTABLE. */ 592 #define YYLAST 11 449592 #define YYLAST 11290 593 593 594 594 /* YYNTOKENS -- Number of terminals. */ 595 595 #define YYNTOKENS 133 596 596 /* YYNNTS -- Number of nonterminals. */ 597 #define YYNNTS 2 40597 #define YYNNTS 238 598 598 /* YYNRULES -- Number of rules. */ 599 #define YYNRULES 75 4599 #define YYNRULES 752 600 600 /* YYNRULES -- Number of states. */ 601 #define YYNSTATES 15 81601 #define YYNSTATES 1579 602 602 603 603 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ … … 691 691 1223, 1227, 1229, 1232, 1235, 1238, 1243, 1248, 1253, 1258, 692 692 1260, 1263, 1266, 1270, 1272, 1275, 1278, 1280, 1283, 1286, 693 1290, 1292, 1295, 1298, 1300, 1302, 1307, 1310, 131 1, 1318,694 132 6, 1329, 1332, 1335, 1337, 1340, 1343, 1347, 1350, 1354,695 135 6, 1359, 1363, 1366, 1369, 1374, 1375, 1377, 1380, 1383,696 138 5, 1386, 1388, 1391, 1394, 1400, 1403, 1404, 1412, 1415,697 1420, 1421, 142 4, 1425, 1427, 1429, 1431, 1437, 1443, 1449,698 145 1, 1457, 1463, 1473, 1475, 1481, 1482, 1484, 1486, 1492,699 149 4, 1496, 1502, 1508, 1510, 1514, 1518, 1523, 1525, 1527,700 15 29, 1531, 1534, 1536, 1540, 1544, 1546, 1549, 1551, 1555,701 1557, 1559, 1561, 1563, 1565, 1567, 1569, 1571, 1573, 157 5,702 157 7, 1580, 1582, 1584, 1586, 1589, 1590, 1593, 1596, 1598,703 160 3, 1604, 1606, 1609, 1613, 1618, 1621, 1624, 1626, 1629,704 163 1, 1634, 1640, 1646, 1654, 1661, 1663, 1666, 1669, 1673,705 167 5, 1678, 1681, 1686, 1689, 1694, 1695, 1700, 1703, 1705,706 170 7, 1709, 1710, 1713, 1719, 1725, 1739, 1741, 1743, 1747,707 175 1, 1754, 1758, 1762, 1765, 1770, 1772, 1779, 1789, 1790,708 180 2, 1804, 1808, 1812, 1816, 1818, 1820, 1826, 1829, 1835,709 1836, 18 38, 1840, 1844, 1845, 1847, 1849, 1851, 1853, 1854,710 186 1, 1864, 1866, 1869, 1874, 1877, 1881, 1885, 1889, 1894,711 190 0, 1906, 1912, 1919, 1921, 1923, 1925, 1929, 1930, 1936,712 1937, 19 39, 1941, 1944, 1951, 1953, 1957, 1958, 1960, 1965,713 1967, 1969, 197 1, 1973, 1976, 1978, 1981, 1984, 1986, 1990,714 199 3, 1997, 2001, 2004, 2009, 2014, 2018, 2027, 2031, 2034,715 20 36, 2039, 2046, 2055, 2059, 2062, 2066, 2070, 2075, 2080,716 2084, 2086, 20 88, 2090, 2095, 2102, 2106, 2109, 2113, 2117,717 212 2, 2127, 2131, 2134, 2136, 2139, 2142, 2144, 2148, 2151,718 215 5, 2159, 2162, 2167, 2172, 2176, 2183, 2192, 2196, 2199,719 220 1, 2204, 2207, 2210, 2214, 2218, 2221, 2226, 2231, 2235,720 22 42, 2251, 2255, 2258, 2260, 2263, 2266, 2268, 2270, 2273,721 22 77, 2281, 2284, 2289, 2296, 2305, 2307, 2310, 2313, 2315,722 23 18, 2321, 2325, 2329, 2331, 2336, 2341, 2345, 2351, 2360,723 236 4, 2367, 2371, 2373, 2379, 2385, 2392, 2399, 2401, 2404,724 240 7, 2409, 2412, 2415, 2419, 2423, 2425, 2430, 2435, 2439,725 24 45, 2454, 2458, 2460, 2463, 2465, 2468, 2475, 2481, 2488,726 2 496, 2504, 2506, 2509, 2512, 2514, 2517, 2520, 2524, 2528,727 253 0, 2535, 2540, 2544, 2553, 2557, 2559, 2561, 2564, 2566,728 25 68, 2571, 2575, 2578, 2582, 2585, 2589, 2593, 2596, 2601,729 260 5, 2608, 2612, 2615, 2620, 2624, 2627, 2634, 2641, 2648,730 265 6, 2658, 2661, 2663, 2665, 2667, 2670, 2674, 2677, 2681,731 268 4, 2688, 2692, 2697, 2700, 2704, 2709, 2712, 2718, 2724,732 273 1, 2738, 2739, 2741, 2742693 1290, 1292, 1295, 1298, 1300, 1302, 1307, 1310, 1316, 1324, 694 1327, 1330, 1333, 1335, 1338, 1341, 1345, 1348, 1352, 1354, 695 1357, 1361, 1364, 1367, 1372, 1373, 1375, 1378, 1381, 1383, 696 1384, 1386, 1389, 1392, 1398, 1405, 1408, 1411, 1416, 1417, 697 1420, 1421, 1423, 1425, 1427, 1433, 1439, 1445, 1447, 1453, 698 1459, 1469, 1471, 1477, 1478, 1480, 1482, 1488, 1490, 1492, 699 1498, 1504, 1506, 1510, 1514, 1519, 1521, 1523, 1525, 1527, 700 1530, 1532, 1536, 1540, 1542, 1545, 1547, 1551, 1553, 1555, 701 1557, 1559, 1561, 1563, 1565, 1567, 1569, 1571, 1573, 1576, 702 1578, 1580, 1582, 1585, 1586, 1589, 1592, 1594, 1599, 1600, 703 1602, 1605, 1609, 1614, 1617, 1620, 1622, 1625, 1627, 1630, 704 1636, 1642, 1650, 1657, 1659, 1662, 1665, 1669, 1671, 1674, 705 1677, 1682, 1685, 1690, 1691, 1696, 1699, 1701, 1703, 1705, 706 1706, 1709, 1715, 1721, 1735, 1737, 1739, 1743, 1747, 1750, 707 1754, 1758, 1761, 1766, 1768, 1775, 1785, 1786, 1798, 1800, 708 1804, 1808, 1812, 1814, 1816, 1822, 1825, 1831, 1832, 1834, 709 1836, 1840, 1841, 1843, 1845, 1847, 1849, 1850, 1857, 1860, 710 1862, 1865, 1870, 1873, 1877, 1881, 1885, 1890, 1896, 1902, 711 1908, 1915, 1917, 1919, 1921, 1925, 1926, 1932, 1933, 1935, 712 1937, 1940, 1947, 1949, 1953, 1954, 1956, 1961, 1963, 1965, 713 1967, 1969, 1972, 1974, 1977, 1980, 1982, 1986, 1989, 1993, 714 1997, 2000, 2005, 2010, 2014, 2023, 2027, 2030, 2032, 2035, 715 2042, 2051, 2055, 2058, 2062, 2066, 2071, 2076, 2080, 2082, 716 2084, 2086, 2091, 2098, 2102, 2105, 2109, 2113, 2118, 2123, 717 2127, 2130, 2132, 2135, 2138, 2140, 2144, 2147, 2151, 2155, 718 2158, 2163, 2168, 2172, 2179, 2188, 2192, 2195, 2197, 2200, 719 2203, 2206, 2210, 2214, 2217, 2222, 2227, 2231, 2238, 2247, 720 2251, 2254, 2256, 2259, 2262, 2264, 2266, 2269, 2273, 2277, 721 2280, 2285, 2292, 2301, 2303, 2306, 2309, 2311, 2314, 2317, 722 2321, 2325, 2327, 2332, 2337, 2341, 2347, 2356, 2360, 2363, 723 2367, 2369, 2375, 2381, 2388, 2395, 2397, 2400, 2403, 2405, 724 2408, 2411, 2415, 2419, 2421, 2426, 2431, 2435, 2441, 2450, 725 2454, 2456, 2459, 2461, 2464, 2471, 2477, 2484, 2492, 2500, 726 2502, 2505, 2508, 2510, 2513, 2516, 2520, 2524, 2526, 2531, 727 2536, 2540, 2549, 2553, 2555, 2557, 2560, 2562, 2564, 2567, 728 2571, 2574, 2578, 2581, 2585, 2589, 2592, 2597, 2601, 2604, 729 2608, 2611, 2616, 2620, 2623, 2630, 2637, 2644, 2652, 2654, 730 2657, 2659, 2661, 2663, 2666, 2670, 2673, 2677, 2680, 2684, 731 2688, 2693, 2696, 2700, 2705, 2708, 2714, 2720, 2727, 2734, 732 2735, 2737, 2738 733 733 }; 734 734 … … 736 736 static const yytype_int16 yyrhs[] = 737 737 { 738 301, 0, -1, -1, -1, 79, -1, 80, -1, 81,738 299, 0, -1, -1, -1, 79, -1, 80, -1, 81, 739 739 -1, 72, -1, 76, -1, 140, -1, 72, -1, 76, 740 740 -1, 72, -1, 140, -1, 83, -1, 84, -1, 82, … … 745 745 112, -1, 143, 85, 139, -1, 143, 85, 111, 134, 746 746 146, 135, 112, -1, 143, 86, -1, 143, 87, -1, 747 109, 27 4, 110, 114, 278, 371, 115, -1, 143, 114,747 109, 272, 110, 114, 276, 369, 115, -1, 143, 114, 748 748 144, 115, -1, 145, -1, 144, 116, 145, -1, -1, 749 749 163, -1, 139, 117, 163, -1, 111, 134, 163, 135, … … 755 755 141, -1, 86, 148, -1, 87, 148, -1, 40, 150, 756 756 -1, 149, 150, -1, 118, 150, -1, 119, 150, -1, 757 37, 148, -1, 37, 109, 27 4, 110, -1, 38, 109,758 27 4, 116, 139, 110, -1, 76, -1, 76, 109, 275,757 37, 148, -1, 37, 109, 272, 110, -1, 38, 109, 758 272, 116, 139, 110, -1, 76, -1, 76, 109, 273, 759 759 110, -1, 76, 109, 145, 110, -1, 66, 148, -1, 760 66, 109, 27 4, 110, -1, 94, 139, -1, 120, -1,761 121, -1, 122, -1, 123, -1, 148, -1, 109, 27 4,762 110, 150, -1, 109, 27 4, 110, 165, -1, 150, -1,760 66, 109, 272, 110, -1, 94, 139, -1, 120, -1, 761 121, -1, 122, -1, 123, -1, 148, -1, 109, 272, 762 110, 150, -1, 109, 272, 110, 165, -1, 150, -1, 763 763 151, 119, 150, -1, 151, 124, 150, -1, 151, 125, 764 764 150, -1, 151, -1, 152, 121, 151, -1, 152, 122, … … 773 773 117, 161, -1, 160, 130, 168, 117, 165, -1, 161, 774 774 -1, 161, -1, 148, 131, 163, -1, 148, 167, 163, 775 -1, 165, 37 2, -1, -1, 163, -1, 111, 112, -1,775 -1, 165, 370, -1, -1, 163, -1, 111, 112, -1, 776 776 111, 134, 163, 135, 112, -1, 111, 134, 116, 166, 777 777 135, 112, -1, 111, 134, 163, 116, 166, 135, 112, … … 782 782 176, -1, 177, -1, 189, -1, 191, -1, 192, -1, 783 783 197, -1, 128, 143, 114, 144, 115, 132, -1, 139, 784 117, 3 11, 170, -1, 114, 115, -1, 114, 134, 134,784 117, 309, 170, -1, 114, 115, -1, 114, 134, 134, 785 785 208, 173, 135, 115, -1, 174, -1, 173, 134, 174, 786 -1, 211, -1, 40, 211, -1, 30 7, -1, 170, 135,786 -1, 211, -1, 40, 211, -1, 305, -1, 170, 135, 787 787 -1, 170, -1, 175, 170, -1, 169, 132, -1, 41, 788 788 109, 168, 110, 170, -1, 41, 109, 168, 110, 170, … … 791 791 109, 168, 110, 182, -1, 53, 109, 168, 110, 114, 792 792 134, 204, 185, 115, -1, 162, -1, 162, 96, 162, 793 -1, 30 9, -1, 178, -1, 179, 116, 178, -1, 44,793 -1, 307, -1, 178, -1, 179, 116, 178, -1, 44, 794 794 179, 117, -1, 45, 117, -1, 180, -1, 181, 180, 795 795 -1, 181, 170, -1, -1, 184, -1, 181, 175, -1, … … 813 813 134, 196, 135, 110, 172, 135, -1, 194, 59, 109, 814 814 134, 134, 196, 135, 110, 172, 135, -1, 60, 172, 815 -1, 224, -1, 224, 30 8, -1, 224, 356, -1, 365,816 139, -1, 36 5, -1, 64, 198, 109, 141, 110, 132,815 -1, 224, -1, 224, 306, -1, 224, 354, -1, 363, 816 139, -1, 363, -1, 64, 198, 109, 141, 110, 132, 817 817 -1, 64, 198, 109, 141, 117, 199, 110, 132, -1, 818 818 64, 198, 109, 141, 117, 199, 117, 199, 110, 132, … … 826 826 -1, 211, -1, 205, 134, 211, -1, 135, -1, 207, 827 827 -1, 221, -1, 207, 134, 221, -1, -1, 209, -1, 828 29, 210, 132, -1, 209, 29, 210, 132, -1, 27 3,829 -1, 210, 116, 27 3, -1, 212, -1, 221, -1, 213,828 29, 210, 132, -1, 209, 29, 210, 132, -1, 271, 829 -1, 210, 116, 271, -1, 212, -1, 221, -1, 213, 830 830 135, 132, -1, 218, 135, 132, -1, 215, 135, 132, 831 -1, 29 2, 135, 132, -1, 295, 135, 132, -1, 214,832 27 6, -1, 230, 214, 276, -1, 213, 135, 116, 134,833 2 71, 276, -1, 366, 271, 310, -1, 369, 271, 310,834 -1, 226, 36 9, 271, 310, -1, 216, -1, 226, 216,831 -1, 290, 135, 132, -1, 293, 135, 132, -1, 214, 832 274, -1, 230, 214, 274, -1, 213, 135, 116, 134, 833 269, 274, -1, 364, 269, 308, -1, 367, 269, 308, 834 -1, 226, 367, 269, 308, -1, 216, -1, 226, 216, 835 835 -1, 230, 216, -1, 230, 226, 216, -1, 215, 135, 836 116, 134, 2 71, -1, 111, 112, 271, 109, 134, 259,837 135, 110, -1, 36 9, 271, 109, 134, 259, 135, 110,838 -1, 217, 2 71, 109, 134, 259, 135, 110, -1, 111,839 134, 2 61, 135, 112, -1, 111, 134, 261, 135, 116,840 134, 26 2, 135, 112, -1, 3, 214, -1, 3, 216,841 -1, 218, 135, 116, 134, 139, -1, 3, 224, 30 8,842 -1, 219, 135, 116, 134, 30 8, -1, 226, 3, 224,843 30 8, -1, 224, 3, 308, -1, 224, 3, 226, 308,836 116, 134, 269, -1, 111, 112, 269, 109, 134, 257, 837 135, 110, -1, 367, 269, 109, 134, 257, 135, 110, 838 -1, 217, 269, 109, 134, 257, 135, 110, -1, 111, 839 134, 259, 135, 112, -1, 111, 134, 259, 135, 116, 840 134, 260, 135, 112, -1, 3, 214, -1, 3, 216, 841 -1, 218, 135, 116, 134, 139, -1, 3, 224, 306, 842 -1, 219, 135, 116, 134, 306, -1, 226, 3, 224, 843 306, -1, 224, 3, 306, -1, 224, 3, 226, 306, 844 844 -1, 3, 139, 131, 163, -1, 220, 135, 116, 134, 845 845 139, 131, 163, -1, 222, 135, 132, -1, 219, 135, 846 846 132, -1, 220, 135, 132, -1, 239, 135, 132, -1, 847 223, 30 8, 310, 276, -1, 222, 116, 311, 308, 310,848 27 6, -1, 235, -1, 239, -1, 241, -1, 282, -1,849 236, -1, 240, -1, 242, -1, 28 3, -1, -1, 226,850 -1, 227, -1, 226, 227, -1, 228, -1, 31 3, -1,847 223, 306, 308, 274, -1, 222, 116, 309, 306, 308, 848 274, -1, 235, -1, 239, -1, 241, -1, 280, -1, 849 236, -1, 240, -1, 242, -1, 281, -1, -1, 226, 850 -1, 227, -1, 226, 227, -1, 228, -1, 311, -1, 851 851 10, -1, 12, -1, 11, -1, 14, -1, 67, -1, 852 -1, 13, 109, 229, 28 5, 110, -1, 231, -1, 226,852 -1, 13, 109, 229, 283, 110, -1, 231, -1, 226, 853 853 231, -1, 230, 226, 231, -1, 232, -1, 231, 232, 854 854 -1, 233, -1, 5, -1, 7, -1, 4, -1, 6, … … 860 860 -1, 237, -1, 225, 238, 225, -1, 234, -1, 226, 861 861 234, -1, 237, 227, -1, 237, 234, -1, 28, 109, 862 27 5, 110, -1, 28, 109, 168, 110, -1, 78, 109,863 27 5, 110, -1, 78, 109, 168, 110, -1, 240, -1,862 273, 110, -1, 28, 109, 168, 110, -1, 78, 109, 863 273, 110, -1, 78, 109, 168, 110, -1, 240, -1, 864 864 230, 240, -1, 239, 232, -1, 239, 232, 226, -1, 865 865 243, -1, 226, 243, -1, 240, 227, -1, 242, -1, 866 866 230, 242, -1, 241, 232, -1, 241, 232, 226, -1, 867 867 74, -1, 226, 74, -1, 242, 227, -1, 244, -1, 868 25 5, -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 13 4, 96, -1, 261, 135, 116, 134, 96, -1, 266,883 -1, 262, 135, 116, 134, 266, -1, 261, 135, 116,884 13 4, 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 36 1, 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 11 1, 134, 309, 135, 112, -1, 111, 134, 162, 96,903 1 62, 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 2 89, 290, -1, 129, 273, 109, 291, 110, -1, 129,910 114, 134, 297, 115, -1, 129, 109, 134, 285, 135,911 11 0, 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 2 99, 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, 2 26, 322, 172, -1, 230, 322, 172, -1, 230,927 22 6, 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 1 10, 109, 134, 263, 135, 110, -1, 109, 321, 110,941 -1, 323, 311, -1, 324, -1, 325, 311, -1, 318,942 1 09, 134, 263, 135, 110, -1, 109, 324, 110, 109,943 134, 263, 135, 110, -1, 109, 323, 110, -1, 119,944 32 2, -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, 1 09, 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, 1 19, 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 1 19, 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 3 42, 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 1 09, 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, 1 19, 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 1 09, 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 1 12, -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 1 19, 226, 356, -1, 109, 357, 110, -1, 348, -1,991 109, 357, 110, 348, -1, 109, 358, 110, 349, -1,992 109, 35 8, 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, 3 64, 349, 224, -1, 349, 224, -1, 111, 112,999 362, -1, 364, 362, -1, 111, 112, 349, 362, -1,1000 3 64, 349, 362, -1, 349, 362, -1, 111, 134, 226,1001 11 9, 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, 3 67, -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, -1868 254, -1, 245, 114, 246, 115, -1, 245, 271, -1, 869 245, 271, 114, 246, 115, -1, 245, 109, 289, 110, 870 114, 246, 115, -1, 245, 282, -1, 31, 309, -1, 871 32, 309, -1, 247, -1, 246, 247, -1, 248, 132, 872 -1, 40, 248, 132, -1, 249, 132, -1, 40, 249, 873 132, -1, 363, -1, 363, 271, -1, 248, 116, 271, 874 -1, 248, 116, -1, 224, 250, -1, 249, 116, 309, 875 250, -1, -1, 252, -1, 315, 251, -1, 328, 251, 876 -1, 354, -1, -1, 252, -1, 117, 162, -1, 30, 877 309, -1, 253, 114, 255, 369, 115, -1, 253, 271, 878 114, 255, 369, 115, -1, 253, 271, -1, 271, 256, 879 -1, 255, 116, 271, 256, -1, -1, 131, 162, -1, 880 -1, 258, -1, 260, -1, 259, -1, 259, 135, 116, 881 134, 260, -1, 260, 135, 116, 134, 96, -1, 259, 882 135, 116, 134, 96, -1, 264, -1, 260, 135, 116, 883 134, 264, -1, 259, 135, 116, 134, 264, -1, 259, 884 135, 116, 134, 260, 135, 116, 134, 264, -1, 265, 885 -1, 260, 135, 116, 134, 265, -1, -1, 262, -1, 886 263, -1, 263, 135, 116, 134, 96, -1, 267, -1, 887 266, -1, 263, 135, 116, 134, 267, -1, 263, 135, 888 116, 134, 266, -1, 266, -1, 359, 269, 370, -1, 889 367, 269, 370, -1, 226, 367, 269, 370, -1, 216, 890 -1, 267, -1, 359, -1, 367, -1, 226, 367, -1, 891 368, -1, 223, 333, 370, -1, 223, 337, 370, -1, 892 223, -1, 223, 348, -1, 139, -1, 268, 116, 139, 893 -1, 137, -1, 74, -1, 75, -1, 138, -1, 74, 894 -1, 75, -1, 139, -1, 74, -1, 75, -1, 363, 895 -1, 224, -1, 224, 354, -1, 363, -1, 368, -1, 896 224, -1, 224, 342, -1, -1, 131, 275, -1, 107, 897 275, -1, 163, -1, 114, 276, 369, 115, -1, -1, 898 275, -1, 277, 275, -1, 276, 116, 275, -1, 276, 899 116, 277, 275, -1, 278, 117, -1, 271, 117, -1, 900 279, -1, 278, 279, -1, 80, -1, 113, 271, -1, 901 111, 134, 163, 135, 112, -1, 111, 134, 307, 135, 902 112, -1, 111, 134, 162, 96, 162, 135, 112, -1, 903 113, 111, 134, 146, 135, 112, -1, 281, -1, 230, 904 281, -1, 280, 232, -1, 280, 232, 226, -1, 282, 905 -1, 226, 282, -1, 281, 227, -1, 75, 109, 289, 906 110, -1, 284, 370, -1, 283, 116, 284, 370, -1, 907 -1, 286, 271, 285, 287, -1, 224, 333, -1, 33, 908 -1, 35, -1, 34, -1, -1, 287, 288, -1, 129, 909 271, 109, 289, 110, -1, 129, 114, 134, 295, 115, 910 -1, 129, 109, 134, 283, 135, 110, 114, 134, 295, 911 115, 109, 289, 110, -1, 273, -1, 163, -1, 289, 912 116, 273, -1, 289, 116, 163, -1, 33, 291, -1, 913 231, 33, 291, -1, 290, 116, 291, -1, 292, 287, 914 -1, 292, 287, 131, 273, -1, 271, -1, 270, 109, 915 134, 283, 135, 110, -1, 36, 271, 109, 134, 283, 916 135, 110, 114, 115, -1, -1, 36, 271, 109, 134, 917 283, 135, 110, 114, 294, 295, 115, -1, 296, -1, 918 295, 134, 296, -1, 297, 135, 132, -1, 298, 135, 919 132, -1, 214, -1, 216, -1, 297, 135, 116, 134, 920 269, -1, 224, 306, -1, 298, 135, 116, 134, 306, 921 -1, -1, 300, -1, 302, -1, 300, 134, 302, -1, 922 -1, 300, -1, 211, -1, 304, -1, 197, -1, -1, 923 5, 82, 303, 114, 301, 115, -1, 40, 302, -1, 924 305, -1, 320, 172, -1, 324, 134, 206, 172, -1, 925 215, 172, -1, 223, 320, 172, -1, 226, 320, 172, 926 -1, 230, 320, 172, -1, 230, 226, 320, 172, -1, 927 223, 324, 134, 206, 172, -1, 226, 324, 134, 206, 928 172, -1, 230, 324, 134, 206, 172, -1, 230, 226, 929 324, 134, 206, 172, -1, 315, -1, 320, -1, 328, 930 -1, 162, 123, 162, -1, -1, 64, 109, 141, 110, 931 309, -1, -1, 310, -1, 311, -1, 310, 311, -1, 932 39, 109, 109, 312, 110, 110, -1, 313, -1, 312, 933 116, 313, -1, -1, 314, -1, 314, 109, 169, 110, 934 -1, 269, -1, 233, -1, 234, -1, 227, -1, 316, 935 309, -1, 317, -1, 318, 309, -1, 319, 309, -1, 936 137, -1, 109, 316, 110, -1, 119, 315, -1, 119, 937 226, 315, -1, 109, 317, 110, -1, 316, 346, -1, 938 109, 317, 110, 346, -1, 109, 318, 110, 347, -1, 939 109, 318, 110, -1, 109, 317, 110, 109, 134, 261, 940 135, 110, -1, 109, 319, 110, -1, 321, 309, -1, 941 322, -1, 323, 309, -1, 316, 109, 134, 261, 135, 942 110, -1, 109, 322, 110, 109, 134, 261, 135, 110, 943 -1, 109, 321, 110, -1, 119, 320, -1, 119, 226, 944 320, -1, 109, 322, 110, -1, 109, 322, 110, 346, 945 -1, 109, 323, 110, 347, -1, 109, 323, 110, -1, 946 325, -1, 326, -1, 327, -1, 316, 109, 268, 110, 947 -1, 109, 326, 110, 109, 268, 110, -1, 109, 325, 948 110, -1, 119, 324, -1, 119, 226, 324, -1, 109, 949 326, 110, -1, 109, 326, 110, 346, -1, 109, 327, 950 110, 347, -1, 109, 327, 110, -1, 329, 309, -1, 951 330, -1, 331, 309, -1, 332, 309, -1, 338, -1, 952 109, 329, 110, -1, 119, 328, -1, 119, 226, 328, 953 -1, 109, 330, 110, -1, 329, 346, -1, 109, 330, 954 110, 346, -1, 109, 331, 110, 347, -1, 109, 331, 955 110, -1, 329, 109, 134, 261, 135, 110, -1, 109, 956 330, 110, 109, 134, 261, 135, 110, -1, 109, 332, 957 110, -1, 316, 309, -1, 334, -1, 335, 309, -1, 958 336, 309, -1, 119, 333, -1, 119, 226, 333, -1, 959 109, 334, 110, -1, 316, 352, -1, 109, 334, 110, 960 346, -1, 109, 335, 110, 347, -1, 109, 335, 110, 961 -1, 316, 109, 134, 261, 135, 110, -1, 109, 334, 962 110, 109, 134, 261, 135, 110, -1, 109, 336, 110, 963 -1, 338, 309, -1, 339, -1, 340, 309, -1, 341, 964 309, -1, 74, -1, 75, -1, 119, 337, -1, 119, 965 226, 337, -1, 109, 339, 110, -1, 338, 352, -1, 966 109, 339, 110, 352, -1, 338, 109, 134, 261, 135, 967 110, -1, 109, 339, 110, 109, 134, 261, 135, 110, 968 -1, 343, -1, 344, 309, -1, 345, 309, -1, 119, 969 -1, 119, 226, -1, 119, 342, -1, 119, 226, 342, 970 -1, 109, 343, 110, -1, 346, -1, 109, 343, 110, 971 346, -1, 109, 344, 110, 347, -1, 109, 344, 110, 972 -1, 109, 134, 261, 135, 110, -1, 109, 343, 110, 973 109, 134, 261, 135, 110, -1, 109, 345, 110, -1, 974 111, 112, -1, 111, 112, 347, -1, 347, -1, 111, 975 134, 163, 135, 112, -1, 111, 134, 119, 135, 112, 976 -1, 347, 111, 134, 163, 135, 112, -1, 347, 111, 977 134, 119, 135, 112, -1, 349, -1, 350, 309, -1, 978 351, 309, -1, 119, -1, 119, 226, -1, 119, 348, 979 -1, 119, 226, 348, -1, 109, 349, 110, -1, 352, 980 -1, 109, 349, 110, 352, -1, 109, 350, 110, 347, 981 -1, 109, 350, 110, -1, 109, 134, 261, 135, 110, 982 -1, 109, 349, 110, 109, 134, 261, 135, 110, -1, 983 109, 351, 110, -1, 353, -1, 353, 347, -1, 347, 984 -1, 111, 112, -1, 111, 134, 226, 119, 135, 112, 985 -1, 111, 134, 226, 135, 112, -1, 111, 134, 226, 986 163, 135, 112, -1, 111, 134, 7, 225, 163, 135, 987 112, -1, 111, 134, 226, 7, 163, 135, 112, -1, 988 355, -1, 356, 309, -1, 357, 309, -1, 119, -1, 989 119, 226, -1, 119, 354, -1, 119, 226, 354, -1, 990 109, 355, 110, -1, 346, -1, 109, 355, 110, 346, 991 -1, 109, 356, 110, 347, -1, 109, 356, 110, -1, 992 109, 355, 110, 109, 134, 261, 135, 110, -1, 109, 993 357, 110, -1, 359, -1, 367, -1, 226, 367, -1, 994 360, -1, 361, -1, 119, 224, -1, 226, 119, 224, 995 -1, 119, 368, -1, 226, 119, 368, -1, 119, 358, 996 -1, 226, 119, 358, -1, 111, 112, 224, -1, 362, 997 224, -1, 111, 112, 347, 224, -1, 362, 347, 224, 998 -1, 347, 224, -1, 111, 112, 360, -1, 362, 360, 999 -1, 111, 112, 347, 360, -1, 362, 347, 360, -1, 1000 347, 360, -1, 111, 134, 226, 119, 135, 112, -1, 1001 111, 134, 226, 163, 135, 112, -1, 111, 134, 230, 1002 163, 135, 112, -1, 111, 134, 230, 226, 163, 135, 1003 112, -1, 367, -1, 226, 367, -1, 364, -1, 365, 1004 -1, 366, -1, 119, 224, -1, 226, 119, 224, -1, 1005 119, 368, -1, 226, 119, 368, -1, 119, 363, -1, 1006 226, 119, 363, -1, 111, 112, 224, -1, 111, 112, 1007 347, 224, -1, 347, 224, -1, 111, 112, 365, -1, 1008 111, 112, 347, 365, -1, 347, 365, -1, 111, 134, 1009 260, 135, 112, -1, 111, 112, 109, 257, 110, -1, 1010 367, 109, 134, 257, 135, 110, -1, 217, 109, 134, 1011 257, 135, 110, -1, -1, 116, -1, -1, 131, 163, 1012 -1 1013 1013 }; 1014 1014 … … 1052 1052 1368, 1374, 1375, 1377, 1379, 1384, 1386, 1388, 1390, 1395, 1053 1053 1396, 1398, 1400, 1405, 1406, 1408, 1413, 1414, 1416, 1418, 1054 1423, 1425, 1427, 1432, 1433, 1437, 1439, 144 5, 1444, 1448,1055 1450, 145 5, 1457, 1462, 1464, 1469, 1470, 1472, 1473, 1478,1056 147 9, 1481, 1483, 1488, 1490, 1496, 1497, 1499, 1502, 1505,1057 15 10, 1511, 1516, 1521, 1525, 1527, 1533, 1532, 1539, 1541,1058 154 7, 1548, 1556, 1557, 1561, 1562, 1563, 1565, 1567, 1574,1059 15 75, 1577, 1579, 1584, 1585, 1591, 1592, 1596, 1597, 1602,1060 1 603, 1604, 1606, 1614, 1615, 1617, 1620, 1622, 1626, 1627,1061 162 8, 1630, 1632, 1636, 1641, 1649, 1650, 1659, 1661, 1666,1062 166 7, 1668, 1672, 1673, 1674, 1678, 1679, 1680, 1684, 1685,1063 168 6, 1691, 1692, 1693, 1694, 1700, 1701, 1703, 1708, 1709,1064 17 14, 1715, 1716, 1717, 1718, 1733, 1734, 1739, 1740, 1748,1065 17 50, 1752, 1755, 1757, 1759, 1782, 1783, 1785, 1787, 1792,1066 179 3, 1795, 1800, 1805, 1806, 1812, 1811, 1815, 1819, 1821,1067 182 3, 1829, 1830, 1835, 1840, 1842, 1847, 1849, 1850, 1852,1068 185 7, 1859, 1861, 1866, 1868, 1873, 1878, 1886, 1892, 1891,1069 190 5, 1906, 1911, 1912, 1916, 1921, 1926, 1934, 1939, 1950,1070 195 1, 1962, 1963, 1969, 1970, 1974, 1975, 1976, 1979, 1978,1071 1989, 199 4, 1999, 2005, 2014, 2020, 2026, 2032, 2038, 2046,1072 205 2, 2060, 2066, 2075, 2076, 2077, 2081, 2085, 2087, 2092,1073 20 93, 2097, 2098, 2103, 2109, 2110, 2113, 2115, 2116, 2120,1074 21 21, 2122, 2123, 2157, 2159, 2160, 2162, 2167, 2172, 2177,1075 217 9, 2181, 2186, 2188, 2190, 2192, 2197, 2199, 2209, 2211,1076 22 12, 2217, 2219, 2221, 2226, 2228, 2230, 2235, 2237, 2239,1077 224 8, 2249, 2250, 2254, 2256, 2258, 2263, 2265, 2267, 2272,1078 22 74, 2276, 2291, 2293, 2294, 2296, 2301, 2302, 2307, 2309,1079 23 11, 2316, 2318, 2320, 2322, 2327, 2329, 2331, 2341, 2343,1080 234 4, 2346, 2351, 2353, 2355, 2360, 2362, 2364, 2366, 2371,1081 23 73, 2375, 2406, 2408, 2409, 2411, 2416, 2421, 2429, 2431,1082 243 3, 2438, 2440, 2445, 2447, 2461, 2462, 2464, 2469, 2471,1083 24 73, 2475, 2477, 2482, 2483, 2485, 2487, 2492, 2494, 2496,1084 2 502, 2504, 2506, 2510, 2512, 2514, 2516, 2530, 2531, 2533,1085 253 8, 2540, 2542, 2544, 2546, 2551, 2552, 2554, 2556, 2561,1086 256 3, 2565, 2571, 2572, 2574, 2583, 2586, 2588, 2591, 2593,1087 259 5, 2608, 2609, 2611, 2616, 2618, 2620, 2622, 2624, 2629,1088 26 30, 2632, 2634, 2639, 2641, 2649, 2650, 2651, 2656, 2657,1089 26 61, 2663, 2665, 2667, 2669, 2671, 2678, 2680, 2682, 2684,1090 268 6, 2688, 2690, 2692, 2694, 2696, 2701, 2703, 2705, 2710,1091 27 36, 2737, 2739, 2743, 2744, 2748, 2750, 2752, 2754, 2756,1092 275 8, 2765, 2767, 2769, 2771, 2773, 2775, 2780, 2785, 2787,1093 27 89, 2807, 2809, 2814, 28151054 1423, 1425, 1427, 1432, 1433, 1437, 1439, 1441, 1443, 1445, 1055 1450, 1452, 1457, 1459, 1464, 1465, 1467, 1468, 1473, 1474, 1056 1476, 1478, 1483, 1485, 1491, 1492, 1494, 1497, 1500, 1505, 1057 1506, 1511, 1516, 1520, 1522, 1524, 1529, 1531, 1537, 1538, 1058 1546, 1547, 1551, 1552, 1553, 1555, 1557, 1564, 1565, 1567, 1059 1569, 1574, 1575, 1581, 1582, 1586, 1587, 1592, 1593, 1594, 1060 1596, 1604, 1605, 1607, 1610, 1612, 1616, 1617, 1618, 1620, 1061 1622, 1626, 1631, 1639, 1640, 1649, 1651, 1656, 1657, 1658, 1062 1662, 1663, 1664, 1668, 1669, 1670, 1674, 1675, 1676, 1681, 1063 1682, 1683, 1684, 1690, 1691, 1693, 1698, 1699, 1704, 1705, 1064 1706, 1707, 1708, 1723, 1724, 1729, 1730, 1738, 1740, 1742, 1065 1745, 1747, 1749, 1772, 1773, 1775, 1777, 1782, 1783, 1785, 1066 1790, 1795, 1796, 1802, 1801, 1805, 1809, 1811, 1813, 1819, 1067 1820, 1825, 1830, 1832, 1837, 1839, 1840, 1842, 1847, 1849, 1068 1851, 1856, 1858, 1863, 1868, 1876, 1882, 1881, 1895, 1896, 1069 1901, 1902, 1906, 1911, 1916, 1924, 1929, 1940, 1941, 1952, 1070 1953, 1959, 1960, 1964, 1965, 1966, 1969, 1968, 1979, 1984, 1071 1989, 1995, 2004, 2010, 2016, 2022, 2028, 2036, 2042, 2050, 1072 2056, 2065, 2066, 2067, 2071, 2075, 2077, 2082, 2083, 2087, 1073 2088, 2093, 2099, 2100, 2103, 2105, 2106, 2110, 2111, 2112, 1074 2113, 2147, 2149, 2150, 2152, 2157, 2162, 2167, 2169, 2171, 1075 2176, 2178, 2180, 2182, 2187, 2189, 2199, 2201, 2202, 2207, 1076 2209, 2211, 2216, 2218, 2220, 2225, 2227, 2229, 2238, 2239, 1077 2240, 2244, 2246, 2248, 2253, 2255, 2257, 2262, 2264, 2266, 1078 2281, 2283, 2284, 2286, 2291, 2292, 2297, 2299, 2301, 2306, 1079 2308, 2310, 2312, 2317, 2319, 2321, 2331, 2333, 2334, 2336, 1080 2341, 2343, 2345, 2350, 2352, 2354, 2356, 2361, 2363, 2365, 1081 2396, 2398, 2399, 2401, 2406, 2411, 2419, 2421, 2423, 2428, 1082 2430, 2435, 2437, 2451, 2452, 2454, 2459, 2461, 2463, 2465, 1083 2467, 2472, 2473, 2475, 2477, 2482, 2484, 2486, 2492, 2494, 1084 2496, 2500, 2502, 2504, 2506, 2520, 2521, 2523, 2528, 2530, 1085 2532, 2534, 2536, 2541, 2542, 2544, 2546, 2551, 2553, 2555, 1086 2561, 2562, 2564, 2573, 2576, 2578, 2581, 2583, 2585, 2598, 1087 2599, 2601, 2606, 2608, 2610, 2612, 2614, 2619, 2620, 2622, 1088 2624, 2629, 2631, 2639, 2640, 2641, 2646, 2647, 2651, 2653, 1089 2655, 2657, 2659, 2661, 2668, 2670, 2672, 2674, 2676, 2678, 1090 2680, 2682, 2684, 2686, 2691, 2693, 2695, 2700, 2726, 2727, 1091 2729, 2733, 2734, 2738, 2740, 2742, 2744, 2746, 2748, 2755, 1092 2757, 2759, 2761, 2763, 2765, 2770, 2775, 2777, 2779, 2797, 1093 2799, 2804, 2805 1094 1094 }; 1095 1095 #endif … … 1156 1156 "sue_declaration_specifier", "sue_type_specifier", 1157 1157 "typedef_declaration_specifier", "typedef_type_specifier", 1158 "elaborated_type_name", "aggregate_name", " $@2", "aggregate_key",1158 "elaborated_type_name", "aggregate_name", "aggregate_key", 1159 1159 "field_declaration_list", "field_declaration", 1160 1160 "new_field_declaring_list", "field_declaring_list", "field_declarator", 1161 1161 "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 "type gen_name", "type_parameter_list", "type_parameter", "$@4",1174 "type_ class", "assertion_list_opt", "assertion", "type_name_list",1175 "type_declar ing_list", "type_declarator", "type_declarator_name",1176 "trait_ specifier", "$@5", "trait_declaration_list", "trait_declaration",1162 "enumerator_list", "enumerator_value_opt", "new_parameter_type_list_opt", 1163 "new_parameter_type_list", "new_parameter_list", 1164 "new_abstract_parameter_list", "parameter_type_list_opt", 1165 "parameter_type_list", "parameter_list", "new_parameter_declaration", 1166 "new_abstract_parameter_declaration", "parameter_declaration", 1167 "abstract_parameter_declaration", "identifier_list", 1168 "identifier_or_type_name", "no_01_identifier_or_type_name", 1169 "no_attr_identifier_or_type_name", "type_name_no_function", "type_name", 1170 "initializer_opt", "initializer", "initializer_list", "designation", 1171 "designator_list", "designator", "typegen_declaration_specifier", 1172 "typegen_type_specifier", "typegen_name", "type_parameter_list", 1173 "type_parameter", "$@2", "type_class", "assertion_list_opt", "assertion", 1174 "type_name_list", "type_declaring_list", "type_declarator", 1175 "type_declarator_name", "trait_specifier", "$@3", 1176 "trait_declaration_list", "trait_declaration", 1177 1177 "new_trait_declaring_list", "trait_declaring_list", "translation_unit", 1178 1178 "external_definition_list", "external_definition_list_opt", 1179 "external_definition", "$@ 6", "external_function_definition",1179 "external_definition", "$@4", "external_function_definition", 1180 1180 "function_definition", "declarator", "subrange", "asm_name_opt", 1181 1181 "attribute_list_opt", "attribute_list", "attribute", … … 1269 1269 236, 237, 237, 237, 237, 238, 238, 238, 238, 239, 1270 1270 239, 239, 239, 240, 240, 240, 241, 241, 241, 241, 1271 242, 242, 242, 243, 243, 244, 244, 24 5, 244, 244,1272 24 4, 246, 246, 247, 247, 248, 248, 248, 248, 249,1273 24 9, 249, 249, 250, 250, 251, 251, 251, 251, 251,1274 25 2, 252, 253, 254, 255, 255, 256, 255, 257, 257,1275 25 8, 258, 259, 259, 260, 260, 260, 260, 260, 261,1276 2 61, 261, 261, 262, 262, 263, 263, 264, 264, 265,1277 26 5, 265, 265, 266, 266, 266, 266, 266, 267, 267,1278 26 7, 267, 267, 268, 268, 269, 269, 270, 270, 271,1279 27 1, 271, 272, 272, 272, 273, 273, 273, 274, 274,1280 27 4, 275, 275, 275, 275, 276, 276, 276, 277, 277,1281 27 8, 278, 278, 278, 278, 279, 279, 280, 280, 281,1282 2 81, 281, 281, 281, 281, 282, 282, 282, 282, 283,1283 28 3, 283, 284, 285, 285, 287, 286, 286, 288, 288,1284 28 8, 289, 289, 290, 290, 290, 291, 291, 291, 291,1285 29 2, 292, 292, 293, 293, 294, 294, 295, 296, 295,1286 29 7, 297, 298, 298, 299, 299, 299, 300, 300, 301,1287 30 1, 302, 302, 303, 303, 304, 304, 304, 305, 304,1288 304, 30 6, 306, 306, 307, 307, 307, 307, 307, 307,1289 30 7, 307, 307, 308, 308, 308, 309, 310, 310, 311,1290 31 1, 312, 312, 313, 314, 314, 315, 315, 315, 316,1291 31 6, 316, 316, 317, 317, 317, 317, 318, 318, 319,1292 31 9, 319, 320, 320, 320, 320, 321, 321, 322, 322,1293 32 2, 323, 323, 323, 324, 324, 324, 325, 325, 325,1294 32 6, 326, 326, 327, 327, 327, 328, 328, 328, 329,1295 32 9, 329, 330, 330, 330, 330, 331, 331, 332, 332,1296 33 2, 333, 333, 333, 333, 334, 334, 334, 335, 335,1297 33 5, 335, 336, 336, 336, 337, 337, 337, 337, 338,1298 33 8, 338, 339, 339, 339, 339, 340, 340, 341, 341,1299 34 1, 342, 342, 343, 343, 344, 344, 344, 345, 345,1300 34 5, 345, 345, 346, 346, 346, 346, 347, 347, 347,1301 34 8, 348, 348, 349, 349, 349, 349, 350, 350, 350,1302 3 51, 351, 351, 351, 351, 352, 352, 352, 352, 353,1303 35 3, 353, 354, 354, 354, 355, 355, 355, 355, 355,1304 35 5, 356, 356, 356, 357, 357, 357, 357, 357, 358,1305 35 8, 358, 358, 359, 359, 360, 360, 360, 361, 361,1306 36 2, 362, 362, 362, 362, 362, 363, 363, 363, 363,1307 36 3, 363, 363, 363, 363, 363, 364, 364, 364, 364,1308 36 5, 365, 365, 366, 366, 367, 367, 367, 367, 367,1309 36 7, 368, 368, 368, 368, 368, 368, 369, 370, 370,1310 3 70, 371, 371, 372, 3721271 242, 242, 242, 243, 243, 244, 244, 244, 244, 244, 1272 245, 245, 246, 246, 247, 247, 247, 247, 248, 248, 1273 248, 248, 249, 249, 250, 250, 250, 250, 250, 251, 1274 251, 252, 253, 254, 254, 254, 255, 255, 256, 256, 1275 257, 257, 258, 258, 258, 258, 258, 259, 259, 259, 1276 259, 260, 260, 261, 261, 262, 262, 263, 263, 263, 1277 263, 264, 264, 264, 264, 264, 265, 265, 265, 265, 1278 265, 266, 266, 267, 267, 268, 268, 269, 269, 269, 1279 270, 270, 270, 271, 271, 271, 272, 272, 272, 273, 1280 273, 273, 273, 274, 274, 274, 275, 275, 276, 276, 1281 276, 276, 276, 277, 277, 278, 278, 279, 279, 279, 1282 279, 279, 279, 280, 280, 280, 280, 281, 281, 281, 1283 282, 283, 283, 285, 284, 284, 286, 286, 286, 287, 1284 287, 288, 288, 288, 289, 289, 289, 289, 290, 290, 1285 290, 291, 291, 292, 292, 293, 294, 293, 295, 295, 1286 296, 296, 297, 297, 297, 298, 298, 299, 299, 300, 1287 300, 301, 301, 302, 302, 302, 303, 302, 302, 304, 1288 304, 304, 305, 305, 305, 305, 305, 305, 305, 305, 1289 305, 306, 306, 306, 307, 308, 308, 309, 309, 310, 1290 310, 311, 312, 312, 313, 313, 313, 314, 314, 314, 1291 314, 315, 315, 315, 315, 316, 316, 317, 317, 317, 1292 318, 318, 318, 318, 319, 319, 320, 320, 320, 321, 1293 321, 321, 322, 322, 322, 323, 323, 323, 324, 324, 1294 324, 325, 325, 325, 326, 326, 326, 327, 327, 327, 1295 328, 328, 328, 328, 329, 329, 330, 330, 330, 331, 1296 331, 331, 331, 332, 332, 332, 333, 333, 333, 333, 1297 334, 334, 334, 335, 335, 335, 335, 336, 336, 336, 1298 337, 337, 337, 337, 338, 338, 339, 339, 339, 340, 1299 340, 341, 341, 342, 342, 342, 343, 343, 343, 343, 1300 343, 344, 344, 344, 344, 345, 345, 345, 346, 346, 1301 346, 347, 347, 347, 347, 348, 348, 348, 349, 349, 1302 349, 349, 349, 350, 350, 350, 350, 351, 351, 351, 1303 352, 352, 352, 353, 353, 353, 353, 353, 353, 354, 1304 354, 354, 355, 355, 355, 355, 355, 356, 356, 356, 1305 356, 357, 357, 358, 358, 358, 359, 359, 360, 360, 1306 360, 360, 360, 360, 361, 361, 361, 361, 361, 361, 1307 361, 361, 361, 361, 362, 362, 362, 362, 363, 363, 1308 363, 364, 364, 365, 365, 365, 365, 365, 365, 366, 1309 366, 366, 366, 366, 366, 367, 368, 368, 368, 369, 1310 369, 370, 370 1311 1311 }; 1312 1312 … … 1350 1350 3, 1, 2, 2, 2, 4, 4, 4, 4, 1, 1351 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, 1352 1, 2, 2, 1, 1, 4, 2, 5, 7, 2, 1353 2, 2, 1, 2, 2, 3, 2, 3, 1, 2, 1354 3, 2, 2, 4, 0, 1, 2, 2, 1, 0, 1355 1, 2, 2, 5, 6, 2, 2, 4, 0, 2, 1356 0, 1, 1, 1, 5, 5, 5, 1, 5, 5, 1357 9, 1, 5, 0, 1, 1, 5, 1, 1, 5, 1358 5, 1, 3, 3, 4, 1, 1, 1, 1, 2, 1359 1, 3, 3, 1, 2, 1, 3, 1, 1, 1, 1360 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1361 1, 1, 2, 0, 2, 2, 1, 4, 0, 1, 1362 2, 3, 4, 2, 2, 1, 2, 1, 2, 5, 1363 5, 7, 6, 1, 2, 2, 3, 1, 2, 2, 1364 4, 2, 4, 0, 4, 2, 1, 1, 1, 0, 1365 2, 5, 5, 13, 1, 1, 3, 3, 2, 3, 1366 3, 2, 4, 1, 6, 9, 0, 11, 1, 3, 1367 3, 3, 1, 1, 5, 2, 5, 0, 1, 1, 1368 3, 0, 1, 1, 1, 1, 0, 6, 2, 1, 1369 2, 4, 2, 3, 3, 3, 4, 5, 5, 5, 1370 6, 1, 1, 1, 3, 0, 5, 0, 1, 1, 1371 2, 6, 1, 3, 0, 1, 4, 1, 1, 1, 1372 1, 2, 1, 2, 2, 1, 3, 2, 3, 3, 1373 2, 4, 4, 3, 8, 3, 2, 1, 2, 6, 1374 8, 3, 2, 3, 3, 4, 4, 3, 1, 1, 1375 1, 4, 6, 3, 2, 3, 3, 4, 4, 3, 1376 2, 1, 2, 2, 1, 3, 2, 3, 3, 2, 1377 4, 4, 3, 6, 8, 3, 2, 1, 2, 2, 1378 2, 3, 3, 2, 4, 4, 3, 6, 8, 3, 1379 2, 1, 2, 2, 1, 1, 2, 3, 3, 2, 1380 4, 6, 8, 1, 2, 2, 1, 2, 2, 3, 1381 3, 1, 4, 4, 3, 5, 8, 3, 2, 3, 1382 1, 5, 5, 6, 6, 1, 2, 2, 1, 2, 1381 1383 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 1384 1, 2, 1, 2, 6, 5, 6, 7, 7, 1, 1385 2, 2, 1, 2, 2, 3, 3, 1, 4, 4, 1386 3, 8, 3, 1, 1, 2, 1, 1, 2, 3, 1387 2, 3, 2, 3, 3, 2, 4, 3, 2, 3, 1388 2, 4, 3, 2, 6, 6, 6, 7, 1, 2, 1389 1, 1, 1, 2, 3, 2, 3, 2, 3, 3, 1390 4, 2, 3, 4, 2, 5, 5, 6, 6, 0, 1391 1, 0, 2 1392 1392 }; 1393 1393 … … 1399 1399 294, 294, 315, 313, 316, 314, 317, 318, 300, 302, 1400 1400 301, 0, 303, 329, 321, 326, 324, 325, 323, 322, 1401 327, 328, 333, 330, 331, 332, 54 9, 549, 549, 0,1401 327, 328, 333, 330, 331, 332, 547, 547, 547, 0, 1402 1402 0, 0, 294, 220, 304, 319, 320, 7, 360, 0, 1403 8, 14, 15, 0, 2, 294, 56 7, 9, 527, 525,1404 247, 3, 45 5, 3, 260, 0, 3, 3, 3, 248,1403 8, 14, 15, 0, 2, 294, 565, 9, 525, 523, 1404 247, 3, 453, 3, 260, 0, 3, 3, 3, 248, 1405 1405 3, 0, 0, 0, 295, 296, 298, 294, 307, 310, 1406 1406 312, 341, 286, 334, 339, 287, 349, 288, 356, 353, 1407 363, 0, 0, 364, 289, 47 5, 479, 3, 3, 0,1408 2, 5 21, 526, 531, 299, 0, 0, 549, 579, 549,1409 2, 5 90, 591, 592, 294, 0, 733, 734, 0, 12,1407 363, 0, 0, 364, 289, 473, 477, 3, 3, 0, 1408 2, 519, 524, 529, 299, 0, 0, 547, 577, 547, 1409 2, 588, 589, 590, 294, 0, 731, 732, 0, 12, 1410 1410 294, 0, 13, 270, 271, 0, 295, 290, 291, 292, 1411 293, 52 8, 305, 393, 550, 551, 371, 372, 12, 446,1412 44 7, 11, 442, 445, 0, 505, 500, 491, 446, 447,1413 0, 0, 5 30, 221, 0, 294, 0, 0, 0, 0,1414 0, 0, 0, 0, 294, 294, 2, 0, 73 5, 295,1415 58 4, 596, 739, 732, 730, 737, 0, 0, 0, 254,1416 2, 0, 53 4, 440, 441, 439, 0, 0, 0, 0,1417 54 9, 0, 636, 637, 0, 0, 547, 543, 549, 564,1418 54 9, 549, 544, 2, 545, 549, 603, 549, 549, 606,1411 293, 526, 305, 392, 548, 549, 370, 371, 12, 444, 1412 445, 11, 440, 443, 0, 503, 498, 489, 444, 445, 1413 0, 0, 528, 221, 0, 294, 0, 0, 0, 0, 1414 0, 0, 0, 0, 294, 294, 2, 0, 733, 295, 1415 582, 594, 737, 730, 728, 735, 0, 0, 0, 254, 1416 2, 0, 532, 438, 439, 437, 0, 0, 0, 0, 1417 547, 0, 634, 635, 0, 0, 545, 541, 547, 562, 1418 547, 547, 542, 2, 543, 547, 601, 547, 547, 604, 1419 1419 0, 0, 0, 294, 294, 313, 361, 2, 294, 261, 1420 297, 308, 342, 354, 4 80, 0, 2, 0, 455, 262,1421 295, 335, 350, 357, 47 6, 0, 2, 0, 311, 336,1422 343, 344, 0, 351, 355, 358, 362, 44 7, 294, 294,1423 366, 3 70, 0, 395, 477, 481, 0, 0, 0, 1,1424 294, 2, 53 2, 578, 580, 294, 2, 743, 295, 746,1425 54 7, 547, 295, 0, 0, 0, 273, 549, 544, 2,1426 294, 0, 0, 294, 55 2, 2, 503, 2, 556, 0,1420 297, 308, 342, 354, 478, 0, 2, 0, 453, 262, 1421 295, 335, 350, 357, 474, 0, 2, 0, 311, 336, 1422 343, 344, 0, 351, 355, 358, 362, 445, 294, 294, 1423 366, 369, 0, 395, 475, 479, 0, 0, 0, 1, 1424 294, 2, 530, 576, 578, 294, 2, 741, 295, 744, 1425 545, 545, 295, 0, 0, 0, 273, 547, 542, 2, 1426 294, 0, 0, 294, 550, 2, 501, 2, 554, 0, 1427 1427 0, 0, 0, 0, 0, 18, 59, 4, 5, 6, 1428 1428 16, 0, 0, 0, 294, 2, 0, 294, 65, 66, 1429 1429 67, 68, 48, 19, 49, 22, 47, 69, 0, 72, 1430 1430 76, 79, 82, 87, 90, 92, 94, 96, 98, 100, 1431 105, 49 7, 753, 453, 496, 0, 451, 452, 0, 568,1432 58 3, 586, 589, 595, 598, 601, 360, 0, 2, 741,1433 0, 294, 74 4, 2, 294, 3, 427, 0, 435, 295,1434 294, 307, 334, 287, 349, 356, 3, 3, 40 9, 413,1435 42 3, 428, 475, 294, 429, 708, 709, 294, 430, 432,1436 294, 2, 58 5, 597, 731, 2, 2, 249, 2, 460,1437 0, 45 8, 457, 456, 141, 2, 2, 251, 2, 2,1431 105, 495, 751, 451, 494, 0, 449, 450, 0, 566, 1432 581, 584, 587, 593, 596, 599, 360, 0, 2, 739, 1433 0, 294, 742, 2, 294, 3, 425, 0, 433, 295, 1434 294, 307, 334, 287, 349, 356, 3, 3, 407, 411, 1435 421, 426, 473, 294, 427, 706, 707, 294, 428, 430, 1436 294, 2, 583, 595, 729, 2, 2, 249, 2, 458, 1437 0, 456, 455, 454, 141, 2, 2, 251, 2, 2, 1438 1438 250, 2, 281, 2, 282, 0, 280, 0, 0, 0, 1439 0, 0, 0, 0, 0, 0, 56 9, 608, 0, 455,1440 2, 56 3, 572, 662, 565, 566, 535, 294, 2, 602,1441 6 11, 604, 605, 0, 276, 294, 294, 340, 295, 0,1442 295, 0, 294, 73 6, 740, 738, 536, 294, 547, 255,1443 263, 309, 0, 2, 53 7, 294, 501, 337, 338, 283,1444 352, 359, 0, 294, 2, 38 5, 294, 373, 0, 0,1445 37 9, 730, 0, 751, 400, 0, 478, 502, 252, 253,1446 52 2, 294, 437, 0, 294, 237, 0, 2, 239, 0,1439 0, 0, 0, 0, 0, 0, 567, 606, 0, 453, 1440 2, 561, 570, 660, 563, 564, 533, 294, 2, 600, 1441 609, 602, 603, 0, 276, 294, 294, 340, 295, 0, 1442 295, 0, 294, 734, 738, 736, 534, 294, 545, 255, 1443 263, 309, 0, 2, 535, 294, 499, 337, 338, 283, 1444 352, 359, 0, 294, 2, 384, 294, 372, 0, 0, 1445 378, 728, 294, 749, 398, 0, 476, 500, 252, 253, 1446 520, 294, 435, 0, 294, 237, 0, 2, 239, 0, 1447 1447 295, 0, 257, 2, 258, 278, 0, 0, 2, 294, 1448 54 7, 294, 488, 490, 489, 0, 0, 753, 0, 294,1449 0, 294, 49 2, 294, 562, 560, 561, 559, 0, 554,1450 55 7, 0, 0, 294, 56, 294, 69, 52, 294, 62,1451 294, 294, 50, 51, 64, 2, 127, 0, 0, 44 9,1452 0, 44 8, 111, 294, 54, 55, 17, 0, 29, 30,1448 545, 294, 486, 488, 487, 0, 0, 751, 0, 294, 1449 0, 294, 490, 294, 560, 558, 559, 557, 0, 552, 1450 555, 0, 0, 294, 56, 294, 69, 52, 294, 62, 1451 294, 294, 50, 51, 64, 2, 127, 0, 0, 447, 1452 0, 446, 111, 294, 54, 55, 17, 0, 29, 30, 1453 1453 35, 2, 0, 35, 117, 118, 119, 120, 121, 122, 1454 1454 123, 124, 125, 126, 0, 0, 53, 0, 0, 0, 1455 1455 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1456 0, 0, 0, 0, 0, 0, 0, 108, 2, 64 8,1457 45 4, 645, 549, 549, 653, 482, 294, 2, 587, 588,1458 0, 59 9, 600, 0, 2, 742, 745, 111, 294, 2,1459 294, 0, 7 10, 295, 714, 705, 706, 712, 0, 2,1460 2, 6 70, 549, 753, 619, 549, 549, 753, 549, 633,1461 54 9, 549, 684, 436, 667, 549, 549, 675, 682, 294,1462 4 31, 295, 0, 0, 294, 720, 295, 725, 753, 717,1463 294, 72 2, 753, 294, 294, 294, 0, 111, 0, 18,1464 5, 2, 0, 19, 0, 4 61, 751, 0, 0, 467,1465 241, 0, 294, 0, 0, 0, 54 7, 571, 575, 577,1466 60 7, 610, 614, 617, 570, 609, 0, 284, 660, 0,1456 0, 0, 0, 0, 0, 0, 0, 108, 2, 646, 1457 452, 643, 547, 547, 651, 480, 294, 2, 585, 586, 1458 0, 597, 598, 0, 2, 740, 743, 111, 294, 2, 1459 294, 0, 708, 295, 712, 703, 704, 710, 0, 2, 1460 2, 668, 547, 751, 617, 547, 547, 751, 547, 631, 1461 547, 547, 682, 434, 665, 547, 547, 673, 680, 294, 1462 429, 295, 0, 0, 294, 718, 295, 723, 751, 715, 1463 294, 720, 751, 294, 294, 294, 0, 111, 0, 18, 1464 5, 2, 0, 19, 0, 459, 749, 0, 0, 465, 1465 241, 0, 294, 0, 0, 0, 545, 569, 573, 575, 1466 605, 608, 612, 615, 568, 607, 0, 284, 658, 0, 1467 1467 294, 277, 0, 0, 0, 0, 275, 2, 0, 259, 1468 53 8, 294, 0, 0, 0, 0, 294, 294, 0, 0,1469 69 4, 383, 386, 390, 549, 390, 699, 389, 691, 549,1470 54 9, 365, 374, 382, 375, 549, 377, 380, 294, 752,1471 0, 0, 39 8, 0, 295, 3, 416, 3, 420, 419,1472 59 3, 0, 533, 294, 3, 3, 294, 435, 295, 3,1473 42 9, 430, 2, 0, 0, 0, 487, 306, 294, 483,1474 48 5, 3, 2, 2, 0, 504, 3, 0, 556, 129,1468 536, 294, 0, 0, 0, 0, 294, 294, 0, 0, 1469 692, 382, 385, 389, 547, 389, 697, 388, 689, 547, 1470 547, 365, 373, 381, 374, 547, 376, 379, 294, 750, 1471 0, 0, 396, 749, 295, 3, 414, 3, 418, 417, 1472 591, 0, 531, 294, 3, 3, 294, 433, 295, 3, 1473 427, 428, 2, 0, 0, 0, 485, 306, 294, 481, 1474 483, 3, 2, 2, 0, 502, 3, 0, 554, 129, 1475 1475 0, 0, 222, 0, 0, 0, 2, 0, 0, 36, 1476 0, 0, 111, 294, 20, 0, 21, 0, 69 4, 450,1476 0, 0, 111, 294, 20, 0, 21, 0, 692, 448, 1477 1477 0, 109, 3, 2, 27, 2, 0, 33, 0, 2, 1478 1478 25, 0, 106, 107, 73, 74, 75, 77, 78, 80, 1479 1479 81, 85, 86, 83, 84, 88, 89, 91, 93, 95, 1480 97, 99, 0, 0, 75 4, 294, 0, 0, 0, 649,1481 6 50, 646, 647, 499, 498, 294, 0, 3, 294, 716,1482 294, 7 21, 295, 294, 294, 294, 664, 707, 663, 2,1483 294, 0, 0, 0, 0, 0, 0, 0, 0, 68 5,1484 0, 6 71, 622, 638, 672, 2, 618, 625, 433, 620,1485 6 21, 434, 2, 632, 641, 634, 635, 668, 669, 683,1486 7 11, 715, 713, 753, 268, 2, 747, 2, 424, 719,1487 72 4, 425, 0, 403, 3, 3, 3, 3, 455, 3,1488 0, 2, 4 70, 466, 752, 0, 462, 469, 2, 465,1489 46 8, 0, 294, 242, 264, 3, 272, 274, 0, 455,1490 2, 57 3, 574, 2, 612, 613, 0, 661, 539, 3,1491 346, 345, 348, 347, 294, 5 40, 0, 541, 294, 376,1492 37 8, 2, 0, 0, 0, 0, 104, 392, 695, 696,1493 38 7, 391, 388, 692, 693, 381, 385, 294, 400, 394,1494 401, 751, 0, 0, 438, 240, 0, 0, 3, 2,1495 6 70, 431, 0, 529, 0, 753, 491, 0, 294, 294,1496 294, 0, 55 3, 555, 130, 0, 0, 215, 0, 0,1480 97, 99, 0, 0, 752, 294, 0, 0, 0, 647, 1481 648, 644, 645, 497, 496, 294, 0, 3, 294, 714, 1482 294, 719, 295, 294, 294, 294, 662, 705, 661, 2, 1483 294, 0, 0, 0, 0, 0, 0, 0, 0, 683, 1484 0, 669, 620, 636, 670, 2, 616, 623, 431, 618, 1485 619, 432, 2, 630, 639, 632, 633, 666, 667, 681, 1486 709, 713, 711, 751, 268, 2, 745, 2, 422, 717, 1487 722, 423, 0, 401, 3, 3, 3, 3, 453, 3, 1488 0, 2, 468, 464, 750, 0, 460, 467, 2, 463, 1489 466, 0, 294, 242, 264, 3, 272, 274, 0, 453, 1490 2, 571, 572, 2, 610, 611, 0, 659, 537, 3, 1491 346, 345, 348, 347, 294, 538, 0, 539, 294, 375, 1492 377, 2, 0, 0, 0, 0, 104, 391, 693, 694, 1493 386, 390, 387, 690, 691, 380, 384, 367, 398, 393, 1494 399, 0, 0, 0, 436, 240, 0, 0, 3, 2, 1495 668, 429, 0, 527, 0, 751, 489, 0, 294, 294, 1496 294, 0, 551, 553, 130, 0, 0, 215, 0, 0, 1497 1497 0, 223, 224, 57, 0, 63, 294, 0, 61, 60, 1498 0, 128, 69 5, 460, 70, 71, 110, 115, 3, 109,1498 0, 128, 693, 458, 70, 71, 110, 115, 3, 109, 1499 1499 0, 0, 0, 24, 35, 3, 0, 32, 102, 0, 1500 3, 65 2, 656, 659, 651, 3, 594, 3, 718, 723,1501 2, 294, 3, 3, 295, 0, 3, 62 4, 628, 631,1502 6 40, 674, 678, 681, 294, 3, 623, 639, 673, 294,1503 294, 42 6, 294, 294, 748, 0, 0, 0, 0, 256,1504 0, 104, 0, 3, 3, 0, 46 3, 0, 459, 0,1500 3, 650, 654, 657, 649, 3, 592, 3, 716, 721, 1501 2, 294, 3, 3, 295, 0, 3, 622, 626, 629, 1502 638, 672, 676, 679, 294, 3, 621, 637, 671, 294, 1503 294, 424, 294, 294, 746, 0, 0, 0, 0, 256, 1504 0, 104, 0, 3, 3, 0, 461, 0, 457, 0, 1505 1505 0, 245, 294, 0, 0, 129, 0, 0, 0, 0, 1506 1506 0, 129, 0, 0, 109, 109, 2, 0, 0, 0, 1507 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 1508 138, 145, 147, 0, 0, 0, 285, 294, 294, 547, 1509 0, 540, 294, 111, 696, 700, 702, 695, 383, 397, 1510 394, 579, 2, 664, 663, 0, 669, 2, 482, 484, 1511 504, 3, 512, 513, 0, 2, 508, 3, 3, 0, 1512 0, 556, 222, 0, 0, 0, 222, 0, 0, 3, 1513 37, 749, 109, 0, 3, 661, 42, 3, 40, 3, 1514 34, 0, 3, 101, 103, 0, 2, 652, 653, 0, 1515 0, 294, 0, 0, 0, 3, 638, 0, 2, 624, 1516 625, 2, 640, 2, 674, 675, 0, 0, 3, 0, 1517 3, 3, 3, 3, 409, 408, 412, 2, 2, 748, 1518 747, 112, 0, 0, 0, 0, 3, 462, 3, 0, 1519 243, 146, 3, 295, 294, 0, 0, 0, 0, 2, 1520 191, 0, 189, 0, 0, 0, 0, 0, 0, 0, 1521 0, 111, 0, 547, 151, 148, 294, 0, 0, 267, 1522 279, 3, 3, 546, 613, 368, 2, 698, 699, 294, 1523 266, 294, 0, 515, 492, 294, 0, 0, 491, 506, 1524 0, 0, 0, 216, 0, 225, 58, 109, 0, 0, 1525 116, 113, 0, 0, 0, 0, 0, 0, 23, 0, 1526 655, 294, 580, 265, 724, 725, 726, 0, 677, 294, 1527 294, 294, 3, 3, 0, 685, 0, 0, 0, 0, 1528 294, 294, 3, 544, 469, 470, 0, 0, 246, 295, 1529 0, 0, 0, 0, 294, 192, 190, 0, 187, 193, 1530 0, 0, 0, 0, 197, 200, 198, 194, 0, 195, 1531 35, 129, 144, 142, 244, 0, 0, 294, 416, 420, 1532 419, 0, 509, 2, 510, 2, 511, 505, 294, 228, 1533 0, 226, 0, 228, 3, 661, 31, 114, 2, 45, 1534 2, 43, 41, 28, 112, 26, 3, 727, 3, 3, 1535 3, 0, 0, 684, 686, 627, 641, 269, 2, 406, 1536 3, 405, 0, 472, 469, 129, 0, 0, 129, 3, 1537 0, 129, 188, 0, 2, 2, 209, 199, 0, 0, 1538 0, 0, 140, 574, 614, 3, 2, 0, 0, 2, 1539 229, 0, 0, 217, 0, 0, 0, 0, 0, 0, 1540 0, 0, 0, 687, 688, 294, 0, 471, 152, 0, 1541 0, 2, 165, 129, 154, 0, 182, 0, 129, 0, 1542 2, 156, 0, 2, 0, 2, 2, 2, 196, 32, 1543 0, 294, 514, 516, 507, 0, 0, 0, 0, 114, 1544 38, 3, 3, 656, 628, 642, 678, 410, 129, 158, 1545 161, 0, 160, 164, 3, 167, 166, 0, 129, 184, 1546 129, 3, 0, 294, 0, 294, 0, 2, 0, 2, 1547 139, 701, 2, 230, 231, 0, 227, 218, 0, 0, 1548 0, 153, 0, 0, 163, 233, 168, 2, 235, 183, 1549 0, 186, 172, 201, 3, 210, 214, 203, 3, 0, 1550 294, 0, 294, 0, 0, 0, 39, 46, 44, 159, 1551 162, 129, 0, 169, 294, 129, 129, 0, 173, 0, 1552 0, 692, 211, 212, 213, 0, 202, 3, 204, 3, 1553 294, 219, 232, 149, 170, 155, 129, 236, 185, 180, 1554 178, 174, 157, 129, 0, 693, 0, 0, 0, 0, 1555 150, 171, 181, 175, 179, 178, 176, 3, 3, 0, 1556 0, 493, 177, 205, 207, 3, 3, 206, 208 1558 1557 }; 1559 1558 … … 1562 1561 { 1563 1562 -1, 840, 475, 302, 46, 132, 133, 303, 304, 305, 1564 306, 786, 787, 114 8, 1149, 307, 308, 309, 310, 311,1563 306, 786, 787, 1147, 1148, 307, 308, 309, 310, 311, 1565 1564 312, 313, 314, 315, 316, 317, 318, 319, 320, 1052, 1566 526, 997, 322, 998, 555, 974, 1079, 154 5, 1081, 1082,1567 1083, 1084, 154 6, 1085, 1086, 1462, 1463, 1424, 1425, 1426,1568 152 4, 1525, 1529, 1530, 1565, 1566, 1087, 1382, 1088, 1089,1569 131 6, 1317, 1318, 1506, 1090, 144, 980, 981, 982, 1403,1570 148 7, 1498, 1499, 476, 477, 902, 903, 1060, 49, 50,1565 526, 997, 322, 998, 555, 974, 1079, 1543, 1081, 1082, 1566 1083, 1084, 1544, 1085, 1086, 1460, 1461, 1422, 1423, 1424, 1567 1522, 1523, 1527, 1528, 1563, 1564, 1087, 1380, 1088, 1089, 1568 1314, 1315, 1316, 1504, 1090, 144, 980, 981, 982, 1401, 1569 1485, 1496, 1497, 476, 477, 902, 903, 1060, 49, 50, 1571 1570 51, 52, 53, 346, 157, 56, 57, 58, 59, 60, 1572 1571 348, 62, 63, 262, 65, 66, 273, 350, 351, 69, 1573 1572 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 72 5, 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 9 7, 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 62 6, 627, 628, 939, 708, 709, 710, 604, 364, 365,1586 3 66, 367, 326, 163, 106, 107, 108, 369, 720, 5771573 79, 80, 81, 456, 457, 458, 459, 701, 940, 702, 1574 82, 83, 463, 722, 882, 883, 356, 357, 725, 726, 1575 727, 358, 359, 360, 361, 473, 340, 134, 135, 530, 1576 324, 169, 655, 656, 657, 658, 659, 84, 120, 86, 1577 496, 497, 966, 498, 276, 502, 325, 87, 136, 137, 1578 88, 1338, 1125, 1126, 1127, 1128, 89, 90, 743, 91, 1579 272, 92, 93, 186, 1054, 689, 411, 124, 94, 508, 1580 509, 510, 187, 267, 189, 190, 191, 268, 97, 98, 1581 99, 100, 101, 102, 103, 194, 195, 196, 197, 198, 1582 852, 614, 615, 616, 617, 199, 619, 620, 621, 580, 1583 581, 582, 583, 706, 104, 623, 624, 625, 626, 627, 1584 628, 939, 708, 709, 710, 604, 364, 365, 366, 367, 1585 326, 163, 106, 107, 108, 369, 720, 577 1587 1586 }; 1588 1587 1589 1588 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing 1590 1589 STATE-NUM. */ 1591 #define YYPACT_NINF -13 321590 #define YYPACT_NINF -1356 1592 1591 static const yytype_int16 yypact[] = 1593 1592 { 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 1593 5863, 4890, -1356, 65, -1356, -1356, -1356, -1356, -1356, -1356, 1594 -1356, 9, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, 1595 -1356, -1356, -1356, -1356, -1356, -1356, 139, 139, 139, 1216, 1596 781, 63, 4761, 238, -1356, -1356, -1356, -1356, -1356, 165, 1597 -1356, -1356, -1356, 572, 207, 2350, -1356, -1356, -1356, -1356, 1598 -1356, -1356, 59, 217, -1356, 1506, -1356, -1356, -1356, -1356, 1599 220, 1734, 341, 66, 7480, -1356, -1356, 9240, 1240, -1356, 1600 -1356, -1356, 1320, 351, 3183, 1125, 757, 1320, 1149, -1356, 1601 -1356, 1042, 895, -1356, 1320, 1227, -1356, 243, -1356, 378, 1602 403, -1356, -1356, -1356, -1356, 303, 217, 139, -1356, 139, 1603 -1356, -1356, -1356, -1356, 9019, 1506, -1356, -1356, 1506, -1356, 1604 9774, 314, -1356, -1356, -1356, 1811, 9812, -1356, 726, 726, 1605 726, -1356, -1356, -1356, 139, -1356, -1356, -1356, 353, 381, 1606 400, -1356, -1356, -1356, 417, -1356, -1356, -1356, -1356, -1356, 1607 424, 436, -1356, -1356, 28, 8867, 2398, 371, 447, 459, 1608 467, 482, 495, 557, 8670, 6999, 468, 584, -1356, 9350, 1609 -1356, -1356, -1356, -1356, 594, -1356, 335, 4628, 4628, -1356, 1610 575, 352, -1356, -1356, -1356, -1356, 602, 432, 434, 470, 1611 139, 624, -1356, -1356, 1734, 1711, 656, -1356, 68, -1356, 1612 139, 139, 217, -1356, -1356, 93, -1356, 139, 139, -1356, 1613 2093, 670, 699, 726, 6910, -1356, -1356, 654, 2350, -1356, 1614 -1356, 1320, -1356, -1356, -1356, 217, -1356, 1506, 59, -1356, 1615 7819, -1356, 726, 726, 726, 217, -1356, 1216, -1356, 6673, 1616 -1356, -1356, 659, 726, -1356, 726, -1356, 165, 8867, 8784, 1617 714, -1356, 781, 740, 726, -1356, 1216, 737, 749, -1356, 1618 4761, 791, -1356, -1356, -1356, 4061, -1356, -1356, 7390, -1356, 1619 656, 62, 9812, 10718, 1811, 2093, -1356, 152, -1356, -1356, 1620 9774, 1506, 770, 7511, -1356, -1356, 269, -1356, 3425, 779, 1621 827, 3643, 814, 10872, 10930, -1356, 817, -1356, -1356, -1356, 1622 -1356, 10949, 10949, 791, 8525, 818, 10872, 8981, -1356, -1356, 1623 -1356, -1356, -1356, -1356, 855, -1356, 889, 2173, 10872, -1356, 1624 498, 751, 809, 524, 880, 822, 831, 819, 869, 5, 1625 -1356, -1356, 883, 64, -1356, 116, -1356, -1356, 2398, -1356, 1626 -1356, 516, 900, -1356, 644, 900, 913, 165, -1356, -1356, 1627 915, 9019, -1356, 916, 8639, -1356, -1356, 1004, 1539, 8240, 1628 6910, 1320, -1356, 1320, 726, 726, -1356, -1356, -1356, -1356, 1629 -1356, -1356, 726, 9885, 1506, -1356, -1356, 9923, 1500, -1356, 1630 7969, -1356, -1356, -1356, -1356, -1356, -1356, -1356, 929, 5043, 1631 10872, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, 1632 -1356, -1356, -1356, -1356, -1356, 1811, -1356, 876, 936, 938, 1633 944, 885, 947, 954, 957, 1711, -1356, -1356, 930, 59, 1634 960, -1356, -1356, 970, -1356, -1356, -1356, 4061, -1356, -1356, 1635 -1356, -1356, -1356, 2093, -1356, 8867, 8867, -1356, 726, 1811, 1636 7030, 1506, 8313, -1356, -1356, -1356, -1356, 4061, 62, -1356, 1637 -1356, 1320, 217, -1356, -1356, 4061, -1356, 6793, -1356, -1356, 1638 726, 726, 472, 9953, 974, 1092, 5671, -1356, 521, 543, 1639 781, -1356, 8784, 976, 959, 781, 726, -1356, -1356, -1356, 1640 -1356, 10252, -1356, 560, 6550, -1356, 217, 981, -1356, 1811, 1641 11070, 10776, -1356, -1356, -1356, -1356, 921, 2093, -1356, 8386, 1642 656, 6061, -1356, -1356, -1356, 820, 612, 883, 781, 7511, 1643 1338, 9774, -1356, 7511, -1356, -1356, -1356, -1356, 638, -1356, 1644 994, 827, 255, 8525, -1356, 9953, -1356, -1356, 8525, -1356, 1645 8753, 8525, -1356, -1356, -1356, 993, -1356, 665, 998, 161, 1646 1002, -1356, 9490, 6639, -1356, -1356, -1356, 290, -1356, -1356, 1647 10795, -1356, 366, 10795, -1356, -1356, -1356, -1356, -1356, -1356, 1648 -1356, -1356, -1356, -1356, 10718, 10718, -1356, 10872, 10872, 10872, 1649 10872, 10872, 10872, 10872, 10872, 10872, 10872, 10872, 10872, 10872, 1650 10872, 10872, 10872, 10872, 10872, 5362, 10718, -1356, 64, 1168, 1651 -1356, -1356, 139, 139, -1356, -1356, 8867, -1356, -1356, 970, 1652 791, -1356, 970, 10853, -1356, -1356, -1356, 3524, 6639, 1016, 1653 9095, 1028, -1356, 10035, -1356, -1356, 594, -1356, 1029, 776, 1654 1036, 1922, 164, 883, -1356, 139, 139, 883, 174, -1356, 1655 139, 139, 970, -1356, -1356, 139, 139, -1356, 900, 10065, 1656 1506, 11215, 233, 347, 10065, -1356, 10214, -1356, 883, -1356, 1657 9885, -1356, 125, 7935, 7935, 7935, 1506, -1356, 6115, 1033, 1658 414, 929, 1150, 1037, 1038, -1356, 1054, 4628, 555, -1356, 1659 1124, 1506, 7935, 791, 1811, 791, 656, 704, 900, -1356, 1660 -1356, 729, 900, -1356, -1356, -1356, 827, -1356, 900, 217, 1661 10252, -1356, 666, 1061, 679, 1062, -1356, 1065, 217, -1356, 1662 -1356, 4061, 217, 1059, 553, 573, 10103, 7119, 1590, 10872, 1663 1954, -1356, -1356, 1066, 39, 1066, -1356, -1356, -1356, 139, 1664 139, -1356, -1356, 781, -1356, 139, -1356, -1356, 9630, 781, 1665 1069, 10872, -1356, 976, 11215, -1356, -1356, 1075, -1356, -1356, 1666 -1356, 791, -1356, 11143, 10872, -1356, 7935, 588, 8240, -1356, 1667 -1356, 594, 1072, 1077, 820, 2542, -1356, -1356, 7511, -1356, 1668 -1356, 1074, -1356, -1356, 1088, -1356, 1074, 1090, 3425, 10718, 1669 205, 1073, 47, 1094, 1082, 1100, 818, 1102, 1110, -1356, 1670 1113, 1117, 9661, 6759, -1356, 10718, -1356, 161, 1861, -1356, 1671 6396, 10718, 1120, -1356, -1356, 929, 689, -1356, 10718, -1356, 1672 -1356, 865, -1356, -1356, -1356, -1356, -1356, 498, 498, 751, 1673 751, 809, 809, 809, 809, 524, 524, 880, 822, 831, 1674 819, 869, 10872, 875, -1356, 10252, 1119, 1140, 1142, 1168, 1675 -1356, -1356, -1356, -1356, -1356, 10252, 691, 10872, 7935, -1356, 1676 9885, -1356, 7239, 9209, 8905, 6999, -1356, -1356, -1356, 776, 1677 10252, 927, 1145, 1152, 1158, 1159, 1162, 1166, 1172, -1356, 1678 4275, 1922, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, 1679 -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, 970, 1680 -1356, -1356, -1356, 883, -1356, -1356, -1356, -1356, -1356, -1356, 1681 -1356, -1356, 1176, -1356, 1183, 1185, -1356, -1356, 59, 1120, 1682 6115, -1356, -1356, -1356, 5043, 1144, -1356, -1356, -1356, -1356, 1683 -1356, 781, 6242, 1231, -1356, -1356, -1356, -1356, 1165, 59, 1684 -1356, -1356, 970, -1356, -1356, 970, 29, 970, -1356, -1356, 1685 -1356, -1356, -1356, -1356, 9380, -1356, 217, -1356, 8784, -1356, 1686 -1356, 1190, 906, 1187, 1193, 1198, -1356, -1356, 1954, -1356, 1687 -1356, -1356, -1356, -1356, -1356, -1356, 1092, -1356, 959, -1356, 1688 -1356, 1195, 1202, 1201, -1356, -1356, 1206, 1210, -1356, 588, 1689 2182, -1356, 533, -1356, 2542, 883, -1356, 1213, 7511, 10176, 1690 8867, 1220, -1356, -1356, 1218, 1222, 1224, -1356, 10872, 230, 1691 -1, 1219, -1356, 1225, 791, 1225, 6639, 10718, -1356, -1356, 1692 1225, -1356, 1861, 5043, -1356, -1356, -1356, -1356, 1236, 10718, 1693 1233, 791, 6115, -1356, 10795, -1356, 791, -1356, -1356, 10718, 1694 -1356, 782, 900, -1356, -1356, -1356, -1356, -1356, -1356, -1356, 1695 929, 8639, -1356, -1356, 7359, 1237, -1356, 807, 900, -1356, 1696 825, 836, 900, -1356, 726, 4460, -1356, -1356, -1356, 10252, 1697 10252, -1356, 8313, 8313, -1356, 1241, 1248, 1246, 1259, -1356, 1698 1262, 672, 244, 1120, -1356, 791, -1356, 4628, -1356, 10718, 1699 578, -1356, 6519, 1267, 1271, 10660, 1272, 1277, 122, 304, 1700 298, 10718, 1279, 217, 10718, 10718, 1280, 678, 1254, 1261, 1701 -1356, -1356, -1356, 1284, -1356, -1356, -1356, -1356, -1356, -1356, 1702 -1356, -1356, -1356, 781, 1290, 10718, -1356, 10252, 10252, 139, 1703 1292, -1356, 9743, 9520, 847, 900, -1356, -1356, -1356, -1356, 1704 -1356, -1356, -1356, -1356, -1356, 1293, 2182, -1356, -1356, 1275, 1705 -1356, 1074, -1356, -1356, 1811, 1296, -1356, -1356, -1356, 706, 1706 1291, -1356, 47, 1305, 10872, 1288, 47, 47, 1314, 1310, 1707 -1356, 1054, 10718, 1315, 1236, 711, 214, 1317, -1356, 1310, 1708 -1356, 1323, 1317, -1356, -1356, 1328, -1356, -1356, 970, 1329, 1709 1330, 6879, 1331, 1339, 1341, -1356, -1356, 1340, -1356, -1356, 1710 970, -1356, -1356, -1356, -1356, 970, 10718, 10718, 10872, 1344, 1711 -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, 1712 -1356, -1356, 10872, 10872, 1347, 1349, 1317, -1356, -1356, 781, 1713 -1356, -1356, -1356, 7746, 10176, 10718, 10718, 1394, 10718, -1356, 1714 -1356, 1333, -1356, 1334, 10718, 1335, 1343, 10718, 992, 1345, 1715 36, 8158, 1229, 139, -1356, -1356, 6242, 1348, 585, -1356, 1716 -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, 970, 10478, 1717 -1356, 8386, 1360, -1356, -1356, 10176, 592, 598, -1356, 1356, 1718 1355, 827, 1366, -1356, 179, -1356, -1356, 10718, 1368, 1363, 1719 -1356, -1356, 1369, 484, 663, 791, 1376, 1378, -1356, 1380, 1720 -1356, 10252, -1356, -1356, -1356, -1356, -1356, 1382, -1356, 10252, 1721 10252, 10252, -1356, -1356, 1386, -1356, 1389, 1392, 1393, 682, 1722 8008, 8124, -1356, -1356, 370, -1356, 1396, 1397, -1356, 8459, 1723 715, 725, 1395, 760, 6377, -1356, -1356, 641, -1356, -1356, 1724 796, 1402, 1403, 217, 1453, 961, -1356, -1356, 10718, -1356, 1725 10795, 10660, -1356, -1356, -1356, 1406, 1407, 10252, -1356, -1356, 1726 -1356, 1405, -1356, -1356, -1356, -1356, -1356, -1356, 10176, 827, 1727 287, -1356, 1388, 827, 1236, 361, -1356, -1356, -1356, -1356, 1728 -1356, -1356, -1356, -1356, 1408, -1356, -1356, -1356, -1356, -1356, 1729 -1356, 1411, 1412, -1356, -1356, -1356, -1356, -1356, -1356, -1356, 1730 1418, -1356, 1417, -1356, -1356, 10660, 272, 10718, 10660, -1356, 1731 1422, 10718, -1356, 306, 1438, 1441, -1356, -1356, 1430, 1431, 1732 1413, 918, -1356, -1356, -1356, -1356, -1356, 1506, 1811, 1433, 1733 855, 946, 10872, -1356, 801, 1439, 10718, 791, 791, 1442, 1734 1448, 1449, 1450, -1356, -1356, 8313, 1452, -1356, 1535, 10872, 1735 1462, -1356, -1356, 10571, -1356, 803, -1356, 1460, 10660, 1463, 1736 -1356, -1356, 1489, -1356, 1493, -1356, 1511, 1512, -1356, 1480, 1737 1508, 10176, -1356, -1356, -1356, 827, 791, 1514, 1484, 1509, 1738 -1356, 1317, 1317, -1356, -1356, -1356, -1356, -1356, 10660, 301, 1739 -1356, 958, -1356, -1356, 7597, -1356, -1356, 1502, 10718, -1356, 1740 10718, 7597, 217, 9953, 217, 9953, 1515, -1356, 1522, -1356, 1741 -1356, -1356, 1520, 855, -1356, 811, -1356, -1356, 10718, 1526, 1742 1527, -1356, 10872, 10872, -1356, -1356, 1055, 154, -1356, -1356, 1743 1510, -1356, 1055, -1356, -1356, 1716, 791, -1356, -1356, 217, 1744 9953, 217, 9953, 1532, 1517, 791, -1356, -1356, -1356, -1356, 1745 -1356, 10571, 1528, 1055, 7673, 10718, 10482, 1531, 1055, 1537, 1746 1716, 2045, -1356, -1356, -1356, 1545, -1356, -1356, -1356, -1356, 1747 8867, -1356, -1356, -1356, 10349, -1356, 10571, -1356, -1356, 1529, 1748 10256, -1356, -1356, 10482, 217, 2045, 217, 1558, 1559, 815, 1749 -1356, 10349, -1356, -1356, -1356, 10256, -1356, -1356, -1356, 217, 1750 217, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356 1753 1751 }; 1754 1752 … … 1756 1754 static const yytype_int16 yypgoto[] = 1757 1755 { 1758 -13 32, 4383, 1919, -1332, 1457, -1332, 41, 0, -257, -1332,1759 5 44, -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 -13 32, 399, -1087, -1332, -1332, 141, -1332, -1329, -838, 252,1763 -13 32, -1332, -1332, -1332, 71, -1078, -1332, -1332, -1332, -1332,1764 -13 32, -1332, 325, -1308, 57, -1332, -297, -1332, 504, 305,1765 -13 32, 173, -1332, -305, -1332, -1332, -1332, 558, -799, -1332,1766 -13 32, 11, -1027, 151, 658, -1332, -1332, -1332, -52, -1332,1767 1 17, 913, -200, 1494, 4071, -1332, -1332, 19, 107, 365,1768 -2 32, 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 -13 32, 22, -1332, -1332, -865, -105, -1331, -98, 1750, -1332,1776 2253, -1332, 929, -1332, -168, 288, -180, -179, -173, 2,1777 -3 4, -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, -4411756 -1356, 4068, 1513, -1356, 1381, -1356, 41, 0, -254, -1356, 1757 593, -523, -482, -960, -143, 5028, -1356, -101, 576, 581, 1758 386, 577, 1101, 1105, 1106, 1099, 1107, -1356, -593, -585, 1759 4966, -933, -708, -942, -1356, -273, -719, 379, -1356, 1404, 1760 -1356, 457, -1092, -1356, -1356, 195, -1356, -844, -1059, 308, 1761 -1356, -1356, -1356, -1356, 124, -1118, -1356, -1356, -1356, -1356, 1762 -1356, -1356, 382, -1355, 53, -1356, -496, -1356, 558, 349, 1763 -1356, 226, -1356, -307, -1356, -1356, -1356, 610, -832, -1356, 1764 -1356, 13, -961, 169, 2725, -1356, -1356, -1356, -79, -1356, 1765 189, 845, -184, 1482, 3902, -1356, -1356, 192, 133, 657, 1766 -251, 1620, -1356, 1796, -1356, -1356, 156, 2416, -1356, 2575, 1767 798, -1356, -1356, -404, -428, 1252, 1253, 761, 1003, 302, 1768 -1356, -1356, 1245, 764, -253, -1356, -24, -132, -469, -1356, 1769 -1356, -983, -881, 4, 862, 1128, -43, -1356, 561, -100, 1770 -262, -193, -152, 721, 826, -1356, 1071, -1356, 2692, 907, 1771 -449, 971, -1356, -1356, 765, -1356, -227, -1356, -60, -1356, 1772 -1356, -1356, -1248, 485, -1356, -1356, -1356, 1242, -1356, 45, 1773 -1356, -1356, -846, -109, -1333, -138, 3289, -1356, 1880, -1356, 1774 969, -1356, -161, 268, -181, -177, -175, 2, -39, -35, 1775 -33, 769, 30, 31, 69, -146, -162, -151, -147, -140, 1776 -277, -521, -506, -484, -575, -313, -516, -1356, -1356, -528, 1777 1156, 1157, 1163, 2484, 4688, -570, -557, -534, -533, -478, 1778 -1356, -432, -693, -685, -681, -580, -201, -236, -1356, -1356, 1779 265, 180, -86, -1356, 3600, 232, -625, -376 1782 1780 }; 1783 1781 … … 1785 1783 positive, shift that token. If negative, reduce the rule which 1786 1784 number is the opposite. If YYTABLE_NINF, syntax error. */ 1787 #define YYTABLE_NINF -52 51785 #define YYTABLE_NINF -523 1788 1786 static const yytype_int16 yytable[] = 1789 1787 { 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, 1788 47, 112, 96, 398, 148, 933, 266, 399, 149, 400, 1789 150, 452, 176, 934, 113, 382, 383, 935, 259, 427, 1790 791, 527, 401, 707, 406, 439, 512, 505, 712, 112, 1791 112, 895, 47, 402, 96, 618, 853, 403, 768, 407, 1792 975, 854, 111, 47, 404, 47, 1152, 160, 409, 871, 1793 751, 820, 846, 48, 756, 47, 1092, 1144, 718, 1184, 1794 1185, 47, 260, 192, 47, 261, 215, 47, 342, 225, 1795 1091, 613, 995, 151, 152, 847, 848, 142, 31, 279, 1796 218, 112, 112, 398, 933, 48, 1462, 399, 842, 400, 1797 1399, 424, 934, 845, 201, 1196, 935, 779, 951, 1318, 1798 574, 1202, 401, 843, 406, 47, 936, 31, 47, 1135, 1799 679, 536, 153, 402, 937, 47, 1136, 403, 122, 407, 1800 1508, 749, 482, 484, 404, 844, 408, 637, 936, 290, 1801 688, 641, 31, 68, 857, 575, 950, 280, 692, 1099, 1802 864, 1219, 1220, 605, 202, 148, 47, 121, 160, 149, 1803 410, 150, 682, 684, 47, 1537, 75, 1539, 978, 47, 1804 1462, 372, 1186, 683, 685, 68, 167, 446, 1319, 54, 1805 114, 483, 141, 578, 438, 410, 478, 251, 31, 410, 1806 105, 105, 517, 579, 47, 47, 467, 160, 75, 61, 1807 168, 31, 67, 1482, 109, 534, 535, 211, -234, -234, 1808 47, 54, 418, 31, 410, 41, 42, 556, 47, 1260, 1809 160, 919, 105, 31, 151, 152, 677, 47, 746, 1008, 1810 47, 61, 442, 842, 67, 148, 585, 112, 490, 149, 1811 1201, 150, 586, 209, 483, 507, 219, 858, 843, 755, 1812 527, 861, 112, 535, 674, 527, 112, 105, 527, 143, 1813 47, 112, 96, 153, 1210, 596, 576, 760, 770, 675, 1814 844, 488, 878, 410, 47, 47, 881, 160, 95, -234, 1815 777, 47, 410, 855, 145, 610, 1037, 165, 47, 535, 1816 778, 1038, 846, 862, 342, 610, 666, 536, 740, 1342, 1817 712, 1014, 472, 112, 703, 470, 1343, 1051, 618, 1263, 1818 95, 1154, 813, 48, 176, 847, 848, 1184, 1185, 705, 1819 162, 147, 536, 95, 681, 1344, 1419, 1420, 842, 154, 1820 686, 638, 976, 1025, 824, 642, 674, 1264, 47, 188, 1821 372, 170, 95, 843, 524, 95, 180, 536, 478, 1134, 1822 1192, 675, 165, 1202, 200, 874, 1010, 47, 47, 875, 1823 1419, 1420, 1216, 441, -290, 844, 1015, 739, 478, 246, 1824 1186, 831, 109, 857, 47, 761, 478, 1193, 47, 536, 1825 109, 1026, 762, 41, 42, 162, 109, 327, 249, 653, 1826 1092, 41, 42, 68, 926, 936, 1421, 41, 42, 440, 1827 854, 886, 887, 1133, 1091, 47, 1402, 1492, 500, 605, 1828 501, 783, 846, -518, 880, 47, 75, 372, 1551, 905, 1829 1186, 75, 251, 763, 95, 764, 1153, 1214, 765, 54, 1830 1430, 771, 916, 47, 1193, 847, 848, 95, 605, 47, 1831 105, 47, 1457, 605, 1550, 1566, 1212, 1521, 109, 61, 1832 435, 871, 67, 1526, 479, 263, 342, 1451, 1452, 41, 1833 42, 376, 397, 188, 1561, 47, 794, 795, 796, 876, 1834 112, 1565, -10, 877, 1546, 112, 1051, 377, 386, 1553, 1835 327, -112, 1381, 434, 112, 728, 95, 789, 1406, 47, 1836 251, 329, 211, 958, 387, -112, -112, 47, 95, 372, 1837 -441, 47, -112, 96, -467, 47, 740, 1041, 112, 535, 1838 112, -112, 435, 1202, 460, 896, 1107, 505, 979, -442, 1839 1202, 885, 885, 885, 707, 111, 1259, 398, 95, 1121, 1840 653, 399, 1150, 400, 1102, -467, 275, -467, 909, 165, 1841 885, -467, 486, 277, 1186, 434, 401, 112, 618, 406, 1842 653, 936, 112, 653, 48, 278, 1038, 402, 389, 1252, 1843 391, 403, 1172, 1174, 407, 907, 109, 330, 404, 531, 1844 1107, 767, 162, 1202, 390, 739, 392, 41, 42, 331, 1845 1181, 1182, 740, 75, 1036, 1017, 607, 332, 784, 1466, 1846 370, 767, 693, 790, 767, 1379, 393, 873, 586, 1118, 1847 112, 140, 333, 75, 1019, 1348, 95, 47, 831, 936, 1848 936, 75, 394, 888, 885, 334, 479, 1292, 1293, 47, 1849 342, 47, 478, 211, 564, 565, 612, 557, 904, 884, 1850 884, 884, 558, 559, 68, 587, 479, 410, 1231, 1232, 1851 47, 472, 1498, 535, 479, 897, 1250, 713, 884, 1498, 1852 1254, 739, 240, 243, 37, 876, 47, 75, 40, 1117, 1853 566, 567, 112, 714, 955, 41, 42, 327, 327, 715, 1854 54, 47, 1429, 112, 47, 112, 898, 335, 652, 713, 1855 730, 105, 899, 188, 712, 716, 731, 1466, 737, 994, 1856 61, 43, 1466, 67, 728, 929, 342, 1036, 831, 715, 1857 384, 146, 1547, 371, 1199, 1049, 885, 959, 47, 610, 1858 47, 1199, 1466, 375, 906, 930, 908, 960, 1333, 1466, 1859 1200, 388, 884, 112, 1335, 507, 1096, 1324, 460, 112, 1860 408, 460, 747, 704, 1334, 228, 535, 460, 748, 229, 1861 1336, 112, 233, 327, 235, 109, 8, 9, 10, 11, 1862 12, 244, 1056, 1129, 47, 47, 41, 42, 757, 1500, 1863 285, 1501, 327, 590, 758, 410, 396, 775, 47, 95, 1864 -291, 41, 42, 612, 441, 31, 431, 8, 9, 10, 1865 11, 12, 954, 1382, 1350, 774, 920, 674, 531, 425, 1866 531, 775, 775, 531, -105, 703, 531, 521, -105, 922, 1867 833, 449, 675, 34, 1367, 775, 31, 1391, 1368, 1003, 1868 705, 1016, 1356, 464, 884, 1004, 1548, 731, 426, 936, 1869 1358, 1359, 1360, 910, 161, 410, 1248, 1447, 327, 728, 1870 605, -112, 586, -112, 34, 1375, 936, -112, 462, 728, 1871 193, 775, 607, 216, 1459, 1376, 226, 933, 913, 47, 1872 410, 775, -112, -112, 728, 934, 115, 75, 37, 935, 1873 1176, 47, 40, 109, 465, 138, 139, 211, 1395, 41, 1874 42, 872, 213, 109, 41, 42, 607, 831, 228, 468, 1875 1378, 211, 560, 561, 41, 42, 775, 841, 979, 612, 1876 479, 469, 979, 979, 491, 839, 737, 610, 511, 75, 1877 158, 1156, 37, 410, 653, 611, 40, 562, 563, 936, 1878 936, 112, 653, 41, 42, 1197, 1383, 1519, 1459, 290, 1879 1183, 1448, 775, 1467, 213, 161, 1168, 1445, 410, 775, 1880 535, 1514, 479, 515, 47, 1571, 520, 1515, 373, 744, 1881 532, 586, 1300, 1301, 1171, 1303, 610, 536, 47, 745, 1882 654, 1307, 570, 1078, 1310, 1173, 47, 610, 572, 257, 1883 801, 802, 803, 804, 161, 158, 1236, 213, 410, 571, 1884 740, 517, 737, 573, 47, 211, 932, 109, 704, 138, 1885 139, 214, 568, 569, 537, 538, 539, 161, 41, 42, 1886 1007, 1004, 1122, 460, 112, 251, 329, 410, 241, 443, 1887 323, 775, 1009, 653, 418, 670, 410, 1340, 540, 339, 1888 541, 112, 542, 543, 653, 941, 112, 941, 228, 242, 1889 233, 338, 841, 612, 576, 1243, 329, 410, 213, 1388, 1890 1389, 717, -438, 214, 594, 1138, 464, 833, 597, 739, 1891 488, 329, 410, 1439, 1004, 68, 855, 329, 610, 676, 1892 740, 647, 1146, 728, 728, 767, 667, 1146, 668, 429, 1893 1311, 1312, 1313, 433, 669, 112, 213, 671, 75, 750, 1894 213, 754, 1445, 1446, 672, 653, 214, 673, 112, 112, 1895 112, 54, 678, 1533, 1493, 1494, 37, 535, 173, 174, 1896 40, 256, 105, 323, 455, 1400, 696, 41, 42, 1400, 1897 721, 61, 719, 112, 67, -238, 1146, 373, 228, 1419, 1898 1420, 728, 728, 759, 1425, 772, 1078, 841, 776, 1211, 1899 1213, 1215, 780, 371, 109, 433, 138, 237, 495, 612, 1900 1349, 1351, 1352, 1107, 47, 41, 42, 214, 834, 2, 1901 205, 4, 5, 6, 7, 342, 797, 798, 1123, 529, 1902 836, 838, 158, 799, 800, 805, 806, 213, 849, 105, 1903 -12, 238, -292, 901, -13, 893, 239, 441, 1370, 8, 1904 9, 10, 11, 12, 37, 214, 182, 183, 40, 214, 1905 894, 921, 923, 928, 373, 41, 42, 924, 8, 9, 1906 10, 11, 12, 699, 949, -415, 595, -522, 31, 602, 1907 748, 1483, 963, 460, 35, 68, 36, 970, 984, 112, 1908 972, 698, 327, 410, 983, 977, 704, 31, 635, 699, 1909 985, 700, 639, 892, 704, 339, 34, 218, 75, 987, 1910 988, 47, 109, 989, 138, 139, 653, 990, 213, 1011, 1911 -293, 54, 612, 41, 42, 34, 999, 8, 9, 10, 1912 11, 12, 105, 1329, 2, 205, 4, 5, 6, 7, 1913 1012, 479, 1013, 872, 1204, 1027, 214, -3, 1122, 1058, 1914 1093, 891, 1028, 112, 112, 112, 31, 1078, 1029, 1030, 1915 323, 323, 1031, 227, 945, 728, 1032, 578, 213, 410, 1916 948, 1080, 1033, 728, 728, 728, 1044, 579, 128, 1443, 1917 129, 130, 131, -403, 34, -402, 1095, 1104, 455, 41, 1918 42, 455, 1103, 1105, 1146, 1146, 1146, 455, 1106, 35, 1919 1110, 36, 1111, 1559, 537, 538, 539, 1112, 1113, 115, 1920 653, 653, 1114, 1120, 2, 205, 4, 5, 6, 7, 1921 1130, 728, 1131, 729, 775, 1137, 211, 214, 540, 993, 1922 541, 1132, 542, 1320, 495, 1145, 323, 1166, 495, 398, 1923 737, 1122, 1142, 399, 1442, 400, 1189, 1187, 529, 68, 1924 529, 767, 1078, 529, 1188, 323, 529, 460, 401, 1190, 1925 406, 1223, 209, 219, 1191, 653, 1205, 339, 653, 402, 1926 1206, 1208, 75, 403, 105, 407, 1209, 214, 1217, 35, 1927 404, 36, 1221, 1224, 674, 54, 1532, 47, 47, -3, 1928 1229, 213, 1234, 1240, 500, 1249, 105, 112, 112, 675, 1929 109, 1244, 138, 139, 1123, 61, 1078, 1251, 67, 1078, 1930 1253, 41, 42, 653, 1256, 105, 1257, 1261, 653, 213, 1931 737, 323, 441, 1265, 213, 1268, 175, 68, 1270, 1272, 1932 1273, 1302, 829, 1274, 1207, 602, 112, 752, 1146, 1146, 1933 1278, 1275, 753, 1276, 1122, 654, 1285, 172, 653, 1294, 1934 75, 1295, 1061, 1323, 1078, 1305, 1306, 1308, 440, 1078, 1935 1331, 1337, 1339, 54, 870, 1309, 1341, 1317, 1346, 602, 1936 1345, 1347, 64, 116, 105, 879, 175, 1484, 1353, 175, 1937 1354, 148, 1355, 479, 1357, 149, 1204, 150, 1363, 1078, 1938 252, 1364, 1365, 1366, 1377, 47, 112, 1123, 1373, 1374, 1939 214, 1384, 1385, 1313, 64, 112, 1393, 1394, 105, 1396, 1940 1403, 653, 213, 1413, 1414, 1406, 653, 159, -404, 1417, 1941 47, 47, 1428, 160, 1432, 175, 213, 1434, 214, 1436, 1942 1437, 339, 729, 214, 653, 1438, 653, 1534, 1444, 220, 1943 653, 1449, 1453, 653, 654, 47, 1542, 372, 1454, 1455, 1944 1456, 653, 1078, 455, 166, 653, 171, 1078, 1368, 177, 1945 178, 179, 37, 181, 173, 174, 40, 1458, 37, 1463, 1946 173, 174, 40, 41, 42, 1078, 258, 1078, 232, 41, 1947 42, 1078, 1468, 495, 1078, 1470, 416, 68, 175, 1472, 1948 247, 248, 1078, 1474, 68, 1080, 1078, 1476, 1478, 375, 1949 1123, 37, 1480, 182, 183, 40, 1487, 339, 1481, 436, 1950 75, 105, 41, 42, 1486, 1509, 1488, 75, 328, 444, 1951 213, 214, 1511, 54, 1499, 1513, 258, 349, 1517, 1518, 1952 54, 1540, 1525, 1545, 105, 214, 1552, 1554, 609, 1541, 1953 610, 105, 175, 479, 1061, 1556, 1204, 68, 611, 175, 1954 479, 1562, 37, 1204, 182, 183, 40, 405, 1569, 1570, 1955 1222, 807, 810, 41, 42, 1018, 808, 729, 809, 829, 1956 75, 811, 423, 1322, 212, 428, 430, 729, 1520, 1572, 1957 159, 1431, 1404, 54, 231, 1255, 1387, 1502, 528, 698, 1958 1392, 410, 729, 1228, 105, 694, 695, 1108, 942, 700, 1959 723, 447, 1109, 479, 1141, 450, 1204, 451, 826, 965, 1960 1057, 8, 9, 10, 11, 12, 466, 973, 175, 900, 1961 1332, 1119, 64, 742, 816, 817, 212, 480, 1506, 214, 1962 1506, 818, 0, 0, 0, 175, 0, 487, 0, 175, 1963 31, 0, 0, 0, 1418, 430, 0, 1426, 0, 0, 1964 1298, 0, 0, 0, 0, 0, 0, 0, 0, 829, 1965 0, 0, 327, 455, 0, 1506, 0, 1506, 34, 212, 1966 0, 0, 0, 37, 0, 182, 183, 40, 37, 0, 1967 182, 183, 40, 0, 41, 42, 73, 0, 486, 41, 1968 42, 0, 1465, 0, 0, 0, 37, 1469, 182, 183, 1969 40, 0, 175, 495, 1124, 323, 0, 41, 42, 0, 1970 184, 0, 213, 258, 0, 1530, 603, 410, 73, 0, 1971 185, 0, 631, 0, 0, 1531, 0, 1491, 0, 0, 1972 212, 0, 0, 184, 0, 636, 690, 0, 0, 636, 1973 0, 0, 258, 185, 0, 0, 0, 601, 608, 0, 1974 0, 0, 0, 221, 0, 0, 870, 0, 0, 632, 1975 633, 8, 9, 10, 11, 12, 0, 0, 212, 0, 1976 732, 0, 212, 37, 0, 182, 183, 40, 0, 0, 1977 0, 0, 0, 0, 41, 42, 0, 0, 506, 480, 1978 31, 729, 729, 0, 0, 0, 125, 125, 125, 0, 1979 0, 0, 0, 0, 349, 0, 0, 528, 0, 480, 1980 264, 0, 528, 1560, 0, 528, 0, 480, 34, 1560, 1981 265, 214, 8, 9, 10, 11, 12, 0, 0, 0, 1982 1560, 0, 0, 0, 1560, 0, 0, 455, 829, 0, 1983 0, 352, 0, 724, 0, 0, 430, 0, 0, 729, 1984 729, 31, 0, 0, 8, 9, 10, 11, 12, 212, 1985 777, 738, 410, 64, 0, 0, 0, 125, 175, 125, 1986 778, 430, 0, 0, 0, 430, 0, 0, 0, 34, 1987 0, 0, 0, 31, 37, 0, 182, 183, 40, 0, 1988 0, 213, 0, 0, 274, 41, 42, 0, 0, 0, 1989 0, 175, 0, 0, 258, 349, 0, 0, 0, 0, 1990 0, 34, 0, 0, 0, 448, 37, 175, 182, 183, 1991 40, 609, 0, 610, 0, 0, 0, 41, 42, 0, 1992 0, 611, 175, 0, 0, 0, 73, 0, 0, 0, 1993 212, 73, 0, 0, 0, 8, 9, 10, 11, 12, 1994 125, 819, 0, 698, 0, 410, 339, 212, 125, 0, 1995 125, 125, 0, 700, 0, 125, 0, 125, 125, 636, 1996 832, 0, 603, 918, 31, 0, 0, 0, 0, 0, 1997 1124, 0, 925, 851, 0, 0, 927, 213, 0, 0, 1998 212, 1330, 0, 8, 9, 10, 11, 12, 0, 0, 1999 214, 603, 34, 0, 0, 0, 603, 37, 0, 182, 2000 183, 40, 636, 0, 0, 349, 349, 349, 41, 42, 2001 0, 0, 31, 729, 0, 0, 0, 0, 0, 175, 2002 0, 729, 729, 729, 349, 0, 221, 125, 0, 0, 2003 0, 0, 0, 0, 1530, 0, 410, 0, 0, 0, 2004 34, 0, 724, 0, 1531, 37, 0, 182, 183, 40, 2005 0, 0, 0, 480, 0, 0, 41, 42, 258, 738, 2006 0, 0, 938, 1124, 0, 0, 0, 0, 0, 729, 2007 0, 0, 8, 9, 10, 11, 12, 0, 0, 0, 2008 0, 0, 264, 0, 0, 0, 214, 0, 0, 0, 2009 0, 0, 265, 73, 0, 480, 0, 0, 349, 0, 2010 0, 31, 0, 212, 0, 0, 0, 964, 352, 0, 2011 430, 0, 0, 73, 0, 0, 0, 0, 952, 0, 2012 953, 73, 0, 0, 0, 0, 0, 956, 957, 34, 2013 0, 212, 962, 0, 258, 738, 212, 0, 0, 0, 2014 992, 0, 0, 0, 967, 0, 0, 352, 0, 971, 2015 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 2016 0, 0, 0, 0, 0, 352, 1124, 73, 0, 0, 2017 0, 959, 0, 610, 0, 1000, 0, 724, 0, 0, 2018 0, 960, 0, 0, 554, 175, 0, 724, 0, 0, 2019 349, 0, 636, 0, 0, 1024, 636, 832, 1505, 0, 2020 1505, 0, 724, 0, 0, 0, 0, 0, 0, 352, 2021 1101, 0, 1035, 0, 0, 0, 0, 0, 0, 0, 2022 601, 0, 0, 0, 212, 0, 0, 0, 0, 0, 2023 0, 0, 0, 0, 0, 1505, 0, 1505, 212, 0, 2024 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2025 18, 19, 20, 21, 22, 23, 24, 25, 506, 0, 2026 26, 27, 28, 0, 64, 323, 0, 0, 0, 31, 2027 0, 0, 0, 0, 352, 0, 0, 1045, 1046, 1047, 2028 1048, 0, 1050, 0, 0, 0, 636, 0, 8, 9, 2029 10, 11, 12, 0, 0, 0, 76, 34, 1094, 0, 2030 0, 0, 37, 0, 38, 39, 40, 0, 0, 0, 2031 0, 0, 1100, 41, 42, 0, 0, 31, 0, 352, 2032 352, 352, 1116, 0, 0, 0, 0, 0, 76, 0, 2033 430, 116, 212, 0, 0, 0, 0, 0, 352, 43, 2034 0, 156, 125, 125, 0, 34, 0, 0, 349, 45, 2035 37, 1115, 0, 0, 40, 0, 352, 1218, 0, 0, 2036 0, 41, 42, 222, 0, 0, 0, 73, 0, 0, 2037 0, 0, 125, 352, 0, 125, 125, 0, 125, 0, 2038 125, 125, 0, 603, 0, 125, 125, 43, 0, 0, 2039 0, 1143, 0, 0, 0, 0, 428, 146, 1151, 0, 2040 0, 724, 724, 1155, 349, 349, 0, 0, 1159, 73, 2041 1160, 0, 352, 0, 1162, 1163, 1164, 0, 0, 1167, 2042 0, 0, 0, 0, 1203, 0, 0, 0, 1179, 0, 2043 0, 0, 8, 9, 10, 11, 12, 0, 0, 0, 2044 0, 0, 0, 0, 0, 0, 1194, 1195, 0, 352, 2045 0, 354, 0, 0, 0, 78, 0, 0, 0, 724, 2046 724, 31, 0, 0, 125, 636, 0, 0, 0, 125, 2047 125, 0, 0, 1225, 0, 125, 1227, 0, 0, 0, 2048 0, 0, 175, 0, 0, 0, 0, 78, 0, 34, 2049 0, 352, 0, 0, 37, 0, 0, 0, 40, 0, 2050 0, 352, 0, 0, 352, 41, 42, 0, 0, 221, 2051 0, 352, 0, 0, 1242, 0, 352, 0, 0, 0, 2052 1246, 1247, 223, 738, 212, 0, 0, 0, 0, 0, 2053 0, 744, 1258, 0, 0, 0, 0, 1262, 0, 0, 2054 1266, 745, 1267, 0, 0, 1269, 76, 0, 0, 0, 2055 0, 76, 412, 0, 0, 0, 0, 0, 1277, 420, 2056 0, 0, 0, 0, 0, 0, 1299, 0, 0, 0, 2057 0, 1284, 85, 1286, 1287, 1288, 1289, 0, 73, 0, 2058 0, 0, 0, 258, 0, 0, 0, 0, 64, 1296, 2059 0, 1297, 0, 0, 0, 171, 0, 1386, 0, 0, 2060 0, 724, 0, 738, 85, 55, 55, 116, 0, 0, 2061 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2062 0, 0, 0, 0, 1325, 1326, 0, 0, 0, 0, 2063 0, 412, 0, 724, 0, 0, 0, 55, 0, 224, 2064 0, 724, 724, 724, 0, 0, 222, 0, 0, 0, 2065 0, 0, 349, 349, 0, 0, 0, 0, 175, 0, 2066 0, 0, 352, 0, 0, 0, 1203, 0, 0, 55, 2067 0, 0, 55, 0, 0, 1361, 1362, 0, 0, 0, 2068 0, 0, 0, 0, 0, 1372, 0, 584, 0, 724, 2069 0, 0, 0, 0, 0, 588, 0, 0, 591, 0, 2070 116, 0, 0, 212, 0, 78, 0, 0, 0, 0, 2071 78, 0, 0, 76, 0, 352, 352, 0, 352, 352, 2072 0, 0, 0, 0, 0, 0, 0, 362, 354, 0, 2073 0, 0, 0, 76, 0, 0, 0, 1405, 73, 0, 2074 0, 76, 0, 0, 0, 0, 0, 0, 0, 1409, 2075 0, 1410, 1411, 1412, 0, 0, 1503, 0, 1507, 0, 2076 347, 412, 0, 1416, 0, 420, 0, 354, 0, 0, 2077 0, 0, 1427, 352, 352, 0, 0, 349, 0, 0, 2078 0, 0, 0, 0, 0, 354, 0, 76, 1440, 0, 2079 0, 0, 0, 1536, 0, 1538, 0, 0, 0, 212, 2080 0, 0, 0, 116, 0, 223, 0, 0, 0, 0, 2004 2081 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, 2082 0, 0, 85, 0, 0, 55, 1203, 85, 0, 354, 2083 0, 0, 0, 1203, 0, 0, 0, 352, 1567, 0, 2084 1568, 0, 0, 0, 1489, 1490, 0, 0, 0, 0, 2085 412, 0, 0, 1575, 1576, 55, 0, 1495, 0, 125, 2086 0, 0, 0, 0, 1495, 0, 0, 0, 0, 0, 2087 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 2088 221, 0, 0, 0, 0, 0, 1203, 355, 0, 0, 2089 0, 0, 78, 1555, 354, 0, 0, 1529, 0, 0, 2090 78, 1535, 73, 0, 0, 0, 0, 0, 0, 0, 2091 0, 0, 0, 0, 0, 352, 0, 352, 0, 0, 2092 0, 0, 224, 0, 0, 0, 355, 0, 0, 0, 2093 1557, 0, 1558, 0, 0, 0, 0, 0, 0, 354, 2094 354, 354, 584, 584, 355, 0, 78, 352, 0, 0, 2095 0, 0, 0, 0, 0, 352, 352, 352, 354, 0, 2096 1573, 1574, 0, 0, 0, 0, 352, 352, 1577, 1578, 2097 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 2098 73, 0, 0, 125, 0, 0, 0, 76, 355, 85, 2099 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 2100 0, 0, 0, 352, 362, 0, 0, 0, 0, 85, 2101 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 2102 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 2103 0, 911, 354, 0, 0, 914, 0, 347, 0, 0, 2104 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 2105 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 2106 0, 362, 0, 85, 0, 0, 0, 0, 412, 354, 2107 0, 0, 0, 8, 9, 10, 11, 12, 13, 14, 2108 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2109 25, 352, 0, 0, 0, 0, 55, 0, 355, 355, 2110 355, 0, 31, 0, 0, 362, 0, 0, 0, 0, 2111 0, 354, 0, 0, 0, 0, 0, 355, 0, 0, 2112 0, 354, 0, 0, 354, 0, 0, 0, 0, 222, 2113 34, 354, 0, 0, 0, 355, 354, 0, 347, 0, 2114 73, 0, 0, 0, 0, 0, 78, 73, 0, 0, 2115 0, 0, 355, 0, 0, 0, 0, 0, 0, 0, 2116 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2117 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2118 0, 0, 0, 584, 0, 0, 0, 0, 78, 0, 2119 0, 355, 0, 0, 0, 123, 126, 127, 76, 0, 2120 73, 0, 0, 347, 0, 0, 0, 0, 0, 0, 2121 0, 0, 0, 0, 0, 362, 362, 362, 0, 0, 2122 0, 0, 0, 0, 0, 0, 0, 0, 355, 0, 2123 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 2124 0, 0, 0, 0, 0, 0, 0, 0, 347, 347, 2125 347, 0, 362, 0, 0, 0, 0, 0, 0, 0, 2126 0, 0, 0, 85, 0, 0, 253, 347, 254, 362, 2127 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2128 355, 0, 354, 355, 0, 0, 0, 0, 223, 0, 2129 355, 0, 0, 0, 0, 355, 412, 0, 0, 0, 2130 0, 0, 0, 0, 0, 85, 0, 0, 362, 2, 2131 205, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2132 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2133 23, 24, 25, 0, 0, 354, 354, 0, 354, 354, 2134 0, 347, 0, 0, 31, 362, 0, 0, 0, 395, 2135 0, 0, 0, 0, 0, 0, 0, 78, 76, 414, 2136 415, 0, 0, 0, 419, 0, 421, 422, 0, 0, 2137 0, 0, 34, 0, 35, 1157, 36, 37, 0, 173, 2138 174, 40, 0, 0, 0, 0, 0, 362, 41, 42, 2139 0, 1169, 0, 354, 354, 0, 0, 362, 0, 0, 2140 362, 0, 0, 0, 0, 224, 0, 362, 0, 0, 2141 0, 0, 362, 0, 8, 9, 10, 11, 12, 13, 2142 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2143 24, 25, -294, 347, 26, 27, 28, 0, 0, 0, 2144 347, 355, 0, 31, 0, 0, 0, 0, 0, 0, 2145 0, 0, 0, 0, 0, 0, 0, 354, 0, 0, 2146 0, 0, 0, 0, 0, 0, 0, 0, 1237, 0, 2147 0, 34, 0, 0, 85, 0, 37, 0, 336, 337, 2148 40, 0, -294, 0, 0, 0, 0, 41, 42, 0, 2149 0, 0, 0, 0, 355, 355, 0, 355, 355, 0, 2150 222, 0, 0, 0, 0, 0, 0, 55, 0, 0, 2151 0, 0, 0, 643, 0, 338, 0, 78, 0, 0, 2152 0, 0, 76, 634, 0, 164, 0, 0, 0, 0, 2153 0, 0, 0, 0, 0, 354, 0, 354, 0, 0, 2154 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 2155 0, 0, 355, 355, 0, 0, 0, 0, 362, 0, 2156 281, 282, 0, 283, 0, 0, 0, 354, 0, 0, 2157 0, 0, 0, 0, 55, 354, 354, 354, 0, 0, 2158 0, 0, 0, 0, 0, 0, 354, 354, 0, 284, 2159 164, 347, 0, 0, 0, 285, 271, 0, 0, 286, 2160 76, 0, 287, 288, 289, 290, 41, 42, 0, 291, 2161 292, 362, 362, 0, 362, 362, 355, 293, 0, 0, 2162 0, 0, 0, 354, 0, 164, 0, 0, 0, 0, 2163 0, 0, 513, 0, 85, 368, 0, 0, 0, 374, 2164 0, 296, 380, 298, 299, 300, 301, 347, 347, 0, 2165 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 2166 0, 0, 0, 0, 0, 0, 0, 55, 0, 362, 2167 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2168 0, 78, 0, 0, 0, 0, 0, 0, 164, 0, 2169 0, 0, 0, 0, 355, 0, 355, 0, 0, 0, 2170 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2171 0, 354, 0, 0, 0, 0, 0, 0, 164, 461, 2172 0, 0, 0, 0, 0, 0, 355, 0, 0, 0, 2173 0, 0, 0, 362, 355, 355, 355, 0, 0, 0, 2174 0, 0, 374, 0, 0, 355, 355, 0, 0, 0, 2175 164, 821, 822, 0, 0, 0, 0, 0, 0, 78, 2176 76, 0, 0, 0, 0, 0, 0, 76, 0, 0, 2177 0, 0, 0, 0, 461, 0, 224, 164, 0, 0, 2178 0, 856, 355, 0, 859, 860, 0, 863, 0, 865, 2179 866, 0, 0, 0, 867, 868, 0, 0, 85, 0, 2180 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 2181 0, 362, 0, 362, 0, 0, 0, 0, 0, 0, 2182 76, 0, 0, 0, 606, 0, 0, 0, 0, 630, 2183 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 2184 0, 0, 0, 362, 0, 0, 210, 0, 0, 0, 2185 55, 362, 362, 362, 0, 0, 230, 0, 234, 0, 2186 236, 0, 362, 362, 0, 0, 0, 245, 0, 0, 2187 355, 0, 0, 0, 0, 0, 85, 0, 943, 944, 2188 0, 0, 0, 0, 946, 0, 0, 0, 0, 0, 2189 0, 0, 0, 0, 0, 347, 347, 0, 210, 362, 2190 234, 236, 245, 0, 55, 164, 164, 0, 0, 55, 2191 0, 0, 368, 0, 0, 0, 0, 0, 0, 78, 2192 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 2193 0, 0, 0, 461, 0, 0, 461, 0, 0, 0, 2194 0, 210, 461, 55, 474, 2, 205, 4, 5, 6, 2195 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2196 17, 18, 19, 20, 21, 22, 23, 24, 25, 741, 2197 0, 26, 27, 28, 0, 0, 0, 0, 0, 78, 2198 31, 164, 0, 0, 0, 0, 0, 362, 0, 0, 2199 0, 0, 155, 461, 0, 461, 0, 0, 461, 0, 2200 164, 461, 210, 0, 234, 236, 245, 0, 34, 0, 2201 35, 0, 36, 368, 0, 38, 39, 0, 0, 0, 2202 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2203 0, 0, 0, 0, 0, 0, 85, 0, 250, 0, 2204 210, 0, 0, 85, 210, 0, 55, 0, 255, 0, 2205 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 2206 504, 0, 0, 0, 0, 0, 164, 0, 0, 55, 2207 0, 0, 0, 0, 0, 0, 55, 0, 368, 0, 2208 606, 0, 0, 837, 0, 0, 0, 0, 0, 0, 2209 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 2210 0, 0, 0, 0, 155, 0, 0, 0, 0, 606, 2211 210, 0, 0, 0, 606, 0, 0, 0, 385, 0, 2212 0, 0, 0, 368, 368, 368, 0, 0, 0, 55, 2213 0, 210, 0, 0, 0, 0, 234, 236, 0, 0, 2214 0, 417, 368, 0, 245, 0, 0, 0, 0, 0, 2215 0, 0, 0, 0, 0, 432, 0, 0, 0, 0, 2216 0, 0, 1034, 0, 437, 8, 9, 10, 11, 12, 2217 0, 0, 0, 0, 445, 0, 0, 741, 0, 0, 2218 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 2219 0, 0, 281, 282, 31, 283, 0, 0, 461, 471, 2220 0, 0, 0, 0, 481, 210, 0, 0, 0, 0, 2221 210, 0, 210, 0, 0, 0, 368, 489, 961, 0, 2222 0, 284, 34, 499, 0, 503, 0, 285, 0, 210, 2223 0, 286, 210, 210, 287, 288, 289, 290, 41, 42, 2224 0, 291, 292, 533, 0, 0, 0, 0, 210, 293, 2225 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, 2226 0, 0, 210, 0, 294, 0, 378, 0, 1233, 210, 2227 0, 0, 0, 296, 827, 298, 299, 300, 301, 0, 2228 0, 0, 0, 0, 0, 0, 593, 0, 0, 0, 2229 0, 598, 0, 0, 0, 0, 0, 0, 0, 0, 2230 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 2231 0, 0, 630, 0, 0, 368, 0, 0, 0, 644, 2232 0, 0, 0, 645, 646, 0, 648, 0, 0, 0, 2233 0, 0, 0, 660, 661, 0, 662, 663, 0, 664, 2234 0, 665, 0, 0, 0, 0, 0, 1177, 0, 0, 2235 8, 9, 10, 11, 12, 0, 0, 0, 593, 0, 2236 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, 2237 0, 0, 0, 0, 0, 0, 0, 281, 282, 31, 2238 283, 0, 0, 0, 0, 210, 0, 0, 0, 0, 2239 0, 691, 1321, 0, 0, 0, 0, 0, 0, 0, 2240 0, 0, 697, 0, 0, 0, 284, 34, 461, 0, 2241 0, 0, 285, 210, 0, 0, 286, 0, 210, 287, 2242 288, 289, 290, 41, 42, 733, 291, 292, 0, 0, 2243 0, 736, 0, 0, 293, 0, 471, 0, 0, 0, 2244 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 2245 164, 378, 0, 0, 0, 0, 0, 0, 296, 1178, 2246 298, 299, 300, 301, 0, 0, 368, 0, 0, 0, 2247 0, 0, 0, 773, 0, 0, 0, 0, 0, 0, 2248 0, 0, 0, 0, 0, 0, 0, 0, 0, 788, 2249 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2250 0, 606, 0, 0, 0, 0, 210, 0, 0, 0, 2251 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2252 210, 0, 368, 368, 0, 0, 815, 0, 0, 0, 2253 0, 0, 0, 0, 0, 825, 0, 0, 0, 0, 2254 504, 0, 828, 0, 0, 281, 282, 835, 283, 0, 2255 0, 0, 0, 0, 0, 0, 0, 0, 850, 0, 2256 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2257 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 2258 285, 0, 461, 0, 286, 0, 0, 287, 288, 289, 2259 290, 41, 42, 0, 291, 292, 0, 0, 0, 890, 2260 0, 210, 293, 0, 0, 0, 0, 0, 0, 0, 2261 0, 0, 0, 0, 210, 0, 0, 294, 0, 378, 2262 0, 0, 379, 0, 0, 0, 296, 380, 298, 299, 2263 300, 301, 0, 210, 0, 835, 0, 0, 0, 0, 2264 0, 741, 0, 0, 1, 2, 3, 4, 5, 6, 2265 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2266 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 2267 0, 26, 27, 28, 29, 0, 0, 30, 0, 0, 2268 31, 32, 0, 217, 0, 0, 0, 0, 0, 0, 2269 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2270 968, 969, 0, 0, 0, 33, 0, 0, 34, 0, 2271 35, 0, 36, 37, 986, 38, 39, 40, 0, 0, 2272 210, 741, 341, 363, 41, 42, 0, 0, 0, 0, 2273 0, 1001, 0, 1002, 0, 0, 0, 1006, 0, 0, 2274 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 2275 43, 0, 44, 0, 0, 0, 413, 0, 0, 0, 2276 45, 0, 0, 413, 0, 0, 0, 0, 0, 0, 2277 368, 368, 0, 0, 210, 0, 0, 0, 0, 217, 2079 2278 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, 2115 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, 2141 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 2142 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, 2279 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 2280 26, 27, 28, 1039, 0, 0, 210, 0, 0, 31, 2281 1040, 0, 0, 0, 0, 0, 0, 210, 0, 0, 2282 0, 0, 0, 1042, 0, 1043, 0, 0, 0, 0, 2283 0, 0, 0, 0, 0, 413, 0, 34, 0, 1055, 2284 0, 0, 109, 0, 38, 39, 1059, 0, 0, 0, 2285 0, 0, 0, 41, 42, 0, 0, 0, 1097, 0, 2286 0, 1098, 0, 0, 0, 0, 0, 0, 0, 0, 2287 0, 0, 0, 0, 0, 0, 0, 0, 0, 598, 2288 0, 44, 0, 0, 0, 0, 0, 0, 0, 110, 2289 0, 413, 0, 0, 0, 368, 0, 0, 210, 413, 2290 589, 0, 413, 592, 0, 0, 0, 0, 0, 0, 2291 0, 0, 363, 0, 0, 0, 622, 0, 0, 0, 2184 2292 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, 2293 0, 0, 0, 0, 0, 640, 0, 0, 341, 0, 2215 2294 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2216 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 2295 0, 0, 0, 461, 0, 461, 0, 0, 0, 0, 2296 281, 282, 0, 283, 0, 413, 0, 0, 1161, 413, 2297 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2298 0, 0, 0, 0, 0, 210, 0, 0, 0, 284, 2299 461, 321, 461, 0, 0, 649, 0, 138, 139, 286, 2300 363, 345, 287, 650, 289, 290, 41, 42, 0, 291, 2301 292, 0, 0, 381, 381, 0, 0, 293, 0, 0, 2302 164, 0, 0, 413, 533, 0, 0, 0, 0, 0, 2303 0, 1226, 294, 0, 651, 0, 652, 379, 0, 0, 2304 0, 296, 380, 298, 299, 300, 301, 0, 0, 0, 2305 0, 0, 0, 0, 413, 0, 0, 363, 0, 0, 2306 1239, 0, 0, 0, 0, 1241, 0, 0, 0, 0, 2307 0, 0, 0, 1245, 0, 0, 0, 0, 0, 0, 2308 0, 210, 0, 0, 321, 0, 0, 0, 0, 0, 2309 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, 2310 341, 363, 0, 0, 1271, 0, 0, 0, 0, 485, 2311 0, 0, 0, 0, 0, 0, 1279, 0, 0, 1280, 2312 0, 1281, 0, 0, 0, 0, 0, 0, 0, 0, 2313 0, 0, 0, 0, 0, 1290, 1291, 0, 0, 0, 2314 0, 0, 0, 0, 0, 0, 413, 413, 0, 0, 2315 0, 0, 0, 0, 0, 0, 0, 1304, 0, 0, 2316 0, 0, 0, 0, 0, 830, 363, 0, 363, 0, 2317 0, 0, 0, 0, 0, 0, 0, 622, 0, 622, 2318 622, 0, 0, 0, 1327, 0, 622, 0, 0, 514, 2319 0, 516, 519, 0, 0, 0, 869, 363, 0, 522, 2320 523, 0, 363, 0, 516, 516, 0, 0, 0, 0, 2321 0, 363, 363, 363, 0, 0, 516, 0, 0, 0, 2322 0, 0, 0, 0, 0, 381, 0, 0, 0, 0, 2323 363, 0, 0, 0, 0, 413, 912, 0, 0, 413, 2324 915, 0, 0, 0, 0, 0, 917, 0, 0, 0, 2325 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 2326 0, 0, 0, 0, 341, 363, 413, 0, 413, 0, 2327 0, 0, 413, 0, 0, 0, 0, 0, 0, 281, 2328 282, 1397, 283, 1398, 0, 0, 0, 0, 516, 0, 2329 0, 0, 0, 0, 0, 0, 1407, 0, 1408, 0, 2330 0, 0, 0, 0, 363, 622, 0, 0, 284, 0, 2331 0, 0, 0, 0, 285, 0, 1415, 0, 286, 0, 2332 0, 287, 288, 289, 290, 41, 42, 735, 291, 292, 2333 0, 0, 1433, 1435, 0, 0, 293, 210, 0, 0, 2334 341, 363, 0, 0, 1441, 413, 413, 1245, 0, 0, 2335 0, 294, 0, 378, 0, 0, 0, 0, 0, 812, 2336 296, 380, 298, 299, 300, 301, 769, 0, 0, 1464, 2337 0, 0, 0, 0, 0, 0, 0, 0, 1471, 782, 2338 0, 1473, 0, 1475, 1477, 1479, 769, 413, 0, 769, 2339 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 2340 792, 793, 830, 363, 0, 0, 0, 622, 0, 622, 2341 0, 0, 0, 0, 0, 0, 0, 0, 0, 622, 2342 0, 0, 814, 0, 0, 1510, 0, 1512, 0, 0, 2343 1245, 0, 823, 0, 0, 0, 0, 0, 0, 345, 2344 0, 0, 0, 0, 782, 1524, 0, 0, 0, 0, 2345 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2346 0, 0, 0, 0, 0, 516, 516, 516, 516, 516, 2217 2347 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, 2348 516, 516, 516, 0, 0, 0, 0, 0, 0, 0, 2349 0, 0, 830, 0, 889, 0, 0, 0, 0, 0, 2350 413, 0, 0, 381, 0, 0, 413, 0, 516, 0, 2351 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, 2352 0, 0, 0, 0, 0, 0, 0, 622, 622, 0, 2261 2353 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, 2354 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 2355 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 2356 413, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2357 17, 18, 19, 20, 21, 22, 23, 24, 25, 413, 2358 1158, 26, 27, 28, 0, 0, 0, 0, 0, 363, 2359 31, 453, 0, 0, 0, 413, 1170, 0, 622, 622, 2360 1175, 0, 0, 0, 0, 0, 0, 516, 0, 0, 2361 363, 363, 0, 0, 0, 0, 0, 0, 34, 782, 2362 0, 991, 0, 0, 0, 38, 39, 996, 0, 516, 2363 0, 0, 0, 0, 1005, 0, 0, 0, 0, 0, 2364 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 2264 2365 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, 2366 0, 0, 454, 0, 0, 0, 711, 0, 0, 0, 2367 110, 830, 413, 1238, 0, 0, 0, 0, 1022, 1023, 2368 0, 345, 0, 0, 622, 0, 0, 0, 516, 0, 2369 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 2324 2370 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2325 2371 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, 2328 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 2329 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, 2332 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, 2372 516, 0, 0, 0, 0, 0, 0, 0, 0, 363, 2373 0, 0, 0, 0, 0, 516, 1053, 0, 0, 0, 2374 381, 0, 0, -517, 0, 0, 1, 2, 3, 4, 2375 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2376 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2377 25, 0, 0, 26, 27, 28, 29, 0, 0, 30, 2378 0, 0, 31, 32, 0, 0, 0, 0, 0, 341, 2343 2379 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, 2380 0, 0, 0, 0, 0, 0, 0, 33, 0, 363, 2381 34, 0, 35, 0, 36, 37, 321, 38, 39, 40, 2382 0, 0, 0, 0, 0, 0, 41, 42, 0, 0, 2383 0, 0, 1139, 1140, 0, 0, 0, 0, 0, 381, 2384 0, 0, 0, 0, 0, 996, 0, 0, 1149, 0, 2385 769, 0, 43, 0, 44, 0, 0, 0, 363, 363, 2386 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 2387 1165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2388 0, 1180, 0, 0, 0, 0, 516, 0, 0, 0, 2355 2389 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, 2358 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, 2390 0, 0, 0, 381, 0, 1198, 0, 0, 0, 0, 2391 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 2392 996, 996, 0, 0, 0, 0, 0, 0, 0, 516, 2393 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2394 0, 1230, 0, 0, 1, 2, 3, 4, 5, 6, 2387 2395 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2388 2396 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, 2397 516, 26, 27, 28, 29, 0, 0, 30, 0, 0, 2398 31, 32, 0, 363, 0, 0, 0, 0, 996, 0, 2395 2399 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2396 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, 2399 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, 2413 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2414 1053, 0, 0, 0, 381, 1, 2, 205, 4, 5, 2415 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2416 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, 2400 0, 0, 0, 0, 0, 33, 0, 889, 34, 0, 2401 35, 0, 36, 37, 0, 38, 39, 40, 0, 0, 2402 0, 0, 1282, 1283, 41, 42, 0, 0, 0, 0, 2403 0, 0, 281, 282, 0, 283, 0, 0, 0, 0, 2404 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 2405 43, 0, 44, 0, 0, 0, -521, 0, 0, 0, 2406 45, 284, 0, 0, 0, 0, 0, 285, 0, 0, 2407 0, 286, 0, 413, 287, 288, 289, 290, 41, 42, 2408 0, 291, 292, 0, 0, 0, 516, 0, 0, 293, 2409 0, 0, 0, 0, 0, 0, 0, 0, 413, 413, 2410 516, 516, 0, 996, 294, 0, 378, 0, 0, 0, 2411 0, 781, 0, 296, 380, 298, 299, 300, 301, 0, 2412 0, 0, 0, 413, 0, 1, 2, 205, 4, 5, 2444 2413 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2445 2414 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2446 2415 0, 0, 26, 27, 28, 29, 0, 0, 30, 281, 2447 282, 31, 1062, 1063, 0, 1064, 0, 0, 1065, 1066,2416 282, 31, 1062, 1063, 1390, 1064, 769, 0, 1065, 1066, 2448 2417 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,2418 0, 0, 0, 1074, 1075, 0, 33, 0, 284, 34, 2419 0, 35, 0, 36, 649, 0, 38, 39, 286, 0, 2451 2420 0, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2452 2421 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, … … 2454 2423 0, 294, 0, 1076, 0, 0, 170, 0, 0, 0, 2455 2424 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, 2425 1077, 0, 1450, 0, -129, 0, 0, 0, 0, 0, 2426 1, 2, 205, 4, 5, 6, 7, 8, 9, 10, 2427 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2428 21, 22, 23, 24, 25, 0, 0, 26, 27, 28, 2429 29, 0, 0, 30, 281, 282, 31, 283, 0, 0, 2430 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2431 516, 0, 0, 281, 282, 0, 283, 0, 0, 0, 2432 0, 0, 0, 284, 34, 0, 35, 516, 36, 285, 2433 0, 38, 39, 286, 1516, 0, 287, 288, 289, 290, 2434 41, 42, 284, 291, 292, 0, 0, 0, 285, 0, 2435 0, 293, 286, 0, 0, 287, 288, 289, 290, 41, 2436 42, 0, 291, 292, 0, 0, 294, 0, 1076, 0, 2437 293, 0, 0, 0, 0, 296, 297, 298, 299, 300, 2438 301, 0, 0, 0, 0, 294, 321, 378, 0, -129, 2439 993, 0, 0, 0, 296, 380, 298, 299, 300, 301, 2440 516, 516, 1, 2, 205, 4, 5, 6, 7, 8, 2441 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2442 19, 20, 21, 22, 23, 24, 25, 0, 0, 26, 2443 27, 28, 29, 0, 0, 30, 281, 282, 31, 283, 2444 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2445 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 2446 26, 27, 28, 0, 0, 284, 34, 0, 35, 31, 2447 36, 285, 0, 38, 39, 286, 0, 0, 287, 288, 2448 289, 290, 41, 42, 0, 291, 292, 0, 0, 0, 2449 0, 0, 0, 293, 0, 0, 0, 34, 0, 0, 2450 0, 0, 109, 0, 38, 39, 0, 0, 294, 0, 2451 44, 0, 0, 41, 42, 0, 0, 296, 297, 298, 2452 299, 300, 301, 2, 205, 4, 5, 6, 7, 8, 2453 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2454 19, 20, 21, 22, 23, 24, 25, 0, 0, 26, 2455 27, 28, 0, 0, 0, 0, 281, 282, 31, 283, 2456 0, 0, 0, 8, 9, 10, 11, 12, 13, 14, 2457 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2458 25, -294, 0, 0, 0, 284, 34, 0, 35, 0, 2459 36, 285, 31, 38, 39, 286, 0, 0, 287, 288, 2460 289, 290, 41, 42, 0, 291, 292, 0, 0, 0, 2461 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 2462 34, 0, 0, 0, 0, 0, 0, 0, 294, 0, 2463 343, -294, 0, 0, 0, 781, 0, 296, 344, 298, 2464 299, 300, 301, 2, 205, 4, 5, 6, 7, 8, 2465 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2466 19, 20, 21, 22, 23, 24, 25, 0, 0, 26, 2467 27, 28, 0, 0, 0, 0, 281, 282, 31, 283, 2468 0, 0, 0, 8, 9, 10, 11, 12, 13, 14, 2469 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2470 25, -295, 0, 0, 0, 284, 34, 0, 35, 0, 2471 36, 285, 31, 38, 39, 286, 0, 0, 287, 288, 2472 289, 290, 41, 42, 0, 291, 292, 0, 0, 0, 2473 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 2474 34, 0, 0, 0, 0, 0, 0, 0, 294, 0, 2475 931, -295, 0, 0, 0, 781, 0, 296, 344, 298, 2476 299, 300, 301, 2, 205, 4, 5, 6, 7, 8, 2477 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2478 19, 20, 21, 22, 23, 24, 25, 0, 0, 26, 2479 27, 28, 0, 0, 0, 0, 281, 282, 31, 283, 2480 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2481 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 2482 26, 27, 28, 0, 0, 284, 34, 0, 35, 31, 2483 36, 285, 0, 38, 39, 286, 0, 0, 287, 288, 2484 289, 290, 41, 42, 0, 291, 292, 0, 0, 0, 2485 0, 0, 0, 293, 0, 0, 0, 34, 0, 0, 2486 0, 0, 0, 0, 38, 39, 0, 0, 294, 0, 2487 931, 0, 0, 0, 0, 781, 0, 296, 600, 298, 2488 299, 300, 301, 2, 205, 4, 5, 6, 7, 8, 2489 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2490 19, 20, 21, 22, 23, 24, 25, 0, 0, 26, 2491 27, 28, 0, 0, 0, 0, 281, 282, 31, 283, 2492 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2493 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 2494 26, 27, 28, 0, 0, 284, 34, 0, 35, 31, 2495 36, 285, 0, 38, 39, 286, 0, 0, 287, 288, 2496 289, 290, 41, 42, 0, 291, 292, 0, 0, 0, 2497 0, 0, 0, 293, 0, 0, 0, 34, 0, 0, 2498 0, 0, 0, 0, 206, 39, 0, 0, 294, 0, 2499 343, 0, 0, 0, 0, 0, 0, 296, 344, 298, 2500 299, 300, 301, 2, 205, 4, 5, 6, 7, 8, 2501 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2502 19, 20, 21, 22, 23, 24, 25, 0, 0, 26, 2503 27, 28, 0, 0, 0, 0, 281, 282, 31, 283, 2504 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2505 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2506 0, 0, 0, 0, 0, 284, 34, 0, 35, 0, 2507 36, 285, 0, 38, 39, 286, 0, 0, 287, 288, 2508 289, 290, 41, 42, 0, 291, 292, 0, 0, 0, 2509 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 2510 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 2511 931, 0, 0, 0, 0, 0, 0, 296, 344, 298, 2512 299, 300, 301, 2, 205, 4, 5, 6, 7, 8, 2513 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2514 19, 20, 21, 22, 23, 24, 25, 0, 0, 26, 2515 27, 28, 0, 0, 0, 0, 281, 282, 31, 283, 2516 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2517 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2518 0, 0, 0, 0, 0, 284, 34, 0, 35, 0, 2519 36, 285, 0, 206, 39, 286, 0, 0, 287, 288, 2520 289, 290, 41, 42, 0, 291, 292, 0, 0, 0, 2521 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 2522 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 2523 1020, 0, 0, 0, 0, 0, 0, 296, 1021, 298, 2524 299, 300, 301, 2, 205, 4, 5, 6, 7, 8, 2525 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2526 19, 20, 21, 22, 23, 24, 25, 0, 0, 26, 2527 27, 28, 0, 0, 0, 0, 281, 282, 31, 283, 2528 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2529 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 2530 26, 27, 28, 0, 0, 284, 34, 0, 35, 31, 2531 36, 285, 0, 206, 39, 286, 0, 0, 287, 288, 2532 289, 290, 41, 42, 0, 291, 292, 0, 0, 0, 2533 0, 0, 0, 293, 0, 0, 0, 34, 0, 0, 2534 0, 0, 0, 0, 206, 39, 0, 0, 294, 0, 2535 378, 0, 0, 0, 0, 0, 0, 296, 380, 298, 2536 299, 300, 301, 204, 2, 205, 4, 5, 6, 7, 2537 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2538 18, 19, 20, 21, 22, 23, 24, 25, 0, 270, 2539 26, 27, 28, 0, 0, 0, 0, 0, 0, 31, 2540 0, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2541 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 2542 0, 26, 27, 28, 492, 493, 494, 34, 0, 35, 2543 31, 36, 37, 0, 206, 39, 40, 0, 0, 0, 2544 0, 0, 0, 41, 42, 0, 0, 0, 0, 0, 2545 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 2546 0, 0, 0, 0, 0, 38, 39, 0, 0, 43, 2547 0, 207, 0, 0, 0, 0, 0, 0, 0, 208, 2548 1, 2, 205, 4, 5, 6, 7, 8, 9, 10, 2549 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2550 21, 22, 23, 24, 25, -294, 0, 26, 27, 28, 2551 29, 0, 0, 30, 0, 0, 31, 0, 0, 0, 2552 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2553 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2554 0, 0, 0, 0, 34, 0, 35, 0, 36, 0, 2555 0, 38, 39, 0, 0, -294, 1, 2, 205, 4, 2556 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2557 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2558 25, 0, 0, 26, 27, 28, 29, 0, 44, 30, 2559 0, 0, 31, 0, 0, 0, 110, 0, 0, 0, 2560 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2561 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2562 34, 0, 35, 0, 36, 0, 0, 38, 39, 204, 2563 2, 205, 4, 5, 6, 7, 8, 9, 10, 11, 2564 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2565 22, 23, 24, 25, 0, 0, 26, 27, 28, 0, 2566 0, 0, 0, 0, 44, 31, 0, 0, 0, 0, 2567 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 2568 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2569 0, 0, 0, 34, 0, 35, 0, 36, 0, 0, 2570 206, 39, 0, 2, 205, 4, 5, 6, 7, 8, 2571 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2572 19, 20, 21, 22, 23, 24, 25, 0, 0, 26, 2573 27, 28, 0, 0, 0, 0, 0, 207, 31, 0, 2574 0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 2575 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2576 0, 0, 0, 0, 0, 0, 34, 0, 35, 0, 2577 36, 37, 0, 206, 39, 40, 0, 0, 0, 0, 2578 0, 0, 41, 42, 0, 0, 0, 0, 0, 0, 2579 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2580 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 2581 207, 0, 0, 0, 0, 0, 0, 0, 208, 2, 2582 205, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2583 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2584 23, 24, 25, 0, 0, 26, 27, 28, 0, 0, 2585 0, 0, 0, 0, 31, 0, 0, 0, 0, 8, 2586 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2587 19, 20, 21, 22, 23, 24, 25, 0, 0, 26, 2588 27, 28, 34, 0, 35, 0, 36, 0, 31, 38, 2589 39, 0, 2, 205, 4, 5, 6, 7, 8, 9, 2590 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2591 20, 21, 22, 23, 24, 25, 34, 0, 26, 27, 2592 28, 0, 0, 38, 39, -400, 687, 31, 0, 0, 2593 0, 0, 0, 0, 634, 0, 0, 0, 0, 0, 2594 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2595 0, 0, 0, 0, 0, 34, 0, 35, 643, 36, 2596 338, 0, 38, 39, 0, 0, 0, 0, 110, 0, 2597 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2598 0, 0, 0, 0, 1369, 0, 0, 0, 0, 0, 2599 0, 0, 0, 0, 0, 0, 0, 0, 0, 687, 2600 0, 0, 0, 0, 0, 0, 0, 634, 2, 205, 2601 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 2602 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2603 24, 25, 0, 0, 26, 27, 28, 0, 0, 0, 2604 0, 0, 0, 31, 0, 0, 0, 0, 8, 9, 2605 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2606 20, 21, 22, 23, 24, 25, -294, 0, 26, 27, 2607 28, 34, 0, 35, 0, 36, 0, 31, 38, 39, 2608 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2609 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2610 1371, 0, 0, 0, 0, 34, 0, 0, 0, 0, 2611 37, 0, 336, 337, 40, 687, -294, 0, 0, 0, 2612 0, 41, 42, 634, 2, 205, 4, 5, 6, 7, 2613 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2614 18, 19, 20, 21, 22, 23, 24, 25, 0, 338, 2615 26, 27, 28, 0, 0, 0, 0, 110, 0, 31, 2616 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2617 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2618 0, 0, 0, 0, 0, 0, 0, 34, 0, 35, 2619 0, 36, 0, 0, 206, 39, 0, 2, 205, 4, 2620 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2621 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2622 25, 0, 0, 26, 27, 28, 0, 0, 0, 0, 2623 0, 269, 31, 0, 0, 0, 0, 0, 0, 629, 2624 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2625 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2626 34, 0, 35, 0, 36, 0, 0, 38, 39, 0, 2627 2, 205, 4, 5, 6, 7, 8, 9, 10, 11, 2628 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2629 22, 23, 24, 25, 0, 0, 26, 27, 28, 0, 2630 0, 0, 0, 0, 687, 31, 0, 0, 0, 0, 2631 0, 0, 634, 0, 0, 0, 0, 0, 0, 0, 2632 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2633 0, 0, 0, 34, 0, 35, 0, 36, 0, 0, 2634 38, 39, 0, 2, 205, 4, 5, 6, 7, 8, 2635 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2636 19, 20, 21, 22, 23, 24, 25, 0, 0, 26, 2637 27, 28, 0, 0, 0, 0, 0, 599, 31, 0, 2638 0, 0, 0, 0, 0, 634, 0, 0, 0, 0, 2639 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2640 0, 0, 0, 0, 0, 0, 34, 0, 35, 0, 2641 36, 0, 0, 206, 39, 8, 9, 10, 11, 12, 2642 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2643 23, 24, 25, 0, 0, 26, 27, 28, 0, 0, 2644 0, 0, 281, 282, 31, 283, 0, 0, 0, 0, 2645 207, 0, 0, 0, 0, 0, 0, 0, 270, 0, 2646 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2647 0, 284, 34, 0, 0, 0, 0, 285, 0, 38, 2648 39, 286, 0, 0, 287, 288, 289, 290, 41, 42, 2649 0, 291, 292, 0, 0, 0, 0, 0, 0, 293, 2650 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2651 0, 0, 0, 0, 294, 0, 525, 0, 0, 170, 2652 0, 0, 0, 296, 297, 298, 299, 300, 301, 8, 2653 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2654 19, 20, 21, 22, 23, 24, 25, 0, 0, 26, 2655 27, 28, 0, 0, 0, 0, 281, 282, 31, 283, 2656 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2657 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 2658 26, 27, 28, 0, 0, 284, 34, 0, 0, 31, 2659 0, 285, 0, 38, 39, 286, 0, 0, 287, 288, 2660 289, 290, 41, 42, 0, 291, 292, 0, 0, 0, 2661 0, 0, 0, 293, 0, 0, 0, 34, 0, 0, 2662 0, 0, 37, 0, 336, 337, 40, 0, 294, 0, 2663 599, -3, 0, 41, 42, 0, 0, 296, 600, 298, 2664 299, 300, 301, 8, 9, 10, 11, 12, 13, 14, 2665 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2666 25, 338, 0, 26, 27, 28, 0, 0, 0, 110, 2667 281, 282, 31, 283, 8, 9, 10, 11, 12, 13, 2668 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2669 24, 25, 0, 0, 26, 27, 28, 0, 0, 284, 2670 34, 0, 0, 31, 453, 649, 0, 38, 39, 286, 2671 0, 0, 287, 288, 289, 290, 41, 42, 0, 291, 2672 292, 0, 0, 0, 0, 0, 0, 293, 0, 0, 2673 0, 34, 0, 0, 0, 0, 0, 0, 38, 39, 2674 0, 0, 294, -35, 766, 0, 0, 0, 0, 0, 2675 0, 296, 297, 298, 299, 300, 301, 8, 9, 10, 2676 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2677 21, 22, 23, 24, 25, 454, 0, 26, 27, 28, 2678 0, 0, 0, 110, 281, 282, 31, 283, 0, 0, 2679 0, 0, 0, 0, 0, 8, 9, 10, 11, 12, 2680 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2681 23, 24, 25, 284, 34, 26, 27, 28, 0, 285, 2682 0, 38, 39, 286, 31, 0, 287, 288, 289, 290, 2683 41, 42, 0, 291, 292, 0, 0, 0, 0, 0, 2684 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 2685 0, 0, 34, 0, 0, 0, 294, 0, 295, 38, 2686 39, 0, 0, 0, 0, 296, 297, 298, 299, 300, 2687 301, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2688 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 2689 0, 26, 27, 28, 643, 0, 338, 0, 281, 282, 2690 31, 283, 0, 0, 634, 0, 0, 0, 0, 8, 2691 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2692 19, 20, 21, 22, 23, 24, 25, 284, 34, 26, 2693 27, 28, 0, 285, 0, 38, 39, 286, 31, 0, 2694 287, 288, 289, 290, 41, 42, 0, 291, 292, 0, 2695 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 2696 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 2697 294, 0, 156, 38, 39, 0, 0, 0, 0, 296, 2698 297, 298, 299, 300, 301, 8, 9, 10, 11, 12, 2699 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2700 23, 24, 25, 0, 0, 26, 27, 28, 0, 0, 2701 256, 0, 281, 282, 31, 283, 0, 0, 110, 0, 2702 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2703 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2704 0, 284, 34, 0, 0, 0, 0, 285, 0, 38, 2705 39, 286, 0, 0, 287, 288, 289, 290, 41, 42, 2706 0, 291, 292, 0, 0, 0, 0, 0, 0, 293, 2707 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2708 0, 0, 0, 0, 294, 0, 599, 0, 0, 0, 2709 0, 0, 0, 296, 600, 298, 299, 300, 301, 8, 2710 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2711 19, 20, 21, 22, 23, 24, 25, 0, 0, 26, 2712 27, 28, 0, 0, 0, 0, 281, 282, 31, 283, 2713 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2714 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 2715 26, 27, 28, 0, 0, 284, 34, 0, 0, 31, 2716 0, 285, 0, 38, 39, 286, 0, 0, 287, 288, 2717 289, 290, 41, 42, 0, 291, 292, 0, 0, 0, 2718 0, 0, 0, 293, 0, 0, 0, 34, 0, 0, 2719 0, 0, 37, 0, 38, 39, 40, 0, 294, 0, 2720 378, 0, 0, 41, 42, 0, 0, 296, 380, 298, 2721 299, 300, 301, 0, 0, 0, 0, 0, 0, 0, 2722 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 2723 0, 44, 0, 0, 0, 0, 0, 0, 0, 45, 2724 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2725 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 2726 26, 27, 28, 0, 0, 0, 0, 0, 0, 31, 2727 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2728 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 2729 26, 27, 28, 0, 0, 0, 0, 34, 0, 31, 2730 0, 0, 37, 0, 206, 39, 40, 0, 0, 0, 2731 0, 0, 0, 41, 42, 0, 0, 0, 0, 0, 2732 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 2733 0, 0, 37, 0, 336, 337, 40, 0, 0, 43, 2734 0, 269, 0, 41, 42, 0, 0, 0, 0, 208, 2735 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2736 0, 0, 0, 0, 0, 0, 0, 0, 0, 643, 2737 0, 338, 0, 0, 0, 0, 0, 0, 0, 634, 2738 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2739 18, 19, 20, 21, 22, 23, 24, 25, -294, 0, 2740 26, 27, 28, 0, 0, 0, 0, 0, 0, 31, 2741 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2742 18, 19, 20, 21, 22, 23, 24, 25, -294, 0, 2743 26, 27, 28, 0, 0, 0, 0, 34, 0, 31, 2744 0, 0, 0, 0, 38, 39, 0, 0, -294, 0, 2745 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2746 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 2747 0, 0, 0, 0, 38, 39, 0, 0, -294, 643, 2748 0, 338, 0, 0, 0, 0, 0, 0, 0, 110, 2749 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2750 0, 0, 0, 0, 0, 0, 0, 0, 0, 643, 2751 0, 338, 0, 0, 0, 0, 0, 0, 0, 634, 2752 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2753 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 2754 26, 27, 28, 0, 0, 0, 0, 0, 0, 31, 2755 453, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2756 17, 18, 19, 20, 21, 22, 23, 24, 25, -294, 2757 0, 26, 27, 28, 0, 0, 0, 34, 0, 0, 2758 31, 0, 0, 0, 38, 39, 0, 0, 0, 0, 2759 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2760 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 2761 0, 0, 0, 0, 0, 38, 39, 0, 0, -294, 2762 0, 454, 0, 0, 0, 947, 0, 0, 0, 110, 2763 0, 0, 0, 8, 9, 10, 11, 12, 13, 14, 2764 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2765 25, 0, 338, 26, 27, 28, 0, 0, 0, 0, 2766 110, 0, 31, 453, 8, 9, 10, 11, 12, 13, 2767 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2768 24, 25, 0, 0, 26, 27, 28, 0, 0, 0, 2769 34, 0, 0, 31, 0, 0, 0, 38, 39, 0, 2770 0, 0, 8, 9, 10, 11, 12, 13, 14, 15, 2771 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2772 0, 34, 26, 27, 28, 0, 0, 0, 38, 39, 2773 0, 31, 0, 0, 454, 0, 0, 0, 1235, 0, 2774 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 2775 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 2776 0, 0, 0, 0, 0, 156, 206, 39, 0, 0, 2777 0, 0, 0, 110, 0, 8, 9, 10, 11, 12, 2778 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2779 23, 24, 25, 0, 0, 26, 27, 28, 0, 0, 2780 0, 0, 0, 269, 31, 0, 0, 0, 0, 0, 2781 0, 270, 0, 8, 9, 10, 11, 12, 13, 14, 2782 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2783 25, 0, 34, 26, 27, 28, 0, 0, 0, 38, 2784 39, 0, 31, 8, 9, 10, 11, 12, 13, 14, 2785 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2786 25, 0, 0, 26, 27, 28, 0, 0, 0, 0, 2787 34, 0, 31, 0, 0, 0, 256, 38, 39, 0, 2788 0, 0, 0, 0, 634, 0, 0, 0, 0, 0, 2789 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2790 34, 0, 0, 0, 0, 0, 0, 38, 39, 0, 2791 0, 0, 0, 0, 338, 0, 0, 0, 0, 0, 2792 0, 0, 634, 0, 0, 8, 9, 10, 11, 12, 2793 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2794 23, 24, 25, 0, 454, 26, 27, 28, 0, 0, 2795 0, 0, 110, 0, 31, 8, 9, 10, 11, 12, 2796 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2797 23, 24, 25, 0, 0, 26, 27, 28, 0, 0, 2798 0, 0, 34, 0, 31, 0, 0, 0, 0, 206, 2799 39, 0, 0, 8, 9, 10, 11, 12, 13, 14, 2800 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2801 25, 0, 34, 26, 27, 28, 0, 0, 0, 38, 2802 39, 0, 31, 0, 0, 0, 269, 0, 0, 0, 2803 0, 0, 0, 0, 629, 0, 0, 0, 0, 0, 2804 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2805 34, 0, 0, 0, 0, 0, 599, 38, 39, 0, 2806 0, 0, 0, 0, 634, 0, 8, 9, 10, 11, 2807 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2808 22, 23, 24, 25, 0, 0, 26, 27, 28, 0, 2809 0, 0, 0, 0, 338, 31, 0, 0, 0, 0, 2810 0, 0, 110, 0, 8, 9, 10, 11, 12, 13, 2811 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2812 24, 25, 0, 34, 26, 27, 28, 0, 0, 0, 2813 38, 39, 0, 31, 0, 0, 2, 205, 4, 5, 2814 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2815 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2816 0, 34, 26, 27, 28, 0, 0, 44, 206, 39, 2817 0, 31, 0, 281, 282, 110, 283, 1063, 0, 1064, 2818 0, 0, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 2819 0, 0, 1549, 1073, 0, 0, 0, 1074, 1075, 34, 2820 33, 35, 284, 36, 0, 0, 38, 39, 649, 0, 2821 0, 0, 286, 629, 0, 287, 288, 289, 290, 41, 2822 42, 0, 291, 292, 0, 0, 0, 0, 0, 0, 2823 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2824 0, 0, -413, 0, 0, 294, 0, 378, 0, 0, 2825 170, 0, 0, 0, 296, 380, 298, 299, 300, 301, 2826 0, 0, 0, 0, 1077, 0, 281, 282, -129, 283, 2827 1063, 0, 1064, 0, 0, 1065, 1066, 1067, 1068, 1069, 2828 1070, 1071, 1072, 0, 0, 0, 1073, 0, 0, 0, 2829 1074, 1075, 0, 33, 0, 284, 0, 0, 0, 0, 2830 0, 649, 0, 0, 0, 286, 0, 0, 287, 288, 2831 289, 290, 41, 42, 0, 291, 292, 0, 0, 0, 2832 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 2833 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 2834 378, 0, 0, 170, 0, 0, 0, 296, 380, 298, 2835 299, 300, 301, 0, 0, 0, 0, 1077, 0, 0, 2836 0, -129, 2, 205, 4, 5, 6, 7, 8, 9, 2459 2837 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2460 2838 20, 21, 22, 23, 24, 25, 0, 0, 26, 27, 2461 28, 0, 413, 413, 0, 0, 0, 31, 0, 0, 2839 28, 0, 0, 0, 0, 0, 0, 31, 0, 281, 2840 282, 0, 283, 1063, 0, 1064, 1419, 1420, 1065, 1066, 2841 1067, 1068, 1069, 1070, 1071, 1072, 0, 0, 1549, 1073, 2842 0, 0, 0, 1074, 1075, 34, 33, 35, 284, 36, 2843 0, 0, 38, 39, 649, 0, 0, 0, 286, 0, 2844 0, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2845 0, 0, 0, 0, 1328, 0, 293, 0, 0, 0, 2462 2846 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, 2467 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2468 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, 2847 0, 294, 0, 378, 0, 0, 170, 0, 0, 0, 2848 296, 380, 298, 299, 300, 301, 0, 0, 281, 282, 2849 1077, 283, 1063, 0, 1064, 1419, 1420, 1065, 1066, 1067, 2850 1068, 1069, 1070, 1071, 1072, 0, 0, 0, 1073, 0, 2851 0, 0, 1074, 1075, 0, 33, 0, 284, 0, 0, 2852 0, 0, 0, 649, 0, 0, 0, 286, 0, 0, 2853 287, 288, 289, 290, 41, 42, 0, 291, 292, 0, 2854 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 2855 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2856 294, 0, 378, 0, 0, 170, 0, 0, 0, 296, 2857 380, 298, 299, 300, 301, 0, 0, 281, 282, 1077, 2858 283, 1063, 0, 1064, 0, 0, 1065, 1066, 1067, 1068, 2859 1069, 1070, 1071, 1072, 0, 0, 0, 1073, 0, 0, 2860 0, 1074, 1075, 0, 33, 0, 284, 0, 0, 0, 2861 0, 0, 649, 0, 0, 0, 286, 0, 0, 287, 2862 288, 289, 290, 41, 42, 0, 291, 292, 0, 0, 2863 0, 0, 0, 0, 293, 281, 282, 0, 283, 0, 2864 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 2865 0, 378, 0, 0, 170, 0, 0, 0, 296, 380, 2866 298, 299, 300, 301, 284, 0, 0, 0, 1077, 0, 2867 285, 0, 0, 0, 286, 0, 0, 287, 288, 289, 2868 290, 41, 42, 0, 291, 292, 0, 0, 0, 0, 2869 0, 0, 293, 281, 282, 0, 283, 0, 0, 0, 2870 0, 0, 0, 0, 0, 0, 0, 294, 0, 378, 2871 0, 0, 281, 282, 0, 283, 296, 380, 298, 299, 2872 300, 301, 284, 0, 0, 0, 0, 0, 285, 0, 2873 0, 0, 286, 0, 0, 287, 288, 289, 290, 41, 2874 42, 284, 291, 292, 0, 0, 0, 649, 0, 0, 2875 293, 286, 0, 0, 287, 288, 289, 290, 41, 42, 2876 0, 291, 292, 0, 0, 294, 0, 378, 0, 293, 2877 281, 282, 0, 283, 296, 734, 298, 299, 300, 301, 2878 0, 0, 0, 0, 294, 0, 785, 0, 0, 281, 2879 282, 0, 283, 296, 380, 298, 299, 300, 301, 284, 2880 0, 0, 0, 0, 0, 285, 0, 0, 0, 286, 2881 0, 0, 287, 288, 289, 290, 41, 42, 284, 291, 2882 292, 0, 0, 0, 285, 0, 0, 293, 286, 0, 2487 2883 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, 2884 0, 0, 294, 0, 378, 0, 293, 281, 282, 0, 2885 283, 296, 827, 298, 299, 300, 301, 0, 0, 0, 2886 0, 294, 0, 0, 0, 0, 281, 282, 0, 283, 2887 296, 380, 298, 299, 300, 301, 284, 0, 0, 0, 2888 0, 0, 285, 0, 0, 0, 286, 0, 0, 287, 2889 288, 289, 290, 41, 42, 284, 291, 292, 0, 0, 2890 0, 285, 0, 0, 293, 286, 0, 0, 287, 288, 2891 289, 290, 41, 42, 0, 291, 292, 0, 0, 518, 2892 0, 0, 0, 293, 0, 0, 0, 0, 296, 380, 2893 298, 299, 300, 301, 0, 0, 0, 0, 521, 0, 2894 0, 0, 0, 0, 0, 0, 0, 296, 380, 298, 2895 299, 300, 301, 204, 2, 205, 4, 5, 6, 7, 2896 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2897 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 2898 26, 27, 28, 0, 0, 0, 0, 0, 0, 31, 2496 2899 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 2900 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, 2901 0, 0, 0, 0, 0, 0, 0, 34, 0, 35, 2902 0, 36, 0, 0, 206, 39, 474, 2, 205, 4, 2576 2903 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2577 2904 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, … … 2580 2907 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2581 2908 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, 2909 34, 0, 35, 0, 36, 0, 0, 38, 39, 2, 2602 2910 205, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2603 2911 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, 2912 23, 24, 25, 0, 0, 26, 27, 28, 0, 0, 2913 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 2629 2914 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2630 2915 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, 2916 0, 0, 34, 0, 35, 0, 36, 0, 0, 206, 2917 39 2918 }; 2919 2920 #define yypact_value_is_default(yystate) \ 2921 ((yystate) == (-1356)) 2922 2923 #define yytable_value_is_error(yytable_value) \ 2924 YYID (0) 2925 2926 static const yytype_int16 yycheck[] = 2927 { 2928 0, 1, 0, 184, 43, 698, 115, 184, 43, 184, 2929 43, 238, 55, 698, 1, 167, 168, 698, 104, 203, 2930 543, 294, 184, 455, 185, 218, 280, 278, 456, 29, 2931 30, 656, 32, 184, 32, 348, 611, 184, 520, 185, 2932 759, 611, 1, 43, 184, 45, 1006, 45, 186, 629, 2933 499, 579, 609, 0, 503, 55, 902, 999, 462, 1042, 2934 1043, 61, 105, 61, 64, 108, 64, 67, 154, 67, 2935 902, 348, 780, 43, 43, 609, 609, 32, 39, 51, 2936 67, 81, 82, 264, 777, 32, 1419, 264, 609, 264, 2937 1338, 200, 777, 609, 28, 1055, 777, 529, 723, 63, 2938 95, 1062, 264, 609, 265, 105, 699, 39, 108, 110, 2939 417, 82, 43, 264, 699, 115, 117, 264, 109, 265, 2940 1475, 497, 260, 261, 264, 609, 64, 363, 721, 82, 2941 437, 367, 39, 0, 612, 130, 721, 109, 445, 110, 2942 618, 1074, 1075, 344, 78, 184, 146, 82, 146, 184, 2943 111, 184, 425, 426, 154, 1510, 0, 1512, 111, 159, 2944 1493, 159, 1043, 425, 426, 32, 107, 227, 132, 0, 2945 1, 109, 109, 109, 217, 111, 255, 109, 39, 111, 2946 0, 1, 283, 119, 184, 185, 246, 185, 32, 0, 2947 131, 39, 0, 1441, 72, 296, 297, 64, 44, 45, 2948 200, 32, 109, 39, 111, 83, 84, 308, 208, 1142, 2949 208, 680, 32, 39, 184, 184, 409, 217, 495, 812, 2950 220, 32, 220, 744, 32, 264, 110, 227, 271, 264, 2951 1062, 264, 116, 64, 109, 278, 67, 613, 744, 501, 2952 513, 617, 242, 344, 405, 518, 246, 67, 521, 11, 2953 250, 251, 250, 184, 132, 341, 131, 511, 520, 405, 2954 744, 109, 638, 111, 264, 265, 642, 265, 0, 115, 2955 109, 271, 111, 109, 109, 111, 851, 45, 278, 380, 2956 119, 851, 839, 109, 370, 111, 395, 82, 489, 110, 2957 718, 819, 251, 293, 455, 250, 117, 890, 611, 85, 2958 32, 1009, 575, 250, 347, 839, 839, 1290, 1291, 455, 2959 45, 43, 82, 45, 423, 1257, 44, 45, 839, 112, 2960 429, 364, 117, 839, 586, 368, 487, 113, 328, 61, 2961 328, 114, 64, 839, 293, 67, 116, 82, 417, 109, 2962 96, 487, 110, 1304, 3, 112, 815, 347, 348, 116, 2963 44, 45, 1071, 220, 3, 839, 825, 489, 437, 116, 2964 1241, 597, 72, 841, 364, 110, 445, 123, 368, 82, 2965 72, 840, 117, 83, 84, 110, 72, 145, 0, 379, 2966 1226, 83, 84, 250, 691, 978, 114, 83, 84, 220, 2967 960, 644, 645, 978, 1226, 395, 109, 96, 129, 600, 2968 131, 111, 959, 0, 640, 405, 250, 405, 1526, 662, 2969 1291, 255, 109, 513, 146, 515, 1009, 119, 518, 250, 2970 114, 521, 676, 423, 123, 959, 959, 159, 629, 429, 2971 250, 431, 1415, 634, 1526, 1553, 132, 1496, 72, 250, 2972 208, 1021, 250, 1502, 255, 131, 532, 1407, 1408, 83, 2973 84, 116, 184, 185, 1546, 455, 557, 558, 559, 112, 2974 460, 1553, 109, 116, 1523, 465, 1059, 132, 116, 1528, 2975 238, 110, 1304, 208, 474, 471, 208, 111, 117, 479, 2976 109, 110, 349, 736, 132, 115, 116, 487, 220, 487, 2977 109, 491, 131, 491, 80, 495, 697, 873, 498, 600, 2978 500, 131, 270, 1464, 239, 657, 938, 758, 762, 109, 2979 1471, 643, 644, 645, 946, 474, 1141, 698, 250, 968, 2980 520, 698, 1004, 698, 928, 111, 109, 113, 666, 297, 2981 662, 117, 264, 109, 1415, 270, 698, 537, 851, 700, 2982 540, 1134, 542, 543, 491, 109, 1116, 698, 116, 1134, 2983 116, 698, 1030, 1031, 700, 664, 72, 110, 698, 294, 2984 992, 520, 297, 1524, 132, 697, 132, 83, 84, 110, 2985 1039, 1040, 773, 417, 851, 828, 344, 110, 537, 1423, 2986 112, 540, 110, 542, 543, 1304, 116, 630, 116, 965, 2987 590, 30, 110, 437, 830, 111, 328, 597, 834, 1192, 2988 1193, 445, 132, 646, 736, 110, 417, 1192, 1193, 609, 2989 696, 611, 691, 480, 90, 91, 348, 119, 661, 643, 2990 644, 645, 124, 125, 491, 109, 437, 111, 1097, 1098, 2991 630, 590, 1464, 734, 445, 80, 1132, 116, 662, 1471, 2992 1136, 773, 81, 82, 72, 112, 646, 491, 76, 116, 2993 126, 127, 652, 132, 733, 83, 84, 425, 426, 116, 2994 491, 661, 1381, 663, 664, 665, 111, 110, 113, 116, 2995 110, 491, 117, 405, 1102, 132, 116, 1521, 489, 780, 2996 491, 109, 1526, 491, 680, 132, 772, 964, 924, 116, 2997 115, 119, 1524, 109, 116, 888, 828, 109, 698, 111, 2998 700, 116, 1546, 109, 663, 132, 665, 119, 116, 1553, 2999 132, 109, 736, 713, 116, 758, 909, 132, 453, 719, 3000 64, 456, 110, 455, 132, 68, 827, 462, 116, 72, 3001 132, 731, 75, 501, 77, 72, 10, 11, 12, 13, 3002 14, 84, 894, 970, 744, 745, 83, 84, 110, 1468, 3003 72, 1470, 520, 109, 116, 111, 132, 116, 758, 491, 3004 3, 83, 84, 495, 631, 39, 112, 10, 11, 12, 3005 13, 14, 731, 132, 111, 110, 110, 938, 513, 109, 3006 515, 116, 116, 518, 112, 946, 521, 109, 116, 110, 3007 598, 132, 938, 67, 112, 116, 39, 1320, 116, 110, 3008 946, 110, 1271, 242, 828, 116, 1525, 116, 109, 1402, 3009 1279, 1280, 1281, 109, 45, 111, 110, 1402, 586, 815, 3010 1021, 110, 116, 112, 67, 110, 1419, 116, 114, 825, 3011 61, 116, 600, 64, 1419, 110, 67, 1530, 109, 839, 3012 111, 116, 131, 132, 840, 1530, 1, 691, 72, 1530, 3013 1034, 851, 76, 72, 114, 74, 75, 724, 1327, 83, 3014 84, 629, 64, 72, 83, 84, 634, 1103, 211, 132, 3015 110, 738, 121, 122, 83, 84, 116, 609, 1132, 611, 3016 691, 132, 1136, 1137, 114, 109, 697, 111, 109, 733, 3017 45, 109, 72, 111, 894, 119, 76, 88, 89, 1492, 3018 1493, 901, 902, 83, 84, 1057, 110, 1492, 1493, 82, 3019 1042, 110, 116, 110, 116, 146, 109, 116, 111, 116, 3020 1021, 110, 733, 109, 924, 110, 109, 116, 159, 109, 3021 112, 116, 1205, 1206, 109, 1208, 111, 82, 938, 119, 3022 379, 1214, 120, 902, 1217, 109, 946, 111, 129, 104, 3023 564, 565, 566, 567, 185, 110, 109, 159, 111, 128, 3024 1161, 1062, 773, 94, 964, 832, 698, 72, 700, 74, 3025 75, 64, 92, 93, 85, 86, 87, 208, 83, 84, 3026 115, 116, 969, 718, 984, 109, 110, 111, 81, 220, 3027 145, 116, 117, 993, 109, 110, 111, 1251, 109, 154, 3028 111, 1001, 113, 114, 1004, 703, 1006, 705, 351, 114, 3029 353, 111, 744, 745, 131, 1124, 110, 111, 220, 58, 3030 59, 460, 109, 116, 109, 984, 465, 835, 112, 1161, 3031 109, 110, 111, 115, 116, 902, 109, 110, 111, 109, 3032 1241, 112, 1001, 1039, 1040, 1004, 110, 1006, 110, 204, 3033 58, 59, 60, 208, 110, 1055, 258, 110, 902, 498, 3034 262, 500, 116, 117, 110, 1065, 159, 110, 1068, 1069, 3035 1070, 902, 112, 1505, 116, 117, 72, 1178, 74, 75, 3036 76, 111, 902, 238, 239, 1339, 112, 83, 84, 1343, 3037 131, 902, 116, 1093, 902, 114, 1055, 328, 441, 44, 3038 45, 1097, 1098, 109, 1377, 112, 1065, 839, 110, 1068, 3039 1069, 1070, 110, 109, 72, 270, 74, 75, 273, 851, 3040 1263, 1264, 1265, 1555, 1124, 83, 84, 220, 112, 4, 3041 5, 6, 7, 8, 9, 1221, 560, 561, 969, 294, 3042 112, 112, 297, 562, 563, 568, 569, 349, 112, 969, 3043 117, 109, 3, 29, 117, 117, 114, 1024, 1290, 10, 3044 11, 12, 13, 14, 72, 258, 74, 75, 76, 262, 3045 116, 110, 110, 114, 405, 83, 84, 112, 10, 11, 3046 12, 13, 14, 117, 115, 110, 341, 115, 39, 344, 3047 116, 1445, 115, 928, 69, 1062, 71, 109, 116, 1199, 3048 110, 109, 970, 111, 110, 132, 938, 39, 363, 117, 3049 110, 119, 367, 652, 946, 370, 67, 1204, 1062, 117, 3050 110, 1221, 72, 110, 74, 75, 1226, 110, 430, 110, 3051 3, 1062, 964, 83, 84, 67, 116, 10, 11, 12, 3052 13, 14, 1062, 1239, 4, 5, 6, 7, 8, 9, 3053 110, 1062, 110, 1021, 1062, 110, 349, 132, 1245, 115, 3054 29, 111, 110, 1263, 1264, 1265, 39, 1226, 110, 110, 3055 425, 426, 110, 33, 713, 1271, 110, 109, 480, 111, 3056 719, 902, 110, 1279, 1280, 1281, 110, 119, 72, 1398, 3057 74, 75, 76, 110, 67, 110, 131, 110, 453, 83, 3058 84, 456, 112, 110, 1263, 1264, 1265, 462, 110, 69, 3059 115, 71, 110, 1540, 85, 86, 87, 116, 112, 474, 3060 1320, 1321, 112, 110, 4, 5, 6, 7, 8, 9, 3061 110, 1327, 110, 471, 116, 116, 1203, 430, 109, 114, 3062 111, 117, 113, 114, 499, 112, 501, 110, 503, 1530, 3063 1161, 1338, 116, 1530, 1397, 1530, 110, 116, 513, 1226, 3064 515, 1320, 1321, 518, 116, 520, 521, 1102, 1530, 110, 3065 1531, 117, 1203, 1204, 112, 1375, 109, 532, 1378, 1530, 3066 109, 109, 1226, 1530, 1204, 1531, 109, 480, 109, 69, 3067 1530, 71, 112, 132, 1555, 1226, 1505, 1397, 1398, 115, 3068 110, 603, 110, 110, 129, 114, 1226, 1407, 1408, 1555, 3069 72, 115, 74, 75, 1245, 1226, 1375, 112, 1226, 1378, 3070 132, 83, 84, 1423, 110, 1245, 116, 112, 1428, 631, 3071 1241, 586, 1299, 116, 636, 112, 55, 1304, 110, 110, 3072 110, 47, 597, 112, 1065, 600, 1446, 109, 1407, 1408, 3073 110, 112, 114, 112, 1441, 894, 112, 53, 1458, 112, 3074 1304, 112, 901, 115, 1423, 132, 132, 132, 1299, 1428, 3075 110, 115, 117, 1304, 629, 132, 110, 132, 115, 634, 3076 112, 112, 0, 1, 1304, 640, 105, 1446, 112, 108, 3077 112, 1530, 112, 1304, 112, 1530, 1304, 1530, 112, 1458, 3078 96, 112, 110, 110, 109, 1505, 1506, 1338, 112, 112, 3079 603, 109, 109, 60, 32, 1515, 110, 110, 1338, 114, 3080 132, 1521, 724, 112, 112, 117, 1526, 45, 110, 112, 3081 1530, 1531, 110, 1531, 96, 154, 738, 96, 631, 109, 3082 109, 696, 680, 636, 1544, 132, 1546, 1506, 115, 67, 3083 1550, 112, 110, 1553, 993, 1555, 1515, 1555, 110, 110, 3084 110, 1561, 1521, 718, 51, 1565, 53, 1526, 116, 56, 3085 57, 58, 72, 60, 74, 75, 76, 42, 72, 117, 3086 74, 75, 76, 83, 84, 1544, 104, 1546, 75, 83, 3087 84, 1550, 132, 748, 1553, 132, 192, 1464, 217, 110, 3088 87, 88, 1561, 110, 1471, 1226, 1565, 96, 96, 109, 3089 1441, 72, 132, 74, 75, 76, 132, 772, 110, 215, 3090 1464, 1441, 83, 84, 110, 110, 117, 1471, 146, 225, 3091 832, 724, 110, 1464, 132, 115, 154, 155, 112, 112, 3092 1471, 109, 132, 115, 1464, 738, 115, 110, 109, 132, 3093 111, 1471, 271, 1464, 1093, 110, 1464, 1524, 119, 278, 3094 1471, 132, 72, 1471, 74, 75, 76, 185, 110, 110, 3095 1077, 570, 573, 83, 84, 830, 571, 815, 572, 834, 3096 1524, 574, 200, 1226, 64, 203, 204, 825, 1493, 1565, 3097 208, 1383, 1343, 1524, 74, 1137, 1314, 1471, 294, 109, 3098 1321, 111, 840, 1093, 1524, 453, 453, 946, 705, 119, 3099 465, 229, 948, 1524, 993, 233, 1524, 235, 590, 748, 3100 894, 10, 11, 12, 13, 14, 244, 758, 347, 658, 3101 1245, 966, 250, 491, 578, 578, 116, 255, 1473, 832, 3102 1475, 578, -1, -1, -1, 364, -1, 265, -1, 368, 3103 39, -1, -1, -1, 1375, 273, -1, 1378, -1, -1, 3104 1199, -1, -1, -1, -1, -1, -1, -1, -1, 924, 3105 -1, -1, 1540, 928, -1, 1510, -1, 1512, 67, 159, 3106 -1, -1, -1, 72, -1, 74, 75, 76, 72, -1, 3107 74, 75, 76, -1, 83, 84, 0, -1, 1530, 83, 3108 84, -1, 1423, -1, -1, -1, 72, 1428, 74, 75, 3109 76, -1, 431, 968, 969, 970, -1, 83, 84, -1, 3110 109, -1, 1024, 341, -1, 109, 344, 111, 32, -1, 3111 119, -1, 350, -1, -1, 119, -1, 1458, -1, -1, 3112 220, -1, -1, 109, -1, 363, 442, -1, -1, 367, 3113 -1, -1, 370, 119, -1, -1, -1, 344, 345, -1, 3114 -1, -1, -1, 67, -1, -1, 1021, -1, -1, 356, 3115 357, 10, 11, 12, 13, 14, -1, -1, 258, -1, 3116 476, -1, 262, 72, -1, 74, 75, 76, -1, -1, 3117 -1, -1, -1, -1, 83, 84, -1, -1, 278, 417, 3118 39, 1039, 1040, -1, -1, -1, 26, 27, 28, -1, 3119 -1, -1, -1, -1, 432, -1, -1, 513, -1, 437, 3120 109, -1, 518, 1544, -1, 521, -1, 445, 67, 1550, 3121 119, 1024, 10, 11, 12, 13, 14, -1, -1, -1, 3122 1561, -1, -1, -1, 1565, -1, -1, 1102, 1103, -1, 3123 -1, 155, -1, 471, -1, -1, 474, -1, -1, 1097, 3124 1098, 39, -1, -1, 10, 11, 12, 13, 14, 349, 3125 109, 489, 111, 491, -1, -1, -1, 97, 597, 99, 3126 119, 499, -1, -1, -1, 503, -1, -1, -1, 67, 3127 -1, -1, -1, 39, 72, -1, 74, 75, 76, -1, 3128 -1, 1203, -1, -1, 124, 83, 84, -1, -1, -1, 3129 -1, 630, -1, -1, 532, 533, -1, -1, -1, -1, 3130 -1, 67, -1, -1, -1, 229, 72, 646, 74, 75, 3131 76, 109, -1, 111, -1, -1, -1, 83, 84, -1, 3132 -1, 119, 661, -1, -1, -1, 250, -1, -1, -1, 3133 430, 255, -1, -1, -1, 10, 11, 12, 13, 14, 3134 180, 579, -1, 109, -1, 111, 1221, 447, 188, -1, 3135 190, 191, -1, 119, -1, 195, -1, 197, 198, 597, 3136 598, -1, 600, 679, 39, -1, -1, -1, -1, -1, 3137 1245, -1, 688, 611, -1, -1, 692, 1299, -1, -1, 3138 480, 1239, -1, 10, 11, 12, 13, 14, -1, -1, 3139 1203, 629, 67, -1, -1, -1, 634, 72, -1, 74, 3140 75, 76, 640, -1, -1, 643, 644, 645, 83, 84, 3141 -1, -1, 39, 1271, -1, -1, -1, -1, -1, 758, 3142 -1, 1279, 1280, 1281, 662, -1, 350, 267, -1, -1, 3143 -1, -1, -1, -1, 109, -1, 111, -1, -1, -1, 3144 67, -1, 680, -1, 119, 72, -1, 74, 75, 76, 3145 -1, -1, -1, 691, -1, -1, 83, 84, 696, 697, 3146 -1, -1, 700, 1338, -1, -1, -1, -1, -1, 1327, 3147 -1, -1, 10, 11, 12, 13, 14, -1, -1, -1, 3148 -1, -1, 109, -1, -1, -1, 1299, -1, -1, -1, 3149 -1, -1, 119, 417, -1, 733, -1, -1, 736, -1, 3150 -1, 39, -1, 603, -1, -1, -1, 745, 432, -1, 3151 748, -1, -1, 437, -1, -1, -1, -1, 725, -1, 3152 727, 445, -1, -1, -1, -1, -1, 734, 735, 67, 3153 -1, 631, 739, -1, 772, 773, 636, -1, -1, -1, 3154 778, -1, -1, -1, 751, -1, -1, 471, -1, 756, 3155 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 3156 -1, -1, -1, -1, -1, 489, 1441, 491, -1, -1, 3157 -1, 109, -1, 111, -1, 782, -1, 815, -1, -1, 3158 -1, 119, -1, -1, 131, 924, -1, 825, -1, -1, 3159 828, -1, 830, -1, -1, 833, 834, 835, 1473, -1, 3160 1475, -1, 840, -1, -1, -1, -1, -1, -1, 533, 3161 926, -1, 850, -1, -1, -1, -1, -1, -1, -1, 3162 827, -1, -1, -1, 724, -1, -1, -1, -1, -1, 3163 -1, -1, -1, -1, -1, 1510, -1, 1512, 738, -1, 3164 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3165 20, 21, 22, 23, 24, 25, 26, 27, 758, -1, 3166 30, 31, 32, -1, 902, 1540, -1, -1, -1, 39, 3167 -1, -1, -1, -1, 598, -1, -1, 884, 885, 886, 3168 887, -1, 889, -1, -1, -1, 924, -1, 10, 11, 3169 12, 13, 14, -1, -1, -1, 0, 67, 905, -1, 3170 -1, -1, 72, -1, 74, 75, 76, -1, -1, -1, 3171 -1, -1, 919, 83, 84, -1, -1, 39, -1, 643, 3172 644, 645, 960, -1, -1, -1, -1, -1, 32, -1, 3173 968, 969, 832, -1, -1, -1, -1, -1, 662, 109, 3174 -1, 111, 582, 583, -1, 67, -1, -1, 986, 119, 3175 72, 958, -1, -1, 76, -1, 680, 1073, -1, -1, 3176 -1, 83, 84, 67, -1, -1, -1, 691, -1, -1, 3177 -1, -1, 612, 697, -1, 615, 616, -1, 618, -1, 3178 620, 621, -1, 1021, -1, 625, 626, 109, -1, -1, 3179 -1, 998, -1, -1, -1, -1, 1034, 119, 1005, -1, 3180 -1, 1039, 1040, 1010, 1042, 1043, -1, -1, 1015, 733, 3181 1017, -1, 736, -1, 1021, 1022, 1023, -1, -1, 1026, 3182 -1, -1, -1, -1, 1062, -1, -1, -1, 1035, -1, 3183 -1, -1, 10, 11, 12, 13, 14, -1, -1, -1, 3184 -1, -1, -1, -1, -1, -1, 1053, 1054, -1, 773, 3185 -1, 155, -1, -1, -1, 0, -1, -1, -1, 1097, 3186 1098, 39, -1, -1, 704, 1103, -1, -1, -1, 709, 3187 710, -1, -1, 1080, -1, 715, 1083, -1, -1, -1, 3188 -1, -1, 1221, -1, -1, -1, -1, 32, -1, 67, 3189 -1, 815, -1, -1, 72, -1, -1, -1, 76, -1, 3190 -1, 825, -1, -1, 828, 83, 84, -1, -1, 833, 3191 -1, 835, -1, -1, 1121, -1, 840, -1, -1, -1, 3192 1127, 1128, 67, 1161, 1024, -1, -1, -1, -1, -1, 3193 -1, 109, 1139, -1, -1, -1, -1, 1144, -1, -1, 3194 1147, 119, 1149, -1, -1, 1152, 250, -1, -1, -1, 3195 -1, 255, 188, -1, -1, -1, -1, -1, 1165, 195, 3196 -1, -1, -1, -1, -1, -1, 1204, -1, -1, -1, 3197 -1, 1178, 0, 1180, 1181, 1182, 1183, -1, 902, -1, 3198 -1, -1, -1, 1221, -1, -1, -1, -1, 1226, 1196, 3199 -1, 1198, -1, -1, -1, 1202, -1, 1313, -1, -1, 3200 -1, 1239, -1, 1241, 32, 0, 1, 1245, -1, -1, 3201 155, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3202 -1, -1, -1, -1, 1231, 1232, -1, -1, -1, -1, 3203 -1, 267, -1, 1271, -1, -1, -1, 32, -1, 67, 3204 -1, 1279, 1280, 1281, -1, -1, 350, -1, -1, -1, 3205 -1, -1, 1290, 1291, -1, -1, -1, -1, 1397, -1, 3206 -1, -1, 986, -1, -1, -1, 1304, -1, -1, 64, 3207 -1, -1, 67, -1, -1, 1282, 1283, -1, -1, -1, 3208 -1, -1, -1, -1, -1, 1292, -1, 323, -1, 1327, 3209 -1, -1, -1, -1, -1, 331, -1, -1, 334, -1, 3210 1338, -1, -1, 1203, -1, 250, -1, -1, -1, -1, 3211 255, -1, -1, 417, -1, 1039, 1040, -1, 1042, 1043, 3212 -1, -1, -1, -1, -1, -1, -1, 155, 432, -1, 3213 -1, -1, -1, 437, -1, -1, -1, 1344, 1062, -1, 3214 -1, 445, -1, -1, -1, -1, -1, -1, -1, 1356, 3215 -1, 1358, 1359, 1360, -1, -1, 1472, -1, 1474, -1, 3216 155, 397, -1, 1370, -1, 401, -1, 471, -1, -1, 3217 -1, -1, 1379, 1097, 1098, -1, -1, 1415, -1, -1, 3218 -1, -1, -1, -1, -1, 489, -1, 491, 1395, -1, 3219 -1, -1, -1, 1509, -1, 1511, -1, -1, -1, 1299, 3220 -1, -1, -1, 1441, -1, 350, -1, -1, -1, -1, 3221 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3222 -1, -1, 250, -1, -1, 220, 1464, 255, -1, 533, 3223 -1, -1, -1, 1471, -1, -1, -1, 1161, 1554, -1, 3224 1556, -1, -1, -1, 1451, 1452, -1, -1, -1, -1, 3225 486, -1, -1, 1569, 1570, 250, -1, 1464, -1, 1099, 3226 -1, -1, -1, -1, 1471, -1, -1, -1, -1, -1, 3227 -1, -1, 417, -1, -1, -1, -1, -1, -1, -1, 3228 1204, -1, -1, -1, -1, -1, 1524, 432, -1, -1, 3229 -1, -1, 437, 1531, 598, -1, -1, 1504, -1, -1, 3230 445, 1508, 1226, -1, -1, -1, -1, -1, -1, -1, 3231 -1, -1, -1, -1, -1, 1239, -1, 1241, -1, -1, 3232 -1, -1, 350, -1, -1, -1, 471, -1, -1, -1, 3233 1537, -1, 1539, -1, -1, -1, -1, -1, -1, 643, 3234 644, 645, 578, 579, 489, -1, 491, 1271, -1, -1, 3235 -1, -1, -1, -1, -1, 1279, 1280, 1281, 662, -1, 3236 1567, 1568, -1, -1, -1, -1, 1290, 1291, 1575, 1576, 3237 -1, -1, -1, -1, -1, -1, 680, -1, -1, -1, 3238 1304, -1, -1, 1223, -1, -1, -1, 691, 533, 417, 3239 -1, -1, -1, 697, -1, -1, -1, -1, -1, -1, 3240 -1, -1, -1, 1327, 432, -1, -1, -1, -1, 437, 3241 -1, -1, -1, -1, -1, -1, -1, 445, -1, -1, 3242 -1, -1, -1, -1, -1, -1, -1, -1, -1, 733, 3243 -1, 667, 736, -1, -1, 671, -1, 432, -1, -1, 3244 -1, -1, -1, 471, -1, -1, -1, -1, -1, -1, 3245 -1, -1, -1, 598, -1, -1, -1, -1, -1, -1, 3246 -1, 489, -1, 491, -1, -1, -1, -1, 704, 773, 3247 -1, -1, -1, 10, 11, 12, 13, 14, 15, 16, 3248 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3249 27, 1415, -1, -1, -1, -1, 491, -1, 643, 644, 3250 645, -1, 39, -1, -1, 533, -1, -1, -1, -1, 3251 -1, 815, -1, -1, -1, -1, -1, 662, -1, -1, 3252 -1, 825, -1, -1, 828, -1, -1, -1, -1, 833, 3253 67, 835, -1, -1, -1, 680, 840, -1, 533, -1, 3254 1464, -1, -1, -1, -1, -1, 691, 1471, -1, -1, 3255 -1, -1, 697, -1, -1, -1, -1, -1, -1, -1, 3256 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3257 598, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3258 -1, -1, -1, 819, -1, -1, -1, -1, 733, -1, 3259 -1, 736, -1, -1, -1, 26, 27, 28, 902, -1, 3260 1524, -1, -1, 598, -1, -1, -1, -1, -1, -1, 3261 -1, -1, -1, -1, -1, 643, 644, 645, -1, -1, 3262 -1, -1, -1, -1, -1, -1, -1, -1, 773, -1, 3263 -1, -1, -1, -1, 662, -1, -1, -1, -1, -1, 3264 -1, -1, -1, -1, -1, -1, -1, -1, 643, 644, 3265 645, -1, 680, -1, -1, -1, -1, -1, -1, -1, 3266 -1, -1, -1, 691, -1, -1, 97, 662, 99, 697, 3267 815, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3268 825, -1, 986, 828, -1, -1, -1, -1, 833, -1, 3269 835, -1, -1, -1, -1, 840, 932, -1, -1, -1, 3270 -1, -1, -1, -1, -1, 733, -1, -1, 736, 4, 2640 3271 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2641 3272 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, 3273 25, 26, 27, -1, -1, 1039, 1040, -1, 1042, 1043, 3274 -1, 736, -1, -1, 39, 773, -1, -1, -1, 180, 3275 -1, -1, -1, -1, -1, -1, -1, 902, 1062, 190, 3276 191, -1, -1, -1, 195, -1, 197, 198, -1, -1, 3277 -1, -1, 67, -1, 69, 1011, 71, 72, -1, 74, 3278 75, 76, -1, -1, -1, -1, -1, 815, 83, 84, 3279 -1, 1027, -1, 1097, 1098, -1, -1, 825, -1, -1, 3280 828, -1, -1, -1, -1, 833, -1, 835, -1, -1, 3281 -1, -1, 840, -1, 10, 11, 12, 13, 14, 15, 2655 3282 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, 3283 26, 27, 28, 828, 30, 31, 32, -1, -1, -1, 3284 835, 986, -1, 39, -1, -1, -1, -1, -1, -1, 3285 -1, -1, -1, -1, -1, -1, -1, 1161, -1, -1, 3286 -1, -1, -1, -1, -1, -1, -1, -1, 1104, -1, 3287 -1, 67, -1, -1, 902, -1, 72, -1, 74, 75, 3288 76, -1, 78, -1, -1, -1, -1, 83, 84, -1, 3289 -1, -1, -1, -1, 1039, 1040, -1, 1042, 1043, -1, 3290 1204, -1, -1, -1, -1, -1, -1, 902, -1, -1, 3291 -1, -1, -1, 109, -1, 111, -1, 1062, -1, -1, 3292 -1, -1, 1226, 119, -1, 45, -1, -1, -1, -1, 3293 -1, -1, -1, -1, -1, 1239, -1, 1241, -1, -1, 3294 -1, -1, -1, -1, 64, -1, -1, -1, -1, -1, 3295 -1, -1, 1097, 1098, -1, -1, -1, -1, 986, -1, 3296 37, 38, -1, 40, -1, -1, -1, 1271, -1, -1, 3297 -1, -1, -1, -1, 969, 1279, 1280, 1281, -1, -1, 3298 -1, -1, -1, -1, -1, -1, 1290, 1291, -1, 66, 3299 110, 986, -1, -1, -1, 72, 116, -1, -1, 76, 3300 1304, -1, 79, 80, 81, 82, 83, 84, -1, 86, 3301 87, 1039, 1040, -1, 1042, 1043, 1161, 94, -1, -1, 3302 -1, -1, -1, 1327, -1, 145, -1, -1, -1, -1, 3303 -1, -1, 109, -1, 1062, 155, -1, -1, -1, 159, 3304 -1, 118, 119, 120, 121, 122, 123, 1042, 1043, -1, 3305 -1, -1, -1, -1, -1, -1, -1, -1, -1, 1204, 3306 -1, -1, -1, -1, -1, -1, -1, 1062, -1, 1097, 3307 1098, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3308 -1, 1226, -1, -1, -1, -1, -1, -1, 208, -1, 3309 -1, -1, -1, -1, 1239, -1, 1241, -1, -1, -1, 3310 220, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3311 -1, 1415, -1, -1, -1, -1, -1, -1, 238, 239, 3312 -1, -1, -1, -1, -1, -1, 1271, -1, -1, -1, 3313 -1, -1, -1, 1161, 1279, 1280, 1281, -1, -1, -1, 3314 -1, -1, 262, -1, -1, 1290, 1291, -1, -1, -1, 3315 270, 582, 583, -1, -1, -1, -1, -1, -1, 1304, 3316 1464, -1, -1, -1, -1, -1, -1, 1471, -1, -1, 3317 -1, -1, -1, -1, 294, -1, 1204, 297, -1, -1, 3318 -1, 612, 1327, -1, 615, 616, -1, 618, -1, 620, 3319 621, -1, -1, -1, 625, 626, -1, -1, 1226, -1, 3320 -1, -1, -1, -1, -1, -1, -1, -1, 1203, 1204, 3321 -1, 1239, -1, 1241, -1, -1, -1, -1, -1, -1, 3322 1524, -1, -1, -1, 344, -1, -1, -1, -1, 349, 3323 -1, 1226, -1, -1, -1, -1, -1, -1, -1, -1, 3324 -1, -1, -1, 1271, -1, -1, 64, -1, -1, -1, 3325 1245, 1279, 1280, 1281, -1, -1, 74, -1, 76, -1, 3326 78, -1, 1290, 1291, -1, -1, -1, 85, -1, -1, 3327 1415, -1, -1, -1, -1, -1, 1304, -1, 709, 710, 3328 -1, -1, -1, -1, 715, -1, -1, -1, -1, -1, 3329 -1, -1, -1, -1, -1, 1290, 1291, -1, 116, 1327, 3330 118, 119, 120, -1, 1299, 425, 426, -1, -1, 1304, 3331 -1, -1, 432, -1, -1, -1, -1, -1, -1, 1464, 3332 -1, -1, -1, -1, -1, -1, 1471, -1, -1, -1, 3333 -1, -1, -1, 453, -1, -1, 456, -1, -1, -1, 3334 -1, 159, 462, 1338, 3, 4, 5, 6, 7, 8, 3335 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3336 19, 20, 21, 22, 23, 24, 25, 26, 27, 489, 3337 -1, 30, 31, 32, -1, -1, -1, -1, -1, 1524, 3338 39, 501, -1, -1, -1, -1, -1, 1415, -1, -1, 3339 -1, -1, 44, 513, -1, 515, -1, -1, 518, -1, 3340 520, 521, 220, -1, 222, 223, 224, -1, 67, -1, 3341 69, -1, 71, 533, -1, 74, 75, -1, -1, -1, 3342 1415, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3343 -1, -1, -1, -1, -1, -1, 1464, -1, 90, -1, 3344 258, -1, -1, 1471, 262, -1, 1441, -1, 100, -1, 3345 -1, -1, -1, -1, -1, 114, -1, -1, -1, -1, 3346 278, -1, -1, -1, -1, -1, 586, -1, -1, 1464, 3347 -1, -1, -1, -1, -1, -1, 1471, -1, 598, -1, 3348 600, -1, -1, 603, -1, -1, -1, -1, -1, -1, 3349 -1, -1, -1, -1, -1, -1, 1524, -1, -1, -1, 3350 -1, -1, -1, -1, 156, -1, -1, -1, -1, 629, 3351 328, -1, -1, -1, 634, -1, -1, -1, 170, -1, 3352 -1, -1, -1, 643, 644, 645, -1, -1, -1, 1524, 3353 -1, 349, -1, -1, -1, -1, 354, 355, -1, -1, 3354 -1, 193, 662, -1, 362, -1, -1, -1, -1, -1, 3355 -1, -1, -1, -1, -1, 207, -1, -1, -1, -1, 3356 -1, -1, 7, -1, 216, 10, 11, 12, 13, 14, 3357 -1, -1, -1, -1, 226, -1, -1, 697, -1, -1, 3358 -1, -1, -1, -1, -1, -1, -1, 405, -1, -1, 3359 -1, -1, 37, 38, 39, 40, -1, -1, 718, 251, 3360 -1, -1, -1, -1, 256, 423, -1, -1, -1, -1, 3361 428, -1, 430, -1, -1, -1, 736, 269, 738, -1, 3362 -1, 66, 67, 275, -1, 277, -1, 72, -1, 447, 3363 -1, 76, 450, 451, 79, 80, 81, 82, 83, 84, 3364 -1, 86, 87, 295, -1, -1, -1, -1, 466, 94, 3365 -1, -1, -1, 773, -1, -1, -1, -1, -1, -1, 3366 -1, -1, 480, -1, 109, -1, 111, -1, 1099, 487, 3367 -1, -1, -1, 118, 119, 120, 121, 122, 123, -1, 3368 -1, -1, -1, -1, -1, -1, 338, -1, -1, -1, 3369 -1, 343, -1, -1, -1, -1, -1, -1, -1, -1, 3370 -1, -1, -1, -1, -1, -1, -1, -1, 828, -1, 3371 -1, -1, 832, -1, -1, 835, -1, -1, -1, 371, 3372 -1, -1, -1, 375, 376, -1, 378, -1, -1, -1, 3373 -1, -1, -1, 385, 386, -1, 388, 389, -1, 391, 3374 -1, 393, -1, -1, -1, -1, -1, 7, -1, -1, 3375 10, 11, 12, 13, 14, -1, -1, -1, 410, -1, 3376 -1, -1, -1, -1, -1, -1, 418, -1, -1, -1, 3377 -1, -1, -1, -1, -1, -1, -1, 37, 38, 39, 3378 40, -1, -1, -1, -1, 603, -1, -1, -1, -1, 3379 -1, 443, 1223, -1, -1, -1, -1, -1, -1, -1, 3380 -1, -1, 454, -1, -1, -1, 66, 67, 928, -1, 3381 -1, -1, 72, 631, -1, -1, 76, -1, 636, 79, 3382 80, 81, 82, 83, 84, 477, 86, 87, -1, -1, 3383 -1, 483, -1, -1, 94, -1, 488, -1, -1, -1, 3384 -1, -1, -1, -1, -1, -1, -1, -1, -1, 109, 3385 970, 111, -1, -1, -1, -1, -1, -1, 118, 119, 3386 120, 121, 122, 123, -1, -1, 986, -1, -1, -1, 3387 -1, -1, -1, 525, -1, -1, -1, -1, -1, -1, 3388 -1, -1, -1, -1, -1, -1, -1, -1, -1, 541, 3389 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3390 -1, 1021, -1, -1, -1, -1, 724, -1, -1, -1, 3391 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3392 738, -1, 1042, 1043, -1, -1, 578, -1, -1, -1, 3393 -1, -1, -1, -1, -1, 587, -1, -1, -1, -1, 3394 758, -1, 594, -1, -1, 37, 38, 599, 40, -1, 3395 -1, -1, -1, -1, -1, -1, -1, -1, 610, -1, 3396 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3397 -1, -1, -1, -1, 66, -1, -1, -1, -1, -1, 3398 72, -1, 1102, -1, 76, -1, -1, 79, 80, 81, 3399 82, 83, 84, -1, 86, 87, -1, -1, -1, 651, 3400 -1, 819, 94, -1, -1, -1, -1, -1, -1, -1, 3401 -1, -1, -1, -1, 832, -1, -1, 109, -1, 111, 3402 -1, -1, 114, -1, -1, -1, 118, 119, 120, 121, 3403 122, 123, -1, 851, -1, 687, -1, -1, -1, -1, 3404 -1, 1161, -1, -1, 3, 4, 5, 6, 7, 8, 3405 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3406 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, 3407 -1, 30, 31, 32, 33, -1, -1, 36, -1, -1, 3408 39, 40, -1, 1203, -1, -1, -1, -1, -1, -1, 3409 742, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3410 752, 753, -1, -1, -1, 64, -1, -1, 67, -1, 3411 69, -1, 71, 72, 766, 74, 75, 76, -1, -1, 3412 938, 1241, 154, 155, 83, 84, -1, -1, -1, -1, 3413 -1, 783, -1, 785, -1, -1, -1, 789, -1, -1, 3414 -1, -1, -1, -1, -1, -1, 964, -1, -1, -1, 3415 109, -1, 111, -1, -1, -1, 188, -1, -1, -1, 3416 119, -1, -1, 195, -1, -1, -1, -1, -1, -1, 3417 1290, 1291, -1, -1, 992, -1, -1, -1, -1, 1299, 2700 3418 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, 3419 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, 3420 30, 31, 32, 855, -1, -1, 1024, -1, -1, 39, 3421 862, -1, -1, -1, -1, -1, -1, 1035, -1, -1, 3422 -1, -1, -1, 875, -1, 877, -1, -1, -1, -1, 3423 -1, -1, -1, -1, -1, 267, -1, 67, -1, 891, 3424 -1, -1, 72, -1, 74, 75, 898, -1, -1, -1, 3425 -1, -1, -1, 83, 84, -1, -1, -1, 910, -1, 3426 -1, 913, -1, -1, -1, -1, -1, -1, -1, -1, 3427 -1, -1, -1, -1, -1, -1, -1, -1, -1, 931, 3428 -1, 111, -1, -1, -1, -1, -1, -1, -1, 119, 3429 -1, 323, -1, -1, -1, 1415, -1, -1, 1116, 331, 3430 332, -1, 334, 335, -1, -1, -1, -1, -1, -1, 3431 -1, -1, 344, -1, -1, -1, 348, -1, -1, -1, 3159 3432 -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, 3433 -1, -1, -1, -1, -1, 367, -1, -1, 370, -1, 3339 3434 -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, 3435 -1, -1, -1, 1473, -1, 1475, -1, -1, -1, -1, 3436 37, 38, -1, 40, -1, 397, -1, -1, 1020, 401, 3370 3437 -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, 3438 -1, -1, -1, -1, -1, 1203, -1, -1, -1, 66, 3439 1510, 145, 1512, -1, -1, 72, -1, 74, 75, 76, 3440 432, 155, 79, 80, 81, 82, 83, 84, -1, 86, 3441 87, -1, -1, 167, 168, -1, -1, 94, -1, -1, 3442 1540, -1, -1, 455, 1076, -1, -1, -1, -1, -1, 3443 -1, 1083, 109, -1, 111, -1, 113, 114, -1, -1, 3444 -1, 118, 119, 120, 121, 122, 123, -1, -1, -1, 3445 -1, -1, -1, -1, 486, -1, -1, 489, -1, -1, 3446 1112, -1, -1, -1, -1, 1117, -1, -1, -1, -1, 3447 -1, -1, -1, 1125, -1, -1, -1, -1, -1, -1, 3448 -1, 1299, -1, -1, 238, -1, -1, -1, -1, -1, 3449 -1, -1, -1, -1, -1, -1, -1, 529, -1, -1, 3450 532, 533, -1, -1, 1156, -1, -1, -1, -1, 263, 3451 -1, -1, -1, -1, -1, -1, 1168, -1, -1, 1171, 3452 -1, 1173, -1, -1, -1, -1, -1, -1, -1, -1, 3453 -1, -1, -1, -1, -1, 1187, 1188, -1, -1, -1, 3454 -1, -1, -1, -1, -1, -1, 578, 579, -1, -1, 3455 -1, -1, -1, -1, -1, -1, -1, 1209, -1, -1, 3456 -1, -1, -1, -1, -1, 597, 598, -1, 600, -1, 3457 -1, -1, -1, -1, -1, -1, -1, 609, -1, 611, 3458 612, -1, -1, -1, 1236, -1, 618, -1, -1, 281, 3459 -1, 283, 284, -1, -1, -1, 628, 629, -1, 291, 3460 292, -1, 634, -1, 296, 297, -1, -1, -1, -1, 3461 -1, 643, 644, 645, -1, -1, 308, -1, -1, -1, 3462 -1, -1, -1, -1, -1, 379, -1, -1, -1, -1, 3463 662, -1, -1, -1, -1, 667, 668, -1, -1, 671, 3464 672, -1, -1, -1, -1, -1, 678, -1, -1, -1, 3465 -1, -1, 344, -1, -1, -1, -1, -1, -1, -1, 3466 -1, -1, -1, -1, 696, 697, 698, -1, 700, -1, 3467 -1, -1, 704, -1, -1, -1, -1, -1, -1, 37, 3468 38, 1333, 40, 1335, -1, -1, -1, -1, 380, -1, 3469 -1, -1, -1, -1, -1, -1, 1348, -1, 1350, -1, 3470 -1, -1, -1, -1, 736, 737, -1, -1, 66, -1, 3471 -1, -1, -1, -1, 72, -1, 1368, -1, 76, -1, 3472 -1, 79, 80, 81, 82, 83, 84, 481, 86, 87, 3473 -1, -1, 1384, 1385, -1, -1, 94, 1555, -1, -1, 3474 772, 773, -1, -1, 1396, 777, 778, 1399, -1, -1, 3475 -1, 109, -1, 111, -1, -1, -1, -1, -1, 117, 3476 118, 119, 120, 121, 122, 123, 520, -1, -1, 1421, 3477 -1, -1, -1, -1, -1, -1, -1, -1, 1430, 533, 3478 -1, 1433, -1, 1435, 1436, 1437, 540, 819, -1, 543, 3479 -1, -1, -1, -1, -1, -1, 828, -1, -1, -1, 3480 554, 555, 834, 835, -1, -1, -1, 839, -1, 841, 3481 -1, -1, -1, -1, -1, -1, -1, -1, -1, 851, 3482 -1, -1, 576, -1, -1, 1477, -1, 1479, -1, -1, 3483 1482, -1, 586, -1, -1, -1, -1, -1, -1, 593, 3484 -1, -1, -1, -1, 598, 1497, -1, -1, -1, -1, 3416 3485 -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, 3486 -1, -1, -1, -1, -1, 557, 558, 559, 560, 561, 3487 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 3488 572, 573, 574, -1, -1, -1, -1, -1, -1, -1, 3489 -1, -1, 924, -1, 648, -1, -1, -1, -1, -1, 3490 932, -1, -1, 657, -1, -1, 938, -1, 600, -1, 3491 -1, -1, -1, -1, 946, -1, -1, -1, -1, -1, 3492 -1, -1, -1, -1, -1, -1, -1, 959, 960, -1, 3419 3493 -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, 3494 -1, -1, -1, 697, -1, -1, -1, -1, -1, -1, 3495 -1, -1, -1, -1, 986, -1, -1, -1, -1, -1, 3496 992, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3497 19, 20, 21, 22, 23, 24, 25, 26, 27, 1011, 3498 1012, 30, 31, 32, -1, -1, -1, -1, -1, 1021, 3499 39, 40, -1, -1, -1, 1027, 1028, -1, 1030, 1031, 3500 1032, -1, -1, -1, -1, -1, -1, 699, -1, -1, 3501 1042, 1043, -1, -1, -1, -1, -1, -1, 67, 773, 3502 -1, 775, -1, -1, -1, 74, 75, 781, -1, 721, 3503 -1, -1, -1, -1, 788, -1, -1, -1, -1, -1, 3504 -1, -1, 734, -1, -1, -1, -1, -1, -1, -1, 3447 3505 -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, 3506 -1, -1, 111, -1, -1, -1, 115, -1, -1, -1, 3507 119, 1103, 1104, 1105, -1, -1, -1, -1, 832, 833, 3508 -1, 835, -1, -1, 1116, -1, -1, -1, 780, -1, 3509 -1, -1, -1, -1, -1, -1, 850, -1, -1, -1, 3479 3510 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3480 3511 -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, 3512 812, -1, -1, -1, -1, -1, -1, -1, -1, 1161, 3513 -1, -1, -1, -1, -1, 827, 890, -1, -1, -1, 3514 894, -1, -1, 0, -1, -1, 3, 4, 5, 6, 3515 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 3516 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3517 27, -1, -1, 30, 31, 32, 33, -1, -1, 36, 3518 -1, -1, 39, 40, -1, -1, -1, -1, -1, 1221, 3498 3519 -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, 3520 -1, -1, -1, -1, -1, -1, -1, 64, -1, 1241, 3521 67, -1, 69, -1, 71, 72, 970, 74, 75, 76, 3522 -1, -1, -1, -1, -1, -1, 83, 84, -1, -1, 3523 -1, -1, 986, 987, -1, -1, -1, -1, -1, 993, 3524 -1, -1, -1, -1, -1, 999, -1, -1, 1002, -1, 3525 1004, -1, 109, -1, 111, -1, -1, -1, 1290, 1291, 3526 -1, -1, 119, -1, -1, -1, -1, -1, -1, -1, 3527 1024, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3528 -1, 1035, -1, -1, -1, -1, 978, -1, -1, -1, 3510 3529 -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, 3530 -1, -1, -1, 1057, -1, 1059, -1, -1, -1, -1, 3531 -1, -1, -1, -1, -1, -1, -1, 1009, -1, -1, 3532 1074, 1075, -1, -1, -1, -1, -1, -1, -1, 1021, 3533 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3534 -1, 1095, -1, -1, 3, 4, 5, 6, 7, 8, 3542 3535 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3543 3536 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, 3537 1062, 30, 31, 32, 33, -1, -1, 36, -1, -1, 3538 39, 40, -1, 1415, -1, -1, -1, -1, 1142, -1, 3550 3539 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3551 -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, 3540 -1, -1, -1, -1, -1, 64, -1, 1161, 67, -1, 3541 69, -1, 71, 72, -1, 74, 75, 76, -1, -1, 3542 -1, -1, 1176, 1177, 83, 84, -1, -1, -1, -1, 3543 -1, -1, 37, 38, -1, 40, -1, -1, -1, -1, 3544 -1, -1, 1134, -1, -1, -1, -1, -1, -1, -1, 3545 109, -1, 111, -1, -1, -1, 115, -1, -1, -1, 3546 119, 66, -1, -1, -1, -1, -1, 72, -1, -1, 3547 -1, 76, -1, 1505, 79, 80, 81, 82, 83, 84, 3548 -1, 86, 87, -1, -1, -1, 1178, -1, -1, 94, 3549 -1, -1, -1, -1, -1, -1, -1, -1, 1530, 1531, 3550 1192, 1193, -1, 1257, 109, -1, 111, -1, -1, -1, 3551 -1, 116, -1, 118, 119, 120, 121, 122, 123, -1, 3552 -1, -1, -1, 1555, -1, 3, 4, 5, 6, 7, 3599 3553 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3600 3554 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3601 3555 -1, -1, 30, 31, 32, 33, -1, -1, 36, 37, 3602 38, 39, 40, 41, -1, 43, -1, -1, 46, 47,3556 38, 39, 40, 41, 1318, 43, 1320, -1, 46, 47, 3603 3557 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,3558 -1, -1, -1, 61, 62, -1, 64, -1, 66, 67, 3559 -1, 69, -1, 71, 72, -1, 74, 75, 76, -1, 3606 3560 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3607 3561 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, … … 3609 3563 -1, 109, -1, 111, -1, -1, 114, -1, -1, -1, 3610 3564 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, 3614 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, 3565 128, -1, 1406, -1, 132, -1, -1, -1, -1, -1, 3566 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 3567 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3568 23, 24, 25, 26, 27, -1, -1, 30, 31, 32, 3569 33, -1, -1, 36, 37, 38, 39, 40, -1, -1, 3617 3570 -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, 3571 1402, -1, -1, 37, 38, -1, 40, -1, -1, -1, 3572 -1, -1, -1, 66, 67, -1, 69, 1419, 71, 72, 3573 -1, 74, 75, 76, 1488, -1, 79, 80, 81, 82, 3574 83, 84, 66, 86, 87, -1, -1, -1, 72, -1, 3575 -1, 94, 76, -1, -1, 79, 80, 81, 82, 83, 3576 84, -1, 86, 87, -1, -1, 109, -1, 111, -1, 3577 94, -1, -1, -1, -1, 118, 119, 120, 121, 122, 3578 123, -1, -1, -1, -1, 109, 1540, 111, -1, 132, 3579 114, -1, -1, -1, 118, 119, 120, 121, 122, 123, 3580 1492, 1493, 3, 4, 5, 6, 7, 8, 9, 10, 3581 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3582 21, 22, 23, 24, 25, 26, 27, -1, -1, 30, 3583 31, 32, 33, -1, -1, 36, 37, 38, 39, 40, 3584 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3585 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, 3586 30, 31, 32, -1, -1, 66, 67, -1, 69, 39, 3587 71, 72, -1, 74, 75, 76, -1, -1, 79, 80, 3588 81, 82, 83, 84, -1, 86, 87, -1, -1, -1, 3589 -1, -1, -1, 94, -1, -1, -1, 67, -1, -1, 3590 -1, -1, 72, -1, 74, 75, -1, -1, 109, -1, 3591 111, -1, -1, 83, 84, -1, -1, 118, 119, 120, 3592 121, 122, 123, 4, 5, 6, 7, 8, 9, 10, 3593 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3594 21, 22, 23, 24, 25, 26, 27, -1, -1, 30, 3595 31, 32, -1, -1, -1, -1, 37, 38, 39, 40, 3596 -1, -1, -1, 10, 11, 12, 13, 14, 15, 16, 3626 3597 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, 3598 27, 28, -1, -1, -1, 66, 67, -1, 69, -1, 3599 71, 72, 39, 74, 75, 76, -1, -1, 79, 80, 3600 81, 82, 83, 84, -1, 86, 87, -1, -1, -1, 3601 -1, -1, -1, 94, -1, -1, -1, -1, -1, -1, 3602 67, -1, -1, -1, -1, -1, -1, -1, 109, -1, 3603 111, 78, -1, -1, -1, 116, -1, 118, 119, 120, 3604 121, 122, 123, 4, 5, 6, 7, 8, 9, 10, 3605 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3606 21, 22, 23, 24, 25, 26, 27, -1, -1, 30, 3607 31, 32, -1, -1, -1, -1, 37, 38, 39, 40, 3608 -1, -1, -1, 10, 11, 12, 13, 14, 15, 16, 3639 3609 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, 3610 27, 28, -1, -1, -1, 66, 67, -1, 69, -1, 3611 71, 72, 39, 74, 75, 76, -1, -1, 79, 80, 3612 81, 82, 83, 84, -1, 86, 87, -1, -1, -1, 3613 -1, -1, -1, 94, -1, -1, -1, -1, -1, -1, 3614 67, -1, -1, -1, -1, -1, -1, -1, 109, -1, 3615 111, 78, -1, -1, -1, 116, -1, 118, 119, 120, 3616 121, 122, 123, 4, 5, 6, 7, 8, 9, 10, 3617 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3618 21, 22, 23, 24, 25, 26, 27, -1, -1, 30, 3619 31, 32, -1, -1, -1, -1, 37, 38, 39, 40, 3620 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3621 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, 3622 30, 31, 32, -1, -1, 66, 67, -1, 69, 39, 3623 71, 72, -1, 74, 75, 76, -1, -1, 79, 80, 3624 81, 82, 83, 84, -1, 86, 87, -1, -1, -1, 3625 -1, -1, -1, 94, -1, -1, -1, 67, -1, -1, 3626 -1, -1, -1, -1, 74, 75, -1, -1, 109, -1, 3627 111, -1, -1, -1, -1, 116, -1, 118, 119, 120, 3628 121, 122, 123, 4, 5, 6, 7, 8, 9, 10, 3629 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3630 21, 22, 23, 24, 25, 26, 27, -1, -1, 30, 3631 31, 32, -1, -1, -1, -1, 37, 38, 39, 40, 3632 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3633 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, 3634 30, 31, 32, -1, -1, 66, 67, -1, 69, 39, 3635 71, 72, -1, 74, 75, 76, -1, -1, 79, 80, 3636 81, 82, 83, 84, -1, 86, 87, -1, -1, -1, 3637 -1, -1, -1, 94, -1, -1, -1, 67, -1, -1, 3638 -1, -1, -1, -1, 74, 75, -1, -1, 109, -1, 3639 111, -1, -1, -1, -1, -1, -1, 118, 119, 120, 3640 121, 122, 123, 4, 5, 6, 7, 8, 9, 10, 3641 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3642 21, 22, 23, 24, 25, 26, 27, -1, -1, 30, 3643 31, 32, -1, -1, -1, -1, 37, 38, 39, 40, 3651 3644 -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 3645 -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, 3646 -1, -1, -1, -1, -1, 66, 67, -1, 69, -1, 3647 71, 72, -1, 74, 75, 76, -1, -1, 79, 80, 3648 81, 82, 83, 84, -1, 86, 87, -1, -1, -1, 3649 -1, -1, -1, 94, -1, -1, -1, -1, -1, -1, 3650 -1, -1, -1, -1, -1, -1, -1, -1, 109, -1, 3651 111, -1, -1, -1, -1, -1, -1, 118, 119, 120, 3652 121, 122, 123, 4, 5, 6, 7, 8, 9, 10, 3653 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3654 21, 22, 23, 24, 25, 26, 27, -1, -1, 30, 3655 31, 32, -1, -1, -1, -1, 37, 38, 39, 40, 3663 3656 -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 3657 -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, 3658 -1, -1, -1, -1, -1, 66, 67, -1, 69, -1, 3659 71, 72, -1, 74, 75, 76, -1, -1, 79, 80, 3660 81, 82, 83, 84, -1, 86, 87, -1, -1, -1, 3661 -1, -1, -1, 94, -1, -1, -1, -1, -1, -1, 3662 -1, -1, -1, -1, -1, -1, -1, -1, 109, -1, 3663 111, -1, -1, -1, -1, -1, -1, 118, 119, 120, 3664 121, 122, 123, 4, 5, 6, 7, 8, 9, 10, 3665 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3666 21, 22, 23, 24, 25, 26, 27, -1, -1, 30, 3667 31, 32, -1, -1, -1, -1, 37, 38, 39, 40, 3668 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3669 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, 3670 30, 31, 32, -1, -1, 66, 67, -1, 69, 39, 3671 71, 72, -1, 74, 75, 76, -1, -1, 79, 80, 3672 81, 82, 83, 84, -1, 86, 87, -1, -1, -1, 3673 -1, -1, -1, 94, -1, -1, -1, 67, -1, -1, 3674 -1, -1, -1, -1, 74, 75, -1, -1, 109, -1, 3675 111, -1, -1, -1, -1, -1, -1, 118, 119, 120, 3676 121, 122, 123, 3, 4, 5, 6, 7, 8, 9, 3677 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3678 20, 21, 22, 23, 24, 25, 26, 27, -1, 119, 3679 30, 31, 32, -1, -1, -1, -1, -1, -1, 39, 3680 -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3681 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, 3682 -1, 30, 31, 32, 33, 34, 35, 67, -1, 69, 3683 39, 71, 72, -1, 74, 75, 76, -1, -1, -1, 3684 -1, -1, -1, 83, 84, -1, -1, -1, -1, -1, 3685 -1, -1, -1, -1, -1, -1, -1, -1, 67, -1, 3686 -1, -1, -1, -1, -1, 74, 75, -1, -1, 109, 3687 -1, 111, -1, -1, -1, -1, -1, -1, -1, 119, 3688 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 3689 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3690 23, 24, 25, 26, 27, 28, -1, 30, 31, 32, 3691 33, -1, -1, 36, -1, -1, 39, -1, -1, -1, 3675 3692 -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 3693 -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, 3694 -1, -1, -1, -1, 67, -1, 69, -1, 71, -1, 3695 -1, 74, 75, -1, -1, 78, 3, 4, 5, 6, 3731 3696 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 3732 3697 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,3698 27, -1, -1, 30, 31, 32, 33, -1, 111, 36, 3699 -1, -1, 39, -1, -1, -1, 119, -1, -1, -1, 3735 3700 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3736 3701 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3737 67, -1, 69, -1, 71, -1, -1, 74, 75, -1,3702 67, -1, 69, -1, 71, -1, -1, 74, 75, 3, 3738 3703 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 3739 3704 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, … … 3742 3707 -1, -1, 119, -1, -1, -1, -1, -1, -1, -1, 3743 3708 -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, 3709 -1, -1, -1, 67, -1, 69, -1, 71, -1, -1, 3710 74, 75, -1, 4, 5, 6, 7, 8, 9, 10, 3711 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3712 21, 22, 23, 24, 25, 26, 27, -1, -1, 30, 3713 31, 32, -1, -1, -1, -1, -1, 111, 39, -1, 3714 -1, -1, -1, -1, -1, 119, -1, -1, -1, -1, 3747 3715 -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, 3716 -1, -1, -1, -1, -1, -1, 67, -1, 69, -1, 3717 71, 72, -1, 74, 75, 76, -1, -1, -1, -1, 3718 -1, -1, 83, 84, -1, -1, -1, -1, -1, -1, 3719 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3720 -1, -1, -1, -1, -1, -1, -1, -1, 109, -1, 3721 111, -1, -1, -1, -1, -1, -1, -1, 119, 4, 3757 3722 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3758 3723 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, 3724 25, 26, 27, -1, -1, 30, 31, 32, -1, -1, 3725 -1, -1, -1, -1, 39, -1, -1, -1, -1, 10, 3726 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3727 21, 22, 23, 24, 25, 26, 27, -1, -1, 30, 3728 31, 32, 67, -1, 69, -1, 71, -1, 39, 74, 3729 75, -1, 4, 5, 6, 7, 8, 9, 10, 11, 3730 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3731 22, 23, 24, 25, 26, 27, 67, -1, 30, 31, 3732 32, -1, -1, 74, 75, 110, 111, 39, -1, -1, 3733 -1, -1, -1, -1, 119, -1, -1, -1, -1, -1, 3762 3734 -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,3735 -1, -1, -1, -1, -1, 67, -1, 69, 109, 71, 3736 111, -1, 74, 75, -1, -1, -1, -1, 119, -1, 3765 3737 -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, 3738 -1, -1, -1, -1, 96, -1, -1, -1, -1, -1, 3739 -1, -1, -1, -1, -1, -1, -1, -1, -1, 111, 3740 -1, -1, -1, -1, -1, -1, -1, 119, 4, 5, 3741 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 3742 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3743 26, 27, -1, -1, 30, 31, 32, -1, -1, -1, 3744 -1, -1, -1, 39, -1, -1, -1, -1, 10, 11, 3745 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3746 22, 23, 24, 25, 26, 27, 28, -1, 30, 31, 3747 32, 67, -1, 69, -1, 71, -1, 39, 74, 75, 3784 3748 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3785 3749 -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, 3750 96, -1, -1, -1, -1, 67, -1, -1, -1, -1, 3751 72, -1, 74, 75, 76, 111, 78, -1, -1, -1, 3752 -1, 83, 84, 119, 4, 5, 6, 7, 8, 9, 3788 3753 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,3754 20, 21, 22, 23, 24, 25, 26, 27, -1, 111, 3755 30, 31, 32, -1, -1, -1, -1, 119, -1, 39, 3756 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3792 3757 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3793 3758 -1, -1, -1, -1, -1, -1, -1, 67, -1, 69, … … 3807 3772 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3808 3773 -1, -1, -1, 67, -1, 69, -1, 71, -1, -1, 3809 74, 75, 10, 11, 12, 13, 14, 15, 16, 17,3810 1 8, 19, 20, 21, 22, 23, 24, 25, 26, 27,3811 -1, -1, 30, 31, 32, -1, -1, -1, -1, 37,3812 3 8, 39, 40, -1, -1, -1, -1, 111, -1, -1,3774 74, 75, -1, 4, 5, 6, 7, 8, 9, 10, 3775 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3776 21, 22, 23, 24, 25, 26, 27, -1, -1, 30, 3777 31, 32, -1, -1, -1, -1, -1, 111, 39, -1, 3813 3778 -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 3779 -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, 3780 -1, -1, -1, -1, -1, -1, 67, -1, 69, -1, 3781 71, -1, -1, 74, 75, 10, 11, 12, 13, 14, 3782 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3783 25, 26, 27, -1, -1, 30, 31, 32, -1, -1, 3784 -1, -1, 37, 38, 39, 40, -1, -1, -1, -1, 3785 111, -1, -1, -1, -1, -1, -1, -1, 119, -1, 3786 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3787 -1, 66, 67, -1, -1, -1, -1, 72, -1, 74, 3788 75, 76, -1, -1, 79, 80, 81, 82, 83, 84, 3789 -1, 86, 87, -1, -1, -1, -1, -1, -1, 94, 3790 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3791 -1, -1, -1, -1, 109, -1, 111, -1, -1, 114, 3792 -1, -1, -1, 118, 119, 120, 121, 122, 123, 10, 3793 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3794 21, 22, 23, 24, 25, 26, 27, -1, -1, 30, 3795 31, 32, -1, -1, -1, -1, 37, 38, 39, 40, 3796 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3797 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, 3798 30, 31, 32, -1, -1, 66, 67, -1, -1, 39, 3799 -1, 72, -1, 74, 75, 76, -1, -1, 79, 80, 3800 81, 82, 83, 84, -1, 86, 87, -1, -1, -1, 3801 -1, -1, -1, 94, -1, -1, -1, 67, -1, -1, 3802 -1, -1, 72, -1, 74, 75, 76, -1, 109, -1, 3803 111, 112, -1, 83, 84, -1, -1, 118, 119, 120, 3804 121, 122, 123, 10, 11, 12, 13, 14, 15, 16, 3805 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3806 27, 111, -1, 30, 31, 32, -1, -1, -1, 119, 3807 37, 38, 39, 40, 10, 11, 12, 13, 14, 15, 3808 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3809 26, 27, -1, -1, 30, 31, 32, -1, -1, 66, 3810 67, -1, -1, 39, 40, 72, -1, 74, 75, 76, 3811 -1, -1, 79, 80, 81, 82, 83, 84, -1, 86, 3812 87, -1, -1, -1, -1, -1, -1, 94, -1, -1, 3813 -1, 67, -1, -1, -1, -1, -1, -1, 74, 75, 3814 -1, -1, 109, 110, 111, -1, -1, -1, -1, -1, 3815 -1, 118, 119, 120, 121, 122, 123, 10, 11, 12, 3824 3816 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, 3817 23, 24, 25, 26, 27, 111, -1, 30, 31, 32, 3818 -1, -1, -1, 119, 37, 38, 39, 40, -1, -1, 3819 -1, -1, -1, -1, -1, 10, 11, 12, 13, 14, 3820 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3821 25, 26, 27, 66, 67, 30, 31, 32, -1, 72, 3822 -1, 74, 75, 76, 39, -1, 79, 80, 81, 82, 3823 83, 84, -1, 86, 87, -1, -1, -1, -1, -1, 3824 -1, 94, -1, -1, -1, -1, -1, -1, -1, -1, 3825 -1, -1, 67, -1, -1, -1, 109, -1, 111, 74, 3826 75, -1, -1, -1, -1, 118, 119, 120, 121, 122, 3827 123, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3828 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, 3829 -1, 30, 31, 32, 109, -1, 111, -1, 37, 38, 3830 39, 40, -1, -1, 119, -1, -1, -1, -1, 10, 3831 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3832 21, 22, 23, 24, 25, 26, 27, 66, 67, 30, 3833 31, 32, -1, 72, -1, 74, 75, 76, 39, -1, 3834 79, 80, 81, 82, 83, 84, -1, 86, 87, -1, 3835 -1, -1, -1, -1, -1, 94, -1, -1, -1, -1, 3836 -1, -1, -1, -1, -1, -1, 67, -1, -1, -1, 3837 109, -1, 111, 74, 75, -1, -1, -1, -1, 118, 3838 119, 120, 121, 122, 123, 10, 11, 12, 13, 14, 3839 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3840 25, 26, 27, -1, -1, 30, 31, 32, -1, -1, 3841 111, -1, 37, 38, 39, 40, -1, -1, 119, -1, 3842 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3843 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3844 -1, 66, 67, -1, -1, -1, -1, 72, -1, 74, 3845 75, 76, -1, -1, 79, 80, 81, 82, 83, 84, 3846 -1, 86, 87, -1, -1, -1, -1, -1, -1, 94, 3847 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3848 -1, -1, -1, -1, 109, -1, 111, -1, -1, -1, 3849 -1, -1, -1, 118, 119, 120, 121, 122, 123, 10, 3850 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3851 21, 22, 23, 24, 25, 26, 27, -1, -1, 30, 3852 31, 32, -1, -1, -1, -1, 37, 38, 39, 40, 3832 3853 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, 3854 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, 3855 30, 31, 32, -1, -1, 66, 67, -1, -1, 39, 3856 -1, 72, -1, 74, 75, 76, -1, -1, 79, 80, 3857 81, 82, 83, 84, -1, 86, 87, -1, -1, -1, 3858 -1, -1, -1, 94, -1, -1, -1, 67, -1, -1, 3859 -1, -1, 72, -1, 74, 75, 76, -1, 109, -1, 3860 111, -1, -1, 83, 84, -1, -1, 118, 119, 120, 3861 121, 122, 123, -1, -1, -1, -1, -1, -1, -1, 3862 -1, -1, -1, -1, -1, -1, -1, -1, -1, 109, 3863 -1, 111, -1, -1, -1, -1, -1, -1, -1, 119, 3864 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3865 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, 3866 30, 31, 32, -1, -1, -1, -1, -1, -1, 39, 3867 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3868 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, 3869 30, 31, 32, -1, -1, -1, -1, 67, -1, 39, 3870 -1, -1, 72, -1, 74, 75, 76, -1, -1, -1, 3871 -1, -1, -1, 83, 84, -1, -1, -1, -1, -1, 3872 -1, -1, -1, -1, -1, -1, -1, 67, -1, -1, 3873 -1, -1, 72, -1, 74, 75, 76, -1, -1, 109, 3874 -1, 111, -1, 83, 84, -1, -1, -1, -1, 119, 3875 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3876 -1, -1, -1, -1, -1, -1, -1, -1, -1, 109, 3877 -1, 111, -1, -1, -1, -1, -1, -1, -1, 119, 3878 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3879 20, 21, 22, 23, 24, 25, 26, 27, 28, -1, 3880 30, 31, 32, -1, -1, -1, -1, -1, -1, 39, 3881 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3882 20, 21, 22, 23, 24, 25, 26, 27, 28, -1, 3883 30, 31, 32, -1, -1, -1, -1, 67, -1, 39, 3884 -1, -1, -1, -1, 74, 75, -1, -1, 78, -1, 3885 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3886 -1, -1, -1, -1, -1, -1, -1, 67, -1, -1, 3887 -1, -1, -1, -1, 74, 75, -1, -1, 78, 109, 3888 -1, 111, -1, -1, -1, -1, -1, -1, -1, 119, 3889 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3890 -1, -1, -1, -1, -1, -1, -1, -1, -1, 109, 3891 -1, 111, -1, -1, -1, -1, -1, -1, -1, 119, 3892 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3893 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, 3894 30, 31, 32, -1, -1, -1, -1, -1, -1, 39, 3835 3895 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, 3896 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 3897 -1, 30, 31, 32, -1, -1, -1, 67, -1, -1, 3898 39, -1, -1, -1, 74, 75, -1, -1, -1, -1, 3899 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3900 -1, -1, -1, -1, -1, -1, -1, -1, 67, -1, 3901 -1, -1, -1, -1, -1, 74, 75, -1, -1, 78, 3902 -1, 111, -1, -1, -1, 115, -1, -1, -1, 119, 3903 -1, -1, -1, 10, 11, 12, 13, 14, 15, 16, 3904 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3905 27, -1, 111, 30, 31, 32, -1, -1, -1, -1, 3906 119, -1, 39, 40, 10, 11, 12, 13, 14, 15, 3844 3907 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,3908 26, 27, -1, -1, 30, 31, 32, -1, -1, -1, 3909 67, -1, -1, 39, -1, -1, -1, 74, 75, -1, 3847 3910 -1, -1, 10, 11, 12, 13, 14, 15, 16, 17, 3848 3911 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,3912 -1, 67, 30, 31, 32, -1, -1, -1, 74, 75, 3913 -1, 39, -1, -1, 111, -1, -1, -1, 115, -1, 3914 -1, -1, 119, -1, -1, -1, -1, -1, -1, -1, 3852 3915 -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 -1, -1, -1, -1, -1, 111, 74, 75, -1, -1, 3917 -1, -1, -1, 119, -1, 10, 11, 12, 13, 14, 3916 3918 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3917 3919 25, 26, 27, -1, -1, 30, 31, 32, -1, -1, 3918 -1, 109, -1, 111, 39, 40, -1, -1, -1, -1,3920 -1, -1, -1, 111, 39, -1, -1, -1, -1, -1, 3919 3921 -1, 119, -1, 10, 11, 12, 13, 14, 15, 16, 3920 3922 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3921 27, 28, 67, 30, 31, 32, -1, -1, -1, 74,3923 27, -1, 67, 30, 31, 32, -1, -1, -1, 74, 3922 3924 75, -1, 39, 10, 11, 12, 13, 14, 15, 16, 3923 3925 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3924 3926 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 67, -1, 39, -1, -1, -1, 111, 74, 75, -1, 3928 -1, -1, -1, -1, 119, -1, -1, -1, -1, -1, 3927 3929 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3928 3930 67, -1, -1, -1, -1, -1, -1, 74, 75, -1, … … 3930 3932 -1, -1, 119, -1, -1, 10, 11, 12, 13, 14, 3931 3933 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 25, 26, 27, -1, 111, 30, 31, 32, -1, -1, 3935 -1, -1, 119, -1, 39, 10, 11, 12, 13, 14, 3936 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3937 25, 26, 27, -1, -1, 30, 31, 32, -1, -1, 3938 -1, -1, 67, -1, 39, -1, -1, -1, -1, 74, 3939 75, -1, -1, 10, 11, 12, 13, 14, 15, 16, 3940 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3941 27, -1, 67, 30, 31, 32, -1, -1, -1, 74, 3942 75, -1, 39, -1, -1, -1, 111, -1, -1, -1, 3943 -1, -1, -1, -1, 119, -1, -1, -1, -1, -1, 3944 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3945 67, -1, -1, -1, -1, -1, 111, 74, 75, -1, 3946 -1, -1, -1, -1, 119, -1, 10, 11, 12, 13, 3934 3947 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3935 3948 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,3949 -1, -1, -1, -1, 111, 39, -1, -1, -1, -1, 3950 -1, -1, 119, -1, 10, 11, 12, 13, 14, 15, 3938 3951 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3939 3952 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, 3953 74, 75, -1, 39, -1, -1, 4, 5, 6, 7, 3954 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3955 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3956 -1, 67, 30, 31, 32, -1, -1, 111, 74, 75, 3957 -1, 39, -1, 37, 38, 119, 40, 41, -1, 43, 3958 -1, -1, 46, 47, 48, 49, 50, 51, 52, 53, 3959 -1, -1, 56, 57, -1, -1, -1, 61, 62, 67, 3960 64, 69, 66, 71, -1, -1, 74, 75, 72, -1, 3961 -1, -1, 76, 119, -1, 79, 80, 81, 82, 83, 3962 84, -1, 86, 87, -1, -1, -1, -1, -1, -1, 3963 94, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3964 -1, -1, 110, -1, -1, 109, -1, 111, -1, -1, 3965 114, -1, -1, -1, 118, 119, 120, 121, 122, 123, 3966 -1, -1, -1, -1, 128, -1, 37, 38, 132, 40, 3967 41, -1, 43, -1, -1, 46, 47, 48, 49, 50, 3968 51, 52, 53, -1, -1, -1, 57, -1, -1, -1, 3969 61, 62, -1, 64, -1, 66, -1, -1, -1, -1, 3970 -1, 72, -1, -1, -1, 76, -1, -1, 79, 80, 3971 81, 82, 83, 84, -1, 86, 87, -1, -1, -1, 3972 -1, -1, -1, 94, -1, -1, -1, -1, -1, -1, 3973 -1, -1, -1, -1, -1, -1, -1, -1, 109, -1, 3974 111, -1, -1, 114, -1, -1, -1, 118, 119, 120, 3975 121, 122, 123, -1, -1, -1, -1, 128, -1, -1, 3976 -1, 132, 4, 5, 6, 7, 8, 9, 10, 11, 3977 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3978 22, 23, 24, 25, 26, 27, -1, -1, 30, 31, 3979 32, -1, -1, -1, -1, -1, -1, 39, -1, 37, 3980 38, -1, 40, 41, -1, 43, 44, 45, 46, 47, 3981 48, 49, 50, 51, 52, 53, -1, -1, 56, 57, 3982 -1, -1, -1, 61, 62, 67, 64, 69, 66, 71, 3983 -1, -1, 74, 75, 72, -1, -1, -1, 76, -1, 3984 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3985 -1, -1, -1, -1, 96, -1, 94, -1, -1, -1, 3942 3986 -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, 3987 -1, 109, -1, 111, -1, -1, 114, -1, -1, -1, 3988 118, 119, 120, 121, 122, 123, -1, -1, 37, 38, 3989 128, 40, 41, -1, 43, 44, 45, 46, 47, 48, 3990 49, 50, 51, 52, 53, -1, -1, -1, 57, -1, 3991 -1, -1, 61, 62, -1, 64, -1, 66, -1, -1, 3992 -1, -1, -1, 72, -1, -1, -1, 76, -1, -1, 3993 79, 80, 81, 82, 83, 84, -1, 86, 87, -1, 3994 -1, -1, -1, -1, -1, 94, -1, -1, -1, -1, 3956 3995 -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, 3996 109, -1, 111, -1, -1, 114, -1, -1, -1, 118, 3997 119, 120, 121, 122, 123, -1, -1, 37, 38, 128, 3998 40, 41, -1, 43, -1, -1, 46, 47, 48, 49, 3999 50, 51, 52, 53, -1, -1, -1, 57, -1, -1, 4000 -1, 61, 62, -1, 64, -1, 66, -1, -1, -1, 4001 -1, -1, 72, -1, -1, -1, 76, -1, -1, 79, 4002 80, 81, 82, 83, 84, -1, 86, 87, -1, -1, 4003 -1, -1, -1, -1, 94, 37, 38, -1, 40, -1, 4004 -1, -1, -1, -1, -1, -1, -1, -1, -1, 109, 4005 -1, 111, -1, -1, 114, -1, -1, -1, 118, 119, 4006 120, 121, 122, 123, 66, -1, -1, -1, 128, -1, 4007 72, -1, -1, -1, 76, -1, -1, 79, 80, 81, 4008 82, 83, 84, -1, 86, 87, -1, -1, -1, -1, 4009 -1, -1, 94, 37, 38, -1, 40, -1, -1, -1, 4010 -1, -1, -1, -1, -1, -1, -1, 109, -1, 111, 4011 -1, -1, 37, 38, -1, 40, 118, 119, 120, 121, 4012 122, 123, 66, -1, -1, -1, -1, -1, 72, -1, 4013 -1, -1, 76, -1, -1, 79, 80, 81, 82, 83, 4014 84, 66, 86, 87, -1, -1, -1, 72, -1, -1, 4015 94, 76, -1, -1, 79, 80, 81, 82, 83, 84, 4016 -1, 86, 87, -1, -1, 109, -1, 111, -1, 94, 4017 37, 38, -1, 40, 118, 119, 120, 121, 122, 123, 4018 -1, -1, -1, -1, 109, -1, 111, -1, -1, 37, 4019 38, -1, 40, 118, 119, 120, 121, 122, 123, 66, 4020 -1, -1, -1, -1, -1, 72, -1, -1, -1, 76, 4021 -1, -1, 79, 80, 81, 82, 83, 84, 66, 86, 4022 87, -1, -1, -1, 72, -1, -1, 94, 76, -1, 4023 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 4024 -1, -1, 109, -1, 111, -1, 94, 37, 38, -1, 4025 40, 118, 119, 120, 121, 122, 123, -1, -1, -1, 4026 -1, 109, -1, -1, -1, -1, 37, 38, -1, 40, 4027 118, 119, 120, 121, 122, 123, 66, -1, -1, -1, 4028 -1, -1, 72, -1, -1, -1, 76, -1, -1, 79, 4029 80, 81, 82, 83, 84, 66, 86, 87, -1, -1, 4030 -1, 72, -1, -1, 94, 76, -1, -1, 79, 80, 4031 81, 82, 83, 84, -1, 86, 87, -1, -1, 109, 4032 -1, -1, -1, 94, -1, -1, -1, -1, 118, 119, 4033 120, 121, 122, 123, -1, -1, -1, -1, 109, -1, 4034 -1, -1, -1, -1, -1, -1, -1, 118, 119, 120, 4035 121, 122, 123, 3, 4, 5, 6, 7, 8, 9, 4036 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 4037 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, 4038 30, 31, 32, -1, -1, -1, -1, -1, -1, 39, 3978 4039 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3979 4040 -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, 4041 -1, -1, -1, -1, -1, -1, -1, 67, -1, 69, 4042 -1, 71, -1, -1, 74, 75, 3, 4, 5, 6, 4080 4043 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 4081 4044 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 4082 4045 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, 4046 -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, 4087 4047 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4088 4048 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4089 -1, 67, -1, -1, -1, -1, -1, -1, 74, 75 4049 67, -1, 69, -1, 71, -1, -1, 74, 75, 4, 4050 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 4051 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 4052 25, 26, 27, -1, -1, 30, 31, 32, -1, -1, 4053 -1, -1, -1, -1, 39, -1, -1, -1, -1, -1, 4054 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4055 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4056 -1, -1, 67, -1, 69, -1, 71, -1, -1, 74, 4057 75 4090 4058 }; 4091 4059 … … 4102 4070 222, 223, 224, 225, 226, 227, 228, 230, 231, 232, 4103 4071 233, 234, 235, 236, 237, 239, 240, 241, 242, 243, 4104 244, 24 6, 254, 255, 282, 283, 284, 292, 295, 301,4105 30 2, 304, 306, 307, 313, 318, 322, 323, 324, 325,4106 32 6, 327, 328, 329, 349, 366, 367, 368, 369, 72,4072 244, 245, 253, 254, 280, 281, 282, 290, 293, 299, 4073 300, 302, 304, 305, 311, 316, 320, 321, 322, 323, 4074 324, 325, 326, 327, 347, 364, 365, 366, 367, 72, 4107 4075 119, 139, 140, 214, 216, 224, 226, 236, 240, 242, 4108 28 3, 82, 109, 311, 312, 313, 311, 311, 72, 74,4109 75, 76, 138, 139, 27 2, 273, 293, 294, 74, 75,4110 27 3, 109, 304, 11, 198, 109, 119, 318, 323, 324,4111 32 5, 327, 328, 329, 112, 134, 111, 217, 224, 226,4112 32 2, 326, 365, 366, 369, 370, 135, 107, 131, 276,4113 114, 135, 172, 74, 75, 137, 2 71, 135, 135, 135,4114 116, 135, 74, 75, 109, 119, 30 8, 317, 318, 319,4115 3 20, 321, 322, 326, 330, 331, 332, 333, 334, 340,4076 281, 82, 109, 309, 310, 311, 309, 309, 72, 74, 4077 75, 76, 138, 139, 270, 271, 291, 292, 74, 75, 4078 271, 109, 302, 11, 198, 109, 119, 316, 321, 322, 4079 323, 325, 326, 327, 112, 134, 111, 217, 224, 226, 4080 320, 324, 363, 364, 367, 368, 135, 107, 131, 274, 4081 114, 135, 172, 74, 75, 137, 269, 135, 135, 135, 4082 116, 135, 74, 75, 109, 119, 306, 315, 316, 317, 4083 318, 319, 320, 324, 328, 329, 330, 331, 332, 338, 4116 4084 3, 28, 78, 238, 3, 5, 74, 111, 119, 216, 4117 227, 231, 234, 243, 28 4, 322, 326, 369, 214, 216,4118 226, 236, 240, 242, 28 3, 322, 326, 33, 232, 232,4085 227, 231, 234, 243, 282, 320, 324, 367, 214, 216, 4086 226, 236, 240, 242, 281, 320, 324, 33, 232, 232, 4119 4087 227, 234, 135, 232, 227, 232, 227, 75, 109, 114, 4120 27 3, 284, 114, 273, 232, 227, 116, 135, 135, 0,4121 134, 109, 172, 3 11, 311, 134, 111, 224, 226, 367,4122 2 71, 271, 226, 131, 109, 119, 308, 318, 322, 111,4123 119, 36 9, 305, 229, 313, 109, 289, 109, 109, 51,4088 271, 282, 114, 271, 232, 227, 116, 135, 135, 0, 4089 134, 109, 172, 309, 309, 134, 111, 224, 226, 365, 4090 269, 269, 226, 131, 109, 119, 306, 316, 320, 111, 4091 119, 367, 303, 229, 311, 109, 287, 109, 109, 51, 4124 4092 109, 37, 38, 40, 66, 72, 76, 79, 80, 81, 4125 4093 82, 86, 87, 94, 109, 111, 118, 119, 120, 121, 4126 4094 122, 123, 136, 140, 141, 142, 143, 148, 149, 150, 4127 4095 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 4128 161, 163, 165, 224, 27 5, 291, 365, 370, 226, 110,4096 161, 163, 165, 224, 273, 289, 363, 368, 226, 110, 4129 4097 110, 110, 110, 110, 110, 110, 74, 75, 111, 224, 4130 2 71, 349, 367, 111, 119, 163, 216, 217, 223, 226,4131 230, 231, 236, 239, 240, 242, 2 61, 262, 266, 267,4132 26 8, 269, 283, 349, 361, 362, 363, 364, 369, 370,4133 112, 109, 32 2, 326, 369, 109, 116, 132, 111, 114,4134 119, 163, 27 7, 277, 115, 134, 116, 132, 109, 116,4135 132, 116, 132, 116, 132, 3 11, 132, 318, 319, 320,4136 3 21, 331, 332, 333, 334, 226, 317, 330, 64, 310,4137 111, 3 11, 348, 349, 311, 311, 172, 134, 109, 311,4138 34 8, 311, 311, 226, 308, 109, 109, 225, 226, 224,4139 226, 112, 134, 224, 36 5, 370, 172, 134, 271, 276,4140 216, 231, 32 2, 326, 172, 134, 293, 226, 236, 132,4141 226, 226, 2 91, 40, 111, 224, 247, 248, 249, 250,4142 36 5, 369, 245, 257, 273, 256, 226, 293, 132, 132,4143 30 4, 134, 139, 270, 3, 135, 206, 207, 221, 223,4144 226, 134, 3 10, 109, 310, 163, 318, 226, 109, 134,4145 2 71, 114, 33, 34, 35, 224, 285, 286, 288, 134,4146 129, 131, 2 90, 134, 227, 233, 234, 271, 314, 315,4147 31 6, 109, 141, 109, 148, 109, 148, 150, 109, 148,4098 269, 347, 365, 111, 119, 163, 216, 217, 223, 226, 4099 230, 231, 236, 239, 240, 242, 259, 260, 264, 265, 4100 266, 267, 281, 347, 359, 360, 361, 362, 367, 368, 4101 112, 109, 320, 324, 367, 109, 116, 132, 111, 114, 4102 119, 163, 275, 275, 115, 134, 116, 132, 109, 116, 4103 132, 116, 132, 116, 132, 309, 132, 316, 317, 318, 4104 319, 329, 330, 331, 332, 226, 315, 328, 64, 308, 4105 111, 309, 346, 347, 309, 309, 172, 134, 109, 309, 4106 346, 309, 309, 226, 306, 109, 109, 225, 226, 224, 4107 226, 112, 134, 224, 363, 368, 172, 134, 269, 274, 4108 216, 231, 320, 324, 172, 134, 291, 226, 236, 132, 4109 226, 226, 289, 40, 111, 224, 246, 247, 248, 249, 4110 363, 367, 114, 255, 271, 114, 226, 291, 132, 132, 4111 302, 134, 139, 268, 3, 135, 206, 207, 221, 223, 4112 226, 134, 308, 109, 308, 163, 316, 226, 109, 134, 4113 269, 114, 33, 34, 35, 224, 283, 284, 286, 134, 4114 129, 131, 288, 134, 227, 233, 234, 269, 312, 313, 4115 314, 109, 141, 109, 148, 109, 148, 150, 109, 148, 4148 4116 109, 109, 148, 148, 139, 111, 163, 168, 172, 224, 4149 27 4, 365, 112, 134, 150, 150, 82, 85, 86, 87,4117 272, 363, 112, 134, 150, 150, 82, 85, 86, 87, 4150 4118 109, 111, 113, 114, 97, 98, 99, 100, 101, 102, 4151 4119 103, 104, 105, 106, 131, 167, 150, 119, 124, 125, 4152 4120 121, 122, 88, 89, 90, 91, 126, 127, 92, 93, 4153 120, 128, 129, 94, 95, 130, 131, 37 2, 109, 119,4154 34 4, 345, 346, 347, 348, 110, 116, 109, 348, 349,4155 109, 34 8, 349, 134, 109, 224, 367, 112, 134, 111,4156 119, 135, 224, 226, 3 60, 361, 369, 370, 135, 109,4157 111, 119, 31 8, 335, 336, 337, 338, 339, 340, 341,4158 34 2, 343, 349, 350, 351, 352, 353, 354, 355, 119,4159 36 9, 226, 135, 135, 119, 224, 226, 362, 271, 224,4160 34 9, 362, 271, 109, 134, 134, 134, 112, 134, 72,4161 80, 111, 113, 140, 27 3, 277, 278, 279, 280, 281,4162 134, 134, 134, 134, 134, 134, 30 8, 110, 110, 110,4163 110, 110, 110, 110, 31 7, 330, 109, 276, 112, 206,4164 134, 30 8, 168, 275, 168, 275, 308, 111, 206, 310,4165 172, 134, 206, 110, 24 9, 250, 112, 134, 109, 117,4166 119, 25 1, 253, 317, 318, 330, 348, 356, 357, 358,4167 35 9, 115, 248, 116, 132, 116, 132, 273, 114, 116,4168 3 71, 131, 258, 114, 226, 263, 264, 265, 268, 269,4169 110, 116, 172, 134, 119, 163, 134, 223, 226, 26 2,4170 3 61, 369, 302, 303, 109, 119, 335, 110, 116, 372,4171 27 3, 285, 109, 114, 273, 275, 285, 110, 116, 109,4172 141, 110, 117, 27 4, 274, 274, 111, 139, 145, 163,4173 27 5, 274, 112, 134, 110, 116, 110, 109, 119, 356,4121 120, 128, 129, 94, 95, 130, 131, 370, 109, 119, 4122 342, 343, 344, 345, 346, 110, 116, 109, 346, 347, 4123 109, 346, 347, 134, 109, 224, 365, 112, 134, 111, 4124 119, 135, 224, 226, 358, 359, 367, 368, 135, 109, 4125 111, 119, 316, 333, 334, 335, 336, 337, 338, 339, 4126 340, 341, 347, 348, 349, 350, 351, 352, 353, 119, 4127 367, 226, 135, 135, 119, 224, 226, 360, 269, 224, 4128 347, 360, 269, 109, 134, 134, 134, 112, 134, 72, 4129 80, 111, 113, 140, 271, 275, 276, 277, 278, 279, 4130 134, 134, 134, 134, 134, 134, 306, 110, 110, 110, 4131 110, 110, 110, 110, 315, 328, 109, 274, 112, 206, 4132 134, 306, 168, 273, 168, 273, 306, 111, 206, 308, 4133 172, 134, 206, 110, 248, 249, 112, 134, 109, 117, 4134 119, 250, 252, 315, 316, 328, 346, 354, 355, 356, 4135 357, 115, 247, 116, 132, 116, 132, 271, 246, 116, 4136 369, 131, 256, 255, 226, 261, 262, 263, 266, 267, 4137 110, 116, 172, 134, 119, 163, 134, 223, 226, 260, 4138 359, 367, 300, 301, 109, 119, 333, 110, 116, 370, 4139 271, 283, 109, 114, 271, 273, 283, 110, 116, 109, 4140 141, 110, 117, 272, 272, 272, 111, 139, 145, 163, 4141 273, 272, 112, 134, 110, 116, 110, 109, 119, 354, 4174 4142 110, 116, 163, 111, 139, 111, 144, 145, 134, 111, 4175 4143 139, 144, 163, 163, 150, 150, 150, 151, 151, 152, 4176 4144 152, 153, 153, 153, 153, 154, 154, 155, 156, 157, 4177 158, 159, 117, 168, 163, 134, 34 5, 346, 347, 226,4178 34 4, 311, 311, 163, 275, 134, 270, 119, 134, 224,4179 34 9, 362, 226, 230, 112, 134, 112, 369, 112, 109,4180 134, 31 8, 336, 337, 338, 341, 351, 352, 353, 112,4181 134, 226, 33 5, 339, 350, 109, 311, 354, 372, 311,4182 3 11, 372, 109, 311, 354, 311, 311, 311, 311, 349,4183 224, 3 60, 370, 271, 112, 116, 112, 116, 372, 224,4184 36 2, 372, 259, 260, 261, 262, 259, 259, 271, 163,4185 134, 111, 27 3, 117, 116, 371, 277, 80, 111, 117,4186 2 81, 29, 208, 209, 271, 259, 139, 308, 139, 310,4187 109, 34 8, 349, 109, 348, 349, 141, 349, 172, 263,4145 158, 159, 117, 168, 163, 134, 343, 344, 345, 226, 4146 342, 309, 309, 163, 273, 134, 268, 119, 134, 224, 4147 347, 360, 226, 230, 112, 134, 112, 367, 112, 109, 4148 134, 316, 334, 335, 336, 339, 349, 350, 351, 112, 4149 134, 226, 333, 337, 348, 109, 309, 352, 370, 309, 4150 309, 370, 109, 309, 352, 309, 309, 309, 309, 347, 4151 224, 358, 368, 269, 112, 116, 112, 116, 370, 224, 4152 360, 370, 257, 258, 259, 260, 257, 257, 269, 163, 4153 134, 111, 271, 117, 116, 369, 275, 80, 111, 117, 4154 279, 29, 208, 209, 269, 257, 139, 306, 139, 308, 4155 109, 346, 347, 109, 346, 347, 141, 347, 172, 261, 4188 4156 110, 110, 110, 110, 112, 172, 206, 172, 114, 132, 4189 132, 111, 31 8, 357, 358, 359, 161, 162, 226, 356,4190 25 2, 253, 252, 311, 311, 273, 311, 247, 273, 115,4191 162, 257, 135, 135, 139, 221, 135, 135, 259, 109,4192 119, 36 9, 135, 115, 226, 286, 287, 135, 134, 134,4193 109, 135, 110, 31 5, 168, 169, 117, 132, 111, 141,4157 132, 111, 316, 355, 356, 357, 161, 162, 226, 354, 4158 251, 252, 251, 309, 309, 271, 309, 115, 271, 115, 4159 162, 369, 135, 135, 139, 221, 135, 135, 257, 109, 4160 119, 367, 135, 115, 226, 284, 285, 135, 134, 134, 4161 109, 135, 110, 313, 168, 169, 117, 132, 111, 141, 4194 4162 199, 200, 201, 110, 116, 110, 134, 117, 110, 110, 4195 4163 110, 163, 226, 114, 150, 165, 163, 164, 166, 116, 4196 4164 135, 134, 134, 110, 116, 163, 134, 115, 161, 117, 4197 26 3, 110, 110, 110, 344, 263, 110, 259, 224, 362,4198 111, 119, 163, 163, 226, 3 41, 263, 110, 110, 110,4199 110, 110, 110, 110, 7, 226, 33 5, 339, 350, 134,4200 134, 37 2, 134, 134, 110, 135, 135, 135, 135, 276,4201 135, 161, 162, 163, 30 9, 134, 277, 279, 115, 134,4202 210, 27 3, 40, 41, 43, 46, 47, 48, 49, 50,4165 261, 110, 110, 110, 342, 261, 110, 257, 224, 360, 4166 111, 119, 163, 163, 226, 339, 261, 110, 110, 110, 4167 110, 110, 110, 110, 7, 226, 333, 337, 348, 134, 4168 134, 370, 134, 134, 110, 135, 135, 135, 135, 274, 4169 135, 161, 162, 163, 307, 134, 275, 277, 115, 134, 4170 210, 271, 40, 41, 43, 46, 47, 48, 49, 50, 4203 4171 51, 52, 53, 57, 61, 62, 111, 128, 139, 169, 4204 4172 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 4173 197, 211, 305, 29, 135, 131, 274, 134, 134, 110, 4174 135, 172, 246, 112, 110, 110, 110, 354, 250, 256, 4175 115, 110, 116, 112, 112, 135, 226, 116, 370, 287, 4176 110, 283, 214, 216, 224, 295, 296, 297, 298, 289, 4177 110, 110, 117, 162, 109, 110, 117, 116, 139, 163, 4178 163, 276, 116, 135, 166, 112, 139, 146, 147, 163, 4179 145, 135, 146, 161, 165, 135, 109, 346, 347, 135, 4180 135, 134, 135, 135, 135, 163, 110, 135, 109, 346, 4181 347, 109, 352, 109, 352, 347, 225, 7, 119, 135, 4182 163, 261, 261, 260, 264, 264, 265, 116, 116, 110, 4183 110, 112, 96, 123, 135, 135, 146, 275, 163, 116, 4184 132, 211, 215, 226, 230, 109, 109, 170, 109, 109, 4185 132, 139, 132, 139, 119, 139, 169, 109, 172, 164, 4186 164, 112, 143, 117, 132, 135, 134, 135, 210, 110, 4187 163, 261, 261, 309, 110, 115, 109, 346, 347, 134, 4188 110, 134, 135, 306, 115, 134, 135, 135, 110, 114, 4189 199, 112, 162, 132, 199, 201, 110, 116, 135, 369, 4190 164, 112, 135, 85, 113, 116, 135, 135, 112, 135, 4191 110, 134, 110, 110, 112, 112, 112, 135, 110, 134, 4192 134, 134, 163, 163, 135, 112, 135, 135, 135, 135, 4193 134, 134, 162, 162, 112, 112, 135, 135, 271, 226, 4194 168, 168, 47, 168, 134, 132, 132, 168, 132, 132, 4195 168, 58, 59, 60, 193, 194, 195, 132, 63, 132, 4196 114, 309, 174, 115, 132, 135, 135, 134, 96, 266, 4197 267, 110, 296, 116, 132, 116, 132, 115, 294, 117, 4198 141, 110, 110, 117, 166, 112, 115, 112, 111, 147, 4199 111, 147, 147, 112, 112, 112, 261, 112, 261, 261, 4200 261, 135, 135, 112, 112, 110, 110, 112, 116, 96, 4201 260, 96, 135, 112, 112, 110, 110, 109, 110, 169, 4202 190, 211, 132, 110, 109, 109, 172, 195, 58, 59, 4203 163, 144, 170, 110, 110, 261, 114, 134, 134, 295, 4204 141, 202, 109, 132, 202, 135, 117, 134, 134, 135, 4205 135, 135, 135, 112, 112, 134, 135, 112, 170, 44, 4206 45, 114, 180, 181, 182, 168, 170, 135, 110, 169, 4207 114, 182, 96, 134, 96, 134, 109, 109, 132, 115, 4208 135, 134, 269, 306, 115, 116, 117, 162, 110, 112, 4209 163, 146, 146, 110, 110, 110, 110, 264, 42, 162, 4210 178, 179, 307, 117, 134, 170, 180, 110, 132, 170, 4211 132, 134, 110, 134, 110, 134, 96, 134, 96, 134, 4212 132, 110, 295, 141, 139, 203, 110, 132, 117, 135, 4213 135, 170, 96, 116, 117, 135, 204, 205, 211, 132, 4214 169, 169, 204, 172, 196, 224, 363, 172, 196, 110, 4215 134, 110, 134, 115, 110, 116, 163, 112, 112, 162, 4216 178, 181, 183, 184, 134, 132, 181, 185, 186, 135, 4217 109, 119, 306, 354, 139, 135, 172, 196, 172, 196, 4218 109, 132, 139, 170, 175, 115, 181, 211, 169, 56, 4219 175, 188, 115, 181, 110, 226, 110, 135, 135, 289, 4220 170, 175, 132, 187, 188, 175, 188, 172, 172, 110, 4221 110, 110, 187, 135, 135, 172, 172, 135, 135 4255 4222 }; 4256 4223 … … 5213 5180 /* Line 1806 of yacc.c */ 5214 5181 #line 374 "parser.yy" 5215 { (yyval.en) = new CompoundLiteralNode( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ); }5182 { (yyval.en) = 0; } 5216 5183 break; 5217 5184 … … 7064 7031 /* Line 1806 of yacc.c */ 7065 7032 #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 } 7033 { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (2)].aggKey), (yyvsp[(2) - (2)].tok), 0, 0 ); } 7070 7034 break; 7071 7035 … … 7073 7037 7074 7038 /* Line 1806 of yacc.c */ 7075 #line 144 5"parser.yy"7076 { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }7039 #line 1442 "parser.yy" 7040 { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (5)].aggKey), (yyvsp[(2) - (5)].tok), 0, (yyvsp[(4) - (5)].decl) ); } 7077 7041 break; 7078 7042 … … 7080 7044 7081 7045 /* Line 1806 of yacc.c */ 7082 #line 144 7"parser.yy"7083 { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - ( 6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl)); }7046 #line 1444 "parser.yy" 7047 { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl) ); } 7084 7048 break; 7085 7049 … … 7087 7051 7088 7052 /* Line 1806 of yacc.c */ 7089 #line 144 9"parser.yy"7090 { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl)); }7053 #line 1446 "parser.yy" 7054 { (yyval.decl) = (yyvsp[(2) - (2)].decl); } 7091 7055 break; 7092 7056 … … 7095 7059 /* Line 1806 of yacc.c */ 7096 7060 #line 1451 "parser.yy" 7097 { (yyval. decl) = (yyvsp[(2) - (2)].decl); }7061 { (yyval.aggKey) = DeclarationNode::Struct; } 7098 7062 break; 7099 7063 … … 7101 7065 7102 7066 /* Line 1806 of yacc.c */ 7103 #line 145 6"parser.yy"7104 { (yyval.aggKey) = DeclarationNode:: Struct; }7067 #line 1453 "parser.yy" 7068 { (yyval.aggKey) = DeclarationNode::Union; } 7105 7069 break; 7106 7070 … … 7109 7073 /* Line 1806 of yacc.c */ 7110 7074 #line 1458 "parser.yy" 7111 { (yyval. aggKey) = DeclarationNode::Union; }7075 { (yyval.decl) = (yyvsp[(1) - (1)].decl); } 7112 7076 break; 7113 7077 … … 7115 7079 7116 7080 /* Line 1806 of yacc.c */ 7117 #line 1463 "parser.yy" 7118 { (yyval.decl) = (yyvsp[(1) - (1)].decl); } 7119 break; 7120 7121 case 374: 7122 7123 /* Line 1806 of yacc.c */ 7124 #line 1465 "parser.yy" 7081 #line 1460 "parser.yy" 7125 7082 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); } 7126 7083 break; 7127 7084 7128 case 37 6:7129 7130 /* Line 1806 of yacc.c */ 7131 #line 14 71"parser.yy"7085 case 375: 7086 7087 /* Line 1806 of yacc.c */ 7088 #line 1466 "parser.yy" 7132 7089 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 7133 7090 break; 7134 7091 7135 case 37 8:7136 7137 /* Line 1806 of yacc.c */ 7138 #line 14 74"parser.yy"7092 case 377: 7093 7094 /* Line 1806 of yacc.c */ 7095 #line 1469 "parser.yy" 7139 7096 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 7140 7097 break; 7141 7098 7099 case 379: 7100 7101 /* Line 1806 of yacc.c */ 7102 #line 1475 "parser.yy" 7103 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); } 7104 break; 7105 7142 7106 case 380: 7143 7107 7144 7108 /* Line 1806 of yacc.c */ 7145 #line 14 80"parser.yy"7146 { (yyval.decl) = (yyvsp[(1) - ( 2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }7109 #line 1477 "parser.yy" 7110 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); } 7147 7111 break; 7148 7112 … … 7150 7114 7151 7115 /* Line 1806 of yacc.c */ 7152 #line 14 82"parser.yy"7153 { (yyval.decl) = (yyvsp[(1) - ( 3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok)) ); }7116 #line 1479 "parser.yy" 7117 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); } 7154 7118 break; 7155 7119 … … 7158 7122 /* Line 1806 of yacc.c */ 7159 7123 #line 1484 "parser.yy" 7160 { (yyval.decl) = (yyvsp[( 1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0) ); }7124 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); } 7161 7125 break; 7162 7126 … … 7164 7128 7165 7129 /* Line 1806 of yacc.c */ 7166 #line 148 9"parser.yy"7167 { (yyval.decl) = (yyvsp[( 2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }7130 #line 1486 "parser.yy" 7131 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); } 7168 7132 break; 7169 7133 … … 7172 7136 /* Line 1806 of yacc.c */ 7173 7137 #line 1491 "parser.yy" 7174 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) );}7138 { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ } 7175 7139 break; 7176 7140 … … 7178 7142 7179 7143 /* Line 1806 of yacc.c */ 7144 #line 1493 "parser.yy" 7145 { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); } 7146 break; 7147 7148 case 386: 7149 7150 /* Line 1806 of yacc.c */ 7180 7151 #line 1496 "parser.yy" 7181 { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ } 7182 break; 7183 7184 case 386: 7185 7186 /* Line 1806 of yacc.c */ 7187 #line 1498 "parser.yy" 7188 { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); } 7152 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); } 7189 7153 break; 7190 7154 … … 7192 7156 7193 7157 /* Line 1806 of yacc.c */ 7194 #line 1 501"parser.yy"7158 #line 1499 "parser.yy" 7195 7159 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); } 7196 7160 break; 7197 7161 7198 case 38 8:7199 7200 /* Line 1806 of yacc.c */ 7201 #line 150 4"parser.yy"7202 { (yyval. decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }7162 case 389: 7163 7164 /* Line 1806 of yacc.c */ 7165 #line 1505 "parser.yy" 7166 { (yyval.en) = 0; } 7203 7167 break; 7204 7168 … … 7206 7170 7207 7171 /* Line 1806 of yacc.c */ 7208 #line 1510 "parser.yy" 7172 #line 1507 "parser.yy" 7173 { (yyval.en) = (yyvsp[(1) - (1)].en); } 7174 break; 7175 7176 case 391: 7177 7178 /* Line 1806 of yacc.c */ 7179 #line 1512 "parser.yy" 7180 { (yyval.en) = (yyvsp[(2) - (2)].en); } 7181 break; 7182 7183 case 393: 7184 7185 /* Line 1806 of yacc.c */ 7186 #line 1521 "parser.yy" 7187 { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); } 7188 break; 7189 7190 case 394: 7191 7192 /* Line 1806 of yacc.c */ 7193 #line 1523 "parser.yy" 7194 { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (6)].tok), (yyvsp[(4) - (6)].decl) ); } 7195 break; 7196 7197 case 395: 7198 7199 /* Line 1806 of yacc.c */ 7200 #line 1525 "parser.yy" 7201 { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (2)].tok), 0 ); } 7202 break; 7203 7204 case 396: 7205 7206 /* Line 1806 of yacc.c */ 7207 #line 1530 "parser.yy" 7208 { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); } 7209 break; 7210 7211 case 397: 7212 7213 /* Line 1806 of yacc.c */ 7214 #line 1532 "parser.yy" 7215 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); } 7216 break; 7217 7218 case 398: 7219 7220 /* Line 1806 of yacc.c */ 7221 #line 1537 "parser.yy" 7209 7222 { (yyval.en) = 0; } 7210 7223 break; 7211 7224 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" 7225 case 399: 7226 7227 /* Line 1806 of yacc.c */ 7228 #line 1539 "parser.yy" 7223 7229 { (yyval.en) = (yyvsp[(2) - (2)].en); } 7224 7230 break; 7225 7231 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 7264 case 399:7265 7266 /* Line 1806 of yacc.c */7267 #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 7232 case 400: 7272 7233 7273 7234 /* Line 1806 of yacc.c */ 7274 #line 154 7"parser.yy"7275 { (yyval. en) = 0; }7276 break; 7277 7278 case 40 1:7279 7280 /* Line 1806 of yacc.c */ 7281 #line 15 49"parser.yy"7282 { (yyval. en) = (yyvsp[(2) - (2)].en); }7283 break; 7284 7285 case 40 2:7235 #line 1546 "parser.yy" 7236 { (yyval.decl) = 0; } 7237 break; 7238 7239 case 404: 7240 7241 /* Line 1806 of yacc.c */ 7242 #line 1554 "parser.yy" 7243 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7244 break; 7245 7246 case 405: 7286 7247 7287 7248 /* Line 1806 of yacc.c */ 7288 7249 #line 1556 "parser.yy" 7289 { (yyval.decl) = 0; }7250 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); } 7290 7251 break; 7291 7252 … … 7293 7254 7294 7255 /* Line 1806 of yacc.c */ 7295 #line 1564 "parser.yy" 7256 #line 1558 "parser.yy" 7257 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); } 7258 break; 7259 7260 case 408: 7261 7262 /* Line 1806 of yacc.c */ 7263 #line 1566 "parser.yy" 7296 7264 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7297 7265 break; 7298 7266 7299 case 407: 7300 7301 /* Line 1806 of yacc.c */ 7302 #line 1566 "parser.yy" 7303 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); } 7304 break; 7305 7306 case 408: 7267 case 409: 7307 7268 7308 7269 /* Line 1806 of yacc.c */ 7309 7270 #line 1568 "parser.yy" 7310 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->a ddVarArgs(); }7271 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7311 7272 break; 7312 7273 7313 7274 case 410: 7275 7276 /* Line 1806 of yacc.c */ 7277 #line 1570 "parser.yy" 7278 { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); } 7279 break; 7280 7281 case 412: 7314 7282 7315 7283 /* Line 1806 of yacc.c */ … … 7318 7286 break; 7319 7287 7320 case 411: 7321 7322 /* Line 1806 of yacc.c */ 7323 #line 1578 "parser.yy" 7288 case 413: 7289 7290 /* Line 1806 of yacc.c */ 7291 #line 1581 "parser.yy" 7292 { (yyval.decl) = 0; } 7293 break; 7294 7295 case 416: 7296 7297 /* Line 1806 of yacc.c */ 7298 #line 1588 "parser.yy" 7299 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); } 7300 break; 7301 7302 case 419: 7303 7304 /* Line 1806 of yacc.c */ 7305 #line 1595 "parser.yy" 7324 7306 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7325 7307 break; 7326 7308 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" 7309 case 420: 7310 7311 /* Line 1806 of yacc.c */ 7312 #line 1597 "parser.yy" 7338 7313 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7339 7314 break; 7340 7315 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 7355 case 421:7356 7357 /* Line 1806 of yacc.c */7358 #line 1605 "parser.yy"7359 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }7360 break;7361 7362 7316 case 422: 7363 7317 7364 7318 /* Line 1806 of yacc.c */ 7365 #line 1607 "parser.yy" 7366 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7319 #line 1606 "parser.yy" 7320 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); } 7321 break; 7322 7323 case 423: 7324 7325 /* Line 1806 of yacc.c */ 7326 #line 1609 "parser.yy" 7327 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); } 7367 7328 break; 7368 7329 … … 7370 7331 7371 7332 /* 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: 7333 #line 1611 "parser.yy" 7334 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); } 7335 break; 7336 7337 case 429: 7384 7338 7385 7339 /* Line 1806 of yacc.c */ 7386 7340 #line 1621 "parser.yy" 7387 { (yyval.decl) = (yyvsp[(2) - ( 4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }7341 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 7388 7342 break; 7389 7343 … … 7391 7345 7392 7346 /* Line 1806 of yacc.c */ 7393 #line 1631 "parser.yy" 7394 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 7395 break; 7396 7397 case 433: 7398 7399 /* Line 1806 of yacc.c */ 7400 #line 1637 "parser.yy" 7347 #line 1627 "parser.yy" 7401 7348 { 7402 7349 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7405 7352 break; 7406 7353 7407 case 43 4:7408 7409 /* Line 1806 of yacc.c */ 7410 #line 16 42 "parser.yy"7354 case 432: 7355 7356 /* Line 1806 of yacc.c */ 7357 #line 1632 "parser.yy" 7411 7358 { 7412 7359 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7415 7362 break; 7416 7363 7364 case 434: 7365 7366 /* Line 1806 of yacc.c */ 7367 #line 1641 "parser.yy" 7368 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); } 7369 break; 7370 7371 case 435: 7372 7373 /* Line 1806 of yacc.c */ 7374 #line 1650 "parser.yy" 7375 { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); } 7376 break; 7377 7417 7378 case 436: 7418 7379 7419 7380 /* Line 1806 of yacc.c */ 7420 #line 1651 "parser.yy" 7381 #line 1652 "parser.yy" 7382 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); } 7383 break; 7384 7385 case 448: 7386 7387 /* Line 1806 of yacc.c */ 7388 #line 1677 "parser.yy" 7421 7389 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); } 7422 7390 break; 7423 7391 7424 case 437: 7425 7426 /* Line 1806 of yacc.c */ 7427 #line 1660 "parser.yy" 7428 { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); } 7429 break; 7430 7431 case 438: 7432 7433 /* Line 1806 of yacc.c */ 7434 #line 1662 "parser.yy" 7435 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); } 7436 break; 7437 7438 case 450: 7439 7440 /* Line 1806 of yacc.c */ 7441 #line 1687 "parser.yy" 7392 case 452: 7393 7394 /* Line 1806 of yacc.c */ 7395 #line 1685 "parser.yy" 7442 7396 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); } 7443 7397 break; 7444 7398 7399 case 453: 7400 7401 /* Line 1806 of yacc.c */ 7402 #line 1690 "parser.yy" 7403 { (yyval.in) = 0; } 7404 break; 7405 7445 7406 case 454: 7446 7407 7447 7408 /* Line 1806 of yacc.c */ 7448 #line 169 5"parser.yy"7449 { (yyval. decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl)); }7409 #line 1692 "parser.yy" 7410 { (yyval.in) = (yyvsp[(2) - (2)].in); } 7450 7411 break; 7451 7412 … … 7453 7414 7454 7415 /* Line 1806 of yacc.c */ 7455 #line 1700 "parser.yy" 7416 #line 1694 "parser.yy" 7417 { (yyval.in) = (yyvsp[(2) - (2)].in); } 7418 break; 7419 7420 case 456: 7421 7422 /* Line 1806 of yacc.c */ 7423 #line 1698 "parser.yy" 7424 { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); } 7425 break; 7426 7427 case 457: 7428 7429 /* Line 1806 of yacc.c */ 7430 #line 1699 "parser.yy" 7431 { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); } 7432 break; 7433 7434 case 458: 7435 7436 /* Line 1806 of yacc.c */ 7437 #line 1704 "parser.yy" 7456 7438 { (yyval.in) = 0; } 7457 7439 break; 7458 7440 7459 case 456: 7460 7461 /* Line 1806 of yacc.c */ 7462 #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: 7441 case 460: 7442 7443 /* Line 1806 of yacc.c */ 7444 #line 1706 "parser.yy" 7445 { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); } 7446 break; 7447 7448 case 461: 7449 7450 /* Line 1806 of yacc.c */ 7451 #line 1707 "parser.yy" 7452 { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); } 7453 break; 7454 7455 case 462: 7481 7456 7482 7457 /* Line 1806 of yacc.c */ 7483 7458 #line 1709 "parser.yy" 7484 { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); } 7485 break; 7486 7487 case 460: 7488 7489 /* 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) ); } 7499 break; 7500 7501 case 463: 7502 7503 /* Line 1806 of yacc.c */ 7504 #line 1717 "parser.yy" 7505 { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); } 7459 { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); } 7506 7460 break; 7507 7461 … … 7509 7463 7510 7464 /* Line 1806 of yacc.c */ 7511 #line 17 19"parser.yy"7512 { (yyval. in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) )) ); }7465 #line 1725 "parser.yy" 7466 { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); } 7513 7467 break; 7514 7468 … … 7516 7470 7517 7471 /* Line 1806 of yacc.c */ 7518 #line 1735 "parser.yy" 7519 { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); } 7472 #line 1731 "parser.yy" 7473 { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); } 7474 break; 7475 7476 case 467: 7477 7478 /* Line 1806 of yacc.c */ 7479 #line 1739 "parser.yy" 7480 { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); } 7520 7481 break; 7521 7482 … … 7524 7485 /* Line 1806 of yacc.c */ 7525 7486 #line 1741 "parser.yy" 7526 { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }7487 { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); } 7527 7488 break; 7528 7489 … … 7530 7491 7531 7492 /* Line 1806 of yacc.c */ 7532 #line 174 9"parser.yy"7533 { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) )); }7493 #line 1744 "parser.yy" 7494 { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); } 7534 7495 break; 7535 7496 … … 7537 7498 7538 7499 /* Line 1806 of yacc.c */ 7539 #line 17 51"parser.yy"7540 { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) )); }7500 #line 1746 "parser.yy" 7501 { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); } 7541 7502 break; 7542 7503 … … 7544 7505 7545 7506 /* Line 1806 of yacc.c */ 7546 #line 17 54"parser.yy"7547 { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }7507 #line 1748 "parser.yy" 7508 { (yyval.en) = new DesignatorNode( new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ), true ); } 7548 7509 break; 7549 7510 … … 7551 7512 7552 7513 /* Line 1806 of yacc.c */ 7553 #line 1756 "parser.yy" 7554 { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); } 7555 break; 7556 7557 case 473: 7558 7559 /* 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 ); } 7514 #line 1750 "parser.yy" 7515 { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); } 7562 7516 break; 7563 7517 … … 7565 7519 7566 7520 /* Line 1806 of yacc.c */ 7567 #line 1760 "parser.yy" 7568 { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); } 7521 #line 1774 "parser.yy" 7522 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 7523 break; 7524 7525 case 475: 7526 7527 /* Line 1806 of yacc.c */ 7528 #line 1776 "parser.yy" 7529 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 7569 7530 break; 7570 7531 7571 7532 case 476: 7533 7534 /* Line 1806 of yacc.c */ 7535 #line 1778 "parser.yy" 7536 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); } 7537 break; 7538 7539 case 478: 7572 7540 7573 7541 /* Line 1806 of yacc.c */ … … 7576 7544 break; 7577 7545 7578 case 47 7:7546 case 479: 7579 7547 7580 7548 /* Line 1806 of yacc.c */ … … 7583 7551 break; 7584 7552 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 7553 case 480: 7593 7554 7594 7555 /* Line 1806 of yacc.c */ 7595 #line 1794 "parser.yy" 7596 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 7597 break; 7598 7599 case 481: 7600 7601 /* Line 1806 of yacc.c */ 7602 #line 1796 "parser.yy" 7603 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 7556 #line 1791 "parser.yy" 7557 { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); } 7604 7558 break; 7605 7559 … … 7607 7561 7608 7562 /* Line 1806 of yacc.c */ 7609 #line 1801 "parser.yy" 7610 { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); } 7563 #line 1797 "parser.yy" 7564 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); } 7565 break; 7566 7567 case 483: 7568 7569 /* Line 1806 of yacc.c */ 7570 #line 1802 "parser.yy" 7571 { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); } 7611 7572 break; 7612 7573 … … 7614 7575 7615 7576 /* Line 1806 of yacc.c */ 7616 #line 1807 "parser.yy" 7617 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); } 7618 break; 7619 7620 case 485: 7577 #line 1804 "parser.yy" 7578 { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); } 7579 break; 7580 7581 case 486: 7582 7583 /* Line 1806 of yacc.c */ 7584 #line 1810 "parser.yy" 7585 { (yyval.tclass) = DeclarationNode::Type; } 7586 break; 7587 7588 case 487: 7621 7589 7622 7590 /* Line 1806 of yacc.c */ 7623 7591 #line 1812 "parser.yy" 7624 { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }7625 break; 7626 7627 case 48 6:7592 { (yyval.tclass) = DeclarationNode::Ftype; } 7593 break; 7594 7595 case 488: 7628 7596 7629 7597 /* Line 1806 of yacc.c */ 7630 7598 #line 1814 "parser.yy" 7631 { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); } 7632 break; 7633 7634 case 488: 7635 7636 /* Line 1806 of yacc.c */ 7637 #line 1820 "parser.yy" 7638 { (yyval.tclass) = DeclarationNode::Type; } 7599 { (yyval.tclass) = DeclarationNode::Dtype; } 7639 7600 break; 7640 7601 … … 7642 7603 7643 7604 /* Line 1806 of yacc.c */ 7644 #line 18 22"parser.yy"7645 { (yyval. tclass) = DeclarationNode::Ftype; }7605 #line 1819 "parser.yy" 7606 { (yyval.decl) = 0; } 7646 7607 break; 7647 7608 … … 7649 7610 7650 7611 /* Line 1806 of yacc.c */ 7651 #line 182 4"parser.yy"7652 { (yyval. tclass) = DeclarationNode::Dtype; }7612 #line 1821 "parser.yy" 7613 { (yyval.decl) = (yyvsp[(1) - (2)].decl) == 0 ? (yyvsp[(2) - (2)].decl) : (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); } 7653 7614 break; 7654 7615 … … 7656 7617 7657 7618 /* Line 1806 of yacc.c */ 7658 #line 1829 "parser.yy" 7659 { (yyval.decl) = 0; } 7660 break; 7661 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 7669 case 493: 7670 7671 /* Line 1806 of yacc.c */ 7672 #line 1836 "parser.yy" 7619 #line 1826 "parser.yy" 7673 7620 { 7674 7621 typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) ); … … 7677 7624 break; 7678 7625 7626 case 492: 7627 7628 /* Line 1806 of yacc.c */ 7629 #line 1831 "parser.yy" 7630 { (yyval.decl) = (yyvsp[(4) - (5)].decl); } 7631 break; 7632 7633 case 493: 7634 7635 /* Line 1806 of yacc.c */ 7636 #line 1833 "parser.yy" 7637 { (yyval.decl) = 0; } 7638 break; 7639 7679 7640 case 494: 7680 7641 7681 7642 /* Line 1806 of yacc.c */ 7643 #line 1838 "parser.yy" 7644 { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); } 7645 break; 7646 7647 case 496: 7648 7649 /* Line 1806 of yacc.c */ 7682 7650 #line 1841 "parser.yy" 7683 { (yyval. decl) = (yyvsp[(4) - (5)].decl); }7684 break; 7685 7686 case 49 5:7651 { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); } 7652 break; 7653 7654 case 497: 7687 7655 7688 7656 /* Line 1806 of yacc.c */ 7689 7657 #line 1843 "parser.yy" 7690 { (yyval. decl) = 0; }7691 break; 7692 7693 case 49 6:7658 { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); } 7659 break; 7660 7661 case 498: 7694 7662 7695 7663 /* Line 1806 of yacc.c */ 7696 7664 #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) ))); } 7665 { (yyval.decl) = (yyvsp[(2) - (2)].decl); } 7705 7666 break; 7706 7667 … … 7708 7669 7709 7670 /* Line 1806 of yacc.c */ 7710 #line 185 3"parser.yy"7711 { (yyval. en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }7671 #line 1850 "parser.yy" 7672 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); } 7712 7673 break; 7713 7674 … … 7715 7676 7716 7677 /* Line 1806 of yacc.c */ 7717 #line 185 8"parser.yy"7718 { (yyval.decl) = (yyvsp[( 2) - (2)].decl); }7678 #line 1852 "parser.yy" 7679 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); } 7719 7680 break; 7720 7681 … … 7722 7683 7723 7684 /* Line 1806 of yacc.c */ 7724 #line 18 60"parser.yy"7725 { (yyval.decl) = (yyvsp[( 3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }7685 #line 1857 "parser.yy" 7686 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); } 7726 7687 break; 7727 7688 … … 7729 7690 7730 7691 /* Line 1806 of yacc.c */ 7731 #line 18 62"parser.yy"7732 { (yyval.decl) = (yyvsp[(1) - ( 3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl)) ); }7692 #line 1859 "parser.yy" 7693 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); } 7733 7694 break; 7734 7695 … … 7736 7697 7737 7698 /* 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" 7699 #line 1864 "parser.yy" 7753 7700 { 7754 7701 typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD ); … … 7757 7704 break; 7758 7705 7759 case 50 6:7760 7761 /* Line 1806 of yacc.c */ 7762 #line 18 79 "parser.yy"7706 case 504: 7707 7708 /* Line 1806 of yacc.c */ 7709 #line 1869 "parser.yy" 7763 7710 { 7764 7711 typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG ); … … 7767 7714 break; 7768 7715 7769 case 50 7:7770 7771 /* Line 1806 of yacc.c */ 7772 #line 18 87 "parser.yy"7716 case 505: 7717 7718 /* Line 1806 of yacc.c */ 7719 #line 1877 "parser.yy" 7773 7720 { 7774 7721 typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID ); … … 7777 7724 break; 7778 7725 7779 case 50 8:7780 7781 /* Line 1806 of yacc.c */ 7782 #line 18 92 "parser.yy"7726 case 506: 7727 7728 /* Line 1806 of yacc.c */ 7729 #line 1882 "parser.yy" 7783 7730 { 7784 7731 typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) ); … … 7787 7734 break; 7788 7735 7789 case 50 9:7790 7791 /* Line 1806 of yacc.c */ 7792 #line 18 97 "parser.yy"7736 case 507: 7737 7738 /* Line 1806 of yacc.c */ 7739 #line 1887 "parser.yy" 7793 7740 { 7794 7741 typedefTable.leaveTrait(); … … 7798 7745 break; 7799 7746 7800 case 511: 7747 case 509: 7748 7749 /* Line 1806 of yacc.c */ 7750 #line 1897 "parser.yy" 7751 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); } 7752 break; 7753 7754 case 512: 7801 7755 7802 7756 /* Line 1806 of yacc.c */ 7803 7757 #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"7811 7758 { 7812 7759 typedefTable.addToEnclosingScope2( TypedefTable::ID ); … … 7815 7762 break; 7816 7763 7817 case 51 5:7818 7819 /* Line 1806 of yacc.c */ 7820 #line 19 22 "parser.yy"7764 case 513: 7765 7766 /* Line 1806 of yacc.c */ 7767 #line 1912 "parser.yy" 7821 7768 { 7822 7769 typedefTable.addToEnclosingScope2( TypedefTable::ID ); … … 7825 7772 break; 7826 7773 7827 case 51 6:7828 7829 /* Line 1806 of yacc.c */ 7830 #line 19 27 "parser.yy"7774 case 514: 7775 7776 /* Line 1806 of yacc.c */ 7777 #line 1917 "parser.yy" 7831 7778 { 7832 7779 typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID ); … … 7835 7782 break; 7836 7783 7837 case 51 7:7838 7839 /* Line 1806 of yacc.c */ 7840 #line 19 35 "parser.yy"7784 case 515: 7785 7786 /* Line 1806 of yacc.c */ 7787 #line 1925 "parser.yy" 7841 7788 { 7842 7789 typedefTable.addToEnclosingScope2( TypedefTable::ID ); … … 7845 7792 break; 7846 7793 7847 case 51 8:7848 7849 /* Line 1806 of yacc.c */ 7850 #line 19 40 "parser.yy"7794 case 516: 7795 7796 /* Line 1806 of yacc.c */ 7797 #line 1930 "parser.yy" 7851 7798 { 7852 7799 typedefTable.addToEnclosingScope2( TypedefTable::ID ); … … 7855 7802 break; 7856 7803 7857 case 51 9:7858 7859 /* Line 1806 of yacc.c */ 7860 #line 19 50 "parser.yy"7804 case 517: 7805 7806 /* Line 1806 of yacc.c */ 7807 #line 1940 "parser.yy" 7861 7808 {} 7862 7809 break; 7863 7810 7864 case 5 20:7865 7866 /* Line 1806 of yacc.c */ 7867 #line 19 52 "parser.yy"7811 case 518: 7812 7813 /* Line 1806 of yacc.c */ 7814 #line 1942 "parser.yy" 7868 7815 { 7869 7816 if ( theTree ) { … … 7875 7822 break; 7876 7823 7877 case 52 2:7878 7879 /* Line 1806 of yacc.c */ 7880 #line 19 64 "parser.yy"7824 case 520: 7825 7826 /* Line 1806 of yacc.c */ 7827 #line 1954 "parser.yy" 7881 7828 { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); } 7882 7829 break; 7883 7830 7884 case 523: 7831 case 521: 7832 7833 /* Line 1806 of yacc.c */ 7834 #line 1959 "parser.yy" 7835 { (yyval.decl) = 0; } 7836 break; 7837 7838 case 525: 7839 7840 /* Line 1806 of yacc.c */ 7841 #line 1967 "parser.yy" 7842 {} 7843 break; 7844 7845 case 526: 7885 7846 7886 7847 /* Line 1806 of yacc.c */ 7887 7848 #line 1969 "parser.yy" 7888 { (yyval.decl) = 0; }7889 break;7890 7891 case 527:7892 7893 /* Line 1806 of yacc.c */7894 #line 1977 "parser.yy"7895 {}7896 break;7897 7898 case 528:7899 7900 /* Line 1806 of yacc.c */7901 #line 1979 "parser.yy"7902 7849 { 7903 7850 linkageStack.push( linkage ); … … 7906 7853 break; 7907 7854 7908 case 52 9:7909 7910 /* Line 1806 of yacc.c */ 7911 #line 19 84 "parser.yy"7855 case 527: 7856 7857 /* Line 1806 of yacc.c */ 7858 #line 1974 "parser.yy" 7912 7859 { 7913 7860 linkage = linkageStack.top(); … … 7917 7864 break; 7918 7865 7866 case 528: 7867 7868 /* Line 1806 of yacc.c */ 7869 #line 1980 "parser.yy" 7870 { (yyval.decl) = (yyvsp[(2) - (2)].decl); } 7871 break; 7872 7919 7873 case 530: 7920 7874 7921 7875 /* Line 1806 of yacc.c */ 7922 7876 #line 1990 "parser.yy" 7923 { (yyval.decl) = (yyvsp[(2) - (2)].decl); }7924 break;7925 7926 case 532:7927 7928 /* Line 1806 of yacc.c */7929 #line 2000 "parser.yy"7930 7877 { 7931 7878 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7935 7882 break; 7936 7883 7937 case 53 3:7938 7939 /* Line 1806 of yacc.c */ 7940 #line 2006 "parser.yy"7884 case 531: 7885 7886 /* Line 1806 of yacc.c */ 7887 #line 1996 "parser.yy" 7941 7888 { 7942 7889 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7946 7893 break; 7947 7894 7948 case 53 4:7949 7950 /* Line 1806 of yacc.c */ 7951 #line 20 15 "parser.yy"7895 case 532: 7896 7897 /* Line 1806 of yacc.c */ 7898 #line 2005 "parser.yy" 7952 7899 { 7953 7900 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7957 7904 break; 7958 7905 7959 case 53 5:7960 7961 /* Line 1806 of yacc.c */ 7962 #line 20 21 "parser.yy"7906 case 533: 7907 7908 /* Line 1806 of yacc.c */ 7909 #line 2011 "parser.yy" 7963 7910 { 7964 7911 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7968 7915 break; 7969 7916 7970 case 53 6:7971 7972 /* Line 1806 of yacc.c */ 7973 #line 20 27 "parser.yy"7917 case 534: 7918 7919 /* Line 1806 of yacc.c */ 7920 #line 2017 "parser.yy" 7974 7921 { 7975 7922 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7979 7926 break; 7980 7927 7981 case 53 7:7982 7983 /* Line 1806 of yacc.c */ 7984 #line 20 33 "parser.yy"7928 case 535: 7929 7930 /* Line 1806 of yacc.c */ 7931 #line 2023 "parser.yy" 7985 7932 { 7986 7933 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7990 7937 break; 7991 7938 7992 case 53 8:7993 7994 /* Line 1806 of yacc.c */ 7995 #line 20 39 "parser.yy"7939 case 536: 7940 7941 /* Line 1806 of yacc.c */ 7942 #line 2029 "parser.yy" 7996 7943 { 7997 7944 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 8001 7948 break; 8002 7949 8003 case 53 9:8004 8005 /* Line 1806 of yacc.c */ 8006 #line 20 47 "parser.yy"7950 case 537: 7951 7952 /* Line 1806 of yacc.c */ 7953 #line 2037 "parser.yy" 8007 7954 { 8008 7955 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 8012 7959 break; 8013 7960 8014 case 5 40:8015 8016 /* Line 1806 of yacc.c */ 8017 #line 20 53 "parser.yy"7961 case 538: 7962 7963 /* Line 1806 of yacc.c */ 7964 #line 2043 "parser.yy" 8018 7965 { 8019 7966 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 8023 7970 break; 8024 7971 8025 case 5 41:8026 8027 /* Line 1806 of yacc.c */ 8028 #line 20 61 "parser.yy"7972 case 539: 7973 7974 /* Line 1806 of yacc.c */ 7975 #line 2051 "parser.yy" 8029 7976 { 8030 7977 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 8034 7981 break; 8035 7982 8036 case 54 2:8037 8038 /* Line 1806 of yacc.c */ 8039 #line 20 67 "parser.yy"7983 case 540: 7984 7985 /* Line 1806 of yacc.c */ 7986 #line 2057 "parser.yy" 8040 7987 { 8041 7988 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 8045 7992 break; 8046 7993 8047 case 546: 7994 case 544: 7995 7996 /* Line 1806 of yacc.c */ 7997 #line 2072 "parser.yy" 7998 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 7999 break; 8000 8001 case 547: 8048 8002 8049 8003 /* Line 1806 of yacc.c */ 8050 8004 #line 2082 "parser.yy" 8051 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }8052 break;8053 8054 case 549:8055 8056 /* Line 1806 of yacc.c */8057 #line 2092 "parser.yy"8058 8005 { (yyval.decl) = 0; } 8059 8006 break; 8060 8007 8061 case 55 2:8062 8063 /* Line 1806 of yacc.c */ 8064 #line 20 99 "parser.yy"8008 case 550: 8009 8010 /* Line 1806 of yacc.c */ 8011 #line 2089 "parser.yy" 8065 8012 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 8066 8013 break; 8067 8014 8068 case 55 3:8069 8070 /* Line 1806 of yacc.c */ 8071 #line 2 105 "parser.yy"8015 case 551: 8016 8017 /* Line 1806 of yacc.c */ 8018 #line 2095 "parser.yy" 8072 8019 { (yyval.decl) = 0; } 8073 8020 break; 8074 8021 8022 case 557: 8023 8024 /* Line 1806 of yacc.c */ 8025 #line 2110 "parser.yy" 8026 {} 8027 break; 8028 8029 case 558: 8030 8031 /* Line 1806 of yacc.c */ 8032 #line 2111 "parser.yy" 8033 {} 8034 break; 8035 8075 8036 case 559: 8076 8037 8077 8038 /* Line 1806 of yacc.c */ 8078 #line 21 20"parser.yy"8039 #line 2112 "parser.yy" 8079 8040 {} 8080 8041 break; … … 8083 8044 8084 8045 /* Line 1806 of yacc.c */ 8085 #line 21 21"parser.yy"8046 #line 2113 "parser.yy" 8086 8047 {} 8087 8048 break; … … 8090 8051 8091 8052 /* Line 1806 of yacc.c */ 8092 #line 2122 "parser.yy" 8093 {} 8094 break; 8095 8096 case 562: 8097 8098 /* Line 1806 of yacc.c */ 8099 #line 2123 "parser.yy" 8100 {} 8053 #line 2148 "parser.yy" 8054 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8101 8055 break; 8102 8056 … … 8104 8058 8105 8059 /* Line 1806 of yacc.c */ 8060 #line 2151 "parser.yy" 8061 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8062 break; 8063 8064 case 564: 8065 8066 /* Line 1806 of yacc.c */ 8067 #line 2153 "parser.yy" 8068 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8069 break; 8070 8071 case 565: 8072 8073 /* Line 1806 of yacc.c */ 8106 8074 #line 2158 "parser.yy" 8107 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }8108 break;8109 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"8128 8075 { 8129 8076 typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) ); … … 8132 8079 break; 8133 8080 8081 case 566: 8082 8083 /* Line 1806 of yacc.c */ 8084 #line 2163 "parser.yy" 8085 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8086 break; 8087 8088 case 567: 8089 8090 /* Line 1806 of yacc.c */ 8091 #line 2168 "parser.yy" 8092 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8093 break; 8094 8134 8095 case 568: 8135 8096 8136 8097 /* Line 1806 of yacc.c */ 8137 #line 2173 "parser.yy" 8098 #line 2170 "parser.yy" 8099 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8100 break; 8101 8102 case 569: 8103 8104 /* Line 1806 of yacc.c */ 8105 #line 2172 "parser.yy" 8138 8106 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8139 8107 break; 8140 8108 8141 case 569: 8142 8143 /* Line 1806 of yacc.c */ 8144 #line 2178 "parser.yy" 8109 case 570: 8110 8111 /* Line 1806 of yacc.c */ 8112 #line 2177 "parser.yy" 8113 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8114 break; 8115 8116 case 571: 8117 8118 /* Line 1806 of yacc.c */ 8119 #line 2179 "parser.yy" 8120 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8121 break; 8122 8123 case 572: 8124 8125 /* Line 1806 of yacc.c */ 8126 #line 2181 "parser.yy" 8127 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8128 break; 8129 8130 case 573: 8131 8132 /* Line 1806 of yacc.c */ 8133 #line 2183 "parser.yy" 8134 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8135 break; 8136 8137 case 574: 8138 8139 /* Line 1806 of yacc.c */ 8140 #line 2188 "parser.yy" 8141 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8142 break; 8143 8144 case 575: 8145 8146 /* Line 1806 of yacc.c */ 8147 #line 2190 "parser.yy" 8148 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8149 break; 8150 8151 case 576: 8152 8153 /* Line 1806 of yacc.c */ 8154 #line 2200 "parser.yy" 8155 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8156 break; 8157 8158 case 578: 8159 8160 /* Line 1806 of yacc.c */ 8161 #line 2203 "parser.yy" 8162 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8163 break; 8164 8165 case 579: 8166 8167 /* Line 1806 of yacc.c */ 8168 #line 2208 "parser.yy" 8169 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); } 8170 break; 8171 8172 case 580: 8173 8174 /* Line 1806 of yacc.c */ 8175 #line 2210 "parser.yy" 8176 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8177 break; 8178 8179 case 581: 8180 8181 /* Line 1806 of yacc.c */ 8182 #line 2212 "parser.yy" 8183 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8184 break; 8185 8186 case 582: 8187 8188 /* Line 1806 of yacc.c */ 8189 #line 2217 "parser.yy" 8145 8190 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8146 8191 break; 8147 8192 8148 case 5 70:8149 8150 /* Line 1806 of yacc.c */ 8151 #line 2 180"parser.yy"8193 case 583: 8194 8195 /* Line 1806 of yacc.c */ 8196 #line 2219 "parser.yy" 8152 8197 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8153 8198 break; 8154 8199 8155 case 5 71:8156 8157 /* Line 1806 of yacc.c */ 8158 #line 2 182"parser.yy"8200 case 584: 8201 8202 /* Line 1806 of yacc.c */ 8203 #line 2221 "parser.yy" 8159 8204 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8160 8205 break; 8161 8206 8162 case 572: 8163 8164 /* Line 1806 of yacc.c */ 8165 #line 2187 "parser.yy" 8207 case 585: 8208 8209 /* Line 1806 of yacc.c */ 8210 #line 2226 "parser.yy" 8211 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8212 break; 8213 8214 case 586: 8215 8216 /* Line 1806 of yacc.c */ 8217 #line 2228 "parser.yy" 8218 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8219 break; 8220 8221 case 587: 8222 8223 /* Line 1806 of yacc.c */ 8224 #line 2230 "parser.yy" 8225 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8226 break; 8227 8228 case 591: 8229 8230 /* Line 1806 of yacc.c */ 8231 #line 2245 "parser.yy" 8232 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); } 8233 break; 8234 8235 case 592: 8236 8237 /* Line 1806 of yacc.c */ 8238 #line 2247 "parser.yy" 8239 { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); } 8240 break; 8241 8242 case 593: 8243 8244 /* Line 1806 of yacc.c */ 8245 #line 2249 "parser.yy" 8246 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8247 break; 8248 8249 case 594: 8250 8251 /* Line 1806 of yacc.c */ 8252 #line 2254 "parser.yy" 8253 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8254 break; 8255 8256 case 595: 8257 8258 /* Line 1806 of yacc.c */ 8259 #line 2256 "parser.yy" 8260 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8261 break; 8262 8263 case 596: 8264 8265 /* Line 1806 of yacc.c */ 8266 #line 2258 "parser.yy" 8267 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8268 break; 8269 8270 case 597: 8271 8272 /* Line 1806 of yacc.c */ 8273 #line 2263 "parser.yy" 8274 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8275 break; 8276 8277 case 598: 8278 8279 /* Line 1806 of yacc.c */ 8280 #line 2265 "parser.yy" 8281 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8282 break; 8283 8284 case 599: 8285 8286 /* Line 1806 of yacc.c */ 8287 #line 2267 "parser.yy" 8288 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8289 break; 8290 8291 case 600: 8292 8293 /* Line 1806 of yacc.c */ 8294 #line 2282 "parser.yy" 8295 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8296 break; 8297 8298 case 602: 8299 8300 /* Line 1806 of yacc.c */ 8301 #line 2285 "parser.yy" 8302 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8303 break; 8304 8305 case 603: 8306 8307 /* Line 1806 of yacc.c */ 8308 #line 2287 "parser.yy" 8309 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8310 break; 8311 8312 case 605: 8313 8314 /* Line 1806 of yacc.c */ 8315 #line 2293 "parser.yy" 8316 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8317 break; 8318 8319 case 606: 8320 8321 /* Line 1806 of yacc.c */ 8322 #line 2298 "parser.yy" 8323 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8324 break; 8325 8326 case 607: 8327 8328 /* Line 1806 of yacc.c */ 8329 #line 2300 "parser.yy" 8330 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8331 break; 8332 8333 case 608: 8334 8335 /* Line 1806 of yacc.c */ 8336 #line 2302 "parser.yy" 8337 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8338 break; 8339 8340 case 609: 8341 8342 /* Line 1806 of yacc.c */ 8343 #line 2307 "parser.yy" 8166 8344 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8167 8345 break; 8168 8346 8169 case 573:8170 8171 /* Line 1806 of yacc.c */ 8172 #line 2 189 "parser.yy"8347 case 610: 8348 8349 /* Line 1806 of yacc.c */ 8350 #line 2309 "parser.yy" 8173 8351 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8174 8352 break; 8175 8353 8176 case 574:8177 8178 /* Line 1806 of yacc.c */ 8179 #line 2 191 "parser.yy"8354 case 611: 8355 8356 /* Line 1806 of yacc.c */ 8357 #line 2311 "parser.yy" 8180 8358 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8181 8359 break; 8182 8360 8183 case 575:8184 8185 /* Line 1806 of yacc.c */ 8186 #line 2 193 "parser.yy"8361 case 612: 8362 8363 /* Line 1806 of yacc.c */ 8364 #line 2313 "parser.yy" 8187 8365 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8188 8366 break; 8189 8367 8190 case 576: 8191 8192 /* Line 1806 of yacc.c */ 8193 #line 2198 "parser.yy" 8368 case 613: 8369 8370 /* Line 1806 of yacc.c */ 8371 #line 2318 "parser.yy" 8372 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); } 8373 break; 8374 8375 case 614: 8376 8377 /* Line 1806 of yacc.c */ 8378 #line 2320 "parser.yy" 8194 8379 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8195 8380 break; 8196 8381 8197 case 577:8198 8199 /* Line 1806 of yacc.c */ 8200 #line 2 200"parser.yy"8382 case 615: 8383 8384 /* Line 1806 of yacc.c */ 8385 #line 2322 "parser.yy" 8201 8386 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8202 8387 break; 8203 8388 8204 case 578:8205 8206 /* Line 1806 of yacc.c */ 8207 #line 2 210"parser.yy"8389 case 616: 8390 8391 /* Line 1806 of yacc.c */ 8392 #line 2332 "parser.yy" 8208 8393 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8209 8394 break; 8210 8395 8211 case 580:8212 8213 /* Line 1806 of yacc.c */ 8214 #line 2 213"parser.yy"8396 case 618: 8397 8398 /* Line 1806 of yacc.c */ 8399 #line 2335 "parser.yy" 8215 8400 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8216 8401 break; 8217 8402 8218 case 581: 8219 8220 /* Line 1806 of yacc.c */ 8221 #line 2218 "parser.yy" 8403 case 619: 8404 8405 /* Line 1806 of yacc.c */ 8406 #line 2337 "parser.yy" 8407 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8408 break; 8409 8410 case 620: 8411 8412 /* Line 1806 of yacc.c */ 8413 #line 2342 "parser.yy" 8414 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8415 break; 8416 8417 case 621: 8418 8419 /* Line 1806 of yacc.c */ 8420 #line 2344 "parser.yy" 8421 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8422 break; 8423 8424 case 622: 8425 8426 /* Line 1806 of yacc.c */ 8427 #line 2346 "parser.yy" 8428 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8429 break; 8430 8431 case 623: 8432 8433 /* Line 1806 of yacc.c */ 8434 #line 2351 "parser.yy" 8435 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8436 break; 8437 8438 case 624: 8439 8440 /* Line 1806 of yacc.c */ 8441 #line 2353 "parser.yy" 8442 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8443 break; 8444 8445 case 625: 8446 8447 /* Line 1806 of yacc.c */ 8448 #line 2355 "parser.yy" 8449 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8450 break; 8451 8452 case 626: 8453 8454 /* Line 1806 of yacc.c */ 8455 #line 2357 "parser.yy" 8456 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8457 break; 8458 8459 case 627: 8460 8461 /* Line 1806 of yacc.c */ 8462 #line 2362 "parser.yy" 8222 8463 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); } 8223 8464 break; 8224 8465 8225 case 582:8226 8227 /* Line 1806 of yacc.c */ 8228 #line 2 220"parser.yy"8466 case 628: 8467 8468 /* Line 1806 of yacc.c */ 8469 #line 2364 "parser.yy" 8229 8470 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8230 8471 break; 8231 8472 8232 case 583:8233 8234 /* Line 1806 of yacc.c */ 8235 #line 2 222"parser.yy"8473 case 629: 8474 8475 /* Line 1806 of yacc.c */ 8476 #line 2366 "parser.yy" 8236 8477 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8237 8478 break; 8238 8479 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" 8480 case 630: 8481 8482 /* Line 1806 of yacc.c */ 8483 #line 2397 "parser.yy" 8348 8484 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8349 8485 break; 8350 8486 8351 case 6 04:8352 8353 /* Line 1806 of yacc.c */ 8354 #line 2 295"parser.yy"8487 case 632: 8488 8489 /* Line 1806 of yacc.c */ 8490 #line 2400 "parser.yy" 8355 8491 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8356 8492 break; 8357 8493 8358 case 6 05:8359 8360 /* Line 1806 of yacc.c */ 8361 #line 2 297"parser.yy"8494 case 633: 8495 8496 /* Line 1806 of yacc.c */ 8497 #line 2402 "parser.yy" 8362 8498 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8363 8499 break; 8364 8500 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: 8501 case 634: 8534 8502 8535 8503 /* Line 1806 of yacc.c */ 8536 8504 #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"8558 8505 { 8559 8506 typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) ); … … 8562 8509 break; 8563 8510 8564 case 63 7:8565 8566 /* Line 1806 of yacc.c */ 8567 #line 24 22 "parser.yy"8511 case 635: 8512 8513 /* Line 1806 of yacc.c */ 8514 #line 2412 "parser.yy" 8568 8515 { 8569 8516 typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) ); … … 8572 8519 break; 8573 8520 8521 case 636: 8522 8523 /* Line 1806 of yacc.c */ 8524 #line 2420 "parser.yy" 8525 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8526 break; 8527 8528 case 637: 8529 8530 /* Line 1806 of yacc.c */ 8531 #line 2422 "parser.yy" 8532 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8533 break; 8534 8574 8535 case 638: 8575 8536 8576 8537 /* Line 1806 of yacc.c */ 8577 #line 2430 "parser.yy" 8538 #line 2424 "parser.yy" 8539 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8540 break; 8541 8542 case 639: 8543 8544 /* Line 1806 of yacc.c */ 8545 #line 2429 "parser.yy" 8546 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8547 break; 8548 8549 case 640: 8550 8551 /* Line 1806 of yacc.c */ 8552 #line 2431 "parser.yy" 8553 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8554 break; 8555 8556 case 641: 8557 8558 /* Line 1806 of yacc.c */ 8559 #line 2436 "parser.yy" 8560 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); } 8561 break; 8562 8563 case 642: 8564 8565 /* Line 1806 of yacc.c */ 8566 #line 2438 "parser.yy" 8567 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8568 break; 8569 8570 case 644: 8571 8572 /* Line 1806 of yacc.c */ 8573 #line 2453 "parser.yy" 8574 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8575 break; 8576 8577 case 645: 8578 8579 /* Line 1806 of yacc.c */ 8580 #line 2455 "parser.yy" 8581 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8582 break; 8583 8584 case 646: 8585 8586 /* Line 1806 of yacc.c */ 8587 #line 2460 "parser.yy" 8588 { (yyval.decl) = DeclarationNode::newPointer( 0 ); } 8589 break; 8590 8591 case 647: 8592 8593 /* Line 1806 of yacc.c */ 8594 #line 2462 "parser.yy" 8595 { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); } 8596 break; 8597 8598 case 648: 8599 8600 /* Line 1806 of yacc.c */ 8601 #line 2464 "parser.yy" 8578 8602 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8579 8603 break; 8580 8604 8581 case 6 39:8582 8583 /* Line 1806 of yacc.c */ 8584 #line 24 32"parser.yy"8605 case 649: 8606 8607 /* Line 1806 of yacc.c */ 8608 #line 2466 "parser.yy" 8585 8609 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8586 8610 break; 8587 8611 8588 case 6 40:8589 8590 /* Line 1806 of yacc.c */ 8591 #line 24 34"parser.yy"8612 case 650: 8613 8614 /* Line 1806 of yacc.c */ 8615 #line 2468 "parser.yy" 8592 8616 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8593 8617 break; 8594 8618 8595 case 641: 8596 8597 /* Line 1806 of yacc.c */ 8598 #line 2439 "parser.yy" 8599 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8600 break; 8601 8602 case 642: 8603 8604 /* Line 1806 of yacc.c */ 8605 #line 2441 "parser.yy" 8619 case 652: 8620 8621 /* Line 1806 of yacc.c */ 8622 #line 2474 "parser.yy" 8606 8623 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8607 8624 break; 8608 8625 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" 8620 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8621 break; 8622 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: 8626 case 653: 8659 8627 8660 8628 /* Line 1806 of yacc.c */ 8661 8629 #line 2476 "parser.yy" 8662 { (yyval.decl) = (yyvsp[( 3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl)) ); }8663 break; 8664 8665 case 65 2:8630 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8631 break; 8632 8633 case 654: 8666 8634 8667 8635 /* Line 1806 of yacc.c */ … … 8670 8638 break; 8671 8639 8672 case 654: 8673 8674 /* Line 1806 of yacc.c */ 8675 #line 2484 "parser.yy" 8640 case 655: 8641 8642 /* Line 1806 of yacc.c */ 8643 #line 2483 "parser.yy" 8644 { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); } 8645 break; 8646 8647 case 656: 8648 8649 /* Line 1806 of yacc.c */ 8650 #line 2485 "parser.yy" 8651 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8652 break; 8653 8654 case 657: 8655 8656 /* Line 1806 of yacc.c */ 8657 #line 2487 "parser.yy" 8658 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8659 break; 8660 8661 case 658: 8662 8663 /* Line 1806 of yacc.c */ 8664 #line 2493 "parser.yy" 8665 { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); } 8666 break; 8667 8668 case 659: 8669 8670 /* Line 1806 of yacc.c */ 8671 #line 2495 "parser.yy" 8672 { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); } 8673 break; 8674 8675 case 661: 8676 8677 /* Line 1806 of yacc.c */ 8678 #line 2501 "parser.yy" 8679 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); } 8680 break; 8681 8682 case 662: 8683 8684 /* Line 1806 of yacc.c */ 8685 #line 2503 "parser.yy" 8686 { (yyval.decl) = DeclarationNode::newVarArray( 0 ); } 8687 break; 8688 8689 case 663: 8690 8691 /* Line 1806 of yacc.c */ 8692 #line 2505 "parser.yy" 8693 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); } 8694 break; 8695 8696 case 664: 8697 8698 /* Line 1806 of yacc.c */ 8699 #line 2507 "parser.yy" 8700 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); } 8701 break; 8702 8703 case 666: 8704 8705 /* Line 1806 of yacc.c */ 8706 #line 2522 "parser.yy" 8707 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8708 break; 8709 8710 case 667: 8711 8712 /* Line 1806 of yacc.c */ 8713 #line 2524 "parser.yy" 8714 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8715 break; 8716 8717 case 668: 8718 8719 /* Line 1806 of yacc.c */ 8720 #line 2529 "parser.yy" 8721 { (yyval.decl) = DeclarationNode::newPointer( 0 ); } 8722 break; 8723 8724 case 669: 8725 8726 /* Line 1806 of yacc.c */ 8727 #line 2531 "parser.yy" 8728 { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); } 8729 break; 8730 8731 case 670: 8732 8733 /* Line 1806 of yacc.c */ 8734 #line 2533 "parser.yy" 8735 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8736 break; 8737 8738 case 671: 8739 8740 /* Line 1806 of yacc.c */ 8741 #line 2535 "parser.yy" 8742 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8743 break; 8744 8745 case 672: 8746 8747 /* Line 1806 of yacc.c */ 8748 #line 2537 "parser.yy" 8749 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8750 break; 8751 8752 case 674: 8753 8754 /* Line 1806 of yacc.c */ 8755 #line 2543 "parser.yy" 8676 8756 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8677 8757 break; 8678 8758 8679 case 6 55:8680 8681 /* Line 1806 of yacc.c */ 8682 #line 2 486"parser.yy"8759 case 675: 8760 8761 /* Line 1806 of yacc.c */ 8762 #line 2545 "parser.yy" 8683 8763 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8684 8764 break; 8685 8765 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: 8766 case 676: 8799 8767 8800 8768 /* Line 1806 of yacc.c */ … … 8803 8771 break; 8804 8772 8805 case 676: 8806 8807 /* Line 1806 of yacc.c */ 8808 #line 2553 "parser.yy" 8773 case 677: 8774 8775 /* Line 1806 of yacc.c */ 8776 #line 2552 "parser.yy" 8777 { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); } 8778 break; 8779 8780 case 678: 8781 8782 /* Line 1806 of yacc.c */ 8783 #line 2554 "parser.yy" 8784 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8785 break; 8786 8787 case 679: 8788 8789 /* Line 1806 of yacc.c */ 8790 #line 2556 "parser.yy" 8791 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8792 break; 8793 8794 case 681: 8795 8796 /* Line 1806 of yacc.c */ 8797 #line 2563 "parser.yy" 8798 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8799 break; 8800 8801 case 683: 8802 8803 /* Line 1806 of yacc.c */ 8804 #line 2574 "parser.yy" 8805 { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); } 8806 break; 8807 8808 case 684: 8809 8810 /* Line 1806 of yacc.c */ 8811 #line 2577 "parser.yy" 8812 { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); } 8813 break; 8814 8815 case 685: 8816 8817 /* Line 1806 of yacc.c */ 8818 #line 2579 "parser.yy" 8819 { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); } 8820 break; 8821 8822 case 686: 8823 8824 /* Line 1806 of yacc.c */ 8825 #line 2582 "parser.yy" 8826 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); } 8827 break; 8828 8829 case 687: 8830 8831 /* Line 1806 of yacc.c */ 8832 #line 2584 "parser.yy" 8833 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); } 8834 break; 8835 8836 case 688: 8837 8838 /* Line 1806 of yacc.c */ 8839 #line 2586 "parser.yy" 8840 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); } 8841 break; 8842 8843 case 690: 8844 8845 /* Line 1806 of yacc.c */ 8846 #line 2600 "parser.yy" 8847 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8848 break; 8849 8850 case 691: 8851 8852 /* Line 1806 of yacc.c */ 8853 #line 2602 "parser.yy" 8854 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8855 break; 8856 8857 case 692: 8858 8859 /* Line 1806 of yacc.c */ 8860 #line 2607 "parser.yy" 8861 { (yyval.decl) = DeclarationNode::newPointer( 0 ); } 8862 break; 8863 8864 case 693: 8865 8866 /* Line 1806 of yacc.c */ 8867 #line 2609 "parser.yy" 8868 { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); } 8869 break; 8870 8871 case 694: 8872 8873 /* Line 1806 of yacc.c */ 8874 #line 2611 "parser.yy" 8875 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8876 break; 8877 8878 case 695: 8879 8880 /* Line 1806 of yacc.c */ 8881 #line 2613 "parser.yy" 8882 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8883 break; 8884 8885 case 696: 8886 8887 /* Line 1806 of yacc.c */ 8888 #line 2615 "parser.yy" 8889 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8890 break; 8891 8892 case 698: 8893 8894 /* Line 1806 of yacc.c */ 8895 #line 2621 "parser.yy" 8809 8896 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8810 8897 break; 8811 8898 8812 case 6 77:8813 8814 /* Line 1806 of yacc.c */ 8815 #line 2 555"parser.yy"8899 case 699: 8900 8901 /* Line 1806 of yacc.c */ 8902 #line 2623 "parser.yy" 8816 8903 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8817 8904 break; 8818 8905 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" 8865 { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); } 8866 break; 8867 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" 8879 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); } 8880 break; 8881 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: 8906 case 700: 8939 8907 8940 8908 /* Line 1806 of yacc.c */ … … 8943 8911 break; 8944 8912 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 8913 case 701: 8953 8914 8954 8915 /* Line 1806 of yacc.c */ 8955 #line 263 3"parser.yy"8956 { (yyval.decl) = (yyvsp[(2) - ( 4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }8916 #line 2630 "parser.yy" 8917 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8957 8918 break; 8958 8919 … … 8960 8921 8961 8922 /* Line 1806 of yacc.c */ 8962 #line 263 5"parser.yy"8923 #line 2632 "parser.yy" 8963 8924 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8964 8925 break; 8965 8926 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: 8927 case 705: 8974 8928 8975 8929 /* Line 1806 of yacc.c */ 8976 8930 #line 2642 "parser.yy" 8977 { (yyval.decl) = (yyvsp[(2) - ( 3)].decl); }8978 break; 8979 8980 case 70 7:8931 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 8932 break; 8933 8934 case 708: 8981 8935 8982 8936 /* Line 1806 of yacc.c */ 8983 8937 #line 2652 "parser.yy" 8984 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 8938 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 8939 break; 8940 8941 case 709: 8942 8943 /* Line 1806 of yacc.c */ 8944 #line 2654 "parser.yy" 8945 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); } 8985 8946 break; 8986 8947 … … 8988 8949 8989 8950 /* Line 1806 of yacc.c */ 8951 #line 2656 "parser.yy" 8952 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 8953 break; 8954 8955 case 711: 8956 8957 /* Line 1806 of yacc.c */ 8958 #line 2658 "parser.yy" 8959 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); } 8960 break; 8961 8962 case 712: 8963 8964 /* Line 1806 of yacc.c */ 8965 #line 2660 "parser.yy" 8966 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 8967 break; 8968 8969 case 713: 8970 8971 /* Line 1806 of yacc.c */ 8990 8972 #line 2662 "parser.yy" 8991 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }8992 break;8993 8994 case 711:8995 8996 /* Line 1806 of yacc.c */8997 #line 2664 "parser.yy"8998 8973 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); } 8999 8974 break; 9000 8975 9001 case 712:9002 9003 /* Line 1806 of yacc.c */9004 #line 2666 "parser.yy"9005 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }9006 break;9007 9008 case 713:9009 9010 /* Line 1806 of yacc.c */9011 #line 2668 "parser.yy"9012 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }9013 break;9014 9015 8976 case 714: 9016 8977 9017 8978 /* Line 1806 of yacc.c */ 9018 #line 26 70"parser.yy"9019 { (yyval.decl) = (yyvsp[( 2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0) ); }8979 #line 2669 "parser.yy" 8980 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 9020 8981 break; 9021 8982 … … 9023 8984 9024 8985 /* Line 1806 of yacc.c */ 9025 #line 267 2"parser.yy"9026 { (yyval.decl) = (yyvsp[( 3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl)) ); }8986 #line 2671 "parser.yy" 8987 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 9027 8988 break; 9028 8989 9029 8990 case 716: 8991 8992 /* Line 1806 of yacc.c */ 8993 #line 2673 "parser.yy" 8994 { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 8995 break; 8996 8997 case 717: 8998 8999 /* Line 1806 of yacc.c */ 9000 #line 2675 "parser.yy" 9001 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); } 9002 break; 9003 9004 case 718: 9005 9006 /* Line 1806 of yacc.c */ 9007 #line 2677 "parser.yy" 9008 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 9009 break; 9010 9011 case 719: 9030 9012 9031 9013 /* Line 1806 of yacc.c */ … … 9034 9016 break; 9035 9017 9036 case 7 17:9018 case 720: 9037 9019 9038 9020 /* Line 1806 of yacc.c */ … … 9041 9023 break; 9042 9024 9043 case 7 18:9025 case 721: 9044 9026 9045 9027 /* Line 1806 of yacc.c */ … … 9048 9030 break; 9049 9031 9050 case 7 19:9032 case 722: 9051 9033 9052 9034 /* Line 1806 of yacc.c */ … … 9055 9037 break; 9056 9038 9057 case 72 0:9039 case 723: 9058 9040 9059 9041 /* Line 1806 of yacc.c */ … … 9062 9044 break; 9063 9045 9064 case 721: 9065 9066 /* Line 1806 of yacc.c */ 9067 #line 2689 "parser.yy" 9046 case 724: 9047 9048 /* Line 1806 of yacc.c */ 9049 #line 2692 "parser.yy" 9050 { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); } 9051 break; 9052 9053 case 725: 9054 9055 /* Line 1806 of yacc.c */ 9056 #line 2694 "parser.yy" 9057 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); } 9058 break; 9059 9060 case 726: 9061 9062 /* Line 1806 of yacc.c */ 9063 #line 2699 "parser.yy" 9064 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); } 9065 break; 9066 9067 case 727: 9068 9069 /* Line 1806 of yacc.c */ 9070 #line 2701 "parser.yy" 9071 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); } 9072 break; 9073 9074 case 729: 9075 9076 /* Line 1806 of yacc.c */ 9077 #line 2728 "parser.yy" 9078 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 9079 break; 9080 9081 case 733: 9082 9083 /* Line 1806 of yacc.c */ 9084 #line 2739 "parser.yy" 9085 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 9086 break; 9087 9088 case 734: 9089 9090 /* Line 1806 of yacc.c */ 9091 #line 2741 "parser.yy" 9092 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); } 9093 break; 9094 9095 case 735: 9096 9097 /* Line 1806 of yacc.c */ 9098 #line 2743 "parser.yy" 9099 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 9100 break; 9101 9102 case 736: 9103 9104 /* Line 1806 of yacc.c */ 9105 #line 2745 "parser.yy" 9106 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); } 9107 break; 9108 9109 case 737: 9110 9111 /* Line 1806 of yacc.c */ 9112 #line 2747 "parser.yy" 9113 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 9114 break; 9115 9116 case 738: 9117 9118 /* Line 1806 of yacc.c */ 9119 #line 2749 "parser.yy" 9120 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); } 9121 break; 9122 9123 case 739: 9124 9125 /* Line 1806 of yacc.c */ 9126 #line 2756 "parser.yy" 9068 9127 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 9069 9128 break; 9070 9129 9071 case 722: 9072 9073 /* Line 1806 of yacc.c */ 9074 #line 2691 "parser.yy" 9130 case 740: 9131 9132 /* Line 1806 of yacc.c */ 9133 #line 2758 "parser.yy" 9134 { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 9135 break; 9136 9137 case 741: 9138 9139 /* Line 1806 of yacc.c */ 9140 #line 2760 "parser.yy" 9075 9141 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 9076 9142 break; 9077 9143 9078 case 723: 9079 9080 /* Line 1806 of yacc.c */ 9081 #line 2693 "parser.yy" 9144 case 742: 9145 9146 /* Line 1806 of yacc.c */ 9147 #line 2762 "parser.yy" 9148 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 9149 break; 9150 9151 case 743: 9152 9153 /* Line 1806 of yacc.c */ 9154 #line 2764 "parser.yy" 9082 9155 { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 9083 9156 break; 9084 9157 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" 9158 case 744: 9159 9160 /* Line 1806 of yacc.c */ 9161 #line 2766 "parser.yy" 9096 9162 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 9097 9163 break; 9098 9164 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 9197 case 744:9198 9199 /* Line 1806 of yacc.c */9200 #line 2772 "parser.yy"9201 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }9202 break;9203 9204 9165 case 745: 9205 9166 9206 9167 /* Line 1806 of yacc.c */ 9207 #line 277 4"parser.yy"9208 { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false) ); }9168 #line 2771 "parser.yy" 9169 { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); } 9209 9170 break; 9210 9171 … … 9213 9174 /* Line 1806 of yacc.c */ 9214 9175 #line 2776 "parser.yy" 9215 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl)); }9176 { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); } 9216 9177 break; 9217 9178 … … 9219 9180 9220 9181 /* Line 1806 of yacc.c */ 9221 #line 27 81"parser.yy"9222 { (yyval.decl) = DeclarationNode::new Tuple( (yyvsp[(3) - (5)].decl)); }9182 #line 2778 "parser.yy" 9183 { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); } 9223 9184 break; 9224 9185 … … 9226 9187 9227 9188 /* 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" 9189 #line 2780 "parser.yy" 9236 9190 { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); } 9237 9191 break; 9238 9192 9239 case 750: 9240 9241 /* 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" 9193 case 751: 9194 9195 /* Line 1806 of yacc.c */ 9196 #line 2804 "parser.yy" 9250 9197 { (yyval.en) = 0; } 9251 9198 break; 9252 9199 9253 case 75 4:9254 9255 /* Line 1806 of yacc.c */ 9256 #line 28 16 "parser.yy"9200 case 752: 9201 9202 /* Line 1806 of yacc.c */ 9203 #line 2806 "parser.yy" 9257 9204 { (yyval.en) = (yyvsp[(2) - (2)].en); } 9258 9205 break; … … 9261 9208 9262 9209 /* Line 1806 of yacc.c */ 9263 #line 92 64"Parser/parser.cc"9210 #line 9211 "Parser/parser.cc" 9264 9211 default: break; 9265 9212 } … … 9492 9439 9493 9440 /* Line 2067 of yacc.c */ 9494 #line 28 19 "parser.yy"9441 #line 2809 "parser.yy" 9495 9442 9496 9443 // ----end of grammar---- … … 9499 9446 std::cout << "Error "; 9500 9447 if ( yyfilename ) { 9501 std::cout << "in file " << yyfilename << " ";9448 std::cout << "in file " << yyfilename << " "; 9502 9449 } // if 9503 9450 std::cout << "at line " << yylineno << " reading token \"" << (yytext[0] == '\0' ? "EOF" : yytext) << "\"" << std::endl; -
src/Parser/parser.yy
r1048b31 r1f6e009 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Apr 13 16:58:43201613 // Update Count : 1 51912 // Last Modified On : Thu Mar 24 16:16:16 2016 13 // Update Count : 1498 14 14 // 15 15 … … 372 372 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), $1 ); } 373 373 | '(' type_name_no_function ')' '{' initializer_list comma_opt '}' // C99 374 { $$ = new CompoundLiteralNode( $2, new InitializerNode( $5, true ) ); }374 { $$ = 0; } 375 375 | postfix_expression '{' argument_expression_list '}' // CFA 376 376 { … … 1438 1438 { $$ = DeclarationNode::newAggregate( $1, 0, 0, $3 ); } 1439 1439 | 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); } 1440 { $$ = DeclarationNode::newAggregate( $1, $2, 0, 0 ); } 1441 | aggregate_key no_attr_identifier_or_type_name '{' field_declaration_list '}' 1442 { $$ = DeclarationNode::newAggregate( $1, $2, 0, $4 ); } 1448 1443 | aggregate_key '(' type_name_list ')' '{' field_declaration_list '}' // CFA 1449 { $$ = DeclarationNode::newAggregate( $1, 0, $3, $6 ); }1444 { $$ = DeclarationNode::newAggregate( $1, 0, $3, $6 ); } 1450 1445 | aggregate_key typegen_name // CFA, S/R conflict 1451 1446 { $$ = $2; } … … 1525 1520 enum_key '{' enumerator_list comma_opt '}' 1526 1521 { $$ = DeclarationNode::newEnum( 0, $3 ); } 1522 | enum_key no_attr_identifier_or_type_name '{' enumerator_list comma_opt '}' 1523 { $$ = DeclarationNode::newEnum( $2, $4 ); } 1527 1524 | 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 ); } 1525 { $$ = DeclarationNode::newEnum( $2, 0 ); } 1536 1526 ; 1537 1527 … … 2823 2813 std::cout << "Error "; 2824 2814 if ( yyfilename ) { 2825 std::cout << "in file " << yyfilename << " ";2815 std::cout << "in file " << yyfilename << " "; 2826 2816 } // if 2827 2817 std::cout << "at line " << yylineno << " reading token \"" << (yytext[0] == '\0' ? "EOF" : yytext) << "\"" << std::endl; -
src/ResolvExpr/AlternativeFinder.cc
r1048b31 r1f6e009 848 848 } 849 849 850 void AlternativeFinder::visit( OffsetPackExpr *offsetPackExpr ) {851 alternatives.push_back( Alternative( offsetPackExpr->clone(), env, Cost::zero ) );852 }853 854 850 void AlternativeFinder::resolveAttr( DeclarationWithType *funcDecl, FunctionType *function, Type *argType, const TypeEnvironment &env ) { 855 851 // assume no polymorphism -
src/ResolvExpr/AlternativeFinder.h
r1048b31 r1f6e009 59 59 virtual void visit( UntypedOffsetofExpr *offsetofExpr ); 60 60 virtual void visit( OffsetofExpr *offsetofExpr ); 61 virtual void visit( OffsetPackExpr *offsetPackExpr );62 61 virtual void visit( AttrExpr *attrExpr ); 63 62 virtual void visit( LogicalExpr *logicalExpr ); -
src/ResolvExpr/CastCost.cc
r1048b31 r1f6e009 69 69 PointerType *destAsPointer = dynamic_cast< PointerType* >( dest ); 70 70 if ( destAsPointer && basicType->isInteger() ) { 71 // necessary for, e.g. unsigned long => void*72 cost = Cost ( 1, 0, 0 );71 //cost = Cost( 1, 0, 0 ); 72 cost = Cost::infinity; 73 73 } else { 74 74 ConversionCost::visit( basicType ); … … 89 89 } else if ( castResult < 0 ) { 90 90 cost = Cost::infinity; 91 //cost = Cost( 1, 0, 0 ); 91 92 } // if 92 93 } // if 93 94 } else if ( BasicType *destAsBasic = dynamic_cast< BasicType* >( dest ) ) { 94 95 if ( destAsBasic->isInteger() ) { 95 // necessary for, e.g. void* => unsigned long96 cost = Cost ( 1, 0, 0 );96 //cost = Cost( 1, 0, 0 ); 97 cost = Cost::infinity; 97 98 } // if 98 99 } -
src/SymTab/AddVisit.h
r1048b31 r1f6e009 9 9 // Author : Richard C. Bilson 10 10 // Created On : Sun May 17 16:14:32 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : T hu Apr 7 14:42:21 201613 // Update Count : 511 // Last Modified By : Rob Schluntz 12 // Last Modified On : Tue Jul 14 12:26:17 2015 13 // Update Count : 4 14 14 // 15 15 … … 27 27 28 28 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 > 29 39 inline void addVisit(CompoundStmt *compoundStmt, Visitor &visitor) { 30 40 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 ); 31 62 } 32 63 … … 43 74 } 44 75 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 } 50 87 } // namespace SymTab 51 88 -
src/SymTab/Indexer.cc
r1048b31 r1f6e009 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // Indexer.cc -- 7 // Indexer.cc -- 8 8 // 9 9 // Author : Richard C. Bilson 10 10 // Created On : Sun May 17 21:37:33 2015 11 // Last Modified By : Rob Schluntz12 // Last Modified On : Fri Apr 22 15:25:43201611 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 17:31:29 2016 13 13 // Update Count : 11 14 14 // … … 59 59 } 60 60 } 61 61 62 62 template< typename Decl > 63 63 void dump( const std::unordered_map< std::string, Decl* > &table, std::ostream &os ) { … … 66 66 } // for 67 67 } 68 68 69 69 struct Indexer::Impl { 70 70 Impl( unsigned long _scope ) : refCount(1), scope( _scope ), size( 0 ), base(), … … 76 76 unsigned long size; ///< Number of elements stored in this table 77 77 const Indexer base; ///< Base indexer this extends 78 78 79 79 IdTable idTable; ///< Identifier namespace 80 80 TypeTable typeTable; ///< Type namespace … … 213 213 void Indexer::visit( StructDecl *aggregateDecl ) { 214 214 // make up a forward declaration and add it before processing the members 215 // needs to be on the heap because addStruct saves the pointer 216 StructDecl &fwdDecl = *new StructDecl( aggregateDecl->get_name() ); 215 StructDecl fwdDecl( aggregateDecl->get_name() ); 217 216 cloneAll( aggregateDecl->get_parameters(), fwdDecl.get_parameters() ); 218 217 debugPrint( "Adding fwd decl for struct " << fwdDecl.get_name() << std::endl ); 219 218 addStruct( &fwdDecl ); 220 219 221 220 enterScope(); 222 221 acceptAll( aggregateDecl->get_parameters(), *this ); 223 222 acceptAll( aggregateDecl->get_members(), *this ); 224 223 leaveScope(); 225 224 226 225 debugPrint( "Adding struct " << aggregateDecl->get_name() << std::endl ); 227 226 // this addition replaces the forward declaration … … 235 234 debugPrint( "Adding fwd decl for union " << fwdDecl.get_name() << std::endl ); 236 235 addUnion( &fwdDecl ); 237 236 238 237 enterScope(); 239 238 acceptAll( aggregateDecl->get_parameters(), *this ); 240 239 acceptAll( aggregateDecl->get_members(), *this ); 241 240 leaveScope(); 242 241 243 242 debugPrint( "Adding union " << aggregateDecl->get_name() << std::endl ); 244 243 addUnion( aggregateDecl ); … … 257 256 acceptAll( aggregateDecl->get_members(), *this ); 258 257 leaveScope(); 259 258 260 259 debugPrint( "Adding context " << aggregateDecl->get_name() << std::endl ); 261 260 addTrait( aggregateDecl ); … … 345 344 maybeAccept( offsetofExpr->get_type(), *this ); 346 345 maybeAccept( offsetofExpr->get_member(), *this ); 347 }348 349 void Indexer::visit( OffsetPackExpr *offsetPackExpr ) {350 acceptAllNewScope( offsetPackExpr->get_results(), *this );351 maybeAccept( offsetPackExpr->get_type(), *this );352 346 } 353 347 … … 439 433 } 440 434 441 435 442 436 443 437 void Indexer::lookupId( const std::string &id, std::list< DeclarationWithType* > &out ) const { 444 438 std::unordered_set< std::string > foundMangleNames; 445 439 446 440 Indexer::Impl *searchTables = tables; 447 441 while ( searchTables ) { … … 453 447 // mark the mangled name as found, skipping this insertion if a declaration for that name has already been found 454 448 if ( foundMangleNames.insert( decl->first ).second == false ) continue; 455 449 456 450 out.push_back( decl->second ); 457 451 } 458 452 } 459 453 460 454 // get declarations from base indexers 461 455 searchTables = searchTables->base.tables; … … 512 506 } 513 507 514 bool Indexer::hasIncompatibleCDecl( const std::string &id, const std::string &mangleName , unsigned long scope) const {508 bool Indexer::hasIncompatibleCDecl( const std::string &id, const std::string &mangleName ) const { 515 509 if ( ! tables ) return false; 516 if ( tables->scope < scope ) return false;517 510 518 511 IdTable::const_iterator decls = tables->idTable.find( id ); … … 520 513 const MangleTable &mangleTable = decls->second; 521 514 for ( MangleTable::const_iterator decl = mangleTable.begin(); decl != mangleTable.end(); ++decl ) { 522 // check for C decls with the same name, skipping 515 // check for C decls with the same name, skipping 523 516 // those with a compatible type (by mangleName) 524 517 if ( decl->second->get_linkage() == LinkageSpec::C && decl->first != mangleName ) return true; … … 526 519 } 527 520 528 return tables->base.hasIncompatibleCDecl( id, mangleName , scope);529 } 530 521 return tables->base.hasIncompatibleCDecl( id, mangleName ); 522 } 523 531 524 NamedTypeDecl *Indexer::lookupTypeAtScope( const std::string &id, unsigned long scope ) const { 532 525 if ( ! tables ) return 0; … … 536 529 return ret != tables->typeTable.end() ? ret->second : tables->base.lookupTypeAtScope( id, scope ); 537 530 } 538 531 539 532 StructDecl *Indexer::lookupStructAtScope( const std::string &id, unsigned long scope ) const { 540 533 if ( ! tables ) return 0; … … 544 537 return ret != tables->structTable.end() ? ret->second : tables->base.lookupStructAtScope( id, scope ); 545 538 } 546 539 547 540 EnumDecl *Indexer::lookupEnumAtScope( const std::string &id, unsigned long scope ) const { 548 541 if ( ! tables ) return 0; … … 552 545 return ret != tables->enumTable.end() ? ret->second : tables->base.lookupEnumAtScope( id, scope ); 553 546 } 554 547 555 548 UnionDecl *Indexer::lookupUnionAtScope( const std::string &id, unsigned long scope ) const { 556 549 if ( ! tables ) return 0; … … 560 553 return ret != tables->unionTable.end() ? ret->second : tables->base.lookupUnionAtScope( id, scope ); 561 554 } 562 555 563 556 TraitDecl *Indexer::lookupTraitAtScope( const std::string &id, unsigned long scope ) const { 564 557 if ( ! tables ) return 0; … … 603 596 return true; 604 597 } 605 598 606 599 void Indexer::addId( DeclarationWithType *decl ) { 607 600 makeWritable(); … … 619 612 DeclarationWithType *existing = lookupIdAtScope( name, mangleName, scope ); 620 613 if ( ! existing || ! addedIdConflicts( existing, decl ) ) { 621 // this ensures that no two declarations with the same unmangled name at the same scopeboth have C linkage622 if ( decl->get_linkage() == LinkageSpec::C && hasIncompatibleCDecl( name, mangleName , scope) ) {614 // this ensures that no two declarations with the same unmangled name both have C linkage 615 if ( decl->get_linkage() == LinkageSpec::C && hasIncompatibleCDecl( name, mangleName ) ) { 623 616 throw SemanticError( "invalid overload of C function ", decl ); 624 } // NOTE this is broken in Richard's original code in such a way that it never triggers (it 625 // doesn't check decls that have the same manglename, and all C-linkage decls are defined to 617 } // NOTE this is broken in Richard's original code in such a way that it never triggers (it 618 // doesn't check decls that have the same manglename, and all C-linkage decls are defined to 626 619 // have their name as their manglename, hence the error can never trigger). 627 // The code here is closer to correct, but name mangling would have to be completely 620 // The code here is closer to correct, but name mangling would have to be completely 628 621 // isomorphic to C type-compatibility, which it may not be. 629 622 630 623 tables->idTable[ name ][ mangleName ] = decl; 631 624 ++tables->size; … … 642 635 } 643 636 } 644 637 645 638 void Indexer::addType( NamedTypeDecl *decl ) { 646 639 makeWritable(); … … 673 666 addStruct( new StructDecl( id ) ); 674 667 } 675 668 676 669 void Indexer::addStruct( StructDecl *decl ) { 677 670 makeWritable(); … … 691 684 } 692 685 } 693 686 694 687 void Indexer::addEnum( EnumDecl *decl ) { 695 688 makeWritable(); … … 713 706 addUnion( new UnionDecl( id ) ); 714 707 } 715 708 716 709 void Indexer::addUnion( UnionDecl *decl ) { 717 710 makeWritable(); … … 731 724 } 732 725 } 733 726 734 727 void Indexer::addTrait( TraitDecl *decl ) { 735 728 makeWritable(); … … 752 745 void Indexer::enterScope() { 753 746 ++scope; 754 747 755 748 if ( doDebug ) { 756 749 std::cout << "--- Entering scope " << scope << std::endl; … … 785 778 using std::cerr; 786 779 787 if ( tables ) { 788 os << "--- scope " << tables->scope << " ---" << std::endl; 789 790 os << "===idTable===" << std::endl; 791 dump( tables->idTable, os ); 792 os << "===typeTable===" << std::endl; 793 dump( tables->typeTable, os ); 794 os << "===structTable===" << std::endl; 795 dump( tables->structTable, os ); 796 os << "===enumTable===" << std::endl; 797 dump( tables->enumTable, os ); 798 os << "===unionTable===" << std::endl; 799 dump( tables->unionTable, os ); 800 os << "===contextTable===" << std::endl; 801 dump( tables->traitTable, os ); 802 803 tables->base.print( os, indent ); 804 } else { 805 os << "--- end ---" << std::endl; 806 } 807 780 cerr << "===idTable===" << std::endl; 781 if ( tables ) dump( tables->idTable, os ); 782 cerr << "===typeTable===" << std::endl; 783 if ( tables ) dump( tables->typeTable, os ); 784 cerr << "===structTable===" << std::endl; 785 if ( tables ) dump( tables->structTable, os ); 786 cerr << "===enumTable===" << std::endl; 787 if ( tables ) dump( tables->enumTable, os ); 788 cerr << "===unionTable===" << std::endl; 789 if ( tables ) dump( tables->unionTable, os ); 790 cerr << "===contextTable===" << std::endl; 791 if ( tables ) dump( tables->traitTable, os ); 808 792 } 809 793 } // namespace SymTab -
src/SymTab/Indexer.h
r1048b31 r1f6e009 59 59 virtual void visit( UntypedOffsetofExpr *offsetofExpr ); 60 60 virtual void visit( OffsetofExpr *offsetofExpr ); 61 virtual void visit( OffsetPackExpr *offsetPackExpr );62 61 virtual void visit( AttrExpr *attrExpr ); 63 62 virtual void visit( LogicalExpr *logicalExpr ); … … 99 98 DeclarationWithType *lookupIdAtScope( const std::string &id, const std::string &mangleName, unsigned long scope ) const; 100 99 /// 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 , unsigned long scope) const;100 bool hasIncompatibleCDecl( const std::string &id, const std::string &mangleName ) const; 102 101 // equivalents to lookup functions that only look at tables at scope `scope` (which should be >= tables->scope) 103 102 NamedTypeDecl *lookupTypeAtScope( const std::string &id, unsigned long scope ) const; -
src/SymTab/Validate.cc
r1048b31 r1f6e009 10 10 // Created On : Sun May 17 21:50:04 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Apr 13 16:39:30201613 // Update Count : 2 5112 // Last Modified On : Wed Mar 2 17:31:39 2016 13 // Update Count : 226 14 14 // 15 15 … … 40 40 #include <list> 41 41 #include <iterator> 42 #include "Common/utility.h"43 #include "Common/UniqueName.h"44 42 #include "Validate.h" 45 43 #include "SynTree/Visitor.h" 46 44 #include "SynTree/Mutator.h" 47 45 #include "SynTree/Type.h" 48 #include "SynTree/Expression.h"49 46 #include "SynTree/Statement.h" 50 47 #include "SynTree/TypeSubstitution.h" … … 52 49 #include "FixFunction.h" 53 50 // #include "ImplementationType.h" 54 #include "GenPoly/DeclMutator.h" 51 #include "Common/utility.h" 52 #include "Common/UniqueName.h" 55 53 #include "AddVisit.h" 56 54 #include "MakeLibCfa.h" … … 72 70 73 71 virtual void visit( CompoundStmt *compoundStmt ); 72 virtual void visit( IfStmt *ifStmt ); 73 virtual void visit( WhileStmt *whileStmt ); 74 virtual void visit( ForStmt *forStmt ); 74 75 virtual void visit( SwitchStmt *switchStmt ); 75 76 virtual void visit( ChooseStmt *chooseStmt ); 76 // virtual void visit( CaseStmt *caseStmt ); 77 virtual void visit( CaseStmt *caseStmt ); 78 virtual void visit( CatchStmt *catchStmt ); 77 79 private: 78 80 HoistStruct(); … … 142 144 143 145 virtual void visit( CompoundStmt *compoundStmt ); 146 virtual void visit( IfStmt *ifStmt ); 147 virtual void visit( WhileStmt *whileStmt ); 148 virtual void visit( ForStmt *forStmt ); 144 149 virtual void visit( SwitchStmt *switchStmt ); 145 150 virtual void visit( ChooseStmt *chooseStmt ); 146 // virtual void visit( CaseStmt *caseStmt ); 151 virtual void visit( CaseStmt *caseStmt ); 152 virtual void visit( CatchStmt *catchStmt ); 147 153 148 154 AutogenerateRoutines() : functionNesting( 0 ) {} … … 160 166 /// and return something if the return type is non-void. 161 167 static void checkFunctionReturns( std::list< Declaration * > & translationUnit ); 168 162 169 private: 163 170 virtual void visit( FunctionDecl * functionDecl ); … … 190 197 AggDecl *handleAggregate( AggDecl * aggDecl ); 191 198 192 template<typename AggDecl>193 void addImplicitTypedef( AggDecl * aggDecl );194 195 199 typedef std::map< std::string, std::pair< TypedefDecl *, int > > TypedefMap; 196 200 TypedefMap typedefNames; … … 198 202 }; 199 203 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 207 204 void validate( std::list< Declaration * > &translationUnit, bool doDebug ) { 208 205 Pass1 pass1; 209 206 Pass2 pass2( doDebug, 0 ); 210 207 Pass3 pass3( 0 ); 211 CompoundLiteral compoundliteral;212 213 208 EliminateTypedef::eliminateTypedef( translationUnit ); 214 209 HoistStruct::hoistStruct( translationUnit ); … … 216 211 acceptAll( translationUnit, pass2 ); 217 212 ReturnChecker::checkFunctionReturns( translationUnit ); 218 mutateAll( translationUnit, compoundliteral );219 213 AutogenerateRoutines::autogenerateRoutines( translationUnit ); 220 214 acceptAll( translationUnit, pass3 ); … … 298 292 } 299 293 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 300 306 void HoistStruct::visit( SwitchStmt *switchStmt ) { 301 307 addVisit( switchStmt, *this ); … … 306 312 } 307 313 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 } 311 321 312 322 void Pass1::visit( EnumDecl *enumDecl ) { … … 864 874 } 865 875 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 866 888 void AutogenerateRoutines::visit( SwitchStmt *switchStmt ) { 867 889 visitStatement( switchStmt ); … … 872 894 } 873 895 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 } 877 903 878 904 void ReturnChecker::checkFunctionReturns( std::list< Declaration * > & translationUnit ) { … … 921 947 } 922 948 rtt->get_parameters().clear(); 923 cloneAll( typeInst->get_parameters(), rtt->get_parameters() ); 924 mutateAll( rtt->get_parameters(), *this ); // recursively fix typedefs on parameters 949 cloneAll(typeInst->get_parameters(), rtt->get_parameters()); 925 950 } // if 926 951 delete typeInst; … … 1018 1043 } 1019 1044 1020 // there may be typedefs nested within aggregates in order for everything to work properly, these should be removed 1021 // 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 1022 1048 template<typename AggDecl> 1023 1049 AggDecl *EliminateTypedef::handleAggregate( AggDecl * aggDecl ) { … … 1033 1059 return aggDecl; 1034 1060 } 1035 1036 template<typename AggDecl> 1037 void EliminateTypedef::addImplicitTypedef( AggDecl * aggDecl ) { 1038 if ( typedefNames.count( aggDecl->get_name() ) == 0 ) { 1039 Type *type; 1040 if ( StructDecl * newDeclStructDecl = dynamic_cast< StructDecl * >( aggDecl ) ) { 1041 type = new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() ); 1042 } else if ( UnionDecl * newDeclUnionDecl = dynamic_cast< UnionDecl * >( aggDecl ) ) { 1043 type = new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() ); 1044 } else if ( EnumDecl * newDeclEnumDecl = dynamic_cast< EnumDecl * >( aggDecl ) ) { 1045 type = new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() ); 1046 } // if 1047 TypedefDecl * tyDecl = new TypedefDecl( aggDecl->get_name(), DeclarationNode::NoStorageClass, type ); 1048 typedefNames[ aggDecl->get_name() ] = std::make_pair( tyDecl, scopeLevel ); 1049 } // if 1050 } 1061 1051 1062 Declaration *EliminateTypedef::mutate( StructDecl * structDecl ) { 1052 addImplicitTypedef( structDecl );1053 1063 Mutator::mutate( structDecl ); 1054 1064 return handleAggregate( structDecl ); … … 1056 1066 1057 1067 Declaration *EliminateTypedef::mutate( UnionDecl * unionDecl ) { 1058 addImplicitTypedef( unionDecl );1059 1068 Mutator::mutate( unionDecl ); 1060 1069 return handleAggregate( unionDecl ); … … 1062 1071 1063 1072 Declaration *EliminateTypedef::mutate( EnumDecl * enumDecl ) { 1064 addImplicitTypedef( enumDecl );1065 1073 Mutator::mutate( enumDecl ); 1066 1074 return handleAggregate( enumDecl ); 1067 1075 } 1068 1076 1069 Declaration *EliminateTypedef::mutate( TraitDecl * contextDecl ) {1077 Declaration *EliminateTypedef::mutate( TraitDecl * contextDecl ) { 1070 1078 Mutator::mutate( contextDecl ); 1071 1079 return handleAggregate( contextDecl ); 1072 1080 } 1073 1081 1074 DeclarationWithType * CompoundLiteral::mutate( ObjectDecl *objectDecl ) {1075 storageclass = objectDecl->get_storageClass();1076 DeclarationWithType * temp = Mutator::mutate( objectDecl );1077 storageclass = DeclarationNode::NoStorageClass;1078 return temp;1079 }1080 1081 Expression *CompoundLiteral::mutate( CompoundLiteralExpr *compLitExpr ) {1082 // transform [storage_class] ... (struct S){ 3, ... };1083 // into [storage_class] struct S temp = { 3, ... };1084 static UniqueName indexName( "_compLit" );1085 1086 ObjectDecl *tempvar = new ObjectDecl( indexName.newName(), storageclass, LinkageSpec::C, 0, compLitExpr->get_type(), compLitExpr->get_initializer() );1087 compLitExpr->set_type( 0 );1088 compLitExpr->set_initializer( 0 );1089 delete compLitExpr;1090 DeclarationWithType * newtempvar = mutate( tempvar );1091 addDeclaration( newtempvar ); // add modified temporary to current block1092 return new VariableExpr( newtempvar );1093 }1094 1082 } // namespace SymTab 1095 1083 -
src/SynTree/Expression.cc
r1048b31 r1f6e009 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Fri Apr 8 17:16:23 201613 // Update Count : 4011 // Last Modified By : Rob Schluntz 12 // Last Modified On : Wed Dec 09 14:10:29 2015 13 // Update Count : 34 14 14 // 15 15 … … 22 22 23 23 #include "Type.h" 24 #include "Initializer.h"25 24 #include "Expression.h" 26 25 #include "Declaration.h" … … 212 211 213 212 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 ";235 213 236 214 if ( type ) { … … 465 443 466 444 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 484 445 485 446 std::ostream & operator<<( std::ostream & out, Expression * expr ) { -
src/SynTree/Expression.h
r1048b31 r1f6e009 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Fri Apr 8 17:18:06 201613 // Update Count : 2111 // Last Modified By : Rob Schluntz 12 // Last Modified On : Wed Dec 09 14:10:21 2015 13 // Update Count : 19 14 14 // 15 15 … … 362 362 }; 363 363 364 /// Expression representing a pack of field-offsets for a generic type365 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;382 };383 384 364 /// AttrExpr represents an @attribute expression (like sizeof, but user-defined) 385 365 class AttrExpr : public Expression { … … 577 557 }; 578 558 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;599 };600 601 559 std::ostream & operator<<( std::ostream & out, Expression * expr ); 602 560 -
src/SynTree/Mutator.cc
r1048b31 r1f6e009 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Apr 1 18:05:16201613 // Update Count : 1 612 // Last Modified On : Wed Mar 2 17:28:20 2016 13 // Update Count : 12 14 14 // 15 15 … … 274 274 } 275 275 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 282 276 Expression *Mutator::mutate( AttrExpr *attrExpr ) { 283 277 mutateAll( attrExpr->get_results(), *this ); … … 340 334 mutateAll( valofExpr->get_results(), *this ); 341 335 return valofExpr; 342 }343 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 336 } 350 337 -
src/SynTree/Mutator.h
r1048b31 r1f6e009 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Apr 1 17:26:56201613 // Update Count : 1012 // Last Modified On : Wed Mar 2 17:33:11 2016 13 // Update Count : 9 14 14 // 15 15 #include <cassert> … … 67 67 virtual Expression* mutate( UntypedOffsetofExpr *offsetofExpr ); 68 68 virtual Expression* mutate( OffsetofExpr *offsetofExpr ); 69 virtual Expression* mutate( OffsetPackExpr *offsetPackExpr );70 69 virtual Expression* mutate( AttrExpr *attrExpr ); 71 70 virtual Expression* mutate( LogicalExpr *logicalExpr ); … … 77 76 virtual Expression* mutate( AsmExpr *asmExpr ); 78 77 virtual Expression* mutate( UntypedValofExpr *valofExpr ); 79 virtual Expression* mutate( CompoundLiteralExpr *compLitExpr );80 78 81 79 virtual Type* mutate( VoidType *basicType ); -
src/SynTree/SynTree.h
r1048b31 r1f6e009 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Apr 1 16:47:44201613 // Update Count : 512 // Last Modified On : Wed Mar 2 17:29:00 2016 13 // Update Count : 4 14 14 // 15 15 … … 72 72 class UntypedOffsetofExpr; 73 73 class OffsetofExpr; 74 class OffsetPackExpr;75 74 class AttrExpr; 76 75 class LogicalExpr; … … 82 81 class AsmExpr; 83 82 class UntypedValofExpr; 84 class CompoundLiteralExpr;85 83 86 84 class Type; -
src/SynTree/Visitor.cc
r1048b31 r1f6e009 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Apr 1 18:05:13 201613 // Update Count : 1 812 // Last Modified On : Wed Mar 2 17:29:23 2016 13 // Update Count : 16 14 14 // 15 15 … … 230 230 } 231 231 232 void Visitor::visit( OffsetPackExpr *offsetPackExpr ) {233 acceptAll( offsetPackExpr->get_results(), *this );234 maybeAccept( offsetPackExpr->get_type(), *this );235 }236 237 232 void Visitor::visit( AttrExpr *attrExpr ) { 238 233 acceptAll( attrExpr->get_results(), *this ); … … 287 282 acceptAll( valofExpr->get_results(), *this ); 288 283 maybeAccept( valofExpr->get_body(), *this ); 289 }290 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 284 } 296 285 -
src/SynTree/Visitor.h
r1048b31 r1f6e009 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Apr 1 17:26:55 201613 // Update Count : 712 // Last Modified On : Wed Mar 2 17:33:35 2016 13 // Update Count : 6 14 14 // 15 15 … … 67 67 virtual void visit( UntypedOffsetofExpr *offsetofExpr ); 68 68 virtual void visit( OffsetofExpr *offsetofExpr ); 69 virtual void visit( OffsetPackExpr *offsetPackExpr );70 69 virtual void visit( AttrExpr *attrExpr ); 71 70 virtual void visit( LogicalExpr *logicalExpr ); … … 77 76 virtual void visit( AsmExpr *asmExpr ); 78 77 virtual void visit( UntypedValofExpr *valofExpr ); 79 virtual void visit( CompoundLiteralExpr *compLitExpr );80 78 81 79 virtual void visit( VoidType *basicType ); -
src/Tuples/FlattenTuple.cc
r1048b31 r1f6e009 49 49 void FlattenTuple::CollectArgs::visit( UntypedOffsetofExpr *expr ) { currentArgs.insert( currentArgs.end(), expr ); } 50 50 void FlattenTuple::CollectArgs::visit( OffsetofExpr *expr ) { currentArgs.insert( currentArgs.end(), expr ); } 51 void FlattenTuple::CollectArgs::visit( OffsetPackExpr *expr ) { currentArgs.insert( currentArgs.end(), expr ); }52 51 void FlattenTuple::CollectArgs::visit( AttrExpr *expr ) { currentArgs.insert( currentArgs.end(), expr ); } 53 52 void FlattenTuple::CollectArgs::visit( LogicalExpr *expr ) { currentArgs.insert( currentArgs.end(), expr ); } -
src/Tuples/FlattenTuple.h
r1048b31 r1f6e009 45 45 virtual void visit( UntypedOffsetofExpr * ); 46 46 virtual void visit( OffsetofExpr * ); 47 virtual void visit( OffsetPackExpr * );48 47 virtual void visit( AttrExpr * ); 49 48 virtual void visit( LogicalExpr * ); -
src/driver/cfa.cc
r1048b31 r1f6e009 10 10 // Created On : Tue Aug 20 13:44:49 2002 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Apr 20 18:31:28201613 // Update Count : 1 3312 // Last Modified On : Thu Jan 28 18:24:06 2016 13 // Update Count : 127 14 14 // 15 15 … … 165 165 nargs += 1; 166 166 } else if ( prefix( arg, "-std=" ) ) { 167 std_flag = true; // -std=XX provided167 std_flag = true; // std=XX provided 168 168 args[nargs] = argv[i]; // pass the argument along 169 169 nargs += 1; … … 307 307 nargs += 1; 308 308 if ( ! std_flag ) { // default c99, if none specified 309 args[nargs] = "-std= gnu99";309 args[nargs] = "-std=c99"; 310 310 nargs += 1; 311 311 } // if 312 args[nargs] = "-fgnu89-inline";313 nargs += 1;314 312 args[nargs] = ( *new string( string("-B") + Bprefix + "/" ) ).c_str(); 315 313 nargs += 1; -
src/examples/swap.c
r1048b31 r1f6e009 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Apr 21 08:10:41 201613 // Update Count : 6 912 // Last Modified On : Wed Mar 2 16:15:11 2016 13 // Update Count : 65 14 14 // 15 15 … … 24 24 25 25 signed int i1 = -1, i2 = -2; 26 sout | "signed int\t\t" | i1 | i2 | "\t\t\tswap ";26 sout | "signed int\t\t" | i1 | ' ' | i2 | "\t\t\tswap "; 27 27 swap( &i1, &i2 ); 28 sout | '\t' | i1 | i2 | endl;28 sout | '\t' | i1 | ' ' | i2 | endl; 29 29 30 30 unsigned int ui1 = 1, ui2 = 2; 31 sout | "unsigned int\t\t" | ui1 | ui2 | "\t\t\tswap ";31 sout | "unsigned int\t\t" | ui1 | ' ' | ui2 | "\t\t\tswap "; 32 32 swap( &ui1, &ui2 ); 33 sout | '\t' | ui1 | ui2 | endl;33 sout | '\t' | ui1 | ' ' | ui2 | endl; 34 34 35 35 signed long int li1 = -1, li2 = -2; 36 sout | "signed long int\t\t" | li1 | li2 | "\t\t\tswap ";36 sout | "signed long int\t\t" | li1 | ' ' | li2 | "\t\t\tswap "; 37 37 swap( &li1, &li2 ); 38 sout | '\t' | li1 | li2 | endl;38 sout | '\t' | li1 | ' ' | li2 | endl; 39 39 40 40 unsigned long int uli1 = 1, uli2 = 2; 41 sout | "unsigned long int\t" | uli1 | uli2 | "\t\t\tswap ";41 sout | "unsigned long int\t" | uli1 | ' ' | uli2 | "\t\t\tswap "; 42 42 swap( &uli1, &uli2 ); 43 sout | '\t' | uli1 | uli2 | endl;43 sout | '\t' | uli1 | ' ' | uli2 | endl; 44 44 45 45 signed long long int lli1 = -1, lli2 = -2; 46 sout | "signed long long int\t" | lli1 | lli2 | "\t\t\tswap ";46 sout | "signed long long int\t" | lli1 | ' ' | lli2 | "\t\t\tswap "; 47 47 swap( &lli1, &lli2 ); 48 sout | '\t' | lli1 | lli2 | endl;48 sout | '\t' | lli1 | ' ' | lli2 | endl; 49 49 50 50 unsigned long long int ulli1 = 1, ulli2 = 2; 51 sout | "unsigned long long int\t" | ulli1 | ulli2 | "\t\t\tswap ";51 sout | "unsigned long long int\t" | ulli1 | ' ' | ulli2 | "\t\t\tswap "; 52 52 swap( &ulli1, &ulli2 ); 53 sout | '\t' | ulli1 | ulli2 | endl;53 sout | '\t' | ulli1 | ' ' | ulli2 | endl; 54 54 55 55 float f1 = 1.5, f2 = 2.5; 56 sout | "float\t\t\t" | f1 | f2 | "\t\t\tswap ";56 sout | "float\t\t\t" | f1 | ' ' | f2 | "\t\tswap "; 57 57 swap( &f1, &f2 ); 58 sout | '\t' | f1 | f2 | endl;58 sout | '\t' | f1 | ' ' | f2 | endl; 59 59 60 60 double d1 = 1.5, d2 = 2.5; 61 sout | "double\t\t\t" | d1 | d2 | "\t\t\tswap ";61 sout | "double\t\t\t" | d1 | ' ' | d2 | "\t\tswap "; 62 62 swap( &d1, &d2 ); 63 sout | '\t' | d1 | d2 | endl;63 sout | '\t' | d1 | ' ' | d2 | endl; 64 64 65 65 long double ld1 = 1.5, ld2 = 2.5; 66 sout | "long double\t\t" | ld1 | ld2 | "\t\t\tswap ";66 sout | "long double\t\t" | ld1 | ' ' | ld2 | "\t\tswap "; 67 67 swap( &ld1, &ld2 ); 68 sout | '\t' | ld1 | ld2 | endl;68 sout | '\t' | ld1 | ' ' | ld2 | endl; 69 69 70 70 float _Complex fc1 = 1.5f+1.5if, fc2 = 2.5f+2.5if; 71 sout | "float _Complex\t\t" | fc1 | fc2 | "\tswap ";71 sout | "float _Complex\t\t" | fc1 | ' ' | fc2 | "\tswap "; 72 72 swap( &fc1, &fc2 ); 73 sout | '\t' | fc1 | fc2 | endl;73 sout | '\t' | fc1 | ' ' | fc2 | endl; 74 74 75 75 double _Complex dc1 = 1.5d+1.5id, dc2 = 2.5d+2.5id; 76 sout | "double _Complex\t\t" | dc1 | dc2 | "\tswap ";76 sout | "double _Complex\t\t" | dc1 | ' ' | dc2 | "\tswap "; 77 77 swap( &dc1, &dc2 ); 78 sout | '\t' | dc1 | dc2 | endl;78 sout | '\t' | dc1 | ' ' | dc2 | endl; 79 79 80 80 long double _Complex ldc1 = 1.5d+1.5il, ldc2 = 2.5d+2.5il; 81 sout | "long double _Complex\t" | ldc1 | ldc2 | "\tswap ";81 sout | "long double _Complex\t" | ldc1 | ' ' | ldc2 | "\tswap "; 82 82 swap( &ldc1, &ldc2 ); 83 sout | '\t' | ldc1 | ldc2 | endl;83 sout | '\t' | ldc1 | ' ' | ldc2 | endl; 84 84 85 85 struct S { int i, j; } s1 = { 1, 2 }, s2 = { 2, 1 }; 86 ofstream * ?|?( ofstream * os, S s ) { return os | s.i | s.j; }87 sout | "struct S\t\t" | s1 | " ," | s2 | "\t\tswap ";86 ofstream * ?|?( ofstream * os, S s ) { return os | s.i | ' ' | s.j; } 87 sout | "struct S\t\t" | s1 | " " | s2 | "\t\tswap "; 88 88 swap( &s1, &s2 ); 89 sout | '\t' | s1 | " ," | s2 | endl;89 sout | '\t' | s1 | " " | s2 | endl; 90 90 } // main 91 91 -
src/libcfa/Makefile.am
r1048b31 r1f6e009 11 11 ## Created On : Sun May 31 08:54:01 2015 12 12 ## Last Modified By : Peter A. Buhr 13 ## Last Modified On : Tue Apr 19 22:30:17201614 ## Update Count : 1 2413 ## Last Modified On : Wed Mar 2 22:59:23 2016 14 ## Update Count : 119 15 15 ############################################################################### 16 16 … … 60 60 ${CC} ${CFLAGS} -c -o $@ $< 61 61 62 libs = limits stdlib math iostream fstream iterator rational62 libs = stdlib iostream fstream iterator 63 63 libcfa_a_SOURCES = libcfa-prelude.c ${libs:=.c} 64 64 65 cheaders = # expat66 cfaheaders = #limits65 cheaders = # expat 66 cfaheaders = limits 67 67 include_HEADERS = ${cheaders:=.h} ${libs} ${cfaheaders} 68 68 -
src/libcfa/Makefile.in
r1048b31 r1f6e009 83 83 libcfa_a_AR = $(AR) $(ARFLAGS) 84 84 libcfa_a_LIBADD = 85 am__objects_1 = limits.$(OBJEXT) stdlib.$(OBJEXT) math.$(OBJEXT) \ 86 iostream.$(OBJEXT) fstream.$(OBJEXT) iterator.$(OBJEXT) \ 87 rational.$(OBJEXT) 85 am__objects_1 = stdlib.$(OBJEXT) iostream.$(OBJEXT) fstream.$(OBJEXT) \ 86 iterator.$(OBJEXT) 88 87 am_libcfa_a_OBJECTS = libcfa-prelude.$(OBJEXT) $(am__objects_1) 89 88 libcfa_a_OBJECTS = $(am_libcfa_a_OBJECTS) … … 214 213 MAINTAINERCLEANFILES = ${addprefix ${libdir}/,${cfalib_DATA}} \ 215 214 ${addprefix ${libdir}/,${lib_LIBRARIES}} ${includedir}/* 216 libs = limits stdlib math iostream fstream iterator rational215 libs = stdlib iostream fstream iterator 217 216 libcfa_a_SOURCES = libcfa-prelude.c ${libs:=.c} 218 cheaders = # expat219 cfaheaders = #limits217 cheaders = # expat 218 cfaheaders = limits 220 219 include_HEADERS = ${cheaders:=.h} ${libs} ${cfaheaders} 221 220 all: all-am … … 298 297 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iterator.Po@am__quote@ 299 298 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa-prelude.Po@am__quote@ 300 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/limits.Po@am__quote@301 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/math.Po@am__quote@302 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rational.Po@am__quote@303 299 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stdlib.Po@am__quote@ 304 300 -
src/libcfa/fstream
r1048b31 r1f6e009 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Apr 28 08:08:04 201613 // Update Count : 8812 // Last Modified On : Wed Mar 2 15:08:14 2016 13 // Update Count : 78 14 14 // 15 15 … … 20 20 21 21 enum { separateSize = 16 }; 22 struct ofstream { 23 void *file; 24 _Bool sepDefault; 25 int sepOnOff; // FIX ME: type should be _Bool 26 char separator[separateSize]; 27 }; // ofstream 22 struct ofstream { void *file; int separate; char separator[separateSize]; }; 28 23 29 24 _Bool sepPrt( ofstream * ); 30 25 void sepOn( ofstream * ); 31 26 void sepOff( ofstream * ); 32 void sepReset( ofstream * );33 void sepReset( ofstream *, _Bool );34 27 void sepSet( ofstream *, const char * ); 35 28 const char * sepGet( ofstream * ); 36 _BoolsepDisable( ofstream * );37 _BoolsepEnable( ofstream * );29 void sepDisable( ofstream * ); 30 void sepEnable( ofstream * ); 38 31 int fail( ofstream * ); 39 32 int flush( ofstream * ); … … 46 39 47 40 // implement context istream 48 struct ifstream { 49 void *file; 50 }; // ifstream 41 struct ifstream { void *file; }; 51 42 52 43 int fail( ifstream * is ); -
src/libcfa/fstream.c
r1048b31 r1f6e009 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Apr 27 18:20:30 201613 // Update Count : 1 8712 // Last Modified On : Mon Feb 29 18:41:10 2016 13 // Update Count : 162 14 14 // 15 15 … … 25 25 } 26 26 27 #define IO_MSG "I/O error :"27 #define IO_MSG "I/O error " 28 28 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; } 29 _Bool sepPrt( ofstream * os ) { return os->separate == 1; } 30 void sepOn( ofstream * os ) { if ( os->separate != 2 ) os->separate = 1; } 31 void sepOff( ofstream * os ) { if ( os->separate != 2 ) os->separate = 0; } 34 32 void sepSet( ofstream * os, const char * s ) { 35 33 strncpy( &(os->separator[0]), s, separateSize - 1 ); … … 37 35 } // sepSet 38 36 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 37 void sepDisable( ofstream *os ) { os->separate = 2; } 38 void sepEnable( ofstream *os ) { os->separate = 0; } 51 39 52 40 int fail( ofstream * os ) { … … 61 49 FILE *file = fopen( name, mode ); 62 50 if ( file == 0 ) { // do not change unless successful 63 fprintf( stderr, IO_MSG "open output file \"%s\", ", name ); 64 perror( 0 ); 51 perror( IO_MSG "open output" ); 65 52 exit( EXIT_FAILURE ); 66 53 } // if … … 93 80 int prtfmt( ofstream * os, const char fmt[], ... ) { 94 81 va_list args; 82 95 83 va_start( args, fmt ); 96 84 int len = vfprintf( (FILE *)(os->file), fmt, args ); … … 102 90 } // if 103 91 va_end( args ); 104 105 sepReset( os ); // reset separator106 92 return len; 107 93 } // prtfmt 108 94 109 95 110 static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_), 1,0, { ' ', '\0' } };96 static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_), 0, { ' ', '\0' } }; 111 97 ofstream *sout = &soutFile; 112 static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_), 1,0, { ' ', '\0' } };98 static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_), 0, { ' ', '\0' } }; 113 99 ofstream *serr = &serrFile; 114 100 … … 128 114 FILE *t = fopen( name, mode ); 129 115 if ( t == 0 ) { // do not change unless successful 130 fprintf( stderr, IO_MSG "open input file \"%s\", ", name ); 131 perror( 0 ); 116 perror( IO_MSG "open input" ); 132 117 exit( EXIT_FAILURE ); 133 118 } // if … … 190 175 // Local Variables: // 191 176 // tab-width: 4 // 177 // compile-command: "cfa fstream.c" // 192 178 // End: // -
src/libcfa/iostream
r1048b31 r1f6e009 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Apr 10 23:00:12201613 // Update Count : 9212 // Last Modified On : Wed Mar 2 18:05:27 2016 13 // Update Count : 85 14 14 // 15 15 … … 20 20 21 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 31 22 _Bool sepPrt( ostype * ); 23 void sepOn( ostype * ); 24 void sepOff( ostype * ); 25 void sepSet( ostype *, const char * ); 26 const char * sepGet( ostype * ); 27 void sepDisable( ostype * ); 28 void sepEnable( ostype * ); 32 29 int fail( ostype * ); 33 30 int flush( ostype * ); … … 70 67 forall( dtype ostype | ostream( ostype ) ) ostype * sepOn( ostype * ); 71 68 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 * );74 69 75 70 // writes the range [begin, end) to the given stream … … 115 110 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long double _Complex * ); 116 111 117 struct _Istream_ cstrUC{ char * s; };118 _Istream_ cstrUC cstr( char * );119 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_ cstrUC);112 struct _Istream_str1 { char * s; }; 113 _Istream_str1 str( char * ); 114 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_str1 ); 120 115 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);116 struct _Istream_str2 { char * s; int size; }; 117 _Istream_str2 str( char *, int size ); 118 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_str2 ); 124 119 125 120 #endif // __IOSTREAM_H__ -
src/libcfa/iostream.c
r1048b31 r1f6e009 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Apr 30 14:00:53 201613 // Update Count : 30212 // Last Modified On : Mon Mar 7 13:51:23 2016 13 // Update Count : 227 14 14 // 15 15 … … 27 27 ostype * ?|?( ostype *os, char c ) { 28 28 prtfmt( os, "%c", c ); 29 sepOff( os );30 29 return os; 31 30 } // ?|? … … 33 32 forall( dtype ostype | ostream( ostype ) ) 34 33 ostype * ?|?( ostype *os, short int si ) { 35 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 34 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 36 35 prtfmt( os, "%hd", si ); 37 36 return os; … … 40 39 forall( dtype ostype | ostream( ostype ) ) 41 40 ostype * ?|?( ostype *os, unsigned short int usi ) { 42 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 41 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 43 42 prtfmt( os, "%hu", usi ); 44 43 return os; … … 47 46 forall( dtype ostype | ostream( ostype ) ) 48 47 ostype * ?|?( ostype *os, int i ) { 49 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 48 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 50 49 prtfmt( os, "%d", i ); 51 50 return os; … … 54 53 forall( dtype ostype | ostream( ostype ) ) 55 54 ostype * ?|?( ostype *os, unsigned int ui ) { 56 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 55 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 57 56 prtfmt( os, "%u", ui ); 58 57 return os; … … 61 60 forall( dtype ostype | ostream( ostype ) ) 62 61 ostype * ?|?( ostype *os, long int li ) { 63 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 62 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 64 63 prtfmt( os, "%ld", li ); 65 64 return os; … … 68 67 forall( dtype ostype | ostream( ostype ) ) 69 68 ostype * ?|?( ostype *os, unsigned long int uli ) { 70 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 69 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 71 70 prtfmt( os, "%lu", uli ); 72 71 return os; … … 75 74 forall( dtype ostype | ostream( ostype ) ) 76 75 ostype * ?|?( ostype *os, long long int lli ) { 77 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 76 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 78 77 prtfmt( os, "%lld", lli ); 79 78 return os; … … 82 81 forall( dtype ostype | ostream( ostype ) ) 83 82 ostype * ?|?( ostype *os, unsigned long long int ulli ) { 84 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 83 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 85 84 prtfmt( os, "%llu", ulli ); 86 85 return os; … … 89 88 forall( dtype ostype | ostream( ostype ) ) 90 89 ostype * ?|?( ostype *os, float f ) { 91 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 90 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 92 91 prtfmt( os, "%g", f ); 93 92 return os; … … 96 95 forall( dtype ostype | ostream( ostype ) ) 97 96 ostype * ?|?( ostype *os, double d ) { 98 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 97 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 99 98 prtfmt( os, "%.*lg", DBL_DIG, d ); 100 99 return os; … … 103 102 forall( dtype ostype | ostream( ostype ) ) 104 103 ostype * ?|?( ostype *os, long double ld ) { 105 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 104 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 106 105 prtfmt( os, "%.*Lg", LDBL_DIG, ld ); 107 106 return os; … … 111 110 ostype * ?|?( ostype *os, float _Complex fc ) { 112 111 os | crealf( fc ); 113 _Bool temp = sepDisable( os ); // disable separators within complex value 114 if ( cimagf( fc ) >= 0 ) os | '+'; // negative value prints '-' 115 os | cimagf( fc ) | 'i'; 116 sepReset( os, temp ); // reset separator 112 if ( cimagf( fc ) >= 0 ) os | '+'; 113 os | "" | cimagf( fc ) | 'i'; 117 114 return os; 118 115 } // ?|? … … 121 118 ostype * ?|?( ostype *os, double _Complex dc ) { 122 119 os | creal( dc ); 123 _Bool temp = sepDisable( os ); // disable separators within complex value 124 if ( cimag( dc ) >= 0 ) os | '+'; // negative value prints '-' 125 os | cimag( dc ) | 'i'; 126 sepReset( os, temp ); // reset separator 120 if ( cimag( dc ) >= 0 ) os | '+'; 121 os | "" | cimag( dc ) | 'i'; 127 122 return os; 128 123 } // ?|? … … 131 126 ostype * ?|?( ostype *os, long double _Complex ldc ) { 132 127 os | creall( ldc ); 133 _Bool temp = sepDisable( os ); // disable separators within complex value 134 if ( cimagl( ldc ) >= 0 ) os | '+'; // negative value prints '-' 135 os | cimagl( ldc ) | 'i'; 136 sepReset( os, temp ); // reset separator 128 if ( cimagl( ldc ) >= 0 ) os | '+'; 129 os | "" | cimagl( ldc ) | 'i'; 137 130 return os; 138 131 } // ?|? … … 141 134 ostype * ?|?( ostype *os, const char *cp ) { 142 135 enum { Open = 1, Close, OpenClose }; 143 static const unsignedchar mask[256] = {136 static const char mask[256] = { 144 137 // opening delimiters 145 138 ['('] : Open, ['['] : Open, ['{'] : Open, 146 ['$'] : Open, [(unsigned char)'£'] : Open, [(unsigned char)'¥'] : Open, 147 [(unsigned char)'¡'] : Open, [(unsigned char)'¿'] : Open, [(unsigned char)'«'] : Open, 139 ['$'] : Open, [L'£'] : Open, [L'¥'] : Open, [L'¢'] : Open, [L'¿'] : Open, [L'«'] : Open, 148 140 // closing delimiters 149 141 [','] : Close, ['.'] : Close, [':'] : Close, [';'] : Close, ['!'] : Close, ['?'] : Close, 150 142 [')'] : Close, [']'] : Close, ['}'] : Close, 151 ['%'] : Close, [ (unsigned char)'¢'] : Close, [(unsigned char)'»'] : Close,143 ['%'] : Close, [L'»'] : Close, 152 144 // opening-closing delimiters 153 145 ['\''] : OpenClose, ['`'] : OpenClose, ['"'] : OpenClose, 154 [' '] : OpenClose, ['\f'] : OpenClose, ['\n'] : OpenClose, ['\r'] : OpenClose, ['\t'] : OpenClose, ['\v'] : OpenClose, // isspace155 146 }; // mask 156 147 157 if ( cp[0] == '\0' ) { sepOff( os ); return os; } // null string => no separator 158 159 // first character IS NOT spacing or closing punctuation => add left separator 160 unsigned char ch = cp[0]; // must make unsigned161 if ( sepPrt( os ) && mask[ ch ] != Close && mask[ ch] != OpenClose ) {148 int len = strlen( cp ); 149 // null string => no separator 150 if ( len == 0 ) { sepOff( os ); return os; } 151 // first character NOT spacing or closing punctuation => add left separator 152 if ( sepPrt( os ) && isspace( cp[0] ) == 0 && mask[ cp[0] ] != Close && mask[ cp[0] ] != OpenClose ) { 162 153 prtfmt( os, "%s", sepGet( os ) ); 163 154 } // if 164 165 // if string starts line, must reset to determine open state because separator is off166 sepReset( os ); // reset separator167 168 155 // last character IS spacing or opening punctuation => turn off separator for next item 169 unsigned int len = strlen( cp ), posn = len - 1; 170 ch = cp[posn]; // must make unsigned 171 if ( sepPrt( os ) && mask[ ch ] != Open && mask[ ch ] != OpenClose ) { 156 unsigned int posn = len - 1; 157 if ( isspace( cp[posn] ) || mask[ cp[posn] ] == Open || mask[ cp[posn] ] == OpenClose ) { 158 sepOff( os ); 159 } else { 172 160 sepOn( os ); 173 } else {174 sepOff( os );175 161 } // if 176 162 return write( os, cp, len ); … … 179 165 forall( dtype ostype | ostream( ostype ) ) 180 166 ostype * ?|?( ostype *os, const void *p ) { 181 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 167 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 182 168 prtfmt( os, "%p", p ); 183 169 return os; 184 170 } // ?|? 171 185 172 186 173 forall( dtype ostype | ostream( ostype ) ) … … 209 196 } // sepOff 210 197 211 forall( dtype ostype | ostream( ostype ) )212 ostype * sepEnable( ostype * os ) {213 sepEnable( os );214 return os;215 } // sepEnable216 217 forall( dtype ostype | ostream( ostype ) )218 ostype * sepDisable( ostype * os ) {219 sepDisable( os );220 return os;221 } // sepDisable222 223 198 //--------------------------------------- 224 199 … … 335 310 } // ?|? 336 311 337 _Istream_ cstrUC cstr( char * s ) { _Istream_cstrUCs = { s }; return s; }338 forall( dtype istype | istream( istype ) ) 339 istype * ?|?( istype * is, _Istream_ cstrUC cstr ) {340 scanfmt( is, "%s", cstr.s );341 return is; 342 } // cstr343 344 _Istream_ cstrC cstr( char * s, int size ) { _Istream_cstrCs = { s, size }; return s; }345 forall( dtype istype | istream( istype ) ) 346 istype * ?|?( istype * is, _Istream_ cstrC cstr ) {312 _Istream_str1 str( char * s ) { _Istream_str1 s = { s }; return s; } 313 forall( dtype istype | istream( istype ) ) 314 istype * ?|?( istype * is, _Istream_str1 str ) { 315 scanfmt( is, "%s", str.s ); 316 return is; 317 } // str 318 319 _Istream_str2 str( char * s, int size ) { _Istream_str2 s = { s, size }; return s; } 320 forall( dtype istype | istream( istype ) ) 321 istype * ?|?( istype * is, _Istream_str2 str ) { 347 322 char buf[16]; 348 sprintf( buf, "%%%ds", cstr.size );349 scanfmt( is, buf, cstr.s );350 return is; 351 } // cstr323 sprintf( buf, "%%%ds", str.size ); 324 scanfmt( is, buf, str.s ); 325 return is; 326 } // str 352 327 353 328 // Local Variables: // -
src/libcfa/limits
r1048b31 r1f6e009 1 //2 // Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo3 //4 // The contents of this file are covered under the licence agreement in the5 // file "LICENCE" distributed with Cforall.6 //7 // limits --8 //9 // Author : Peter A. Buhr10 // Created On : Wed Apr 6 18:06:52 201611 // Last Modified By : Peter A. Buhr12 // Last Modified On : Wed Apr 6 21:08:16 201613 // Update Count : 614 //15 16 1 // Integral Constants 17 2 18 extern const short int MIN;19 extern const int MIN;20 extern const long int MIN;21 extern const long long int MIN;3 const short int MIN = -32768; 4 const int MIN = -2147483648; 5 const long int MIN = -9223372036854775807L - 1L; 6 const long long int MIN = -9223372036854775807LL - 1LL; 22 7 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;8 const short int MAX = 32767; 9 const unsigned short int MAX = 65535; 10 const int MAX = 2147483647; 11 const unsigned int MAX = 4294967295_U; 12 const long int MAX = 9223372036854775807_L; 13 const unsigned long int MAX = 4294967295_U; 14 const long long int MAX = 9223372036854775807_LL; 15 const unsigned long long int MAX = 18446744073709551615_ULL; 31 16 32 17 // Floating-Point Constants 33 18 34 extern const float PI;// pi35 extern const float PI_2;// pi / 236 extern const float PI_4;// pi / 437 extern const float _1_PI;// 1 / pi38 extern const float _2_PI;// 2 / pi39 extern const float _2_SQRT_PI;// 2 / sqrt(pi)19 const float PI = 3.141592_F; // pi 20 const float PI_2 = 1.570796_F; // pi / 2 21 const float PI_4 = 0.7853981_F; // pi / 4 22 const float _1_PI = 0.3183098_F; // 1 / pi 23 const float _2_PI = 0.6366197_F; // 2 / pi 24 const float _2_SQRT_PI = 1.128379_F; // 2 / sqrt(pi) 40 25 41 extern const double PI;// pi42 extern const double PI_2;// pi / 243 extern const double PI_4;// pi / 444 extern const double _1_PI;// 1 / pi45 extern const double _2_PI;// 2 / pi46 extern const double _2_SQRT_PI;// 2 / sqrt(pi)26 const double PI = 3.14159265358979323846_D; // pi 27 const double PI_2 = 1.57079632679489661923_D; // pi / 2 28 const double PI_4 = 0.78539816339744830962_D; // pi / 4 29 const double _1_PI = 0.31830988618379067154_D; // 1 / pi 30 const double _2_PI = 0.63661977236758134308_D; // 2 / pi 31 const double _2_SQRT_PI = 1.12837916709551257390_D; // 2 / sqrt(pi) 47 32 48 extern const long double PI;// pi49 extern const long double PI_2;// pi / 250 extern const long double PI_4;// pi / 451 extern const long double _1_PI;// 1 / pi52 extern const long double _2_PI;// 2 / pi53 extern const long double _2_SQRT_PI;// 2 / sqrt(pi)33 const long double PI = 3.1415926535897932384626433832795029_DL; // pi 34 const long double PI_2 = 1.5707963267948966192313216916397514_DL; // pi / 2 35 const long double PI_4 = 0.7853981633974483096156608458198757_DL; // pi / 4 36 const long double _1_PI = 0.3183098861837906715377675267450287_DL; // 1 / pi 37 const long double _2_PI = 0.6366197723675813430755350534900574_DL; // 2 / pi 38 const long double _2_SQRT_PI = 1.1283791670955125738961589031215452_DL; // 2 / sqrt(pi) 54 39 55 extern const _Complex PI;// pi56 extern const _Complex PI_2;// pi / 257 extern const _Complex PI_4;// pi / 458 extern const _Complex _1_PI;// 1 / pi59 extern const _Complex _2_PI;// 2 / pi60 extern const _Complex _2_SQRT_PI;// 2 / sqrt(pi)40 const _Complex PI = 3.14159265358979323846_D+0.0_iD; // pi 41 const _Complex PI_2 = 1.57079632679489661923_D+0.0_iD; // pi / 2 42 const _Complex PI_4 = 0.78539816339744830962_D+0.0_iD; // pi / 4 43 const _Complex _1_PI = 0.31830988618379067154_D+0.0_iD; // 1 / pi 44 const _Complex _2_PI = 0.63661977236758134308_D+0.0_iD; // 2 / pi 45 const _Complex _2_SQRT_PI = 1.12837916709551257390_D+0.0_iD; // 2 / sqrt(pi) 61 46 62 extern const long _Complex PI;// pi63 extern const long _Complex PI_2;// pi / 264 extern const long _Complex PI_4;// pi / 465 extern const long _Complex _1_PI;// 1 / pi66 extern const long _Complex _2_PI;// 2 / pi67 extern const long _Complex _2_SQRT_PI;// 2 / sqrt(pi)47 const long _Complex PI = 3.1415926535897932384626433832795029_L+0.0iL; // pi 48 const long _Complex PI_2 = 1.5707963267948966192313216916397514_L+0.0iL; // pi / 2 49 const long _Complex PI_4 = 0.7853981633974483096156608458198757_L+0.0iL; // pi / 4 50 const long _Complex _1_PI = 0.3183098861837906715377675267450287_L+0.0iL; // 1 / pi 51 const long _Complex _2_PI = 0.6366197723675813430755350534900574_L+0.0iL; // 2 / pi 52 const long _Complex _2_SQRT_PI = 1.1283791670955125738961589031215452_L+0.0iL; // 2 / sqrt(pi) 68 53 69 extern const float E;// e70 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)54 const float E = 2.718281; // e 55 const float LOG2_E = 1.442695; // log_2(e) 56 const float LOG10_E = 0.4342944; // log_10(e) 57 const float LN_2 = 0.6931471; // log_e(2) 58 const float LN_10 = 2.302585; // log_e(10) 59 const float SQRT_2 = 1.414213; // sqrt(2) 60 const float _1_SQRT_2 = 0.7071067; // 1 / sqrt(2) 76 61 77 extern const double E;// e78 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)62 const double E = 2.7182818284590452354_D; // e 63 const double LOG2_E = 1.4426950408889634074_D; // log_2(e) 64 const double LOG10_E = 0.43429448190325182765_D; // log_10(e) 65 const double LN_2 = 0.69314718055994530942_D; // log_e(2) 66 const double LN_10 = 2.30258509299404568402_D; // log_e(10) 67 const double SQRT_2 = 1.41421356237309504880_D; // sqrt(2) 68 const double _1_SQRT_2 = 0.70710678118654752440_D; // 1 / sqrt(2) 84 69 85 extern const long double E;// e86 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)70 const long double E = 2.7182818284590452353602874713526625_DL; // e 71 const long double LOG2_E = 1.4426950408889634073599246810018921_DL; // log_2(e) 72 const long double LOG10_E = 0.4342944819032518276511289189166051_DL; // log_10(e) 73 const long double LN_2 = 0.6931471805599453094172321214581766_DL; // log_e(2) 74 const long double LN_10 = 2.3025850929940456840179914546843642_DL; // log_e(10) 75 const long double SQRT_2 = 1.4142135623730950488016887242096981_DL; // sqrt(2) 76 const long double _1_SQRT_2 = 0.7071067811865475244008443621048490_DL; // 1/sqrt(2) 92 77 93 extern const _Complex E;// e94 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)78 const _Complex E = 2.7182818284590452354_D+0.0_iD; // e 79 const _Complex LOG2_E = 1.4426950408889634074_D+0.0_iD; // log_2(e) 80 const _Complex LOG10_E = 0.43429448190325182765_D+0.0_iD; // log_10(e) 81 const _Complex LN_2 = 0.69314718055994530942_D+0.0_iD; // log_e(2) 82 const _Complex LN_10 = 2.30258509299404568402_D+0.0_iD; // log_e(10) 83 const _Complex SQRT_2 = 1.41421356237309504880_D+0.0_iD; // sqrt(2) 84 const _Complex _1_SQRT_2 = 0.70710678118654752440_D+0.0_iD; // 1 / sqrt(2) 100 85 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: // 86 const long _Complex E = 2.7182818284590452353602874713526625_L+0.0_iL; // e 87 const long _Complex LOG2_E = 1.4426950408889634073599246810018921_L+0.0_iL; // log_2(e) 88 const long _Complex LOG10_E = 0.4342944819032518276511289189166051_L+0.0_iL; // log_10(e) 89 const long _Complex LN_2 = 0.6931471805599453094172321214581766_L+0.0_iL; // log_e(2) 90 const long _Complex LN_10 = 2.3025850929940456840179914546843642_L+0.0_iL; // log_e(10) 91 const long _Complex SQRT_2 = 1.4142135623730950488016887242096981_L+0.0_iL; // sqrt(2) 92 const long _Complex _1_SQRT_2 = 0.7071067811865475244008443621048490_L+0.0_iL; // 1 / sqrt(2) -
src/libcfa/stdlib
r1048b31 r1f6e009 10 10 // Created On : Thu Jan 28 17:12:35 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Apr 27 22:03:29201613 // Update Count : 9612 // Last Modified On : Tue Mar 22 22:34:24 2016 13 // Update Count : 69 14 14 // 15 15 … … 20 20 } // extern "C" 21 21 22 //---------------------------------------23 24 extern "C" {25 #ifndef EXIT_FAILURE26 #define EXIT_FAILURE 1 // failing exit status27 #define EXIT_SUCCESS 0 // successful exit status28 #endif // ! EXIT_FAILURE29 void exit( int rc );30 void abort( void );31 } // extern "C"32 33 //---------------------------------------34 35 extern "C" { void * malloc( size_t ); } // use default C routine for void *36 22 forall( otype T ) T * malloc( void ); 37 23 forall( otype T ) T * malloc( char fill ); 38 24 forall( otype T ) T * malloc( T * ptr, size_t size ); 39 25 forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill ); 40 extern "C" { void * calloc( size_t nmemb, size_t size ); } // use default C routine for void * 41 forall( otype T ) T * calloc( size_t nmemb ); 42 extern "C" { void * realloc( void * ptr, size_t size ); } // use default C routine for void * 26 forall( otype T ) T * calloc( size_t size ); 43 27 forall( otype T ) T * realloc( T * ptr, size_t size ); 44 28 forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill ); … … 48 32 forall( otype T ) int posix_memalign( T ** ptr, size_t alignment ); 49 33 50 extern "C" { 51 void * memset( void * ptr, int fill, size_t size ); 52 void free( void * ptr ); 53 } // extern "C" 34 forall( otype T ) T * memset( T * ptr, unsigned char fill ); // use default value '\0' for fill 35 forall( otype T ) T * memset( T * ptr ); // remove when default value available 54 36 55 37 //--------------------------------------- … … 97 79 98 80 char abs( char ); 99 extern "C" { int abs( int ); } // use default C routine for int 81 extern "C" { 82 int abs( int ); // use default C routine for int 83 } // extern 100 84 long int abs( long int ); 101 85 long long int abs( long long int ); … … 103 87 double abs( double ); 104 88 long double abs( long double ); 105 float abs( float _Complex );106 double abs( double _Complex );107 long double abs( long double _Complex );89 float _Complex abs( float _Complex ); 90 double _Complex abs( double _Complex ); 91 long double _Complex abs( long double _Complex ); 108 92 109 93 //--------------------------------------- -
src/libcfa/stdlib.c
r1048b31 r1f6e009 10 10 // Created On : Thu Jan 28 17:10:29 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Apr 28 07:54:21201613 // Update Count : 1 6612 // Last Modified On : Wed Mar 23 13:26:42 2016 13 // Update Count : 146 14 14 // 15 15 … … 24 24 #include <malloc.h> // malloc_usable_size 25 25 #include <math.h> // fabsf, fabs, fabsl 26 #include <complex.h> // _Complex_I 26 #include <complex.h> // _Complex_I, cabsf, cabs, cabsl 27 27 } // extern "C" 28 28 29 29 forall( otype T ) T * malloc( void ) { 30 //printf( "malloc1\n" );30 printf( "malloc1\n" ); 31 31 return (T *)malloc( sizeof(T) ); 32 32 } // malloc 33 forall( otype T ) T * malloc( size_t size ) { 34 printf( "malloc2\n" ); 35 return (T *)(void *)malloc( size ); 36 } // malloc 33 37 forall( otype T ) T * malloc( char fill ) { 34 //printf( "malloc3\n" );38 printf( "malloc3\n" ); 35 39 T * ptr = (T *)malloc( sizeof(T) ); 36 return memset( ptr , (int)fill, sizeof(T));37 } // malloc 38 39 forall( otype T ) T * calloc( size_t nmemb) {40 //printf( "calloc\n" );41 return (T *)calloc( nmemb, sizeof(T) );40 return memset( ptr ); 41 } // malloc 42 43 forall( otype T ) T * calloc( size_t size ) { 44 printf( "calloc\n" ); 45 return (T *)calloc( size, sizeof(T) ); 42 46 } // calloc 43 47 44 48 forall( otype T ) T * realloc( T * ptr, size_t size ) { 45 //printf( "realloc1\n" );49 printf( "realloc1\n" ); 46 50 return (T *)(void *)realloc( (void *)ptr, size ); 47 51 } // realloc 48 52 forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill ) { 49 //printf( "realloc2\n" );53 printf( "realloc2\n" ); 50 54 char * nptr = (T *)(void *)realloc( (void *)ptr, size ); 51 55 size_t unused = malloc_usable_size( nptr ); … … 55 59 56 60 forall( otype T ) T * malloc( T * ptr, size_t size ) { 57 //printf( "malloc4\n" );61 printf( "malloc4\n" ); 58 62 return (T *)realloc( ptr, size ); 59 63 } // malloc 60 64 forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill ) { 61 //printf( "malloc5\n" );65 printf( "malloc5\n" ); 62 66 return (T *)realloc( ptr, size, fill ); 63 67 } // malloc 64 68 65 69 forall( otype T ) T * aligned_alloc( size_t alignment ) { 66 //printf( "aligned_alloc\n" );70 printf( "aligned_alloc\n" ); 67 71 return (T *)memalign( alignment, sizeof(T) ); 68 72 } // aligned_alloc 69 73 70 74 forall( otype T ) T * memalign( size_t alignment ) { 71 //printf( "memalign\n" );75 printf( "memalign\n" ); 72 76 return (T *)memalign( alignment, sizeof(T) ); 73 77 } // memalign 74 78 75 79 forall( otype T ) int posix_memalign( T ** ptr, size_t alignment ) { 76 //printf( "posix_memalign\n" );80 printf( "posix_memalign\n" ); 77 81 return posix_memalign( (void **)ptr, alignment, sizeof(T) ); 78 82 } // posix_memalign 79 83 84 forall( otype T ) T * memset( T * ptr, unsigned char fill ) { // use default value '\0' for fill 85 printf( "memset1\n" ); 86 return (T *)memset( ptr, (int)fill, malloc_usable_size( ptr ) ); 87 } // memset 88 forall( otype T ) T * memset( T * ptr ) { // remove when default value available 89 printf( "memset2\n" ); 90 return (T *)memset( ptr, 0, malloc_usable_size( ptr ) ); 91 } // memset 92 80 93 //--------------------------------------- 81 94 82 95 int ato( const char * ptr ) { 83 96 int i; 84 if ( sscanf( ptr, "%d", &i ) == EOF ) {} 97 if ( sscanf( ptr, "%d", &i ) == EOF ) {} // check return code 85 98 return i; 86 99 } 87 100 unsigned int ato( const char * ptr ) { 88 101 unsigned int ui; 89 if ( sscanf( ptr, "%u", &ui ) == EOF ) {} 102 if ( sscanf( ptr, "%u", &ui ) == EOF ) {} // check return code 90 103 return ui; 91 104 } 92 105 long int ato( const char * ptr ) { 93 106 long int li; 94 if ( sscanf( ptr, "%ld", &li ) == EOF ) {} 107 if ( sscanf( ptr, "%ld", &li ) == EOF ) {} // check return code 95 108 return li; 96 109 } 97 110 unsigned long int ato( const char * ptr ) { 98 111 unsigned long int uli; 99 if ( sscanf( ptr, "%lu", &uli ) == EOF ) {} 112 if ( sscanf( ptr, "%lu", &uli ) == EOF ) {} // check return code 100 113 return uli; 101 114 } 102 115 long long int ato( const char * ptr ) { 103 116 long long int lli; 104 if ( sscanf( ptr, "%lld", &lli ) == EOF ) {} 117 if ( sscanf( ptr, "%lld", &lli ) == EOF ) {} // check return code 105 118 return lli; 106 119 } 107 120 unsigned long long int ato( const char * ptr ) { 108 121 unsigned long long int ulli; 109 if ( sscanf( ptr, "%llu", &ulli ) == EOF ) {} 122 if ( sscanf( ptr, "%llu", &ulli ) == EOF ) {} // check return code 110 123 return ulli; 111 124 } … … 113 126 float ato( const char * ptr ) { 114 127 float f; 115 if ( sscanf( ptr, "%f", &f ) == EOF ) {} 128 if ( sscanf( ptr, "%f", &f ) == EOF ) {} // check return code 116 129 return f; 117 130 } 118 131 double ato( const char * ptr ) { 119 132 double d; 120 if ( sscanf( ptr, "%lf", &d ) == EOF ) {} 133 if ( sscanf( ptr, "%lf", &d ) == EOF ) {} // check return code 121 134 return d; 122 135 } 123 136 long double ato( const char * ptr ) { 124 137 long double ld; 125 if ( sscanf( ptr, "%Lf", &ld ) == EOF ) {} 138 if ( sscanf( ptr, "%Lf", &ld ) == EOF ) {} // check return code 126 139 return ld; 127 140 } … … 129 142 float _Complex ato( const char * ptr ) { 130 143 float re, im; 131 if ( sscanf( ptr, "%g%gi", &re, &im ) == EOF ) {} 144 if ( sscanf( ptr, "%g%gi", &re, &im ) == EOF ) {} // check return code 132 145 return re + im * _Complex_I; 133 146 } 134 147 double _Complex ato( const char * ptr ) { 135 148 double re, im; 136 if ( sscanf( ptr, "%lf%lfi", &re, &im ) == EOF ) {} 149 if ( sscanf( ptr, "%lf%lfi", &re, &im ) == EOF ) {} // check return code 137 150 return re + im * _Complex_I; 138 151 } 139 152 long double _Complex ato( const char * ptr ) { 140 153 long double re, im; 141 if ( sscanf( ptr, "%Lf%Lfi", &re, &im ) == EOF ) {} 154 if ( sscanf( ptr, "%Lf%Lfi", &re, &im ) == EOF ) {} // check return code 142 155 return re + im * _Complex_I; 143 156 } … … 213 226 //--------------------------------------- 214 227 215 //forall( otype T | { T ?/?( T, T ); T ?%?( T, T ); } )216 // [ T, T ] div( T t1, T t2 ) { return [ t1 / t2, t1 % t2 ];}228 forall( otype T | { T ?/?( T, T ); T ?%?( T, T ); } ) 229 [ T, T ] div( T t1, T t2 ) { /* return [ t1 / t2, t1 % t2 ]; */ } 217 230 218 231 //--------------------------------------- … … 221 234 long int abs( long int v ) { return labs( v ); } 222 235 long long int abs( long long int v ) { return llabs( v ); } 223 float abs( float x ) { return fabsf( x); }224 double abs( double x ) { return fabs( x); }225 long double abs( long double x ) { return fabsl( x); }226 float abs( float _Complex x ) { return cabsf( x); }227 double abs( double _Complex x ) { return cabs( x); }228 long double abs( long double _Complex x ) { return cabsl( x); }236 float abs( float v ) { return fabsf( v ); } 237 double abs( double v ) { return fabs( v ); } 238 long double abs( long double v ) { return fabsl( v ); } 239 float _Complex abs( float _Complex v ) { return cabsf( v ); } 240 double _Complex abs( double _Complex v ) { return cabs( v ); } 241 long double _Complex abs( long double _Complex v ) { return cabsl( v ); } 229 242 230 243 //---------------------------------------
Note:
See TracChangeset
for help on using the changeset viewer.