Changes in / [39786813:a5a71d0]
- Files:
-
- 6 added
- 21 deleted
- 109 edited
Legend:
- Unmodified
- Added
- Removed
-
.gitignore
r39786813 ra5a71d0 30 30 31 31 # generated by latex 32 doc/refrat/refrat.aux33 doc/refrat/refrat.bbl34 doc/refrat/refrat.blg35 doc/refrat/refrat.brf36 doc/refrat/refrat.dvi37 doc/refrat/refrat.idx38 doc/refrat/refrat.ilg39 doc/refrat/refrat.ind40 doc/refrat/refrat.log41 doc/refrat/refrat.out42 doc/refrat/refrat.pdf43 doc/refrat/refrat.ps44 doc/refrat/refrat.toc32 *.aux 33 *.bbl 34 *.blg 35 *.brf 36 *.dvi 37 *.idx 38 *.ilg 39 *.ind 40 *.log 41 *.out 42 *.pdf 43 *.ps 44 *.toc -
configure
r39786813 ra5a71d0 2409 2409 2410 2410 2411 if test "x${CXXFLAGS}" = "x"; then 2412 export CXXFLAGS="-std=c++11 -g -O2 ${CXXFLAGS}" 2413 else 2414 export CXXFLAGS="-std=c++11 ${CXXFLAGS}" 2415 fi 2416 2411 2417 am__api_version='1.11' 2412 2418 -
configure.ac
r39786813 ra5a71d0 7 7 #AC_CONFIG_SRCDIR([src/main.cc]) 8 8 AC_CONFIG_HEADERS([config.h]) 9 10 if test "x${CXXFLAGS}" = "x"; then 11 export CXXFLAGS="-std=c++11 -g -O2 ${CXXFLAGS}" 12 else 13 export CXXFLAGS="-std=c++11 ${CXXFLAGS}" 14 fi 9 15 10 16 AM_INIT_AUTOMAKE -
doc/refrat/Makefile
r39786813 ra5a71d0 1 1 ## Define the appropriate configuration variables. 2 2 3 TeXLIB = .:: 3 Macros = 4 TeXLIB = .:${Macros}: 4 5 LaTeX = TEXINPUTS=${TeXLIB} && export TEXINPUTS && latex 5 6 BibTeX = BSTINPUTS=${TeXLIB} && export BSTINPUTS && bibtex -
doc/refrat/refrat.tex
r39786813 ra5a71d0 17 17 \usepackage[dvips,plainpages=false,pdfpagelabels,pdfpagemode=UseNone,colorlinks=true,pagebackref=true,linkcolor=blue,citecolor=blue,urlcolor=blue,pagebackref=true,breaklinks=true]{hyperref} 18 18 \usepackage{breakurl} 19 \ urlstyle{sf}19 \renewcommand{\UrlFont}{\small\sf} 20 20 21 21 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% … … 23 23 % Names used in the document. 24 24 25 \newcommand{\CFA}{C forall\xspace} % set language textname26 \newcommand{\CF AA}{C$\forall$\xspace} % set language symbolicname25 \newcommand{\CFA}{C$\forall$\xspace} % set language symbolic name 26 \newcommand{\CFL}{Cforall\xspace} % set language text name 27 27 \newcommand{\CC}{C\kern-.1em\hbox{+\kern-.25em+}\xspace} % CC symbolic name 28 28 \def\c11{ISO/IEC C} % C11 name (cannot have numbers in latex command name) … … 33 33 34 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 35 81 % index macros 36 82 \newcommand{\italic}[1]{\emph{\hyperpage{#1}}} … … 60 106 %\newcommand{\impl}[1]{\index{\protect#1@{\lstinline$\protect#1$}|definition}} 61 107 62 % text inline and lowercase index: \Index{Inline andindex text}63 % text inline and as-in index: \Index{Inline and Indextext}64 % text inlinebut index with different as-is text: \Index[index text]{inline text}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} 65 111 \newcommand{\Index}{\@ifstar\@sIndex\@Index} 66 112 \newcommand{\@Index}[2][\@empty]{\lowercase{\def\temp{#2}}#2\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi} … … 69 115 70 116 % blocks and titles 71 \newcommand{\define}[1]{\emph{#1\/}\index{#1}}72 117 \newenvironment{rationale}{% 73 118 \begin{quotation}\noindent$\Box$\enspace … … 75 120 \hfill\enspace$\Box$\end{quotation} 76 121 }% 122 \newcommand{\define}[1]{\emph{#1\/}\index{#1}} 77 123 \newcommand{\rewrite}{\(\Rightarrow\)} 78 124 \newcommand{\rewriterules}{\paragraph{Rewrite Rules}~\par\noindent} … … 103 149 \newcommand{\VPageref}[2][page]{\ifx#1\@empty\else{#1}\nobreakspace\fi\pageref{#2}} 104 150 105 % adjust listings macros151 % CFA based on ANSI C 106 152 \lstdefinelanguage{CFA}[ANSI]{C}% 107 {morekeywords={asm,_Alignas,_Alignof,_At,_Atomic,_Bool,catch,catchResume,choose,_Complex, context,disable,dtype,enable,108 fallthru,finally,forall,ftype,_Generic,_Imaginary,inline,lvalue,_Noreturn, restrict,_Static_assert,109 _Thread_local,throw,throwResume,try, type,},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,}, 110 156 }% 111 157 … … 113 159 language=CFA, 114 160 columns=flexible, 115 basicstyle=\sf\ small,161 basicstyle=\sf\relsize{-1}, 116 162 tabsize=4, 117 163 xleftmargin=\parindent, 118 164 escapechar=@, 119 165 keepspaces=true, 120 %showtabs=true,121 %tab=\rightarrowfill,166 showstringspaces=false, 167 showlines=true, 122 168 }% 123 169 … … 145 191 \linenumbers % comment out to turn off line numbering 146 192 147 \title{\CFA (\CFAA) Reference Manual and Rationale} 148 \author{Glen Ditchfield \and Peter A. Buhr} 149 \date{DRAFT\\\today} 193 \title{\Huge 194 \CFA (\CFL) Reference Manual and Rationale 195 }% title 196 \author{\huge 197 Glen Ditchfield and Peter A. Buhr 198 }% author 199 \date{ 200 DRAFT\\\today 201 }% date 150 202 151 203 \pagenumbering{roman} … … 159 211 \copyright\,2015 Glen Ditchfield \\ \\ 160 212 \noindent 161 This work is licensed under the Creative Commons Attribution 4.0 International License. To view a162 copy of this license, visit {\small\url{http://creativecommons.org/licenses/by/4.0}}.213 This work is licensed under the Creative Commons Attribution 4.0 International License. 214 To view a copy of this license, visit {\small\url{http://creativecommons.org/licenses/by/4.0}}. 163 215 \vspace*{1in} 164 216 … … 173 225 \chapter*{Introduction}\addcontentsline{toc}{chapter}{Introduction} 174 226 175 This document is a reference manual and rationale for \CFA, a polymorphic extension of the C 176 programming language. It makes frequent reference to the {\c11} standard \cite{ANS:C11}, and 177 occasionally compares \CFA to {\CC} \cite{c++}. 178 179 The manual deliberately imitates the ordering of the {\c11} standard (although the section numbering 180 differs). Unfortunately, this means the manual contains more ``forward references'' than usual, 181 making it harder to follow if the reader does not have a copy of the {\c11} standard. For a simple 182 introduction to \CFA, see the companion document ``An Overview of \CFA'' 227 This document is a reference manual and rationale for \CFA, a polymorphic extension of the C programming language. 228 It makes frequent reference to the {\c11} standard \cite{ANS:C11}, and occasionally compares \CFA to {\CC} \cite{c++}. 229 230 The manual deliberately imitates the ordering of the {\c11} standard (although the section numbering differs). 231 Unfortunately, this means the manual contains more ``forward references'' than usual, making it harder to follow if the reader does not have a copy of the {\c11} standard. 232 For a simple introduction to \CFA, see the companion document ``An Overview of \CFA'' 183 233 \cite{Ditchfield96:Overview}. 184 234 185 235 \begin{rationale} 186 Commentary (like this) is quoted with quads. Commentary usually deals with subtle points, the187 rationale behind a rule, and design decisions.236 Commentary (like this) is quoted with quads. 237 Commentary usually deals with subtle points, the rationale behind a rule, and design decisions. 188 238 \end{rationale} 189 239 … … 194 244 \chapter{Terms, definitions, and symbols} 195 245 196 Terms from the {\c11} standard used in this document have the same meaning as in the {\c11} 197 standard. 246 Terms from the {\c11} standard used in this document have the same meaning as in the {\c11} standard. 198 247 199 248 % No ``Conformance'' or ``Environment'' chapters yet. … … 205 254 206 255 \section{Notation} 207 The syntax notation used in this document is the same as in the {\c11} standard, with one exception: 208 ellipsis in the definition of a nonterminal, as in ``\emph{declaration:} \ldots'', indicates that 209 these rules extend a previous definition, which occurs in this document or in the {\c11} standard. 256 The syntax notation used in this document is the same as in the {\c11} standard, with one exception: ellipsis in the definition of a nonterminal, as in ``\emph{declaration:} \ldots'', indicates that these rules extend a previous definition, which occurs in this document or in the {\c11} standard. 210 257 211 258 … … 215 262 \subsection{Scopes of identifiers}\index{scopes} 216 263 217 \CFA's scope rules differ from C's in one major respect: a declaration of an identifier may 218 overload\index{overloading} outer declarations of lexically identical identifiers in the same 219 \Index{name space}, instead of hiding them. The outer declaration is hidden if the two declarations 220 have \Index{compatible type}, or if one declares an array type and the other declares a pointer type 221 and the element type and pointed-at type are compatible, or if one has function type and the other 222 is a pointer to a compatible function type, or if one declaration is a \lstinline$type$\use{type} or 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 265 \Index{name space}, instead of hiding them. 266 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 223 267 \lstinline$typedef$\use{typedef} declaration and the other is not. The outer declaration becomes 224 268 \Index{visible} when the scope of the inner declaration terminates. 225 269 \begin{rationale} 226 Hence, a \CFA program can declare an \lstinline$int v$ and a \lstinline$float v$ in the same 227 scope;a {\CC} program can not.270 Hence, a \CFA program can declare an \lstinline$int v$ and a \lstinline$float v$ in the same scope; 271 a {\CC} program can not. 228 272 \end{rationale} 229 273 … … 232 276 \index{linkage} 233 277 234 \CFA's linkage rules differ from C's in only one respect: instances of a particular identifier with 235 external or internal linkage do not necessarily denote the same object or function. Instead, in the 236 set of translation units and libraries that constitutes an entire program, any two instances of a 237 particular identifier with \Index{external linkage} denote the same object or function if they have 238 \Index{compatible type}s, or if one declares an array type and the other declares a pointer type and 239 the element type and pointed-at type are compatible, or if one has function type and the other is a 240 pointer to a compatible function type. Within one translation unit, each instance of an identifier 241 with \Index{internal linkage} denotes the same object or function in the same circumstances. 278 \CFA's linkage rules differ from C's in only one respect: instances of a particular identifier with external or internal linkage do not necessarily denote the same object or function. 279 Instead, in the set of translation units and libraries that constitutes an entire program, any two instances of a particular identifier with \Index{external linkage} denote the same object or function if they have 280 \Index{compatible type}s, or if one declares an array type and the other declares a pointer type and the element type and pointed-at type are compatible, or if one has function type and the other is a pointer to a compatible function type. 281 Within one translation unit, each instance of an identifier with \Index{internal linkage} denotes the same object or function in the same circumstances. 242 282 Identifiers with \Index{no linkage} always denote unique entities. 243 283 \begin{rationale} 244 A \CFA program can declare an \lstinline$extern int v$ and an \lstinline$extern float v$; a C245 program cannot.284 A \CFA program can declare an \lstinline$extern int v$ and an \lstinline$extern float v$; 285 a C program cannot. 246 286 \end{rationale} 247 287 … … 253 293 \subsubsection{Semantics} 254 294 255 \CFA provides a capability for generic types; using this capability a single "generic type 256 generator" can be written that can represent multiple concrete type instantiations by substitution 257 of the "type parameters" of the generic type for concrete types. Syntactically a generic type 258 generator is represented by putting a forall specifier on a struct or union declaration, as defined 259 in \VRef{forall}. An instantiation of the generic type is written by specifying the type parameters 260 in parentheses after the name of the generic type generator: 261 \begin{lstlisting} 262 forall( type T | sumable( T ) ) struct pair { 295 \CFA provides a capability for generic types; 296 using this capability a single "generic type generator" can be written that can represent multiple concrete type instantiations by substitution of the "type parameters" of the generic type for concrete types. 297 Syntactically a generic type generator is represented by putting a forall specifier on a struct or union declaration, as defined in \VRef{forall}. 298 An instantiation of the generic type is written by specifying the type parameters in parentheses after the name of the generic type generator: 299 \begin{lstlisting} 300 forall( otype T | sumable( T ) ) struct pair { 263 301 T x; 264 302 T y; … … 267 305 \end{lstlisting} 268 306 269 The type parameters in an instantiation of a generic type must satisfy any constraints in the forall 270 specifier on the type generator declaration, e.g., \lstinline$sumable$. The instantiation then has 271 the semantics that would result if the type parameters were substituted into the type generator 272 declaration by macro substitution. 273 274 Polymorphic functions may have generic types as parameters, and those generic types may use type 275 parameters of the polymorphic function as type parameters of the generic type: 276 \begin{lstlisting} 277 forall( type T ) void swap( pair(T) *p ) { 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$. 308 The instantiation then has the semantics that would result if the type parameters were substituted into the type generator declaration by macro substitution. 309 310 Polymorphic functions may have generic types as parameters, and those generic types may use type parameters of the polymorphic function as type parameters of the generic type: 311 \begin{lstlisting} 312 forall( otype T ) void swap( pair(T) *p ) { 278 313 T z = p->x; 279 314 p->x = p->y; … … 285 320 \subsubsection{Constraints} 286 321 287 To avoid unduly constraining implementors, the generic type generator definition must be visible at 288 any point where it is instantiated. Forward declarations of generic type generators are not 289 forbidden, but the definition must be visible to instantiate the generic type. Equivalently, 290 instantiations of generic types are not allowed to be incomplete types. 322 To avoid unduly constraining implementors, the generic type generator definition must be visible at any point where it is instantiated. 323 Forward declarations of generic type generators are not forbidden, but the definition must be visible to instantiate the generic type. Equivalently, instantiations of generic types are not allowed to be incomplete types. 291 324 292 325 \examples 293 326 \begin{lstlisting} 294 forall( type T ) struct A;295 296 forall( type T ) struct B {297 A(T) *a; 327 forall( otype T ) struct A; 328 329 forall( otype T ) struct B { 330 A(T) *a; // legal, but cannot instantiate B(T) 298 331 }; 299 332 300 B(T) x; 301 302 forall( type T ) struct A {333 B(T) x; // illegal, *x.a is of an incomplete generic type 334 335 forall( otype T ) struct A { 303 336 B( T ) *b; 304 337 }; 305 338 306 B( T ) y; // legal, *x.a is now of a complete generic type 307 339 B( T ) y; // legal, *x.a is now of a complete generic type 308 340 309 341 // box.h: 310 forall( type T ) struct box;311 forall( type T ) box( T ) *make_box( T );312 forall( type T ) void use_box( box( T ) *b );342 forall( otype T ) struct box; 343 forall( otype T ) box( T ) *make_box( T ); 344 forall( otype T ) void use_box( box( T ) *b ); 313 345 314 346 // main.c: 315 box( int ) *b = make_box( 42 ); // illegal, def 'n of box not visible316 use_box( b ); 347 box( int ) *b = make_box( 42 ); // illegal, definition of box not visible 348 use_box( b ); // illegal 317 349 \end{lstlisting} 318 350 … … 320 352 \section{Conversions} 321 353 \CFA defines situations where values of one type are automatically converted to another type. 322 These conversions are called \define{implicit conversion}s. The programmer can request 354 These conversions are called \define{implicit conversion}s. 355 The programmer can request 323 356 \define{explicit conversion}s using cast expressions. 324 357 … … 330 363 \subsubsection{Safe arithmetic conversions} 331 364 332 In C, a pattern of conversions known as the \define{usual arithmetic conversion}s is used with most 333 binary arithmetic operators to convert the operands to a common type and determine the type of the 334 operator's result. In \CFA, these conversions play a role in overload resolution, and 335 collectively are called the \define{safe arithmetic conversion}s. 336 337 Let \(int_r\) and \(unsigned_r\) be the signed and unsigned integer types with integer conversion 338 rank\index{integer conversion rank}\index{rank|see{integer conversion rank}} $r$. Let 339 \(unsigned_{mr}\) be the unsigned integer type with maximal rank. 365 In C, a pattern of conversions known as the \define{usual arithmetic conversion}s is used with most binary arithmetic operators to convert the operands to a common type and determine the type of the operator's result. 366 In \CFA, these conversions play a role in overload resolution, and collectively are called the \define{safe arithmetic conversion}s. 367 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. 340 370 341 371 The following conversions are \emph{direct} safe arithmetic conversions. … … 343 373 \item 344 374 The \Index{integer promotion}s. 345 346 \item 347 For every rank $r$ greater than or equal to the rank of \lstinline$int$, conversion from \(int_r\) 348 to \(unsigned_r\). 349 350 \item 351 For every rank $r$ greater than or equal to the rank of \lstinline$int$, where \(int_{r+1}\) exists 352 and can represent all values of \(unsigned_r\), conversion from \(unsigned_r\) to \(int_{r+1}\). 353 375 \item 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}\). 354 379 \item 355 380 Conversion from \(unsigned_{mr}\) to \lstinline$float$. 356 357 381 \item 358 382 Conversion from an enumerated type to its compatible integer type. 359 360 \item 361 Conversion from \lstinline$float$ to \lstinline$double$, and from \lstinline$double$ to 362 \lstinline$long double$. 363 364 \item 365 Conversion from \lstinline$float _Complex$ to \lstinline$double _Complex$, 366 and from \lstinline$double _Complex$ to \lstinline$long double _Complex$. 367 383 \item 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$. 368 387 \begin{sloppypar} 369 388 \item 370 Conversion from \lstinline$float _Imaginary$ to \lstinline$double _Imaginary$, and from 371 \lstinline$double _Imaginary$ to \lstinline$long double$ \lstinline$_Imaginary$, if the 372 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. 373 390 \end{sloppypar} 374 391 \end{itemize} 375 392 376 If type \lstinline$T$ can be converted to type \lstinline$U$ by a safe direct arithmetic conversion 377 and type \lstinline$U$ can be converted to type \lstinline$V$ by a safe arithmetic conversion, then 378 the conversion from \lstinline$T$ to type \lstinline$V$ is an \emph{indirect} safe arithmetic 379 conversion. 380 381 \begin{rationale} 382 Note that {\c11} does not include conversion from \Index{real type}s to \Index{complex type}s in the 383 usual arithmetic conversions, and \CFA does not include them as safe conversions. 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. 394 395 \begin{rationale} 396 Note that {\c11} does not include conversion from \Index{real type}s to \Index{complex type}s in the usual arithmetic conversions, and \CFA does not include them as safe conversions. 384 397 \end{rationale} 385 398 … … 393 406 394 407 If an expression's type is a pointer to a structure or union type that has a member that is an 395 \Index{anonymous structure} or an \Index{anonymous union}, it can be implicitly 396 converted\index{implicit conversion} to a pointer to the anonymous structure's or anonymous union's 397 type. The result of the conversion is a pointer to the member. 408 \Index{anonymous structure} or an \Index{anonymous union}, it can be implicitly converted\index{implicit conversion} to a pointer to the anonymous structure's or anonymous union's type. 409 The result of the conversion is a pointer to the member. 398 410 399 411 \examples … … 402 414 int x, y; 403 415 }; 404 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}@ 405 417 p1->x += p2.x; 406 418 p1->y += p2.y; 407 419 } 408 409 420 struct color_point { 410 421 enum { RED, BLUE, GREEN } color; 411 422 struct point; 412 423 } cp1, cp2; 413 move_to( &cp1, &cp2);424 move_to( &cp1, &cp2 ); 414 425 \end{lstlisting} 415 426 Thanks to implicit conversion, the two arguments that \lstinline$move_by()$ receives are pointers to … … 418 429 419 430 \subsubsection{Specialization} 420 A function or value whose type is polymorphic may be implicitly converted to one whose type is 421 \Index{less polymorphic} by binding values to one or more of its \Index{inferred parameter}. Any 422 value that is legal for the inferred parameter may be used, including other inferred parameters. 423 424 If, after the inferred parameter binding, an \Index{assertion parameter} has no inferred parameters 425 in its type, then an object or function must be visible at the point of the specialization that has 426 the same identifier as the assertion parameter and has a type that is compatible\index{compatible 427 type} with or can be specialized to the type of the assertion parameter. The assertion parameter 428 is bound to that object or function. 429 430 The type of the specialization is the type of the original with the bound inferred parameters and 431 the bound assertion parameters replaced by their bound values. 431 A function or value whose type is polymorphic may be implicitly converted to one whose type is \Index{less polymorphic} by binding values to one or more of its \Index{inferred parameter}. 432 Any value that is legal for the inferred parameter may be used, including other inferred parameters. 433 434 If, after the inferred parameter binding, an \Index{assertion parameter} has no inferred parameters in its type, then an object or function must be visible at the point of the specialization that has the same identifier as the assertion parameter and has a type that is compatible\index{compatible type} with or can be specialized to the type of the assertion parameter. 435 The assertion parameter is bound to that object or function. 436 437 The type of the specialization is the type of the original with the bound inferred parameters and the bound assertion parameters replaced by their bound values. 432 438 433 439 \examples 434 440 The type 435 441 \begin{lstlisting} 436 forall( type T,type U ) void (*)( T, U );442 forall( otype T, otype U ) void (*)( T, U ); 437 443 \end{lstlisting} 438 444 can be specialized to (among other things) 439 445 \begin{lstlisting} 440 forall( type T ) void (*)( T, T ); // U bound to T441 forall( type T ) void (*)( T, real ); // U bound to real442 forall( type U ) void (*)( real, U ); // T bound to real446 forall( otype T ) void (*)( T, T ); // U bound to T 447 forall( otype T ) void (*)( T, real ); // U bound to real 448 forall( otype U ) void (*)( real, U ); // T bound to real 443 449 void f( real, real ); // both bound to real 444 450 \end{lstlisting} … … 446 452 The type 447 453 \begin{lstlisting} 448 forall( type T | T ?+?( T, T )) T (*)( T );454 forall( otype T | T ?+?( T, T ) ) T (*)( T ); 449 455 \end{lstlisting} 450 456 can be specialized to (among other things) 451 457 \begin{lstlisting} 452 int (*)( int ); 458 int (*)( int ); // T bound to int, and T ?+?(T, T ) bound to int ?+?( int, int ) 453 459 \end{lstlisting} 454 460 … … 465 471 from a pointer to any non-\lstinline$void$ type to a pointer to \lstinline$void$; 466 472 \item 467 from a pointer to any type to a pointer to a more qualified version of the type\index{qualified 468 type}; 469 \item 470 from a pointer to a structure or union type to a pointer to the type of a member of the structure or 471 union that is an \Index{anonymous structure} or an \Index{anonymous union}; 472 \item 473 within the scope of an initialized \Index{type declaration}, conversions between a type and its 474 implementation or between a pointer to a type and a pointer to its implementation. 473 from a pointer to any type to a pointer to a more qualified version of the type\index{qualified type}; 474 \item 475 from a pointer to a structure or union type to a pointer to the type of a member of the structure or union that is an \Index{anonymous structure} or an \Index{anonymous union}; 476 \item 477 within the scope of an initialized \Index{type declaration}, conversions between a type and its implementation or between a pointer to a type and a pointer to its implementation. 475 478 \end{itemize} 476 479 477 480 Conversions that are not safe conversions are \define{unsafe conversion}s. 478 481 \begin{rationale} 479 As in C, there is an implicit conversion from \lstinline$void *$ to any pointer type. This is 480 clearly dangerous, and {\CC} does not have this implicit conversion. 481 \CFA\index{deficiencies!void * conversion} keeps it, in the interest of remaining as pure a 482 superset of C as possible, but discourages it by making it unsafe. 482 As in C, there is an implicit conversion from \lstinline$void *$ to any pointer type. 483 This is clearly dangerous, and {\CC} does not have this implicit conversion. 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. 483 485 \end{rationale} 484 486 … … 486 488 \subsection{Conversion cost} 487 489 488 The \define{conversion cost} of a safe\index{safe conversion} 489 conversion\footnote{Unsafe\index{unsafe conversion} conversions do not have defined conversion 490 costs.} is a measure of how desirable or undesirable it is. It is defined as follows. 490 The \define{conversion cost} of a safe\index{safe conversion} conversion\footnote{Unsafe\index{unsafe conversion} conversions do not have defined conversion costs.} is a measure of how desirable or undesirable it is. 491 It is defined as follows. 491 492 \begin{itemize} 492 493 \item … … 497 498 498 499 \item 499 The cost of an indirect safe arithmetic conversion is the smallest number of direct conversions 500 needed to make up the conversion. 500 The cost of an indirect safe arithmetic conversion is the smallest number of direct conversions needed to make up the conversion. 501 501 \end{itemize} 502 502 … … 506 506 \begin{itemize} 507 507 \item 508 The cost of an implicit conversion from \lstinline$int$ to \lstinline$long$ is 1. The cost of an 509 implicit conversion from \lstinline$long$ to \lstinline$double$ is 3, because it is defined in terms 510 of conversions from \lstinline$long$ to \lstinline$unsigned long$, then to \lstinline$float$, and 511 then to \lstinline$double$. 512 513 \item 514 If \lstinline$int$ can represent all the values of \lstinline$unsigned short$, then the cost of an 515 implicit conversion from \lstinline$unsigned short$ to \lstinline$unsigned$ is 2: 516 \lstinline$unsigned short$ to \lstinline$int$ to \lstinline$unsigned$. Otherwise, 517 \lstinline$unsigned short$ is converted directly to \lstinline$unsigned$, and the cost is 1. 518 519 \item 520 If \lstinline$long$ can represent all the values of \lstinline$unsigned$, then the conversion cost 521 of \lstinline$unsigned$ to \lstinline$long$ is 1. Otherwise, the conversion is an unsafe 522 conversion, and its conversion cost is undefined. 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. 518 Otherwise, the conversion is an unsafe conversion, and its conversion cost is undefined. 523 519 \end{itemize} 524 520 … … 529 525 \rhs \lstinline$forall$ 530 526 \rhs \lstinline$lvalue$ 531 \rhs \lstinline$ context$527 \rhs \lstinline$trait$ 532 528 \rhs \lstinline$dtype$ 533 529 \rhs \lstinline$ftype$ … … 538 534 \subsection{Identifiers} 539 535 540 \CFA allows operator \Index{overloading} by associating operators with special function 541 identifiers. Furthermore, the constants ``\lstinline$0$'' and ``\lstinline$1$'' have special status 542 for many of C's data types (and for many programmer-defined data types as well), so \CFA treats them 543 as overloadable identifiers. Programmers can use these identifiers to declare functions and objects 544 that implement operators and constants for their own types. 536 \CFA allows operator \Index{overloading} by associating operators with special function 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. 538 Programmers can use these identifiers to declare functions and objects that implement operators and constants for their own types. 545 539 546 540 … … 554 548 \end{syntax} 555 549 556 \index{constant identifiers}\index{identifiers!for constants} The tokens ``\lstinline$0$''\impl{0} 557 and ``\lstinline$1$''\impl{1} are identifiers. No other tokens defined by the rules for integer 558 constants are considered to be identifiers. 559 \begin{rationale} 560 Why ``\lstinline$0$'' and ``\lstinline$1$''? Those integers have special status in C. All scalar 561 types can be incremented and decremented, which is defined in terms of adding or subtracting 1. The 562 operations ``\lstinline$&&$'', ``\lstinline$||$'', and ``\lstinline$!$'' can be applied to any 563 scalar arguments, and are defined in terms of comparison against 0. A \nonterm{constant-expression} 564 that evaluates to 0 is effectively compatible with every pointer type. 565 566 In C, the integer constants 0 and 1 suffice because the integer promotion rules can convert them to 567 any arithmetic type, and the rules for pointer expressions treat constant expressions evaluating to 568 0 as a special case. However, user-defined arithmetic types often need the equivalent of a 1 or 0 569 for their functions or operators, polymorphic functions often need 0 and 1 constants of a type 570 matching their polymorphic parameters, and user-defined pointer-like types may need a null value. 571 Defining special constants for a user-defined type is more efficient than defining a conversion to 572 the type from \lstinline$_Bool$. 573 574 Why \emph{just} ``\lstinline$0$'' and ``\lstinline$1$''? Why not other integers? No other integers 575 have special status in C. A facility that let programmers declare specific 576 constants---``\lstinline$const Rational 12$'', for instance---would not be much of an improvement. 577 Some facility for defining the creation of values of programmer-defined types from arbitrary integer 578 tokens would be needed. The complexity of such a feature doesn't seem worth the gain. 550 \index{constant identifiers}\index{identifiers!for constants} The tokens ``\lstinline$0$''\impl{0} and ``\lstinline$1$''\impl{1} are identifiers. 551 No other tokens defined by the rules for integer constants are considered to be identifiers. 552 \begin{rationale} 553 Why ``\lstinline$0$'' and ``\lstinline$1$''? Those integers have special status in C. 554 All scalar types can be incremented and decremented, which is defined in terms of adding or subtracting 1. 555 The operations ``\lstinline$&&$'', ``\lstinline$||$'', and ``\lstinline$!$'' can be applied to any scalar arguments, and are defined in terms of comparison against 0. 556 A \nonterm{constant-expression} that evaluates to 0 is effectively compatible with every pointer type. 557 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. 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. 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. 564 Some facility for defining the creation of values of programmer-defined types from arbitrary integer tokens would be needed. 565 The complexity of such a feature doesn't seem worth the gain. 579 566 \end{rationale} 580 567 … … 582 569 \subsubsection{Operator identifiers} 583 570 584 \index{operator identifiers}\index{identifiers!for operators} Table \ref{opids} lists the 585 programmer-definable operator identifiers and the operations they are associated with. Functions 586 that are declared with (or pointed at by function pointers that are declared with) these identifiers 587 can be called by expressions that use the operator tokens and syntax, or the operator identifiers 588 and ``function call'' syntax. The relationships between operators and function calls are discussed 589 in descriptions of the operators. 571 \index{operator identifiers}\index{identifiers!for operators} Table \ref{opids} lists the programmer-definable operator identifiers and the operations they are associated with. 572 Functions that are declared with (or pointed at by function pointers that are declared with) these identifiers can be called by expressions that use the operator tokens and syntax, or the operator identifiers and ``function call'' syntax. 573 The relationships between operators and function calls are discussed in descriptions of the operators. 590 574 591 575 \begin{table}[hbt] … … 644 628 645 629 \begin{rationale} 646 Operator identifiers are made up of the characters of the operator token, with question marks added 647 to mark the positions of the arguments of operators. The question marks serve as mnemonic devices; 648 programmers can not create new operators by arbitrarily mixing question marks and other 649 non-alphabetic characters. Note that prefix and postfix versions of the increment and decrement 650 operators are distinguished by the position of the question mark. 651 \end{rationale} 652 653 \begin{rationale} 654 The use of ``\lstinline$?$'' in identifiers means that some C programs are not \CFA programs. For 655 instance, the sequence of characters ``\lstinline$(i < 0)?--i:i$'' is legal in a C program, but a 656 \CFA compiler detects a syntax error because it treats ``\lstinline$?--$'' as an identifier, not 657 as the two tokens ``\lstinline$?$'' and ``\lstinline$--$''. 630 Operator identifiers are made up of the characters of the operator token, with question marks added to mark the positions of the arguments of operators. 631 The question marks serve as mnemonic devices; 632 programmers can not create new operators by arbitrarily mixing question marks and other non-alphabetic characters. 633 Note that prefix and postfix versions of the increment and decrement operators are distinguished by the position of the question mark. 634 \end{rationale} 635 636 \begin{rationale} 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$--$''. 658 639 \end{rationale} 659 640 … … 663 644 \item 664 645 The logical operators ``\lstinline$&&$'' and ``\lstinline$||$'', and the conditional operator 665 ``\lstinline$?:$''. These operators do not always evaluate their operands, and hence can not be 666 properly defined by functions unless some mechanism like call-by-name is added to the language. 667 Note that the definitions of ``\lstinline$&&$'' and ``\lstinline$||$'' say that they work by 668 checking that their arguments are unequal to 0, so defining ``\lstinline$!=$'' and ``\lstinline$0$'' 669 for user-defined types is enough to allow them to be used in logical expressions. 670 671 \item 672 The comma operator\index{comma expression}. It is a control-flow operator like those above. 646 ``\lstinline$?:$''. 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. 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. 649 650 \item 651 The comma operator\index{comma expression}. 652 It is a control-flow operator like those above. 673 653 Changing its meaning seems pointless and confusing. 674 654 675 655 \item 676 The ``address of'' operator. It would seem useful to define a unary ``\lstinline$&$'' operator that 677 returns values of some programmer-defined pointer-like type. The problem lies with the type of the 678 operator. Consider the expression ``\lstinline$p = &x$'', where \lstinline$x$ is of type 679 \lstinline$T$ and \lstinline$p$ has the programmer-defined type \lstinline$T_ptr$. The expression 680 might be treated as a call to the unary function ``\lstinline$&?$''. Now what is the type of the 681 function's parameter? It can not be \lstinline$T$, because then \lstinline$x$ would be passed by 682 value, and there is no way to create a useful pointer-like result from a value. Hence the parameter 683 must have type \lstinline$T *$. But then the expression must be rewritten as ``\lstinline$p = &?( &x )$'' 656 The ``address of'' operator. 657 It would seem useful to define a unary ``\lstinline$&$'' operator that returns values of some programmer-defined pointer-like type. 658 The problem lies with the type of the operator. 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 )$'' 684 665 ---which doesn't seem like progress! 685 666 686 The rule for address-of expressions would have to be something like ``keep applying address-of 687 functions until you get one that takes a pointer argument, then use the built-in operator and 688 stop''. It seems simpler to define a conversion function from \lstinline$T *$ to \lstinline$T_ptr$. 689 690 \item 691 The \lstinline$sizeof$ operator. It is already defined for every object type, and intimately tied 692 into the language's storage allocation model. Redefining it seems pointless. 693 694 \item 695 The ``member of'' operators ``\lstinline$.$'' and ``\lstinline$->$''. These are not really infix 696 operators, since their right ``operand'' is not a value or object. 697 698 \item 699 Cast operators\index{cast expression}. Anything that can be done with an explicit cast can be done 700 with a function call. The difference in syntax is small. 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''. 668 It seems simpler to define a conversion function from \lstinline$T *$ to \lstinline$T_ptr$. 669 670 \item 671 The \lstinline$sizeof$ operator. 672 It is already defined for every object type, and intimately tied into the language's storage allocation model. 673 Redefining it seems pointless. 674 675 \item 676 The ``member of'' operators ``\lstinline$.$'' and ``\lstinline$->$''. 677 These are not really infix operators, since their right ``operand'' is not a value or object. 678 679 \item 680 Cast operators\index{cast expression}. 681 Anything that can be done with an explicit cast can be done with a function call. 682 The difference in syntax is small. 701 683 \end{itemize} 702 684 \end{rationale} … … 705 687 \section{Expressions} 706 688 707 \CFA allows operators and identifiers to be overloaded. Hence, each expression can have a number 708 of \define{interpretation}s, each of which has a different type. The interpretations that are 709 potentially executable are called \define{valid interpretation}s. The set of interpretations 710 depends on the kind of expression and on the interpretations of the subexpressions that it contains. 711 The rules for determining the valid interpretations of an expression are discussed below for each 712 kind of expression. Eventually the context of the outermost expression chooses one interpretation 713 of that expression. 714 715 An \define{ambiguous interpretation} is an interpretation which does not specify the exact object or 716 function denoted by every identifier in the expression. An expression can have some interpretations 717 that are ambiguous and others that are unambiguous. An expression that is chosen to be executed 718 shall not be ambiguous. 719 720 The \define{best valid interpretations} are the valid interpretations that use the fewest 721 unsafe\index{unsafe conversion} conversions. Of these, the best are those where the functions and 722 objects involved are the least polymorphic\index{less polymorphic}. Of these, the best have the 723 lowest total \Index{conversion cost}, including all implicit conversions in the argument 724 expressions. Of these, the best have the highest total conversion cost for the implicit conversions 725 (if any) applied to the argument expressions. If there is no single best valid interpretation, or if 726 the best valid interpretation is ambiguous, then the resulting interpretation is 727 ambiguous\index{ambiguous interpretation}. 728 729 \begin{rationale} 730 \CFA's rules for selecting the best interpretation are designed to allow overload resolution to 731 mimic C's operator semantics. In C, the ``usual arithmetic conversions'' are applied to the 732 operands of binary operators if necessary to convert the operands to types with a common real type. 733 In \CFA, those conversions are ``safe''. The ``fewest unsafe conversions'' rule ensures that the 734 usual conversions are done, if possible. The ``lowest total expression cost'' rule chooses the 735 proper common type. The odd-looking ``highest argument conversion cost'' rule ensures that, when 736 unary expressions must be converted, conversions of function results are preferred to conversion of 737 function arguments: \lstinline$(double)-i$ will be preferred to \lstinline$-(double)i$. 738 739 The ``least polymorphic'' rule reduces the number of polymorphic function calls, since such 740 functions are presumably more expensive than monomorphic functions and since the more specific 741 function is presumably more appropriate. It also gives preference to monomorphic values (such as the 689 \CFA allows operators and identifiers to be overloaded. 690 Hence, each expression can have a number of \define{interpretation}s, each of which has a different type. 691 The interpretations that are potentially executable are called \define{valid interpretation}s. 692 The set of interpretations depends on the kind of expression and on the interpretations of the subexpressions that it contains. 693 The rules for determining the valid interpretations of an expression are discussed below for each kind of expression. 694 Eventually the context of the outermost expression chooses one interpretation of that expression. 695 696 An \define{ambiguous interpretation} is an interpretation which does not specify the exact object or function denoted by every identifier in the expression. 697 An expression can have some interpretations that are ambiguous and others that are unambiguous. 698 An expression that is chosen to be executed shall not be ambiguous. 699 700 The \define{best valid interpretations} are the valid interpretations that use the fewest unsafe\index{unsafe conversion} conversions. 701 Of these, the best are those where the functions and objects involved are the least polymorphic\index{less polymorphic}. 702 Of these, the best have the lowest total \Index{conversion cost}, including all implicit conversions in the argument expressions. 703 Of these, the best have the highest total conversion cost for the implicit conversions 704 (if any) applied to the argument expressions. 705 If there is no single best valid interpretation, or if the best valid interpretation is ambiguous, then the resulting interpretation is ambiguous\index{ambiguous interpretation}. 706 707 \begin{rationale} 708 \CFA's rules for selecting the best interpretation are designed to allow overload resolution to mimic C's operator semantics. 709 In C, the ``usual arithmetic conversions'' are applied to the operands of binary operators if necessary to convert the operands to types with a common real type. 710 In \CFA, those conversions are ``safe''. 711 The ``fewest unsafe conversions'' rule ensures that the usual conversions are done, if possible. 712 The ``lowest total expression cost'' rule chooses the proper common type. 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$. 714 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. 716 It also gives preference to monomorphic values (such as the 742 717 \lstinline$int$ \lstinline$0$) over polymorphic values (such as the \Index{null pointer} 743 \lstinline$0$\use{0}). However, interpretations that call polymorphic functions are preferred to 744 interpretations that perform unsafe conversions, because those conversions potentially lose accuracy 745 or violate strong typing. 718 \lstinline$0$\use{0}). 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. 746 720 747 721 There are two notable differences between \CFA's overload resolution rules and the rules for 748 {\CC} defined in \cite{c++}. First, the result type of a function plays a role. In {\CC}, a 749 function call must be completely resolved based on the arguments to the call in most circumstances. 750 In \CFA, a function call may have several interpretations, each with a different result type, and 751 the interpretations of the containing context choose among them. Second, safe conversions are used 752 to choose among interpretations of all sorts of functions; in {\CC}, the ``usual arithmetic 753 conversions'' are a separate set of rules that apply only to the built-in operators. 754 \end{rationale} 755 756 Expressions involving certain operators\index{operator identifiers} are considered to be equivalent 757 to function calls. A transformation from ``operator'' syntax to ``function call'' syntax is defined 758 by \define{rewrite rules}. Each operator has a set of predefined functions that overload its 759 identifier. Overload resolution determines which member of the set is executed in a given 760 expression. The functions have \Index{internal linkage} and are implicitly declared with \Index{file 761 scope}. The predefined functions and rewrite rules are discussed below for each of these 762 operators. 763 \begin{rationale} 764 Predefined functions and constants have internal linkage because that simplifies optimization in 765 traditional compile-and-link environments. For instance, ``\lstinline$an_int + an_int$'' is 766 equivalent to ``\lstinline$?+?(an_int, an_int)$''. If integer addition has not been redefined in 767 the current scope, a compiler can generate code to perform the addition directly. If predefined 768 functions had external linkage, this optimization would be difficult. 769 \end{rationale} 770 771 \begin{rationale} 772 Since each subsection describes the interpretations of an expression in terms of the interpretations 773 of its subexpressions, this chapter can be taken as describing an overload resolution algorithm that 774 uses one bottom-up pass over an expression tree. Such an algorithm was first described (for Ada) by 775 Baker~\cite{Bak:overload}. It is extended here to handle polymorphic functions and arithmetic 776 conversions. The overload resolution rules and the predefined functions have been chosen so that, in 777 programs that do not introduce overloaded declarations, expressions will have the same meaning in C 778 and in \CFA. 779 \end{rationale} 780 781 \begin{rationale} 782 Expression syntax is quoted from the {\c11} standard. The syntax itself defines the precedence and 783 associativity of operators. The sections are arranged in decreasing order of precedence, with all 784 operators in a section having the same precedence. 722 {\CC} defined in \cite{c++}. 723 First, the result type of a function plays a role. 724 In {\CC}, a function call must be completely resolved based on the arguments to the call in most circumstances. 725 In \CFA, a function call may have several interpretations, each with a different result type, and the interpretations of the containing context choose among them. 726 Second, safe conversions are used to choose among interpretations of all sorts of functions; 727 in {\CC}, the ``usual arithmetic conversions'' are a separate set of rules that apply only to the built-in operators. 728 \end{rationale} 729 730 Expressions involving certain operators\index{operator identifiers} are considered to be equivalent to function calls. 731 A transformation from ``operator'' syntax to ``function call'' syntax is defined by \define{rewrite rules}. 732 Each operator has a set of predefined functions that overload its identifier. 733 Overload resolution determines which member of the set is executed in a given expression. 734 The functions have \Index{internal linkage} and are implicitly declared with \Index{file scope}. 735 The predefined functions and rewrite rules are discussed below for each of these operators. 736 \begin{rationale} 737 Predefined functions and constants have internal linkage because that simplifies optimization in traditional compile-and-link environments. 738 For instance, ``\lstinline$an_int + an_int$'' is equivalent to ``\lstinline$?+?(an_int, an_int)$''. 739 If integer addition has not been redefined in the current scope, a compiler can generate code to perform the addition directly. 740 If predefined functions had external linkage, this optimization would be difficult. 741 \end{rationale} 742 743 \begin{rationale} 744 Since each subsection describes the interpretations of an expression in terms of the interpretations of its subexpressions, this chapter can be taken as describing an overload resolution algorithm that uses one bottom-up pass over an expression tree. 745 Such an algorithm was first described (for Ada) by Baker~\cite{Bak:overload}. 746 It is extended here to handle polymorphic functions and arithmetic conversions. 747 The overload resolution rules and the predefined functions have been chosen so that, in programs that do not introduce overloaded declarations, expressions will have the same meaning in C and in \CFA. 748 \end{rationale} 749 750 \begin{rationale} 751 Expression syntax is quoted from the {\c11} standard. 752 The syntax itself defines the precedence and associativity of operators. 753 The sections are arranged in decreasing order of precedence, with all operators in a section having the same precedence. 785 754 \end{rationale} 786 755 … … 801 770 const int 1;@\use{1}@ 802 771 const int 0;@\use{0}@ 803 forall( dtype DT ) DT * const 0;804 forall( ftype FT ) FT * const 0;772 forall( dtype DT ) DT * const 0; 773 forall( ftype FT ) FT * const 0; 805 774 \end{lstlisting} 806 775 807 776 \semantics 808 The \Index{valid interpretation} of an \nonterm{identifier} are given by the visible\index{visible} 809 declarations of the identifier. 810 811 A \nonterm{constant} or \nonterm{string-literal} has one valid interpretation, which has the type 812 and value defined by {\c11}. The predefined integer identifiers ``\lstinline$1$'' and 813 ``\lstinline$0$'' have the integer values 1 and 0, respectively. The other two predefined 814 ``\lstinline$0$'' identifiers are bound to polymorphic pointer values that, when 815 specialized\index{specialization} with a data type or function type respectively, produce a null 816 pointer of that type. 777 The \Index{valid interpretation} of an \nonterm{identifier} are given by the visible\index{visible} declarations of the identifier. 778 779 A \nonterm{constant} or \nonterm{string-literal} has one valid interpretation, which has the type and value defined by {\c11}. 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. 817 782 818 783 A parenthesised expression has the same interpretations as the contained \nonterm{expression}. 819 784 820 785 \examples 821 The expression \lstinline$(void *)0$\use{0} specializes the (polymorphic) null pointer to a null 822 pointer to \lstinline$void$. \lstinline$(const void *)0$ does the same, and also uses a safe 823 conversion from \lstinline$void *$ to \lstinline$const void *$. In each case, the null pointer 824 conversion is better\index{best valid interpretations} than the unsafe conversion of the integer 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 *$. 787 In each case, the null pointer conversion is better\index{best valid interpretations} than the unsafe conversion of the integer 825 788 \lstinline$0$ to a pointer. 826 789 … … 828 791 Note that the predefined identifiers have addresses. 829 792 830 \CFA does not have C's concept of ``null pointer constants'', which are not typed values but 831 special strings of tokens. The C token ``\lstinline$0$'' is an expression of type \lstinline$int$ 832 with the value ``zero'', and it \emph{also} is a null pointer constant. Similarly, 833 ``\lstinline$(void *)0$ is an expression of type \lstinline$(void *)$ whose value is a null pointer, 834 and it also is a null pointer constant. However, in C, ``\lstinline$(void *)(void *)0$'' is 835 \emph{not} a null pointer constant, even though it is null-valued, a pointer, and constant! The 836 semantics of C expressions contain many special cases to deal with subexpressions that are null 837 pointer constants. 838 839 \CFA handles these cases through overload resolution. The declaration 840 \begin{lstlisting} 841 forall( dtype DT ) DT *const 0; 842 \end{lstlisting} 843 means that \lstinline$0$ is a polymorphic object, and contains a value that can have \emph{any} 844 pointer-to-object type or pointer-to-incomplete type. The only such value is the null pointer. 845 Therefore the type \emph{alone} is enough to identify a null pointer. Where C defines an operator 846 with a special case for the null pointer constant, \CFA defines predefined functions with a 847 polymorphic object parameter. 793 \CFA does not have C's concept of ``null pointer constants'', which are not typed values but special strings of tokens. 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. 795 Similarly, 796 ``\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 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. 799 800 \CFA handles these cases through overload resolution. 801 The declaration 802 \begin{lstlisting} 803 forall( dtype DT ) DT * const 0; 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. 805 The only such value is the null pointer. 806 Therefore the type \emph{alone} is enough to identify a null pointer. 807 Where C defines an operator with a special case for the null pointer constant, \CFA defines predefined functions with a polymorphic object parameter. 848 808 \end{rationale} 849 809 … … 851 811 \subsubsection{Generic selection} 852 812 853 \constraints The best interpretation of the controlling expression shall be 854 unambiguous\index{ambiguous interpretation}, and shall have type compatible with at most one of the 855 types named in its generic association list. If a generic selection has no \lstinline$default$ 856 generic association, the best interpretation of its controlling expression shall have type 857 compatible with exactly one of the types named in its generic association list. 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. 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. 858 815 859 816 \semantics … … 883 840 \rewriterules 884 841 \begin{lstlisting} 885 a[b] @\rewrite@ ?[?]( b, a ) // if a has integer type */@\use{?[?]}@842 a[b] @\rewrite@ ?[?]( b, a ) // if a has integer type@\use{?[?]}@ 886 843 a[b] @\rewrite@ ?[?]( a, b ) // otherwise 887 a( ${\em arguments }$ ) @\rewrite@ ?()( a, ${\em arguments} )$@\use{?()}@844 a( @\emph{arguments}@ ) @\rewrite@ ?()( a, @\emph{arguments}@ )@\use{?()}@ 888 845 a++ @\rewrite@ ?++(&( a ))@\use{?++}@ 889 846 a-- @\rewrite@ ?--(&( a ))@\use{?--}@ … … 895 852 \predefined 896 853 \begin{lstlisting} 897 forall( type T ) lvalue T ?[?]( T *, ptrdiff_t );@\use{ptrdiff_t}@898 forall( type T ) lvalue _Atomic T ?[?]( _Atomic T *, ptrdiff_t );899 forall( type T ) lvalue const T ?[?]( const T *, ptrdiff_t );900 forall( type T ) lvalue restrict T ?[?]( restrict T *, ptrdiff_t );901 forall( type T ) lvalue volatile T ?[?]( volatile T *, ptrdiff_t );902 forall( type T ) lvalue _Atomic const T ?[?]( _Atomic const T *, ptrdiff_t );903 forall( type T ) lvalue _Atomic restrict T ?[?]( _Atomic restrict T *, ptrdiff_t );904 forall( type T ) lvalue _Atomic volatile T ?[?]( _Atomic volatile T *, ptrdiff_t );905 forall( type T ) lvalue const restrict T ?[?]( const restrict T *, ptrdiff_t );906 forall( type T ) lvalue const volatile T ?[?]( const volatile T *, ptrdiff_t );907 forall( type T ) lvalue restrict volatile T ?[?]( restrict volatile T *, ptrdiff_t );908 forall( type T ) lvalue _Atomic const restrict T ?[?]( _Atomic const restrict T *, ptrdiff_t );909 forall( type T ) lvalue _Atomic const volatile T ?[?]( _Atomic const volatile T *, ptrdiff_t );910 forall( type T ) lvalue _Atomic restrict volatile T ?[?]( _Atomic restrict volatile T *, ptrdiff_t );911 forall( type T ) lvalue const restrict volatile T ?[?]( const restrict volatile T *, ptrdiff_t );912 forall( type T ) lvalue _Atomic const restrict volatile T ?[?]( _Atomic const restrict volatile T *, ptrdiff_t );854 forall( otype T ) lvalue T ?[?]( T *, ptrdiff_t );@\use{ptrdiff_t}@ 855 forall( otype T ) lvalue _Atomic T ?[?]( _Atomic T *, ptrdiff_t ); 856 forall( otype T ) lvalue const T ?[?]( const T *, ptrdiff_t ); 857 forall( otype T ) lvalue restrict T ?[?]( restrict T *, ptrdiff_t ); 858 forall( otype T ) lvalue volatile T ?[?]( volatile T *, ptrdiff_t ); 859 forall( otype T ) lvalue _Atomic const T ?[?]( _Atomic const T *, ptrdiff_t ); 860 forall( otype T ) lvalue _Atomic restrict T ?[?]( _Atomic restrict T *, ptrdiff_t ); 861 forall( otype T ) lvalue _Atomic volatile T ?[?]( _Atomic volatile T *, ptrdiff_t ); 862 forall( otype T ) lvalue const restrict T ?[?]( const restrict T *, ptrdiff_t ); 863 forall( otype T ) lvalue const volatile T ?[?]( const volatile T *, ptrdiff_t ); 864 forall( otype T ) lvalue restrict volatile T ?[?]( restrict volatile T *, ptrdiff_t ); 865 forall( otype T ) lvalue _Atomic const restrict T ?[?]( _Atomic const restrict T *, ptrdiff_t ); 866 forall( otype T ) lvalue _Atomic const volatile T ?[?]( _Atomic const volatile T *, ptrdiff_t ); 867 forall( otype T ) lvalue _Atomic restrict volatile T ?[?]( _Atomic restrict volatile T *, ptrdiff_t ); 868 forall( otype T ) lvalue const restrict volatile T ?[?]( const restrict volatile T *, ptrdiff_t ); 869 forall( otype T ) lvalue _Atomic const restrict volatile T ?[?]( _Atomic const restrict volatile T *, ptrdiff_t ); 913 870 \end{lstlisting} 914 871 \semantics 915 The interpretations of subscript expressions are the interpretations of the corresponding function 916 call expressions. 872 The interpretations of subscript expressions are the interpretations of the corresponding function call expressions. 917 873 \begin{rationale} 918 874 C defines subscripting as pointer arithmetic in a way that makes \lstinline$a[i]$ and 919 \lstinline$i[a]$ equivalent. \CFA provides the equivalence through a rewrite rule to reduce the 920 number of overloadings of \lstinline$?[?]$. 921 922 Subscript expressions are rewritten as function calls that pass the first parameter by value. This 923 is somewhat unfortunate, since array-like types tend to be large. The alternative is to use the 924 rewrite rule ``\lstinline$a[b]$ \rewrite \lstinline$?[?](&(a), b)$''. However, C semantics forbid 925 this approach: the \lstinline$a$ in ``\lstinline$a[b]$'' can be an arbitrary pointer value, which 926 does not have an address. 875 \lstinline$i[a]$ equivalent. \CFA provides the equivalence through a rewrite rule to reduce the number of overloadings of \lstinline$?[?]$. 876 877 Subscript expressions are rewritten as function calls that pass the first parameter by value. 878 This is somewhat unfortunate, since array-like types tend to be large. 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. 927 881 928 882 The repetitive form of the predefined identifiers shows up a deficiency\index{deficiencies!pointers 929 to qualified types} of \CFA's type system. Type qualifiers are not included in type values, so 930 polymorphic functions that take pointers to arbitrary types often come in one flavor for each 931 possible qualification of the pointed-at type. 883 to qualified types} of \CFA's type system. 884 Type qualifiers are not included in type values, so polymorphic functions that take pointers to arbitrary types often come in one flavor for each possible qualification of the pointed-at type. 932 885 \end{rationale} 933 886 … … 936 889 937 890 \semantics 938 A \define{function designator} is an interpretation of an expression that has function type. The 939 \nonterm{postfix-expression} in a function call may have some interpretations that are function 940 designators and some that are not. 941 942 For those interpretations of the \nonterm{postfix-expression} that are not function designators, the 943 expression is rewritten and becomes a call of a function named ``\lstinline$?()$''. The valid 944 interpretations of the rewritten expression are determined in the manner described below. 945 946 Each combination of function designators and argument interpretations is considered. For those 947 interpretations of the \nonterm{postfix-expression} that are \Index{monomorphic function} 948 designators, the combination has a \Index{valid interpretation} if the function designator accepts 949 the number of arguments given, and each argument interpretation matches the corresponding explicit 950 parameter: 891 A \define{function designator} is an interpretation of an expression that has function type. 892 The 893 \nonterm{postfix-expression} in a function call may have some interpretations that are function designators and some that are not. 894 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$?()$''. 896 The valid interpretations of the rewritten expression are determined in the manner described below. 897 898 Each combination of function designators and argument interpretations is considered. 899 For those interpretations of the \nonterm{postfix-expression} that are \Index{monomorphic function} designators, the combination has a \Index{valid interpretation} if the function designator accepts the number of arguments given, and each argument interpretation matches the corresponding explicit parameter: 951 900 \begin{itemize} 952 \item 953 if the argument corresponds to a parameter in the function designator's prototype, the argument 954 interpretation must have the same type as the corresponding parameter, or be implicitly convertible 955 to the parameter's type 956 \item 957 if the function designator's type does not include a prototype or if the argument corresponds to 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 902 \item if the function designator's type does not include a prototype or if the argument corresponds to 958 903 ``\lstinline$...$'' in a prototype, a \Index{default argument promotion} is applied to it. 959 904 \end{itemize} … … 961 906 962 907 For those combinations where the interpretation of the \nonterm{postfix-expression} is a 963 \Index{polymorphic function} designator and the function designator accepts the number of arguments 964 given, there shall be at least one set of \define{implicit argument}s for the implicit parameters 965 such that 908 \Index{polymorphic function} designator and the function designator accepts the number of arguments given, there shall be at least one set of \define{implicit argument}s for the implicit parameters such that 966 909 \begin{itemize} 967 910 \item 968 If the declaration of the implicit parameter uses \Index{type-class} \lstinline$type$\use{type}, the 969 implicit argument must be an object type; if it uses \lstinline$dtype$, the implicit argument must 970 be an object type or an incomplete type; and if it uses \lstinline$ftype$, the implicit argument 971 must be a function type. 972 973 \item 974 if an explicit parameter's type uses any implicit parameters, then the corresponding explicit 975 argument must have a type that is (or can be safely converted\index{safe conversion} to) the type 976 produced by substituting the implicit arguments for the implicit parameters in the explicit 977 parameter type. 978 979 \item 980 the remaining explicit arguments must match the remaining explicit parameters, as described for 981 monomorphic function designators. 982 983 \item 984 for each \Index{assertion parameter} in the function designator's type, there must be an object or 985 function with the same identifier that is visible at the call site and whose type is compatible with 986 or can be specialized to the type of the assertion declaration. 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. 914 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. 916 917 \item the remaining explicit arguments must match the remaining explicit parameters, as described for monomorphic function designators. 918 919 \item for each \Index{assertion parameter} in the function designator's type, there must be an object or function with the same identifier that is visible at the call site and whose type is compatible with or can be specialized to the type of the assertion declaration. 987 920 \end{itemize} 988 There is a valid interpretation for each such set of implicit parameters. The type of each valid 989 interpretation is the return type of the function designator with implicit parameter values 990 substituted for the implicit arguments. 991 992 A valid interpretation is ambiguous\index{ambiguous interpretation} if the function designator or 993 any of the argument interpretations is ambiguous. 994 995 Every valid interpretation whose return type is not compatible with any other valid interpretation's 996 return type is an interpretation of the function call expression. 997 998 Every set of valid interpretations that have mutually compatible\index{compatible type} result types 999 also produces an interpretation of the function call expression. The type of the interpretation is 1000 the \Index{composite type} of the types of the valid interpretations, and the value of the 1001 interpretation is that of the \Index{best valid interpretation}. 1002 \begin{rationale} 1003 One desirable property of a polymorphic programming language is \define{generalizability}: the 1004 ability to replace an abstraction with a more general but equivalent abstraction without requiring 1005 changes in any of the uses of the original\cite{Cormack90}. For instance, it should be possible to 1006 replace a function ``\lstinline$int f( int );$'' with ``\lstinline$forall( type T ) T f( T );$'' 1007 without affecting any calls of \lstinline$f$. 921 There is a valid interpretation for each such set of implicit parameters. 922 The type of each valid interpretation is the return type of the function designator with implicit parameter values substituted for the implicit arguments. 923 924 A valid interpretation is ambiguous\index{ambiguous interpretation} if the function designator or any of the argument interpretations is ambiguous. 925 926 Every valid interpretation whose return type is not compatible with any other valid interpretation's return type is an interpretation of the function call expression. 927 928 Every set of valid interpretations that have mutually compatible\index{compatible type} result types also produces an interpretation of the function call expression. 929 The type of the interpretation is the \Index{composite type} of the types of the valid interpretations, and the value of the interpretation is that of the \Index{best valid interpretation}. 930 \begin{rationale} 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}. 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$. 1008 933 1009 934 \CFA\index{deficiencies!generalizability} does not fully possess this property, because … … 1015 940 float f; 1016 941 double d; 1017 f = g( f, f ); // (1) 1018 f = g( i, f ); // (2) (safe conversion to float) 1019 f = g( d, f ); // (3) (unsafe conversion to float) 1020 \end{lstlisting} 1021 If \lstinline$g$ was replaced by ``\lstinline$forall( type T ) T g( T, T );$'', the first and second 1022 calls would be unaffected, but the third would change: \lstinline$f$ would be converted to 942 f = g( f, f ); // (1) 943 f = g( i, f ); // (2) (safe conversion to float) 944 f = g( d, f ); // (3) (unsafe conversion to float) 945 \end{lstlisting} 946 If \lstinline$g$ was replaced by ``\lstinline$forall( otype T ) T g( T, T );$'', the first and second calls would be unaffected, but the third would change: \lstinline$f$ would be converted to 1023 947 \lstinline$double$, and the result would be a \lstinline$double$. 1024 948 1025 Another example is the function ``\lstinline$void h( int *);$''. This function can be passed a1026 \lstinline$void *$ argument, but the generalization ``\lstinline$forall( type T ) void h( T *);$'' 1027 can not. In this case, \lstinline$void$ is not a valid value for \lstinline$T$ because it is not an 1028 object type. If unsafe conversions were allowed, \lstinline$T$ could be inferred to be \emph{any} 1029 object type, which is undesirable.949 Another example is the function ``\lstinline$void h( int *);$''. 950 This function can be passed a 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. 1030 954 \end{rationale} 1031 955 … … 1033 957 A function called ``\lstinline$?()$'' might be part of a numerical differentiation package. 1034 958 \begin{lstlisting} 1035 extern type Derivative;959 extern otype Derivative; 1036 960 extern double ?()( Derivative, double ); 1037 961 extern Derivative derivative_of( double (*f)( double ) ); … … 1045 969 For that interpretation, the function call is treated as ``\lstinline$?()( sin_dx, 12.9 )$''. 1046 970 \begin{lstlisting} 1047 int f( long ); // (1) 1048 int f( int, int ); // (2) 971 int f( long ); // (1) 972 int f( int, int ); // (2) 1049 973 int f( int *); // (3) 1050 1051 974 int i = f( 5 ); // calls (1) 1052 975 \end{lstlisting} 1053 Function (1) provides a valid interpretation of ``\lstinline$f( 5 )$'', using an implicit 1054 \lstinline$int$ to \lstinline$long$ conversion. The other functions do not, since the second 1055 requires two arguments, and since there is no implicit conversion from \lstinline$int$ to 1056 \lstinline$int *$ that could be used with the third function. 1057 1058 \begin{lstlisting} 1059 forall( type T ) T h( T ); 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. 978 979 \begin{lstlisting} 980 forall( otype T ) T h( T ); 1060 981 double d = h( 1.5 ); 1061 982 \end{lstlisting} … … 1064 985 1065 986 \begin{lstlisting} 1066 forall( type T, type U ) void g( T, U ); // (4)1067 forall( type T ) void g( T, T ); // (5)1068 forall( type T ) void g( T, long ); // (6)1069 void g( long, long ); // (7) 987 forall( otype T, otype U ) void g( T, U ); // (4) 988 forall( otype T ) void g( T, T ); // (5) 989 forall( otype T ) void g( T, long ); // (6) 990 void g( long, long ); // (7) 1070 991 double d; 1071 992 int i; 1072 993 int *p; 1073 1074 g( d, d ); // calls (5) 1075 g( d, i ); // calls (6) 1076 g( i, i ); // calls (7) 994 g( d, d ); // calls (5) 995 g( d, i ); // calls (6) 996 g( i, i ); // calls (7) 1077 997 g( i, p ); // calls (4) 1078 998 \end{lstlisting} 1079 The first call has valid interpretations for all four versions of \lstinline$g$. (6) and (7) are 1080 discarded because they involve unsafe \lstinline$double$-to-\lstinline$long$ conversions. (5) is 1081 chosen because it is less polymorphic than (4). 1082 1083 For the second call, (7) is again discarded. Of the remaining interpretations for (4), (5), and (6) 1084 (with \lstinline$i$ converted to \lstinline$long$), (6) is chosen because it is the least 1085 polymorphic. 1086 1087 The third call has valid interpretations for all of the functions; (7) is chosen since it is not 1088 polymorphic at all. 1089 1090 The fourth call has no interpretation for (5), because its arguments must have compatible type. (4) 1091 is chosen because it does not involve unsafe conversions. 1092 \begin{lstlisting} 1093 forall( type T ) T min( T, T ); 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). 1000 1001 For the second call, (7) is again discarded. 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. 1003 1004 The third call has valid interpretations for all of the functions; 1005 (7) is chosen since it is not polymorphic at all. 1006 1007 The fourth call has no interpretation for (5), because its arguments must have compatible type. (4) is chosen because it does not involve unsafe conversions. 1008 \begin{lstlisting} 1009 forall( otype T ) T min( T, T ); 1094 1010 double max( double, double ); 1095 context min_max( T ) {@\impl{min_max}@1011 trait min_max( T ) {@\impl{min_max}@ 1096 1012 T min( T, T ); 1097 1013 T max( T, T ); 1098 1014 } 1099 forall( type U | min_max( U ) ) void shuffle( U, U ); 1100 shuffle(9, 10); 1101 \end{lstlisting} 1102 The only possibility for \lstinline$U$ is \lstinline$double$, because that is the type used in the 1103 only visible \lstinline$max$ function. 9 and 10 must be converted to \lstinline$double$, and 1015 forall( otype U | min_max( U ) ) void shuffle( U, U ); 1016 shuffle( 9, 10 ); 1017 \end{lstlisting} 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 1104 1019 \lstinline$min$ must be specialized with \lstinline$T$ bound to \lstinline$double$. 1105 1020 \begin{lstlisting} 1106 extern void q( int ); // (8) 1107 extern void q( void * ); // (9) 1021 extern void q( int ); // (8) 1022 extern void q( void * ); // (9) 1108 1023 extern void r(); 1109 1024 q( 0 ); 1110 1025 r( 0 ); 1111 1026 \end{lstlisting} 1112 The \lstinline$int 0$ could be passed to (8), or the \lstinline$(void *)$ \Index{specialization} of 1113 the null pointer\index{null pointer} \lstinline$0$\use{0} could be passed to (9). The former is 1114 chosen because the \lstinline$int$ \lstinline$0$ is \Index{less polymorphic}. For 1115 the same reason, \lstinline$int$ \lstinline$0$ is passed to \lstinline$r()$, even though it has 1116 \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. 1117 1030 1118 1031 1119 1032 \subsubsection{Structure and union members} 1120 1033 1121 \semantics In the member selection expression ``\lstinline$s$.\lstinline$m$'', there shall be at 1122 least one interpretation of \lstinline$s$ whose type is a structure type or union type containing a 1123 member named \lstinline$m$. If two or more interpretations of \lstinline$s$ have members named 1124 \lstinline$m$ with mutually compatible types, then the expression has an \Index{ambiguous 1125 interpretation} whose type is the composite type of the types of the members. If an interpretation 1126 of \lstinline$s$ has a member \lstinline$m$ whose type is not compatible with any other 1127 \lstinline$s$'s \lstinline$m$, then the expression has an interpretation with the member's type. The 1128 expression has no other interpretations. 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. 1039 The expression has no other interpretations. 1129 1040 1130 1041 The expression ``\lstinline$p->m$'' has the same interpretations as the expression … … 1136 1047 \predefined 1137 1048 \begin{lstlisting} 1138 _Bool ?++( volatile _Bool * ), 1139 ?++( _Atomic volatile _Bool * ); 1140 char ?++( volatile char * ), 1141 ?++( _Atomic volatile char * ); 1142 signed char ?++( volatile signed char * ), 1143 ?++( _Atomic volatile signed char * ); 1144 unsigned char ?++( volatile signed char * ), 1145 ?++( _Atomic volatile signed char * ); 1146 short int ?++( volatile short int * ), 1147 ?++( _Atomic volatile short int * ); 1148 unsigned short int ?++( volatile unsigned short int * ), 1149 ?++( _Atomic volatile unsigned short int * ); 1150 int ?++( volatile int * ), 1151 ?++( _Atomic volatile int * ); 1152 unsigned int ?++( volatile unsigned int * ), 1153 ?++( _Atomic volatile unsigned int * ); 1154 long int ?++( volatile long int * ), 1155 ?++( _Atomic volatile long int * ); 1156 long unsigned int ?++( volatile long unsigned int * ), 1157 ?++( _Atomic volatile long unsigned int * ); 1158 long long int ?++( volatile long long int * ), 1159 ?++( _Atomic volatile long long int * ); 1160 long long unsigned ?++( volatile long long unsigned int * ), 1161 ?++( _Atomic volatile long long unsigned int * ); 1162 float ?++( volatile float * ), 1163 ?++( _Atomic volatile float * ); 1164 double ?++( volatile double * ), 1165 ?++( _Atomic volatile double * ); 1166 long double ?++( volatile long double * ), 1167 ?++( _Atomic volatile long double * ); 1168 1169 forall( type T ) T * ?++( T * restrict volatile * ), 1170 * ?++( T * _Atomic restrict volatile * ); 1171 1172 forall( type T ) _Atomic T * ?++( _Atomic T * restrict volatile * ), 1173 * ?++( _Atomic T * _Atomic restrict volatile * ); 1174 1175 forall( type T ) const T * ?++( const T * restrict volatile * ), 1176 * ?++( const T * _Atomic restrict volatile * ); 1177 1178 forall( type T ) volatile T * ?++( volatile T * restrict volatile * ), 1179 * ?++( volatile T * _Atomic restrict volatile * ); 1180 1181 forall( type T ) restrict T * ?++( restrict T * restrict volatile * ), 1182 * ?++( restrict T * _Atomic restrict volatile * ); 1183 1184 forall( type T ) _Atomic const T * ?++( _Atomic const T * restrict volatile * ), 1049 _Bool ?++( volatile _Bool * ), ?++( _Atomic volatile _Bool * ); 1050 char ?++( volatile char * ), ?++( _Atomic volatile char * ); 1051 signed char ?++( volatile signed char * ), ?++( _Atomic volatile signed char * ); 1052 unsigned char ?++( volatile signed char * ), ?++( _Atomic volatile signed char * ); 1053 short int ?++( volatile short int * ), ?++( _Atomic volatile short int * ); 1054 unsigned short int ?++( volatile unsigned short int * ), ?++( _Atomic volatile unsigned short int * ); 1055 int ?++( volatile int * ), ?++( _Atomic volatile int * ); 1056 unsigned int ?++( volatile unsigned int * ), ?++( _Atomic volatile unsigned int * ); 1057 long int ?++( volatile long int * ), ?++( _Atomic volatile long int * ); 1058 long unsigned int ?++( volatile long unsigned int * ), ?++( _Atomic volatile long unsigned int * ); 1059 long long int ?++( volatile long long int * ), ?++( _Atomic volatile long long int * ); 1060 long long unsigned ?++( volatile long long unsigned int * ), ?++( _Atomic volatile long long unsigned int * ); 1061 float ?++( volatile float * ), ?++( _Atomic volatile float * ); 1062 double ?++( volatile double * ), ?++( _Atomic volatile double * ); 1063 long double ?++( volatile long double * ), ?++( _Atomic volatile long double * ); 1064 1065 forall( otype T ) T * ?++( T * restrict volatile * ), * ?++( T * _Atomic restrict volatile * ); 1066 forall( otype T ) _Atomic T * ?++( _Atomic T * restrict volatile * ), * ?++( _Atomic T * _Atomic restrict volatile * ); 1067 forall( otype T ) const T * ?++( const T * restrict volatile * ), * ?++( const T * _Atomic restrict volatile * ); 1068 forall( otype T ) volatile T * ?++( volatile T * restrict volatile * ), * ?++( volatile T * _Atomic restrict volatile * ); 1069 forall( otype T ) restrict T * ?++( restrict T * restrict volatile * ), * ?++( restrict T * _Atomic restrict volatile * ); 1070 forall( otype T ) _Atomic const T * ?++( _Atomic const T * restrict volatile * ), 1185 1071 * ?++( _Atomic const T * _Atomic restrict volatile * ); 1186 1187 forall( type T ) _Atomic restrict T * ?++( _Atomic restrict T * restrict volatile * ), 1072 forall( otype T ) _Atomic restrict T * ?++( _Atomic restrict T * restrict volatile * ), 1188 1073 * ?++( _Atomic restrict T * _Atomic restrict volatile * ); 1189 1190 forall( type T ) _Atomic volatile T * ?++( _Atomic volatile T * restrict volatile * ), 1074 forall( otype T ) _Atomic volatile T * ?++( _Atomic volatile T * restrict volatile * ), 1191 1075 * ?++( _Atomic volatile T * _Atomic restrict volatile * ); 1192 1193 forall( type T ) const restrict T * ?++( const restrict T * restrict volatile * ), 1076 forall( otype T ) const restrict T * ?++( const restrict T * restrict volatile * ), 1194 1077 * ?++( const restrict T * _Atomic restrict volatile * ); 1195 1196 forall( type T ) const volatile T * ?++( const volatile T * restrict volatile * ), 1078 forall( otype T ) const volatile T * ?++( const volatile T * restrict volatile * ), 1197 1079 * ?++( const volatile T * _Atomic restrict volatile * ); 1198 1199 forall( type T ) restrict volatile T * ?++( restrict volatile T * restrict volatile * ), 1080 forall( otype T ) restrict volatile T * ?++( restrict volatile T * restrict volatile * ), 1200 1081 * ?++( restrict volatile T * _Atomic restrict volatile * ); 1201 1202 forall( type T ) _Atomic const restrict T * ?++( _Atomic const restrict T * restrict volatile * ), 1082 forall( otype T ) _Atomic const restrict T * ?++( _Atomic const restrict T * restrict volatile * ), 1203 1083 * ?++( _Atomic const restrict T * _Atomic restrict volatile * ); 1204 1205 forall( type T ) _Atomic const volatile T * ?++( _Atomic const volatile T * restrict volatile * ), 1084 forall( otype T ) _Atomic const volatile T * ?++( _Atomic const volatile T * restrict volatile * ), 1206 1085 * ?++( _Atomic const volatile T * _Atomic restrict volatile * ); 1207 1208 forall( type T ) _Atomic restrict volatile T * ?++( _Atomic restrict volatile T * restrict volatile * ), 1086 forall( otype T ) _Atomic restrict volatile T * ?++( _Atomic restrict volatile T * restrict volatile * ), 1209 1087 * ?++( _Atomic restrict volatile T * _Atomic restrict volatile * ); 1210 1211 forall( type T ) const restrict volatile T * ?++( const restrict volatile T * restrict volatile * ), 1088 forall( otype T ) const restrict volatile T * ?++( const restrict volatile T * restrict volatile * ), 1212 1089 * ?++( const restrict volatile T * _Atomic restrict volatile * ); 1213 1214 forall( type T ) _Atomic const restrict volatile T * ?++( _Atomic const restrict volatile T * restrict volatile * ), 1090 forall( otype T ) _Atomic const restrict volatile T * ?++( _Atomic const restrict volatile T * restrict volatile * ), 1215 1091 * ?++( _Atomic const restrict volatile T * _Atomic restrict volatile * ); 1216 1092 1217 _Bool ?--( volatile _Bool * ), 1218 ?--( _Atomic volatile _Bool * ); 1219 char ?--( volatile char * ), 1220 ?--( _Atomic volatile char * ); 1221 signed char ?--( volatile signed char * ), 1222 ?--( _Atomic volatile signed char * ); 1223 unsigned char ?--( volatile signed char * ), 1224 ?--( _Atomic volatile signed char * ); 1225 short int ?--( volatile short int * ), 1226 ?--( _Atomic volatile short int * ); 1227 unsigned short int ?--( volatile unsigned short int * ), 1228 ?--( _Atomic volatile unsigned short int * ); 1229 int ?--( volatile int * ), 1230 ?--( _Atomic volatile int * ); 1231 unsigned int ?--( volatile unsigned int * ), 1232 ?--( _Atomic volatile unsigned int * ); 1233 long int ?--( volatile long int * ), 1234 ?--( _Atomic volatile long int * ); 1235 long unsigned int ?--( volatile long unsigned int * ), 1236 ?--( _Atomic volatile long unsigned int * ); 1237 long long int ?--( volatile long long int * ), 1238 ?--( _Atomic volatile long long int * ); 1239 long long unsigned ?--( volatile long long unsigned int * ), 1240 ?--( _Atomic volatile long long unsigned int * ); 1241 float ?--( volatile float * ), 1242 ?--( _Atomic volatile float * ); 1243 double ?--( volatile double * ), 1244 ?--( _Atomic volatile double * ); 1245 long double ?--( volatile long double * ), 1246 ?--( _Atomic volatile long double * ); 1247 1248 forall( type T ) T * ?--( T * restrict volatile * ), 1249 * ?--( T * _Atomic restrict volatile * ); 1250 1251 forall( type T ) _Atomic T * ?--( _Atomic T * restrict volatile * ), 1252 * ?--( _Atomic T * _Atomic restrict volatile * ); 1253 1254 forall( type T ) const T * ?--( const T * restrict volatile * ), 1255 * ?--( const T * _Atomic restrict volatile * ); 1256 1257 forall( type T ) volatile T * ?--( volatile T * restrict volatile * ), 1258 * ?--( volatile T * _Atomic restrict volatile * ); 1259 1260 forall( type T ) restrict T * ?--( restrict T * restrict volatile * ), 1261 * ?--( restrict T * _Atomic restrict volatile * ); 1262 1263 forall( type T ) _Atomic const T * ?--( _Atomic const T * restrict volatile * ), 1093 _Bool ?--( volatile _Bool * ), ?--( _Atomic volatile _Bool * ); 1094 char ?--( volatile char * ), ?--( _Atomic volatile char * ); 1095 signed char ?--( volatile signed char * ), ?--( _Atomic volatile signed char * ); 1096 unsigned char ?--( volatile signed char * ), ?--( _Atomic volatile signed char * ); 1097 short int ?--( volatile short int * ), ?--( _Atomic volatile short int * ); 1098 unsigned short int ?--( volatile unsigned short int * ), ?--( _Atomic volatile unsigned short int * ); 1099 int ?--( volatile int * ), ?--( _Atomic volatile int * ); 1100 unsigned int ?--( volatile unsigned int * ), ?--( _Atomic volatile unsigned int * ); 1101 long int ?--( volatile long int * ), ?--( _Atomic volatile long int * ); 1102 long unsigned int ?--( volatile long unsigned int * ), ?--( _Atomic volatile long unsigned int * ); 1103 long long int ?--( volatile long long int * ), ?--( _Atomic volatile long long int * ); 1104 long long unsigned ?--( volatile long long unsigned int * ), ?--( _Atomic volatile long long unsigned int * ); 1105 float ?--( volatile float * ), ?--( _Atomic volatile float * ); 1106 double ?--( volatile double * ), ?--( _Atomic volatile double * ); 1107 long double ?--( volatile long double * ), ?--( _Atomic volatile long double * ); 1108 1109 forall( otype T ) T * ?--( T * restrict volatile * ), * ?--( T * _Atomic restrict volatile * ); 1110 forall( otype T ) _Atomic T * ?--( _Atomic T * restrict volatile * ), * ?--( _Atomic T * _Atomic restrict volatile * ); 1111 forall( otype T ) const T * ?--( const T * restrict volatile * ), * ?--( const T * _Atomic restrict volatile * ); 1112 forall( otype T ) volatile T * ?--( volatile T * restrict volatile * ), * ?--( volatile T * _Atomic restrict volatile * ); 1113 forall( otype T ) restrict T * ?--( restrict T * restrict volatile * ), * ?--( restrict T * _Atomic restrict volatile * ); 1114 forall( otype T ) _Atomic const T * ?--( _Atomic const T * restrict volatile * ), 1264 1115 * ?--( _Atomic const T * _Atomic restrict volatile * ); 1265 1266 forall( type T ) _Atomic restrict T * ?--( _Atomic restrict T * restrict volatile * ), 1116 forall( otype T ) _Atomic restrict T * ?--( _Atomic restrict T * restrict volatile * ), 1267 1117 * ?--( _Atomic restrict T * _Atomic restrict volatile * ); 1268 1269 forall( type T ) _Atomic volatile T * ?--( _Atomic volatile T * restrict volatile * ), 1118 forall( otype T ) _Atomic volatile T * ?--( _Atomic volatile T * restrict volatile * ), 1270 1119 * ?--( _Atomic volatile T * _Atomic restrict volatile * ); 1271 1272 forall( type T ) const restrict T * ?--( const restrict T * restrict volatile * ), 1120 forall( otype T ) const restrict T * ?--( const restrict T * restrict volatile * ), 1273 1121 * ?--( const restrict T * _Atomic restrict volatile * ); 1274 1275 forall( type T ) const volatile T * ?--( const volatile T * restrict volatile * ), 1122 forall( otype T ) const volatile T * ?--( const volatile T * restrict volatile * ), 1276 1123 * ?--( const volatile T * _Atomic restrict volatile * ); 1277 1278 forall( type T ) restrict volatile T * ?--( restrict volatile T * restrict volatile * ), 1124 forall( otype T ) restrict volatile T * ?--( restrict volatile T * restrict volatile * ), 1279 1125 * ?--( restrict volatile T * _Atomic restrict volatile * ); 1280 1281 forall( type T ) _Atomic const restrict T * ?--( _Atomic const restrict T * restrict volatile * ), 1126 forall( otype T ) _Atomic const restrict T * ?--( _Atomic const restrict T * restrict volatile * ), 1282 1127 * ?--( _Atomic const restrict T * _Atomic restrict volatile * ); 1283 1284 forall( type T ) _Atomic const volatile T * ?--( _Atomic const volatile T * restrict volatile * ), 1128 forall( otype T ) _Atomic const volatile T * ?--( _Atomic const volatile T * restrict volatile * ), 1285 1129 * ?--( _Atomic const volatile T * _Atomic restrict volatile * ); 1286 1287 forall( type T ) _Atomic restrict volatile T * ?--( _Atomic restrict volatile T * restrict volatile * ), 1130 forall( otype T ) _Atomic restrict volatile T * ?--( _Atomic restrict volatile T * restrict volatile * ), 1288 1131 * ?--( _Atomic restrict volatile T * _Atomic restrict volatile * ); 1289 1290 forall( type T ) const restrict volatile T * ?--( const restrict volatile T * restrict volatile * ), 1132 forall( otype T ) const restrict volatile T * ?--( const restrict volatile T * restrict volatile * ), 1291 1133 * ?--( const restrict volatile T * _Atomic restrict volatile * ); 1292 1293 forall( type T ) _Atomic const restrict volatile T * ?--( _Atomic const restrict volatile T * restrict volatile * ), 1134 forall( otype T ) _Atomic const restrict volatile T * ?--( _Atomic const restrict volatile T * restrict volatile * ), 1294 1135 * ?--( _Atomic const restrict volatile T * _Atomic restrict volatile * ); 1295 1136 \end{lstlisting} … … 1308 1149 1309 1150 \begin{rationale} 1310 Note that ``\lstinline$++$'' and ``\lstinline$--$'' are rewritten as function calls that are given a 1311 pointer to that operand. (This is true of all operators that modify an operand.) As Hamish Macdonald 1312 has pointed out, this forces the modified operand of such expressions to be an lvalue. This 1313 partially enforces the C semantic rule that such operands must be \emph{modifiable} lvalues. 1314 \end{rationale} 1315 1316 \begin{rationale} 1317 In C, a semantic rule requires that pointer operands of increment and decrement be pointers to 1318 object types. Hence, \lstinline$void *$ objects cannot be incremented. In \CFA, the restriction 1319 follows from the use of a \lstinline$type$ parameter in the predefined function definitions, as 1320 opposed to \lstinline$dtype$, since only object types can be inferred arguments corresponding to the 1321 type parameter \lstinline$T$. 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. 1152 This partially enforces the C semantic rule that such operands must be \emph{modifiable} lvalues. 1153 \end{rationale} 1154 1155 \begin{rationale} 1156 In C, a semantic rule requires that pointer operands of increment and decrement be pointers to object types. 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$. 1322 1159 \end{rationale} 1323 1160 1324 1161 \semantics 1325 First, each interpretation of the operand of an increment or decrement expression is considered 1326 separately. For each interpretation that is a bit-field or is declared with the 1327 \lstinline$register$\index{register@{\lstinline$register$}} \index{Itorage-class specifier}, the 1328 expression has one valid interpretation, with the type of the operand, and the expression is 1329 ambiguous if the operand is. 1330 1331 For the remaining interpretations, the expression is rewritten, and the interpretations of the 1332 expression are the interpretations of the corresponding function call. Finally, all interpretations 1333 of the expression produced for the different interpretations of the operand are combined to produce 1334 the interpretations of the expression as a whole; where interpretations have compatible result 1335 types, the best interpretations are selected in the manner described for function call expressions. 1162 First, each interpretation of the operand of an increment or decrement expression is considered separately. 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. 1165 1166 For the remaining interpretations, the expression is rewritten, and the interpretations of the expression are the interpretations of the corresponding function call. 1167 Finally, all interpretations of the expression produced for the different interpretations of the operand are combined to produce the interpretations of the expression as a whole; where interpretations have compatible result types, the best interpretations are selected in the manner described for function call expressions. 1336 1168 1337 1169 \examples … … 1346 1178 \lstinline$vs++$ calls the \lstinline$?++$ function with the \lstinline$volatile short *$ parameter. 1347 1179 \lstinline$s++$ does the same, applying the safe conversion from \lstinline$short int *$ to 1348 \lstinline$volatile short int *$. Note that there is no conversion that adds an \lstinline$_Atomic$ 1349 qualifier, so the \lstinline$_Atomic volatile short int$ overloading does not provide a valid 1350 interpretation. 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. 1351 1182 \end{sloppypar} 1352 1183 1353 There is no safe conversion from \lstinline$const short int *$ to \lstinline$volatile short int *$, 1354 and no \lstinline$?++$ function that accepts a \lstinline$const *$ parameter, so \lstinline$cs++$ 1355 has no valid interpretations. 1356 1357 The best valid interpretation of \lstinline$as++$ calls the \lstinline$short ?++$ function with the 1358 \lstinline$_Atomic volatile short int *$ parameter, applying a safe conversion to add the 1359 \lstinline$volatile$ qualifier. 1360 1361 \begin{lstlisting} 1362 char * const restrict volatile * restrict volatile pqpc; pqpc++ 1363 char * * restrict volatile ppc; ppc++; 1364 \end{lstlisting} 1365 Since \lstinline$&(pqpc)$ has type \lstinline$char * const restrict volatile * restrict volatile *$, 1366 the best valid interpretation of \lstinline$pqpc++$ calls the polymorphic \lstinline$?++$ function 1367 with the \lstinline$const restrict volatile T * restrict volatile *$ parameter, inferring 1368 \lstinline$T$ to be \lstinline$char *$. 1369 1370 \begin{sloppypar} 1371 \lstinline$ppc++$ calls the same function, again inferring \lstinline$T$ to be \lstinline$char *$, 1372 and using the safe conversions from \lstinline$T$ to \lstinline$T const restrict volatile$. 1373 \end{sloppypar} 1374 1375 \begin{rationale} 1376 Increment and decrement expressions show up a deficiency of \CFA's type system. There is no such 1377 thing as a pointer to a register object or bit-field\index{deficiencies!pointers to bit-fields}. 1378 Therefore, there is no way to define a function that alters them, and hence no way to define 1379 increment and decrement functions for them. As a result, the semantics of increment and decrement 1380 expressions must treat them specially. This holds true for all of the operators that may modify 1381 such objects. 1382 \end{rationale} 1383 1384 \begin{rationale} 1385 The polymorphic overloadings for pointer increment and decrement can be understood by considering 1386 increasingly complex types. 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. 1187 \begin{lstlisting} 1188 char * const restrict volatile * restrict volatile pqpc; 1189 pqpc++ 1190 char * * restrict volatile ppc; 1191 ppc++; 1192 \end{lstlisting} 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$. 1196 1197 \begin{rationale} 1198 Increment and decrement expressions show up a deficiency of \CFA's type system. 1199 There is no such thing as a pointer to a register object or bit-field\index{deficiencies!pointers to bit-fields}. 1200 Therefore, there is no way to define a function that alters them, and hence no way to define increment and decrement functions for them. 1201 As a result, the semantics of increment and decrement expressions must treat them specially. 1202 This holds true for all of the operators that may modify such objects. 1203 \end{rationale} 1204 1205 \begin{rationale} 1206 The polymorphic overloadings for pointer increment and decrement can be understood by considering increasingly complex types. 1387 1207 \begin{enumerate} 1388 1208 \item 1389 ``\lstinline$char * p; p++;$''. The argument to \lstinline$?++$ has type \lstinline$char * *$, and 1390 the result has type \lstinline$char *$. The expression would be valid if \lstinline$?++$ were 1391 declared by 1392 \begin{lstlisting} 1393 forall( type T ) T * ?++( T * * ); 1394 \end{lstlisting} 1395 with \lstinline$T$ inferred to be \lstinline$char$. 1396 1397 \item 1398 ``\lstinline$char *restrict volatile qp; qp++$''. The result again has type \lstinline$char *$, but 1399 the argument now has type \lstinline$char *restrict volatile *$, so it cannot be passed to the 1400 hypothetical function declared in point 1. Hence the actual predefined function is 1401 \begin{lstlisting} 1402 forall( type T ) T * ?++( T * restrict volatile * ); 1403 \end{lstlisting} 1404 which also accepts a \lstinline$char * *$ argument, because of the safe conversions that add 1405 \lstinline$volatile$ and \lstinline$restrict$ qualifiers. (The parameter is not const-qualified, so 1406 constant pointers cannot be incremented.) 1407 1408 \item 1409 ``\lstinline$char *_Atomic ap; ap++$''. The result again has type \lstinline$char *$, but no safe 1410 conversion adds an \lstinline$_Atomic$ qualifier, so the function in point 2 is not applicable. A 1411 separate overloading of \lstinline$?++$ is required. 1412 1413 \item 1414 ``\lstinline$char const volatile * pq; pq++$''. Here the result has type 1209 ``\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 1212 \begin{lstlisting} 1213 forall( otype T ) T * ?++( T * * ); 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. 1219 Hence the actual predefined function is 1220 \begin{lstlisting} 1221 forall( otype T ) T * ?++( T * restrict volatile * ); 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++$''. 1232 Here the result has type 1415 1233 \lstinline$char const volatile *$, so a new overloading is needed: 1416 1234 \begin{lstlisting} 1417 forall( type T ) T const volatile * ?++( T const volatile *restrict volatile * ); 1418 \end{lstlisting} 1419 One overloading is needed for each combination of qualifiers in the pointed-at 1420 type\index{deficiencies!pointers to qualified types}. 1235 forall( otype T ) T const volatile * ?++( T const volatile *restrict volatile * ); 1236 \end{lstlisting} 1237 One overloading is needed for each combination of qualifiers in the pointed-at type\index{deficiencies!pointers to qualified types}. 1421 1238 1422 1239 \item 1423 ``\lstinline$float *restrict * prp; prp++$''. The \lstinline$restrict$ qualifier is handled just 1424 like \lstinline$const$ and \lstinline$volatile$ in the previous case: 1425 \begin{lstlisting} 1426 forall( type T ) T restrict * ?++( T restrict *restrict volatile * ); 1427 \end{lstlisting} 1428 with \lstinline$T$ inferred to be \lstinline$float *$. This looks odd, because {\c11} contains a 1429 constraint that requires restrict-qualified types to be pointer-to-object types, and \lstinline$T$ 1430 is not syntactically a pointer type. \CFA loosens the constraint. 1240 ``\lstinline$float *restrict * prp; prp++$''. 1241 The \lstinline$restrict$ qualifier is handled just like \lstinline$const$ and \lstinline$volatile$ in the previous case: 1242 \begin{lstlisting} 1243 forall( otype T ) T restrict * ?++( T restrict *restrict volatile * ); 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. 1431 1246 \end{enumerate} 1432 1247 \end{rationale} … … 1436 1251 1437 1252 \semantics 1438 A compound literal has one interpretation, with the type given by the \nonterm{type-name} of the 1439 compound literal. 1253 A compound literal has one interpretation, with the type given by the \nonterm{type-name} of the compound literal. 1440 1254 1441 1255 … … 1455 1269 \rewriterules 1456 1270 \begin{lstlisting} 1457 *a @\rewrite@ *?( a) @\use{*?}@1458 +a @\rewrite@ +?( a) @\use{+?}@1459 -a @\rewrite@ -?( a) @\use{-?}@1460 ~a @\rewrite@ ~?( a) @\use{~?}@1461 !a @\rewrite@ !?( a) @\use{"!?}@1462 ++a @\rewrite@ ++?(&( a)) @\use{++?}@1463 --a @\rewrite@ --?(&( a)) @\use{--?}@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{--?}@ 1464 1278 \end{lstlisting} 1465 1279 … … 1469 1283 \predefined 1470 1284 \begin{lstlisting} 1471 _Bool ++?( volatile _Bool * ), 1472 ++?( _Atomic volatile _Bool * ); 1473 char ++?( volatile char * ), 1474 ++?( _Atomic volatile char * ); 1475 signed char ++?( volatile signed char * ), 1476 ++?( _Atomic volatile signed char * ); 1477 unsigned char ++?( volatile signed char * ), 1478 ++?( _Atomic volatile signed char * ); 1479 short int ++?( volatile short int * ), 1480 ++?( _Atomic volatile short int * ); 1481 unsigned short int ++?( volatile unsigned short int * ), 1482 ++?( _Atomic volatile unsigned short int * ); 1483 int ++?( volatile int * ), 1484 ++?( _Atomic volatile int * ); 1485 unsigned int ++?( volatile unsigned int * ), 1486 ++?( _Atomic volatile unsigned int * ); 1487 long int ++?( volatile long int * ), 1488 ++?( _Atomic volatile long int * ); 1489 long unsigned int ++?( volatile long unsigned int * ), 1490 ++?( _Atomic volatile long unsigned int * ); 1491 long long int ++?( volatile long long int * ), 1492 ++?( _Atomic volatile long long int * ); 1493 long long unsigned ++?( volatile long long unsigned int * ), 1494 ++?( _Atomic volatile long long unsigned int * ); 1495 float ++?( volatile float * ), 1496 ++?( _Atomic volatile float * ); 1497 double ++?( volatile double * ), 1498 ++?( _Atomic volatile double * ); 1499 long double ++?( volatile long double * ), 1500 ++?( _Atomic volatile long double * ); 1501 1502 forall( type T ) T * ++?( T * restrict volatile * ), 1503 * ++?( T * _Atomic restrict volatile * ); 1504 1505 forall( type T ) _Atomic T * ++?( _Atomic T * restrict volatile * ), 1506 * ++?( _Atomic T * _Atomic restrict volatile * ); 1507 1508 forall( type T ) const T * ++?( const T * restrict volatile * ), 1509 * ++?( const T * _Atomic restrict volatile * ); 1510 1511 forall( type T ) volatile T * ++?( volatile T * restrict volatile * ), 1512 * ++?( volatile T * _Atomic restrict volatile * ); 1513 1514 forall( type T ) restrict T * ++?( restrict T * restrict volatile * ), 1515 * ++?( restrict T * _Atomic restrict volatile * ); 1516 1517 forall( type T ) _Atomic const T * ++?( _Atomic const T * restrict volatile * ), 1285 _Bool ++?( volatile _Bool * ), ++?( _Atomic volatile _Bool * ); 1286 char ++?( volatile char * ), ++?( _Atomic volatile char * ); 1287 signed char ++?( volatile signed char * ), ++?( _Atomic volatile signed char * ); 1288 unsigned char ++?( volatile signed char * ), ++?( _Atomic volatile signed char * ); 1289 short int ++?( volatile short int * ), ++?( _Atomic volatile short int * ); 1290 unsigned short int ++?( volatile unsigned short int * ), ++?( _Atomic volatile unsigned short int * ); 1291 int ++?( volatile int * ), ++?( _Atomic volatile int * ); 1292 unsigned int ++?( volatile unsigned int * ), ++?( _Atomic volatile unsigned int * ); 1293 long int ++?( volatile long int * ), ++?( _Atomic volatile long int * ); 1294 long unsigned int ++?( volatile long unsigned int * ), ++?( _Atomic volatile long unsigned int * ); 1295 long long int ++?( volatile long long int * ), ++?( _Atomic volatile long long int * ); 1296 long long unsigned ++?( volatile long long unsigned int * ), ++?( _Atomic volatile long long unsigned int * ); 1297 float ++?( volatile float * ), ++?( _Atomic volatile float * ); 1298 double ++?( volatile double * ), ++?( _Atomic volatile double * ); 1299 long double ++?( volatile long double * ), ++?( _Atomic volatile long double * ); 1300 1301 forall( otype T ) T * ++?( T * restrict volatile * ), * ++?( T * _Atomic restrict volatile * ); 1302 forall( otype T ) _Atomic T * ++?( _Atomic T * restrict volatile * ), * ++?( _Atomic T * _Atomic restrict volatile * ); 1303 forall( otype T ) const T * ++?( const T * restrict volatile * ), * ++?( const T * _Atomic restrict volatile * ); 1304 forall( otype T ) volatile T * ++?( volatile T * restrict volatile * ), * ++?( volatile T * _Atomic restrict volatile * ); 1305 forall( otype T ) restrict T * ++?( restrict T * restrict volatile * ), * ++?( restrict T * _Atomic restrict volatile * ); 1306 forall( otype T ) _Atomic const T * ++?( _Atomic const T * restrict volatile * ), 1518 1307 * ++?( _Atomic const T * _Atomic restrict volatile * ); 1519 1520 forall( type T ) _Atomic volatile T * ++?( _Atomic volatile T * restrict volatile * ), 1308 forall( otype T ) _Atomic volatile T * ++?( _Atomic volatile T * restrict volatile * ), 1521 1309 * ++?( _Atomic volatile T * _Atomic restrict volatile * ); 1522 1523 forall( type T ) _Atomic restrict T * ++?( _Atomic restrict T * restrict volatile * ), 1310 forall( otype T ) _Atomic restrict T * ++?( _Atomic restrict T * restrict volatile * ), 1524 1311 * ++?( _Atomic restrict T * _Atomic restrict volatile * ); 1525 1526 forall( type T ) const volatile T * ++?( const volatile T * restrict volatile * ), 1312 forall( otype T ) const volatile T * ++?( const volatile T * restrict volatile * ), 1527 1313 * ++?( const volatile T * _Atomic restrict volatile * ); 1528 1529 forall( type T ) const restrict T * ++?( const restrict T * restrict volatile * ), 1314 forall( otype T ) const restrict T * ++?( const restrict T * restrict volatile * ), 1530 1315 * ++?( const restrict T * _Atomic restrict volatile * ); 1531 1532 forall( type T ) restrict volatile T * ++?( restrict volatile T * restrict volatile * ), 1316 forall( otype T ) restrict volatile T * ++?( restrict volatile T * restrict volatile * ), 1533 1317 * ++?( restrict volatile T * _Atomic restrict volatile * ); 1534 1535 forall( type T ) _Atomic const volatile T * ++?( _Atomic const volatile T * restrict volatile * ), 1318 forall( otype T ) _Atomic const volatile T * ++?( _Atomic const volatile T * restrict volatile * ), 1536 1319 * ++?( _Atomic const volatile T * _Atomic restrict volatile * ); 1537 1538 forall( type T ) _Atomic const restrict T * ++?( _Atomic const restrict T * restrict volatile * ), 1320 forall( otype T ) _Atomic const restrict T * ++?( _Atomic const restrict T * restrict volatile * ), 1539 1321 * ++?( _Atomic const restrict T * _Atomic restrict volatile * ); 1540 1541 forall( type T ) _Atomic restrict volatile T * ++?( _Atomic restrict volatile T * restrict volatile * ), 1322 forall( otype T ) _Atomic restrict volatile T * ++?( _Atomic restrict volatile T * restrict volatile * ), 1542 1323 * ++?( _Atomic restrict volatile T * _Atomic restrict volatile * ); 1543 1544 forall( type T ) const restrict volatile T * ++?( const restrict volatile T * restrict volatile * ), 1324 forall( otype T ) const restrict volatile T * ++?( const restrict volatile T * restrict volatile * ), 1545 1325 * ++?( const restrict volatile T * _Atomic restrict volatile * ); 1546 1547 forall( type T ) _Atomic const restrict volatile T * ++?( _Atomic const restrict volatile T * restrict volatile * ), 1326 forall( otype T ) _Atomic const restrict volatile T * ++?( _Atomic const restrict volatile T * restrict volatile * ), 1548 1327 * ++?( _Atomic const restrict volatile T * _Atomic restrict volatile * ); 1549 1328 1550 _Bool --?( volatile _Bool * ), 1551 --?( _Atomic volatile _Bool * ); 1552 char --?( volatile char * ), 1553 --?( _Atomic volatile char * ); 1554 signed char --?( volatile signed char * ), 1555 --?( _Atomic volatile signed char * ); 1556 unsigned char --?( volatile signed char * ), 1557 --?( _Atomic volatile signed char * ); 1558 short int --?( volatile short int * ), 1559 --?( _Atomic volatile short int * ); 1560 unsigned short int --?( volatile unsigned short int * ), 1561 --?( _Atomic volatile unsigned short int * ); 1562 int --?( volatile int * ), 1563 --?( _Atomic volatile int * ); 1564 unsigned int --?( volatile unsigned int * ), 1565 --?( _Atomic volatile unsigned int * ); 1566 long int --?( volatile long int * ), 1567 --?( _Atomic volatile long int * ); 1568 long unsigned int --?( volatile long unsigned int * ), 1569 --?( _Atomic volatile long unsigned int * ); 1570 long long int --?( volatile long long int * ), 1571 --?( _Atomic volatile long long int * ); 1572 long long unsigned --?( volatile long long unsigned int * ), 1573 --?( _Atomic volatile long long unsigned int * ); 1574 float --?( volatile float * ), 1575 --?( _Atomic volatile float * ); 1576 double --?( volatile double * ), 1577 --?( _Atomic volatile double * ); 1578 long double --?( volatile long double * ), 1579 --?( _Atomic volatile long double * ); 1580 1581 forall( type T ) T * --?( T * restrict volatile * ), 1582 * --?( T * _Atomic restrict volatile * ); 1583 1584 forall( type T ) _Atomic T * --?( _Atomic T * restrict volatile * ), 1585 * --?( _Atomic T * _Atomic restrict volatile * ); 1586 1587 forall( type T ) const T * --?( const T * restrict volatile * ), 1588 * --?( const T * _Atomic restrict volatile * ); 1589 1590 forall( type T ) volatile T * --?( volatile T * restrict volatile * ), 1591 * --?( volatile T * _Atomic restrict volatile * ); 1592 1593 forall( type T ) restrict T * --?( restrict T * restrict volatile * ), 1594 * --?( restrict T * _Atomic restrict volatile * ); 1595 1596 forall( type T ) _Atomic const T * --?( _Atomic const T * restrict volatile * ), 1329 _Bool --?( volatile _Bool * ), --?( _Atomic volatile _Bool * ); 1330 char --?( volatile char * ), --?( _Atomic volatile char * ); 1331 signed char --?( volatile signed char * ), --?( _Atomic volatile signed char * ); 1332 unsigned char --?( volatile signed char * ), --?( _Atomic volatile signed char * ); 1333 short int --?( volatile short int * ), --?( _Atomic volatile short int * ); 1334 unsigned short int --?( volatile unsigned short int * ), --?( _Atomic volatile unsigned short int * ); 1335 int --?( volatile int * ), --?( _Atomic volatile int * ); 1336 unsigned int --?( volatile unsigned int * ), --?( _Atomic volatile unsigned int * ); 1337 long int --?( volatile long int * ), --?( _Atomic volatile long int * ); 1338 long unsigned int --?( volatile long unsigned int * ), --?( _Atomic volatile long unsigned int * ); 1339 long long int --?( volatile long long int * ), --?( _Atomic volatile long long int * ); 1340 long long unsigned --?( volatile long long unsigned int * ), --?( _Atomic volatile long long unsigned int * ); 1341 float --?( volatile float * ), --?( _Atomic volatile float * ); 1342 double --?( volatile double * ), --?( _Atomic volatile double * ); 1343 long double --?( volatile long double * ), --?( _Atomic volatile long double * ); 1344 1345 forall( otype T ) T * --?( T * restrict volatile * ), * --?( T * _Atomic restrict volatile * ); 1346 forall( otype T ) _Atomic T * --?( _Atomic T * restrict volatile * ), * --?( _Atomic T * _Atomic restrict volatile * ); 1347 forall( otype T ) const T * --?( const T * restrict volatile * ), * --?( const T * _Atomic restrict volatile * ); 1348 forall( otype T ) volatile T * --?( volatile T * restrict volatile * ), * --?( volatile T * _Atomic restrict volatile * ); 1349 forall( otype T ) restrict T * --?( restrict T * restrict volatile * ), * --?( restrict T * _Atomic restrict volatile * ); 1350 forall( otype T ) _Atomic const T * --?( _Atomic const T * restrict volatile * ), 1597 1351 * --?( _Atomic const T * _Atomic restrict volatile * ); 1598 1599 forall( type T ) _Atomic volatile T * --?( _Atomic volatile T * restrict volatile * ), 1352 forall( otype T ) _Atomic volatile T * --?( _Atomic volatile T * restrict volatile * ), 1600 1353 * --?( _Atomic volatile T * _Atomic restrict volatile * ); 1601 1602 forall( type T ) _Atomic restrict T * --?( _Atomic restrict T * restrict volatile * ), 1354 forall( otype T ) _Atomic restrict T * --?( _Atomic restrict T * restrict volatile * ), 1603 1355 * --?( _Atomic restrict T * _Atomic restrict volatile * ); 1604 1605 forall( type T ) const volatile T * --?( const volatile T * restrict volatile * ), 1356 forall( otype T ) const volatile T * --?( const volatile T * restrict volatile * ), 1606 1357 * --?( const volatile T * _Atomic restrict volatile * ); 1607 1608 forall( type T ) const restrict T * --?( const restrict T * restrict volatile * ), 1358 forall( otype T ) const restrict T * --?( const restrict T * restrict volatile * ), 1609 1359 * --?( const restrict T * _Atomic restrict volatile * ); 1610 1611 forall( type T ) restrict volatile T * --?( restrict volatile T * restrict volatile * ), 1360 forall( otype T ) restrict volatile T * --?( restrict volatile T * restrict volatile * ), 1612 1361 * --?( restrict volatile T * _Atomic restrict volatile * ); 1613 1614 forall( type T ) _Atomic const volatile T * --?( _Atomic const volatile T * restrict volatile * ), 1362 forall( otype T ) _Atomic const volatile T * --?( _Atomic const volatile T * restrict volatile * ), 1615 1363 * --?( _Atomic const volatile T * _Atomic restrict volatile * ); 1616 1617 forall( type T ) _Atomic const restrict T * --?( _Atomic const restrict T * restrict volatile * ), 1364 forall( otype T ) _Atomic const restrict T * --?( _Atomic const restrict T * restrict volatile * ), 1618 1365 * --?( _Atomic const restrict T * _Atomic restrict volatile * ); 1619 1620 forall( type T ) _Atomic restrict volatile T * --?( _Atomic restrict volatile T * restrict volatile * ), 1366 forall( otype T ) _Atomic restrict volatile T * --?( _Atomic restrict volatile T * restrict volatile * ), 1621 1367 * --?( _Atomic restrict volatile T * _Atomic restrict volatile * ); 1622 1623 forall( type T ) const restrict volatile T * --?( const restrict volatile T * restrict volatile * ), 1368 forall( otype T ) const restrict volatile T * --?( const restrict volatile T * restrict volatile * ), 1624 1369 * --?( const restrict volatile T * _Atomic restrict volatile * ); 1625 1626 forall( type T ) _Atomic const restrict volatile T * --?( _Atomic const restrict volatile T * restrict volatile * ), 1370 forall( otype T ) _Atomic const restrict volatile T * --?( _Atomic const restrict volatile T * restrict volatile * ), 1627 1371 * --?( _Atomic const restrict volatile T * _Atomic restrict volatile * ); 1628 1372 \end{lstlisting} … … 1645 1389 1646 1390 \semantics 1647 The interpretations of prefix increment and decrement expressions are 1648 determined in the same way as the interpretations of postfix increment and 1649 decrement expressions. 1391 The interpretations of prefix increment and decrement expressions are determined in the same way as the interpretations of postfix increment and decrement expressions. 1650 1392 1651 1393 … … 1654 1396 \predefined 1655 1397 \begin{lstlisting} 1656 forall( type T ) lvalue T *?( T * ); 1657 forall( type T ) _Atomic lvalue T *?( _Atomic T * ); 1658 forall( type T ) const lvalue T *?( const T * ); 1659 forall( type T ) volatile lvalue T *?( volatile T * ); 1660 forall( type T ) restrict lvalue T *?( restrict T * ); 1661 forall( type T ) _Atomic const lvalue T *?( _Atomic const T * ); 1662 forall( type T ) _Atomic volatile lvalue T *?( _Atomic volatile T * ); 1663 forall( type T ) _Atomic restrict lvalue T *?( _Atomic restrict T * ); 1664 forall( type T ) const volatile lvalue T *?( const volatile T * ); 1665 forall( type T ) const restrict lvalue T *?( const restrict T * ); 1666 forall( type T ) restrict volatile lvalue T *?( restrict volatile T * ); 1667 forall( type T ) _Atomic const volatile lvalue T *?( _Atomic const volatile T * ); 1668 forall( type T ) _Atomic const restrict lvalue T *?( _Atomic const restrict T * ); 1669 forall( type T ) _Atomic restrict volatile lvalue T *?( _Atomic restrict volatile T * ); 1670 forall( type T ) const restrict volatile lvalue T *?( const restrict volatile T * ); 1671 forall( type T ) _Atomic const restrict volatile lvalue T *?( _Atomic const restrict volatile T * ); 1672 1398 forall( otype T ) lvalue T *?( T * ); 1399 forall( otype T ) _Atomic lvalue T *?( _Atomic T * ); 1400 forall( otype T ) const lvalue T *?( const T * ); 1401 forall( otype T ) volatile lvalue T *?( volatile T * ); 1402 forall( otype T ) restrict lvalue T *?( restrict T * ); 1403 forall( otype T ) _Atomic const lvalue T *?( _Atomic const T * ); 1404 forall( otype T ) _Atomic volatile lvalue T *?( _Atomic volatile T * ); 1405 forall( otype T ) _Atomic restrict lvalue T *?( _Atomic restrict T * ); 1406 forall( otype T ) const volatile lvalue T *?( const volatile T * ); 1407 forall( otype T ) const restrict lvalue T *?( const restrict T * ); 1408 forall( otype T ) restrict volatile lvalue T *?( restrict volatile T * ); 1409 forall( otype T ) _Atomic const volatile lvalue T *?( _Atomic const volatile T * ); 1410 forall( otype T ) _Atomic const restrict lvalue T *?( _Atomic const restrict T * ); 1411 forall( otype T ) _Atomic restrict volatile lvalue T *?( _Atomic restrict volatile T * ); 1412 forall( otype T ) const restrict volatile lvalue T *?( const restrict volatile T * ); 1413 forall( otype T ) _Atomic const restrict volatile lvalue T *?( _Atomic const restrict volatile T * ); 1673 1414 forall( ftype FT ) FT *?( FT * ); 1674 1415 \end{lstlisting} … … 1682 1423 \lstinline$T$ is the type of the operand. 1683 1424 1684 The interpretations of an indirection expression are the interpretations of the corresponding 1685 function call. 1425 The interpretations of an indirection expression are the interpretations of the corresponding function call. 1686 1426 1687 1427 … … 1690 1430 \predefined 1691 1431 \begin{lstlisting} 1692 int 1693 +?( int ), 1694 -?( int ), 1695 ~?( int ); 1696 unsigned int 1697 +?( unsigned int ), 1698 -?( unsigned int ), 1699 ~?( unsigned int ); 1700 long int 1701 +?( long int ), 1702 -?( long int ), 1703 ~?( long int ); 1704 long unsigned int 1705 +?( long unsigned int ), 1706 -?( long unsigned int ), 1707 ~?( long unsigned int ); 1708 long long int 1709 +?( long long int ), 1710 -?( long long int ), 1711 ~?( long long int ); 1712 long long unsigned int 1713 +?( long long unsigned int ), 1714 -?( long long unsigned int ), 1715 ~?( long long unsigned int ); 1716 float 1717 +?( float ), 1718 -?( float ); 1719 double 1720 +?( double ), 1721 -?( double ); 1722 long double 1723 +?( long double ), 1724 -?( long double ); 1725 _Complex float 1726 +?( _Complex float ), 1727 -?( _Complex float ); 1728 _Complex double 1729 +?( _Complex double ), 1730 -?( _Complex double ); 1731 _Complex long double 1732 +?( _Complex long double ), 1733 -?( _Complex long double ); 1734 1735 int !?( int ), 1736 !?( unsigned int ), 1737 !?( long ), 1738 !?( long unsigned int ), 1739 !?( long long int ), 1740 !?( long long unsigned int ), 1741 !?( float ), 1742 !?( double ), 1743 !?( long double ), 1744 !?( _Complex float ), 1745 !?( _Complex double ), 1746 !?( _Complex long double ); 1747 1432 int +?( int ), -?( int ), ~?( int ); 1433 unsigned int +?( unsigned int ), -?( unsigned int ), ~?( unsigned int ); 1434 long int +?( long int ), -?( long int ), ~?( long int ); 1435 long unsigned int +?( long unsigned int ), -?( long unsigned int ), ~?( long unsigned int ); 1436 long long int +?( long long int ), -?( long long int ), ~?( long long int ); 1437 long long unsigned int +?( long long unsigned int ), -?( long long unsigned int ), ~?( long long unsigned int ); 1438 float +?( float ), -?( float ); 1439 double +?( double ), -?( double ); 1440 long double +?( long double ), -?( long double ); 1441 _Complex float +?( _Complex float ), -?( _Complex float ); 1442 _Complex double +?( _Complex double ), -?( _Complex double ); 1443 _Complex long double +?( _Complex long double ), -?( _Complex long double ); 1444 int !?( int ), !?( unsigned int ), !?( long ), !?( long unsigned int ), 1445 !?( long long int ), !?( long long unsigned int ), 1446 !?( float ), !?( double ), !?( long double ), 1447 !?( _Complex float ), !?( _Complex double ), !?( _Complex long double ); 1748 1448 forall( dtype DT ) int !?( const restrict volatile DT * ); 1749 1449 forall( dtype DT ) int !?( _Atomic const restrict volatile DT * ); 1750 1450 forall( ftype FT ) int !?( FT * ); 1751 1451 \end{lstlisting} 1752 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the 1753 rank of \lstinline$int$ there exist 1452 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 1754 1453 % Don't use predefined: keep this out of prelude.cf. 1755 1454 \begin{lstlisting} … … 1759 1458 1760 1459 \semantics 1761 The interpretations of a unary arithmetic expression are the interpretations of the corresponding 1762 function call. 1460 The interpretations of a unary arithmetic expression are the interpretations of the corresponding function call. 1763 1461 1764 1462 \examples … … 1766 1464 long int li; 1767 1465 void eat_double( double );@\use{eat_double}@ 1768 1769 eat_double(-li ); // @\rewrite@ eat_double( -?( li ) ); 1466 eat_double(-li ); // @\rewrite@ eat_double( -?( li ) ); 1770 1467 \end{lstlisting} 1771 1468 The valid interpretations of ``\lstinline$-li$'' (assuming no extended integer types exist) are 1772 1469 \begin{center} 1773 \begin{tabular}{llc} 1774 interpretation & result type & expression conversion cost \\ 1470 \begin{tabular}{llc} interpretation & result type & expression conversion cost \\ 1775 1471 \hline 1776 1472 \lstinline$-?( (int)li )$ & \lstinline$int$ & (unsafe) \\ … … 1788 1484 \end{tabular} 1789 1485 \end{center} 1790 The valid interpretations of the \lstinline$eat_double$ call, with the cost of the argument 1791 conversion and the cost of the entire expression, are 1486 The valid interpretations of the \lstinline$eat_double$ call, with the cost of the argument conversion and the cost of the entire expression, are 1792 1487 \begin{center} 1793 \begin{tabular}{lcc} 1794 interpretation & argument cost & expression cost \\ 1488 \begin{tabular}{lcc} interpretation & argument cost & expression cost \\ 1795 1489 \hline 1796 1490 \lstinline$eat_double( (double)-?( (int)li) )$ & 7 & (unsafe) \\ … … 1808 1502 \end{tabular} 1809 1503 \end{center} 1810 Each has result type \lstinline$void$, so the best must be selected. The interpretations involving 1811 unsafe conversions are discarded. The remainder have equal expression conversion costs, so the 1504 Each has result type \lstinline$void$, so the best must be selected. 1505 The interpretations involving unsafe conversions are discarded. 1506 The remainder have equal expression conversion costs, so the 1812 1507 ``highest argument conversion cost'' rule is invoked, and the chosen interpretation is 1813 1508 \lstinline$eat_double( (double)-?(li) )$. … … 1820 1515 \lstinline$dtype$, or \lstinline$ftype$. 1821 1516 1822 When the \lstinline$sizeof$\use{sizeof} operator is applied to an expression, the expression shall 1823 have exactly one \Index{interpretation}\index{ambiguous interpretation}, which shall 1824 be unambiguous. \semantics A \lstinline$sizeof$ or \lstinline$_Alignof$ expression has one 1825 interpretation, of type \lstinline$size_t$. 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$. 1826 1518 1827 1519 When \lstinline$sizeof$ is applied to an identifier declared by a \nonterm{type-declaration} or a 1828 \nonterm{type-parameter}, it yields the size in bytes of the type that implements the operand. When 1829 the operand is an opaque type or an inferred type parameter\index{inferred parameter}, the 1830 expression is not a constant expression. 1520 \nonterm{type-parameter}, it yields the size in bytes of the type that implements the operand. 1521 When the operand is an opaque type or an inferred type parameter\index{inferred parameter}, the expression is not a constant expression. 1831 1522 1832 1523 When \lstinline$_Alignof$ is applied to an identifier declared by a \nonterm{type-declaration} or a 1833 \nonterm{type-parameter}, it yields the alignment requirement of the type that implements the 1834 operand. When the operand is an opaque type or an inferred type parameter\index{inferred 1835 parameter}, the expression is not a constant expression. 1836 \begin{rationale} 1837 \begin{lstlisting} 1838 type Pair = struct { int first, second; }; 1524 \nonterm{type-parameter}, it yields the alignment requirement of the type that implements the operand. 1525 When the operand is an opaque type or an inferred type parameter\index{inferred parameter}, the expression is not a constant expression. 1526 \begin{rationale} 1527 \begin{lstlisting} 1528 otype Pair = struct { int first, second; }; 1839 1529 size_t p_size = sizeof(Pair); // constant expression 1840 1841 extern type Rational;@\use{Rational}@ 1530 extern otype Rational;@\use{Rational}@ 1842 1531 size_t c_size = sizeof(Rational); // non-constant expression 1843 1844 1532 forall(type T) T f(T p1, T p2) { 1845 1533 size_t t_size = sizeof(T); // non-constant expression … … 1847 1535 } 1848 1536 \end{lstlisting} 1849 ``\lstinline$sizeof Rational$'', although not statically known, is fixed. Within \lstinline$f()$, 1537 ``\lstinline$sizeof Rational$'', although not statically known, is fixed. 1538 Within \lstinline$f()$, 1850 1539 ``\lstinline$sizeof(T)$'' is fixed for each call of \lstinline$f()$, but may vary from call to call. 1851 1540 \end{rationale} … … 1867 1556 1868 1557 In a \Index{cast expression} ``\lstinline$($\nonterm{type-name}\lstinline$)e$'', if 1869 \nonterm{type-name} is the type of an interpretation of \lstinline$e$, then that interpretation is 1870 the only interpretation of the cast expression; otherwise, \lstinline$e$ shall have some 1871 interpretation that can be converted to \nonterm{type-name}, and the interpretation of the cast 1872 expression is the cast of the interpretation that can be converted at the lowest cost. The cast 1873 expression's interpretation is ambiguous\index{ambiguous interpretation} if more than one 1874 interpretation can be converted at the lowest cost or if the selected interpretation is ambiguous. 1875 1876 \begin{rationale} 1877 Casts can be used to eliminate ambiguity in expressions by selecting interpretations of 1878 subexpressions, and to specialize polymorphic functions and values. 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. 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. 1561 1562 \begin{rationale} 1563 Casts can be used to eliminate ambiguity in expressions by selecting interpretations of subexpressions, and to specialize polymorphic functions and values. 1879 1564 \end{rationale} 1880 1565 … … 1899 1584 \predefined 1900 1585 \begin{lstlisting} 1901 int?*?( int, int ), 1902 ?/?( int, int ), 1903 ?%?( int, int ); 1904 unsigned int?*?( unsigned int, unsigned int ), 1905 ?/?( unsigned int, unsigned int ), 1906 ?%?( unsigned int, unsigned int ); 1907 long int?*?( long int, long int ), 1908 ?/?( long, long ), 1909 ?%?( long, long ); 1586 int?*?( int, int ), ?/?( int, int ), ?%?( int, int ); 1587 unsigned int?*?( unsigned int, unsigned int ), ?/?( unsigned int, unsigned int ), ?%?( unsigned int, unsigned int ); 1588 long int?*?( long int, long int ), ?/?( long, long ), ?%?( long, long ); 1910 1589 long unsigned int?*?( long unsigned int, long unsigned int ), 1911 ?/?( long unsigned int, long unsigned int ), 1912 ?%?( long unsigned int, long unsigned int ); 1913 long long int?*?( long long int, long long int ), 1914 ?/?( long long int, long long int ), 1590 ?/?( long unsigned int, long unsigned int ), ?%?( long unsigned int, long unsigned int ); 1591 long long int?*?( long long int, long long int ), ?/?( long long int, long long int ), 1915 1592 ?%?( long long int, long long int ); 1916 1593 long long unsigned int ?*?( long long unsigned int, long long unsigned int ), 1917 ?/?( long long unsigned int, long long unsigned int ), 1918 ?%?( long long unsigned int, long long unsigned int ); 1919 float?*?( float, float ), 1920 ?/?( float, float ); 1921 double?*?( double, double ), 1922 ?/?( double, double ); 1923 long double?*?( long double, long double ), 1924 ?/?( long double, long double ); 1925 _Complex float?*?( float, _Complex float ), 1926 ?/?( float, _Complex float ), 1927 ?*?( _Complex float, float ), 1928 ?/?( _Complex float, float ), 1929 ?*?( _Complex float, _Complex float ), 1930 ?/?( _Complex float, _Complex float ); 1931 _Complex double?*?( double, _Complex double ), 1932 ?/?( double, _Complex double ), 1933 ?*?( _Complex double, double ), 1934 ?/?( _Complex double, double ), 1935 ?*?( _Complex double, _Complex double ), 1936 ?/?( _Complex double, _Complex double ); 1937 _Complex long double?*?( long double, _Complex long double ), 1938 ?/?( long double, _Complex long double ), 1939 ?*?( _Complex long double, long double ), 1940 ?/?( _Complex long double, long double ), 1941 ?*?( _Complex long double, _Complex long double ), 1942 ?/?( _Complex long double, _Complex long double ); 1943 \end{lstlisting} 1944 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the 1945 rank of \lstinline$int$ there exist 1594 ?/?( long long unsigned int, long long unsigned int ), ?%?( long long unsigned int, long long unsigned int ); 1595 float?*?( float, float ), ?/?( float, float ); 1596 double?*?( double, double ), ?/?( double, double ); 1597 long double?*?( long double, long double ), ?/?( long double, long double ); 1598 _Complex float?*?( float, _Complex float ), ?/?( float, _Complex float ), 1599 ?*?( _Complex float, float ), ?/?( _Complex float, float ), 1600 ?*?( _Complex float, _Complex float ), ?/?( _Complex float, _Complex float ); 1601 _Complex double?*?( double, _Complex double ), ?/?( double, _Complex double ), 1602 ?*?( _Complex double, double ), ?/?( _Complex double, double ), 1603 ?*?( _Complex double, _Complex double ), ?/?( _Complex double, _Complex double ); 1604 _Complex long double?*?( long double, _Complex long double ), ?/?( long double, _Complex long double ), 1605 ?*?( _Complex long double, long double ), ?/?( _Complex long double, long double ), 1606 ?*?( _Complex long double, _Complex long double ), ?/?( _Complex long double, _Complex long double ); 1607 \end{lstlisting} 1608 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 1946 1609 % Don't use predefined: keep this out of prelude.cf. 1947 1610 \begin{lstlisting} … … 1951 1614 \begin{rationale} 1952 1615 {\c11} does not include conversions from the \Index{real type}s to \Index{complex type}s in the 1953 \Index{usual arithmetic conversion}s. Instead it specifies conversion of the result of binary 1954 operations on arguments from mixed type domains. \CFA's predefined operators match that pattern. 1616 \Index{usual arithmetic conversion}s. Instead it specifies conversion of the result of binary operations on arguments from mixed type domains. \CFA's predefined operators match that pattern. 1955 1617 \end{rationale} 1956 1618 1957 1619 \semantics 1958 The interpretations of multiplicative expressions are the interpretations of the corresponding 1959 function call. 1620 The interpretations of multiplicative expressions are the interpretations of the corresponding function call. 1960 1621 1961 1622 \examples … … 1966 1627 eat_double( li % i ); 1967 1628 \end{lstlisting} 1968 ``\lstinline$li % i$'' is rewritten as ``\lstinline$?%?(li, i )$''. The valid interpretations 1969 of \lstinline$?%?(li, i )$, the cost\index{conversion cost} of converting their arguments, and 1970 the cost of converting the result to \lstinline$double$ (assuming no extended integer types are 1971 present ) are 1629 ``\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 1972 1631 \begin{center} 1973 \begin{tabular}{lcc} 1974 interpretation & argument cost & result cost \\ 1632 \begin{tabular}{lcc} interpretation & argument cost & result cost \\ 1975 1633 \hline 1976 1634 \lstinline$ ?%?( (int)li, i )$ & (unsafe) & 6 \\ 1977 1635 \lstinline$ ?%?( (unsigned)li,(unsigned)i )$ & (unsafe) & 5 \\ 1978 \lstinline$ ?%?( li,(long)i )$ & 1 & 4 \\1636 \lstinline$ ?%?( li, (long)i )$ & 1 & 4 \\ 1979 1637 \lstinline$ ?%?( (long unsigned)li,(long unsigned)i )$ & 3 & 3 \\ 1980 1638 \lstinline$ ?%?( (long long)li,(long long)i )$ & 5 & 2 \\ … … 1983 1641 \end{center} 1984 1642 The best interpretation of \lstinline$eat_double( li, i )$ is 1985 \lstinline$eat_double( (double)?%?(li, (long)i ))$, which has no unsafe conversions and the 1986 lowest total cost. 1987 1988 \begin{rationale} 1989 {\c11} defines most arithmetic operations to apply an \Index{integer promotion} to any argument that 1990 belongs to a type that has an \Index{integer conversion rank} less than that of \lstinline$int$.If 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 1991 1647 \lstinline$s$ is a \lstinline$short int$, ``\lstinline$s *s$'' does not have type \lstinline$short int$; 1992 it is treated as ``\lstinline$( (int)s ) * ( (int)s )$'', and has type \lstinline$int$. \CFA matches 1993 that pattern; it does not predefine ``\lstinline$short ?*?( short, short )$''. 1994 1995 These ``missing'' operators limit polymorphism. Consider 1996 \begin{lstlisting} 1997 forall( type T | T ?*?( T, T ) ) T square( T ); 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 )$''. 1650 1651 These ``missing'' operators limit polymorphism. 1652 Consider 1653 \begin{lstlisting} 1654 forall( otype T | T ?*?( T, T ) ) T square( T ); 1998 1655 short s; 1999 1656 square( s ); … … 2001 1658 Since \CFA does not define a multiplication operator for \lstinline$short int$, 2002 1659 \lstinline$square( s )$ is treated as \lstinline$square( (int)s )$, and the result has type 2003 \lstinline$int$. This is mildly surprising, but it follows the {\c11} operator pattern. 1660 \lstinline$int$. 1661 This is mildly surprising, but it follows the {\c11} operator pattern. 2004 1662 2005 1663 A more troubling example is 2006 1664 \begin{lstlisting} 2007 forall( type T | ?*?( T, T ) ) T product( T[], int n );1665 forall( otype T | ?*?( T, T ) ) T product( T[], int n ); 2008 1666 short sa[5]; 2009 1667 product( sa, 5); 2010 1668 \end{lstlisting} 2011 1669 This has no valid interpretations, because \CFA has no conversion from ``array of 2012 \lstinline$short int$'' to ``array of \lstinline$int$''. The alternatives in such situations2013 include1670 \lstinline$short int$'' to ``array of \lstinline$int$''. 1671 The alternatives in such situations include 2014 1672 \begin{itemize} 2015 1673 \item … … 2020 1678 \lstinline$product$. 2021 1679 \item 2022 Defining \lstinline$product$ to take as an argument a conversion function from the ``small'' type to 2023 the operator's argument type. 1680 Defining \lstinline$product$ to take as an argument a conversion function from the ``small'' type to the operator's argument type. 2024 1681 \end{itemize} 2025 1682 \end{rationale} … … 2043 1700 \predefined 2044 1701 \begin{lstlisting} 2045 int?+?( int, int ), 2046 ?-?( int, int ); 2047 unsigned int?+?( unsigned int, unsigned int ), 2048 ?-?( unsigned int, unsigned int ); 2049 long int?+?( long int, long int ), 2050 ?-?( long int, long int ); 2051 long unsigned int?+?( long unsigned int, long unsigned int ), 2052 ?-?( long unsigned int, long unsigned int ); 2053 long long int?+?( long long int, long long int ), 2054 ?-?( long long int, long long int ); 1702 int?+?( int, int ), ?-?( int, int ); 1703 unsigned int?+?( unsigned int, unsigned int ), ?-?( unsigned int, unsigned int ); 1704 long int?+?( long int, long int ), ?-?( long int, long int ); 1705 long unsigned int?+?( long unsigned int, long unsigned int ), ?-?( long unsigned int, long unsigned int ); 1706 long long int?+?( long long int, long long int ), ?-?( long long int, long long int ); 2055 1707 long long unsigned int ?+?( long long unsigned int, long long unsigned int ), 2056 1708 ?-?( long long unsigned int, long long unsigned int ); 2057 float?+?( float, float ), 2058 ?-?( float, float ); 2059 double?+?( double, double ), 2060 ?-?( double, double ); 2061 long double?+?( long double, long double ), 2062 ?-?( long double, long double ); 2063 _Complex float?+?( _Complex float, float ), 2064 ?-?( _Complex float, float ), 2065 ?+?( float, _Complex float ), 2066 ?-?( float, _Complex float ), 2067 ?+?( _Complex float, _Complex float ), 2068 ?-?( _Complex float, _Complex float ); 2069 _Complex double?+?( _Complex double, double ), 2070 ?-?( _Complex double, double ), 2071 ?+?( double, _Complex double ), 2072 ?-?( double, _Complex double ), 2073 ?+?( _Complex double, _Complex double ), 2074 ?-?( _Complex double, _Complex double ); 2075 _Complex long double?+?( _Complex long double, long double ), 2076 ?-?( _Complex long double, long double ), 2077 ?+?( long double, _Complex long double ), 2078 ?-?( long double, _Complex long double ), 2079 ?+?( _Complex long double, _Complex long double ), 2080 ?-?( _Complex long double, _Complex long double ); 2081 2082 forall( type T ) T 2083 * ?+?( T *, ptrdiff_t ), 2084 * ?+?( ptrdiff_t, T * ), 2085 * ?-?( T *, ptrdiff_t ); 2086 2087 forall( type T ) _Atomic T 2088 * ?+?( _Atomic T *, ptrdiff_t ), 2089 * ?+?( ptrdiff_t, _Atomic T * ), 1709 float?+?( float, float ), ?-?( float, float ); 1710 double?+?( double, double ), ?-?( double, double ); 1711 long double?+?( long double, long double ), ?-?( long double, long double ); 1712 _Complex float?+?( _Complex float, float ), ?-?( _Complex float, float ), 1713 ?+?( float, _Complex float ), ?-?( float, _Complex float ), 1714 ?+?( _Complex float, _Complex float ), ?-?( _Complex float, _Complex float ); 1715 _Complex double?+?( _Complex double, double ), ?-?( _Complex double, double ), 1716 ?+?( double, _Complex double ), ?-?( double, _Complex double ), 1717 ?+?( _Complex double, _Complex double ), ?-?( _Complex double, _Complex double ); 1718 _Complex long double?+?( _Complex long double, long double ), ?-?( _Complex long double, long double ), 1719 ?+?( long double, _Complex long double ), ?-?( long double, _Complex long double ), 1720 ?+?( _Complex long double, _Complex long double ), ?-?( _Complex long double, _Complex long double ); 1721 1722 forall( otype T ) T * ?+?( T *, ptrdiff_t ), * ?+?( ptrdiff_t, T * ), * ?-?( T *, ptrdiff_t ); 1723 forall( otype T ) _Atomic T * ?+?( _Atomic T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic T * ), 2090 1724 * ?-?( _Atomic T *, ptrdiff_t ); 2091 2092 forall( type T ) const T 2093 * ?+?( const T *, ptrdiff_t ), 2094 * ?+?( ptrdiff_t, const T * ), 1725 forall( otype T ) const T * ?+?( const T *, ptrdiff_t ), * ?+?( ptrdiff_t, const T * ), 2095 1726 * ?-?( const T *, ptrdiff_t ); 2096 2097 forall( type T ) restrict T 2098 * ?+?( restrict T *, ptrdiff_t ), 2099 * ?+?( ptrdiff_t, restrict T * ), 1727 forall( otype T ) restrict T * ?+?( restrict T *, ptrdiff_t ), * ?+?( ptrdiff_t, restrict T * ), 2100 1728 * ?-?( restrict T *, ptrdiff_t ); 2101 2102 forall( type T ) volatile T 2103 * ?+?( volatile T *, ptrdiff_t ), 2104 * ?+?( ptrdiff_t, volatile T * ), 1729 forall( otype T ) volatile T * ?+?( volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, volatile T * ), 2105 1730 * ?-?( volatile T *, ptrdiff_t ); 2106 2107 forall( type T ) _Atomic const T 2108 * ?+?( _Atomic const T *, ptrdiff_t ), 2109 * ?+?( ptrdiff_t, _Atomic const T * ), 1731 forall( otype T ) _Atomic const T * ?+?( _Atomic const T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic const T * ), 2110 1732 * ?-?( _Atomic const T *, ptrdiff_t ); 2111 2112 forall( type T ) _Atomic restrict T 2113 * ?+?( _Atomic restrict T *, ptrdiff_t ), 2114 * ?+?( ptrdiff_t, _Atomic restrict T * ), 1733 forall( otype T ) _Atomic restrict T * ?+?( _Atomic restrict T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic restrict T * ), 2115 1734 * ?-?( _Atomic restrict T *, ptrdiff_t ); 2116 2117 forall( type T ) _Atomic volatile T 2118 * ?+?( _Atomic volatile T *, ptrdiff_t ), 2119 * ?+?( ptrdiff_t, _Atomic volatile T * ), 1735 forall( otype T ) _Atomic volatile T * ?+?( _Atomic volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic volatile T * ), 2120 1736 * ?-?( _Atomic volatile T *, ptrdiff_t ); 2121 2122 forall( type T ) const restrict T 2123 * ?+?( const restrict T *, ptrdiff_t ), 2124 * ?+?( ptrdiff_t, const restrict T * ), 1737 forall( otype T ) const restrict T * ?+?( const restrict T *, ptrdiff_t ), * ?+?( ptrdiff_t, const restrict T * ), 2125 1738 * ?-?( const restrict T *, ptrdiff_t ); 2126 2127 forall( type T ) const volatile T 2128 * ?+?( const volatile T *, ptrdiff_t ), 2129 * ?+?( ptrdiff_t, const volatile T * ), 1739 forall( otype T ) const volatile T * ?+?( const volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, const volatile T * ), 2130 1740 * ?-?( const volatile T *, ptrdiff_t ); 2131 2132 forall( type T ) restrict volatile T 2133 * ?+?( restrict volatile T *, ptrdiff_t ), 2134 * ?+?( ptrdiff_t, restrict volatile T * ), 1741 forall( otype T ) restrict volatile T * ?+?( restrict volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, restrict volatile T * ), 2135 1742 * ?-?( restrict volatile T *, ptrdiff_t ); 2136 2137 forall( type T ) _Atomic const restrict T 2138 * ?+?( _Atomic const restrict T *, ptrdiff_t ), 1743 forall( otype T ) _Atomic const restrict T * ?+?( _Atomic const restrict T *, ptrdiff_t ), 2139 1744 * ?+?( ptrdiff_t, _Atomic const restrict T * ), 2140 1745 * ?-?( _Atomic const restrict T *, ptrdiff_t ); 2141 2142 forall( type T ) ptrdiff_t 1746 forall( otype T ) ptrdiff_t 2143 1747 * ?-?( const restrict volatile T *, const restrict volatile T * ), 2144 1748 * ?-?( _Atomic const restrict volatile T *, _Atomic const restrict volatile T * ); 2145 1749 \end{lstlisting} 2146 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the 2147 rank of \lstinline$int$ there exist 1750 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 2148 1751 % Don't use predefined: keep this out of prelude.cf. 2149 1752 \begin{lstlisting} … … 2152 1755 2153 1756 \semantics 2154 The interpretations of additive expressions are the interpretations of the corresponding function 2155 calls. 2156 2157 \begin{rationale} 2158 \lstinline$ptrdiff_t$ is an implementation-defined identifier defined in \lstinline$<stddef.h>$ that 2159 is synonymous with a signed integral type that is large enough to hold the difference between two 2160 pointers. It seems reasonable to use it for pointer addition as well. (This is technically a 2161 difference between \CFA and C, which only specifies that pointer addition uses an \emph{integral} 2162 argument.) Hence it is also used for subscripting, which is defined in terms of pointer addition. 2163 The {\c11} standard uses \lstinline$size_t$ in several cases where a library function takes an 2164 argument that is used as a subscript, but \lstinline$size_t$ is unsuitable here because it is an 2165 unsigned type. 1757 The interpretations of additive expressions are the interpretations of the corresponding function calls. 1758 1759 \begin{rationale} 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. 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. 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. 2166 1763 \end{rationale} 2167 1764 … … 2184 1781 \predefined 2185 1782 \begin{lstlisting} 2186 int ?<<?( int, int ), 2187 ?>>?( int, int ); 2188 unsigned int ?<<?( unsigned int, int ), 2189 ?>>?( unsigned int, int ); 2190 long int ?<<?( long int, int ), 2191 ?>>?( long int, int ); 2192 long unsigned int ?<<?( long unsigned int, int ), 2193 ?>>?( long unsigned int, int ); 2194 long long int ?<<?( long long int, int ), 2195 ?>>?( long long int, int ); 2196 long long unsigned int ?<<?( long long unsigned int, int ), 2197 ?>>?( long long unsigned int, int); 2198 \end{lstlisting} 2199 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the 2200 rank of \lstinline$int$ there exist 1783 int ?<<?( int, int ), ?>>?( int, int ); 1784 unsigned int ?<<?( unsigned int, int ), ?>>?( unsigned int, int ); 1785 long int ?<<?( long int, int ), ?>>?( long int, int ); 1786 long unsigned int ?<<?( long unsigned int, int ), ?>>?( long unsigned int, int ); 1787 long long int ?<<?( long long int, int ), ?>>?( long long int, int ); 1788 long long unsigned int ?<<?( long long unsigned int, int ), ?>>?( long long unsigned int, int); 1789 \end{lstlisting} 1790 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 2201 1791 % Don't use predefined: keep this out of prelude.cf. 2202 1792 \begin{lstlisting} … … 2205 1795 2206 1796 \begin{rationale} 2207 The bitwise shift operators break the usual pattern: they do not convert both operands to a common 2208 type.The right operand only undergoes \Index{integer promotion}.1797 The bitwise shift operators break the usual pattern: they do not convert both operands to a common type. 1798 The right operand only undergoes \Index{integer promotion}. 2209 1799 \end{rationale} 2210 1800 2211 1801 \semantics 2212 The interpretations of a bitwise shift expression are the interpretations of the corresponding 2213 function calls. 1802 The interpretations of a bitwise shift expression are the interpretations of the corresponding function calls. 2214 1803 2215 1804 … … 2235 1824 \predefined 2236 1825 \begin{lstlisting} 2237 int ?<?( int, int ), 2238 ?<=?( int, int ), 2239 ?>?( int, int ), 2240 ?>=?( int, int ); 2241 int ?<?( unsigned int, unsigned int ), 2242 ?<=?( unsigned int, unsigned int ), 2243 ?>?( unsigned int, unsigned int ), 2244 ?>=?( unsigned int, unsigned int ); 2245 int ?<?( long int, long int ), 2246 ?<=?( long int, long int ), 2247 ?>?( long int, long int ), 2248 ?>=?( long int, long int ); 2249 int ?<?( long unsigned int, long unsigned ), 2250 ?<=?( long unsigned int, long unsigned ), 2251 ?>?( long unsigned int, long unsigned ), 2252 ?>=?( long unsigned int, long unsigned ); 2253 int ?<?( long long int, long long int ), 2254 ?<=?( long long int, long long int ), 2255 ?>?( long long int, long long int ), 2256 ?>=?( long long int, long long int ); 2257 int ?<?( long long unsigned int, long long unsigned ), 2258 ?<=?( long long unsigned int, long long unsigned ), 2259 ?>?( long long unsigned int, long long unsigned ), 2260 ?>=?( long long unsigned int, long long unsigned ); 2261 int ?<?( float, float ), 2262 ?<=?( float, float ), 2263 ?>?( float, float ), 2264 ?>=?( float, float ); 2265 int ?<?( double, double ), 2266 ?<=?( double, double ), 2267 ?>?( double, double ), 2268 ?>=?( double, double ); 2269 int ?<?( long double, long double ), 2270 ?<=?( long double, long double ), 2271 ?>?( long double, long double ), 2272 ?>=?( long double, long double ); 2273 2274 forall( dtype DT ) int 2275 ?<?( const restrict volatile DT *, const restrict volatile DT * ), 1826 int ?<?( int, int ), ?<=?( int, int ), 1827 ?>?( int, int ), ?>=?( int, int ); 1828 int ?<?( unsigned int, unsigned int ), ?<=?( unsigned int, unsigned int ), 1829 ?>?( unsigned int, unsigned int ), ?>=?( unsigned int, unsigned int ); 1830 int ?<?( long int, long int ), ?<=?( long int, long int ), 1831 ?>?( long int, long int ), ?>=?( long int, long int ); 1832 int ?<?( long unsigned int, long unsigned ), ?<=?( long unsigned int, long unsigned ), 1833 ?>?( long unsigned int, long unsigned ), ?>=?( long unsigned int, long unsigned ); 1834 int ?<?( long long int, long long int ), ?<=?( long long int, long long int ), 1835 ?>?( long long int, long long int ), ?>=?( long long int, long long int ); 1836 int ?<?( long long unsigned int, long long unsigned ), ?<=?( long long unsigned int, long long unsigned ), 1837 ?>?( long long unsigned int, long long unsigned ), ?>=?( long long unsigned int, long long unsigned ); 1838 int ?<?( float, float ), ?<=?( float, float ), 1839 ?>?( float, float ), ?>=?( float, float ); 1840 int ?<?( double, double ), ?<=?( double, double ), 1841 ?>?( double, double ), ?>=?( double, double ); 1842 int ?<?( long double, long double ), ?<=?( long double, long double ), 1843 ?>?( long double, long double ), ?>=?( long double, long double ); 1844 forall( dtype DT ) int ?<?( const restrict volatile DT *, const restrict volatile DT * ), 2276 1845 ?<?( _Atomic const restrict volatile DT *, _Atomic const restrict volatile DT * ), 2277 1846 ?<=?( const restrict volatile DT *, const restrict volatile DT * ), … … 2282 1851 ?>=?( _Atomic const restrict volatile DT *, _Atomic const restrict volatile DT * ); 2283 1852 \end{lstlisting} 2284 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the 2285 rank of \lstinline$int$ there exist 1853 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 2286 1854 % Don't use predefined: keep this out of prelude.cf. 2287 1855 \begin{lstlisting} … … 2293 1861 2294 1862 \semantics 2295 The interpretations of a relational expression are the interpretations of the corresponding function 2296 call. 1863 The interpretations of a relational expression are the interpretations of the corresponding function call. 2297 1864 2298 1865 … … 2314 1881 \predefined 2315 1882 \begin{lstlisting} 2316 int ?==?( int, int ), 2317 ?!=?( int, int ), 2318 ?==?( unsigned int, unsigned int ), 2319 ?!=?( unsigned int, unsigned int ), 2320 ?==?( long int, long int ), 2321 ?!=?( long int, long int ), 2322 ?==?( long unsigned int, long unsigned int ), 2323 ?!=?( long unsigned int, long unsigned int ), 2324 ?==?( long long int, long long int ), 2325 ?!=?( long long int, long long int ), 2326 ?==?( long long unsigned int, long long unsigned int ), 2327 ?!=?( long long unsigned int, long long unsigned int ), 2328 ?==?( float, float ), 2329 ?!=?( float, float ), 2330 ?==?( _Complex float, float ), 2331 ?!=?( _Complex float, float ), 2332 ?==?( float, _Complex float ), 2333 ?!=?( float, _Complex float ), 2334 ?==?( _Complex float, _Complex float ), 2335 ?!=?( _Complex float, _Complex float ), 2336 ?==?( double, double ), 2337 ?!=?( double, double ), 2338 ?==?( _Complex double, double ), 2339 ?!=?( _Complex double, double ), 2340 ?==?( double, _Complex double ), 2341 ?!=?( double, _Complex double ), 2342 ?==?( _Complex double, _Complex double ), 2343 ?!=?( _Complex double, _Complex double ), 2344 ?==?( long double, long double ), 2345 ?!=?( long double, long double ), 2346 ?==?( _Complex long double, long double ), 2347 ?!=?( _Complex long double, long double ), 2348 ?==?( long double, _Complex long double ), 2349 ?!=?( long double, _Complex long double ), 2350 ?==?( _Complex long double, _Complex long double ), 2351 ?!=?( _Complex long double, _Complex long double ); 2352 1883 int ?==?( int, int ), ?!=?( int, int ), 1884 ?==?( unsigned int, unsigned int ), ?!=?( unsigned int, unsigned int ), 1885 ?==?( long int, long int ), ?!=?( long int, long int ), 1886 ?==?( long unsigned int, long unsigned int ), ?!=?( long unsigned int, long unsigned int ), 1887 ?==?( long long int, long long int ), ?!=?( long long int, long long int ), 1888 ?==?( long long unsigned int, long long unsigned int ), ?!=?( long long unsigned int, long long unsigned int ), 1889 ?==?( float, float ), ?!=?( float, float ), 1890 ?==?( _Complex float, float ), ?!=?( _Complex float, float ), 1891 ?==?( float, _Complex float ), ?!=?( float, _Complex float ), 1892 ?==?( _Complex float, _Complex float ), ?!=?( _Complex float, _Complex float ), 1893 ?==?( double, double ), ?!=?( double, double ), 1894 ?==?( _Complex double, double ), ?!=?( _Complex double, double ), 1895 ?==?( double, _Complex double ), ?!=?( double, _Complex double ), 1896 ?==?( _Complex double, _Complex double ), ?!=?( _Complex double, _Complex double ), 1897 ?==?( long double, long double ), ?!=?( long double, long double ), 1898 ?==?( _Complex long double, long double ), ?!=?( _Complex long double, long double ), 1899 ?==?( long double, _Complex long double ), ?!=?( long double, _Complex long double ), 1900 ?==?( _Complex long double, _Complex long double ), ?!=?( _Complex long double, _Complex long double ); 2353 1901 forall( dtype DT ) int 2354 1902 ?==?( const restrict volatile DT *, const restrict volatile DT * ), … … 2375 1923 ?==?( forall( dtype DT2) const DT2*, _Atomic const restrict volatile DT * ), 2376 1924 ?!=?( forall( dtype DT2) const DT2*, _Atomic const restrict volatile DT * ); 2377 2378 1925 forall( ftype FT ) int 2379 ?==?( FT *, FT * ), 2380 ?!=?( FT *, FT * ), 2381 ?==?( FT *, forall( ftype FT2) FT2 * ), 2382 ?!=?( FT *, forall( ftype FT2) FT2 * ), 2383 ?==?( forall( ftype FT2) FT2*, FT * ), 2384 ?!=?( forall( ftype FT2) FT2*, FT * ), 2385 ?==?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * ), 2386 ?!=?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * ); 2387 \end{lstlisting} 2388 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the 2389 rank of \lstinline$int$ there exist 1926 ?==?( FT *, FT * ), ?!=?( FT *, FT * ), 1927 ?==?( FT *, forall( ftype FT2) FT2 * ), ?!=?( FT *, forall( ftype FT2) FT2 * ), 1928 ?==?( forall( ftype FT2) FT2*, FT * ), ?!=?( forall( ftype FT2) FT2*, FT * ), 1929 ?==?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * ), ?!=?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * ); 1930 \end{lstlisting} 1931 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 2390 1932 % Don't use predefined: keep this out of prelude.cf. 2391 1933 \begin{lstlisting} … … 2395 1937 2396 1938 \begin{rationale} 2397 The polymorphic equality operations come in three styles: comparisons between pointers of compatible 2398 types, between pointers to \lstinline$void$ and pointers to object types or incomplete types, and 2399 between the \Index{null pointer} constant and pointers to any type. In the last case, a special 2400 constraint rule for null pointer constant operands has been replaced by a consequence of the \CFA 2401 type system. 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. 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. 2402 1941 \end{rationale} 2403 1942 2404 1943 \semantics 2405 The interpretations of an equality expression are the interpretations of the corresponding function 2406 call. 1944 The interpretations of an equality expression are the interpretations of the corresponding function call. 2407 1945 2408 1946 \begin{sloppypar} 2409 The result of an equality comparison between two pointers to predefined functions or predefined 2410 values is implementation-defined. 1947 The result of an equality comparison between two pointers to predefined functions or predefined values is implementation-defined. 2411 1948 \end{sloppypar} 2412 1949 \begin{rationale} 2413 The implementation-defined status of equality comparisons allows implementations to use one library 2414 routine to implement many predefined functions. These optimization are particularly important when 2415 the predefined functions are polymorphic, as is the case for most pointer operations 1950 The implementation-defined status of equality comparisons allows implementations to use one library routine to implement many predefined functions. 1951 These optimization are particularly important when the predefined functions are polymorphic, as is the case for most pointer operations 2416 1952 \end{rationale} 2417 1953 … … 2439 1975 long long unsigned int ?&?( long long unsigned int, long long unsigned int ); 2440 1976 \end{lstlisting} 2441 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the 2442 rank of \lstinline$int$ there exist 1977 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 2443 1978 % Don't use predefined: keep this out of prelude.cf. 2444 1979 \begin{lstlisting} … … 2447 1982 2448 1983 \semantics 2449 The interpretations of a bitwise AND expression are the interpretations of the corresponding 2450 function call. 1984 The interpretations of a bitwise AND expression are the interpretations of the corresponding function call. 2451 1985 2452 1986 … … 2473 2007 long long unsigned int ?^?( long long unsigned int, long long unsigned int ); 2474 2008 \end{lstlisting} 2475 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the 2476 rank of \lstinline$int$ there exist 2009 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 2477 2010 % Don't use predefined: keep this out of prelude.cf. 2478 2011 \begin{lstlisting} … … 2481 2014 2482 2015 \semantics 2483 The interpretations of a bitwise exclusive OR expression are the interpretations of the 2484 corresponding function call. 2016 The interpretations of a bitwise exclusive OR expression are the interpretations of the corresponding function call. 2485 2017 2486 2018 … … 2507 2039 long long unsigned int ?|?( long long unsigned int, long long unsigned int ); 2508 2040 \end{lstlisting} 2509 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the 2510 rank of \lstinline$int$ there exist 2041 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 2511 2042 % Don't use predefined: keep this out of prelude.cf. 2512 2043 \begin{lstlisting} … … 2515 2046 2516 2047 \semantics 2517 The interpretations of a bitwise inclusive OR expression are the interpretations of the 2518 corresponding function call. 2048 The interpretations of a bitwise inclusive OR expression are the interpretations of the corresponding function call. 2519 2049 2520 2050 … … 2528 2058 2529 2059 \semantics The operands of the expression ``\lstinline$a && b$'' are treated as 2530 ``\lstinline$(int)((a)!=0)$'' and ``\lstinline$(int)((b)!=0)$'', which shall both be 2531 unambiguous. The expression has only one interpretation, which is of type \lstinline$int$. 2532 \begin{rationale} 2533 When the operands of a logical expression are values of built-in types, and ``\lstinline$!=$'' has 2534 not been redefined for those types, the compiler can optimize away the function calls. 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. 2535 2064 2536 2065 A common C idiom omits comparisons to \lstinline$0$ in the controlling expressions of loops and 2537 \lstinline$if$ statements. For instance, the loop below iterates as long as \lstinline$rp$ points2538 at a \lstinline$Rational$ value that is non-zero.2539 2540 \begin{lstlisting} 2541 extern type Rational;@\use{Rational}@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}@ 2542 2071 extern const Rational 0;@\use{0}@ 2543 2072 extern int ?!=?( Rational, Rational ); 2544 2073 Rational *rp; 2545 2546 2074 while ( rp && *rp ) { ... } 2547 2075 \end{lstlisting} 2548 The logical expression calls the \lstinline$Rational$ inequality operator, passing 2549 it \lstinline$*rp$ and the \lstinline$Rational 0$, and getting a 1 or 0 as a result. In 2550 contrast, {\CC} would apply a programmer-defined \lstinline$Rational$-to-\lstinline$int$ 2551 conversion to \lstinline$*rp$ in the equivalent situation. The conversion to \lstinline$int$ would 2552 produce a general integer value, which is unfortunate, and possibly dangerous if the conversion was 2553 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. 2554 2079 \end{rationale} 2555 2080 … … 2565 2090 \semantics 2566 2091 2567 The operands of the expression ``\lstinline$a || b$'' are treated as ``\lstinline$(int)((a)!=0)$'' 2568 and ``\lstinline$(int)((b))!=0)$'', which shall both be unambiguous. The expression has only one 2569 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$. 2570 2094 2571 2095 … … 2580 2104 2581 2105 \semantics 2582 In the conditional expression\use{?:} ``\lstinline$a?b:c$'', if the second and 2583 third operands both have an interpretation with \lstinline$void$ type, then the expression has an 2584 interpretation with type \lstinline$void$, equivalent to 2106 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 2585 2107 \begin{lstlisting} 2586 2108 ( int)(( a)!=0) ? ( void)( b) : ( void)( c) 2587 2109 \end{lstlisting} 2588 2110 2589 If the second and third operands both have interpretations with non-\lstinline$void$ types, the 2590 expression is treated as if it were the call ``\lstinline$cond((a)!=0, b, c)$'', 2591 with \lstinline$cond$ declared as 2592 \begin{lstlisting} 2593 forall( type T ) T cond( int, T, T ); 2594 2595 forall( dtype D ) void 2596 * cond( int, D *, void * ), 2597 * cond( int, void *, D * ); 2598 2599 forall( dtype D ) _atomic void 2600 * cond( int, _Atomic D *, _Atomic void * ), 2601 * cond( int, _Atomic void *, _Atomic D * ); 2602 2603 forall( dtype D ) const void 2604 * cond( int, const D *, const void * ), 2605 * cond( int, const void *, const D * ); 2606 2607 forall( dtype D ) restrict void 2608 * cond( int, restrict D *, restrict void * ), 2609 * cond( int, restrict void *, restrict D * ); 2610 2611 forall( dtype D ) volatile void 2612 * cond( int, volatile D *, volatile void * ), 2613 * cond( int, volatile void *, volatile D * ); 2614 2615 forall( dtype D ) _Atomic const void 2616 * cond( int, _Atomic const D *, _Atomic const void * ), 2617 * cond( int, _Atomic const void *, _Atomic const D * ); 2618 2619 forall( dtype D ) _Atomic restrict void 2620 * cond( int, _Atomic restrict D *, _Atomic restrict void * ), 2621 * cond( int, _Atomic restrict void *, _Atomic restrict D * ); 2622 2623 forall( dtype D ) _Atomic volatile void 2624 * cond( int, _Atomic volatile D *, _Atomic volatile void * ), 2625 * cond( int, _Atomic volatile void *, _Atomic volatile D * ); 2626 2627 forall( dtype D ) const restrict void 2628 * cond( int, const restrict D *, const restrict void * ), 2629 * cond( int, const restrict void *, const restrict D * ); 2630 2631 forall( dtype D ) const volatile void 2632 * cond( int, const volatile D *, const volatile void * ), 2633 * cond( int, const volatile void *, const volatile D * ); 2634 2635 forall( dtype D ) restrict volatile void 2636 * cond( int, restrict volatile D *, restrict volatile void * ), 2637 * cond( int, restrict volatile void *, restrict volatile D * ); 2638 2639 forall( dtype D ) _Atomic const restrict void 2640 * cond( int, _Atomic const restrict D *, _Atomic const restrict void * ), 2111 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 2112 \begin{lstlisting} 2113 forall( otype T ) T cond( int, T, T ); 2114 forall( dtype D ) void * cond( int, D *, void * ), * cond( int, void *, D * ); 2115 forall( dtype D ) _atomic void * cond( 2116 int, _Atomic D *, _Atomic void * ), * cond( int, _Atomic void *, _Atomic D * ); 2117 forall( dtype D ) const void * cond( 2118 int, const D *, const void * ), * cond( int, const void *, const D * ); 2119 forall( dtype D ) restrict void * cond( 2120 int, restrict D *, restrict void * ), * cond( int, restrict void *, restrict D * ); 2121 forall( dtype D ) volatile void * cond( 2122 int, volatile D *, volatile void * ), * cond( int, volatile void *, volatile D * ); 2123 forall( dtype D ) _Atomic const void * cond( 2124 int, _Atomic const D *, _Atomic const void * ), * cond( int, _Atomic const void *, _Atomic const D * ); 2125 forall( dtype D ) _Atomic restrict void * cond( 2126 int, _Atomic restrict D *, _Atomic restrict void * ), * cond( int, _Atomic restrict void *, _Atomic restrict D * ); 2127 forall( dtype D ) _Atomic volatile void * cond( 2128 int, _Atomic volatile D *, _Atomic volatile void * ), * cond( int, _Atomic volatile void *, _Atomic volatile D * ); 2129 forall( dtype D ) const restrict void * cond( 2130 int, const restrict D *, const restrict void * ), * cond( int, const restrict void *, const restrict D * ); 2131 forall( dtype D ) const volatile void * cond( 2132 int, const volatile D *, const volatile void * ), * cond( int, const volatile void *, const volatile D * ); 2133 forall( dtype D ) restrict volatile void * cond( 2134 int, restrict volatile D *, restrict volatile void * ), * cond( int, restrict volatile void *, restrict volatile D * ); 2135 forall( dtype D ) _Atomic const restrict void * cond( 2136 int, _Atomic const restrict D *, _Atomic const restrict void * ), 2641 2137 * cond( int, _Atomic const restrict void *, _Atomic const restrict D * ); 2642 2643 forall( dtype D ) _Atomic const volatile void 2644 * cond( int, _Atomic const volatile D *, _Atomic const volatile void * ), 2138 forall( dtype D ) _Atomic const volatile void * cond( 2139 int, _Atomic const volatile D *, _Atomic const volatile void * ), 2645 2140 * cond( int, _Atomic const volatile void *, _Atomic const volatile D * ); 2646 2647 forall( dtype D ) _Atomic restrict volatile void 2648 * cond( int, _Atomic restrict volatile D *, 2649 _Atomic restrict volatile void * ), 2650 * cond( int, _Atomic restrict volatile void *, 2651 _Atomic restrict volatile D * ); 2652 2653 forall( dtype D ) const restrict volatile void 2654 * cond( int, const restrict volatile D *, 2655 const restrict volatile void * ), 2656 * cond( int, const restrict volatile void *, 2657 const restrict volatile D * ); 2658 2659 forall( dtype D ) _Atomic const restrict volatile void 2660 * cond( int, _Atomic const restrict volatile D *, 2661 _Atomic const restrict volatile void * ), 2662 * cond( int, _Atomic const restrict volatile void *, 2663 _Atomic const restrict volatile D * ); 2664 \end{lstlisting} 2665 2666 \begin{rationale} 2667 The object of the above is to apply the \Index{usual arithmetic conversion}s when the second and 2668 third operands have arithmetic type, and to combine the qualifiers of the second and third operands 2669 if they are pointers. 2141 forall( dtype D ) _Atomic restrict volatile void * cond( 2142 int, _Atomic restrict volatile D *, _Atomic restrict volatile void * ), 2143 * cond( int, _Atomic restrict volatile void *, _Atomic restrict volatile D * ); 2144 forall( dtype D ) const restrict volatile void * cond( 2145 int, const restrict volatile D *, const restrict volatile void * ), 2146 * cond( int, const restrict volatile void *, const restrict volatile D * ); 2147 forall( dtype D ) _Atomic const restrict volatile void * cond( 2148 int, _Atomic const restrict volatile D *, _Atomic const restrict volatile void * ), 2149 * cond( int, _Atomic const restrict volatile void *, _Atomic const restrict volatile D * ); 2150 \end{lstlisting} 2151 2152 \begin{rationale} 2153 The object of the above is to apply the \Index{usual arithmetic conversion}s when the second and third operands have arithmetic type, and to combine the qualifiers of the second and third operands if they are pointers. 2670 2154 \end{rationale} 2671 2155 … … 2685 2169 rand() ? cip : vip; 2686 2170 \end{lstlisting} 2687 The expression has type \lstinline$const volatile int *$, with safe conversions applied to the second 2688 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. 2689 2172 2690 2173 \begin{lstlisting} … … 2708 2191 2709 2192 \rewriterules 2710 Let ``\(\leftarrow\)'' be any of the assignment operators. Then 2193 Let ``\(\leftarrow\)'' be any of the assignment operators. 2194 Then 2711 2195 \use{?=?}\use{?*=?}\use{?/=?}\use{?%=?}\use{?+=?}\use{?-=?} 2712 2196 \use{?>>=?}\use{?&=?}\use{?^=?}\use{?"|=?}%use{?<<=?} … … 2716 2200 2717 2201 \semantics 2718 Each interpretation of the left operand of an assignment expression is considered separately. For 2719 each interpretation that is a bit-field or is declared with the \lstinline$register$ storage class 2720 specifier, the expression has one valid interpretation, with the type of the left operand. The 2721 right operand is cast to that type, and the assignment expression is ambiguous if either operand is. 2722 For the remaining interpretations, the expression is rewritten, and the interpretations of the 2723 assignment expression are the interpretations of the corresponding function call. Finally, all 2724 interpretations of the expression produced for the different interpretations of the left operand are 2725 combined to produce the interpretations of the expression as a whole; where interpretations have 2726 compatible result types, the best interpretations are selected in the manner described for function 2727 call expressions. 2202 Each interpretation of the left operand of an assignment expression is considered separately. 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. 2204 The right operand is cast to that type, and the assignment expression is ambiguous if either operand is. 2205 For the remaining interpretations, the expression is rewritten, and the interpretations of the assignment expression are the interpretations of the corresponding function call. 2206 Finally, all interpretations of the expression produced for the different interpretations of the left operand are combined to produce the interpretations of the expression as a whole; 2207 where interpretations have compatible result types, the best interpretations are selected in the manner described for function call expressions. 2728 2208 2729 2209 … … 2790 2270 ?=?( volatile _Complex long double *, _Complex long double ), 2791 2271 ?=?( _Atomic volatile _Complex long double *, _Atomic _Complex long double ); 2792 2793 2272 forall( ftype FT ) FT 2794 2273 * ?=?( FT * volatile *, FT * ), 2795 2274 * ?=?( FT * volatile *, forall( ftype F ) F * ); 2796 2797 2275 forall( ftype FT ) FT const 2798 2276 * ?=?( FT const * volatile *, FT const * ), 2799 2277 * ?=?( FT const * volatile *, forall( ftype F ) F * ); 2800 2801 2278 forall( ftype FT ) FT volatile 2802 2279 * ?=?( FT volatile * volatile *, FT * ), 2803 2280 * ?=?( FT volatile * volatile *, forall( ftype F ) F * ); 2804 2805 2281 forall( ftype FT ) FT const 2806 2282 * ?=?( FT const volatile * volatile *, FT const * ), 2807 2283 * ?=?( FT const volatile * volatile *, forall( ftype F ) F * ); 2808 2809 2284 forall( dtype DT ) DT 2810 2285 * ?=?( DT * restrict volatile *, DT * ), … … 2814 2289 * ?=?( DT * _Atomic restrict volatile *, void * ), 2815 2290 * ?=?( DT * _Atomic restrict volatile *, forall( dtype D ) D * ); 2816 2817 2291 forall( dtype DT ) DT _Atomic 2818 2292 * ?=?( _Atomic DT * restrict volatile *, DT _Atomic * ), … … 2822 2296 * ?=?( _Atomic DT * _Atomic restrict volatile *, void * ), 2823 2297 * ?=?( _Atomic DT * _Atomic restrict volatile *, forall( dtype D ) D * ); 2824 2825 2298 forall( dtype DT ) DT const 2826 2299 * ?=?( DT const * restrict volatile *, DT const * ), … … 2830 2303 * ?=?( DT const * _Atomic restrict volatile *, void const * ), 2831 2304 * ?=?( DT const * _Atomic restrict volatile *, forall( dtype D ) D * ); 2832 2833 2305 forall( dtype DT ) DT restrict 2834 2306 * ?=?( restrict DT * restrict volatile *, DT restrict * ), … … 2838 2310 * ?=?( restrict DT * _Atomic restrict volatile *, void * ), 2839 2311 * ?=?( restrict DT * _Atomic restrict volatile *, forall( dtype D ) D * ); 2840 2841 2312 forall( dtype DT ) DT volatile 2842 2313 * ?=?( DT volatile * restrict volatile *, DT volatile * ), … … 2846 2317 * ?=?( DT volatile * _Atomic restrict volatile *, void volatile * ), 2847 2318 * ?=?( DT volatile * _Atomic restrict volatile *, forall( dtype D ) D * ); 2848 2849 2319 forall( dtype DT ) DT _Atomic const 2850 2320 * ?=?( DT _Atomic const * restrict volatile *, DT _Atomic const * ), … … 2854 2324 * ?=?( DT _Atomic const * _Atomic restrict volatile *, void const * ), 2855 2325 * ?=?( DT _Atomic const * _Atomic restrict volatile *, forall( dtype D ) D * ); 2856 2857 2326 forall( dtype DT ) DT _Atomic restrict 2858 2327 * ?=?( _Atomic restrict DT * restrict volatile *, DT _Atomic restrict * ), … … 2862 2331 * ?=?( _Atomic restrict DT * _Atomic restrict volatile *, void * ), 2863 2332 * ?=?( _Atomic restrict DT * _Atomic restrict volatile *, forall( dtype D ) D * ); 2864 2865 2333 forall( dtype DT ) DT _Atomic volatile 2866 2334 * ?=?( DT _Atomic volatile * restrict volatile *, DT _Atomic volatile * ), … … 2870 2338 * ?=?( DT _Atomic volatile * _Atomic restrict volatile *, void volatile * ), 2871 2339 * ?=?( DT _Atomic volatile * _Atomic restrict volatile *, forall( dtype D ) D * ); 2872 2873 2340 forall( dtype DT ) DT const restrict 2874 2341 * ?=?( DT const restrict * restrict volatile *, DT const restrict * ), … … 2878 2345 * ?=?( DT const restrict * _Atomic restrict volatile *, void const * ), 2879 2346 * ?=?( DT const restrict * _Atomic restrict volatile *, forall( dtype D ) D * ); 2880 2881 2347 forall( dtype DT ) DT const volatile 2882 2348 * ?=?( DT const volatile * restrict volatile *, DT const volatile * ), … … 2886 2352 * ?=?( DT const volatile * _Atomic restrict volatile *, void const volatile * ), 2887 2353 * ?=?( DT const volatile * _Atomic restrict volatile *, forall( dtype D ) D * ); 2888 2889 2354 forall( dtype DT ) DT restrict volatile 2890 2355 * ?=?( DT restrict volatile * restrict volatile *, DT restrict volatile * ), … … 2894 2359 * ?=?( DT restrict volatile * _Atomic restrict volatile *, void volatile * ), 2895 2360 * ?=?( DT restrict volatile * _Atomic restrict volatile *, forall( dtype D ) D * ); 2896 2897 2361 forall( dtype DT ) DT _Atomic const restrict 2898 2362 * ?=?( DT _Atomic const restrict * restrict volatile *, … … 2908 2372 * ?=?( DT _Atomic const restrict * _Atomic restrict volatile *, 2909 2373 forall( dtype D ) D * ); 2910 2911 2374 forall( dtype DT ) DT _Atomic const volatile 2912 2375 * ?=?( DT _Atomic const volatile * restrict volatile *, … … 2922 2385 * ?=?( DT _Atomic const volatile * _Atomic restrict volatile *, 2923 2386 forall( dtype D ) D * ); 2924 2925 2387 forall( dtype DT ) DT _Atomic restrict volatile 2926 2388 * ?=?( DT _Atomic restrict volatile * restrict volatile *, … … 2936 2398 * ?=?( DT _Atomic restrict volatile * _Atomic restrict volatile *, 2937 2399 forall( dtype D ) D * ); 2938 2939 2400 forall( dtype DT ) DT const restrict volatile 2940 2401 * ?=?( DT const restrict volatile * restrict volatile *, … … 2950 2411 * ?=?( DT const restrict volatile * _Atomic restrict volatile *, 2951 2412 forall( dtype D ) D * ); 2952 2953 2413 forall( dtype DT ) DT _Atomic const restrict volatile 2954 2414 * ?=?( DT _Atomic const restrict volatile * restrict volatile *, … … 2964 2424 * ?=?( DT _Atomic const restrict volatile * _Atomic restrict volatile *, 2965 2425 forall( dtype D ) D * ); 2966 2967 2426 forall( dtype DT ) void 2968 2427 * ?=?( void * restrict volatile *, DT * ); 2969 2970 2428 forall( dtype DT ) void const 2971 2429 * ?=?( void const * restrict volatile *, DT const * ); 2972 2973 2430 forall( dtype DT ) void volatile 2974 2431 * ?=?( void volatile * restrict volatile *, DT volatile * ); 2975 2976 2432 forall( dtype DT ) void const volatile 2977 2433 * ?=?( void const volatile * restrict volatile *, DT const volatile * ); 2978 2434 \end{lstlisting} 2979 2435 \begin{rationale} 2980 The pattern of overloadings for simple assignment resembles that of pointer increment and decrement, 2981 except that the polymorphic pointer assignment functions declare a \lstinline$dtype$ parameter, 2982 instead of a \lstinline$type$ parameter, because the left operand may be a pointer to an incomplete 2983 type. 2436 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. 2984 2437 \end{rationale} 2985 2438 … … 3006 2459 3007 2460 \semantics 3008 The structure assignment functions provide member-wise assignment; each non-array member and each 3009 element of each array member of the right argument is assigned to the corresponding member or 3010 element of the left argument using the assignment function defined for its type. All other 3011 assignment functions have the same effect as the corresponding C assignment expression. 3012 \begin{rationale} 3013 Note that, by default, union assignment\index{deficiencies!union assignment} uses C semantics---that 3014 is, bitwise copy---even if some of the union members have programmer-defined assignment functions. 2461 The structure assignment functions provide member-wise assignment; 2462 each non-array member and each element of each array member of the right argument is assigned to the corresponding member or element of the left argument using the assignment function defined for its type. 2463 All other assignment functions have the same effect as the corresponding C assignment expression. 2464 \begin{rationale} 2465 Note that, by default, union assignment\index{deficiencies!union assignment} uses C semantics---that is, bitwise copy---even if some of the union members have programmer-defined assignment functions. 3015 2466 \end{rationale} 3016 2467 … … 3020 2471 \predefined 3021 2472 \begin{lstlisting} 3022 forall( type T ) T2473 forall( otype T ) T 3023 2474 * ?+=?( T * restrict volatile *, ptrdiff_t ), 3024 2475 * ?-=?( T * restrict volatile *, ptrdiff_t ), 3025 2476 * ?+=?( T * _Atomic restrict volatile *, ptrdiff_t ), 3026 2477 * ?-=?( T * _Atomic restrict volatile *, ptrdiff_t ); 3027 3028 forall( type T ) T _Atomic 2478 forall( otype T ) T _Atomic 3029 2479 * ?+=?( T _Atomic * restrict volatile *, ptrdiff_t ), 3030 2480 * ?-=?( T _Atomic * restrict volatile *, ptrdiff_t ), 3031 2481 * ?+=?( T _Atomic * _Atomic restrict volatile *, ptrdiff_t ), 3032 2482 * ?-=?( T _Atomic * _Atomic restrict volatile *, ptrdiff_t ); 3033 3034 forall( type T ) T const 2483 forall( otype T ) T const 3035 2484 * ?+=?( T const * restrict volatile *, ptrdiff_t ), 3036 2485 * ?-=?( T const * restrict volatile *, ptrdiff_t ), 3037 2486 * ?+=?( T const * _Atomic restrict volatile *, ptrdiff_t ), 3038 2487 * ?-=?( T const * _Atomic restrict volatile *, ptrdiff_t ); 3039 3040 forall( type T ) T restrict 2488 forall( otype T ) T restrict 3041 2489 * ?+=?( T restrict * restrict volatile *, ptrdiff_t ), 3042 2490 * ?-=?( T restrict * restrict volatile *, ptrdiff_t ), 3043 2491 * ?+=?( T restrict * _Atomic restrict volatile *, ptrdiff_t ), 3044 2492 * ?-=?( T restrict * _Atomic restrict volatile *, ptrdiff_t ); 3045 3046 forall( type T ) T volatile 2493 forall( otype T ) T volatile 3047 2494 * ?+=?( T volatile * restrict volatile *, ptrdiff_t ), 3048 2495 * ?-=?( T volatile * restrict volatile *, ptrdiff_t ), 3049 2496 * ?+=?( T volatile * _Atomic restrict volatile *, ptrdiff_t ), 3050 2497 * ?-=?( T volatile * _Atomic restrict volatile *, ptrdiff_t ); 3051 3052 forall( type T ) T _Atomic const 2498 forall( otype T ) T _Atomic const 3053 2499 * ?+=?( T _Atomic const restrict volatile *, ptrdiff_t ), 3054 2500 * ?-=?( T _Atomic const restrict volatile *, ptrdiff_t ), 3055 2501 * ?+=?( T _Atomic const _Atomic restrict volatile *, ptrdiff_t ), 3056 2502 * ?-=?( T _Atomic const _Atomic restrict volatile *, ptrdiff_t ); 3057 3058 forall( type T ) T _Atomic restrict 2503 forall( otype T ) T _Atomic restrict 3059 2504 * ?+=?( T _Atomic restrict * restrict volatile *, ptrdiff_t ), 3060 2505 * ?-=?( T _Atomic restrict * restrict volatile *, ptrdiff_t ), 3061 2506 * ?+=?( T _Atomic restrict * _Atomic restrict volatile *, ptrdiff_t ), 3062 2507 * ?-=?( T _Atomic restrict * _Atomic restrict volatile *, ptrdiff_t ); 3063 3064 forall( type T ) T _Atomic volatile 2508 forall( otype T ) T _Atomic volatile 3065 2509 * ?+=?( T _Atomic volatile * restrict volatile *, ptrdiff_t ), 3066 2510 * ?-=?( T _Atomic volatile * restrict volatile *, ptrdiff_t ), 3067 2511 * ?+=?( T _Atomic volatile * _Atomic restrict volatile *, ptrdiff_t ), 3068 2512 * ?-=?( T _Atomic volatile * _Atomic restrict volatile *, ptrdiff_t ); 3069 3070 forall( type T ) T const restrict 2513 forall( otype T ) T const restrict 3071 2514 * ?+=?( T const restrict * restrict volatile *, ptrdiff_t ), 3072 2515 * ?-=?( T const restrict * restrict volatile *, ptrdiff_t ), 3073 2516 * ?+=?( T const restrict * _Atomic restrict volatile *, ptrdiff_t ), 3074 2517 * ?-=?( T const restrict * _Atomic restrict volatile *, ptrdiff_t ); 3075 3076 forall( type T ) T const volatile 2518 forall( otype T ) T const volatile 3077 2519 * ?+=?( T const volatile * restrict volatile *, ptrdiff_t ), 3078 2520 * ?-=?( T const volatile * restrict volatile *, ptrdiff_t ), 3079 2521 * ?+=?( T const volatile * _Atomic restrict volatile *, ptrdiff_t ), 3080 2522 * ?-=?( T const volatile * _Atomic restrict volatile *, ptrdiff_t ); 3081 3082 forall( type T ) T restrict volatile 2523 forall( otype T ) T restrict volatile 3083 2524 * ?+=?( T restrict volatile * restrict volatile *, ptrdiff_t ), 3084 2525 * ?-=?( T restrict volatile * restrict volatile *, ptrdiff_t ), 3085 2526 * ?+=?( T restrict volatile * _Atomic restrict volatile *, ptrdiff_t ), 3086 2527 * ?-=?( T restrict volatile * _Atomic restrict volatile *, ptrdiff_t ); 3087 3088 forall( type T ) T _Atomic const restrict 2528 forall( otype T ) T _Atomic const restrict 3089 2529 * ?+=?( T _Atomic const restrict * restrict volatile *, ptrdiff_t ), 3090 2530 * ?-=?( T _Atomic const restrict * restrict volatile *, ptrdiff_t ), 3091 2531 * ?+=?( T _Atomic const restrict * _Atomic restrict volatile *, ptrdiff_t ), 3092 2532 * ?-=?( T _Atomic const restrict * _Atomic restrict volatile *, ptrdiff_t ); 3093 3094 forall( type T ) T _Atomic const volatile 2533 forall( otype T ) T _Atomic const volatile 3095 2534 * ?+=?( T _Atomic const volatile * restrict volatile *, ptrdiff_t ), 3096 2535 * ?-=?( T _Atomic const volatile * restrict volatile *, ptrdiff_t ), 3097 2536 * ?+=?( T _Atomic const volatile * _Atomic restrict volatile *, ptrdiff_t ), 3098 2537 * ?-=?( T _Atomic const volatile * _Atomic restrict volatile *, ptrdiff_t ); 3099 3100 forall( type T ) T _Atomic restrict volatile 2538 forall( otype T ) T _Atomic restrict volatile 3101 2539 * ?+=?( T _Atomic restrict volatile * restrict volatile *, ptrdiff_t ), 3102 2540 * ?-=?( T _Atomic restrict volatile * restrict volatile *, ptrdiff_t ), 3103 2541 * ?+=?( T _Atomic restrict volatile * _Atomic restrict volatile *, ptrdiff_t ), 3104 2542 * ?-=?( T _Atomic restrict volatile * _Atomic restrict volatile *, ptrdiff_t ); 3105 3106 forall( type T ) T const restrict volatile 2543 forall( otype T ) T const restrict volatile 3107 2544 * ?+=?( T const restrict volatile * restrict volatile *, ptrdiff_t ), 3108 2545 * ?-=?( T const restrict volatile * restrict volatile *, ptrdiff_t ), 3109 2546 * ?+=?( T const restrict volatile * _Atomic restrict volatile *, ptrdiff_t ), 3110 2547 * ?-=?( T const restrict volatile * _Atomic restrict volatile *, ptrdiff_t ); 3111 3112 forall( type T ) T _Atomic const restrict volatile 2548 forall( otype T ) T _Atomic const restrict volatile 3113 2549 * ?+=?( T _Atomic const restrict volatile * restrict volatile *, ptrdiff_t ), 3114 2550 * ?-=?( T _Atomic const restrict volatile * restrict volatile *, ptrdiff_t ), … … 3321 2757 \semantics 3322 2758 In the comma expression ``\lstinline$a, b$'', the first operand is interpreted as 3323 ``\lstinline$( void )(a)$'', which shall be unambiguous\index{ambiguous interpretation}. The3324 interpretations of the expression are the interpretations of the second operand.2759 ``\lstinline$( void )(a)$'', which shall be unambiguous\index{ambiguous interpretation}. 2760 The interpretations of the expression are the interpretations of the second operand. 3325 2761 3326 2762 … … 3337 2773 3338 2774 \constraints 3339 If an identifier has \Index{no linkage}, there shall be no more than one declaration of the 3340 identifier ( in a declarator or type specifier ) with compatible types in the same scope and in the 3341 same name space, except that: 2775 If an identifier has \Index{no linkage}, there shall be no more than one declaration of the identifier ( in a declarator or type specifier ) with compatible types in the same scope and in the same name space, except that: 3342 2776 \begin{itemize} 3343 \item 3344 a typedef name may be redefined to denote the same type as it currently does, provided that type is 3345 not a variably modified type; 3346 \item 3347 tags may be redeclared as specified in section 6.7.2.3 of the {\c11} standard. 2777 \item a typedef name may be redefined to denote the same type as it currently does, provided that type is not a variably modified type; 2778 \item tags may be redeclared as specified in section 6.7.2.3 of the {\c11} standard. 3348 2779 \end{itemize} 3349 2780 \begin{rationale} 3350 This constraint adds the phrase ``with compatible types'' to the {\c11} constraint, to allow 3351 overloading. 3352 \end{rationale} 3353 3354 An identifier declared by a type declaration shall not be redeclared as a parameter in a function 3355 definition whose declarator includes an identifier list. 3356 \begin{rationale} 3357 This restriction echos {\c11}'s ban on the redeclaration of typedef names as parameters. This 3358 avoids an ambiguity between old-style function declarations and new-style function prototypes: 2781 This constraint adds the phrase ``with compatible types'' to the {\c11} constraint, to allow overloading. 2782 \end{rationale} 2783 2784 An identifier declared by a type declaration shall not be redeclared as a parameter in a function definition whose declarator includes an identifier list. 2785 \begin{rationale} 2786 This restriction echos {\c11}'s ban on the redeclaration of typedef names as parameters. 2787 This avoids an ambiguity between old-style function declarations and new-style function prototypes: 3359 2788 \begin{lstlisting} 3360 2789 void f( Complex, // ... 3000 characters ... 3361 2790 void g( Complex, // ... 3000 characters ... 3362 int Complex; { ... }3363 \end{lstlisting}3364 Without the rule, \lstinline$Complex$ would be a type in the first case, and a parameter name in the 3365 second.2791 int Complex; 2792 { ... } 2793 \end{lstlisting} 2794 Without the rule, \lstinline$Complex$ would be a type in the first case, and a parameter name in the second. 3366 2795 \end{rationale} 3367 2796 … … 3382 2811 3383 2812 \semantics 3384 \CFA extends the {\c11} definition of \define{anonymous structure} to include structure 3385 specifiers with tags, and extends the {\c11} definition of \define{anonymous union} to include union 3386 specifiers with tags. 2813 \CFA extends the {\c11} definition of \define{anonymous structure} to include structure specifiers with tags, and extends the {\c11} definition of \define{anonymous union} to include union specifiers with tags. 3387 2814 \begin{rationale} 3388 2815 This extension imitates an extension in the Plan 9 C compiler \cite{Thompson90new}. … … 3401 2828 cp.x = 0; 3402 2829 cp.color = RED; 3403 3404 2830 struct literal {@\impl{literal}@ 3405 2831 enum { NUMBER, STRING } tag; 3406 2832 union { 3407 3408 2833 double n; 2834 char *s; 3409 2835 }; 3410 2836 }; … … 3428 2854 \begin{comment} 3429 2855 \constraints 3430 If the \nonterm{declaration-specifiers} of a declaration that contains a \nonterm{forall-specifier} 3431 declares a structure or union tag, the types of the members of the structure or union shall not use 3432 any of the type identifiers declared by the \nonterm{type-parameter-list}. 3433 \begin{rationale} 3434 This sort of declaration is illegal because the scope of the type identifiers ends at the end of the 3435 declaration, but the scope of the structure tag does not. 3436 \begin{lstlisting} 3437 forall( type T ) struct Pair { T a, b; } mkPair( T, T ); // illegal 3438 \end{lstlisting} 3439 If an instance of \lstinline$struct Pair$ was declared later in the current scope, what would the 3440 members' type be? 2856 If the \nonterm{declaration-specifiers} of a declaration that contains a \nonterm{forall-specifier} declares a structure or union tag, the types of the members of the structure or union shall not use any of the type identifiers declared by the \nonterm{type-parameter-list}. 2857 \begin{rationale} 2858 This sort of declaration is illegal because the scope of the type identifiers ends at the end of the declaration, but the scope of the structure tag does not. 2859 \begin{lstlisting} 2860 forall( otype T ) struct Pair { T a, b; 2861 } mkPair( T, T ); // illegal 2862 \end{lstlisting} 2863 If an instance of \lstinline$struct Pair$ was declared later in the current scope, what would the members' type be? 3441 2864 \end{rationale} 3442 2865 \end{comment} 3443 2866 3444 2867 \semantics 3445 The \nonterm{type-parameter-list}s and assertions of the \nonterm{forall-specifier}s declare type 3446 identifiers, function and object identifiers with \Index{no linkage}. 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}. 3447 2869 3448 2870 If, in the declaration ``\lstinline$T D$'', \lstinline$T$ contains \nonterm{forall-specifier}s and … … 3450 2872 \begin{lstlisting} 3451 2873 D( @\normalsize\nonterm{parameter-type-list}@ ) 3452 \end{lstlisting} 3453 then a type identifier declared by one of the \nonterm{forall-specifier}s is an \define{inferred 3454 parameter} of the function declarator if and only if it is not an inferred parameter of a function 3455 declarator in \lstinline$D$, and it is used in the type of a parameter in the following 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 3456 2875 \nonterm{type-parameter-list} or it and an inferred parameter are used as arguments of a 3457 \Index{specification} in one of the \nonterm{forall-specifier}s. The identifiers declared by 3458 assertions that use an inferred parameter of a function declarator are \Index{assertion parameter}s 3459 of that function declarator. 2876 \Index{specification} in one of the \nonterm{forall-specifier}s. 2877 The identifiers declared by assertions that use an inferred parameter of a function declarator are \Index{assertion parameter}s of that function declarator. 3460 2878 3461 2879 \begin{comment} 3462 2880 \begin{rationale} 3463 Since every inferred parameter is used by some parameter, inference can be understood as a single 3464 bottom-up pass over the expression tree, that only needs to apply local reasoning at each node. 2881 Since every inferred parameter is used by some parameter, inference can be understood as a single bottom-up pass over the expression tree, that only needs to apply local reasoning at each node. 3465 2882 3466 2883 If this restriction were lifted, it would be possible to write 3467 2884 \begin{lstlisting} 3468 forall( type T ) T * alloc( void );@\use{alloc}@ 3469 int *p = alloc(); 2885 forall( otype T ) T * alloc( void );@\use{alloc}@ int *p = alloc(); 3470 2886 \end{lstlisting} 3471 2887 Here \lstinline$alloc()$ would receive \lstinline$int$ as an inferred argument, and return an 3472 \lstinline$int *$. In general, if a call to \lstinline$alloc()$ is a subexpression of an expression 3473 involving polymorphic functions and overloaded identifiers, there could be considerable distance 3474 between the call and the subexpression that causes \lstinline$T$ to be bound. 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. 3475 2890 3476 2891 With the current restriction, \lstinline$alloc()$ must be given an argument that determines 3477 2892 \lstinline$T$: 3478 2893 \begin{lstlisting} 3479 forall( type T ) T * alloc( T initial_value );@\use{alloc}@2894 forall( otype T ) T * alloc( T initial_value );@\use{alloc}@ 3480 2895 \end{lstlisting} 3481 2896 \end{rationale} 3482 2897 \end{comment} 3483 2898 3484 If a function declarator is part of a function definition, its inferred parameters and assertion 3485 parameters have \Index{block scope};otherwise, identifiers declared by assertions have a2899 If a function declarator is part of a function definition, its inferred parameters and assertion parameters have \Index{block scope}; 2900 otherwise, identifiers declared by assertions have a 3486 2901 \define{declaration scope}, which terminates at the end of the \nonterm{declaration}. 3487 2902 3488 2903 A function type that has at least one inferred parameter is a \define{polymorphic function} type. 3489 Function types with no inferred parameters are \define{monomorphic function} types. One function 3490 type is \define{less polymorphic} than another if it has fewer inferred parameters, or if it has the 3491 same number of inferred parameters and fewer of its explicit parameters have types that depend on an 3492 inferred parameter. 3493 3494 The names of inferred parameters and the order of identifiers in forall specifiers are not relevant 3495 to polymorphic function type compatibility. Let $f$ and $g$ be two polymorphic function types with 3496 the same number of inferred parameters, and let $f_i$ and $g_i$ be the inferred parameters of $f$ 3497 and $g$ in their order of occurance in the function types' \nonterm{parameter-type-list}s. Let $f'$ 3498 be $f$ with every occurrence of $f_i$ replaced by $g_i$, for all $i$. Then $f$ and $g$ are 3499 \Index{compatible type}s if $f'$'s and $g$'s return types and parameter lists are compatible, and if 3500 for every assertion parameter of $f'$ there is an assertion parameter in $g$ with the same 3501 identifier and compatible type, and vice versa. 2904 Function types with no inferred parameters are \define{monomorphic function} types. 2905 One function type is \define{less polymorphic} than another if it has fewer inferred parameters, or if it has the same number of inferred parameters and fewer of its explicit parameters have types that depend on an inferred parameter. 2906 2907 The names of inferred parameters and the order of identifiers in forall specifiers are not relevant to polymorphic function type compatibility. 2908 Let $f$ and $g$ be two polymorphic function types with the same number of inferred parameters, and let $f_i$ and $g_i$ be the inferred parameters of $f$ and $g$ in their order of occurance in the function types' \nonterm{parameter-type-list}s. 2909 Let $f'$ be $f$ with every occurrence of $f_i$ replaced by $g_i$, for all $i$. 2910 Then $f$ and $g$ are 2911 \Index{compatible type}s if $f'$'s and $g$'s return types and parameter lists are compatible, and if for every assertion parameter of $f'$ there is an assertion parameter in $g$ with the same identifier and compatible type, and vice versa. 3502 2912 3503 2913 \examples … … 3505 2915 \begin{lstlisting} 3506 2916 int fi( int ); 3507 forall( type T ) T fT( T );2917 forall( otype T ) T fT( T ); 3508 2918 \end{lstlisting} 3509 2919 \lstinline$fi()$ takes an \lstinline$int$ and returns an \lstinline$int$. \lstinline$fT()$ takes a … … 3511 2921 \begin{lstlisting} 3512 2922 int (*pfi )( int ) = fi; 3513 forall( type T ) T (*pfT )( T ) = fT; 3514 \end{lstlisting} 3515 \lstinline$pfi$ and \lstinline$pfT$ are pointers to functions. \lstinline$pfT$ is not 3516 polymorphic, but the function it points at is. 2923 forall( otype T ) T (*pfT )( T ) = fT; 2924 \end{lstlisting} 2925 \lstinline$pfi$ and \lstinline$pfT$ are pointers to functions. \lstinline$pfT$ is not polymorphic, but the function it points at is. 3517 2926 \begin{lstlisting} 3518 2927 int (*fvpfi( void ))( int ) { 3519 2928 return pfi; 3520 2929 } 3521 forall( type T ) T (*fvpfT( void ))( T ) {2930 forall( otype T ) T (*fvpfT( void ))( T ) { 3522 2931 return pfT; 3523 2932 } 3524 2933 \end{lstlisting} 3525 \lstinline$fvpfi()$ and \lstinline$fvpfT()$ are functions taking no arguments and returning pointers 3526 to functions. \lstinline$fvpfT()$ is monomorphic, but the function that its return value points 3527 at is polymorphic. 3528 \begin{lstlisting} 3529 forall( type T ) int ( *fTpfi( T ) )( int ); 3530 forall( type T ) T ( *fTpfT( T ) )( T ); 3531 forall( type T, type U ) U ( *fTpfU( T ) )( U ); 3532 \end{lstlisting} 3533 \lstinline$fTpfi()$ is a polymorphic function that returns a pointer to a monomorphic function 3534 taking an integer and returning an integer. It could return \lstinline$pfi$. \lstinline$fTpfT()$ 3535 is subtle: it is a polymorphic function returning a \emph{monomorphic} function taking and returning 3536 \lstinline$T$, where \lstinline$T$ is an inferred parameter of \lstinline$fTpfT()$. For instance, 3537 in the expression ``\lstinline$fTpfT(17)$'', \lstinline$T$ is inferred to be \lstinline$int$, and 3538 the returned value would have type \lstinline$int ( * )( int )$. ``\lstinline$fTpfT(17)(13)$'' and 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. 2935 \begin{lstlisting} 2936 forall( otype T ) int ( *fTpfi( T ) )( int ); 2937 forall( otype T ) T ( *fTpfT( T ) )( T ); 2938 forall( otype T, otype U ) U ( *fTpfU( T ) )( U ); 2939 \end{lstlisting} 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 3539 2944 ``\lstinline$fTpfT("yes")("no")$'' are legal, but ``\lstinline$fTpfT(17)("no")$'' is illegal. 3540 \lstinline$fTpfU()$ is polymorphic ( in type \lstinline$T$), and returns a pointer to a function that 3541 is polymorphic ( in type \lstinline$U$). ``\lstinline$f5(17)("no")$'' is a legal expression of type 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 3542 2946 \lstinline$char *$. 3543 2947 \begin{lstlisting} 3544 forall( type T, type U, type V ) U * f( T *, U, V * const ); 3545 forall( type U, type V, type W ) U * g( V *, U, W * const ); 3546 \end{lstlisting} 3547 The functions \lstinline$f()$ and \lstinline$g()$ have compatible types. Let \(f\) and \(g\) be 3548 their types; then \(f_1\) = \lstinline$T$, \(f_2\) = \lstinline$U$, \(f_3\) = \lstinline$V$, \(g_1\) 3549 = \lstinline$V$, \(g_2\) = \lstinline$U$, and \(g_3\) = \lstinline$W$. Replacing every \(f_i\) 3550 by \(g_i\) in \(f\) gives 3551 \begin{lstlisting} 3552 forall( type V, type U, type W ) U * f( V *, U, W * const ); 3553 \end{lstlisting} 3554 which has a return type and parameter list that is compatible with \(g\). 3555 \begin{rationale} 3556 The word ``\lstinline$type$'' in a forall specifier is redundant at the moment, but I want to leave 3557 room for inferred parameters of ordinary types in case parameterized types get added one day. 2948 forall( otype T, otype U, otype V ) U * f( T *, U, V * const ); 2949 forall( otype U, otype V, otype W ) U * g( V *, U, W * const ); 2950 \end{lstlisting} 2951 The functions \lstinline$f()$ and \lstinline$g()$ have compatible types. 2952 Let \(f\) and \(g\) be their types; 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$. 2955 Replacing every \(f_i\) by \(g_i\) in \(f\) gives 2956 \begin{lstlisting} 2957 forall( otype V, otype U, otype W ) U * f( V *, U, W * const ); 2958 \end{lstlisting} which has a return type and parameter list that is compatible with \(g\). 2959 \begin{rationale} 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. 3558 2961 3559 2962 Even without parameterized types, I might try to allow 3560 2963 \begin{lstlisting} 3561 2964 forall( int n ) int sum( int vector[n] ); 3562 \end{lstlisting} 3563 but C currently rewrites array parameters as pointer parameters, so the effects of such a change 3564 require more thought. 3565 \end{rationale} 3566 3567 \begin{rationale} 3568 A polymorphic declaration must do two things: it must introduce type parameters, and it must apply 3569 assertions to those types. Adding this to existing C declaration syntax and semantics was delicate, 3570 and not entirely successful. 3571 3572 C depends on declaration-before-use, so a forall specifier must introduce type names before they can 3573 be used in the declaration specifiers. This could be done by making the forall specifier part of 3574 the declaration specifiers, or by making it a new introductory clause of declarations. 3575 3576 Assertions are also part of polymorphic function types, because it must be clear which functions 3577 have access to the assertion parameters declared by the assertions. All attempts to put assertions 3578 inside an introductory clause produced complex semantics and confusing code. Building them into the 3579 declaration specifiers could be done by placing them in the function's parameter list, or in a 3580 forall specifier that is a declaration specifier. Assertions are also used with type parameters of 3581 specifications, and by type declarations. For consistency's sake it seems best to attach assertions 3582 to the type declarations in forall specifiers, which means that forall specifiers must be 3583 declaration specifiers. 2965 \end{lstlisting} but C currently rewrites array parameters as pointer parameters, so the effects of such a change require more thought. 2966 \end{rationale} 2967 2968 \begin{rationale} 2969 A polymorphic declaration must do two things: it must introduce type parameters, and it must apply assertions to those types. 2970 Adding this to existing C declaration syntax and semantics was delicate, and not entirely successful. 2971 2972 C depends on declaration-before-use, so a forall specifier must introduce type names before they can be used in the declaration specifiers. 2973 This could be done by making the forall specifier part of the declaration specifiers, or by making it a new introductory clause of declarations. 2974 2975 Assertions are also part of polymorphic function types, because it must be clear which functions have access to the assertion parameters declared by the assertions. 2976 All attempts to put assertions inside an introductory clause produced complex semantics and confusing code. 2977 Building them into the declaration specifiers could be done by placing them in the function's parameter list, or in a forall specifier that is a declaration specifier. 2978 Assertions are also used with type parameters of specifications, and by type declarations. 2979 For consistency's sake it seems best to attach assertions to the type declarations in forall specifiers, which means that forall specifiers must be declaration specifiers. 3584 2980 \end{rationale} 3585 2981 %HERE … … 3595 2991 3596 2992 \constraints 3597 \lstinline$restrict$\index{register@{\lstinline$restrict$}} Types other than type parameters and 3598 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. 3599 2994 3600 2995 \semantics 3601 An object's type may be a restrict-qualified type parameter. \lstinline$restrict$ does not 3602 establish any special semantics in that case. 3603 3604 \begin{rationale} 3605 \CFA loosens the constraint on the restrict qualifier so that restrict-qualified pointers may be 3606 passed to polymorphic functions. 3607 \end{rationale} 3608 3609 \lstinline$lvalue$ may be used to qualify the return type of a function type. Let \lstinline$T$ be 3610 an unqualified version of a type; then the result of calling a function with return type 2996 An object's type may be a restrict-qualified type parameter. \lstinline$restrict$ does not establish any special semantics in that case. 2997 2998 \begin{rationale} 2999 \CFA loosens the constraint on the restrict qualifier so that restrict-qualified pointers may be passed to polymorphic functions. 3000 \end{rationale} 3001 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; 3004 then the result of calling a function with return type 3611 3005 \lstinline$lvalue T$ is a \Index{modifiable lvalue} of type \lstinline$T$. 3612 \lstinline$const$\use{const} and \lstinline$volatile$\use{volatile} qualifiers may also be added to 3613 indicate that the function result is a constant or volatile lvalue. 3614 \begin{rationale} 3615 The \lstinline$const$ and \lstinline$volatile$ qualifiers can only be sensibly used to qualify the 3616 return type of a function if the \lstinline$lvalue$ qualifier is also used. 3617 \end{rationale} 3618 3619 An {lvalue}-qualified type may be used in a \Index{cast expression} if the operand is an lvalue; the 3620 result of the expression is an lvalue. 3621 3622 \begin{rationale} 3623 \lstinline$lvalue$ provides some of the functionality of {\CC}'s ``\lstinline$T&$'' ( reference to 3624 object of type \lstinline$T$) type. Reference types have four uses in {\CC}. 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. 3009 \end{rationale} 3010 3011 An {lvalue}-qualified type may be used in a \Index{cast expression} if the operand is an lvalue; 3012 the result of the expression is an lvalue. 3013 3014 \begin{rationale} 3015 \lstinline$lvalue$ provides some of the functionality of {\CC}'s ``\lstinline$T&$'' ( reference to object of type \lstinline$T$) type. 3016 Reference types have four uses in {\CC}. 3625 3017 \begin{itemize} 3626 3018 \item … … 3629 3021 3630 3022 \item 3631 A reference can be used to define an alias for a complicated lvalue expression, as a way of getting 3632 some of the functionality of the Pascal \lstinline$with$ statement. The following {\CC} code gives 3633 an example. 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. 3024 The following {\CC} code gives an example. 3634 3025 \begin{lstlisting} 3635 3026 { … … 3641 3032 3642 3033 \item 3643 A reference parameter can be used to allow a function to modify an argument without forcing the 3644 caller to pass the address of the argument. This is most useful for user-defined assignment 3645 operators. In {\CC}, plain assignment is done by a function called ``\lstinline$operator=$'', and 3646 the two expressions 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. 3035 This is most useful for user-defined assignment operators. 3036 In {\CC}, plain assignment is done by a function called ``\lstinline$operator=$'', and the two expressions 3647 3037 \begin{lstlisting} 3648 3038 a = b; 3649 3039 operator=( a, b ); 3650 \end{lstlisting} 3651 are equivalent. If \lstinline$a$ and \lstinline$b$ are of type \lstinline$T$, then the first 3652 parameter of \lstinline$operator=$ must have type ``\lstinline$T&$''.It cannot have type3040 \end{lstlisting} are equivalent. 3041 If \lstinline$a$ and \lstinline$b$ are of type \lstinline$T$, then the first parameter of \lstinline$operator=$ must have type ``\lstinline$T&$''. 3042 It cannot have type 3653 3043 \lstinline$T$, because then assignment couldn't alter the variable, and it can't have type 3654 3044 ``\lstinline$T *$'', because the assignment would have to be written ``\lstinline$&a = b;$''. 3655 3045 3656 In the case of user-defined operators, this could just as well be handled by using pointer types and 3657 by changing the rewrite rules so that ``\lstinline$a = b;$'' is equivalent to 3658 ``\lstinline$operator=(&( a), b )$''. Reference parameters of ``normal'' functions are Bad Things, 3659 because they remove a useful property of C function calls: an argument can only be modified by a 3660 function if it is preceded by ``\lstinline$&$''. 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$&$''. 3661 3049 3662 3050 \item … … 3668 3056 void fiddle( const Thing & ); 3669 3057 \end{lstlisting} 3670 If the second form is used, then constructors and destructors are not invoked to create a temporary 3671 variable at the call site ( and it is bad style for the caller to make any assumptions about such 3672 things), and within \lstinline$fiddle$ the parameter is subject to the usual problems caused by 3673 aliases. The reference form might be chosen for efficiency's sake if \lstinline$Thing$s are too 3674 large or their constructors or destructors are too expensive. An implementation may switch between 3675 them without causing trouble for well-behaved clients. This leaves the implementor to define ``too 3676 large'' and ``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. 3060 An implementation may switch between them without causing trouble for well-behaved clients. 3061 This leaves the implementor to define ``too large'' and ``too expensive''. 3677 3062 3678 3063 I propose to push this job onto the compiler by allowing it to implement 3679 3064 \begin{lstlisting} 3680 3065 void fiddle( const volatile Thing ); 3681 \end{lstlisting} 3682 with call-by-reference. Since it knows all about the size of \lstinline$Thing$s and the parameter 3683 passing mechanism, it should be able to come up with a better definition of ``too large'', and may 3684 be able to make a good guess at ``too expensive''. 3066 \end{lstlisting} with call-by-reference. 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''. 3685 3068 \end{itemize} 3686 3069 3687 In summary, since references are only really necessary for returning lvalues, I'll only provide 3688 lvalue functions. 3070 In summary, since references are only really necessary for returning lvalues, I'll only provide lvalue functions. 3689 3071 \end{rationale} 3690 3072 … … 3693 3075 \subsection{Initialization} 3694 3076 3695 An expression that is used as an \nonterm{initializer} is treated as being cast to the type of the 3696 object being initialized. An expression used in an \nonterm{initializer-list} is treated as being 3697 cast to the type of the aggregate member that it initializes. In either case the cast must have a 3698 single unambiguous \Index{interpretation}. 3077 An expression that is used as an \nonterm{initializer} is treated as being cast to the type of the object being initialized. 3078 An expression used in an \nonterm{initializer-list} is treated as being cast to the type of the aggregate member that it initializes. 3079 In either case the cast must have a single unambiguous \Index{interpretation}. 3699 3080 3700 3081 … … 3717 3098 \end{syntax} 3718 3099 \begin{rationale} 3719 The declarations allowed in a specification are much the same as those allowed in a structure, 3720 except that bit fields are not allowed, and \Index{incomplete type}s and function types are allowed. 3100 The declarations allowed in a specification are much the same as those allowed in a structure, except that bit fields are not allowed, and \Index{incomplete type}s and function types are allowed. 3721 3101 \end{rationale} 3722 3102 3723 3103 \semantics 3724 A \define{specification definition} defines a name for a \define{specification}: a parameterized 3725 collection of object and function declarations. 3104 A \define{specification definition} defines a name for a \define{specification}: a parameterized collection of object and function declarations. 3726 3105 3727 3106 The declarations in a specification consist of the declarations in the 3728 3107 \nonterm{spec-declaration-list} and declarations produced by any assertions in the 3729 \nonterm{spec-parameter-list}. If the collection contains two declarations that declare the same 3730 identifier and have compatible types, they are combined into one declaration with the composite type 3731 constructed from the two types. 3108 \nonterm{spec-parameter-list}. 3109 If the collection contains two declarations that declare the same identifier and have compatible types, they are combined into one declaration with the composite type constructed from the two types. 3732 3110 3733 3111 … … 3747 3125 3748 3126 \constraints 3749 The \nonterm{identifier} in an assertion that is not a \nonterm{spec-declaration} shall be the name 3750 of a specification. The \nonterm{type-name-list} shall contain one \nonterm{type-name} argument for 3751 each \nonterm{type-parameter} in that specification's \nonterm{spec-parameter-list}. If the 3752 \nonterm{type-parameter} uses type-class \lstinline$type$\use{type}, the argument shall be the type 3753 name of an \Index{object type}; if it uses \lstinline$dtype$, the argument shall be the type name of 3754 an object type or an \Index{incomplete type}; and if it uses \lstinline$ftype$, the argument shall 3755 be the type name of a \Index{function type}. 3127 The \nonterm{identifier} in an assertion that is not a \nonterm{spec-declaration} shall be the name of a specification. 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}. 3129 If the 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}. 3756 3133 3757 3134 \semantics … … 3759 3136 \define{assertion parameters}. 3760 3137 3761 The assertion parameters produced by an assertion that applies the name of a specification to type 3762 arguments are found by taking the declarations specified in the specification and treating each of 3763 the specification's parameters as a synonym for the corresponding \nonterm{type-name} argument. 3764 3765 The collection of assertion parameters produced by the \nonterm{assertion-list} are found by 3766 combining the declarations produced by each assertion. If the collection contains two declarations 3767 that declare the same identifier and have compatible types, they are combined into one declaration 3768 with the \Index{composite type} constructed from the two types. 3138 The assertion parameters produced by an assertion that applies the name of a specification to type arguments are found by taking the declarations specified in the specification and treating each of the specification's parameters as a synonym for the corresponding \nonterm{type-name} argument. 3139 3140 The collection of assertion parameters produced by the \nonterm{assertion-list} are found by combining the declarations produced by each assertion. 3141 If the collection contains two declarations that declare the same identifier and have compatible types, they are combined into one declaration with the \Index{composite type} constructed from the two types. 3769 3142 3770 3143 \examples 3771 3144 \begin{lstlisting} 3772 forall( type T | T ?*?( T, T ))@\use{?*?}@3145 forall( otype T | T ?*?( T, T ))@\use{?*?}@ 3773 3146 T square( T val ) {@\impl{square}@ 3774 3147 return val + val; 3775 3148 } 3776 3777 context summable( type T ) {@\impl{summable}@ 3149 trait summable( otype T ) {@\impl{summable}@ 3778 3150 T ?+=?( T *, T );@\use{?+=?}@ 3779 3151 const T 0;@\use{0}@ 3780 3152 }; 3781 context list_of( type List,type Element ) {@\impl{list_of}@3153 trait list_of( otype List, otype Element ) {@\impl{list_of}@ 3782 3154 Element car( List ); 3783 3155 List cdr( List ); … … 3786 3158 int is_nil( List ); 3787 3159 }; 3788 context sum_list( type List, type Element | summable( Element ) | list_of( List, Element ) ) {}; 3789 \end{lstlisting} 3790 \lstinline$sum_list$ contains seven declarations, which describe a list whose elements can be added 3791 up. The assertion ``\lstinline$|sum_list( i_list, int )$''\use{sum_list} produces the assertion 3792 parameters 3160 trait sum_list( otype List, otype Element | summable( Element ) | list_of( List, Element ) ) {}; 3161 \end{lstlisting} 3162 \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 3793 3164 \begin{lstlisting} 3794 3165 int ?+=?( int *, int ); … … 3825 3196 3826 3197 \constraints 3827 If a type declaration has block scope, and the declared identifier has external or internal linkage, 3828 the declaration shall have no initializer for the identifier. 3198 If a type declaration has block scope, and the declared identifier has external or internal linkage, the declaration shall have no initializer for the identifier. 3829 3199 3830 3200 \semantics 3831 A \nonterm{type-parameter} or a \nonterm{type-declarator} declares an identifier to be a \Index{type 3832 name} for a type incompatible with all other types. 3833 3834 An identifier declared by a \nonterm{type-parameter} has \Index{no linkage}. Identifiers declared 3835 with type-class \lstinline$type$\use{type} are \Index{object type}s; those declared with type-class 3836 \lstinline$dtype$\use{dtype} are \Index{incomplete type}s; and those declared with type-class 3837 \lstinline$ftype$\use{ftype} are \Index{function type}s. The identifier has \Index{block scope} that 3838 terminates at the end of the \nonterm{spec-declaration-list} or polymorphic function that contains 3839 the \nonterm{type-parameter}. 3840 3841 A \nonterm{type-declarator} with an \Index{initializer} is a \define{type definition}. The declared 3842 identifier is an \Index{incomplete type} within the initializer, and an \Index{object type} after 3843 the end of the initializer. The type in the initializer is called the \define{implementation 3844 type}. Within the scope of the declaration, \Index{implicit conversion}s can be performed between 3845 the defined type and the implementation type, and between pointers to the defined type and pointers 3846 to the implementation type. 3847 3848 A type declaration without an \Index{initializer} and without a \Index{storage-class specifier} or 3849 with storage-class specifier \lstinline$static$\use{static} defines an \Index{incomplete type}. If a 3850 \Index{translation unit} or \Index{block} contains one or more such declarations for an identifier, 3851 it must contain exactly one definition of the identifier ( but not in an enclosed block, which would 3852 define a new type known only within that block). 3201 A \nonterm{type-parameter} or a \nonterm{type-declarator} declares an identifier to be a \Index{type name} for a type incompatible with all other types. 3202 3203 An identifier declared by a \nonterm{type-parameter} has \Index{no linkage}. 3204 Identifiers declared with type-class \lstinline$type$\use{type} are \Index{object type}s; 3205 those declared with type-class 3206 \lstinline$dtype$\use{dtype} are \Index{incomplete type}s; 3207 and those declared with type-class 3208 \lstinline$ftype$\use{ftype} are \Index{function type}s. 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}. 3210 3211 A \nonterm{type-declarator} with an \Index{initializer} is a \define{type definition}. The declared identifier is an \Index{incomplete type} within the initializer, and an \Index{object type} after the end of the initializer. 3212 The type in the initializer is called the \define{implementation 3213 type}. 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. 3215 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}. 3217 If a 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). 3853 3219 \begin{rationale} 3854 3220 Incomplete type declarations allow compact mutually-recursive types. 3855 3221 \begin{lstlisting} 3856 type t1; // Incomplete type declaration. 3857 type t2 = struct { t1 * p; ... }; 3858 type t1 = struct { t2 * p; ... }; 3859 \end{lstlisting} 3860 Without them, mutual recursion could be handled by declaring mutually recursive structures, then 3861 initializing the types to those structures. 3222 otype t1; // incomplete type declaration 3223 otype t2 = struct { t1 * p; ... }; 3224 otype t1 = struct { t2 * p; ... }; 3225 \end{lstlisting} 3226 Without them, mutual recursion could be handled by declaring mutually recursive structures, then initializing the types to those structures. 3862 3227 \begin{lstlisting} 3863 3228 struct s1; 3864 type t2 = struct s2 { struct s1 * p; ... }; 3865 type t1 = struct s1 { struct s2 * p; ... }; 3866 \end{lstlisting} 3867 This introduces extra names, and may force the programmer to cast between the types and their 3868 implementations. 3229 otype t2 = struct s2 { struct s1 * p; ... }; 3230 otype t1 = struct s1 { struct s2 * p; ... }; 3231 \end{lstlisting} 3232 This introduces extra names, and may force the programmer to cast between the types and their implementations. 3869 3233 \end{rationale} 3870 3234 3871 3235 A type declaration without an initializer and with \Index{storage-class specifier} 3872 \lstinline$extern$\use{extern} is an \define{opaque type declaration}. Opaque types are3873 \Index{object type}s. An opaque type is not a \nonterm{constant-expression}; neither is a structure3874 or union that has a member whose type is not a \nonterm{constant-expression}. Every other 3875 \Index{object type} is a \nonterm{constant-expression}. Objects with static storage duration shall 3876 be declared with a type that is a \nonterm{constant-expression}. 3877 \ begin{rationale}3878 Type declarations can declare identifiers with external linkage, whereas typedef declarations 3879 declare identifiers that only exist within a translation unit. These opaque types can be used in 3880 declarations, but the implementation of the type is not visible.3881 3882 Static objects can not have opaque types because space for them would have to be allocated at 3883 program start-up. This is a deficiency\index{deficiencies!static opaque objects}, but I don't want 3884 to deal with ``module initialization'' code just now.3885 \end{rationale} 3886 3887 An \Index{incomplete type} which is not a qualified version\index{qualified type} of a type is a 3888 value of \Index{type-class} \lstinline$dtype$. An object type\index{object types} which is not a 3889 qualified version of a type is a value of type-classes \lstinline$type$ and \lstinline$dtype$.A3236 \lstinline$extern$\use{extern} is an \define{opaque type declaration}. 3237 Opaque types are 3238 \Index{object type}s. 3239 An opaque type is not a \nonterm{constant-expression}; 3240 neither is a structure or union that has a member whose type is not a \nonterm{constant-expression}. Every other 3241 \Index{object type} is a \nonterm{constant-expression}. 3242 Objects with static storage duration shall be declared with a type that is a \nonterm{constant-expression}. 3243 \begin{rationale} 3244 Type declarations can declare identifiers with external linkage, whereas typedef declarations declare identifiers that only exist within a translation unit. 3245 These opaque types can be used in declarations, but the implementation of the type is not visible. 3246 3247 Static objects can not have opaque types because space for them would have to be allocated at program start-up. 3248 This is a deficiency\index{deficiencies!static opaque objects}, but I don't want to deal with ``module initialization'' code just now. 3249 \end{rationale} 3250 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$. 3253 A 3890 3254 \Index{function type} is a value of type-class \lstinline$ftype$. 3891 3255 \begin{rationale} 3892 Syntactically, a type value is a \nonterm{type-name}, which is a declaration for an object which 3893 omits the identifier being declared. 3894 3895 Object types are precisely the types that can be instantiated. Type qualifiers are not included in 3896 type values because the compiler needs the information they provide at compile time to detect 3897 illegal statements or to produce efficient machine instructions. For instance, the code that a 3898 compiler must generate to manipulate an object that has volatile-qualified type may be different 3899 from the code to manipulate an ordinary object. 3900 3901 Type qualifiers are a weak point of C's type system. Consider the standard library function 3902 \lstinline$strchr()$ which, given a string and a character, returns a pointer to the first 3903 occurrence of the character in the string. 3256 Syntactically, a type value is a \nonterm{type-name}, which is a declaration for an object which omits the identifier being declared. 3257 3258 Object types are precisely the types that can be instantiated. 3259 Type qualifiers are not included in type values because the compiler needs the information they provide at compile time to detect illegal statements or to produce efficient machine instructions. 3260 For instance, the code that a compiler must generate to manipulate an object that has volatile-qualified type may be different from the code to manipulate an ordinary object. 3261 3262 Type qualifiers are a weak point of C's type system. 3263 Consider the standard library function 3264 \lstinline$strchr()$ which, given a string and a character, returns a pointer to the first occurrence of the character in the string. 3904 3265 \begin{lstlisting} 3905 3266 char *strchr( const char *s, int c ) {@\impl{strchr}@ 3906 3267 char real_c = c; // done because c was declared as int. 3907 3268 for ( ; *s != real_c; s++ ) 3908 3269 if ( *s == '\0' ) return NULL; 3909 3270 return ( char * )s; 3910 3271 } 3911 3272 \end{lstlisting} 3912 The parameter \lstinline$s$ must be \lstinline$const char *$, because \lstinline$strchr()$ might be 3913 used to search a constant string, but the return type must be \lstinline$char *$, because the result 3914 might be used to modify a non-constant string. Hence the body must perform a cast, and ( even worse) 3915 \lstinline$strchr()$ provides a type-safe way to attempt to modify constant strings. What is needed 3916 is some way to say that \lstinline$s$'s type might contain qualifiers, and the result type has 3917 exactly the same qualifiers. Polymorphic functions do not provide a fix for this 3918 deficiency\index{deficiencies!pointers to qualified types}, because type qualifiers are not part of 3919 type values. Instead, overloading can be used to define \lstinline$strchr()$ for each combination 3920 of qualifiers. 3921 \end{rationale} 3922 3923 \begin{rationale} 3924 Since \Index{incomplete type}s are not type values, they can not be used as the initializer in a 3925 type declaration, or as the type of a structure or union member. This prevents the declaration of 3926 types that contain each other. 3927 \begin{lstlisting} 3928 type t1; 3929 type t2 = t1; // illegal: incomplete type t1. 3930 type t1 = t2; 3931 \end{lstlisting} 3932 3933 The initializer in a file-scope declaration must be a constant expression. This means type 3934 declarations can not build on opaque types, which is a deficiency\index{deficiencies!nesting opaque 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. 3274 Hence the body must perform a cast, and ( even worse) 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. 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. 3278 Instead, overloading can be used to define \lstinline$strchr()$ for each combination of qualifiers. 3279 \end{rationale} 3280 3281 \begin{rationale} 3282 Since \Index{incomplete type}s are not type values, they can not be used as the initializer in a type declaration, or as the type of a structure or union member. 3283 This prevents the declaration of types that contain each other. 3284 \begin{lstlisting} 3285 otype t1; 3286 otype t2 = t1; // illegal: incomplete type t1 3287 otype t1 = t2; 3288 \end{lstlisting} 3289 3290 The initializer in a file-scope declaration must be a constant expression. 3291 This means type declarations can not build on opaque types, which is a deficiency\index{deficiencies!nesting opaque 3935 3292 types}. 3936 3293 \begin{lstlisting} 3937 extern type Huge; // extended-precision integer type.3938 type Rational = struct {3294 extern otype Huge; // extended-precision integer type 3295 otype Rational = struct { 3939 3296 Huge numerator, denominator; // illegal 3940 3297 }; … … 3944 3301 \end{lstlisting} 3945 3302 Without this restriction, \CFA might require ``module initialization'' code ( since 3946 \lstinline$Rational$ has external linkage, it must be created before any other translation unit 3947 instantiates it), and would force an ordering on the initialization of the translation unit that 3948 defines \lstinline$Huge$ and the translation that declares \lstinline$Rational$. 3949 3950 A benefit of the restriction is that it prevents the declaration in separate translation units of 3951 types that contain each other, which would be hard to prevent otherwise. 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$. 3304 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. 3952 3306 \begin{lstlisting} 3953 3307 // File a.c: … … 3962 3316 \begin{rationale} 3963 3317 Since a \nonterm{type-declaration} is a \nonterm{declaration} and not a 3964 \nonterm{struct-declaration}, type declarations can not be structure members. The form of 3318 \nonterm{struct-declaration}, type declarations can not be structure members. 3319 The form of 3965 3320 \nonterm{type-declaration} forbids arrays of, pointers to, and functions returning \lstinline$type$. 3966 Hence the syntax of \nonterm{type-specifier} does not have to be extended to allow type-valued 3967 expressions. It also side-steps the problem of type-valued expressions producing different values 3968 in different declarations. 3969 3970 Since a type declaration is not a \nonterm{parameter-declaration}, functions can not have explicit 3971 type parameters. This may be too restrictive, but it attempts to make compilation simpler. Recall 3972 that when traditional C scanners read in an identifier, they look it up in the symbol table to 3973 determine whether or not it is a typedef name, and return a ``type'' or ``identifier'' token 3974 depending on what they find. A type parameter would add a type name to the current scope. The 3975 scope manipulations involved in parsing the declaration of a function that takes function pointer 3976 parameters and returns a function pointer may just be too complicated. 3977 3978 Explicit type parameters don't seem to be very useful, anyway, because their scope would not include 3979 the return type of the function. Consider the following attempt to define a type-safe memory 3980 allocation function. 3321 Hence the syntax of \nonterm{type-specifier} does not have to be extended to allow type-valued expressions. 3322 It also side-steps the problem of type-valued expressions producing different values in different declarations. 3323 3324 Since a type declaration is not a \nonterm{parameter-declaration}, functions can not have explicit type parameters. 3325 This may be too restrictive, but it attempts to make compilation simpler. 3326 Recall that when traditional C scanners read in an identifier, they look it up in the symbol table to determine whether or not it is a typedef name, and return a ``type'' or ``identifier'' token depending on what they find. 3327 A type parameter would add a type name to the current scope. 3328 The scope manipulations involved in parsing the declaration of a function that takes function pointer parameters and returns a function pointer may just be too complicated. 3329 3330 Explicit type parameters don't seem to be very useful, anyway, because their scope would not include the return type of the function. 3331 Consider the following attempt to define a type-safe memory allocation function. 3981 3332 \begin{lstlisting} 3982 3333 #include <stdlib.h> 3983 T * new( type T ) { return ( T * )malloc( sizeof( T) ); }; 3984 @\ldots@ 3985 int * ip = new( int ); 3986 \end{lstlisting} 3987 This looks sensible, but \CFA's declaration-before-use rules mean that ``\lstinline$T$'' in the 3988 function body refers to the parameter, but the ``\lstinline$T$'' in the return type refers to the 3989 meaning of \lstinline$T$ in the scope that contains \lstinline$new$; it could be undefined, or a 3990 type name, or a function or variable name. Nothing good can result from such a situation. 3334 T * new( otype T ) { return ( T * )malloc( sizeof( T) ); }; 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$; 3338 it could be undefined, or a type name, or a function or variable name. 3339 Nothing good can result from such a situation. 3991 3340 \end{rationale} 3992 3341 … … 3994 3343 Since type declarations create new types, instances of types are always passed by value. 3995 3344 \begin{lstlisting} 3996 type A1 = int[2];3345 otype A1 = int[2]; 3997 3346 void f1( A1 a ) { a[0] = 0; }; 3998 typedef int A2[2];3347 otypedef int A2[2]; 3999 3348 void f2( A2 a ) { a[0] = 0; }; 4000 3349 A1 v1; … … 4003 3352 f2( v2 ); 4004 3353 \end{lstlisting} 4005 \lstinline$V1$ is passed by value, so \lstinline$f1()$'s assignment to \lstinline$a[0]$ does not 4006 modify v1. \lstinline$V2$ is converted to a pointer, so \lstinline$f2()$ modifies 4007 \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]$. 4008 3355 4009 3356 A translation unit containing the declarations 4010 3357 \begin{lstlisting} 4011 extern type Complex;@\use{Complex}@ // opaque type declaration .3358 extern type Complex;@\use{Complex}@ // opaque type declaration 4012 3359 extern float abs( Complex );@\use{abs}@ 4013 \end{lstlisting} 4014 can contain declarations of complex numbers, which can be passed to \lstinline$abs$. Some other 4015 translation unit must implement \lstinline$Complex$ and \lstinline$abs$. That unit might contain 4016 the declarations 4017 \begin{lstlisting} 4018 type Complex = struct { float re, im; };@\impl{Complex}@ 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$. 3362 That unit might contain the declarations 3363 \begin{lstlisting} 3364 otype Complex = struct { float re, im; };@\impl{Complex}@ 4019 3365 Complex cplx_i = { 0.0, 1.0 };@\impl{cplx_i}@ 4020 3366 float abs( Complex c ) {@\impl{abs( Complex )}@ … … 4022 3368 } 4023 3369 \end{lstlisting} 4024 Note that \lstinline$c$ is implicitly converted to a \lstinline$struct$ so that its components can 4025 be retrieved. 4026 4027 \begin{lstlisting} 4028 type Time_of_day = int;@\impl{Time_of_day}@ // seconds since midnight. 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. 4029 3374 Time_of_day ?+?( Time_of_day t1, int seconds ) {@\impl{?+?}@ 4030 3375 return (( int)t1 + seconds ) % 86400; … … 4034 3379 4035 3380 \begin{rationale} 4036 Within the scope of a type definition, an instance of the type can be viewed as having that type or 4037 as having the implementation type. In the \lstinline$Time_of_day$ example, the difference is 4038 important. Different languages have treated the distinction between the abstraction and the 4039 implementation in different ways. 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. 3382 In the \lstinline$Time_of_day$ example, the difference is important. 3383 Different languages have treated the distinction between the abstraction and the implementation in different ways. 4040 3384 \begin{itemize} 4041 3385 \item 4042 Inside a Clu cluster \cite{clu}, the declaration of an instance states which view applies. Two 4043 primitives called \lstinline$up$ and \lstinline$down$ can be used to convert between the views. 4044 \item 4045 The Simula class \cite{Simula87} is essentially a record type. Since the only operations on a 4046 record are member selection and assignment, which can not be overloaded, there is never any 4047 ambiguity as to whether the abstraction or the implementation view is being used. In {\CC} 4048 \cite{c++}, operations on class instances include assignment and ``\lstinline$&$'', which can be 4049 overloaded. A ``scope resolution'' operator can be used inside the class to specify whether the 4050 abstract or implementation version of the operation should be used. 4051 \item 4052 An Ada derived type definition \cite{ada} creates a new type from an old type, and also implicitly 4053 declares derived subprograms that correspond to the existing subprograms that use the old type as a 4054 parameter type or result type. The derived subprograms are clones of the existing subprograms with 4055 the old type replaced by the derived type. Literals and aggregates of the old type are also cloned. 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. 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. 3391 In {\CC} 3392 \cite{c++}, operations on class instances include assignment and ``\lstinline$&$'', which can be overloaded. 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. 3394 \item 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. 3396 The derived subprograms are clones of the existing subprograms with the old type replaced by the derived type. 3397 Literals and aggregates of the old type are also cloned. 4056 3398 In other words, the abstract view provides exactly the same operations as the implementation view. 4057 3399 This allows the abstract view to be used in all cases. 4058 3400 4059 The derived subprograms can be replaced by programmer-specified subprograms. This is an exception4060 to the normal scope rules, which forbid duplicate definitions of a subprogram in a scope. In this 4061 case, explicit conversions between the derived type and the old type can be used.3401 The derived subprograms can be replaced by programmer-specified subprograms. 3402 This is an exception to the normal scope rules, which forbid duplicate definitions of a subprogram in a scope. 3403 In this case, explicit conversions between the derived type and the old type can be used. 4062 3404 \end{itemize} 4063 \CFA's rules are like Clu's, except that implicit conversions and 4064 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$. 4065 3406 \end{rationale} 4066 3407 … … 4070 3411 A declaration\index{type declaration} of a type identifier \lstinline$T$ with type-class 4071 3412 \lstinline$type$ implicitly declares a \define{default assignment} function 4072 \lstinline$T ?=?( T *, T )$\use{?=?}, with the same \Index{scope} and \Index{linkage} as the 4073 identifier \lstinline$T$. 4074 \begin{rationale} 4075 Assignment is central to C's imperative programming style, and every existing C object type has 4076 assignment defined for it ( except for array types, which are treated as pointer types for purposes 4077 of assignment). Without this rule, nearly every inferred type parameter would need an accompanying 4078 assignment assertion parameter. If a type parameter should not have an assignment operation, 4079 \lstinline$dtype$ should be used. If a type should not have assignment defined, the user can define 4080 an assignment function that causes a run-time error, or provide an external declaration but no 4081 definition and thus cause a link-time error. 4082 \end{rationale} 4083 4084 A definition\index{type definition} of a type identifier \lstinline$T$ with \Index{implementation 4085 type} \lstinline$I$ and type-class \lstinline$type$ implicitly defines a default assignment 4086 function. A definition\index{type definition} of a type identifier \lstinline$T$ with implementation 4087 type \lstinline$I$ and an assertion list implicitly defines \define{default function}s and 4088 \define{default object}s as declared by the assertion declarations. The default objects and 4089 functions have the same \Index{scope} and \Index{linkage} as the identifier \lstinline$T$. Their 4090 values are determined as follows: 3413 \lstinline$T ?=?( T *, T )$\use{?=?}, with the same \Index{scope} and \Index{linkage} as the identifier \lstinline$T$. 3414 \begin{rationale} 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). 3416 Without this rule, nearly every inferred type parameter would need an accompanying assignment assertion parameter. 3417 If a type parameter should not have an assignment operation, 3418 \lstinline$dtype$ should be used. 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. 3420 \end{rationale} 3421 3422 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 3424 \define{default object}s as declared by the assertion declarations. 3425 The default objects and functions have the same \Index{scope} and \Index{linkage} as the identifier \lstinline$T$. 3426 Their values are determined as follows: 4091 3427 \begin{itemize} 4092 3428 \item 4093 If at the definition of \lstinline$T$ there is visible a declaration of an object with the same name 4094 as the default object, and if the type of that object with all occurrence of \lstinline$I$ replaced 4095 by \lstinline$T$ is compatible with the type of the default object, then the default object is 4096 initialized with that object. Otherwise the scope of the declaration of \lstinline$T$ must contain 4097 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. 4098 3431 4099 3432 \item 4100 If at the definition of \lstinline$T$ there is visible a declaration of a function with the same 4101 name as the default function, and if the type of that function with all occurrence of \lstinline$I$ 4102 replaced by \lstinline$T$ is compatible with the type of the default function, then the default 4103 function calls that function after converting its arguments and returns the converted result. 4104 4105 Otherwise, if \lstinline$I$ contains exactly one anonymous member\index{anonymous member} such that 4106 at the definition of \lstinline$T$ there is visible a declaration of a function with the same name 4107 as the default function, and the type of that function with all occurrences of the anonymous 4108 member's type in its parameter list replaced by \lstinline$T$ is compatible with the type of the 4109 default function, then the default function calls that function after converting its arguments and 4110 returns the result. 4111 4112 Otherwise the scope of the declaration of \lstinline$T$ must contain a definition of the default 4113 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. 4114 3438 \end{itemize} 4115 3439 \begin{rationale} 4116 Note that a pointer to a default function will not compare as equal to a pointer to the inherited 4117 function. 4118 \end{rationale} 4119 4120 A function or object with the same type and name as a default function or object that is declared 4121 within the scope of the definition of \lstinline$T$ replaces the default function or object. 3440 Note that a pointer to a default function will not compare as equal to a pointer to the inherited function. 3441 \end{rationale} 3442 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. 4122 3444 4123 3445 \examples 4124 3446 \begin{lstlisting} 4125 context s(type T ) {3447 trait s( otype T ) { 4126 3448 T a, b; 4127 } 4128 struct impl { int left, right; } a = { 0, 0 }; 4129 type Pair | s( Pair ) = struct impl; 3449 } struct impl { int left, right; } a = { 0, 0 }; 3450 otype Pair | s( Pair ) = struct impl; 4130 3451 Pair b = { 1, 1 }; 4131 3452 \end{lstlisting} 4132 3453 The definition of \lstinline$Pair$ implicitly defines two objects \lstinline$a$ and \lstinline$b$. 4133 \lstinline$Pair a$ inherits its value from the \lstinline$struct impl a$. The definition of4134 \lstinline$Pair b$ is compulsory because there is no \lstinline$struct impl b$ to construct a value 4135 from.4136 \begin{lstlisting} 4137 context ss(type T ) {3454 \lstinline$Pair a$ inherits its value from the \lstinline$struct impl a$. 3455 The definition of 3456 \lstinline$Pair b$ is compulsory because there is no \lstinline$struct impl b$ to construct a value from. 3457 \begin{lstlisting} 3458 trait ss( otype T ) { 4138 3459 T clone( T ); 4139 3460 void munge( T * ); 4140 3461 } 4141 type Whatsit | ss( Whatsit );@\use{Whatsit}@4142 type Doodad | ss( Doodad ) = struct doodad {@\use{Doodad}@3462 otype Whatsit | ss( Whatsit );@\use{Whatsit}@ 3463 otype Doodad | ss( Doodad ) = struct doodad {@\use{Doodad}@ 4143 3464 Whatsit; // anonymous member 4144 3465 int extra; … … 4152 3473 void munge( Doodad * ); 4153 3474 \end{lstlisting} 4154 The assignment function inherits \lstinline$struct doodad$'s assignment function because the types 4155 match when \lstinline$struct doodad$ is replaced by \lstinline$Doodad$ throughout. 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. 4156 3476 \lstinline$munge()$ inherits \lstinline$Whatsit$'s \lstinline$munge()$ because the types match when 4157 \lstinline$Whatsit$ is replaced by \lstinline$Doodad$ in the parameter list. \lstinline$clone()$ 4158 does \emph{not} inherit \lstinline$Whatsit$'s \lstinline$clone()$: replacement in the parameter 4159 list yields ``\lstinline$Whatsit clone( Doodad )$'', which is not compatible with 4160 \lstinline$Doodad$'s \lstinline$clone()$'s type. Hence the definition of 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. 3479 Hence the definition of 4161 3480 ``\lstinline$Doodad clone( Doodad )$'' is necessary. 4162 3481 4163 3482 Default functions and objects are subject to the normal scope rules. 4164 3483 \begin{lstlisting} 4165 type T = @\ldots@;3484 otype T = @\ldots@; 4166 3485 T a_T = @\ldots@; // Default assignment used. 4167 3486 T ?=?( T *, T ); … … 4173 3492 4174 3493 \begin{rationale} 4175 The \emph{class} construct of object-oriented programming languages performs three independent 4176 functions. It \emph{encapsulates} a data structure; it defines a \emph{subtype} relationship, whereby 4177 i nstances of one class may be used in contexts that require instances of another; and it allows one4178 class to \emph{inherit} the implementation of another.4179 4180 In \CFA, encapsulation is provided by opaque types and the scope rules, and subtyping is provided 4181 by specifications and assertions.Inheritance is provided by default functions and objects.3494 The \emph{class} construct of object-oriented programming languages performs three independent functions. 3495 It \emph{encapsulates} a data structure; 3496 it defines a \emph{subtype} relationship, whereby instances of one class may be used in contexts that require instances of another; 3497 and it allows one class to \emph{inherit} the implementation of another. 3498 3499 In \CFA, encapsulation is provided by opaque types and the scope rules, and subtyping is provided by specifications and assertions. 3500 Inheritance is provided by default functions and objects. 4182 3501 \end{rationale} 4183 3502 … … 4190 3509 \end{syntax} 4191 3510 4192 Many statements contain expressions, which may have more than one interpretation. The following4193 sections describe how the \CFA translator selects an interpretation. In all cases the result of the 4194 selection shall be a single unambiguous \Index{interpretation}.3511 Many statements contain expressions, which may have more than one interpretation. 3512 The following sections describe how the \CFA translator selects an interpretation. 3513 In all cases the result of the selection shall be a single unambiguous \Index{interpretation}. 4195 3514 4196 3515 … … 4239 3558 switch ( E ) ... 4240 3559 choose ( E ) ... 4241 \end{lstlisting} 4242 may have more than one interpretation, but it shall have only one interpretation with an integral type. 3560 \end{lstlisting} may have more than one interpretation, but it shall have only one interpretation with an integral type. 4243 3561 An \Index{integer promotion} is performed on the expression if necessary. 4244 3562 The constant expressions in \lstinline$case$ statements with the switch are converted to the promoted type. … … 4284 3602 while ( E ) ... 4285 3603 do ... while ( E ); 4286 \end{lstlisting} 4287 is treated as ``\lstinline$( int )((E)!=0)$''. 3604 \end{lstlisting} is treated as ``\lstinline$( int )((E)!=0)$''. 4288 3605 4289 3606 The statement 4290 3607 \begin{lstlisting} 4291 3608 for ( a; b; c ) @\ldots@ 4292 \end{lstlisting} 4293 is treated as 3609 \end{lstlisting} is treated as 4294 3610 \begin{lstlisting} 4295 3611 for ( ( void )( a ); ( int )(( b )!=0); ( void )( c ) ) ... … … 4413 3729 4414 3730 The implementation shall define the macro names \lstinline$__LINE__$, \lstinline$__FILE__$, 4415 \lstinline$__DATE__$, and \lstinline$__TIME__$, as in the {\c11} standard. It shall not define the 4416 macro name \lstinline$__STDC__$. 4417 4418 In addition, the implementation shall define the macro name \lstinline$__CFORALL__$ to be the 4419 decimal constant 1. 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. 4420 3735 4421 3736 … … 4427 3742 4428 3743 \section{C types} 4429 This section gives example specifications for some groups of types that are important in the C 4430 language, in terms of the predefined operations that can be applied to those types. 3744 This section gives example specifications for some groups of types that are important in the C language, in terms of the predefined operations that can be applied to those types. 4431 3745 4432 3746 4433 3747 \subsection{Scalar, arithmetic, and integral types} 4434 3748 4435 The pointer, integral, and floating-point types are all \define{scalar types}. All of these types4436 can be logically negated and compared. The assertion ``\lstinline$scalar( Complex )$'' should be read 4437 as ``type \lstinline$Complex$ is scalar''.4438 \begin{lstlisting} 4439 context scalar(type T ) {@\impl{scalar}@3749 The pointer, integral, and floating-point types are all \define{scalar types}. 3750 All of these types can be logically negated and compared. 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}@ 4440 3754 int !?( T ); 4441 3755 int ?<?( T, T ), ?<=?( T, T ), ?==?( T, T ), ?>=?( T, T ), ?>?( T, T ), ?!=?( T, T ); … … 4443 3757 \end{lstlisting} 4444 3758 4445 The integral and floating-point types are \define{arithmetic types}, which support the basic 4446 arithmetic operators. The use of an assertion in the \nonterm{spec-parameter-list} declares that, 4447 in order to be arithmetic, a type must also be scalar ( and hence that scalar operations are 4448 available ). This is equivalent to inheritance of specifications. 4449 \begin{lstlisting} 4450 context arithmetic( type T | scalar( T ) ) {@\impl{arithmetic}@@\use{scalar}@ 3759 The integral and floating-point types are \define{arithmetic types}, which support the basic arithmetic operators. 3760 The use of an assertion in the \nonterm{spec-parameter-list} declares that, in order to be arithmetic, a type must also be scalar ( and hence that scalar operations are available ). 3761 This is equivalent to inheritance of specifications. 3762 \begin{lstlisting} 3763 trait arithmetic( otype T | scalar( T ) ) {@\impl{arithmetic}@@\use{scalar}@ 4451 3764 T +?( T ), -?( T ); 4452 3765 T ?*?( T, T ), ?/?( T, T ), ?+?( T, T ), ?-?( T, T ); … … 4457 3770 \define{integral types}. 4458 3771 \begin{lstlisting} 4459 context integral(type T | arithmetic( T ) ) {@\impl{integral}@@\use{arithmetic}@3772 trait integral( otype T | arithmetic( T ) ) {@\impl{integral}@@\use{arithmetic}@ 4460 3773 T ~?( T ); 4461 3774 T ?&?( T, T ), ?|?( T, T ), ?^?( T, T ); … … 4471 3784 The only operation that can be applied to all modifiable lvalues is simple assignment. 4472 3785 \begin{lstlisting} 4473 context m_lvalue(type T ) {@\impl{m_lvalue}@3786 trait m_lvalue( otype T ) {@\impl{m_lvalue}@ 4474 3787 T ?=?( T *, T ); 4475 3788 }; … … 4477 3790 4478 3791 Modifiable scalar lvalues are scalars and are modifiable lvalues, and assertions in the 4479 \nonterm{spec-parameter-list} reflect those relationships. This is equivalent to multiple 4480 inheritance of specifications. Scalars can also be incremented and decremented. 4481 \begin{lstlisting} 4482 context m_l_scalar( type T | scalar( T ) | m_lvalue( T ) ) {@\impl{m_l_scalar}@ 3792 \nonterm{spec-parameter-list} reflect those relationships. 3793 This is equivalent to multiple inheritance of specifications. 3794 Scalars can also be incremented and decremented. 3795 \begin{lstlisting} 3796 trait m_l_scalar( otype T | scalar( T ) | m_lvalue( T ) ) {@\impl{m_l_scalar}@ 4483 3797 T ?++( T * ), ?--( T * );@\use{scalar}@@\use{m_lvalue}@ 4484 3798 T ++?( T * ), --?( T * ); … … 4486 3800 \end{lstlisting} 4487 3801 4488 Modifiable arithmetic lvalues are both modifiable scalar lvalues and arithmetic. Note that this4489 results in the ``inheritance'' of \lstinline$scalar$ along both paths.4490 \begin{lstlisting} 4491 context m_l_arithmetic(type T | m_l_scalar( T ) | arithmetic( T ) ) {@\impl{m_l_arithmetic}@3802 Modifiable arithmetic lvalues are both modifiable scalar lvalues and 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}@ 4492 3806 T ?/=?( T *, T ), ?*=?( T *, T );@\use{m_l_scalar}@@\use{arithmetic}@ 4493 3807 T ?+=?( T *, T ), ?-=?( T *, T ); 4494 3808 }; 4495 4496 context m_l_integral( type T | m_l_arithmetic( T ) | integral( T ) ) {@\impl{m_l_integral}@ 3809 trait m_l_integral( otype T | m_l_arithmetic( T ) | integral( T ) ) {@\impl{m_l_integral}@ 4497 3810 T ?&=?( T *, T ), ?|=?( T *, T ), ?^=?( T *, T );@\use{m_l_arithmetic}@ 4498 3811 T ?%=?( T *, T ), ?<<=?( T *, T ), ?>>=?( T *, T );@\use{integral}@ … … 4503 3816 \subsection{Pointer and array types} 4504 3817 4505 Array types can barely be said to exist in {\c11}, since in most cases an array name is treated as a 4506 constant pointer to the first element of the array, and the subscript expression 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 4507 3819 ``\lstinline$a[i]$'' is equivalent to the dereferencing expression ``\lstinline$(*( a+( i )))$''. 4508 3820 Technically, pointer arithmetic and pointer comparisons other than ``\lstinline$==$'' and 4509 ``\lstinline$!=$'' are only defined for pointers to array elements, but the type system does not 4510 enforce those restrictions. Consequently, there is no need for a separate ``array type'' 4511 specification. 4512 4513 Pointer types are scalar types.Like other scalar types, they have ``\lstinline$+$'' and3821 ``\lstinline$!=$'' are only defined for pointers to array elements, but the type system does not enforce those restrictions. 3822 Consequently, there is no need for a separate ``array type'' specification. 3823 3824 Pointer types are scalar types. 3825 Like other scalar types, they have ``\lstinline$+$'' and 4514 3826 ``\lstinline$-$'' operators, but the types do not match the types of the operations in 4515 3827 \lstinline$arithmetic$, so these operators cannot be consolidated in \lstinline$scalar$. 4516 3828 \begin{lstlisting} 4517 context pointer( type P | scalar( P ) ) {@\impl{pointer}@@\use{scalar}@3829 trait pointer( type P | scalar( P ) ) {@\impl{pointer}@@\use{scalar}@ 4518 3830 P ?+?( P, long int ), ?+?( long int, P ), ?-?( P, long int ); 4519 3831 ptrdiff_t ?-?( P, P ); 4520 3832 }; 4521 4522 context 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}@ 4523 3834 P ?+=?( P *, long int ), ?-=?( P *, long int ); 4524 3835 P ?=?( P *, void * ); … … 4527 3838 \end{lstlisting} 4528 3839 4529 Specifications that define the dereference operator ( or subscript operator ) require two 4530 parameters, one for the pointer type and one for the pointed-at ( or element ) type. Different 4531 specifications are needed for each set of \Index{type qualifier}s, because qualifiers are not 4532 included in types. The assertion ``\lstinline$|ptr_to( Safe_pointer, int )$'' should be read as 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. 3841 Different specifications are needed for each set of \Index{type qualifier}s, because qualifiers are not included in types. 3842 The assertion ``\lstinline$|ptr_to( Safe_pointer, int )$'' should be read as 4533 3843 ``\lstinline$Safe_pointer$ acts like a pointer to \lstinline$int$''. 4534 3844 \begin{lstlisting} 4535 context ptr_to( type P | pointer( P ), type T ) {@\impl{ptr_to}@@\use{pointer}@ 4536 lvalue T *?( P ); lvalue T ?[?]( P, long int ); 3845 trait ptr_to( type P | pointer( P ), otype T ) {@\impl{ptr_to}@@\use{pointer}@ 3846 lvalue T *?( P ); 3847 lvalue T ?[?]( P, long int ); 4537 3848 }; 4538 4539 context ptr_to_const( type P | pointer( P ), type T ) {@\impl{ptr_to_const}@ 4540 const lvalue T *?( P ); const lvalue T?[?]( P, long int );@\use{pointer}@3849 trait ptr_to_const( type P | pointer( P ), otype T ) {@\impl{ptr_to_const}@ 3850 const lvalue T *?( P ); 3851 const lvalue T ?[?]( P, long int );@\use{pointer}@ 4541 3852 }; 4542 4543 context ptr_to_volatile( type P | pointer( P ), type T ) }@\impl{ptr_to_volatile}@ 4544 volatile lvalue T *?( P ); volatile lvalue T?[?]( P, long int );@\use{pointer}@3853 trait ptr_to_volatile( type P | pointer( P ), otype T ) }@\impl{ptr_to_volatile}@ 3854 volatile lvalue T *?( P ); 3855 volatile lvalue T ?[?]( P, long int );@\use{pointer}@ 4545 3856 }; 4546 \end{lstlisting} 4547 \begin{lstlisting} 4548 context ptr_to_const_volatile( type P | pointer( P ), type T ) }@\impl{ptr_to_const_volatile}@ 3857 trait ptr_to_const_volatile( type P | pointer( P ), otype T ) }@\impl{ptr_to_const_volatile}@ 4549 3858 const volatile lvalue T *?( P );@\use{pointer}@ 4550 3859 const volatile lvalue T ?[?]( P, long int ); … … 4552 3861 \end{lstlisting} 4553 3862 4554 Assignment to pointers is more complicated than is the case with other types, because the target's 4555 type can have extra type qualifiers in the pointed-at type: a ``\lstinline$T *$'' can be assigned to 4556 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 *$''. 4557 3864 Again, the pointed-at type is passed in, so that assertions can connect these specifications to the 4558 3865 ``\lstinline$ptr_to$'' specifications. 4559 3866 \begin{lstlisting} 4560 context m_l_ptr_to( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to}@type T | ptr_to( P, T )@\use{ptr_to}@ {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}@ { 4561 3868 P ?=?( P *, T * ); 4562 3869 T * ?=?( T **, P ); 4563 3870 }; 4564 4565 context m_l_ptr_to_const( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to_const}@ type T | ptr_to_const( P, T )@\use{ptr_to_const}@) { 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}@) { 4566 3872 P ?=?( P *, const T * ); 4567 3873 const T * ?=?( const T **, P ); 4568 3874 }; 4569 4570 context m_l_ptr_to_volatile( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to_volatile}@ type T | ptr_to_volatile( P, T )) {@\use{ptr_to_volatile}@ 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}@ 4571 3876 P ?=?( P *, volatile T * ); 4572 3877 volatile T * ?=?( volatile T **, P ); 4573 3878 }; 4574 4575 context 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}@ 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}@ 4576 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}@ 4577 3881 P ?=?( P *, const volatile T * ); … … 4580 3884 \end{lstlisting} 4581 3885 4582 Note the regular manner in which type qualifiers appear in those specifications. An alternative 4583 specification can make use of the fact that qualification of the pointed-at type is part of a 4584 pointer type to capture that regularity. 4585 \begin{lstlisting} 4586 context 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 ) ) { 3886 Note the regular manner in which type qualifiers appear in those specifications. 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. 3888 \begin{lstlisting} 3889 trait m_l_ptr_like( type MyP | m_l_pointer( MyP ),@\use{m_l_pointer}@@\impl{m_l_ptr_like}@ type CP | m_l_pointer( CP ) ) { 4587 3890 MyP ?=?( MyP *, CP ); 4588 3891 CP ?=?( CP *, MyP ); … … 4590 3893 \end{lstlisting} 4591 3894 The assertion ``\lstinline$| m_l_ptr_like( Safe_ptr, const int * )$'' should be read as 4592 ``\lstinline$Safe_ptr$ is a pointer type like \lstinline$const int *$''. This specification has two4593 defects, compared to the original four: there is no automatic assertion that dereferencing a3895 ``\lstinline$Safe_ptr$ is a pointer type like \lstinline$const int *$''. 3896 This specification has two defects, compared to the original four: there is no automatic assertion that dereferencing a 4594 3897 \lstinline$MyP$ produces an lvalue of the type that \lstinline$CP$ points at, and the 4595 ``\lstinline$|m_l_pointer( CP )$'' assertion provides only a weak assurance that the argument passed 4596 to \lstinline$CP$ really is a pointer type. 3898 ``\lstinline$|m_l_pointer( CP )$'' assertion provides only a weak assurance that the argument passed to \lstinline$CP$ really is a pointer type. 4597 3899 4598 3900 4599 3901 \section{Relationships between operations} 4600 3902 4601 Different operators often have related meanings; for instance, in C, ``\lstinline$+$'', 3903 Different operators often have related meanings; 3904 for instance, in C, ``\lstinline$+$'', 4602 3905 ``\lstinline$+=$'', and the two versions of ``\lstinline$++$'' perform variations of addition. 4603 Languages like {\CC} and Ada allow programmers to define operators for new types, but do not 4604 require that these relationships be preserved, or even that all of the operators be implemented. 4605 Completeness and consistency is left to the good taste and discretion of the programmer. It is 4606 possible to encourage these attributes by providing generic operator functions, or member functions 4607 of abstract classes, that are defined in terms of other, related operators. 4608 4609 In \CFA, polymorphic functions provide the equivalent of these generic operators, and 4610 specifications explicitly define the minimal implementation that a programmer should provide. This 4611 section shows a few examples. 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. 3907 Completeness and consistency is left to the good taste and discretion of the programmer. 3908 It is possible to encourage these attributes by providing generic operator functions, or member functions of abstract classes, that are defined in terms of other, related operators. 3909 3910 In \CFA, polymorphic functions provide the equivalent of these generic operators, and specifications explicitly define the minimal implementation that a programmer should provide. 3911 This section shows a few examples. 4612 3912 4613 3913 4614 3914 \subsection{Relational and equality operators} 4615 3915 4616 The different comparison operators have obvious relationships, but there is no obvious subset of the 4617 operations to use in the implementation of the others. However, it is usually convenient to 4618 implement a single comparison function that returns a negative integer, 0, or a positive integer if 4619 its first argument is respectively less than, equal to, or greater than its second argument; the 4620 library function \lstinline$strcmp$ is an example. 4621 4622 C and \CFA have an extra, non-obvious comparison operator: ``\lstinline$!$'', logical negation, 4623 returns 1 if its operand compares equal to 0, and 0 otherwise. 4624 \begin{lstlisting} 4625 context comparable( type T ) { 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. 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; 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. 3921 \begin{lstlisting} 3922 trait comparable( otype T ) { 4626 3923 const T 0; 4627 3924 int compare( T, T ); 4628 3925 } 4629 4630 forall( type T | comparable( T ) ) int ?<?( T l, T r ) { 3926 forall( otype T | comparable( T ) ) int ?<?( T l, T r ) { 4631 3927 return compare( l, r ) < 0; 4632 3928 } 4633 3929 // ... similarly for <=, ==, >=, >, and !=. 4634 4635 forall( type T | comparable( T ) ) int !?( T operand ) { 3930 forall( otype T | comparable( T ) ) int !?( T operand ) { 4636 3931 return !compare( operand, 0 ); 4637 3932 } … … 4641 3936 \subsection{Arithmetic and integer operations} 4642 3937 4643 A complete arithmetic type would provide the arithmetic operators and the corresponding assignment 4644 operators. Of these, the assignment operators are more likely to be implemented directly, because 4645 it is usually more efficient to alter the contents of an existing object than to create and return a 4646 new one. Similarly, a complete integral type would provide integral operations based on integral 4647 assignment operations. 4648 \begin{lstlisting} 4649 context arith_base( type T ) { 3938 A complete arithmetic type would provide the arithmetic operators and the corresponding assignment operators. 3939 Of these, the assignment operators are more likely to be implemented directly, because it is usually more efficient to alter the contents of an existing object than to create and return a new one. 3940 Similarly, a complete integral type would provide integral operations based on integral assignment operations. 3941 \begin{lstlisting} 3942 trait arith_base( otype T ) { 4650 3943 const T 1; 4651 3944 T ?+=?( T *, T ), ?-=?( T *, T ), ?*=?( T *, T ), ?/=?( T *, T ); 4652 3945 } 4653 4654 forall( type T | arith_base( T ) ) T ?+?( T l, T r ) { 3946 forall( otype T | arith_base( T ) ) T ?+?( T l, T r ) { 4655 3947 return l += r; 4656 3948 } 4657 4658 forall( type T | arith_base( T ) ) T ?++( T * operand ) { 3949 forall( otype T | arith_base( T ) ) T ?++( T * operand ) { 4659 3950 T temporary = *operand; 4660 3951 *operand += 1; 4661 3952 return temporary; 4662 3953 } 4663 4664 forall( type T | arith_base( T ) ) T ++?( T * operand ) { 3954 forall( otype T | arith_base( T ) ) T ++?( T * operand ) { 4665 3955 return *operand += 1; 4666 3956 } 4667 3957 // ... similarly for -, --, *, and /. 4668 4669 context int_base( type T ) { 3958 trait int_base( otype T ) { 4670 3959 T ?&=?( T *, T ), ?|=?( T *, T ), ?^=?( T *, T ); 4671 3960 T ?%=?( T *, T ), ?<<=?( T *, T ), ?>>=?( T *, T ); 4672 3961 } 4673 4674 forall( type T | int_base( T ) ) T ?&?( T l, T r ) { 3962 forall( otype T | int_base( T ) ) T ?&?( T l, T r ) { 4675 3963 return l &= r; 4676 3964 } … … 4678 3966 \end{lstlisting} 4679 3967 4680 Note that, although an arithmetic type would certainly provide comparison functions, and an integral 4681 type would provide arithmetic operations, there does not have to be any relationship among 4682 \lstinline$int_base$, \lstinline$arith_base$ and \lstinline$comparable$. Note also that these 4683 declarations provide guidance and assistance, but they do not define an absolutely minimal set of 4684 requirements. A truly minimal implementation of an arithmetic type might only provide 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 3969 \lstinline$int_base$, \lstinline$arith_base$ and \lstinline$comparable$. 3970 Note also that these declarations provide guidance and assistance, but they do not define an absolutely minimal set of requirements. 3971 A truly minimal implementation of an arithmetic type might only provide 4685 3972 \lstinline$0$, \lstinline$1$, and \lstinline$?-=?$, which would be used by polymorphic 4686 3973 \lstinline$?+=?$, \lstinline$?*=?$, and \lstinline$?/=?$ functions. … … 4692 3979 Review index entries. 4693 3980 4694 Restrict allowed to qualify anything, or type/dtype parameters, but only affects pointers. This gets 4695 into \lstinline$noalias$ territory. Qualifying anything (``\lstinline$short restrict rs$'') means 4696 pointer parameters of \lstinline$?++$, etc, would need restrict qualifiers. 4697 4698 Enumerated types. Constants are not ints. Overloading. Definition should be ``representable as an 4699 integer type'', not ``as an int''. C11 usual conversions freely convert to and from ordinary 4700 integer types via assignment, which works between any integer types. Does enum Color ?*?( enum 3981 Restrict allowed to qualify anything, or type/dtype parameters, but only affects pointers. 3982 This gets into \lstinline$noalias$ territory. 3983 Qualifying anything (``\lstinline$short restrict rs$'') means pointer parameters of \lstinline$?++$, etc, would need restrict qualifiers. 3984 3985 Enumerated types. 3986 Constants are not ints. 3987 Overloading. 3988 Definition should be ``representable as an integer type'', not ``as an int''. 3989 C11 usual conversions freely convert to and from ordinary integer types via assignment, which works between any integer types. 3990 Does enum Color ?*?( enum 4701 3991 Color, enum Color ) really make sense? ?++ does, but it adds (int)1. 4702 3992 4703 Operators on {,signed,unsigned} char and other small types. ?<? harmless; ?*? questionable for 4704 chars. Generic selections make these choices visible. Safe conversion operators? Predefined 3993 Operators on {,signed,unsigned} char and other small types. ?<? harmless; 3994 ?*? questionable for chars. 3995 Generic selections make these choices visible. 3996 Safe conversion operators? Predefined 4705 3997 ``promotion'' function? 4706 3998 4707 \lstinline$register$ assignment might be handled as assignment to a temporary with copying back and 4708 forth, but copying must not be done by assignment. 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. 4709 4000 4710 4001 Don't use ptrdiff\_t by name in the predefineds. 4711 4002 4712 Polymorphic objects. Polymorphic typedefs and type declarations. 4003 Polymorphic objects. 4004 Polymorphic typedefs and type declarations. 4713 4005 4714 4006 … … 4719 4011 \addcontentsline{toc}{chapter}{\indexname} % add index name to table of contents 4720 4012 \begin{theindex} 4721 Italic page numbers give the location of the main entry for the referenced term. Plain page numbers 4722 denote uses of the indexed term. Entries for grammar non-terminals are italicized. A typewriter 4723 font is used for grammar terminals and program identifiers. 4013 Italic page numbers give the location of the main entry for the referenced term. 4014 Plain page numbers denote uses of the indexed term. 4015 Entries for grammar non-terminals are italicized. 4016 A typewriter font is used for grammar terminals and program identifiers. 4724 4017 \indexspace 4725 4018 \input{refrat.ind} -
src/CodeGen/CodeGenerator.cc
r39786813 ra5a71d0 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Rob Schluntz 12 // Last Modified On : Wed Mar 30 14:39:30201612 // Last Modified On : Mon Apr 04 17:08:06 2016 13 13 // Update Count : 255 14 14 // … … 21 21 #include "Parser/ParseNode.h" 22 22 23 #include "SynTree/ Type.h"23 #include "SynTree/Declaration.h" 24 24 #include "SynTree/Expression.h" 25 25 #include "SynTree/Initializer.h" 26 26 #include "SynTree/Statement.h" 27 #include "SynTree/Type.h" 27 28 28 29 #include "Common/utility.h" … … 170 171 } 171 172 172 void CodeGenerator::visit( ContextDecl *aggregateDecl ) {}173 void CodeGenerator::visit( TraitDecl *aggregateDecl ) {} 173 174 174 175 void CodeGenerator::visit( TypedefDecl *typeDecl ) { -
src/CodeGen/CodeGenerator.h
r39786813 ra5a71d0 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Rob Schluntz12 // Last Modified On : Wed Aug 12 14:27:14 201513 // Update Count : 2 711 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 17:32:24 2016 13 // Update Count : 28 14 14 // 15 15 … … 19 19 #include <list> 20 20 21 #include "SynTree/Declaration.h" 21 22 #include "SynTree/SynTree.h" 22 23 #include "SynTree/Visitor.h" 24 23 25 #include "SymTab/Indexer.h" 24 26 … … 38 40 virtual void visit( UnionDecl *aggregateDecl ); 39 41 virtual void visit( EnumDecl *aggregateDecl ); 40 virtual void visit( ContextDecl *aggregateDecl );42 virtual void visit( TraitDecl *aggregateDecl ); 41 43 virtual void visit( TypedefDecl *typeDecl ); 42 44 virtual void visit( TypeDecl *typeDecl ); -
src/CodeGen/GenType.cc
r39786813 ra5a71d0 19 19 #include "GenType.h" 20 20 #include "CodeGenerator.h" 21 22 #include "SynTree/Declaration.h" 23 #include "SynTree/Expression.h" 24 #include "SynTree/Type.h" 21 25 #include "SynTree/Visitor.h" 22 #include "SynTree/Type.h"23 #include "SynTree/Expression.h"24 26 25 27 namespace CodeGen { … … 194 196 void GenType::visit( VarArgsType *varArgsType ) { 195 197 typeString = "__builtin_va_list " + typeString; 196 // don't handle qualifiers, var args pack shouldn't have any198 handleQualifiers( varArgsType ); 197 199 } 198 200 -
src/GenPoly/Box.cc
r39786813 ra5a71d0 14 14 // 15 15 16 #include <algorithm> 17 #include <iterator> 18 #include <list> 19 #include <map> 16 20 #include <set> 17 21 #include <stack> 18 22 #include <string> 19 #include < iterator>20 #include < algorithm>23 #include <utility> 24 #include <vector> 21 25 #include <cassert> 22 26 23 27 #include "Box.h" 24 #include " InstantiateGeneric.h"28 #include "DeclMutator.h" 25 29 #include "PolyMutator.h" 26 30 #include "FindFunction.h" 31 #include "ScopedMap.h" 27 32 #include "ScrubTyVars.h" 28 33 … … 30 35 31 36 #include "SynTree/Constant.h" 32 #include "SynTree/ Type.h"37 #include "SynTree/Declaration.h" 33 38 #include "SynTree/Expression.h" 34 39 #include "SynTree/Initializer.h" 40 #include "SynTree/Mutator.h" 35 41 #include "SynTree/Statement.h" 36 #include "SynTree/Mutator.h" 42 #include "SynTree/Type.h" 43 #include "SynTree/TypeSubstitution.h" 37 44 38 45 #include "ResolvExpr/TypeEnvironment.h" … … 40 47 #include "ResolvExpr/typeops.h" 41 48 49 #include "SymTab/Indexer.h" 42 50 #include "SymTab/Mangler.h" 43 51 … … 54 62 FunctionType *makeAdapterType( FunctionType *adaptee, const TyVarMap &tyVars ); 55 63 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); } 71 72 /// Extracts types from a list of TypeExpr* 73 ConcreteType(AggregateDecl *_base, const std::list< TypeExpr* >& _params) : base(_base), params() { 74 for ( std::list< TypeExpr* >::const_iterator param = _params.begin(); param != _params.end(); ++param ) { 75 params.push_back( (*param)->get_type()->clone() ); 76 } 77 } 78 79 ConcreteType& operator= (const ConcreteType& that) { 80 deleteAll( params ); 81 params.clear(); 82 83 base = that.base; 84 cloneAll( that.params, params ); 85 86 return *this; 87 } 88 89 ~ConcreteType() { deleteAll( params ); } 90 91 bool operator== (const ConcreteType& that) const { 92 if ( base != that.base ) return false; 93 94 SymTab::Indexer dummy; 95 if ( params.size() != that.params.size() ) return false; 96 for ( std::list< Type* >::const_iterator it = params.begin(), jt = that.params.begin(); it != params.end(); ++it, ++jt ) { 97 if ( ! ResolvExpr::typesCompatible( *it, *jt, dummy ) ) return false; 98 } 99 return true; 100 } 101 102 AggregateDecl *base; ///< Base generic type 103 std::list< Type* > params; ///< Instantiation parameters 104 }; 105 106 /// Maps a concrete type to the some value, accounting for scope 107 template< typename Value > 108 class InstantiationMap { 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 121 122 public: 123 /// Starts a new scope 124 void beginScope() { 125 Scope scope; 126 scopes.push_back(scope); 127 } 128 129 /// Ends a scope 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; 150 } 151 } 152 // no matching instantiation found 153 return 0; 154 } 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 ); } 168 }; 169 170 /// Adds layout-generation functions to polymorphic types 171 class LayoutFunctionBuilder : public DeclMutator { 172 unsigned int functionNesting; // current level of nested functions 173 public: 174 LayoutFunctionBuilder() : functionNesting( 0 ) {} 175 176 virtual DeclarationWithType *mutate( FunctionDecl *functionDecl ); 177 virtual Declaration *mutate( StructDecl *structDecl ); 178 virtual Declaration *mutate( UnionDecl *unionDecl ); 179 }; 180 56 181 /// Replaces polymorphic return types with out-parameters, replaces calls to polymorphic functions with adapter calls as needed, and adds appropriate type variables to the function call 57 182 class Pass1 : public PolyMutator { … … 100 225 ObjectDecl *makeTemporary( Type *type ); 101 226 102 typedef std::map< std::string, DeclarationWithType *> AdapterMap;103 227 std::map< std::string, DeclarationWithType *> assignOps; 104 228 ResolvExpr::TypeMap< DeclarationWithType > scopedAssignOps; 105 std::stack< AdapterMap> adapters;229 ScopedMap< std::string, DeclarationWithType* > adapters; 106 230 DeclarationWithType *retval; 107 231 bool useRetval; … … 124 248 125 249 std::map< UniqueId, std::string > adapterName; 250 }; 251 252 /// Mutator pass that replaces concrete instantiations of generic types with actual struct declarations, scoped appropriately 253 class GenericInstantiator : public DeclMutator { 254 /// Map of (generic type, parameter list) pairs to concrete type instantiations 255 InstantiationMap< AggregateDecl > instantiations; 256 /// Namer for concrete types 257 UniqueName typeNamer; 258 259 public: 260 GenericInstantiator() : DeclMutator(), instantiations(), typeNamer("_conc_") {} 261 262 virtual Type* mutate( StructInstType *inst ); 263 virtual Type* mutate( UnionInstType *inst ); 264 265 // virtual Expression* mutate( MemberExpr *memberExpr ); 266 267 virtual void doBeginScope(); 268 virtual void doEndScope(); 269 private: 270 /// Wrap instantiation lookup for structs 271 StructDecl* lookup( StructInstType *inst, const std::list< TypeExpr* > &typeSubs ) { return (StructDecl*)instantiations.lookup( inst->get_baseStruct(), typeSubs ); } 272 /// Wrap instantiation lookup for unions 273 UnionDecl* lookup( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs ) { return (UnionDecl*)instantiations.lookup( inst->get_baseUnion(), typeSubs ); } 274 /// Wrap instantiation insertion for structs 275 void insert( StructInstType *inst, const std::list< TypeExpr* > &typeSubs, StructDecl *decl ) { instantiations.insert( inst->get_baseStruct(), typeSubs, decl ); } 276 /// Wrap instantiation insertion for unions 277 void insert( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs, UnionDecl *decl ) { instantiations.insert( inst->get_baseUnion(), typeSubs, decl ); } 126 278 }; 127 279 … … 159 311 } // anonymous namespace 160 312 161 void printAllNotBuiltin( const std::list< Declaration *>& translationUnit, std::ostream &os ) {162 for ( std::list< Declaration *>::const_iterator i = translationUnit.begin(); i != translationUnit.end(); ++i ) {163 if ( ! LinkageSpec::isBuiltin( (*i)->get_linkage() ) ) {164 (*i)->print( os );165 os << std::endl;166 } // if167 } // for168 }169 170 313 /// version of mutateAll with special handling for translation unit so you can check the end of the prelude when debugging 171 314 template< typename MutatorType > … … 195 338 196 339 void box( std::list< Declaration *>& translationUnit ) { 340 LayoutFunctionBuilder layoutBuilder; 197 341 Pass1 pass1; 198 342 Pass2 pass2; 343 GenericInstantiator instantiator; 199 344 MemberExprFixer memberFixer; 200 345 Pass3 pass3; 346 347 layoutBuilder.mutateDeclarationList( translationUnit ); 201 348 mutateTranslationUnit/*All*/( translationUnit, pass1 ); 202 349 mutateTranslationUnit/*All*/( translationUnit, pass2 ); 203 instantiateGeneric( translationUnit ); 350 // instantiateGeneric( translationUnit ); 351 instantiator.mutateDeclarationList( translationUnit ); 204 352 mutateTranslationUnit/*All*/( translationUnit, memberFixer ); 205 353 mutateTranslationUnit/*All*/( translationUnit, pass3 ); 206 354 } 207 355 356 ////////////////////////////////// LayoutFunctionBuilder //////////////////////////////////////////// 357 358 DeclarationWithType *LayoutFunctionBuilder::mutate( FunctionDecl *functionDecl ) { 359 functionDecl->set_functionType( maybeMutate( functionDecl->get_functionType(), *this ) ); 360 mutateAll( functionDecl->get_oldDecls(), *this ); 361 ++functionNesting; 362 functionDecl->set_statements( maybeMutate( functionDecl->get_statements(), *this ) ); 363 --functionNesting; 364 return functionDecl; 365 } 366 367 /// Get a list of type declarations that will affect a layout function 368 std::list< TypeDecl* > takeOtypeOnly( std::list< TypeDecl* > &decls ) { 369 std::list< TypeDecl * > otypeDecls; 370 371 for ( std::list< TypeDecl* >::const_iterator decl = decls.begin(); decl != decls.end(); ++decl ) { 372 if ( (*decl)->get_kind() == TypeDecl::Any ) { 373 otypeDecls.push_back( *decl ); 374 } 375 } 376 377 return otypeDecls; 378 } 379 380 /// Adds parameters for otype layout to a function type 381 void addOtypeParams( FunctionType *layoutFnType, std::list< TypeDecl* > &otypeParams ) { 382 BasicType sizeAlignType( Type::Qualifiers(), BasicType::LongUnsignedInt ); 383 384 for ( std::list< TypeDecl* >::const_iterator param = otypeParams.begin(); param != otypeParams.end(); ++param ) { 385 TypeInstType paramType( Type::Qualifiers(), (*param)->get_name(), *param ); 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 ) ); 388 } 389 } 390 391 /// Builds a layout function declaration 392 FunctionDecl *buildLayoutFunctionDecl( const std::string &typeName, unsigned int functionNesting, FunctionType *layoutFnType ) { 393 // Routines at global scope marked "static" to prevent multiple definitions is separate translation units 394 // because each unit generates copies of the default routines for each aggregate. 395 FunctionDecl *layoutDecl = new FunctionDecl( 396 "__layoutof_" + typeName, functionNesting > 0 ? DeclarationNode::NoStorageClass : DeclarationNode::Static, LinkageSpec::AutoGen, layoutFnType, new CompoundStmt( noLabels ), true, false ); 397 layoutDecl->fixUniqueId(); 398 return layoutDecl; 399 } 400 401 /// Makes a unary operation 402 Expression *makeOp( const std::string &name, Expression *arg ) { 403 UntypedExpr *expr = new UntypedExpr( new NameExpr( name ) ); 404 expr->get_args().push_back( arg ); 405 return expr; 406 } 407 408 /// Makes a binary operation 409 Expression *makeOp( const std::string &name, Expression *lhs, Expression *rhs ) { 410 UntypedExpr *expr = new UntypedExpr( new NameExpr( name ) ); 411 expr->get_args().push_back( lhs ); 412 expr->get_args().push_back( rhs ); 413 return expr; 414 } 415 416 /// Returns the dereference of a local pointer variable 417 Expression *derefVar( ObjectDecl *var ) { 418 return makeOp( "*?", new VariableExpr( var ) ); 419 } 420 421 /// makes an if-statement with a single-expression if-block and no then block 422 Statement *makeCond( Expression *cond, Expression *ifPart ) { 423 return new IfStmt( noLabels, cond, new ExprStmt( noLabels, ifPart ), 0 ); 424 } 425 426 /// makes a statement that assigns rhs to lhs if lhs < rhs 427 Statement *makeAssignMax( Expression *lhs, Expression *rhs ) { 428 return makeCond( makeOp( "?<?", lhs, rhs ), makeOp( "?=?", lhs->clone(), rhs->clone() ) ); 429 } 430 431 /// makes a statement that aligns lhs to rhs (rhs should be an integer power of two) 432 Statement *makeAlignTo( Expression *lhs, Expression *rhs ) { 433 // check that the lhs is zeroed out to the level of rhs 434 Expression *ifCond = makeOp( "?&?", lhs, makeOp( "?-?", rhs, new ConstantExpr( Constant( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), "1" ) ) ) ); 435 // if not aligned, increment to alignment 436 Expression *ifExpr = makeOp( "?+=?", lhs->clone(), makeOp( "?-?", rhs->clone(), ifCond->clone() ) ); 437 return makeCond( ifCond, ifExpr ); 438 } 439 440 /// adds an expression to a compound statement 441 void addExpr( CompoundStmt *stmts, Expression *expr ) { 442 stmts->get_kids().push_back( new ExprStmt( noLabels, expr ) ); 443 } 444 445 /// adds a statement to a compound statement 446 void addStmt( CompoundStmt *stmts, Statement *stmt ) { 447 stmts->get_kids().push_back( stmt ); 448 } 449 450 Declaration *LayoutFunctionBuilder::mutate( StructDecl *structDecl ) { 451 // do not generate layout function for "empty" tag structs 452 if ( structDecl->get_members().empty() ) return structDecl; 453 454 // get parameters that can change layout, exiting early if none 455 std::list< TypeDecl* > otypeParams = takeOtypeOnly( structDecl->get_parameters() ); 456 if ( otypeParams.empty() ) return structDecl; 457 458 // build layout function signature 459 FunctionType *layoutFnType = new FunctionType( Type::Qualifiers(), false ); 460 BasicType *sizeAlignType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ); 461 PointerType *sizeAlignOutType = new PointerType( Type::Qualifiers(), sizeAlignType ); 462 463 ObjectDecl *sizeParam = new ObjectDecl( "__sizeof_" + structDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType, 0 ); 464 layoutFnType->get_parameters().push_back( sizeParam ); 465 ObjectDecl *alignParam = new ObjectDecl( "__alignof_" + structDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 ); 466 layoutFnType->get_parameters().push_back( alignParam ); 467 ObjectDecl *offsetParam = new ObjectDecl( "__offsetof_" + structDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 ); 468 layoutFnType->get_parameters().push_back( offsetParam ); 469 addOtypeParams( layoutFnType, otypeParams ); 470 471 // build function decl 472 FunctionDecl *layoutDecl = buildLayoutFunctionDecl( structDecl->get_name(), functionNesting, layoutFnType ); 473 474 // calculate struct layout in function body 475 476 // initialize size and alignment to 0 and 1 (will have at least one member to re-edit size 477 addExpr( layoutDecl->get_statements(), makeOp( "?=?", derefVar( sizeParam ), new ConstantExpr( Constant( sizeAlignType->clone(), "0" ) ) ) ); 478 addExpr( layoutDecl->get_statements(), makeOp( "?=?", derefVar( alignParam ), new ConstantExpr( Constant( sizeAlignType->clone(), "1" ) ) ) ); 479 unsigned long n_members = 0; 480 bool firstMember = true; 481 for ( std::list< Declaration* >::const_iterator member = structDecl->get_members().begin(); member != structDecl->get_members().end(); ++member ) { 482 DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( *member ); 483 assert( dwt ); 484 Type *memberType = dwt->get_type(); 485 486 if ( firstMember ) { 487 firstMember = false; 488 } else { 489 // make sure all members after the first (automatically aligned at 0) are properly padded for alignment 490 addStmt( layoutDecl->get_statements(), makeAlignTo( derefVar( sizeParam ), new AlignofExpr( memberType->clone() ) ) ); 491 } 492 493 // place current size in the current offset index 494 addExpr( layoutDecl->get_statements(), makeOp( "?=?", makeOp( "?[?]", new VariableExpr( offsetParam ), new ConstantExpr( Constant::from( n_members ) ) ), 495 derefVar( sizeParam ) ) ); 496 ++n_members; 497 498 // add member size to current size 499 addExpr( layoutDecl->get_statements(), makeOp( "?+=?", derefVar( sizeParam ), new SizeofExpr( memberType->clone() ) ) ); 500 501 // take max of member alignment and global alignment 502 addStmt( layoutDecl->get_statements(), makeAssignMax( derefVar( alignParam ), new AlignofExpr( memberType->clone() ) ) ); 503 } 504 // make sure the type is end-padded to a multiple of its alignment 505 addStmt( layoutDecl->get_statements(), makeAlignTo( derefVar( sizeParam ), derefVar( alignParam ) ) ); 506 507 addDeclarationAfter( layoutDecl ); 508 return structDecl; 509 } 510 511 Declaration *LayoutFunctionBuilder::mutate( UnionDecl *unionDecl ) { 512 // do not generate layout function for "empty" tag unions 513 if ( unionDecl->get_members().empty() ) return unionDecl; 514 515 // get parameters that can change layout, exiting early if none 516 std::list< TypeDecl* > otypeParams = takeOtypeOnly( unionDecl->get_parameters() ); 517 if ( otypeParams.empty() ) return unionDecl; 518 519 // build layout function signature 520 FunctionType *layoutFnType = new FunctionType( Type::Qualifiers(), false ); 521 BasicType *sizeAlignType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ); 522 PointerType *sizeAlignOutType = new PointerType( Type::Qualifiers(), sizeAlignType ); 523 524 ObjectDecl *sizeParam = new ObjectDecl( "__sizeof_" + unionDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType, 0 ); 525 layoutFnType->get_parameters().push_back( sizeParam ); 526 ObjectDecl *alignParam = new ObjectDecl( "__alignof_" + unionDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 ); 527 layoutFnType->get_parameters().push_back( alignParam ); 528 addOtypeParams( layoutFnType, otypeParams ); 529 530 // build function decl 531 FunctionDecl *layoutDecl = buildLayoutFunctionDecl( unionDecl->get_name(), functionNesting, layoutFnType ); 532 533 // calculate union layout in function body 534 addExpr( layoutDecl->get_statements(), makeOp( "?=?", derefVar( sizeParam ), new ConstantExpr( Constant( sizeAlignType->clone(), "1" ) ) ) ); 535 addExpr( layoutDecl->get_statements(), makeOp( "?=?", derefVar( alignParam ), new ConstantExpr( Constant( sizeAlignType->clone(), "1" ) ) ) ); 536 for ( std::list< Declaration* >::const_iterator member = unionDecl->get_members().begin(); member != unionDecl->get_members().end(); ++member ) { 537 DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( *member ); 538 assert( dwt ); 539 Type *memberType = dwt->get_type(); 540 541 // take max member size and global size 542 addStmt( layoutDecl->get_statements(), makeAssignMax( derefVar( sizeParam ), new SizeofExpr( memberType->clone() ) ) ); 543 544 // take max of member alignment and global alignment 545 addStmt( layoutDecl->get_statements(), makeAssignMax( derefVar( alignParam ), new AlignofExpr( memberType->clone() ) ) ); 546 } 547 // make sure the type is end-padded to a multiple of its alignment 548 addStmt( layoutDecl->get_statements(), makeAlignTo( derefVar( sizeParam ), derefVar( alignParam ) ) ); 549 550 addDeclarationAfter( layoutDecl ); 551 return unionDecl; 552 } 553 208 554 ////////////////////////////////////////// Pass1 //////////////////////////////////////////////////// 209 555 … … 245 591 } 246 592 247 Pass1::Pass1() : useRetval( false ), tempNamer( "_temp" ) { 248 adapters.push(AdapterMap()); 249 } 593 Pass1::Pass1() : useRetval( false ), tempNamer( "_temp" ) {} 250 594 251 595 /// Returns T if the given declaration is (*?=?)(T *, T) for some TypeInstType T (return not checked, but maybe should be), NULL otherwise … … 350 694 } // for 351 695 352 AdapterMap & adapters = Pass1::adapters.top();353 696 for ( std::list< FunctionType *>::iterator funType = functions.begin(); funType != functions.end(); ++funType ) { 354 697 std::string mangleName = mangleAdapterName( *funType, scopeTyVars ); … … 773 1116 mangleName += makePolyMonoSuffix( originalFunction, exprTyVars ); 774 1117 775 AdapterMap & adapters = Pass1::adapters.top();776 Adapter Map::iterator adapter = adapters.find( mangleName );1118 typedef ScopedMap< std::string, DeclarationWithType* >::iterator AdapterIter; 1119 AdapterIter adapter = adapters.find( mangleName ); 777 1120 if ( adapter == adapters.end() ) { 778 1121 // adapter has not been created yet in the current scope, so define it 779 1122 FunctionDecl *newAdapter = makeAdapter( *funType, realFunction, mangleName, exprTyVars ); 780 adapter = adapters.insert( adapters.begin(), std::pair< std::string, DeclarationWithType *>( mangleName, newAdapter ) ); 1123 std::pair< AdapterIter, bool > answer = adapters.insert( std::pair< std::string, DeclarationWithType *>( mangleName, newAdapter ) ); 1124 adapter = answer.first; 781 1125 stmtsToAdd.push_back( new DeclStmt( noLabels, newAdapter ) ); 782 1126 } // if … … 1157 1501 1158 1502 void Pass1::doBeginScope() { 1159 // push a copy of the current map 1160 adapters.push(adapters.top()); 1503 adapters.beginScope(); 1161 1504 scopedAssignOps.beginScope(); 1162 1505 } 1163 1506 1164 1507 void Pass1::doEndScope() { 1165 adapters. pop();1508 adapters.endScope(); 1166 1509 scopedAssignOps.endScope(); 1167 1510 } … … 1310 1653 } 1311 1654 1655 //////////////////////////////////////// GenericInstantiator ////////////////////////////////////////////////// 1656 1657 /// Makes substitutions of params into baseParams; returns true if all parameters substituted for a concrete type 1658 bool makeSubstitutions( const std::list< TypeDecl* >& baseParams, const std::list< Expression* >& params, std::list< TypeExpr* >& out ) { 1659 bool allConcrete = true; // will finish the substitution list even if they're not all concrete 1660 1661 // substitute concrete types for given parameters, and incomplete types for placeholders 1662 std::list< TypeDecl* >::const_iterator baseParam = baseParams.begin(); 1663 std::list< Expression* >::const_iterator param = params.begin(); 1664 for ( ; baseParam != baseParams.end() && param != params.end(); ++baseParam, ++param ) { 1665 // switch ( (*baseParam)->get_kind() ) { 1666 // case TypeDecl::Any: { // any type is a valid substitution here; complete types can be used to instantiate generics 1667 TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param ); 1668 assert(paramType && "Aggregate parameters should be type expressions"); 1669 out.push_back( paramType->clone() ); 1670 // check that the substituted type isn't a type variable itself 1671 if ( dynamic_cast< TypeInstType* >( paramType->get_type() ) ) { 1672 allConcrete = false; 1673 } 1674 // break; 1675 // } 1676 // case TypeDecl::Dtype: // dtype can be consistently replaced with void [only pointers, which become void*] 1677 // out.push_back( new TypeExpr( new VoidType( Type::Qualifiers() ) ) ); 1678 // break; 1679 // case TypeDecl::Ftype: // pointer-to-ftype can be consistently replaced with void (*)(void) [similar to dtype] 1680 // out.push_back( new TypeExpr( new FunctionType( Type::Qualifiers(), false ) ) ); 1681 // break; 1682 // } 1683 } 1684 1685 // if any parameters left over, not done 1686 if ( baseParam != baseParams.end() ) return false; 1687 // // if not enough parameters given, substitute remaining incomplete types for placeholders 1688 // for ( ; baseParam != baseParams.end(); ++baseParam ) { 1689 // switch ( (*baseParam)->get_kind() ) { 1690 // case TypeDecl::Any: // no more substitutions here, fail early 1691 // return false; 1692 // case TypeDecl::Dtype: // dtype can be consistently replaced with void [only pointers, which become void*] 1693 // out.push_back( new TypeExpr( new VoidType( Type::Qualifiers() ) ) ); 1694 // break; 1695 // case TypeDecl::Ftype: // pointer-to-ftype can be consistently replaced with void (*)(void) [similar to dtype] 1696 // out.push_back( new TypeExpr( new FunctionType( Type::Qualifiers(), false ) ) ); 1697 // break; 1698 // } 1699 // } 1700 1701 return allConcrete; 1702 } 1703 1704 /// Substitutes types of members of in according to baseParams => typeSubs, appending the result to out 1705 void substituteMembers( const std::list< Declaration* >& in, const std::list< TypeDecl* >& baseParams, const std::list< TypeExpr* >& typeSubs, 1706 std::list< Declaration* >& out ) { 1707 // substitute types into new members 1708 TypeSubstitution subs( baseParams.begin(), baseParams.end(), typeSubs.begin() ); 1709 for ( std::list< Declaration* >::const_iterator member = in.begin(); member != in.end(); ++member ) { 1710 Declaration *newMember = (*member)->clone(); 1711 subs.apply(newMember); 1712 out.push_back( newMember ); 1713 } 1714 } 1715 1716 Type* GenericInstantiator::mutate( StructInstType *inst ) { 1717 // mutate subtypes 1718 Type *mutated = Mutator::mutate( inst ); 1719 inst = dynamic_cast< StructInstType* >( mutated ); 1720 if ( ! inst ) return mutated; 1721 1722 // exit early if no need for further mutation 1723 if ( inst->get_parameters().empty() ) return inst; 1724 assert( inst->get_baseParameters() && "Base struct has parameters" ); 1725 1726 // check if type can be concretely instantiated; put substitutions into typeSubs 1727 std::list< TypeExpr* > typeSubs; 1728 if ( ! makeSubstitutions( *inst->get_baseParameters(), inst->get_parameters(), typeSubs ) ) { 1729 deleteAll( typeSubs ); 1730 return inst; 1731 } 1732 1733 // make concrete instantiation of generic type 1734 StructDecl *concDecl = lookup( inst, typeSubs ); 1735 if ( ! concDecl ) { 1736 // set concDecl to new type, insert type declaration into statements to add 1737 concDecl = new StructDecl( typeNamer.newName( inst->get_name() ) ); 1738 substituteMembers( inst->get_baseStruct()->get_members(), *inst->get_baseParameters(), typeSubs, concDecl->get_members() ); 1739 DeclMutator::addDeclaration( concDecl ); 1740 insert( inst, typeSubs, concDecl ); 1741 } 1742 StructInstType *newInst = new StructInstType( inst->get_qualifiers(), concDecl->get_name() ); 1743 newInst->set_baseStruct( concDecl ); 1744 1745 deleteAll( typeSubs ); 1746 delete inst; 1747 return newInst; 1748 } 1749 1750 Type* GenericInstantiator::mutate( UnionInstType *inst ) { 1751 // mutate subtypes 1752 Type *mutated = Mutator::mutate( inst ); 1753 inst = dynamic_cast< UnionInstType* >( mutated ); 1754 if ( ! inst ) return mutated; 1755 1756 // exit early if no need for further mutation 1757 if ( inst->get_parameters().empty() ) return inst; 1758 assert( inst->get_baseParameters() && "Base union has parameters" ); 1759 1760 // check if type can be concretely instantiated; put substitutions into typeSubs 1761 std::list< TypeExpr* > typeSubs; 1762 if ( ! makeSubstitutions( *inst->get_baseParameters(), inst->get_parameters(), typeSubs ) ) { 1763 deleteAll( typeSubs ); 1764 return inst; 1765 } 1766 1767 // make concrete instantiation of generic type 1768 UnionDecl *concDecl = lookup( inst, typeSubs ); 1769 if ( ! concDecl ) { 1770 // set concDecl to new type, insert type declaration into statements to add 1771 concDecl = new UnionDecl( typeNamer.newName( inst->get_name() ) ); 1772 substituteMembers( inst->get_baseUnion()->get_members(), *inst->get_baseParameters(), typeSubs, concDecl->get_members() ); 1773 DeclMutator::addDeclaration( concDecl ); 1774 insert( inst, typeSubs, concDecl ); 1775 } 1776 UnionInstType *newInst = new UnionInstType( inst->get_qualifiers(), concDecl->get_name() ); 1777 newInst->set_baseUnion( concDecl ); 1778 1779 deleteAll( typeSubs ); 1780 delete inst; 1781 return newInst; 1782 } 1783 1784 // /// Gets the base struct or union declaration for a member expression; NULL if not applicable 1785 // AggregateDecl* getMemberBaseDecl( MemberExpr *memberExpr ) { 1786 // // get variable for member aggregate 1787 // VariableExpr *varExpr = dynamic_cast< VariableExpr* >( memberExpr->get_aggregate() ); 1788 // if ( ! varExpr ) return NULL; 1789 // 1790 // // get object for variable 1791 // ObjectDecl *objectDecl = dynamic_cast< ObjectDecl* >( varExpr->get_var() ); 1792 // if ( ! objectDecl ) return NULL; 1793 // 1794 // // get base declaration from object type 1795 // Type *objectType = objectDecl->get_type(); 1796 // StructInstType *structType = dynamic_cast< StructInstType* >( objectType ); 1797 // if ( structType ) return structType->get_baseStruct(); 1798 // UnionInstType *unionType = dynamic_cast< UnionInstType* >( objectType ); 1799 // if ( unionType ) return unionType->get_baseUnion(); 1800 // 1801 // return NULL; 1802 // } 1803 // 1804 // /// Finds the declaration with the given name, returning decls.end() if none such 1805 // std::list< Declaration* >::const_iterator findDeclNamed( const std::list< Declaration* > &decls, const std::string &name ) { 1806 // for( std::list< Declaration* >::const_iterator decl = decls.begin(); decl != decls.end(); ++decl ) { 1807 // if ( (*decl)->get_name() == name ) return decl; 1808 // } 1809 // return decls.end(); 1810 // } 1811 // 1812 // Expression* Instantiate::mutate( MemberExpr *memberExpr ) { 1813 // // mutate, exiting early if no longer MemberExpr 1814 // Expression *expr = Mutator::mutate( memberExpr ); 1815 // memberExpr = dynamic_cast< MemberExpr* >( expr ); 1816 // if ( ! memberExpr ) return expr; 1817 // 1818 // // get declaration of member and base declaration of member, exiting early if not found 1819 // AggregateDecl *memberBase = getMemberBaseDecl( memberExpr ); 1820 // if ( ! memberBase ) return memberExpr; 1821 // DeclarationWithType *memberDecl = memberExpr->get_member(); 1822 // std::list< Declaration* >::const_iterator baseIt = findDeclNamed( memberBase->get_members(), memberDecl->get_name() ); 1823 // if ( baseIt == memberBase->get_members().end() ) return memberExpr; 1824 // DeclarationWithType *baseDecl = dynamic_cast< DeclarationWithType* >( *baseIt ); 1825 // if ( ! baseDecl ) return memberExpr; 1826 // 1827 // // check if stated type of the member is not the type of the member's declaration; if so, need a cast 1828 // // this *SHOULD* be safe, I don't think anything but the void-replacements I put in for dtypes would make it past the typechecker 1829 // SymTab::Indexer dummy; 1830 // if ( ResolvExpr::typesCompatible( memberDecl->get_type(), baseDecl->get_type(), dummy ) ) return memberExpr; 1831 // else return new CastExpr( memberExpr, memberDecl->get_type() ); 1832 // } 1833 1834 void GenericInstantiator::doBeginScope() { 1835 DeclMutator::doBeginScope(); 1836 instantiations.beginScope(); 1837 } 1838 1839 void GenericInstantiator::doEndScope() { 1840 DeclMutator::doEndScope(); 1841 instantiations.endScope(); 1842 } 1843 1312 1844 ////////////////////////////////////////// MemberExprFixer //////////////////////////////////////////////////// 1313 1845 -
src/GenPoly/DeclMutator.cc
r39786813 ra5a71d0 24 24 } 25 25 26 DeclMutator::DeclMutator() : Mutator(), declsToAdd(1) {}26 DeclMutator::DeclMutator() : Mutator(), declsToAdd(1), declsToAddAfter(1) {} 27 27 28 28 DeclMutator::~DeclMutator() {} 29 29 30 30 void DeclMutator::mutateDeclarationList( std::list< Declaration* > &decls ) { 31 for ( std::list< Declaration* >::iterator decl = decls.begin(); decl != decls.end(); ++decl ) { 31 for ( std::list< Declaration* >::iterator decl = decls.begin(); ; ++decl ) { 32 // splice in new declarations after previous decl 33 decls.splice( decl, declsToAddAfter.back() ); 34 35 if ( decl == decls.end() ) break; 36 32 37 // run mutator on declaration 33 38 *decl = maybeMutate( *decl, *this ); … … 39 44 40 45 void DeclMutator::doBeginScope() { 41 // add new decl list for inside of scope46 // add new decl lists for inside of scope 42 47 declsToAdd.resize( declsToAdd.size()+1 ); 48 declsToAddAfter.resize( declsToAddAfter.size()+1 ); 43 49 } 44 50 … … 49 55 newBack->splice( newBack->end(), *back ); 50 56 declsToAdd.pop_back(); 57 58 back = declsToAddAfter.rbegin(); 59 newBack = back + 1; 60 newBack->splice( newBack->end(), *back ); 61 declsToAddAfter.pop_back(); 51 62 } 52 63 … … 61 72 stmt = maybeMutate( stmt, *this ); 62 73 // return if no declarations to add 63 if ( declsToAdd.back().empty() ) return stmt; 74 if ( declsToAdd.back().empty() && declsToAddAfter.back().empty() ) { 75 doEndScope(); 76 return stmt; 77 } 64 78 65 79 // otherwise add declarations to new compound statement … … 71 85 declsToAdd.back().clear(); 72 86 87 // add mutated statement 88 compound->get_kids().push_back( stmt ); 89 90 // add declarations after to new compound statement 91 for ( std::list< Declaration* >::iterator decl = declsToAddAfter.back().begin(); decl != declsToAddAfter.back().end(); ++decl ) { 92 DeclStmt *declStmt = new DeclStmt( noLabels, *decl ); 93 compound->get_kids().push_back( declStmt ); 94 } 95 declsToAddAfter.back().clear(); 96 73 97 doEndScope(); 74 75 // add mutated statement and return76 compound->get_kids().push_back( stmt );77 98 return compound; 78 99 } … … 80 101 void DeclMutator::mutateStatementList( std::list< Statement* > &stmts ) { 81 102 doBeginScope(); 103 82 104 83 for ( std::list< Statement* >::iterator stmt = stmts.begin(); stmt != stmts.end(); ++stmt ) { 105 for ( std::list< Statement* >::iterator stmt = stmts.begin(); ; ++stmt ) { 106 // add any new declarations after the previous statement 107 for ( std::list< Declaration* >::iterator decl = declsToAddAfter.back().begin(); decl != declsToAddAfter.back().end(); ++decl ) { 108 DeclStmt *declStmt = new DeclStmt( noLabels, *decl ); 109 stmts.insert( stmt, declStmt ); 110 } 111 declsToAddAfter.back().clear(); 112 113 if ( stmt == stmts.end() ) break; 114 84 115 // run mutator on statement 85 116 *stmt = maybeMutate( *stmt, *this ); … … 92 123 declsToAdd.back().clear(); 93 124 } 94 125 95 126 doEndScope(); 96 127 } … … 98 129 void DeclMutator::addDeclaration( Declaration *decl ) { 99 130 declsToAdd.back().push_back( decl ); 131 } 132 133 void DeclMutator::addDeclarationAfter( Declaration *decl ) { 134 declsToAddAfter.back().push_back( decl ); 100 135 } 101 136 -
src/GenPoly/DeclMutator.h
r39786813 ra5a71d0 55 55 /// Add a declaration to the list to be added before the current position 56 56 void addDeclaration( Declaration* decl ); 57 /// Add a declaration to the list to be added after the current position 58 void addDeclarationAfter( Declaration* decl ); 57 59 private: 58 60 /// A stack of declarations to add before the current declaration or statement 59 61 std::vector< std::list< Declaration* > > declsToAdd; 62 /// A stack of declarations to add after the current declaration or statement 63 std::vector< std::list< Declaration* > > declsToAddAfter; 60 64 }; 61 65 } // namespace -
src/GenPoly/module.mk
r39786813 ra5a71d0 23 23 GenPoly/CopyParams.cc \ 24 24 GenPoly/FindFunction.cc \ 25 GenPoly/InstantiateGeneric.cc \26 25 GenPoly/DeclMutator.cc -
src/InitTweak/RemoveInit.cc
r39786813 ra5a71d0 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Rob Schluntz 12 // Last Modified On : Wed Mar 30 15:45:12201612 // Last Modified On : Mon Apr 04 17:18:03 2016 13 13 // Update Count : 166 14 14 // … … 68 68 virtual Declaration* mutate( UnionDecl *aggregateDecl ); 69 69 virtual Declaration* mutate( EnumDecl *aggregateDecl ); 70 virtual Declaration* mutate( ContextDecl *aggregateDecl );70 virtual Declaration* mutate( TraitDecl *aggregateDecl ); 71 71 virtual TypeDecl* mutate( TypeDecl *typeDecl ); 72 72 virtual Declaration* mutate( TypedefDecl *typeDecl ); … … 251 251 Declaration* CtorDtor::mutate( UnionDecl *aggregateDecl ) { return aggregateDecl; } 252 252 Declaration* CtorDtor::mutate( EnumDecl *aggregateDecl ) { return aggregateDecl; } 253 Declaration* CtorDtor::mutate( ContextDecl *aggregateDecl ) { return aggregateDecl; }253 Declaration* CtorDtor::mutate( TraitDecl *aggregateDecl ) { return aggregateDecl; } 254 254 TypeDecl* CtorDtor::mutate( TypeDecl *typeDecl ) { return typeDecl; } 255 255 Declaration* CtorDtor::mutate( TypedefDecl *typeDecl ) { return typeDecl; } -
src/Makefile.am
r39786813 ra5a71d0 11 11 ## Created On : Sun May 31 08:51:46 2015 12 12 ## Last Modified By : Peter A. Buhr 13 ## Last Modified On : Thu Jan 28 16:50:26 201614 ## Update Count : 5 513 ## Last Modified On : Fri Feb 26 17:19:16 2016 14 ## Update Count : 57 15 15 ############################################################################### 16 16 … … 46 46 driver_cfa_cpp_CXXFLAGS = -Wno-deprecated -Wall -DDEBUG_ALL 47 47 48 CXXFLAGS = -g # remove default -O2 to allow better debugging48 CXXFLAGS = -g -std=c++11 # remove default -O2 to allow better debugging 49 49 50 50 MAINTAINERCLEANFILES += ${libdir}/${notdir ${cfa_cpplib_PROGRAMS}} -
src/Makefile.in
r39786813 ra5a71d0 122 122 GenPoly/driver_cfa_cpp-CopyParams.$(OBJEXT) \ 123 123 GenPoly/driver_cfa_cpp-FindFunction.$(OBJEXT) \ 124 GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT) \125 124 GenPoly/driver_cfa_cpp-DeclMutator.$(OBJEXT) \ 126 125 InitTweak/driver_cfa_cpp-RemoveInit.$(OBJEXT) \ … … 155 154 ResolvExpr/driver_cfa_cpp-Occurs.$(OBJEXT) \ 156 155 ResolvExpr/driver_cfa_cpp-TypeEnvironment.$(OBJEXT) \ 157 SymTab/driver_cfa_cpp-IdTable.$(OBJEXT) \158 156 SymTab/driver_cfa_cpp-Indexer.$(OBJEXT) \ 159 157 SymTab/driver_cfa_cpp-Mangler.$(OBJEXT) \ … … 194 192 SynTree/driver_cfa_cpp-Visitor.$(OBJEXT) \ 195 193 SynTree/driver_cfa_cpp-Mutator.$(OBJEXT) \ 196 SynTree/driver_cfa_cpp-CodeGenVisitor.$(OBJEXT) \197 194 SynTree/driver_cfa_cpp-TypeSubstitution.$(OBJEXT) \ 198 195 Tuples/driver_cfa_cpp-Mutate.$(OBJEXT) \ … … 250 247 CXX = @CXX@ 251 248 CXXDEPMODE = @CXXDEPMODE@ 252 CXXFLAGS = -g # remove default -O2 to allow better debugging249 CXXFLAGS = -g -std=c++11 # remove default -O2 to allow better debugging 253 250 CYGPATH_W = @CYGPATH_W@ 254 251 DEFS = @DEFS@ … … 350 347 GenPoly/ScrubTyVars.cc GenPoly/Lvalue.cc GenPoly/Specialize.cc \ 351 348 GenPoly/CopyParams.cc GenPoly/FindFunction.cc \ 352 GenPoly/ InstantiateGeneric.cc GenPoly/DeclMutator.cc \353 InitTweak/ RemoveInit.cc InitTweak/FixInit.cc Parser/parser.yy\354 Parser/ lex.ll Parser/TypedefTable.cc Parser/ParseNode.cc \349 GenPoly/DeclMutator.cc InitTweak/RemoveInit.cc \ 350 InitTweak/FixInit.cc Parser/parser.yy Parser/lex.ll \ 351 Parser/TypedefTable.cc Parser/ParseNode.cc \ 355 352 Parser/DeclarationNode.cc Parser/ExpressionNode.cc \ 356 353 Parser/StatementNode.cc Parser/InitializerNode.cc \ … … 365 362 ResolvExpr/RenameVars.cc ResolvExpr/FindOpenVars.cc \ 366 363 ResolvExpr/PolyCost.cc ResolvExpr/Occurs.cc \ 367 ResolvExpr/TypeEnvironment.cc SymTab/I dTable.cc \368 SymTab/ Indexer.cc SymTab/Mangler.cc SymTab/Validate.cc \369 SymTab/ FixFunction.cc SymTab/ImplementationType.cc \370 SymTab/ TypeEquality.cc SymTab/Autogen.cc SynTree/Type.cc \371 SynTree/ VoidType.cc SynTree/BasicType.cc \372 SynTree/ PointerType.cc SynTree/ArrayType.cc \373 SynTree/ FunctionType.cc SynTree/ReferenceToType.cc \374 SynTree/T upleType.cc SynTree/TypeofType.cc SynTree/AttrType.cc \364 ResolvExpr/TypeEnvironment.cc SymTab/Indexer.cc \ 365 SymTab/Mangler.cc SymTab/Validate.cc SymTab/FixFunction.cc \ 366 SymTab/ImplementationType.cc SymTab/TypeEquality.cc \ 367 SymTab/Autogen.cc SynTree/Type.cc SynTree/VoidType.cc \ 368 SynTree/BasicType.cc SynTree/PointerType.cc \ 369 SynTree/ArrayType.cc SynTree/FunctionType.cc \ 370 SynTree/ReferenceToType.cc SynTree/TupleType.cc \ 371 SynTree/TypeofType.cc SynTree/AttrType.cc \ 375 372 SynTree/VarArgsType.cc SynTree/Constant.cc \ 376 373 SynTree/Expression.cc SynTree/TupleExpr.cc \ … … 383 380 SynTree/NamedTypeDecl.cc SynTree/TypeDecl.cc \ 384 381 SynTree/Initializer.cc SynTree/Visitor.cc SynTree/Mutator.cc \ 385 SynTree/ CodeGenVisitor.cc SynTree/TypeSubstitution.cc \386 Tuples/ Mutate.cc Tuples/AssignExpand.cc \387 Tuples/ FunctionFixer.cc Tuples/TupleAssignment.cc \388 Tuples/ FunctionChecker.cc Tuples/NameMatcher.cc382 SynTree/TypeSubstitution.cc Tuples/Mutate.cc \ 383 Tuples/AssignExpand.cc Tuples/FunctionFixer.cc \ 384 Tuples/TupleAssignment.cc Tuples/FunctionChecker.cc \ 385 Tuples/NameMatcher.cc 389 386 MAINTAINERCLEANFILES = Parser/parser.output ${libdir}/${notdir \ 390 387 ${cfa_cpplib_PROGRAMS}} … … 559 556 GenPoly/$(DEPDIR)/$(am__dirstamp) 560 557 GenPoly/driver_cfa_cpp-FindFunction.$(OBJEXT): \ 561 GenPoly/$(am__dirstamp) GenPoly/$(DEPDIR)/$(am__dirstamp)562 GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT): \563 558 GenPoly/$(am__dirstamp) GenPoly/$(DEPDIR)/$(am__dirstamp) 564 559 GenPoly/driver_cfa_cpp-DeclMutator.$(OBJEXT): GenPoly/$(am__dirstamp) \ … … 669 664 @$(MKDIR_P) SymTab/$(DEPDIR) 670 665 @: > SymTab/$(DEPDIR)/$(am__dirstamp) 671 SymTab/driver_cfa_cpp-IdTable.$(OBJEXT): SymTab/$(am__dirstamp) \672 SymTab/$(DEPDIR)/$(am__dirstamp)673 666 SymTab/driver_cfa_cpp-Indexer.$(OBJEXT): SymTab/$(am__dirstamp) \ 674 667 SymTab/$(DEPDIR)/$(am__dirstamp) … … 753 746 SynTree/driver_cfa_cpp-Mutator.$(OBJEXT): SynTree/$(am__dirstamp) \ 754 747 SynTree/$(DEPDIR)/$(am__dirstamp) 755 SynTree/driver_cfa_cpp-CodeGenVisitor.$(OBJEXT): \756 SynTree/$(am__dirstamp) SynTree/$(DEPDIR)/$(am__dirstamp)757 748 SynTree/driver_cfa_cpp-TypeSubstitution.$(OBJEXT): \ 758 749 SynTree/$(am__dirstamp) SynTree/$(DEPDIR)/$(am__dirstamp) … … 805 796 -rm -f GenPoly/driver_cfa_cpp-FindFunction.$(OBJEXT) 806 797 -rm -f GenPoly/driver_cfa_cpp-GenPoly.$(OBJEXT) 807 -rm -f GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT)808 798 -rm -f GenPoly/driver_cfa_cpp-Lvalue.$(OBJEXT) 809 799 -rm -f GenPoly/driver_cfa_cpp-PolyMutator.$(OBJEXT) … … 843 833 -rm -f SymTab/driver_cfa_cpp-Autogen.$(OBJEXT) 844 834 -rm -f SymTab/driver_cfa_cpp-FixFunction.$(OBJEXT) 845 -rm -f SymTab/driver_cfa_cpp-IdTable.$(OBJEXT)846 835 -rm -f SymTab/driver_cfa_cpp-ImplementationType.$(OBJEXT) 847 836 -rm -f SymTab/driver_cfa_cpp-Indexer.$(OBJEXT) … … 855 844 -rm -f SynTree/driver_cfa_cpp-AttrType.$(OBJEXT) 856 845 -rm -f SynTree/driver_cfa_cpp-BasicType.$(OBJEXT) 857 -rm -f SynTree/driver_cfa_cpp-CodeGenVisitor.$(OBJEXT)858 846 -rm -f SynTree/driver_cfa_cpp-CommaExpr.$(OBJEXT) 859 847 -rm -f SynTree/driver_cfa_cpp-CompoundStmt.$(OBJEXT) … … 915 903 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-FindFunction.Po@am__quote@ 916 904 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-GenPoly.Po@am__quote@ 917 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Po@am__quote@918 905 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-Lvalue.Po@am__quote@ 919 906 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-PolyMutator.Po@am__quote@ … … 953 940 @AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-Autogen.Po@am__quote@ 954 941 @AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-FixFunction.Po@am__quote@ 955 @AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Po@am__quote@956 942 @AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-ImplementationType.Po@am__quote@ 957 943 @AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-Indexer.Po@am__quote@ … … 965 951 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-AttrType.Po@am__quote@ 966 952 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-BasicType.Po@am__quote@ 967 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Po@am__quote@968 953 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-CommaExpr.Po@am__quote@ 969 954 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-CompoundStmt.Po@am__quote@ … … 1379 1364 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-FindFunction.obj `if test -f 'GenPoly/FindFunction.cc'; then $(CYGPATH_W) 'GenPoly/FindFunction.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/FindFunction.cc'; fi` 1380 1365 1381 GenPoly/driver_cfa_cpp-InstantiateGeneric.o: GenPoly/InstantiateGeneric.cc1382 @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-InstantiateGeneric.o -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.o `test -f 'GenPoly/InstantiateGeneric.cc' || echo '$(srcdir)/'`GenPoly/InstantiateGeneric.cc1383 @am__fastdepCXX_TRUE@ $(am__mv) GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Po1384 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='GenPoly/InstantiateGeneric.cc' object='GenPoly/driver_cfa_cpp-InstantiateGeneric.o' libtool=no @AMDEPBACKSLASH@1385 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@1386 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.o `test -f 'GenPoly/InstantiateGeneric.cc' || echo '$(srcdir)/'`GenPoly/InstantiateGeneric.cc1387 1388 GenPoly/driver_cfa_cpp-InstantiateGeneric.obj: GenPoly/InstantiateGeneric.cc1389 @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-InstantiateGeneric.obj -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.obj `if test -f 'GenPoly/InstantiateGeneric.cc'; then $(CYGPATH_W) 'GenPoly/InstantiateGeneric.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/InstantiateGeneric.cc'; fi`1390 @am__fastdepCXX_TRUE@ $(am__mv) GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Po1391 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='GenPoly/InstantiateGeneric.cc' object='GenPoly/driver_cfa_cpp-InstantiateGeneric.obj' libtool=no @AMDEPBACKSLASH@1392 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@1393 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.obj `if test -f 'GenPoly/InstantiateGeneric.cc'; then $(CYGPATH_W) 'GenPoly/InstantiateGeneric.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/InstantiateGeneric.cc'; fi`1394 1395 1366 GenPoly/driver_cfa_cpp-DeclMutator.o: GenPoly/DeclMutator.cc 1396 1367 @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-DeclMutator.o -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-DeclMutator.Tpo -c -o GenPoly/driver_cfa_cpp-DeclMutator.o `test -f 'GenPoly/DeclMutator.cc' || echo '$(srcdir)/'`GenPoly/DeclMutator.cc … … 1841 1812 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o ResolvExpr/driver_cfa_cpp-TypeEnvironment.obj `if test -f 'ResolvExpr/TypeEnvironment.cc'; then $(CYGPATH_W) 'ResolvExpr/TypeEnvironment.cc'; else $(CYGPATH_W) '$(srcdir)/ResolvExpr/TypeEnvironment.cc'; fi` 1842 1813 1843 SymTab/driver_cfa_cpp-IdTable.o: SymTab/IdTable.cc1844 @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SymTab/driver_cfa_cpp-IdTable.o -MD -MP -MF SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Tpo -c -o SymTab/driver_cfa_cpp-IdTable.o `test -f 'SymTab/IdTable.cc' || echo '$(srcdir)/'`SymTab/IdTable.cc1845 @am__fastdepCXX_TRUE@ $(am__mv) SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Tpo SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Po1846 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='SymTab/IdTable.cc' object='SymTab/driver_cfa_cpp-IdTable.o' libtool=no @AMDEPBACKSLASH@1847 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@1848 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SymTab/driver_cfa_cpp-IdTable.o `test -f 'SymTab/IdTable.cc' || echo '$(srcdir)/'`SymTab/IdTable.cc1849 1850 SymTab/driver_cfa_cpp-IdTable.obj: SymTab/IdTable.cc1851 @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SymTab/driver_cfa_cpp-IdTable.obj -MD -MP -MF SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Tpo -c -o SymTab/driver_cfa_cpp-IdTable.obj `if test -f 'SymTab/IdTable.cc'; then $(CYGPATH_W) 'SymTab/IdTable.cc'; else $(CYGPATH_W) '$(srcdir)/SymTab/IdTable.cc'; fi`1852 @am__fastdepCXX_TRUE@ $(am__mv) SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Tpo SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Po1853 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='SymTab/IdTable.cc' object='SymTab/driver_cfa_cpp-IdTable.obj' libtool=no @AMDEPBACKSLASH@1854 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@1855 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SymTab/driver_cfa_cpp-IdTable.obj `if test -f 'SymTab/IdTable.cc'; then $(CYGPATH_W) 'SymTab/IdTable.cc'; else $(CYGPATH_W) '$(srcdir)/SymTab/IdTable.cc'; fi`1856 1857 1814 SymTab/driver_cfa_cpp-Indexer.o: SymTab/Indexer.cc 1858 1815 @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SymTab/driver_cfa_cpp-Indexer.o -MD -MP -MF SymTab/$(DEPDIR)/driver_cfa_cpp-Indexer.Tpo -c -o SymTab/driver_cfa_cpp-Indexer.o `test -f 'SymTab/Indexer.cc' || echo '$(srcdir)/'`SymTab/Indexer.cc … … 2386 2343 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 2387 2344 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-Mutator.obj `if test -f 'SynTree/Mutator.cc'; then $(CYGPATH_W) 'SynTree/Mutator.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/Mutator.cc'; fi` 2388 2389 SynTree/driver_cfa_cpp-CodeGenVisitor.o: SynTree/CodeGenVisitor.cc2390 @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-CodeGenVisitor.o -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Tpo -c -o SynTree/driver_cfa_cpp-CodeGenVisitor.o `test -f 'SynTree/CodeGenVisitor.cc' || echo '$(srcdir)/'`SynTree/CodeGenVisitor.cc2391 @am__fastdepCXX_TRUE@ $(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Po2392 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='SynTree/CodeGenVisitor.cc' object='SynTree/driver_cfa_cpp-CodeGenVisitor.o' libtool=no @AMDEPBACKSLASH@2393 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@2394 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-CodeGenVisitor.o `test -f 'SynTree/CodeGenVisitor.cc' || echo '$(srcdir)/'`SynTree/CodeGenVisitor.cc2395 2396 SynTree/driver_cfa_cpp-CodeGenVisitor.obj: SynTree/CodeGenVisitor.cc2397 @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-CodeGenVisitor.obj -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Tpo -c -o SynTree/driver_cfa_cpp-CodeGenVisitor.obj `if test -f 'SynTree/CodeGenVisitor.cc'; then $(CYGPATH_W) 'SynTree/CodeGenVisitor.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/CodeGenVisitor.cc'; fi`2398 @am__fastdepCXX_TRUE@ $(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Po2399 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='SynTree/CodeGenVisitor.cc' object='SynTree/driver_cfa_cpp-CodeGenVisitor.obj' libtool=no @AMDEPBACKSLASH@2400 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@2401 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-CodeGenVisitor.obj `if test -f 'SynTree/CodeGenVisitor.cc'; then $(CYGPATH_W) 'SynTree/CodeGenVisitor.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/CodeGenVisitor.cc'; fi`2402 2345 2403 2346 SynTree/driver_cfa_cpp-TypeSubstitution.o: SynTree/TypeSubstitution.cc -
src/Parser/DeclarationNode.cc
r39786813 ra5a71d0 10 10 // Created On : Sat May 16 12:34:05 2015 11 11 // Last Modified By : Rob Schluntz 12 // Last Modified On : Thu Jan 07 13:18:02201613 // Update Count : 1 3012 // Last Modified On : Mon Apr 04 17:09:46 2016 13 // Update Count : 142 14 14 // 15 15 … … 34 34 const char *DeclarationNode::storageName[] = { "extern", "static", "auto", "register", "inline", "fortran", "_Noreturn", "_Thread_local", "" }; 35 35 const char *DeclarationNode::qualifierName[] = { "const", "restrict", "volatile", "lvalue", "_Atomic" }; 36 const char *DeclarationNode::basicTypeName[] = { "char", "int", "float", "double", "void", "_Bool", "_Complex", "_Imaginary" };36 const char *DeclarationNode::basicTypeName[] = { "char", "int", "float", "double", "void", "_Bool", "_Complex", "_Imaginary", }; 37 37 const char *DeclarationNode::modifierName[] = { "signed", "unsigned", "short", "long" }; 38 38 const char *DeclarationNode::aggregateName[] = { "struct", "union", "context" }; 39 39 const char *DeclarationNode::typeClassName[] = { "type", "dtype", "ftype" }; 40 const char *DeclarationNode::builtinTypeName[] = { "__builtin_va_list" }; 40 41 41 42 UniqueName DeclarationNode::anonymous( "__anonymous" ); 42 43 43 extern LinkageSpec::Type linkage; /* defined in cfa.y */44 extern LinkageSpec::Type linkage; // defined in parser.yy 44 45 45 46 DeclarationNode *DeclarationNode::clone() const { … … 54 55 newnode->linkage = linkage; 55 56 return newnode; 56 } 57 } // DeclarationNode::clone 57 58 58 59 DeclarationNode::DeclarationNode() : type( 0 ), bitfieldWidth( 0 ), initializer( 0 ), hasEllipsis( false ), linkage( ::linkage ) { … … 118 119 newnode->type->function->newStyle = newStyle; 119 120 newnode->type->function->body = body; 121 typedefTable.addToEnclosingScope( newnode->name, TypedefTable::ID ); 120 122 121 123 if ( body ) { … … 130 132 131 133 return newnode; 132 } 134 } // DeclarationNode::newFunction 133 135 134 136 DeclarationNode *DeclarationNode::newQualifier( Qualifier q ) { … … 137 139 newnode->type->qualifiers.push_back( q ); 138 140 return newnode; 139 } 141 } // DeclarationNode::newQualifier 140 142 141 143 DeclarationNode *DeclarationNode::newStorageClass( DeclarationNode::StorageClass sc ) { … … 143 145 newnode->storageClasses.push_back( sc ); 144 146 return newnode; 145 } 147 } // DeclarationNode::newStorageClass 146 148 147 149 DeclarationNode *DeclarationNode::newBasicType( BasicType bt ) { … … 150 152 newnode->type->basic->typeSpec.push_back( bt ); 151 153 return newnode; 152 } 154 } // DeclarationNode::newBasicType 155 156 DeclarationNode *DeclarationNode::newBuiltinType( BuiltinType bt ) { 157 DeclarationNode *newnode = new DeclarationNode; 158 newnode->type = new TypeData( TypeData::Builtin ); 159 newnode->type->builtin->type = bt; 160 return newnode; 161 } // DeclarationNode::newBuiltinType 153 162 154 163 DeclarationNode *DeclarationNode::newModifier( Modifier mod ) { … … 157 166 newnode->type->basic->modifiers.push_back( mod ); 158 167 return newnode; 159 } 168 } // DeclarationNode::newModifier 160 169 161 170 DeclarationNode *DeclarationNode::newForall( DeclarationNode *forall ) { … … 164 173 newnode->type->forall = forall; 165 174 return newnode; 166 } 175 } // DeclarationNode::newForall 167 176 168 177 DeclarationNode *DeclarationNode::newFromTypedef( std::string *name ) { … … 173 182 newnode->type->symbolic->params = 0; 174 183 return newnode; 175 } 184 } // DeclarationNode::newFromTypedef 176 185 177 186 DeclarationNode *DeclarationNode::newAggregate( Aggregate kind, const std::string *name, ExpressionNode *actuals, DeclarationNode *fields ) { … … 182 191 if ( newnode->type->aggregate->name == "" ) { // anonymous aggregate ? 183 192 newnode->type->aggregate->name = DeclarationNode::anonymous.newName(); 184 } else { 185 // SKULLDUGGERY: generate a typedef for the aggregate name so that the aggregate does not have to be qualified 186 // by "struct" 193 } else if ( ! typedefTable.exists( newnode->type->aggregate->name ) ) { 194 // SKULLDUGGERY: Generate a typedef for the aggregate name so the aggregate does not have to be qualified by 195 // "struct". Only generate the typedef, if the name is not in use. The typedef is implicitly (silently) removed 196 // if the name is explicitly used. 187 197 typedefTable.addToEnclosingScope( newnode->type->aggregate->name, TypedefTable::TD ); 188 198 DeclarationNode *typedf = new DeclarationNode; … … 193 203 newnode->type->aggregate->fields = fields; 194 204 return newnode; 195 } 205 } // DeclarationNode::newAggregate 196 206 197 207 DeclarationNode *DeclarationNode::newEnum( std::string *name, DeclarationNode *constants ) { … … 202 212 if ( newnode->type->enumeration->name == "" ) { // anonymous enumeration ? 203 213 newnode->type->enumeration->name = DeclarationNode::anonymous.newName(); 204 } else { 205 // SKULLDUGGERY: generate a typedef for the enumeration name so that the enumeration does not have to be 206 // qualified by "enum" 214 } else if ( ! typedefTable.exists( newnode->type->enumeration->name ) ) { 215 // SKULLDUGGERY: Generate a typedef for the enumeration name so the enumeration does not have to be qualified by 216 // "enum". Only generate the typedef, if the name is not in use. The typedef is implicitly (silently) removed if 217 // the name is explicitly used. 207 218 typedefTable.addToEnclosingScope( newnode->type->enumeration->name, TypedefTable::TD ); 208 219 DeclarationNode *typedf = new DeclarationNode; … … 212 223 newnode->type->enumeration->constants = constants; 213 224 return newnode; 214 } 225 } // DeclarationNode::newEnum 215 226 216 227 DeclarationNode *DeclarationNode::newEnumConstant( std::string *name, ExpressionNode *constant ) { 217 228 DeclarationNode *newnode = new DeclarationNode; 218 229 newnode->name = assign_strptr( name ); 219 // do something with the constant 220 return newnode; 221 } 230 newnode->enumeratorValue = constant; 231 typedefTable.addToEnclosingScope( newnode->name, TypedefTable::ID ); 232 return newnode; 233 } // DeclarationNode::newEnumConstant 222 234 223 235 DeclarationNode *DeclarationNode::newName( std::string *name ) { … … 225 237 newnode->name = assign_strptr( name ); 226 238 return newnode; 227 } 239 } // DeclarationNode::newName 228 240 229 241 DeclarationNode *DeclarationNode::newFromTypeGen( std::string *name, ExpressionNode *params ) { … … 234 246 newnode->type->symbolic->actuals = params; 235 247 return newnode; 236 } 248 } // DeclarationNode::newFromTypeGen 237 249 238 250 DeclarationNode *DeclarationNode::newTypeParam( TypeClass tc, std::string *name ) { … … 243 255 newnode->type->variable->name = newnode->name; 244 256 return newnode; 245 } 246 247 DeclarationNode *DeclarationNode::new Context( std::string *name, DeclarationNode *params, DeclarationNode *asserts ) {257 } // DeclarationNode::newTypeParam 258 259 DeclarationNode *DeclarationNode::newTrait( std::string *name, DeclarationNode *params, DeclarationNode *asserts ) { 248 260 DeclarationNode *newnode = new DeclarationNode; 249 261 newnode->type = new TypeData( TypeData::Aggregate ); 250 newnode->type->aggregate->kind = Context;262 newnode->type->aggregate->kind = Trait; 251 263 newnode->type->aggregate->params = params; 252 264 newnode->type->aggregate->fields = asserts; 253 265 newnode->type->aggregate->name = assign_strptr( name ); 254 266 return newnode; 255 } 256 257 DeclarationNode *DeclarationNode::new ContextUse( std::string *name, ExpressionNode *params ) {267 } // DeclarationNode::newTrait 268 269 DeclarationNode *DeclarationNode::newTraitUse( std::string *name, ExpressionNode *params ) { 258 270 DeclarationNode *newnode = new DeclarationNode; 259 271 newnode->type = new TypeData( TypeData::AggregateInst ); 260 272 newnode->type->aggInst->aggregate = new TypeData( TypeData::Aggregate ); 261 newnode->type->aggInst->aggregate->aggregate->kind = Context;273 newnode->type->aggInst->aggregate->aggregate->kind = Trait; 262 274 newnode->type->aggInst->aggregate->aggregate->name = assign_strptr( name ); 263 275 newnode->type->aggInst->params = params; 264 276 return newnode; 265 } 277 } // DeclarationNode::newTraitUse 266 278 267 279 DeclarationNode *DeclarationNode::newTypeDecl( std::string *name, DeclarationNode *typeParams ) { … … 273 285 newnode->type->symbolic->name = newnode->name; 274 286 return newnode; 275 } 287 } // DeclarationNode::newTypeDecl 276 288 277 289 DeclarationNode *DeclarationNode::newPointer( DeclarationNode *qualifiers ) { … … 279 291 newnode->type = new TypeData( TypeData::Pointer ); 280 292 return newnode->addQualifiers( qualifiers ); 281 } 293 } // DeclarationNode::newPointer 282 294 283 295 DeclarationNode *DeclarationNode::newArray( ExpressionNode *size, DeclarationNode *qualifiers, bool isStatic ) { … … 292 304 } // if 293 305 return newnode->addQualifiers( qualifiers ); 294 } 306 } // DeclarationNode::newArray 295 307 296 308 DeclarationNode *DeclarationNode::newVarArray( DeclarationNode *qualifiers ) { … … 796 808 errors.append( e ); 797 809 } // try 798 cur = dynamic_cast< 810 cur = dynamic_cast<DeclarationNode *>( cur->get_link() ); 799 811 } // while 800 812 if ( ! errors.isEmpty() ) { … … 883 895 ret = new UnionInstType( type->buildQualifiers(), type->aggregate->name ); 884 896 break; 885 case DeclarationNode:: Context:886 ret = new ContextInstType( type->buildQualifiers(), type->aggregate->name );897 case DeclarationNode::Trait: 898 ret = new TraitInstType( type->buildQualifiers(), type->aggregate->name ); 887 899 break; 888 900 default: -
src/Parser/ExpressionNode.cc
r39786813 ra5a71d0 10 10 // Created On : Sat May 16 13:17:07 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Feb 1 13:32:30201613 // Update Count : 27 112 // Last Modified On : Sun Mar 13 12:34:38 2016 13 // Update Count : 272 14 14 // 15 15 … … 487 487 args.front() = new AddressExpr( args.front() ); 488 488 break; 489 default: 490 /* do nothing */ 489 default: // do nothing 491 490 ; 492 } 491 } // switch 493 492 494 493 switch ( op->get_type() ) { -
src/Parser/ParseNode.h
r39786813 ra5a71d0 10 10 // Created On : Sat May 16 13:28:16 2015 11 11 // Last Modified By : Rob Schluntz 12 // Last Modified On : Tue Feb 09 13:23:34201613 // Update Count : 1 8512 // Last Modified On : Mon Apr 04 17:10:10 2016 13 // Update Count : 190 14 14 // 15 15 … … 108 108 109 109 ConstantNode( Type, std::string * ); 110 ConstantNode( const ConstantNode &other ) : value( *new std::string( other.value ) ) {};110 ConstantNode( const ConstantNode &other ) : type( other.type ), btype( other.btype), value( *new std::string( other.value ) ) {}; 111 111 ~ConstantNode() { delete &value; } 112 112 … … 330 330 enum BasicType { Char, Int, Float, Double, Void, Bool, Complex, Imaginary }; 331 331 enum Modifier { Signed, Unsigned, Short, Long }; 332 enum Aggregate { Struct, Union, Context };332 enum Aggregate { Struct, Union, Trait }; 333 333 enum TypeClass { Type, Dtype, Ftype }; 334 enum BuiltinType { Valist }; 334 335 335 336 static const char *storageName[]; … … 339 340 static const char *aggregateName[]; 340 341 static const char *typeClassName[]; 342 static const char *builtinTypeName[]; 341 343 342 344 static DeclarationNode *newFunction( std::string *name, DeclarationNode *ret, DeclarationNode *param, StatementNode *body, bool newStyle = false ); … … 353 355 static DeclarationNode *newFromTypeGen( std::string *, ExpressionNode *params ); 354 356 static DeclarationNode *newTypeParam( TypeClass, std::string *); 355 static DeclarationNode *new Context( std::string *name, DeclarationNode *params, DeclarationNode *asserts );356 static DeclarationNode *new ContextUse( std::string *name, ExpressionNode *params );357 static DeclarationNode *newTrait( std::string *name, DeclarationNode *params, DeclarationNode *asserts ); 358 static DeclarationNode *newTraitUse( std::string *name, ExpressionNode *params ); 357 359 static DeclarationNode *newTypeDecl( std::string *name, DeclarationNode *typeParams ); 358 360 static DeclarationNode *newPointer( DeclarationNode *qualifiers ); … … 364 366 static DeclarationNode *newAttr( std::string *, ExpressionNode *expr ); 365 367 static DeclarationNode *newAttr( std::string *, DeclarationNode *type ); 368 static DeclarationNode *newBuiltinType( BuiltinType ); 366 369 367 370 DeclarationNode *addQualifiers( DeclarationNode *); … … 402 405 LinkageSpec::Type get_linkage() const { return linkage; } 403 406 DeclarationNode *extractAggregate() const; 407 ExpressionNode *get_enumeratorValue() const { return enumeratorValue; } 404 408 405 409 DeclarationNode(); … … 414 418 std::list< std::string > attributes; 415 419 ExpressionNode *bitfieldWidth; 420 ExpressionNode *enumeratorValue; 416 421 InitializerNode *initializer; 417 422 bool hasEllipsis; -
src/Parser/Parser.cc
r39786813 ra5a71d0 10 10 // Created On : Sat May 16 14:54:28 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun May 31 23:45:19 201513 // Update Count : 412 // Last Modified On : Mon Mar 21 18:04:47 2016 13 // Update Count : 5 14 14 // 15 15 16 16 #include "Parser.h" 17 #include "TypedefTable.h"18 17 #include "lex.h" 19 18 #include "parser.h" 19 #include "TypedefTable.h" 20 20 21 21 // global variables in cfa.y -
src/Parser/TypeData.cc
r39786813 ra5a71d0 10 10 // Created On : Sat May 16 15:12:51 2015 11 11 // Last Modified By : Rob Schluntz 12 // Last Modified On : Thu Jan 14 10:43:42201613 // Update Count : 3612 // Last Modified On : Wed Apr 06 16:57:53 2016 13 // Update Count : 49 14 14 // 15 15 … … 23 23 #include "SynTree/Expression.h" 24 24 #include "SynTree/Statement.h" 25 #include "SynTree/Initializer.h" 25 26 26 27 TypeData::TypeData( Kind k ) : kind( k ), base( 0 ), forall( 0 ) { … … 84 85 typeexpr->expr = 0; 85 86 break; 87 case Builtin: 88 builtin = new Builtin_t; 89 break; 86 90 case Attr: 87 91 attr = new Attr_t; … … 149 153 delete typeexpr->expr; 150 154 delete typeexpr; 155 break; 156 case Builtin: 157 delete builtin; 151 158 break; 152 159 case Attr: … … 221 228 newtype->typeexpr->expr = maybeClone( typeexpr->expr ); 222 229 break; 230 case Builtin: 231 newtype->builtin->type = builtin->type; 232 break; 223 233 case Attr: 224 234 newtype->attr->expr = maybeClone( attr->expr ); … … 396 406 attr->type->print( os, indent + 2 ); 397 407 } // if 408 break; 409 case Builtin: 410 os << "gcc builtin type"; 398 411 break; 399 412 default: … … 524 537 case Typeof: 525 538 return buildTypeof(); 539 case Builtin: 540 return new VarArgsType( buildQualifiers() ); 526 541 case Attr: 527 542 return buildAttr(); … … 823 838 buildForall( aggregate->params, at->get_parameters() ); 824 839 break; 825 case DeclarationNode:: Context:826 at = new ContextDecl( aggregate->name );840 case DeclarationNode::Trait: 841 at = new TraitDecl( aggregate->name ); 827 842 buildList( aggregate->params, at->get_parameters() ); 828 843 break; … … 863 878 ret = new UnionInstType( buildQualifiers(), aggInst->aggregate->aggregate->name ); 864 879 break; 865 case DeclarationNode:: Context:866 ret = new ContextInstType( buildQualifiers(), aggInst->aggregate->aggregate->name );880 case DeclarationNode::Trait: 881 ret = new TraitInstType( buildQualifiers(), aggInst->aggregate->aggregate->name ); 867 882 break; 868 883 default: … … 901 916 EnumDecl *ret = new EnumDecl( enumeration->name ); 902 917 buildList( enumeration->constants, ret->get_members() ); 918 std::list< Declaration * >::iterator members = ret->get_members().begin(); 919 for ( const DeclarationNode *cur = enumeration->constants; cur != NULL; cur = dynamic_cast<DeclarationNode *>( cur->get_link() ), ++members ) { 920 if ( cur->get_enumeratorValue() != NULL ) { 921 ObjectDecl *member = dynamic_cast<ObjectDecl *>(*members); 922 member->set_init( new SingleInit( maybeBuild< Expression >( cur->get_enumeratorValue() ), std::list< Expression * >() ) ); 923 } // if 924 } // for 903 925 return ret; 904 926 } -
src/Parser/TypeData.h
r39786813 ra5a71d0 10 10 // Created On : Sat May 16 15:18:36 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Jan 14 23:31:15201613 // Update Count : 1 712 // Last Modified On : Fri Feb 26 14:21:38 2016 13 // Update Count : 19 14 14 // 15 15 … … 24 24 struct TypeData { 25 25 enum Kind { Unknown, Basic, Pointer, Array, Function, Aggregate, AggregateInst, 26 Enum, EnumConstant, Symbolic, SymbolicInst, Variable, Tuple, Typeof, Attr } kind;26 Enum, EnumConstant, Symbolic, SymbolicInst, Variable, Tuple, Typeof, Builtin, Attr } kind; 27 27 28 28 TypeData( Kind k = Unknown ); … … 98 98 }; 99 99 100 struct Builtin_t { 101 DeclarationNode::BuiltinType type; 102 }; 103 100 104 struct Attr_t { 101 105 std::string name; … … 116 120 Typeof_t * typeexpr; 117 121 Attr_t * attr; 122 Builtin_t * builtin; 118 123 }; 119 124 -
src/Parser/TypedefTable.cc
r39786813 ra5a71d0 10 10 // Created On : Sat May 16 15:20:13 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Jun 26 07:30:16 201513 // Update Count : 1912 // Last Modified On : Mon Mar 21 18:18:58 2016 13 // Update Count : 23 14 14 // 15 15 16 16 #include <map> 17 17 #include <list> 18 #include <cassert> 18 19 #include "TypedefTable.h" 19 #include <cassert>20 20 using namespace std; 21 21 … … 29 29 TypedefTable::TypedefTable() : currentScope( 0 ) {} 30 30 31 bool TypedefTable::exists( const string &identifier ) { 32 return table.count( identifier ) > 0; 33 } 34 31 35 void TypedefTable::changeKind( const string &identifier, kind_t kind ) { 32 36 tableType::iterator id_pos = table.find( identifier ); 33 if ( id_pos == table.end() ) { 34 return; 35 } else { 36 (*((*id_pos ).second.begin())).kind = kind; 37 return; 38 } // if 37 if ( id_pos == table.end() ) return; 38 id_pos->second.begin()->kind = kind; 39 39 } 40 40 41 bool TypedefTable::isKind( const string &identifier, kind_t kind) const {41 int TypedefTable::isKind( const string &identifier ) const { 42 42 tableType::const_iterator id_pos = table.find( identifier ); 43 if ( id_pos == table.end() ) { 44 return true; 45 } else { 46 return (*((*id_pos ).second.begin())).kind == kind; 47 } // if 48 } 49 50 bool TypedefTable::isIdentifier( const string &identifier ) const { 51 return isKind( identifier, ID ); 52 } 53 54 bool TypedefTable::isTypedef( const string &identifier ) const { 55 return isKind( identifier, TD ); 56 } 57 58 bool TypedefTable::isTypegen( const string &identifier ) const { 59 return isKind( identifier, TG ); 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; 60 46 } 61 47 62 48 void TypedefTable::addToScope( const std::string &identifier, kind_t kind, int scope ) { 63 if ( current Context != "" && scope == contextScope ) {49 if ( currentTrait != "" && scope == contextScope ) { 64 50 DeferredEntry entry = { identifier, kind }; 65 contexts[current Context].push_back( entry );51 contexts[currentTrait].push_back( entry ); 66 52 } else { 67 53 debugPrint( "Adding " << identifier << " as kind " << kind << " scope " << scope << " from scope " << currentScope << endl ); … … 112 98 } 113 99 114 void TypedefTable::open Context( const std::string &contextName ) {100 void TypedefTable::openTrait( const std::string &contextName ) { 115 101 map< string, deferListType >::iterator i = contexts.find( contextName ); 116 102 if ( i != contexts.end() ) { … … 150 136 } 151 137 152 void TypedefTable::enter Context( const std::string &contextName ) {153 current Context = contextName;138 void TypedefTable::enterTrait( const std::string &contextName ) { 139 currentTrait = contextName; 154 140 contextScope = currentScope; 155 141 } 156 142 157 void TypedefTable::leave Context() {158 current Context = "";143 void TypedefTable::leaveTrait() { 144 currentTrait = ""; 159 145 } 160 146 -
src/Parser/TypedefTable.h
r39786813 ra5a71d0 10 10 // Created On : Sat May 16 15:24:36 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Jun 25 22:52:15 201513 // Update Count : 1112 // Last Modified On : Mon Mar 21 18:17:36 2016 13 // Update Count : 24 14 14 // 15 15 … … 22 22 #include <stack> 23 23 24 #include "lex.h" 25 #include "parser.h" 26 24 27 class TypedefTable { 25 28 public: 26 enum kind_t { ID , TD, TG};29 enum kind_t { ID = IDENTIFIER, TD = TYPEDEFname, TG = TYPEGENname }; 27 30 private: 28 31 struct Entry { … … 40 43 41 44 int currentScope; 42 std::string current Context;45 std::string currentTrait; 43 46 int contextScope; 44 47 … … 49 52 std::stack< std::string > nextIdentifiers; 50 53 51 bool isKind( const std::string &identifier, kind_t kind ) const;52 54 void addToScope( const std::string &identifier, kind_t kind, int scope ); 53 55 public: 54 56 TypedefTable(); 55 57 56 bool isIdentifier( const std::string &identifier ) const; 57 bool isTypedef( const std::string &identifier ) const; 58 bool isTypegen( const std::string &identifier ) const; 59 58 bool exists( const std::string &identifier ); 59 int isKind( const std::string &identifier ) const; 60 60 void changeKind( const std::string &identifier, kind_t kind ); 61 61 … … 79 79 80 80 // dump the definitions from a pre-defined context into the current scope 81 void open Context( const std::string &contextName );81 void openTrait( const std::string &contextName ); 82 82 83 83 void enterScope(); 84 84 void leaveScope(); 85 void enter Context( const std::string &contextName );86 void leave Context();85 void enterTrait( const std::string &contextName ); 86 void leaveTrait(); 87 87 88 88 void print() const; -
src/Parser/lex.cc
r39786813 ra5a71d0 382 382 (yy_c_buf_p) = yy_cp; 383 383 384 #define YY_NUM_RULES 1 79385 #define YY_END_OF_BUFFER 18 0384 #define YY_NUM_RULES 180 385 #define YY_END_OF_BUFFER 181 386 386 /* This struct is not used in this scanner, 387 387 but its presence is necessary. */ … … 391 391 flex_int32_t yy_nxt; 392 392 }; 393 static yyconst flex_int16_t yy_accept[8 76] =393 static yyconst flex_int16_t yy_accept[888] = 394 394 { 0, 395 0, 0, 0, 0, 0, 0, 114, 114, 117, 117, 396 180, 178, 7, 9, 8, 137, 116, 101, 142, 145, 397 113, 124, 125, 140, 138, 128, 139, 131, 141, 106, 398 107, 108, 129, 130, 147, 149, 148, 150, 178, 101, 399 122, 178, 123, 143, 101, 103, 101, 101, 101, 101, 400 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 401 101, 126, 146, 127, 144, 7, 178, 4, 4, 179, 402 104, 179, 105, 114, 115, 121, 117, 118, 7, 9, 403 0, 8, 154, 173, 101, 0, 166, 136, 159, 167, 404 164, 151, 162, 152, 163, 161, 0, 111, 3, 0, 405 406 165, 111, 109, 0, 0, 109, 109, 0, 0, 109, 407 108, 108, 108, 0, 108, 134, 135, 133, 155, 157, 408 153, 158, 156, 0, 0, 0, 0, 0, 0, 0, 409 0, 0, 0, 0, 0, 0, 0, 0, 102, 172, 410 0, 116, 113, 101, 0, 0, 169, 0, 101, 101, 411 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 412 101, 101, 101, 101, 101, 39, 101, 101, 101, 101, 413 101, 101, 101, 101, 101, 101, 57, 101, 101, 101, 414 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 415 101, 101, 168, 160, 7, 0, 0, 0, 2, 0, 416 417 5, 104, 0, 0, 0, 114, 0, 120, 119, 119, 418 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 419 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 420 111, 111, 0, 111, 111, 111, 0, 6, 111, 109, 421 0, 0, 0, 111, 0, 109, 109, 109, 109, 0, 422 110, 0, 0, 108, 108, 108, 108, 0, 170, 171, 423 0, 176, 174, 0, 0, 0, 102, 0, 0, 0, 424 0, 0, 0, 0, 0, 101, 17, 101, 101, 101, 425 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 426 101, 101, 101, 101, 101, 14, 101, 101, 101, 101, 427 428 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 429 101, 101, 101, 101, 51, 101, 101, 101, 64, 101, 430 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 431 101, 88, 101, 101, 101, 101, 101, 101, 101, 0, 432 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 433 0, 0, 0, 119, 0, 0, 177, 0, 0, 0, 434 0, 0, 0, 0, 111, 0, 111, 0, 111, 0, 435 0, 111, 111, 109, 109, 0, 0, 110, 110, 0, 436 110, 0, 110, 108, 108, 0, 0, 0, 0, 0, 437 0, 0, 0, 0, 0, 175, 101, 101, 101, 101, 438 439 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 440 101, 101, 101, 101, 101, 101, 101, 101, 101, 21, 441 101, 24, 101, 27, 101, 101, 101, 101, 101, 101, 442 101, 42, 101, 44, 101, 101, 101, 101, 101, 101, 443 101, 56, 101, 67, 101, 101, 101, 101, 101, 101, 444 101, 101, 101, 101, 101, 89, 101, 101, 96, 101, 445 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 447 0, 111, 111, 0, 0, 0, 0, 0, 110, 110, 448 0, 112, 0, 110, 110, 0, 0, 0, 0, 0, 449 450 0, 0, 0, 0, 0, 0, 0, 0, 101, 101, 451 22, 101, 101, 101, 101, 101, 101, 101, 15, 101, 452 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 453 101, 101, 101, 23, 25, 101, 32, 101, 101, 101, 454 101, 101, 41, 101, 101, 101, 101, 49, 101, 101, 455 54, 101, 101, 101, 101, 101, 76, 101, 101, 101, 456 101, 101, 86, 101, 101, 94, 101, 101, 100, 0, 395 0, 0, 0, 0, 0, 0, 115, 115, 118, 118, 396 181, 179, 7, 9, 8, 138, 117, 102, 143, 146, 397 114, 125, 126, 141, 139, 129, 140, 132, 142, 107, 398 108, 109, 130, 131, 148, 150, 149, 151, 179, 102, 399 123, 179, 124, 144, 102, 104, 102, 102, 102, 102, 400 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 401 102, 102, 127, 147, 128, 145, 7, 179, 4, 4, 402 180, 105, 180, 106, 115, 116, 122, 118, 119, 7, 403 9, 0, 8, 155, 174, 102, 0, 167, 137, 160, 404 168, 165, 152, 163, 153, 164, 162, 0, 112, 3, 405 406 0, 166, 112, 110, 0, 0, 110, 110, 0, 0, 407 110, 109, 109, 109, 0, 109, 135, 136, 134, 156, 408 158, 154, 159, 157, 0, 0, 0, 0, 0, 0, 409 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 410 173, 0, 117, 114, 102, 0, 0, 170, 0, 102, 411 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 412 102, 102, 102, 102, 102, 102, 38, 102, 102, 102, 413 102, 102, 102, 102, 102, 102, 102, 56, 102, 102, 414 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 415 102, 102, 102, 102, 169, 161, 7, 0, 0, 0, 416 417 2, 0, 5, 105, 0, 0, 0, 115, 0, 121, 418 120, 120, 0, 0, 0, 118, 0, 0, 0, 0, 457 419 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 458 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 459 0, 110, 112, 112, 112, 112, 112, 110, 0, 0, 460 461 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 462 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 463 101, 101, 101, 101, 101, 101, 59, 101, 101, 101, 464 101, 101, 101, 101, 101, 28, 101, 101, 101, 101, 465 40, 43, 46, 101, 101, 52, 101, 61, 68, 101, 466 101, 75, 77, 80, 81, 83, 84, 101, 101, 91, 467 101, 101, 0, 1, 0, 0, 0, 0, 0, 0, 468 104, 0, 0, 0, 119, 0, 0, 0, 0, 112, 469 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 470 0, 0, 101, 101, 18, 101, 101, 101, 101, 101, 471 472 101, 101, 16, 101, 101, 101, 33, 101, 101, 101, 473 101, 101, 101, 101, 101, 101, 101, 101, 35, 101, 474 37, 38, 101, 48, 53, 101, 101, 101, 90, 101, 475 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476 0, 0, 0, 0, 10, 11, 29, 55, 101, 101, 477 101, 101, 101, 101, 101, 101, 101, 101, 101, 60, 478 62, 65, 101, 101, 78, 92, 101, 101, 36, 47, 479 71, 72, 101, 95, 97, 0, 0, 0, 0, 0, 480 0, 0, 0, 0, 0, 0, 0, 101, 69, 101, 481 101, 12, 101, 101, 30, 34, 101, 101, 101, 66, 482 483 101, 101, 101, 101, 101, 101, 0, 0, 0, 0, 484 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 485 101, 101, 101, 101, 101, 101, 101, 50, 63, 73, 486 79, 93, 98, 101, 101, 0, 0, 0, 0, 0, 487 0, 0, 0, 101, 101, 13, 19, 101, 31, 101, 488 101, 101, 26, 87, 0, 0, 101, 101, 101, 101, 489 101, 74, 99, 101, 85, 20, 101, 45, 82, 101, 490 101, 101, 101, 70, 0 420 0, 133, 112, 112, 0, 112, 112, 0, 0, 6, 421 0, 110, 0, 0, 0, 112, 0, 110, 110, 110, 422 110, 0, 111, 0, 0, 109, 109, 109, 109, 0, 423 171, 172, 0, 177, 175, 0, 0, 0, 103, 0, 424 0, 0, 0, 0, 0, 0, 0, 102, 17, 102, 425 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 426 102, 102, 102, 102, 102, 102, 102, 14, 102, 102, 427 428 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 429 102, 102, 102, 102, 102, 102, 50, 102, 102, 102, 430 63, 102, 102, 102, 102, 102, 102, 102, 102, 102, 431 102, 102, 102, 102, 102, 89, 102, 102, 102, 102, 432 102, 102, 102, 0, 0, 0, 0, 0, 0, 0, 433 0, 120, 0, 0, 0, 0, 0, 120, 0, 0, 434 178, 0, 0, 0, 0, 0, 0, 0, 112, 0, 435 112, 0, 112, 0, 0, 112, 0, 110, 110, 0, 436 0, 111, 111, 0, 111, 0, 111, 109, 109, 0, 437 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 438 439 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 440 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 441 102, 102, 102, 21, 102, 24, 102, 27, 102, 102, 442 102, 102, 102, 102, 102, 41, 102, 43, 102, 102, 443 102, 102, 102, 102, 102, 55, 102, 66, 102, 102, 444 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 445 102, 102, 102, 102, 97, 102, 102, 0, 0, 0, 446 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 447 0, 120, 0, 0, 0, 0, 0, 112, 0, 0, 448 0, 0, 0, 0, 111, 111, 0, 113, 0, 111, 449 450 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 451 0, 0, 0, 0, 102, 102, 22, 102, 102, 102, 452 102, 102, 102, 102, 15, 102, 102, 102, 102, 102, 453 102, 102, 102, 102, 102, 102, 102, 102, 102, 23, 454 25, 102, 32, 102, 102, 102, 102, 40, 102, 102, 455 102, 102, 48, 102, 102, 53, 102, 102, 70, 102, 456 102, 102, 76, 102, 102, 102, 102, 102, 86, 88, 457 102, 102, 94, 102, 102, 101, 0, 0, 0, 0, 458 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459 0, 0, 0, 0, 0, 113, 0, 0, 111, 113, 460 461 113, 113, 113, 0, 111, 0, 0, 0, 0, 0, 462 0, 0, 0, 0, 0, 102, 0, 102, 102, 102, 463 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 464 102, 102, 102, 58, 102, 102, 102, 102, 102, 102, 465 102, 102, 28, 102, 102, 102, 39, 42, 45, 102, 466 102, 51, 102, 60, 67, 102, 102, 75, 77, 80, 467 81, 83, 84, 102, 102, 91, 102, 102, 0, 1, 468 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 469 120, 0, 0, 0, 0, 113, 0, 113, 113, 0, 470 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 471 472 18, 102, 102, 102, 102, 102, 102, 102, 16, 102, 473 102, 102, 33, 102, 102, 102, 102, 102, 102, 102, 474 102, 102, 102, 102, 102, 36, 37, 102, 47, 52, 475 102, 102, 102, 90, 102, 102, 0, 0, 0, 0, 476 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 477 11, 29, 54, 102, 102, 102, 102, 102, 102, 102, 478 102, 102, 102, 102, 59, 61, 64, 102, 102, 78, 479 92, 102, 102, 35, 46, 71, 72, 102, 95, 98, 480 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481 0, 0, 102, 68, 102, 102, 12, 102, 102, 30, 482 483 34, 102, 102, 102, 65, 102, 102, 102, 102, 102, 484 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 485 0, 0, 0, 0, 57, 102, 102, 102, 102, 102, 486 102, 102, 49, 62, 73, 79, 93, 99, 102, 102, 487 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 488 13, 19, 102, 102, 31, 102, 102, 102, 26, 87, 489 0, 0, 102, 102, 102, 102, 102, 102, 74, 100, 490 102, 85, 20, 102, 102, 44, 82, 102, 102, 102, 491 102, 102, 102, 102, 96, 69, 0 491 492 } ; 492 493 … … 499 500 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 500 501 26, 26, 26, 26, 26, 27, 28, 29, 30, 31, 501 32, 33, 34, 35, 36, 37, 38, 39, 40, 39,502 4 1, 11, 42, 11, 11, 43, 11, 44, 11, 45,503 11, 4 6, 47, 48, 49, 11, 11, 50, 11, 11,504 5 1, 52, 53, 54, 55, 56, 57, 58, 59, 60,505 506 6 1, 62, 63, 64, 65, 11, 66, 67, 68, 69,507 7 0, 71, 11, 72, 73, 74, 75, 76, 77, 78,508 79, 80, 81, 82, 83, 84, 1, 1, 1, 1,502 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 503 42, 11, 43, 11, 11, 44, 11, 45, 11, 46, 504 11, 47, 48, 49, 50, 11, 11, 51, 11, 11, 505 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 506 507 62, 63, 64, 65, 66, 11, 67, 68, 69, 70, 508 71, 72, 11, 73, 74, 75, 76, 77, 78, 79, 509 80, 81, 82, 83, 84, 85, 1, 1, 1, 1, 509 510 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 510 511 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, … … 523 524 } ; 524 525 525 static yyconst flex_int32_t yy_meta[8 5] =526 static yyconst flex_int32_t yy_meta[86] = 526 527 { 0, 527 528 1, 1, 2, 1, 1, 1, 1, 1, 3, 1, … … 529 530 6, 1, 7, 7, 7, 7, 7, 7, 1, 1, 530 531 1, 8, 1, 1, 1, 9, 9, 9, 9, 9, 531 4, 4, 10, 4, 11, 4, 4, 4, 10, 4,532 1, 12, 1, 1, 13, 1, 9, 9, 9, 9,533 9, 9, 4, 4, 4, 4, 10, 4, 4, 4,534 11, 4, 4, 4, 10, 4, 4, 4, 4, 4,535 1, 1, 1, 1532 9, 4, 4, 10, 4, 11, 4, 4, 4, 10, 533 4, 1, 12, 1, 1, 13, 1, 9, 9, 9, 534 9, 9, 9, 4, 4, 4, 4, 10, 4, 4, 535 4, 11, 4, 4, 4, 10, 4, 4, 4, 4, 536 4, 1, 1, 1, 1 536 537 } ; 537 538 538 static yyconst flex_int16_t yy_base[10 50] =539 static yyconst flex_int16_t yy_base[1062] = 539 540 { 0, 540 0, 83, 2238, 2237, 93, 0, 175, 176, 177, 178, 541 2252, 2782, 189, 2782, 195, 54, 2782, 2197, 59, 171, 542 2782, 2782, 2782, 55, 186, 2782, 189, 187, 202, 214, 543 272, 0, 2213, 2782, 214, 2213, 150, 340, 153, 222, 544 2782, 157, 2782, 215, 224, 2782, 207, 181, 221, 249, 545 235, 289, 155, 255, 218, 206, 266, 256, 323, 259, 546 192, 2782, 223, 2782, 2210, 377, 342, 2782, 2220, 2782, 547 2187, 234, 2782, 0, 2782, 421, 0, 2782, 393, 2782, 548 399, 405, 2782, 492, 2184, 241, 2782, 2782, 2782, 2782, 549 2782, 2201, 2782, 2200, 2782, 2782, 2211, 552, 2782, 2226, 550 551 2782, 413, 393, 437, 493, 377, 318, 195, 430, 382, 552 0, 384, 321, 196, 427, 2782, 2782, 2782, 2194, 2782, 553 2782, 2782, 2193, 2192, 252, 302, 2206, 342, 435, 422, 554 381, 455, 400, 494, 2185, 440, 2133, 469, 2163, 2782, 555 276, 2782, 2782, 520, 2159, 2157, 2782, 2128, 414, 463, 556 470, 325, 254, 479, 432, 274, 480, 423, 483, 498, 557 492, 503, 499, 509, 341, 455, 484, 377, 510, 512, 558 517, 518, 529, 530, 531, 537, 2154, 541, 536, 544, 559 557, 546, 566, 569, 538, 552, 548, 554, 588, 571, 560 570, 580, 2782, 2782, 645, 651, 2202, 657, 2782, 663, 561 562 2782, 2152, 593, 2147, 2144, 0, 631, 2782, 2782, 669, 563 2141, 2140, 2139, 0, 2160, 629, 635, 639, 678, 677, 564 666, 670, 671, 674, 2138, 681, 682, 2115, 2114, 2782, 565 0, 597, 702, 678, 676, 2111, 2160, 2782, 693, 0, 566 710, 723, 743, 762, 788, 707, 2782, 2119, 2094, 0, 567 776, 2138, 768, 723, 2782, 2113, 2086, 809, 2782, 2782, 568 2118, 2782, 2782, 705, 710, 2098, 2097, 724, 2091, 2088, 569 2087, 0, 2086, 0, 2056, 709, 682, 707, 712, 710, 570 724, 647, 750, 671, 786, 751, 748, 731, 778, 787, 571 789, 788, 792, 790, 758, 2084, 796, 806, 800, 813, 572 573 798, 810, 802, 816, 822, 819, 815, 826, 830, 829, 574 831, 832, 833, 837, 839, 841, 846, 843, 2081, 848, 575 850, 849, 851, 852, 854, 853, 857, 855, 858, 863, 576 868, 2080, 867, 912, 871, 878, 872, 879, 882, 937, 577 939, 2076, 2074, 2071, 0, 2070, 0, 927, 931, 2069, 578 0, 2067, 0, 2064, 0, 2084, 2782, 913, 926, 2064, 579 2060, 0, 2057, 0, 2782, 942, 960, 953, 2782, 966, 580 981, 1005, 2053, 2782, 2782, 955, 968, 995, 968, 1028, 581 892, 1014, 970, 2782, 2782, 2049, 2047, 2045, 0, 2042, 582 0, 2040, 0, 2038, 0, 2782, 909, 944, 982, 943, 583 584 1006, 911, 1012, 923, 1013, 1019, 1009, 1016, 1023, 1024, 585 1020, 972, 1030, 1028, 989, 1026, 1034, 1027, 1039, 2038, 586 1044, 2035, 1048, 2034, 1049, 1051, 1052, 1053, 1056, 1057, 587 1055, 2033, 1059, 2031, 946, 1063, 1066, 1067, 1068, 1071, 588 1069, 2028, 1075, 2025, 1077, 1080, 1079, 1082, 1084, 1086, 589 1087, 1090, 1097, 1107, 1088, 1108, 1093, 1098, 2024, 1096, 590 1111, 1164, 2020, 0, 2018, 0, 2015, 0, 2012, 0, 591 1151, 2011, 0, 2010, 0, 2008, 2005, 2002, 0, 2001, 592 0, 1156, 2000, 1162, 1148, 1182, 1149, 1126, 1147, 2782, 593 1201, 1215, 1241, 2010, 1983, 1992, 1991, 0, 1990, 0, 594 595 1988, 0, 1985, 0, 1982, 0, 1981, 0, 1161, 1149, 596 1983, 1179, 1140, 1180, 1117, 1182, 1192, 1199, 1181, 1163, 597 1196, 1200, 1201, 1220, 1198, 1221, 1224, 604, 1226, 1227, 598 1231, 1233, 1234, 1981, 1244, 1236, 1978, 1240, 1241, 1246, 599 1247, 1243, 1975, 1250, 1251, 1253, 1254, 1974, 1255, 1267, 600 1973, 1264, 1271, 1256, 1263, 1257, 1971, 1275, 1277, 1279, 601 1260, 1281, 1290, 1285, 1288, 1968, 1289, 1291, 1967, 2015, 602 1961, 0, 1958, 0, 1957, 0, 1956, 0, 1954, 0, 603 1921, 0, 1919, 0, 1918, 0, 1336, 1342, 1369, 1353, 604 1915, 2782, 1359, 1307, 1359, 1309, 1912, 2782, 1911, 0, 605 606 1910, 0, 1908, 0, 1905, 0, 0, 0, 1905, 0, 607 1347, 1295, 1292, 1323, 1337, 1338, 1296, 1349, 1351, 1355, 608 1353, 1348, 1363, 1364, 1371, 1373, 1380, 1375, 1403, 1381, 609 1385, 1389, 1094, 1387, 1390, 1904, 1391, 1393, 1397, 1401, 610 1903, 1901, 1898, 1394, 1400, 1897, 1404, 1896, 1894, 1402, 611 1408, 1891, 1890, 1889, 1887, 1884, 1880, 1417, 1412, 1876, 612 1420, 1418, 1921, 2782, 1853, 0, 1852, 0, 0, 0, 613 1854, 0, 0, 0, 2782, 0, 0, 0, 0, 1463, 614 1849, 2782, 2782, 1469, 1846, 0, 1845, 0, 0, 0, 615 0, 1844, 1407, 1446, 1845, 1406, 1423, 1300, 1431, 1449, 616 617 1455, 1447, 1842, 1457, 1448, 1459, 1464, 1460, 1490, 1474, 618 1470, 1494, 1480, 1475, 1484, 1485, 1486, 1482, 1841, 1487, 619 1840, 1838, 1489, 1835, 1834, 1491, 1493, 1497, 1833, 1498, 620 1500, 0, 0, 0, 1828, 1825, 1824, 1548, 0, 1823, 621 1821, 1818, 1817, 1816, 1817, 1814, 1813, 1812, 1505, 1510, 622 1502, 1501, 1504, 1508, 1513, 1517, 1526, 1528, 1559, 1810, 623 1533, 1807, 1534, 1535, 1544, 1545, 1538, 1539, 1806, 1805, 624 1803, 1800, 1540, 1799, 1798, 1793, 1786, 1784, 1783, 1780, 625 1779, 1778, 1776, 1759, 1750, 1749, 1746, 1546, 1742, 1549, 626 1550, 1552, 1554, 1557, 1558, 1739, 1556, 1589, 1566, 1732, 627 628 1565, 1572, 1577, 1579, 1567, 1578, 1727, 1726, 1705, 1704, 629 1703, 1696, 1694, 1693, 1650, 1649, 1647, 1645, 1644, 1646, 630 1571, 1584, 1582, 1581, 1586, 1593, 1595, 1645, 1644, 1597, 631 1642, 1641, 1598, 1599, 1602, 1636, 1635, 1633, 1422, 1421, 632 1205, 1201, 946, 1605, 1610, 910, 1603, 1607, 768, 1613, 633 1618, 1619, 723, 605, 503, 370, 1609, 1620, 1623, 1624, 634 1625, 338, 337, 1627, 290, 251, 1630, 200, 196, 1631, 635 1632, 1637, 1633, 136, 2782, 1707, 1720, 1733, 1743, 1753, 636 1766, 1776, 1789, 1802, 1815, 1823, 1833, 1840, 1847, 1854, 637 1861, 1868, 1875, 1882, 1889, 1896, 1909, 1916, 1920, 1928, 638 639 1931, 1938, 1945, 1952, 1955, 1962, 1968, 1981, 1994, 2001, 640 2008, 2015, 2022, 2025, 2032, 2035, 2042, 2045, 2052, 2055, 641 2062, 2065, 2072, 2075, 2082, 2085, 2092, 2100, 2107, 2114, 642 2121, 2128, 2131, 2138, 2141, 2148, 2151, 2158, 2164, 2177, 643 2184, 2191, 2194, 2201, 2204, 2211, 2214, 2221, 2224, 2231, 644 2234, 2241, 2244, 2251, 2258, 2261, 2268, 2271, 2278, 2285, 645 2292, 2295, 2302, 2305, 2312, 2315, 2322, 2325, 2332, 2335, 646 2342, 2348, 2361, 2368, 2375, 2378, 2385, 2388, 2395, 2398, 647 2405, 2408, 2415, 2418, 2425, 2428, 2435, 2438, 2445, 2448, 648 2455, 2462, 2465, 2472, 2475, 2482, 2485, 2492, 2495, 2498, 649 650 2504, 2511, 2520, 2527, 2534, 2537, 2544, 2547, 2550, 2556, 651 2563, 2566, 2569, 2572, 2575, 2578, 2581, 2584, 2591, 2594, 652 2601, 2604, 2607, 2610, 2613, 2623, 2630, 2633, 2636, 2639, 653 2646, 2653, 2660, 2663, 2670, 2677, 2684, 2691, 2698, 2705, 654 2712, 2719, 2726, 2733, 2740, 2747, 2754, 2761, 2768 541 0, 84, 2272, 2269, 94, 0, 177, 178, 179, 180, 542 2285, 2822, 191, 2822, 197, 55, 2822, 2231, 60, 173, 543 2822, 2822, 2822, 56, 188, 2822, 191, 189, 204, 216, 544 275, 0, 2249, 2822, 216, 2247, 152, 344, 155, 220, 545 2822, 159, 2822, 217, 226, 2822, 185, 154, 212, 251, 546 237, 270, 235, 257, 241, 205, 193, 305, 314, 333, 547 238, 228, 2822, 225, 2822, 2242, 402, 390, 2822, 2253, 548 2822, 2221, 235, 2822, 0, 2822, 426, 0, 2822, 417, 549 2822, 439, 451, 2822, 498, 2219, 264, 2822, 2822, 2822, 550 2822, 2822, 2235, 2822, 2232, 2822, 2822, 2244, 559, 2822, 551 552 2261, 2822, 438, 444, 511, 534, 289, 253, 197, 380, 553 305, 0, 319, 280, 198, 322, 2822, 2822, 2822, 2230, 554 2822, 2822, 2822, 2227, 2224, 218, 255, 2239, 298, 350, 555 368, 312, 440, 398, 405, 2220, 441, 2168, 446, 2196, 556 2822, 335, 2822, 2822, 468, 2190, 2189, 2822, 2162, 439, 557 282, 433, 372, 281, 437, 434, 428, 570, 444, 466, 558 464, 469, 475, 321, 492, 438, 471, 445, 474, 512, 559 489, 503, 496, 521, 276, 515, 516, 2189, 526, 510, 560 519, 525, 543, 522, 560, 553, 523, 561, 551, 544, 561 599, 582, 593, 584, 2822, 2822, 660, 651, 2236, 666, 562 563 2822, 678, 2822, 2183, 607, 2179, 2178, 0, 693, 2822, 564 2822, 684, 2176, 2156, 2154, 0, 2177, 578, 608, 617, 565 654, 679, 650, 683, 684, 687, 2172, 690, 691, 2147, 566 2146, 2822, 0, 683, 710, 686, 700, 2145, 2196, 2822, 567 714, 0, 427, 746, 764, 786, 808, 621, 2822, 2152, 568 2125, 0, 794, 2171, 795, 709, 2822, 2147, 2121, 832, 569 2822, 2822, 2152, 2822, 2822, 711, 714, 2129, 2129, 717, 570 2125, 2123, 2120, 0, 2117, 0, 2088, 694, 679, 712, 571 709, 711, 698, 566, 726, 743, 771, 741, 790, 784, 572 800, 795, 742, 744, 814, 816, 818, 2118, 819, 745, 573 574 820, 821, 822, 823, 824, 746, 825, 748, 659, 831, 575 826, 833, 838, 839, 848, 850, 851, 844, 834, 857, 576 2116, 858, 859, 860, 862, 861, 864, 865, 867, 868, 577 866, 871, 876, 872, 878, 2113, 880, 689, 881, 882, 578 892, 896, 893, 953, 954, 2109, 2108, 2106, 0, 2103, 579 0, 941, 945, 2102, 0, 2101, 0, 2099, 0, 2118, 580 2822, 940, 941, 2094, 2088, 0, 2086, 0, 2822, 953, 581 975, 964, 2822, 981, 997, 1021, 2084, 2822, 2822, 939, 582 940, 1006, 982, 1041, 310, 1039, 1004, 2822, 2822, 2081, 583 2079, 2077, 0, 2074, 0, 2071, 0, 2070, 0, 2822, 584 585 886, 941, 960, 962, 977, 976, 980, 982, 1017, 1010, 586 1002, 998, 1022, 1031, 1028, 1033, 1034, 1037, 1040, 1043, 587 1038, 1041, 1053, 2072, 1055, 2070, 1045, 2067, 1056, 1061, 588 1063, 1065, 1066, 1067, 1070, 2064, 1071, 2063, 1073, 1074, 589 1075, 1078, 1080, 1081, 1085, 2062, 1087, 2060, 1084, 1089, 590 1091, 1097, 1099, 1092, 1102, 1103, 1105, 1106, 1108, 905, 591 1109, 1116, 1110, 1122, 2057, 1120, 1123, 1179, 2051, 0, 592 2050, 0, 2049, 0, 2047, 0, 1166, 2044, 0, 2041, 593 0, 2040, 2039, 2037, 0, 2034, 0, 1173, 2031, 1179, 594 1137, 1195, 1181, 1178, 1176, 2822, 1219, 1231, 1253, 2042, 595 596 2017, 2027, 2024, 0, 2021, 0, 2020, 0, 2019, 0, 597 2017, 0, 2014, 0, 1141, 1172, 2014, 1180, 1155, 1196, 598 1157, 1216, 1207, 1231, 1125, 1210, 1232, 1214, 1187, 1236, 599 1235, 1237, 1238, 1272, 1249, 1252, 1250, 1253, 1254, 2013, 600 1261, 1256, 2012, 1260, 1263, 1264, 1257, 2010, 1271, 1268, 601 1269, 1273, 2007, 1275, 1282, 2006, 1283, 1284, 2005, 1276, 602 1286, 1289, 2003, 1294, 1291, 1296, 1295, 1297, 1310, 2000, 603 1305, 1308, 1999, 1307, 1300, 1998, 2046, 1960, 0, 1958, 604 0, 1957, 0, 1954, 0, 1951, 0, 1950, 0, 1949, 605 0, 1947, 0, 1355, 1361, 1389, 1372, 1944, 2822, 1378, 606 607 1325, 1365, 1379, 1941, 2822, 1940, 0, 1939, 0, 1937, 608 0, 1934, 0, 0, 0, 1936, 0, 1366, 1312, 1311, 609 1341, 1323, 1368, 1369, 1374, 1356, 1383, 1372, 1388, 1390, 610 1393, 1395, 1396, 1398, 1400, 1431, 1406, 1407, 1411, 1408, 611 1413, 1414, 1935, 1409, 1416, 1419, 1933, 1930, 1929, 1422, 612 1424, 1928, 1429, 1926, 1923, 1425, 1430, 1919, 1915, 1911, 613 1895, 1894, 1893, 1436, 1433, 1891, 1439, 1440, 1938, 2822, 614 1884, 0, 1883, 0, 0, 0, 1884, 0, 0, 0, 615 2822, 0, 0, 0, 0, 1486, 1878, 2822, 2822, 1492, 616 1877, 0, 1876, 0, 0, 0, 0, 1874, 1447, 1444, 617 618 1874, 1449, 1471, 1479, 1450, 1480, 1482, 1469, 1873, 1486, 619 1490, 1488, 1502, 1452, 1510, 1504, 1491, 1519, 1506, 1498, 620 1508, 1512, 1513, 1514, 1515, 1872, 1870, 1517, 1867, 1866, 621 1518, 1520, 1523, 1865, 1521, 1525, 0, 0, 0, 1860, 622 1857, 1856, 1575, 0, 1855, 1853, 1850, 1849, 1848, 1849, 623 1846, 1845, 1844, 1531, 1536, 1527, 1528, 1552, 1533, 1537, 624 1539, 1555, 1557, 1569, 1842, 1560, 1839, 1561, 1559, 1568, 625 1572, 1567, 1573, 1838, 1837, 1835, 1828, 1574, 1826, 1825, 626 1819, 1818, 1817, 1815, 1798, 1789, 1788, 1785, 1778, 1775, 627 1768, 1766, 1576, 1768, 1577, 1581, 1580, 1579, 1584, 1585, 628 629 1747, 1586, 1615, 1590, 1746, 1591, 1592, 1602, 1600, 1594, 630 1606, 1742, 1735, 1733, 1732, 1690, 1689, 1686, 1685, 1683, 631 1682, 1678, 1677, 1674, 1676, 1607, 1611, 1614, 1612, 1608, 632 1616, 1620, 1675, 1623, 1624, 1530, 1453, 1630, 1625, 1629, 633 1438, 1354, 1319, 1318, 1267, 1212, 1210, 1208, 1631, 1636, 634 1178, 1639, 1635, 1643, 1177, 1644, 1646, 1650, 1126, 964, 635 937, 903, 1651, 1652, 1654, 1655, 1656, 1658, 788, 752, 636 1660, 607, 487, 1662, 1663, 394, 357, 1664, 1666, 1668, 637 1670, 1669, 1672, 1674, 233, 137, 2822, 1747, 1760, 1773, 638 1783, 1793, 1806, 1816, 1829, 1842, 1855, 1863, 1873, 1880, 639 640 1887, 1894, 1901, 1908, 1915, 1922, 1929, 1936, 1949, 1956, 641 1960, 1968, 1971, 1978, 1985, 1992, 1995, 2002, 2008, 2021, 642 2034, 2041, 2048, 2055, 2062, 2065, 2072, 2075, 2082, 2085, 643 2092, 2095, 2102, 2105, 2112, 2115, 2122, 2125, 2132, 2140, 644 2147, 2154, 2161, 2168, 2171, 2178, 2181, 2188, 2191, 2198, 645 2204, 2217, 2224, 2231, 2234, 2241, 2244, 2251, 2254, 2261, 646 2264, 2271, 2274, 2281, 2284, 2291, 2298, 2301, 2308, 2311, 647 2318, 2325, 2332, 2335, 2342, 2345, 2352, 2355, 2362, 2365, 648 2372, 2375, 2382, 2388, 2401, 2408, 2415, 2418, 2425, 2428, 649 2435, 2438, 2445, 2448, 2455, 2458, 2465, 2468, 2475, 2478, 650 651 2485, 2488, 2495, 2502, 2505, 2512, 2515, 2522, 2525, 2532, 652 2535, 2538, 2544, 2551, 2560, 2567, 2574, 2577, 2584, 2587, 653 2590, 2596, 2603, 2606, 2609, 2612, 2615, 2618, 2621, 2624, 654 2631, 2634, 2641, 2644, 2647, 2650, 2653, 2663, 2670, 2673, 655 2676, 2679, 2686, 2693, 2700, 2703, 2710, 2717, 2724, 2731, 656 2738, 2745, 2752, 2759, 2766, 2773, 2780, 2787, 2794, 2801, 657 2808 655 658 } ; 656 659 657 static yyconst flex_int16_t yy_def[10 50] =660 static yyconst flex_int16_t yy_def[1062] = 658 661 { 0, 659 875, 1, 876, 876, 875, 5, 877, 877, 878, 878, 660 875, 875, 875, 875, 875, 875, 875, 879, 875, 875, 661 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 662 875, 31, 875, 875, 875, 875, 875, 875, 880, 879, 663 875, 875, 875, 875, 879, 875, 879, 879, 879, 879, 664 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 665 879, 875, 875, 875, 875, 875, 881, 875, 875, 875, 666 882, 875, 875, 883, 875, 875, 884, 875, 875, 875, 667 875, 875, 875, 875, 879, 875, 875, 875, 875, 875, 668 875, 875, 875, 875, 875, 875, 875, 875, 875, 885, 669 670 875, 98, 30, 875, 875, 875, 875, 886, 30, 875, 671 31, 875, 875, 31, 875, 875, 875, 875, 875, 875, 672 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 673 875, 875, 875, 875, 875, 875, 875, 875, 887, 875, 674 875, 875, 875, 879, 888, 889, 875, 875, 879, 879, 675 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 676 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 677 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 678 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 679 879, 879, 875, 875, 875, 881, 881, 881, 875, 881, 680 681 875, 882, 875, 890, 891, 883, 875, 875, 875, 875, 682 892, 893, 894, 884, 875, 875, 875, 875, 875, 875, 683 875, 875, 875, 875, 875, 875, 875, 895, 896, 875, 684 98, 875, 875, 875, 875, 98, 897, 875, 875, 103, 685 103, 875, 875, 875, 875, 875, 875, 875, 875, 898, 686 899, 900, 875, 875, 875, 875, 875, 875, 875, 875, 687 875, 875, 875, 875, 875, 875, 887, 875, 901, 902, 688 903, 904, 905, 906, 875, 907, 907, 907, 907, 907, 689 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 690 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 691 692 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 693 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 694 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 695 907, 907, 907, 907, 907, 907, 907, 907, 907, 908, 696 909, 910, 911, 912, 913, 914, 915, 875, 875, 916, 697 917, 918, 919, 920, 921, 875, 875, 875, 875, 875, 698 922, 923, 924, 925, 875, 875, 875, 875, 875, 875, 699 875, 367, 372, 875, 875, 926, 927, 928, 875, 875, 700 875, 928, 875, 875, 875, 929, 930, 931, 932, 933, 701 934, 935, 936, 937, 938, 875, 939, 939, 939, 939, 702 703 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 704 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 705 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 706 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 707 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 708 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 709 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 710 875, 949, 950, 951, 952, 953, 953, 954, 955, 956, 711 957, 875, 482, 875, 958, 875, 958, 875, 875, 875, 712 875, 875, 875, 875, 875, 959, 960, 961, 962, 963, 713 714 964, 965, 966, 967, 968, 969, 970, 971, 972, 972, 715 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 716 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 717 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 718 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 719 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 720 972, 972, 972, 972, 972, 972, 972, 972, 972, 973, 721 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 722 984, 985, 986, 987, 988, 989, 875, 875, 875, 875, 723 990, 875, 589, 875, 875, 875, 593, 875, 991, 992, 724 725 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 726 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 727 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 728 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 729 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 730 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 731 1001, 1001, 1003, 875, 1004, 1005, 1006, 1007, 1008, 1009, 732 1010, 1011, 1012, 1013, 875, 1014, 1015, 1016, 1017, 875, 733 680, 875, 875, 875, 1018, 1019, 1020, 1021, 1022, 1023, 734 1024, 1025, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 735 736 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 737 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 738 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 739 1026, 1027, 1028, 1029, 1030, 1031, 1032, 875, 1033, 1018, 740 1020, 1034, 1035, 1025, 1026, 1026, 1026, 1026, 1026, 1026, 741 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 742 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 743 1026, 1026, 1026, 1026, 1026, 1036, 1037, 1030, 1038, 1031, 744 1039, 1032, 1040, 1041, 1034, 1042, 1035, 1026, 1026, 1026, 745 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 746 747 1026, 1026, 1026, 1026, 1026, 1026, 1043, 1036, 1044, 1037, 748 1045, 1038, 1046, 1039, 1047, 1040, 1048, 1041, 1042, 1026, 749 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 750 1026, 1026, 1026, 1026, 1026, 1049, 1043, 1044, 1045, 1046, 751 1020, 1047, 1048, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 752 1026, 1026, 1026, 1026, 1049, 1020, 1026, 1026, 1026, 1026, 753 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 754 1026, 1026, 1026, 1026, 0, 875, 875, 875, 875, 875, 755 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 756 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 757 758 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 759 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 760 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 761 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 762 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 763 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 764 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 765 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 766 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 767 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 768 769 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 770 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 771 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 772 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 773 875, 875, 875, 875, 875, 875, 875, 875, 875 662 887, 1, 888, 888, 887, 5, 889, 889, 890, 890, 663 887, 887, 887, 887, 887, 887, 887, 891, 887, 887, 664 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 665 887, 31, 887, 887, 887, 887, 887, 887, 892, 891, 666 887, 887, 887, 887, 891, 887, 891, 891, 891, 891, 667 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 668 891, 891, 887, 887, 887, 887, 887, 893, 887, 887, 669 887, 894, 887, 887, 895, 887, 887, 896, 887, 887, 670 887, 887, 887, 887, 887, 891, 887, 887, 887, 887, 671 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 672 673 897, 887, 99, 30, 887, 887, 887, 887, 898, 30, 674 887, 31, 887, 887, 31, 887, 887, 887, 887, 887, 675 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 676 887, 887, 887, 887, 887, 887, 887, 887, 887, 899, 677 887, 887, 887, 887, 891, 900, 901, 887, 887, 891, 678 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 679 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 680 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 681 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 682 891, 891, 891, 891, 887, 887, 887, 893, 893, 893, 683 684 887, 893, 887, 894, 887, 902, 903, 895, 887, 887, 685 887, 887, 904, 905, 906, 896, 887, 887, 887, 887, 686 887, 887, 887, 887, 887, 887, 887, 887, 887, 907, 687 908, 887, 99, 887, 887, 887, 887, 99, 909, 887, 688 887, 104, 104, 887, 887, 887, 887, 887, 887, 887, 689 887, 910, 911, 912, 887, 887, 887, 887, 887, 887, 690 887, 887, 887, 887, 887, 887, 887, 887, 899, 887, 691 913, 914, 915, 916, 917, 918, 887, 919, 919, 919, 692 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 693 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 694 695 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 696 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 697 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 698 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 699 919, 919, 919, 920, 921, 922, 923, 924, 925, 926, 700 927, 887, 887, 928, 929, 930, 931, 932, 933, 887, 701 887, 887, 887, 887, 934, 935, 936, 937, 887, 887, 702 887, 887, 887, 887, 887, 371, 376, 887, 887, 938, 703 939, 940, 887, 887, 887, 940, 887, 887, 887, 941, 704 942, 943, 944, 945, 946, 947, 948, 949, 950, 887, 705 706 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 707 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 708 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 709 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 710 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 711 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 712 951, 951, 951, 951, 951, 951, 951, 952, 953, 954, 713 955, 956, 957, 958, 959, 960, 887, 961, 962, 963, 714 964, 965, 965, 966, 967, 968, 969, 887, 488, 887, 715 970, 887, 970, 887, 887, 887, 887, 887, 887, 887, 716 717 887, 971, 972, 973, 974, 975, 976, 977, 978, 979, 718 980, 981, 982, 983, 984, 984, 984, 984, 984, 984, 719 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 720 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 721 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 722 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 723 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 724 984, 984, 984, 984, 984, 984, 985, 986, 987, 988, 725 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 726 999, 1000, 1001, 887, 887, 887, 887, 1002, 887, 596, 727 728 887, 887, 887, 600, 887, 1003, 1004, 1005, 1006, 1007, 729 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1013, 1013, 1013, 730 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 731 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 732 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 733 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 734 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1015, 887, 735 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 736 887, 1026, 1027, 1028, 1029, 887, 686, 887, 887, 887, 737 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1038, 738 739 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 740 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 741 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 742 1038, 1038, 1038, 1038, 1038, 1038, 1039, 1040, 1041, 1042, 743 1043, 1044, 887, 1045, 1030, 1032, 1046, 1047, 1037, 1038, 744 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 745 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 746 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 747 1048, 1049, 1042, 1050, 1043, 1051, 1044, 1052, 1053, 1046, 748 1054, 1047, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 749 750 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 751 1038, 1055, 1048, 1056, 1049, 1057, 1050, 1058, 1051, 1059, 752 1052, 1060, 1053, 1054, 1038, 1038, 1038, 1038, 1038, 1038, 753 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 754 1061, 1055, 1056, 1057, 1058, 1032, 1059, 1060, 1038, 1038, 755 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 756 1061, 1032, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 757 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 758 1038, 1038, 1038, 1038, 1038, 1038, 0, 887, 887, 887, 759 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 760 761 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 762 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 763 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 764 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 765 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 766 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 767 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 768 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 769 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 770 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 771 772 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 773 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 774 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 775 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 776 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 777 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 778 887 774 779 } ; 775 780 776 static yyconst flex_int16_t yy_nxt[2 867] =781 static yyconst flex_int16_t yy_nxt[2908] = 777 782 { 0, 778 783 12, 13, 14, 15, 15, 15, 13, 16, 17, 12, … … 780 785 28, 29, 30, 31, 32, 32, 32, 32, 33, 34, 781 786 35, 36, 37, 38, 39, 18, 18, 18, 18, 18, 782 18, 18, 40, 18, 18, 18, 18, 18, 40, 18, 783 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 784 51, 52, 53, 18, 54, 18, 55, 18, 18, 18, 785 18, 56, 57, 58, 59, 60, 61, 18, 18, 18, 786 62, 63, 64, 65, 66, 83, 91, 84, 84, 66, 787 87, 88, 67, 70, 70, 70, 70, 70, 70, 70, 788 789 70, 70, 70, 71, 70, 70, 70, 70, 70, 70, 790 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 791 70, 70, 70, 70, 70, 70, 70, 70, 71, 71, 787 18, 18, 18, 40, 18, 18, 18, 18, 18, 40, 788 18, 41, 42, 43, 44, 45, 46, 47, 48, 49, 789 50, 51, 52, 53, 18, 54, 18, 55, 18, 18, 790 56, 18, 57, 58, 59, 60, 61, 62, 18, 18, 791 18, 63, 64, 65, 66, 67, 84, 92, 85, 85, 792 67, 88, 89, 68, 71, 71, 71, 71, 71, 71, 793 794 71, 71, 71, 71, 72, 71, 71, 71, 71, 71, 792 795 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 793 71, 71, 71, 70, 72, 70, 70, 71, 73, 71, 794 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 795 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 796 71, 71, 71, 70, 70, 70, 70, 75, 75, 78, 797 78, 122, 123, 89, 140, 78, 78, 86, 75, 75, 798 79, 80, 81, 81, 81, 79, 81, 80, 82, 82, 799 800 82, 81, 90, 92, 141, 145, 86, 97, 94, 98, 801 98, 98, 98, 98, 98, 250, 875, 93, 99, 84, 802 95, 96, 84, 100, 176, 117, 76, 76, 76, 76, 803 142, 146, 86, 101, 102, 143, 103, 103, 103, 103, 804 104, 104, 118, 86, 119, 120, 147, 86, 148, 252, 805 258, 86, 160, 105, 193, 192, 106, 86, 86, 149, 806 150, 151, 107, 108, 152, 153, 181, 154, 109, 86, 807 155, 156, 86, 86, 105, 86, 144, 161, 157, 158, 808 110, 159, 204, 261, 162, 262, 86, 179, 107, 228, 809 163, 108, 102, 180, 111, 111, 111, 111, 111, 111, 810 811 86, 168, 86, 169, 194, 86, 86, 86, 205, 164, 812 86, 105, 170, 165, 112, 229, 177, 86, 166, 186, 813 113, 281, 167, 178, 269, 86, 114, 187, 191, 182, 814 183, 142, 105, 261, 188, 262, 143, 284, 115, 184, 815 86, 86, 185, 198, 199, 171, 113, 124, 198, 189, 816 270, 125, 126, 172, 127, 173, 128, 129, 174, 130, 817 248, 131, 175, 256, 200, 200, 200, 200, 200, 200, 818 132, 133, 134, 261, 86, 262, 86, 144, 195, 80, 819 81, 81, 81, 195, 249, 280, 196, 257, 86, 86, 820 135, 190, 86, 136, 79, 80, 81, 81, 81, 79, 821 822 81, 80, 81, 81, 81, 81, 81, 80, 82, 82, 823 82, 81, 261, 305, 262, 240, 240, 240, 240, 246, 824 137, 138, 207, 208, 875, 247, 254, 207, 86, 209, 825 247, 261, 255, 262, 209, 98, 98, 98, 98, 98, 826 98, 263, 875, 210, 210, 210, 210, 241, 246, 308, 827 875, 247, 263, 261, 209, 262, 247, 102, 255, 104, 828 104, 104, 104, 104, 104, 86, 261, 239, 262, 211, 829 875, 261, 209, 262, 86, 255, 105, 209, 209, 875, 830 276, 209, 209, 86, 253, 264, 261, 277, 262, 209, 831 296, 242, 209, 254, 209, 212, 209, 105, 213, 215, 832 833 261, 255, 262, 216, 217, 283, 86, 875, 218, 219, 834 243, 220, 243, 221, 86, 244, 244, 244, 244, 244, 835 244, 86, 222, 223, 224, 261, 265, 262, 142, 306, 836 86, 86, 278, 143, 86, 86, 285, 286, 287, 279, 837 288, 289, 225, 86, 290, 226, 291, 245, 282, 86, 838 86, 292, 293, 294, 86, 295, 297, 875, 298, 301, 839 86, 86, 307, 86, 299, 300, 309, 303, 86, 86, 840 304, 86, 302, 227, 231, 231, 231, 231, 231, 231, 841 86, 86, 86, 312, 310, 311, 313, 86, 86, 86, 842 232, 233, 86, 234, 235, 86, 142, 86, 314, 86, 843 844 321, 315, 330, 86, 320, 86, 236, 318, 86, 316, 845 317, 232, 233, 232, 319, 325, 234, 86, 235, 322, 846 86, 86, 86, 331, 333, 328, 332, 629, 326, 323, 847 324, 86, 207, 208, 337, 335, 338, 207, 365, 86, 848 329, 342, 334, 336, 339, 327, 195, 80, 81, 81, 849 81, 195, 198, 199, 196, 86, 86, 198, 198, 199, 850 356, 365, 357, 198, 340, 199, 356, 343, 357, 340, 851 356, 341, 357, 200, 200, 200, 200, 200, 200, 200, 852 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 853 200, 348, 348, 348, 348, 357, 357, 356, 86, 357, 854 855 358, 356, 356, 357, 357, 356, 359, 357, 356, 356, 856 357, 357, 356, 356, 357, 357, 369, 365, 403, 366, 857 369, 366, 86, 349, 367, 367, 367, 367, 367, 367, 858 875, 232, 233, 86, 234, 235, 261, 369, 262, 369, 859 365, 261, 405, 262, 369, 104, 104, 104, 104, 104, 860 104, 398, 232, 233, 232, 374, 368, 234, 86, 235, 861 86, 86, 105, 86, 371, 244, 244, 244, 244, 244, 862 244, 384, 386, 397, 86, 86, 399, 253, 401, 400, 863 402, 374, 86, 105, 372, 372, 372, 372, 372, 372, 864 104, 104, 104, 104, 104, 104, 377, 384, 387, 86, 865 866 232, 86, 86, 234, 235, 243, 404, 243, 411, 86, 867 244, 244, 244, 244, 244, 244, 373, 410, 379, 86, 868 380, 232, 253, 232, 381, 409, 234, 419, 235, 86, 869 382, 111, 111, 111, 111, 111, 111, 86, 86, 86, 870 86, 86, 383, 86, 412, 415, 380, 86, 416, 86, 871 381, 86, 406, 86, 413, 414, 417, 86, 407, 408, 872 422, 86, 421, 258, 86, 420, 86, 86, 418, 424, 873 86, 423, 428, 86, 426, 427, 430, 86, 429, 425, 874 86, 86, 86, 86, 86, 431, 432, 433, 86, 437, 875 86, 435, 86, 438, 86, 439, 434, 86, 436, 86, 876 877 86, 86, 86, 86, 86, 86, 86, 443, 86, 86, 878 444, 441, 440, 446, 86, 442, 445, 451, 86, 86, 879 142, 450, 86, 86, 447, 449, 448, 456, 452, 86, 880 86, 459, 453, 86, 494, 460, 454, 455, 340, 199, 881 457, 199, 458, 340, 356, 341, 357, 197, 461, 209, 882 209, 209, 209, 348, 348, 348, 348, 356, 495, 357, 883 86, 86, 86, 86, 367, 367, 367, 367, 367, 367, 884 366, 509, 366, 514, 86, 367, 367, 367, 367, 367, 885 367, 471, 482, 482, 482, 482, 482, 482, 231, 231, 886 231, 231, 231, 231, 86, 86, 516, 86, 232, 486, 887 888 875, 234, 235, 240, 240, 240, 240, 104, 104, 487, 889 489, 510, 486, 512, 483, 377, 490, 545, 490, 232, 890 370, 232, 488, 86, 234, 486, 235, 372, 372, 372, 891 372, 372, 372, 86, 875, 371, 489, 379, 486, 380, 892 86, 525, 490, 381, 490, 491, 529, 491, 511, 382, 893 492, 492, 492, 492, 492, 492, 379, 86, 380, 373, 894 86, 383, 381, 86, 86, 380, 513, 86, 496, 381, 895 86, 86, 515, 517, 86, 86, 519, 86, 86, 86, 896 383, 86, 493, 518, 380, 86, 526, 521, 381, 520, 897 86, 522, 523, 524, 527, 86, 531, 532, 530, 86, 898 899 86, 528, 86, 86, 86, 533, 86, 86, 86, 534, 900 86, 535, 538, 541, 86, 543, 539, 86, 86, 86, 901 86, 536, 86, 542, 537, 544, 86, 540, 86, 551, 902 86, 86, 547, 86, 549, 86, 546, 86, 86, 86, 903 548, 86, 550, 552, 86, 86, 558, 86, 86, 86, 904 555, 553, 554, 556, 560, 561, 559, 557, 86, 86, 905 567, 566, 86, 716, 563, 562, 199, 564, 86, 568, 906 486, 569, 570, 209, 209, 209, 209, 565, 482, 482, 907 482, 482, 482, 482, 372, 372, 372, 372, 372, 372, 908 616, 86, 486, 486, 232, 592, 486, 234, 235, 588, 909 910 86, 588, 487, 591, 589, 589, 589, 589, 589, 589, 911 483, 614, 86, 612, 86, 232, 484, 232, 486, 486, 912 234, 592, 235, 492, 492, 492, 492, 492, 492, 611, 913 86, 86, 86, 86, 621, 620, 590, 593, 593, 593, 914 593, 593, 593, 86, 615, 613, 617, 86, 618, 86, 915 86, 86, 86, 594, 626, 875, 595, 596, 491, 856, 916 491, 619, 622, 492, 492, 492, 492, 492, 492, 597, 917 623, 86, 86, 624, 594, 86, 594, 86, 86, 595, 918 625, 596, 86, 627, 86, 86, 630, 86, 628, 635, 919 634, 86, 86, 633, 86, 86, 636, 86, 86, 632, 920 921 631, 86, 86, 641, 86, 86, 86, 86, 86, 638, 922 642, 86, 639, 640, 86, 86, 644, 637, 86, 643, 923 645, 646, 86, 647, 648, 652, 86, 651, 86, 650, 924 86, 649, 86, 656, 653, 658, 86, 655, 654, 86, 925 86, 86, 86, 86, 657, 659, 86, 86, 682, 660, 926 682, 86, 696, 695, 700, 662, 749, 661, 482, 482, 927 482, 482, 482, 482, 589, 589, 589, 589, 589, 589, 928 588, 682, 588, 682, 86, 589, 589, 589, 589, 589, 929 589, 593, 593, 593, 593, 593, 593, 697, 86, 86, 930 587, 680, 680, 680, 680, 680, 680, 683, 86, 86, 931 932 86, 683, 86, 693, 86, 698, 86, 594, 701, 703, 933 595, 596, 699, 597, 86, 86, 694, 704, 683, 702, 934 683, 705, 86, 681, 86, 683, 86, 712, 594, 706, 935 594, 86, 86, 595, 710, 596, 86, 707, 86, 708, 936 86, 86, 86, 711, 86, 86, 709, 713, 86, 715, 937 718, 86, 86, 86, 86, 86, 714, 86, 86, 86, 938 717, 722, 726, 86, 719, 723, 727, 720, 86, 86, 939 721, 86, 725, 729, 86, 875, 875, 728, 724, 745, 940 730, 748, 86, 747, 731, 680, 680, 680, 680, 680, 941 680, 593, 593, 593, 593, 593, 593, 86, 86, 86, 942 943 86, 594, 750, 751, 595, 596, 86, 746, 86, 752, 944 86, 86, 755, 759, 754, 86, 753, 681, 757, 756, 945 762, 86, 594, 684, 594, 86, 86, 595, 760, 596, 946 761, 86, 758, 86, 763, 86, 86, 86, 86, 764, 947 86, 86, 86, 765, 86, 86, 766, 769, 86, 86, 948 767, 86, 86, 86, 768, 86, 86, 774, 790, 86, 949 775, 86, 771, 770, 86, 792, 772, 791, 86, 773, 950 680, 680, 680, 680, 680, 680, 788, 86, 789, 86, 951 796, 794, 793, 798, 86, 86, 86, 799, 800, 86, 952 86, 86, 797, 801, 795, 86, 86, 86, 802, 803, 953 954 86, 86, 738, 86, 804, 86, 823, 86, 86, 86, 955 86, 825, 826, 805, 806, 828, 86, 86, 86, 822, 956 829, 821, 86, 86, 820, 827, 831, 824, 86, 86, 957 86, 832, 86, 86, 834, 86, 846, 86, 830, 833, 958 86, 847, 845, 844, 86, 835, 86, 849, 86, 86, 959 86, 851, 852, 86, 86, 848, 86, 859, 86, 853, 960 86, 86, 854, 850, 86, 857, 858, 861, 860, 86, 961 86, 86, 862, 863, 86, 86, 86, 866, 86, 868, 962 864, 86, 86, 86, 86, 867, 865, 875, 86, 875, 963 855, 871, 86, 86, 874, 86, 86, 86, 875, 875, 964 965 869, 843, 870, 875, 842, 872, 873, 68, 68, 68, 966 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 967 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 968 74, 74, 74, 77, 77, 77, 77, 77, 77, 77, 969 77, 77, 77, 77, 77, 77, 85, 875, 840, 85, 970 875, 85, 85, 85, 85, 85, 139, 839, 875, 838, 971 139, 139, 139, 139, 139, 139, 197, 197, 197, 197, 972 197, 197, 197, 197, 197, 197, 197, 197, 197, 202, 973 875, 837, 202, 86, 202, 202, 202, 202, 202, 206, 974 86, 206, 206, 86, 206, 206, 206, 206, 206, 206, 975 976 875, 206, 214, 819, 875, 214, 214, 214, 214, 214, 977 214, 214, 214, 818, 214, 237, 237, 237, 237, 237, 978 237, 237, 237, 237, 237, 237, 237, 237, 251, 251, 979 816, 251, 875, 814, 875, 251, 267, 812, 875, 267, 980 810, 267, 267, 267, 267, 267, 271, 808, 271, 86, 981 86, 86, 271, 273, 86, 273, 86, 86, 86, 273, 982 344, 86, 344, 86, 86, 86, 344, 346, 86, 346, 983 875, 787, 785, 346, 350, 875, 350, 875, 782, 780, 984 350, 352, 778, 352, 86, 86, 86, 352, 354, 86, 985 354, 86, 86, 86, 354, 361, 86, 361, 744, 741, 986 987 740, 361, 363, 738, 363, 203, 734, 733, 363, 237, 988 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 989 237, 237, 376, 664, 376, 378, 378, 86, 378, 378, 990 378, 86, 378, 251, 251, 86, 251, 388, 86, 388, 991 86, 86, 86, 388, 390, 86, 390, 86, 86, 86, 992 390, 392, 86, 392, 86, 86, 86, 392, 271, 691, 993 271, 394, 690, 394, 688, 686, 684, 394, 273, 591, 994 273, 85, 679, 678, 85, 676, 85, 85, 85, 85, 995 85, 197, 197, 197, 197, 197, 197, 197, 197, 197, 996 197, 197, 197, 197, 462, 462, 462, 462, 462, 462, 997 998 462, 462, 462, 462, 462, 462, 462, 463, 674, 463, 999 672, 670, 668, 463, 465, 666, 465, 664, 86, 86, 1000 465, 467, 86, 467, 86, 86, 86, 467, 344, 86, 1001 344, 469, 86, 469, 86, 610, 608, 469, 346, 606, 1002 346, 472, 604, 472, 602, 600, 496, 472, 350, 598, 1003 350, 474, 598, 474, 587, 586, 584, 474, 352, 477, 1004 352, 476, 477, 476, 582, 580, 578, 476, 354, 576, 1005 354, 478, 574, 478, 572, 86, 86, 478, 361, 86, 1006 361, 480, 86, 480, 86, 86, 86, 480, 363, 86, 1007 363, 485, 508, 485, 506, 485, 504, 485, 376, 502, 1008 1009 376, 500, 376, 498, 376, 378, 378, 484, 378, 378, 1010 378, 481, 378, 497, 479, 497, 357, 357, 477, 497, 1011 499, 475, 499, 473, 470, 468, 499, 501, 466, 501, 1012 464, 86, 86, 501, 388, 86, 388, 503, 396, 503, 1013 395, 393, 391, 503, 390, 389, 390, 505, 268, 505, 1014 263, 262, 385, 505, 392, 385, 392, 507, 250, 507, 1015 375, 375, 238, 507, 394, 370, 394, 85, 364, 362, 1016 85, 360, 85, 85, 85, 85, 85, 462, 462, 462, 1017 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 1018 571, 356, 571, 355, 353, 351, 571, 463, 347, 463, 1019 1020 573, 345, 573, 203, 199, 86, 573, 465, 275, 465, 1021 575, 274, 575, 272, 268, 263, 575, 467, 266, 467, 1022 577, 263, 577, 261, 260, 259, 577, 469, 238, 469, 1023 579, 230, 579, 84, 84, 86, 579, 472, 203, 472, 1024 581, 201, 581, 84, 121, 116, 581, 474, 86, 474, 1025 476, 875, 476, 69, 69, 875, 476, 583, 875, 583, 1026 875, 875, 875, 583, 478, 875, 478, 585, 875, 585, 1027 875, 875, 875, 585, 480, 875, 480, 485, 875, 485, 1028 875, 485, 875, 485, 378, 875, 378, 875, 875, 875, 1029 378, 599, 875, 599, 875, 875, 875, 599, 497, 875, 1030 1031 497, 601, 875, 601, 875, 875, 875, 601, 499, 875, 1032 499, 603, 875, 603, 875, 875, 875, 603, 501, 875, 1033 501, 605, 875, 605, 875, 875, 875, 605, 503, 875, 1034 503, 607, 875, 607, 875, 875, 875, 607, 505, 875, 1035 505, 609, 875, 609, 875, 875, 875, 609, 507, 875, 1036 507, 85, 875, 875, 85, 875, 85, 85, 85, 85, 1037 85, 663, 663, 663, 663, 663, 663, 663, 663, 663, 1038 663, 663, 663, 663, 665, 875, 665, 875, 875, 875, 1039 665, 571, 875, 571, 667, 875, 667, 875, 875, 875, 1040 667, 573, 875, 573, 669, 875, 669, 875, 875, 875, 1041 1042 669, 575, 875, 575, 671, 875, 671, 875, 875, 875, 1043 671, 577, 875, 577, 673, 875, 673, 875, 875, 875, 1044 673, 579, 875, 579, 675, 875, 675, 875, 875, 875, 1045 675, 581, 875, 581, 677, 875, 677, 875, 875, 875, 1046 677, 583, 875, 583, 85, 875, 85, 875, 875, 875, 1047 85, 585, 875, 585, 485, 875, 485, 875, 875, 875, 1048 485, 685, 875, 685, 875, 875, 875, 685, 599, 875, 1049 599, 687, 875, 687, 875, 875, 875, 687, 601, 875, 1050 601, 689, 875, 689, 875, 875, 875, 689, 603, 875, 1051 603, 139, 875, 139, 875, 875, 875, 139, 605, 875, 1052 1053 605, 692, 875, 692, 607, 875, 607, 85, 875, 875, 1054 85, 875, 85, 85, 85, 85, 85, 609, 875, 609, 1055 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 1056 663, 663, 663, 732, 875, 732, 875, 875, 875, 732, 1057 665, 875, 665, 202, 875, 202, 875, 875, 875, 202, 1058 667, 875, 667, 735, 875, 735, 669, 875, 669, 202, 1059 875, 875, 202, 875, 202, 202, 202, 202, 202, 671, 1060 875, 671, 736, 875, 736, 673, 875, 673, 675, 875, 1061 675, 737, 875, 737, 677, 875, 677, 85, 875, 85, 1062 739, 875, 739, 875, 875, 875, 739, 685, 875, 685, 1063 1064 267, 875, 267, 875, 875, 875, 267, 687, 875, 687, 1065 742, 875, 742, 689, 875, 689, 139, 875, 139, 743, 1066 875, 743, 875, 875, 875, 743, 85, 875, 875, 85, 1067 875, 85, 85, 85, 85, 85, 776, 875, 776, 732, 1068 875, 732, 202, 875, 202, 777, 875, 777, 875, 875, 1069 875, 777, 779, 875, 779, 875, 875, 875, 779, 781, 1070 875, 781, 875, 875, 875, 781, 783, 875, 783, 784, 1071 875, 784, 875, 875, 875, 784, 786, 875, 786, 875, 1072 875, 875, 786, 807, 875, 807, 875, 875, 875, 807, 1073 809, 875, 809, 875, 875, 875, 809, 811, 875, 811, 1074 1075 875, 875, 875, 811, 813, 875, 813, 875, 875, 875, 1076 813, 815, 875, 815, 875, 875, 875, 815, 817, 875, 1077 817, 875, 875, 875, 817, 609, 875, 609, 875, 875, 1078 875, 609, 836, 875, 836, 875, 875, 875, 836, 671, 1079 875, 671, 875, 875, 875, 671, 675, 875, 675, 875, 1080 875, 875, 675, 85, 875, 85, 875, 875, 875, 85, 1081 841, 875, 841, 875, 875, 875, 841, 139, 875, 139, 1082 875, 875, 875, 139, 202, 875, 202, 875, 875, 875, 1083 202, 11, 875, 875, 875, 875, 875, 875, 875, 875, 1084 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1085 1086 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1087 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1088 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1089 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1090 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1091 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1092 875, 875, 875, 875, 875, 875 796 71, 71, 71, 71, 71, 71, 71, 71, 71, 72, 797 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 798 72, 72, 72, 72, 72, 71, 73, 71, 71, 72, 799 74, 72, 72, 72, 72, 72, 72, 72, 72, 72, 800 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 801 72, 72, 72, 72, 72, 71, 71, 71, 71, 76, 802 76, 79, 79, 123, 124, 90, 141, 79, 79, 87, 803 76, 76, 80, 81, 82, 82, 82, 80, 82, 81, 804 805 83, 83, 83, 82, 91, 93, 87, 142, 146, 98, 806 95, 99, 99, 99, 99, 99, 99, 252, 887, 94, 807 100, 85, 96, 97, 85, 101, 161, 118, 143, 77, 808 77, 77, 77, 144, 147, 102, 103, 87, 104, 104, 809 104, 104, 105, 105, 119, 87, 120, 121, 148, 263, 810 149, 264, 254, 260, 183, 106, 195, 87, 159, 107, 811 160, 150, 151, 152, 87, 108, 109, 153, 154, 162, 812 155, 110, 87, 156, 157, 145, 163, 106, 87, 182, 813 87, 158, 164, 111, 206, 87, 263, 87, 264, 87, 814 87, 108, 194, 87, 109, 103, 250, 112, 112, 112, 815 816 112, 112, 112, 87, 169, 177, 170, 196, 193, 87, 817 207, 180, 165, 230, 106, 171, 166, 181, 113, 178, 818 251, 167, 87, 258, 114, 168, 179, 172, 87, 263, 819 115, 264, 248, 87, 87, 173, 106, 174, 249, 231, 820 175, 143, 116, 263, 176, 264, 144, 259, 317, 283, 821 114, 125, 280, 500, 249, 126, 127, 87, 128, 191, 822 129, 130, 256, 131, 249, 132, 87, 265, 257, 184, 823 185, 257, 248, 87, 133, 134, 135, 501, 188, 186, 824 249, 263, 187, 264, 271, 87, 189, 265, 145, 256, 825 305, 200, 201, 190, 257, 136, 200, 257, 137, 263, 826 827 887, 264, 192, 197, 81, 82, 82, 82, 197, 87, 828 272, 198, 202, 202, 202, 202, 202, 202, 80, 81, 829 82, 82, 82, 80, 87, 138, 139, 209, 210, 263, 830 887, 264, 209, 282, 211, 255, 263, 267, 264, 211, 831 82, 81, 82, 82, 82, 82, 87, 887, 212, 212, 832 212, 212, 82, 81, 83, 83, 83, 82, 887, 211, 833 99, 99, 99, 99, 99, 99, 242, 242, 242, 242, 834 266, 263, 263, 264, 264, 213, 143, 263, 211, 264, 835 87, 144, 375, 211, 211, 87, 87, 211, 211, 87, 836 87, 87, 286, 241, 887, 211, 87, 87, 211, 243, 837 838 211, 214, 211, 281, 215, 217, 278, 284, 285, 218, 839 219, 307, 298, 279, 220, 221, 87, 222, 87, 223, 840 87, 87, 887, 87, 309, 300, 87, 87, 224, 225, 841 226, 103, 303, 105, 105, 105, 105, 105, 105, 87, 842 299, 87, 301, 302, 87, 304, 308, 310, 87, 227, 843 106, 245, 228, 245, 306, 87, 246, 246, 246, 246, 844 246, 246, 87, 313, 87, 315, 244, 87, 87, 311, 845 314, 87, 106, 87, 87, 87, 323, 87, 87, 322, 846 229, 233, 233, 233, 233, 233, 233, 312, 333, 247, 847 319, 316, 328, 320, 318, 87, 87, 234, 235, 236, 848 849 321, 237, 236, 87, 324, 87, 325, 143, 335, 360, 850 331, 361, 87, 87, 238, 337, 326, 327, 87, 236, 851 235, 236, 87, 329, 237, 332, 236, 287, 288, 289, 852 336, 290, 291, 334, 87, 292, 87, 293, 407, 360, 853 330, 361, 294, 295, 296, 87, 297, 339, 360, 343, 854 361, 87, 200, 201, 338, 340, 346, 200, 341, 87, 855 342, 197, 81, 82, 82, 82, 197, 200, 201, 198, 856 378, 361, 200, 202, 202, 202, 202, 202, 202, 344, 857 201, 360, 347, 361, 344, 360, 345, 361, 202, 202, 858 202, 202, 202, 202, 209, 210, 378, 143, 361, 209, 859 860 202, 202, 202, 202, 202, 202, 352, 352, 352, 352, 861 360, 87, 361, 362, 360, 360, 361, 361, 360, 363, 862 361, 360, 360, 361, 361, 369, 369, 370, 369, 370, 863 435, 87, 371, 371, 371, 371, 371, 371, 373, 353, 864 373, 87, 263, 373, 264, 263, 87, 264, 369, 402, 865 87, 369, 234, 235, 236, 406, 237, 236, 388, 401, 866 373, 87, 373, 87, 87, 372, 390, 373, 105, 105, 867 105, 105, 105, 105, 236, 235, 236, 404, 87, 237, 868 405, 236, 403, 408, 388, 106, 246, 246, 246, 246, 869 246, 246, 391, 87, 87, 87, 87, 87, 87, 419, 870 871 87, 255, 425, 432, 87, 420, 434, 106, 376, 376, 872 376, 376, 376, 376, 381, 409, 413, 105, 105, 105, 873 105, 105, 105, 87, 234, 245, 236, 245, 237, 236, 874 246, 246, 246, 246, 246, 246, 87, 383, 410, 384, 875 87, 377, 87, 385, 411, 412, 236, 87, 236, 386, 876 255, 237, 87, 236, 112, 112, 112, 112, 112, 112, 877 414, 387, 415, 417, 418, 384, 87, 416, 87, 385, 878 87, 87, 87, 87, 87, 87, 87, 87, 87, 421, 879 427, 426, 433, 87, 437, 87, 87, 260, 423, 424, 880 87, 87, 436, 429, 428, 422, 87, 430, 431, 439, 881 882 87, 438, 87, 87, 446, 441, 440, 442, 443, 87, 883 87, 87, 87, 87, 87, 445, 87, 87, 87, 87, 884 87, 448, 447, 87, 87, 444, 449, 451, 87, 456, 885 87, 450, 87, 87, 87, 452, 455, 454, 87, 453, 886 457, 462, 460, 461, 87, 87, 458, 464, 87, 515, 887 459, 463, 465, 466, 344, 201, 201, 87, 887, 344, 888 467, 345, 199, 211, 211, 211, 211, 352, 352, 352, 889 352, 360, 360, 361, 361, 371, 371, 371, 371, 371, 890 371, 370, 569, 370, 492, 492, 371, 371, 371, 371, 891 371, 371, 887, 87, 493, 494, 477, 488, 488, 488, 892 893 488, 488, 488, 233, 233, 233, 233, 233, 233, 516, 894 492, 492, 87, 234, 87, 236, 87, 237, 236, 242, 895 242, 242, 242, 105, 105, 495, 381, 517, 87, 87, 896 489, 496, 87, 518, 87, 236, 374, 236, 519, 520, 897 237, 521, 236, 376, 376, 376, 376, 376, 376, 383, 898 87, 384, 375, 496, 87, 385, 522, 496, 497, 887, 899 497, 386, 87, 498, 498, 498, 498, 498, 498, 87, 900 525, 495, 526, 387, 87, 524, 377, 384, 523, 496, 901 87, 385, 383, 87, 384, 87, 87, 527, 385, 87, 902 87, 532, 87, 87, 502, 87, 499, 87, 535, 528, 903 904 529, 537, 530, 531, 533, 87, 387, 87, 87, 541, 905 384, 534, 538, 87, 385, 87, 536, 87, 87, 87, 906 539, 540, 87, 87, 546, 87, 87, 87, 544, 542, 907 87, 548, 87, 87, 547, 543, 87, 87, 549, 87, 908 545, 87, 552, 87, 87, 550, 556, 554, 551, 87, 909 559, 87, 553, 555, 87, 87, 557, 87, 87, 558, 910 87, 87, 87, 564, 560, 567, 563, 568, 87, 561, 911 566, 562, 87, 565, 87, 87, 571, 87, 87, 573, 912 627, 201, 492, 570, 576, 574, 572, 577, 211, 211, 913 211, 211, 493, 87, 575, 488, 488, 488, 488, 488, 914 915 488, 376, 376, 376, 376, 376, 376, 87, 492, 87, 916 618, 234, 595, 236, 595, 237, 236, 596, 596, 596, 917 596, 596, 596, 492, 87, 599, 492, 621, 489, 87, 918 87, 623, 87, 236, 490, 236, 598, 619, 237, 87, 919 236, 498, 498, 498, 498, 498, 498, 620, 87, 492, 920 597, 599, 492, 600, 600, 600, 600, 600, 600, 87, 921 631, 622, 87, 887, 625, 887, 87, 862, 87, 601, 922 497, 602, 497, 603, 602, 498, 498, 498, 498, 498, 923 498, 624, 628, 87, 87, 630, 604, 87, 87, 87, 924 87, 602, 633, 602, 626, 636, 603, 632, 602, 629, 925 926 634, 87, 87, 635, 87, 87, 87, 642, 87, 87, 927 637, 641, 87, 87, 640, 87, 87, 643, 647, 639, 928 87, 87, 887, 87, 87, 87, 638, 87, 87, 644, 929 645, 646, 648, 650, 87, 87, 87, 649, 87, 653, 930 651, 87, 652, 87, 654, 655, 87, 87, 87, 87, 931 656, 657, 87, 660, 659, 661, 664, 87, 658, 87, 932 87, 663, 87, 87, 87, 668, 665, 688, 688, 662, 933 666, 701, 702, 887, 887, 87, 667, 488, 488, 488, 934 488, 488, 488, 596, 596, 596, 596, 596, 596, 595, 935 688, 595, 704, 87, 596, 596, 596, 596, 596, 596, 936 937 600, 600, 600, 600, 600, 600, 703, 688, 87, 887, 938 594, 686, 686, 686, 686, 686, 686, 689, 87, 689, 939 87, 87, 689, 699, 87, 708, 87, 601, 706, 602, 940 688, 603, 602, 604, 707, 87, 700, 710, 709, 689, 941 87, 689, 87, 705, 687, 87, 689, 87, 87, 602, 942 87, 602, 87, 716, 603, 718, 602, 712, 87, 87, 943 87, 87, 711, 87, 714, 87, 87, 713, 87, 717, 944 715, 87, 721, 719, 87, 724, 87, 87, 722, 720, 945 727, 87, 87, 87, 725, 87, 731, 723, 87, 732, 946 726, 87, 87, 861, 728, 734, 87, 733, 730, 87, 947 948 735, 87, 87, 729, 87, 87, 751, 736, 686, 686, 949 686, 686, 686, 686, 600, 600, 600, 600, 600, 600, 950 750, 87, 755, 87, 601, 763, 602, 752, 603, 602, 951 753, 87, 87, 764, 87, 756, 754, 757, 87, 758, 952 87, 687, 87, 87, 759, 767, 602, 690, 602, 761, 953 87, 603, 766, 602, 87, 760, 87, 762, 87, 765, 954 87, 768, 87, 769, 87, 87, 87, 87, 770, 87, 955 87, 87, 87, 87, 771, 87, 774, 87, 772, 87, 956 87, 779, 87, 87, 795, 87, 780, 773, 87, 87, 957 776, 87, 775, 803, 777, 796, 778, 686, 686, 686, 958 959 686, 686, 686, 793, 87, 794, 799, 87, 798, 87, 960 801, 87, 87, 87, 797, 804, 805, 800, 806, 87, 961 87, 87, 802, 807, 87, 87, 87, 808, 87, 87, 962 743, 87, 87, 87, 809, 828, 87, 87, 87, 830, 963 831, 833, 87, 87, 87, 834, 87, 836, 810, 811, 964 826, 827, 87, 829, 87, 825, 832, 837, 87, 87, 965 87, 838, 839, 87, 87, 835, 87, 87, 87, 851, 966 850, 855, 87, 852, 840, 87, 87, 87, 853, 857, 967 849, 87, 87, 87, 854, 858, 859, 87, 87, 856, 968 860, 87, 863, 864, 865, 87, 87, 866, 87, 868, 969 970 867, 869, 87, 87, 87, 870, 87, 87, 87, 873, 971 87, 875, 87, 876, 87, 87, 87, 874, 87, 872, 972 87, 87, 87, 871, 87, 880, 87, 87, 87, 887, 973 879, 881, 887, 848, 877, 878, 886, 887, 847, 884, 974 887, 845, 882, 883, 887, 844, 885, 69, 69, 69, 975 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 976 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 977 75, 75, 75, 78, 78, 78, 78, 78, 78, 78, 978 78, 78, 78, 78, 78, 78, 86, 887, 843, 86, 979 887, 86, 86, 86, 86, 86, 140, 842, 87, 87, 980 981 140, 140, 140, 140, 140, 140, 199, 199, 199, 199, 982 199, 199, 199, 199, 199, 199, 199, 199, 199, 204, 983 87, 887, 204, 824, 204, 204, 204, 204, 204, 208, 984 887, 208, 208, 823, 208, 208, 208, 208, 208, 208, 985 821, 208, 216, 887, 819, 216, 216, 216, 216, 216, 986 216, 216, 216, 887, 216, 239, 239, 239, 239, 239, 987 239, 239, 239, 239, 239, 239, 239, 239, 253, 253, 988 817, 253, 887, 815, 813, 253, 269, 87, 87, 269, 989 87, 269, 269, 269, 269, 269, 273, 87, 273, 87, 990 87, 87, 273, 275, 87, 275, 87, 87, 87, 275, 991 992 348, 87, 348, 887, 792, 790, 348, 350, 887, 350, 993 887, 787, 785, 350, 354, 783, 354, 87, 87, 87, 994 354, 356, 87, 356, 87, 87, 87, 356, 358, 749, 995 358, 746, 745, 743, 358, 365, 205, 365, 739, 738, 996 670, 365, 367, 87, 367, 87, 87, 87, 367, 239, 997 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 998 239, 239, 380, 87, 380, 382, 382, 87, 382, 382, 999 382, 87, 382, 253, 253, 87, 253, 392, 87, 392, 1000 87, 87, 87, 392, 394, 87, 394, 87, 87, 697, 1001 394, 396, 696, 396, 694, 692, 690, 396, 273, 598, 1002 1003 273, 398, 685, 398, 684, 682, 680, 398, 275, 678, 1004 275, 86, 676, 674, 86, 672, 86, 86, 86, 86, 1005 86, 199, 199, 199, 199, 199, 199, 199, 199, 199, 1006 199, 199, 199, 199, 468, 468, 468, 468, 468, 468, 1007 468, 468, 468, 468, 468, 468, 468, 469, 670, 469, 1008 87, 87, 87, 469, 471, 87, 471, 87, 87, 87, 1009 471, 473, 87, 473, 87, 87, 87, 473, 348, 617, 1010 348, 475, 615, 475, 613, 611, 609, 475, 350, 607, 1011 350, 478, 502, 478, 605, 605, 594, 478, 354, 593, 1012 354, 480, 591, 480, 483, 483, 589, 480, 356, 587, 1013 1014 356, 482, 585, 482, 583, 581, 579, 482, 358, 87, 1015 358, 484, 87, 484, 87, 87, 87, 484, 365, 87, 1016 365, 486, 87, 486, 87, 514, 512, 486, 367, 510, 1017 367, 491, 508, 491, 506, 491, 504, 491, 380, 490, 1018 380, 487, 380, 485, 380, 382, 382, 361, 382, 382, 1019 382, 361, 382, 503, 483, 503, 481, 479, 476, 503, 1020 505, 474, 505, 472, 470, 87, 505, 507, 87, 507, 1021 87, 400, 399, 507, 392, 397, 392, 509, 395, 509, 1022 393, 270, 265, 509, 394, 264, 394, 511, 389, 511, 1023 389, 252, 379, 511, 396, 379, 396, 513, 240, 513, 1024 1025 374, 368, 366, 513, 398, 364, 398, 86, 360, 359, 1026 86, 357, 86, 86, 86, 86, 86, 468, 468, 468, 1027 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 1028 578, 355, 578, 351, 349, 205, 578, 469, 201, 469, 1029 580, 87, 580, 277, 276, 274, 580, 471, 270, 471, 1030 582, 265, 582, 268, 265, 263, 582, 473, 262, 473, 1031 584, 261, 584, 240, 232, 85, 584, 475, 85, 475, 1032 586, 87, 586, 205, 203, 85, 586, 478, 122, 478, 1033 588, 117, 588, 87, 887, 70, 588, 480, 70, 480, 1034 482, 887, 482, 887, 887, 887, 482, 590, 887, 590, 1035 1036 887, 887, 887, 590, 484, 887, 484, 592, 887, 592, 1037 887, 887, 887, 592, 486, 887, 486, 491, 887, 491, 1038 887, 491, 887, 491, 382, 887, 382, 887, 887, 887, 1039 382, 606, 887, 606, 887, 887, 887, 606, 503, 887, 1040 503, 608, 887, 608, 887, 887, 887, 608, 505, 887, 1041 505, 610, 887, 610, 887, 887, 887, 610, 507, 887, 1042 507, 612, 887, 612, 887, 887, 887, 612, 509, 887, 1043 509, 614, 887, 614, 887, 887, 887, 614, 511, 887, 1044 511, 616, 887, 616, 887, 887, 887, 616, 513, 887, 1045 513, 86, 887, 887, 86, 887, 86, 86, 86, 86, 1046 1047 86, 669, 669, 669, 669, 669, 669, 669, 669, 669, 1048 669, 669, 669, 669, 671, 887, 671, 887, 887, 887, 1049 671, 578, 887, 578, 673, 887, 673, 887, 887, 887, 1050 673, 580, 887, 580, 675, 887, 675, 887, 887, 887, 1051 675, 582, 887, 582, 677, 887, 677, 887, 887, 887, 1052 677, 584, 887, 584, 679, 887, 679, 887, 887, 887, 1053 679, 586, 887, 586, 681, 887, 681, 887, 887, 887, 1054 681, 588, 887, 588, 683, 887, 683, 887, 887, 887, 1055 683, 590, 887, 590, 86, 887, 86, 887, 887, 887, 1056 86, 592, 887, 592, 491, 887, 491, 887, 887, 887, 1057 1058 491, 691, 887, 691, 887, 887, 887, 691, 606, 887, 1059 606, 693, 887, 693, 887, 887, 887, 693, 608, 887, 1060 608, 695, 887, 695, 887, 887, 887, 695, 610, 887, 1061 610, 140, 887, 140, 887, 887, 887, 140, 612, 887, 1062 612, 698, 887, 698, 614, 887, 614, 86, 887, 887, 1063 86, 887, 86, 86, 86, 86, 86, 616, 887, 616, 1064 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 1065 669, 669, 669, 737, 887, 737, 887, 887, 887, 737, 1066 671, 887, 671, 204, 887, 204, 887, 887, 887, 204, 1067 673, 887, 673, 740, 887, 740, 675, 887, 675, 204, 1068 1069 887, 887, 204, 887, 204, 204, 204, 204, 204, 677, 1070 887, 677, 741, 887, 741, 679, 887, 679, 681, 887, 1071 681, 742, 887, 742, 683, 887, 683, 86, 887, 86, 1072 744, 887, 744, 887, 887, 887, 744, 691, 887, 691, 1073 269, 887, 269, 887, 887, 887, 269, 693, 887, 693, 1074 747, 887, 747, 695, 887, 695, 140, 887, 140, 748, 1075 887, 748, 887, 887, 887, 748, 86, 887, 887, 86, 1076 887, 86, 86, 86, 86, 86, 781, 887, 781, 737, 1077 887, 737, 204, 887, 204, 782, 887, 782, 887, 887, 1078 887, 782, 784, 887, 784, 887, 887, 887, 784, 786, 1079 1080 887, 786, 887, 887, 887, 786, 788, 887, 788, 789, 1081 887, 789, 887, 887, 887, 789, 791, 887, 791, 887, 1082 887, 887, 791, 812, 887, 812, 887, 887, 887, 812, 1083 814, 887, 814, 887, 887, 887, 814, 816, 887, 816, 1084 887, 887, 887, 816, 818, 887, 818, 887, 887, 887, 1085 818, 820, 887, 820, 887, 887, 887, 820, 822, 887, 1086 822, 887, 887, 887, 822, 616, 887, 616, 887, 887, 1087 887, 616, 841, 887, 841, 887, 887, 887, 841, 677, 1088 887, 677, 887, 887, 887, 677, 681, 887, 681, 887, 1089 887, 887, 681, 86, 887, 86, 887, 887, 887, 86, 1090 1091 846, 887, 846, 887, 887, 887, 846, 140, 887, 140, 1092 887, 887, 887, 140, 204, 887, 204, 887, 887, 887, 1093 204, 11, 887, 887, 887, 887, 887, 887, 887, 887, 1094 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1095 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1096 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1097 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1098 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1099 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1100 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1101 1102 887, 887, 887, 887, 887, 887, 887 1093 1103 } ; 1094 1104 1095 static yyconst flex_int16_t yy_chk[2 867] =1105 static yyconst flex_int16_t yy_chk[2908] = 1096 1106 { 0, 1097 1107 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, … … 1103 1113 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1104 1114 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1105 1, 1, 1, 1, 2, 16, 24, 16, 24, 2,1106 19, 19, 2, 5, 5, 5, 5, 5, 5, 5,1115 1, 1, 1, 1, 1, 2, 16, 24, 16, 24, 1116 2, 19, 19, 2, 5, 5, 5, 5, 5, 5, 1107 1117 1108 1118 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, … … 1113 1123 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1114 1124 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1115 5, 5, 5, 5, 5, 5, 5, 7, 8, 9, 1116 10, 37, 37, 20, 39, 9, 10, 874, 7, 8, 1117 13, 13, 13, 13, 13, 13, 15, 15, 15, 15, 1118 1119 15, 15, 20, 25, 39, 42, 53, 28, 27, 28, 1120 28, 28, 28, 28, 28, 108, 114, 25, 29, 25, 1121 27, 27, 27, 29, 53, 35, 7, 8, 9, 10, 1122 40, 42, 48, 29, 30, 40, 30, 30, 30, 30, 1123 30, 30, 35, 61, 35, 35, 44, 869, 44, 108, 1124 114, 868, 48, 30, 63, 61, 30, 56, 47, 45, 1125 45, 45, 30, 30, 45, 45, 56, 45, 30, 55, 1126 45, 45, 49, 40, 30, 45, 40, 49, 45, 47, 1127 30, 47, 72, 125, 49, 125, 51, 55, 30, 86, 1128 49, 30, 31, 55, 31, 31, 31, 31, 31, 31, 1129 1130 50, 51, 866, 51, 63, 153, 54, 58, 72, 50, 1131 60, 31, 51, 50, 31, 86, 54, 57, 50, 58, 1132 31, 153, 50, 54, 141, 156, 31, 58, 60, 57, 1133 57, 59, 31, 126, 58, 126, 59, 156, 31, 57, 1134 52, 865, 57, 67, 67, 52, 31, 38, 67, 59, 1135 141, 38, 38, 52, 38, 52, 38, 38, 52, 38, 1136 107, 38, 52, 113, 67, 67, 67, 67, 67, 67, 1137 38, 38, 38, 128, 59, 128, 152, 59, 66, 66, 1138 66, 66, 66, 66, 107, 152, 66, 113, 863, 862, 1139 38, 59, 165, 38, 79, 79, 79, 79, 79, 79, 1140 1141 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 1142 82, 82, 131, 165, 131, 103, 103, 103, 103, 106, 1143 38, 38, 76, 76, 856, 106, 112, 76, 168, 76, 1144 110, 133, 112, 133, 76, 102, 102, 102, 102, 102, 1145 102, 130, 103, 76, 76, 76, 76, 103, 110, 168, 1146 109, 106, 129, 130, 76, 130, 110, 104, 112, 104, 1147 104, 104, 104, 104, 104, 149, 129, 102, 129, 76, 1148 103, 136, 76, 136, 158, 115, 104, 76, 76, 109, 1149 149, 76, 76, 155, 109, 132, 132, 149, 132, 76, 1150 158, 104, 76, 115, 76, 76, 76, 104, 76, 84, 1151 1152 138, 115, 138, 84, 84, 155, 166, 109, 84, 84, 1153 105, 84, 105, 84, 150, 105, 105, 105, 105, 105, 1154 105, 151, 84, 84, 84, 134, 134, 134, 144, 166, 1155 154, 157, 150, 144, 159, 167, 157, 157, 157, 151, 1156 157, 157, 84, 161, 157, 84, 157, 105, 154, 160, 1157 163, 157, 157, 157, 162, 157, 159, 855, 160, 162, 1158 164, 169, 167, 170, 161, 161, 169, 163, 171, 172, 1159 164, 144, 162, 84, 98, 98, 98, 98, 98, 98, 1160 173, 174, 175, 171, 169, 170, 172, 179, 176, 185, 1161 98, 98, 178, 98, 98, 180, 189, 182, 173, 187, 1162 1163 180, 174, 185, 186, 179, 188, 98, 178, 181, 175, 1164 176, 98, 98, 98, 178, 182, 98, 183, 98, 181, 1165 184, 191, 190, 186, 188, 184, 187, 528, 183, 181, 1166 181, 192, 207, 207, 191, 190, 191, 207, 232, 189, 1167 184, 203, 189, 190, 192, 183, 195, 195, 195, 195, 1168 195, 195, 196, 196, 195, 528, 854, 196, 198, 198, 1169 216, 232, 216, 198, 200, 200, 217, 203, 217, 200, 1170 218, 200, 218, 196, 196, 196, 196, 196, 196, 198, 1171 198, 198, 198, 198, 198, 200, 200, 200, 200, 200, 1172 200, 210, 210, 210, 210, 219, 220, 221, 282, 221, 1173 1174 222, 222, 223, 222, 223, 224, 224, 224, 220, 219, 1175 220, 219, 226, 227, 226, 227, 234, 235, 282, 233, 1176 234, 233, 284, 210, 233, 233, 233, 233, 233, 233, 1177 241, 239, 239, 277, 239, 239, 264, 234, 264, 234, 1178 235, 265, 284, 265, 234, 242, 242, 242, 242, 242, 1179 242, 277, 239, 239, 239, 246, 233, 239, 278, 239, 1180 276, 280, 242, 279, 241, 243, 243, 243, 243, 243, 1181 243, 254, 268, 276, 853, 281, 278, 242, 280, 279, 1182 281, 246, 288, 242, 244, 244, 244, 244, 244, 244, 1183 253, 253, 253, 253, 253, 253, 251, 254, 268, 287, 1184 1185 244, 283, 286, 244, 244, 245, 283, 245, 288, 295, 1186 245, 245, 245, 245, 245, 245, 244, 287, 251, 849, 1187 251, 244, 253, 244, 251, 286, 244, 295, 244, 289, 1188 251, 258, 258, 258, 258, 258, 258, 285, 290, 292, 1189 291, 294, 251, 293, 289, 291, 251, 297, 292, 301, 1190 251, 299, 285, 303, 290, 290, 293, 298, 285, 285, 1191 299, 302, 298, 258, 300, 297, 307, 304, 294, 301, 1192 306, 300, 304, 305, 303, 303, 306, 308, 305, 302, 1193 310, 309, 311, 312, 313, 307, 308, 309, 314, 313, 1194 315, 311, 316, 314, 318, 315, 310, 317, 312, 320, 1195 1196 322, 321, 323, 324, 326, 325, 328, 318, 327, 329, 1197 320, 316, 315, 322, 330, 317, 321, 327, 333, 331, 1198 334, 326, 335, 337, 323, 325, 324, 333, 328, 336, 1199 338, 337, 329, 339, 381, 338, 330, 331, 340, 340, 1200 335, 341, 336, 340, 358, 340, 358, 341, 339, 348, 1201 348, 348, 348, 349, 349, 349, 349, 359, 381, 359, 1202 397, 846, 402, 334, 366, 366, 366, 366, 366, 366, 1203 368, 397, 368, 402, 404, 368, 368, 368, 368, 368, 1204 368, 348, 367, 367, 367, 367, 367, 367, 370, 370, 1205 370, 370, 370, 370, 400, 398, 404, 435, 367, 376, 1206 1207 843, 367, 367, 371, 371, 371, 371, 371, 371, 376, 1208 379, 398, 377, 400, 367, 378, 379, 435, 383, 367, 1209 370, 367, 377, 412, 367, 376, 367, 372, 372, 372, 1210 372, 372, 372, 399, 382, 371, 383, 378, 377, 378, 1211 415, 412, 379, 378, 383, 380, 415, 380, 399, 378, 1212 380, 380, 380, 380, 380, 380, 382, 401, 382, 372, 1213 407, 378, 382, 403, 405, 378, 401, 408, 382, 378, 1214 406, 411, 403, 405, 409, 410, 407, 416, 418, 414, 1215 382, 413, 380, 406, 382, 417, 413, 409, 382, 408, 1216 419, 410, 410, 411, 414, 421, 417, 418, 416, 423, 1217 1218 425, 414, 426, 427, 428, 419, 431, 429, 430, 421, 1219 433, 423, 427, 429, 436, 431, 427, 437, 438, 439, 1220 441, 425, 440, 430, 426, 433, 443, 428, 445, 441, 1221 447, 446, 437, 448, 439, 449, 436, 450, 451, 455, 1222 438, 452, 440, 443, 457, 633, 450, 460, 453, 458, 1223 447, 445, 446, 448, 452, 453, 451, 449, 454, 456, 1224 458, 457, 461, 633, 455, 454, 462, 456, 515, 460, 1225 488, 461, 462, 471, 471, 471, 471, 456, 482, 482, 1226 482, 482, 482, 482, 484, 484, 484, 484, 484, 484, 1227 515, 513, 485, 487, 482, 489, 488, 482, 482, 486, 1228 1229 510, 486, 485, 487, 486, 486, 486, 486, 486, 486, 1230 482, 513, 509, 510, 520, 482, 484, 482, 485, 487, 1231 482, 489, 482, 491, 491, 491, 491, 491, 491, 509, 1232 512, 514, 519, 516, 520, 519, 486, 492, 492, 492, 1233 492, 492, 492, 517, 514, 512, 516, 521, 517, 525, 1234 518, 522, 523, 492, 525, 842, 492, 492, 493, 841, 1235 493, 518, 521, 493, 493, 493, 493, 493, 493, 492, 1236 522, 524, 526, 523, 492, 527, 492, 529, 530, 492, 1237 524, 492, 531, 526, 532, 533, 529, 536, 527, 535, 1238 533, 538, 539, 532, 542, 535, 536, 540, 541, 531, 1239 1240 530, 544, 545, 542, 546, 547, 549, 554, 556, 539, 1241 544, 561, 540, 541, 555, 552, 546, 538, 550, 545, 1242 547, 549, 553, 550, 552, 556, 558, 555, 559, 554, 1243 560, 553, 562, 561, 558, 563, 564, 560, 559, 565, 1244 567, 563, 568, 613, 562, 564, 612, 617, 594, 565, 1245 596, 698, 613, 612, 617, 568, 698, 567, 587, 587, 1246 587, 587, 587, 587, 588, 588, 588, 588, 588, 588, 1247 590, 594, 590, 596, 614, 590, 590, 590, 590, 590, 1248 590, 593, 593, 593, 593, 593, 593, 614, 615, 616, 1249 587, 589, 589, 589, 589, 589, 589, 595, 611, 622, 1250 1251 618, 595, 619, 611, 621, 615, 620, 589, 618, 620, 1252 589, 589, 616, 593, 623, 624, 611, 621, 595, 619, 1253 595, 622, 625, 589, 626, 595, 628, 629, 589, 623, 1254 589, 627, 630, 589, 627, 589, 631, 624, 634, 625, 1255 632, 635, 637, 628, 638, 644, 626, 630, 639, 632, 1256 635, 645, 640, 650, 629, 647, 631, 696, 693, 651, 1257 634, 640, 650, 659, 637, 644, 651, 638, 658, 662, 1258 639, 661, 647, 659, 697, 840, 839, 658, 645, 693, 1259 661, 697, 699, 696, 662, 680, 680, 680, 680, 680, 1260 680, 684, 684, 684, 684, 684, 684, 694, 702, 705, 1261 1262 700, 680, 699, 700, 680, 680, 701, 694, 704, 701, 1263 706, 708, 705, 709, 704, 707, 702, 680, 707, 706, 1264 712, 711, 680, 684, 680, 710, 714, 680, 710, 680, 1265 711, 713, 708, 718, 713, 715, 716, 717, 720, 714, 1266 723, 709, 726, 715, 727, 712, 716, 720, 728, 730, 1267 717, 731, 752, 751, 718, 753, 749, 730, 751, 754, 1268 731, 750, 726, 723, 755, 753, 727, 752, 756, 728, 1269 738, 738, 738, 738, 738, 738, 749, 757, 750, 758, 1270 757, 755, 754, 759, 761, 763, 764, 761, 763, 767, 1271 768, 773, 758, 764, 756, 765, 766, 788, 765, 766, 1272 1273 790, 791, 738, 792, 767, 793, 792, 797, 794, 795, 1274 759, 794, 795, 768, 773, 798, 801, 799, 805, 791, 1275 799, 790, 821, 802, 788, 797, 802, 793, 803, 806, 1276 804, 803, 824, 823, 805, 822, 823, 825, 801, 804, 1277 798, 824, 822, 821, 826, 806, 827, 826, 830, 833, 1278 834, 830, 833, 835, 847, 825, 844, 847, 848, 834, 1279 857, 845, 835, 827, 850, 844, 845, 850, 848, 851, 1280 852, 858, 851, 852, 859, 860, 861, 859, 864, 861, 1281 857, 867, 870, 871, 873, 860, 858, 838, 872, 837, 1282 836, 870, 832, 831, 873, 829, 828, 820, 819, 818, 1283 1284 864, 817, 867, 816, 815, 871, 872, 876, 876, 876, 1285 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 1286 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 1287 877, 877, 877, 878, 878, 878, 878, 878, 878, 878, 1288 878, 878, 878, 878, 878, 878, 879, 814, 813, 879, 1289 812, 879, 879, 879, 879, 879, 880, 811, 810, 809, 1290 880, 880, 880, 880, 880, 880, 881, 881, 881, 881, 1291 881, 881, 881, 881, 881, 881, 881, 881, 881, 882, 1292 808, 807, 882, 800, 882, 882, 882, 882, 882, 883, 1293 796, 883, 883, 789, 883, 883, 883, 883, 883, 883, 1294 1295 787, 883, 884, 786, 785, 884, 884, 884, 884, 884, 1296 884, 884, 884, 784, 884, 885, 885, 885, 885, 885, 1297 885, 885, 885, 885, 885, 885, 885, 885, 886, 886, 1298 783, 886, 782, 781, 780, 886, 887, 779, 778, 887, 1299 777, 887, 887, 887, 887, 887, 888, 776, 888, 775, 1300 774, 772, 888, 889, 771, 889, 770, 769, 762, 889, 1301 890, 760, 890, 748, 747, 746, 890, 891, 745, 891, 1302 744, 743, 742, 891, 892, 741, 892, 740, 737, 736, 1303 892, 893, 735, 893, 729, 725, 724, 893, 894, 722, 1304 894, 721, 719, 703, 894, 895, 695, 895, 692, 687, 1305 1306 685, 895, 896, 681, 896, 671, 667, 665, 896, 897, 1307 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 1308 897, 897, 898, 663, 898, 899, 899, 660, 899, 899, 1309 899, 657, 899, 900, 900, 656, 900, 901, 655, 901, 1310 654, 653, 652, 901, 902, 649, 902, 648, 646, 643, 1311 902, 903, 642, 903, 641, 636, 609, 903, 904, 605, 1312 904, 905, 603, 905, 601, 599, 597, 905, 906, 591, 1313 906, 907, 585, 583, 907, 581, 907, 907, 907, 907, 1314 907, 908, 908, 908, 908, 908, 908, 908, 908, 908, 1315 908, 908, 908, 908, 909, 909, 909, 909, 909, 909, 1316 1317 909, 909, 909, 909, 909, 909, 909, 910, 579, 910, 1318 577, 575, 573, 910, 911, 571, 911, 570, 569, 566, 1319 911, 912, 557, 912, 551, 548, 543, 912, 913, 537, 1320 913, 914, 534, 914, 511, 507, 505, 914, 915, 503, 1321 915, 916, 501, 916, 499, 497, 496, 916, 917, 495, 1322 917, 918, 494, 918, 483, 480, 478, 918, 919, 477, 1323 919, 920, 476, 920, 474, 472, 469, 920, 921, 467, 1324 921, 922, 465, 922, 463, 459, 444, 922, 923, 442, 1325 923, 924, 434, 924, 432, 424, 422, 924, 925, 420, 1326 925, 926, 394, 926, 392, 926, 390, 926, 927, 388, 1327 1328 927, 387, 927, 386, 927, 928, 928, 373, 928, 928, 1329 928, 363, 928, 929, 361, 929, 360, 356, 354, 929, 1330 930, 352, 930, 350, 346, 344, 930, 931, 343, 931, 1331 342, 332, 319, 931, 932, 296, 932, 933, 275, 933, 1332 273, 271, 270, 933, 934, 269, 934, 935, 267, 935, 1333 266, 261, 257, 935, 936, 256, 936, 937, 252, 937, 1334 249, 248, 237, 937, 938, 236, 938, 939, 229, 228, 1335 939, 225, 939, 939, 939, 939, 939, 940, 940, 940, 1336 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 1337 941, 215, 941, 213, 212, 211, 941, 942, 205, 942, 1338 1339 943, 204, 943, 202, 197, 177, 943, 944, 148, 944, 1340 945, 146, 945, 145, 139, 137, 945, 946, 135, 946, 1341 947, 127, 947, 124, 123, 119, 947, 948, 100, 948, 1342 949, 97, 949, 94, 92, 85, 949, 950, 71, 950, 1343 951, 69, 951, 65, 36, 33, 951, 952, 18, 952, 1344 953, 11, 953, 4, 3, 0, 953, 954, 0, 954, 1345 0, 0, 0, 954, 955, 0, 955, 956, 0, 956, 1346 0, 0, 0, 956, 957, 0, 957, 958, 0, 958, 1347 0, 958, 0, 958, 959, 0, 959, 0, 0, 0, 1348 959, 960, 0, 960, 0, 0, 0, 960, 961, 0, 1349 1350 961, 962, 0, 962, 0, 0, 0, 962, 963, 0, 1351 963, 964, 0, 964, 0, 0, 0, 964, 965, 0, 1352 965, 966, 0, 966, 0, 0, 0, 966, 967, 0, 1353 967, 968, 0, 968, 0, 0, 0, 968, 969, 0, 1354 969, 970, 0, 970, 0, 0, 0, 970, 971, 0, 1355 971, 972, 0, 0, 972, 0, 972, 972, 972, 972, 1356 972, 973, 973, 973, 973, 973, 973, 973, 973, 973, 1357 973, 973, 973, 973, 974, 0, 974, 0, 0, 0, 1358 974, 975, 0, 975, 976, 0, 976, 0, 0, 0, 1359 976, 977, 0, 977, 978, 0, 978, 0, 0, 0, 1360 1361 978, 979, 0, 979, 980, 0, 980, 0, 0, 0, 1362 980, 981, 0, 981, 982, 0, 982, 0, 0, 0, 1363 982, 983, 0, 983, 984, 0, 984, 0, 0, 0, 1364 984, 985, 0, 985, 986, 0, 986, 0, 0, 0, 1125 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 1126 8, 9, 10, 37, 37, 20, 39, 9, 10, 886, 1127 7, 8, 13, 13, 13, 13, 13, 13, 15, 15, 1128 1129 15, 15, 15, 15, 20, 25, 48, 39, 42, 28, 1130 27, 28, 28, 28, 28, 28, 28, 109, 115, 25, 1131 29, 25, 27, 27, 27, 29, 48, 35, 40, 7, 1132 8, 9, 10, 40, 42, 29, 30, 47, 30, 30, 1133 30, 30, 30, 30, 35, 57, 35, 35, 44, 126, 1134 44, 126, 109, 115, 57, 30, 64, 56, 47, 30, 1135 47, 45, 45, 45, 49, 30, 30, 45, 45, 49, 1136 45, 30, 40, 45, 45, 40, 49, 30, 45, 56, 1137 62, 45, 49, 30, 73, 885, 127, 53, 127, 51, 1138 61, 30, 62, 55, 30, 31, 108, 31, 31, 31, 1139 1140 31, 31, 31, 50, 51, 53, 51, 64, 61, 54, 1141 73, 55, 50, 87, 31, 51, 50, 55, 31, 54, 1142 108, 50, 52, 114, 31, 50, 54, 52, 175, 129, 1143 31, 129, 107, 154, 151, 52, 31, 52, 107, 87, 1144 52, 60, 31, 132, 52, 132, 60, 114, 175, 154, 1145 31, 38, 151, 385, 111, 38, 38, 58, 38, 60, 1146 38, 38, 113, 38, 107, 38, 59, 130, 113, 58, 1147 58, 116, 111, 164, 38, 38, 38, 385, 59, 58, 1148 111, 130, 58, 130, 142, 60, 59, 131, 60, 116, 1149 164, 68, 68, 59, 113, 38, 68, 116, 38, 131, 1150 1151 110, 131, 60, 67, 67, 67, 67, 67, 67, 877, 1152 142, 67, 68, 68, 68, 68, 68, 68, 80, 80, 1153 80, 80, 80, 80, 153, 38, 38, 77, 77, 134, 1154 110, 134, 77, 153, 77, 110, 135, 135, 135, 77, 1155 82, 82, 82, 82, 82, 82, 876, 243, 77, 77, 1156 77, 77, 83, 83, 83, 83, 83, 83, 110, 77, 1157 103, 103, 103, 103, 103, 103, 104, 104, 104, 104, 1158 133, 133, 137, 133, 137, 77, 145, 139, 77, 139, 1159 157, 145, 243, 77, 77, 152, 156, 77, 77, 155, 1160 166, 150, 157, 103, 104, 77, 159, 168, 77, 104, 1161 1162 77, 77, 77, 152, 77, 85, 150, 155, 156, 85, 1163 85, 166, 159, 150, 85, 85, 161, 85, 160, 85, 1164 145, 162, 104, 167, 168, 161, 169, 163, 85, 85, 1165 85, 105, 163, 105, 105, 105, 105, 105, 105, 873, 1166 160, 171, 162, 162, 165, 163, 167, 169, 173, 85, 1167 105, 106, 85, 106, 165, 172, 106, 106, 106, 106, 1168 106, 106, 180, 171, 170, 173, 105, 176, 177, 170, 1169 172, 181, 105, 174, 184, 187, 181, 182, 179, 180, 1170 85, 99, 99, 99, 99, 99, 99, 170, 187, 106, 1171 177, 174, 184, 179, 176, 183, 190, 99, 99, 99, 1172 1173 179, 99, 99, 189, 182, 186, 183, 191, 189, 218, 1174 186, 218, 185, 188, 99, 190, 183, 183, 284, 99, 1175 99, 99, 158, 185, 99, 186, 99, 158, 158, 158, 1176 189, 158, 158, 188, 192, 158, 194, 158, 284, 219, 1177 185, 219, 158, 158, 158, 193, 158, 192, 220, 194, 1178 220, 191, 198, 198, 191, 192, 205, 198, 193, 872, 1179 193, 197, 197, 197, 197, 197, 197, 200, 200, 197, 1180 248, 221, 200, 198, 198, 198, 198, 198, 198, 202, 1181 202, 223, 205, 223, 202, 221, 202, 221, 200, 200, 1182 200, 200, 200, 200, 209, 209, 248, 338, 222, 209, 1183 1184 202, 202, 202, 202, 202, 202, 212, 212, 212, 212, 1185 222, 309, 222, 224, 224, 225, 224, 225, 226, 226, 1186 226, 228, 229, 228, 229, 234, 234, 235, 236, 235, 1187 309, 279, 235, 235, 235, 235, 235, 235, 237, 212, 1188 237, 338, 266, 237, 266, 267, 278, 267, 234, 279, 1189 283, 236, 241, 241, 241, 283, 241, 241, 256, 278, 1190 237, 281, 237, 282, 280, 235, 270, 237, 244, 244, 1191 244, 244, 244, 244, 241, 241, 241, 281, 285, 241, 1192 282, 241, 280, 285, 256, 244, 245, 245, 245, 245, 1193 245, 245, 270, 288, 293, 286, 294, 300, 306, 293, 1194 1195 308, 244, 300, 306, 870, 294, 308, 244, 246, 246, 1196 246, 246, 246, 246, 253, 286, 288, 255, 255, 255, 1197 255, 255, 255, 287, 246, 247, 246, 247, 246, 246, 1198 247, 247, 247, 247, 247, 247, 290, 253, 287, 253, 1199 869, 246, 289, 253, 287, 287, 246, 292, 246, 253, 1200 255, 246, 291, 246, 260, 260, 260, 260, 260, 260, 1201 289, 253, 290, 292, 292, 253, 295, 291, 296, 253, 1202 297, 299, 301, 302, 303, 304, 305, 307, 311, 295, 1203 302, 301, 307, 310, 311, 312, 319, 260, 297, 299, 1204 313, 314, 310, 304, 303, 296, 318, 305, 305, 313, 1205 1206 315, 312, 316, 317, 319, 315, 314, 316, 317, 320, 1207 322, 323, 324, 326, 325, 318, 327, 328, 331, 329, 1208 330, 322, 320, 332, 334, 317, 323, 325, 333, 330, 1209 335, 324, 337, 339, 340, 326, 329, 328, 401, 327, 1210 331, 337, 334, 335, 341, 343, 332, 340, 342, 401, 1211 333, 339, 341, 342, 344, 344, 345, 460, 862, 344, 1212 343, 344, 345, 352, 352, 352, 352, 353, 353, 353, 1213 353, 362, 363, 362, 363, 370, 370, 370, 370, 370, 1214 370, 372, 460, 372, 380, 381, 372, 372, 372, 372, 1215 372, 372, 861, 402, 380, 381, 352, 371, 371, 371, 1216 1217 371, 371, 371, 374, 374, 374, 374, 374, 374, 402, 1218 380, 381, 403, 371, 404, 371, 860, 371, 371, 375, 1219 375, 375, 375, 375, 375, 383, 382, 403, 406, 405, 1220 371, 383, 407, 404, 408, 371, 374, 371, 405, 406, 1221 371, 407, 371, 376, 376, 376, 376, 376, 376, 382, 1222 412, 382, 375, 387, 411, 382, 408, 383, 384, 386, 1223 384, 382, 410, 384, 384, 384, 384, 384, 384, 409, 1224 411, 387, 412, 382, 413, 410, 376, 382, 409, 387, 1225 415, 382, 386, 414, 386, 416, 417, 413, 386, 418, 1226 421, 417, 419, 422, 386, 420, 384, 427, 419, 414, 1227 1228 414, 421, 415, 416, 418, 423, 386, 425, 429, 427, 1229 386, 418, 422, 430, 386, 431, 420, 432, 433, 434, 1230 423, 425, 435, 437, 433, 439, 440, 441, 431, 429, 1231 442, 435, 443, 444, 434, 430, 449, 445, 437, 447, 1232 432, 450, 441, 451, 454, 439, 445, 443, 440, 452, 1233 450, 453, 442, 444, 455, 456, 447, 457, 458, 449, 1234 459, 461, 463, 455, 451, 458, 454, 459, 462, 452, 1235 457, 453, 466, 456, 464, 467, 462, 525, 859, 463, 1236 525, 468, 491, 461, 467, 464, 462, 468, 477, 477, 1237 477, 477, 491, 515, 466, 488, 488, 488, 488, 488, 1238 1239 488, 490, 490, 490, 490, 490, 490, 519, 491, 521, 1240 515, 488, 492, 488, 492, 488, 488, 492, 492, 492, 1241 492, 492, 492, 494, 516, 495, 493, 519, 488, 855, 1242 851, 521, 518, 488, 490, 488, 493, 516, 488, 529, 1243 488, 497, 497, 497, 497, 497, 497, 518, 520, 494, 1244 492, 495, 493, 498, 498, 498, 498, 498, 498, 523, 1245 529, 520, 526, 848, 523, 847, 528, 846, 522, 498, 1246 499, 498, 499, 498, 498, 499, 499, 499, 499, 499, 1247 499, 522, 526, 524, 527, 528, 498, 531, 530, 532, 1248 533, 498, 531, 498, 524, 534, 498, 530, 498, 527, 1249 1250 532, 535, 537, 533, 536, 538, 539, 541, 542, 547, 1251 535, 539, 544, 541, 538, 545, 546, 542, 547, 537, 1252 550, 551, 845, 549, 534, 552, 536, 554, 560, 544, 1253 545, 546, 549, 551, 555, 557, 558, 550, 561, 555, 1254 552, 562, 554, 565, 557, 558, 564, 567, 566, 568, 1255 560, 561, 575, 565, 564, 566, 569, 571, 562, 574, 1256 572, 568, 569, 620, 619, 575, 571, 601, 601, 567, 1257 572, 619, 620, 844, 843, 622, 574, 594, 594, 594, 1258 594, 594, 594, 595, 595, 595, 595, 595, 595, 597, 1259 601, 597, 622, 621, 597, 597, 597, 597, 597, 597, 1260 1261 600, 600, 600, 600, 600, 600, 621, 602, 626, 842, 1262 594, 596, 596, 596, 596, 596, 596, 603, 618, 603, 1263 623, 624, 603, 618, 628, 626, 625, 596, 624, 596, 1264 602, 596, 596, 600, 625, 627, 618, 628, 627, 603, 1265 629, 603, 630, 623, 596, 631, 603, 632, 633, 596, 1266 634, 596, 635, 634, 596, 636, 596, 630, 637, 638, 1267 640, 644, 629, 639, 632, 641, 642, 631, 645, 635, 1268 633, 646, 639, 637, 650, 642, 651, 656, 640, 638, 1269 646, 653, 657, 636, 644, 665, 656, 641, 664, 657, 1270 645, 667, 668, 841, 650, 665, 700, 664, 653, 699, 1271 1272 667, 702, 705, 651, 714, 837, 700, 668, 686, 686, 1273 686, 686, 686, 686, 690, 690, 690, 690, 690, 690, 1274 699, 708, 705, 703, 686, 714, 686, 702, 686, 686, 1275 703, 704, 706, 715, 707, 706, 704, 707, 710, 708, 1276 712, 686, 711, 717, 710, 718, 686, 690, 686, 712, 1277 720, 686, 717, 686, 713, 711, 716, 713, 719, 716, 1278 721, 719, 715, 720, 722, 723, 724, 725, 721, 728, 1279 731, 718, 732, 735, 722, 733, 725, 736, 723, 756, 1280 757, 735, 836, 754, 756, 759, 736, 724, 755, 760, 1281 731, 761, 728, 764, 732, 757, 733, 743, 743, 743, 1282 1283 743, 743, 743, 754, 758, 755, 760, 762, 759, 763, 1284 762, 769, 766, 768, 758, 766, 768, 761, 769, 772, 1285 770, 764, 763, 770, 771, 773, 778, 771, 793, 795, 1286 743, 798, 797, 796, 772, 797, 799, 800, 802, 799, 1287 800, 803, 804, 806, 807, 804, 810, 807, 773, 778, 1288 795, 796, 809, 798, 808, 793, 802, 808, 811, 826, 1289 830, 809, 810, 827, 829, 806, 828, 803, 831, 828, 1290 827, 831, 832, 829, 811, 834, 835, 839, 830, 835, 1291 826, 840, 838, 849, 830, 838, 839, 853, 850, 832, 1292 840, 852, 849, 850, 852, 854, 856, 853, 857, 856, 1293 1294 854, 857, 858, 863, 864, 858, 865, 866, 867, 865, 1295 868, 867, 871, 868, 874, 875, 878, 866, 879, 864, 1296 880, 882, 881, 863, 883, 878, 884, 833, 825, 824, 1297 875, 879, 823, 822, 871, 874, 884, 821, 820, 882, 1298 819, 818, 880, 881, 817, 816, 883, 888, 888, 888, 1299 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 1300 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 1301 889, 889, 889, 890, 890, 890, 890, 890, 890, 890, 1302 890, 890, 890, 890, 890, 890, 891, 815, 814, 891, 1303 813, 891, 891, 891, 891, 891, 892, 812, 805, 801, 1304 1305 892, 892, 892, 892, 892, 892, 893, 893, 893, 893, 1306 893, 893, 893, 893, 893, 893, 893, 893, 893, 894, 1307 794, 792, 894, 791, 894, 894, 894, 894, 894, 895, 1308 790, 895, 895, 789, 895, 895, 895, 895, 895, 895, 1309 788, 895, 896, 787, 786, 896, 896, 896, 896, 896, 1310 896, 896, 896, 785, 896, 897, 897, 897, 897, 897, 1311 897, 897, 897, 897, 897, 897, 897, 897, 898, 898, 1312 784, 898, 783, 782, 781, 898, 899, 780, 779, 899, 1313 777, 899, 899, 899, 899, 899, 900, 776, 900, 775, 1314 774, 767, 900, 901, 765, 901, 753, 752, 751, 901, 1315 1316 902, 750, 902, 749, 748, 747, 902, 903, 746, 903, 1317 745, 742, 741, 903, 904, 740, 904, 734, 730, 729, 1318 904, 905, 727, 905, 726, 709, 701, 905, 906, 698, 1319 906, 693, 691, 687, 906, 907, 677, 907, 673, 671, 1320 669, 907, 908, 666, 908, 663, 662, 661, 908, 909, 1321 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 1322 909, 909, 910, 660, 910, 911, 911, 659, 911, 911, 1323 911, 658, 911, 912, 912, 655, 912, 913, 654, 913, 1324 652, 649, 648, 913, 914, 647, 914, 643, 616, 612, 1325 914, 915, 610, 915, 608, 606, 604, 915, 916, 598, 1326 1327 916, 917, 592, 917, 590, 588, 586, 917, 918, 584, 1328 918, 919, 582, 580, 919, 578, 919, 919, 919, 919, 1329 919, 920, 920, 920, 920, 920, 920, 920, 920, 920, 1330 920, 920, 920, 920, 921, 921, 921, 921, 921, 921, 1331 921, 921, 921, 921, 921, 921, 921, 922, 577, 922, 1332 576, 573, 570, 922, 923, 563, 923, 559, 556, 553, 1333 923, 924, 548, 924, 543, 540, 517, 924, 925, 513, 1334 925, 926, 511, 926, 509, 507, 505, 926, 927, 503, 1335 927, 928, 502, 928, 501, 500, 489, 928, 929, 486, 1336 929, 930, 484, 930, 483, 482, 480, 930, 931, 478, 1337 1338 931, 932, 475, 932, 473, 471, 469, 932, 933, 465, 1339 933, 934, 448, 934, 446, 438, 436, 934, 935, 428, 1340 935, 936, 426, 936, 424, 398, 396, 936, 937, 394, 1341 937, 938, 392, 938, 391, 938, 390, 938, 939, 377, 1342 939, 367, 939, 365, 939, 940, 940, 364, 940, 940, 1343 940, 360, 940, 941, 358, 941, 356, 354, 350, 941, 1344 942, 348, 942, 347, 346, 336, 942, 943, 321, 943, 1345 298, 277, 275, 943, 944, 273, 944, 945, 272, 945, 1346 271, 269, 268, 945, 946, 263, 946, 947, 259, 947, 1347 258, 254, 251, 947, 948, 250, 948, 949, 239, 949, 1348 1349 238, 231, 230, 949, 950, 227, 950, 951, 217, 215, 1350 951, 214, 951, 951, 951, 951, 951, 952, 952, 952, 1351 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 1352 953, 213, 953, 207, 206, 204, 953, 954, 199, 954, 1353 955, 178, 955, 149, 147, 146, 955, 956, 140, 956, 1354 957, 138, 957, 136, 128, 125, 957, 958, 124, 958, 1355 959, 120, 959, 101, 98, 95, 959, 960, 93, 960, 1356 961, 86, 961, 72, 70, 66, 961, 962, 36, 962, 1357 963, 33, 963, 18, 11, 4, 963, 964, 3, 964, 1358 965, 0, 965, 0, 0, 0, 965, 966, 0, 966, 1359 1360 0, 0, 0, 966, 967, 0, 967, 968, 0, 968, 1361 0, 0, 0, 968, 969, 0, 969, 970, 0, 970, 1362 0, 970, 0, 970, 971, 0, 971, 0, 0, 0, 1363 971, 972, 0, 972, 0, 0, 0, 972, 973, 0, 1364 973, 974, 0, 974, 0, 0, 0, 974, 975, 0, 1365 975, 976, 0, 976, 0, 0, 0, 976, 977, 0, 1366 977, 978, 0, 978, 0, 0, 0, 978, 979, 0, 1367 979, 980, 0, 980, 0, 0, 0, 980, 981, 0, 1368 981, 982, 0, 982, 0, 0, 0, 982, 983, 0, 1369 983, 984, 0, 0, 984, 0, 984, 984, 984, 984, 1370 1371 984, 985, 985, 985, 985, 985, 985, 985, 985, 985, 1372 985, 985, 985, 985, 986, 0, 986, 0, 0, 0, 1365 1373 986, 987, 0, 987, 988, 0, 988, 0, 0, 0, 1366 1374 988, 989, 0, 989, 990, 0, 990, 0, 0, 0, 1367 990, 991, 0, 991, 0, 0, 0, 991, 992, 0, 1368 992, 993, 0, 993, 0, 0, 0, 993, 994, 0, 1369 994, 995, 0, 995, 0, 0, 0, 995, 996, 0, 1370 996, 997, 0, 997, 0, 0, 0, 997, 998, 0, 1371 1372 998, 999, 0, 999, 1000, 0, 1000, 1001, 0, 0, 1373 1001, 0, 1001, 1001, 1001, 1001, 1001, 1002, 0, 1002, 1374 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1375 1003, 1003, 1003, 1004, 0, 1004, 0, 0, 0, 1004, 1376 1005, 0, 1005, 1006, 0, 1006, 0, 0, 0, 1006, 1377 1007, 0, 1007, 1008, 0, 1008, 1009, 0, 1009, 1010, 1378 0, 0, 1010, 0, 1010, 1010, 1010, 1010, 1010, 1011, 1379 0, 1011, 1012, 0, 1012, 1013, 0, 1013, 1014, 0, 1380 1014, 1015, 0, 1015, 1016, 0, 1016, 1017, 0, 1017, 1381 1018, 0, 1018, 0, 0, 0, 1018, 1019, 0, 1019, 1382 1383 1020, 0, 1020, 0, 0, 0, 1020, 1021, 0, 1021, 1384 1022, 0, 1022, 1023, 0, 1023, 1024, 0, 1024, 1025, 1385 0, 1025, 0, 0, 0, 1025, 1026, 0, 0, 1026, 1386 0, 1026, 1026, 1026, 1026, 1026, 1027, 0, 1027, 1028, 1387 0, 1028, 1029, 0, 1029, 1030, 0, 1030, 0, 0, 1388 0, 1030, 1031, 0, 1031, 0, 0, 0, 1031, 1032, 1389 0, 1032, 0, 0, 0, 1032, 1033, 0, 1033, 1034, 1390 0, 1034, 0, 0, 0, 1034, 1035, 0, 1035, 0, 1391 0, 0, 1035, 1036, 0, 1036, 0, 0, 0, 1036, 1392 1037, 0, 1037, 0, 0, 0, 1037, 1038, 0, 1038, 1393 1394 0, 0, 0, 1038, 1039, 0, 1039, 0, 0, 0, 1395 1039, 1040, 0, 1040, 0, 0, 0, 1040, 1041, 0, 1396 1041, 0, 0, 0, 1041, 1042, 0, 1042, 0, 0, 1375 990, 991, 0, 991, 992, 0, 992, 0, 0, 0, 1376 992, 993, 0, 993, 994, 0, 994, 0, 0, 0, 1377 994, 995, 0, 995, 996, 0, 996, 0, 0, 0, 1378 996, 997, 0, 997, 998, 0, 998, 0, 0, 0, 1379 998, 999, 0, 999, 1000, 0, 1000, 0, 0, 0, 1380 1000, 1001, 0, 1001, 1002, 0, 1002, 0, 0, 0, 1381 1382 1002, 1003, 0, 1003, 0, 0, 0, 1003, 1004, 0, 1383 1004, 1005, 0, 1005, 0, 0, 0, 1005, 1006, 0, 1384 1006, 1007, 0, 1007, 0, 0, 0, 1007, 1008, 0, 1385 1008, 1009, 0, 1009, 0, 0, 0, 1009, 1010, 0, 1386 1010, 1011, 0, 1011, 1012, 0, 1012, 1013, 0, 0, 1387 1013, 0, 1013, 1013, 1013, 1013, 1013, 1014, 0, 1014, 1388 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1389 1015, 1015, 1015, 1016, 0, 1016, 0, 0, 0, 1016, 1390 1017, 0, 1017, 1018, 0, 1018, 0, 0, 0, 1018, 1391 1019, 0, 1019, 1020, 0, 1020, 1021, 0, 1021, 1022, 1392 1393 0, 0, 1022, 0, 1022, 1022, 1022, 1022, 1022, 1023, 1394 0, 1023, 1024, 0, 1024, 1025, 0, 1025, 1026, 0, 1395 1026, 1027, 0, 1027, 1028, 0, 1028, 1029, 0, 1029, 1396 1030, 0, 1030, 0, 0, 0, 1030, 1031, 0, 1031, 1397 1032, 0, 1032, 0, 0, 0, 1032, 1033, 0, 1033, 1398 1034, 0, 1034, 1035, 0, 1035, 1036, 0, 1036, 1037, 1399 0, 1037, 0, 0, 0, 1037, 1038, 0, 0, 1038, 1400 0, 1038, 1038, 1038, 1038, 1038, 1039, 0, 1039, 1040, 1401 0, 1040, 1041, 0, 1041, 1042, 0, 1042, 0, 0, 1397 1402 0, 1042, 1043, 0, 1043, 0, 0, 0, 1043, 1044, 1398 0, 1044, 0, 0, 0, 1044, 1045, 0, 1045, 0, 1399 0, 0, 1045, 1046, 0, 1046, 0, 0, 0, 1046, 1400 1047, 0, 1047, 0, 0, 0, 1047, 1048, 0, 1048, 1401 0, 0, 0, 1048, 1049, 0, 1049, 0, 0, 0, 1402 1049, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1403 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1404 1405 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1406 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1407 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1408 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1409 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1410 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1411 875, 875, 875, 875, 875, 875 1403 1404 0, 1044, 0, 0, 0, 1044, 1045, 0, 1045, 1046, 1405 0, 1046, 0, 0, 0, 1046, 1047, 0, 1047, 0, 1406 0, 0, 1047, 1048, 0, 1048, 0, 0, 0, 1048, 1407 1049, 0, 1049, 0, 0, 0, 1049, 1050, 0, 1050, 1408 0, 0, 0, 1050, 1051, 0, 1051, 0, 0, 0, 1409 1051, 1052, 0, 1052, 0, 0, 0, 1052, 1053, 0, 1410 1053, 0, 0, 0, 1053, 1054, 0, 1054, 0, 0, 1411 0, 1054, 1055, 0, 1055, 0, 0, 0, 1055, 1056, 1412 0, 1056, 0, 0, 0, 1056, 1057, 0, 1057, 0, 1413 0, 0, 1057, 1058, 0, 1058, 0, 0, 0, 1058, 1414 1415 1059, 0, 1059, 0, 0, 0, 1059, 1060, 0, 1060, 1416 0, 0, 0, 1060, 1061, 0, 1061, 0, 0, 0, 1417 1061, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1418 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1419 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1420 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1421 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1422 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1423 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1424 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1425 1426 887, 887, 887, 887, 887, 887, 887 1412 1427 } ; 1413 1428 1414 1429 /* Table of booleans, true if rule could match eol. */ 1415 static yyconst flex_int32_t yy_rule_can_match_eol[18 0] =1430 static yyconst flex_int32_t yy_rule_can_match_eol[181] = 1416 1431 { 0, 1417 1432 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, … … 1420 1435 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1421 1436 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1422 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0,1423 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1437 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1438 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1424 1439 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1425 1440 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1426 };1441 0, }; 1427 1442 1428 1443 static yy_state_type yy_last_accepting_state; … … 1452 1467 * Created On : Sat Sep 22 08:58:10 2001 1453 1468 * Last Modified By : Peter A. Buhr 1454 * Last Modified On : Tue Feb 2 15:06:5420161455 * Update Count : 4 261469 * Last Modified On : Mon Mar 21 23:33:46 2016 1470 * Update Count : 450 1456 1471 */ 1457 1472 #line 20 "lex.ll" … … 1465 1480 1466 1481 #include "lex.h" 1482 #include "parser.h" // YACC generated definitions based on C++ grammar 1467 1483 #include "ParseNode.h" 1468 #include " parser.h" // YACC generated definitions based on C++ grammar1484 #include "TypedefTable.h" 1469 1485 1470 1486 char *yyfilename; … … 1482 1498 #define NUMERIC_RETURN(x) rm_underscore(); RETURN_VAL( x ) // numeric constant 1483 1499 #define KEYWORD_RETURN(x) RETURN_CHAR( x ) // keyword 1484 #define IDENTIFIER_RETURN() RETURN_VAL( (typedefTable.isIdentifier( yytext ) ? IDENTIFIER : typedefTable.isTypedef( yytext ) ? TYPEDEFname : TYPEGENname) )1500 #define IDENTIFIER_RETURN() RETURN_VAL( typedefTable.isKind( yytext ) ) 1485 1501 #define ATTRIBUTE_RETURN() RETURN_VAL( ATTR_IDENTIFIER ) 1486 1502 … … 1502 1518 // attribute identifier, GCC: $ in identifier 1503 1519 // numeric constants, CFA: '_' in constant 1504 // GCC: D (double), LD (long double) and iI (imaginary) suffixes 1520 // GCC: D (double), DL (long double) and iI (imaginary) suffixes 1521 //floating_suffix "_"?([fFdD]|[lL]|[D][L])|([iI][lLfFdD])|([lLfFdD][iI])) 1505 1522 // character escape sequence, GCC: \e => esc character 1506 1523 // ' stop highlighting … … 1511 1528 1512 1529 1513 #line 15 14"Parser/lex.cc"1530 #line 1531 "Parser/lex.cc" 1514 1531 1515 1532 #define INITIAL 0 … … 1703 1720 register int yy_act; 1704 1721 1705 #line 13 7"lex.ll"1722 #line 139 "lex.ll" 1706 1723 1707 1724 /* line directives */ 1708 #line 17 09"Parser/lex.cc"1725 #line 1726 "Parser/lex.cc" 1709 1726 1710 1727 if ( !(yy_init) ) … … 1760 1777 { 1761 1778 yy_current_state = (int) yy_def[yy_current_state]; 1762 if ( yy_current_state >= 8 76)1779 if ( yy_current_state >= 888 ) 1763 1780 yy_c = yy_meta[(unsigned int) yy_c]; 1764 1781 } … … 1766 1783 ++yy_cp; 1767 1784 } 1768 while ( yy_base[yy_current_state] != 2 782 );1785 while ( yy_base[yy_current_state] != 2822 ); 1769 1786 1770 1787 yy_find_action: … … 1803 1820 /* rule 1 can match eol */ 1804 1821 YY_RULE_SETUP 1805 #line 1 39"lex.ll"1822 #line 141 "lex.ll" 1806 1823 { 1807 1824 /* " stop highlighting */ … … 1830 1847 /* rule 2 can match eol */ 1831 1848 YY_RULE_SETUP 1832 #line 16 2"lex.ll"1849 #line 164 "lex.ll" 1833 1850 ; 1834 1851 YY_BREAK … … 1836 1853 case 3: 1837 1854 YY_RULE_SETUP 1838 #line 16 5"lex.ll"1855 #line 167 "lex.ll" 1839 1856 { BEGIN COMMENT; } 1840 1857 YY_BREAK … … 1842 1859 /* rule 4 can match eol */ 1843 1860 YY_RULE_SETUP 1844 #line 16 6"lex.ll"1861 #line 168 "lex.ll" 1845 1862 ; 1846 1863 YY_BREAK 1847 1864 case 5: 1848 1865 YY_RULE_SETUP 1849 #line 16 7"lex.ll"1866 #line 169 "lex.ll" 1850 1867 { BEGIN 0; } 1851 1868 YY_BREAK … … 1854 1871 /* rule 6 can match eol */ 1855 1872 YY_RULE_SETUP 1856 #line 17 0"lex.ll"1873 #line 172 "lex.ll" 1857 1874 ; 1858 1875 YY_BREAK … … 1860 1877 case 7: 1861 1878 YY_RULE_SETUP 1862 #line 17 3"lex.ll"1879 #line 175 "lex.ll" 1863 1880 { WHITE_RETURN(' '); } 1864 1881 YY_BREAK 1865 1882 case 8: 1866 1883 YY_RULE_SETUP 1867 #line 17 4"lex.ll"1884 #line 176 "lex.ll" 1868 1885 { WHITE_RETURN(' '); } 1869 1886 YY_BREAK … … 1871 1888 /* rule 9 can match eol */ 1872 1889 YY_RULE_SETUP 1873 #line 17 5"lex.ll"1890 #line 177 "lex.ll" 1874 1891 { NEWLINE_RETURN(); } 1875 1892 YY_BREAK … … 1877 1894 case 10: 1878 1895 YY_RULE_SETUP 1879 #line 1 78"lex.ll"1896 #line 180 "lex.ll" 1880 1897 { KEYWORD_RETURN(ALIGNAS); } // C11 1881 1898 YY_BREAK 1882 1899 case 11: 1883 1900 YY_RULE_SETUP 1884 #line 1 79"lex.ll"1901 #line 181 "lex.ll" 1885 1902 { KEYWORD_RETURN(ALIGNOF); } // C11 1886 1903 YY_BREAK 1887 1904 case 12: 1888 1905 YY_RULE_SETUP 1889 #line 18 0"lex.ll"1906 #line 182 "lex.ll" 1890 1907 { KEYWORD_RETURN(ALIGNOF); } // GCC 1891 1908 YY_BREAK 1892 1909 case 13: 1893 1910 YY_RULE_SETUP 1894 #line 18 1"lex.ll"1911 #line 183 "lex.ll" 1895 1912 { KEYWORD_RETURN(ALIGNOF); } // GCC 1896 1913 YY_BREAK 1897 1914 case 14: 1898 1915 YY_RULE_SETUP 1899 #line 18 2"lex.ll"1916 #line 184 "lex.ll" 1900 1917 { KEYWORD_RETURN(ASM); } 1901 1918 YY_BREAK 1902 1919 case 15: 1903 1920 YY_RULE_SETUP 1904 #line 18 3"lex.ll"1921 #line 185 "lex.ll" 1905 1922 { KEYWORD_RETURN(ASM); } // GCC 1906 1923 YY_BREAK 1907 1924 case 16: 1908 1925 YY_RULE_SETUP 1909 #line 18 4"lex.ll"1926 #line 186 "lex.ll" 1910 1927 { KEYWORD_RETURN(ASM); } // GCC 1911 1928 YY_BREAK 1912 1929 case 17: 1913 1930 YY_RULE_SETUP 1914 #line 18 5"lex.ll"1931 #line 187 "lex.ll" 1915 1932 { KEYWORD_RETURN(AT); } // CFA 1916 1933 YY_BREAK 1917 1934 case 18: 1918 1935 YY_RULE_SETUP 1919 #line 18 6"lex.ll"1936 #line 188 "lex.ll" 1920 1937 { KEYWORD_RETURN(ATOMIC); } // C11 1921 1938 YY_BREAK 1922 1939 case 19: 1923 1940 YY_RULE_SETUP 1924 #line 18 7"lex.ll"1941 #line 189 "lex.ll" 1925 1942 { KEYWORD_RETURN(ATTRIBUTE); } // GCC 1926 1943 YY_BREAK 1927 1944 case 20: 1928 1945 YY_RULE_SETUP 1929 #line 1 88"lex.ll"1946 #line 190 "lex.ll" 1930 1947 { KEYWORD_RETURN(ATTRIBUTE); } // GCC 1931 1948 YY_BREAK 1932 1949 case 21: 1933 1950 YY_RULE_SETUP 1934 #line 1 89"lex.ll"1951 #line 191 "lex.ll" 1935 1952 { KEYWORD_RETURN(AUTO); } 1936 1953 YY_BREAK 1937 1954 case 22: 1938 1955 YY_RULE_SETUP 1939 #line 19 0"lex.ll"1956 #line 192 "lex.ll" 1940 1957 { KEYWORD_RETURN(BOOL); } // C99 1941 1958 YY_BREAK 1942 1959 case 23: 1943 1960 YY_RULE_SETUP 1944 #line 19 1"lex.ll"1961 #line 193 "lex.ll" 1945 1962 { KEYWORD_RETURN(BREAK); } 1946 1963 YY_BREAK 1947 1964 case 24: 1948 1965 YY_RULE_SETUP 1949 #line 19 2"lex.ll"1966 #line 194 "lex.ll" 1950 1967 { KEYWORD_RETURN(CASE); } 1951 1968 YY_BREAK 1952 1969 case 25: 1953 1970 YY_RULE_SETUP 1954 #line 19 3"lex.ll"1971 #line 195 "lex.ll" 1955 1972 { KEYWORD_RETURN(CATCH); } // CFA 1956 1973 YY_BREAK 1957 1974 case 26: 1958 1975 YY_RULE_SETUP 1959 #line 19 4"lex.ll"1976 #line 196 "lex.ll" 1960 1977 { KEYWORD_RETURN(CATCHRESUME); } // CFA 1961 1978 YY_BREAK 1962 1979 case 27: 1963 1980 YY_RULE_SETUP 1964 #line 19 5"lex.ll"1981 #line 197 "lex.ll" 1965 1982 { KEYWORD_RETURN(CHAR); } 1966 1983 YY_BREAK 1967 1984 case 28: 1968 1985 YY_RULE_SETUP 1969 #line 19 6"lex.ll"1986 #line 198 "lex.ll" 1970 1987 { KEYWORD_RETURN(CHOOSE); } // CFA 1971 1988 YY_BREAK 1972 1989 case 29: 1973 1990 YY_RULE_SETUP 1974 #line 19 7"lex.ll"1991 #line 199 "lex.ll" 1975 1992 { KEYWORD_RETURN(COMPLEX); } // C99 1976 1993 YY_BREAK 1977 1994 case 30: 1978 1995 YY_RULE_SETUP 1979 #line 198"lex.ll"1996 #line 200 "lex.ll" 1980 1997 { KEYWORD_RETURN(COMPLEX); } // GCC 1981 1998 YY_BREAK 1982 1999 case 31: 1983 2000 YY_RULE_SETUP 1984 #line 199"lex.ll"2001 #line 201 "lex.ll" 1985 2002 { KEYWORD_RETURN(COMPLEX); } // GCC 1986 2003 YY_BREAK 1987 2004 case 32: 1988 2005 YY_RULE_SETUP 1989 #line 20 0"lex.ll"2006 #line 202 "lex.ll" 1990 2007 { KEYWORD_RETURN(CONST); } 1991 2008 YY_BREAK 1992 2009 case 33: 1993 2010 YY_RULE_SETUP 1994 #line 20 1"lex.ll"2011 #line 203 "lex.ll" 1995 2012 { KEYWORD_RETURN(CONST); } // GCC 1996 2013 YY_BREAK 1997 2014 case 34: 1998 2015 YY_RULE_SETUP 1999 #line 20 2"lex.ll"2016 #line 204 "lex.ll" 2000 2017 { KEYWORD_RETURN(CONST); } // GCC 2001 2018 YY_BREAK 2002 2019 case 35: 2003 2020 YY_RULE_SETUP 2004 #line 20 3"lex.ll"2005 { KEYWORD_RETURN(CONT EXT); } // CFA2021 #line 205 "lex.ll" 2022 { KEYWORD_RETURN(CONTINUE); } 2006 2023 YY_BREAK 2007 2024 case 36: 2008 2025 YY_RULE_SETUP 2009 #line 20 4"lex.ll"2010 { KEYWORD_RETURN( CONTINUE); }2026 #line 206 "lex.ll" 2027 { KEYWORD_RETURN(DEFAULT); } 2011 2028 YY_BREAK 2012 2029 case 37: 2013 2030 YY_RULE_SETUP 2014 #line 20 5"lex.ll"2015 { KEYWORD_RETURN(D EFAULT); }2031 #line 207 "lex.ll" 2032 { KEYWORD_RETURN(DISABLE); } // CFA 2016 2033 YY_BREAK 2017 2034 case 38: 2018 2035 YY_RULE_SETUP 2019 #line 20 6"lex.ll"2020 { KEYWORD_RETURN(D ISABLE); } // CFA2036 #line 208 "lex.ll" 2037 { KEYWORD_RETURN(DO); } 2021 2038 YY_BREAK 2022 2039 case 39: 2023 2040 YY_RULE_SETUP 2024 #line 20 7"lex.ll"2025 { KEYWORD_RETURN(DO ); }2041 #line 209 "lex.ll" 2042 { KEYWORD_RETURN(DOUBLE); } 2026 2043 YY_BREAK 2027 2044 case 40: 2028 2045 YY_RULE_SETUP 2029 #line 2 08"lex.ll"2030 { KEYWORD_RETURN(D OUBLE); }2046 #line 210 "lex.ll" 2047 { KEYWORD_RETURN(DTYPE); } // CFA 2031 2048 YY_BREAK 2032 2049 case 41: 2033 2050 YY_RULE_SETUP 2034 #line 2 09"lex.ll"2035 { KEYWORD_RETURN( DTYPE); } // CFA2051 #line 211 "lex.ll" 2052 { KEYWORD_RETURN(ELSE); } 2036 2053 YY_BREAK 2037 2054 case 42: 2038 2055 YY_RULE_SETUP 2039 #line 21 0"lex.ll"2040 { KEYWORD_RETURN(E LSE); }2056 #line 212 "lex.ll" 2057 { KEYWORD_RETURN(ENABLE); } // CFA 2041 2058 YY_BREAK 2042 2059 case 43: 2043 2060 YY_RULE_SETUP 2044 #line 21 1"lex.ll"2045 { KEYWORD_RETURN(EN ABLE); } // CFA2061 #line 213 "lex.ll" 2062 { KEYWORD_RETURN(ENUM); } 2046 2063 YY_BREAK 2047 2064 case 44: 2048 2065 YY_RULE_SETUP 2049 #line 21 2"lex.ll"2050 { KEYWORD_RETURN(E NUM); }2066 #line 214 "lex.ll" 2067 { KEYWORD_RETURN(EXTENSION); } // GCC 2051 2068 YY_BREAK 2052 2069 case 45: 2053 2070 YY_RULE_SETUP 2054 #line 21 3"lex.ll"2055 { KEYWORD_RETURN(EXTE NSION); } // GCC2071 #line 215 "lex.ll" 2072 { KEYWORD_RETURN(EXTERN); } 2056 2073 YY_BREAK 2057 2074 case 46: 2058 2075 YY_RULE_SETUP 2059 #line 21 4"lex.ll"2060 { KEYWORD_RETURN( EXTERN); }2076 #line 216 "lex.ll" 2077 { KEYWORD_RETURN(FALLTHRU); } // CFA 2061 2078 YY_BREAK 2062 2079 case 47: 2063 2080 YY_RULE_SETUP 2064 #line 21 5"lex.ll"2065 { KEYWORD_RETURN(F ALLTHRU); } // CFA2081 #line 217 "lex.ll" 2082 { KEYWORD_RETURN(FINALLY); } // CFA 2066 2083 YY_BREAK 2067 2084 case 48: 2068 2085 YY_RULE_SETUP 2069 #line 21 6"lex.ll"2070 { KEYWORD_RETURN(F INALLY); } // CFA2086 #line 218 "lex.ll" 2087 { KEYWORD_RETURN(FLOAT); } 2071 2088 YY_BREAK 2072 2089 case 49: 2073 2090 YY_RULE_SETUP 2074 #line 21 7"lex.ll"2075 { KEYWORD_RETURN(FLOAT); } 2091 #line 219 "lex.ll" 2092 { KEYWORD_RETURN(FLOAT); } // GCC 2076 2093 YY_BREAK 2077 2094 case 50: 2078 2095 YY_RULE_SETUP 2079 #line 2 18"lex.ll"2080 { KEYWORD_RETURN(F LOAT); } // GCC2096 #line 220 "lex.ll" 2097 { KEYWORD_RETURN(FOR); } 2081 2098 YY_BREAK 2082 2099 case 51: 2083 2100 YY_RULE_SETUP 2084 #line 2 19"lex.ll"2085 { KEYWORD_RETURN(FOR ); }2101 #line 221 "lex.ll" 2102 { KEYWORD_RETURN(FORALL); } // CFA 2086 2103 YY_BREAK 2087 2104 case 52: 2088 2105 YY_RULE_SETUP 2089 #line 22 0"lex.ll"2090 { KEYWORD_RETURN(FOR ALL); } // CFA2106 #line 222 "lex.ll" 2107 { KEYWORD_RETURN(FORTRAN); } 2091 2108 YY_BREAK 2092 2109 case 53: 2093 2110 YY_RULE_SETUP 2094 #line 22 1"lex.ll"2095 { KEYWORD_RETURN(F ORTRAN); }2111 #line 223 "lex.ll" 2112 { KEYWORD_RETURN(FTYPE); } // CFA 2096 2113 YY_BREAK 2097 2114 case 54: 2098 2115 YY_RULE_SETUP 2099 #line 22 2"lex.ll"2100 { KEYWORD_RETURN( FTYPE); } // CFA2116 #line 224 "lex.ll" 2117 { KEYWORD_RETURN(GENERIC); } // C11 2101 2118 YY_BREAK 2102 2119 case 55: 2103 2120 YY_RULE_SETUP 2104 #line 22 3"lex.ll"2105 { KEYWORD_RETURN(G ENERIC); } // C112121 #line 225 "lex.ll" 2122 { KEYWORD_RETURN(GOTO); } 2106 2123 YY_BREAK 2107 2124 case 56: 2108 2125 YY_RULE_SETUP 2109 #line 22 4"lex.ll"2110 { KEYWORD_RETURN( GOTO); }2126 #line 226 "lex.ll" 2127 { KEYWORD_RETURN(IF); } 2111 2128 YY_BREAK 2112 2129 case 57: 2113 2130 YY_RULE_SETUP 2114 #line 22 5"lex.ll"2115 { KEYWORD_RETURN(I F); }2131 #line 227 "lex.ll" 2132 { KEYWORD_RETURN(IMAGINARY); } // C99 2116 2133 YY_BREAK 2117 2134 case 58: 2118 YY_RULE_SETUP2119 #line 226 "lex.ll"2120 { KEYWORD_RETURN(IMAGINARY); } // C992121 YY_BREAK2122 case 59:2123 YY_RULE_SETUP2124 #line 227 "lex.ll"2125 { KEYWORD_RETURN(IMAGINARY); } // GCC2126 YY_BREAK2127 case 60:2128 2135 YY_RULE_SETUP 2129 2136 #line 228 "lex.ll" 2130 2137 { KEYWORD_RETURN(IMAGINARY); } // GCC 2131 2138 YY_BREAK 2139 case 59: 2140 YY_RULE_SETUP 2141 #line 229 "lex.ll" 2142 { KEYWORD_RETURN(IMAGINARY); } // GCC 2143 YY_BREAK 2144 case 60: 2145 YY_RULE_SETUP 2146 #line 230 "lex.ll" 2147 { KEYWORD_RETURN(INLINE); } // C99 2148 YY_BREAK 2132 2149 case 61: 2133 YY_RULE_SETUP2134 #line 229 "lex.ll"2135 { KEYWORD_RETURN(INLINE); } // C992136 YY_BREAK2137 case 62:2138 YY_RULE_SETUP2139 #line 230 "lex.ll"2140 { KEYWORD_RETURN(INLINE); } // GCC2141 YY_BREAK2142 case 63:2143 2150 YY_RULE_SETUP 2144 2151 #line 231 "lex.ll" 2145 2152 { KEYWORD_RETURN(INLINE); } // GCC 2146 2153 YY_BREAK 2154 case 62: 2155 YY_RULE_SETUP 2156 #line 232 "lex.ll" 2157 { KEYWORD_RETURN(INLINE); } // GCC 2158 YY_BREAK 2159 case 63: 2160 YY_RULE_SETUP 2161 #line 233 "lex.ll" 2162 { KEYWORD_RETURN(INT); } 2163 YY_BREAK 2147 2164 case 64: 2148 2165 YY_RULE_SETUP 2149 #line 23 2"lex.ll"2150 { KEYWORD_RETURN(INT); } 2166 #line 234 "lex.ll" 2167 { KEYWORD_RETURN(INT); } // GCC 2151 2168 YY_BREAK 2152 2169 case 65: 2153 2170 YY_RULE_SETUP 2154 #line 23 3"lex.ll"2155 { KEYWORD_RETURN( INT); } // GCC2171 #line 235 "lex.ll" 2172 { KEYWORD_RETURN(LABEL); } // GCC 2156 2173 YY_BREAK 2157 2174 case 66: 2158 2175 YY_RULE_SETUP 2159 #line 23 4"lex.ll"2160 { KEYWORD_RETURN(L ABEL); } // GCC2176 #line 236 "lex.ll" 2177 { KEYWORD_RETURN(LONG); } 2161 2178 YY_BREAK 2162 2179 case 67: 2163 2180 YY_RULE_SETUP 2164 #line 23 5"lex.ll"2165 { KEYWORD_RETURN(L ONG); }2181 #line 237 "lex.ll" 2182 { KEYWORD_RETURN(LVALUE); } // CFA 2166 2183 YY_BREAK 2167 2184 case 68: 2168 2185 YY_RULE_SETUP 2169 #line 23 6"lex.ll"2170 { KEYWORD_RETURN( LVALUE); } // CFA2186 #line 238 "lex.ll" 2187 { KEYWORD_RETURN(NORETURN); } // C11 2171 2188 YY_BREAK 2172 2189 case 69: 2173 2190 YY_RULE_SETUP 2174 #line 23 7"lex.ll"2175 { KEYWORD_RETURN( NORETURN); } // C112191 #line 239 "lex.ll" 2192 { KEYWORD_RETURN(OFFSETOF); } // GCC 2176 2193 YY_BREAK 2177 2194 case 70: 2178 2195 YY_RULE_SETUP 2179 #line 2 38"lex.ll"2180 { KEYWORD_RETURN(O FFSETOF); } // GCC2196 #line 240 "lex.ll" 2197 { KEYWORD_RETURN(OTYPE); } // CFA 2181 2198 YY_BREAK 2182 2199 case 71: 2183 2200 YY_RULE_SETUP 2184 #line 2 39"lex.ll"2201 #line 241 "lex.ll" 2185 2202 { KEYWORD_RETURN(REGISTER); } 2186 2203 YY_BREAK 2187 2204 case 72: 2188 2205 YY_RULE_SETUP 2189 #line 24 0"lex.ll"2206 #line 242 "lex.ll" 2190 2207 { KEYWORD_RETURN(RESTRICT); } // C99 2191 2208 YY_BREAK 2192 2209 case 73: 2193 2210 YY_RULE_SETUP 2194 #line 24 1"lex.ll"2211 #line 243 "lex.ll" 2195 2212 { KEYWORD_RETURN(RESTRICT); } // GCC 2196 2213 YY_BREAK 2197 2214 case 74: 2198 2215 YY_RULE_SETUP 2199 #line 24 2"lex.ll"2216 #line 244 "lex.ll" 2200 2217 { KEYWORD_RETURN(RESTRICT); } // GCC 2201 2218 YY_BREAK 2202 2219 case 75: 2203 2220 YY_RULE_SETUP 2204 #line 24 3"lex.ll"2221 #line 245 "lex.ll" 2205 2222 { KEYWORD_RETURN(RETURN); } 2206 2223 YY_BREAK 2207 2224 case 76: 2208 2225 YY_RULE_SETUP 2209 #line 24 4"lex.ll"2226 #line 246 "lex.ll" 2210 2227 { KEYWORD_RETURN(SHORT); } 2211 2228 YY_BREAK 2212 2229 case 77: 2213 2230 YY_RULE_SETUP 2214 #line 24 5"lex.ll"2231 #line 247 "lex.ll" 2215 2232 { KEYWORD_RETURN(SIGNED); } 2216 2233 YY_BREAK 2217 2234 case 78: 2218 2235 YY_RULE_SETUP 2219 #line 24 6"lex.ll"2236 #line 248 "lex.ll" 2220 2237 { KEYWORD_RETURN(SIGNED); } // GCC 2221 2238 YY_BREAK 2222 2239 case 79: 2223 2240 YY_RULE_SETUP 2224 #line 24 7"lex.ll"2241 #line 249 "lex.ll" 2225 2242 { KEYWORD_RETURN(SIGNED); } // GCC 2226 2243 YY_BREAK 2227 2244 case 80: 2228 2245 YY_RULE_SETUP 2229 #line 2 48"lex.ll"2246 #line 250 "lex.ll" 2230 2247 { KEYWORD_RETURN(SIZEOF); } 2231 2248 YY_BREAK 2232 2249 case 81: 2233 2250 YY_RULE_SETUP 2234 #line 2 49"lex.ll"2251 #line 251 "lex.ll" 2235 2252 { KEYWORD_RETURN(STATIC); } 2236 2253 YY_BREAK 2237 2254 case 82: 2238 2255 YY_RULE_SETUP 2239 #line 25 0"lex.ll"2256 #line 252 "lex.ll" 2240 2257 { KEYWORD_RETURN(STATICASSERT); } // C11 2241 2258 YY_BREAK 2242 2259 case 83: 2243 2260 YY_RULE_SETUP 2244 #line 25 1"lex.ll"2261 #line 253 "lex.ll" 2245 2262 { KEYWORD_RETURN(STRUCT); } 2246 2263 YY_BREAK 2247 2264 case 84: 2248 2265 YY_RULE_SETUP 2249 #line 25 2"lex.ll"2266 #line 254 "lex.ll" 2250 2267 { KEYWORD_RETURN(SWITCH); } 2251 2268 YY_BREAK 2252 2269 case 85: 2253 2270 YY_RULE_SETUP 2254 #line 25 3"lex.ll"2271 #line 255 "lex.ll" 2255 2272 { KEYWORD_RETURN(THREADLOCAL); } // C11 2256 2273 YY_BREAK 2257 2274 case 86: 2258 2275 YY_RULE_SETUP 2259 #line 25 4"lex.ll"2276 #line 256 "lex.ll" 2260 2277 { KEYWORD_RETURN(THROW); } // CFA 2261 2278 YY_BREAK 2262 2279 case 87: 2263 2280 YY_RULE_SETUP 2264 #line 25 5"lex.ll"2281 #line 257 "lex.ll" 2265 2282 { KEYWORD_RETURN(THROWRESUME); } // CFA 2266 2283 YY_BREAK 2267 2284 case 88: 2268 2285 YY_RULE_SETUP 2269 #line 256 "lex.ll" 2286 #line 258 "lex.ll" 2287 { KEYWORD_RETURN(TRAIT); } // CFA 2288 YY_BREAK 2289 case 89: 2290 YY_RULE_SETUP 2291 #line 259 "lex.ll" 2270 2292 { KEYWORD_RETURN(TRY); } // CFA 2271 2293 YY_BREAK 2272 case 89:2273 YY_RULE_SETUP2274 #line 257 "lex.ll"2275 { KEYWORD_RETURN(TYPE); } // CFA2276 YY_BREAK2277 2294 case 90: 2278 2295 YY_RULE_SETUP 2279 #line 2 58"lex.ll"2296 #line 260 "lex.ll" 2280 2297 { KEYWORD_RETURN(TYPEDEF); } 2281 2298 YY_BREAK 2282 2299 case 91: 2283 YY_RULE_SETUP2284 #line 259 "lex.ll"2285 { KEYWORD_RETURN(TYPEOF); } // GCC2286 YY_BREAK2287 case 92:2288 YY_RULE_SETUP2289 #line 260 "lex.ll"2290 { KEYWORD_RETURN(TYPEOF); } // GCC2291 YY_BREAK2292 case 93:2293 2300 YY_RULE_SETUP 2294 2301 #line 261 "lex.ll" 2295 2302 { KEYWORD_RETURN(TYPEOF); } // GCC 2296 2303 YY_BREAK 2304 case 92: 2305 YY_RULE_SETUP 2306 #line 262 "lex.ll" 2307 { KEYWORD_RETURN(TYPEOF); } // GCC 2308 YY_BREAK 2309 case 93: 2310 YY_RULE_SETUP 2311 #line 263 "lex.ll" 2312 { KEYWORD_RETURN(TYPEOF); } // GCC 2313 YY_BREAK 2297 2314 case 94: 2298 2315 YY_RULE_SETUP 2299 #line 26 2"lex.ll"2316 #line 264 "lex.ll" 2300 2317 { KEYWORD_RETURN(UNION); } 2301 2318 YY_BREAK 2302 2319 case 95: 2303 2320 YY_RULE_SETUP 2304 #line 26 3"lex.ll"2321 #line 265 "lex.ll" 2305 2322 { KEYWORD_RETURN(UNSIGNED); } 2306 2323 YY_BREAK 2307 2324 case 96: 2308 2325 YY_RULE_SETUP 2309 #line 264 "lex.ll" 2326 #line 266 "lex.ll" 2327 { KEYWORD_RETURN(VALIST); } // GCC 2328 YY_BREAK 2329 case 97: 2330 YY_RULE_SETUP 2331 #line 267 "lex.ll" 2310 2332 { KEYWORD_RETURN(VOID); } 2311 2333 YY_BREAK 2312 case 9 7:2313 YY_RULE_SETUP 2314 #line 26 5"lex.ll"2334 case 98: 2335 YY_RULE_SETUP 2336 #line 268 "lex.ll" 2315 2337 { KEYWORD_RETURN(VOLATILE); } 2316 2338 YY_BREAK 2317 case 9 8:2318 YY_RULE_SETUP 2319 #line 26 6"lex.ll"2339 case 99: 2340 YY_RULE_SETUP 2341 #line 269 "lex.ll" 2320 2342 { KEYWORD_RETURN(VOLATILE); } // GCC 2321 2343 YY_BREAK 2322 case 99:2323 YY_RULE_SETUP 2324 #line 2 67"lex.ll"2344 case 100: 2345 YY_RULE_SETUP 2346 #line 270 "lex.ll" 2325 2347 { KEYWORD_RETURN(VOLATILE); } // GCC 2326 2348 YY_BREAK 2327 case 10 0:2328 YY_RULE_SETUP 2329 #line 2 68"lex.ll"2349 case 101: 2350 YY_RULE_SETUP 2351 #line 271 "lex.ll" 2330 2352 { KEYWORD_RETURN(WHILE); } 2331 2353 YY_BREAK 2332 2354 /* identifier */ 2333 case 101:2334 YY_RULE_SETUP2335 #line 271 "lex.ll"2336 { IDENTIFIER_RETURN(); }2337 YY_BREAK2338 2355 case 102: 2339 YY_RULE_SETUP2340 #line 272 "lex.ll"2341 { ATTRIBUTE_RETURN(); }2342 YY_BREAK2343 case 103:2344 YY_RULE_SETUP2345 #line 273 "lex.ll"2346 { BEGIN BKQUOTE; }2347 YY_BREAK2348 case 104:2349 2356 YY_RULE_SETUP 2350 2357 #line 274 "lex.ll" 2351 2358 { IDENTIFIER_RETURN(); } 2352 2359 YY_BREAK 2360 case 103: 2361 YY_RULE_SETUP 2362 #line 275 "lex.ll" 2363 { ATTRIBUTE_RETURN(); } 2364 YY_BREAK 2365 case 104: 2366 YY_RULE_SETUP 2367 #line 276 "lex.ll" 2368 { BEGIN BKQUOTE; } 2369 YY_BREAK 2353 2370 case 105: 2354 2371 YY_RULE_SETUP 2355 #line 275 "lex.ll" 2372 #line 277 "lex.ll" 2373 { IDENTIFIER_RETURN(); } 2374 YY_BREAK 2375 case 106: 2376 YY_RULE_SETUP 2377 #line 278 "lex.ll" 2356 2378 { BEGIN 0; } 2357 2379 YY_BREAK 2358 2380 /* numeric constants */ 2359 case 10 6:2360 YY_RULE_SETUP 2361 #line 2 78"lex.ll"2381 case 107: 2382 YY_RULE_SETUP 2383 #line 281 "lex.ll" 2362 2384 { NUMERIC_RETURN(ZERO); } // CFA 2363 2385 YY_BREAK 2364 case 10 7:2365 YY_RULE_SETUP 2366 #line 2 79"lex.ll"2386 case 108: 2387 YY_RULE_SETUP 2388 #line 282 "lex.ll" 2367 2389 { NUMERIC_RETURN(ONE); } // CFA 2368 2390 YY_BREAK 2369 case 10 8:2370 YY_RULE_SETUP 2371 #line 28 0"lex.ll"2391 case 109: 2392 YY_RULE_SETUP 2393 #line 283 "lex.ll" 2372 2394 { NUMERIC_RETURN(INTEGERconstant); } 2373 2395 YY_BREAK 2374 case 1 09:2375 YY_RULE_SETUP 2376 #line 28 1"lex.ll"2396 case 110: 2397 YY_RULE_SETUP 2398 #line 284 "lex.ll" 2377 2399 { NUMERIC_RETURN(INTEGERconstant); } 2378 2400 YY_BREAK 2379 case 11 0:2380 YY_RULE_SETUP 2381 #line 28 2"lex.ll"2401 case 111: 2402 YY_RULE_SETUP 2403 #line 285 "lex.ll" 2382 2404 { NUMERIC_RETURN(INTEGERconstant); } 2383 2405 YY_BREAK 2384 case 11 1:2385 YY_RULE_SETUP 2386 #line 28 3"lex.ll"2406 case 112: 2407 YY_RULE_SETUP 2408 #line 286 "lex.ll" 2387 2409 { NUMERIC_RETURN(FLOATINGconstant); } 2388 2410 YY_BREAK 2389 case 11 2:2390 YY_RULE_SETUP 2391 #line 28 4"lex.ll"2411 case 113: 2412 YY_RULE_SETUP 2413 #line 287 "lex.ll" 2392 2414 { NUMERIC_RETURN(FLOATINGconstant); } 2393 2415 YY_BREAK 2394 2416 /* character constant, allows empty value */ 2395 case 11 3:2396 YY_RULE_SETUP 2397 #line 2 87"lex.ll"2417 case 114: 2418 YY_RULE_SETUP 2419 #line 290 "lex.ll" 2398 2420 { BEGIN QUOTE; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); } 2399 2421 YY_BREAK 2400 case 11 4:2401 YY_RULE_SETUP 2402 #line 2 88"lex.ll"2422 case 115: 2423 YY_RULE_SETUP 2424 #line 291 "lex.ll" 2403 2425 { *strtext += std::string( yytext ); } 2404 2426 YY_BREAK 2405 case 11 5:2406 /* rule 11 5can match eol */2407 YY_RULE_SETUP 2408 #line 2 89"lex.ll"2427 case 116: 2428 /* rule 116 can match eol */ 2429 YY_RULE_SETUP 2430 #line 292 "lex.ll" 2409 2431 { BEGIN 0; *strtext += std::string( yytext); RETURN_STR(CHARACTERconstant); } 2410 2432 YY_BREAK 2411 2433 /* ' stop highlighting */ 2412 2434 /* string constant */ 2413 case 11 6:2414 YY_RULE_SETUP 2415 #line 29 3"lex.ll"2435 case 117: 2436 YY_RULE_SETUP 2437 #line 296 "lex.ll" 2416 2438 { BEGIN STRING; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); } 2417 2439 YY_BREAK 2418 case 11 7:2419 YY_RULE_SETUP 2420 #line 29 4"lex.ll"2440 case 118: 2441 YY_RULE_SETUP 2442 #line 297 "lex.ll" 2421 2443 { *strtext += std::string( yytext ); } 2422 2444 YY_BREAK 2423 case 11 8:2424 /* rule 11 8can match eol */2425 YY_RULE_SETUP 2426 #line 29 5"lex.ll"2445 case 119: 2446 /* rule 119 can match eol */ 2447 YY_RULE_SETUP 2448 #line 298 "lex.ll" 2427 2449 { BEGIN 0; *strtext += std::string( yytext ); RETURN_STR(STRINGliteral); } 2428 2450 YY_BREAK 2429 2451 /* " stop highlighting */ 2430 2452 /* common character/string constant */ 2431 case 1 19:2432 YY_RULE_SETUP 2433 #line 299"lex.ll"2453 case 120: 2454 YY_RULE_SETUP 2455 #line 302 "lex.ll" 2434 2456 { rm_underscore(); *strtext += std::string( yytext ); } 2435 2457 YY_BREAK 2436 case 12 0:2437 /* rule 12 0can match eol */2438 YY_RULE_SETUP 2439 #line 30 0"lex.ll"2458 case 121: 2459 /* rule 121 can match eol */ 2460 YY_RULE_SETUP 2461 #line 303 "lex.ll" 2440 2462 {} // continuation (ALSO HANDLED BY CPP) 2441 2463 YY_BREAK 2442 case 12 1:2443 YY_RULE_SETUP 2444 #line 30 1"lex.ll"2464 case 122: 2465 YY_RULE_SETUP 2466 #line 304 "lex.ll" 2445 2467 { *strtext += std::string( yytext ); } // unknown escape character 2446 2468 YY_BREAK 2447 2469 /* punctuation */ 2448 case 122:2449 YY_RULE_SETUP2450 #line 304 "lex.ll"2451 { ASCIIOP_RETURN(); }2452 YY_BREAK2453 2470 case 123: 2454 YY_RULE_SETUP2455 #line 305 "lex.ll"2456 { ASCIIOP_RETURN(); }2457 YY_BREAK2458 case 124:2459 YY_RULE_SETUP2460 #line 306 "lex.ll"2461 { ASCIIOP_RETURN(); }2462 YY_BREAK2463 case 125:2464 2471 YY_RULE_SETUP 2465 2472 #line 307 "lex.ll" 2466 2473 { ASCIIOP_RETURN(); } 2467 2474 YY_BREAK 2468 case 12 6:2475 case 124: 2469 2476 YY_RULE_SETUP 2470 2477 #line 308 "lex.ll" 2471 2478 { ASCIIOP_RETURN(); } 2472 2479 YY_BREAK 2473 case 12 7:2480 case 125: 2474 2481 YY_RULE_SETUP 2475 2482 #line 309 "lex.ll" 2476 2483 { ASCIIOP_RETURN(); } 2477 2484 YY_BREAK 2478 case 12 8:2485 case 126: 2479 2486 YY_RULE_SETUP 2480 2487 #line 310 "lex.ll" 2481 { ASCIIOP_RETURN(); } // also operator2482 YY_BREAK 2483 case 12 9:2488 { ASCIIOP_RETURN(); } 2489 YY_BREAK 2490 case 127: 2484 2491 YY_RULE_SETUP 2485 2492 #line 311 "lex.ll" 2486 2493 { ASCIIOP_RETURN(); } 2487 2494 YY_BREAK 2488 case 1 30:2495 case 128: 2489 2496 YY_RULE_SETUP 2490 2497 #line 312 "lex.ll" 2491 2498 { ASCIIOP_RETURN(); } 2492 2499 YY_BREAK 2493 case 1 31:2500 case 129: 2494 2501 YY_RULE_SETUP 2495 2502 #line 313 "lex.ll" 2496 2503 { ASCIIOP_RETURN(); } // also operator 2497 2504 YY_BREAK 2505 case 130: 2506 YY_RULE_SETUP 2507 #line 314 "lex.ll" 2508 { ASCIIOP_RETURN(); } 2509 YY_BREAK 2510 case 131: 2511 YY_RULE_SETUP 2512 #line 315 "lex.ll" 2513 { ASCIIOP_RETURN(); } 2514 YY_BREAK 2498 2515 case 132: 2499 2516 YY_RULE_SETUP 2500 #line 314 "lex.ll" 2517 #line 316 "lex.ll" 2518 { ASCIIOP_RETURN(); } // also operator 2519 YY_BREAK 2520 case 133: 2521 YY_RULE_SETUP 2522 #line 317 "lex.ll" 2501 2523 { NAMEDOP_RETURN(ELLIPSIS); } 2502 2524 YY_BREAK 2503 2525 /* alternative C99 brackets, "<:" & "<:<:" handled by preprocessor */ 2504 case 13 3:2505 YY_RULE_SETUP 2506 #line 3 17"lex.ll"2526 case 134: 2527 YY_RULE_SETUP 2528 #line 320 "lex.ll" 2507 2529 { RETURN_VAL('['); } 2508 2530 YY_BREAK 2509 case 13 4:2510 YY_RULE_SETUP 2511 #line 3 18"lex.ll"2531 case 135: 2532 YY_RULE_SETUP 2533 #line 321 "lex.ll" 2512 2534 { RETURN_VAL(']'); } 2513 2535 YY_BREAK 2514 case 13 5:2515 YY_RULE_SETUP 2516 #line 3 19"lex.ll"2536 case 136: 2537 YY_RULE_SETUP 2538 #line 322 "lex.ll" 2517 2539 { RETURN_VAL('{'); } 2518 2540 YY_BREAK 2519 case 13 6:2520 YY_RULE_SETUP 2521 #line 32 0"lex.ll"2541 case 137: 2542 YY_RULE_SETUP 2543 #line 323 "lex.ll" 2522 2544 { RETURN_VAL('}'); } 2523 2545 YY_BREAK 2524 2546 /* operators */ 2525 case 137:2526 YY_RULE_SETUP2527 #line 323 "lex.ll"2528 { ASCIIOP_RETURN(); }2529 YY_BREAK2530 2547 case 138: 2531 YY_RULE_SETUP2532 #line 324 "lex.ll"2533 { ASCIIOP_RETURN(); }2534 YY_BREAK2535 case 139:2536 YY_RULE_SETUP2537 #line 325 "lex.ll"2538 { ASCIIOP_RETURN(); }2539 YY_BREAK2540 case 140:2541 2548 YY_RULE_SETUP 2542 2549 #line 326 "lex.ll" 2543 2550 { ASCIIOP_RETURN(); } 2544 2551 YY_BREAK 2545 case 1 41:2552 case 139: 2546 2553 YY_RULE_SETUP 2547 2554 #line 327 "lex.ll" 2548 2555 { ASCIIOP_RETURN(); } 2549 2556 YY_BREAK 2550 case 14 2:2557 case 140: 2551 2558 YY_RULE_SETUP 2552 2559 #line 328 "lex.ll" 2553 2560 { ASCIIOP_RETURN(); } 2554 2561 YY_BREAK 2555 case 14 3:2562 case 141: 2556 2563 YY_RULE_SETUP 2557 2564 #line 329 "lex.ll" 2558 2565 { ASCIIOP_RETURN(); } 2559 2566 YY_BREAK 2560 case 14 4:2567 case 142: 2561 2568 YY_RULE_SETUP 2562 2569 #line 330 "lex.ll" 2563 2570 { ASCIIOP_RETURN(); } 2564 2571 YY_BREAK 2565 case 14 5:2572 case 143: 2566 2573 YY_RULE_SETUP 2567 2574 #line 331 "lex.ll" 2568 2575 { ASCIIOP_RETURN(); } 2569 2576 YY_BREAK 2570 case 14 6:2577 case 144: 2571 2578 YY_RULE_SETUP 2572 2579 #line 332 "lex.ll" 2573 2580 { ASCIIOP_RETURN(); } 2574 2581 YY_BREAK 2575 case 14 7:2582 case 145: 2576 2583 YY_RULE_SETUP 2577 2584 #line 333 "lex.ll" 2578 2585 { ASCIIOP_RETURN(); } 2579 2586 YY_BREAK 2580 case 14 8:2587 case 146: 2581 2588 YY_RULE_SETUP 2582 2589 #line 334 "lex.ll" 2583 2590 { ASCIIOP_RETURN(); } 2584 2591 YY_BREAK 2585 case 14 9:2592 case 147: 2586 2593 YY_RULE_SETUP 2587 2594 #line 335 "lex.ll" 2588 2595 { ASCIIOP_RETURN(); } 2589 2596 YY_BREAK 2590 case 1 50:2597 case 148: 2591 2598 YY_RULE_SETUP 2592 2599 #line 336 "lex.ll" 2593 2600 { ASCIIOP_RETURN(); } 2594 2601 YY_BREAK 2602 case 149: 2603 YY_RULE_SETUP 2604 #line 337 "lex.ll" 2605 { ASCIIOP_RETURN(); } 2606 YY_BREAK 2607 case 150: 2608 YY_RULE_SETUP 2609 #line 338 "lex.ll" 2610 { ASCIIOP_RETURN(); } 2611 YY_BREAK 2595 2612 case 151: 2596 2613 YY_RULE_SETUP 2597 #line 338 "lex.ll" 2614 #line 339 "lex.ll" 2615 { ASCIIOP_RETURN(); } 2616 YY_BREAK 2617 case 152: 2618 YY_RULE_SETUP 2619 #line 341 "lex.ll" 2598 2620 { NAMEDOP_RETURN(ICR); } 2599 2621 YY_BREAK 2600 case 15 2:2601 YY_RULE_SETUP 2602 #line 3 39"lex.ll"2622 case 153: 2623 YY_RULE_SETUP 2624 #line 342 "lex.ll" 2603 2625 { NAMEDOP_RETURN(DECR); } 2604 2626 YY_BREAK 2605 case 15 3:2606 YY_RULE_SETUP 2607 #line 34 0"lex.ll"2627 case 154: 2628 YY_RULE_SETUP 2629 #line 343 "lex.ll" 2608 2630 { NAMEDOP_RETURN(EQ); } 2609 2631 YY_BREAK 2610 case 15 4:2611 YY_RULE_SETUP 2612 #line 34 1"lex.ll"2632 case 155: 2633 YY_RULE_SETUP 2634 #line 344 "lex.ll" 2613 2635 { NAMEDOP_RETURN(NE); } 2614 2636 YY_BREAK 2615 case 15 5:2616 YY_RULE_SETUP 2617 #line 34 2"lex.ll"2637 case 156: 2638 YY_RULE_SETUP 2639 #line 345 "lex.ll" 2618 2640 { NAMEDOP_RETURN(LS); } 2619 2641 YY_BREAK 2620 case 15 6:2621 YY_RULE_SETUP 2622 #line 34 3"lex.ll"2642 case 157: 2643 YY_RULE_SETUP 2644 #line 346 "lex.ll" 2623 2645 { NAMEDOP_RETURN(RS); } 2624 2646 YY_BREAK 2625 case 15 7:2626 YY_RULE_SETUP 2627 #line 34 4"lex.ll"2647 case 158: 2648 YY_RULE_SETUP 2649 #line 347 "lex.ll" 2628 2650 { NAMEDOP_RETURN(LE); } 2629 2651 YY_BREAK 2630 case 15 8:2631 YY_RULE_SETUP 2632 #line 34 5"lex.ll"2652 case 159: 2653 YY_RULE_SETUP 2654 #line 348 "lex.ll" 2633 2655 { NAMEDOP_RETURN(GE); } 2634 2656 YY_BREAK 2635 case 1 59:2636 YY_RULE_SETUP 2637 #line 34 6"lex.ll"2657 case 160: 2658 YY_RULE_SETUP 2659 #line 349 "lex.ll" 2638 2660 { NAMEDOP_RETURN(ANDAND); } 2639 2661 YY_BREAK 2640 case 16 0:2641 YY_RULE_SETUP 2642 #line 3 47"lex.ll"2662 case 161: 2663 YY_RULE_SETUP 2664 #line 350 "lex.ll" 2643 2665 { NAMEDOP_RETURN(OROR); } 2644 2666 YY_BREAK 2645 case 16 1:2646 YY_RULE_SETUP 2647 #line 3 48"lex.ll"2667 case 162: 2668 YY_RULE_SETUP 2669 #line 351 "lex.ll" 2648 2670 { NAMEDOP_RETURN(ARROW); } 2649 2671 YY_BREAK 2650 case 16 2:2651 YY_RULE_SETUP 2652 #line 3 49"lex.ll"2672 case 163: 2673 YY_RULE_SETUP 2674 #line 352 "lex.ll" 2653 2675 { NAMEDOP_RETURN(PLUSassign); } 2654 2676 YY_BREAK 2655 case 16 3:2656 YY_RULE_SETUP 2657 #line 35 0"lex.ll"2677 case 164: 2678 YY_RULE_SETUP 2679 #line 353 "lex.ll" 2658 2680 { NAMEDOP_RETURN(MINUSassign); } 2659 2681 YY_BREAK 2660 case 16 4:2661 YY_RULE_SETUP 2662 #line 35 1"lex.ll"2682 case 165: 2683 YY_RULE_SETUP 2684 #line 354 "lex.ll" 2663 2685 { NAMEDOP_RETURN(MULTassign); } 2664 2686 YY_BREAK 2665 case 16 5:2666 YY_RULE_SETUP 2667 #line 35 2"lex.ll"2687 case 166: 2688 YY_RULE_SETUP 2689 #line 355 "lex.ll" 2668 2690 { NAMEDOP_RETURN(DIVassign); } 2669 2691 YY_BREAK 2670 case 16 6:2671 YY_RULE_SETUP 2672 #line 35 3"lex.ll"2692 case 167: 2693 YY_RULE_SETUP 2694 #line 356 "lex.ll" 2673 2695 { NAMEDOP_RETURN(MODassign); } 2674 2696 YY_BREAK 2675 case 16 7:2676 YY_RULE_SETUP 2677 #line 35 4"lex.ll"2697 case 168: 2698 YY_RULE_SETUP 2699 #line 357 "lex.ll" 2678 2700 { NAMEDOP_RETURN(ANDassign); } 2679 2701 YY_BREAK 2680 case 16 8:2681 YY_RULE_SETUP 2682 #line 35 5"lex.ll"2702 case 169: 2703 YY_RULE_SETUP 2704 #line 358 "lex.ll" 2683 2705 { NAMEDOP_RETURN(ORassign); } 2684 2706 YY_BREAK 2685 case 1 69:2686 YY_RULE_SETUP 2687 #line 35 6"lex.ll"2707 case 170: 2708 YY_RULE_SETUP 2709 #line 359 "lex.ll" 2688 2710 { NAMEDOP_RETURN(ERassign); } 2689 2711 YY_BREAK 2690 case 17 0:2691 YY_RULE_SETUP 2692 #line 3 57"lex.ll"2712 case 171: 2713 YY_RULE_SETUP 2714 #line 360 "lex.ll" 2693 2715 { NAMEDOP_RETURN(LSassign); } 2694 2716 YY_BREAK 2695 case 17 1:2696 YY_RULE_SETUP 2697 #line 3 58"lex.ll"2717 case 172: 2718 YY_RULE_SETUP 2719 #line 361 "lex.ll" 2698 2720 { NAMEDOP_RETURN(RSassign); } 2699 2721 YY_BREAK 2700 case 17 2:2701 YY_RULE_SETUP 2702 #line 36 0"lex.ll"2722 case 173: 2723 YY_RULE_SETUP 2724 #line 363 "lex.ll" 2703 2725 { NAMEDOP_RETURN(ATassign); } 2704 2726 YY_BREAK 2705 2727 /* CFA, operator identifier */ 2706 case 17 3:2707 YY_RULE_SETUP 2708 #line 36 3"lex.ll"2728 case 174: 2729 YY_RULE_SETUP 2730 #line 366 "lex.ll" 2709 2731 { IDENTIFIER_RETURN(); } // unary 2710 2732 YY_BREAK 2711 case 17 4:2712 YY_RULE_SETUP 2713 #line 36 4"lex.ll"2733 case 175: 2734 YY_RULE_SETUP 2735 #line 367 "lex.ll" 2714 2736 { IDENTIFIER_RETURN(); } 2715 2737 YY_BREAK 2716 case 17 5:2717 YY_RULE_SETUP 2718 #line 36 5"lex.ll"2738 case 176: 2739 YY_RULE_SETUP 2740 #line 368 "lex.ll" 2719 2741 { IDENTIFIER_RETURN(); } 2720 2742 YY_BREAK 2721 case 17 6:2722 YY_RULE_SETUP 2723 #line 36 6"lex.ll"2743 case 177: 2744 YY_RULE_SETUP 2745 #line 369 "lex.ll" 2724 2746 { IDENTIFIER_RETURN(); } // binary 2725 2747 YY_BREAK … … 2750 2772 an argument list. 2751 2773 */ 2752 case 17 7:2753 YY_RULE_SETUP 2754 #line 39 3"lex.ll"2774 case 178: 2775 YY_RULE_SETUP 2776 #line 396 "lex.ll" 2755 2777 { 2756 2778 // 1 or 2 character unary operator ? … … 2765 2787 YY_BREAK 2766 2788 /* unknown characters */ 2767 case 17 8:2768 YY_RULE_SETUP 2769 #line 40 5"lex.ll"2789 case 179: 2790 YY_RULE_SETUP 2791 #line 408 "lex.ll" 2770 2792 { printf("unknown character(s):\"%s\" on line %d\n", yytext, yylineno); } 2771 2793 YY_BREAK 2772 case 1 79:2773 YY_RULE_SETUP 2774 #line 4 07"lex.ll"2794 case 180: 2795 YY_RULE_SETUP 2796 #line 410 "lex.ll" 2775 2797 ECHO; 2776 2798 YY_BREAK 2777 #line 2 778"Parser/lex.cc"2799 #line 2800 "Parser/lex.cc" 2778 2800 case YY_STATE_EOF(INITIAL): 2779 2801 case YY_STATE_EOF(COMMENT): … … 3072 3094 { 3073 3095 yy_current_state = (int) yy_def[yy_current_state]; 3074 if ( yy_current_state >= 8 76)3096 if ( yy_current_state >= 888 ) 3075 3097 yy_c = yy_meta[(unsigned int) yy_c]; 3076 3098 } … … 3100 3122 { 3101 3123 yy_current_state = (int) yy_def[yy_current_state]; 3102 if ( yy_current_state >= 8 76)3124 if ( yy_current_state >= 888 ) 3103 3125 yy_c = yy_meta[(unsigned int) yy_c]; 3104 3126 } 3105 3127 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; 3106 yy_is_jam = (yy_current_state == 8 75);3128 yy_is_jam = (yy_current_state == 887); 3107 3129 3108 3130 return yy_is_jam ? 0 : yy_current_state; … … 3750 3772 #define YYTABLES_NAME "yytables" 3751 3773 3752 #line 4 07"lex.ll"3774 #line 410 "lex.ll" 3753 3775 3754 3776 -
src/Parser/lex.h
r39786813 ra5a71d0 10 10 // Created On : Sat Sep 22 08:58:10 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Jun 8 20:28:48 201513 // Update Count : 34 112 // Last Modified On : Mon Mar 21 18:18:06 2016 13 // Update Count : 346 14 14 // 15 15 … … 20 20 void yyerror( const char * ); 21 21 22 #include <string> 23 #include "ParseNode.h" 22 24 // External declarations for information sharing between lexer and scanner 23 #include "TypedefTable.h" 25 class TypedefTable; 24 26 extern TypedefTable typedefTable; 25 27 -
src/Parser/lex.ll
r39786813 ra5a71d0 10 10 * Created On : Sat Sep 22 08:58:10 2001 11 11 * Last Modified By : Peter A. Buhr 12 * Last Modified On : Tue Feb 2 15:06:54201613 * Update Count : 4 2612 * Last Modified On : Mon Mar 21 23:33:46 2016 13 * Update Count : 450 14 14 */ 15 15 … … 27 27 28 28 #include "lex.h" 29 #include "parser.h" // YACC generated definitions based on C++ grammar 29 30 #include "ParseNode.h" 30 #include " parser.h" // YACC generated definitions based on C++ grammar31 #include "TypedefTable.h" 31 32 32 33 char *yyfilename; … … 44 45 #define NUMERIC_RETURN(x) rm_underscore(); RETURN_VAL( x ) // numeric constant 45 46 #define KEYWORD_RETURN(x) RETURN_CHAR( x ) // keyword 46 #define IDENTIFIER_RETURN() RETURN_VAL( (typedefTable.isIdentifier( yytext ) ? IDENTIFIER : typedefTable.isTypedef( yytext ) ? TYPEDEFname : TYPEGENname) )47 #define IDENTIFIER_RETURN() RETURN_VAL( typedefTable.isKind( yytext ) ) 47 48 #define ATTRIBUTE_RETURN() RETURN_VAL( ATTR_IDENTIFIER ) 48 49 … … 95 96 fractional_constant ({decimal_digits}?"."{decimal_digits})|({decimal_digits}".") 96 97 exponent "_"?[eE]"_"?[+-]?{decimal_digits} 97 // GCC: D (double), LD (long double) and iI (imaginary) suffixes 98 floating_suffix "_"?([fFdD]?|([lL]?)|([iI][lLfFdD]?)|([lLfFdD][iI])) 98 // GCC: D (double), DL (long double) and iI (imaginary) suffixes 99 floating_suffix "_"?([fFdDlL][iI]?|"DL"|[iI][lLfFdD]?) 100 //floating_suffix "_"?([fFdD]|[lL]|[D][L])|([iI][lLfFdD])|([lLfFdD][iI])) 99 101 floating_constant (({fractional_constant}{exponent}?)|({decimal_digits}{exponent})){floating_suffix}? 100 102 … … 137 139 %% 138 140 /* line directives */ 139 ^{h_white}*"#"{h_white}*[0-9]+{h_white}*["][^"\n]+["] [^\n]*"\n" {141 ^{h_white}*"#"{h_white}*[0-9]+{h_white}*["][^"\n]+["].*"\n" { 140 142 /* " stop highlighting */ 141 143 char *end_num; … … 201 203 __const { KEYWORD_RETURN(CONST); } // GCC 202 204 __const__ { KEYWORD_RETURN(CONST); } // GCC 203 context { KEYWORD_RETURN(CONTEXT); } // CFA204 205 continue { KEYWORD_RETURN(CONTINUE); } 205 206 default { KEYWORD_RETURN(DEFAULT); } … … 237 238 _Noreturn { KEYWORD_RETURN(NORETURN); } // C11 238 239 __builtin_offsetof { KEYWORD_RETURN(OFFSETOF); } // GCC 240 otype { KEYWORD_RETURN(OTYPE); } // CFA 239 241 register { KEYWORD_RETURN(REGISTER); } 240 242 restrict { KEYWORD_RETURN(RESTRICT); } // C99 … … 254 256 throw { KEYWORD_RETURN(THROW); } // CFA 255 257 throwResume { KEYWORD_RETURN(THROWRESUME); } // CFA 258 trait { KEYWORD_RETURN(TRAIT); } // CFA 256 259 try { KEYWORD_RETURN(TRY); } // CFA 257 type { KEYWORD_RETURN(TYPE); } // CFA258 260 typedef { KEYWORD_RETURN(TYPEDEF); } 259 261 typeof { KEYWORD_RETURN(TYPEOF); } // GCC … … 262 264 union { KEYWORD_RETURN(UNION); } 263 265 unsigned { KEYWORD_RETURN(UNSIGNED); } 266 __builtin_va_list { KEYWORD_RETURN(VALIST); } // GCC 264 267 void { KEYWORD_RETURN(VOID); } 265 268 volatile { KEYWORD_RETURN(VOLATILE); } -
src/Parser/parser.cc
r39786813 ra5a71d0 2 2 3 3 /* Bison implementation for Yacc-like parsers in C 4 4 5 5 Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. 6 6 7 7 This program is free software: you can redistribute it and/or modify 8 8 it under the terms of the GNU General Public License as published by 9 9 the Free Software Foundation, either version 3 of the License, or 10 10 (at your option) any later version. 11 11 12 12 This program is distributed in the hope that it will be useful, 13 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 15 GNU General Public License for more details. 16 16 17 17 You should have received a copy of the GNU General Public License 18 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */ … … 27 27 Bison output files to be licensed under the GNU General Public 28 28 License without this special exception. 29 29 30 30 This special exception was added by the Free Software Foundation in 31 31 version 2.2 of Bison. */ … … 77 77 #include <cstdio> 78 78 #include <stack> 79 #include "lex.h" 80 #include "parser.h" 81 #include "ParseNode.h" 79 82 #include "TypedefTable.h" 80 #include "lex.h"81 #include "ParseNode.h"82 83 #include "TypeData.h" 83 84 #include "LinkageSpec.h" … … 90 91 91 92 /* Line 268 of yacc.c */ 92 #line 9 3"Parser/parser.cc"93 #line 94 "Parser/parser.cc" 93 94 94 95 /* Enabling traces. */ … … 138 139 SIGNED = 277, 139 140 UNSIGNED = 278, 140 BOOL = 279, 141 COMPLEX = 280, 142 IMAGINARY = 281, 143 TYPEOF = 282, 144 LABEL = 283, 145 ENUM = 284, 146 STRUCT = 285, 147 UNION = 286, 148 TYPE = 287, 149 FTYPE = 288, 150 DTYPE = 289, 151 CONTEXT = 290, 152 SIZEOF = 291, 153 OFFSETOF = 292, 154 ATTRIBUTE = 293, 155 EXTENSION = 294, 156 IF = 295, 157 ELSE = 296, 158 SWITCH = 297, 159 CASE = 298, 160 DEFAULT = 299, 161 DO = 300, 162 WHILE = 301, 163 FOR = 302, 164 BREAK = 303, 165 CONTINUE = 304, 166 GOTO = 305, 167 RETURN = 306, 168 CHOOSE = 307, 169 DISABLE = 308, 170 ENABLE = 309, 171 FALLTHRU = 310, 172 TRY = 311, 173 CATCH = 312, 174 CATCHRESUME = 313, 175 FINALLY = 314, 176 THROW = 315, 177 THROWRESUME = 316, 178 AT = 317, 179 ASM = 318, 180 ALIGNAS = 319, 181 ALIGNOF = 320, 182 ATOMIC = 321, 183 GENERIC = 322, 184 NORETURN = 323, 185 STATICASSERT = 324, 186 THREADLOCAL = 325, 187 IDENTIFIER = 326, 188 QUOTED_IDENTIFIER = 327, 189 TYPEDEFname = 328, 190 TYPEGENname = 329, 191 ATTR_IDENTIFIER = 330, 192 ATTR_TYPEDEFname = 331, 193 ATTR_TYPEGENname = 332, 194 INTEGERconstant = 333, 195 FLOATINGconstant = 334, 196 CHARACTERconstant = 335, 197 STRINGliteral = 336, 198 ZERO = 337, 199 ONE = 338, 200 ARROW = 339, 201 ICR = 340, 202 DECR = 341, 203 LS = 342, 204 RS = 343, 205 LE = 344, 206 GE = 345, 207 EQ = 346, 208 NE = 347, 209 ANDAND = 348, 210 OROR = 349, 211 ELLIPSIS = 350, 212 MULTassign = 351, 213 DIVassign = 352, 214 MODassign = 353, 215 PLUSassign = 354, 216 MINUSassign = 355, 217 LSassign = 356, 218 RSassign = 357, 219 ANDassign = 358, 220 ERassign = 359, 221 ORassign = 360, 222 ATassign = 361, 223 THEN = 362 141 VALIST = 279, 142 BOOL = 280, 143 COMPLEX = 281, 144 IMAGINARY = 282, 145 TYPEOF = 283, 146 LABEL = 284, 147 ENUM = 285, 148 STRUCT = 286, 149 UNION = 287, 150 OTYPE = 288, 151 FTYPE = 289, 152 DTYPE = 290, 153 TRAIT = 291, 154 SIZEOF = 292, 155 OFFSETOF = 293, 156 ATTRIBUTE = 294, 157 EXTENSION = 295, 158 IF = 296, 159 ELSE = 297, 160 SWITCH = 298, 161 CASE = 299, 162 DEFAULT = 300, 163 DO = 301, 164 WHILE = 302, 165 FOR = 303, 166 BREAK = 304, 167 CONTINUE = 305, 168 GOTO = 306, 169 RETURN = 307, 170 CHOOSE = 308, 171 DISABLE = 309, 172 ENABLE = 310, 173 FALLTHRU = 311, 174 TRY = 312, 175 CATCH = 313, 176 CATCHRESUME = 314, 177 FINALLY = 315, 178 THROW = 316, 179 THROWRESUME = 317, 180 AT = 318, 181 ASM = 319, 182 ALIGNAS = 320, 183 ALIGNOF = 321, 184 ATOMIC = 322, 185 GENERIC = 323, 186 NORETURN = 324, 187 STATICASSERT = 325, 188 THREADLOCAL = 326, 189 IDENTIFIER = 327, 190 QUOTED_IDENTIFIER = 328, 191 TYPEDEFname = 329, 192 TYPEGENname = 330, 193 ATTR_IDENTIFIER = 331, 194 ATTR_TYPEDEFname = 332, 195 ATTR_TYPEGENname = 333, 196 INTEGERconstant = 334, 197 FLOATINGconstant = 335, 198 CHARACTERconstant = 336, 199 STRINGliteral = 337, 200 ZERO = 338, 201 ONE = 339, 202 ARROW = 340, 203 ICR = 341, 204 DECR = 342, 205 LS = 343, 206 RS = 344, 207 LE = 345, 208 GE = 346, 209 EQ = 347, 210 NE = 348, 211 ANDAND = 349, 212 OROR = 350, 213 ELLIPSIS = 351, 214 MULTassign = 352, 215 DIVassign = 353, 216 MODassign = 354, 217 PLUSassign = 355, 218 MINUSassign = 356, 219 LSassign = 357, 220 RSassign = 358, 221 ANDassign = 359, 222 ERassign = 360, 223 ORassign = 361, 224 ATassign = 362, 225 THEN = 363 224 226 }; 225 227 #endif … … 246 248 #define SIGNED 277 247 249 #define UNSIGNED 278 248 #define BOOL 279 249 #define COMPLEX 280 250 #define IMAGINARY 281 251 #define TYPEOF 282 252 #define LABEL 283 253 #define ENUM 284 254 #define STRUCT 285 255 #define UNION 286 256 #define TYPE 287 257 #define FTYPE 288 258 #define DTYPE 289 259 #define CONTEXT 290 260 #define SIZEOF 291 261 #define OFFSETOF 292 262 #define ATTRIBUTE 293 263 #define EXTENSION 294 264 #define IF 295 265 #define ELSE 296 266 #define SWITCH 297 267 #define CASE 298 268 #define DEFAULT 299 269 #define DO 300 270 #define WHILE 301 271 #define FOR 302 272 #define BREAK 303 273 #define CONTINUE 304 274 #define GOTO 305 275 #define RETURN 306 276 #define CHOOSE 307 277 #define DISABLE 308 278 #define ENABLE 309 279 #define FALLTHRU 310 280 #define TRY 311 281 #define CATCH 312 282 #define CATCHRESUME 313 283 #define FINALLY 314 284 #define THROW 315 285 #define THROWRESUME 316 286 #define AT 317 287 #define ASM 318 288 #define ALIGNAS 319 289 #define ALIGNOF 320 290 #define ATOMIC 321 291 #define GENERIC 322 292 #define NORETURN 323 293 #define STATICASSERT 324 294 #define THREADLOCAL 325 295 #define IDENTIFIER 326 296 #define QUOTED_IDENTIFIER 327 297 #define TYPEDEFname 328 298 #define TYPEGENname 329 299 #define ATTR_IDENTIFIER 330 300 #define ATTR_TYPEDEFname 331 301 #define ATTR_TYPEGENname 332 302 #define INTEGERconstant 333 303 #define FLOATINGconstant 334 304 #define CHARACTERconstant 335 305 #define STRINGliteral 336 306 #define ZERO 337 307 #define ONE 338 308 #define ARROW 339 309 #define ICR 340 310 #define DECR 341 311 #define LS 342 312 #define RS 343 313 #define LE 344 314 #define GE 345 315 #define EQ 346 316 #define NE 347 317 #define ANDAND 348 318 #define OROR 349 319 #define ELLIPSIS 350 320 #define MULTassign 351 321 #define DIVassign 352 322 #define MODassign 353 323 #define PLUSassign 354 324 #define MINUSassign 355 325 #define LSassign 356 326 #define RSassign 357 327 #define ANDassign 358 328 #define ERassign 359 329 #define ORassign 360 330 #define ATassign 361 331 #define THEN 362 250 #define VALIST 279 251 #define BOOL 280 252 #define COMPLEX 281 253 #define IMAGINARY 282 254 #define TYPEOF 283 255 #define LABEL 284 256 #define ENUM 285 257 #define STRUCT 286 258 #define UNION 287 259 #define OTYPE 288 260 #define FTYPE 289 261 #define DTYPE 290 262 #define TRAIT 291 263 #define SIZEOF 292 264 #define OFFSETOF 293 265 #define ATTRIBUTE 294 266 #define EXTENSION 295 267 #define IF 296 268 #define ELSE 297 269 #define SWITCH 298 270 #define CASE 299 271 #define DEFAULT 300 272 #define DO 301 273 #define WHILE 302 274 #define FOR 303 275 #define BREAK 304 276 #define CONTINUE 305 277 #define GOTO 306 278 #define RETURN 307 279 #define CHOOSE 308 280 #define DISABLE 309 281 #define ENABLE 310 282 #define FALLTHRU 311 283 #define TRY 312 284 #define CATCH 313 285 #define CATCHRESUME 314 286 #define FINALLY 315 287 #define THROW 316 288 #define THROWRESUME 317 289 #define AT 318 290 #define ASM 319 291 #define ALIGNAS 320 292 #define ALIGNOF 321 293 #define ATOMIC 322 294 #define GENERIC 323 295 #define NORETURN 324 296 #define STATICASSERT 325 297 #define THREADLOCAL 326 298 #define IDENTIFIER 327 299 #define QUOTED_IDENTIFIER 328 300 #define TYPEDEFname 329 301 #define TYPEGENname 330 302 #define ATTR_IDENTIFIER 331 303 #define ATTR_TYPEDEFname 332 304 #define ATTR_TYPEGENname 333 305 #define INTEGERconstant 334 306 #define FLOATINGconstant 335 307 #define CHARACTERconstant 336 308 #define STRINGliteral 337 309 #define ZERO 338 310 #define ONE 339 311 #define ARROW 340 312 #define ICR 341 313 #define DECR 342 314 #define LS 343 315 #define RS 344 316 #define LE 345 317 #define GE 346 318 #define EQ 347 319 #define NE 348 320 #define ANDAND 349 321 #define OROR 350 322 #define ELLIPSIS 351 323 #define MULTassign 352 324 #define DIVassign 353 325 #define MODassign 354 326 #define PLUSassign 355 327 #define MINUSassign 356 328 #define LSassign 357 329 #define RSassign 358 330 #define ANDassign 359 331 #define ERassign 360 332 #define ORassign 361 333 #define ATassign 362 334 #define THEN 363 332 335 333 336 … … 339 342 340 343 /* Line 293 of yacc.c */ 341 #line 11 0"parser.yy"344 #line 112 "parser.yy" 342 345 343 346 Token tok; … … 356 359 357 360 /* Line 293 of yacc.c */ 358 #line 3 59"Parser/parser.cc"361 #line 362 "Parser/parser.cc" 359 362 } YYSTYPE; 360 363 # define YYSTYPE_IS_TRIVIAL 1 … … 368 371 369 372 /* Line 343 of yacc.c */ 370 #line 37 1"Parser/parser.cc"373 #line 374 "Parser/parser.cc" 371 374 372 375 #ifdef short … … 585 588 586 589 /* YYFINAL -- State number of the termination state. */ 587 #define YYFINAL 24 8590 #define YYFINAL 249 588 591 /* YYLAST -- Last index in YYTABLE. */ 589 #define YYLAST 11 042592 #define YYLAST 11290 590 593 591 594 /* YYNTOKENS -- Number of terminals. */ 592 #define YYNTOKENS 13 2595 #define YYNTOKENS 133 593 596 /* YYNNTS -- Number of nonterminals. */ 594 597 #define YYNNTS 238 595 598 /* YYNRULES -- Number of rules. */ 596 #define YYNRULES 75 1599 #define YYNRULES 752 597 600 /* YYNRULES -- Number of states. */ 598 #define YYNSTATES 157 8601 #define YYNSTATES 1579 599 602 600 603 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ 601 604 #define YYUNDEFTOK 2 602 #define YYMAXUTOK 36 2605 #define YYMAXUTOK 363 603 606 604 607 #define YYTRANSLATE(YYX) \ … … 611 614 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 612 615 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 613 2, 2, 2, 11 7, 2, 2, 2, 124, 119, 2,614 10 8, 109, 118, 120, 115, 121, 112, 123, 2, 2,615 2, 2, 2, 2, 2, 2, 2, 2, 11 6, 131,616 12 5, 130, 126, 129, 2, 2, 2, 2, 2, 2,616 2, 2, 2, 118, 2, 2, 2, 125, 120, 2, 617 109, 110, 119, 121, 116, 122, 113, 124, 2, 2, 618 2, 2, 2, 2, 2, 2, 2, 2, 117, 132, 619 126, 131, 127, 130, 2, 2, 2, 2, 2, 2, 617 620 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 618 621 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 619 2, 11 0, 2, 111, 127, 2, 2, 2, 2, 2,622 2, 111, 2, 112, 128, 2, 2, 2, 2, 2, 620 623 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 621 624 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 622 2, 2, 2, 11 3, 128, 114, 122, 2, 2, 2,625 2, 2, 2, 114, 129, 115, 123, 2, 2, 2, 623 626 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 624 627 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, … … 644 647 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 645 648 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 646 105, 106, 107 649 105, 106, 107, 108 647 650 }; 648 651 … … 685 688 1156, 1158, 1161, 1163, 1165, 1167, 1169, 1171, 1173, 1175, 686 689 1177, 1179, 1181, 1183, 1185, 1187, 1189, 1191, 1193, 1195, 687 1197, 1199, 1201, 1203, 1205, 120 8, 1211, 1215, 1219, 1221,688 122 5, 1227, 1230, 1233, 1236, 1241, 1246, 1251, 1256, 1258,689 126 1, 1264, 1268, 1270, 1273, 1276, 1278, 1281, 1284, 1288,690 1290, 129 3, 1296, 1298, 1300, 1305, 1308, 1314, 1322, 1325,691 132 8, 1331, 1333, 1336, 1339, 1343, 1346, 1350, 1352, 1355,692 135 9, 1362, 1365, 1370, 1371, 1373, 1376, 1379, 1381, 1382,693 1384, 138 7, 1390, 1396, 1403, 1406, 1409, 1414, 1415, 1418,694 14 19, 1421, 1423, 1425, 1431, 1437, 1443, 1445, 1451, 1457,695 14 67, 1469, 1475, 1476, 1478, 1480, 1486, 1488, 1490, 1496,696 1 502, 1504, 1508, 1512, 1517, 1519, 1521, 1523, 1525, 1528,697 1530, 153 4, 1538, 1540, 1543, 1545, 1549, 1551, 1553, 1555,698 1557, 1559, 1561, 1563, 1565, 1567, 1569, 1571, 157 4, 1576,699 1578, 1580, 158 3, 1584, 1587, 1590, 1592, 1597, 1598, 1600,700 160 3, 1607, 1612, 1615, 1618, 1620, 1623, 1625, 1628, 1634,701 16 40, 1648, 1655, 1657, 1660, 1663, 1667, 1669, 1672, 1675,702 16 80, 1683, 1688, 1689, 1694, 1697, 1699, 1701, 1703, 1704,703 170 7, 1713, 1719, 1733, 1735, 1737, 1741, 1745, 1748, 1752,704 175 6, 1759, 1764, 1766, 1773, 1783, 1784, 1796, 1798, 1802,705 180 6, 1810, 1812, 1814, 1820, 1823, 1829, 1830, 1832, 1834,706 183 8, 1839, 1841, 1843, 1845, 1847, 1848, 1855, 1858, 1860,707 186 3, 1868, 1871, 1875, 1879, 1883, 1888, 1894, 1900, 1906,708 19 13, 1915, 1917, 1919, 1923, 1924, 1930, 1931, 1933, 1935,709 193 8, 1945, 1947, 1951, 1952, 1954, 1959, 1961, 1963, 1965,710 1967, 19 70, 1972, 1975, 1978, 1980, 1984, 1987, 1991, 1995,711 199 8, 2003, 2008, 2012, 2021, 2025, 2028, 2030, 2033, 2040,712 204 9, 2053, 2056, 2060, 2064, 2069, 2074, 2078, 2080, 2082,713 2084, 208 9, 2096, 2100, 2103, 2107, 2111, 2116, 2121, 2125,714 212 8, 2130, 2133, 2136, 2138, 2142, 2145, 2149, 2153, 2156,715 21 61, 2166, 2170, 2177, 2186, 2190, 2193, 2195, 2198, 2201,716 220 4, 2208, 2212, 2215, 2220, 2225, 2229, 2236, 2245, 2249,717 225 2, 2254, 2257, 2260, 2262, 2264, 2267, 2271, 2275, 2278,718 228 3, 2290, 2299, 2301, 2304, 2307, 2309, 2312, 2315, 2319,719 232 3, 2325, 2330, 2335, 2339, 2345, 2354, 2358, 2361, 2365,720 2367, 23 73, 2379, 2386, 2393, 2395, 2398, 2401, 2403, 2406,721 240 9, 2413, 2417, 2419, 2424, 2429, 2433, 2439, 2448, 2452,722 2454, 245 7, 2459, 2462, 2469, 2475, 2482, 2490, 2498, 2500,723 250 3, 2506, 2508, 2511, 2514, 2518, 2522, 2524, 2529, 2534,724 253 8, 2547, 2551, 2553, 2555, 2558, 2560, 2562, 2565, 2569,725 257 2, 2576, 2579, 2583, 2587, 2590, 2595, 2599, 2602, 2606,726 260 9, 2614, 2618, 2621, 2628, 2635, 2642, 2650, 2652, 2655,727 2657, 2659, 2661, 266 4, 2668, 2671, 2675, 2678, 2682, 2686,728 26 91, 2694, 2698, 2703, 2706, 2712, 2718, 2725, 2732, 2733,729 2735, 273 6690 1197, 1199, 1201, 1203, 1205, 1207, 1210, 1213, 1217, 1221, 691 1223, 1227, 1229, 1232, 1235, 1238, 1243, 1248, 1253, 1258, 692 1260, 1263, 1266, 1270, 1272, 1275, 1278, 1280, 1283, 1286, 693 1290, 1292, 1295, 1298, 1300, 1302, 1307, 1310, 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 730 733 }; 731 734 … … 733 736 static const yytype_int16 yyrhs[] = 734 737 { 735 29 8, 0, -1, -1, -1, 78, -1, 79, -1, 80,736 -1, 7 1, -1, 75, -1, 139, -1, 71, -1, 75,737 -1, 7 1, -1, 139, -1, 82, -1, 83, -1, 81,738 -1, 14 0, 81, -1, 71, -1, 139, -1, 108, 167,739 1 09, -1, 108, 171, 109, -1, 141, -1, 142, 110,740 13 3, 162, 134, 111, -1, 142, 108, 143, 109, -1,741 14 2, 112, 138, -1, 142, 112, 110, 133, 145, 134,742 11 1, -1, 142, 84, 138, -1, 142, 84, 110, 133,743 14 5, 134, 111, -1, 142, 85, -1, 142, 86, -1,744 10 8, 271, 109, 113, 275, 368, 114, -1, 142, 113,745 14 3, 114, -1, 144, -1, 143, 115, 144, -1, -1,746 16 2, -1, 138, 116, 162, -1, 110, 133, 162, 134,747 11 1, 116, 162, -1, 110, 133, 162, 115, 165, 134,748 11 1, 116, 162, -1, 146, -1, 145, 115, 146, -1,749 13 8, -1, 138, 112, 146, -1, 138, 112, 110, 133,750 14 5, 134, 111, -1, 138, 84, 146, -1, 138, 84,751 11 0, 133, 145, 134, 111, -1, 142, -1, 135, -1,752 14 0, -1, 85, 147, -1, 86, 147, -1, 39, 149,753 -1, 14 8, 149, -1, 117, 149, -1, 118, 149, -1,754 3 6, 147, -1, 36, 108, 271, 109, -1, 37, 108,755 27 1, 115, 138, 109, -1, 75, -1, 75, 108, 272,756 1 09, -1, 75, 108, 144, 109, -1, 65, 147, -1,757 6 5, 108, 271, 109, -1, 93, 138, -1, 119, -1,758 12 0, -1, 121, -1, 122, -1, 147, -1, 108, 271,759 1 09, 149, -1, 108, 271, 109, 164, -1, 149, -1,760 15 0, 118, 149, -1, 150, 123, 149, -1, 150, 124,761 1 49, -1, 150, -1, 151, 120, 150, -1, 151, 121,762 15 0, -1, 151, -1, 152, 87, 151, -1, 152, 88,763 15 1, -1, 152, -1, 153, 125, 152, -1, 153, 126,764 15 2, -1, 153, 89, 152, -1, 153, 90, 152, -1,765 15 3, -1, 154, 91, 153, -1, 154, 92, 153, -1,766 15 4, -1, 155, 119, 154, -1, 155, -1, 156, 127,767 15 5, -1, 156, -1, 157, 128, 156, -1, 157, -1,768 15 8, 93, 157, -1, 158, -1, 159, 94, 158, -1,769 1 59, -1, 159, 129, 167, 116, 160, -1, 159, 129,770 11 6, 160, -1, 159, 129, 167, 116, 164, -1, 160,771 -1, 16 0, -1, 147, 130, 162, -1, 147, 166, 162,772 -1, 16 4, 369, -1, -1, 162, -1, 110, 111, -1,773 11 0, 133, 162, 134, 111, -1, 110, 133, 115, 165,774 13 4, 111, -1, 110, 133, 162, 115, 165, 134, 111,775 -1, 16 3, -1, 165, 115, 163, -1, 96, -1, 97,776 -1, 9 8, -1, 99, -1, 100, -1, 101, -1, 102,777 -1, 10 3, -1, 104, -1, 105, -1, 162, -1, 167,778 11 5, 162, -1, -1, 167, -1, 170, -1, 171, -1,779 17 5, -1, 176, -1, 188, -1, 190, -1, 191, -1,780 19 6, -1, 127, 142, 113, 143, 114, 131, -1, 138,781 11 6, 308, 169, -1, 113, 114, -1, 113, 133, 133,782 20 7, 172, 134, 114, -1, 173, -1, 172, 133, 173,783 -1, 21 0, -1, 39, 210, -1, 304, -1, 169, 134,784 -1, 1 69, -1, 174, 169, -1, 168, 131, -1, 40,785 10 8, 167, 109, 169, -1, 40, 108, 167, 109, 169,786 4 1, 169, -1, 42, 108, 167, 109, 181, -1, 42,787 10 8, 167, 109, 113, 133, 203, 182, 114, -1, 52,788 10 8, 167, 109, 181, -1, 52, 108, 167, 109, 113,789 13 3, 203, 184, 114, -1, 161, -1, 161, 95, 161,790 -1, 30 6, -1, 177, -1, 178, 115, 177, -1, 43,791 17 8, 116, -1, 44, 116, -1, 179, -1, 180, 179,792 -1, 18 0, 169, -1, -1, 183, -1, 180, 174, -1,793 18 3, 180, 174, -1, -1, 185, -1, 180, 187, -1,794 18 0, 174, 186, -1, 185, 180, 187, -1, 185, 180,795 17 4, 186, -1, -1, 187, -1, 55, -1, 55, 131,796 -1, 4 6, 108, 167, 109, 169, -1, 45, 169, 46,797 10 8, 167, 109, 131, -1, 47, 108, 133, 189, 109,798 1 69, -1, 168, 134, 131, 168, 131, 168, -1, 210,799 16 8, 131, 168, -1, 50, 138, 131, -1, 50, 118,800 16 7, 131, -1, 49, 131, -1, 49, 138, 131, -1,801 4 8, 131, -1, 48, 138, 131, -1, 51, 168, 131,802 -1, 6 0, 163, 131, -1, 61, 163, 131, -1, 61,803 16 3, 62, 162, 131, -1, 56, 171, 192, -1, 56,804 17 1, 194, -1, 56, 171, 192, 194, -1, 193, -1,805 5 7, 108, 95, 109, 171, -1, 193, 57, 108, 95,806 1 09, 171, -1, 58, 108, 95, 109, 171, -1, 193,807 5 8, 108, 95, 109, 171, -1, 57, 108, 133, 133,808 19 5, 134, 109, 171, 134, -1, 193, 57, 108, 133,809 13 3, 195, 134, 109, 171, 134, -1, 58, 108, 133,810 13 3, 195, 134, 109, 171, 134, -1, 193, 58, 108,811 13 3, 133, 195, 134, 109, 171, 134, -1, 59, 171,812 -1, 22 3, -1, 223, 305, -1, 223, 353, -1, 362,813 13 8, -1, 362, -1, 63, 197, 108, 140, 109, 131,814 -1, 6 3, 197, 108, 140, 116, 198, 109, 131, -1,815 6 3, 197, 108, 140, 116, 198, 116, 198, 109, 131,816 -1, 6 3, 197, 108, 140, 116, 198, 116, 198, 116,817 20 1, 109, 131, -1, 63, 197, 50, 108, 140, 116,818 11 6, 198, 116, 201, 116, 202, 109, 131, -1, -1,819 11, -1, -1, 199, -1, 200, -1, 199, 115, 200,820 -1, 14 0, 108, 161, 109, -1, 110, 161, 111, 140,821 10 8, 161, 109, -1, -1, 140, -1, 201, 115, 140,822 -1, 13 8, -1, 202, 115, 138, -1, 134, -1, 204,823 -1, 21 0, -1, 204, 133, 210, -1, 134, -1, 206,824 -1, 22 0, -1, 206, 133, 220, -1, -1, 208, -1,825 2 8, 209, 131, -1, 208, 28, 209, 131, -1, 270,826 -1, 2 09, 115, 270, -1, 211, -1, 220, -1, 212,827 13 4, 131, -1, 217, 134, 131, -1, 214, 134, 131,828 -1, 2 89, 134, 131, -1, 292, 134, 131, -1, 213,829 27 3, -1, 229, 213, 273, -1, 212, 134, 115, 133,830 26 8, 273, -1, 363, 268, 307, -1, 366, 268, 307,831 -1, 22 5, 366, 268, 307, -1, 215, -1, 225, 215,832 -1, 2 29, 215, -1, 229, 225, 215, -1, 214, 134,833 11 5, 133, 268, -1, 110, 111, 268, 108, 133, 256,834 13 4, 109, -1, 366, 268, 108, 133, 256, 134, 109,835 -1, 21 6, 268, 108, 133, 256, 134, 109, -1, 110,836 13 3, 258, 134, 111, -1, 110, 133, 258, 134, 115,837 13 3, 259, 134, 111, -1, 3, 213, -1, 3, 215,838 -1, 21 7, 134, 115, 133, 138, -1, 3, 223, 305,839 -1, 21 8, 134, 115, 133, 305, -1, 225, 3, 223,840 30 5, -1, 223, 3, 305, -1, 223, 3, 225, 305,841 -1, 3, 13 8, 130, 162, -1, 219, 134, 115, 133,842 13 8, 130, 162, -1, 221, 134, 131, -1, 218, 134,843 13 1, -1, 219, 134, 131, -1, 238, 134, 131, -1,844 22 2, 305, 307, 273, -1, 221, 115, 308, 305, 307,845 27 3, -1, 234, -1, 238, -1, 240, -1, 279, -1,846 23 5, -1, 239, -1, 241, -1, 280, -1, -1, 225,847 -1, 22 6, -1, 225, 226, -1, 227, -1, 310, -1,848 10, -1, 12, -1, 11, -1, 14, -1, 6 6, -1,849 -1, 13, 10 8, 228, 282, 109, -1, 230, -1, 225,850 23 0, -1, 229, 225, 230, -1, 231, -1, 230, 231,851 -1, 23 2, -1, 5, -1, 7, -1, 4, -1, 6,852 -1, 8, -1, 9, -1, 6 8, -1, 70, -1, 16,738 299, 0, -1, -1, -1, 79, -1, 80, -1, 81, 739 -1, 72, -1, 76, -1, 140, -1, 72, -1, 76, 740 -1, 72, -1, 140, -1, 83, -1, 84, -1, 82, 741 -1, 141, 82, -1, 72, -1, 140, -1, 109, 168, 742 110, -1, 109, 172, 110, -1, 142, -1, 143, 111, 743 134, 163, 135, 112, -1, 143, 109, 144, 110, -1, 744 143, 113, 139, -1, 143, 113, 111, 134, 146, 135, 745 112, -1, 143, 85, 139, -1, 143, 85, 111, 134, 746 146, 135, 112, -1, 143, 86, -1, 143, 87, -1, 747 109, 272, 110, 114, 276, 369, 115, -1, 143, 114, 748 144, 115, -1, 145, -1, 144, 116, 145, -1, -1, 749 163, -1, 139, 117, 163, -1, 111, 134, 163, 135, 750 112, 117, 163, -1, 111, 134, 163, 116, 166, 135, 751 112, 117, 163, -1, 147, -1, 146, 116, 147, -1, 752 139, -1, 139, 113, 147, -1, 139, 113, 111, 134, 753 146, 135, 112, -1, 139, 85, 147, -1, 139, 85, 754 111, 134, 146, 135, 112, -1, 143, -1, 136, -1, 755 141, -1, 86, 148, -1, 87, 148, -1, 40, 150, 756 -1, 149, 150, -1, 118, 150, -1, 119, 150, -1, 757 37, 148, -1, 37, 109, 272, 110, -1, 38, 109, 758 272, 116, 139, 110, -1, 76, -1, 76, 109, 273, 759 110, -1, 76, 109, 145, 110, -1, 66, 148, -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 151, 119, 150, -1, 151, 124, 150, -1, 151, 125, 764 150, -1, 151, -1, 152, 121, 151, -1, 152, 122, 765 151, -1, 152, -1, 153, 88, 152, -1, 153, 89, 766 152, -1, 153, -1, 154, 126, 153, -1, 154, 127, 767 153, -1, 154, 90, 153, -1, 154, 91, 153, -1, 768 154, -1, 155, 92, 154, -1, 155, 93, 154, -1, 769 155, -1, 156, 120, 155, -1, 156, -1, 157, 128, 770 156, -1, 157, -1, 158, 129, 157, -1, 158, -1, 771 159, 94, 158, -1, 159, -1, 160, 95, 159, -1, 772 160, -1, 160, 130, 168, 117, 161, -1, 160, 130, 773 117, 161, -1, 160, 130, 168, 117, 165, -1, 161, 774 -1, 161, -1, 148, 131, 163, -1, 148, 167, 163, 775 -1, 165, 370, -1, -1, 163, -1, 111, 112, -1, 776 111, 134, 163, 135, 112, -1, 111, 134, 116, 166, 777 135, 112, -1, 111, 134, 163, 116, 166, 135, 112, 778 -1, 164, -1, 166, 116, 164, -1, 97, -1, 98, 779 -1, 99, -1, 100, -1, 101, -1, 102, -1, 103, 780 -1, 104, -1, 105, -1, 106, -1, 163, -1, 168, 781 116, 163, -1, -1, 168, -1, 171, -1, 172, -1, 782 176, -1, 177, -1, 189, -1, 191, -1, 192, -1, 783 197, -1, 128, 143, 114, 144, 115, 132, -1, 139, 784 117, 309, 170, -1, 114, 115, -1, 114, 134, 134, 785 208, 173, 135, 115, -1, 174, -1, 173, 134, 174, 786 -1, 211, -1, 40, 211, -1, 305, -1, 170, 135, 787 -1, 170, -1, 175, 170, -1, 169, 132, -1, 41, 788 109, 168, 110, 170, -1, 41, 109, 168, 110, 170, 789 42, 170, -1, 43, 109, 168, 110, 182, -1, 43, 790 109, 168, 110, 114, 134, 204, 183, 115, -1, 53, 791 109, 168, 110, 182, -1, 53, 109, 168, 110, 114, 792 134, 204, 185, 115, -1, 162, -1, 162, 96, 162, 793 -1, 307, -1, 178, -1, 179, 116, 178, -1, 44, 794 179, 117, -1, 45, 117, -1, 180, -1, 181, 180, 795 -1, 181, 170, -1, -1, 184, -1, 181, 175, -1, 796 184, 181, 175, -1, -1, 186, -1, 181, 188, -1, 797 181, 175, 187, -1, 186, 181, 188, -1, 186, 181, 798 175, 187, -1, -1, 188, -1, 56, -1, 56, 132, 799 -1, 47, 109, 168, 110, 170, -1, 46, 170, 47, 800 109, 168, 110, 132, -1, 48, 109, 134, 190, 110, 801 170, -1, 169, 135, 132, 169, 132, 169, -1, 211, 802 169, 132, 169, -1, 51, 139, 132, -1, 51, 119, 803 168, 132, -1, 50, 132, -1, 50, 139, 132, -1, 804 49, 132, -1, 49, 139, 132, -1, 52, 169, 132, 805 -1, 61, 164, 132, -1, 62, 164, 132, -1, 62, 806 164, 63, 163, 132, -1, 57, 172, 193, -1, 57, 807 172, 195, -1, 57, 172, 193, 195, -1, 194, -1, 808 58, 109, 96, 110, 172, -1, 194, 58, 109, 96, 809 110, 172, -1, 59, 109, 96, 110, 172, -1, 194, 810 59, 109, 96, 110, 172, -1, 58, 109, 134, 134, 811 196, 135, 110, 172, 135, -1, 194, 58, 109, 134, 812 134, 196, 135, 110, 172, 135, -1, 59, 109, 134, 813 134, 196, 135, 110, 172, 135, -1, 194, 59, 109, 814 134, 134, 196, 135, 110, 172, 135, -1, 60, 172, 815 -1, 224, -1, 224, 306, -1, 224, 354, -1, 363, 816 139, -1, 363, -1, 64, 198, 109, 141, 110, 132, 817 -1, 64, 198, 109, 141, 117, 199, 110, 132, -1, 818 64, 198, 109, 141, 117, 199, 117, 199, 110, 132, 819 -1, 64, 198, 109, 141, 117, 199, 117, 199, 117, 820 202, 110, 132, -1, 64, 198, 51, 109, 141, 117, 821 117, 199, 117, 202, 117, 203, 110, 132, -1, -1, 822 11, -1, -1, 200, -1, 201, -1, 200, 116, 201, 823 -1, 141, 109, 162, 110, -1, 111, 162, 112, 141, 824 109, 162, 110, -1, -1, 141, -1, 202, 116, 141, 825 -1, 139, -1, 203, 116, 139, -1, 135, -1, 205, 826 -1, 211, -1, 205, 134, 211, -1, 135, -1, 207, 827 -1, 221, -1, 207, 134, 221, -1, -1, 209, -1, 828 29, 210, 132, -1, 209, 29, 210, 132, -1, 271, 829 -1, 210, 116, 271, -1, 212, -1, 221, -1, 213, 830 135, 132, -1, 218, 135, 132, -1, 215, 135, 132, 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 -1, 230, 216, -1, 230, 226, 216, -1, 215, 135, 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 -1, 3, 139, 131, 163, -1, 220, 135, 116, 134, 845 139, 131, 163, -1, 222, 135, 132, -1, 219, 135, 846 132, -1, 220, 135, 132, -1, 239, 135, 132, -1, 847 223, 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 10, -1, 12, -1, 11, -1, 14, -1, 67, -1, 852 -1, 13, 109, 229, 283, 110, -1, 231, -1, 226, 853 231, -1, 230, 226, 231, -1, 232, -1, 231, 232, 854 -1, 233, -1, 5, -1, 7, -1, 4, -1, 6, 855 -1, 8, -1, 9, -1, 69, -1, 71, -1, 16, 853 856 -1, 21, -1, 20, -1, 18, -1, 19, -1, 17, 854 -1, 22, -1, 23, -1, 15, -1, 24, -1, 25, 855 -1, 26, -1, 235, -1, 229, 235, -1, 234, 231, 856 -1, 234, 231, 225, -1, 234, 231, 235, -1, 236, 857 -1, 224, 237, 224, -1, 233, -1, 225, 233, -1, 858 236, 226, -1, 236, 233, -1, 27, 108, 272, 109, 859 -1, 27, 108, 167, 109, -1, 77, 108, 272, 109, 860 -1, 77, 108, 167, 109, -1, 239, -1, 229, 239, 861 -1, 238, 231, -1, 238, 231, 225, -1, 242, -1, 862 225, 242, -1, 239, 226, -1, 241, -1, 229, 241, 863 -1, 240, 231, -1, 240, 231, 225, -1, 73, -1, 864 225, 73, -1, 241, 226, -1, 243, -1, 253, -1, 865 244, 113, 245, 114, -1, 244, 270, -1, 244, 270, 866 113, 245, 114, -1, 244, 108, 288, 109, 113, 245, 867 114, -1, 244, 281, -1, 30, 308, -1, 31, 308, 868 -1, 246, -1, 245, 246, -1, 247, 131, -1, 39, 869 247, 131, -1, 248, 131, -1, 39, 248, 131, -1, 870 362, -1, 362, 270, -1, 247, 115, 270, -1, 247, 871 115, -1, 223, 249, -1, 248, 115, 308, 249, -1, 872 -1, 251, -1, 314, 250, -1, 327, 250, -1, 353, 873 -1, -1, 251, -1, 116, 161, -1, 29, 308, -1, 874 252, 113, 254, 368, 114, -1, 252, 270, 113, 254, 875 368, 114, -1, 252, 270, -1, 270, 255, -1, 254, 876 115, 270, 255, -1, -1, 130, 161, -1, -1, 257, 877 -1, 259, -1, 258, -1, 258, 134, 115, 133, 259, 878 -1, 259, 134, 115, 133, 95, -1, 258, 134, 115, 879 133, 95, -1, 263, -1, 259, 134, 115, 133, 263, 880 -1, 258, 134, 115, 133, 263, -1, 258, 134, 115, 881 133, 259, 134, 115, 133, 263, -1, 264, -1, 259, 882 134, 115, 133, 264, -1, -1, 261, -1, 262, -1, 883 262, 134, 115, 133, 95, -1, 266, -1, 265, -1, 884 262, 134, 115, 133, 266, -1, 262, 134, 115, 133, 885 265, -1, 265, -1, 358, 268, 369, -1, 366, 268, 886 369, -1, 225, 366, 268, 369, -1, 215, -1, 266, 887 -1, 358, -1, 366, -1, 225, 366, -1, 367, -1, 888 222, 332, 369, -1, 222, 336, 369, -1, 222, -1, 889 222, 347, -1, 138, -1, 267, 115, 138, -1, 136, 890 -1, 73, -1, 74, -1, 137, -1, 73, -1, 74, 891 -1, 138, -1, 73, -1, 74, -1, 362, -1, 223, 892 -1, 223, 353, -1, 362, -1, 367, -1, 223, -1, 893 223, 341, -1, -1, 130, 274, -1, 106, 274, -1, 894 162, -1, 113, 275, 368, 114, -1, -1, 274, -1, 895 276, 274, -1, 275, 115, 274, -1, 275, 115, 276, 896 274, -1, 277, 116, -1, 270, 116, -1, 278, -1, 897 277, 278, -1, 79, -1, 112, 270, -1, 110, 133, 898 162, 134, 111, -1, 110, 133, 306, 134, 111, -1, 899 110, 133, 161, 95, 161, 134, 111, -1, 112, 110, 900 133, 145, 134, 111, -1, 280, -1, 229, 280, -1, 901 279, 231, -1, 279, 231, 225, -1, 281, -1, 225, 902 281, -1, 280, 226, -1, 74, 108, 288, 109, -1, 903 283, 369, -1, 282, 115, 283, 369, -1, -1, 285, 904 270, 284, 286, -1, 223, 332, -1, 32, -1, 34, 905 -1, 33, -1, -1, 286, 287, -1, 128, 270, 108, 906 288, 109, -1, 128, 113, 133, 294, 114, -1, 128, 907 108, 133, 282, 134, 109, 113, 133, 294, 114, 108, 908 288, 109, -1, 272, -1, 162, -1, 288, 115, 272, 909 -1, 288, 115, 162, -1, 32, 290, -1, 230, 32, 910 290, -1, 289, 115, 290, -1, 291, 286, -1, 291, 911 286, 130, 272, -1, 270, -1, 269, 108, 133, 282, 912 134, 109, -1, 35, 270, 108, 133, 282, 134, 109, 913 113, 114, -1, -1, 35, 270, 108, 133, 282, 134, 914 109, 113, 293, 294, 114, -1, 295, -1, 294, 133, 915 295, -1, 296, 134, 131, -1, 297, 134, 131, -1, 916 213, -1, 215, -1, 296, 134, 115, 133, 268, -1, 917 223, 305, -1, 297, 134, 115, 133, 305, -1, -1, 918 299, -1, 301, -1, 299, 133, 301, -1, -1, 299, 919 -1, 210, -1, 303, -1, 196, -1, -1, 5, 81, 920 302, 113, 300, 114, -1, 39, 301, -1, 304, -1, 921 319, 171, -1, 323, 133, 205, 171, -1, 214, 171, 922 -1, 222, 319, 171, -1, 225, 319, 171, -1, 229, 923 319, 171, -1, 229, 225, 319, 171, -1, 222, 323, 924 133, 205, 171, -1, 225, 323, 133, 205, 171, -1, 925 229, 323, 133, 205, 171, -1, 229, 225, 323, 133, 926 205, 171, -1, 314, -1, 319, -1, 327, -1, 161, 927 122, 161, -1, -1, 63, 108, 140, 109, 308, -1, 928 -1, 309, -1, 310, -1, 309, 310, -1, 38, 108, 929 108, 311, 109, 109, -1, 312, -1, 311, 115, 312, 930 -1, -1, 313, -1, 313, 108, 168, 109, -1, 268, 931 -1, 232, -1, 233, -1, 226, -1, 315, 308, -1, 932 316, -1, 317, 308, -1, 318, 308, -1, 136, -1, 933 108, 315, 109, -1, 118, 314, -1, 118, 225, 314, 934 -1, 108, 316, 109, -1, 315, 345, -1, 108, 316, 935 109, 345, -1, 108, 317, 109, 346, -1, 108, 317, 936 109, -1, 108, 316, 109, 108, 133, 260, 134, 109, 937 -1, 108, 318, 109, -1, 320, 308, -1, 321, -1, 938 322, 308, -1, 315, 108, 133, 260, 134, 109, -1, 939 108, 321, 109, 108, 133, 260, 134, 109, -1, 108, 940 320, 109, -1, 118, 319, -1, 118, 225, 319, -1, 941 108, 321, 109, -1, 108, 321, 109, 345, -1, 108, 942 322, 109, 346, -1, 108, 322, 109, -1, 324, -1, 943 325, -1, 326, -1, 315, 108, 267, 109, -1, 108, 944 325, 109, 108, 267, 109, -1, 108, 324, 109, -1, 945 118, 323, -1, 118, 225, 323, -1, 108, 325, 109, 946 -1, 108, 325, 109, 345, -1, 108, 326, 109, 346, 947 -1, 108, 326, 109, -1, 328, 308, -1, 329, -1, 948 330, 308, -1, 331, 308, -1, 337, -1, 108, 328, 949 109, -1, 118, 327, -1, 118, 225, 327, -1, 108, 950 329, 109, -1, 328, 345, -1, 108, 329, 109, 345, 951 -1, 108, 330, 109, 346, -1, 108, 330, 109, -1, 952 328, 108, 133, 260, 134, 109, -1, 108, 329, 109, 953 108, 133, 260, 134, 109, -1, 108, 331, 109, -1, 954 315, 308, -1, 333, -1, 334, 308, -1, 335, 308, 955 -1, 118, 332, -1, 118, 225, 332, -1, 108, 333, 956 109, -1, 315, 351, -1, 108, 333, 109, 345, -1, 957 108, 334, 109, 346, -1, 108, 334, 109, -1, 315, 958 108, 133, 260, 134, 109, -1, 108, 333, 109, 108, 959 133, 260, 134, 109, -1, 108, 335, 109, -1, 337, 960 308, -1, 338, -1, 339, 308, -1, 340, 308, -1, 961 73, -1, 74, -1, 118, 336, -1, 118, 225, 336, 962 -1, 108, 338, 109, -1, 337, 351, -1, 108, 338, 963 109, 351, -1, 337, 108, 133, 260, 134, 109, -1, 964 108, 338, 109, 108, 133, 260, 134, 109, -1, 342, 965 -1, 343, 308, -1, 344, 308, -1, 118, -1, 118, 966 225, -1, 118, 341, -1, 118, 225, 341, -1, 108, 967 342, 109, -1, 345, -1, 108, 342, 109, 345, -1, 968 108, 343, 109, 346, -1, 108, 343, 109, -1, 108, 969 133, 260, 134, 109, -1, 108, 342, 109, 108, 133, 970 260, 134, 109, -1, 108, 344, 109, -1, 110, 111, 971 -1, 110, 111, 346, -1, 346, -1, 110, 133, 162, 972 134, 111, -1, 110, 133, 118, 134, 111, -1, 346, 973 110, 133, 162, 134, 111, -1, 346, 110, 133, 118, 974 134, 111, -1, 348, -1, 349, 308, -1, 350, 308, 975 -1, 118, -1, 118, 225, -1, 118, 347, -1, 118, 976 225, 347, -1, 108, 348, 109, -1, 351, -1, 108, 977 348, 109, 351, -1, 108, 349, 109, 346, -1, 108, 978 349, 109, -1, 108, 133, 260, 134, 109, -1, 108, 979 348, 109, 108, 133, 260, 134, 109, -1, 108, 350, 980 109, -1, 352, -1, 352, 346, -1, 346, -1, 110, 981 111, -1, 110, 133, 225, 118, 134, 111, -1, 110, 982 133, 225, 134, 111, -1, 110, 133, 225, 162, 134, 983 111, -1, 110, 133, 7, 224, 162, 134, 111, -1, 984 110, 133, 225, 7, 162, 134, 111, -1, 354, -1, 985 355, 308, -1, 356, 308, -1, 118, -1, 118, 225, 986 -1, 118, 353, -1, 118, 225, 353, -1, 108, 354, 987 109, -1, 345, -1, 108, 354, 109, 345, -1, 108, 988 355, 109, 346, -1, 108, 355, 109, -1, 108, 354, 989 109, 108, 133, 260, 134, 109, -1, 108, 356, 109, 990 -1, 358, -1, 366, -1, 225, 366, -1, 359, -1, 991 360, -1, 118, 223, -1, 225, 118, 223, -1, 118, 992 367, -1, 225, 118, 367, -1, 118, 357, -1, 225, 993 118, 357, -1, 110, 111, 223, -1, 361, 223, -1, 994 110, 111, 346, 223, -1, 361, 346, 223, -1, 346, 995 223, -1, 110, 111, 359, -1, 361, 359, -1, 110, 996 111, 346, 359, -1, 361, 346, 359, -1, 346, 359, 997 -1, 110, 133, 225, 118, 134, 111, -1, 110, 133, 998 225, 162, 134, 111, -1, 110, 133, 229, 162, 134, 999 111, -1, 110, 133, 229, 225, 162, 134, 111, -1, 1000 366, -1, 225, 366, -1, 363, -1, 364, -1, 365, 1001 -1, 118, 223, -1, 225, 118, 223, -1, 118, 367, 1002 -1, 225, 118, 367, -1, 118, 362, -1, 225, 118, 1003 362, -1, 110, 111, 223, -1, 110, 111, 346, 223, 1004 -1, 346, 223, -1, 110, 111, 364, -1, 110, 111, 1005 346, 364, -1, 346, 364, -1, 110, 133, 259, 134, 1006 111, -1, 110, 111, 108, 256, 109, -1, 366, 108, 1007 133, 256, 134, 109, -1, 216, 108, 133, 256, 134, 1008 109, -1, -1, 115, -1, -1, 130, 162, -1 857 -1, 22, -1, 23, -1, 15, -1, 25, -1, 26, 858 -1, 27, -1, 24, -1, 236, -1, 230, 236, -1, 859 235, 232, -1, 235, 232, 226, -1, 235, 232, 236, 860 -1, 237, -1, 225, 238, 225, -1, 234, -1, 226, 861 234, -1, 237, 227, -1, 237, 234, -1, 28, 109, 862 273, 110, -1, 28, 109, 168, 110, -1, 78, 109, 863 273, 110, -1, 78, 109, 168, 110, -1, 240, -1, 864 230, 240, -1, 239, 232, -1, 239, 232, 226, -1, 865 243, -1, 226, 243, -1, 240, 227, -1, 242, -1, 866 230, 242, -1, 241, 232, -1, 241, 232, 226, -1, 867 74, -1, 226, 74, -1, 242, 227, -1, 244, -1, 868 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 1009 1013 }; 1010 1014 … … 1012 1016 static const yytype_uint16 yyrline[] = 1013 1017 { 1014 0, 29 0, 290, 296, 305, 306, 307, 311, 312, 313,1015 31 7, 318, 322, 323, 327, 328, 332, 333, 339, 341,1016 34 3, 345, 350, 351, 357, 361, 363, 364, 366, 367,1017 3 69, 371, 373, 381, 382, 388, 389, 390, 395, 397,1018 40 2, 403, 407, 411, 413, 415, 417, 422, 425, 427,1019 4 29, 431, 433, 435, 437, 439, 445, 447, 449, 451,1020 45 3, 455, 457, 459, 461, 466, 467, 468, 469, 473,1021 47 4, 476, 481, 482, 484, 486, 491, 492, 494, 499,1022 50 0, 502, 507, 508, 510, 512, 514, 519, 520, 522,1023 52 7, 528, 533, 534, 539, 540, 545, 546, 551, 552,1024 55 7, 558, 560, 562, 567, 572, 573, 575, 577, 583,1025 58 4, 590, 592, 594, 596, 601, 602, 607, 608, 609,1026 61 0, 611, 612, 613, 614, 615, 616, 620, 621, 627,1027 6 28, 634, 635, 636, 637, 638, 639, 640, 641, 642,1028 65 1, 658, 660, 670, 671, 676, 678, 680, 682, 686,1029 68 7, 692, 697, 700, 702, 704, 709, 711, 719, 720,1030 72 2, 726, 727, 732, 733, 738, 739, 743, 748, 749,1031 75 3, 755, 761, 762, 766, 768, 770, 772, 778, 779,1032 78 3, 784, 788, 790, 792, 797, 799, 804, 806, 810,1033 81 3, 817, 820, 824, 826, 830, 832, 839, 841, 843,1034 85 2, 854, 856, 858, 860, 865, 867, 869, 871, 876,1035 8 89, 890, 895, 897, 902, 906, 908, 910, 912, 914,1036 92 0, 921, 927, 928, 932, 933, 938, 940, 946, 947,1037 9 49, 954, 956, 963, 965, 969, 970, 975, 977, 981,1038 98 2, 986, 988, 992, 993, 997, 998, 1002, 1003, 1018,1039 10 19, 1020, 1021, 1022, 1026, 1031, 1038, 1048, 1053, 1058,1040 106 6, 1071, 1076, 1081, 1086, 1094, 1116, 1121, 1128, 1130,1041 113 7, 1142, 1147, 1158, 1163, 1168, 1173, 1178, 1187, 1192,1042 120 0, 1201, 1202, 1203, 1209, 1214, 1222, 1223, 1224, 1225,1043 12 29, 1230, 1231, 1232, 1237, 1238, 1247, 1248, 1253, 1254,1044 12 59, 1261, 1263, 1265, 1267, 1270, 1269, 1281, 1282, 1284,1045 129 4, 1295, 1300, 1304, 1306, 1308, 1310, 1312, 1314, 1316,1046 13 18, 1323, 1325, 1327, 1329, 1331, 1333, 1335, 1337, 1339,1047 134 1, 1343, 1345, 1351, 1352, 1354, 1356, 1358, 1363, 1364,1048 13 70, 1371, 1373, 1375, 1380, 1382, 1384, 1386, 1391, 1392,1049 139 4, 1396, 1401, 1402, 1404, 1409, 1410, 1412, 1414, 1419,1050 142 1, 1423, 1428, 1429, 1433, 1435, 1437, 1439, 1441, 1446,1051 14 48, 1453, 1455, 1460, 1461, 1463, 1464, 1469, 1470, 1472,1052 147 4, 1479, 1481, 1487, 1488, 1490, 1493, 1496, 1501, 1502,1053 150 7, 1512, 1516, 1518, 1520, 1525, 1527, 1533, 1534, 1542,1054 154 3, 1547, 1548, 1549, 1551, 1553, 1560, 1561, 1563, 1565,1055 15 70, 1571, 1577, 1578, 1582, 1583, 1588, 1589, 1590, 1592,1056 1 600, 1601, 1603, 1606, 1608, 1612, 1613, 1614, 1616, 1618,1057 1622, 162 7, 1635, 1636, 1645, 1647, 1652, 1653, 1654, 1658,1058 16 59, 1660, 1664, 1665, 1666, 1670, 1671, 1672, 1677, 1678,1059 16 79, 1680, 1686, 1687, 1689, 1694, 1695, 1700, 1701, 1702,1060 170 3, 1704, 1719, 1720, 1725, 1726, 1734, 1736, 1738, 1741,1061 174 3, 1745, 1768, 1769, 1771, 1773, 1778, 1779, 1781, 1786,1062 179 1, 1792, 1798, 1797, 1801, 1805, 1807, 1809, 1815, 1816,1063 182 1, 1826, 1828, 1833, 1835, 1836, 1838, 1843, 1845, 1847,1064 185 2, 1854, 1859, 1864, 1872, 1878, 1877, 1891, 1892, 1897,1065 1 898, 1902, 1907, 1912, 1920, 1925, 1936, 1937, 1948, 1949,1066 195 5, 1956, 1960, 1961, 1962, 1965, 1964, 1975, 1980, 1985,1067 19 91, 2000, 2006, 2012, 2018, 2024, 2032, 2038, 2046, 2052,1068 20 61, 2062, 2063, 2067, 2071, 2073, 2078, 2079, 2083, 2084,1069 208 9, 2095, 2096, 2099, 2101, 2102, 2106, 2107, 2108, 2109,1070 21 43, 2145, 2146, 2148, 2153, 2158, 2163, 2165, 2167, 2172,1071 217 4, 2176, 2178, 2183, 2185, 2195, 2197, 2198, 2203, 2205,1072 220 7, 2212, 2214, 2216, 2221, 2223, 2225, 2234, 2235, 2236,1073 2240, 224 2, 2244, 2249, 2251, 2253, 2258, 2260, 2262, 2277,1074 22 79, 2280, 2282, 2287, 2288, 2293, 2295, 2297, 2302, 2304,1075 230 6, 2308, 2313, 2315, 2317, 2327, 2329, 2330, 2332, 2337,1076 23 39, 2341, 2346, 2348, 2350, 2352, 2357, 2359, 2361, 2392,1077 239 4, 2395, 2397, 2402, 2407, 2415, 2417, 2419, 2424, 2426,1078 243 1, 2433, 2447, 2448, 2450, 2455, 2457, 2459, 2461, 2463,1079 246 8, 2469, 2471, 2473, 2478, 2480, 2482, 2488, 2490, 2492,1080 2496, 2 498, 2500, 2502, 2516, 2517, 2519, 2524, 2526, 2528,1081 253 0, 2532, 2537, 2538, 2540, 2542, 2547, 2549, 2551, 2557,1082 25 58, 2560, 2569, 2572, 2574, 2577, 2579, 2581, 2594, 2595,1083 259 7, 2602, 2604, 2606, 2608, 2610, 2615, 2616, 2618, 2620,1084 262 5, 2627, 2635, 2636, 2637, 2642, 2643, 2647, 2649, 2651,1085 265 3, 2655, 2657, 2664, 2666, 2668, 2670, 2672, 2674, 2676,1086 26 78, 2680, 2682, 2687, 2689, 2691, 2696, 2722, 2723, 2725,1087 2729, 273 0, 2734, 2736, 2738, 2740, 2742, 2744, 2751, 2753,1088 275 5, 2757, 2759, 2761, 2766, 2771, 2773, 2775, 2793, 2795,1089 2 800, 28011018 0, 292, 292, 298, 307, 308, 309, 313, 314, 315, 1019 319, 320, 324, 325, 329, 330, 334, 335, 341, 343, 1020 345, 347, 352, 353, 359, 363, 365, 366, 368, 369, 1021 371, 373, 375, 383, 384, 390, 391, 392, 397, 399, 1022 404, 405, 409, 413, 415, 417, 419, 424, 427, 429, 1023 431, 433, 435, 437, 439, 441, 447, 449, 451, 453, 1024 455, 457, 459, 461, 463, 468, 469, 470, 471, 475, 1025 476, 478, 483, 484, 486, 488, 493, 494, 496, 501, 1026 502, 504, 509, 510, 512, 514, 516, 521, 522, 524, 1027 529, 530, 535, 536, 541, 542, 547, 548, 553, 554, 1028 559, 560, 562, 564, 569, 574, 575, 577, 579, 585, 1029 586, 592, 594, 596, 598, 603, 604, 609, 610, 611, 1030 612, 613, 614, 615, 616, 617, 618, 622, 623, 629, 1031 630, 636, 637, 638, 639, 640, 641, 642, 643, 644, 1032 653, 660, 662, 672, 673, 678, 680, 682, 684, 688, 1033 689, 694, 699, 702, 704, 706, 711, 713, 721, 722, 1034 724, 728, 729, 734, 735, 740, 741, 745, 750, 751, 1035 755, 757, 763, 764, 768, 770, 772, 774, 780, 781, 1036 785, 786, 790, 792, 794, 799, 801, 806, 808, 812, 1037 815, 819, 822, 826, 828, 832, 834, 841, 843, 845, 1038 854, 856, 858, 860, 862, 867, 869, 871, 873, 878, 1039 891, 892, 897, 899, 904, 908, 910, 912, 914, 916, 1040 922, 923, 929, 930, 934, 935, 940, 942, 948, 949, 1041 951, 956, 958, 965, 967, 971, 972, 977, 979, 983, 1042 984, 988, 990, 994, 995, 999, 1000, 1004, 1005, 1020, 1043 1021, 1022, 1023, 1024, 1028, 1033, 1040, 1050, 1055, 1060, 1044 1068, 1073, 1078, 1083, 1088, 1096, 1118, 1123, 1130, 1132, 1045 1139, 1144, 1149, 1160, 1165, 1170, 1175, 1180, 1189, 1194, 1046 1202, 1203, 1204, 1205, 1211, 1216, 1224, 1225, 1226, 1227, 1047 1231, 1232, 1233, 1234, 1239, 1240, 1249, 1250, 1255, 1256, 1048 1261, 1263, 1265, 1267, 1269, 1272, 1271, 1283, 1284, 1286, 1049 1296, 1297, 1302, 1306, 1308, 1310, 1312, 1314, 1316, 1318, 1050 1320, 1325, 1327, 1329, 1331, 1333, 1335, 1337, 1339, 1341, 1051 1343, 1345, 1347, 1349, 1355, 1356, 1358, 1360, 1362, 1367, 1052 1368, 1374, 1375, 1377, 1379, 1384, 1386, 1388, 1390, 1395, 1053 1396, 1398, 1400, 1405, 1406, 1408, 1413, 1414, 1416, 1418, 1054 1423, 1425, 1427, 1432, 1433, 1437, 1439, 1441, 1443, 1445, 1055 1450, 1452, 1457, 1459, 1464, 1465, 1467, 1468, 1473, 1474, 1056 1476, 1478, 1483, 1485, 1491, 1492, 1494, 1497, 1500, 1505, 1057 1506, 1511, 1516, 1520, 1522, 1524, 1529, 1531, 1537, 1538, 1058 1546, 1547, 1551, 1552, 1553, 1555, 1557, 1564, 1565, 1567, 1059 1569, 1574, 1575, 1581, 1582, 1586, 1587, 1592, 1593, 1594, 1060 1596, 1604, 1605, 1607, 1610, 1612, 1616, 1617, 1618, 1620, 1061 1622, 1626, 1631, 1639, 1640, 1649, 1651, 1656, 1657, 1658, 1062 1662, 1663, 1664, 1668, 1669, 1670, 1674, 1675, 1676, 1681, 1063 1682, 1683, 1684, 1690, 1691, 1693, 1698, 1699, 1704, 1705, 1064 1706, 1707, 1708, 1723, 1724, 1729, 1730, 1738, 1740, 1742, 1065 1745, 1747, 1749, 1772, 1773, 1775, 1777, 1782, 1783, 1785, 1066 1790, 1795, 1796, 1802, 1801, 1805, 1809, 1811, 1813, 1819, 1067 1820, 1825, 1830, 1832, 1837, 1839, 1840, 1842, 1847, 1849, 1068 1851, 1856, 1858, 1863, 1868, 1876, 1882, 1881, 1895, 1896, 1069 1901, 1902, 1906, 1911, 1916, 1924, 1929, 1940, 1941, 1952, 1070 1953, 1959, 1960, 1964, 1965, 1966, 1969, 1968, 1979, 1984, 1071 1989, 1995, 2004, 2010, 2016, 2022, 2028, 2036, 2042, 2050, 1072 2056, 2065, 2066, 2067, 2071, 2075, 2077, 2082, 2083, 2087, 1073 2088, 2093, 2099, 2100, 2103, 2105, 2106, 2110, 2111, 2112, 1074 2113, 2147, 2149, 2150, 2152, 2157, 2162, 2167, 2169, 2171, 1075 2176, 2178, 2180, 2182, 2187, 2189, 2199, 2201, 2202, 2207, 1076 2209, 2211, 2216, 2218, 2220, 2225, 2227, 2229, 2238, 2239, 1077 2240, 2244, 2246, 2248, 2253, 2255, 2257, 2262, 2264, 2266, 1078 2281, 2283, 2284, 2286, 2291, 2292, 2297, 2299, 2301, 2306, 1079 2308, 2310, 2312, 2317, 2319, 2321, 2331, 2333, 2334, 2336, 1080 2341, 2343, 2345, 2350, 2352, 2354, 2356, 2361, 2363, 2365, 1081 2396, 2398, 2399, 2401, 2406, 2411, 2419, 2421, 2423, 2428, 1082 2430, 2435, 2437, 2451, 2452, 2454, 2459, 2461, 2463, 2465, 1083 2467, 2472, 2473, 2475, 2477, 2482, 2484, 2486, 2492, 2494, 1084 2496, 2500, 2502, 2504, 2506, 2520, 2521, 2523, 2528, 2530, 1085 2532, 2534, 2536, 2541, 2542, 2544, 2546, 2551, 2553, 2555, 1086 2561, 2562, 2564, 2573, 2576, 2578, 2581, 2583, 2585, 2598, 1087 2599, 2601, 2606, 2608, 2610, 2612, 2614, 2619, 2620, 2622, 1088 2624, 2629, 2631, 2639, 2640, 2641, 2646, 2647, 2651, 2653, 1089 2655, 2657, 2659, 2661, 2668, 2670, 2672, 2674, 2676, 2678, 1090 2680, 2682, 2684, 2686, 2691, 2693, 2695, 2700, 2726, 2727, 1091 2729, 2733, 2734, 2738, 2740, 2742, 2744, 2746, 2748, 2755, 1092 2757, 2759, 2761, 2763, 2765, 2770, 2775, 2777, 2779, 2797, 1093 2799, 2804, 2805 1090 1094 }; 1091 1095 #endif … … 1099 1103 "STATIC", "INLINE", "FORTRAN", "CONST", "VOLATILE", "RESTRICT", "FORALL", 1100 1104 "LVALUE", "VOID", "CHAR", "SHORT", "INT", "LONG", "FLOAT", "DOUBLE", 1101 "SIGNED", "UNSIGNED", " BOOL", "COMPLEX", "IMAGINARY", "TYPEOF", "LABEL",1102 " ENUM", "STRUCT", "UNION", "TYPE", "FTYPE", "DTYPE", "CONTEXT", "SIZEOF",1103 " OFFSETOF", "ATTRIBUTE", "EXTENSION", "IF", "ELSE", "SWITCH", "CASE",1104 " DEFAULT", "DO", "WHILE", "FOR", "BREAK", "CONTINUE", "GOTO", "RETURN",1105 " CHOOSE", "DISABLE", "ENABLE", "FALLTHRU", "TRY", "CATCH", "CATCHRESUME",1106 " FINALLY", "THROW", "THROWRESUME", "AT", "ASM", "ALIGNAS", "ALIGNOF",1107 "A TOMIC", "GENERIC", "NORETURN", "STATICASSERT", "THREADLOCAL",1108 " IDENTIFIER", "QUOTED_IDENTIFIER", "TYPEDEFname", "TYPEGENname",1109 " ATTR_IDENTIFIER", "ATTR_TYPEDEFname", "ATTR_TYPEGENname",1105 "SIGNED", "UNSIGNED", "VALIST", "BOOL", "COMPLEX", "IMAGINARY", "TYPEOF", 1106 "LABEL", "ENUM", "STRUCT", "UNION", "OTYPE", "FTYPE", "DTYPE", "TRAIT", 1107 "SIZEOF", "OFFSETOF", "ATTRIBUTE", "EXTENSION", "IF", "ELSE", "SWITCH", 1108 "CASE", "DEFAULT", "DO", "WHILE", "FOR", "BREAK", "CONTINUE", "GOTO", 1109 "RETURN", "CHOOSE", "DISABLE", "ENABLE", "FALLTHRU", "TRY", "CATCH", 1110 "CATCHRESUME", "FINALLY", "THROW", "THROWRESUME", "AT", "ASM", "ALIGNAS", 1111 "ALIGNOF", "ATOMIC", "GENERIC", "NORETURN", "STATICASSERT", 1112 "THREADLOCAL", "IDENTIFIER", "QUOTED_IDENTIFIER", "TYPEDEFname", 1113 "TYPEGENname", "ATTR_IDENTIFIER", "ATTR_TYPEDEFname", "ATTR_TYPEGENname", 1110 1114 "INTEGERconstant", "FLOATINGconstant", "CHARACTERconstant", 1111 1115 "STRINGliteral", "ZERO", "ONE", "ARROW", "ICR", "DECR", "LS", "RS", "LE", … … 1169 1173 "type_parameter", "$@2", "type_class", "assertion_list_opt", "assertion", 1170 1174 "type_name_list", "type_declaring_list", "type_declarator", 1171 "type_declarator_name", " context_specifier", "$@3",1172 " context_declaration_list", "context_declaration",1173 "new_ context_declaring_list", "context_declaring_list",1174 " translation_unit", "external_definition_list",1175 "external_definition _list_opt", "external_definition", "$@4",1176 " external_function_definition", "function_definition", "declarator",1177 " subrange", "asm_name_opt", "attribute_list_opt", "attribute_list",1178 "attribute ", "attribute_parameter_list", "attrib", "any_word",1179 " variable_declarator", "paren_identifier", "variable_ptr",1180 "variable_ array", "variable_function", "function_declarator",1181 "function_ no_ptr", "function_ptr", "function_array",1182 "old_function_ declarator", "old_function_no_ptr", "old_function_ptr",1183 " old_function_array", "type_redeclarator", "paren_type", "type_ptr",1184 "type_ array", "type_function", "identifier_parameter_declarator",1175 "type_declarator_name", "trait_specifier", "$@3", 1176 "trait_declaration_list", "trait_declaration", 1177 "new_trait_declaring_list", "trait_declaring_list", "translation_unit", 1178 "external_definition_list", "external_definition_list_opt", 1179 "external_definition", "$@4", "external_function_definition", 1180 "function_definition", "declarator", "subrange", "asm_name_opt", 1181 "attribute_list_opt", "attribute_list", "attribute", 1182 "attribute_parameter_list", "attrib", "any_word", "variable_declarator", 1183 "paren_identifier", "variable_ptr", "variable_array", 1184 "variable_function", "function_declarator", "function_no_ptr", 1185 "function_ptr", "function_array", "old_function_declarator", 1186 "old_function_no_ptr", "old_function_ptr", "old_function_array", 1187 "type_redeclarator", "paren_type", "type_ptr", "type_array", 1188 "type_function", "identifier_parameter_declarator", 1185 1189 "identifier_parameter_ptr", "identifier_parameter_array", 1186 1190 "identifier_parameter_function", "type_parameter_redeclarator", … … 1219 1223 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 1220 1224 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 1221 355, 356, 357, 358, 359, 360, 361, 362, 40, 41,1222 91, 93, 46, 123, 125, 44, 58, 33, 42, 38,1223 43, 45, 126, 47, 37, 60, 62, 94, 124, 63,1224 6 1, 591225 355, 356, 357, 358, 359, 360, 361, 362, 363, 40, 1226 41, 91, 93, 46, 123, 125, 44, 58, 33, 42, 1227 38, 43, 45, 126, 47, 37, 60, 62, 94, 124, 1228 63, 61, 59 1225 1229 }; 1226 1230 # endif … … 1229 1233 static const yytype_uint16 yyr1[] = 1230 1234 { 1231 0, 13 2, 133, 134, 135, 135, 135, 136, 136, 136,1232 13 7, 137, 138, 138, 139, 139, 140, 140, 141, 141,1233 14 1, 141, 142, 142, 142, 142, 142, 142, 142, 142,1234 14 2, 142, 142, 143, 143, 144, 144, 144, 144, 144,1235 14 5, 145, 146, 146, 146, 146, 146, 147, 147, 147,1236 14 7, 147, 147, 147, 147, 147, 147, 147, 147, 147,1237 14 7, 147, 147, 147, 147, 148, 148, 148, 148, 149,1238 1 49, 149, 150, 150, 150, 150, 151, 151, 151, 152,1239 15 2, 152, 153, 153, 153, 153, 153, 154, 154, 154,1240 15 5, 155, 156, 156, 157, 157, 158, 158, 159, 159,1241 16 0, 160, 160, 160, 161, 162, 162, 162, 162, 163,1242 16 3, 164, 164, 164, 164, 165, 165, 166, 166, 166,1243 16 6, 166, 166, 166, 166, 166, 166, 167, 167, 168,1244 16 8, 169, 169, 169, 169, 169, 169, 169, 169, 169,1245 17 0, 171, 171, 172, 172, 173, 173, 173, 173, 174,1246 17 4, 175, 176, 176, 176, 176, 176, 176, 177, 177,1247 17 7, 178, 178, 179, 179, 180, 180, 181, 182, 182,1248 18 3, 183, 184, 184, 185, 185, 185, 185, 186, 186,1249 18 7, 187, 188, 188, 188, 189, 189, 190, 190, 190,1250 19 0, 190, 190, 190, 190, 190, 190, 191, 191, 191,1251 19 2, 192, 192, 192, 192, 193, 193, 193, 193, 194,1252 19 5, 195, 195, 195, 195, 196, 196, 196, 196, 196,1253 19 7, 197, 198, 198, 199, 199, 200, 200, 201, 201,1254 20 1, 202, 202, 203, 203, 204, 204, 205, 205, 206,1255 20 6, 207, 207, 208, 208, 209, 209, 210, 210, 211,1256 21 1, 211, 211, 211, 212, 212, 212, 213, 213, 213,1257 21 4, 214, 214, 214, 214, 215, 215, 215, 216, 216,1258 21 7, 217, 217, 218, 218, 218, 218, 218, 219, 219,1259 22 0, 220, 220, 220, 221, 221, 222, 222, 222, 222,1260 22 3, 223, 223, 223, 224, 224, 225, 225, 226, 226,1261 22 7, 227, 227, 227, 227, 228, 227, 229, 229, 229,1262 23 0, 230, 231, 232, 232, 232, 232, 232, 232, 232,1263 23 2, 233, 233, 233, 233, 233, 233, 233, 233, 233,1264 23 3, 233, 233, 234, 234, 234, 234, 234, 235, 235,1265 236, 23 6, 236, 236, 237, 237, 237, 237, 238, 238,1266 23 8, 238, 239, 239, 239, 240, 240, 240, 240, 241,1267 24 1, 241, 242, 242, 243, 243, 243, 243, 243, 244,1268 24 4, 245, 245, 246, 246, 246, 246, 247, 247, 247,1269 24 7, 248, 248, 249, 249, 249, 249, 249, 250, 250,1270 251, 252, 253, 25 3, 253, 254, 254, 255, 255, 256,1271 25 6, 257, 257, 257, 257, 257, 258, 258, 258, 258,1272 259, 2 59, 260, 260, 261, 261, 262, 262, 262, 262,1273 263, 26 3, 263, 263, 263, 264, 264, 264, 264, 264,1274 265, 26 5, 266, 266, 267, 267, 268, 268, 268, 269,1275 2 69, 269, 270, 270, 270, 271, 271, 271, 272, 272,1276 27 2, 272, 273, 273, 273, 274, 274, 275, 275, 275,1277 27 5, 275, 276, 276, 277, 277, 278, 278, 278, 278,1278 27 8, 278, 279, 279, 279, 279, 280, 280, 280, 281,1279 282, 28 2, 284, 283, 283, 285, 285, 285, 286, 286,1280 287, 28 7, 287, 288, 288, 288, 288, 289, 289, 289,1281 290, 29 0, 291, 291, 292, 293, 292, 294, 294, 295,1282 29 5, 296, 296, 296, 297, 297, 298, 298, 299, 299,1283 300, 30 0, 301, 301, 301, 302, 301, 301, 303, 303,1284 30 3, 304, 304, 304, 304, 304, 304, 304, 304, 304,1285 305, 30 5, 305, 306, 307, 307, 308, 308, 309, 309,1286 310, 311, 31 1, 312, 312, 312, 313, 313, 313, 313,1287 314, 31 4, 314, 314, 315, 315, 316, 316, 316, 317,1288 31 7, 317, 317, 318, 318, 319, 319, 319, 320, 320,1289 32 0, 321, 321, 321, 322, 322, 322, 323, 323, 323,1290 324, 32 4, 324, 325, 325, 325, 326, 326, 326, 327,1291 32 7, 327, 327, 328, 328, 329, 329, 329, 330, 330,1292 33 0, 330, 331, 331, 331, 332, 332, 332, 332, 333,1293 33 3, 333, 334, 334, 334, 334, 335, 335, 335, 336,1294 33 6, 336, 336, 337, 337, 338, 338, 338, 339, 339,1295 340, 34 0, 341, 341, 341, 342, 342, 342, 342, 342,1296 343, 34 3, 343, 343, 344, 344, 344, 345, 345, 345,1297 346, 34 6, 346, 346, 347, 347, 347, 348, 348, 348,1298 34 8, 348, 349, 349, 349, 349, 350, 350, 350, 351,1299 35 1, 351, 352, 352, 352, 352, 352, 352, 353, 353,1300 35 3, 354, 354, 354, 354, 354, 355, 355, 355, 355,1301 356, 35 6, 357, 357, 357, 358, 358, 359, 359, 359,1302 3 59, 359, 359, 360, 360, 360, 360, 360, 360, 360,1303 36 0, 360, 360, 361, 361, 361, 361, 362, 362, 362,1304 363, 36 3, 364, 364, 364, 364, 364, 364, 365, 365,1305 36 5, 365, 365, 365, 366, 367, 367, 367, 368, 368,1306 369, 3 691235 0, 133, 134, 135, 136, 136, 136, 137, 137, 137, 1236 138, 138, 139, 139, 140, 140, 141, 141, 142, 142, 1237 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 1238 143, 143, 143, 144, 144, 145, 145, 145, 145, 145, 1239 146, 146, 147, 147, 147, 147, 147, 148, 148, 148, 1240 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 1241 148, 148, 148, 148, 148, 149, 149, 149, 149, 150, 1242 150, 150, 151, 151, 151, 151, 152, 152, 152, 153, 1243 153, 153, 154, 154, 154, 154, 154, 155, 155, 155, 1244 156, 156, 157, 157, 158, 158, 159, 159, 160, 160, 1245 161, 161, 161, 161, 162, 163, 163, 163, 163, 164, 1246 164, 165, 165, 165, 165, 166, 166, 167, 167, 167, 1247 167, 167, 167, 167, 167, 167, 167, 168, 168, 169, 1248 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 1249 171, 172, 172, 173, 173, 174, 174, 174, 174, 175, 1250 175, 176, 177, 177, 177, 177, 177, 177, 178, 178, 1251 178, 179, 179, 180, 180, 181, 181, 182, 183, 183, 1252 184, 184, 185, 185, 186, 186, 186, 186, 187, 187, 1253 188, 188, 189, 189, 189, 190, 190, 191, 191, 191, 1254 191, 191, 191, 191, 191, 191, 191, 192, 192, 192, 1255 193, 193, 193, 193, 193, 194, 194, 194, 194, 195, 1256 196, 196, 196, 196, 196, 197, 197, 197, 197, 197, 1257 198, 198, 199, 199, 200, 200, 201, 201, 202, 202, 1258 202, 203, 203, 204, 204, 205, 205, 206, 206, 207, 1259 207, 208, 208, 209, 209, 210, 210, 211, 211, 212, 1260 212, 212, 212, 212, 213, 213, 213, 214, 214, 214, 1261 215, 215, 215, 215, 215, 216, 216, 216, 217, 217, 1262 218, 218, 218, 219, 219, 219, 219, 219, 220, 220, 1263 221, 221, 221, 221, 222, 222, 223, 223, 223, 223, 1264 224, 224, 224, 224, 225, 225, 226, 226, 227, 227, 1265 228, 228, 228, 228, 228, 229, 228, 230, 230, 230, 1266 231, 231, 232, 233, 233, 233, 233, 233, 233, 233, 1267 233, 234, 234, 234, 234, 234, 234, 234, 234, 234, 1268 234, 234, 234, 234, 235, 235, 235, 235, 235, 236, 1269 236, 237, 237, 237, 237, 238, 238, 238, 238, 239, 1270 239, 239, 239, 240, 240, 240, 241, 241, 241, 241, 1271 242, 242, 242, 243, 243, 244, 244, 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 1307 1311 }; 1308 1312 … … 1343 1347 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1344 1348 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1345 1, 1, 1, 1, 2, 2, 3, 3, 1, 3, 1346 1, 2, 2, 2, 4, 4, 4, 4, 1, 2, 1347 2, 3, 1, 2, 2, 1, 2, 2, 3, 1, 1348 2, 2, 1, 1, 4, 2, 5, 7, 2, 2, 1349 2, 1, 2, 2, 3, 2, 3, 1, 2, 3, 1350 2, 2, 4, 0, 1, 2, 2, 1, 0, 1, 1351 2, 2, 5, 6, 2, 2, 4, 0, 2, 0, 1352 1, 1, 1, 5, 5, 5, 1, 5, 5, 9, 1353 1, 5, 0, 1, 1, 5, 1, 1, 5, 5, 1354 1, 3, 3, 4, 1, 1, 1, 1, 2, 1, 1355 3, 3, 1, 2, 1, 3, 1, 1, 1, 1, 1356 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1357 1, 2, 0, 2, 2, 1, 4, 0, 1, 2, 1358 3, 4, 2, 2, 1, 2, 1, 2, 5, 5, 1359 7, 6, 1, 2, 2, 3, 1, 2, 2, 4, 1360 2, 4, 0, 4, 2, 1, 1, 1, 0, 2, 1361 5, 5, 13, 1, 1, 3, 3, 2, 3, 3, 1362 2, 4, 1, 6, 9, 0, 11, 1, 3, 3, 1363 3, 1, 1, 5, 2, 5, 0, 1, 1, 3, 1364 0, 1, 1, 1, 1, 0, 6, 2, 1, 2, 1365 4, 2, 3, 3, 3, 4, 5, 5, 5, 6, 1366 1, 1, 1, 3, 0, 5, 0, 1, 1, 2, 1367 6, 1, 3, 0, 1, 4, 1, 1, 1, 1, 1349 1, 1, 1, 1, 1, 2, 2, 3, 3, 1, 1350 3, 1, 2, 2, 2, 4, 4, 4, 4, 1, 1351 2, 2, 3, 1, 2, 2, 1, 2, 2, 3, 1352 1, 2, 2, 1, 1, 4, 2, 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, 1368 1376 2, 1, 2, 2, 1, 3, 2, 3, 3, 2, 1369 4, 4, 3, 8, 3, 2, 1, 2, 6, 8, 1370 3, 2, 3, 3, 4, 4, 3, 1, 1, 1, 1371 4, 6, 3, 2, 3, 3, 4, 4, 3, 2, 1372 1, 2, 2, 1, 3, 2, 3, 3, 2, 4, 1373 4, 3, 6, 8, 3, 2, 1, 2, 2, 2, 1374 3, 3, 2, 4, 4, 3, 6, 8, 3, 2, 1375 1, 2, 2, 1, 1, 2, 3, 3, 2, 4, 1376 6, 8, 1, 2, 2, 1, 2, 2, 3, 3, 1377 1, 4, 4, 3, 5, 8, 3, 2, 3, 1, 1378 5, 5, 6, 6, 1, 2, 2, 1, 2, 2, 1379 3, 3, 1, 4, 4, 3, 5, 8, 3, 1, 1380 2, 1, 2, 6, 5, 6, 7, 7, 1, 2, 1381 2, 1, 2, 2, 3, 3, 1, 4, 4, 3, 1382 8, 3, 1, 1, 2, 1, 1, 2, 3, 2, 1383 3, 2, 3, 3, 2, 4, 3, 2, 3, 2, 1384 4, 3, 2, 6, 6, 6, 7, 1, 2, 1, 1385 1, 1, 2, 3, 2, 3, 2, 3, 3, 4, 1386 2, 3, 4, 2, 5, 5, 6, 6, 0, 1, 1387 0, 2 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, 1383 2, 3, 3, 1, 4, 4, 3, 5, 8, 3, 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 1388 1392 }; 1389 1393 … … 1395 1399 294, 294, 315, 313, 316, 314, 317, 318, 300, 302, 1396 1400 301, 0, 303, 329, 321, 326, 324, 325, 323, 322, 1397 327, 328, 33 0, 331, 332, 546, 546, 546, 0, 0,1398 0, 294, 220, 304, 319, 320, 7, 359, 0, 8,1399 14, 15, 0, 2, 294, 564, 9, 524, 522, 247,1400 3, 452, 3, 260, 0, 3, 3, 3, 248, 3,1401 0, 0, 0, 295, 296, 298, 294, 307, 310, 312,1402 3 40, 286, 333, 338, 287, 348, 288, 355, 352, 362,1403 0, 0, 363, 289, 472, 476, 3, 3, 0, 2,1404 518, 523, 528, 299, 0, 0, 546, 576, 546, 2,1405 587, 588, 589, 294, 0, 730, 731, 0, 12, 294,1406 0, 13, 270, 271, 0, 295, 290, 291, 292, 293,1407 525, 305, 391, 547, 548, 369, 370, 12, 443, 444,1408 11, 439, 442, 0, 502, 497, 488, 443, 444, 0,1409 0, 527, 221, 0, 294, 0, 0, 0, 0, 0,1410 0, 0, 0, 294, 294, 2, 0, 732, 295, 581,1411 5 93, 736, 729, 727, 734, 0, 0, 0, 254, 2,1412 0, 531, 437, 438, 436, 0, 0, 0, 0, 546,1413 0, 633, 634, 0, 0, 544, 540, 546, 561, 546,1414 54 6, 541, 2, 542, 546, 600, 546, 546, 603, 0,1415 0, 0, 294, 294, 313, 360, 2, 294, 261, 297,1416 308, 341, 353, 477, 0, 2, 0, 452, 262, 295,1417 334, 349, 356, 473, 0, 2, 0, 311, 335, 342,1418 343, 0, 350, 354, 357, 361, 444, 294, 294, 365,1419 36 8, 0, 394, 474, 478, 0, 0, 0, 1, 294,1420 2, 529, 575, 577, 294, 2, 740, 295, 743, 544,1421 54 4, 295, 0, 0, 0, 273, 546, 541, 2, 294,1422 0, 0, 294, 549, 2, 500, 2, 553, 0, 0,1423 0, 0, 0, 0, 18, 59, 4, 5, 6, 16,1424 0, 0, 0, 294, 2, 0, 294, 65, 66, 67,1425 6 8, 48, 19, 49, 22, 47, 69, 0, 72, 76,1426 7 9, 82, 87, 90, 92, 94, 96, 98, 100, 105,1427 494, 750, 450, 493, 0, 448, 449, 0, 565, 580,1428 58 3, 586, 592, 595, 598, 359, 0, 2, 738, 0,1429 294, 741, 2, 294, 3, 424, 0, 432, 295, 294,1430 307, 333, 287, 348, 355, 3, 3, 406, 410, 420,1431 42 5, 472, 294, 426, 705, 706, 294, 427, 429, 294,1432 2, 582, 594, 728, 2, 2, 249, 2, 457, 0,1433 455, 454, 453, 141, 2, 2, 251, 2, 2, 250,1434 2, 281, 2, 282, 0, 280,0, 0, 0, 0,1435 0, 0, 0, 0, 0, 566, 605, 0, 452, 2,1436 560, 569, 659, 562, 563, 532, 294, 2, 599, 608,1437 60 1, 602, 0, 276, 294, 294, 339, 295, 0, 295,1438 0, 294, 733, 737, 735, 533, 294, 544, 255, 263,1439 309, 0, 2, 534, 294, 498, 336, 337, 283, 351,1440 35 8, 0, 294, 2, 383, 294, 371, 0, 0, 377,1441 727, 294, 748, 397, 0, 475, 499, 252, 253, 519,1442 294, 434, 0, 294, 237, 0, 2, 239, 0, 295,1443 0, 257, 2, 258, 278, 0, 0, 2, 294, 544,1444 294, 485, 487, 486, 0, 0, 750, 0, 294, 0,1445 294, 489, 294, 559, 557, 558, 556, 0, 551, 554,1446 0, 0, 294, 56, 294, 69, 52, 294, 62, 294,1447 294, 50, 51, 64, 2, 127, 0, 0, 446, 0,1448 445, 111, 294, 54, 55, 17, 0, 29, 30, 35,1449 2, 0, 35, 117, 118, 119, 120, 121, 122, 123,1450 12 4, 125, 126, 0, 0, 53, 0, 0, 0, 0,1401 327, 328, 333, 330, 331, 332, 547, 547, 547, 0, 1402 0, 0, 294, 220, 304, 319, 320, 7, 360, 0, 1403 8, 14, 15, 0, 2, 294, 565, 9, 525, 523, 1404 247, 3, 453, 3, 260, 0, 3, 3, 3, 248, 1405 3, 0, 0, 0, 295, 296, 298, 294, 307, 310, 1406 312, 341, 286, 334, 339, 287, 349, 288, 356, 353, 1407 363, 0, 0, 364, 289, 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 294, 0, 13, 270, 271, 0, 295, 290, 291, 292, 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 0, 0, 0, 294, 294, 313, 361, 2, 294, 261, 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 0, 0, 0, 0, 0, 18, 59, 4, 5, 6, 1428 16, 0, 0, 0, 294, 2, 0, 294, 65, 66, 1429 67, 68, 48, 19, 49, 22, 47, 69, 0, 72, 1430 76, 79, 82, 87, 90, 92, 94, 96, 98, 100, 1431 105, 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 250, 2, 281, 2, 282, 0, 280, 0, 0, 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 295, 0, 257, 2, 258, 278, 0, 0, 2, 294, 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 35, 2, 0, 35, 117, 118, 119, 120, 121, 122, 1454 123, 124, 125, 126, 0, 0, 53, 0, 0, 0, 1451 1455 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1452 0, 0, 0, 0, 0, 0, 108, 2, 645, 451,1453 642, 546, 546, 650, 479, 294, 2, 584, 585, 0,1454 596, 597, 0, 2, 739, 742, 111, 294, 2, 294,1455 0, 707, 295, 711, 702, 703, 709, 0, 2, 2,1456 667, 546, 750, 616, 546, 546, 750, 546, 630, 546,1457 54 6, 681, 433, 664, 546, 546, 672, 679, 294, 428,1458 295, 0, 0, 294, 717, 295, 722, 750, 714, 294,1459 719, 750, 294, 294, 294, 0, 111, 0, 18, 5,1460 2, 0, 19, 0, 458, 748, 0, 0, 464, 241,1461 0, 294, 0, 0, 0, 544, 568, 572, 574, 604,1462 60 7, 611, 614, 567, 606, 0, 284, 657, 0, 294,1463 2 77, 0, 0, 0, 0, 275, 2, 0, 259, 535,1464 294, 0, 0, 0, 0, 294, 294, 0, 0, 691,1465 381, 384, 388, 546, 388, 696, 387, 688, 546, 546,1466 364, 372, 380, 373, 546, 375, 378, 294, 749,0,1467 0, 395, 748, 295, 3, 413, 3, 417, 416, 590,1468 0, 530, 294, 3, 3, 294, 432, 295, 3, 426,1469 427, 2, 0, 0, 0, 484, 306, 294, 480, 482,1470 3, 2, 2, 0, 501, 3, 0, 553, 129, 0,1471 0, 222, 0, 0, 0, 2, 0, 0, 36, 0,1472 0, 111, 294, 20, 0, 21, 0, 691, 447, 0,1473 109, 3, 2, 27, 2, 0, 33, 0, 2, 25,1474 0, 106, 107, 73, 74, 75, 77, 78, 80, 81,1475 8 5, 86, 83, 84, 88, 89, 91, 93, 95, 97,1476 9 9, 0, 0, 751, 294, 0, 0, 0, 646, 647,1477 64 3, 644, 496, 495, 294, 0, 3, 294, 713, 294,1478 718, 295, 294, 294, 294, 661, 704, 660, 2, 294,1479 0, 0, 0, 0, 0, 0, 0, 0, 682, 0,1480 668, 619, 635, 669, 2, 615, 622, 430, 617, 618,1481 431, 2, 629, 638, 631, 632, 665, 666, 680, 708,1482 7 12, 710, 750, 268, 2, 744, 2, 421, 716, 721,1483 422, 0, 400, 3, 3, 3, 3, 452, 3, 0,1484 2, 467, 463, 749, 0, 459, 466, 2, 462, 465,1485 0, 294, 242, 264, 3, 272, 274, 0, 452, 2,1486 570, 571, 2, 609, 610, 0, 658, 536, 3, 345,1487 34 4, 347, 346, 294, 537, 0, 538, 294, 374, 376,1488 2, 0, 0, 0, 0, 104, 390, 692, 693, 385,1489 38 9, 386, 689, 690, 379, 383, 366, 397, 392, 398,1490 0, 0, 0, 435, 240, 0, 0, 3, 2, 667,1491 428, 0, 526, 0, 750, 488, 0, 294, 294, 294,1492 0, 550, 552, 130, 0, 0, 215, 0, 0, 0,1493 223, 224, 57, 0, 63, 294, 0, 61, 60,0,1494 128, 692, 457, 70, 71, 110, 115, 3, 109, 0,1495 0, 0, 24, 35, 3, 0, 32, 102, 0, 3,1496 649, 653, 656, 648, 3, 591, 3, 715, 720, 2,1497 294, 3, 3, 295, 0, 3, 621, 625, 628, 637,1498 6 71, 675, 678, 294, 3, 620, 636, 670, 294, 294,1499 423, 294, 294, 745, 0, 0, 0, 0, 256, 0,1500 104, 0, 3, 3, 0, 460, 0, 456, 0, 0,1501 245, 294, 0, 0, 129, 0, 0, 0, 0, 0,1502 129, 0, 0, 109, 109, 2, 0, 0, 0, 3,1503 131, 132, 2, 143, 133, 134, 135, 136, 137, 138,1504 1 45, 147, 0, 0, 0, 285, 294, 294, 546, 0,1505 539, 294, 111, 695, 699, 701, 694, 382, 396, 393,1506 578, 2, 663, 662, 0, 668, 2, 481, 483, 503,1507 3, 511, 512, 0, 2, 507, 3, 3, 0, 0,1508 555, 222, 0, 0, 0, 222, 0, 0, 3, 37,1509 748, 109, 0, 3, 660, 42, 3, 40, 3, 34,1510 0, 3, 101, 103, 0, 2, 651, 652, 0, 0,1511 294, 0, 0, 0, 3, 637, 0, 2, 623, 624,1512 2, 639, 2, 673, 674, 0, 0, 3, 0, 3,1513 3, 3, 3, 408, 407, 411, 2, 2, 747, 746,1514 112, 0, 0, 0, 0, 3, 461, 3, 0, 243,1515 146, 3, 295, 294, 0, 0, 0, 0, 2, 191,1516 0, 189, 0, 0, 0, 0, 0, 0, 0, 0,1517 111, 0, 546, 151, 148, 294, 0, 0, 267, 279,1518 3, 3, 545, 612, 367, 2, 697, 698, 294, 266,1519 2 94, 0, 514, 491, 294, 0, 0, 490, 505, 0,1520 0, 0, 216, 0, 225, 58, 109, 0, 0, 116,1521 11 3, 0, 0, 0, 0, 0, 0, 23, 0, 654,1522 294, 579, 265, 723, 724, 725, 0, 676, 294, 294,1523 294, 3, 3, 0, 684, 0, 0, 0, 0, 294,1524 294, 3, 543, 468, 469, 0, 0, 246, 295, 0,1525 0, 0, 0, 294, 192, 190, 0, 187, 193, 0,1526 0, 0, 0, 197, 200, 198, 194, 0, 195, 35,1527 129, 144, 142, 244, 0, 0, 294, 415, 419, 418,1528 0, 508, 2, 509, 2, 510, 504, 294, 228, 0,1529 226, 0, 228, 3, 660, 31, 114, 2, 45, 2,1530 43, 41, 28, 112, 26, 3, 726, 3, 3, 3,1531 0, 0, 683, 685, 626, 640, 269, 2, 405, 3,1532 404, 0, 471, 468, 129, 0, 0, 129, 3, 0,1533 129, 188, 0, 2, 2, 209, 199, 0, 0, 0,1534 0, 140, 573, 613, 3, 2, 0, 0, 2, 229,1535 0, 0, 217, 0, 0, 0, 0, 0, 0, 0,1536 0, 0, 686, 687, 294, 0, 470, 152, 0, 0,1537 2, 165, 129, 154, 0, 182, 0, 129, 0, 2,1538 156, 0, 2, 0, 2, 2, 2, 196, 32, 0,1539 294, 513, 515, 506, 0, 0, 0, 0, 114, 38,1540 3, 3, 655, 627, 641, 677, 409, 129, 158, 161,1541 0, 160, 164, 3, 167, 166, 0, 129, 184, 129,1542 3, 0, 294, 0, 294, 0, 2, 0, 2, 139,1543 700, 2, 230, 231, 0, 227, 218, 0, 0, 0,1544 153, 0, 0, 163, 233, 168, 2, 235, 183, 0,1545 186, 172, 201, 3, 210, 214, 203, 3, 0, 294,1546 0, 294, 0, 0, 0, 39, 46, 44, 159, 162,1547 1 29, 0, 169, 294, 129, 129, 0, 173, 0, 0,1548 691, 211, 212, 213, 0, 202, 3, 204, 3, 294,1549 2 19, 232, 149, 170, 155, 129, 236, 185, 180, 178,1550 17 4, 157, 129, 0, 692, 0, 0, 0, 0, 150,1551 1 71, 181, 175, 179, 178, 176, 3, 3, 0, 0,1552 492, 177, 205, 207, 3, 3, 206, 2081456 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 294, 277, 0, 0, 0, 0, 275, 2, 0, 259, 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 0, 0, 222, 0, 0, 0, 2, 0, 0, 36, 1476 0, 0, 111, 294, 20, 0, 21, 0, 692, 448, 1477 0, 109, 3, 2, 27, 2, 0, 33, 0, 2, 1478 25, 0, 106, 107, 73, 74, 75, 77, 78, 80, 1479 81, 85, 86, 83, 84, 88, 89, 91, 93, 95, 1480 97, 99, 0, 0, 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 0, 223, 224, 57, 0, 63, 294, 0, 61, 60, 1498 0, 128, 693, 458, 70, 71, 110, 115, 3, 109, 1499 0, 0, 0, 24, 35, 3, 0, 32, 102, 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 0, 245, 294, 0, 0, 129, 0, 0, 0, 0, 1506 0, 129, 0, 0, 109, 109, 2, 0, 0, 0, 1507 3, 131, 132, 2, 143, 133, 134, 135, 136, 137, 1508 138, 145, 147, 0, 0, 0, 285, 294, 294, 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 1553 1557 }; 1554 1558 … … 1556 1560 static const yytype_int16 yydefgoto[] = 1557 1561 { 1558 -1, 8 39, 474, 301, 45, 131, 132, 302, 303, 304,1559 30 5, 785, 786, 1146, 1147, 306, 307, 308, 309, 310,1560 31 1, 312, 313, 314, 315, 316, 317, 318, 319, 1051,1561 52 5, 996, 321, 997, 554, 973, 1078, 1542, 1080, 1081,1562 108 2, 1083, 1543, 1084, 1085, 1459, 1460, 1421, 1422, 1423,1563 152 1, 1522, 1526, 1527, 1562, 1563, 1086, 1379, 1087, 1088,1564 131 3, 1314, 1315, 1503, 1089, 143, 979, 980, 981, 1400,1565 148 4, 1495, 1496, 475, 476, 901, 902, 1059, 48, 49,1566 5 0, 51, 52, 345, 156, 55, 56, 57, 58, 59,1567 34 7, 61, 62, 261, 64, 65, 272, 349, 350, 68,1568 69, 70, 71, 116, 73, 202, 352, 117, 76, 118,1569 7 8, 79, 80, 455, 456, 457, 458, 700, 939, 701,1570 8 1, 82, 462, 721, 881, 882, 355, 356, 724, 725,1571 72 6, 357, 358, 359, 360, 472, 339, 133, 134, 529,1572 32 3, 168, 654, 655, 656, 657, 658, 83, 119, 85,1573 49 5, 496, 965, 497, 275, 501, 324, 86, 135, 136,1574 8 7, 1337, 1124, 1125, 1126, 1127, 88, 89, 742, 90,1575 27 1, 91, 92, 185, 1053, 688, 410, 123, 93, 507,1576 50 8, 509, 186, 266, 188, 189, 190, 267, 96, 97,1577 9 8, 99, 100, 101, 102, 193, 194, 195, 196, 197,1578 85 1, 613, 614, 615, 616, 198, 618, 619, 620, 579,1579 58 0, 581, 582, 705, 103, 622, 623, 624, 625, 626,1580 62 7, 938, 707, 708, 709, 603, 363, 364, 365, 366,1581 32 5, 162, 105, 106, 107, 368, 719, 5761562 -1, 840, 475, 302, 46, 132, 133, 303, 304, 305, 1563 306, 786, 787, 1147, 1148, 307, 308, 309, 310, 311, 1564 312, 313, 314, 315, 316, 317, 318, 319, 320, 1052, 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, 1570 51, 52, 53, 346, 157, 56, 57, 58, 59, 60, 1571 348, 62, 63, 262, 65, 66, 273, 350, 351, 69, 1572 70, 71, 72, 117, 74, 203, 353, 118, 77, 119, 1573 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 1582 1586 }; 1583 1587 1584 1588 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing 1585 1589 STATE-NUM. */ 1586 #define YYPACT_NINF -1 2811590 #define YYPACT_NINF -1356 1587 1591 static const yytype_int16 yypact[] = 1588 1592 { 1589 3705, 8889, -1281, 104, -1281, -1281, -1281, -1281, -1281, -1281,1590 -1 281, 44, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,1591 -1 281, -1281, -1281, -1281, -1281, 155, 155, 155, 1205, 815,1592 110, 6006, 222, -1281, -1281, -1281, -1281, -1281, 130, -1281,1593 -1 281, -1281, 1267, 189, 3199, -1281, -1281, -1281, -1281, -1281,1594 -1 281, 31, 144, -1281, 1338, -1281, -1281, -1281, -1281, 153,1595 1410, 279, 82, 7674, -1281, -1281, 8086, 1234, -1281, -1281,1596 -1 281, 981, 359, 7231, 925, 669, 981, 1012, -1281, -1281,1597 738, 575, -1281, 981, 1119, -1281, 242, -1281, 416, 419,1598 -1281, -1281, -1281, -1281, 277, 144, 155, -1281, 155, -1281,1599 -1 281, -1281, -1281, 9536, 1338, -1281, -1281, 1338, -1281, 9574,1600 321, -1281, -1281, -1281, 2195, 9607, -1281, 565, 565, 565,1601 -1281, -1281, -1281, 155, -1281, -1281, -1281, 280, 366, 418,1602 -1281, -1281, -1281, 425, -1281, -1281, -1281, -1281, -1281, 443,1603 4 75, -1281, -1281, 120, 8972, 3739, 375, 387, 486, 496,1604 514, 527, 541, 8273, 7081, 550, 568, -1281, 9460, -1281,1605 -1 281, -1281, -1281, 602, -1281, 121, 4456, 4456, -1281, 552,1606 298, -1281, -1281, -1281, -1281, 634, 302, 306, 327, 155,1607 590, -1281, -1281, 1410, 2454, 696, -1281, 90, -1281, 155,1608 1 55, 144, -1281, -1281, 124, -1281, 155, 155, -1281, 2638,1609 658, 667, 565, 6993, -1281, -1281, 678, 3199, -1281, -1281,1610 981, -1281, -1281, -1281, 144, -1281, 1338, 31, -1281, 8010,1611 -1281, 565, 565, 565, 144, -1281, 1205, -1281, 5198, -1281,1612 -1 281, 673, 565, -1281, 565, -1281, 130, 8972, 9002, 686,1613 -1281, 815, 694, 565, -1281, 1205, 728, 736, -1281, 6006,1614 544, -1281, -1281, -1281, 9431, -1281, -1281, 3957, -1281, 696,1615 79, 9607, 6464, 2195, 2638, -1281, 157, -1281, -1281, 9574,1616 1338, 717, 7703, -1281, -1281, 699, -1281, 10744, 783, 831,1617 3925, 787, 6306, 10567, -1281, 827, -1281, -1281, -1281, -1281,1618 10625, 10625, 544, 8633, 829, 6306, 9085, -1281, -1281, -1281,1619 -1 281, -1281, -1281, 862, -1281, 1121, 2197, 6306, -1281, 599,1620 388, 472, 354, 593, 830, 867, 873, 970, 245, -1281,1621 -1 281, 874, 650, -1281, 325, -1281, -1281, 3739, -1281, -1281,1622 585, 901, -1281, 747, 901, 958, 130, -1281, -1281, 962,1623 9536, -1281, 977, 8746, -1281, -1281, 957, 935, 8355, 6993,1624 981, -1281, 981, 565, 565, -1281, -1281, -1281, -1281, -1281,1625 -1 281, 565, 9645, 1338, -1281, -1281, 9683, 1067, -1281, 9123,1626 -1281, -1281, -1281, -1281, -1281, -1281, -1281, 990, 5315, 6306,1627 -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,1628 -1 281, -1281, -1281, -1281, 2195, -1281, 846, 996, 998, 1002,1629 864, 1005, 1008, 1026, 2454, -1281, -1281, 1031, 31, 1033,1630 -1281, -1281, 1061, -1281, -1281, -1281, 9431, -1281, -1281, -1281,1631 -1 281, -1281, 2638, -1281, 8972, 8972, -1281, 565, 2195, 7112,1632 1338, 8426, -1281, -1281, -1281, -1281, 9431, 79, -1281, -1281,1633 981, 144, -1281, -1281, 9431, -1281, 6877, -1281, -1281, 565,1634 565, 376, 9716, 1035, 1868, 2111, -1281, 334, 338, 815,1635 -1281, 9002, 1059, 1047, 815, 565, -1281, -1281, -1281, -1281,1636 9940, -1281, 583, 6755, -1281, 144, 1065, -1281, 2195, 10825,1637 1 0471, -1281, -1281, -1281, -1281, 889, 2638, -1281, 8497, 696,1638 7558, -1281, -1281, -1281, 1286, 636, 874, 815, 7703, 868,1639 9574, -1281, 7703, -1281, -1281, -1281, -1281, 638, -1281, 1073,1640 831, 207, 8633, -1281, 9716, -1281, -1281, 8633, -1281, 8859,1641 8 633, -1281, -1281, -1281, 1071, -1281, 681, 1077, 668, 1078,1642 -1281, 4381, 6724, -1281, -1281, -1281, 328, -1281, -1281, 10490,1643 -1281, 385, 10490, -1281, -1281, -1281, -1281, -1281, -1281, -1281,1644 -1 281, -1281, -1281, 6464, 6464, -1281, 6306, 6306, 6306, 6306,1645 6306, 6306, 6306, 6306, 6306, 6306, 6306, 6306, 6306, 6306,1646 6306, 6306, 6306, 6306, 4789, 6464, -1281, 650, 1062, -1281,1647 -1 281, 155, 155, -1281, -1281, 8972, -1281, -1281, 1061, 544,1648 -1281, 1061, 10548, -1281, -1281, -1281, 5232, 6724, 1079, 9198,1649 1080, -1281, 9754, -1281, -1281, 602, -1281, 1082, 1185, 1084,1650 1 899, 185, 874, -1281, 155, 155, 874, 233, -1281, 155,1651 1 55, 1061, -1281, -1281, 155, 155, -1281, 901, 9792, 1338,1652 10968, 234, 509, 9792, -1281, 5821, -1281, 874, -1281, 9645,1653 -1281, 293, 5525, 5525, 5525, 1338, -1281, 5054, 1072, 558,1654 990, 1016, 1083, 1086, -1281, 1074, 4456, 592, -1281, 1172,1655 1 338, 5525, 544, 2195, 544, 696, 809, 901, -1281, -1281,1656 814, 901, -1281, -1281, -1281, 831, -1281, 901, 144, 9940,1657 -1281, 682, 1095, 691, 1099, -1281, 1098, 144, -1281, -1281,1658 9431, 144, 1103, 362, 407, 9825, 7200, 1999, 6306, 1917,1659 -1281, -1281, 1101, 94, 1101, -1281, -1281, -1281, 155, 155,1660 -1281, -1281, 815, -1281, 155, -1281, -1281, 3122, 815, 1107,1661 6306, -1281, 1059, 10968, -1281, -1281, 1102, -1281, -1281, -1281,1662 544, -1281, 10897, 6306, -1281, 5525, 675, 8355, -1281, -1281,1663 602, 1108, 1109, 1286, 3745, -1281, -1281, 7703, -1281, -1281,1664 1111, -1281, -1281, 1116, -1281, 1111, 1128, 10744, 6464, 146,1665 1113, 53, 1136, 1115, 1137, 829, 1131, 1139, -1281, 1142,1666 11 43, 1696, 6843, -1281, 6464, -1281, 668, 1691, -1281, 6022,1667 6 464, 1138, -1281, -1281, 990, 708, -1281, 6464, -1281, -1281,1668 727, -1281, -1281, -1281, -1281, -1281, 599, 599, 388, 388,1669 472, 472, 472, 472, 354, 354, 593, 830, 867, 873,1670 970, 6306, 755, -1281, 9940, 1148, 1149, 1152, 1062, -1281,1671 -1 281, -1281, -1281, -1281, 9940, 713, 6306, 5525, -1281, 9645,1672 -1281, 7319, 9311, 9236, 7081, -1281, -1281, -1281, 1185, 9940,1673 951, 1160, 1163, 1165, 1166, 1175, 1176, 1182, -1281, 3532,1674 1899, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,1675 -1 281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, 1061, -1281,1676 -1 281, -1281, 874, -1281, -1281, -1281, -1281, -1281, -1281, -1281,1677 -1 281, 1183, -1281, 1187, 1189, -1281, -1281, 31, 1138, 5054,1678 -1281, -1281, -1281, 5315, 1180, -1281, -1281, -1281, -1281, -1281,1679 815, 6243, 1272, -1281, -1281, -1281, -1281, 1188, 31, -1281,1680 -1 281, 1061, -1281, -1281, 1061, 70, 1061, -1281, -1281, -1281,1681 -1 281, -1281, -1281, 9498, -1281, 144, -1281, 9002, -1281, -1281,1682 1201, 818, 1208, 1212, 1213, -1281, -1281, 1917, -1281, -1281,1683 -1 281, -1281, -1281, -1281, -1281, 1868, -1281, 1047, -1281, -1281,1684 1210, 1216, 1211, -1281, -1281, 1218, 1223, -1281, 675, 1777,1685 -1281, 562, -1281, 3745, 874, -1281, 1226, 7703, 9863, 8972,1686 1230, -1281, -1281, 1225, 1235, 1238, -1281, 6306, 252, 40,1687 1231, -1281, 1242, 544, 1242, 6724, 6464, -1281, -1281, 1242,1688 -1281, 1691, 5315, -1281, -1281, -1281, -1281, 1236, 6464, 1245,1689 544, 5054, -1281, 10490, -1281, 544, -1281, -1281, 6464, -1281,1690 850, 901, -1281, -1281, -1281, -1281, -1281, -1281, -1281, 990,1691 8746, -1281, -1281, 7438, 1249, -1281, 856, 901, -1281, 872,1692 904, 901, -1281, 565, 4646, -1281, -1281, -1281, 9940, 9940,1693 -1281, 8426, 8426, -1281, 1252, 1255, 1264, 1271, -1281, 1253,1694 594, 247, 1138, -1281, 544, -1281, 4456, -1281, 6464, 459,1695 -1281, 6603, 1274, 1279, 10343, 1281, 1283, 301, 308, 344,1696 6464, 1285, 144, 6464, 6464, 1284, 498, 1282, 1268, -1281,1697 -1 281, -1281, 1289, -1281, -1281, -1281, -1281, -1281, -1281, -1281,1698 -1 281, -1281, 815, 1296, 6464, -1281, 9940, 9940, 155, 1301,1699 -1281, 9349, 4935, 934, 901, -1281, -1281, -1281, -1281, -1281,1700 -1 281, -1281, -1281, -1281, 1305, 1777, -1281, -1281, 1290, -1281,1701 1111, -1281, -1281, 2195, 1309, -1281, -1281, -1281, 734, 1312,1702 -1281, 53, 1317, 6306, 1303, 53, 53, 1327, 1323, -1281,1703 1074, 6464, 1328, 1236, 1036, 113, 1326, -1281, 1323, -1281,1704 1331, 1326, -1281, -1281, 1337, -1281, -1281, 1061, 1340, 1343,1705 6962, 1342, 1344, 1350, -1281, -1281, 1353, -1281, -1281, 1061,1706 -1281, -1281, -1281, -1281, 1061, 6464, 6464, 6306, 1355, -1281,1707 -1 281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,1708 -1 281, 6306, 6306, 1356, 1357, 1326, -1281, -1281, 815, -1281,1709 -1 281, -1281, 7939, 9863, 6464, 6464, 1423, 6464, -1281, -1281,1710 1341, -1281, 1345, 6464, 1347, 1358, 6464, 1097, 1360, 74,1711 8776, 1197, 155, -1281, -1281, 6243, 1361, 467, -1281, -1281,1712 -1 281, -1281, -1281, -1281, -1281, -1281, -1281, 1061, 10467, -1281,1713 8497, 1362, -1281, -1281, 9863, 482, 494, -1281, 1372, 1383,1714 831, 1394, -1281, 66, -1281, -1281, 6464, 1395, 1393, -1281,1715 -1 281, 1399, 430, 657, 544, 1400, 1401, -1281, 1406, -1281,1716 9940, -1281, -1281, -1281, -1281, -1281, 1412, -1281, 9940, 9940,1717 9940, -1281, -1281, 1413, -1281, 1415, 1425, 1427, 623, 8125,1718 8 240, -1281, -1281, 278, -1281, 1426, 1429, -1281, 8568, 745,1719 7 59, 1430, 769, 6445, -1281, -1281, 502, -1281, -1281, 770,1720 1434, 1436, 144, 1487, 911, -1281, -1281, 6464, -1281, 10490,1721 10 343, -1281, -1281, -1281, 1442, 1444, 9940, -1281, -1281, -1281,1722 1437, -1281, -1281, -1281, -1281, -1281, -1281, 9863, 831, 269,1723 -1281, 1424, 831, 1236, 373, -1281, -1281, -1281, -1281, -1281,1724 -1 281, -1281, -1281, 1443, -1281, -1281, -1281, -1281, -1281, -1281,1725 1452, 1454, -1281, -1281, -1281, -1281, -1281, -1281, -1281, 1458,1726 -1281, 1457, -1281, -1281, 10343, 148, 6464, 10343, -1281, 1462,1727 6464, -1281, 171, 1484, 1486, -1281, -1281, 1465, 1476, 1455,1728 905, -1281, -1281, -1281, -1281, -1281, 1338, 2195, 1471, 862,1729 918, 6306, -1281, 772, 1477, 6464, 544, 544, 1480, 1482,1730 14 83, 1485, -1281, -1281, 8426, 1472, -1281, 1555, 6306, 1493,1731 -1281, -1281, 10254, -1281, 790, -1281, 1467, 10343, 1468, -1281,1732 -1 281, 1511, -1281, 1513, -1281, 1507, 1529, -1281, 1496, 1519,1733 9863, -1281, -1281, -1281, 831, 544, 1520, 1499, 1515, -1281,1734 1326, 1326, -1281, -1281, -1281, -1281, -1281, 10343, 258, -1281,1735 922, -1281, -1281, 7790, -1281, -1281, 1501, 6464, -1281, 6464,1736 7790, 144, 9716, 144, 9716, 1528, -1281, 1530, -1281, -1281,1737 -1 281, 1524, 862, -1281, 794, -1281, -1281, 6464, 1540, 1542,1738 -1281, 6306, 6306, -1281, -1281, 1051, 133, -1281, -1281, 1510,1739 -1281, 1051, -1281, -1281, 2099, 544, -1281, -1281, 144, 9716,1740 144, 9716, 1546, 1525, 544, -1281, -1281, -1281, -1281, -1281,1741 10254, 1541, 1051, 7866, 6464, 10165, 1543, 1051, 1551, 2099,1742 2338, -1281, -1281, -1281, 1552, -1281, -1281, -1281, -1281, 8972,1743 -1281, -1281, -1281, 10072, -1281, 10254, -1281, -1281, 1531, 9979,1744 -1281, -1281, 10165, 144, 2338, 144, 1557, 1559, 795, -1281,1745 10072, -1281, -1281, -1281, 9979, -1281, -1281, -1281, 144, 144,1746 -1281, -1281, -1281, -1281, -1281, -1281, -1281, -12811593 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 1747 1751 }; 1748 1752 … … 1750 1754 static const yytype_int16 yypgoto[] = 1751 1755 { 1752 -1 281, 4254, 1590, -1281, 1409, -1281, 52, 0, -229, -1281,1753 59 6, -527, -497, -931, -99, 4508, -1281, 358, 609, 563,1754 518, 591, 1104, 1105, 1110, 1117, 1112, -1281, 613, -339,1755 5346, -893, -690, -919, -1281, 401, -634, 444, -1281, 753,1756 -1 281, 449, -1224, -1281, -1281, 191, -1281, -1265, -724, 305,1757 -1 281, -1281, -1281, -1281, 129, -1170, -1281, -1281, -1281, -1281,1758 -1 281, -1281, 382, -1175, 71, -1281, -381, -1281, 560, 356,1759 -1 281, 229, -1281, -338, -1281, -1281, -1281, 632, -691, -1281,1760 -1 281, 11, -1000, 10, 2865, -1281, -1281, -1281, -125, -1281,1761 275, 363, -194, 1416, 4157, -1281, -1281, 24, 25, 374,1762 -2 02, 1621, -1281, 2138, -1281, -1281, 112, 2165, -1281, 2832,1763 139, -1281, -1281, -416, -434, 1276, 1278, 786, 1028, 400,1764 -1 281, -1281, 1269, 793, -513, -1281, -522, -57, -636, -1281,1765 -1 281, -959, -994, 122, 819, 1153, 135, -1281, 1441, 296,1766 -2 99, -212, -109, 749, 844, -1281, 1087, -1281, 2859, 1478,1767 -4 62, 1000, -1281, -1281, 778, -1281, -233, -1281, -72, -1281,1768 -1 281, -1281, -1232, 504, -1281, -1281, -1281, 1259, -1281, 68,1769 -1 281, -1281, -850, -96, -1280, -93, 1665, -1281, 2401, -1281,1770 9 93, -1281, -164, 689, -177, -176, -170, 2, -39, -33,1771 - 28, 1052, 48, 75, 93, -100, -167, -166, -153, -148,1772 -277, -5 69, -500, -490, -543, -300, -514, -1281, -1281, -506,1773 11 74, 1177, 1181, 2149, 5126, -572, -549, -544, -523, -484,1774 -1 281, -427, -665, -663, -660, -602, -320, -271, -1281, -1281,1775 102, 140, -84, -1281, 3728, 128, -603, -4471756 -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 1776 1780 }; 1777 1781 … … 1779 1783 positive, shift that token. If negative, reduce the rule which 1780 1784 number is the opposite. If YYTABLE_NINF, syntax error. */ 1781 #define YYTABLE_NINF -52 21785 #define YYTABLE_NINF -523 1782 1786 static const yytype_int16 yytable[] = 1783 1787 { 1784 46, 111, 95, 147, 451, 438, 397, 398, 426, 148, 1785 53, 113, 112, 399, 149, 790, 400, 401, 265, 258, 1786 405, 711, 767, 604, 66, 67, 870, 706, 111, 111, 1787 402, 46, 932, 95, 933, 403, 750, 934, 853, 841, 1788 755, 53, 46, 918, 46, 717, 159, 617, 1185, 748, 1789 511, 1091, 894, 110, 46, 66, 67, 381, 382, 845, 1790 46, 1201, 191, 46, 846, 214, 46, 852, 224, 341, 1791 612, 47, 819, 208, 1151, 504, 218, 217, 678, 1143, 1792 111, 111, 1183, 1184, 406, 847, 397, 398, 210, 994, 1793 150, 636, 408, 399, 844, 640, 400, 401, 687, 141, 1794 405, 778, 47, 423, 46, 1398, 691, 46, 842, 200, 1795 402, 932, 74, 933, 46, 403, 934, 151, 843, 950, 1796 883, 883, 883, 1195, 974, 682, 684, 856, 30, 477, 1797 885, 886, 30, 863, 289, 152, 1317, 166, 1461, 883, 1798 104, 104, 407, 74, 147, 46, 161, 159, 904, 1134, 1799 148, 535, 121, 46, 445, 149, 1135, 1465, 46, 201, 1800 371, 167, 30, 977, 406, 857, 481, 483, 739, 860, 1801 278, 104, 164, 466, 841, 1341, -234, -234, 1009, 1098, 1802 1218, 1219, 1342, 46, 46, 120, 159, 482, 1014, 175, 1803 877, 1418, 1419, 30, 880, 30, 676, 1262, 250, 46, 1804 409, 754, 212, 1025, 409, 1318, 104, 46, 1481, 159, 1805 1090, 161, 1461, 883, 1418, 1419, 46, 745, 140, 46, 1806 769, 441, 957, 30, 147, 1263, 111, 535, 279, 439, 1807 148, 150, 417, 142, 409, 149, 375, 164, 144, 259, 1808 673, 111, 260, 842, 440, 111, 1185, -234, 1259, 46, 1809 111, 95, 376, 843, 212, 1465, 595, 169, 151, 53, 1810 1465, 1420, 975, 46, 46, 487, 159, 409, 179, 841, 1811 46, 30, 326, 66, 67, 60, 152, 46, 1037, 604, 1812 1465, 759, 199, 711, 1429, 341, 823, 1465, 535, 845, 1813 702, 477, 111, 854, 846, 609, 1185, 212, 665, 1507, 1814 153, 1549, 471, 1201, 674, 883, 60, 1036, 604, 433, 1815 617, 477, 1013, 604, 1016, 847, 760, 469, 1153, 477, 1816 47, 1560, 673, 761, 1024, 830, 680, 46, 1564, 371, 1817 1183, 1184, 685, 535, 1536, 434, 1538, 1343, 842, 573, 1818 459, 861, 1191, 609, 523, 873, 46, 46, 843, 874, 1819 535, 437, 925, 1491, 704, 1550, 856, 245, 212, 936, 1820 1133, 74, -290, 46, 114, 326, 74, 46, 879, 1192, 1821 1200, 433, 108, 210, 574, 1091, 739, 1401, 652, 108, 1822 1192, 949, 1565, 40, 41, 250, 674, 853, -10, 104, 1823 40, 41, -112, -112, 46, 530, 212, 434, 161, 108, 1824 212, 482, 1180, 1181, 46, 489, 371, 157, -112, 845, 1825 40, 41, 506, 385, 846, 108, 248, 388, 870, -517, 1826 1185, 390, 46, 575, 164, 1040, 40, 41, 46, 386, 1827 46, 738, 1209, 389, 584, 847, 1215, 391, 782, 1211, 1828 585, 227, 392, 563, 564, 228, 915, 341, 232, 712, 1829 234, 262, 739, 714, 46, 1456, 108, 243, 393, 111, 1830 1230, 1231, 1213, 1201, 111, 713, 256, 40, 41, 715, 1831 1201, 606, 157, 111, -440, 1450, 1451, 712, 46, 565, 1832 566, 175, -112, 250, 328, 692, 46, 212, 371, 1405, 1833 46, 585, 95, 928, 46, 788, 329, 111, 637, 111, 1834 53, 108, 641, -112, 210, 1120, 1149, 322, 559, 560, 1835 1106, 1101, 40, 41, 66, 67, 338, 1117, 706, 652, 1836 397, 398, 714, 1201, 60, 110, -441, 399, 74, 478, 1837 400, 401, 978, 274, 1090, 405, 111, 1258, 929, 652, 1838 1347, 111, 652, 1037, 402, 1171, 1173, 895, 74, 403, 1839 617, 276, 326, 326, 459, 504, 74, 459, 1018, 561, 1840 562, 47, 830, 459, 1106, 477, 428, 906, 212, 284, 1841 432, 766, 908, 1035, 1198, 8, 9, 10, 11, 12, 1842 40, 41, 1198, 277, 227, 884, 884, 884, 783, 111, 1843 1199, 766, 727, 789, 766, 330, 46, 1332, 1323, 406, 1844 322, 454, 74, 30, 884, 331, 520, 954, 46, 1334, 1845 46, 341, 1380, 1333, 530, 108, 530, 774, 212, 530, 1846 875, 832, 530, 332, 876, 1335, 40, 41, 326, 46, 1847 104, 33, 432, 1381, 1355, 494, 333, -466, 1132, 738, 1848 516, 471, 1357, 1358, 1359, 46, 108, 326, 137, 138, 1849 334, 111, 830, 533, 534, 440, 528, 40, 41, 157, 1850 46, 369, 111, 46, 111, 555, 383, 711, -466, 1378, 1851 -466, 896, -291, 875, -466, 1048, 370, 1116, 884, 8, 1852 9, 10, 11, 12, 567, 568, 1035, 341, 241, 94, 1853 1394, 478, 729, 586, 526, 409, 1095, 46, 730, 46, 1854 604, 534, 897, 594, 651, -105, 601, 30, 898, -105, 1855 374, 478, 111, 326, 905, 738, 907, 556, 111, 478, 1856 94, 395, 557, 558, 227, 634, 232, 606, 108, 638, 1857 111, 146, 338, 94, 1366, 33, 1128, 534, 1367, 40, 1858 41, 212, 387, 46, 46, 746, 1428, 756, 210, 187, 1859 1249, 747, 94, 757, 1253, 94, 871, 46, 577, 407, 1860 409, 606, 210, 736, 872, 60, 424, 1349, 578, 212, 1861 884, 1520, 1497, 673, 212, 425, 776, 1525, 409, 1497, 1862 887, 702, 953, 958, 1055, 609, 777, 322, 322, 430, 1863 773, 919, 1390, 959, 1251, 903, 774, 774, 1545, 461, 1864 921, 727, 74, 1552, 448, 171, 774, 464, 762, 108, 1865 763, 137, 236, 764, 227, 454, 770, 1002, 454, 459, 1866 40, 41, 1015, 1003, 454, 681, 683, 499, 730, 500, 1867 490, 830, 1546, 1499, 94, 1500, 114, 674, 46, 1175, 1868 739, 1006, 1003, 1247, 74, 704, 237, 94, 251, 585, 1869 46, 238, 1291, 1292, 1374, 589, 210, 409, 832, 467, 1870 774, 494, 212, 322, 932, 494, 933, 468, 1375, 934, 1871 774, 1008, 396, 187, 774, 528, 212, 528, 1377, 1382, 1872 528, 1447, 322, 528, 774, 774, 108, 1444, 137, 138, 1873 1547, 510, 506, 652, 338, 514, 94, 40, 41, 1466, 1874 111, 652, 978, 1513, 1570, 774, 978, 978, 94, 1514, 1875 585, 53, 289, 526, 793, 794, 795, 909, 526, 409, 1876 739, 526, 912, 46, 409, 66, 67, 328, 409, 2, 1877 204, 4, 5, 6, 7, 519, 727, 46, 94, 108, 1878 531, 137, 138, 535, 415, 46, 727, 1196, 322, 569, 1879 40, 41, 485, 1077, 250, 328, 409, 534, 1155, 828, 1880 409, 727, 601, 46, 1167, 478, 409, 435, 1387, 1388, 1881 212, 736, 417, 669, 409, 812, 751, 443, 1122, 1121, 1882 1170, 752, 609, 111, 1182, 2, 204, 4, 5, 6, 1883 7, 869, 652, 34, 570, 35, 601, 487, 328, 409, 1884 111, 571, 878, 652, 575, 111, 36, 478, 181, 182, 1885 39, 337, 1172, 74, 609, -292, 94, 40, 41, 1438, 1886 1003, 1339, 8, 9, 10, 11, 12, 1242, 36, 459, 1887 172, 173, 39, 1444, 1445, 1137, 611, 1492, 1493, 40, 1888 41, 104, 1235, 608, 409, 609, 527, 736, 440, 34, 1889 30, 35, 1145, 610, 111, 766, -3, 1145, 338, 854, 1890 328, 609, 1446, 572, 652, 370, -437, 111, 111, 111, 1891 593, 53, 8, 9, 10, 11, 12, 1532, 33, 1458, 1892 454, 800, 801, 802, 803, 1203, 67, 108, 596, 137, 1893 138, 534, 111, 187, 1418, 1419, 160, 326, 40, 41, 1894 30, 646, 940, 738, 940, 666, 1145, 667, 104, 1399, 1895 494, 668, 192, 1399, 670, 215, 1077, 671, 225, 1210, 1896 1212, 1214, -293, 46, 798, 799, 890, 1106, 33, 8, 1897 9, 10, 11, 12, 338, 672, 341, 993, 36, 675, 1898 172, 173, 39, 703, 677, -112, 695, -112, 871, 40, 1899 41, -112, 1518, 1458, 1310, 1311, 1312, 30, 804, 805, 1900 727, 727, 212, 1348, 1350, 1351, -112, -112, 796, 797, 1901 577, 255, 409, 74, 718, 374, 60, 720, -238, 94, 1902 578, 758, 771, 611, 534, 33, 775, 779, -12, 893, 1903 833, 835, 1017, 837, 689, 848, 828, 160, 111, -13, 1904 900, 104, 892, 459, 920, 536, 537, 538, 922, 923, 1905 372, -414, 208, 218, 217, 1482, 927, 698, 727, 727, 1906 46, 948, -521, 962, 969, 652, 747, 210, 731, 539, 1907 983, 540, 1369, 541, 542, 53, 160, 971, 2, 204, 1908 4, 5, 6, 7, 976, 982, 984, 986, 987, 66, 1909 67, 988, 989, 998, 1122, 1121, 36, 1010, 1011, 160, 1910 39, 1012, 111, 111, 111, 527, 226, 40, 41, 1026, 1911 527, 442, 1027, 527, 1028, 1029, 127, 1077, 128, 129, 1912 130, 536, 537, 538, 1030, 1031, 828, 40, 41, 728, 1913 454, 1032, 1043, 838, 1057, 609, -402, 840, -401, 611, 1914 1092, 1442, 34, 610, 35, 539, 1558, 540, 439, 541, 1915 1319, 935, 1102, 53, 1145, 1145, 1145, 1103, 1094, 652, 1916 652, 1104, 1105, 440, 1109, 1110, 1111, 1203, 67, 1112, 1917 494, 1123, 322, 935, 1113, 1119, 478, 74, 36, 1129, 1918 774, 212, 39, 104, 1130, 1079, 1136, 1122, 1121, 40, 1919 41, 1141, 397, 398, 1131, 992, 1144, 36, 1165, 399, 1920 1328, 39, 400, 401, 1190, 104, 405, 1186, 40, 41, 1921 1187, 766, 1077, 1188, 652, 42, 402, 652, 534, 372, 1922 1189, 403, 1204, 869, 104, 145, 931, 1205, 703, 1207, 1923 673, 1208, 727, 1216, 743, 1220, 46, 46, 1222, 1223, 1924 727, 727, 727, -3, 744, 1228, 111, 111, 1531, 36, 1925 1233, 172, 173, 39, 1239, 74, 63, 115, 499, 516, 1926 40, 41, 652, 1243, 1007, 1248, 1077, 652, 1250, 1077, 1927 406, 917, 840, 611, 1252, 736, 1255, 212, 1256, 1260, 1928 924, 1264, 1267, 104, 926, 111, 1269, 63, 727, 1271, 1929 1122, 1121, 1272, 1273, 674, 1274, 372, 652, 1145, 1145, 1930 158, 1275, 1277, 174, 454, 828, 1284, 1293, 1294, 1301, 1931 139, 1330, 1304, 53, 1077, 1322, 1305, 104, 1307, 1077, 1932 53, 36, 219, 181, 182, 39, 1336, 1203, 67, 1308, 1933 147, 1316, 40, 41, 1203, 67, 148, 1483, 728, 1338, 1934 60, 149, 1050, 1340, 46, 111, 1344, 1345, 1206, 1077, 1935 1346, 1352, 1353, 174, 111, 736, 174, 1354, 183, 257, 1936 652, 239, 242, 1356, 1362, 652, 1363, 840, 184, 46, 1937 46, 1441, 159, 53, 1364, 534, 1365, 1372, 1376, 611, 1938 1373, 213, 1383, 652, 1384, 652, 1312, 1203, 67, 652, 1939 1395, 1392, 652, 1393, 46, 1402, 371, 1533, 240, 1405, 1940 652, 327, 174, 1412, 652, 1413, 1541, -403, 1416, 257, 1941 348, 1427, 1077, 1435, 1505, 74, 1505, 1077, 478, 1431, 1942 104, 1433, 74, 338, 1436, 1443, 1437, 1367, 1448, 1452, 1943 935, 1453, 1454, 213, 1455, 1077, 1457, 1077, 1467, 1469, 1944 404, 1077, 1475, 104, 1077, 1299, 1300, 1123, 1302, 1462, 1945 104, 1505, 1077, 1505, 1306, 422, 1077, 1309, 427, 429, 1946 1471, 1152, 1473, 158, 1477, 174, 703, 1479, 1480, 1485, 1947 1486, 1487, 1498, 728, 703, 74, 213, 1508, 1512, 1510, 1948 165, 1524, 170, 728, 446, 176, 177, 178, 449, 180, 1949 450, 1516, 611, 1517, 1539, 1544, 1540, 1551, 728, 465, 1950 1553, 1555, 1561, 104, 231, 63, 1568, 326, 1569, 1079, 1951 479, 1050, 1221, 806, 1321, 807, 246, 247, 1100, 174, 1952 486, 808, 463, 1519, 211, 810, 174, 1430, 429, 809, 1953 122, 125, 126, 1571, 230, 1386, 1254, 213, 1403, 1501, 1954 1123, 8, 9, 10, 11, 12, 8, 9, 10, 11, 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, 2081 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2278 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 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, 2292 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2293 0, 0, 0, 0, 0, 640, 0, 0, 341, 0, 2294 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2347 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 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, 2353 0, 0, 0, 0, 0, 0, 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, 2365 0, 0, 0, 0, 0, 0, 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, 2370 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2371 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2379 0, 0, 0, 0, 0, 0, 0, 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, 2389 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2395 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2396 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 2397 516, 26, 27, 28, 29, 0, 0, 30, 0, 0, 2398 31, 32, 0, 363, 0, 0, 0, 0, 996, 0, 2399 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2413 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2414 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2415 0, 0, 26, 27, 28, 29, 0, 0, 30, 281, 2416 282, 31, 1062, 1063, 1390, 1064, 769, 0, 1065, 1066, 2417 1067, 1068, 1069, 1070, 1071, 1072, 0, 0, 0, 1073, 2418 0, 0, 0, 1074, 1075, 0, 33, 0, 284, 34, 2419 0, 35, 0, 36, 649, 0, 38, 39, 286, 0, 2420 0, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2421 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 2422 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2423 0, 294, 0, 1076, 0, 0, 170, 0, 0, 0, 2424 296, 297, 298, 299, 300, 301, 0, 0, 0, 0, 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, 1955 2564 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 1956 22, 23, 24, -294, 1227, 25, 26, 27, 693, 30, 1957 694, 1107, 941, 722, 30, 213, 211, 1056, 478, 213, 1958 1108, 1140, 825, 1118, 899, 478, 935, 964, 1331, 741, 1959 972, 815, 0, 0, 816, 174, 257, 33, 817, 602, 1960 0, 252, 33, 253, 1391, 630, 0, 0, 0, 37, 1961 38, 0, 174, -294, 0, 0, 174, 1424, 635, 211, 1962 0, 0, 635, 0, 0, 257, 0, 8, 9, 10, 1963 11, 12, 0, 0, 0, 0, 0, 0, 478, 776, 1964 0, 409, 0, 1123, 935, 935, 337, 0, 0, 777, 1965 0, 0, 0, 0, 109, 30, 0, 0, 1417, 653, 1966 0, 1425, 0, 0, 0, 1217, 213, 0, 0, 0, 1967 0, 0, 479, 0, 0, 1504, 0, 1504, 0, 174, 1968 211, 0, 0, 33, 394, 0, 0, 348, 0, 0, 1969 0, 0, 479, 0, 413, 414, 0, 728, 728, 418, 1970 479, 420, 421, 0, 0, 0, 1464, 0, 0, 0, 1971 0, 1468, 1504, 0, 1504, 0, 0, 0, 211, 0, 1972 0, 0, 211, 0, 0, 958, 723, 609, 0, 429, 1973 0, 0, 0, 0, 0, 959, 0, 0, 505, 0, 1974 716, 1490, 322, 0, 737, 463, 63, 213, 0, 8, 1975 9, 10, 11, 12, 429, 728, 728, 0, 429, 0, 1976 0, 0, 0, 0, 0, 0, 0, 8, 9, 10, 1977 11, 12, 0, 600, 607, 0, 0, 30, 749, 36, 1978 753, 181, 182, 39, 0, 631, 632, 257, 348, 0, 1979 40, 41, 0, 0, 0, 30, 0, 213, 0, 0, 1980 0, 0, 0, 0, 0, 33, 0, 0, 0, 211, 1981 36, 0, 181, 182, 39, 0, 697, 0, 409, 0, 1982 0, 40, 41, 33, 698, 0, 699, 1559, 36, 0, 1983 181, 182, 39, 1559, 818, 0, 0, 0, 0, 40, 1984 41, 0, 0, 0, 1559, 174, 0, 608, 1559, 609, 1985 0, 0, 635, 831, 935, 602, 0, 610, 0, 0, 1986 0, 0, 0, 0, 0, 697, 850, 409, 0, 0, 1987 0, 935, 0, 0, 0, 699, 0, 0, 174, 0, 1988 0, 0, 0, 0, 602, 0, 0, 0, 0, 602, 1989 211, 0, 0, 0, 174, 635, 0, 1329, 348, 348, 1990 348, 0, 0, 0, 0, 1385, 0, 211, 0, 174, 1991 36, 0, 181, 182, 39, 0, 0, 348, 0, 0, 1992 213, 40, 41, 0, 0, 0, 0, 0, 0, 728, 1993 0, 0, 891, 0, 0, 723, 0, 728, 728, 728, 1994 211, 0, 0, 0, 935, 935, 479, 697, 213, 409, 1995 0, 257, 737, 213, 0, 937, 0, 699, 0, 0, 1996 0, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1997 17, 18, 19, 20, 21, 22, 23, 24, 72, 0, 1998 25, 26, 27, 0, 0, 728, 0, 0, 479, 30, 1999 452, 348, 0, 944, 0, 0, 0, 0, 0, 947, 2000 963, 0, 0, 429, 0, 75, 174, 0, 0, 72, 2001 36, 0, 181, 182, 39, 0, 0, 33, 0, 0, 2002 0, 40, 41, 0, 37, 38, 0, 257, 737, 0, 2003 0, 0, 0, 991, 0, 0, 75, 0, 0, 0, 2004 0, 213, 0, 0, 220, 0, 0, 1529, 0, 409, 2005 0, 0, 0, 0, 0, 213, 0, 1530, 485, 0, 2006 0, 453, 0, 211, 1502, 710, 1506, 0, 0, 109, 2007 723, 221, 0, 0, 0, 0, 0, 0, 0, 0, 2008 723, 0, 0, 348, 0, 635, 820, 821, 1023, 635, 2009 831, 211, 0, 0, 0, 723, 211, 0, 0, 0, 2010 0, 1535, 0, 1537, 0, 1034, 36, 0, 181, 182, 2011 39, 0, 0, 0, 0, 0, 855, 40, 41, 858, 2012 859, 0, 862, 0, 864, 865, 0, 0, 0, 866, 2013 867, 0, 351, 543, 544, 545, 546, 547, 548, 549, 2014 550, 551, 552, 263, 0, 0, 1566, 0, 1567, 213, 2015 0, 0, 0, 264, 951, 0, 952, 63, 0, 353, 2016 0, 1574, 1575, 955, 956, 0, 0, 553, 961, 0, 2017 0, 0, 174, 0, 653, 0, 411, 0, 0, 635, 2018 966, 1060, 0, 419, 211, 970, 0, 0, 8, 9, 2019 10, 11, 12, 0, 0, 0, 0, 0, 211, 0, 2020 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 2021 0, 999, 0, 942, 943, 1115, 30, 0, 505, 945, 2022 0, 0, 0, 429, 115, 0, 0, 72, 0, 0, 2023 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 2024 0, 348, 0, 0, 33, 0, 0, 0, 0, 36, 2025 0, 181, 182, 39, 75, 411, 600, 0, 0, 75, 2026 40, 41, 0, 0, 0, 0, 124, 124, 124, 0, 2027 0, 0, 0, 653, 0, 0, 602, 0, 0, 0, 2028 0, 0, 0, 0, 0, 0, 1529, 0, 409, 427, 2029 0, 0, 211, 0, 723, 723, 1530, 348, 348, 0, 2030 0, 0, 0, 0, 8, 9, 10, 11, 12, 0, 2031 0, 583, 0, 1044, 1045, 1046, 1047, 1202, 1049, 587, 2032 0, 0, 590, 0, 0, 0, 0, 220, 0, 0, 2033 0, 0, 30, 0, 1093, 0, 0, 124, 0, 124, 2034 0, 213, 0, 0, 0, 0, 0, 0, 1099, 0, 2035 0, 0, 723, 723, 221, 0, 0, 0, 635, 0, 2036 33, 0, 0, 0, 273, 36, 0, 181, 182, 39, 2037 0, 0, 0, 1060, 0, 0, 40, 41, 0, 0, 2038 0, 0, 0, 0, 0, 411, 0, 1114, 0, 419, 2039 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 2040 0, 0, 183, 0, 0, 0, 0, 0, 0, 351, 2041 0, 0, 184, 0, 72, 0, 737, 0, 0, 0, 2042 124, 75, 72, 0, 0, 0, 0, 1142, 124, 0, 2043 124, 124, 0, 0, 1150, 124, 353, 124, 124, 1154, 2044 0, 75, 0, 0, 1158, 0, 1159, 0, 351, 75, 2045 1161, 1162, 1163, 0, 0, 1166, 0, 0, 0, 1298, 2046 0, 0, 0, 0, 1178, 0, 351, 0, 72, 174, 2047 0, 0, 0, 0, 411, 353, 257, 0, 0, 1297, 2048 0, 63, 1193, 1194, 211, 0, 0, 0, 8, 9, 2049 10, 11, 12, 353, 723, 75, 737, 0, 0, 0, 2050 115, 0, 0, 0, 0, 0, 0, 124, 0, 1224, 2051 351, 0, 1226, 0, 0, 0, 30, 0, 0, 0, 2052 213, 0, 0, 0, 0, 0, 723, 0, 0, 0, 2053 0, 0, 0, 0, 723, 723, 723, 353, 0, 0, 2054 0, 0, 0, 0, 33, 348, 348, 0, 0, 36, 2055 1241, 181, 182, 39, 0, 0, 1245, 1246, 0, 1202, 2056 40, 41, 0, 0, 0, 0, 583, 583, 1257, 0, 2057 0, 0, 0, 1261, 0, 351, 1265, 0, 1266, 0, 2058 0, 1268, 723, 0, 0, 0, 263, 0, 0, 0, 2059 0, 0, 0, 115, 1276, 0, 264, 0, 0, 0, 2060 0, 0, 353, 1232, 0, 0, 0, 1283, 0, 1285, 2061 1286, 1287, 1288, 0, 0, 0, 213, 0, 0, 0, 2062 351, 351, 351, 0, 0, 1295, 0, 1296, 0, 0, 2063 0, 170, 0, 0, 0, 0, 0, 0, 0, 351, 2064 0, 0, 0, 0, 0, 174, 0, 353, 353, 353, 2065 0, 0, 0, 0, 0, 910, 0, 351, 0, 913, 2066 1324, 1325, 0, 211, 0, 0, 353, 0, 72, 0, 2067 348, 0, 77, 0, 351, 0, 0, 0, 0, 0, 2068 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 2069 0, 0, 411, 0, 0, 75, 115, 0, 0, 84, 2070 0, 353, 0, 77, 0, 54, 54, 0, 0, 0, 2071 72, 1360, 1361, 351, 0, 0, 0, 0, 0, 1202, 2072 0, 1371, 0, 0, 0, 0, 1202, 1320, 0, 0, 2073 84, 0, 0, 0, 0, 0, 54, 75, 222, 0, 2074 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2075 351, 0, 0, 0, 0, 0, 0, 0, 0, 211, 2076 0, 0, 0, 0, 0, 223, 0, 0, 54, 0, 2077 0, 54, 0, 1404, 0, 0, 0, 353, 0, 1202, 2078 0, 0, 0, 0, 0, 1408, 1554, 1409, 1410, 1411, 2079 0, 0, 351, 0, 0, 0, 0, 0, 0, 1415, 2080 0, 0, 351, 0, 0, 351, 0, 583, 1426, 0, 2081 220, 0, 351, 0, 0, 0, 0, 351, 0, 353, 2082 0, 0, 124, 124, 1439, 0, 354, 0, 0, 353, 2083 0, 0, 353, 0, 0, 0, 0, 221, 0, 353, 2084 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 2085 0, 0, 124, 361, 0, 124, 124, 0, 124, 346, 2086 124, 124, 0, 0, 0, 124, 124, 0, 0, 0, 2087 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 2088 1488, 1489, 0, 0, 0, 0, 0, 0, 0, 0, 2089 0, 0, 0, 1494, 0, 0, 0, 0, 0, 0, 2090 1494, 0, 0, 0, 0, 0, 75, 0, 0, 0, 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, 2091 2568 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2092 411, 77, 0, 0, 54, 0, 77, 0, 0, 0, 2093 0, 0, 0, 1528, 0, 0, 0, 1534, 0, 0, 2094 0, 0, 0, 0, 124, 0, 0, 0, 84, 124, 2095 124, 0, 0, 84, 54, 124, 0, 0, 0, 0, 2096 0, 0, 0, 351, 0, 0, 1556, 0, 1557, 0, 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, 2097 2770 0, 0, 8, 9, 10, 11, 12, 13, 14, 15, 2098 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 2099 353, 25, 26, 27, 0, 0, 1572, 1573, 0, 1156, 2100 30, 452, 0, 0, 1576, 1577, 0, 0, 0, 0, 2101 0, 0, 0, 0, 0, 1168, 351, 351, 0, 351, 2102 351, 222, 0, 0, 0, 0, 0, 0, 33, 0, 2103 0, 0, 0, 0, 0, 37, 38, 0, 0, 72, 2104 0, 0, 0, 353, 353, 0, 353, 353, 223, 8, 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, 2837 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2838 20, 21, 22, 23, 24, 25, 0, 0, 26, 27, 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, 2846 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2883 0, 287, 288, 289, 290, 41, 42, 0, 291, 292, 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, 2899 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2900 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2901 0, 0, 0, 0, 0, 0, 0, 34, 0, 35, 2902 0, 36, 0, 0, 206, 39, 474, 2, 205, 4, 2903 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2904 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2905 25, 0, 0, 26, 27, 28, 0, 0, 0, 0, 2906 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 2907 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2908 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2909 34, 0, 35, 0, 36, 0, 0, 38, 39, 2, 2910 205, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2911 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2912 23, 24, 25, 0, 0, 26, 27, 28, 0, 0, 2913 0, 0, 0, 0, 31, 0, 0, 0, 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, 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, 3271 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3272 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 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, 3282 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 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, 2105 3335 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2106 19, 20, 21, 22, 23, 24, 75, 0, 25, 26, 2107 27, 0, 453, 0, 351, 351, 946, 30, 0, 0, 2108 109, 0, 0, 0, 0, 0, 0, 0, 77, 0, 2109 0, 0, 1236, 0, 0, 0, 0, 0, 0, 0, 2110 0, 353, 353, 354, 0, 33, 0, 0, 77, 0, 2111 36, 0, 37, 38, 39, 84, 77, 0, 0, 0, 2112 0, 40, 41, 0, 0, 0, 0, 0, 0, 0, 2113 361, 0, 0, 0, 0, 84, 346, 0, 351, 0, 2114 0, 0, 354, 84, 0, 0, 0, 42, 0, 155, 2115 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 2116 354, 0, 77, 0, 0, 353, 0, 0, 0, 361, 2117 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2118 0, 220, 0, 0, 0, 0, 0, 361, 0, 84, 2119 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 2120 0, 0, 0, 72, 354, 0, 0, 0, 221, 0, 2121 0, 0, 0, 0, 0, 0, 351, 0, 351, 0, 2122 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2123 75, 361, 0, 0, 0, 0, 0, 346, 0, 0, 2124 0, 0, 0, 353, 0, 353, 0, 0, 351, 0, 2125 0, 0, 0, 0, 0, 0, 351, 351, 351, 0, 2126 0, 0, 0, 0, 0, 0, 0, 351, 351, 354, 2127 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 2128 0, 72, 0, 353, 353, 353, 0, 0, 0, 0, 2129 0, 0, 0, 0, 353, 353, 361, 0, 0, 0, 2130 0, 0, 346, 0, 351, 0, 0, 0, 75, 0, 2131 0, 0, 0, 0, 354, 354, 354, 0, 0, 0, 2132 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2133 0, 353, 0, 354, 0, 0, 0, 0, 0, 124, 2134 0, 361, 361, 361, 0, 0, 0, 346, 346, 346, 2135 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 2136 361, 0, 77, 0, 0, 0, 346, 0, 354, 0, 2137 0, 0, 0, 0, 0, 0, 0, 0, 361, 1033, 2138 0, 0, 8, 9, 10, 11, 12, 0, 0, 84, 2139 0, 0, 351, 0, 0, 361, 0, 0, 0, 0, 2140 0, 0, 0, 0, 77, 0, 0, 354, 280, 281, 2141 30, 282, 0, 0, 0, 0, 0, 0, 0, 353, 2142 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2143 0, 84, 0, 0, 361, 0, 0, 283, 33, 0, 2144 346, 72, 0, 284, 354, 0, 0, 285, 72, 0, 2145 286, 287, 288, 289, 40, 41, 0, 290, 291, 0, 2146 0, 0, 0, 124, 0, 292, 0, 0, 75, 0, 2147 0, 361, 0, 0, 0, 75, 0, 0, 0, 0, 2148 293, 0, 377, 0, 0, 0, 354, 0, 0, 295, 2149 826, 297, 298, 299, 300, 0, 354, 0, 0, 354, 2150 0, 72, 0, 0, 222, 0, 354, 0, 0, 0, 2151 0, 354, 0, 361, 0, 0, 0, 0, 0, 0, 2152 0, 0, 0, 361, 0, 0, 361, 0, 75, 0, 2153 0, 223, 346, 361, 0, 0, 0, 0, 361, 346, 2154 0, 0, 0, 0, 0, -516, 0, 0, 1, 2, 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, 3418 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 3432 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3433 -1, -1, -1, -1, -1, 367, -1, -1, 370, -1, 3434 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3435 -1, -1, -1, 1473, -1, 1475, -1, -1, -1, -1, 3436 37, 38, -1, 40, -1, 397, -1, -1, 1020, 401, 3437 -1, -1, -1, -1, -1, -1, -1, -1, -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, 3485 -1, -1, -1, -1, -1, -1, -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, 3493 -1, -1, -1, -1, -1, -1, -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, 3505 -1, -1, -1, -1, -1, -1, -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, 3510 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3511 -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 3519 -1, -1, -1, -1, -1, -1, -1, -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, 3529 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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, 3535 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3536 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, 3537 1062, 30, 31, 32, 33, -1, -1, 36, -1, -1, 3538 39, 40, -1, 1415, -1, -1, -1, -1, 1142, -1, 3539 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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, 3553 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3554 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3555 -1, -1, 30, 31, 32, 33, -1, -1, 36, 37, 3556 38, 39, 40, 41, 1318, 43, 1320, -1, 46, 47, 3557 48, 49, 50, 51, 52, 53, -1, -1, -1, 57, 3558 -1, -1, -1, 61, 62, -1, 64, -1, 66, 67, 3559 -1, 69, -1, 71, 72, -1, 74, 75, 76, -1, 3560 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3561 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, 3562 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3563 -1, 109, -1, 111, -1, -1, 114, -1, -1, -1, 3564 118, 119, 120, 121, 122, 123, -1, -1, -1, -1, 3565 128, -1, 1406, -1, 132, -1, -1, -1, -1, -1, 2155 3566 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2156 3567 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2157 23, 24, 0, 77, 25, 26, 27, 28, 0, 0, 2158 29, 0, 0, 30, 31, 0, 0, 0, 0, 8, 2159 9, 10, 11, 12, 0, 8, 9, 10, 11, 12, 2160 84, 0, 0, 0, 0, 0, 54, 0, 32, 0, 2161 0, 33, 163, 34, 0, 35, 36, 30, 37, 38, 2162 39, 0, 0, 30, 0, 0, 0, 40, 41, 0, 2163 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 2164 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 2165 36, 33, 0, 42, 39, 43, 36, 354, 0, 0, 2166 39, 40, 41, 44, 0, 0, 0, 40, 41, 0, 2167 0, 0, 0, 54, 0, 0, 0, 163, 0, 0, 2168 0, 0, 0, 270, 361, 0, 0, 42, 0, 0, 2169 346, 0, 0, 743, 0, 0, 0, 145, 0, 0, 2170 0, 0, 0, 744, 0, 0, 0, 0, 0, 0, 2171 354, 354, 163, 354, 354, 0, 0, 0, 0, 0, 2172 0, 0, 367, 0, 0, 0, 373, 0, 0, 0, 2173 0, 0, 0, 77, 0, 0, 0, 361, 361, 0, 2174 361, 361, 0, 0, 0, 0, 346, 346, 0, 0, 2175 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2176 84, 0, 0, 0, 0, 0, 54, 0, 354, 354, 2177 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 2178 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 2179 0, 0, 0, 0, 0, 361, 361, 0, 0, 0, 2180 0, 280, 281, 0, 282, 163, 460, 8, 9, 10, 3568 23, 24, 25, 26, 27, -1, -1, 30, 31, 32, 3569 33, -1, -1, 36, 37, 38, 39, 40, -1, -1, 3570 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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, 2181 3581 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2182 21, 22, 23, 24, 0, 0, 25, 26, 27, 373, 2183 283, 0, 354, 0, 0, 30, 284, 163, 0, 0, 2184 285, 0, 0, 286, 287, 288, 289, 40, 41, 0, 2185 290, 291, 0, 0, 0, 0, 0, 0, 292, 361, 2186 0, 460, 0, 33, 163, 0, 0, 0, 0, 0, 2187 205, 38, 0, 512, 0, 222, 0, 0, 0, 0, 2188 0, 0, 295, 379, 297, 298, 299, 300, 0, 0, 2189 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 2190 0, 0, 223, 0, 0, 0, 0, 54, 54, 0, 2191 354, 605, 354, 0, 0, 269, 629, 0, 0, 0, 2192 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 2193 54, 0, 0, 0, 0, 0, 0, 361, 0, 361, 2194 0, 0, 354, 0, 0, 0, 0, 0, 0, 54, 2195 354, 354, 354, 0, 0, 0, 0, 0, 0, 0, 2196 0, 354, 354, 0, 0, 0, 0, 0, 0, 361, 2197 0, 0, 0, 0, 0, 77, 0, 361, 361, 361, 2198 0, 0, 0, 0, 0, 0, 0, 0, 361, 361, 2199 0, 0, 163, 163, 346, 346, 0, 0, 354, 367, 2200 0, 0, 84, 54, 0, 0, 0, 0, 54, 0, 2201 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2202 460, 0, 0, 460, 0, 361, 0, 0, 0, 460, 2203 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2204 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 2205 0, 0, 0, 0, 0, 0, 740, 0, 0, 0, 2206 209, 0, 0, 0, 0, 0, 0, 0, 163, 0, 2207 229, 0, 233, 0, 235, 0, 0, 0, 0, 0, 2208 460, 244, 460, 0, 0, 460, 354, 163, 460, 0, 2209 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2210 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2211 0, 0, 209, 361, 233, 235, 244, 0, 0, 346, 2212 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2213 0, 0, 0, 0, 0, 77, 0, 154, 0, 0, 2214 0, 0, 77, 0, 0, 54, 0, 0, 0, 0, 2215 0, 0, 0, 163, 0, 209, 0, 0, 0, 0, 2216 0, 0, 84, 0, 0, 367, 0, 605, 54, 84, 2217 836, 0, 0, 0, 0, 54, 0, 0, 0, 0, 2218 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 2219 0, 0, 0, 254, 0, 77, 605, 0, 0, 0, 2220 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, 2221 367, 367, 367, 0, 0, 0, 209, 0, 233, 235, 2222 244, 0, 84, 0, 0, 0, 0, 0, 54, 367, 2223 0, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2224 17, 18, 19, 20, 21, 22, 23, 24, -294, 154, 2225 25, 26, 27, 0, 209, 0, 0, 0, 209, 30, 2226 0, 0, 0, 384, 740, 0, 0, 0, 0, 0, 2227 0, 0, 0, 0, 503, 0, 0, 0, 0, 0, 2228 0, 0, 0, 0, 0, 460, 416, 33, 0, 0, 2229 0, 0, 0, 0, 37, 38, 0, 0, -294, 0, 2230 431, 0, 0, 367, 0, 960, 0, 0, 0, 436, 2231 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 2232 0, 0, 0, 0, 209, 0, 0, 0, 0, 642, 2233 0, 337, 280, 281, 0, 282, 0, 0, 0, 109, 2234 740, 0, 0, 0, 470, 209, 0, 0, 0, 480, 2235 233, 235, 0, 0, 0, 0, 0, 0, 244, 0, 2236 0, 283, 488, 0, 0, 0, 0, 284, 498, 0, 2237 502, 285, 0, 0, 286, 287, 288, 289, 40, 41, 2238 0, 290, 291, 0, 0, 0, 0, 0, 532, 292, 2239 0, 0, 0, 0, 0, 367, 0, 0, 0, 629, 2240 0, 209, 367, 0, 293, 0, 377, 0, 0, 378, 2241 0, 0, 0, 295, 379, 297, 298, 299, 300, 209, 2242 0, 0, 0, 0, 209, 0, 209, 0, 0, 0, 2243 0, 592, 0, 0, 0, 0, 597, 0, 0, 0, 2244 0, 0, 0, 209, 0, 0, 209, 209, 0, 0, 2245 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2246 0, 0, 209, 0, 643, 0, 0, 0, 644, 645, 2247 0, 647, 0, 0, 0, 0, 209, 0, 659, 660, 2248 0, 661, 662, 209, 663, 0, 664, 0, 0, 0, 2249 0, 0, 0, 1176, 0, 460, 8, 9, 10, 11, 2250 12, 0, 0, 592, 0, 0, 0, 0, 0, 0, 2251 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 2252 0, 0, 280, 281, 30, 282, 0, 0, 0, 0, 2253 0, 0, 0, 0, 0, 0, 690, 163, 0, 0, 2254 0, 0, 0, 0, 0, 0, 0, 696, 0, 0, 2255 0, 283, 33, 367, 0, 0, 0, 284, 0, 0, 2256 0, 285, 0, 0, 286, 287, 288, 289, 40, 41, 2257 732, 290, 291, 0, 0, 0, 735, 0, 0, 292, 2258 0, 470, 0, 0, 0, 0, 0, 0, 605, 0, 2259 0, 0, 0, 0, 293, 0, 377, 0, 0, 209, 2260 0, 0, 0, 295, 1177, 297, 298, 299, 300, 367, 2261 367, 0, 0, 0, 0, 0, 0, 0, 772, 0, 2262 0, 0, 0, 0, 0, 0, 0, 209, 513, 0, 2263 515, 518, 209, 0, 787, 0, 0, 0, 521, 522, 2264 0, 0, 0, 515, 515, 0, 0, 0, 0, 0, 2265 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 2266 0, 0, 0, 0, 0, 280, 281, 0, 282, 460, 2267 0, 814, 0, 0, 0, 0, 0, 0, 0, 0, 2268 824, 0, 0, 0, 0, 0, 0, 827, 0, 0, 2269 0, 515, 834, 0, 283, 0, 0, 0, 0, 0, 2270 284, 0, 0, 849, 285, 0, 0, 286, 287, 288, 2271 289, 40, 41, 0, 290, 291, 0, 0, 0, 0, 2272 209, 0, 292, 0, 0, 0, 0, 515, 740, 0, 2273 0, 0, 0, 0, 209, 0, 0, 293, 0, 377, 2274 0, 0, 0, 0, 889, 811, 295, 379, 297, 298, 2275 299, 300, 0, 0, 503, 0, 0, 0, 0, 0, 2276 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2277 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2278 834, 0, 0, 0, 0, 8, 9, 10, 11, 12, 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, 3597 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 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, 3609 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 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, 3644 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3645 -1, -1, -1, -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, 3656 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3657 -1, -1, -1, -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, 2279 3689 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2280 23, 24, -294, 0, 25, 26, 27, 0, 740, 0, 2281 0, 0, 0, 30, 0, 209, 0, 0, 0, 0, 2282 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 2283 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 2284 0, 33, 0, 0, 0, 967, 968, 209, 37, 38, 2285 0, 0, -294, 0, 0, 0, 0, 367, 367, 985, 2286 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 2287 0, 0, 0, 0, 0, 0, 1000, 0, 1001, 0, 2288 0, 0, 1005, 642, 0, 337, 0, 0, 0, 0, 2289 0, 0, 0, 633, 0, 0, 0, 0, 0, 0, 2290 0, 0, 0, 0, 515, 515, 515, 515, 515, 515, 2291 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 2292 515, 515, 0, 0, 0, 0, 0, 0, 0, 0, 2293 280, 281, 0, 282, 209, 0, 0, 0, 0, 0, 2294 0, 0, 0, 0, 0, 0, 0, 515, 1038, 0, 2295 0, 0, 0, 0, 0, 1039, 0, 0, 0, 283, 2296 209, 0, 0, 0, 0, 284, 0, 0, 1041, 285, 2297 1042, 0, 286, 287, 288, 289, 40, 41, 0, 290, 2298 291, 0, 367, 0, 1054, 0, 0, 292, 209, 0, 2299 0, 1058, 0, 0, 0, 0, 0, 0, 0, 0, 2300 0, 0, 293, 1096, 377, 0, 1097, 0, 0, 780, 2301 0, 295, 379, 297, 298, 299, 300, 0, 0, 0, 2302 209, 0, 0, 0, 597, 0, 0, 0, 0, 0, 2303 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 2304 460, 0, 460, 0, 0, 0, 515, 0, 8, 9, 2305 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2306 20, 21, 22, 23, 24, -294, 0, 0, 515, 0, 2307 0, 0, 0, 0, 0, 0, 30, 460, 0, 460, 2308 0, 515, 8, 9, 10, 11, 12, 13, 14, 15, 2309 16, 17, 18, 19, 20, 21, 22, 23, 24, -294, 2310 0, 25, 26, 27, 33, 0, 0, 163, 0, 0, 2311 30, 0, 209, 1160, 0, -294, 0, 0, 0, 340, 2312 362, 0, 0, 0, 0, 0, 0, 515, 0, 0, 2313 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 2314 0, 0, 0, 36, 0, 335, 336, 39, 0, -294, 2315 0, 0, 0, 412, 40, 41, 0, 0, 0, 515, 2316 412, 0, 0, 0, 0, 0, 0, 0, 0, 532, 2317 0, 0, 0, 0, 515, 0, 1225, 0, 0, 0, 2318 642, 0, 337, 0, 0, 0, 0, 0, 0, 0, 2319 633, 280, 281, 0, 282, 0, 0, 0, 0, 209, 2320 0, 0, 0, 0, 0, 1238, 0, 0, 0, 0, 2321 1240, 0, 0, 0, 0, 0, 0, 0, 1244, 0, 2322 283, 0, 0, 0, 0, 0, 648, 0, 137, 138, 2323 285, 0, 412, 286, 649, 288, 289, 40, 41, 0, 2324 290, 291, 0, 0, 0, 0, 0, 0, 292, 1270, 2325 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2326 0, 1278, 0, 293, 1279, 650, 1280, 651, 378, 0, 2327 0, 0, 295, 379, 297, 298, 299, 300, 0, 0, 2328 1289, 1290, 0, 0, 0, 0, 0, 0, 412, 0, 2329 0, 0, 0, 0, 0, 209, 412, 588, 0, 412, 2330 591, 0, 1303, 0, 0, 0, 0, 0, 0, 362, 2331 0, 0, 0, 621, 0, 0, 0, 0, 0, 0, 2332 0, 0, 0, 0, 0, 515, 0, 0, 0, 1326, 2333 320, 0, 639, 0, 0, 340, 0, 0, 0, 0, 2334 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2335 0, 0, 380, 380, 0, 0, 515, 0, 0, 0, 2336 0, 0, 412, 0, 0, 0, 412, 0, 515, 2, 2337 204, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2338 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2339 23, 24, 0, 0, 25, 26, 27, 362, 0, 0, 2340 0, 0, 0, 30, 0, 0, 0, 0, 0, 515, 2341 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2342 412, 0, 0, 320, 0, 0, 1396, 0, 1397, 0, 2343 0, 33, 0, 34, 0, 35, 0, 0, 37, 38, 2344 0, 1406, 0, 1407, 0, 0, 0, 0, 484, 0, 2345 0, 412, 0, 0, 362, 0, 0, 0, 0, 0, 2346 0, 1414, 0, 0, 0, 0, 0, 0, 0, 0, 2347 0, 0, 0, 0, -399, 686, 0, 1432, 1434, 0, 2348 0, 515, 0, 633, 0, 0, 0, 0, 0, 1440, 2349 0, 0, 1244, 0, 412, 0, 0, 340, 362, 0, 2350 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2351 0, 0, 0, 0, 1463, 0, 0, 0, 0, 0, 2352 0, 0, 0, 1470, 0, 515, 1472, 0, 1474, 1476, 2353 1478, 0, 0, 0, 0, 0, 0, 0, 0, 515, 2354 515, 0, 0, 412, 412, 0, 0, 0, 0, 0, 2355 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 2356 0, 0, 829, 362, 380, 362, 0, 0, 0, 0, 2357 1509, 0, 1511, 0, 621, 1244, 621, 621, 0, 0, 2358 0, 0, 0, 621, 0, 0, 0, 0, 0, 0, 2359 1523, 0, 0, 868, 362, 0, 0, 0, 0, 362, 2360 0, 0, 0, 0, 0, 0, 0, 0, 362, 362, 2361 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2362 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 2363 0, 0, 412, 911, 0, 0, 412, 914, 0, 0, 2364 0, 0, 0, 916, 0, 0, 0, 0, 0, 0, 2365 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2366 0, 340, 362, 412, 0, 412, 734, 0, 0, 412, 2367 0, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2368 17, 18, 19, 20, 21, 22, 23, 24, 0, 0, 2369 25, 26, 27, 0, 0, 0, 0, 0, 0, 30, 2370 0, 362, 621, 0, 0, 768, 0, 0, 0, 0, 2371 0, 0, 0, 0, 0, 0, 0, 0, 781, 0, 2372 0, 0, 0, 0, 0, 768, 0, 33, 768, 0, 2373 0, 0, 0, 0, 205, 38, 0, 340, 362, 791, 2374 792, 0, 412, 412, 0, 0, 0, 0, 0, 515, 2375 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2376 0, 813, 0, 0, 0, 0, 515, 0, 0, 0, 2377 0, 822, 0, 0, 0, 0, 0, 0, 344, 628, 2378 0, 0, 0, 781, 412, 0, 0, 0, 0, 0, 2379 0, 0, 0, 362, 0, 0, 0, 0, 0, 829, 2380 362, 0, 0, 0, 621, 0, 621, 0, 0, 0, 2381 0, 0, 0, 0, 0, 0, 621, 0, 0, 0, 2382 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2383 0, 0, 0, 888, 0, 0, 0, 0, 0, 515, 2384 515, 0, 380, 0, 0, 0, 0, 0, 0, 1, 2385 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 2386 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2387 22, 23, 24, 0, 0, 25, 26, 27, 28, 0, 2388 0, 29, 344, 0, 30, 31, 0, 0, 0, 829, 2389 0, 0, 0, 0, 0, 0, 0, 412, 280, 281, 2390 0, 282, 0, 412, 0, 0, 0, 0, 0, 32, 2391 0, 412, 33, 0, 34, 0, 35, 36, 0, 37, 2392 38, 39, 0, 0, 621, 621, 0, 283, 40, 41, 2393 0, 0, 0, 284, 0, 0, 0, 285, 0, 0, 2394 286, 287, 288, 289, 40, 41, 0, 290, 291, 0, 2395 0, 362, 0, 0, 42, 292, 43, 412, 781, 0, 2396 990, 0, 0, 0, 44, 0, 995, 0, 0, 0, 2397 293, 0, 377, 1004, 0, 992, 412, 1157, 0, 295, 2398 379, 297, 298, 299, 300, 0, 362, 0, 0, 0, 2399 0, 0, 412, 1169, 0, 621, 621, 1174, 0, 0, 2400 0, 0, 0, 0, 0, 0, 0, 362, 362, 0, 2401 0, 0, 0, 0, 0, 0, 0, 1021, 1022, 0, 2402 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2403 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 2404 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2405 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2406 0, 0, 0, 0, 0, 0, 0, 0, 829, 412, 2407 1237, 0, 0, 0, 0, 1052, 0, 0, 0, 380, 2408 0, 621, 0, 0, 0, 0, 1, 2, 204, 4, 3690 23, 24, 25, 26, 27, 28, -1, 30, 31, 32, 3691 33, -1, -1, 36, -1, -1, 39, -1, -1, -1, 3692 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3693 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3694 -1, -1, -1, -1, 67, -1, 69, -1, 71, -1, 3695 -1, 74, 75, -1, -1, 78, 3, 4, 5, 6, 3696 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 3697 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3698 27, -1, -1, 30, 31, 32, 33, -1, 111, 36, 3699 -1, -1, 39, -1, -1, -1, 119, -1, -1, -1, 3700 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3701 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3702 67, -1, 69, -1, 71, -1, -1, 74, 75, 3, 3703 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 3704 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3705 24, 25, 26, 27, -1, -1, 30, 31, 32, -1, 3706 -1, -1, -1, -1, 111, 39, -1, -1, -1, -1, 3707 -1, -1, 119, -1, -1, -1, -1, -1, -1, -1, 3708 -1, -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, 3715 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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, 2409 3722 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2410 3723 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2411 0, 0, 25, 26, 27, 28, 0, 0, 29, 280, 2412 281, 30, 1061, 1062, 0, 1063, 362, 0, 1064, 1065, 2413 1066, 1067, 1068, 1069, 1070, 1071, 0, 0, 0, 1072, 2414 0, 0, 0, 1073, 1074, 0, 32, 0, 283, 33, 2415 0, 34, 0, 35, 648, 320, 37, 38, 285, 0, 2416 0, 286, 287, 288, 289, 40, 41, 0, 290, 291, 2417 0, 1138, 1139, 0, 0, 0, 292, 0, 380, 0, 2418 0, 0, 280, 281, 995, 282, 340, 1148, 0, 768, 2419 0, 293, 0, 1075, 0, 0, 169, 0, 0, 0, 2420 295, 296, 297, 298, 299, 300, 362, 0, 0, 1164, 2421 1076, 283, 0, 0, -129, 0, 0, 284, 0, 0, 2422 1179, 285, 0, 0, 286, 287, 288, 289, 40, 41, 2423 0, 290, 291, 0, 0, 0, 0, 0, 0, 292, 2424 0, 0, 380, 0, 1197, 0, 0, 0, 0, 0, 2425 0, 0, 0, 0, 293, 362, 362, 0, 0, 995, 2426 995, 0, 0, 295, 379, 297, 298, 299, 300, 0, 2427 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2428 1229, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2429 204, 4, 5, 6, 7, 8, 9, 10, 11, 12, 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, 3734 -1, -1, -1, -1, -1, -1, -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, 3737 -1, -1, -1, -1, -1, -1, -1, -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, 3748 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3749 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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, 3753 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 3757 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3758 -1, -1, -1, -1, -1, -1, -1, 67, -1, 69, 3759 -1, 71, -1, -1, 74, 75, -1, 4, 5, 6, 3760 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 3761 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3762 27, -1, -1, 30, 31, 32, -1, -1, -1, -1, 3763 -1, 111, 39, -1, -1, -1, -1, -1, -1, 119, 3764 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3765 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3766 67, -1, 69, -1, 71, -1, -1, 74, 75, -1, 3767 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 3768 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3769 24, 25, 26, 27, -1, -1, 30, 31, 32, -1, 3770 -1, -1, -1, -1, 111, 39, -1, -1, -1, -1, 3771 -1, -1, 119, -1, -1, -1, -1, -1, -1, -1, 3772 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3773 -1, -1, -1, 67, -1, 69, -1, 71, -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, 3778 -1, -1, -1, -1, -1, 119, -1, -1, -1, -1, 3779 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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, 2430 3816 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2431 23, 24, 0, 0, 25, 26, 27, 28, 0, 0, 2432 29, 280, 281, 30, 282, 0, 0, 995, 0, 0, 2433 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2434 280, 281, 0, 282, 0, 0, 888, 0, 0, 0, 2435 283, 33, 0, 34, 0, 35, 284, 0, 37, 38, 2436 285, 1281, 1282, 286, 287, 288, 289, 40, 41, 283, 2437 290, 291, 0, 0, 0, 284, 0, 0, 292, 285, 2438 362, 0, 286, 287, 288, 289, 40, 41, 0, 290, 2439 291, 0, 0, 293, 0, 1075, 0, 292, 0, 0, 2440 0, 0, 295, 296, 297, 298, 299, 300, 0, 0, 2441 0, 0, 293, 0, 377, 0, -129, 0, 0, 0, 2442 0, 295, 379, 297, 298, 299, 300, 0, 0, 0, 2443 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2444 0, 0, 995, 0, 0, 0, 1, 2, 204, 4, 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, 3853 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 3895 40, 10, 11, 12, 13, 14, 15, 16, 17, 18, 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, 3907 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3908 26, 27, -1, -1, 30, 31, 32, -1, -1, -1, 3909 67, -1, -1, 39, -1, -1, -1, 74, 75, -1, 3910 -1, -1, 10, 11, 12, 13, 14, 15, 16, 17, 3911 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 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, 3915 -1, -1, -1, -1, -1, -1, -1, -1, -1, 67, 3916 -1, -1, -1, -1, -1, 111, 74, 75, -1, -1, 3917 -1, -1, -1, 119, -1, 10, 11, 12, 13, 14, 3918 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3919 25, 26, 27, -1, -1, 30, 31, 32, -1, -1, 3920 -1, -1, -1, 111, 39, -1, -1, -1, -1, -1, 3921 -1, 119, -1, 10, 11, 12, 13, 14, 15, 16, 3922 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3923 27, -1, 67, 30, 31, 32, -1, -1, -1, 74, 3924 75, -1, 39, 10, 11, 12, 13, 14, 15, 16, 3925 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3926 27, -1, -1, 30, 31, 32, -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, 3929 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3930 67, -1, -1, -1, -1, -1, -1, 74, 75, -1, 3931 -1, -1, -1, -1, 111, -1, -1, -1, -1, -1, 3932 -1, -1, 119, -1, -1, 10, 11, 12, 13, 14, 3933 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 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, 3947 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3948 24, 25, 26, 27, -1, -1, 30, 31, 32, -1, 3949 -1, -1, -1, -1, 111, 39, -1, -1, -1, -1, 3950 -1, -1, 119, -1, 10, 11, 12, 13, 14, 15, 3951 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3952 26, 27, -1, 67, 30, 31, 32, -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, 3986 -1, -1, -1, -1, -1, -1, -1, -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, 3995 -1, -1, -1, -1, -1, -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, 4039 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4040 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4041 -1, -1, -1, -1, -1, -1, -1, 67, -1, 69, 4042 -1, 71, -1, -1, 74, 75, 3, 4, 5, 6, 4043 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 4044 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 4045 27, -1, -1, 30, 31, 32, -1, -1, -1, -1, 4046 -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, 4047 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4048 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4049 67, -1, 69, -1, 71, -1, -1, 74, 75, 4, 2445 4050 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2446 4051 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2447 412, 0, 25, 26, 27, 28, 0, 0, 29, 280, 2448 281, 30, 282, 0, 0, 0, 0, 0, 0, 0, 2449 0, 0, 0, 0, 0, 412, 412, 0, 0, 0, 2450 0, 0, 0, 1389, 0, 768, 0, 0, 283, 33, 2451 0, 34, 0, 35, 284, 0, 37, 38, 285, 0, 2452 412, 286, 287, 288, 289, 40, 41, 0, 290, 291, 2453 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 2454 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2455 0, 293, 0, 43, 0, 0, 0, 0, 0, 0, 2456 295, 296, 297, 298, 299, 300, 0, 0, 2, 204, 2457 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 2458 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2459 24, 1449, 0, 25, 26, 27, 0, 0, 0, 0, 2460 280, 281, 30, 282, 0, 8, 9, 10, 11, 12, 2461 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2462 23, 24, 0, 0, 25, 26, 27, 0, 0, 283, 2463 33, 0, 34, 30, 35, 284, 0, 37, 38, 285, 2464 0, 0, 286, 287, 288, 289, 40, 41, 0, 290, 2465 291, 0, 0, 0, 0, 0, 0, 292, 0, 0, 2466 0, 33, 0, 0, 0, 0, 108, 0, 37, 38, 2467 0, 0, 293, 1515, 342, 0, 0, 40, 41, 780, 2468 0, 295, 343, 297, 298, 299, 300, 2, 204, 4, 2469 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2470 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2471 0, 0, 25, 26, 27, 0, 0, 0, 0, 280, 2472 281, 30, 282, 0, 0, 320, 0, 8, 9, 10, 2473 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2474 21, 22, 23, 24, -295, 0, 0, 0, 283, 33, 2475 0, 34, 0, 35, 284, 30, 37, 38, 285, 0, 2476 0, 286, 287, 288, 289, 40, 41, 0, 290, 291, 2477 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 2478 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 2479 0, 293, 0, 930, -295, 0, 0, 0, 780, 0, 2480 295, 343, 297, 298, 299, 300, 2, 204, 4, 5, 2481 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2482 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 2483 0, 25, 26, 27, 0, 0, 0, 0, 280, 281, 2484 30, 282, 0, 8, 9, 10, 11, 12, 13, 14, 2485 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2486 0, 0, 25, 26, 27, 0, 0, 283, 33, 0, 2487 34, 30, 35, 284, 0, 37, 38, 285, 0, 0, 2488 286, 287, 288, 289, 40, 41, 0, 290, 291, 0, 2489 0, 0, 0, 0, 0, 292, 0, 0, 0, 33, 2490 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 2491 293, 0, 930, 0, 0, 0, 0, 780, 0, 295, 2492 599, 297, 298, 299, 300, 2, 204, 4, 5, 6, 2493 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2494 17, 18, 19, 20, 21, 22, 23, 24, 0, 0, 2495 25, 26, 27, 0, 0, 0, 0, 280, 281, 30, 2496 282, 0, 8, 9, 10, 11, 12, 13, 14, 15, 2497 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 2498 0, 25, 26, 27, 0, 0, 283, 33, 0, 34, 2499 30, 35, 284, 0, 37, 38, 285, 0, 0, 286, 2500 287, 288, 289, 40, 41, 0, 290, 291, 0, 0, 2501 0, 0, 0, 0, 292, 0, 0, 0, 33, 0, 2502 0, 0, 0, 0, 0, 205, 38, 0, 0, 293, 2503 0, 342, 0, 0, 0, 0, 0, 0, 295, 343, 2504 297, 298, 299, 300, 2, 204, 4, 5, 6, 7, 2505 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2506 18, 19, 20, 21, 22, 23, 24, 0, 0, 25, 2507 26, 27, 0, 0, 0, 0, 280, 281, 30, 282, 2508 0, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2509 17, 18, 19, 20, 21, 22, 23, 24, 0, 0, 2510 0, 0, 0, 0, 0, 283, 33, 0, 34, 30, 2511 35, 284, 0, 37, 38, 285, 0, 0, 286, 287, 2512 288, 289, 40, 41, 0, 290, 291, 0, 0, 0, 2513 0, 0, 0, 292, 0, 0, 0, 33, 0, 0, 2514 0, 0, 0, 0, 0, 0, 0, 0, 293, 0, 2515 930, 0, 0, 0, 0, 0, 0, 295, 343, 297, 2516 298, 299, 300, 2, 204, 4, 5, 6, 7, 8, 2517 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2518 19, 20, 21, 22, 23, 24, 0, 0, 25, 26, 2519 27, 0, 0, 0, 0, 280, 281, 30, 282, 0, 2520 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2521 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2522 0, 0, 0, 0, 283, 33, 0, 34, 0, 35, 2523 284, 0, 205, 38, 285, 0, 0, 286, 287, 288, 2524 289, 40, 41, 0, 290, 291, 0, 0, 0, 0, 2525 0, 0, 292, 0, 0, 0, 0, 0, 0, 0, 2526 0, 0, 0, 0, 0, 0, 0, 293, 0, 1019, 2527 0, 0, 0, 0, 0, 0, 295, 1020, 297, 298, 2528 299, 300, 2, 204, 4, 5, 6, 7, 8, 9, 2529 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2530 20, 21, 22, 23, 24, 0, 0, 25, 26, 27, 2531 0, 0, 0, 0, 280, 281, 30, 282, 0, 0, 2532 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2533 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2534 0, 0, 0, 283, 33, 0, 34, 0, 35, 284, 2535 0, 205, 38, 285, 0, 0, 286, 287, 288, 289, 2536 40, 41, 0, 290, 291, 0, 0, 0, 0, 0, 2537 0, 292, 0, 0, 0, 0, 0, 0, 0, 0, 2538 0, 0, 0, 0, 0, 0, 293, 0, 377, 0, 2539 0, 0, 0, 0, 0, 295, 379, 297, 298, 299, 2540 300, 1, 2, 3, 4, 5, 6, 7, 8, 9, 2541 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2542 20, 21, 22, 23, 24, 0, 0, 25, 26, 27, 2543 28, 0, 0, 29, 0, 0, 30, 31, 0, 0, 2544 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2545 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2546 0, 32, 0, 0, 33, 0, 34, 0, 35, 36, 2547 0, 37, 38, 39, 0, 0, 0, 0, 0, 0, 2548 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, 2549 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2550 0, 0, 0, 0, 0, 0, 42, 0, 43, 0, 2551 0, 0, -520, 0, 0, 0, 44, 203, 2, 204, 2552 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 2553 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2554 24, 0, 0, 25, 26, 27, 0, 0, 0, 0, 2555 0, 0, 30, 8, 9, 10, 11, 12, 13, 14, 2556 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2557 0, 0, 25, 26, 27, 491, 492, 493, 0, 0, 2558 33, 30, 34, 0, 35, 36, 0, 205, 38, 39, 2559 0, 0, 0, 0, 0, 0, 40, 41, 0, 0, 2560 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 2561 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 2562 0, 0, 42, 0, 206, 0, 0, 0, 0, 0, 2563 0, 0, 207, 1, 2, 204, 4, 5, 6, 7, 2564 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2565 18, 19, 20, 21, 22, 23, 24, -294, 0, 25, 2566 26, 27, 28, 0, 0, 29, 0, 0, 30, 0, 2567 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2568 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2569 0, 0, 0, 0, 0, 0, 33, 0, 34, 0, 2570 35, 0, 0, 37, 38, 0, 0, -294, 0, 1, 2571 2, 204, 4, 5, 6, 7, 8, 9, 10, 11, 2572 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2573 22, 23, 24, 0, 0, 25, 26, 27, 28, 0, 2574 43, 29, 0, 0, 30, 0, 0, 0, 109, 0, 2575 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2576 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2577 0, 0, 33, 0, 34, 0, 35, 0, 0, 37, 2578 38, 0, 203, 2, 204, 4, 5, 6, 7, 8, 2579 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2580 19, 20, 21, 22, 23, 24, 0, 0, 25, 26, 2581 27, 0, 0, 0, 0, 0, 43, 30, 0, 0, 2582 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 2583 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2584 0, 0, 0, 0, 0, 33, 0, 34, 0, 35, 2585 0, 0, 205, 38, 2, 204, 4, 5, 6, 7, 2586 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2587 18, 19, 20, 21, 22, 23, 24, 0, 0, 25, 2588 26, 27, 0, 0, 0, 0, 0, 0, 30, 206, 2589 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 2590 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2591 0, 0, 0, 0, 0, 0, 33, 0, 34, 0, 2592 35, 36, 0, 205, 38, 39, 0, 0, 0, 0, 2593 0, 0, 40, 41, 0, 0, 8, 9, 10, 11, 2594 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2595 22, 23, 24, 0, 0, 25, 26, 27, 42, 0, 2596 206, 0, 0, 0, 30, 0, 0, 0, 207, 2, 2597 204, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2598 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2599 23, 24, 33, 0, 25, 26, 27, 36, 0, 37, 2600 38, 39, 0, 30, 0, 0, 0, 0, 40, 41, 2601 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2602 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2603 0, 33, 0, 34, 42, 35, 43, 0, 37, 38, 2604 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 2605 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2606 1368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2607 0, 0, 0, 0, 0, 686, 0, 0, 0, 0, 2608 0, 0, 0, 633, 2, 204, 4, 5, 6, 7, 2609 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2610 18, 19, 20, 21, 22, 23, 24, 0, 0, 25, 2611 26, 27, 0, 0, 0, 0, 0, 0, 30, 0, 2612 0, 0, 0, 8, 9, 10, 11, 12, 13, 14, 2613 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2614 0, 0, 25, 26, 27, 0, 33, 0, 34, 0, 2615 35, 30, 0, 37, 38, 0, 0, 0, 0, 0, 2616 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2617 0, 0, 0, 0, 0, 1370, 0, 0, 0, 33, 2618 0, 0, 0, 0, 36, 0, 335, 336, 39, 0, 2619 686, 0, 0, 0, 0, 40, 41, 0, 633, 2, 2620 204, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2621 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2622 23, 24, 0, 337, 25, 26, 27, 0, 0, 0, 2623 0, 109, 0, 30, 0, 0, 0, 0, 0, 0, 2624 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2625 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2626 0, 33, 0, 34, 0, 35, 0, 0, 205, 38, 2627 2, 204, 4, 5, 6, 7, 8, 9, 10, 11, 2628 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2629 22, 23, 24, 0, 0, 25, 26, 27, 0, 0, 2630 0, 0, 0, 0, 30, 268, 0, 0, 0, 0, 2631 0, 0, 0, 628, 0, 0, 0, 0, 0, 0, 2632 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2633 0, 0, 33, 0, 34, 0, 35, 0, 0, 37, 2634 38, 2, 204, 4, 5, 6, 7, 8, 9, 10, 2635 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2636 21, 22, 23, 24, 0, 0, 25, 26, 27, 0, 2637 0, 0, 0, 0, 0, 30, 686, 0, 0, 0, 2638 0, 0, 0, 0, 633, 0, 0, 0, 0, 0, 2639 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2640 0, 0, 0, 33, 0, 34, 0, 35, 0, 0, 2641 37, 38, 2, 204, 4, 5, 6, 7, 8, 9, 2642 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2643 20, 21, 22, 23, 24, 0, 0, 25, 26, 27, 2644 0, 0, 0, 0, 0, 0, 30, 598, 0, 0, 2645 0, 0, 0, 0, 0, 633, 0, 0, 0, 0, 2646 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2647 0, 0, 0, 0, 33, 0, 34, 0, 35, 0, 2648 0, 205, 38, 8, 9, 10, 11, 12, 13, 14, 2649 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2650 0, 0, 25, 26, 27, 0, 0, 0, 0, 280, 2651 281, 30, 282, 0, 0, 0, 0, 0, 206, 0, 2652 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 2653 0, 0, 0, 0, 0, 0, 0, 0, 283, 33, 2654 0, 0, 0, 0, 284, 0, 37, 38, 285, 0, 2655 0, 286, 287, 288, 289, 40, 41, 0, 290, 291, 2656 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 2657 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2658 0, 293, 0, 524, 0, 0, 169, 0, 0, 0, 2659 295, 296, 297, 298, 299, 300, 8, 9, 10, 11, 2660 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2661 22, 23, 24, 0, 0, 25, 26, 27, 0, 0, 2662 0, 0, 280, 281, 30, 282, 8, 9, 10, 11, 2663 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2664 22, 23, 24, -294, 0, 25, 26, 27, 0, 0, 2665 0, 283, 33, 0, 30, 0, 0, 284, 0, 37, 2666 38, 285, 0, 0, 286, 287, 288, 289, 40, 41, 2667 0, 290, 291, 0, 0, 0, 0, 0, 0, 292, 2668 0, 0, 33, 0, 0, 0, 0, 36, 0, 335, 2669 336, 39, 0, -294, 293, 0, 598, -3, 40, 41, 2670 0, 0, 0, 295, 599, 297, 298, 299, 300, 8, 2671 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2672 19, 20, 21, 22, 23, 24, 337, 0, 25, 26, 2673 27, 0, 0, 0, 109, 280, 281, 30, 282, 8, 2674 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2675 19, 20, 21, 22, 23, 24, 0, 0, 25, 26, 2676 27, 0, 0, 0, 283, 33, 0, 30, 0, 0, 2677 648, 0, 37, 38, 285, 0, 0, 286, 287, 288, 2678 289, 40, 41, 0, 290, 291, 0, 0, 0, 0, 2679 0, 0, 292, 0, 0, 33, 0, 0, 0, 0, 2680 108, 0, 37, 38, 0, 0, 0, 293, -35, 765, 2681 0, 40, 41, 0, 0, 0, 295, 296, 297, 298, 2682 299, 300, 8, 9, 10, 11, 12, 13, 14, 15, 2683 16, 17, 18, 19, 20, 21, 22, 23, 24, 43, 2684 0, 25, 26, 27, 0, 0, 0, 109, 280, 281, 2685 30, 282, 8, 9, 10, 11, 12, 13, 14, 15, 2686 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 2687 0, 25, 26, 27, 0, 0, 0, 283, 33, 0, 2688 30, 452, 0, 284, 0, 37, 38, 285, 0, 0, 2689 286, 287, 288, 289, 40, 41, 0, 290, 291, 0, 2690 0, 0, 0, 0, 0, 292, 0, 0, 33, 0, 2691 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 2692 293, 0, 294, 0, 0, 0, 0, 0, 0, 295, 2693 296, 297, 298, 299, 300, 8, 9, 10, 11, 12, 2694 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2695 23, 24, 453, 0, 25, 26, 27, 0, 0, 0, 2696 109, 280, 281, 30, 282, 0, 0, 0, 0, 0, 2697 0, 0, 0, 8, 9, 10, 11, 12, 13, 14, 2698 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2699 283, 33, 25, 26, 27, 0, 284, 0, 37, 38, 2700 285, 30, 0, 286, 287, 288, 289, 40, 41, 0, 2701 290, 291, 0, 0, 0, 0, 0, 0, 292, 0, 2702 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 2703 0, 0, 0, 293, 0, 155, 37, 38, 0, 0, 2704 0, 0, 295, 296, 297, 298, 299, 300, 8, 9, 2705 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2706 20, 21, 22, 23, 24, 0, 0, 25, 26, 27, 2707 0, 642, 0, 337, 280, 281, 30, 282, 0, 0, 2708 0, 109, 0, 0, 0, 0, 8, 9, 10, 11, 2709 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2710 22, 23, 24, 283, 33, 25, 26, 27, 0, 284, 2711 0, 37, 38, 285, 30, 0, 286, 287, 288, 289, 2712 40, 41, 0, 290, 291, 0, 0, 0, 0, 0, 2713 0, 292, 0, 0, 0, 0, 0, 0, 0, 0, 2714 0, 0, 33, 0, 0, 0, 293, 0, 598, 37, 2715 38, 0, 0, 0, 0, 295, 599, 297, 298, 299, 2716 300, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2717 17, 18, 19, 20, 21, 22, 23, 24, 0, 0, 2718 25, 26, 27, 0, 642, 0, 337, 280, 281, 30, 2719 282, 0, 0, 0, 633, 0, 0, 0, 0, 8, 2720 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2721 19, 20, 21, 22, 23, 24, 283, 33, 25, 26, 2722 27, 0, 284, 0, 37, 38, 285, 30, 452, 286, 2723 287, 288, 289, 40, 41, 0, 290, 291, 0, 0, 2724 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 2725 0, 0, 0, 0, 0, 33, 0, 0, 0, 293, 2726 0, 377, 37, 38, 0, 0, 0, 0, 295, 379, 2727 297, 298, 299, 300, 473, 2, 204, 4, 5, 6, 2728 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2729 17, 18, 19, 20, 21, 22, 23, 24, 0, 453, 2730 25, 26, 27, 1234, 0, 0, 0, 109, 0, 30, 2731 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2732 18, 19, 20, 21, 22, 23, 24, 0, 0, 25, 2733 26, 27, 0, 0, 0, 0, 0, 33, 30, 34, 2734 0, 35, 0, 0, 37, 38, 0, 0, 8, 9, 2735 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2736 20, 21, 22, 23, 24, 0, 33, 25, 26, 27, 2737 0, 36, 0, 205, 38, 39, 30, 0, 0, 0, 2738 0, 0, 40, 41, -3, 0, 8, 9, 10, 11, 2739 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2740 22, 23, 24, 0, 33, 25, 26, 27, 42, 36, 2741 268, 335, 336, 39, 30, 0, 0, 0, 207, 0, 2742 40, 41, 0, 0, 8, 9, 10, 11, 12, 13, 2743 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2744 24, 0, 33, 25, 26, 27, 642, 0, 337, 37, 2745 38, 0, 30, 0, 0, 0, 633, 8, 9, 10, 2746 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2747 21, 22, 23, 24, 0, 0, 25, 26, 27, 0, 2748 33, 0, 0, 0, 0, 30, 255, 37, 38, 0, 2749 0, 0, 0, 0, 109, 8, 9, 10, 11, 12, 2750 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2751 23, 24, 0, 33, 25, 26, 27, 0, 0, 0, 2752 205, 38, 0, 30, 155, 0, 0, 0, 0, 0, 2753 0, 0, 109, 8, 9, 10, 11, 12, 13, 14, 2754 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2755 0, 33, 25, 26, 27, 0, 0, 268, 37, 38, 2756 0, 30, 0, 0, 0, 269, 8, 9, 10, 11, 2757 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2758 22, 23, 24, 0, 0, 25, 26, 27, 0, 33, 2759 0, 0, 0, 0, 30, 255, 37, 38, 0, 0, 2760 0, 0, 0, 633, 8, 9, 10, 11, 12, 13, 2761 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2762 24, 0, 33, 25, 26, 27, 0, 0, 0, 37, 2763 38, 0, 30, 337, 0, 0, 0, 0, 0, 0, 2764 0, 633, 8, 9, 10, 11, 12, 13, 14, 15, 2765 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 2766 33, 25, 26, 27, 0, 0, 453, 205, 38, 0, 2767 30, 0, 0, 0, 109, 8, 9, 10, 11, 12, 2768 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2769 23, 24, 0, 0, 25, 26, 27, 0, 33, 0, 2770 0, 0, 0, 30, 268, 37, 38, 0, 0, 0, 2771 0, 0, 628, 8, 9, 10, 11, 12, 13, 14, 2772 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2773 0, 33, 25, 26, 27, 0, 0, 0, 37, 38, 2774 0, 30, 598, 0, 0, 0, 0, 0, 0, 0, 2775 633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2776 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 2777 0, 0, 0, 0, 0, 337, 37, 38, 0, 0, 2778 0, 0, 0, 109, 2, 204, 4, 5, 6, 7, 2779 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2780 18, 19, 20, 21, 22, 23, 24, 0, 0, 25, 2781 26, 27, 0, 43, 0, 0, 0, 0, 30, 0, 2782 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 2783 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2784 0, 0, 0, 0, 0, 0, 33, 0, 34, 0, 2785 35, 0, 0, 37, 38, 280, 281, 0, 282, 1062, 2786 0, 1063, 0, 0, 1064, 1065, 1066, 1067, 1068, 1069, 2787 1070, 1071, 0, 0, 1548, 1072, 0, 0, 0, 1073, 2788 1074, 0, 32, 0, 283, 0, 0, 0, 0, -412, 2789 648, 0, 0, 0, 285, 0, 0, 286, 287, 288, 2790 289, 40, 41, 0, 290, 291, 0, 0, 0, 0, 2791 0, 0, 292, 0, 0, 0, 0, 0, 0, 0, 2792 0, 0, 0, 0, 0, 0, 0, 293, 0, 377, 2793 0, 0, 169, 0, 0, 0, 295, 379, 297, 298, 2794 299, 300, 0, 0, 0, 0, 1076, 0, 280, 281, 2795 -129, 282, 1062, 0, 1063, 0, 0, 1064, 1065, 1066, 2796 1067, 1068, 1069, 1070, 1071, 0, 0, 0, 1072, 0, 2797 0, 0, 1073, 1074, 0, 32, 0, 283, 0, 0, 2798 0, 0, 0, 648, 0, 0, 0, 285, 0, 0, 2799 286, 287, 288, 289, 40, 41, 0, 290, 291, 0, 2800 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 2801 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2802 293, 0, 377, 0, 0, 169, 0, 0, 0, 295, 2803 379, 297, 298, 299, 300, 0, 0, 0, 0, 1076, 2804 0, 280, 281, -129, 282, 1062, 0, 1063, 1418, 1419, 2805 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 0, 0, 2806 1548, 1072, 0, 0, 0, 1073, 1074, 0, 32, 0, 2807 283, 0, 0, 0, 0, 0, 648, 0, 0, 0, 2808 285, 0, 0, 286, 287, 288, 289, 40, 41, 0, 2809 290, 291, 0, 0, 0, 0, 0, 0, 292, 0, 2810 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2811 0, 0, 0, 293, 0, 377, 0, 0, 169, 0, 2812 0, 0, 295, 379, 297, 298, 299, 300, 0, 0, 2813 280, 281, 1076, 282, 1062, 0, 1063, 1418, 1419, 1064, 2814 1065, 1066, 1067, 1068, 1069, 1070, 1071, 0, 0, 0, 2815 1072, 0, 0, 0, 1073, 1074, 0, 32, 0, 283, 2816 0, 0, 0, 0, 0, 648, 0, 0, 0, 285, 2817 0, 0, 286, 287, 288, 289, 40, 41, 0, 290, 2818 291, 0, 0, 0, 0, 0, 0, 292, 0, 0, 2819 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2820 0, 0, 293, 0, 377, 0, 0, 169, 0, 0, 2821 0, 295, 379, 297, 298, 299, 300, 0, 0, 280, 2822 281, 1076, 282, 1062, 0, 1063, 0, 0, 1064, 1065, 2823 1066, 1067, 1068, 1069, 1070, 1071, 0, 0, 0, 1072, 2824 0, 0, 0, 1073, 1074, 0, 32, 0, 283, 0, 2825 0, 0, 0, 0, 648, 0, 0, 0, 285, 0, 2826 0, 286, 287, 288, 289, 40, 41, 0, 290, 291, 2827 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 2828 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2829 0, 293, 0, 377, 0, 0, 169, 0, 0, 0, 2830 295, 379, 297, 298, 299, 300, 0, 0, 0, 0, 2831 1076, 2, 204, 4, 5, 6, 7, 8, 9, 10, 2832 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2833 21, 22, 23, 24, 0, 0, 25, 26, 27, 0, 2834 0, 0, 0, 0, 0, 30, 0, 280, 281, 0, 2835 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2836 0, 0, 0, 0, 0, 0, 280, 281, 0, 282, 2837 0, 0, 0, 33, 0, 34, 283, 35, 0, 0, 2838 37, 38, 284, 0, 0, 0, 285, 0, 0, 286, 2839 287, 288, 289, 40, 41, 283, 290, 291, 0, 0, 2840 0, 648, 1327, 0, 292, 285, 0, 0, 286, 287, 2841 288, 289, 40, 41, 0, 290, 291, 0, 0, 293, 2842 0, 377, 0, 292, 280, 281, 0, 282, 295, 733, 2843 297, 298, 299, 300, 0, 0, 0, 0, 293, 0, 2844 784, 0, 0, 280, 281, 0, 282, 295, 379, 297, 2845 298, 299, 300, 283, 0, 0, 0, 0, 0, 284, 2846 0, 0, 0, 285, 0, 0, 286, 287, 288, 289, 2847 40, 41, 283, 290, 291, 0, 0, 0, 284, 0, 2848 0, 292, 285, 0, 0, 286, 287, 288, 289, 40, 2849 41, 0, 290, 291, 0, 0, 293, 0, 377, 0, 2850 292, 280, 281, 0, 282, 295, 826, 297, 298, 299, 2851 300, 0, 0, 0, 0, 517, 0, 0, 0, 0, 2852 0, 0, 0, 0, 295, 379, 297, 298, 299, 300, 2853 283, 0, 0, 0, 0, 0, 284, 0, 0, 0, 2854 285, 0, 0, 286, 287, 288, 289, 40, 41, 0, 2855 290, 291, 0, 0, 0, 0, 0, 0, 292, 0, 2856 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2857 0, 0, 0, 520, 0, 0, 0, 0, 0, 0, 2858 0, 0, 295, 379, 297, 298, 299, 300, 2, 204, 2859 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 2860 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2861 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2862 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 2863 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2864 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2865 33, 0, 34, 0, 35, 36, 0, 172, 173, 39, 2866 0, 0, 0, 0, 0, 0, 40, 41, 203, 2, 2867 204, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2868 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2869 23, 24, 0, 0, 25, 26, 27, 0, 0, 0, 2870 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 2871 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2872 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2873 0, 33, 0, 34, 0, 35, 0, 0, 205, 38, 2874 473, 2, 204, 4, 5, 6, 7, 8, 9, 10, 2875 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2876 21, 22, 23, 24, 0, 0, 25, 26, 27, 0, 2877 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 2878 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2879 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2880 0, 0, 0, 33, 0, 34, 0, 35, 0, 0, 2881 37, 38, 2, 204, 4, 5, 6, 7, 8, 9, 2882 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2883 20, 21, 22, 23, 24, 0, 0, 25, 26, 27, 2884 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 2885 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2886 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2887 0, 0, 0, 0, 33, 0, 34, 0, 35, 0, 2888 0, 205, 38 2889 }; 2890 2891 #define yypact_value_is_default(yystate) \ 2892 ((yystate) == (-1281)) 2893 2894 #define yytable_value_is_error(yytable_value) \ 2895 YYID (0) 2896 2897 static const yytype_int16 yycheck[] = 2898 { 2899 0, 1, 0, 42, 237, 217, 183, 183, 202, 42, 2900 0, 1, 1, 183, 42, 542, 183, 183, 114, 103, 2901 184, 455, 519, 343, 0, 0, 628, 454, 28, 29, 2902 183, 31, 697, 31, 697, 183, 498, 697, 610, 608, 2903 502, 31, 42, 679, 44, 461, 44, 347, 1042, 496, 2904 279, 901, 655, 1, 54, 31, 31, 166, 167, 608, 2905 60, 1061, 60, 63, 608, 63, 66, 610, 66, 153, 2906 347, 0, 578, 63, 1005, 277, 66, 66, 416, 998, 2907 80, 81, 1041, 1042, 184, 608, 263, 263, 63, 779, 2908 42, 362, 185, 263, 608, 366, 263, 263, 436, 31, 2909 264, 528, 31, 199, 104, 1337, 444, 107, 608, 27, 2910 263, 776, 0, 776, 114, 263, 776, 42, 608, 722, 2911 642, 643, 644, 1054, 758, 424, 425, 611, 38, 254, 2912 643, 644, 38, 617, 81, 42, 62, 106, 1418, 661, 2913 0, 1, 63, 31, 183, 145, 44, 145, 661, 109, 2914 183, 81, 108, 153, 226, 183, 116, 1422, 158, 77, 2915 158, 130, 38, 110, 264, 612, 259, 260, 488, 616, 2916 50, 31, 44, 245, 743, 109, 43, 44, 814, 109, 2917 1073, 1074, 116, 183, 184, 81, 184, 108, 824, 54, 2918 637, 43, 44, 38, 641, 38, 408, 84, 108, 199, 2919 110, 500, 63, 839, 110, 131, 66, 207, 1440, 207, 2920 901, 109, 1492, 735, 43, 44, 216, 494, 108, 219, 2921 519, 219, 735, 38, 263, 112, 226, 81, 108, 219, 2922 263, 183, 108, 11, 110, 263, 115, 109, 108, 104, 2923 404, 241, 107, 743, 219, 245, 1240, 114, 1141, 249, 2924 250, 249, 131, 743, 115, 1520, 340, 113, 183, 249, 2925 1525, 113, 116, 263, 264, 108, 264, 110, 115, 838, 2926 270, 38, 144, 249, 249, 0, 183, 277, 850, 599, 2927 1545, 510, 3, 717, 113, 369, 585, 1552, 81, 838, 2928 454, 416, 292, 108, 838, 110, 1290, 158, 394, 1474, 2929 111, 1525, 250, 1303, 404, 827, 31, 850, 628, 207, 2930 610, 436, 818, 633, 827, 838, 109, 249, 1008, 444, 2931 249, 1545, 486, 116, 838, 596, 422, 327, 1552, 327, 2932 1289, 1290, 428, 81, 1509, 207, 1511, 1256, 838, 94, 2933 238, 108, 95, 110, 292, 111, 346, 347, 838, 115, 2934 81, 216, 690, 95, 454, 1525, 840, 115, 219, 698, 2935 108, 249, 3, 363, 1, 237, 254, 367, 639, 122, 2936 1061, 269, 71, 348, 129, 1225, 696, 108, 378, 71, 2937 122, 720, 1552, 82, 83, 108, 486, 959, 108, 249, 2938 82, 83, 114, 115, 394, 293, 257, 269, 296, 71, 2939 261, 108, 1038, 1039, 404, 270, 404, 44, 130, 958, 2940 82, 83, 277, 115, 958, 71, 0, 115, 1020, 0, 2941 1414, 115, 422, 130, 296, 872, 82, 83, 428, 131, 2942 430, 488, 131, 131, 109, 958, 1070, 131, 110, 131, 2943 115, 67, 115, 89, 90, 71, 675, 531, 74, 115, 2944 76, 130, 772, 115, 454, 1414, 71, 83, 131, 459, 2945 1096, 1097, 118, 1463, 464, 131, 103, 82, 83, 131, 2946 1470, 343, 109, 473, 108, 1406, 1407, 115, 478, 125, 2947 126, 346, 109, 108, 109, 109, 486, 348, 486, 116, 2948 490, 115, 490, 131, 494, 110, 109, 497, 363, 499, 2949 490, 71, 367, 130, 479, 967, 1003, 144, 120, 121, 2950 937, 927, 82, 83, 490, 490, 153, 964, 945, 519, 2951 697, 697, 115, 1523, 249, 473, 108, 697, 416, 254, 2952 697, 697, 761, 108, 1225, 699, 536, 1140, 131, 539, 2953 110, 541, 542, 1115, 697, 1029, 1030, 656, 436, 697, 2954 850, 108, 424, 425, 452, 757, 444, 455, 829, 87, 2955 88, 490, 833, 461, 991, 690, 203, 663, 429, 71, 2956 207, 519, 665, 850, 115, 10, 11, 12, 13, 14, 2957 82, 83, 115, 108, 210, 642, 643, 644, 536, 589, 2958 131, 539, 470, 541, 542, 109, 596, 115, 131, 699, 2959 237, 238, 490, 38, 661, 109, 108, 732, 608, 115, 2960 610, 695, 1303, 131, 512, 71, 514, 115, 479, 517, 2961 111, 597, 520, 109, 115, 131, 82, 83, 500, 629, 2962 490, 66, 269, 131, 1270, 272, 109, 79, 977, 696, 2963 282, 589, 1278, 1279, 1280, 645, 71, 519, 73, 74, 2964 109, 651, 923, 295, 296, 630, 293, 82, 83, 296, 2965 660, 111, 662, 663, 664, 307, 114, 1101, 110, 1303, 2966 112, 79, 3, 111, 116, 887, 108, 115, 735, 10, 2967 11, 12, 13, 14, 91, 92, 963, 771, 113, 0, 2968 1326, 416, 109, 108, 293, 110, 908, 697, 115, 699, 2969 1020, 343, 110, 340, 112, 111, 343, 38, 116, 115, 2970 108, 436, 712, 585, 662, 772, 664, 118, 718, 444, 2971 31, 131, 123, 124, 350, 362, 352, 599, 71, 366, 2972 730, 42, 369, 44, 111, 66, 969, 379, 115, 82, 2973 83, 602, 108, 743, 744, 109, 1380, 109, 723, 60, 2974 1131, 115, 63, 115, 1135, 66, 628, 757, 108, 63, 2975 110, 633, 737, 488, 629, 490, 108, 110, 118, 630, 2976 827, 1495, 1463, 937, 635, 108, 108, 1501, 110, 1470, 2977 645, 945, 730, 108, 893, 110, 118, 424, 425, 111, 2978 109, 109, 1319, 118, 1133, 660, 115, 115, 1522, 113, 2979 109, 679, 690, 1527, 131, 52, 115, 113, 512, 71, 2980 514, 73, 74, 517, 440, 452, 520, 109, 455, 717, 2981 82, 83, 109, 115, 461, 424, 425, 128, 115, 130, 2982 113, 1102, 1523, 1467, 145, 1469, 473, 937, 838, 1033, 2983 1160, 114, 115, 109, 732, 945, 108, 158, 95, 115, 2984 850, 113, 1191, 1192, 109, 108, 831, 110, 834, 131, 2985 115, 498, 723, 500, 1529, 502, 1529, 131, 109, 1529, 2986 115, 116, 183, 184, 115, 512, 737, 514, 109, 109, 2987 517, 109, 519, 520, 115, 115, 71, 115, 73, 74, 2988 1524, 108, 757, 893, 531, 108, 207, 82, 83, 109, 2989 900, 901, 1131, 109, 109, 115, 1135, 1136, 219, 115, 2990 115, 901, 81, 512, 556, 557, 558, 108, 517, 110, 2991 1240, 520, 108, 923, 110, 901, 901, 109, 110, 4, 2992 5, 6, 7, 8, 9, 108, 814, 937, 249, 71, 2993 111, 73, 74, 81, 191, 945, 824, 1056, 585, 119, 2994 82, 83, 263, 901, 108, 109, 110, 599, 108, 596, 2995 110, 839, 599, 963, 108, 690, 110, 214, 57, 58, 2996 831, 696, 108, 109, 110, 574, 108, 224, 968, 968, 2997 108, 113, 110, 983, 1041, 4, 5, 6, 7, 8, 2998 9, 628, 992, 68, 127, 70, 633, 108, 109, 110, 2999 1000, 128, 639, 1003, 130, 1005, 71, 732, 73, 74, 3000 75, 110, 108, 901, 110, 3, 327, 82, 83, 114, 3001 115, 1250, 10, 11, 12, 13, 14, 1123, 71, 927, 3002 73, 74, 75, 115, 116, 983, 347, 115, 116, 82, 3003 83, 901, 108, 108, 110, 110, 293, 772, 1023, 68, 3004 38, 70, 1000, 118, 1054, 1003, 131, 1005, 695, 108, 3005 109, 110, 1401, 93, 1064, 108, 108, 1067, 1068, 1069, 3006 108, 1061, 10, 11, 12, 13, 14, 1504, 66, 1418, 3007 717, 563, 564, 565, 566, 1061, 1061, 71, 111, 73, 3008 74, 733, 1092, 404, 43, 44, 44, 969, 82, 83, 3009 38, 111, 702, 1160, 704, 109, 1054, 109, 968, 1338, 3010 747, 109, 60, 1342, 109, 63, 1064, 109, 66, 1067, 3011 1068, 1069, 3, 1123, 561, 562, 110, 1554, 66, 10, 3012 11, 12, 13, 14, 771, 109, 1220, 779, 71, 108, 3013 73, 74, 75, 454, 111, 109, 111, 111, 1020, 82, 3014 83, 115, 1491, 1492, 57, 58, 59, 38, 567, 568, 3015 1038, 1039, 1023, 1262, 1263, 1264, 130, 131, 559, 560, 3016 108, 110, 110, 1061, 115, 108, 901, 130, 113, 490, 3017 118, 108, 111, 494, 826, 66, 109, 109, 116, 115, 3018 111, 111, 829, 111, 441, 111, 833, 145, 1198, 116, 3019 28, 1061, 116, 1101, 109, 84, 85, 86, 109, 111, 3020 158, 109, 1202, 1203, 1203, 1444, 113, 116, 1096, 1097, 3021 1220, 114, 114, 114, 108, 1225, 115, 1202, 475, 108, 3022 115, 110, 1289, 112, 113, 1225, 184, 109, 4, 5, 3023 6, 7, 8, 9, 131, 109, 109, 116, 109, 1225, 3024 1225, 109, 109, 115, 1244, 1244, 71, 109, 109, 207, 3025 75, 109, 1262, 1263, 1264, 512, 32, 82, 83, 109, 3026 517, 219, 109, 520, 109, 109, 71, 1225, 73, 74, 3027 75, 84, 85, 86, 109, 109, 923, 82, 83, 470, 3028 927, 109, 109, 108, 114, 110, 109, 608, 109, 610, 3029 28, 1397, 68, 118, 70, 108, 1539, 110, 1298, 112, 3030 113, 698, 111, 1303, 1262, 1263, 1264, 109, 130, 1319, 3031 1320, 109, 109, 1298, 114, 109, 115, 1303, 1303, 111, 3032 967, 968, 969, 720, 111, 109, 1061, 1225, 71, 109, 3033 115, 1202, 75, 1203, 109, 901, 115, 1337, 1337, 82, 3034 83, 115, 1529, 1529, 116, 113, 111, 71, 109, 1529, 3035 1238, 75, 1529, 1529, 111, 1225, 1530, 115, 82, 83, 3036 115, 1319, 1320, 109, 1374, 108, 1529, 1377, 1020, 327, 3037 109, 1529, 108, 1020, 1244, 118, 697, 108, 699, 108, 3038 1554, 108, 1270, 108, 108, 111, 1396, 1397, 116, 131, 3039 1278, 1279, 1280, 114, 118, 109, 1406, 1407, 1504, 71, 3040 109, 73, 74, 75, 109, 1303, 0, 1, 128, 1061, 3041 82, 83, 1422, 114, 811, 113, 1374, 1427, 111, 1377, 3042 1530, 678, 743, 744, 131, 1160, 109, 1298, 115, 111, 3043 687, 115, 111, 1303, 691, 1445, 109, 31, 1326, 109, 3044 1440, 1440, 109, 111, 1554, 111, 404, 1457, 1406, 1407, 3045 44, 111, 109, 54, 1101, 1102, 111, 111, 111, 46, 3046 29, 109, 131, 1463, 1422, 114, 131, 1337, 131, 1427, 3047 1470, 71, 66, 73, 74, 75, 114, 1463, 1463, 131, 3048 1529, 131, 82, 83, 1470, 1470, 1529, 1445, 679, 116, 3049 1225, 1529, 889, 109, 1504, 1505, 111, 114, 1064, 1457, 3050 111, 111, 111, 104, 1514, 1240, 107, 111, 108, 103, 3051 1520, 80, 81, 111, 111, 1525, 111, 838, 118, 1529, 3052 1530, 1396, 1530, 1523, 109, 1177, 109, 111, 108, 850, 3053 111, 63, 108, 1543, 108, 1545, 59, 1523, 1523, 1549, 3054 113, 109, 1552, 109, 1554, 131, 1554, 1505, 80, 116, 3055 1560, 145, 153, 111, 1564, 111, 1514, 109, 111, 153, 3056 154, 109, 1520, 108, 1472, 1463, 1474, 1525, 1303, 95, 3057 1440, 95, 1470, 1220, 108, 114, 131, 115, 111, 109, 3058 977, 109, 109, 115, 109, 1543, 41, 1545, 131, 131, 3059 184, 1549, 95, 1463, 1552, 1204, 1205, 1244, 1207, 116, 3060 1470, 1509, 1560, 1511, 1213, 199, 1564, 1216, 202, 203, 3061 109, 1008, 109, 207, 95, 216, 937, 131, 109, 109, 3062 131, 116, 131, 814, 945, 1523, 158, 109, 114, 109, 3063 50, 131, 52, 824, 228, 55, 56, 57, 232, 59, 3064 234, 111, 963, 111, 108, 114, 131, 114, 839, 243, 3065 109, 109, 131, 1523, 74, 249, 109, 1539, 109, 1225, 3066 254, 1058, 1076, 569, 1225, 570, 86, 87, 925, 270, 3067 264, 571, 241, 1492, 63, 573, 277, 1382, 272, 572, 3068 25, 26, 27, 1564, 73, 1313, 1136, 219, 1342, 1470, 3069 1337, 10, 11, 12, 13, 14, 10, 11, 12, 13, 3070 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3071 24, 25, 26, 27, 1092, 29, 30, 31, 452, 38, 3072 452, 945, 704, 464, 38, 257, 115, 893, 1463, 261, 3073 947, 992, 589, 965, 657, 1470, 1133, 747, 1244, 490, 3074 757, 577, -1, -1, 577, 346, 340, 66, 577, 343, 3075 -1, 96, 66, 98, 1320, 349, -1, -1, -1, 73, 3076 74, -1, 363, 77, -1, -1, 367, 1376, 362, 158, 3077 -1, -1, 366, -1, -1, 369, -1, 10, 11, 12, 3078 13, 14, -1, -1, -1, -1, -1, -1, 1523, 108, 3079 -1, 110, -1, 1440, 1191, 1192, 110, -1, -1, 118, 3080 -1, -1, -1, -1, 118, 38, -1, -1, 1374, 378, 3081 -1, 1377, -1, -1, -1, 1072, 348, -1, -1, -1, 3082 -1, -1, 416, -1, -1, 1472, -1, 1474, -1, 430, 3083 219, -1, -1, 66, 179, -1, -1, 431, -1, -1, 3084 -1, -1, 436, -1, 189, 190, -1, 1038, 1039, 194, 3085 444, 196, 197, -1, -1, -1, 1422, -1, -1, -1, 3086 -1, 1427, 1509, -1, 1511, -1, -1, -1, 257, -1, 3087 -1, -1, 261, -1, -1, 108, 470, 110, -1, 473, 3088 -1, -1, -1, -1, -1, 118, -1, -1, 277, -1, 3089 459, 1457, 1539, -1, 488, 464, 490, 429, -1, 10, 3090 11, 12, 13, 14, 498, 1096, 1097, -1, 502, -1, 3091 -1, -1, -1, -1, -1, -1, -1, 10, 11, 12, 3092 13, 14, -1, 343, 344, -1, -1, 38, 497, 71, 3093 499, 73, 74, 75, -1, 355, 356, 531, 532, -1, 3094 82, 83, -1, -1, -1, 38, -1, 479, -1, -1, 3095 -1, -1, -1, -1, -1, 66, -1, -1, -1, 348, 3096 71, -1, 73, 74, 75, -1, 108, -1, 110, -1, 3097 -1, 82, 83, 66, 116, -1, 118, 1543, 71, -1, 3098 73, 74, 75, 1549, 578, -1, -1, -1, -1, 82, 3099 83, -1, -1, -1, 1560, 596, -1, 108, 1564, 110, 3100 -1, -1, 596, 597, 1401, 599, -1, 118, -1, -1, 3101 -1, -1, -1, -1, -1, 108, 610, 110, -1, -1, 3102 -1, 1418, -1, -1, -1, 118, -1, -1, 629, -1, 3103 -1, -1, -1, -1, 628, -1, -1, -1, -1, 633, 3104 429, -1, -1, -1, 645, 639, -1, 1238, 642, 643, 3105 644, -1, -1, -1, -1, 1312, -1, 446, -1, 660, 3106 71, -1, 73, 74, 75, -1, -1, 661, -1, -1, 3107 602, 82, 83, -1, -1, -1, -1, -1, -1, 1270, 3108 -1, -1, 651, -1, -1, 679, -1, 1278, 1279, 1280, 3109 479, -1, -1, -1, 1491, 1492, 690, 108, 630, 110, 3110 -1, 695, 696, 635, -1, 699, -1, 118, -1, -1, 3111 -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3112 19, 20, 21, 22, 23, 24, 25, 26, 0, -1, 3113 29, 30, 31, -1, -1, 1326, -1, -1, 732, 38, 3114 39, 735, -1, 712, -1, -1, -1, -1, -1, 718, 3115 744, -1, -1, 747, -1, 0, 757, -1, -1, 31, 3116 71, -1, 73, 74, 75, -1, -1, 66, -1, -1, 3117 -1, 82, 83, -1, 73, 74, -1, 771, 772, -1, 3118 -1, -1, -1, 777, -1, -1, 31, -1, -1, -1, 3119 -1, 723, -1, -1, 66, -1, -1, 108, -1, 110, 3120 -1, -1, -1, -1, -1, 737, -1, 118, 1529, -1, 3121 -1, 110, -1, 602, 1471, 114, 1473, -1, -1, 118, 3122 814, 66, -1, -1, -1, -1, -1, -1, -1, -1, 3123 824, -1, -1, 827, -1, 829, 581, 582, 832, 833, 3124 834, 630, -1, -1, -1, 839, 635, -1, -1, -1, 3125 -1, 1508, -1, 1510, -1, 849, 71, -1, 73, 74, 3126 75, -1, -1, -1, -1, -1, 611, 82, 83, 614, 3127 615, -1, 617, -1, 619, 620, -1, -1, -1, 624, 3128 625, -1, 154, 96, 97, 98, 99, 100, 101, 102, 3129 103, 104, 105, 108, -1, -1, 1553, -1, 1555, 831, 3130 -1, -1, -1, 118, 724, -1, 726, 901, -1, 154, 3131 -1, 1568, 1569, 733, 734, -1, -1, 130, 738, -1, 3132 -1, -1, 923, -1, 893, -1, 187, -1, -1, 923, 3133 750, 900, -1, 194, 723, 755, -1, -1, 10, 11, 3134 12, 13, 14, -1, -1, -1, -1, -1, 737, -1, 3135 -1, -1, -1, -1, -1, -1, 228, -1, -1, -1, 3136 -1, 781, -1, 708, 709, 959, 38, -1, 757, 714, 3137 -1, -1, -1, 967, 968, -1, -1, 249, -1, -1, 3138 -1, -1, 254, -1, -1, -1, -1, -1, -1, -1, 3139 -1, 985, -1, -1, 66, -1, -1, -1, -1, 71, 3140 -1, 73, 74, 75, 249, 266, 826, -1, -1, 254, 3141 82, 83, -1, -1, -1, -1, 25, 26, 27, -1, 3142 -1, -1, -1, 992, -1, -1, 1020, -1, -1, -1, 3143 -1, -1, -1, -1, -1, -1, 108, -1, 110, 1033, 3144 -1, -1, 831, -1, 1038, 1039, 118, 1041, 1042, -1, 3145 -1, -1, -1, -1, 10, 11, 12, 13, 14, -1, 3146 -1, 322, -1, 883, 884, 885, 886, 1061, 888, 330, 3147 -1, -1, 333, -1, -1, -1, -1, 349, -1, -1, 3148 -1, -1, 38, -1, 904, -1, -1, 96, -1, 98, 3149 -1, 1023, -1, -1, -1, -1, -1, -1, 918, -1, 3150 -1, -1, 1096, 1097, 349, -1, -1, -1, 1102, -1, 3151 66, -1, -1, -1, 123, 71, -1, 73, 74, 75, 3152 -1, -1, -1, 1092, -1, -1, 82, 83, -1, -1, 3153 -1, -1, -1, -1, -1, 396, -1, 957, -1, 400, 3154 -1, -1, -1, -1, 416, -1, -1, -1, -1, -1, 3155 -1, -1, 108, -1, -1, -1, -1, -1, -1, 431, 3156 -1, -1, 118, -1, 436, -1, 1160, -1, -1, -1, 3157 179, 416, 444, -1, -1, -1, -1, 997, 187, -1, 3158 189, 190, -1, -1, 1004, 194, 431, 196, 197, 1009, 3159 -1, 436, -1, -1, 1014, -1, 1016, -1, 470, 444, 3160 1020, 1021, 1022, -1, -1, 1025, -1, -1, -1, 1203, 3161 -1, -1, -1, -1, 1034, -1, 488, -1, 490, 1220, 3162 -1, -1, -1, -1, 485, 470, 1220, -1, -1, 1198, 3163 -1, 1225, 1052, 1053, 1023, -1, -1, -1, 10, 11, 3164 12, 13, 14, 488, 1238, 490, 1240, -1, -1, -1, 3165 1244, -1, -1, -1, -1, -1, -1, 266, -1, 1079, 3166 532, -1, 1082, -1, -1, -1, 38, -1, -1, -1, 3167 1202, -1, -1, -1, -1, -1, 1270, -1, -1, -1, 3168 -1, -1, -1, -1, 1278, 1279, 1280, 532, -1, -1, 3169 -1, -1, -1, -1, 66, 1289, 1290, -1, -1, 71, 3170 1120, 73, 74, 75, -1, -1, 1126, 1127, -1, 1303, 3171 82, 83, -1, -1, -1, -1, 577, 578, 1138, -1, 3172 -1, -1, -1, 1143, -1, 597, 1146, -1, 1148, -1, 3173 -1, 1151, 1326, -1, -1, -1, 108, -1, -1, -1, 3174 -1, -1, -1, 1337, 1164, -1, 118, -1, -1, -1, 3175 -1, -1, 597, 1098, -1, -1, -1, 1177, -1, 1179, 3176 1180, 1181, 1182, -1, -1, -1, 1298, -1, -1, -1, 3177 642, 643, 644, -1, -1, 1195, -1, 1197, -1, -1, 3178 -1, 1201, -1, -1, -1, -1, -1, -1, -1, 661, 3179 -1, -1, -1, -1, -1, 1396, -1, 642, 643, 644, 3180 -1, -1, -1, -1, -1, 666, -1, 679, -1, 670, 3181 1230, 1231, -1, 1202, -1, -1, 661, -1, 690, -1, 3182 1414, -1, 0, -1, 696, -1, -1, -1, -1, -1, 3183 -1, -1, -1, -1, 679, -1, -1, -1, -1, -1, 3184 -1, -1, 703, -1, -1, 690, 1440, -1, -1, 0, 3185 -1, 696, -1, 31, -1, 0, 1, -1, -1, -1, 3186 732, 1281, 1282, 735, -1, -1, -1, -1, -1, 1463, 3187 -1, 1291, -1, -1, -1, -1, 1470, 1222, -1, -1, 3188 31, -1, -1, -1, -1, -1, 31, 732, 66, -1, 3189 735, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3190 772, -1, -1, -1, -1, -1, -1, -1, -1, 1298, 3191 -1, -1, -1, -1, -1, 66, -1, -1, 63, -1, 3192 -1, 66, -1, 1343, -1, -1, -1, 772, -1, 1523, 3193 -1, -1, -1, -1, -1, 1355, 1530, 1357, 1358, 1359, 3194 -1, -1, 814, -1, -1, -1, -1, -1, -1, 1369, 3195 -1, -1, 824, -1, -1, 827, -1, 818, 1378, -1, 3196 832, -1, 834, -1, -1, -1, -1, 839, -1, 814, 3197 -1, -1, 581, 582, 1394, -1, 154, -1, -1, 824, 3198 -1, -1, 827, -1, -1, -1, -1, 832, -1, 834, 3199 -1, -1, -1, -1, 839, -1, -1, -1, -1, -1, 3200 -1, -1, 611, 154, -1, 614, 615, -1, 617, 154, 3201 619, 620, -1, -1, -1, 624, 625, -1, -1, -1, 3202 -1, -1, -1, -1, -1, -1, -1, -1, -1, 901, 3203 1450, 1451, -1, -1, -1, -1, -1, -1, -1, -1, 3204 -1, -1, -1, 1463, -1, -1, -1, -1, -1, -1, 3205 1470, -1, -1, -1, -1, -1, 901, -1, -1, -1, 3206 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3207 931, 249, -1, -1, 219, -1, 254, -1, -1, -1, 3208 -1, -1, -1, 1503, -1, -1, -1, 1507, -1, -1, 3209 -1, -1, -1, -1, 703, -1, -1, -1, 249, 708, 3210 709, -1, -1, 254, 249, 714, -1, -1, -1, -1, 3211 -1, -1, -1, 985, -1, -1, 1536, -1, 1538, -1, 3212 -1, -1, 10, 11, 12, 13, 14, 15, 16, 17, 3213 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, 3214 985, 29, 30, 31, -1, -1, 1566, 1567, -1, 1010, 3215 38, 39, -1, -1, 1574, 1575, -1, -1, -1, -1, 3216 -1, -1, -1, -1, -1, 1026, 1038, 1039, -1, 1041, 3217 1042, 349, -1, -1, -1, -1, -1, -1, 66, -1, 3218 -1, -1, -1, -1, -1, 73, 74, -1, -1, 1061, 3219 -1, -1, -1, 1038, 1039, -1, 1041, 1042, 349, 10, 3220 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3221 21, 22, 23, 24, 25, 26, 1061, -1, 29, 30, 3222 31, -1, 110, -1, 1096, 1097, 114, 38, -1, -1, 3223 118, -1, -1, -1, -1, -1, -1, -1, 416, -1, 3224 -1, -1, 1103, -1, -1, -1, -1, -1, -1, -1, 3225 -1, 1096, 1097, 431, -1, 66, -1, -1, 436, -1, 3226 71, -1, 73, 74, 75, 416, 444, -1, -1, -1, 3227 -1, 82, 83, -1, -1, -1, -1, -1, -1, -1, 3228 431, -1, -1, -1, -1, 436, 431, -1, 1160, -1, 3229 -1, -1, 470, 444, -1, -1, -1, 108, -1, 110, 3230 -1, -1, -1, -1, -1, -1, -1, 118, -1, -1, 3231 488, -1, 490, -1, -1, 1160, -1, -1, -1, 470, 3232 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3233 -1, 1203, -1, -1, -1, -1, -1, 488, -1, 490, 3234 -1, -1, -1, -1, -1, 490, -1, -1, -1, -1, 3235 -1, -1, -1, 1225, 532, -1, -1, -1, 1203, -1, 3236 -1, -1, -1, -1, -1, -1, 1238, -1, 1240, -1, 3237 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3238 1225, 532, -1, -1, -1, -1, -1, 532, -1, -1, 3239 -1, -1, -1, 1238, -1, 1240, -1, -1, 1270, -1, 3240 -1, -1, -1, -1, -1, -1, 1278, 1279, 1280, -1, 3241 -1, -1, -1, -1, -1, -1, -1, 1289, 1290, 597, 3242 -1, -1, -1, -1, -1, 1270, -1, -1, -1, -1, 3243 -1, 1303, -1, 1278, 1279, 1280, -1, -1, -1, -1, 3244 -1, -1, -1, -1, 1289, 1290, 597, -1, -1, -1, 3245 -1, -1, 597, -1, 1326, -1, -1, -1, 1303, -1, 3246 -1, -1, -1, -1, 642, 643, 644, -1, -1, -1, 3247 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3248 -1, 1326, -1, 661, -1, -1, -1, -1, -1, 1098, 3249 -1, 642, 643, 644, -1, -1, -1, 642, 643, 644, 3250 -1, 679, -1, -1, -1, -1, -1, -1, -1, -1, 3251 661, -1, 690, -1, -1, -1, 661, -1, 696, -1, 3252 -1, -1, -1, -1, -1, -1, -1, -1, 679, 7, 3253 -1, -1, 10, 11, 12, 13, 14, -1, -1, 690, 3254 -1, -1, 1414, -1, -1, 696, -1, -1, -1, -1, 3255 -1, -1, -1, -1, 732, -1, -1, 735, 36, 37, 3256 38, 39, -1, -1, -1, -1, -1, -1, -1, 1414, 3257 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3258 -1, 732, -1, -1, 735, -1, -1, 65, 66, -1, 3259 735, 1463, -1, 71, 772, -1, -1, 75, 1470, -1, 3260 78, 79, 80, 81, 82, 83, -1, 85, 86, -1, 3261 -1, -1, -1, 1222, -1, 93, -1, -1, 1463, -1, 3262 -1, 772, -1, -1, -1, 1470, -1, -1, -1, -1, 3263 108, -1, 110, -1, -1, -1, 814, -1, -1, 117, 3264 118, 119, 120, 121, 122, -1, 824, -1, -1, 827, 3265 -1, 1523, -1, -1, 832, -1, 834, -1, -1, -1, 3266 -1, 839, -1, 814, -1, -1, -1, -1, -1, -1, 3267 -1, -1, -1, 824, -1, -1, 827, -1, 1523, -1, 3268 -1, 832, 827, 834, -1, -1, -1, -1, 839, 834, 3269 -1, -1, -1, -1, -1, 0, -1, -1, 3, 4, 3270 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3271 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3272 25, 26, -1, 901, 29, 30, 31, 32, -1, -1, 3273 35, -1, -1, 38, 39, -1, -1, -1, -1, 10, 3274 11, 12, 13, 14, -1, 10, 11, 12, 13, 14, 3275 901, -1, -1, -1, -1, -1, 901, -1, 63, -1, 3276 -1, 66, 44, 68, -1, 70, 71, 38, 73, 74, 3277 75, -1, -1, 38, -1, -1, -1, 82, 83, -1, 3278 -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, 3279 -1, -1, -1, -1, -1, 66, -1, -1, -1, -1, 3280 71, 66, -1, 108, 75, 110, 71, 985, -1, -1, 3281 75, 82, 83, 118, -1, -1, -1, 82, 83, -1, 3282 -1, -1, -1, 968, -1, -1, -1, 109, -1, -1, 3283 -1, -1, -1, 115, 985, -1, -1, 108, -1, -1, 3284 985, -1, -1, 108, -1, -1, -1, 118, -1, -1, 3285 -1, -1, -1, 118, -1, -1, -1, -1, -1, -1, 3286 1038, 1039, 144, 1041, 1042, -1, -1, -1, -1, -1, 3287 -1, -1, 154, -1, -1, -1, 158, -1, -1, -1, 3288 -1, -1, -1, 1061, -1, -1, -1, 1038, 1039, -1, 3289 1041, 1042, -1, -1, -1, -1, 1041, 1042, -1, -1, 3290 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3291 1061, -1, -1, -1, -1, -1, 1061, -1, 1096, 1097, 3292 -1, -1, -1, -1, -1, 207, -1, -1, -1, -1, 3293 -1, -1, -1, -1, -1, -1, -1, 219, -1, -1, 3294 -1, -1, -1, -1, -1, 1096, 1097, -1, -1, -1, 3295 -1, 36, 37, -1, 39, 237, 238, 10, 11, 12, 3296 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3297 23, 24, 25, 26, -1, -1, 29, 30, 31, 261, 3298 65, -1, 1160, -1, -1, 38, 71, 269, -1, -1, 3299 75, -1, -1, 78, 79, 80, 81, 82, 83, -1, 3300 85, 86, -1, -1, -1, -1, -1, -1, 93, 1160, 3301 -1, 293, -1, 66, 296, -1, -1, -1, -1, -1, 3302 73, 74, -1, 108, -1, 1203, -1, -1, -1, -1, 3303 -1, -1, 117, 118, 119, 120, 121, 122, -1, -1, 3304 -1, -1, -1, -1, -1, -1, -1, 1225, -1, -1, 3305 -1, -1, 1203, -1, -1, -1, -1, 1202, 1203, -1, 3306 1238, 343, 1240, -1, -1, 118, 348, -1, -1, -1, 3307 -1, -1, -1, -1, 1225, -1, -1, -1, -1, -1, 3308 1225, -1, -1, -1, -1, -1, -1, 1238, -1, 1240, 3309 -1, -1, 1270, -1, -1, -1, -1, -1, -1, 1244, 3310 1278, 1279, 1280, -1, -1, -1, -1, -1, -1, -1, 3311 -1, 1289, 1290, -1, -1, -1, -1, -1, -1, 1270, 3312 -1, -1, -1, -1, -1, 1303, -1, 1278, 1279, 1280, 3313 -1, -1, -1, -1, -1, -1, -1, -1, 1289, 1290, 3314 -1, -1, 424, 425, 1289, 1290, -1, -1, 1326, 431, 3315 -1, -1, 1303, 1298, -1, -1, -1, -1, 1303, -1, 3316 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3317 452, -1, -1, 455, -1, 1326, -1, -1, -1, 461, 3318 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3319 -1, -1, 1337, -1, -1, -1, -1, -1, -1, -1, 3320 -1, -1, -1, -1, -1, -1, 488, -1, -1, -1, 3321 63, -1, -1, -1, -1, -1, -1, -1, 500, -1, 3322 73, -1, 75, -1, 77, -1, -1, -1, -1, -1, 3323 512, 84, 514, -1, -1, 517, 1414, 519, 520, -1, 3324 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3325 532, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3326 -1, -1, 115, 1414, 117, 118, 119, -1, -1, 1414, 3327 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3328 -1, -1, -1, -1, -1, 1463, -1, 43, -1, -1, 3329 -1, -1, 1470, -1, -1, 1440, -1, -1, -1, -1, 3330 -1, -1, -1, 585, -1, 158, -1, -1, -1, -1, 3331 -1, -1, 1463, -1, -1, 597, -1, 599, 1463, 1470, 3332 602, -1, -1, -1, -1, 1470, -1, -1, -1, -1, 3333 -1, -1, -1, 89, -1, -1, -1, -1, -1, -1, 3334 -1, -1, -1, 99, -1, 1523, 628, -1, -1, -1, 3335 -1, 633, -1, -1, -1, -1, -1, -1, -1, -1, 3336 642, 643, 644, -1, -1, -1, 219, -1, 221, 222, 3337 223, -1, 1523, -1, -1, -1, -1, -1, 1523, 661, 3338 -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3339 19, 20, 21, 22, 23, 24, 25, 26, 27, 155, 3340 29, 30, 31, -1, 257, -1, -1, -1, 261, 38, 3341 -1, -1, -1, 169, 696, -1, -1, -1, -1, -1, 3342 -1, -1, -1, -1, 277, -1, -1, -1, -1, -1, 3343 -1, -1, -1, -1, -1, 717, 192, 66, -1, -1, 3344 -1, -1, -1, -1, 73, 74, -1, -1, 77, -1, 3345 206, -1, -1, 735, -1, 737, -1, -1, -1, 215, 3346 -1, -1, -1, -1, -1, -1, -1, -1, -1, 225, 3347 -1, -1, -1, -1, 327, -1, -1, -1, -1, 108, 3348 -1, 110, 36, 37, -1, 39, -1, -1, -1, 118, 3349 772, -1, -1, -1, 250, 348, -1, -1, -1, 255, 3350 353, 354, -1, -1, -1, -1, -1, -1, 361, -1, 3351 -1, 65, 268, -1, -1, -1, -1, 71, 274, -1, 3352 276, 75, -1, -1, 78, 79, 80, 81, 82, 83, 3353 -1, 85, 86, -1, -1, -1, -1, -1, 294, 93, 3354 -1, -1, -1, -1, -1, 827, -1, -1, -1, 831, 3355 -1, 404, 834, -1, 108, -1, 110, -1, -1, 113, 3356 -1, -1, -1, 117, 118, 119, 120, 121, 122, 422, 3357 -1, -1, -1, -1, 427, -1, 429, -1, -1, -1, 3358 -1, 337, -1, -1, -1, -1, 342, -1, -1, -1, 3359 -1, -1, -1, 446, -1, -1, 449, 450, -1, -1, 3360 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3361 -1, -1, 465, -1, 370, -1, -1, -1, 374, 375, 3362 -1, 377, -1, -1, -1, -1, 479, -1, 384, 385, 3363 -1, 387, 388, 486, 390, -1, 392, -1, -1, -1, 3364 -1, -1, -1, 7, -1, 927, 10, 11, 12, 13, 3365 14, -1, -1, 409, -1, -1, -1, -1, -1, -1, 3366 -1, 417, -1, -1, -1, -1, -1, -1, -1, -1, 3367 -1, -1, 36, 37, 38, 39, -1, -1, -1, -1, 3368 -1, -1, -1, -1, -1, -1, 442, 969, -1, -1, 3369 -1, -1, -1, -1, -1, -1, -1, 453, -1, -1, 3370 -1, 65, 66, 985, -1, -1, -1, 71, -1, -1, 3371 -1, 75, -1, -1, 78, 79, 80, 81, 82, 83, 3372 476, 85, 86, -1, -1, -1, 482, -1, -1, 93, 3373 -1, 487, -1, -1, -1, -1, -1, -1, 1020, -1, 3374 -1, -1, -1, -1, 108, -1, 110, -1, -1, 602, 3375 -1, -1, -1, 117, 118, 119, 120, 121, 122, 1041, 3376 1042, -1, -1, -1, -1, -1, -1, -1, 524, -1, 3377 -1, -1, -1, -1, -1, -1, -1, 630, 280, -1, 3378 282, 283, 635, -1, 540, -1, -1, -1, 290, 291, 3379 -1, -1, -1, 295, 296, -1, -1, -1, -1, -1, 3380 -1, -1, -1, -1, -1, 307, -1, -1, -1, -1, 3381 -1, -1, -1, -1, -1, 36, 37, -1, 39, 1101, 3382 -1, 577, -1, -1, -1, -1, -1, -1, -1, -1, 3383 586, -1, -1, -1, -1, -1, -1, 593, -1, -1, 3384 -1, 343, 598, -1, 65, -1, -1, -1, -1, -1, 3385 71, -1, -1, 609, 75, -1, -1, 78, 79, 80, 3386 81, 82, 83, -1, 85, 86, -1, -1, -1, -1, 3387 723, -1, 93, -1, -1, -1, -1, 379, 1160, -1, 3388 -1, -1, -1, -1, 737, -1, -1, 108, -1, 110, 3389 -1, -1, -1, -1, 650, 116, 117, 118, 119, 120, 3390 121, 122, -1, -1, 757, -1, -1, -1, -1, -1, 3391 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3392 1202, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3393 686, -1, -1, -1, -1, 10, 11, 12, 13, 14, 3394 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3395 25, 26, 27, -1, 29, 30, 31, -1, 1240, -1, 3396 -1, -1, -1, 38, -1, 818, -1, -1, -1, -1, 3397 -1, -1, -1, -1, -1, -1, -1, -1, 831, -1, 3398 -1, -1, -1, -1, -1, 741, -1, -1, -1, -1, 3399 -1, 66, -1, -1, -1, 751, 752, 850, 73, 74, 3400 -1, -1, 77, -1, -1, -1, -1, 1289, 1290, 765, 3401 -1, -1, -1, -1, -1, -1, 1298, -1, -1, -1, 3402 -1, -1, -1, -1, -1, -1, 782, -1, 784, -1, 3403 -1, -1, 788, 108, -1, 110, -1, -1, -1, -1, 3404 -1, -1, -1, 118, -1, -1, -1, -1, -1, -1, 3405 -1, -1, -1, -1, 556, 557, 558, 559, 560, 561, 3406 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 3407 572, 573, -1, -1, -1, -1, -1, -1, -1, -1, 3408 36, 37, -1, 39, 937, -1, -1, -1, -1, -1, 3409 -1, -1, -1, -1, -1, -1, -1, 599, 854, -1, 3410 -1, -1, -1, -1, -1, 861, -1, -1, -1, 65, 3411 963, -1, -1, -1, -1, 71, -1, -1, 874, 75, 3412 876, -1, 78, 79, 80, 81, 82, 83, -1, 85, 3413 86, -1, 1414, -1, 890, -1, -1, 93, 991, -1, 3414 -1, 897, -1, -1, -1, -1, -1, -1, -1, -1, 3415 -1, -1, 108, 909, 110, -1, 912, -1, -1, 115, 3416 -1, 117, 118, 119, 120, 121, 122, -1, -1, -1, 3417 1023, -1, -1, -1, 930, -1, -1, -1, -1, -1, 3418 -1, 1034, -1, -1, -1, -1, -1, -1, -1, -1, 3419 1472, -1, 1474, -1, -1, -1, 698, -1, 10, 11, 3420 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3421 22, 23, 24, 25, 26, 27, -1, -1, 720, -1, 3422 -1, -1, -1, -1, -1, -1, 38, 1509, -1, 1511, 3423 -1, 733, 10, 11, 12, 13, 14, 15, 16, 17, 3424 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3425 -1, 29, 30, 31, 66, -1, -1, 1539, -1, -1, 3426 38, -1, 1115, 1019, -1, 77, -1, -1, -1, 153, 3427 154, -1, -1, -1, -1, -1, -1, 779, -1, -1, 3428 -1, -1, -1, -1, -1, -1, -1, -1, 66, -1, 3429 -1, -1, -1, 71, -1, 73, 74, 75, -1, 77, 3430 -1, -1, -1, 187, 82, 83, -1, -1, -1, 811, 3431 194, -1, -1, -1, -1, -1, -1, -1, -1, 1075, 3432 -1, -1, -1, -1, 826, -1, 1082, -1, -1, -1, 3433 108, -1, 110, -1, -1, -1, -1, -1, -1, -1, 3434 118, 36, 37, -1, 39, -1, -1, -1, -1, 1202, 3435 -1, -1, -1, -1, -1, 1111, -1, -1, -1, -1, 3436 1116, -1, -1, -1, -1, -1, -1, -1, 1124, -1, 3437 65, -1, -1, -1, -1, -1, 71, -1, 73, 74, 3438 75, -1, 266, 78, 79, 80, 81, 82, 83, -1, 3439 85, 86, -1, -1, -1, -1, -1, -1, 93, 1155, 3440 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3441 -1, 1167, -1, 108, 1170, 110, 1172, 112, 113, -1, 3442 -1, -1, 117, 118, 119, 120, 121, 122, -1, -1, 3443 1186, 1187, -1, -1, -1, -1, -1, -1, 322, -1, 3444 -1, -1, -1, -1, -1, 1298, 330, 331, -1, 333, 3445 334, -1, 1208, -1, -1, -1, -1, -1, -1, 343, 3446 -1, -1, -1, 347, -1, -1, -1, -1, -1, -1, 3447 -1, -1, -1, -1, -1, 977, -1, -1, -1, 1235, 3448 144, -1, 366, -1, -1, 369, -1, -1, -1, -1, 3449 154, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3450 -1, -1, 166, 167, -1, -1, 1008, -1, -1, -1, 3451 -1, -1, 396, -1, -1, -1, 400, -1, 1020, 4, 3452 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3453 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3454 25, 26, -1, -1, 29, 30, 31, 431, -1, -1, 3455 -1, -1, -1, 38, -1, -1, -1, -1, -1, 1061, 3456 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3457 454, -1, -1, 237, -1, -1, 1332, -1, 1334, -1, 3458 -1, 66, -1, 68, -1, 70, -1, -1, 73, 74, 3459 -1, 1347, -1, 1349, -1, -1, -1, -1, 262, -1, 3460 -1, 485, -1, -1, 488, -1, -1, -1, -1, -1, 3461 -1, 1367, -1, -1, -1, -1, -1, -1, -1, -1, 3462 -1, -1, -1, -1, 109, 110, -1, 1383, 1384, -1, 3463 -1, 1133, -1, 118, -1, -1, -1, -1, -1, 1395, 3464 -1, -1, 1398, -1, 528, -1, -1, 531, 532, -1, 3465 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3466 -1, -1, -1, -1, 1420, -1, -1, -1, -1, -1, 3467 -1, -1, -1, 1429, -1, 1177, 1432, -1, 1434, 1435, 3468 1436, -1, -1, -1, -1, -1, -1, -1, -1, 1191, 3469 1192, -1, -1, 577, 578, -1, -1, -1, -1, -1, 3470 -1, 1554, -1, -1, -1, -1, -1, -1, -1, -1, 3471 -1, -1, 596, 597, 378, 599, -1, -1, -1, -1, 3472 1476, -1, 1478, -1, 608, 1481, 610, 611, -1, -1, 3473 -1, -1, -1, 617, -1, -1, -1, -1, -1, -1, 3474 1496, -1, -1, 627, 628, -1, -1, -1, -1, 633, 3475 -1, -1, -1, -1, -1, -1, -1, -1, 642, 643, 3476 644, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3477 -1, -1, -1, -1, -1, -1, -1, 661, -1, -1, 3478 -1, -1, 666, 667, -1, -1, 670, 671, -1, -1, 3479 -1, -1, -1, 677, -1, -1, -1, -1, -1, -1, 3480 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3481 -1, 695, 696, 697, -1, 699, 480, -1, -1, 703, 3482 -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3483 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, 3484 29, 30, 31, -1, -1, -1, -1, -1, -1, 38, 3485 -1, 735, 736, -1, -1, 519, -1, -1, -1, -1, 3486 -1, -1, -1, -1, -1, -1, -1, -1, 532, -1, 3487 -1, -1, -1, -1, -1, 539, -1, 66, 542, -1, 3488 -1, -1, -1, -1, 73, 74, -1, 771, 772, 553, 3489 554, -1, 776, 777, -1, -1, -1, -1, -1, 1401, 3490 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3491 -1, 575, -1, -1, -1, -1, 1418, -1, -1, -1, 3492 -1, 585, -1, -1, -1, -1, -1, -1, 592, 118, 3493 -1, -1, -1, 597, 818, -1, -1, -1, -1, -1, 3494 -1, -1, -1, 827, -1, -1, -1, -1, -1, 833, 3495 834, -1, -1, -1, 838, -1, 840, -1, -1, -1, 3496 -1, -1, -1, -1, -1, -1, 850, -1, -1, -1, 3497 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3498 -1, -1, -1, 647, -1, -1, -1, -1, -1, 1491, 3499 1492, -1, 656, -1, -1, -1, -1, -1, -1, 3, 3500 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 3501 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3502 24, 25, 26, -1, -1, 29, 30, 31, 32, -1, 3503 -1, 35, 696, -1, 38, 39, -1, -1, -1, 923, 3504 -1, -1, -1, -1, -1, -1, -1, 931, 36, 37, 3505 -1, 39, -1, 937, -1, -1, -1, -1, -1, 63, 3506 -1, 945, 66, -1, 68, -1, 70, 71, -1, 73, 3507 74, 75, -1, -1, 958, 959, -1, 65, 82, 83, 3508 -1, -1, -1, 71, -1, -1, -1, 75, -1, -1, 3509 78, 79, 80, 81, 82, 83, -1, 85, 86, -1, 3510 -1, 985, -1, -1, 108, 93, 110, 991, 772, -1, 3511 774, -1, -1, -1, 118, -1, 780, -1, -1, -1, 3512 108, -1, 110, 787, -1, 113, 1010, 1011, -1, 117, 3513 118, 119, 120, 121, 122, -1, 1020, -1, -1, -1, 3514 -1, -1, 1026, 1027, -1, 1029, 1030, 1031, -1, -1, 3515 -1, -1, -1, -1, -1, -1, -1, 1041, 1042, -1, 3516 -1, -1, -1, -1, -1, -1, -1, 831, 832, -1, 3517 834, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3518 -1, -1, -1, -1, -1, 849, -1, -1, -1, -1, 4052 25, 26, 27, -1, -1, 30, 31, 32, -1, -1, 4053 -1, -1, -1, -1, 39, -1, -1, -1, -1, -1, 3519 4054 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3520 4055 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3521 -1, -1, -1, -1, -1, -1, -1, -1, 1102, 1103, 3522 1104, -1, -1, -1, -1, 889, -1, -1, -1, 893, 3523 -1, 1115, -1, -1, -1, -1, 3, 4, 5, 6, 3524 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 3525 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3526 -1, -1, 29, 30, 31, 32, -1, -1, 35, 36, 3527 37, 38, 39, 40, -1, 42, 1160, -1, 45, 46, 3528 47, 48, 49, 50, 51, 52, -1, -1, -1, 56, 3529 -1, -1, -1, 60, 61, -1, 63, -1, 65, 66, 3530 -1, 68, -1, 70, 71, 969, 73, 74, 75, -1, 3531 -1, 78, 79, 80, 81, 82, 83, -1, 85, 86, 3532 -1, 985, 986, -1, -1, -1, 93, -1, 992, -1, 3533 -1, -1, 36, 37, 998, 39, 1220, 1001, -1, 1003, 3534 -1, 108, -1, 110, -1, -1, 113, -1, -1, -1, 3535 117, 118, 119, 120, 121, 122, 1240, -1, -1, 1023, 3536 127, 65, -1, -1, 131, -1, -1, 71, -1, -1, 3537 1034, 75, -1, -1, 78, 79, 80, 81, 82, 83, 3538 -1, 85, 86, -1, -1, -1, -1, -1, -1, 93, 3539 -1, -1, 1056, -1, 1058, -1, -1, -1, -1, -1, 3540 -1, -1, -1, -1, 108, 1289, 1290, -1, -1, 1073, 3541 1074, -1, -1, 117, 118, 119, 120, 121, 122, -1, 3542 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3543 1094, -1, -1, -1, -1, -1, -1, -1, 3, 4, 3544 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3545 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3546 25, 26, -1, -1, 29, 30, 31, 32, -1, -1, 3547 35, 36, 37, 38, 39, -1, -1, 1141, -1, -1, 3548 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3549 36, 37, -1, 39, -1, -1, 1160, -1, -1, -1, 3550 65, 66, -1, 68, -1, 70, 71, -1, 73, 74, 3551 75, 1175, 1176, 78, 79, 80, 81, 82, 83, 65, 3552 85, 86, -1, -1, -1, 71, -1, -1, 93, 75, 3553 1414, -1, 78, 79, 80, 81, 82, 83, -1, 85, 3554 86, -1, -1, 108, -1, 110, -1, 93, -1, -1, 3555 -1, -1, 117, 118, 119, 120, 121, 122, -1, -1, 3556 -1, -1, 108, -1, 110, -1, 131, -1, -1, -1, 3557 -1, 117, 118, 119, 120, 121, 122, -1, -1, -1, 3558 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3559 -1, -1, 1256, -1, -1, -1, 3, 4, 5, 6, 3560 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 3561 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3562 1504, -1, 29, 30, 31, 32, -1, -1, 35, 36, 3563 37, 38, 39, -1, -1, -1, -1, -1, -1, -1, 3564 -1, -1, -1, -1, -1, 1529, 1530, -1, -1, -1, 3565 -1, -1, -1, 1317, -1, 1319, -1, -1, 65, 66, 3566 -1, 68, -1, 70, 71, -1, 73, 74, 75, -1, 3567 1554, 78, 79, 80, 81, 82, 83, -1, 85, 86, 3568 -1, -1, -1, -1, -1, -1, 93, -1, -1, -1, 3569 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3570 -1, 108, -1, 110, -1, -1, -1, -1, -1, -1, 3571 117, 118, 119, 120, 121, 122, -1, -1, 4, 5, 3572 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 3573 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3574 26, 1405, -1, 29, 30, 31, -1, -1, -1, -1, 3575 36, 37, 38, 39, -1, 10, 11, 12, 13, 14, 3576 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3577 25, 26, -1, -1, 29, 30, 31, -1, -1, 65, 3578 66, -1, 68, 38, 70, 71, -1, 73, 74, 75, 3579 -1, -1, 78, 79, 80, 81, 82, 83, -1, 85, 3580 86, -1, -1, -1, -1, -1, -1, 93, -1, -1, 3581 -1, 66, -1, -1, -1, -1, 71, -1, 73, 74, 3582 -1, -1, 108, 1487, 110, -1, -1, 82, 83, 115, 3583 -1, 117, 118, 119, 120, 121, 122, 4, 5, 6, 3584 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 3585 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3586 -1, -1, 29, 30, 31, -1, -1, -1, -1, 36, 3587 37, 38, 39, -1, -1, 1539, -1, 10, 11, 12, 3588 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3589 23, 24, 25, 26, 27, -1, -1, -1, 65, 66, 3590 -1, 68, -1, 70, 71, 38, 73, 74, 75, -1, 3591 -1, 78, 79, 80, 81, 82, 83, -1, 85, 86, 3592 -1, -1, -1, -1, -1, -1, 93, -1, -1, -1, 3593 -1, -1, -1, 66, -1, -1, -1, -1, -1, -1, 3594 -1, 108, -1, 110, 77, -1, -1, -1, 115, -1, 3595 117, 118, 119, 120, 121, 122, 4, 5, 6, 7, 3596 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3597 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, 3598 -1, 29, 30, 31, -1, -1, -1, -1, 36, 37, 3599 38, 39, -1, 10, 11, 12, 13, 14, 15, 16, 3600 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3601 -1, -1, 29, 30, 31, -1, -1, 65, 66, -1, 3602 68, 38, 70, 71, -1, 73, 74, 75, -1, -1, 3603 78, 79, 80, 81, 82, 83, -1, 85, 86, -1, 3604 -1, -1, -1, -1, -1, 93, -1, -1, -1, 66, 3605 -1, -1, -1, -1, -1, -1, 73, 74, -1, -1, 3606 108, -1, 110, -1, -1, -1, -1, 115, -1, 117, 3607 118, 119, 120, 121, 122, 4, 5, 6, 7, 8, 3608 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3609 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, 3610 29, 30, 31, -1, -1, -1, -1, 36, 37, 38, 3611 39, -1, 10, 11, 12, 13, 14, 15, 16, 17, 3612 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, 3613 -1, 29, 30, 31, -1, -1, 65, 66, -1, 68, 3614 38, 70, 71, -1, 73, 74, 75, -1, -1, 78, 3615 79, 80, 81, 82, 83, -1, 85, 86, -1, -1, 3616 -1, -1, -1, -1, 93, -1, -1, -1, 66, -1, 3617 -1, -1, -1, -1, -1, 73, 74, -1, -1, 108, 3618 -1, 110, -1, -1, -1, -1, -1, -1, 117, 118, 3619 119, 120, 121, 122, 4, 5, 6, 7, 8, 9, 3620 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3621 20, 21, 22, 23, 24, 25, 26, -1, -1, 29, 3622 30, 31, -1, -1, -1, -1, 36, 37, 38, 39, 3623 -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3624 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, 3625 -1, -1, -1, -1, -1, 65, 66, -1, 68, 38, 3626 70, 71, -1, 73, 74, 75, -1, -1, 78, 79, 3627 80, 81, 82, 83, -1, 85, 86, -1, -1, -1, 3628 -1, -1, -1, 93, -1, -1, -1, 66, -1, -1, 3629 -1, -1, -1, -1, -1, -1, -1, -1, 108, -1, 3630 110, -1, -1, -1, -1, -1, -1, 117, 118, 119, 3631 120, 121, 122, 4, 5, 6, 7, 8, 9, 10, 3632 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3633 21, 22, 23, 24, 25, 26, -1, -1, 29, 30, 3634 31, -1, -1, -1, -1, 36, 37, 38, 39, -1, 3635 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3636 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3637 -1, -1, -1, -1, 65, 66, -1, 68, -1, 70, 3638 71, -1, 73, 74, 75, -1, -1, 78, 79, 80, 3639 81, 82, 83, -1, 85, 86, -1, -1, -1, -1, 3640 -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, 3641 -1, -1, -1, -1, -1, -1, -1, 108, -1, 110, 3642 -1, -1, -1, -1, -1, -1, 117, 118, 119, 120, 3643 121, 122, 4, 5, 6, 7, 8, 9, 10, 11, 3644 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3645 22, 23, 24, 25, 26, -1, -1, 29, 30, 31, 3646 -1, -1, -1, -1, 36, 37, 38, 39, -1, -1, 3647 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3648 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3649 -1, -1, -1, 65, 66, -1, 68, -1, 70, 71, 3650 -1, 73, 74, 75, -1, -1, 78, 79, 80, 81, 3651 82, 83, -1, 85, 86, -1, -1, -1, -1, -1, 3652 -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, 3653 -1, -1, -1, -1, -1, -1, 108, -1, 110, -1, 3654 -1, -1, -1, -1, -1, 117, 118, 119, 120, 121, 3655 122, 3, 4, 5, 6, 7, 8, 9, 10, 11, 3656 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3657 22, 23, 24, 25, 26, -1, -1, 29, 30, 31, 3658 32, -1, -1, 35, -1, -1, 38, 39, -1, -1, 3659 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3660 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3661 -1, 63, -1, -1, 66, -1, 68, -1, 70, 71, 3662 -1, 73, 74, 75, -1, -1, -1, -1, -1, -1, 3663 82, 83, -1, -1, -1, -1, -1, -1, -1, -1, 3664 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3665 -1, -1, -1, -1, -1, -1, 108, -1, 110, -1, 3666 -1, -1, 114, -1, -1, -1, 118, 3, 4, 5, 3667 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 3668 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3669 26, -1, -1, 29, 30, 31, -1, -1, -1, -1, 3670 -1, -1, 38, 10, 11, 12, 13, 14, 15, 16, 3671 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3672 -1, -1, 29, 30, 31, 32, 33, 34, -1, -1, 3673 66, 38, 68, -1, 70, 71, -1, 73, 74, 75, 3674 -1, -1, -1, -1, -1, -1, 82, 83, -1, -1, 3675 -1, -1, -1, -1, -1, -1, -1, -1, -1, 66, 3676 -1, -1, -1, -1, -1, -1, 73, 74, -1, -1, 3677 -1, -1, 108, -1, 110, -1, -1, -1, -1, -1, 3678 -1, -1, 118, 3, 4, 5, 6, 7, 8, 9, 3679 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3680 20, 21, 22, 23, 24, 25, 26, 27, -1, 29, 3681 30, 31, 32, -1, -1, 35, -1, -1, 38, -1, 3682 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3683 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3684 -1, -1, -1, -1, -1, -1, 66, -1, 68, -1, 3685 70, -1, -1, 73, 74, -1, -1, 77, -1, 3, 3686 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 3687 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3688 24, 25, 26, -1, -1, 29, 30, 31, 32, -1, 3689 110, 35, -1, -1, 38, -1, -1, -1, 118, -1, 3690 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3691 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3692 -1, -1, 66, -1, 68, -1, 70, -1, -1, 73, 3693 74, -1, 3, 4, 5, 6, 7, 8, 9, 10, 3694 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3695 21, 22, 23, 24, 25, 26, -1, -1, 29, 30, 3696 31, -1, -1, -1, -1, -1, 110, 38, -1, -1, 3697 -1, -1, -1, -1, 118, -1, -1, -1, -1, -1, 3698 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3699 -1, -1, -1, -1, -1, 66, -1, 68, -1, 70, 3700 -1, -1, 73, 74, 4, 5, 6, 7, 8, 9, 3701 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3702 20, 21, 22, 23, 24, 25, 26, -1, -1, 29, 3703 30, 31, -1, -1, -1, -1, -1, -1, 38, 110, 3704 -1, -1, -1, -1, -1, -1, -1, 118, -1, -1, 3705 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3706 -1, -1, -1, -1, -1, -1, 66, -1, 68, -1, 3707 70, 71, -1, 73, 74, 75, -1, -1, -1, -1, 3708 -1, -1, 82, 83, -1, -1, 10, 11, 12, 13, 3709 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3710 24, 25, 26, -1, -1, 29, 30, 31, 108, -1, 3711 110, -1, -1, -1, 38, -1, -1, -1, 118, 4, 3712 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3713 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3714 25, 26, 66, -1, 29, 30, 31, 71, -1, 73, 3715 74, 75, -1, 38, -1, -1, -1, -1, 82, 83, 3716 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3717 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3718 -1, 66, -1, 68, 108, 70, 110, -1, 73, 74, 3719 -1, -1, -1, -1, 118, -1, -1, -1, -1, -1, 3720 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3721 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3722 -1, -1, -1, -1, -1, 110, -1, -1, -1, -1, 3723 -1, -1, -1, 118, 4, 5, 6, 7, 8, 9, 3724 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3725 20, 21, 22, 23, 24, 25, 26, -1, -1, 29, 3726 30, 31, -1, -1, -1, -1, -1, -1, 38, -1, 3727 -1, -1, -1, 10, 11, 12, 13, 14, 15, 16, 3728 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3729 -1, -1, 29, 30, 31, -1, 66, -1, 68, -1, 3730 70, 38, -1, 73, 74, -1, -1, -1, -1, -1, 3731 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3732 -1, -1, -1, -1, -1, 95, -1, -1, -1, 66, 3733 -1, -1, -1, -1, 71, -1, 73, 74, 75, -1, 3734 110, -1, -1, -1, -1, 82, 83, -1, 118, 4, 3735 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3736 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3737 25, 26, -1, 110, 29, 30, 31, -1, -1, -1, 3738 -1, 118, -1, 38, -1, -1, -1, -1, -1, -1, 3739 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3740 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3741 -1, 66, -1, 68, -1, 70, -1, -1, 73, 74, 3742 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 3743 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3744 24, 25, 26, -1, -1, 29, 30, 31, -1, -1, 3745 -1, -1, -1, -1, 38, 110, -1, -1, -1, -1, 3746 -1, -1, -1, 118, -1, -1, -1, -1, -1, -1, 3747 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3748 -1, -1, 66, -1, 68, -1, 70, -1, -1, 73, 3749 74, 4, 5, 6, 7, 8, 9, 10, 11, 12, 3750 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3751 23, 24, 25, 26, -1, -1, 29, 30, 31, -1, 3752 -1, -1, -1, -1, -1, 38, 110, -1, -1, -1, 3753 -1, -1, -1, -1, 118, -1, -1, -1, -1, -1, 3754 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3755 -1, -1, -1, 66, -1, 68, -1, 70, -1, -1, 3756 73, 74, 4, 5, 6, 7, 8, 9, 10, 11, 3757 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3758 22, 23, 24, 25, 26, -1, -1, 29, 30, 31, 3759 -1, -1, -1, -1, -1, -1, 38, 110, -1, -1, 3760 -1, -1, -1, -1, -1, 118, -1, -1, -1, -1, 3761 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3762 -1, -1, -1, -1, 66, -1, 68, -1, 70, -1, 3763 -1, 73, 74, 10, 11, 12, 13, 14, 15, 16, 3764 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3765 -1, -1, 29, 30, 31, -1, -1, -1, -1, 36, 3766 37, 38, 39, -1, -1, -1, -1, -1, 110, -1, 3767 -1, -1, -1, -1, -1, -1, 118, -1, -1, -1, 3768 -1, -1, -1, -1, -1, -1, -1, -1, 65, 66, 3769 -1, -1, -1, -1, 71, -1, 73, 74, 75, -1, 3770 -1, 78, 79, 80, 81, 82, 83, -1, 85, 86, 3771 -1, -1, -1, -1, -1, -1, 93, -1, -1, -1, 3772 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3773 -1, 108, -1, 110, -1, -1, 113, -1, -1, -1, 3774 117, 118, 119, 120, 121, 122, 10, 11, 12, 13, 3775 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3776 24, 25, 26, -1, -1, 29, 30, 31, -1, -1, 3777 -1, -1, 36, 37, 38, 39, 10, 11, 12, 13, 3778 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3779 24, 25, 26, 27, -1, 29, 30, 31, -1, -1, 3780 -1, 65, 66, -1, 38, -1, -1, 71, -1, 73, 3781 74, 75, -1, -1, 78, 79, 80, 81, 82, 83, 3782 -1, 85, 86, -1, -1, -1, -1, -1, -1, 93, 3783 -1, -1, 66, -1, -1, -1, -1, 71, -1, 73, 3784 74, 75, -1, 77, 108, -1, 110, 111, 82, 83, 3785 -1, -1, -1, 117, 118, 119, 120, 121, 122, 10, 3786 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3787 21, 22, 23, 24, 25, 26, 110, -1, 29, 30, 3788 31, -1, -1, -1, 118, 36, 37, 38, 39, 10, 3789 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3790 21, 22, 23, 24, 25, 26, -1, -1, 29, 30, 3791 31, -1, -1, -1, 65, 66, -1, 38, -1, -1, 3792 71, -1, 73, 74, 75, -1, -1, 78, 79, 80, 3793 81, 82, 83, -1, 85, 86, -1, -1, -1, -1, 3794 -1, -1, 93, -1, -1, 66, -1, -1, -1, -1, 3795 71, -1, 73, 74, -1, -1, -1, 108, 109, 110, 3796 -1, 82, 83, -1, -1, -1, 117, 118, 119, 120, 3797 121, 122, 10, 11, 12, 13, 14, 15, 16, 17, 3798 18, 19, 20, 21, 22, 23, 24, 25, 26, 110, 3799 -1, 29, 30, 31, -1, -1, -1, 118, 36, 37, 3800 38, 39, 10, 11, 12, 13, 14, 15, 16, 17, 3801 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, 3802 -1, 29, 30, 31, -1, -1, -1, 65, 66, -1, 3803 38, 39, -1, 71, -1, 73, 74, 75, -1, -1, 3804 78, 79, 80, 81, 82, 83, -1, 85, 86, -1, 3805 -1, -1, -1, -1, -1, 93, -1, -1, 66, -1, 3806 -1, -1, -1, -1, -1, 73, 74, -1, -1, -1, 3807 108, -1, 110, -1, -1, -1, -1, -1, -1, 117, 3808 118, 119, 120, 121, 122, 10, 11, 12, 13, 14, 3809 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3810 25, 26, 110, -1, 29, 30, 31, -1, -1, -1, 3811 118, 36, 37, 38, 39, -1, -1, -1, -1, -1, 3812 -1, -1, -1, 10, 11, 12, 13, 14, 15, 16, 3813 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3814 65, 66, 29, 30, 31, -1, 71, -1, 73, 74, 3815 75, 38, -1, 78, 79, 80, 81, 82, 83, -1, 3816 85, 86, -1, -1, -1, -1, -1, -1, 93, -1, 3817 -1, -1, -1, -1, -1, -1, -1, -1, -1, 66, 3818 -1, -1, -1, 108, -1, 110, 73, 74, -1, -1, 3819 -1, -1, 117, 118, 119, 120, 121, 122, 10, 11, 3820 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3821 22, 23, 24, 25, 26, -1, -1, 29, 30, 31, 3822 -1, 108, -1, 110, 36, 37, 38, 39, -1, -1, 3823 -1, 118, -1, -1, -1, -1, 10, 11, 12, 13, 3824 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3825 24, 25, 26, 65, 66, 29, 30, 31, -1, 71, 3826 -1, 73, 74, 75, 38, -1, 78, 79, 80, 81, 3827 82, 83, -1, 85, 86, -1, -1, -1, -1, -1, 3828 -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, 3829 -1, -1, 66, -1, -1, -1, 108, -1, 110, 73, 3830 74, -1, -1, -1, -1, 117, 118, 119, 120, 121, 3831 122, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3832 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, 3833 29, 30, 31, -1, 108, -1, 110, 36, 37, 38, 3834 39, -1, -1, -1, 118, -1, -1, -1, -1, 10, 3835 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3836 21, 22, 23, 24, 25, 26, 65, 66, 29, 30, 3837 31, -1, 71, -1, 73, 74, 75, 38, 39, 78, 3838 79, 80, 81, 82, 83, -1, 85, 86, -1, -1, 3839 -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, 3840 -1, -1, -1, -1, -1, 66, -1, -1, -1, 108, 3841 -1, 110, 73, 74, -1, -1, -1, -1, 117, 118, 3842 119, 120, 121, 122, 3, 4, 5, 6, 7, 8, 3843 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3844 19, 20, 21, 22, 23, 24, 25, 26, -1, 110, 3845 29, 30, 31, 114, -1, -1, -1, 118, -1, 38, 3846 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3847 20, 21, 22, 23, 24, 25, 26, -1, -1, 29, 3848 30, 31, -1, -1, -1, -1, -1, 66, 38, 68, 3849 -1, 70, -1, -1, 73, 74, -1, -1, 10, 11, 3850 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3851 22, 23, 24, 25, 26, -1, 66, 29, 30, 31, 3852 -1, 71, -1, 73, 74, 75, 38, -1, -1, -1, 3853 -1, -1, 82, 83, 113, -1, 10, 11, 12, 13, 3854 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3855 24, 25, 26, -1, 66, 29, 30, 31, 108, 71, 3856 110, 73, 74, 75, 38, -1, -1, -1, 118, -1, 3857 82, 83, -1, -1, 10, 11, 12, 13, 14, 15, 3858 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3859 26, -1, 66, 29, 30, 31, 108, -1, 110, 73, 3860 74, -1, 38, -1, -1, -1, 118, 10, 11, 12, 3861 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3862 23, 24, 25, 26, -1, -1, 29, 30, 31, -1, 3863 66, -1, -1, -1, -1, 38, 110, 73, 74, -1, 3864 -1, -1, -1, -1, 118, 10, 11, 12, 13, 14, 3865 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3866 25, 26, -1, 66, 29, 30, 31, -1, -1, -1, 3867 73, 74, -1, 38, 110, -1, -1, -1, -1, -1, 3868 -1, -1, 118, 10, 11, 12, 13, 14, 15, 16, 3869 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3870 -1, 66, 29, 30, 31, -1, -1, 110, 73, 74, 3871 -1, 38, -1, -1, -1, 118, 10, 11, 12, 13, 3872 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3873 24, 25, 26, -1, -1, 29, 30, 31, -1, 66, 3874 -1, -1, -1, -1, 38, 110, 73, 74, -1, -1, 3875 -1, -1, -1, 118, 10, 11, 12, 13, 14, 15, 3876 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3877 26, -1, 66, 29, 30, 31, -1, -1, -1, 73, 3878 74, -1, 38, 110, -1, -1, -1, -1, -1, -1, 3879 -1, 118, 10, 11, 12, 13, 14, 15, 16, 17, 3880 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, 3881 66, 29, 30, 31, -1, -1, 110, 73, 74, -1, 3882 38, -1, -1, -1, 118, 10, 11, 12, 13, 14, 3883 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3884 25, 26, -1, -1, 29, 30, 31, -1, 66, -1, 3885 -1, -1, -1, 38, 110, 73, 74, -1, -1, -1, 3886 -1, -1, 118, 10, 11, 12, 13, 14, 15, 16, 3887 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3888 -1, 66, 29, 30, 31, -1, -1, -1, 73, 74, 3889 -1, 38, 110, -1, -1, -1, -1, -1, -1, -1, 3890 118, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3891 -1, -1, -1, -1, -1, -1, -1, -1, -1, 66, 3892 -1, -1, -1, -1, -1, 110, 73, 74, -1, -1, 3893 -1, -1, -1, 118, 4, 5, 6, 7, 8, 9, 3894 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3895 20, 21, 22, 23, 24, 25, 26, -1, -1, 29, 3896 30, 31, -1, 110, -1, -1, -1, -1, 38, -1, 3897 -1, 118, -1, -1, -1, -1, -1, -1, -1, -1, 3898 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3899 -1, -1, -1, -1, -1, -1, 66, -1, 68, -1, 3900 70, -1, -1, 73, 74, 36, 37, -1, 39, 40, 3901 -1, 42, -1, -1, 45, 46, 47, 48, 49, 50, 3902 51, 52, -1, -1, 55, 56, -1, -1, -1, 60, 3903 61, -1, 63, -1, 65, -1, -1, -1, -1, 109, 3904 71, -1, -1, -1, 75, -1, -1, 78, 79, 80, 3905 81, 82, 83, -1, 85, 86, -1, -1, -1, -1, 3906 -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, 3907 -1, -1, -1, -1, -1, -1, -1, 108, -1, 110, 3908 -1, -1, 113, -1, -1, -1, 117, 118, 119, 120, 3909 121, 122, -1, -1, -1, -1, 127, -1, 36, 37, 3910 131, 39, 40, -1, 42, -1, -1, 45, 46, 47, 3911 48, 49, 50, 51, 52, -1, -1, -1, 56, -1, 3912 -1, -1, 60, 61, -1, 63, -1, 65, -1, -1, 3913 -1, -1, -1, 71, -1, -1, -1, 75, -1, -1, 3914 78, 79, 80, 81, 82, 83, -1, 85, 86, -1, 3915 -1, -1, -1, -1, -1, 93, -1, -1, -1, -1, 3916 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3917 108, -1, 110, -1, -1, 113, -1, -1, -1, 117, 3918 118, 119, 120, 121, 122, -1, -1, -1, -1, 127, 3919 -1, 36, 37, 131, 39, 40, -1, 42, 43, 44, 3920 45, 46, 47, 48, 49, 50, 51, 52, -1, -1, 3921 55, 56, -1, -1, -1, 60, 61, -1, 63, -1, 3922 65, -1, -1, -1, -1, -1, 71, -1, -1, -1, 3923 75, -1, -1, 78, 79, 80, 81, 82, 83, -1, 3924 85, 86, -1, -1, -1, -1, -1, -1, 93, -1, 3925 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3926 -1, -1, -1, 108, -1, 110, -1, -1, 113, -1, 3927 -1, -1, 117, 118, 119, 120, 121, 122, -1, -1, 3928 36, 37, 127, 39, 40, -1, 42, 43, 44, 45, 3929 46, 47, 48, 49, 50, 51, 52, -1, -1, -1, 3930 56, -1, -1, -1, 60, 61, -1, 63, -1, 65, 3931 -1, -1, -1, -1, -1, 71, -1, -1, -1, 75, 3932 -1, -1, 78, 79, 80, 81, 82, 83, -1, 85, 3933 86, -1, -1, -1, -1, -1, -1, 93, -1, -1, 3934 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3935 -1, -1, 108, -1, 110, -1, -1, 113, -1, -1, 3936 -1, 117, 118, 119, 120, 121, 122, -1, -1, 36, 3937 37, 127, 39, 40, -1, 42, -1, -1, 45, 46, 3938 47, 48, 49, 50, 51, 52, -1, -1, -1, 56, 3939 -1, -1, -1, 60, 61, -1, 63, -1, 65, -1, 3940 -1, -1, -1, -1, 71, -1, -1, -1, 75, -1, 3941 -1, 78, 79, 80, 81, 82, 83, -1, 85, 86, 3942 -1, -1, -1, -1, -1, -1, 93, -1, -1, -1, 3943 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3944 -1, 108, -1, 110, -1, -1, 113, -1, -1, -1, 3945 117, 118, 119, 120, 121, 122, -1, -1, -1, -1, 3946 127, 4, 5, 6, 7, 8, 9, 10, 11, 12, 3947 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3948 23, 24, 25, 26, -1, -1, 29, 30, 31, -1, 3949 -1, -1, -1, -1, -1, 38, -1, 36, 37, -1, 3950 39, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3951 -1, -1, -1, -1, -1, -1, 36, 37, -1, 39, 3952 -1, -1, -1, 66, -1, 68, 65, 70, -1, -1, 3953 73, 74, 71, -1, -1, -1, 75, -1, -1, 78, 3954 79, 80, 81, 82, 83, 65, 85, 86, -1, -1, 3955 -1, 71, 95, -1, 93, 75, -1, -1, 78, 79, 3956 80, 81, 82, 83, -1, 85, 86, -1, -1, 108, 3957 -1, 110, -1, 93, 36, 37, -1, 39, 117, 118, 3958 119, 120, 121, 122, -1, -1, -1, -1, 108, -1, 3959 110, -1, -1, 36, 37, -1, 39, 117, 118, 119, 3960 120, 121, 122, 65, -1, -1, -1, -1, -1, 71, 3961 -1, -1, -1, 75, -1, -1, 78, 79, 80, 81, 3962 82, 83, 65, 85, 86, -1, -1, -1, 71, -1, 3963 -1, 93, 75, -1, -1, 78, 79, 80, 81, 82, 3964 83, -1, 85, 86, -1, -1, 108, -1, 110, -1, 3965 93, 36, 37, -1, 39, 117, 118, 119, 120, 121, 3966 122, -1, -1, -1, -1, 108, -1, -1, -1, -1, 3967 -1, -1, -1, -1, 117, 118, 119, 120, 121, 122, 3968 65, -1, -1, -1, -1, -1, 71, -1, -1, -1, 3969 75, -1, -1, 78, 79, 80, 81, 82, 83, -1, 3970 85, 86, -1, -1, -1, -1, -1, -1, 93, -1, 3971 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3972 -1, -1, -1, 108, -1, -1, -1, -1, -1, -1, 3973 -1, -1, 117, 118, 119, 120, 121, 122, 4, 5, 3974 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 3975 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3976 26, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3977 -1, -1, 38, -1, -1, -1, -1, -1, -1, -1, 3978 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3979 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3980 66, -1, 68, -1, 70, 71, -1, 73, 74, 75, 3981 -1, -1, -1, -1, -1, -1, 82, 83, 3, 4, 3982 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3983 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3984 25, 26, -1, -1, 29, 30, 31, -1, -1, -1, 3985 -1, -1, -1, 38, -1, -1, -1, -1, -1, -1, 3986 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3987 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3988 -1, 66, -1, 68, -1, 70, -1, -1, 73, 74, 3989 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 3990 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3991 23, 24, 25, 26, -1, -1, 29, 30, 31, -1, 3992 -1, -1, -1, -1, -1, 38, -1, -1, -1, -1, 3993 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3994 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3995 -1, -1, -1, 66, -1, 68, -1, 70, -1, -1, 3996 73, 74, 4, 5, 6, 7, 8, 9, 10, 11, 3997 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3998 22, 23, 24, 25, 26, -1, -1, 29, 30, 31, 3999 -1, -1, -1, -1, -1, -1, 38, -1, -1, -1, 4000 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4001 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4002 -1, -1, -1, -1, 66, -1, 68, -1, 70, -1, 4003 -1, 73, 74 4056 -1, -1, 67, -1, 69, -1, 71, -1, -1, 74, 4057 75 4004 4058 }; 4005 4059 … … 4010 4064 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 4011 4065 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 4012 22, 23, 24, 25, 26, 2 9, 30, 31, 32, 35,4013 3 8, 39, 63, 66, 68, 70, 71, 73, 74, 75,4014 82, 83, 108, 110, 118, 136, 139, 196, 210, 211,4066 22, 23, 24, 25, 26, 27, 30, 31, 32, 33, 4067 36, 39, 40, 64, 67, 69, 71, 72, 74, 75, 4068 76, 83, 84, 109, 111, 119, 137, 140, 197, 211, 4015 4069 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 4016 222, 223, 224, 225, 226, 227, 22 9, 230, 231, 232,4017 233, 234, 235, 236, 23 8, 239, 240, 241, 242, 243,4018 244, 2 52, 253, 279, 280, 281, 289, 292, 298, 299,4019 30 1, 303, 304, 310, 315, 319, 320, 321, 322, 323,4020 324, 325, 326, 3 46, 363, 364, 365, 366, 71, 118,4021 1 38, 139, 213, 215, 223, 225, 235, 239, 241, 280,4022 81, 108, 308, 309, 310, 308, 308, 71, 73, 74,4023 75, 137, 138, 269, 270, 290, 291, 73, 74, 270,4024 108, 301, 11, 197, 108, 118, 315, 320, 321, 322,4025 32 4, 325, 326, 111, 133, 110, 216, 223, 225, 319,4026 32 3, 362, 363, 366, 367, 134, 106, 130, 273, 113,4027 1 34, 171, 73, 74, 136, 268, 134, 134, 134, 115,4028 1 34, 73, 74, 108, 118, 305, 314, 315, 316, 317,4029 318, 319, 32 3, 327, 328, 329, 330, 331, 337, 3,4030 27, 77, 237, 3, 5, 73, 110, 118, 215, 226,4031 2 30, 233, 242, 281, 319, 323, 366, 213, 215, 225,4032 2 35, 239, 241, 280, 319, 323, 32, 231, 231, 226,4033 2 33, 134, 231, 226, 231, 226, 74, 108, 113, 270,4034 2 81, 113, 270, 231, 226, 115, 134, 134, 0, 133,4035 1 08, 171, 308, 308, 133, 110, 223, 225, 364, 268,4036 26 8, 225, 130, 108, 118, 305, 315, 319, 110, 118,4037 366, 302, 228, 310, 108, 286, 108, 108, 50, 108,4038 36, 37, 39, 65, 71, 75, 78, 79, 80, 81,4039 8 5, 86, 93, 108, 110, 117, 118, 119, 120, 121,4040 122, 1 35, 139, 140, 141, 142, 147, 148, 149, 150,4070 222, 223, 224, 225, 226, 227, 228, 230, 231, 232, 4071 233, 234, 235, 236, 237, 239, 240, 241, 242, 243, 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, 4075 119, 139, 140, 214, 216, 224, 226, 236, 240, 242, 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, 4084 3, 28, 78, 238, 3, 5, 74, 111, 119, 216, 4085 227, 231, 234, 243, 282, 320, 324, 367, 214, 216, 4086 226, 236, 240, 242, 281, 320, 324, 33, 232, 232, 4087 227, 234, 135, 232, 227, 232, 227, 75, 109, 114, 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, 4092 109, 37, 38, 40, 66, 72, 76, 79, 80, 81, 4093 82, 86, 87, 94, 109, 111, 118, 119, 120, 121, 4094 122, 123, 136, 140, 141, 142, 143, 148, 149, 150, 4041 4095 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 4042 16 2, 164, 223, 272, 288, 362, 367, 225, 109, 109,4043 1 09, 109, 109, 109, 109, 73, 74, 110, 223, 268,4044 346, 364, 110, 118, 162, 215, 216, 222, 225, 229,4045 230, 23 5, 238, 239, 241, 258, 259, 263, 264, 265,4046 266, 2 80, 346, 358, 359, 360, 361, 366, 367, 111,4047 1 08, 319, 323, 366, 108, 115, 131, 110, 113, 118,4048 1 62, 274, 274, 114, 133, 115, 131, 108, 115, 131,4049 1 15, 131, 115, 131, 308, 131, 315, 316, 317, 318,4050 3 28, 329, 330, 331, 225, 314, 327, 63, 307, 110,4051 308, 345, 346, 308, 308, 171, 133, 108, 308, 345,4052 3 08, 308, 225, 305, 108, 108, 224, 225, 223, 225,4053 111, 133, 223, 362, 367, 171, 133, 268, 273, 215,4054 2 30, 319, 323, 171, 133, 290, 225, 235, 131, 225,4055 22 5, 288, 39, 110, 223, 245, 246, 247, 248, 362,4056 36 6, 113, 254, 270, 113, 225, 290, 131, 131, 301,4057 133, 138, 267, 3, 134, 205, 206, 220, 222, 225,4058 133, 307, 108, 307, 162, 315, 225, 108, 133, 268,4059 113, 32, 33, 34, 223, 282, 283, 285, 133, 128,4060 1 30, 287, 133, 226, 232, 233, 268, 311, 312, 313,4061 108, 140, 108, 147, 108, 147, 149, 108, 147, 108,4062 10 8, 147, 147, 138, 110, 162, 167, 171, 223, 271,4063 362, 111, 133, 149, 149, 81, 84, 85, 86, 108,4064 1 10, 112, 113, 96, 97, 98, 99, 100, 101, 102,4065 103, 104, 105, 1 30, 166, 149, 118, 123, 124, 120,4066 121, 87, 88, 89, 90, 125, 126, 91, 92, 119,4067 12 7, 128, 93, 94, 129, 130, 369, 108, 118, 341,4068 342, 343, 344, 345, 109, 115, 108, 345, 346, 108,4069 345, 346, 133, 108, 223, 364, 111, 133, 110, 118,4070 1 34, 223, 225, 357, 358, 366, 367, 134, 108, 110,4071 11 8, 315, 332, 333, 334, 335, 336, 337, 338, 339,4072 340, 34 6, 347, 348, 349, 350, 351, 352, 118, 366,4073 225, 134, 134, 118, 223, 225, 359, 268, 223, 346,4074 3 59, 268, 108, 133, 133, 133, 111, 133, 71, 79,4075 110, 112, 139, 270, 274, 275, 276, 277, 278, 133,4076 13 3, 133, 133, 133, 133, 305, 109, 109, 109, 109,4077 1 09, 109, 109, 314, 327, 108, 273, 111, 205, 133,4078 305, 167, 272, 167, 272, 305, 110, 205, 307, 171,4079 1 33, 205, 109, 247, 248, 111, 133, 108, 116, 118,4080 249, 251, 314, 315, 327, 345, 353, 354, 355, 356,4081 114, 246, 115, 131, 115, 131, 270, 245, 115, 368,4082 130, 255, 254, 225, 260, 261, 262, 265, 266, 109,4083 11 5, 171, 133, 118, 162, 133, 222, 225, 259, 358,4084 3 66, 299, 300, 108, 118, 332, 109, 115, 369, 270,4085 2 82, 108, 113, 270, 272, 282, 109, 115, 108, 140,4086 1 09, 116, 271, 271, 271, 110, 138, 144, 162, 272,4087 27 1, 111, 133, 109, 115, 109, 108, 118, 353, 109,4088 11 5, 162, 110, 138, 110, 143, 144, 133, 110, 138,4089 1 43, 162, 162, 149, 149, 149, 150, 150, 151, 151,4090 152, 15 2, 152, 152, 153, 153, 154, 155, 156, 157,4091 158, 1 16, 167, 162, 133, 342, 343, 344, 225, 341,4092 3 08, 308, 162, 272, 133, 267, 118, 133, 223, 346,4093 3 59, 225, 229, 111, 133, 111, 366, 111, 108, 133,4094 315, 333, 334, 335, 338, 348, 349, 350, 111, 133,4095 225, 332, 336, 347, 108, 308, 351, 369, 308, 308,4096 3 69, 108, 308, 351, 308, 308, 308, 308, 346, 223,4097 357, 367, 268, 111, 115, 111, 115, 369, 223, 359,4098 36 9, 256, 257, 258, 259, 256, 256, 268, 162, 133,4099 1 10, 270, 116, 115, 368, 274, 79, 110, 116, 278,4100 28, 207, 208, 268, 256, 138, 305, 138, 307, 108,4101 345, 346, 108, 345, 346, 140, 346, 171, 260, 109,4102 1 09, 109, 109, 111, 171, 205, 171, 113, 131, 131,4103 1 10, 315, 354, 355, 356, 160, 161, 225, 353, 250,4104 251, 25 0, 308, 308, 270, 308, 114, 270, 114, 161,4105 368, 134, 134, 138, 220, 134, 134, 256, 108, 118,4106 366, 134, 114, 225, 283, 284, 134, 133, 133, 108,4107 1 34, 109, 312, 167, 168, 116, 131, 110, 140, 198,4108 199, 200, 109, 115, 109, 133, 116, 109, 109, 109,4109 1 62, 225, 113, 149, 164, 162, 163, 165, 115, 134,4110 13 3, 133, 109, 115, 162, 133, 114, 160, 116, 260,4111 109, 109, 109, 341, 260, 109, 256, 223, 359, 110,4112 11 8, 162, 162, 225, 338, 260, 109, 109, 109, 109,4113 1 09, 109, 109, 7, 225, 332, 336, 347, 133, 133,4114 369, 133, 133, 109, 134, 134, 134, 134, 273, 134,4115 1 60, 161, 162, 306, 133, 274, 276, 114, 133, 209,4116 2 70, 39, 40, 42, 45, 46, 47, 48, 49, 50,4117 51, 52, 5 6, 60, 61, 110, 127, 138, 168, 169,4118 170, 171, 172, 173, 17 5, 176, 188, 190, 191, 196,4119 210, 304, 28, 134, 130, 273, 133, 133, 109, 134,4120 1 71, 245, 111, 109, 109, 109, 353, 249, 255, 114,4121 1 09, 115, 111, 111, 134, 225, 115, 369, 286, 109,4122 282, 213, 215, 223, 294, 295, 296, 297, 288, 109,4123 1 09, 116, 161, 108, 109, 116, 115, 138, 162, 162,4124 275, 115, 134, 165, 111, 138, 145, 146, 162, 144,4125 1 34, 145, 160, 164, 134, 108, 345, 346, 134, 134,4126 13 3, 134, 134, 134, 162, 109, 134, 108, 345, 346,4127 108, 351, 108, 351, 346, 224, 7, 118, 134, 162,4128 260, 260, 259, 263, 263, 264, 115, 115, 109, 109,4129 11 1, 95, 122, 134, 134, 145, 274, 162, 115, 131,4130 210, 214, 225, 229, 108, 108, 169, 108, 108, 131,4131 13 8, 131, 138, 118, 138, 168, 108, 171, 163, 163,4132 1 11, 142, 116, 131, 134, 133, 134, 209, 109, 162,4133 260, 260, 308, 109, 114, 108, 345, 346, 133, 109,4134 1 33, 134, 305, 114, 133, 134, 134, 109, 113, 198,4135 1 11, 161, 131, 198, 200, 109, 115, 134, 368, 163,4136 1 11, 134, 84, 112, 115, 134, 134, 111, 134, 109,4137 1 33, 109, 109, 111, 111, 111, 134, 109, 133, 133,4138 13 3, 162, 162, 134, 111, 134, 134, 134, 134, 133,4139 13 3, 161, 161, 111, 111, 134, 134, 270, 225, 167,4140 16 7, 46, 167, 133, 131, 131, 167, 131, 131, 167,4141 57, 58, 59, 192, 193, 194, 131, 62, 131, 113,4142 308, 173, 114, 131, 134, 134, 133, 95, 265, 266,4143 109, 295, 115, 131, 115, 131, 114, 293, 116, 140,4144 1 09, 109, 116, 165, 111, 114, 111, 110, 146, 110,4145 1 46, 146, 111, 111, 111, 260, 111, 260, 260, 260,4146 134, 134, 111, 111, 109, 109, 111, 115, 95, 259,4147 95, 134, 111, 111, 109, 109, 108, 109, 168, 189,4148 210, 131, 109, 108, 108, 171, 194, 57, 58, 162,4149 1 43, 169, 109, 109, 260, 113, 133, 133, 294, 140,4150 201, 108, 131, 201, 134, 116, 133, 133, 134, 134,4151 13 4, 134, 111, 111, 133, 134, 111, 169, 43, 44,4152 113, 179, 180, 181, 167, 169, 134, 109, 168, 113,4153 1 81, 95, 133, 95, 133, 108, 108, 131, 114, 134,4154 13 3, 268, 305, 114, 115, 116, 161, 109, 111, 162,4155 1 45, 145, 109, 109, 109, 109, 263, 41, 161, 177,4156 178, 306, 116, 133, 169, 179, 109, 131, 169, 131,4157 13 3, 109, 133, 109, 133, 95, 133, 95, 133, 131,4158 1 09, 294, 140, 138, 202, 109, 131, 116, 134, 134,4159 1 69, 95, 115, 116, 134, 203, 204, 210, 131, 168,4160 16 8, 203, 171, 195, 223, 362, 171, 195, 109, 133,4161 1 09, 133, 114, 109, 115, 162, 111, 111, 161, 177,4162 1 80, 182, 183, 133, 131, 180, 184, 185, 134, 108,4163 1 18, 305, 353, 138, 134, 171, 195, 171, 195, 108,4164 1 31, 138, 169, 174, 114, 180, 210, 168, 55, 174,4165 1 87, 114, 180, 109, 225, 109, 134, 134, 288, 169,4166 17 4, 131, 186, 187, 174, 187, 171, 171, 109, 109,4167 1 09, 186, 134, 134, 171, 171, 134, 1344096 161, 163, 165, 224, 273, 289, 363, 368, 226, 110, 4097 110, 110, 110, 110, 110, 110, 74, 75, 111, 224, 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, 4116 109, 109, 148, 148, 139, 111, 163, 168, 172, 224, 4117 272, 363, 112, 134, 150, 150, 82, 85, 86, 87, 4118 109, 111, 113, 114, 97, 98, 99, 100, 101, 102, 4119 103, 104, 105, 106, 131, 167, 150, 119, 124, 125, 4120 121, 122, 88, 89, 90, 91, 126, 127, 92, 93, 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, 4142 110, 116, 163, 111, 139, 111, 144, 145, 134, 111, 4143 139, 144, 163, 163, 150, 150, 150, 151, 151, 152, 4144 152, 153, 153, 153, 153, 154, 154, 155, 156, 157, 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, 4156 110, 110, 110, 110, 112, 172, 206, 172, 114, 132, 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, 4162 199, 200, 201, 110, 116, 110, 134, 117, 110, 110, 4163 110, 163, 226, 114, 150, 165, 163, 164, 166, 116, 4164 135, 134, 134, 110, 116, 163, 134, 115, 161, 117, 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, 4171 51, 52, 53, 57, 61, 62, 111, 128, 139, 169, 4172 170, 171, 172, 173, 174, 176, 177, 189, 191, 192, 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 4168 4222 }; 4169 4223 … … 5002 5056 5003 5057 /* Line 1806 of yacc.c */ 5004 #line 29 0"parser.yy"5058 #line 292 "parser.yy" 5005 5059 { 5006 5060 typedefTable.enterScope(); … … 5011 5065 5012 5066 /* Line 1806 of yacc.c */ 5013 #line 29 6"parser.yy"5067 #line 298 "parser.yy" 5014 5068 { 5015 5069 typedefTable.leaveScope(); … … 5020 5074 5021 5075 /* Line 1806 of yacc.c */ 5022 #line 30 5"parser.yy"5076 #line 307 "parser.yy" 5023 5077 { (yyval.constant) = new ConstantNode( ConstantNode::Integer, (yyvsp[(1) - (1)].tok) ); } 5024 5078 break; … … 5027 5081 5028 5082 /* Line 1806 of yacc.c */ 5029 #line 30 6"parser.yy"5083 #line 308 "parser.yy" 5030 5084 { (yyval.constant) = new ConstantNode( ConstantNode::Float, (yyvsp[(1) - (1)].tok) ); } 5031 5085 break; … … 5034 5088 5035 5089 /* Line 1806 of yacc.c */ 5036 #line 30 7"parser.yy"5090 #line 309 "parser.yy" 5037 5091 { (yyval.constant) = new ConstantNode( ConstantNode::Character, (yyvsp[(1) - (1)].tok) ); } 5038 5092 break; … … 5041 5095 5042 5096 /* Line 1806 of yacc.c */ 5043 #line 33 2"parser.yy"5097 #line 334 "parser.yy" 5044 5098 { (yyval.constant) = new ConstantNode( ConstantNode::String, (yyvsp[(1) - (1)].tok) ); } 5045 5099 break; … … 5048 5102 5049 5103 /* Line 1806 of yacc.c */ 5050 #line 33 3"parser.yy"5104 #line 335 "parser.yy" 5051 5105 { (yyval.constant) = (yyvsp[(1) - (2)].constant)->appendstr( (yyvsp[(2) - (2)].tok) ); } 5052 5106 break; 5053 5107 5054 5108 case 18: 5055 5056 /* Line 1806 of yacc.c */5057 #line 340 "parser.yy"5058 { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }5059 break;5060 5061 case 19:5062 5109 5063 5110 /* Line 1806 of yacc.c */ … … 5066 5113 break; 5067 5114 5115 case 19: 5116 5117 /* Line 1806 of yacc.c */ 5118 #line 344 "parser.yy" 5119 { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); } 5120 break; 5121 5068 5122 case 20: 5069 5123 5070 5124 /* Line 1806 of yacc.c */ 5071 #line 34 4"parser.yy"5125 #line 346 "parser.yy" 5072 5126 { (yyval.en) = (yyvsp[(2) - (3)].en); } 5073 5127 break; … … 5076 5130 5077 5131 /* Line 1806 of yacc.c */ 5078 #line 34 6"parser.yy"5132 #line 348 "parser.yy" 5079 5133 { (yyval.en) = new ValofExprNode( (yyvsp[(2) - (3)].sn) ); } 5080 5134 break; … … 5083 5137 5084 5138 /* Line 1806 of yacc.c */ 5085 #line 35 6"parser.yy"5139 #line 358 "parser.yy" 5086 5140 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Index ), (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ); } 5087 5141 break; … … 5090 5144 5091 5145 /* Line 1806 of yacc.c */ 5092 #line 3 58"parser.yy"5146 #line 360 "parser.yy" 5093 5147 { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ); } 5094 5148 break; … … 5097 5151 5098 5152 /* Line 1806 of yacc.c */ 5099 #line 36 2"parser.yy"5153 #line 364 "parser.yy" 5100 5154 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); } 5101 5155 break; … … 5104 5158 5105 5159 /* Line 1806 of yacc.c */ 5106 #line 36 5"parser.yy"5160 #line 367 "parser.yy" 5107 5161 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); } 5108 5162 break; … … 5111 5165 5112 5166 /* Line 1806 of yacc.c */ 5113 #line 3 68"parser.yy"5167 #line 370 "parser.yy" 5114 5168 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::IncrPost ), (yyvsp[(1) - (2)].en) ); } 5115 5169 break; … … 5118 5172 5119 5173 /* Line 1806 of yacc.c */ 5120 #line 37 0"parser.yy"5174 #line 372 "parser.yy" 5121 5175 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), (yyvsp[(1) - (2)].en) ); } 5122 5176 break; … … 5125 5179 5126 5180 /* Line 1806 of yacc.c */ 5127 #line 37 2"parser.yy"5181 #line 374 "parser.yy" 5128 5182 { (yyval.en) = 0; } 5129 5183 break; … … 5132 5186 5133 5187 /* Line 1806 of yacc.c */ 5134 #line 37 4"parser.yy"5188 #line 376 "parser.yy" 5135 5189 { 5136 5190 Token fn; fn.str = new std::string( "?{}" ); // location undefined … … 5142 5196 5143 5197 /* Line 1806 of yacc.c */ 5144 #line 38 3"parser.yy"5198 #line 385 "parser.yy" 5145 5199 { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); } 5146 5200 break; … … 5149 5203 5150 5204 /* Line 1806 of yacc.c */ 5151 #line 3 88"parser.yy"5205 #line 390 "parser.yy" 5152 5206 { (yyval.en) = 0; } 5153 5207 break; … … 5156 5210 5157 5211 /* Line 1806 of yacc.c */ 5158 #line 39 1"parser.yy"5212 #line 393 "parser.yy" 5159 5213 { (yyval.en) = (yyvsp[(3) - (3)].en)->set_argName( (yyvsp[(1) - (3)].tok) ); } 5160 5214 break; … … 5163 5217 5164 5218 /* Line 1806 of yacc.c */ 5165 #line 39 6"parser.yy"5219 #line 398 "parser.yy" 5166 5220 { (yyval.en) = (yyvsp[(7) - (7)].en)->set_argName( (yyvsp[(3) - (7)].en) ); } 5167 5221 break; … … 5170 5224 5171 5225 /* Line 1806 of yacc.c */ 5172 #line 398"parser.yy"5226 #line 400 "parser.yy" 5173 5227 { (yyval.en) = (yyvsp[(9) - (9)].en)->set_argName( new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (9)].en)->set_link( flattenCommas( (yyvsp[(5) - (9)].en) )))); } 5174 5228 break; … … 5177 5231 5178 5232 /* Line 1806 of yacc.c */ 5179 #line 40 3"parser.yy"5233 #line 405 "parser.yy" 5180 5234 { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); } 5181 5235 break; … … 5184 5238 5185 5239 /* Line 1806 of yacc.c */ 5186 #line 4 08"parser.yy"5240 #line 410 "parser.yy" 5187 5241 { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); } 5188 5242 break; … … 5191 5245 5192 5246 /* Line 1806 of yacc.c */ 5193 #line 41 2"parser.yy"5247 #line 414 "parser.yy" 5194 5248 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); } 5195 5249 break; … … 5198 5252 5199 5253 /* Line 1806 of yacc.c */ 5200 #line 41 4"parser.yy"5254 #line 416 "parser.yy" 5201 5255 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); } 5202 5256 break; … … 5205 5259 5206 5260 /* Line 1806 of yacc.c */ 5207 #line 41 6"parser.yy"5261 #line 418 "parser.yy" 5208 5262 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); } 5209 5263 break; … … 5212 5266 5213 5267 /* Line 1806 of yacc.c */ 5214 #line 4 18"parser.yy"5268 #line 420 "parser.yy" 5215 5269 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); } 5216 5270 break; 5217 5271 5218 5272 case 48: 5219 5220 /* Line 1806 of yacc.c */5221 #line 426 "parser.yy"5222 { (yyval.en) = (yyvsp[(1) - (1)].constant); }5223 break;5224 5225 case 49:5226 5273 5227 5274 /* Line 1806 of yacc.c */ … … 5230 5277 break; 5231 5278 5279 case 49: 5280 5281 /* Line 1806 of yacc.c */ 5282 #line 430 "parser.yy" 5283 { (yyval.en) = (yyvsp[(1) - (1)].constant); } 5284 break; 5285 5232 5286 case 50: 5233 5287 5234 5288 /* Line 1806 of yacc.c */ 5235 #line 43 0"parser.yy"5289 #line 432 "parser.yy" 5236 5290 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Incr ), (yyvsp[(2) - (2)].en) ); } 5237 5291 break; … … 5240 5294 5241 5295 /* Line 1806 of yacc.c */ 5242 #line 43 2"parser.yy"5296 #line 434 "parser.yy" 5243 5297 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), (yyvsp[(2) - (2)].en) ); } 5244 5298 break; … … 5247 5301 5248 5302 /* Line 1806 of yacc.c */ 5249 #line 43 4"parser.yy"5303 #line 436 "parser.yy" 5250 5304 { (yyval.en) = (yyvsp[(2) - (2)].en); } 5251 5305 break; … … 5254 5308 5255 5309 /* Line 1806 of yacc.c */ 5256 #line 43 6"parser.yy"5310 #line 438 "parser.yy" 5257 5311 { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); } 5258 5312 break; … … 5261 5315 5262 5316 /* Line 1806 of yacc.c */ 5263 #line 4 38"parser.yy"5317 #line 440 "parser.yy" 5264 5318 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neg ), (yyvsp[(2) - (2)].en) ); } 5265 5319 break; … … 5268 5322 5269 5323 /* Line 1806 of yacc.c */ 5270 #line 44 0"parser.yy"5324 #line 442 "parser.yy" 5271 5325 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PointTo ), (yyvsp[(2) - (2)].en) ); } 5272 5326 break; … … 5275 5329 5276 5330 /* Line 1806 of yacc.c */ 5277 #line 44 6"parser.yy"5331 #line 448 "parser.yy" 5278 5332 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), (yyvsp[(2) - (2)].en) ); } 5279 5333 break; … … 5282 5336 5283 5337 /* Line 1806 of yacc.c */ 5284 #line 4 48"parser.yy"5338 #line 450 "parser.yy" 5285 5339 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); } 5286 5340 break; … … 5289 5343 5290 5344 /* Line 1806 of yacc.c */ 5291 #line 45 0"parser.yy"5345 #line 452 "parser.yy" 5292 5346 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( (yyvsp[(3) - (6)].decl) ), new VarRefNode( (yyvsp[(5) - (6)].tok) )); } 5293 5347 break; … … 5296 5350 5297 5351 /* Line 1806 of yacc.c */ 5298 #line 45 2"parser.yy"5352 #line 454 "parser.yy" 5299 5353 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (1)].tok) )); } 5300 5354 break; … … 5303 5357 5304 5358 /* Line 1806 of yacc.c */ 5305 #line 45 4"parser.yy"5359 #line 456 "parser.yy" 5306 5360 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); } 5307 5361 break; … … 5310 5364 5311 5365 /* Line 1806 of yacc.c */ 5312 #line 45 6"parser.yy"5366 #line 458 "parser.yy" 5313 5367 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ); } 5314 5368 break; … … 5317 5371 5318 5372 /* Line 1806 of yacc.c */ 5319 #line 4 58"parser.yy"5373 #line 460 "parser.yy" 5320 5374 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), (yyvsp[(2) - (2)].en) ); } 5321 5375 break; … … 5324 5378 5325 5379 /* Line 1806 of yacc.c */ 5326 #line 46 0"parser.yy"5380 #line 462 "parser.yy" 5327 5381 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ); } 5328 5382 break; … … 5331 5385 5332 5386 /* Line 1806 of yacc.c */ 5333 #line 46 2"parser.yy"5387 #line 464 "parser.yy" 5334 5388 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LabelAddress ), new VarRefNode( (yyvsp[(2) - (2)].tok), true ) ); } 5335 5389 break; … … 5338 5392 5339 5393 /* Line 1806 of yacc.c */ 5340 #line 46 6"parser.yy"5394 #line 468 "parser.yy" 5341 5395 { (yyval.en) = new OperatorNode( OperatorNode::AddressOf ); } 5342 5396 break; … … 5345 5399 5346 5400 /* Line 1806 of yacc.c */ 5347 #line 46 7"parser.yy"5401 #line 469 "parser.yy" 5348 5402 { (yyval.en) = new OperatorNode( OperatorNode::UnPlus ); } 5349 5403 break; … … 5352 5406 5353 5407 /* Line 1806 of yacc.c */ 5354 #line 4 68"parser.yy"5408 #line 470 "parser.yy" 5355 5409 { (yyval.en) = new OperatorNode( OperatorNode::UnMinus ); } 5356 5410 break; … … 5359 5413 5360 5414 /* Line 1806 of yacc.c */ 5361 #line 4 69"parser.yy"5415 #line 471 "parser.yy" 5362 5416 { (yyval.en) = new OperatorNode( OperatorNode::BitNeg ); } 5363 5417 break; 5364 5418 5365 5419 case 70: 5366 5367 /* Line 1806 of yacc.c */5368 #line 475 "parser.yy"5369 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }5370 break;5371 5372 case 71:5373 5420 5374 5421 /* Line 1806 of yacc.c */ … … 5377 5424 break; 5378 5425 5426 case 71: 5427 5428 /* Line 1806 of yacc.c */ 5429 #line 479 "parser.yy" 5430 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); } 5431 break; 5432 5379 5433 case 73: 5380 5434 5381 5435 /* Line 1806 of yacc.c */ 5382 #line 48 3"parser.yy"5436 #line 485 "parser.yy" 5383 5437 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mul ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5384 5438 break; … … 5387 5441 5388 5442 /* Line 1806 of yacc.c */ 5389 #line 48 5"parser.yy"5443 #line 487 "parser.yy" 5390 5444 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Div ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5391 5445 break; … … 5394 5448 5395 5449 /* Line 1806 of yacc.c */ 5396 #line 48 7"parser.yy"5450 #line 489 "parser.yy" 5397 5451 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mod ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5398 5452 break; … … 5401 5455 5402 5456 /* Line 1806 of yacc.c */ 5403 #line 49 3"parser.yy"5457 #line 495 "parser.yy" 5404 5458 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Plus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5405 5459 break; … … 5408 5462 5409 5463 /* Line 1806 of yacc.c */ 5410 #line 49 5"parser.yy"5464 #line 497 "parser.yy" 5411 5465 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Minus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5412 5466 break; … … 5415 5469 5416 5470 /* Line 1806 of yacc.c */ 5417 #line 50 1"parser.yy"5471 #line 503 "parser.yy" 5418 5472 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5419 5473 break; … … 5422 5476 5423 5477 /* Line 1806 of yacc.c */ 5424 #line 50 3"parser.yy"5478 #line 505 "parser.yy" 5425 5479 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::RShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5426 5480 break; … … 5429 5483 5430 5484 /* Line 1806 of yacc.c */ 5431 #line 5 09"parser.yy"5485 #line 511 "parser.yy" 5432 5486 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5433 5487 break; … … 5436 5490 5437 5491 /* Line 1806 of yacc.c */ 5438 #line 51 1"parser.yy"5492 #line 513 "parser.yy" 5439 5493 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5440 5494 break; … … 5443 5497 5444 5498 /* Line 1806 of yacc.c */ 5445 #line 51 3"parser.yy"5499 #line 515 "parser.yy" 5446 5500 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5447 5501 break; … … 5450 5504 5451 5505 /* Line 1806 of yacc.c */ 5452 #line 51 5"parser.yy"5506 #line 517 "parser.yy" 5453 5507 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5454 5508 break; … … 5457 5511 5458 5512 /* Line 1806 of yacc.c */ 5459 #line 52 1"parser.yy"5513 #line 523 "parser.yy" 5460 5514 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Eq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5461 5515 break; … … 5464 5518 5465 5519 /* Line 1806 of yacc.c */ 5466 #line 52 3"parser.yy"5520 #line 525 "parser.yy" 5467 5521 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5468 5522 break; … … 5471 5525 5472 5526 /* Line 1806 of yacc.c */ 5473 #line 5 29"parser.yy"5527 #line 531 "parser.yy" 5474 5528 { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::BitAnd ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5475 5529 break; … … 5478 5532 5479 5533 /* Line 1806 of yacc.c */ 5480 #line 53 5"parser.yy"5534 #line 537 "parser.yy" 5481 5535 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Xor ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5482 5536 break; … … 5485 5539 5486 5540 /* Line 1806 of yacc.c */ 5487 #line 54 1"parser.yy"5541 #line 543 "parser.yy" 5488 5542 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::BitOr ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5489 5543 break; … … 5492 5546 5493 5547 /* Line 1806 of yacc.c */ 5494 #line 54 7"parser.yy"5548 #line 549 "parser.yy" 5495 5549 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::And ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5496 5550 break; … … 5499 5553 5500 5554 /* Line 1806 of yacc.c */ 5501 #line 55 3"parser.yy"5555 #line 555 "parser.yy" 5502 5556 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Or ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5503 5557 break; … … 5506 5560 5507 5561 /* Line 1806 of yacc.c */ 5508 #line 5 59"parser.yy"5562 #line 561 "parser.yy" 5509 5563 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); } 5510 5564 break; … … 5513 5567 5514 5568 /* Line 1806 of yacc.c */ 5515 #line 56 1"parser.yy"5569 #line 563 "parser.yy" 5516 5570 { (yyval.en)=new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ); } 5517 5571 break; … … 5520 5574 5521 5575 /* Line 1806 of yacc.c */ 5522 #line 56 3"parser.yy"5576 #line 565 "parser.yy" 5523 5577 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); } 5524 5578 break; … … 5527 5581 5528 5582 /* Line 1806 of yacc.c */ 5529 #line 57 4"parser.yy"5583 #line 576 "parser.yy" 5530 5584 { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5531 5585 break; … … 5534 5588 5535 5589 /* Line 1806 of yacc.c */ 5536 #line 57 6"parser.yy"5590 #line 578 "parser.yy" 5537 5591 { (yyval.en) =new CompositeExprNode( (yyvsp[(2) - (3)].en), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5538 5592 break; … … 5541 5595 5542 5596 /* Line 1806 of yacc.c */ 5543 #line 5 78"parser.yy"5597 #line 580 "parser.yy" 5544 5598 { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); } 5545 5599 break; … … 5548 5602 5549 5603 /* Line 1806 of yacc.c */ 5550 #line 58 3"parser.yy"5604 #line 585 "parser.yy" 5551 5605 { (yyval.en) = new NullExprNode; } 5552 5606 break; … … 5555 5609 5556 5610 /* Line 1806 of yacc.c */ 5557 #line 59 1"parser.yy"5611 #line 593 "parser.yy" 5558 5612 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ) ); } 5559 5613 break; … … 5562 5616 5563 5617 /* Line 1806 of yacc.c */ 5564 #line 59 3"parser.yy"5618 #line 595 "parser.yy" 5565 5619 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (yyvsp[(3) - (5)].en) ); } 5566 5620 break; … … 5569 5623 5570 5624 /* Line 1806 of yacc.c */ 5571 #line 59 5"parser.yy"5625 #line 597 "parser.yy" 5572 5626 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(new NullExprNode)->set_link( (yyvsp[(4) - (6)].en) ) ); } 5573 5627 break; … … 5576 5630 5577 5631 /* Line 1806 of yacc.c */ 5578 #line 59 7"parser.yy"5632 #line 599 "parser.yy" 5579 5633 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( flattenCommas( (yyvsp[(5) - (7)].en) ) ) ); } 5580 5634 break; … … 5583 5637 5584 5638 /* Line 1806 of yacc.c */ 5585 #line 60 3"parser.yy"5639 #line 605 "parser.yy" 5586 5640 { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); } 5587 5641 break; … … 5590 5644 5591 5645 /* Line 1806 of yacc.c */ 5592 #line 60 7"parser.yy"5646 #line 609 "parser.yy" 5593 5647 { (yyval.en) = new OperatorNode( OperatorNode::MulAssn ); } 5594 5648 break; … … 5597 5651 5598 5652 /* Line 1806 of yacc.c */ 5599 #line 6 08"parser.yy"5653 #line 610 "parser.yy" 5600 5654 { (yyval.en) = new OperatorNode( OperatorNode::DivAssn ); } 5601 5655 break; … … 5604 5658 5605 5659 /* Line 1806 of yacc.c */ 5606 #line 6 09"parser.yy"5660 #line 611 "parser.yy" 5607 5661 { (yyval.en) = new OperatorNode( OperatorNode::ModAssn ); } 5608 5662 break; … … 5611 5665 5612 5666 /* Line 1806 of yacc.c */ 5613 #line 61 0"parser.yy"5667 #line 612 "parser.yy" 5614 5668 { (yyval.en) = new OperatorNode( OperatorNode::PlusAssn ); } 5615 5669 break; … … 5618 5672 5619 5673 /* Line 1806 of yacc.c */ 5620 #line 61 1"parser.yy"5674 #line 613 "parser.yy" 5621 5675 { (yyval.en) = new OperatorNode( OperatorNode::MinusAssn ); } 5622 5676 break; … … 5625 5679 5626 5680 /* Line 1806 of yacc.c */ 5627 #line 61 2"parser.yy"5681 #line 614 "parser.yy" 5628 5682 { (yyval.en) = new OperatorNode( OperatorNode::LSAssn ); } 5629 5683 break; … … 5632 5686 5633 5687 /* Line 1806 of yacc.c */ 5634 #line 61 3"parser.yy"5688 #line 615 "parser.yy" 5635 5689 { (yyval.en) = new OperatorNode( OperatorNode::RSAssn ); } 5636 5690 break; … … 5639 5693 5640 5694 /* Line 1806 of yacc.c */ 5641 #line 61 4"parser.yy"5695 #line 616 "parser.yy" 5642 5696 { (yyval.en) = new OperatorNode( OperatorNode::AndAssn ); } 5643 5697 break; … … 5646 5700 5647 5701 /* Line 1806 of yacc.c */ 5648 #line 61 5"parser.yy"5702 #line 617 "parser.yy" 5649 5703 { (yyval.en) = new OperatorNode( OperatorNode::ERAssn ); } 5650 5704 break; … … 5653 5707 5654 5708 /* Line 1806 of yacc.c */ 5655 #line 61 6"parser.yy"5709 #line 618 "parser.yy" 5656 5710 { (yyval.en) = new OperatorNode( OperatorNode::OrAssn ); } 5657 5711 break; … … 5660 5714 5661 5715 /* Line 1806 of yacc.c */ 5662 #line 62 2"parser.yy"5716 #line 624 "parser.yy" 5663 5717 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Comma ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5664 5718 break; … … 5667 5721 5668 5722 /* Line 1806 of yacc.c */ 5669 #line 62 7"parser.yy"5723 #line 629 "parser.yy" 5670 5724 { (yyval.en) = 0; } 5671 5725 break; … … 5674 5728 5675 5729 /* Line 1806 of yacc.c */ 5676 #line 63 6"parser.yy"5730 #line 638 "parser.yy" 5677 5731 { (yyval.sn) = (yyvsp[(1) - (1)].sn); } 5678 5732 break; … … 5681 5735 5682 5736 /* Line 1806 of yacc.c */ 5683 #line 64 3"parser.yy"5737 #line 645 "parser.yy" 5684 5738 { 5685 5739 Token fn; fn.str = new std::string( "^?{}" ); // location undefined … … 5692 5746 5693 5747 /* Line 1806 of yacc.c */ 5694 #line 65 2"parser.yy"5748 #line 654 "parser.yy" 5695 5749 { 5696 5750 (yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) ); … … 5701 5755 5702 5756 /* Line 1806 of yacc.c */ 5703 #line 6 59"parser.yy"5757 #line 661 "parser.yy" 5704 5758 { (yyval.sn) = new CompoundStmtNode( (StatementNode *)0 ); } 5705 5759 break; … … 5708 5762 5709 5763 /* Line 1806 of yacc.c */ 5710 #line 66 6"parser.yy"5764 #line 668 "parser.yy" 5711 5765 { (yyval.sn) = new CompoundStmtNode( (yyvsp[(5) - (7)].sn) ); } 5712 5766 break; … … 5715 5769 5716 5770 /* Line 1806 of yacc.c */ 5717 #line 67 2"parser.yy"5771 #line 674 "parser.yy" 5718 5772 { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } } 5719 5773 break; … … 5722 5776 5723 5777 /* Line 1806 of yacc.c */ 5724 #line 67 7"parser.yy"5778 #line 679 "parser.yy" 5725 5779 { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); } 5726 5780 break; … … 5729 5783 5730 5784 /* Line 1806 of yacc.c */ 5731 #line 6 79"parser.yy"5785 #line 681 "parser.yy" 5732 5786 { (yyval.sn) = new StatementNode( (yyvsp[(2) - (2)].decl) ); } 5733 5787 break; … … 5736 5790 5737 5791 /* Line 1806 of yacc.c */ 5738 #line 68 1"parser.yy"5792 #line 683 "parser.yy" 5739 5793 { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); } 5740 5794 break; … … 5743 5797 5744 5798 /* Line 1806 of yacc.c */ 5745 #line 6 88"parser.yy"5799 #line 690 "parser.yy" 5746 5800 { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } } 5747 5801 break; … … 5750 5804 5751 5805 /* Line 1806 of yacc.c */ 5752 #line 69 3"parser.yy"5806 #line 695 "parser.yy" 5753 5807 { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); } 5754 5808 break; … … 5757 5811 5758 5812 /* Line 1806 of yacc.c */ 5759 #line 699"parser.yy"5813 #line 701 "parser.yy" 5760 5814 { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); } 5761 5815 break; … … 5764 5818 5765 5819 /* Line 1806 of yacc.c */ 5766 #line 70 1"parser.yy"5820 #line 703 "parser.yy" 5767 5821 { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); } 5768 5822 break; … … 5771 5825 5772 5826 /* Line 1806 of yacc.c */ 5773 #line 70 3"parser.yy"5827 #line 705 "parser.yy" 5774 5828 { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); } 5775 5829 break; … … 5778 5832 5779 5833 /* Line 1806 of yacc.c */ 5780 #line 70 5"parser.yy"5834 #line 707 "parser.yy" 5781 5835 { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); /* xxx */ } 5782 5836 break; … … 5785 5839 5786 5840 /* Line 1806 of yacc.c */ 5787 #line 71 0"parser.yy"5841 #line 712 "parser.yy" 5788 5842 { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); } 5789 5843 break; … … 5792 5846 5793 5847 /* Line 1806 of yacc.c */ 5794 #line 71 2"parser.yy"5848 #line 714 "parser.yy" 5795 5849 { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); } 5796 5850 break; … … 5799 5853 5800 5854 /* Line 1806 of yacc.c */ 5801 #line 7 19"parser.yy"5855 #line 721 "parser.yy" 5802 5856 { (yyval.en) = (yyvsp[(1) - (1)].en); } 5803 5857 break; … … 5806 5860 5807 5861 /* Line 1806 of yacc.c */ 5808 #line 72 1"parser.yy"5862 #line 723 "parser.yy" 5809 5863 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5810 5864 break; … … 5813 5867 5814 5868 /* Line 1806 of yacc.c */ 5815 #line 7 28"parser.yy"5869 #line 730 "parser.yy" 5816 5870 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(tupleContents( (yyvsp[(1) - (3)].en) ))->set_link( (yyvsp[(3) - (3)].en) ) ); } 5817 5871 break; … … 5820 5874 5821 5875 /* Line 1806 of yacc.c */ 5822 #line 73 2"parser.yy"5876 #line 734 "parser.yy" 5823 5877 { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(2) - (3)].en), 0 ); } 5824 5878 break; … … 5827 5881 5828 5882 /* Line 1806 of yacc.c */ 5829 #line 73 3"parser.yy"5883 #line 735 "parser.yy" 5830 5884 { (yyval.sn) = new StatementNode( StatementNode::Default ); } 5831 5885 break; … … 5834 5888 5835 5889 /* Line 1806 of yacc.c */ 5836 #line 7 39"parser.yy"5890 #line 741 "parser.yy" 5837 5891 { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); } 5838 5892 break; … … 5841 5895 5842 5896 /* Line 1806 of yacc.c */ 5843 #line 74 3"parser.yy"5897 #line 745 "parser.yy" 5844 5898 { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); } 5845 5899 break; … … 5848 5902 5849 5903 /* Line 1806 of yacc.c */ 5850 #line 7 48"parser.yy"5904 #line 750 "parser.yy" 5851 5905 { (yyval.sn) = 0; } 5852 5906 break; … … 5855 5909 5856 5910 /* Line 1806 of yacc.c */ 5857 #line 75 4"parser.yy"5911 #line 756 "parser.yy" 5858 5912 { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); } 5859 5913 break; … … 5862 5916 5863 5917 /* Line 1806 of yacc.c */ 5864 #line 75 6"parser.yy"5918 #line 758 "parser.yy" 5865 5919 { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); } 5866 5920 break; … … 5869 5923 5870 5924 /* Line 1806 of yacc.c */ 5871 #line 76 1"parser.yy"5925 #line 763 "parser.yy" 5872 5926 { (yyval.sn) = 0; } 5873 5927 break; … … 5876 5930 5877 5931 /* Line 1806 of yacc.c */ 5878 #line 76 7"parser.yy"5932 #line 769 "parser.yy" 5879 5933 { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); } 5880 5934 break; … … 5883 5937 5884 5938 /* Line 1806 of yacc.c */ 5885 #line 7 69"parser.yy"5939 #line 771 "parser.yy" 5886 5940 { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].sn) ))); } 5887 5941 break; … … 5890 5944 5891 5945 /* Line 1806 of yacc.c */ 5892 #line 77 1"parser.yy"5946 #line 773 "parser.yy" 5893 5947 { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); } 5894 5948 break; … … 5897 5951 5898 5952 /* Line 1806 of yacc.c */ 5899 #line 77 3"parser.yy"5953 #line 775 "parser.yy" 5900 5954 { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_link( (yyvsp[(2) - (4)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(3) - (4)].sn),*(yyvsp[(4) - (4)].sn) ))))); } 5901 5955 break; … … 5904 5958 5905 5959 /* Line 1806 of yacc.c */ 5906 #line 7 78"parser.yy"5960 #line 780 "parser.yy" 5907 5961 { (yyval.sn) = 0; } 5908 5962 break; … … 5911 5965 5912 5966 /* Line 1806 of yacc.c */ 5913 #line 78 3"parser.yy"5967 #line 785 "parser.yy" 5914 5968 { (yyval.sn) = new StatementNode( StatementNode::Fallthru ); } 5915 5969 break; … … 5918 5972 5919 5973 /* Line 1806 of yacc.c */ 5920 #line 78 4"parser.yy"5974 #line 786 "parser.yy" 5921 5975 { (yyval.sn) = new StatementNode( StatementNode::Fallthru ); } 5922 5976 break; … … 5925 5979 5926 5980 /* Line 1806 of yacc.c */ 5927 #line 7 89"parser.yy"5981 #line 791 "parser.yy" 5928 5982 { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); } 5929 5983 break; … … 5932 5986 5933 5987 /* Line 1806 of yacc.c */ 5934 #line 79 1"parser.yy"5988 #line 793 "parser.yy" 5935 5989 { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); } 5936 5990 break; … … 5939 5993 5940 5994 /* Line 1806 of yacc.c */ 5941 #line 79 3"parser.yy"5995 #line 795 "parser.yy" 5942 5996 { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); } 5943 5997 break; … … 5946 6000 5947 6001 /* Line 1806 of yacc.c */ 5948 #line 798"parser.yy"6002 #line 800 "parser.yy" 5949 6003 { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); } 5950 6004 break; … … 5953 6007 5954 6008 /* Line 1806 of yacc.c */ 5955 #line 80 0"parser.yy"6009 #line 802 "parser.yy" 5956 6010 { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); } 5957 6011 break; … … 5960 6014 5961 6015 /* Line 1806 of yacc.c */ 5962 #line 80 5"parser.yy"6016 #line 807 "parser.yy" 5963 6017 { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); } 5964 6018 break; … … 5967 6021 5968 6022 /* Line 1806 of yacc.c */ 5969 #line 8 09"parser.yy"6023 #line 811 "parser.yy" 5970 6024 { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); } 5971 6025 break; … … 5974 6028 5975 6029 /* Line 1806 of yacc.c */ 5976 #line 81 2"parser.yy"6030 #line 814 "parser.yy" 5977 6031 { (yyval.sn) = new StatementNode( StatementNode::Continue ); } 5978 6032 break; … … 5981 6035 5982 6036 /* Line 1806 of yacc.c */ 5983 #line 81 6"parser.yy"6037 #line 818 "parser.yy" 5984 6038 { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); } 5985 6039 break; … … 5988 6042 5989 6043 /* Line 1806 of yacc.c */ 5990 #line 8 19"parser.yy"6044 #line 821 "parser.yy" 5991 6045 { (yyval.sn) = new StatementNode( StatementNode::Break ); } 5992 6046 break; … … 5995 6049 5996 6050 /* Line 1806 of yacc.c */ 5997 #line 82 3"parser.yy"6051 #line 825 "parser.yy" 5998 6052 { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); } 5999 6053 break; … … 6002 6056 6003 6057 /* Line 1806 of yacc.c */ 6004 #line 82 5"parser.yy"6058 #line 827 "parser.yy" 6005 6059 { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); } 6006 6060 break; … … 6009 6063 6010 6064 /* Line 1806 of yacc.c */ 6011 #line 82 7"parser.yy"6065 #line 829 "parser.yy" 6012 6066 { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); } 6013 6067 break; … … 6016 6070 6017 6071 /* Line 1806 of yacc.c */ 6018 #line 83 1"parser.yy"6072 #line 833 "parser.yy" 6019 6073 { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); } 6020 6074 break; … … 6023 6077 6024 6078 /* Line 1806 of yacc.c */ 6025 #line 83 3"parser.yy"6079 #line 835 "parser.yy" 6026 6080 { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (5)].en), 0 ); } 6027 6081 break; 6028 6082 6029 6083 case 197: 6030 6031 /* Line 1806 of yacc.c */6032 #line 840 "parser.yy"6033 { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }6034 break;6035 6036 case 198:6037 6084 6038 6085 /* Line 1806 of yacc.c */ … … 6041 6088 break; 6042 6089 6090 case 198: 6091 6092 /* Line 1806 of yacc.c */ 6093 #line 844 "parser.yy" 6094 { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); } 6095 break; 6096 6043 6097 case 199: 6044 6098 6045 6099 /* Line 1806 of yacc.c */ 6046 #line 84 4"parser.yy"6100 #line 846 "parser.yy" 6047 6101 { 6048 6102 (yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) ); … … 6054 6108 6055 6109 /* Line 1806 of yacc.c */ 6056 #line 85 5"parser.yy"6110 #line 857 "parser.yy" 6057 6111 { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); } 6058 6112 break; … … 6061 6115 6062 6116 /* Line 1806 of yacc.c */ 6063 #line 85 7"parser.yy"6117 #line 859 "parser.yy" 6064 6118 { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); } 6065 6119 break; … … 6068 6122 6069 6123 /* Line 1806 of yacc.c */ 6070 #line 8 59"parser.yy"6124 #line 861 "parser.yy" 6071 6125 { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); } 6072 6126 break; … … 6075 6129 6076 6130 /* Line 1806 of yacc.c */ 6077 #line 86 1"parser.yy"6131 #line 863 "parser.yy" 6078 6132 { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); } 6079 6133 break; … … 6082 6136 6083 6137 /* Line 1806 of yacc.c */ 6084 #line 86 6"parser.yy"6138 #line 868 "parser.yy" 6085 6139 { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); } 6086 6140 break; … … 6089 6143 6090 6144 /* Line 1806 of yacc.c */ 6091 #line 8 68"parser.yy"6145 #line 870 "parser.yy" 6092 6146 { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); } 6093 6147 break; … … 6096 6150 6097 6151 /* Line 1806 of yacc.c */ 6098 #line 87 0"parser.yy"6152 #line 872 "parser.yy" 6099 6153 { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); } 6100 6154 break; … … 6103 6157 6104 6158 /* Line 1806 of yacc.c */ 6105 #line 87 2"parser.yy"6159 #line 874 "parser.yy" 6106 6160 { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); } 6107 6161 break; … … 6110 6164 6111 6165 /* Line 1806 of yacc.c */ 6112 #line 87 7"parser.yy"6166 #line 879 "parser.yy" 6113 6167 { 6114 6168 (yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) ); … … 6120 6174 6121 6175 /* Line 1806 of yacc.c */ 6122 #line 89 1"parser.yy"6176 #line 893 "parser.yy" 6123 6177 { 6124 6178 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6130 6184 6131 6185 /* Line 1806 of yacc.c */ 6132 #line 89 6"parser.yy"6186 #line 898 "parser.yy" 6133 6187 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); } 6134 6188 break; … … 6137 6191 6138 6192 /* Line 1806 of yacc.c */ 6139 #line 898"parser.yy"6193 #line 900 "parser.yy" 6140 6194 { 6141 6195 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6147 6201 6148 6202 /* Line 1806 of yacc.c */ 6149 #line 90 7"parser.yy"6203 #line 909 "parser.yy" 6150 6204 { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); } 6151 6205 break; … … 6154 6208 6155 6209 /* Line 1806 of yacc.c */ 6156 #line 9 09"parser.yy"6210 #line 911 "parser.yy" 6157 6211 { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); } 6158 6212 break; … … 6161 6215 6162 6216 /* Line 1806 of yacc.c */ 6163 #line 91 1"parser.yy"6217 #line 913 "parser.yy" 6164 6218 { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ); } 6165 6219 break; … … 6168 6222 6169 6223 /* Line 1806 of yacc.c */ 6170 #line 91 3"parser.yy"6224 #line 915 "parser.yy" 6171 6225 { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].constant) ); } 6172 6226 break; … … 6175 6229 6176 6230 /* Line 1806 of yacc.c */ 6177 #line 91 5"parser.yy"6231 #line 917 "parser.yy" 6178 6232 { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].constant), (yyvsp[(12) - (14)].label) ); } 6179 6233 break; … … 6182 6236 6183 6237 /* Line 1806 of yacc.c */ 6184 #line 92 0"parser.yy"6238 #line 922 "parser.yy" 6185 6239 { (yyval.flag) = false; } 6186 6240 break; … … 6189 6243 6190 6244 /* Line 1806 of yacc.c */ 6191 #line 92 2"parser.yy"6245 #line 924 "parser.yy" 6192 6246 { (yyval.flag) = true; } 6193 6247 break; … … 6196 6250 6197 6251 /* Line 1806 of yacc.c */ 6198 #line 92 7"parser.yy"6252 #line 929 "parser.yy" 6199 6253 { (yyval.en) = 0; } 6200 6254 break; … … 6203 6257 6204 6258 /* Line 1806 of yacc.c */ 6205 #line 93 4"parser.yy"6259 #line 936 "parser.yy" 6206 6260 { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); } 6207 6261 break; … … 6210 6264 6211 6265 /* Line 1806 of yacc.c */ 6212 #line 9 39"parser.yy"6266 #line 941 "parser.yy" 6213 6267 { (yyval.en) = new AsmExprNode( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ); } 6214 6268 break; … … 6217 6271 6218 6272 /* Line 1806 of yacc.c */ 6219 #line 94 1"parser.yy"6273 #line 943 "parser.yy" 6220 6274 { (yyval.en) = new AsmExprNode( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ); } 6221 6275 break; … … 6224 6278 6225 6279 /* Line 1806 of yacc.c */ 6226 #line 94 6"parser.yy"6280 #line 948 "parser.yy" 6227 6281 { (yyval.constant) = 0; } 6228 6282 break; … … 6231 6285 6232 6286 /* Line 1806 of yacc.c */ 6233 #line 9 48"parser.yy"6287 #line 950 "parser.yy" 6234 6288 { (yyval.constant) = (yyvsp[(1) - (1)].constant); } 6235 6289 break; … … 6238 6292 6239 6293 /* Line 1806 of yacc.c */ 6240 #line 95 0"parser.yy"6294 #line 952 "parser.yy" 6241 6295 { (yyval.constant) = (ConstantNode *)(yyvsp[(1) - (3)].constant)->set_link( (yyvsp[(3) - (3)].constant) ); } 6242 6296 break; … … 6245 6299 6246 6300 /* Line 1806 of yacc.c */ 6247 #line 95 5"parser.yy"6301 #line 957 "parser.yy" 6248 6302 { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); } 6249 6303 break; … … 6252 6306 6253 6307 /* Line 1806 of yacc.c */ 6254 #line 95 7"parser.yy"6308 #line 959 "parser.yy" 6255 6309 { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); } 6256 6310 break; … … 6259 6313 6260 6314 /* Line 1806 of yacc.c */ 6261 #line 96 4"parser.yy"6315 #line 966 "parser.yy" 6262 6316 { (yyval.decl) = 0; } 6263 6317 break; … … 6266 6320 6267 6321 /* Line 1806 of yacc.c */ 6268 #line 97 1"parser.yy"6322 #line 973 "parser.yy" 6269 6323 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); } 6270 6324 break; … … 6273 6327 6274 6328 /* Line 1806 of yacc.c */ 6275 #line 97 6"parser.yy"6329 #line 978 "parser.yy" 6276 6330 { (yyval.decl) = 0; } 6277 6331 break; … … 6280 6334 6281 6335 /* Line 1806 of yacc.c */ 6282 #line 98 3"parser.yy"6336 #line 985 "parser.yy" 6283 6337 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); } 6284 6338 break; … … 6287 6341 6288 6342 /* Line 1806 of yacc.c */ 6289 #line 99 7"parser.yy"6343 #line 999 "parser.yy" 6290 6344 {} 6291 6345 break; … … 6294 6348 6295 6349 /* Line 1806 of yacc.c */ 6296 #line 998"parser.yy"6350 #line 1000 "parser.yy" 6297 6351 {} 6298 6352 break; … … 6301 6355 6302 6356 /* Line 1806 of yacc.c */ 6303 #line 102 7"parser.yy"6357 #line 1029 "parser.yy" 6304 6358 { 6305 6359 typedefTable.addToEnclosingScope( TypedefTable::ID ); 6306 (yyval.decl) = (yyvsp[(1) - (2)].decl) ;6360 (yyval.decl) = (yyvsp[(1) - (2)].decl)->addInitializer( (yyvsp[(2) - (2)].in) ); 6307 6361 } 6308 6362 break; … … 6311 6365 6312 6366 /* Line 1806 of yacc.c */ 6313 #line 103 4"parser.yy"6367 #line 1036 "parser.yy" 6314 6368 { 6315 6369 typedefTable.addToEnclosingScope( TypedefTable::ID ); 6316 (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ) ;6370 (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addInitializer( (yyvsp[(3) - (3)].in) );; 6317 6371 } 6318 6372 break; … … 6321 6375 6322 6376 /* Line 1806 of yacc.c */ 6323 #line 10 39"parser.yy"6377 #line 1041 "parser.yy" 6324 6378 { 6325 6379 typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID ); 6326 (yyval.decl) = (yyvsp[(1) - (6)].decl)->appendList( (yyvsp[(1) - (6)].decl)->cloneType( (yyvsp[(5) - (6)].tok) ) );6380 (yyval.decl) = (yyvsp[(1) - (6)].decl)->appendList( (yyvsp[(1) - (6)].decl)->cloneType( (yyvsp[(5) - (6)].tok) )->addInitializer( (yyvsp[(6) - (6)].in) ) ); 6327 6381 } 6328 6382 break; … … 6331 6385 6332 6386 /* Line 1806 of yacc.c */ 6333 #line 10 49"parser.yy"6387 #line 1051 "parser.yy" 6334 6388 { 6335 6389 typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) ); … … 6341 6395 6342 6396 /* Line 1806 of yacc.c */ 6343 #line 105 4"parser.yy"6397 #line 1056 "parser.yy" 6344 6398 { 6345 6399 typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) ); … … 6351 6405 6352 6406 /* Line 1806 of yacc.c */ 6353 #line 10 59"parser.yy"6407 #line 1061 "parser.yy" 6354 6408 { 6355 6409 typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) ); … … 6361 6415 6362 6416 /* Line 1806 of yacc.c */ 6363 #line 106 7"parser.yy"6417 #line 1069 "parser.yy" 6364 6418 { 6365 6419 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6371 6425 6372 6426 /* Line 1806 of yacc.c */ 6373 #line 107 2"parser.yy"6427 #line 1074 "parser.yy" 6374 6428 { 6375 6429 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6381 6435 6382 6436 /* Line 1806 of yacc.c */ 6383 #line 107 7"parser.yy"6437 #line 1079 "parser.yy" 6384 6438 { 6385 6439 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6391 6445 6392 6446 /* Line 1806 of yacc.c */ 6393 #line 108 2"parser.yy"6447 #line 1084 "parser.yy" 6394 6448 { 6395 6449 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6401 6455 6402 6456 /* Line 1806 of yacc.c */ 6403 #line 108 7"parser.yy"6457 #line 1089 "parser.yy" 6404 6458 { 6405 6459 typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID ); … … 6411 6465 6412 6466 /* Line 1806 of yacc.c */ 6413 #line 109 5"parser.yy"6467 #line 1097 "parser.yy" 6414 6468 { 6415 6469 (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true ); … … 6420 6474 6421 6475 /* Line 1806 of yacc.c */ 6422 #line 11 18"parser.yy"6476 #line 1120 "parser.yy" 6423 6477 { 6424 6478 (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true ); … … 6429 6483 6430 6484 /* Line 1806 of yacc.c */ 6431 #line 112 2"parser.yy"6485 #line 1124 "parser.yy" 6432 6486 { 6433 6487 (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true ); … … 6438 6492 6439 6493 /* Line 1806 of yacc.c */ 6440 #line 11 29"parser.yy"6494 #line 1131 "parser.yy" 6441 6495 { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); } 6442 6496 break; … … 6445 6499 6446 6500 /* Line 1806 of yacc.c */ 6447 #line 113 3"parser.yy"6501 #line 1135 "parser.yy" 6448 6502 { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); } 6449 6503 break; … … 6452 6506 6453 6507 /* Line 1806 of yacc.c */ 6454 #line 11 38"parser.yy"6508 #line 1140 "parser.yy" 6455 6509 { 6456 6510 typedefTable.addToEnclosingScope( TypedefTable::TD ); … … 6462 6516 6463 6517 /* Line 1806 of yacc.c */ 6464 #line 114 3"parser.yy"6518 #line 1145 "parser.yy" 6465 6519 { 6466 6520 typedefTable.addToEnclosingScope( TypedefTable::TD ); … … 6472 6526 6473 6527 /* Line 1806 of yacc.c */ 6474 #line 11 48"parser.yy"6528 #line 1150 "parser.yy" 6475 6529 { 6476 6530 typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD ); … … 6482 6536 6483 6537 /* Line 1806 of yacc.c */ 6484 #line 11 59"parser.yy"6538 #line 1161 "parser.yy" 6485 6539 { 6486 6540 typedefTable.addToEnclosingScope( TypedefTable::TD ); … … 6492 6546 6493 6547 /* Line 1806 of yacc.c */ 6494 #line 116 4"parser.yy"6548 #line 1166 "parser.yy" 6495 6549 { 6496 6550 typedefTable.addToEnclosingScope( TypedefTable::TD ); … … 6502 6556 6503 6557 /* Line 1806 of yacc.c */ 6504 #line 11 69"parser.yy"6558 #line 1171 "parser.yy" 6505 6559 { 6506 6560 typedefTable.addToEnclosingScope( TypedefTable::TD ); … … 6512 6566 6513 6567 /* Line 1806 of yacc.c */ 6514 #line 117 4"parser.yy"6568 #line 1176 "parser.yy" 6515 6569 { 6516 6570 typedefTable.addToEnclosingScope( TypedefTable::TD ); … … 6522 6576 6523 6577 /* Line 1806 of yacc.c */ 6524 #line 11 79"parser.yy"6578 #line 1181 "parser.yy" 6525 6579 { 6526 6580 typedefTable.addToEnclosingScope( TypedefTable::TD ); … … 6532 6586 6533 6587 /* Line 1806 of yacc.c */ 6534 #line 11 88"parser.yy"6588 #line 1190 "parser.yy" 6535 6589 { 6536 6590 typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD ); … … 6542 6596 6543 6597 /* Line 1806 of yacc.c */ 6544 #line 119 3"parser.yy"6598 #line 1195 "parser.yy" 6545 6599 { 6546 6600 typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD ); … … 6552 6606 6553 6607 /* Line 1806 of yacc.c */ 6554 #line 121 0"parser.yy"6608 #line 1212 "parser.yy" 6555 6609 { 6556 6610 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6562 6616 6563 6617 /* Line 1806 of yacc.c */ 6564 #line 121 5"parser.yy"6618 #line 1217 "parser.yy" 6565 6619 { 6566 6620 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6572 6626 6573 6627 /* Line 1806 of yacc.c */ 6574 #line 123 7"parser.yy"6628 #line 1239 "parser.yy" 6575 6629 { (yyval.decl) = 0; } 6576 6630 break; … … 6579 6633 6580 6634 /* Line 1806 of yacc.c */ 6581 #line 12 49"parser.yy"6635 #line 1251 "parser.yy" 6582 6636 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6583 6637 break; … … 6586 6640 6587 6641 /* Line 1806 of yacc.c */ 6588 #line 126 0"parser.yy"6642 #line 1262 "parser.yy" 6589 6643 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); } 6590 6644 break; … … 6593 6647 6594 6648 /* Line 1806 of yacc.c */ 6595 #line 126 2"parser.yy"6649 #line 1264 "parser.yy" 6596 6650 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); } 6597 6651 break; … … 6600 6654 6601 6655 /* Line 1806 of yacc.c */ 6602 #line 126 4"parser.yy"6656 #line 1266 "parser.yy" 6603 6657 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); } 6604 6658 break; … … 6607 6661 6608 6662 /* Line 1806 of yacc.c */ 6609 #line 126 6"parser.yy"6663 #line 1268 "parser.yy" 6610 6664 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); } 6611 6665 break; … … 6614 6668 6615 6669 /* Line 1806 of yacc.c */ 6616 #line 12 68"parser.yy"6670 #line 1270 "parser.yy" 6617 6671 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); } 6618 6672 break; … … 6621 6675 6622 6676 /* Line 1806 of yacc.c */ 6623 #line 127 0"parser.yy"6677 #line 1272 "parser.yy" 6624 6678 { 6625 6679 typedefTable.enterScope(); … … 6630 6684 6631 6685 /* Line 1806 of yacc.c */ 6632 #line 127 4"parser.yy"6686 #line 1276 "parser.yy" 6633 6687 { 6634 6688 typedefTable.leaveScope(); … … 6640 6694 6641 6695 /* Line 1806 of yacc.c */ 6642 #line 128 3"parser.yy"6696 #line 1285 "parser.yy" 6643 6697 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6644 6698 break; … … 6647 6701 6648 6702 /* Line 1806 of yacc.c */ 6649 #line 128 5"parser.yy"6703 #line 1287 "parser.yy" 6650 6704 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); } 6651 6705 break; … … 6654 6708 6655 6709 /* Line 1806 of yacc.c */ 6656 #line 129 6"parser.yy"6710 #line 1298 "parser.yy" 6657 6711 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6658 6712 break; … … 6661 6715 6662 6716 /* Line 1806 of yacc.c */ 6663 #line 130 5"parser.yy"6717 #line 1307 "parser.yy" 6664 6718 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); } 6665 6719 break; … … 6668 6722 6669 6723 /* Line 1806 of yacc.c */ 6670 #line 130 7"parser.yy"6724 #line 1309 "parser.yy" 6671 6725 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); } 6672 6726 break; … … 6675 6729 6676 6730 /* Line 1806 of yacc.c */ 6677 #line 13 09"parser.yy"6731 #line 1311 "parser.yy" 6678 6732 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); } 6679 6733 break; … … 6682 6736 6683 6737 /* Line 1806 of yacc.c */ 6684 #line 131 1"parser.yy"6738 #line 1313 "parser.yy" 6685 6739 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); } 6686 6740 break; … … 6689 6743 6690 6744 /* Line 1806 of yacc.c */ 6691 #line 131 3"parser.yy"6745 #line 1315 "parser.yy" 6692 6746 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); } 6693 6747 break; … … 6696 6750 6697 6751 /* Line 1806 of yacc.c */ 6698 #line 131 5"parser.yy"6752 #line 1317 "parser.yy" 6699 6753 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); } 6700 6754 break; … … 6703 6757 6704 6758 /* Line 1806 of yacc.c */ 6705 #line 131 7"parser.yy"6759 #line 1319 "parser.yy" 6706 6760 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); } 6707 6761 break; … … 6710 6764 6711 6765 /* Line 1806 of yacc.c */ 6712 #line 13 19"parser.yy"6766 #line 1321 "parser.yy" 6713 6767 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); } 6714 6768 break; … … 6717 6771 6718 6772 /* Line 1806 of yacc.c */ 6719 #line 132 4"parser.yy"6773 #line 1326 "parser.yy" 6720 6774 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); } 6721 6775 break; … … 6724 6778 6725 6779 /* Line 1806 of yacc.c */ 6726 #line 132 6"parser.yy"6780 #line 1328 "parser.yy" 6727 6781 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); } 6728 6782 break; … … 6731 6785 6732 6786 /* Line 1806 of yacc.c */ 6733 #line 13 28"parser.yy"6787 #line 1330 "parser.yy" 6734 6788 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); } 6735 6789 break; … … 6738 6792 6739 6793 /* Line 1806 of yacc.c */ 6740 #line 133 0"parser.yy"6794 #line 1332 "parser.yy" 6741 6795 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); } 6742 6796 break; … … 6745 6799 6746 6800 /* Line 1806 of yacc.c */ 6747 #line 133 2"parser.yy"6801 #line 1334 "parser.yy" 6748 6802 { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); } 6749 6803 break; … … 6752 6806 6753 6807 /* Line 1806 of yacc.c */ 6754 #line 133 4"parser.yy"6808 #line 1336 "parser.yy" 6755 6809 { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); } 6756 6810 break; … … 6759 6813 6760 6814 /* Line 1806 of yacc.c */ 6761 #line 133 6"parser.yy"6815 #line 1338 "parser.yy" 6762 6816 { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); } 6763 6817 break; … … 6766 6820 6767 6821 /* Line 1806 of yacc.c */ 6768 #line 13 38"parser.yy"6822 #line 1340 "parser.yy" 6769 6823 { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); } 6770 6824 break; … … 6773 6827 6774 6828 /* Line 1806 of yacc.c */ 6775 #line 134 0"parser.yy"6829 #line 1342 "parser.yy" 6776 6830 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); } 6777 6831 break; … … 6780 6834 6781 6835 /* Line 1806 of yacc.c */ 6782 #line 134 2"parser.yy"6836 #line 1344 "parser.yy" 6783 6837 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); } 6784 6838 break; … … 6787 6841 6788 6842 /* Line 1806 of yacc.c */ 6789 #line 134 4"parser.yy"6843 #line 1346 "parser.yy" 6790 6844 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); } 6791 6845 break; … … 6794 6848 6795 6849 /* Line 1806 of yacc.c */ 6796 #line 134 6"parser.yy"6850 #line 1348 "parser.yy" 6797 6851 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); } 6798 6852 break; 6799 6853 6800 case 334: 6801 6802 /* Line 1806 of yacc.c */ 6803 #line 1353 "parser.yy" 6854 case 333: 6855 6856 /* Line 1806 of yacc.c */ 6857 #line 1350 "parser.yy" 6858 { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); } 6859 break; 6860 6861 case 335: 6862 6863 /* Line 1806 of yacc.c */ 6864 #line 1357 "parser.yy" 6804 6865 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 6805 6866 break; 6806 6867 6807 case 33 5:6808 6809 /* Line 1806 of yacc.c */ 6810 #line 135 5"parser.yy"6868 case 336: 6869 6870 /* Line 1806 of yacc.c */ 6871 #line 1359 "parser.yy" 6811 6872 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6812 6873 break; 6813 6874 6814 case 33 6:6815 6816 /* Line 1806 of yacc.c */ 6817 #line 13 57"parser.yy"6875 case 337: 6876 6877 /* Line 1806 of yacc.c */ 6878 #line 1361 "parser.yy" 6818 6879 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); } 6819 6880 break; 6820 6881 6821 case 33 7:6822 6823 /* Line 1806 of yacc.c */ 6824 #line 13 59"parser.yy"6882 case 338: 6883 6884 /* Line 1806 of yacc.c */ 6885 #line 1363 "parser.yy" 6825 6886 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); } 6826 6887 break; 6827 6888 6828 case 3 39:6829 6830 /* Line 1806 of yacc.c */ 6831 #line 136 5"parser.yy"6889 case 340: 6890 6891 /* Line 1806 of yacc.c */ 6892 #line 1369 "parser.yy" 6832 6893 { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); } 6833 6894 break; 6834 6895 6835 case 34 1:6836 6837 /* Line 1806 of yacc.c */ 6838 #line 137 2"parser.yy"6896 case 342: 6897 6898 /* Line 1806 of yacc.c */ 6899 #line 1376 "parser.yy" 6839 6900 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 6840 6901 break; 6841 6902 6842 case 34 2:6843 6844 /* Line 1806 of yacc.c */ 6845 #line 137 4"parser.yy"6903 case 343: 6904 6905 /* Line 1806 of yacc.c */ 6906 #line 1378 "parser.yy" 6846 6907 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6847 6908 break; 6848 6909 6849 case 34 3:6850 6851 /* Line 1806 of yacc.c */ 6852 #line 13 76"parser.yy"6910 case 344: 6911 6912 /* Line 1806 of yacc.c */ 6913 #line 1380 "parser.yy" 6853 6914 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); } 6854 6915 break; 6855 6916 6856 case 34 4:6857 6858 /* Line 1806 of yacc.c */ 6859 #line 138 1"parser.yy"6917 case 345: 6918 6919 /* Line 1806 of yacc.c */ 6920 #line 1385 "parser.yy" 6860 6921 { (yyval.decl) = (yyvsp[(3) - (4)].decl); } 6861 6922 break; 6862 6923 6863 case 34 5:6864 6865 /* Line 1806 of yacc.c */ 6866 #line 138 3"parser.yy"6924 case 346: 6925 6926 /* Line 1806 of yacc.c */ 6927 #line 1387 "parser.yy" 6867 6928 { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); } 6868 6929 break; 6869 6930 6870 case 34 6:6871 6872 /* Line 1806 of yacc.c */ 6873 #line 138 5"parser.yy"6931 case 347: 6932 6933 /* Line 1806 of yacc.c */ 6934 #line 1389 "parser.yy" 6874 6935 { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); } 6875 6936 break; 6876 6937 6877 case 34 7:6878 6879 /* Line 1806 of yacc.c */ 6880 #line 13 87"parser.yy"6938 case 348: 6939 6940 /* Line 1806 of yacc.c */ 6941 #line 1391 "parser.yy" 6881 6942 { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); } 6882 6943 break; 6883 6944 6884 case 3 49:6885 6886 /* Line 1806 of yacc.c */ 6887 #line 139 3"parser.yy"6945 case 350: 6946 6947 /* Line 1806 of yacc.c */ 6948 #line 1397 "parser.yy" 6888 6949 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 6889 6950 break; 6890 6951 6891 case 35 0:6892 6893 /* Line 1806 of yacc.c */ 6894 #line 139 5"parser.yy"6952 case 351: 6953 6954 /* Line 1806 of yacc.c */ 6955 #line 1399 "parser.yy" 6895 6956 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6896 6957 break; 6897 6958 6898 case 35 1:6899 6900 /* Line 1806 of yacc.c */ 6901 #line 1 397"parser.yy"6959 case 352: 6960 6961 /* Line 1806 of yacc.c */ 6962 #line 1401 "parser.yy" 6902 6963 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); } 6903 6964 break; 6904 6965 6905 case 35 3:6906 6907 /* Line 1806 of yacc.c */ 6908 #line 140 3"parser.yy"6966 case 354: 6967 6968 /* Line 1806 of yacc.c */ 6969 #line 1407 "parser.yy" 6909 6970 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 6910 6971 break; 6911 6972 6912 case 35 4:6913 6914 /* Line 1806 of yacc.c */ 6915 #line 140 5"parser.yy"6973 case 355: 6974 6975 /* Line 1806 of yacc.c */ 6976 #line 1409 "parser.yy" 6916 6977 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6917 6978 break; 6918 6979 6919 case 35 6:6920 6921 /* Line 1806 of yacc.c */ 6922 #line 141 1"parser.yy"6980 case 357: 6981 6982 /* Line 1806 of yacc.c */ 6983 #line 1415 "parser.yy" 6923 6984 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 6924 6985 break; 6925 6986 6926 case 35 7:6927 6928 /* Line 1806 of yacc.c */ 6929 #line 141 3"parser.yy"6987 case 358: 6988 6989 /* Line 1806 of yacc.c */ 6990 #line 1417 "parser.yy" 6930 6991 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6931 6992 break; 6932 6993 6933 case 35 8:6934 6935 /* Line 1806 of yacc.c */ 6936 #line 141 5"parser.yy"6994 case 359: 6995 6996 /* Line 1806 of yacc.c */ 6997 #line 1419 "parser.yy" 6937 6998 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); } 6938 6999 break; 6939 7000 6940 case 3 59:6941 6942 /* Line 1806 of yacc.c */ 6943 #line 142 0"parser.yy"7001 case 360: 7002 7003 /* Line 1806 of yacc.c */ 7004 #line 1424 "parser.yy" 6944 7005 { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); } 6945 7006 break; 6946 7007 6947 case 36 0:6948 6949 /* Line 1806 of yacc.c */ 6950 #line 142 2"parser.yy"7008 case 361: 7009 7010 /* Line 1806 of yacc.c */ 7011 #line 1426 "parser.yy" 6951 7012 { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 6952 7013 break; 6953 7014 6954 case 36 1:6955 6956 /* Line 1806 of yacc.c */ 6957 #line 142 4"parser.yy"7015 case 362: 7016 7017 /* Line 1806 of yacc.c */ 7018 #line 1428 "parser.yy" 6958 7019 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6959 7020 break; 6960 7021 6961 case 36 4:6962 6963 /* Line 1806 of yacc.c */ 6964 #line 143 4"parser.yy"7022 case 365: 7023 7024 /* Line 1806 of yacc.c */ 7025 #line 1438 "parser.yy" 6965 7026 { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl) ); } 6966 7027 break; 6967 7028 6968 case 36 5:6969 6970 /* Line 1806 of yacc.c */ 6971 #line 14 36"parser.yy"7029 case 366: 7030 7031 /* Line 1806 of yacc.c */ 7032 #line 1440 "parser.yy" 6972 7033 { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (2)].aggKey), (yyvsp[(2) - (2)].tok), 0, 0 ); } 6973 7034 break; 6974 7035 6975 case 36 6:6976 6977 /* Line 1806 of yacc.c */ 6978 #line 14 38"parser.yy"7036 case 367: 7037 7038 /* Line 1806 of yacc.c */ 7039 #line 1442 "parser.yy" 6979 7040 { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (5)].aggKey), (yyvsp[(2) - (5)].tok), 0, (yyvsp[(4) - (5)].decl) ); } 6980 7041 break; 6981 7042 6982 case 36 7:6983 6984 /* Line 1806 of yacc.c */ 6985 #line 144 0"parser.yy"7043 case 368: 7044 7045 /* Line 1806 of yacc.c */ 7046 #line 1444 "parser.yy" 6986 7047 { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl) ); } 6987 7048 break; 6988 7049 6989 case 36 8:6990 6991 /* Line 1806 of yacc.c */ 6992 #line 144 2"parser.yy"7050 case 369: 7051 7052 /* Line 1806 of yacc.c */ 7053 #line 1446 "parser.yy" 6993 7054 { (yyval.decl) = (yyvsp[(2) - (2)].decl); } 6994 7055 break; 6995 7056 6996 case 3 69:6997 6998 /* Line 1806 of yacc.c */ 6999 #line 14 47"parser.yy"7057 case 370: 7058 7059 /* Line 1806 of yacc.c */ 7060 #line 1451 "parser.yy" 7000 7061 { (yyval.aggKey) = DeclarationNode::Struct; } 7001 7062 break; 7002 7063 7003 case 37 0:7004 7005 /* Line 1806 of yacc.c */ 7006 #line 14 49"parser.yy"7064 case 371: 7065 7066 /* Line 1806 of yacc.c */ 7067 #line 1453 "parser.yy" 7007 7068 { (yyval.aggKey) = DeclarationNode::Union; } 7008 7069 break; 7009 7070 7010 case 37 1:7011 7012 /* Line 1806 of yacc.c */ 7013 #line 145 4"parser.yy"7071 case 372: 7072 7073 /* Line 1806 of yacc.c */ 7074 #line 1458 "parser.yy" 7014 7075 { (yyval.decl) = (yyvsp[(1) - (1)].decl); } 7015 7076 break; 7016 7077 7017 case 37 2:7018 7019 /* Line 1806 of yacc.c */ 7020 #line 14 56"parser.yy"7078 case 373: 7079 7080 /* Line 1806 of yacc.c */ 7081 #line 1460 "parser.yy" 7021 7082 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); } 7022 7083 break; 7023 7084 7024 case 37 4:7025 7026 /* Line 1806 of yacc.c */ 7027 #line 146 2"parser.yy"7085 case 375: 7086 7087 /* Line 1806 of yacc.c */ 7088 #line 1466 "parser.yy" 7028 7089 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 7029 7090 break; 7030 7091 7031 case 37 6:7032 7033 /* Line 1806 of yacc.c */ 7034 #line 146 5"parser.yy"7092 case 377: 7093 7094 /* Line 1806 of yacc.c */ 7095 #line 1469 "parser.yy" 7035 7096 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 7036 7097 break; 7037 7098 7038 case 37 8:7039 7040 /* Line 1806 of yacc.c */ 7041 #line 147 1"parser.yy"7099 case 379: 7100 7101 /* Line 1806 of yacc.c */ 7102 #line 1475 "parser.yy" 7042 7103 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); } 7043 7104 break; 7044 7105 7045 case 3 79:7046 7047 /* Line 1806 of yacc.c */ 7048 #line 147 3"parser.yy"7106 case 380: 7107 7108 /* Line 1806 of yacc.c */ 7109 #line 1477 "parser.yy" 7049 7110 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); } 7050 7111 break; 7051 7112 7052 case 38 0:7053 7054 /* Line 1806 of yacc.c */ 7055 #line 147 5"parser.yy"7113 case 381: 7114 7115 /* Line 1806 of yacc.c */ 7116 #line 1479 "parser.yy" 7056 7117 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); } 7057 7118 break; 7058 7119 7059 case 38 1:7060 7061 /* Line 1806 of yacc.c */ 7062 #line 148 0"parser.yy"7120 case 382: 7121 7122 /* Line 1806 of yacc.c */ 7123 #line 1484 "parser.yy" 7063 7124 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); } 7064 7125 break; 7065 7126 7066 case 38 2:7067 7068 /* Line 1806 of yacc.c */ 7069 #line 148 2"parser.yy"7127 case 383: 7128 7129 /* Line 1806 of yacc.c */ 7130 #line 1486 "parser.yy" 7070 7131 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); } 7071 7132 break; 7072 7133 7073 case 38 3:7074 7075 /* Line 1806 of yacc.c */ 7076 #line 14 87"parser.yy"7134 case 384: 7135 7136 /* Line 1806 of yacc.c */ 7137 #line 1491 "parser.yy" 7077 7138 { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ } 7078 7139 break; 7079 7140 7080 case 38 4:7081 7082 /* Line 1806 of yacc.c */ 7083 #line 14 89"parser.yy"7141 case 385: 7142 7143 /* Line 1806 of yacc.c */ 7144 #line 1493 "parser.yy" 7084 7145 { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); } 7085 7146 break; 7086 7147 7087 case 38 5:7088 7089 /* Line 1806 of yacc.c */ 7090 #line 149 2"parser.yy"7148 case 386: 7149 7150 /* Line 1806 of yacc.c */ 7151 #line 1496 "parser.yy" 7091 7152 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); } 7092 7153 break; 7093 7154 7094 case 38 6:7095 7096 /* Line 1806 of yacc.c */ 7097 #line 149 5"parser.yy"7155 case 387: 7156 7157 /* Line 1806 of yacc.c */ 7158 #line 1499 "parser.yy" 7098 7159 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); } 7099 7160 break; 7100 7161 7101 case 38 8:7102 7103 /* Line 1806 of yacc.c */ 7104 #line 150 1"parser.yy"7162 case 389: 7163 7164 /* Line 1806 of yacc.c */ 7165 #line 1505 "parser.yy" 7105 7166 { (yyval.en) = 0; } 7106 7167 break; 7107 7168 7108 case 3 89:7109 7110 /* Line 1806 of yacc.c */ 7111 #line 150 3"parser.yy"7169 case 390: 7170 7171 /* Line 1806 of yacc.c */ 7172 #line 1507 "parser.yy" 7112 7173 { (yyval.en) = (yyvsp[(1) - (1)].en); } 7113 7174 break; 7114 7175 7115 case 39 0:7116 7117 /* Line 1806 of yacc.c */ 7118 #line 15 08"parser.yy"7176 case 391: 7177 7178 /* Line 1806 of yacc.c */ 7179 #line 1512 "parser.yy" 7119 7180 { (yyval.en) = (yyvsp[(2) - (2)].en); } 7120 7181 break; 7121 7182 7122 case 39 2:7123 7124 /* Line 1806 of yacc.c */ 7125 #line 15 17"parser.yy"7183 case 393: 7184 7185 /* Line 1806 of yacc.c */ 7186 #line 1521 "parser.yy" 7126 7187 { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); } 7127 7188 break; 7128 7189 7129 case 39 3:7130 7131 /* Line 1806 of yacc.c */ 7132 #line 15 19"parser.yy"7190 case 394: 7191 7192 /* Line 1806 of yacc.c */ 7193 #line 1523 "parser.yy" 7133 7194 { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (6)].tok), (yyvsp[(4) - (6)].decl) ); } 7134 7195 break; 7135 7196 7136 case 39 4:7137 7138 /* Line 1806 of yacc.c */ 7139 #line 152 1"parser.yy"7197 case 395: 7198 7199 /* Line 1806 of yacc.c */ 7200 #line 1525 "parser.yy" 7140 7201 { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (2)].tok), 0 ); } 7141 7202 break; 7142 7203 7143 case 39 5:7144 7145 /* Line 1806 of yacc.c */ 7146 #line 15 26"parser.yy"7204 case 396: 7205 7206 /* Line 1806 of yacc.c */ 7207 #line 1530 "parser.yy" 7147 7208 { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); } 7148 7209 break; 7149 7210 7150 case 39 6:7151 7152 /* Line 1806 of yacc.c */ 7153 #line 15 28"parser.yy"7211 case 397: 7212 7213 /* Line 1806 of yacc.c */ 7214 #line 1532 "parser.yy" 7154 7215 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); } 7155 7216 break; 7156 7217 7157 case 39 7:7158 7159 /* Line 1806 of yacc.c */ 7160 #line 153 3"parser.yy"7218 case 398: 7219 7220 /* Line 1806 of yacc.c */ 7221 #line 1537 "parser.yy" 7161 7222 { (yyval.en) = 0; } 7162 7223 break; 7163 7224 7164 case 39 8:7165 7166 /* Line 1806 of yacc.c */ 7167 #line 153 5"parser.yy"7225 case 399: 7226 7227 /* Line 1806 of yacc.c */ 7228 #line 1539 "parser.yy" 7168 7229 { (yyval.en) = (yyvsp[(2) - (2)].en); } 7169 7230 break; 7170 7231 7171 case 399:7172 7173 /* Line 1806 of yacc.c */ 7174 #line 154 2"parser.yy"7232 case 400: 7233 7234 /* Line 1806 of yacc.c */ 7235 #line 1546 "parser.yy" 7175 7236 { (yyval.decl) = 0; } 7176 7237 break; 7177 7238 7178 case 40 3:7179 7180 /* Line 1806 of yacc.c */ 7181 #line 155 0"parser.yy"7239 case 404: 7240 7241 /* Line 1806 of yacc.c */ 7242 #line 1554 "parser.yy" 7182 7243 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7183 7244 break; 7184 7245 7185 case 40 4:7186 7187 /* Line 1806 of yacc.c */ 7188 #line 155 2"parser.yy"7246 case 405: 7247 7248 /* Line 1806 of yacc.c */ 7249 #line 1556 "parser.yy" 7189 7250 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); } 7190 7251 break; 7191 7252 7192 case 40 5:7193 7194 /* Line 1806 of yacc.c */ 7195 #line 155 4"parser.yy"7253 case 406: 7254 7255 /* Line 1806 of yacc.c */ 7256 #line 1558 "parser.yy" 7196 7257 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); } 7197 7258 break; 7198 7259 7199 case 40 7:7200 7201 /* Line 1806 of yacc.c */ 7202 #line 156 2"parser.yy"7260 case 408: 7261 7262 /* Line 1806 of yacc.c */ 7263 #line 1566 "parser.yy" 7203 7264 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7204 7265 break; 7205 7266 7206 case 40 8:7207 7208 /* Line 1806 of yacc.c */ 7209 #line 156 4"parser.yy"7267 case 409: 7268 7269 /* Line 1806 of yacc.c */ 7270 #line 1568 "parser.yy" 7210 7271 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7211 7272 break; 7212 7273 7213 case 4 09:7214 7215 /* Line 1806 of yacc.c */ 7216 #line 15 66"parser.yy"7274 case 410: 7275 7276 /* Line 1806 of yacc.c */ 7277 #line 1570 "parser.yy" 7217 7278 { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); } 7218 7279 break; 7219 7280 7220 case 41 1:7221 7222 /* Line 1806 of yacc.c */ 7223 #line 157 2"parser.yy"7281 case 412: 7282 7283 /* Line 1806 of yacc.c */ 7284 #line 1576 "parser.yy" 7224 7285 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7225 7286 break; 7226 7287 7227 case 41 2:7228 7229 /* Line 1806 of yacc.c */ 7230 #line 15 77"parser.yy"7288 case 413: 7289 7290 /* Line 1806 of yacc.c */ 7291 #line 1581 "parser.yy" 7231 7292 { (yyval.decl) = 0; } 7232 7293 break; 7233 7294 7234 case 41 5:7235 7236 /* Line 1806 of yacc.c */ 7237 #line 158 4"parser.yy"7295 case 416: 7296 7297 /* Line 1806 of yacc.c */ 7298 #line 1588 "parser.yy" 7238 7299 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); } 7239 7300 break; 7240 7301 7241 case 41 8:7242 7243 /* Line 1806 of yacc.c */ 7244 #line 159 1"parser.yy"7302 case 419: 7303 7304 /* Line 1806 of yacc.c */ 7305 #line 1595 "parser.yy" 7245 7306 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7246 7307 break; 7247 7308 7248 case 4 19:7249 7250 /* Line 1806 of yacc.c */ 7251 #line 159 3"parser.yy"7309 case 420: 7310 7311 /* Line 1806 of yacc.c */ 7312 #line 1597 "parser.yy" 7252 7313 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7253 7314 break; 7254 7315 7255 case 42 1:7256 7257 /* Line 1806 of yacc.c */ 7258 #line 160 2"parser.yy"7316 case 422: 7317 7318 /* Line 1806 of yacc.c */ 7319 #line 1606 "parser.yy" 7259 7320 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); } 7260 7321 break; 7261 7322 7262 case 42 2:7263 7264 /* Line 1806 of yacc.c */ 7265 #line 160 5"parser.yy"7323 case 423: 7324 7325 /* Line 1806 of yacc.c */ 7326 #line 1609 "parser.yy" 7266 7327 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); } 7267 7328 break; 7268 7329 7269 case 42 3:7270 7271 /* Line 1806 of yacc.c */ 7272 #line 16 07"parser.yy"7330 case 424: 7331 7332 /* Line 1806 of yacc.c */ 7333 #line 1611 "parser.yy" 7273 7334 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); } 7274 7335 break; 7275 7336 7276 case 42 8:7277 7278 /* Line 1806 of yacc.c */ 7279 #line 16 17"parser.yy"7337 case 429: 7338 7339 /* Line 1806 of yacc.c */ 7340 #line 1621 "parser.yy" 7280 7341 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 7281 7342 break; 7282 7343 7283 case 43 0:7284 7285 /* Line 1806 of yacc.c */ 7286 #line 162 3"parser.yy"7344 case 431: 7345 7346 /* Line 1806 of yacc.c */ 7347 #line 1627 "parser.yy" 7287 7348 { 7288 7349 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7291 7352 break; 7292 7353 7293 case 43 1:7294 7295 /* Line 1806 of yacc.c */ 7296 #line 16 28"parser.yy"7354 case 432: 7355 7356 /* Line 1806 of yacc.c */ 7357 #line 1632 "parser.yy" 7297 7358 { 7298 7359 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7301 7362 break; 7302 7363 7303 case 43 3:7304 7305 /* Line 1806 of yacc.c */ 7306 #line 16 37"parser.yy"7364 case 434: 7365 7366 /* Line 1806 of yacc.c */ 7367 #line 1641 "parser.yy" 7307 7368 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); } 7308 7369 break; 7309 7370 7310 case 43 4:7311 7312 /* Line 1806 of yacc.c */ 7313 #line 16 46"parser.yy"7371 case 435: 7372 7373 /* Line 1806 of yacc.c */ 7374 #line 1650 "parser.yy" 7314 7375 { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); } 7315 7376 break; 7316 7377 7317 case 43 5:7318 7319 /* Line 1806 of yacc.c */ 7320 #line 16 48"parser.yy"7378 case 436: 7379 7380 /* Line 1806 of yacc.c */ 7381 #line 1652 "parser.yy" 7321 7382 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); } 7322 7383 break; 7323 7384 7324 case 44 7:7325 7326 /* Line 1806 of yacc.c */ 7327 #line 167 3"parser.yy"7385 case 448: 7386 7387 /* Line 1806 of yacc.c */ 7388 #line 1677 "parser.yy" 7328 7389 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); } 7329 7390 break; 7330 7391 7331 case 45 1:7332 7333 /* Line 1806 of yacc.c */ 7334 #line 168 1"parser.yy"7392 case 452: 7393 7394 /* Line 1806 of yacc.c */ 7395 #line 1685 "parser.yy" 7335 7396 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); } 7336 7397 break; 7337 7398 7338 case 45 2:7339 7340 /* Line 1806 of yacc.c */ 7341 #line 16 86"parser.yy"7399 case 453: 7400 7401 /* Line 1806 of yacc.c */ 7402 #line 1690 "parser.yy" 7342 7403 { (yyval.in) = 0; } 7343 7404 break; 7344 7405 7345 case 45 3:7346 7347 /* Line 1806 of yacc.c */ 7348 #line 16 88"parser.yy"7406 case 454: 7407 7408 /* Line 1806 of yacc.c */ 7409 #line 1692 "parser.yy" 7349 7410 { (yyval.in) = (yyvsp[(2) - (2)].in); } 7350 7411 break; 7351 7412 7352 case 45 4:7353 7354 /* Line 1806 of yacc.c */ 7355 #line 16 84 "parser.yy"7413 case 455: 7414 7415 /* Line 1806 of yacc.c */ 7416 #line 1694 "parser.yy" 7356 7417 { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); } 7357 7418 break; 7358 7419 7359 case 45 5:7360 7361 /* Line 1806 of yacc.c */ 7362 #line 169 4"parser.yy"7420 case 456: 7421 7422 /* Line 1806 of yacc.c */ 7423 #line 1698 "parser.yy" 7363 7424 { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); } 7364 7425 break; 7365 7426 7366 case 45 6:7367 7368 /* Line 1806 of yacc.c */ 7369 #line 169 5"parser.yy"7427 case 457: 7428 7429 /* Line 1806 of yacc.c */ 7430 #line 1699 "parser.yy" 7370 7431 { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); } 7371 7432 break; 7372 7433 7373 case 45 7:7374 7375 /* Line 1806 of yacc.c */ 7376 #line 170 0"parser.yy"7434 case 458: 7435 7436 /* Line 1806 of yacc.c */ 7437 #line 1704 "parser.yy" 7377 7438 { (yyval.in) = 0; } 7378 7439 break; 7379 7440 7380 case 4 59:7381 7382 /* Line 1806 of yacc.c */ 7383 #line 170 2"parser.yy"7441 case 460: 7442 7443 /* Line 1806 of yacc.c */ 7444 #line 1706 "parser.yy" 7384 7445 { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); } 7385 7446 break; 7386 7447 7387 case 46 0:7388 7389 /* Line 1806 of yacc.c */ 7390 #line 170 3"parser.yy"7448 case 461: 7449 7450 /* Line 1806 of yacc.c */ 7451 #line 1707 "parser.yy" 7391 7452 { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); } 7392 7453 break; 7393 7454 7394 case 46 1:7395 7396 /* Line 1806 of yacc.c */ 7397 #line 170 5"parser.yy"7455 case 462: 7456 7457 /* Line 1806 of yacc.c */ 7458 #line 1709 "parser.yy" 7398 7459 { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); } 7399 7460 break; 7400 7461 7401 case 46 3:7402 7403 /* Line 1806 of yacc.c */ 7404 #line 172 1"parser.yy"7462 case 464: 7463 7464 /* Line 1806 of yacc.c */ 7465 #line 1725 "parser.yy" 7405 7466 { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); } 7406 7467 break; 7407 7468 7408 case 46 5:7409 7410 /* Line 1806 of yacc.c */ 7411 #line 17 27"parser.yy"7469 case 466: 7470 7471 /* Line 1806 of yacc.c */ 7472 #line 1731 "parser.yy" 7412 7473 { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); } 7413 7474 break; 7414 7475 7415 case 46 6:7416 7417 /* Line 1806 of yacc.c */ 7418 #line 173 5"parser.yy"7476 case 467: 7477 7478 /* Line 1806 of yacc.c */ 7479 #line 1739 "parser.yy" 7419 7480 { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); } 7420 7481 break; 7421 7482 7422 case 46 7:7423 7424 /* Line 1806 of yacc.c */ 7425 #line 17 37"parser.yy"7483 case 468: 7484 7485 /* Line 1806 of yacc.c */ 7486 #line 1741 "parser.yy" 7426 7487 { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); } 7427 7488 break; 7428 7489 7429 case 46 8:7430 7431 /* Line 1806 of yacc.c */ 7432 #line 174 0"parser.yy"7490 case 469: 7491 7492 /* Line 1806 of yacc.c */ 7493 #line 1744 "parser.yy" 7433 7494 { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); } 7434 7495 break; 7435 7496 7436 case 4 69:7437 7438 /* Line 1806 of yacc.c */ 7439 #line 174 2"parser.yy"7497 case 470: 7498 7499 /* Line 1806 of yacc.c */ 7500 #line 1746 "parser.yy" 7440 7501 { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); } 7441 7502 break; 7442 7503 7443 case 47 0:7444 7445 /* Line 1806 of yacc.c */ 7446 #line 174 4"parser.yy"7504 case 471: 7505 7506 /* Line 1806 of yacc.c */ 7507 #line 1748 "parser.yy" 7447 7508 { (yyval.en) = new DesignatorNode( new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ), true ); } 7448 7509 break; 7449 7510 7450 case 47 1:7451 7452 /* Line 1806 of yacc.c */ 7453 #line 17 46"parser.yy"7511 case 472: 7512 7513 /* Line 1806 of yacc.c */ 7514 #line 1750 "parser.yy" 7454 7515 { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); } 7455 7516 break; 7456 7517 7457 case 47 3:7458 7459 /* Line 1806 of yacc.c */ 7460 #line 177 0"parser.yy"7518 case 474: 7519 7520 /* Line 1806 of yacc.c */ 7521 #line 1774 "parser.yy" 7461 7522 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 7462 7523 break; 7463 7524 7464 case 47 4:7465 7466 /* Line 1806 of yacc.c */ 7467 #line 177 2"parser.yy"7525 case 475: 7526 7527 /* Line 1806 of yacc.c */ 7528 #line 1776 "parser.yy" 7468 7529 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 7469 7530 break; 7470 7531 7471 case 47 5:7472 7473 /* Line 1806 of yacc.c */ 7474 #line 177 4"parser.yy"7532 case 476: 7533 7534 /* Line 1806 of yacc.c */ 7535 #line 1778 "parser.yy" 7475 7536 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); } 7476 7537 break; 7477 7538 7478 case 47 7:7479 7480 /* Line 1806 of yacc.c */ 7481 #line 178 0"parser.yy"7539 case 478: 7540 7541 /* Line 1806 of yacc.c */ 7542 #line 1784 "parser.yy" 7482 7543 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 7483 7544 break; 7484 7545 7485 case 47 8:7486 7487 /* Line 1806 of yacc.c */ 7488 #line 178 2"parser.yy"7546 case 479: 7547 7548 /* Line 1806 of yacc.c */ 7549 #line 1786 "parser.yy" 7489 7550 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 7490 7551 break; 7491 7552 7492 case 4 79:7493 7494 /* Line 1806 of yacc.c */ 7495 #line 17 87"parser.yy"7553 case 480: 7554 7555 /* Line 1806 of yacc.c */ 7556 #line 1791 "parser.yy" 7496 7557 { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); } 7497 7558 break; 7498 7559 7499 case 48 1:7500 7501 /* Line 1806 of yacc.c */ 7502 #line 179 3"parser.yy"7560 case 482: 7561 7562 /* Line 1806 of yacc.c */ 7563 #line 1797 "parser.yy" 7503 7564 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); } 7504 7565 break; 7505 7566 7506 case 48 2:7507 7508 /* Line 1806 of yacc.c */ 7509 #line 1 798"parser.yy"7567 case 483: 7568 7569 /* Line 1806 of yacc.c */ 7570 #line 1802 "parser.yy" 7510 7571 { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); } 7511 7572 break; 7512 7573 7513 case 48 3:7514 7515 /* Line 1806 of yacc.c */ 7516 #line 180 0"parser.yy"7574 case 484: 7575 7576 /* Line 1806 of yacc.c */ 7577 #line 1804 "parser.yy" 7517 7578 { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); } 7518 7579 break; 7519 7580 7520 case 48 5:7521 7522 /* Line 1806 of yacc.c */ 7523 #line 18 06"parser.yy"7581 case 486: 7582 7583 /* Line 1806 of yacc.c */ 7584 #line 1810 "parser.yy" 7524 7585 { (yyval.tclass) = DeclarationNode::Type; } 7525 7586 break; 7526 7587 7527 case 48 6:7528 7529 /* Line 1806 of yacc.c */ 7530 #line 18 08"parser.yy"7588 case 487: 7589 7590 /* Line 1806 of yacc.c */ 7591 #line 1812 "parser.yy" 7531 7592 { (yyval.tclass) = DeclarationNode::Ftype; } 7532 7593 break; 7533 7594 7534 case 48 7:7535 7536 /* Line 1806 of yacc.c */ 7537 #line 181 0"parser.yy"7595 case 488: 7596 7597 /* Line 1806 of yacc.c */ 7598 #line 1814 "parser.yy" 7538 7599 { (yyval.tclass) = DeclarationNode::Dtype; } 7539 7600 break; 7540 7601 7541 case 48 8:7542 7543 /* Line 1806 of yacc.c */ 7544 #line 181 5"parser.yy"7602 case 489: 7603 7604 /* Line 1806 of yacc.c */ 7605 #line 1819 "parser.yy" 7545 7606 { (yyval.decl) = 0; } 7546 7607 break; 7547 7608 7548 case 4 89:7549 7550 /* Line 1806 of yacc.c */ 7551 #line 18 17"parser.yy"7609 case 490: 7610 7611 /* Line 1806 of yacc.c */ 7612 #line 1821 "parser.yy" 7552 7613 { (yyval.decl) = (yyvsp[(1) - (2)].decl) == 0 ? (yyvsp[(2) - (2)].decl) : (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); } 7553 7614 break; 7554 7615 7555 case 49 0:7556 7557 /* Line 1806 of yacc.c */ 7558 #line 182 2"parser.yy"7616 case 491: 7617 7618 /* Line 1806 of yacc.c */ 7619 #line 1826 "parser.yy" 7559 7620 { 7560 typedefTable.open Context( *(yyvsp[(2) - (5)].tok) );7561 (yyval.decl) = DeclarationNode::new ContextUse( (yyvsp[(2) - (5)].tok), (yyvsp[(4) - (5)].en) );7621 typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) ); 7622 (yyval.decl) = DeclarationNode::newTraitUse( (yyvsp[(2) - (5)].tok), (yyvsp[(4) - (5)].en) ); 7562 7623 } 7563 7624 break; 7564 7625 7565 case 49 1:7566 7567 /* Line 1806 of yacc.c */ 7568 #line 18 27"parser.yy"7626 case 492: 7627 7628 /* Line 1806 of yacc.c */ 7629 #line 1831 "parser.yy" 7569 7630 { (yyval.decl) = (yyvsp[(4) - (5)].decl); } 7570 7631 break; 7571 7632 7572 case 49 2:7573 7574 /* Line 1806 of yacc.c */ 7575 #line 18 29"parser.yy"7633 case 493: 7634 7635 /* Line 1806 of yacc.c */ 7636 #line 1833 "parser.yy" 7576 7637 { (yyval.decl) = 0; } 7577 7638 break; 7578 7639 7579 case 49 3:7580 7581 /* Line 1806 of yacc.c */ 7582 #line 183 4"parser.yy"7640 case 494: 7641 7642 /* Line 1806 of yacc.c */ 7643 #line 1838 "parser.yy" 7583 7644 { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); } 7584 7645 break; 7585 7646 7586 case 49 5:7587 7588 /* Line 1806 of yacc.c */ 7589 #line 18 37"parser.yy"7647 case 496: 7648 7649 /* Line 1806 of yacc.c */ 7650 #line 1841 "parser.yy" 7590 7651 { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); } 7591 7652 break; 7592 7653 7593 case 49 6:7594 7595 /* Line 1806 of yacc.c */ 7596 #line 18 39"parser.yy"7654 case 497: 7655 7656 /* Line 1806 of yacc.c */ 7657 #line 1843 "parser.yy" 7597 7658 { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); } 7598 7659 break; 7599 7660 7600 case 49 7:7601 7602 /* Line 1806 of yacc.c */ 7603 #line 184 4"parser.yy"7661 case 498: 7662 7663 /* Line 1806 of yacc.c */ 7664 #line 1848 "parser.yy" 7604 7665 { (yyval.decl) = (yyvsp[(2) - (2)].decl); } 7605 7666 break; 7606 7667 7607 case 49 8:7608 7609 /* Line 1806 of yacc.c */ 7610 #line 18 46"parser.yy"7668 case 499: 7669 7670 /* Line 1806 of yacc.c */ 7671 #line 1850 "parser.yy" 7611 7672 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); } 7612 7673 break; 7613 7674 7614 case 499:7615 7616 /* Line 1806 of yacc.c */ 7617 #line 18 48"parser.yy"7675 case 500: 7676 7677 /* Line 1806 of yacc.c */ 7678 #line 1852 "parser.yy" 7618 7679 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); } 7619 7680 break; 7620 7681 7621 case 50 0:7622 7623 /* Line 1806 of yacc.c */ 7624 #line 185 3"parser.yy"7682 case 501: 7683 7684 /* Line 1806 of yacc.c */ 7685 #line 1857 "parser.yy" 7625 7686 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); } 7626 7687 break; 7627 7688 7628 case 50 1:7629 7630 /* Line 1806 of yacc.c */ 7631 #line 185 5"parser.yy"7689 case 502: 7690 7691 /* Line 1806 of yacc.c */ 7692 #line 1859 "parser.yy" 7632 7693 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); } 7633 7694 break; 7634 7695 7635 case 50 2:7636 7637 /* Line 1806 of yacc.c */ 7638 #line 186 0"parser.yy"7696 case 503: 7697 7698 /* Line 1806 of yacc.c */ 7699 #line 1864 "parser.yy" 7639 7700 { 7640 7701 typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD ); … … 7643 7704 break; 7644 7705 7645 case 50 3:7646 7647 /* Line 1806 of yacc.c */ 7648 #line 186 5"parser.yy"7706 case 504: 7707 7708 /* Line 1806 of yacc.c */ 7709 #line 1869 "parser.yy" 7649 7710 { 7650 7711 typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG ); … … 7653 7714 break; 7654 7715 7655 case 50 4:7656 7657 /* Line 1806 of yacc.c */ 7658 #line 187 3"parser.yy"7716 case 505: 7717 7718 /* Line 1806 of yacc.c */ 7719 #line 1877 "parser.yy" 7659 7720 { 7660 7721 typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID ); 7661 (yyval.decl) = DeclarationNode::new Context( (yyvsp[(2) - (9)].tok), (yyvsp[(5) - (9)].decl), 0 );7722 (yyval.decl) = DeclarationNode::newTrait( (yyvsp[(2) - (9)].tok), (yyvsp[(5) - (9)].decl), 0 ); 7662 7723 } 7663 7724 break; 7664 7725 7665 case 50 5:7666 7667 /* Line 1806 of yacc.c */ 7668 #line 18 78"parser.yy"7726 case 506: 7727 7728 /* Line 1806 of yacc.c */ 7729 #line 1882 "parser.yy" 7669 7730 { 7670 typedefTable.enter Context( *(yyvsp[(2) - (8)].tok) );7731 typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) ); 7671 7732 typedefTable.enterScope(); 7672 7733 } 7673 7734 break; 7674 7735 7675 case 50 6:7676 7677 /* Line 1806 of yacc.c */ 7678 #line 188 3"parser.yy"7736 case 507: 7737 7738 /* Line 1806 of yacc.c */ 7739 #line 1887 "parser.yy" 7679 7740 { 7680 typedefTable.leave Context();7741 typedefTable.leaveTrait(); 7681 7742 typedefTable.addToEnclosingScope( *(yyvsp[(2) - (11)].tok), TypedefTable::ID ); 7682 (yyval.decl) = DeclarationNode::new Context( (yyvsp[(2) - (11)].tok), (yyvsp[(5) - (11)].decl), (yyvsp[(10) - (11)].decl) );7743 (yyval.decl) = DeclarationNode::newTrait( (yyvsp[(2) - (11)].tok), (yyvsp[(5) - (11)].decl), (yyvsp[(10) - (11)].decl) ); 7683 7744 } 7684 7745 break; 7685 7746 7686 case 50 8:7687 7688 /* Line 1806 of yacc.c */ 7689 #line 189 3"parser.yy"7747 case 509: 7748 7749 /* Line 1806 of yacc.c */ 7750 #line 1897 "parser.yy" 7690 7751 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); } 7691 7752 break; 7692 7753 7693 case 51 1:7694 7695 /* Line 1806 of yacc.c */ 7696 #line 190 3"parser.yy"7754 case 512: 7755 7756 /* Line 1806 of yacc.c */ 7757 #line 1907 "parser.yy" 7697 7758 { 7698 7759 typedefTable.addToEnclosingScope2( TypedefTable::ID ); … … 7701 7762 break; 7702 7763 7703 case 51 2:7704 7705 /* Line 1806 of yacc.c */ 7706 #line 19 08"parser.yy"7764 case 513: 7765 7766 /* Line 1806 of yacc.c */ 7767 #line 1912 "parser.yy" 7707 7768 { 7708 7769 typedefTable.addToEnclosingScope2( TypedefTable::ID ); … … 7711 7772 break; 7712 7773 7713 case 51 3:7714 7715 /* Line 1806 of yacc.c */ 7716 #line 191 3"parser.yy"7774 case 514: 7775 7776 /* Line 1806 of yacc.c */ 7777 #line 1917 "parser.yy" 7717 7778 { 7718 7779 typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID ); … … 7721 7782 break; 7722 7783 7723 case 51 4:7724 7725 /* Line 1806 of yacc.c */ 7726 #line 192 1"parser.yy"7784 case 515: 7785 7786 /* Line 1806 of yacc.c */ 7787 #line 1925 "parser.yy" 7727 7788 { 7728 7789 typedefTable.addToEnclosingScope2( TypedefTable::ID ); … … 7731 7792 break; 7732 7793 7733 case 51 5:7734 7735 /* Line 1806 of yacc.c */ 7736 #line 19 26"parser.yy"7794 case 516: 7795 7796 /* Line 1806 of yacc.c */ 7797 #line 1930 "parser.yy" 7737 7798 { 7738 7799 typedefTable.addToEnclosingScope2( TypedefTable::ID ); … … 7741 7802 break; 7742 7803 7743 case 51 6:7744 7745 /* Line 1806 of yacc.c */ 7746 #line 19 36"parser.yy"7804 case 517: 7805 7806 /* Line 1806 of yacc.c */ 7807 #line 1940 "parser.yy" 7747 7808 {} 7748 7809 break; 7749 7810 7750 case 51 7:7751 7752 /* Line 1806 of yacc.c */ 7753 #line 19 38"parser.yy"7811 case 518: 7812 7813 /* Line 1806 of yacc.c */ 7814 #line 1942 "parser.yy" 7754 7815 { 7755 7816 if ( theTree ) { … … 7761 7822 break; 7762 7823 7763 case 5 19:7764 7765 /* Line 1806 of yacc.c */ 7766 #line 195 0"parser.yy"7824 case 520: 7825 7826 /* Line 1806 of yacc.c */ 7827 #line 1954 "parser.yy" 7767 7828 { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); } 7768 7829 break; 7769 7830 7770 case 52 0:7771 7772 /* Line 1806 of yacc.c */ 7773 #line 195 5"parser.yy"7831 case 521: 7832 7833 /* Line 1806 of yacc.c */ 7834 #line 1959 "parser.yy" 7774 7835 { (yyval.decl) = 0; } 7775 7836 break; 7776 7837 7777 case 52 4:7778 7779 /* Line 1806 of yacc.c */ 7780 #line 196 3"parser.yy"7838 case 525: 7839 7840 /* Line 1806 of yacc.c */ 7841 #line 1967 "parser.yy" 7781 7842 {} 7782 7843 break; 7783 7844 7784 case 52 5:7785 7786 /* Line 1806 of yacc.c */ 7787 #line 196 5"parser.yy"7845 case 526: 7846 7847 /* Line 1806 of yacc.c */ 7848 #line 1969 "parser.yy" 7788 7849 { 7789 7850 linkageStack.push( linkage ); … … 7792 7853 break; 7793 7854 7794 case 52 6:7795 7796 /* Line 1806 of yacc.c */ 7797 #line 197 0"parser.yy"7855 case 527: 7856 7857 /* Line 1806 of yacc.c */ 7858 #line 1974 "parser.yy" 7798 7859 { 7799 7860 linkage = linkageStack.top(); … … 7803 7864 break; 7804 7865 7805 case 52 7:7806 7807 /* Line 1806 of yacc.c */ 7808 #line 19 76"parser.yy"7866 case 528: 7867 7868 /* Line 1806 of yacc.c */ 7869 #line 1980 "parser.yy" 7809 7870 { (yyval.decl) = (yyvsp[(2) - (2)].decl); } 7810 7871 break; 7811 7872 7812 case 5 29:7813 7814 /* Line 1806 of yacc.c */ 7815 #line 19 86"parser.yy"7873 case 530: 7874 7875 /* Line 1806 of yacc.c */ 7876 #line 1990 "parser.yy" 7816 7877 { 7817 7878 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7821 7882 break; 7822 7883 7823 case 53 0:7824 7825 /* Line 1806 of yacc.c */ 7826 #line 199 2"parser.yy"7884 case 531: 7885 7886 /* Line 1806 of yacc.c */ 7887 #line 1996 "parser.yy" 7827 7888 { 7828 7889 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7832 7893 break; 7833 7894 7834 case 53 1:7835 7836 /* Line 1806 of yacc.c */ 7837 #line 200 1"parser.yy"7895 case 532: 7896 7897 /* Line 1806 of yacc.c */ 7898 #line 2005 "parser.yy" 7838 7899 { 7839 7900 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7843 7904 break; 7844 7905 7845 case 53 2:7846 7847 /* Line 1806 of yacc.c */ 7848 #line 20 07"parser.yy"7906 case 533: 7907 7908 /* Line 1806 of yacc.c */ 7909 #line 2011 "parser.yy" 7849 7910 { 7850 7911 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7854 7915 break; 7855 7916 7856 case 53 3:7857 7858 /* Line 1806 of yacc.c */ 7859 #line 201 3"parser.yy"7917 case 534: 7918 7919 /* Line 1806 of yacc.c */ 7920 #line 2017 "parser.yy" 7860 7921 { 7861 7922 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7865 7926 break; 7866 7927 7867 case 53 4:7868 7869 /* Line 1806 of yacc.c */ 7870 #line 20 19"parser.yy"7928 case 535: 7929 7930 /* Line 1806 of yacc.c */ 7931 #line 2023 "parser.yy" 7871 7932 { 7872 7933 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7876 7937 break; 7877 7938 7878 case 53 5:7879 7880 /* Line 1806 of yacc.c */ 7881 #line 202 5"parser.yy"7939 case 536: 7940 7941 /* Line 1806 of yacc.c */ 7942 #line 2029 "parser.yy" 7882 7943 { 7883 7944 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7887 7948 break; 7888 7949 7889 case 53 6:7890 7891 /* Line 1806 of yacc.c */ 7892 #line 203 3"parser.yy"7950 case 537: 7951 7952 /* Line 1806 of yacc.c */ 7953 #line 2037 "parser.yy" 7893 7954 { 7894 7955 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7898 7959 break; 7899 7960 7900 case 53 7:7901 7902 /* Line 1806 of yacc.c */ 7903 #line 20 39"parser.yy"7961 case 538: 7962 7963 /* Line 1806 of yacc.c */ 7964 #line 2043 "parser.yy" 7904 7965 { 7905 7966 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7909 7970 break; 7910 7971 7911 case 53 8:7912 7913 /* Line 1806 of yacc.c */ 7914 #line 20 47"parser.yy"7972 case 539: 7973 7974 /* Line 1806 of yacc.c */ 7975 #line 2051 "parser.yy" 7915 7976 { 7916 7977 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7920 7981 break; 7921 7982 7922 case 5 39:7923 7924 /* Line 1806 of yacc.c */ 7925 #line 205 3"parser.yy"7983 case 540: 7984 7985 /* Line 1806 of yacc.c */ 7986 #line 2057 "parser.yy" 7926 7987 { 7927 7988 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7931 7992 break; 7932 7993 7933 case 54 3:7934 7935 /* Line 1806 of yacc.c */ 7936 #line 20 68"parser.yy"7994 case 544: 7995 7996 /* Line 1806 of yacc.c */ 7997 #line 2072 "parser.yy" 7937 7998 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 7938 7999 break; 7939 8000 7940 case 54 6:7941 7942 /* Line 1806 of yacc.c */ 7943 #line 20 78"parser.yy"8001 case 547: 8002 8003 /* Line 1806 of yacc.c */ 8004 #line 2082 "parser.yy" 7944 8005 { (yyval.decl) = 0; } 7945 8006 break; 7946 8007 7947 case 5 49:7948 7949 /* Line 1806 of yacc.c */ 7950 #line 208 5"parser.yy"8008 case 550: 8009 8010 /* Line 1806 of yacc.c */ 8011 #line 2089 "parser.yy" 7951 8012 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 7952 8013 break; 7953 8014 7954 case 55 0:7955 7956 /* Line 1806 of yacc.c */ 7957 #line 209 1"parser.yy"8015 case 551: 8016 8017 /* Line 1806 of yacc.c */ 8018 #line 2095 "parser.yy" 7958 8019 { (yyval.decl) = 0; } 7959 8020 break; 7960 8021 7961 case 55 6:7962 7963 /* Line 1806 of yacc.c */ 7964 #line 21 06"parser.yy"8022 case 557: 8023 8024 /* Line 1806 of yacc.c */ 8025 #line 2110 "parser.yy" 7965 8026 {} 7966 8027 break; 7967 8028 7968 case 55 7:7969 7970 /* Line 1806 of yacc.c */ 7971 #line 21 07"parser.yy"8029 case 558: 8030 8031 /* Line 1806 of yacc.c */ 8032 #line 2111 "parser.yy" 7972 8033 {} 7973 8034 break; 7974 8035 7975 case 55 8:7976 7977 /* Line 1806 of yacc.c */ 7978 #line 21 08"parser.yy"8036 case 559: 8037 8038 /* Line 1806 of yacc.c */ 8039 #line 2112 "parser.yy" 7979 8040 {} 7980 8041 break; 7981 8042 7982 case 5 59:7983 7984 /* Line 1806 of yacc.c */ 7985 #line 21 09"parser.yy"8043 case 560: 8044 8045 /* Line 1806 of yacc.c */ 8046 #line 2113 "parser.yy" 7986 8047 {} 7987 8048 break; 7988 8049 7989 case 56 0:7990 7991 /* Line 1806 of yacc.c */ 7992 #line 214 4"parser.yy"8050 case 561: 8051 8052 /* Line 1806 of yacc.c */ 8053 #line 2148 "parser.yy" 7993 8054 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 7994 8055 break; 7995 8056 7996 case 56 2:7997 7998 /* Line 1806 of yacc.c */ 7999 #line 21 47"parser.yy"8057 case 563: 8058 8059 /* Line 1806 of yacc.c */ 8060 #line 2151 "parser.yy" 8000 8061 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8001 8062 break; 8002 8063 8003 case 56 3:8004 8005 /* Line 1806 of yacc.c */ 8006 #line 21 49"parser.yy"8064 case 564: 8065 8066 /* Line 1806 of yacc.c */ 8067 #line 2153 "parser.yy" 8007 8068 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8008 8069 break; 8009 8070 8010 case 56 4:8011 8012 /* Line 1806 of yacc.c */ 8013 #line 215 4"parser.yy"8071 case 565: 8072 8073 /* Line 1806 of yacc.c */ 8074 #line 2158 "parser.yy" 8014 8075 { 8015 8076 typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) ); … … 8018 8079 break; 8019 8080 8020 case 56 5:8021 8022 /* Line 1806 of yacc.c */ 8023 #line 21 59"parser.yy"8081 case 566: 8082 8083 /* Line 1806 of yacc.c */ 8084 #line 2163 "parser.yy" 8024 8085 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8025 8086 break; 8026 8087 8027 case 56 6:8028 8029 /* Line 1806 of yacc.c */ 8030 #line 216 4"parser.yy"8088 case 567: 8089 8090 /* Line 1806 of yacc.c */ 8091 #line 2168 "parser.yy" 8031 8092 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8032 8093 break; 8033 8094 8034 case 56 7:8035 8036 /* Line 1806 of yacc.c */ 8037 #line 21 66"parser.yy"8095 case 568: 8096 8097 /* Line 1806 of yacc.c */ 8098 #line 2170 "parser.yy" 8038 8099 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8039 8100 break; 8040 8101 8041 case 56 8:8042 8043 /* Line 1806 of yacc.c */ 8044 #line 21 68"parser.yy"8102 case 569: 8103 8104 /* Line 1806 of yacc.c */ 8105 #line 2172 "parser.yy" 8045 8106 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8046 8107 break; 8047 8108 8048 case 5 69:8049 8050 /* Line 1806 of yacc.c */ 8051 #line 217 3"parser.yy"8109 case 570: 8110 8111 /* Line 1806 of yacc.c */ 8112 #line 2177 "parser.yy" 8052 8113 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8053 8114 break; 8054 8115 8055 case 57 0:8056 8057 /* Line 1806 of yacc.c */ 8058 #line 217 5"parser.yy"8116 case 571: 8117 8118 /* Line 1806 of yacc.c */ 8119 #line 2179 "parser.yy" 8059 8120 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8060 8121 break; 8061 8122 8062 case 57 1:8063 8064 /* Line 1806 of yacc.c */ 8065 #line 21 77"parser.yy"8123 case 572: 8124 8125 /* Line 1806 of yacc.c */ 8126 #line 2181 "parser.yy" 8066 8127 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8067 8128 break; 8068 8129 8069 case 57 2:8070 8071 /* Line 1806 of yacc.c */ 8072 #line 21 79"parser.yy"8130 case 573: 8131 8132 /* Line 1806 of yacc.c */ 8133 #line 2183 "parser.yy" 8073 8134 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8074 8135 break; 8075 8136 8076 case 57 3:8077 8078 /* Line 1806 of yacc.c */ 8079 #line 218 4"parser.yy"8137 case 574: 8138 8139 /* Line 1806 of yacc.c */ 8140 #line 2188 "parser.yy" 8080 8141 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8081 8142 break; 8082 8143 8083 case 57 4:8084 8085 /* Line 1806 of yacc.c */ 8086 #line 21 86"parser.yy"8144 case 575: 8145 8146 /* Line 1806 of yacc.c */ 8147 #line 2190 "parser.yy" 8087 8148 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8088 8149 break; 8089 8150 8090 case 57 5:8091 8092 /* Line 1806 of yacc.c */ 8093 #line 2 196"parser.yy"8151 case 576: 8152 8153 /* Line 1806 of yacc.c */ 8154 #line 2200 "parser.yy" 8094 8155 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8095 8156 break; 8096 8157 8097 case 57 7:8098 8099 /* Line 1806 of yacc.c */ 8100 #line 2 199"parser.yy"8158 case 578: 8159 8160 /* Line 1806 of yacc.c */ 8161 #line 2203 "parser.yy" 8101 8162 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8102 8163 break; 8103 8164 8104 case 57 8:8105 8106 /* Line 1806 of yacc.c */ 8107 #line 220 4"parser.yy"8165 case 579: 8166 8167 /* Line 1806 of yacc.c */ 8168 #line 2208 "parser.yy" 8108 8169 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); } 8109 8170 break; 8110 8171 8111 case 5 79:8112 8113 /* Line 1806 of yacc.c */ 8114 #line 22 06"parser.yy"8172 case 580: 8173 8174 /* Line 1806 of yacc.c */ 8175 #line 2210 "parser.yy" 8115 8176 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8116 8177 break; 8117 8178 8118 case 58 0:8119 8120 /* Line 1806 of yacc.c */ 8121 #line 22 08"parser.yy"8179 case 581: 8180 8181 /* Line 1806 of yacc.c */ 8182 #line 2212 "parser.yy" 8122 8183 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8123 8184 break; 8124 8185 8125 case 58 1:8126 8127 /* Line 1806 of yacc.c */ 8128 #line 221 3"parser.yy"8186 case 582: 8187 8188 /* Line 1806 of yacc.c */ 8189 #line 2217 "parser.yy" 8129 8190 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8130 8191 break; 8131 8192 8132 case 58 2:8133 8134 /* Line 1806 of yacc.c */ 8135 #line 221 5"parser.yy"8193 case 583: 8194 8195 /* Line 1806 of yacc.c */ 8196 #line 2219 "parser.yy" 8136 8197 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8137 8198 break; 8138 8199 8139 case 58 3:8140 8141 /* Line 1806 of yacc.c */ 8142 #line 22 17"parser.yy"8200 case 584: 8201 8202 /* Line 1806 of yacc.c */ 8203 #line 2221 "parser.yy" 8143 8204 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8144 8205 break; 8145 8206 8146 case 58 4:8147 8148 /* Line 1806 of yacc.c */ 8149 #line 222 2"parser.yy"8207 case 585: 8208 8209 /* Line 1806 of yacc.c */ 8210 #line 2226 "parser.yy" 8150 8211 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8151 8212 break; 8152 8213 8153 case 58 5:8154 8155 /* Line 1806 of yacc.c */ 8156 #line 222 4"parser.yy"8214 case 586: 8215 8216 /* Line 1806 of yacc.c */ 8217 #line 2228 "parser.yy" 8157 8218 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8158 8219 break; 8159 8220 8160 case 58 6:8161 8162 /* Line 1806 of yacc.c */ 8163 #line 22 26"parser.yy"8221 case 587: 8222 8223 /* Line 1806 of yacc.c */ 8224 #line 2230 "parser.yy" 8164 8225 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8165 8226 break; 8166 8227 8167 case 59 0:8168 8169 /* Line 1806 of yacc.c */ 8170 #line 224 1"parser.yy"8228 case 591: 8229 8230 /* Line 1806 of yacc.c */ 8231 #line 2245 "parser.yy" 8171 8232 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); } 8172 8233 break; 8173 8234 8174 case 59 1:8175 8176 /* Line 1806 of yacc.c */ 8177 #line 224 3"parser.yy"8235 case 592: 8236 8237 /* Line 1806 of yacc.c */ 8238 #line 2247 "parser.yy" 8178 8239 { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); } 8179 8240 break; 8180 8241 8181 case 59 2:8182 8183 /* Line 1806 of yacc.c */ 8184 #line 224 5"parser.yy"8242 case 593: 8243 8244 /* Line 1806 of yacc.c */ 8245 #line 2249 "parser.yy" 8185 8246 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8186 8247 break; 8187 8248 8188 case 59 3:8189 8190 /* Line 1806 of yacc.c */ 8191 #line 225 0"parser.yy"8249 case 594: 8250 8251 /* Line 1806 of yacc.c */ 8252 #line 2254 "parser.yy" 8192 8253 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8193 8254 break; 8194 8255 8195 case 59 4:8196 8197 /* Line 1806 of yacc.c */ 8198 #line 225 2"parser.yy"8256 case 595: 8257 8258 /* Line 1806 of yacc.c */ 8259 #line 2256 "parser.yy" 8199 8260 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8200 8261 break; 8201 8262 8202 case 59 5:8203 8204 /* Line 1806 of yacc.c */ 8205 #line 225 4"parser.yy"8263 case 596: 8264 8265 /* Line 1806 of yacc.c */ 8266 #line 2258 "parser.yy" 8206 8267 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8207 8268 break; 8208 8269 8209 case 59 6:8210 8211 /* Line 1806 of yacc.c */ 8212 #line 22 59"parser.yy"8270 case 597: 8271 8272 /* Line 1806 of yacc.c */ 8273 #line 2263 "parser.yy" 8213 8274 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8214 8275 break; 8215 8276 8216 case 59 7:8217 8218 /* Line 1806 of yacc.c */ 8219 #line 226 1"parser.yy"8277 case 598: 8278 8279 /* Line 1806 of yacc.c */ 8280 #line 2265 "parser.yy" 8220 8281 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8221 8282 break; 8222 8283 8223 case 59 8:8224 8225 /* Line 1806 of yacc.c */ 8226 #line 226 3"parser.yy"8284 case 599: 8285 8286 /* Line 1806 of yacc.c */ 8287 #line 2267 "parser.yy" 8227 8288 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8228 8289 break; 8229 8290 8230 case 599:8231 8232 /* Line 1806 of yacc.c */ 8233 #line 22 78"parser.yy"8291 case 600: 8292 8293 /* Line 1806 of yacc.c */ 8294 #line 2282 "parser.yy" 8234 8295 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8235 8296 break; 8236 8297 8237 case 60 1:8238 8239 /* Line 1806 of yacc.c */ 8240 #line 228 1"parser.yy"8298 case 602: 8299 8300 /* Line 1806 of yacc.c */ 8301 #line 2285 "parser.yy" 8241 8302 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8242 8303 break; 8243 8304 8244 case 60 2:8245 8246 /* Line 1806 of yacc.c */ 8247 #line 228 3"parser.yy"8305 case 603: 8306 8307 /* Line 1806 of yacc.c */ 8308 #line 2287 "parser.yy" 8248 8309 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8249 8310 break; 8250 8311 8251 case 60 4:8252 8253 /* Line 1806 of yacc.c */ 8254 #line 22 89"parser.yy"8312 case 605: 8313 8314 /* Line 1806 of yacc.c */ 8315 #line 2293 "parser.yy" 8255 8316 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8256 8317 break; 8257 8318 8258 case 60 5:8259 8260 /* Line 1806 of yacc.c */ 8261 #line 229 4"parser.yy"8319 case 606: 8320 8321 /* Line 1806 of yacc.c */ 8322 #line 2298 "parser.yy" 8262 8323 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8263 8324 break; 8264 8325 8265 case 60 6:8266 8267 /* Line 1806 of yacc.c */ 8268 #line 2 296"parser.yy"8326 case 607: 8327 8328 /* Line 1806 of yacc.c */ 8329 #line 2300 "parser.yy" 8269 8330 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8270 8331 break; 8271 8332 8272 case 60 7:8273 8274 /* Line 1806 of yacc.c */ 8275 #line 2 298"parser.yy"8333 case 608: 8334 8335 /* Line 1806 of yacc.c */ 8336 #line 2302 "parser.yy" 8276 8337 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8277 8338 break; 8278 8339 8279 case 60 8:8280 8281 /* Line 1806 of yacc.c */ 8282 #line 230 3"parser.yy"8340 case 609: 8341 8342 /* Line 1806 of yacc.c */ 8343 #line 2307 "parser.yy" 8283 8344 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8284 8345 break; 8285 8346 8286 case 6 09:8287 8288 /* Line 1806 of yacc.c */ 8289 #line 230 5"parser.yy"8347 case 610: 8348 8349 /* Line 1806 of yacc.c */ 8350 #line 2309 "parser.yy" 8290 8351 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8291 8352 break; 8292 8353 8293 case 61 0:8294 8295 /* Line 1806 of yacc.c */ 8296 #line 23 07"parser.yy"8354 case 611: 8355 8356 /* Line 1806 of yacc.c */ 8357 #line 2311 "parser.yy" 8297 8358 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8298 8359 break; 8299 8360 8300 case 61 1:8301 8302 /* Line 1806 of yacc.c */ 8303 #line 23 09"parser.yy"8361 case 612: 8362 8363 /* Line 1806 of yacc.c */ 8364 #line 2313 "parser.yy" 8304 8365 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8305 8366 break; 8306 8367 8307 case 61 2:8308 8309 /* Line 1806 of yacc.c */ 8310 #line 231 4"parser.yy"8368 case 613: 8369 8370 /* Line 1806 of yacc.c */ 8371 #line 2318 "parser.yy" 8311 8372 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); } 8312 8373 break; 8313 8374 8314 case 61 3:8315 8316 /* Line 1806 of yacc.c */ 8317 #line 23 16"parser.yy"8375 case 614: 8376 8377 /* Line 1806 of yacc.c */ 8378 #line 2320 "parser.yy" 8318 8379 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8319 8380 break; 8320 8381 8321 case 61 4:8322 8323 /* Line 1806 of yacc.c */ 8324 #line 23 18"parser.yy"8382 case 615: 8383 8384 /* Line 1806 of yacc.c */ 8385 #line 2322 "parser.yy" 8325 8386 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8326 8387 break; 8327 8388 8328 case 61 5:8329 8330 /* Line 1806 of yacc.c */ 8331 #line 23 28"parser.yy"8389 case 616: 8390 8391 /* Line 1806 of yacc.c */ 8392 #line 2332 "parser.yy" 8332 8393 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8333 8394 break; 8334 8395 8335 case 61 7:8336 8337 /* Line 1806 of yacc.c */ 8338 #line 233 1"parser.yy"8396 case 618: 8397 8398 /* Line 1806 of yacc.c */ 8399 #line 2335 "parser.yy" 8339 8400 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8340 8401 break; 8341 8402 8342 case 61 8:8343 8344 /* Line 1806 of yacc.c */ 8345 #line 233 3"parser.yy"8403 case 619: 8404 8405 /* Line 1806 of yacc.c */ 8406 #line 2337 "parser.yy" 8346 8407 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8347 8408 break; 8348 8409 8349 case 6 19:8350 8351 /* Line 1806 of yacc.c */ 8352 #line 23 38"parser.yy"8410 case 620: 8411 8412 /* Line 1806 of yacc.c */ 8413 #line 2342 "parser.yy" 8353 8414 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8354 8415 break; 8355 8416 8356 case 62 0:8357 8358 /* Line 1806 of yacc.c */ 8359 #line 234 0"parser.yy"8417 case 621: 8418 8419 /* Line 1806 of yacc.c */ 8420 #line 2344 "parser.yy" 8360 8421 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8361 8422 break; 8362 8423 8363 case 62 1:8364 8365 /* Line 1806 of yacc.c */ 8366 #line 234 2"parser.yy"8424 case 622: 8425 8426 /* Line 1806 of yacc.c */ 8427 #line 2346 "parser.yy" 8367 8428 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8368 8429 break; 8369 8430 8370 case 62 2:8371 8372 /* Line 1806 of yacc.c */ 8373 #line 23 47"parser.yy"8431 case 623: 8432 8433 /* Line 1806 of yacc.c */ 8434 #line 2351 "parser.yy" 8374 8435 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8375 8436 break; 8376 8437 8377 case 62 3:8378 8379 /* Line 1806 of yacc.c */ 8380 #line 23 49"parser.yy"8438 case 624: 8439 8440 /* Line 1806 of yacc.c */ 8441 #line 2353 "parser.yy" 8381 8442 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8382 8443 break; 8383 8444 8384 case 62 4:8385 8386 /* Line 1806 of yacc.c */ 8387 #line 235 1"parser.yy"8445 case 625: 8446 8447 /* Line 1806 of yacc.c */ 8448 #line 2355 "parser.yy" 8388 8449 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8389 8450 break; 8390 8451 8391 case 62 5:8392 8393 /* Line 1806 of yacc.c */ 8394 #line 235 3"parser.yy"8452 case 626: 8453 8454 /* Line 1806 of yacc.c */ 8455 #line 2357 "parser.yy" 8395 8456 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8396 8457 break; 8397 8458 8398 case 62 6:8399 8400 /* Line 1806 of yacc.c */ 8401 #line 23 58"parser.yy"8459 case 627: 8460 8461 /* Line 1806 of yacc.c */ 8462 #line 2362 "parser.yy" 8402 8463 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); } 8403 8464 break; 8404 8465 8405 case 62 7:8406 8407 /* Line 1806 of yacc.c */ 8408 #line 236 0"parser.yy"8466 case 628: 8467 8468 /* Line 1806 of yacc.c */ 8469 #line 2364 "parser.yy" 8409 8470 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8410 8471 break; 8411 8472 8412 case 62 8:8413 8414 /* Line 1806 of yacc.c */ 8415 #line 236 2"parser.yy"8473 case 629: 8474 8475 /* Line 1806 of yacc.c */ 8476 #line 2366 "parser.yy" 8416 8477 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8417 8478 break; 8418 8479 8419 case 6 29:8420 8421 /* Line 1806 of yacc.c */ 8422 #line 239 3"parser.yy"8480 case 630: 8481 8482 /* Line 1806 of yacc.c */ 8483 #line 2397 "parser.yy" 8423 8484 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8424 8485 break; 8425 8486 8426 case 63 1:8427 8428 /* Line 1806 of yacc.c */ 8429 #line 2 396"parser.yy"8487 case 632: 8488 8489 /* Line 1806 of yacc.c */ 8490 #line 2400 "parser.yy" 8430 8491 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8431 8492 break; 8432 8493 8433 case 63 2:8434 8435 /* Line 1806 of yacc.c */ 8436 #line 2 398"parser.yy"8494 case 633: 8495 8496 /* Line 1806 of yacc.c */ 8497 #line 2402 "parser.yy" 8437 8498 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8438 8499 break; 8439 8500 8440 case 63 3:8441 8442 /* Line 1806 of yacc.c */ 8443 #line 240 3"parser.yy"8501 case 634: 8502 8503 /* Line 1806 of yacc.c */ 8504 #line 2407 "parser.yy" 8444 8505 { 8445 8506 typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) ); … … 8448 8509 break; 8449 8510 8450 case 63 4:8451 8452 /* Line 1806 of yacc.c */ 8453 #line 24 08"parser.yy"8511 case 635: 8512 8513 /* Line 1806 of yacc.c */ 8514 #line 2412 "parser.yy" 8454 8515 { 8455 8516 typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) ); … … 8458 8519 break; 8459 8520 8460 case 63 5:8461 8462 /* Line 1806 of yacc.c */ 8463 #line 24 16"parser.yy"8521 case 636: 8522 8523 /* Line 1806 of yacc.c */ 8524 #line 2420 "parser.yy" 8464 8525 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8465 8526 break; 8466 8527 8467 case 63 6:8468 8469 /* Line 1806 of yacc.c */ 8470 #line 24 18"parser.yy"8528 case 637: 8529 8530 /* Line 1806 of yacc.c */ 8531 #line 2422 "parser.yy" 8471 8532 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8472 8533 break; 8473 8534 8474 case 63 7:8475 8476 /* Line 1806 of yacc.c */ 8477 #line 242 0"parser.yy"8535 case 638: 8536 8537 /* Line 1806 of yacc.c */ 8538 #line 2424 "parser.yy" 8478 8539 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8479 8540 break; 8480 8541 8481 case 63 8:8482 8483 /* Line 1806 of yacc.c */ 8484 #line 242 5"parser.yy"8542 case 639: 8543 8544 /* Line 1806 of yacc.c */ 8545 #line 2429 "parser.yy" 8485 8546 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8486 8547 break; 8487 8548 8488 case 6 39:8489 8490 /* Line 1806 of yacc.c */ 8491 #line 24 27"parser.yy"8549 case 640: 8550 8551 /* Line 1806 of yacc.c */ 8552 #line 2431 "parser.yy" 8492 8553 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8493 8554 break; 8494 8555 8495 case 64 0:8496 8497 /* Line 1806 of yacc.c */ 8498 #line 243 2"parser.yy"8556 case 641: 8557 8558 /* Line 1806 of yacc.c */ 8559 #line 2436 "parser.yy" 8499 8560 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); } 8500 8561 break; 8501 8562 8502 case 64 1:8503 8504 /* Line 1806 of yacc.c */ 8505 #line 243 4"parser.yy"8563 case 642: 8564 8565 /* Line 1806 of yacc.c */ 8566 #line 2438 "parser.yy" 8506 8567 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8507 8568 break; 8508 8569 8509 case 64 3:8510 8511 /* Line 1806 of yacc.c */ 8512 #line 24 49"parser.yy"8570 case 644: 8571 8572 /* Line 1806 of yacc.c */ 8573 #line 2453 "parser.yy" 8513 8574 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8514 8575 break; 8515 8576 8516 case 64 4:8517 8518 /* Line 1806 of yacc.c */ 8519 #line 245 1"parser.yy"8577 case 645: 8578 8579 /* Line 1806 of yacc.c */ 8580 #line 2455 "parser.yy" 8520 8581 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8521 8582 break; 8522 8583 8523 case 64 5:8524 8525 /* Line 1806 of yacc.c */ 8526 #line 24 56"parser.yy"8584 case 646: 8585 8586 /* Line 1806 of yacc.c */ 8587 #line 2460 "parser.yy" 8527 8588 { (yyval.decl) = DeclarationNode::newPointer( 0 ); } 8528 8589 break; 8529 8590 8530 case 64 6:8531 8532 /* Line 1806 of yacc.c */ 8533 #line 24 58"parser.yy"8591 case 647: 8592 8593 /* Line 1806 of yacc.c */ 8594 #line 2462 "parser.yy" 8534 8595 { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); } 8535 8596 break; 8536 8597 8537 case 64 7:8538 8539 /* Line 1806 of yacc.c */ 8540 #line 246 0"parser.yy"8598 case 648: 8599 8600 /* Line 1806 of yacc.c */ 8601 #line 2464 "parser.yy" 8541 8602 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8542 8603 break; 8543 8604 8544 case 64 8:8545 8546 /* Line 1806 of yacc.c */ 8547 #line 246 2"parser.yy"8605 case 649: 8606 8607 /* Line 1806 of yacc.c */ 8608 #line 2466 "parser.yy" 8548 8609 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8549 8610 break; 8550 8611 8551 case 6 49:8552 8553 /* Line 1806 of yacc.c */ 8554 #line 246 4"parser.yy"8612 case 650: 8613 8614 /* Line 1806 of yacc.c */ 8615 #line 2468 "parser.yy" 8555 8616 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8556 8617 break; 8557 8618 8558 case 65 1:8559 8560 /* Line 1806 of yacc.c */ 8561 #line 247 0"parser.yy"8619 case 652: 8620 8621 /* Line 1806 of yacc.c */ 8622 #line 2474 "parser.yy" 8562 8623 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8563 8624 break; 8564 8625 8565 case 65 2:8566 8567 /* Line 1806 of yacc.c */ 8568 #line 247 2"parser.yy"8626 case 653: 8627 8628 /* Line 1806 of yacc.c */ 8629 #line 2476 "parser.yy" 8569 8630 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8570 8631 break; 8571 8632 8572 case 65 3:8573 8574 /* Line 1806 of yacc.c */ 8575 #line 247 4"parser.yy"8633 case 654: 8634 8635 /* Line 1806 of yacc.c */ 8636 #line 2478 "parser.yy" 8576 8637 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8577 8638 break; 8578 8639 8579 case 65 4:8580 8581 /* Line 1806 of yacc.c */ 8582 #line 24 79"parser.yy"8640 case 655: 8641 8642 /* Line 1806 of yacc.c */ 8643 #line 2483 "parser.yy" 8583 8644 { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); } 8584 8645 break; 8585 8646 8586 case 65 5:8587 8588 /* Line 1806 of yacc.c */ 8589 #line 248 1"parser.yy"8647 case 656: 8648 8649 /* Line 1806 of yacc.c */ 8650 #line 2485 "parser.yy" 8590 8651 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8591 8652 break; 8592 8653 8593 case 65 6:8594 8595 /* Line 1806 of yacc.c */ 8596 #line 248 3"parser.yy"8654 case 657: 8655 8656 /* Line 1806 of yacc.c */ 8657 #line 2487 "parser.yy" 8597 8658 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8598 8659 break; 8599 8660 8600 case 65 7:8601 8602 /* Line 1806 of yacc.c */ 8603 #line 24 89"parser.yy"8661 case 658: 8662 8663 /* Line 1806 of yacc.c */ 8664 #line 2493 "parser.yy" 8604 8665 { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); } 8605 8666 break; 8606 8667 8607 case 65 8:8608 8609 /* Line 1806 of yacc.c */ 8610 #line 249 1"parser.yy"8668 case 659: 8669 8670 /* Line 1806 of yacc.c */ 8671 #line 2495 "parser.yy" 8611 8672 { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); } 8612 8673 break; 8613 8674 8614 case 66 0:8615 8616 /* Line 1806 of yacc.c */ 8617 #line 2 497"parser.yy"8675 case 661: 8676 8677 /* Line 1806 of yacc.c */ 8678 #line 2501 "parser.yy" 8618 8679 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); } 8619 8680 break; 8620 8681 8621 case 66 1:8622 8623 /* Line 1806 of yacc.c */ 8624 #line 2 499"parser.yy"8682 case 662: 8683 8684 /* Line 1806 of yacc.c */ 8685 #line 2503 "parser.yy" 8625 8686 { (yyval.decl) = DeclarationNode::newVarArray( 0 ); } 8626 8687 break; 8627 8688 8628 case 66 2:8629 8630 /* Line 1806 of yacc.c */ 8631 #line 250 1"parser.yy"8689 case 663: 8690 8691 /* Line 1806 of yacc.c */ 8692 #line 2505 "parser.yy" 8632 8693 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); } 8633 8694 break; 8634 8695 8635 case 66 3:8636 8637 /* Line 1806 of yacc.c */ 8638 #line 250 3"parser.yy"8696 case 664: 8697 8698 /* Line 1806 of yacc.c */ 8699 #line 2507 "parser.yy" 8639 8700 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); } 8640 8701 break; 8641 8702 8642 case 66 5:8643 8644 /* Line 1806 of yacc.c */ 8645 #line 25 18"parser.yy"8703 case 666: 8704 8705 /* Line 1806 of yacc.c */ 8706 #line 2522 "parser.yy" 8646 8707 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8647 8708 break; 8648 8709 8649 case 66 6:8650 8651 /* Line 1806 of yacc.c */ 8652 #line 252 0"parser.yy"8710 case 667: 8711 8712 /* Line 1806 of yacc.c */ 8713 #line 2524 "parser.yy" 8653 8714 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8654 8715 break; 8655 8716 8656 case 66 7:8657 8658 /* Line 1806 of yacc.c */ 8659 #line 252 5"parser.yy"8717 case 668: 8718 8719 /* Line 1806 of yacc.c */ 8720 #line 2529 "parser.yy" 8660 8721 { (yyval.decl) = DeclarationNode::newPointer( 0 ); } 8661 8722 break; 8662 8723 8663 case 66 8:8664 8665 /* Line 1806 of yacc.c */ 8666 #line 25 27"parser.yy"8724 case 669: 8725 8726 /* Line 1806 of yacc.c */ 8727 #line 2531 "parser.yy" 8667 8728 { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); } 8668 8729 break; 8669 8730 8670 case 6 69:8671 8672 /* Line 1806 of yacc.c */ 8673 #line 25 29"parser.yy"8731 case 670: 8732 8733 /* Line 1806 of yacc.c */ 8734 #line 2533 "parser.yy" 8674 8735 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8675 8736 break; 8676 8737 8677 case 67 0:8678 8679 /* Line 1806 of yacc.c */ 8680 #line 253 1"parser.yy"8738 case 671: 8739 8740 /* Line 1806 of yacc.c */ 8741 #line 2535 "parser.yy" 8681 8742 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8682 8743 break; 8683 8744 8684 case 67 1:8685 8686 /* Line 1806 of yacc.c */ 8687 #line 253 3"parser.yy"8745 case 672: 8746 8747 /* Line 1806 of yacc.c */ 8748 #line 2537 "parser.yy" 8688 8749 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8689 8750 break; 8690 8751 8691 case 67 3:8692 8693 /* Line 1806 of yacc.c */ 8694 #line 25 39"parser.yy"8752 case 674: 8753 8754 /* Line 1806 of yacc.c */ 8755 #line 2543 "parser.yy" 8695 8756 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8696 8757 break; 8697 8758 8698 case 67 4:8699 8700 /* Line 1806 of yacc.c */ 8701 #line 254 1"parser.yy"8759 case 675: 8760 8761 /* Line 1806 of yacc.c */ 8762 #line 2545 "parser.yy" 8702 8763 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8703 8764 break; 8704 8765 8705 case 67 5:8706 8707 /* Line 1806 of yacc.c */ 8708 #line 254 3"parser.yy"8766 case 676: 8767 8768 /* Line 1806 of yacc.c */ 8769 #line 2547 "parser.yy" 8709 8770 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8710 8771 break; 8711 8772 8712 case 67 6:8713 8714 /* Line 1806 of yacc.c */ 8715 #line 25 48"parser.yy"8773 case 677: 8774 8775 /* Line 1806 of yacc.c */ 8776 #line 2552 "parser.yy" 8716 8777 { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); } 8717 8778 break; 8718 8779 8719 case 67 7:8720 8721 /* Line 1806 of yacc.c */ 8722 #line 255 0"parser.yy"8780 case 678: 8781 8782 /* Line 1806 of yacc.c */ 8783 #line 2554 "parser.yy" 8723 8784 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8724 8785 break; 8725 8786 8726 case 67 8:8727 8728 /* Line 1806 of yacc.c */ 8729 #line 255 2"parser.yy"8787 case 679: 8788 8789 /* Line 1806 of yacc.c */ 8790 #line 2556 "parser.yy" 8730 8791 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8731 8792 break; 8732 8793 8733 case 68 0:8734 8735 /* Line 1806 of yacc.c */ 8736 #line 25 59"parser.yy"8794 case 681: 8795 8796 /* Line 1806 of yacc.c */ 8797 #line 2563 "parser.yy" 8737 8798 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8738 8799 break; 8739 8800 8740 case 68 2:8741 8742 /* Line 1806 of yacc.c */ 8743 #line 257 0"parser.yy"8801 case 683: 8802 8803 /* Line 1806 of yacc.c */ 8804 #line 2574 "parser.yy" 8744 8805 { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); } 8745 8806 break; 8746 8807 8747 case 68 3:8748 8749 /* Line 1806 of yacc.c */ 8750 #line 257 3"parser.yy"8808 case 684: 8809 8810 /* Line 1806 of yacc.c */ 8811 #line 2577 "parser.yy" 8751 8812 { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); } 8752 8813 break; 8753 8814 8754 case 68 4:8755 8756 /* Line 1806 of yacc.c */ 8757 #line 257 5"parser.yy"8815 case 685: 8816 8817 /* Line 1806 of yacc.c */ 8818 #line 2579 "parser.yy" 8758 8819 { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); } 8759 8820 break; 8760 8821 8761 case 68 5:8762 8763 /* Line 1806 of yacc.c */ 8764 #line 25 78"parser.yy"8822 case 686: 8823 8824 /* Line 1806 of yacc.c */ 8825 #line 2582 "parser.yy" 8765 8826 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); } 8766 8827 break; 8767 8828 8768 case 68 6:8769 8770 /* Line 1806 of yacc.c */ 8771 #line 258 0"parser.yy"8829 case 687: 8830 8831 /* Line 1806 of yacc.c */ 8832 #line 2584 "parser.yy" 8772 8833 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); } 8773 8834 break; 8774 8835 8775 case 68 7:8776 8777 /* Line 1806 of yacc.c */ 8778 #line 258 2"parser.yy"8836 case 688: 8837 8838 /* Line 1806 of yacc.c */ 8839 #line 2586 "parser.yy" 8779 8840 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); } 8780 8841 break; 8781 8842 8782 case 6 89:8783 8784 /* Line 1806 of yacc.c */ 8785 #line 2 596"parser.yy"8843 case 690: 8844 8845 /* Line 1806 of yacc.c */ 8846 #line 2600 "parser.yy" 8786 8847 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8787 8848 break; 8788 8849 8789 case 69 0:8790 8791 /* Line 1806 of yacc.c */ 8792 #line 2 598"parser.yy"8850 case 691: 8851 8852 /* Line 1806 of yacc.c */ 8853 #line 2602 "parser.yy" 8793 8854 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8794 8855 break; 8795 8856 8796 case 69 1:8797 8798 /* Line 1806 of yacc.c */ 8799 #line 260 3"parser.yy"8857 case 692: 8858 8859 /* Line 1806 of yacc.c */ 8860 #line 2607 "parser.yy" 8800 8861 { (yyval.decl) = DeclarationNode::newPointer( 0 ); } 8801 8862 break; 8802 8863 8803 case 69 2:8804 8805 /* Line 1806 of yacc.c */ 8806 #line 260 5"parser.yy"8864 case 693: 8865 8866 /* Line 1806 of yacc.c */ 8867 #line 2609 "parser.yy" 8807 8868 { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); } 8808 8869 break; 8809 8870 8810 case 69 3:8811 8812 /* Line 1806 of yacc.c */ 8813 #line 26 07"parser.yy"8871 case 694: 8872 8873 /* Line 1806 of yacc.c */ 8874 #line 2611 "parser.yy" 8814 8875 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8815 8876 break; 8816 8877 8817 case 69 4:8818 8819 /* Line 1806 of yacc.c */ 8820 #line 26 09"parser.yy"8878 case 695: 8879 8880 /* Line 1806 of yacc.c */ 8881 #line 2613 "parser.yy" 8821 8882 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8822 8883 break; 8823 8884 8824 case 69 5:8825 8826 /* Line 1806 of yacc.c */ 8827 #line 261 1"parser.yy"8885 case 696: 8886 8887 /* Line 1806 of yacc.c */ 8888 #line 2615 "parser.yy" 8828 8889 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8829 8890 break; 8830 8891 8831 case 69 7:8832 8833 /* Line 1806 of yacc.c */ 8834 #line 26 17"parser.yy"8892 case 698: 8893 8894 /* Line 1806 of yacc.c */ 8895 #line 2621 "parser.yy" 8835 8896 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8836 8897 break; 8837 8898 8838 case 69 8:8839 8840 /* Line 1806 of yacc.c */ 8841 #line 26 19"parser.yy"8899 case 699: 8900 8901 /* Line 1806 of yacc.c */ 8902 #line 2623 "parser.yy" 8842 8903 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8843 8904 break; 8844 8905 8845 case 699:8846 8847 /* Line 1806 of yacc.c */ 8848 #line 262 1"parser.yy"8906 case 700: 8907 8908 /* Line 1806 of yacc.c */ 8909 #line 2625 "parser.yy" 8849 8910 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8850 8911 break; 8851 8912 8852 case 70 0:8853 8854 /* Line 1806 of yacc.c */ 8855 #line 26 26"parser.yy"8913 case 701: 8914 8915 /* Line 1806 of yacc.c */ 8916 #line 2630 "parser.yy" 8856 8917 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8857 8918 break; 8858 8919 8859 case 70 1:8860 8861 /* Line 1806 of yacc.c */ 8862 #line 26 28"parser.yy"8920 case 702: 8921 8922 /* Line 1806 of yacc.c */ 8923 #line 2632 "parser.yy" 8863 8924 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8864 8925 break; 8865 8926 8866 case 70 4:8867 8868 /* Line 1806 of yacc.c */ 8869 #line 26 38"parser.yy"8927 case 705: 8928 8929 /* Line 1806 of yacc.c */ 8930 #line 2642 "parser.yy" 8870 8931 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 8871 8932 break; 8872 8933 8873 case 707:8874 8875 /* Line 1806 of yacc.c */8876 #line 2648 "parser.yy"8877 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }8878 break;8879 8880 8934 case 708: 8881 8882 /* Line 1806 of yacc.c */8883 #line 2650 "parser.yy"8884 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }8885 break;8886 8887 case 709:8888 8935 8889 8936 /* Line 1806 of yacc.c */ … … 8892 8939 break; 8893 8940 8894 case 7 10:8941 case 709: 8895 8942 8896 8943 /* Line 1806 of yacc.c */ … … 8899 8946 break; 8900 8947 8901 case 71 1:8948 case 710: 8902 8949 8903 8950 /* Line 1806 of yacc.c */ … … 8906 8953 break; 8907 8954 8908 case 71 2:8955 case 711: 8909 8956 8910 8957 /* Line 1806 of yacc.c */ … … 8913 8960 break; 8914 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 8915 8969 case 713: 8916 8970 8917 8971 /* Line 1806 of yacc.c */ 8918 #line 2665 "parser.yy" 8972 #line 2662 "parser.yy" 8973 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); } 8974 break; 8975 8976 case 714: 8977 8978 /* Line 1806 of yacc.c */ 8979 #line 2669 "parser.yy" 8919 8980 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 8920 8981 break; 8921 8982 8922 case 71 4:8923 8924 /* Line 1806 of yacc.c */ 8925 #line 26 67"parser.yy"8983 case 715: 8984 8985 /* Line 1806 of yacc.c */ 8986 #line 2671 "parser.yy" 8926 8987 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 8927 8988 break; 8928 8989 8929 case 71 5:8930 8931 /* Line 1806 of yacc.c */ 8932 #line 26 69"parser.yy"8990 case 716: 8991 8992 /* Line 1806 of yacc.c */ 8993 #line 2673 "parser.yy" 8933 8994 { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 8934 8995 break; 8935 8996 8936 case 71 6:8937 8938 /* Line 1806 of yacc.c */ 8939 #line 267 1"parser.yy"8997 case 717: 8998 8999 /* Line 1806 of yacc.c */ 9000 #line 2675 "parser.yy" 8940 9001 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); } 8941 9002 break; 8942 9003 8943 case 717:8944 8945 /* Line 1806 of yacc.c */8946 #line 2673 "parser.yy"8947 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }8948 break;8949 8950 9004 case 718: 8951 8952 /* Line 1806 of yacc.c */8953 #line 2675 "parser.yy"8954 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }8955 break;8956 8957 case 719:8958 9005 8959 9006 /* Line 1806 of yacc.c */ … … 8962 9009 break; 8963 9010 9011 case 719: 9012 9013 /* Line 1806 of yacc.c */ 9014 #line 2679 "parser.yy" 9015 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 9016 break; 9017 8964 9018 case 720: 8965 9019 8966 9020 /* Line 1806 of yacc.c */ 8967 #line 2679 "parser.yy" 9021 #line 2681 "parser.yy" 9022 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 9023 break; 9024 9025 case 721: 9026 9027 /* Line 1806 of yacc.c */ 9028 #line 2683 "parser.yy" 8968 9029 { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 8969 9030 break; 8970 9031 8971 case 72 1:8972 8973 /* Line 1806 of yacc.c */ 8974 #line 268 1"parser.yy"9032 case 722: 9033 9034 /* Line 1806 of yacc.c */ 9035 #line 2685 "parser.yy" 8975 9036 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); } 8976 9037 break; 8977 9038 8978 case 72 2:8979 8980 /* Line 1806 of yacc.c */ 8981 #line 268 3"parser.yy"9039 case 723: 9040 9041 /* Line 1806 of yacc.c */ 9042 #line 2687 "parser.yy" 8982 9043 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 8983 9044 break; 8984 9045 8985 case 72 3:8986 8987 /* Line 1806 of yacc.c */ 8988 #line 26 88"parser.yy"9046 case 724: 9047 9048 /* Line 1806 of yacc.c */ 9049 #line 2692 "parser.yy" 8989 9050 { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); } 8990 9051 break; 8991 9052 8992 case 72 4:8993 8994 /* Line 1806 of yacc.c */ 8995 #line 269 0"parser.yy"9053 case 725: 9054 9055 /* Line 1806 of yacc.c */ 9056 #line 2694 "parser.yy" 8996 9057 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); } 8997 9058 break; 8998 9059 8999 case 72 5:9000 9001 /* Line 1806 of yacc.c */ 9002 #line 269 5"parser.yy"9060 case 726: 9061 9062 /* Line 1806 of yacc.c */ 9063 #line 2699 "parser.yy" 9003 9064 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); } 9004 9065 break; 9005 9066 9006 case 72 6:9007 9008 /* Line 1806 of yacc.c */ 9009 #line 2 697"parser.yy"9067 case 727: 9068 9069 /* Line 1806 of yacc.c */ 9070 #line 2701 "parser.yy" 9010 9071 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); } 9011 9072 break; 9012 9073 9013 case 72 8:9014 9015 /* Line 1806 of yacc.c */ 9016 #line 272 4"parser.yy"9074 case 729: 9075 9076 /* Line 1806 of yacc.c */ 9077 #line 2728 "parser.yy" 9017 9078 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 9018 9079 break; 9019 9080 9020 case 732:9021 9022 /* Line 1806 of yacc.c */9023 #line 2735 "parser.yy"9024 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }9025 break;9026 9027 9081 case 733: 9028 9029 /* Line 1806 of yacc.c */9030 #line 2737 "parser.yy"9031 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }9032 break;9033 9034 case 734:9035 9082 9036 9083 /* Line 1806 of yacc.c */ … … 9039 9086 break; 9040 9087 9041 case 73 5:9088 case 734: 9042 9089 9043 9090 /* Line 1806 of yacc.c */ … … 9046 9093 break; 9047 9094 9048 case 73 6:9095 case 735: 9049 9096 9050 9097 /* Line 1806 of yacc.c */ … … 9053 9100 break; 9054 9101 9055 case 73 7:9102 case 736: 9056 9103 9057 9104 /* Line 1806 of yacc.c */ … … 9060 9107 break; 9061 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 9062 9116 case 738: 9063 9117 9064 9118 /* Line 1806 of yacc.c */ 9065 #line 2752 "parser.yy" 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" 9066 9127 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 9067 9128 break; 9068 9129 9069 case 7 39:9070 9071 /* Line 1806 of yacc.c */ 9072 #line 275 4"parser.yy"9130 case 740: 9131 9132 /* Line 1806 of yacc.c */ 9133 #line 2758 "parser.yy" 9073 9134 { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 9074 9135 break; 9075 9136 9076 case 74 0:9077 9078 /* Line 1806 of yacc.c */ 9079 #line 27 56"parser.yy"9137 case 741: 9138 9139 /* Line 1806 of yacc.c */ 9140 #line 2760 "parser.yy" 9080 9141 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 9081 9142 break; 9082 9143 9083 case 74 1:9084 9085 /* Line 1806 of yacc.c */ 9086 #line 27 58"parser.yy"9144 case 742: 9145 9146 /* Line 1806 of yacc.c */ 9147 #line 2762 "parser.yy" 9087 9148 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 9088 9149 break; 9089 9150 9090 case 74 2:9091 9092 /* Line 1806 of yacc.c */ 9093 #line 276 0"parser.yy"9151 case 743: 9152 9153 /* Line 1806 of yacc.c */ 9154 #line 2764 "parser.yy" 9094 9155 { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 9095 9156 break; 9096 9157 9097 case 74 3:9098 9099 /* Line 1806 of yacc.c */ 9100 #line 276 2"parser.yy"9158 case 744: 9159 9160 /* Line 1806 of yacc.c */ 9161 #line 2766 "parser.yy" 9101 9162 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 9102 9163 break; 9103 9164 9104 case 74 4:9105 9106 /* Line 1806 of yacc.c */ 9107 #line 27 67"parser.yy"9165 case 745: 9166 9167 /* Line 1806 of yacc.c */ 9168 #line 2771 "parser.yy" 9108 9169 { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); } 9109 9170 break; 9110 9171 9111 case 74 5:9112 9113 /* Line 1806 of yacc.c */ 9114 #line 277 2"parser.yy"9172 case 746: 9173 9174 /* Line 1806 of yacc.c */ 9175 #line 2776 "parser.yy" 9115 9176 { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); } 9116 9177 break; 9117 9178 9118 case 74 6:9119 9120 /* Line 1806 of yacc.c */ 9121 #line 277 4"parser.yy"9179 case 747: 9180 9181 /* Line 1806 of yacc.c */ 9182 #line 2778 "parser.yy" 9122 9183 { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); } 9123 9184 break; 9124 9185 9125 case 74 7:9126 9127 /* Line 1806 of yacc.c */ 9128 #line 27 76"parser.yy"9186 case 748: 9187 9188 /* Line 1806 of yacc.c */ 9189 #line 2780 "parser.yy" 9129 9190 { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); } 9130 9191 break; 9131 9192 9132 case 75 0:9133 9134 /* Line 1806 of yacc.c */ 9135 #line 280 0"parser.yy"9193 case 751: 9194 9195 /* Line 1806 of yacc.c */ 9196 #line 2804 "parser.yy" 9136 9197 { (yyval.en) = 0; } 9137 9198 break; 9138 9199 9139 case 75 1:9140 9141 /* Line 1806 of yacc.c */ 9142 #line 280 2"parser.yy"9200 case 752: 9201 9202 /* Line 1806 of yacc.c */ 9203 #line 2806 "parser.yy" 9143 9204 { (yyval.en) = (yyvsp[(2) - (2)].en); } 9144 9205 break; … … 9147 9208 9148 9209 /* Line 1806 of yacc.c */ 9149 #line 9 150"Parser/parser.cc"9210 #line 9211 "Parser/parser.cc" 9150 9211 default: break; 9151 9212 } … … 9378 9439 9379 9440 /* Line 2067 of yacc.c */ 9380 #line 280 5"parser.yy"9441 #line 2809 "parser.yy" 9381 9442 9382 9443 // ----end of grammar---- -
src/Parser/parser.h
r39786813 ra5a71d0 59 59 SIGNED = 277, 60 60 UNSIGNED = 278, 61 BOOL = 279, 62 COMPLEX = 280, 63 IMAGINARY = 281, 64 TYPEOF = 282, 65 LABEL = 283, 66 ENUM = 284, 67 STRUCT = 285, 68 UNION = 286, 69 TYPE = 287, 70 FTYPE = 288, 71 DTYPE = 289, 72 CONTEXT = 290, 73 SIZEOF = 291, 74 OFFSETOF = 292, 75 ATTRIBUTE = 293, 76 EXTENSION = 294, 77 IF = 295, 78 ELSE = 296, 79 SWITCH = 297, 80 CASE = 298, 81 DEFAULT = 299, 82 DO = 300, 83 WHILE = 301, 84 FOR = 302, 85 BREAK = 303, 86 CONTINUE = 304, 87 GOTO = 305, 88 RETURN = 306, 89 CHOOSE = 307, 90 DISABLE = 308, 91 ENABLE = 309, 92 FALLTHRU = 310, 93 TRY = 311, 94 CATCH = 312, 95 CATCHRESUME = 313, 96 FINALLY = 314, 97 THROW = 315, 98 THROWRESUME = 316, 99 AT = 317, 100 ASM = 318, 101 ALIGNAS = 319, 102 ALIGNOF = 320, 103 ATOMIC = 321, 104 GENERIC = 322, 105 NORETURN = 323, 106 STATICASSERT = 324, 107 THREADLOCAL = 325, 108 IDENTIFIER = 326, 109 QUOTED_IDENTIFIER = 327, 110 TYPEDEFname = 328, 111 TYPEGENname = 329, 112 ATTR_IDENTIFIER = 330, 113 ATTR_TYPEDEFname = 331, 114 ATTR_TYPEGENname = 332, 115 INTEGERconstant = 333, 116 FLOATINGconstant = 334, 117 CHARACTERconstant = 335, 118 STRINGliteral = 336, 119 ZERO = 337, 120 ONE = 338, 121 ARROW = 339, 122 ICR = 340, 123 DECR = 341, 124 LS = 342, 125 RS = 343, 126 LE = 344, 127 GE = 345, 128 EQ = 346, 129 NE = 347, 130 ANDAND = 348, 131 OROR = 349, 132 ELLIPSIS = 350, 133 MULTassign = 351, 134 DIVassign = 352, 135 MODassign = 353, 136 PLUSassign = 354, 137 MINUSassign = 355, 138 LSassign = 356, 139 RSassign = 357, 140 ANDassign = 358, 141 ERassign = 359, 142 ORassign = 360, 143 ATassign = 361, 144 THEN = 362 61 VALIST = 279, 62 BOOL = 280, 63 COMPLEX = 281, 64 IMAGINARY = 282, 65 TYPEOF = 283, 66 LABEL = 284, 67 ENUM = 285, 68 STRUCT = 286, 69 UNION = 287, 70 OTYPE = 288, 71 FTYPE = 289, 72 DTYPE = 290, 73 TRAIT = 291, 74 SIZEOF = 292, 75 OFFSETOF = 293, 76 ATTRIBUTE = 294, 77 EXTENSION = 295, 78 IF = 296, 79 ELSE = 297, 80 SWITCH = 298, 81 CASE = 299, 82 DEFAULT = 300, 83 DO = 301, 84 WHILE = 302, 85 FOR = 303, 86 BREAK = 304, 87 CONTINUE = 305, 88 GOTO = 306, 89 RETURN = 307, 90 CHOOSE = 308, 91 DISABLE = 309, 92 ENABLE = 310, 93 FALLTHRU = 311, 94 TRY = 312, 95 CATCH = 313, 96 CATCHRESUME = 314, 97 FINALLY = 315, 98 THROW = 316, 99 THROWRESUME = 317, 100 AT = 318, 101 ASM = 319, 102 ALIGNAS = 320, 103 ALIGNOF = 321, 104 ATOMIC = 322, 105 GENERIC = 323, 106 NORETURN = 324, 107 STATICASSERT = 325, 108 THREADLOCAL = 326, 109 IDENTIFIER = 327, 110 QUOTED_IDENTIFIER = 328, 111 TYPEDEFname = 329, 112 TYPEGENname = 330, 113 ATTR_IDENTIFIER = 331, 114 ATTR_TYPEDEFname = 332, 115 ATTR_TYPEGENname = 333, 116 INTEGERconstant = 334, 117 FLOATINGconstant = 335, 118 CHARACTERconstant = 336, 119 STRINGliteral = 337, 120 ZERO = 338, 121 ONE = 339, 122 ARROW = 340, 123 ICR = 341, 124 DECR = 342, 125 LS = 343, 126 RS = 344, 127 LE = 345, 128 GE = 346, 129 EQ = 347, 130 NE = 348, 131 ANDAND = 349, 132 OROR = 350, 133 ELLIPSIS = 351, 134 MULTassign = 352, 135 DIVassign = 353, 136 MODassign = 354, 137 PLUSassign = 355, 138 MINUSassign = 356, 139 LSassign = 357, 140 RSassign = 358, 141 ANDassign = 359, 142 ERassign = 360, 143 ORassign = 361, 144 ATassign = 362, 145 THEN = 363 145 146 }; 146 147 #endif … … 167 168 #define SIGNED 277 168 169 #define UNSIGNED 278 169 #define BOOL 279 170 #define COMPLEX 280 171 #define IMAGINARY 281 172 #define TYPEOF 282 173 #define LABEL 283 174 #define ENUM 284 175 #define STRUCT 285 176 #define UNION 286 177 #define TYPE 287 178 #define FTYPE 288 179 #define DTYPE 289 180 #define CONTEXT 290 181 #define SIZEOF 291 182 #define OFFSETOF 292 183 #define ATTRIBUTE 293 184 #define EXTENSION 294 185 #define IF 295 186 #define ELSE 296 187 #define SWITCH 297 188 #define CASE 298 189 #define DEFAULT 299 190 #define DO 300 191 #define WHILE 301 192 #define FOR 302 193 #define BREAK 303 194 #define CONTINUE 304 195 #define GOTO 305 196 #define RETURN 306 197 #define CHOOSE 307 198 #define DISABLE 308 199 #define ENABLE 309 200 #define FALLTHRU 310 201 #define TRY 311 202 #define CATCH 312 203 #define CATCHRESUME 313 204 #define FINALLY 314 205 #define THROW 315 206 #define THROWRESUME 316 207 #define AT 317 208 #define ASM 318 209 #define ALIGNAS 319 210 #define ALIGNOF 320 211 #define ATOMIC 321 212 #define GENERIC 322 213 #define NORETURN 323 214 #define STATICASSERT 324 215 #define THREADLOCAL 325 216 #define IDENTIFIER 326 217 #define QUOTED_IDENTIFIER 327 218 #define TYPEDEFname 328 219 #define TYPEGENname 329 220 #define ATTR_IDENTIFIER 330 221 #define ATTR_TYPEDEFname 331 222 #define ATTR_TYPEGENname 332 223 #define INTEGERconstant 333 224 #define FLOATINGconstant 334 225 #define CHARACTERconstant 335 226 #define STRINGliteral 336 227 #define ZERO 337 228 #define ONE 338 229 #define ARROW 339 230 #define ICR 340 231 #define DECR 341 232 #define LS 342 233 #define RS 343 234 #define LE 344 235 #define GE 345 236 #define EQ 346 237 #define NE 347 238 #define ANDAND 348 239 #define OROR 349 240 #define ELLIPSIS 350 241 #define MULTassign 351 242 #define DIVassign 352 243 #define MODassign 353 244 #define PLUSassign 354 245 #define MINUSassign 355 246 #define LSassign 356 247 #define RSassign 357 248 #define ANDassign 358 249 #define ERassign 359 250 #define ORassign 360 251 #define ATassign 361 252 #define THEN 362 170 #define VALIST 279 171 #define BOOL 280 172 #define COMPLEX 281 173 #define IMAGINARY 282 174 #define TYPEOF 283 175 #define LABEL 284 176 #define ENUM 285 177 #define STRUCT 286 178 #define UNION 287 179 #define OTYPE 288 180 #define FTYPE 289 181 #define DTYPE 290 182 #define TRAIT 291 183 #define SIZEOF 292 184 #define OFFSETOF 293 185 #define ATTRIBUTE 294 186 #define EXTENSION 295 187 #define IF 296 188 #define ELSE 297 189 #define SWITCH 298 190 #define CASE 299 191 #define DEFAULT 300 192 #define DO 301 193 #define WHILE 302 194 #define FOR 303 195 #define BREAK 304 196 #define CONTINUE 305 197 #define GOTO 306 198 #define RETURN 307 199 #define CHOOSE 308 200 #define DISABLE 309 201 #define ENABLE 310 202 #define FALLTHRU 311 203 #define TRY 312 204 #define CATCH 313 205 #define CATCHRESUME 314 206 #define FINALLY 315 207 #define THROW 316 208 #define THROWRESUME 317 209 #define AT 318 210 #define ASM 319 211 #define ALIGNAS 320 212 #define ALIGNOF 321 213 #define ATOMIC 322 214 #define GENERIC 323 215 #define NORETURN 324 216 #define STATICASSERT 325 217 #define THREADLOCAL 326 218 #define IDENTIFIER 327 219 #define QUOTED_IDENTIFIER 328 220 #define TYPEDEFname 329 221 #define TYPEGENname 330 222 #define ATTR_IDENTIFIER 331 223 #define ATTR_TYPEDEFname 332 224 #define ATTR_TYPEGENname 333 225 #define INTEGERconstant 334 226 #define FLOATINGconstant 335 227 #define CHARACTERconstant 336 228 #define STRINGliteral 337 229 #define ZERO 338 230 #define ONE 339 231 #define ARROW 340 232 #define ICR 341 233 #define DECR 342 234 #define LS 343 235 #define RS 344 236 #define LE 345 237 #define GE 346 238 #define EQ 347 239 #define NE 348 240 #define ANDAND 349 241 #define OROR 350 242 #define ELLIPSIS 351 243 #define MULTassign 352 244 #define DIVassign 353 245 #define MODassign 354 246 #define PLUSassign 355 247 #define MINUSassign 356 248 #define LSassign 357 249 #define RSassign 358 250 #define ANDassign 359 251 #define ERassign 360 252 #define ORassign 361 253 #define ATassign 362 254 #define THEN 363 253 255 254 256 … … 260 262 261 263 /* Line 2068 of yacc.c */ 262 #line 11 0"parser.yy"264 #line 112 "parser.yy" 263 265 264 266 Token tok; … … 277 279 278 280 /* Line 2068 of yacc.c */ 279 #line 28 0"Parser/parser.h"281 #line 282 "Parser/parser.h" 280 282 } YYSTYPE; 281 283 # define YYSTYPE_IS_TRIVIAL 1 -
src/Parser/parser.yy
r39786813 ra5a71d0 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Feb 1 18:22:42201613 // Update Count : 14 8312 // Last Modified On : Thu Mar 24 16:16:16 2016 13 // Update Count : 1498 14 14 // 15 15 … … 51 51 #include <cstdio> 52 52 #include <stack> 53 #include "lex.h" 54 #include "parser.h" 55 #include "ParseNode.h" 53 56 #include "TypedefTable.h" 54 #include "lex.h"55 #include "ParseNode.h"56 57 #include "TypeData.h" 57 58 #include "LinkageSpec.h" … … 74 75 %token FORALL LVALUE // CFA 75 76 %token VOID CHAR SHORT INT LONG FLOAT DOUBLE SIGNED UNSIGNED 77 %token VALIST // GCC 76 78 %token BOOL COMPLEX IMAGINARY // C99 77 79 %token TYPEOF LABEL // GCC 78 80 %token ENUM STRUCT UNION 79 %token TYPE FTYPE DTYPE CONTEXT// CFA81 %token OTYPE FTYPE DTYPE TRAIT // CFA 80 82 %token SIZEOF OFFSETOF 81 83 %token ATTRIBUTE EXTENSION // GCC … … 171 173 %type<decl> basic_declaration_specifier basic_type_name basic_type_specifier direct_type_name indirect_type_name 172 174 173 %type<decl> context_declaration context_declaration_list context_declaring_list context_specifier175 %type<decl> trait_declaration trait_declaration_list trait_declaring_list trait_specifier 174 176 175 177 %type<decl> declaration declaration_list declaration_list_opt declaration_qualifier_list … … 197 199 %type<decl> new_array_parameter_1st_dimension 198 200 199 %type<decl> new_ context_declaring_list new_declaration new_field_declaring_list201 %type<decl> new_trait_declaring_list new_declaration new_field_declaring_list 200 202 %type<decl> new_function_declaration new_function_return new_function_specifier 201 203 … … 448 450 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( $3 )); } 449 451 | OFFSETOF '(' type_name_no_function ',' no_attr_identifier ')' 450 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( $3 ), new VarRefNode( $5 )); }452 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( $3 ), new VarRefNode( $5 )); } 451 453 | ATTR_IDENTIFIER 452 454 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 )); } … … 1020 1022 | new_function_declaration pop ';' 1021 1023 | type_declaring_list pop ';' 1022 | context_specifier pop ';'1024 | trait_specifier pop ';' 1023 1025 ; 1024 1026 … … 1027 1029 { 1028 1030 typedefTable.addToEnclosingScope( TypedefTable::ID ); 1029 $$ = $1 ;1031 $$ = $1->addInitializer( $2 ); 1030 1032 } 1031 1033 | declaration_qualifier_list new_variable_specifier initializer_opt … … 1034 1036 { 1035 1037 typedefTable.addToEnclosingScope( TypedefTable::ID ); 1036 $$ = $2->addQualifiers( $1 ) ;1038 $$ = $2->addQualifiers( $1 )->addInitializer( $3 );; 1037 1039 } 1038 1040 | new_variable_declaration pop ',' push identifier_or_type_name initializer_opt 1039 1041 { 1040 1042 typedefTable.addToEnclosingScope( *$5, TypedefTable::ID ); 1041 $$ = $1->appendList( $1->cloneType( $5 ) );1043 $$ = $1->appendList( $1->cloneType( $5 )->addInitializer( $6 ) ); 1042 1044 } 1043 1045 ; … … 1345 1347 | IMAGINARY // C99 1346 1348 { $$ = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); } 1349 | VALIST // GCC, __builtin_va_list 1350 { $$ = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); } 1347 1351 ; 1348 1352 … … 1803 1807 1804 1808 type_class: // CFA 1805 TYPE1809 OTYPE 1806 1810 { $$ = DeclarationNode::Type; } 1807 1811 | DTYPE … … 1821 1825 '|' no_attr_identifier_or_type_name '(' type_name_list ')' 1822 1826 { 1823 typedefTable.open Context( *$2 );1824 $$ = DeclarationNode::new ContextUse( $2, $4 );1825 } 1826 | '|' '{' push context_declaration_list '}'1827 typedefTable.openTrait( *$2 ); 1828 $$ = DeclarationNode::newTraitUse( $2, $4 ); 1829 } 1830 | '|' '{' push trait_declaration_list '}' 1827 1831 { $$ = $4; } 1828 | '|' '(' push type_parameter_list pop ')' '{' push context_declaration_list '}' '(' type_name_list ')'1832 | '|' '(' push type_parameter_list pop ')' '{' push trait_declaration_list '}' '(' type_name_list ')' 1829 1833 { $$ = 0; } 1830 1834 ; … … 1841 1845 1842 1846 type_declaring_list: // CFA 1843 TYPE type_declarator1844 { $$ = $2; } 1845 | storage_class_list TYPE type_declarator1847 OTYPE type_declarator 1848 { $$ = $2; } 1849 | storage_class_list OTYPE type_declarator 1846 1850 { $$ = $3->addQualifiers( $1 ); } 1847 1851 | type_declaring_list ',' type_declarator … … 1869 1873 ; 1870 1874 1871 context_specifier: // CFA1872 CONTEXT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' '}'1875 trait_specifier: // CFA 1876 TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' '}' 1873 1877 { 1874 1878 typedefTable.addToEnclosingScope( *$2, TypedefTable::ID ); 1875 $$ = DeclarationNode::new Context( $2, $5, 0 );1876 } 1877 | CONTEXT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{'1878 { 1879 typedefTable.enter Context( *$2 );1879 $$ = DeclarationNode::newTrait( $2, $5, 0 ); 1880 } 1881 | TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' 1882 { 1883 typedefTable.enterTrait( *$2 ); 1880 1884 typedefTable.enterScope(); 1881 1885 } 1882 context_declaration_list '}'1883 { 1884 typedefTable.leave Context();1886 trait_declaration_list '}' 1887 { 1888 typedefTable.leaveTrait(); 1885 1889 typedefTable.addToEnclosingScope( *$2, TypedefTable::ID ); 1886 $$ = DeclarationNode::new Context( $2, $5, $10 );1887 } 1888 ; 1889 1890 context_declaration_list: // CFA1891 context_declaration1892 | context_declaration_list push context_declaration1890 $$ = DeclarationNode::newTrait( $2, $5, $10 ); 1891 } 1892 ; 1893 1894 trait_declaration_list: // CFA 1895 trait_declaration 1896 | trait_declaration_list push trait_declaration 1893 1897 { $$ = $1->appendList( $3 ); } 1894 1898 ; 1895 1899 1896 context_declaration: // CFA1897 new_ context_declaring_list pop ';'1898 | context_declaring_list pop ';'1899 ; 1900 1901 new_ context_declaring_list: // CFA1900 trait_declaration: // CFA 1901 new_trait_declaring_list pop ';' 1902 | trait_declaring_list pop ';' 1903 ; 1904 1905 new_trait_declaring_list: // CFA 1902 1906 new_variable_specifier 1903 1907 { … … 1910 1914 $$ = $1; 1911 1915 } 1912 | new_ context_declaring_list pop ',' push identifier_or_type_name1916 | new_trait_declaring_list pop ',' push identifier_or_type_name 1913 1917 { 1914 1918 typedefTable.addToEnclosingScope2( *$5, TypedefTable::ID ); … … 1917 1921 ; 1918 1922 1919 context_declaring_list: // CFA1923 trait_declaring_list: // CFA 1920 1924 type_specifier declarator 1921 1925 { … … 1923 1927 $$ = $2->addType( $1 ); 1924 1928 } 1925 | context_declaring_list pop ',' push declarator1929 | trait_declaring_list pop ',' push declarator 1926 1930 { 1927 1931 typedefTable.addToEnclosingScope2( TypedefTable::ID ); -
src/ResolvExpr/AdjustExprType.cc
r39786813 ra5a71d0 10 10 // Created On : Sat May 16 23:41:42 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat May 16 23:54:02 201513 // Update Count : 312 // Last Modified On : Wed Mar 2 17:34:53 2016 13 // Update Count : 4 14 14 // 15 15 … … 33 33 virtual Type* mutate( UnionInstType *aggregateUseType ); 34 34 virtual Type* mutate( EnumInstType *aggregateUseType ); 35 virtual Type* mutate( ContextInstType *aggregateUseType );35 virtual Type* mutate( TraitInstType *aggregateUseType ); 36 36 virtual Type* mutate( TypeInstType *aggregateUseType ); 37 37 virtual Type* mutate( TupleType *tupleType ); … … 87 87 } 88 88 89 Type *AdjustExprType::mutate( ContextInstType *aggregateUseType ) {89 Type *AdjustExprType::mutate( TraitInstType *aggregateUseType ) { 90 90 return aggregateUseType; 91 91 } -
src/ResolvExpr/CommonType.cc
r39786813 ra5a71d0 10 10 // Created On : Sun May 17 06:59:27 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun May 17 07:04:50 201513 // Update Count : 212 // Last Modified On : Wed Mar 2 17:35:34 2016 13 // Update Count : 3 14 14 // 15 15 … … 35 35 virtual void visit( UnionInstType *aggregateUseType ); 36 36 virtual void visit( EnumInstType *aggregateUseType ); 37 virtual void visit( ContextInstType *aggregateUseType );37 virtual void visit( TraitInstType *aggregateUseType ); 38 38 virtual void visit( TypeInstType *aggregateUseType ); 39 39 virtual void visit( TupleType *tupleType ); … … 186 186 } 187 187 188 void CommonType::visit( ContextInstType *aggregateUseType ) {188 void CommonType::visit( TraitInstType *aggregateUseType ) { 189 189 } 190 190 -
src/ResolvExpr/ConversionCost.cc
r39786813 ra5a71d0 10 10 // Created On : Sun May 17 07:06:19 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun May 17 07:22:19 201513 // Update Count : 412 // Last Modified On : Wed Mar 2 17:35:46 2016 13 // Update Count : 6 14 14 // 15 15 … … 206 206 } 207 207 208 void ConversionCost::visit( ContextInstType *inst) {208 void ConversionCost::visit(TraitInstType *inst) { 209 209 } 210 210 … … 249 249 250 250 void ConversionCost::visit(VarArgsType *varArgsType) { 251 if ( VarArgsType *destAsVarArgs =dynamic_cast< VarArgsType* >( dest ) ) {251 if ( dynamic_cast< VarArgsType* >( dest ) ) { 252 252 cost = Cost::zero; 253 253 } -
src/ResolvExpr/ConversionCost.h
r39786813 ra5a71d0 10 10 // Created On : Sun May 17 09:37:28 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun May 17 09:39:23 201513 // Update Count : 212 // Last Modified On : Wed Mar 2 17:35:56 2016 13 // Update Count : 3 14 14 // 15 15 … … 37 37 virtual void visit(UnionInstType *aggregateUseType); 38 38 virtual void visit(EnumInstType *aggregateUseType); 39 virtual void visit( ContextInstType *aggregateUseType);39 virtual void visit(TraitInstType *aggregateUseType); 40 40 virtual void visit(TypeInstType *aggregateUseType); 41 41 virtual void visit(TupleType *tupleType); -
src/ResolvExpr/PtrsAssignable.cc
r39786813 ra5a71d0 9 9 // Author : Richard C. Bilson 10 10 // Created On : Sun May 17 11:44:11 2015 11 // Last Modified By : Rob Schluntz12 // Last Modified On : Mon Sep 21 14:34:58 201513 // Update Count : 711 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 17:36:05 2016 13 // Update Count : 8 14 14 // 15 15 … … 35 35 virtual void visit( UnionInstType *inst ); 36 36 virtual void visit( EnumInstType *inst ); 37 virtual void visit( ContextInstType *inst );37 virtual void visit( TraitInstType *inst ); 38 38 virtual void visit( TypeInstType *inst ); 39 39 virtual void visit( TupleType *tupleType ); … … 101 101 } 102 102 103 void PtrsAssignable::visit( ContextInstType *inst ) {103 void PtrsAssignable::visit( TraitInstType *inst ) { 104 104 // I definitely don't think we should be doing anything here 105 105 } -
src/ResolvExpr/PtrsCastable.cc
r39786813 ra5a71d0 9 9 // Author : Richard C. Bilson 10 10 // Created On : Sun May 17 11:48:00 2015 11 // Last Modified By : Rob Schluntz12 // Last Modified On : Mon Oct 05 14:49:12 201513 // Update Count : 711 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 17:36:18 2016 13 // Update Count : 8 14 14 // 15 15 … … 36 36 virtual void visit(UnionInstType *inst); 37 37 virtual void visit(EnumInstType *inst); 38 virtual void visit( ContextInstType *inst);38 virtual void visit(TraitInstType *inst); 39 39 virtual void visit(TypeInstType *inst); 40 40 virtual void visit(TupleType *tupleType); … … 116 116 117 117 void PtrsCastable::visit(EnumInstType *inst) { 118 if ( dynamic_cast< EnumInstType* >( inst ) ) {118 if ( dynamic_cast< EnumInstType* >( dest ) ) { 119 119 result = 1; 120 } else if ( BasicType *bt = dynamic_cast< BasicType* >( inst ) ) {120 } else if ( BasicType *bt = dynamic_cast< BasicType* >( dest ) ) { 121 121 if ( bt->get_kind() == BasicType::SignedInt ) { 122 122 result = 0; … … 129 129 } 130 130 131 void PtrsCastable::visit( ContextInstType *inst) {131 void PtrsCastable::visit(TraitInstType *inst) { 132 132 // I definitely don't think we should be doing anything here 133 133 } -
src/ResolvExpr/RenameVars.cc
r39786813 ra5a71d0 10 10 // Created On : Sun May 17 12:05:18 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Jun 8 14:51:35 201513 // Update Count : 412 // Last Modified On : Wed Mar 2 17:36:32 2016 13 // Update Count : 5 14 14 // 15 15 … … 86 86 } 87 87 88 void RenameVars::visit( ContextInstType *aggregateUseType ) {88 void RenameVars::visit( TraitInstType *aggregateUseType ) { 89 89 typeBefore( aggregateUseType ); 90 90 acceptAll( aggregateUseType->get_parameters(), *this ); -
src/ResolvExpr/RenameVars.h
r39786813 ra5a71d0 10 10 // Created On : Sun May 17 12:10:28 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun May 17 12:11:53 201513 // Update Count : 212 // Last Modified On : Wed Mar 2 17:36:39 2016 13 // Update Count : 3 14 14 // 15 15 … … 40 40 virtual void visit( UnionInstType *aggregateUseType ); 41 41 virtual void visit( EnumInstType *aggregateUseType ); 42 virtual void visit( ContextInstType *aggregateUseType );42 virtual void visit( TraitInstType *aggregateUseType ); 43 43 virtual void visit( TypeInstType *aggregateUseType ); 44 44 virtual void visit( TupleType *tupleType ); -
src/ResolvExpr/Resolver.cc
r39786813 ra5a71d0 10 10 // Created On : Sun May 17 12:17:01 2015 11 11 // Last Modified By : Rob Schluntz 12 // Last Modified On : Wed Mar 30 15:47:19201612 // Last Modified On : Mon Apr 04 17:11:54 2016 13 13 // Update Count : 203 14 14 // … … 167 167 Type *new_type = resolveTypeof( objectDecl->get_type(), *this ); 168 168 objectDecl->set_type( new_type ); 169 // To handle initialization of routine pointers, e.g., int (*fp)(int) = foo(), means that class-variable 170 // initContext is changed multiple time because the LHS is analysed twice. The second analysis changes 171 // initContext because of a function type can contain object declarations in the return and parameter types. So 172 // each value of initContext is retained, so the type on the first analysis is preserved and used for selecting 173 // the RHS. 174 Type *temp = initContext; 169 175 initContext = new_type; 170 176 SymTab::Indexer::visit( objectDecl ); 177 initContext = temp; 171 178 } 172 179 -
src/ResolvExpr/Unify.cc
r39786813 ra5a71d0 9 9 // Author : Richard C. Bilson 10 10 // Created On : Sun May 17 12:27:10 2015 11 // Last Modified By : Rob Schluntz12 // Last Modified On : Wed Sep 02 14:43:22 201513 // Update Count : 3 611 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 17:37:05 2016 13 // Update Count : 37 14 14 // 15 15 … … 56 56 virtual void visit(UnionInstType *aggregateUseType); 57 57 virtual void visit(EnumInstType *aggregateUseType); 58 virtual void visit( ContextInstType *aggregateUseType);58 virtual void visit(TraitInstType *aggregateUseType); 59 59 virtual void visit(TypeInstType *aggregateUseType); 60 60 virtual void visit(TupleType *tupleType); … … 541 541 } 542 542 543 void Unify::visit( ContextInstType *contextInst) {543 void Unify::visit(TraitInstType *contextInst) { 544 544 handleRefType( contextInst, type2 ); 545 545 } -
src/SymTab/Autogen.cc
r39786813 ra5a71d0 10 10 // Created On : Thu Mar 03 15:45:56 2016 11 11 // Last Modified By : Rob Schluntz 12 // Last Modified On : Thu Mar 03 15:45:56201612 // Last Modified On : Mon Apr 04 17:19:28 2016 13 13 // Update Count : 1 14 14 // … … 34 34 virtual void visit( UnionDecl *structDecl ); 35 35 virtual void visit( TypeDecl *typeDecl ); 36 virtual void visit( ContextDecl *ctxDecl );36 virtual void visit( TraitDecl *ctxDecl ); 37 37 virtual void visit( FunctionDecl *functionDecl ); 38 38 … … 468 468 } 469 469 470 void AutogenerateRoutines::visit( ContextDecl *) {471 // ensure that we don't add assignment ops for types defined as part of the context470 void AutogenerateRoutines::visit( TraitDecl *) { 471 // ensure that we don't add assignment ops for types defined as part of the trait 472 472 } 473 473 -
src/SymTab/FixFunction.cc
r39786813 ra5a71d0 10 10 // Created On : Sun May 17 16:19:49 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun May 17 16:22:54 201513 // Update Count : 212 // Last Modified On : Wed Mar 2 17:31:10 2016 13 // Update Count : 3 14 14 // 15 15 … … 61 61 } 62 62 63 Type * FixFunction::mutate( ContextInstType *aggregateUseType) {63 Type * FixFunction::mutate(TraitInstType *aggregateUseType) { 64 64 return aggregateUseType; 65 65 } -
src/SymTab/FixFunction.h
r39786813 ra5a71d0 10 10 // Created On : Sun May 17 17:02:08 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun May 17 17:03:43 201513 // Update Count : 212 // Last Modified On : Wed Mar 2 17:34:06 2016 13 // Update Count : 3 14 14 // 15 15 … … 38 38 virtual Type* mutate(UnionInstType *aggregateUseType); 39 39 virtual Type* mutate(EnumInstType *aggregateUseType); 40 virtual Type* mutate( ContextInstType *aggregateUseType);40 virtual Type* mutate(TraitInstType *aggregateUseType); 41 41 virtual Type* mutate(TypeInstType *aggregateUseType); 42 42 virtual Type* mutate(TupleType *tupleType); -
src/SymTab/ImplementationType.cc
r39786813 ra5a71d0 10 10 // Created On : Sun May 17 21:32:01 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun May 17 21:34:40 201513 // Update Count : 212 // Last Modified On : Wed Mar 2 17:31:20 2016 13 // Update Count : 3 14 14 // 15 15 … … 37 37 virtual void visit(UnionInstType *aggregateUseType); 38 38 virtual void visit(EnumInstType *aggregateUseType); 39 virtual void visit( ContextInstType *aggregateUseType);39 virtual void visit(TraitInstType *aggregateUseType); 40 40 virtual void visit(TypeInstType *aggregateUseType); 41 41 virtual void visit(TupleType *tupleType); … … 96 96 } 97 97 98 void ImplementationType::visit( ContextInstType *aggregateUseType) {98 void ImplementationType::visit(TraitInstType *aggregateUseType) { 99 99 } 100 100 -
src/SymTab/Indexer.cc
r39786813 ra5a71d0 9 9 // Author : Richard C. Bilson 10 10 // Created On : Sun May 17 21:37:33 2015 11 // Last Modified By : Rob Schluntz 12 // Last Modified On : Wed Aug 05 13:52:42 2015 13 // Update Count : 10 14 // 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 17:31:29 2016 13 // Update Count : 11 14 // 15 16 #include "Indexer.h" 17 18 #include <string> 19 #include <typeinfo> 20 #include <unordered_map> 21 #include <unordered_set> 22 #include <utility> 23 24 #include "Mangler.h" 25 26 #include "Common/utility.h" 27 28 #include "ResolvExpr/typeops.h" 15 29 16 30 #include "SynTree/Declaration.h" … … 19 33 #include "SynTree/Initializer.h" 20 34 #include "SynTree/Statement.h" 21 #include "Indexer.h"22 #include <typeinfo>23 #include "Common/utility.h"24 35 25 36 #define debugPrint(x) if ( doDebug ) { std::cout << x; } … … 33 44 } 34 45 35 Indexer::Indexer( bool useDebug ) : doDebug( useDebug ) {} 36 37 Indexer::~Indexer() {} 46 typedef std::unordered_map< std::string, DeclarationWithType* > MangleTable; 47 typedef std::unordered_map< std::string, MangleTable > IdTable; 48 typedef std::unordered_map< std::string, NamedTypeDecl* > TypeTable; 49 typedef std::unordered_map< std::string, StructDecl* > StructTable; 50 typedef std::unordered_map< std::string, EnumDecl* > EnumTable; 51 typedef std::unordered_map< std::string, UnionDecl* > UnionTable; 52 typedef std::unordered_map< std::string, TraitDecl* > TraitTable; 53 54 void dump( const IdTable &table, std::ostream &os ) { 55 for ( IdTable::const_iterator id = table.begin(); id != table.end(); ++id ) { 56 for ( MangleTable::const_iterator mangle = id->second.begin(); mangle != id->second.end(); ++mangle ) { 57 os << mangle->second << std::endl; 58 } 59 } 60 } 61 62 template< typename Decl > 63 void dump( const std::unordered_map< std::string, Decl* > &table, std::ostream &os ) { 64 for ( typename std::unordered_map< std::string, Decl* >::const_iterator it = table.begin(); it != table.end(); ++it ) { 65 os << it->second << std::endl; 66 } // for 67 } 68 69 struct Indexer::Impl { 70 Impl( unsigned long _scope ) : refCount(1), scope( _scope ), size( 0 ), base(), 71 idTable(), typeTable(), structTable(), enumTable(), unionTable(), traitTable() {} 72 Impl( unsigned long _scope, Indexer &&_base ) : refCount(1), scope( _scope ), size( 0 ), base( _base ), 73 idTable(), typeTable(), structTable(), enumTable(), unionTable(), traitTable() {} 74 unsigned long refCount; ///< Number of references to these tables 75 unsigned long scope; ///< Scope these tables are associated with 76 unsigned long size; ///< Number of elements stored in this table 77 const Indexer base; ///< Base indexer this extends 78 79 IdTable idTable; ///< Identifier namespace 80 TypeTable typeTable; ///< Type namespace 81 StructTable structTable; ///< Struct namespace 82 EnumTable enumTable; ///< Enum namespace 83 UnionTable unionTable; ///< Union namespace 84 TraitTable traitTable; ///< Trait namespace 85 }; 86 87 Indexer::Impl *Indexer::newRef( Indexer::Impl *toClone ) { 88 if ( ! toClone ) return 0; 89 90 // shorten the search chain by skipping empty links 91 Indexer::Impl *ret = toClone->size == 0 ? toClone->base.tables : toClone; 92 if ( ret ) { ++ret->refCount; } 93 94 return ret; 95 } 96 97 void Indexer::deleteRef( Indexer::Impl *toFree ) { 98 if ( ! toFree ) return; 99 100 if ( --toFree->refCount == 0 ) delete toFree; 101 } 102 103 void Indexer::makeWritable() { 104 if ( ! tables ) { 105 // create indexer if not yet set 106 tables = new Indexer::Impl( scope ); 107 } else if ( tables->refCount > 1 || tables->scope != scope ) { 108 // make this indexer the base of a fresh indexer at the current scope 109 tables = new Indexer::Impl( scope, std::move( *this ) ); 110 } 111 } 112 113 Indexer::Indexer( bool _doDebug ) : tables( 0 ), scope( 0 ), doDebug( _doDebug ) {} 114 115 Indexer::Indexer( const Indexer &that ) : tables( newRef( that.tables ) ), scope( that.scope ), doDebug( that.doDebug ) {} 116 117 Indexer::Indexer( Indexer &&that ) : tables( that.tables ), scope( that.scope ), doDebug( that.doDebug ) { 118 that.tables = 0; 119 } 120 121 Indexer::~Indexer() { 122 deleteRef( tables ); 123 } 124 125 Indexer& Indexer::operator= ( const Indexer &that ) { 126 deleteRef( tables ); 127 128 tables = newRef( that.tables ); 129 scope = that.scope; 130 doDebug = that.doDebug; 131 132 return *this; 133 } 134 135 Indexer& Indexer::operator= ( Indexer &&that ) { 136 deleteRef( tables ); 137 138 tables = that.tables; 139 scope = that.scope; 140 doDebug = that.doDebug; 141 142 that.tables = 0; 143 144 return *this; 145 } 38 146 39 147 void Indexer::visit( ObjectDecl *objectDecl ) { … … 45 153 if ( objectDecl->get_name() != "" ) { 46 154 debugPrint( "Adding object " << objectDecl->get_name() << std::endl ); 47 idTable.addDecl( objectDecl );155 addId( objectDecl ); 48 156 } // if 49 157 } … … 52 160 if ( functionDecl->get_name() == "" ) return; 53 161 debugPrint( "Adding function " << functionDecl->get_name() << std::endl ); 54 idTable.addDecl( functionDecl );162 addId( functionDecl ); 55 163 enterScope(); 56 164 maybeAccept( functionDecl->get_functionType(), *this ); … … 90 198 leaveScope(); 91 199 debugPrint( "Adding type " << typeDecl->get_name() << std::endl ); 92 typeTable.add( typeDecl );200 addType( typeDecl ); 93 201 acceptAll( typeDecl->get_assertions(), *this ); 94 202 } … … 100 208 leaveScope(); 101 209 debugPrint( "Adding typedef " << typeDecl->get_name() << std::endl ); 102 typeTable.add( typeDecl );210 addType( typeDecl ); 103 211 } 104 212 … … 108 216 cloneAll( aggregateDecl->get_parameters(), fwdDecl.get_parameters() ); 109 217 debugPrint( "Adding fwd decl for struct " << fwdDecl.get_name() << std::endl ); 110 structTable.add( &fwdDecl );218 addStruct( &fwdDecl ); 111 219 112 220 enterScope(); … … 117 225 debugPrint( "Adding struct " << aggregateDecl->get_name() << std::endl ); 118 226 // this addition replaces the forward declaration 119 structTable.add( aggregateDecl );227 addStruct( aggregateDecl ); 120 228 } 121 229 … … 125 233 cloneAll( aggregateDecl->get_parameters(), fwdDecl.get_parameters() ); 126 234 debugPrint( "Adding fwd decl for union " << fwdDecl.get_name() << std::endl ); 127 unionTable.add( &fwdDecl );235 addUnion( &fwdDecl ); 128 236 129 237 enterScope(); … … 133 241 134 242 debugPrint( "Adding union " << aggregateDecl->get_name() << std::endl ); 135 unionTable.add( aggregateDecl );243 addUnion( aggregateDecl ); 136 244 } 137 245 138 246 void Indexer::visit( EnumDecl *aggregateDecl ) { 139 247 debugPrint( "Adding enum " << aggregateDecl->get_name() << std::endl ); 140 enumTable.add( aggregateDecl );248 addEnum( aggregateDecl ); 141 249 // unlike structs, contexts, and unions, enums inject their members into the global scope 142 250 acceptAll( aggregateDecl->get_members(), *this ); 143 251 } 144 252 145 void Indexer::visit( ContextDecl *aggregateDecl ) {253 void Indexer::visit( TraitDecl *aggregateDecl ) { 146 254 enterScope(); 147 255 acceptAll( aggregateDecl->get_parameters(), *this ); … … 150 258 151 259 debugPrint( "Adding context " << aggregateDecl->get_name() << std::endl ); 152 contextTable.add( aggregateDecl );260 addTrait( aggregateDecl ); 153 261 } 154 262 … … 293 401 294 402 295 void Indexer::visit( ContextInstType *contextInst ) {403 void Indexer::visit( TraitInstType *contextInst ) { 296 404 acceptAll( contextInst->get_parameters(), *this ); 297 405 acceptAll( contextInst->get_members(), *this ); … … 299 407 300 408 void Indexer::visit( StructInstType *structInst ) { 301 if ( ! structTable.lookup( structInst->get_name() ) ) {409 if ( ! lookupStruct( structInst->get_name() ) ) { 302 410 debugPrint( "Adding struct " << structInst->get_name() << " from implicit forward declaration" << std::endl ); 303 structTable.add( structInst->get_name() );411 addStruct( structInst->get_name() ); 304 412 } 305 413 enterScope(); … … 309 417 310 418 void Indexer::visit( UnionInstType *unionInst ) { 311 if ( ! unionTable.lookup( unionInst->get_name() ) ) {419 if ( ! lookupUnion( unionInst->get_name() ) ) { 312 420 debugPrint( "Adding union " << unionInst->get_name() << " from implicit forward declaration" << std::endl ); 313 unionTable.add( unionInst->get_name() );421 addUnion( unionInst->get_name() ); 314 422 } 315 423 enterScope(); … … 325 433 } 326 434 327 328 void Indexer::lookupId( const std::string &id, std::list< DeclarationWithType* > &list ) const { 329 idTable.lookupId( id, list ); 330 } 331 332 DeclarationWithType* Indexer::lookupId( const std::string &id) const { 333 return idTable.lookupId(id); 435 436 437 void Indexer::lookupId( const std::string &id, std::list< DeclarationWithType* > &out ) const { 438 std::unordered_set< std::string > foundMangleNames; 439 440 Indexer::Impl *searchTables = tables; 441 while ( searchTables ) { 442 443 IdTable::const_iterator decls = searchTables->idTable.find( id ); 444 if ( decls != searchTables->idTable.end() ) { 445 const MangleTable &mangleTable = decls->second; 446 for ( MangleTable::const_iterator decl = mangleTable.begin(); decl != mangleTable.end(); ++decl ) { 447 // mark the mangled name as found, skipping this insertion if a declaration for that name has already been found 448 if ( foundMangleNames.insert( decl->first ).second == false ) continue; 449 450 out.push_back( decl->second ); 451 } 452 } 453 454 // get declarations from base indexers 455 searchTables = searchTables->base.tables; 456 } 334 457 } 335 458 336 459 NamedTypeDecl *Indexer::lookupType( const std::string &id ) const { 337 return typeTable.lookup( id ); 460 if ( ! tables ) return 0; 461 462 TypeTable::const_iterator ret = tables->typeTable.find( id ); 463 return ret != tables->typeTable.end() ? ret->second : tables->base.lookupType( id ); 338 464 } 339 465 340 466 StructDecl *Indexer::lookupStruct( const std::string &id ) const { 341 return structTable.lookup( id ); 467 if ( ! tables ) return 0; 468 469 StructTable::const_iterator ret = tables->structTable.find( id ); 470 return ret != tables->structTable.end() ? ret->second : tables->base.lookupStruct( id ); 342 471 } 343 472 344 473 EnumDecl *Indexer::lookupEnum( const std::string &id ) const { 345 return enumTable.lookup( id ); 474 if ( ! tables ) return 0; 475 476 EnumTable::const_iterator ret = tables->enumTable.find( id ); 477 return ret != tables->enumTable.end() ? ret->second : tables->base.lookupEnum( id ); 346 478 } 347 479 348 480 UnionDecl *Indexer::lookupUnion( const std::string &id ) const { 349 return unionTable.lookup( id ); 350 } 351 352 ContextDecl * Indexer::lookupContext( const std::string &id ) const { 353 return contextTable.lookup( id ); 481 if ( ! tables ) return 0; 482 483 UnionTable::const_iterator ret = tables->unionTable.find( id ); 484 return ret != tables->unionTable.end() ? ret->second : tables->base.lookupUnion( id ); 485 } 486 487 TraitDecl *Indexer::lookupTrait( const std::string &id ) const { 488 if ( ! tables ) return 0; 489 490 TraitTable::const_iterator ret = tables->traitTable.find( id ); 491 return ret != tables->traitTable.end() ? ret->second : tables->base.lookupTrait( id ); 492 } 493 494 DeclarationWithType *Indexer::lookupIdAtScope( const std::string &id, const std::string &mangleName, unsigned long scope ) const { 495 if ( ! tables ) return 0; 496 if ( tables->scope < scope ) return 0; 497 498 IdTable::const_iterator decls = tables->idTable.find( id ); 499 if ( decls != tables->idTable.end() ) { 500 const MangleTable &mangleTable = decls->second; 501 MangleTable::const_iterator decl = mangleTable.find( mangleName ); 502 if ( decl != mangleTable.end() ) return decl->second; 503 } 504 505 return tables->base.lookupIdAtScope( id, mangleName, scope ); 506 } 507 508 bool Indexer::hasIncompatibleCDecl( const std::string &id, const std::string &mangleName ) const { 509 if ( ! tables ) return false; 510 511 IdTable::const_iterator decls = tables->idTable.find( id ); 512 if ( decls != tables->idTable.end() ) { 513 const MangleTable &mangleTable = decls->second; 514 for ( MangleTable::const_iterator decl = mangleTable.begin(); decl != mangleTable.end(); ++decl ) { 515 // check for C decls with the same name, skipping 516 // those with a compatible type (by mangleName) 517 if ( decl->second->get_linkage() == LinkageSpec::C && decl->first != mangleName ) return true; 518 } 519 } 520 521 return tables->base.hasIncompatibleCDecl( id, mangleName ); 522 } 523 524 NamedTypeDecl *Indexer::lookupTypeAtScope( const std::string &id, unsigned long scope ) const { 525 if ( ! tables ) return 0; 526 if ( tables->scope < scope ) return 0; 527 528 TypeTable::const_iterator ret = tables->typeTable.find( id ); 529 return ret != tables->typeTable.end() ? ret->second : tables->base.lookupTypeAtScope( id, scope ); 530 } 531 532 StructDecl *Indexer::lookupStructAtScope( const std::string &id, unsigned long scope ) const { 533 if ( ! tables ) return 0; 534 if ( tables->scope < scope ) return 0; 535 536 StructTable::const_iterator ret = tables->structTable.find( id ); 537 return ret != tables->structTable.end() ? ret->second : tables->base.lookupStructAtScope( id, scope ); 538 } 539 540 EnumDecl *Indexer::lookupEnumAtScope( const std::string &id, unsigned long scope ) const { 541 if ( ! tables ) return 0; 542 if ( tables->scope < scope ) return 0; 543 544 EnumTable::const_iterator ret = tables->enumTable.find( id ); 545 return ret != tables->enumTable.end() ? ret->second : tables->base.lookupEnumAtScope( id, scope ); 546 } 547 548 UnionDecl *Indexer::lookupUnionAtScope( const std::string &id, unsigned long scope ) const { 549 if ( ! tables ) return 0; 550 if ( tables->scope < scope ) return 0; 551 552 UnionTable::const_iterator ret = tables->unionTable.find( id ); 553 return ret != tables->unionTable.end() ? ret->second : tables->base.lookupUnionAtScope( id, scope ); 554 } 555 556 TraitDecl *Indexer::lookupTraitAtScope( const std::string &id, unsigned long scope ) const { 557 if ( ! tables ) return 0; 558 if ( tables->scope < scope ) return 0; 559 560 TraitTable::const_iterator ret = tables->traitTable.find( id ); 561 return ret != tables->traitTable.end() ? ret->second : tables->base.lookupTraitAtScope( id, scope ); 562 } 563 564 bool addedIdConflicts( DeclarationWithType *existing, DeclarationWithType *added ) { 565 // if we're giving the same name mangling to things of different types then there is something wrong 566 assert( (dynamic_cast<ObjectDecl*>( added ) && dynamic_cast<ObjectDecl*>( existing ) ) 567 || (dynamic_cast<FunctionDecl*>( added ) && dynamic_cast<FunctionDecl*>( existing ) ) ); 568 569 if ( LinkageSpec::isOverridable( existing->get_linkage() ) ) { 570 // new definition shadows the autogenerated one, even at the same scope 571 return false; 572 } else if ( added->get_linkage() != LinkageSpec::C || ResolvExpr::typesCompatible( added->get_type(), existing->get_type(), Indexer() ) ) { 573 // typesCompatible doesn't really do the right thing here. When checking compatibility of function types, 574 // we should ignore outermost pointer qualifiers, except _Atomic? 575 FunctionDecl *newentry = dynamic_cast< FunctionDecl* >( added ); 576 FunctionDecl *oldentry = dynamic_cast< FunctionDecl* >( existing ); 577 if ( newentry && oldentry ) { 578 if ( newentry->get_statements() && oldentry->get_statements() ) { 579 throw SemanticError( "duplicate function definition for ", added ); 580 } // if 581 } else { 582 // two objects with the same mangled name defined in the same scope. 583 // both objects must be marked extern or both must be intrinsic for this to be okay 584 // xxx - perhaps it's actually if either is intrinsic then this is okay? 585 // might also need to be same storage class? 586 ObjectDecl *newobj = dynamic_cast< ObjectDecl* >( added ); 587 ObjectDecl *oldobj = dynamic_cast< ObjectDecl* >( existing ); 588 if ( newobj->get_storageClass() != DeclarationNode::Extern && oldobj->get_storageClass() != DeclarationNode::Extern ) { 589 throw SemanticError( "duplicate object definition for ", added ); 590 } // if 591 } // if 592 } else { 593 throw SemanticError( "duplicate definition for ", added ); 594 } // if 595 596 return true; 597 } 598 599 void Indexer::addId( DeclarationWithType *decl ) { 600 makeWritable(); 601 602 const std::string &name = decl->get_name(); 603 std::string mangleName; 604 if ( LinkageSpec::isOverridable( decl->get_linkage() ) ) { 605 // mangle the name without including the appropriate suffix, so overridable routines are placed into the 606 // same "bucket" as their user defined versions. 607 mangleName = Mangler::mangle( decl, false ); 608 } else { 609 mangleName = Mangler::mangle( decl ); 610 } // if 611 612 DeclarationWithType *existing = lookupIdAtScope( name, mangleName, scope ); 613 if ( ! existing || ! addedIdConflicts( existing, decl ) ) { 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 ) ) { 616 throw SemanticError( "invalid overload of C function ", decl ); 617 } // NOTE this is broken in Richard's original code in such a way that it never triggers (it 618 // doesn't check decls that have the same manglename, and all C-linkage decls are defined to 619 // have their name as their manglename, hence the error can never trigger). 620 // The code here is closer to correct, but name mangling would have to be completely 621 // isomorphic to C type-compatibility, which it may not be. 622 623 tables->idTable[ name ][ mangleName ] = decl; 624 ++tables->size; 625 } 626 } 627 628 bool addedTypeConflicts( NamedTypeDecl *existing, NamedTypeDecl *added ) { 629 if ( existing->get_base() == 0 ) { 630 return false; 631 } else if ( added->get_base() == 0 ) { 632 return true; 633 } else { 634 throw SemanticError( "redeclaration of ", added ); 635 } 636 } 637 638 void Indexer::addType( NamedTypeDecl *decl ) { 639 makeWritable(); 640 641 const std::string &id = decl->get_name(); 642 TypeTable::iterator existing = tables->typeTable.find( id ); 643 if ( existing == tables->typeTable.end() ) { 644 NamedTypeDecl *parent = tables->base.lookupTypeAtScope( id, scope ); 645 if ( ! parent || ! addedTypeConflicts( parent, decl ) ) { 646 tables->typeTable.insert( existing, std::make_pair( id, decl ) ); 647 ++tables->size; 648 } 649 } else { 650 if ( ! addedTypeConflicts( existing->second, decl ) ) { 651 existing->second = decl; 652 } 653 } 654 } 655 656 bool addedDeclConflicts( AggregateDecl *existing, AggregateDecl *added ) { 657 if ( existing->get_members().empty() ) { 658 return false; 659 } else if ( ! added->get_members().empty() ) { 660 throw SemanticError( "redeclaration of ", added ); 661 } // if 662 return true; 663 } 664 665 void Indexer::addStruct( const std::string &id ) { 666 addStruct( new StructDecl( id ) ); 667 } 668 669 void Indexer::addStruct( StructDecl *decl ) { 670 makeWritable(); 671 672 const std::string &id = decl->get_name(); 673 StructTable::iterator existing = tables->structTable.find( id ); 674 if ( existing == tables->structTable.end() ) { 675 StructDecl *parent = tables->base.lookupStructAtScope( id, scope ); 676 if ( ! parent || ! addedDeclConflicts( parent, decl ) ) { 677 tables->structTable.insert( existing, std::make_pair( id, decl ) ); 678 ++tables->size; 679 } 680 } else { 681 if ( ! addedDeclConflicts( existing->second, decl ) ) { 682 existing->second = decl; 683 } 684 } 685 } 686 687 void Indexer::addEnum( EnumDecl *decl ) { 688 makeWritable(); 689 690 const std::string &id = decl->get_name(); 691 EnumTable::iterator existing = tables->enumTable.find( id ); 692 if ( existing == tables->enumTable.end() ) { 693 EnumDecl *parent = tables->base.lookupEnumAtScope( id, scope ); 694 if ( ! parent || ! addedDeclConflicts( parent, decl ) ) { 695 tables->enumTable.insert( existing, std::make_pair( id, decl ) ); 696 ++tables->size; 697 } 698 } else { 699 if ( ! addedDeclConflicts( existing->second, decl ) ) { 700 existing->second = decl; 701 } 702 } 703 } 704 705 void Indexer::addUnion( const std::string &id ) { 706 addUnion( new UnionDecl( id ) ); 707 } 708 709 void Indexer::addUnion( UnionDecl *decl ) { 710 makeWritable(); 711 712 const std::string &id = decl->get_name(); 713 UnionTable::iterator existing = tables->unionTable.find( id ); 714 if ( existing == tables->unionTable.end() ) { 715 UnionDecl *parent = tables->base.lookupUnionAtScope( id, scope ); 716 if ( ! parent || ! addedDeclConflicts( parent, decl ) ) { 717 tables->unionTable.insert( existing, std::make_pair( id, decl ) ); 718 ++tables->size; 719 } 720 } else { 721 if ( ! addedDeclConflicts( existing->second, decl ) ) { 722 existing->second = decl; 723 } 724 } 725 } 726 727 void Indexer::addTrait( TraitDecl *decl ) { 728 makeWritable(); 729 730 const std::string &id = decl->get_name(); 731 TraitTable::iterator existing = tables->traitTable.find( id ); 732 if ( existing == tables->traitTable.end() ) { 733 TraitDecl *parent = tables->base.lookupTraitAtScope( id, scope ); 734 if ( ! parent || ! addedDeclConflicts( parent, decl ) ) { 735 tables->traitTable.insert( existing, std::make_pair( id, decl ) ); 736 ++tables->size; 737 } 738 } else { 739 if ( ! addedDeclConflicts( existing->second, decl ) ) { 740 existing->second = decl; 741 } 742 } 354 743 } 355 744 356 745 void Indexer::enterScope() { 746 ++scope; 747 357 748 if ( doDebug ) { 358 std::cout << "--- Entering scope" << std::endl; 359 } 360 idTable.enterScope(); 361 typeTable.enterScope(); 362 structTable.enterScope(); 363 enumTable.enterScope(); 364 unionTable.enterScope(); 365 contextTable.enterScope(); 749 std::cout << "--- Entering scope " << scope << std::endl; 750 } 366 751 } 367 752 368 753 void Indexer::leaveScope() { 369 754 using std::cout; 370 using std::endl; 371 372 if ( doDebug ) { 373 cout << "--- Leaving scope containing" << endl; 374 idTable.dump( cout ); 375 typeTable.dump( cout ); 376 structTable.dump( cout ); 377 enumTable.dump( cout ); 378 unionTable.dump( cout ); 379 contextTable.dump( cout ); 380 } 381 idTable.leaveScope(); 382 typeTable.leaveScope(); 383 structTable.leaveScope(); 384 enumTable.leaveScope(); 385 unionTable.leaveScope(); 386 contextTable.leaveScope(); 755 756 assert( scope > 0 && "cannot leave initial scope" ); 757 --scope; 758 759 while ( tables && tables->scope > scope ) { 760 if ( doDebug ) { 761 cout << "--- Leaving scope " << tables->scope << " containing" << std::endl; 762 dump( tables->idTable, cout ); 763 dump( tables->typeTable, cout ); 764 dump( tables->structTable, cout ); 765 dump( tables->enumTable, cout ); 766 dump( tables->unionTable, cout ); 767 dump( tables->traitTable, cout ); 768 } 769 770 // swap tables for base table until we find one at an appropriate scope 771 Indexer::Impl *base = newRef( tables->base.tables ); 772 deleteRef( tables ); 773 tables = base; 774 } 387 775 } 388 776 389 777 void Indexer::print( std::ostream &os, int indent ) const { 390 778 using std::cerr; 391 using std::endl; 392 393 cerr << "===idTable===" << endl; 394 idTable.dump( os ); 395 cerr << "===typeTable===" << endl; 396 typeTable.dump( os ); 397 cerr << "===structTable===" << endl; 398 structTable.dump( os ); 399 cerr << "===enumTable===" << endl; 400 enumTable.dump( os ); 401 cerr << "===unionTable===" << endl; 402 unionTable.dump( os ); 403 cerr << "===contextTable===" << endl; 404 contextTable.dump( os ); 405 #if 0 406 idTable.dump( os ); 407 typeTable.dump( os ); 408 structTable.dump( os ); 409 enumTable.dump( os ); 410 unionTable.dump( os ); 411 contextTable.dump( os ); 412 #endif 779 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 ); 413 792 } 414 793 } // namespace SymTab -
src/SymTab/Indexer.h
r39786813 ra5a71d0 9 9 // Author : Richard C. Bilson 10 10 // Created On : Sun May 17 21:38:55 2015 11 // Last Modified By : Rob Schluntz12 // Last Modified On : Thu Sep 17 16:05:38 201513 // Update Count : 511 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 17:34:14 2016 13 // Update Count : 6 14 14 // 15 15 … … 21 21 22 22 #include "SynTree/Visitor.h" 23 #include "IdTable.h"24 #include "AggregateTable.h"25 #include "TypeTable.h"26 23 27 24 namespace SymTab { … … 29 26 public: 30 27 Indexer( bool useDebug = false ); 28 29 Indexer( const Indexer &that ); 30 Indexer( Indexer &&that ); 31 31 virtual ~Indexer(); 32 Indexer& operator= ( const Indexer &that ); 33 Indexer& operator= ( Indexer &&that ); 32 34 33 35 //using Visitor::visit; … … 39 41 virtual void visit( UnionDecl *aggregateDecl ); 40 42 virtual void visit( EnumDecl *aggregateDecl ); 41 virtual void visit( ContextDecl *aggregateDecl );43 virtual void visit( TraitDecl *aggregateDecl ); 42 44 43 45 virtual void visit( CompoundStmt *compoundStmt ); … … 67 69 virtual void visit( UntypedValofExpr *valofExpr ); 68 70 69 virtual void visit( ContextInstType *contextInst );71 virtual void visit( TraitInstType *contextInst ); 70 72 virtual void visit( StructInstType *contextInst ); 71 73 virtual void visit( UnionInstType *contextInst ); … … 78 80 void leaveScope(); 79 81 80 void lookupId( const std::string &id, std::list< DeclarationWithType* >& ) const; 81 DeclarationWithType* lookupId( const std::string &id) const; 82 /// Gets all declarations with the given ID 83 void lookupId( const std::string &id, std::list< DeclarationWithType* > &out ) const; 84 /// Gets the top-most type declaration with the given ID 82 85 NamedTypeDecl *lookupType( const std::string &id ) const; 86 /// Gets the top-most struct declaration with the given ID 83 87 StructDecl *lookupStruct( const std::string &id ) const; 88 /// Gets the top-most enum declaration with the given ID 84 89 EnumDecl *lookupEnum( const std::string &id ) const; 90 /// Gets the top-most union declaration with the given ID 85 91 UnionDecl *lookupUnion( const std::string &id ) const; 86 ContextDecl *lookupContext( const std::string &id ) const; 92 /// Gets the top-most trait declaration with the given ID 93 TraitDecl *lookupTrait( const std::string &id ) const; 87 94 88 95 void print( std::ostream &os, int indent = 0 ) const; 89 96 private: 90 IdTable idTable; 91 TypeTable typeTable; 92 StructTable structTable; 93 EnumTable enumTable; 94 UnionTable unionTable; 95 ContextTable contextTable; 96 97 bool doDebug; // display debugging trace 97 /// looks up a specific mangled ID at the given scope 98 DeclarationWithType *lookupIdAtScope( const std::string &id, const std::string &mangleName, unsigned long scope ) const; 99 /// returns true if there exists a declaration with C linkage and the given name with a different mangled name 100 bool hasIncompatibleCDecl( const std::string &id, const std::string &mangleName ) const; 101 // equivalents to lookup functions that only look at tables at scope `scope` (which should be >= tables->scope) 102 NamedTypeDecl *lookupTypeAtScope( const std::string &id, unsigned long scope ) const; 103 StructDecl *lookupStructAtScope( const std::string &id, unsigned long scope ) const; 104 EnumDecl *lookupEnumAtScope( const std::string &id, unsigned long scope ) const; 105 UnionDecl *lookupUnionAtScope( const std::string &id, unsigned long scope ) const; 106 TraitDecl *lookupTraitAtScope( const std::string &id, unsigned long scope ) const; 107 108 void addId( DeclarationWithType *decl ); 109 void addType( NamedTypeDecl *decl ); 110 void addStruct( const std::string &id ); 111 void addStruct( StructDecl *decl ); 112 void addEnum( EnumDecl *decl ); 113 void addUnion( const std::string &id ); 114 void addUnion( UnionDecl *decl ); 115 void addTrait( TraitDecl *decl ); 116 117 struct Impl; 118 Impl *tables; ///< Copy-on-write instance of table data structure 119 unsigned long scope; ///< Scope index of this pointer 120 bool doDebug; ///< Display debugging trace? 121 122 /// Takes a new ref to a table (returns null if null) 123 static Impl *newRef( Impl *toClone ); 124 /// Clears a ref to a table (does nothing if null) 125 static void deleteRef( Impl *toFree ); 126 127 /// Ensures that tables variable is writable (i.e. allocated, uniquely owned by this Indexer, and at the current scope) 128 void makeWritable(); 98 129 }; 99 130 } // namespace SymTab -
src/SymTab/Mangler.cc
r39786813 ra5a71d0 227 227 228 228 void Mangler::visit( VarArgsType *varArgsType ) { 229 printQualifiers( varArgsType ); 229 230 mangleName << "VARGS"; 230 231 } -
src/SymTab/TypeEquality.cc
r39786813 ra5a71d0 194 194 195 195 void TypeEquality::visit( VarArgsType *varArgsType ) { 196 // don't handle qualifiers; var args pack shouldn't have any196 handleQualifiers( varArgsType ); 197 197 if ( ! dynamic_cast< VarArgsType * >( other ) ) { 198 198 result = false; -
src/SymTab/Validate.cc
r39786813 ra5a71d0 10 10 // Created On : Sun May 17 21:50:04 2015 11 11 // Last Modified By : Rob Schluntz 12 // Last Modified On : Mon Feb 22 12:26:37201612 // Last Modified On : Mon Apr 04 17:13:29 2016 13 13 // Update Count : 297 14 14 // … … 102 102 virtual void visit( StructInstType *structInst ); 103 103 virtual void visit( UnionInstType *unionInst ); 104 virtual void visit( ContextInstType *contextInst );104 virtual void visit( TraitInstType *contextInst ); 105 105 virtual void visit( StructDecl *structDecl ); 106 106 virtual void visit( UnionDecl *unionDecl ); … … 158 158 virtual Declaration *mutate( UnionDecl * unionDecl ); 159 159 virtual Declaration *mutate( EnumDecl * enumDecl ); 160 virtual Declaration *mutate( ContextDecl * contextDecl );160 virtual Declaration *mutate( TraitDecl * contextDecl ); 161 161 162 162 template<typename AggDecl> … … 370 370 } 371 371 372 void Pass2::visit( ContextInstType *contextInst ) {372 void Pass2::visit( TraitInstType *contextInst ) { 373 373 Parent::visit( contextInst ); 374 ContextDecl *ctx = indexer->lookupContext( contextInst->get_name() );374 TraitDecl *ctx = indexer->lookupTrait( contextInst->get_name() ); 375 375 if ( ! ctx ) { 376 376 throw SemanticError( "use of undeclared context " + contextInst->get_name() ); … … 378 378 for ( std::list< TypeDecl * >::const_iterator i = ctx->get_parameters().begin(); i != ctx->get_parameters().end(); ++i ) { 379 379 for ( std::list< DeclarationWithType * >::const_iterator assert = (*i )->get_assertions().begin(); assert != (*i )->get_assertions().end(); ++assert ) { 380 if ( ContextInstType *otherCtx = dynamic_cast< ContextInstType * >(*assert ) ) {380 if ( TraitInstType *otherCtx = dynamic_cast< TraitInstType * >(*assert ) ) { 381 381 cloneAll( otherCtx->get_members(), contextInst->get_members() ); 382 382 } else { … … 442 442 while ( ! toBeDone.empty() ) { 443 443 for ( std::list< DeclarationWithType * >::iterator assertion = toBeDone.begin(); assertion != toBeDone.end(); ++assertion ) { 444 if ( ContextInstType *ctx = dynamic_cast< ContextInstType * >( (*assertion )->get_type() ) ) {444 if ( TraitInstType *ctx = dynamic_cast< TraitInstType * >( (*assertion )->get_type() ) ) { 445 445 for ( std::list< Declaration * >::const_iterator i = ctx->get_members().begin(); i != ctx->get_members().end(); ++i ) { 446 446 DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( *i ); … … 652 652 } 653 653 654 Declaration *EliminateTypedef::mutate( ContextDecl * contextDecl ) {654 Declaration *EliminateTypedef::mutate( TraitDecl * contextDecl ) { 655 655 Mutator::mutate( contextDecl ); 656 656 return handleAggregate( contextDecl ); -
src/SymTab/module.mk
r39786813 ra5a71d0 15 15 ############################################################################### 16 16 17 SRC += SymTab/IdTable.cc \ 18 SymTab/Indexer.cc \ 17 SRC += SymTab/Indexer.cc \ 19 18 SymTab/Mangler.cc \ 20 19 SymTab/Validate.cc \ -
src/SynTree/AggregateDecl.cc
r39786813 ra5a71d0 10 10 // Created On : Sun May 17 23:56:39 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Jun 13 08:12:49 201513 // Update Count : 612 // Last Modified On : Wed Mar 2 17:28:00 2016 13 // Update Count : 7 14 14 // 15 15 … … 64 64 std::string EnumDecl::typeString() const { return "enum"; } 65 65 66 std::string ContextDecl::typeString() const { return "context"; }66 std::string TraitDecl::typeString() const { return "context"; } 67 67 68 68 // Local Variables: // -
src/SynTree/CommaExpr.cc
r39786813 ra5a71d0 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // CommaExpr.cc -- 7 // CommaExpr.cc -- 8 8 // 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 : Mon May 18 08:09:58 201511 // Last Modified By : Rob Schluntz 12 // Last Modified On : Wed Apr 06 17:07:54 2016 13 13 // Update Count : 1 14 14 // … … 20 20 CommaExpr::CommaExpr( Expression *arg1, Expression *arg2, Expression *_aname ) 21 21 : Expression( _aname ), arg1( arg1 ), arg2( arg2 ) { 22 // xxx - result of a comma expression is never an lvalue, so should set lvalue 23 // to false on all result types 22 24 cloneAll( arg2->get_results(), get_results() ); 23 25 } -
src/SynTree/CompoundStmt.cc
r39786813 ra5a71d0 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // XXX.cc -- 7 // XXX.cc -- 8 8 // 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 : Tue Jun 23 11:37:49 201511 // Last Modified By : Rob Schluntz 12 // Last Modified On : Wed Apr 06 14:35:37 2016 13 13 // Update Count : 3 14 14 // … … 18 18 #include <algorithm> 19 19 #include <functional> 20 #include "Expression.h" 21 #include "Declaration.h" 20 22 21 23 using std::string; 22 24 using std::endl; 25 26 class VarExprReplacer : public Visitor { 27 public: 28 typedef std::map< DeclarationWithType *, DeclarationWithType * > DeclMap; 29 private: 30 const DeclMap & declMap; 31 public: 32 VarExprReplacer( const DeclMap & declMap ) : declMap( declMap ) {} 33 34 // replace variable with new node from decl map 35 virtual void visit( VariableExpr * varExpr ) { 36 if ( declMap.count( varExpr->get_var() ) ) { 37 varExpr->set_var( declMap.at( varExpr->get_var() ) ); 38 } 39 } 40 }; 41 23 42 24 43 CompoundStmt::CompoundStmt( std::list<Label> labels ) : Statement( labels ) { … … 27 46 CompoundStmt::CompoundStmt( const CompoundStmt &other ) : Statement( other ) { 28 47 cloneAll( other.kids, kids ); 48 49 // when cloning a compound statement, we may end up cloning declarations which 50 // are referred to by VariableExprs throughout the block. Cloning a VariableExpr 51 // does a shallow copy, so the VariableExpr will end up pointing to the original 52 // declaration. If the original declaration is deleted, e.g. because the original 53 // CompoundStmt is deleted, then we have a dangling pointer. To avoid this case, 54 // find all DeclarationWithType nodes (since a VariableExpr must point to a 55 // DeclarationWithType) in the original CompoundStmt and map them to the cloned 56 // node in the new CompoundStmt ('this'), then replace the Declarations referred to 57 // by each VariableExpr according to the constructed map. Note that only the declarations 58 // in the current level are collected into the map, because child CompoundStmts will 59 // recursively execute this routine. There may be more efficient ways of doing 60 // this. 61 VarExprReplacer::DeclMap declMap; 62 std::list< Statement * >::const_iterator origit = other.kids.begin(); 63 for ( Statement * s : kids ) { 64 assert( origit != other.kids.end() ); 65 if ( DeclStmt * declStmt = dynamic_cast< DeclStmt * >( s ) ) { 66 DeclStmt * origDeclStmt = dynamic_cast< DeclStmt * >( *origit ); 67 assert( origDeclStmt ); 68 if ( DeclarationWithType * dwt = dynamic_cast< DeclarationWithType * > ( declStmt->get_decl() ) ) { 69 DeclarationWithType * origdwt = dynamic_cast< DeclarationWithType * > ( origDeclStmt->get_decl() ); 70 assert( origdwt ); 71 declMap[ origdwt ] = dwt; 72 } 73 } 74 } 75 if ( ! declMap.empty() ) { 76 VarExprReplacer replacer( declMap ); 77 accept( replacer ); 78 } 29 79 } 30 80 -
src/SynTree/Constant.cc
r39786813 ra5a71d0 16 16 #include <iostream> 17 17 #include <list> 18 #include <string> 18 19 19 20 #include "Constant.h" … … 28 29 29 30 Constant::~Constant() { delete type; } 31 32 Constant Constant::from( int i ) { 33 return Constant( new BasicType( Type::Qualifiers(), BasicType::SignedInt ), std::to_string( i ) ); 34 } 35 36 Constant Constant::from( unsigned long i ) { 37 return Constant( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), std::to_string( i ) ); 38 } 39 40 Constant Constant::from( double d ) { 41 return Constant( new BasicType( Type::Qualifiers(), BasicType::Double ), std::to_string( d ) ); 42 } 30 43 31 44 Constant *Constant::clone() const { assert( false ); return 0; } -
src/SynTree/Constant.h
r39786813 ra5a71d0 32 32 void set_value( std::string newValue ) { value = newValue; } 33 33 34 /// generates an integer constant of the given int 35 static Constant from( int i ); 36 /// generates an integer constant of the given unsigned long int 37 static Constant from( unsigned long i ); 38 /// generates a floating point constant of the given double 39 static Constant from( double d ); 40 34 41 virtual Constant *clone() const; 35 42 virtual void accept( Visitor &v ) { v.visit( this ); } -
src/SynTree/Declaration.h
r39786813 ra5a71d0 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Rob Schluntz 12 // Last Modified On : Wed Jan 13 16:11:49201612 // Last Modified On : Mon Apr 04 17:14:00 2016 13 13 // Update Count : 36 14 14 // … … 246 246 }; 247 247 248 class ContextDecl : public AggregateDecl {249 typedef AggregateDecl Parent; 250 public: 251 ContextDecl( const std::string &name ) : Parent( name ) {}252 ContextDecl( const ContextDecl &other ) : Parent( other ) {}253 254 virtual ContextDecl *clone() const { return new ContextDecl( *this ); }248 class TraitDecl : public AggregateDecl { 249 typedef AggregateDecl Parent; 250 public: 251 TraitDecl( const std::string &name ) : Parent( name ) {} 252 TraitDecl( const TraitDecl &other ) : Parent( other ) {} 253 254 virtual TraitDecl *clone() const { return new TraitDecl( *this ); } 255 255 virtual void accept( Visitor &v ) { v.visit( this ); } 256 256 virtual Declaration *acceptMutator( Mutator &m ) { return m.mutate( this ); } -
src/SynTree/Initializer.cc
r39786813 ra5a71d0 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Rob Schluntz 12 // Last Modified On : Wed Mar 30 13:58:32 201612 // Last Modified On : Wed Apr 06 16:15:32 2016 13 13 // Update Count : 28 14 14 // … … 35 35 } 36 36 37 SingleInit::SingleInit( const SingleInit &other ) : Initializer(other), value ( other.value) {37 SingleInit::SingleInit( const SingleInit &other ) : Initializer(other), value ( maybeClone( other.value ) ) { 38 38 cloneAll(other.designators, designators ); 39 39 } -
src/SynTree/Mutator.cc
r39786813 ra5a71d0 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Rob Schluntz 12 // Last Modified On : Wed Jan 13 15:32:29201612 // Last Modified On : Mon Apr 04 17:14:20 2016 13 13 // Update Count : 15 14 14 // … … 63 63 } 64 64 65 Declaration *Mutator::mutate( ContextDecl *aggregateDecl ) {65 Declaration *Mutator::mutate( TraitDecl *aggregateDecl ) { 66 66 handleAggregateDecl( aggregateDecl ); 67 67 return aggregateDecl; … … 387 387 } 388 388 389 Type *Mutator::mutate( ContextInstType *aggregateUseType ) {389 Type *Mutator::mutate( TraitInstType *aggregateUseType ) { 390 390 handleReferenceToType( aggregateUseType ); 391 391 mutateAll( aggregateUseType->get_members(), *this ); -
src/SynTree/Mutator.h
r39786813 ra5a71d0 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Rob Schluntz 12 // Last Modified On : Wed Jan 13 15:24:26201612 // Last Modified On : Mon Apr 04 17:14:44 2016 13 13 // Update Count : 9 14 14 // … … 31 31 virtual Declaration* mutate( UnionDecl *aggregateDecl ); 32 32 virtual Declaration* mutate( EnumDecl *aggregateDecl ); 33 virtual Declaration* mutate( ContextDecl *aggregateDecl );33 virtual Declaration* mutate( TraitDecl *aggregateDecl ); 34 34 virtual TypeDecl* mutate( TypeDecl *typeDecl ); 35 35 virtual Declaration* mutate( TypedefDecl *typeDecl ); … … 85 85 virtual Type* mutate( UnionInstType *aggregateUseType ); 86 86 virtual Type* mutate( EnumInstType *aggregateUseType ); 87 virtual Type* mutate( ContextInstType *aggregateUseType );87 virtual Type* mutate( TraitInstType *aggregateUseType ); 88 88 virtual Type* mutate( TypeInstType *aggregateUseType ); 89 89 virtual Type* mutate( TupleType *tupleType ); -
src/SynTree/ReferenceToType.cc
r39786813 ra5a71d0 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Jun 7 08:31:48 201513 // Update Count : 412 // Last Modified On : Wed Mar 2 17:28:51 2016 13 // Update Count : 5 14 14 // 15 15 … … 83 83 std::string EnumInstType::typeString() const { return "enum"; } 84 84 85 std::string ContextInstType::typeString() const { return "context"; }85 std::string TraitInstType::typeString() const { return "context"; } 86 86 87 ContextInstType::ContextInstType( const ContextInstType &other ) : Parent( other ) {87 TraitInstType::TraitInstType( const TraitInstType &other ) : Parent( other ) { 88 88 cloneAll( other.members, members ); 89 89 } 90 90 91 ContextInstType::~ContextInstType() {91 TraitInstType::~TraitInstType() { 92 92 deleteAll( members ); 93 93 } -
src/SynTree/SynTree.h
r39786813 ra5a71d0 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Rob Schluntz 12 // Last Modified On : Wed Jan 13 15:28:41201612 // Last Modified On : Mon Apr 04 17:16:09 2016 13 13 // Update Count : 4 14 14 // … … 30 30 class UnionDecl; 31 31 class EnumDecl; 32 class ContextDecl;32 class TraitDecl; 33 33 class NamedTypeDecl; 34 34 class TypeDecl; … … 92 92 class UnionInstType; 93 93 class EnumInstType; 94 class ContextInstType;94 class TraitInstType; 95 95 class TypeInstType; 96 96 class TupleType; -
src/SynTree/Type.h
r39786813 ra5a71d0 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Rob Schluntz12 // Last Modified On : Fri Dec 18 14:46:18 201513 // Update Count : 1811 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 17:29:08 2016 13 // Update Count : 21 14 14 // 15 15 … … 296 296 }; 297 297 298 class ContextInstType : public ReferenceToType {298 class TraitInstType : public ReferenceToType { 299 299 typedef ReferenceToType Parent; 300 300 public: 301 ContextInstType( const Type::Qualifiers &tq, const std::string &name ) : Parent( tq, name ) {}302 ContextInstType( const ContextInstType &other );303 ~ ContextInstType();301 TraitInstType( const Type::Qualifiers &tq, const std::string &name ) : Parent( tq, name ) {} 302 TraitInstType( const TraitInstType &other ); 303 ~TraitInstType(); 304 304 305 305 std::list< Declaration* >& get_members() { return members; } 306 306 307 virtual ContextInstType *clone() const { return new ContextInstType( *this ); }307 virtual TraitInstType *clone() const { return new TraitInstType( *this ); } 308 308 virtual void accept( Visitor &v ) { v.visit( this ); } 309 309 virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); } … … 402 402 /// Represents the GCC built-in varargs type 403 403 class VarArgsType : public Type { 404 public: 404 405 VarArgsType(); 406 VarArgsType( Type::Qualifiers tq ); 405 407 406 408 virtual VarArgsType *clone() const { return new VarArgsType( *this ); } -
src/SynTree/TypeSubstitution.cc
r39786813 ra5a71d0 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon May 18 11:10:04 201513 // Update Count : 212 // Last Modified On : Wed Mar 2 17:29:15 2016 13 // Update Count : 3 14 14 // 15 15 … … 190 190 } 191 191 192 Type * TypeSubstitution::mutate( ContextInstType *aggregateUseType ) {192 Type * TypeSubstitution::mutate( TraitInstType *aggregateUseType ) { 193 193 return handleType( aggregateUseType ); 194 194 } -
src/SynTree/TypeSubstitution.h
r39786813 ra5a71d0 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon May 18 11:12:30 201513 // Update Count : 112 // Last Modified On : Wed Mar 2 17:33:19 2016 13 // Update Count : 2 14 14 // 15 15 … … 72 72 virtual Type* mutate(UnionInstType *aggregateUseType); 73 73 virtual Type* mutate(EnumInstType *aggregateUseType); 74 virtual Type* mutate( ContextInstType *aggregateUseType);74 virtual Type* mutate(TraitInstType *aggregateUseType); 75 75 virtual Type* mutate(TupleType *tupleType); 76 76 virtual Type* mutate(VarArgsType *varArgsType); -
src/SynTree/VarArgsType.cc
r39786813 ra5a71d0 9 9 // Author : Aaron B. Moss 10 10 // Created On : Thu Feb 25 16:34:00 2016 11 // Last Modified By : Aaron B. Moss12 // Last Modified On : Thu Feb 25 16:34:00 201613 // Update Count : 111 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 17:10:40 2016 13 // Update Count : 2 14 14 // 15 15 … … 17 17 18 18 VarArgsType::VarArgsType() : Type( Type::Qualifiers() ) {} 19 20 VarArgsType::VarArgsType( Type::Qualifiers tq ) : Type( tq ) {} 19 21 20 22 void VarArgsType::print( std::ostream &os, int indent ) const { -
src/SynTree/Visitor.cc
r39786813 ra5a71d0 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Rob Schluntz 12 // Last Modified On : Wed Jan 13 15:27:23201612 // Last Modified On : Mon Apr 04 17:16:25 2016 13 13 // Update Count : 18 14 14 // … … 56 56 } 57 57 58 void Visitor::visit( ContextDecl *aggregateDecl ) {58 void Visitor::visit( TraitDecl *aggregateDecl ) { 59 59 visit( static_cast< AggregateDecl* >( aggregateDecl ) ); 60 60 } … … 326 326 } 327 327 328 void Visitor::visit( ContextInstType *aggregateUseType ) {328 void Visitor::visit( TraitInstType *aggregateUseType ) { 329 329 visit( static_cast< ReferenceToType * >( aggregateUseType ) ); 330 330 acceptAll( aggregateUseType->get_members(), *this ); -
src/SynTree/Visitor.h
r39786813 ra5a71d0 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Rob Schluntz 12 // Last Modified On : Tue Feb 09 13:20:48201612 // Last Modified On : Mon Apr 04 17:16:36 2016 13 13 // Update Count : 6 14 14 // … … 31 31 virtual void visit( UnionDecl *aggregateDecl ); 32 32 virtual void visit( EnumDecl *aggregateDecl ); 33 virtual void visit( ContextDecl *aggregateDecl );33 virtual void visit( TraitDecl *aggregateDecl ); 34 34 virtual void visit( TypeDecl *typeDecl ); 35 35 virtual void visit( TypedefDecl *typeDecl ); … … 85 85 virtual void visit( UnionInstType *aggregateUseType ); 86 86 virtual void visit( EnumInstType *aggregateUseType ); 87 virtual void visit( ContextInstType *aggregateUseType );87 virtual void visit( TraitInstType *aggregateUseType ); 88 88 virtual void visit( TypeInstType *aggregateUseType ); 89 89 virtual void visit( TupleType *tupleType ); -
src/SynTree/module.mk
r39786813 ra5a71d0 46 46 SynTree/Visitor.cc \ 47 47 SynTree/Mutator.cc \ 48 SynTree/CodeGenVisitor.cc \49 48 SynTree/TypeSubstitution.cc 50 49 -
src/driver/Makefile.in
r39786813 ra5a71d0 196 196 esac; \ 197 197 done; \ 198 echo ' cd $(top_srcdir) && $(AUTOMAKE) -- gnusrc/driver/Makefile'; \198 echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/driver/Makefile'; \ 199 199 $(am__cd) $(top_srcdir) && \ 200 $(AUTOMAKE) -- gnusrc/driver/Makefile200 $(AUTOMAKE) --foreign src/driver/Makefile 201 201 .PRECIOUS: Makefile 202 202 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status -
src/examples/Makefile.in
r39786813 ra5a71d0 189 189 esac; \ 190 190 done; \ 191 echo ' cd $(top_srcdir) && $(AUTOMAKE) -- gnusrc/examples/Makefile'; \191 echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/examples/Makefile'; \ 192 192 $(am__cd) $(top_srcdir) && \ 193 $(AUTOMAKE) -- gnusrc/examples/Makefile193 $(AUTOMAKE) --foreign src/examples/Makefile 194 194 .PRECIOUS: Makefile 195 195 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status -
src/examples/abs.c
r39786813 ra5a71d0 10 10 // Created On : Thu Jan 28 18:26:16 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Feb 17 09:32:04201613 // Update Count : 4412 // Last Modified On : Wed Mar 2 15:07:26 2016 13 // Update Count : 51 14 14 // 15 15 … … 20 20 char ch = -65; 21 21 sout | "char\t\t\t" | ch | "\tabs " | abs( ch ) | endl; 22 sout | "signed int\t\t" | -65 | "\tabs 23 sout | "signed long int\t\t" | -65l | "\tabs 24 sout | "signed long long int\t" | -65ll | "\tabs 25 sout | "float\t\t\t" | -65.0f | "\tabs 26 sout | "double\t\t\t" | -65.0 | "\tabs 27 sout | "long double\t\t" | -65.0l | "\tabs 28 sout | "float _Complex\t\t" | -65.0F-2.0iF | "\tabs 29 sout | "double _Complex\t\t" | -65.0D-2.0iD | "\tabs 30 sout | "long double _Complex\t" | -65.0L-2.0iL | "\tabs 22 sout | "signed int\t\t" | -65 | "\tabs" | abs( -65 ) | endl; 23 sout | "signed long int\t\t" | -65l | "\tabs" | abs( -65l ) | endl; 24 sout | "signed long long int\t" | -65ll | "\tabs" | abs( -65ll ) | endl; 25 sout | "float\t\t\t" | -65.0f | "\tabs" | abs( -65.0f ) | endl; 26 sout | "double\t\t\t" | -65.0 | "\tabs" | abs( -65.0 ) | endl; 27 sout | "long double\t\t" | -65.0l | "\tabs" | abs( -65.0l ) | endl; 28 sout | "float _Complex\t\t" | -65.0F-2.0iF | "\tabs" | abs( -65.0F-2.0iF ) | endl; 29 sout | "double _Complex\t\t" | -65.0D-2.0iD | "\tabs" | abs( -65.0D-2.0iD ) | endl; 30 sout | "long double _Complex\t" | -65.0L-2.0iL | "\tabs" | abs( -65.0L-2.0iL ) | endl; 31 31 } // main 32 32 -
src/examples/array.c
r39786813 ra5a71d0 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Ma y 27 18:10:13 201513 // Update Count : 212 // Last Modified On : Wed Mar 2 18:13:52 2016 13 // Update Count : 3 14 14 // 15 15 16 16 #include "array.h" 17 17 18 /// forall( type array_type, elt_type | bounded_array( array_type, elt_type ) )18 /// forall( otype array_type, elt_type | bounded_array( array_type, elt_type ) ) 19 19 /// [ array_iterator begin, array_iterator end ] 20 20 /// get_iterators( array_type array ) … … 25 25 26 26 // The first element is always at index 0. 27 forall( type array_type,type elt_type | bounded_array( array_type, elt_type ) )27 forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) ) 28 28 elt_type * begin( array_type array ) { 29 29 return &array[ 0 ]; … … 31 31 32 32 // The end iterator should point one past the last element. 33 forall( type array_type,type elt_type | bounded_array( array_type, elt_type ) )33 forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) ) 34 34 elt_type * end( array_type array ) { 35 35 return &array[ last( array ) ] + 1; -
src/examples/array.h
r39786813 ra5a71d0 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Jan 26 17:09:29201613 // Update Count : 312 // Last Modified On : Wed Mar 2 18:13:35 2016 13 // Update Count : 5 14 14 // 15 15 … … 21 21 // An array has contiguous elements accessible in any order using integer indicies. The first 22 22 // element has index 0. 23 context array( type array_type,type elt_type ) {23 trait array( otype array_type, otype elt_type ) { 24 24 lvalue elt_type ?[?]( array_type, int ); 25 25 }; 26 26 27 27 // A bounded array is an array that carries its maximum index with it. 28 context bounded_array( type array_type,type elt_type | array( array_type, elt_type ) ) {28 trait bounded_array( otype array_type, otype elt_type | array( array_type, elt_type ) ) { 29 29 int last( array_type ); 30 30 }; … … 34 34 typedef int array_iterator; 35 35 36 /// forall( type array_type, elt_type | bounded_array( array_type, elt_type ) )36 /// forall( otype array_type, elt_type | bounded_array( array_type, elt_type ) ) 37 37 /// [ array_iterator begin, array_iterator end ] get_iterators( array_type ); 38 38 … … 40 40 // A bounded array can be iterated over by using a pointer to the element type. These functions 41 41 // return iterators corresponding to the first element and the one-past-the-end element, STL-style. 42 forall( type array_type,type elt_type | bounded_array( array_type, elt_type ) )42 forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) ) 43 43 elt_type *begin( array_type ); 44 44 45 forall( type array_type,type elt_type | bounded_array( array_type, elt_type ) )45 forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) ) 46 46 elt_type *end( array_type ); 47 47 -
src/examples/ato.c
r39786813 ra5a71d0 11 11 // Created On : Thu Feb 4 08:10:57 2016 12 12 // Last Modified By : Peter A. Buhr 13 // Last Modified On : Wed Feb 17 11:44:03201614 // Update Count : 4 213 // Last Modified On : Mon Feb 29 17:57:35 2016 14 // Update Count : 44 15 15 // 16 16 … … 24 24 int main( void ) { 25 25 int i = ato( "-123" ); 26 sout | i | ' ' |"-123" | endl;26 sout | i | "-123" | endl; 27 27 unsigned int ui = ato( "123" ); 28 sout | ui | ' ' |"123" | endl;28 sout | ui | "123" | endl; 29 29 long int li = ato( "-123" ); 30 sout | li | ' ' |"-123" | endl;30 sout | li | "-123" | endl; 31 31 unsigned long int uli = ato( "123" ); 32 sout | uli | ' ' |"123" | endl;32 sout | uli | "123" | endl; 33 33 long long int lli = ato( "-123" ); 34 sout | lli | ' ' |"-123" | endl;34 sout | lli | "-123" | endl; 35 35 unsigned long long int ulli = ato( "123" ); 36 sout | ulli | ' ' |"123" | endl;36 sout | ulli | "123" | endl; 37 37 float f = ato( "-123.456" ); 38 sout | f | ' ' |"-123.456" | endl;38 sout | f | "-123.456" | endl; 39 39 double d = ato( "-123.4567890123456" ); 40 sout | d | ' ' |"-123.4567890123456" | endl;40 sout | d | "-123.4567890123456" | endl; 41 41 long double ld = ato( "-123.45678901234567890123456789" ); 42 sout | ld | ' ' |"-123.45678901234567890123456789" | endl;42 sout | ld | "-123.45678901234567890123456789" | endl; 43 43 float _Complex fc = ato( "-123.456-123.456i" ); 44 sout | fc | ' ' |"-123.456-123.456i" | endl;44 sout | fc | "-123.456-123.456i" | endl; 45 45 double _Complex dc = ato( "-123.4567890123456+123.4567890123456i" ); 46 sout | dc | ' ' |"-123.4567890123456+123.4567890123456i" | endl;46 sout | dc | "-123.4567890123456+123.4567890123456i" | endl; 47 47 long double _Complex ldc = ato( "123.45678901234567890123456789-123.45678901234567890123456789i" ); 48 sout | ldc | ' ' |"123.45678901234567890123456789-123.45678901234567890123456789i" | endl;48 sout | ldc | "123.45678901234567890123456789-123.45678901234567890123456789i" | endl; 49 49 long double _Complex ldc2 = ato( "123.45678901234-123.4567890i" ); 50 sout | ldc2 | ' ' | "123.45678901234567890123456789-123.45678901234567890123456789i" | endl;50 sout | ldc2 | "123.45678901234-123.4567890i" | endl; 51 51 } // main 52 52 -
src/examples/constants.c
r39786813 ra5a71d0 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Jan 25 23:44:12201613 // Update Count : 7612 // Last Modified On : Fri Mar 11 16:27:38 2016 13 // Update Count : 81 14 14 // 15 15 … … 44 44 0x_ff_FF_ff_FF_ff_FF_ff_FF; 45 45 9_223_372_036_854_775_807; 46 18_446_744_073_709_551_615 ;46 18_446_744_073_709_551_615UL; 47 47 3.141_59f; 48 48 3.14159; … … 53 53 L'\x_ff_ee'; 54 54 L_"\x_ff_ee"; 55 L"a_b\r\ Qyc\u_00_40 x_y_z\xff_AA";56 L_"a_b\r\ Qyc\u_00_40\55 L"a_b\r\vyc\u_00_40 x_y_z\xff_AA"; 56 L_"a_b\r\vyc\u_00_40\ 57 57 x_y_z\xff_AA"; 58 58 "abc" "def" "ghi"; -
src/examples/ctxts.c
r39786813 ra5a71d0 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Ma y 27 18:11:19 201513 // Update Count : 212 // Last Modified On : Wed Mar 2 18:10:21 2016 13 // Update Count : 3 14 14 // 15 15 16 context has_f( type T ) {16 trait has_f( type T ) { 17 17 T f( T ); 18 18 }; 19 19 20 context has_g( type U | has_f( U ) ) {20 trait has_g( type U | has_f( U ) ) { 21 21 U g( U ); 22 22 }; -
src/examples/fstream_test.c
r39786813 ra5a71d0 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Feb 17 11:45:43201613 // Update Count : 4312 // Last Modified On : Sun Mar 6 20:58:29 2016 13 // Update Count : 54 14 14 // 15 15 … … 18 18 int main( void ) { 19 19 int nombre; 20 sout | "Entrez un nombre, s'il vous plaît: \n";20 sout | "Entrez un nombre, s'il vous plaît:" | endl; 21 21 sin | &nombre; 22 sout | "Vous avez entré " | nombre | " stocké à l'adresse " | &nombre | endl; 23 sout | "nombre " | nombre | " est " 24 | (nombre > 0 ? "plus grand que" : 25 nombre == 0 ? "égal à" : "moins de") 26 | " zéro" | endl; 22 sout | "Vous avez entré" | nombre | "stocké à l'adresse" | &nombre | endl; 23 sout | "nombre" | nombre | "est" 24 | (nombre > 0 ? "plus grand que" : nombre == 0 ? "égal à" : "moins de") 25 | "zéro" | endl; 27 26 28 sout | "Entrez trois nombres, s'il vous plaît: \n";27 sout | "Entrez trois nombres, s'il vous plaît: " | endl; 29 28 int i, j, k; 30 29 sin | &i | &j | &k; 31 sout | "Vous avez entré " | "i:" | i | " j:" | j | " k:" | k | endl; 32 33 sout | 3 | ' ' | 3.5 | ' ' | 'a' | ' ' | "abc" | endl; 30 sout | "Vous avez entré" | "i:" | "" | i | "j:" | "" | j | "k:" | "" | k | endl; 34 31 } 35 32 -
src/examples/hello.c
r39786813 ra5a71d0 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Feb 17 12:11:45201613 // Update Count : 812 // Last Modified On : Mon Feb 29 18:06:17 2016 13 // Update Count : 10 14 14 // 15 15 … … 17 17 18 18 int main() { 19 sout | "Bonjour au monde! \n";19 sout | "Bonjour au monde!" | endl; 20 20 } 21 21 -
src/examples/huge.c
r39786813 ra5a71d0 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed May 27 18:15:34 201513 // Update Count : 112 // Last Modified On : Tue Mar 8 22:16:32 2016 13 // Update Count : 2 14 14 // 15 15 16 int huge( int n, forall( type T ) T (*f)( T ) ) {16 int huge( int n, forall( otype T ) T (*f)( T ) ) { 17 17 if ( n <= 0 ) 18 18 return f( 0 ); -
src/examples/identity.c
r39786813 ra5a71d0 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Feb 17 12:17:32201613 // Update Count : 1 012 // Last Modified On : Tue Mar 8 22:15:08 2016 13 // Update Count : 13 14 14 // 15 15 16 16 #include <fstream> 17 17 18 forall( type T )18 forall( otype T ) 19 19 T identity( T t ) { 20 20 return t; -
src/examples/includes.c
r39786813 ra5a71d0 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Dec 21 13:54:09 201513 // Update Count : 32 212 // Last Modified On : Wed Mar 2 23:28:02 2016 13 // Update Count : 328 14 14 // 15 15 … … 43 43 #include <ctype.h> 44 44 #include <curses.h> 45 #include <demangle.h> // enum / contains "type"46 #include <dialog.h> // enum / contains "type"45 #include <demangle.h> 46 #include <dialog.h> 47 47 #include <dirent.h> 48 48 #include <dis-asm.h> … … 56 56 #include <err.h> 57 57 #include <errno.h> 58 #if 0 58 59 #include <error.h> 60 #endif 61 #include <eti.h> 62 #include <evdns.h> 63 #include <event.h> 64 #include <evhttp.h> 59 65 #if 0 60 #include <eti.h>61 #include <evdns.h> // subdirectory event2 contains "type"62 #include <event.h>63 #include <evhttp.h> // enum / subdirectory event2 contains "type"64 66 #include <evrpc.h> 65 67 #include <evutil.h> 66 68 #include <execinfo.h> 67 #include <expat.h> // enum / contains "type" and "context"69 #include <expat.h> 68 70 #include <expat_config.h> 69 71 #include <expat_external.h> … … 74 76 #include <fmtmsg.h> 75 77 #include <fnmatch.h> 76 #include <form.h> // contains "type"78 #include <form.h> 77 79 #include <fpu_control.h> 78 80 #include <fstab.h> … … 81 83 #include <ftw.h> 82 84 #include <gconv.h> 83 //#include <gcrypt.h> // enum / contains "type"85 //#include <gcrypt.h> 84 86 //#include <gcrypt-module.h> 85 87 #include <getopt.h> … … 107 109 #include <limits.h> 108 110 #include <locale.h> 109 #include <math.h> // contains "type"111 #include <math.h> 110 112 #include <ncurses.h> 111 113 #include <setjmp.h> -
src/examples/index.h
r39786813 ra5a71d0 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Ma y 27 18:17:31 201513 // Update Count : 112 // Last Modified On : Wed Mar 2 18:10:46 2016 13 // Update Count : 2 14 14 // 15 15 16 context index( type T ) {16 trait index( type T ) { 17 17 T ?+?( T, T ); 18 18 T ?-?( T, T ); -
src/examples/it_out.c
r39786813 ra5a71d0 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed May 27 18:41:23 201513 // Update Count : 412 // Last Modified On : Tue Mar 8 22:14:39 2016 13 // Update Count : 8 14 14 // 15 15 16 16 typedef unsigned long streamsize_type; 17 17 18 context ostream( dtype os_type ) {18 trait ostream( dtype os_type ) { 19 19 os_type *write( os_type *, const char *, streamsize_type ); 20 20 int fail( os_type * ); 21 21 }; 22 22 23 context writeable(type T ) {23 trait writeable( otype T ) { 24 24 forall( dtype os_type | ostream( os_type ) ) os_type * ?<<?( os_type *, T ); 25 25 }; … … 29 29 forall( dtype os_type | ostream( os_type ) ) os_type * ?<<?( os_type *, const char * ); 30 30 31 context istream( dtype is_type ) {31 trait istream( dtype is_type ) { 32 32 is_type *read( is_type *, char *, streamsize_type ); 33 33 is_type *unread( is_type *, char ); … … 36 36 }; 37 37 38 context readable(type T ) {38 trait readable( otype T ) { 39 39 forall( dtype is_type | istream( is_type ) ) is_type * ?<<?( is_type *, T ); 40 40 }; … … 43 43 forall( dtype is_type | istream( is_type ) ) is_type * ?>>?( is_type *, int* ); 44 44 45 context iterator( type iterator_type,type elt_type ) {45 trait iterator( otype iterator_type, otype elt_type ) { 46 46 iterator_type ?++( iterator_type* ); 47 47 iterator_type ++?( iterator_type* ); … … 52 52 }; 53 53 54 forall( type elt_type | writeable( elt_type ),55 type iterator_type | iterator( iterator_type, elt_type ),54 forall( otype elt_type | writeable( elt_type ), 55 otype iterator_type | iterator( iterator_type, elt_type ), 56 56 dtype os_type | ostream( os_type ) ) 57 57 void write_all( iterator_type begin, iterator_type end, os_type *os ); 58 58 59 forall( type elt_type | writeable( elt_type ),60 type iterator_type | iterator( iterator_type, elt_type ),59 forall( otype elt_type | writeable( elt_type ), 60 otype iterator_type | iterator( iterator_type, elt_type ), 61 61 dtype os_type | ostream( os_type ) ) 62 62 void write_all( elt_type begin, iterator_type end, os_type *os ) { -
src/examples/limits.c
r39786813 ra5a71d0 98 98 // Local Variables: // 99 99 // tab-width: 4 // 100 // compile-command: "cfa min.c" //100 // compile-command: "cfa limits.c" // 101 101 // End: // -
src/examples/minmax.c
r39786813 ra5a71d0 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Feb 17 12:17:53201613 // Update Count : 4 712 // Last Modified On : Mon Feb 29 23:45:16 2016 13 // Update Count : 49 14 14 // 15 15 … … 23 23 24 24 sout | "char\t\t\t" | 'z' | ' ' | 'a' | "\tmin " | min( 'z', 'a' ) | endl; 25 sout | "signed int\t\t" | 4 | ' ' | 3 | "\tmin" | min( 4, 3 ) | endl;26 sout | "unsigned int\t\t" | 4u | ' ' | 3u | "\tmin" | min( 4u, 3u ) | endl;27 sout | "signed long int\t\t" | 4l | ' ' | 3l | "\tmin" | min( 4l, 3l ) | endl;28 sout | "unsigned long int\t" | 4ul | ' ' | 3ul | "\tmin" | min( 4ul, 3ul ) | endl;29 sout | "signed long long int\t" | 4ll | ' ' | 3ll | "\tmin" | min( 4ll, 3ll ) | endl;30 sout | "unsigned long long int\t" | 4ull | ' ' | 3ull | "\tmin" | min( 4ull, 3ull ) | endl;31 sout | "float\t\t\t" | 4.0f | ' ' | 3.1f | "\tmin" | min( 4.0f, 3.1f ) | endl;32 sout | "double\t\t\t" | 4.0 | ' ' | 3.1 | "\tmin" | min( 4.0, 3.1 ) | endl;33 sout | "long double\t\t" | 4.0l | ' ' | 3.1l | "\tmin" | min( 4.0l, 3.1l ) | endl;25 sout | "signed int\t\t" | 4 | 3 | "\tmin" | min( 4, 3 ) | endl; 26 sout | "unsigned int\t\t" | 4u | 3u | "\tmin" | min( 4u, 3u ) | endl; 27 sout | "signed long int\t\t" | 4l | 3l | "\tmin" | min( 4l, 3l ) | endl; 28 sout | "unsigned long int\t" | 4ul | 3ul | "\tmin" | min( 4ul, 3ul ) | endl; 29 sout | "signed long long int\t" | 4ll | 3ll | "\tmin" | min( 4ll, 3ll ) | endl; 30 sout | "unsigned long long int\t" | 4ull | 3ull | "\tmin" | min( 4ull, 3ull ) | endl; 31 sout | "float\t\t\t" | 4.0f | 3.1f | "\tmin" | min( 4.0f, 3.1f ) | endl; 32 sout | "double\t\t\t" | 4.0 | 3.1 | "\tmin" | min( 4.0, 3.1 ) | endl; 33 sout | "long double\t\t" | 4.0l | 3.1l | "\tmin" | min( 4.0l, 3.1l ) | endl; 34 34 35 35 sout | endl; 36 36 37 37 sout | "char\t\t\t" | 'z' | ' ' | 'a' | "\tmax " | max( 'z', 'a' ) | endl; 38 sout | "signed int\t\t" | 4 | ' ' | 3 | "\tmax" | max( 4, 3 ) | endl;39 sout | "unsigned int\t\t" | 4u | ' ' | 3u | "\tmax" | max( 4u, 3u ) | endl;40 sout | "signed long int\t\t" | 4l | ' ' | 3l | "\tmax" | max( 4l, 3l ) | endl;41 sout | "unsigned long int\t" | 4ul | ' ' | 3ul | "\tmax" | max( 4ul, 3ul ) | endl;42 sout | "signed long long int\t" | 4ll | ' ' | 3ll | "\tmax" | max( 4ll, 3ll ) | endl;43 sout | "unsigned long long int\t" | 4ull | ' ' | 3ull | "\tmax" | max( 4ull, 3ull ) | endl;44 sout | "float\t\t\t" | 4.0f | ' ' | 3.1f | "\tmax" | max( 4.0f, 3.1f ) | endl;45 sout | "double\t\t\t" | 4.0 | ' ' | 3.1 | "\tmax" | max( 4.0, 3.1 ) | endl;46 sout | "long double\t\t" | 4.0l | ' ' | 3.1l | "\tmax" | max( 4.0l, 3.1l ) | endl;38 sout | "signed int\t\t" | 4 | 3 | "\tmax" | max( 4, 3 ) | endl; 39 sout | "unsigned int\t\t" | 4u | 3u | "\tmax" | max( 4u, 3u ) | endl; 40 sout | "signed long int\t\t" | 4l | 3l | "\tmax" | max( 4l, 3l ) | endl; 41 sout | "unsigned long int\t" | 4ul | 3ul | "\tmax" | max( 4ul, 3ul ) | endl; 42 sout | "signed long long int\t" | 4ll | 3ll | "\tmax" | max( 4ll, 3ll ) | endl; 43 sout | "unsigned long long int\t" | 4ull | 3ull | "\tmax" | max( 4ull, 3ull ) | endl; 44 sout | "float\t\t\t" | 4.0f | 3.1f | "\tmax" | max( 4.0f, 3.1f ) | endl; 45 sout | "double\t\t\t" | 4.0 | 3.1 | "\tmax" | max( 4.0, 3.1 ) | endl; 46 sout | "long double\t\t" | 4.0l | 3.1l | "\tmax" | max( 4.0l, 3.1l ) | endl; 47 47 } // main 48 48 -
src/examples/new.c
r39786813 ra5a71d0 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Jan 25 23:33:55201613 // Update Count : 212 // Last Modified On : Tue Mar 8 22:13:20 2016 13 // Update Count : 4 14 14 // 15 15 16 forall( type T )16 forall( otype T ) 17 17 void f( T *t ) { 18 18 t--; -
src/examples/prolog.c
r39786813 ra5a71d0 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed May 27 18:25:52 201513 // Update Count : 112 // Last Modified On : Tue Mar 8 22:09:39 2016 13 // Update Count : 5 14 14 // 15 15 16 extern "C" { extern int printf( const char *fmt, ... ); } 16 #include <fstream> 17 17 18 void printResult( int x ) { printf( "int\n" ); }19 void printResult( double x ) { printf( "double\n" ); }20 void printResult( char * x ) { printf( "char*\n" ); }18 void printResult( int x ) { sout | "int" | endl; } 19 void printResult( double x ) { sout | "double" | endl; } 20 void printResult( char * x ) { sout | "char*" | endl; } 21 21 22 22 void is_arithmetic( int x ) {} … … 25 25 void is_integer( int x ) {} 26 26 27 context ArithmeticType(type T ) {27 trait ArithmeticType( otype T ) { 28 28 void is_arithmetic( T ); 29 29 }; 30 30 31 context IntegralType(type T | ArithmeticType( T ) ) {31 trait IntegralType( otype T | ArithmeticType( T ) ) { 32 32 void is_integer( T ); 33 33 }; 34 34 35 forall( type T | IntegralType( T ) | { void printResult( T ); } )35 forall( otype T | IntegralType( T ) | { void printResult( T ); } ) 36 36 void hornclause( T param ) { 37 37 printResult( param ); -
src/examples/quad.c
r39786813 ra5a71d0 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Feb 17 12:19:24201613 // Update Count : 612 // Last Modified On : Tue Mar 8 22:07:02 2016 13 // Update Count : 8 14 14 // 15 15 16 16 #include <fstream> 17 17 18 forall( type T | { T ?*?( T, T ); } )18 forall( otype T | { T ?*?( T, T ); } ) 19 19 T square( T t ) { 20 20 return t * t; 21 21 } 22 22 23 forall( type U | { U square( U ); } )23 forall( otype U | { U square( U ); } ) 24 24 U quad( U u ) { 25 25 return square( square( u ) ); … … 28 28 int main() { 29 29 int N = 2; 30 sout | "result of quad of " | N | " is" | quad( N ) | endl;30 sout | "result of quad of" | N | "is" | quad( N ) | endl; 31 31 } 32 32 -
src/examples/random.c
r39786813 ra5a71d0 7 7 8 8 int main() { 9 rand seed( getpid() ); // set random seed9 rand48seed( getpid() ); // set random seed 10 10 11 11 // test polymorphic calls to random and stream 12 char c = rand om();12 char c = rand48(); 13 13 sout | c | endl; 14 int i = rand om();14 int i = rand48(); 15 15 sout | i | endl; 16 unsigned int ui = rand om();16 unsigned int ui = rand48(); 17 17 sout | ui | endl; 18 long int li = rand om();18 long int li = rand48(); 19 19 sout | li | endl; 20 unsigned long int uli = rand om();20 unsigned long int uli = rand48(); 21 21 sout | uli | endl; 22 float f = rand om();22 float f = rand48(); 23 23 sout | f | endl; 24 double d = rand om();24 double d = rand48(); 25 25 sout | d | endl; 26 float _Complex fc = rand om();26 float _Complex fc = rand48(); 27 27 sout | fc | endl; 28 double _Complex dc = rand om();28 double _Complex dc = rand48(); 29 29 sout | dc | endl; 30 long double _Complex ldc = rand om();30 long double _Complex ldc = rand48(); 31 31 sout | ldc | endl; 32 32 } // main -
src/examples/searchsort.c
r39786813 ra5a71d0 11 11 // Created On : Thu Feb 4 18:17:50 2016 12 12 // Last Modified By : Peter A. Buhr 13 // Last Modified On : Wed Feb 17 12:21:04201614 // Update Count : 4613 // Last Modified On : Tue Mar 22 22:16:46 2016 14 // Update Count : 55 15 15 // 16 16 … … 36 36 sout | *v | ", "; 37 37 } // for 38 sout | endl | endl; 39 40 // descending sort/search by changing < to > 41 for ( unsigned int i = 0; i < size; i += 1 ) { 42 iarr[i] = i + 1; 43 sout | iarr[i] | ", "; 44 } // for 45 sout | endl; 46 { 47 int ?<?( int x, int y ) { return x > y; } 48 qsort( iarr, size ); 49 for ( unsigned int i = 0; i < size; i += 1 ) { 50 sout | iarr[i] | ", "; 51 } // for 52 sout | endl; 53 for ( unsigned int i = 0; i < size; i += 1 ) { 54 int *v = bsearch( size - i, iarr, size ); 55 sout | *v | ", "; 56 } // for 57 } 38 58 sout | endl | endl; 39 59 -
src/examples/simplePoly.c
r39786813 ra5a71d0 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed May 27 18:31:17 201513 // Update Count : 212 // Last Modified On : Tue Mar 8 22:06:41 2016 13 // Update Count : 3 14 14 // 15 15 16 forall( type T,type U | { T f( T, U ); } )16 forall( otype T, otype U | { T f( T, U ); } ) 17 17 T q( T t, U u ) { 18 18 return f( t, u ); -
src/examples/simpler.c
r39786813 ra5a71d0 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed May 27 18:31:48 201513 // Update Count : 112 // Last Modified On : Tue Mar 8 22:06:30 2016 13 // Update Count : 2 14 14 // 15 15 16 forall( type T ) T id( T, T );16 forall( otype T ) T id( T, T ); 17 17 18 18 int main() { -
src/examples/specialize.c
r39786813 ra5a71d0 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed May 27 18:32:26 201513 // Update Count : 212 // Last Modified On : Tue Mar 8 22:06:17 2016 13 // Update Count : 3 14 14 // 15 15 … … 39 39 } 40 40 41 forall( type T ) T f( T t )41 forall( otype T ) T f( T t ) 42 42 { 43 43 printf( "in f; sizeof T is %d\n", sizeof( T ) ); -
src/examples/square.c
r39786813 ra5a71d0 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Feb 17 12:21:58 201613 // Update Count : 2 612 // Last Modified On : Tue Mar 8 22:05:48 2016 13 // Update Count : 27 14 14 // 15 15 16 16 #include <fstream> 17 17 18 forall( type T | { T ?*?( T, T ); } )18 forall( otype T | { T ?*?( T, T ); } ) 19 19 T square( T t ) { 20 20 return t * t; -
src/examples/sum.c
r39786813 ra5a71d0 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Feb 16 23:49:31201613 // Update Count : 1 8912 // Last Modified On : Fri Mar 4 15:06:47 2016 13 // Update Count : 196 14 14 // 15 15 16 16 #include <fstream> 17 17 18 context sumable(type T ) {18 trait sumable( otype T ) { 19 19 const T 0; 20 20 T ?+?( T, T ); … … 24 24 }; // sumable 25 25 26 forall( type T | sumable( T ) )26 forall( otype T | sumable( T ) ) 27 27 T sum( unsigned int n, T a[] ) { 28 28 T total = 0; // instantiate T, select 0 … … 47 47 a[i] = v; 48 48 } // for 49 sout | "sum from " | low | " to " | High | " is"50 | (int)sum( size, a ) | " , check" | (int)s | endl;49 sout | "sum from" | low | "to" | High | "is" 50 | (int)sum( size, a ) | "" | ", check" | (int)s | endl; 51 51 52 52 int s = 0, a[size], v = low; … … 55 55 a[i] = (int)v; 56 56 } // for 57 sout | "sum from " | low | " to " | High | " is"58 | sum( size, (int *)a ) | " , check" | (int)s | endl;57 sout | "sum from" | low | "to" | High | "is" 58 | sum( size, (int *)a ) | "" | ", check" | (int)s | endl; 59 59 60 60 float s = 0.0, a[size], v = low / 10.0; … … 63 63 a[i] = (float)v; 64 64 } // for 65 sout | "sum from " | low / 10.0 | " to " | High / 10.0 | " is"66 | sum( size, (float *)a ) | " , check" | (float)s | endl;65 sout | "sum from" | low / 10.0 | "to" | High / 10.0 | "is" 66 | sum( size, (float *)a ) | "" | ", check" | (float)s | endl; 67 67 68 68 double s = 0, a[size], v = low / 10.0; … … 71 71 a[i] = (double)v; 72 72 } // for 73 sout | "sum from " | low / 10.0 | " to " | High / 10.0 | " is"74 | sum( size, (double *)a ) | " , check" | (double)s | endl;73 sout | "sum from" | low / 10.0 | "to" | High / 10.0 | "is" 74 | sum( size, (double *)a ) | "" | ", check" | (double)s | endl; 75 75 76 76 struct S { int i, j; } 0 = { 0, 0 }, 1 = { 1, 1 }; … … 79 79 S ++?( S *t ) { *t += 1; return *t; } 80 80 S ?++( S *t ) { S temp = *t; *t += 1; return temp; } 81 ofstream * ?|?( ofstream * os, S v ) { return os | v.i | ' ' |v.j; }81 ofstream * ?|?( ofstream * os, S v ) { return os | v.i | v.j; } 82 82 83 83 S s = 0, a[size], v = { low, low }; … … 86 86 a[i] = (S)v; 87 87 } // for 88 sout | "sum from " | low | " to " | High | " is"89 | sum( size, (S *)a ) | " , check" | (S)s | endl;88 sout | "sum from" | low | "to" | High | "is" 89 | sum( size, (S *)a ) | "" | ", check" | (S)s | endl; 90 90 } // main 91 91 -
src/examples/swap.c
r39786813 ra5a71d0 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Feb 17 12:22:12201613 // Update Count : 6 412 // Last Modified On : Wed Mar 2 16:15:11 2016 13 // Update Count : 65 14 14 // 15 15 … … 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 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 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 68 sout | '\t' | ld1 | ' ' | ld2 | endl; -
src/examples/tests/vector_test.out.txt
r39786813 ra5a71d0 1 1 enter N elements and C-d on a separate line: 2 2 Array elements: 3 1 2 3 4 5 3 1 2 3 4 5 4 4 Array elements reversed: 5 5 4 3 2 1 5 5 4 3 2 1 -
src/examples/twice.c
r39786813 ra5a71d0 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Feb 17 12:23:25201613 // Update Count : 1 312 // Last Modified On : Tue Mar 8 22:04:58 2016 13 // Update Count : 16 14 14 // 15 15 16 16 #include <fstream> 17 17 18 forall( type T | { T ?+?( T, T ); T ?++( T * ); [T] ?+=?( T *, T ); } )18 forall( otype T | { T ?+?( T, T ); T ?++( T * ); [T] ?+=?( T *, T ); } ) 19 19 T twice( const T t ) { 20 20 return t + t; … … 27 27 char ?++( char *op ) { char temp = *op; *op += 1; return temp; } 28 28 29 sout | twice( 'a' ) | ' ' | twice( 1 ) | ' ' |twice( 3.2 ) | endl;29 sout | twice( 'a' ) | ' ' | twice( 1 ) | twice( 3.2 ) | endl; 30 30 } 31 31 -
src/libcfa/Makefile.am
r39786813 ra5a71d0 11 11 ## Created On : Sun May 31 08:54:01 2015 12 12 ## Last Modified By : Peter A. Buhr 13 ## Last Modified On : Wed Feb 3 11:19:35201614 ## Update Count : 11 713 ## Last Modified On : Wed Mar 2 22:59:23 2016 14 ## Update Count : 119 15 15 ############################################################################### 16 16 … … 63 63 libcfa_a_SOURCES = libcfa-prelude.c ${libs:=.c} 64 64 65 cheaders = bfd bfdlink demangle dialog evdns evhttp evrpc expat fcntl form gcrypt math65 cheaders = # expat 66 66 cfaheaders = limits 67 67 include_HEADERS = ${cheaders:=.h} ${libs} ${cfaheaders} -
src/libcfa/Makefile.in
r39786813 ra5a71d0 215 215 libs = stdlib iostream fstream iterator 216 216 libcfa_a_SOURCES = libcfa-prelude.c ${libs:=.c} 217 cheaders = bfd bfdlink demangle dialog evdns evhttp evrpc expat fcntl form gcrypt math217 cheaders = # expat 218 218 cfaheaders = limits 219 219 include_HEADERS = ${cheaders:=.h} ${libs} ${cfaheaders} … … 231 231 esac; \ 232 232 done; \ 233 echo ' cd $(top_srcdir) && $(AUTOMAKE) -- gnusrc/libcfa/Makefile'; \233 echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/libcfa/Makefile'; \ 234 234 $(am__cd) $(top_srcdir) && \ 235 $(AUTOMAKE) -- gnusrc/libcfa/Makefile235 $(AUTOMAKE) --foreign src/libcfa/Makefile 236 236 .PRECIOUS: Makefile 237 237 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status -
src/libcfa/builtins.cf
r39786813 ra5a71d0 390 390 int __builtin_sprintf(char *, const char *, ...); 391 391 int __builtin_sscanf(const char *, const char *, ...); 392 int __builtin_vfprintf(struct _IO_FILE *, const char *, void **);393 int __builtin_vfscanf(struct _IO_FILE *, const char *, void **);394 int __builtin_vprintf(const char *, void **);395 int __builtin_vscanf(const char *, void **);396 int __builtin_vsnprintf(char *, unsigned long, const char *, void **);397 int __builtin_vsprintf(char *, const char *, void **);398 int __builtin_vsscanf(const char *, const char *, void **);392 int __builtin_vfprintf(struct _IO_FILE *, const char *, __builtin_va_list); 393 int __builtin_vfscanf(struct _IO_FILE *, const char *, __builtin_va_list); 394 int __builtin_vprintf(const char *, __builtin_va_list); 395 int __builtin_vscanf(const char *, __builtin_va_list); 396 int __builtin_vsnprintf(char *, unsigned long, const char *, __builtin_va_list); 397 int __builtin_vsprintf(char *, const char *, __builtin_va_list); 398 int __builtin_vsscanf(const char *, const char *, __builtin_va_list); 399 399 int __builtin_isalnum(int); 400 400 int __builtin_isalpha(int); … … 534 534 void __builtin_unwind_init(); 535 535 void __builtin_update_setjmp_buf(void *, int); 536 void __builtin_va_copy( void **, void **);537 void __builtin_va_end( void **);538 void __builtin_va_start( void **, ...);536 void __builtin_va_copy(__builtin_va_list, __builtin_va_list); 537 void __builtin_va_end(__builtin_va_list); 538 void __builtin_va_start(__builtin_va_list, ...); 539 539 int __builtin_va_arg_pack(); 540 540 int __builtin_va_arg_pack_len(); … … 563 563 int __builtin___snprintf_chk(char *, unsigned long, int, unsigned long, const char *, ...); 564 564 int __builtin___sprintf_chk(char *, int, unsigned long, const char *, ...); 565 int __builtin___vsnprintf_chk(char *, unsigned long, int, unsigned long, const char *, void **);566 int __builtin___vsprintf_chk(char *, int, unsigned long, const char *, void **);565 int __builtin___vsnprintf_chk(char *, unsigned long, int, unsigned long, const char *, __builtin_va_list); 566 int __builtin___vsprintf_chk(char *, int, unsigned long, const char *, __builtin_va_list); 567 567 int __builtin___fprintf_chk(struct _IO_FILE *, int, const char *, ...); 568 568 int __builtin___printf_chk(int, const char *, ...); 569 int __builtin___vfprintf_chk(struct _IO_FILE *, int, const char *, void **);570 int __builtin___vprintf_chk(int, const char *, void **);569 int __builtin___vfprintf_chk(struct _IO_FILE *, int, const char *, __builtin_va_list); 570 int __builtin___vprintf_chk(int, const char *, __builtin_va_list); 571 571 void __cyg_profile_func_enter(void *, void *); 572 572 void __cyg_profile_func_exit(void *, void *); … … 583 583 const char * __builtin_FUNCTION(); 584 584 int __builtin_LINE(); 585 typedef void ** __builtin_va_list;586 585 extern const char *__PRETTY_FUNCTION__; 587 typedef int wchar_t; -
src/libcfa/fstream
r39786813 ra5a71d0 7 7 // fstream -- 8 8 // 9 // Author : Richard C. Bilson9 // Author : Peter A. Buhr 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Feb 17 14:02:01201613 // Update Count : 2212 // Last Modified On : Wed Mar 2 15:08:14 2016 13 // Update Count : 78 14 14 // 15 15 … … 19 19 #include "iostream" 20 20 21 // implement context ostream 22 struct ofstream ;21 enum { separateSize = 16 }; 22 struct ofstream { void *file; int separate; char separator[separateSize]; }; 23 23 24 int fail( ofstream * os ); 25 int flush( ofstream * os ); 26 void open( ofstream ** os, const char * name, const char * mode ); 27 void close( ofstream * os ); 28 ofstream * write( ofstream * os, const char * data, streamsize_type size ); 24 _Bool sepPrt( ofstream * ); 25 void sepOn( ofstream * ); 26 void sepOff( ofstream * ); 27 void sepSet( ofstream *, const char * ); 28 const char * sepGet( ofstream * ); 29 void sepDisable( ofstream * ); 30 void sepEnable( ofstream * ); 31 int fail( ofstream * ); 32 int flush( ofstream * ); 33 void open( ofstream *, const char * name, const char * mode ); 34 void close( ofstream * ); 35 ofstream * write( ofstream *, const char * data, unsigned long int size ); 36 int prtfmt( ofstream *, const char fmt[], ... ); 29 37 30 38 extern ofstream * sout, * serr; 31 39 32 40 // implement context istream 33 struct ifstream ;41 struct ifstream { void *file; }; 34 42 35 43 int fail( ifstream * is ); 36 44 int eof( ifstream * is ); 37 void open( ifstream * *is, const char * name, const char * mode );45 void open( ifstream * is, const char * name, const char * mode ); 38 46 void close( ifstream * is ); 39 ifstream * get( ifstream * is, int * data ); 40 ifstream * read( ifstream * is, char * data, streamsize_type size ); 47 ifstream * read( ifstream * is, char * data, unsigned long int size ); 41 48 ifstream * ungetc( ifstream * is, char c ); 49 int scanfmt( ifstream *, const char fmt[], ... ); 42 50 43 51 extern ifstream *sin; … … 49 57 // tab-width: 4 // 50 58 // End: // 59 -
src/libcfa/fstream.c
r39786813 ra5a71d0 7 7 // fstream.c -- 8 8 // 9 // Author : Richard C. Bilson9 // Author : Peter A. Buhr 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Feb 17 14:03:05201613 // Update Count : 7612 // Last Modified On : Mon Feb 29 18:41:10 2016 13 // Update Count : 162 14 14 // 15 15 … … 17 17 18 18 extern "C" { 19 #include <stdio.h> 20 #include <stdlib.h> 19 #include <stdio.h> // vfprintf, vfscanf 20 #include <stdlib.h> // exit 21 #include <stdarg.h> // varargs 22 #include <string.h> // strlen 23 #include <float.h> // DBL_DIG, LDBL_DIG 24 #include <complex.h> // creal, cimag 21 25 } 22 23 struct ofstream {24 FILE *file;25 };26 26 27 27 #define IO_MSG "I/O error " 28 28 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; } 32 void sepSet( ofstream * os, const char * s ) { 33 strncpy( &(os->separator[0]), s, separateSize - 1 ); 34 os->separator[separateSize - 1] = '\0'; 35 } // sepSet 36 const char * sepGet( ofstream * os ) { return &(os->separator[0]); } 37 void sepDisable( ofstream *os ) { os->separate = 2; } 38 void sepEnable( ofstream *os ) { os->separate = 0; } 39 29 40 int fail( ofstream * os ) { 30 return ferror( os->file);41 return ferror( (FILE *)(os->file) ); 31 42 } // fail 32 43 33 44 int flush( ofstream * os ) { 34 return fflush( os->file);45 return fflush( (FILE *)(os->file) ); 35 46 } // flush 36 47 37 void open( ofstream * *os, const char * name, const char * mode ) {38 FILE * t= fopen( name, mode );39 if ( t == 0 ) {// do not change unless successful48 void open( ofstream * os, const char * name, const char * mode ) { 49 FILE *file = fopen( name, mode ); 50 if ( file == 0 ) { // do not change unless successful 40 51 perror( IO_MSG "open output" ); 41 52 exit( EXIT_FAILURE ); 42 53 } // if 43 (*os)->file = t; 54 os->file = file; 55 sepOff( os ); 56 sepSet( os, " " ); 44 57 } // open 45 58 46 59 void close( ofstream * os ) { 47 if ( os->file == stdout || os->file== stderr ) return;60 if ( (FILE *)(os->file) == stdout || (FILE *)(os->file) == stderr ) return; 48 61 49 if ( fclose( os->file) == EOF ) {62 if ( fclose( (FILE *)(os->file) ) == EOF ) { 50 63 perror( IO_MSG "close output" ); 51 64 } // if 52 65 } // close 53 66 54 ofstream * write( ofstream * os, const char * data, streamsize_typesize ) {67 ofstream * write( ofstream * os, const char * data, unsigned long int size ) { 55 68 if ( fail( os ) ) { 56 69 fprintf( stderr, "attempt write I/O on failed stream\n" ); … … 58 71 } // if 59 72 60 if ( fwrite( data, 1, size, os->file) != size ) {73 if ( fwrite( data, 1, size, (FILE *)(os->file) ) != size ) { 61 74 perror( IO_MSG "write" ); 62 75 exit( EXIT_FAILURE ); … … 65 78 } // write 66 79 67 static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_) }; 80 int prtfmt( ofstream * os, const char fmt[], ... ) { 81 va_list args; 82 83 va_start( args, fmt ); 84 int len = vfprintf( (FILE *)(os->file), fmt, args ); 85 if ( len == EOF ) { 86 if ( ferror( (FILE *)(os->file) ) ) { 87 fprintf( stderr, "invalid write\n" ); 88 exit( EXIT_FAILURE ); 89 } // if 90 } // if 91 va_end( args ); 92 return len; 93 } // prtfmt 94 95 96 static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_), 0, { ' ', '\0' } }; 68 97 ofstream *sout = &soutFile; 69 static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_) };98 static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_), 0, { ' ', '\0' } }; 70 99 ofstream *serr = &serrFile; 100 71 101 72 102 //--------------------------------------- 73 103 74 struct ifstream {75 FILE *file;76 };77 104 78 105 int fail( ifstream * is ) { 79 return ferror( is->file);106 return ferror( (FILE *)(is->file) ); 80 107 } // fail 81 108 82 109 int eof( ifstream * is ) { 83 return feof( is->file);110 return feof( (FILE *)(is->file) ); 84 111 } // eof 85 112 86 ifstream * get( ifstream * is, int * data ) { 87 if ( fscanf( is->file, "%d", data ) == EOF ) { 88 if ( ferror( is->file ) ) { 89 fprintf( stderr, "invalid int read\n" ); 90 exit( EXIT_FAILURE ); 91 } // if 113 void open( ifstream * is, const char * name, const char * mode ) { 114 FILE *t = fopen( name, mode ); 115 if ( t == 0 ) { // do not change unless successful 116 perror( IO_MSG "open input" ); 117 exit( EXIT_FAILURE ); 92 118 } // if 93 return is;94 } // read119 is->file = t; 120 } // open 95 121 96 ifstream * read( ifstream * is, char * data, streamsize_type size ) { 122 void close( ifstream * is ) { 123 if ( (FILE *)(is->file) == stdin ) return; 124 125 if ( fclose( (FILE *)(is->file) ) == EOF ) { 126 perror( IO_MSG "close input" ); 127 } // if 128 } // close 129 130 ifstream * read( ifstream * is, char * data, unsigned long int size ) { 97 131 if ( fail( is ) ) { 98 132 fprintf( stderr, "attempt read I/O on failed stream\n" ); … … 100 134 } // if 101 135 102 if ( fread( data, size, 1, is->file) == 0 ) {136 if ( fread( data, size, 1, (FILE *)(is->file) ) == 0 ) { 103 137 perror( IO_MSG "read" ); 104 138 exit( EXIT_FAILURE ); … … 113 147 } // if 114 148 115 if ( ungetc( c, is->file) == EOF ) {149 if ( ungetc( c, (FILE *)(is->file) ) == EOF ) { 116 150 perror( IO_MSG "ungetc" ); 117 151 exit( EXIT_FAILURE ); … … 120 154 } // ungetc 121 155 122 void open( ifstream ** is, const char * name, const char * mode ) { 123 FILE *t = fopen( name, mode ); 124 if ( t == 0 ) { // do not change unless successful 125 perror( IO_MSG "open input" ); 126 exit( EXIT_FAILURE ); 156 int scanfmt( ifstream * is, const char fmt[], ... ) { 157 va_list args; 158 159 va_start( args, fmt ); 160 int len = vfscanf( (FILE *)(is->file), fmt, args ); 161 if ( len == EOF ) { 162 if ( ferror( (FILE *)(is->file) ) ) { 163 fprintf( stderr, "invalid read\n" ); 164 exit( EXIT_FAILURE ); 165 } // if 127 166 } // if 128 (*is)->file = t; 129 } // open 167 va_end( args ); 168 return len; 169 } // prtfmt 130 170 131 void close( ifstream * is ) {132 if ( is->file == stdin ) return;133 134 if ( fclose( is->file ) == EOF ) {135 perror( IO_MSG "close input" );136 } // if137 } // close138 171 139 172 static ifstream sinFile = { (FILE *)(&_IO_2_1_stdin_) }; -
src/libcfa/iostream
r39786813 ra5a71d0 7 7 // iostream -- 8 8 // 9 // Author : Richard C. Bilson9 // Author : Peter A. Buhr 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Feb 17 14:04:24201613 // Update Count : 3212 // Last Modified On : Wed Mar 2 18:05:27 2016 13 // Update Count : 85 14 14 // 15 15 16 #ifndef IOSTREAM_H17 #define IOSTREAM_H16 #ifndef __IOSTREAM_H__ 17 #define __IOSTREAM_H__ 18 18 19 19 #include "iterator" 20 20 21 typedef unsigned long streamsize_type; 22 23 context ostream( dtype ostype ) { 21 trait ostream( dtype ostype ) { 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 * ); 24 29 int fail( ostype * ); 25 30 int flush( ostype * ); 26 ostype * write( ostype *, const char *, streamsize_type ); 31 void open( ostype * os, const char * name, const char * mode ); 32 void close( ostype * os ); 33 ostype * write( ostype *, const char *, unsigned long int ); 34 int prtfmt( ostype *, const char fmt[], ... ); 27 35 }; 28 context writeable( type T ) { 36 37 trait writeable( otype T ) { 29 38 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, T ); 30 39 }; … … 33 42 34 43 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, char ); 44 45 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, short int ); 46 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned short int ); 35 47 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, int ); 36 48 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned int ); … … 39 51 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned long int ); 40 52 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned long long int ); 53 41 54 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, float ); // FIX ME: should not be required 42 55 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, double ); 43 56 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, long double ); 57 44 58 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, float _Complex ); 45 59 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, double _Complex ); 46 60 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, long double _Complex ); 61 47 62 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const char * ); 48 63 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const void * ); 49 64 50 forall( dtype ostype , dtype retostype | ostream( ostype ) | ostream( retostype ) ) retostype * ?|?( ostype *os, retostype * (* manip)(ostype*) );65 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, ostype * (*)( ostype * ) ); 51 66 forall( dtype ostype | ostream( ostype ) ) ostype * endl( ostype * ); 67 forall( dtype ostype | ostream( ostype ) ) ostype * sepOn( ostype * ); 68 forall( dtype ostype | ostream( ostype ) ) ostype * sepOff( ostype * ); 52 69 53 70 // writes the range [begin, end) to the given stream 54 forall( type elt_type | writeable( elt_type ),type iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )71 forall( otype elt_type | writeable( elt_type ), otype iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) ) 55 72 void write( iterator_type begin, iterator_type end, os_type *os ); 56 73 57 forall( type elt_type | writeable( elt_type ),type iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )74 forall( otype elt_type | writeable( elt_type ), otype iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) ) 58 75 void write_reverse( iterator_type begin, iterator_type end, os_type *os ); 59 76 60 77 //--------------------------------------- 61 78 62 context istream( dtype istype ) {79 trait istream( dtype istype ) { 63 80 int fail( istype * ); 64 81 int eof( istype * ); 65 istype * get( istype *, int * ); 66 istype * read( istype *, char *, streamsize_type ); 82 void open( istype * is, const char * name, const char * mode ); 83 void close( istype * is ); 84 istype * read( istype *, char *, unsigned long int ); 67 85 istype * ungetc( istype *, char ); 86 int scanfmt( istype *, const char fmt[], ... ); 68 87 }; 69 88 70 context readable(type T ) {89 trait readable( otype T ) { 71 90 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, T ); 72 91 }; 73 92 74 forall( dtype istype | istream( istype ) ) 75 istype * ?|?( istype *, char * ); 93 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, char * ); 76 94 77 forall( dtype istype | istream( istype ) ) 78 istype * ?|?( istype *, int * ); 95 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, short int * ); 96 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned short int * ); 97 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, int * ); 98 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned int * ); 99 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long int * ); 100 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long long int * ); 101 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned long int * ); 102 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned long long int * ); 79 103 80 #endif // IOSTREAM_H 104 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, float * ); 105 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, double * ); 106 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long double * ); 107 108 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, float _Complex * ); 109 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, double _Complex * ); 110 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long double _Complex * ); 111 112 struct _Istream_str1 { char * s; }; 113 _Istream_str1 str( char * ); 114 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_str1 ); 115 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 ); 119 120 #endif // __IOSTREAM_H__ 81 121 82 122 // Local Variables: // -
src/libcfa/iostream.c
r39786813 ra5a71d0 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // iostream.c -- 8 // 9 // Author : Richard C. Bilson7 // iostream.c -- 8 // 9 // Author : Peter A. Buhr 10 10 // Created On : Wed May 27 17:56:53 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Wed Feb 17 14:19:56201613 // Update Count : 7611 // Last Modified By : Rob Schluntz 12 // Last Modified On : Wed Apr 06 14:42:52 2016 13 // Update Count : 227 14 14 // 15 15 … … 21 21 #include <float.h> // DBL_DIG, LDBL_DIG 22 22 #include <complex.h> // creal, cimag 23 #include <ctype.h> // isspace, ispunct 23 24 } 24 25 25 26 forall( dtype ostype | ostream( ostype ) ) 26 27 ostype * ?|?( ostype *os, char c ) { 27 return write( os, &c, 1 ); 28 prtfmt( os, "%c", c ); 29 return os; 30 } // ?|? 31 32 forall( dtype ostype | ostream( ostype ) ) 33 ostype * ?|?( ostype *os, short int si ) { 34 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 35 prtfmt( os, "%hd", si ); 36 return os; 37 } // ?|? 38 39 forall( dtype ostype | ostream( ostype ) ) 40 ostype * ?|?( ostype *os, unsigned short int usi ) { 41 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 42 prtfmt( os, "%hu", usi ); 43 return os; 28 44 } // ?|? 29 45 30 46 forall( dtype ostype | ostream( ostype ) ) 31 47 ostype * ?|?( ostype *os, int i ) { 32 char buffer[32]; 33 return write( os, buffer, sprintf( buffer, "%d", i ) ); 34 } // ?|? 35 36 forall( dtype ostype | ostream( ostype ) ) 37 ostype * ?|?( ostype *os, unsigned int i ) { 38 char buffer[32]; 39 return write( os, buffer, sprintf( buffer, "%u", i ) ); 40 } // ?|? 41 42 forall( dtype ostype | ostream( ostype ) ) 43 ostype * ?|?( ostype *os, long int i ) { 44 char buffer[32]; 45 return write( os, buffer, sprintf( buffer, "%ld", i ) ); 46 } // ?|? 47 48 forall( dtype ostype | ostream( ostype ) ) 49 ostype * ?|?( ostype *os, long long int i ) { 50 char buffer[32]; 51 return write( os, buffer, sprintf( buffer, "%lld", i ) ); 52 } // ?|? 53 54 forall( dtype ostype | ostream( ostype ) ) 55 ostype * ?|?( ostype *os, unsigned long int i ) { 56 char buffer[32]; 57 return write( os, buffer, sprintf( buffer, "%lu", i ) ); 58 } // ?|? 59 60 forall( dtype ostype | ostream( ostype ) ) 61 ostype * ?|?( ostype *os, unsigned long long int i ) { 62 char buffer[32]; 63 return write( os, buffer, sprintf( buffer, "%llu", i ) ); 48 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 49 prtfmt( os, "%d", i ); 50 return os; 51 } // ?|? 52 53 forall( dtype ostype | ostream( ostype ) ) 54 ostype * ?|?( ostype *os, unsigned int ui ) { 55 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 56 prtfmt( os, "%u", ui ); 57 return os; 58 } // ?|? 59 60 forall( dtype ostype | ostream( ostype ) ) 61 ostype * ?|?( ostype *os, long int li ) { 62 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 63 prtfmt( os, "%ld", li ); 64 return os; 65 } // ?|? 66 67 forall( dtype ostype | ostream( ostype ) ) 68 ostype * ?|?( ostype *os, unsigned long int uli ) { 69 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 70 prtfmt( os, "%lu", uli ); 71 return os; 72 } // ?|? 73 74 forall( dtype ostype | ostream( ostype ) ) 75 ostype * ?|?( ostype *os, long long int lli ) { 76 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 77 prtfmt( os, "%lld", lli ); 78 return os; 79 } // ?|? 80 81 forall( dtype ostype | ostream( ostype ) ) 82 ostype * ?|?( ostype *os, unsigned long long int ulli ) { 83 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 84 prtfmt( os, "%llu", ulli ); 85 return os; 64 86 } // ?|? 65 87 66 88 forall( dtype ostype | ostream( ostype ) ) 67 89 ostype * ?|?( ostype *os, float f ) { 68 char buffer[32]; 69 return write( os, buffer, sprintf( buffer, "%g", f ) ); 90 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 91 prtfmt( os, "%g", f ); 92 return os; 70 93 } // ?|? 71 94 72 95 forall( dtype ostype | ostream( ostype ) ) 73 96 ostype * ?|?( ostype *os, double d ) { 74 char buffer[32]; 75 return write( os, buffer, sprintf( buffer, "%.*lg", DBL_DIG, d ) ); 76 } // ?|? 77 78 forall( dtype ostype | ostream( ostype ) ) 79 ostype * ?|?( ostype *os, long double d ) { 80 char buffer[32]; 81 return write( os, buffer, sprintf( buffer, "%.*Lg", LDBL_DIG, d ) ); 82 } // ?|? 83 84 forall( dtype ostype | ostream( ostype ) ) 85 ostype * ?|?( ostype *os, float _Complex c ) { 86 return os | crealf( c ) | (cimagf( c ) < 0 ? "" : "+") | cimagf( c ) | 'i'; 87 } // ?|? 88 89 forall( dtype ostype | ostream( ostype ) ) 90 ostype * ?|?( ostype *os, double _Complex c ) { 91 return os | creal( c ) | (cimag( c ) < 0 ? "" : "+") | cimag( c ) | 'i'; 92 } // ?|? 93 94 forall( dtype ostype | ostream( ostype ) ) 95 ostype * ?|?( ostype *os, long double _Complex c ) { 96 return os | creall( c ) | (cimagl( c ) < 0 ? "" : "+") | cimagl( c ) | 'i'; 97 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 98 prtfmt( os, "%.*lg", DBL_DIG, d ); 99 return os; 100 } // ?|? 101 102 forall( dtype ostype | ostream( ostype ) ) 103 ostype * ?|?( ostype *os, long double ld ) { 104 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 105 prtfmt( os, "%.*Lg", LDBL_DIG, ld ); 106 return os; 107 } // ?|? 108 109 forall( dtype ostype | ostream( ostype ) ) 110 ostype * ?|?( ostype *os, float _Complex fc ) { 111 os | crealf( fc ); 112 if ( cimagf( fc ) >= 0 ) os | '+'; 113 os | "" | cimagf( fc ) | 'i'; 114 return os; 115 } // ?|? 116 117 forall( dtype ostype | ostream( ostype ) ) 118 ostype * ?|?( ostype *os, double _Complex dc ) { 119 os | creal( dc ); 120 if ( cimag( dc ) >= 0 ) os | '+'; 121 os | "" | cimag( dc ) | 'i'; 122 return os; 123 } // ?|? 124 125 forall( dtype ostype | ostream( ostype ) ) 126 ostype * ?|?( ostype *os, long double _Complex ldc ) { 127 os | creall( ldc ); 128 if ( cimagl( ldc ) >= 0 ) os | '+'; 129 os | "" | cimagl( ldc ) | 'i'; 130 return os; 131 } // ?|? 132 133 forall( dtype ostype | ostream( ostype ) ) 134 ostype * ?|?( ostype *os, const char *cp ) { 135 enum { Open = 1, Close, OpenClose }; 136 static const char mask[256] = { 137 // opening delimiters 138 ['('] : Open, ['['] : Open, ['{'] : Open, 139 ['$'] : Open, [L'£'] : Open, [L'¥'] : Open, [L'¢'] : Open, [L'¿'] : Open, [L'«'] : Open, 140 // closing delimiters 141 [','] : Close, ['.'] : Close, [':'] : Close, [';'] : Close, ['!'] : Close, ['?'] : Close, 142 [')'] : Close, [']'] : Close, ['}'] : Close, 143 ['%'] : Close, [L'»'] : Close, 144 // opening-closing delimiters 145 ['\''] : OpenClose, ['`'] : OpenClose, ['"'] : OpenClose, 146 }; // mask 147 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 ) { 153 prtfmt( os, "%s", sepGet( os ) ); 154 } // if 155 // last character IS spacing or opening punctuation => turn off separator for next item 156 unsigned int posn = len - 1; 157 if ( isspace( cp[posn] ) || mask[ cp[posn] ] == Open || mask[ cp[posn] ] == OpenClose ) { 158 sepOff( os ); 159 } else { 160 sepOn( os ); 161 } // if 162 return write( os, cp, len ); 97 163 } // ?|? 98 164 99 165 forall( dtype ostype | ostream( ostype ) ) 100 166 ostype * ?|?( ostype *os, const void *p ) { 101 char buffer[32]; 102 return write( os, buffer, sprintf( buffer, "%p", p ) ); 103 } // ?|? 104 105 forall( dtype ostype | ostream( ostype ) ) 106 ostype * ?|?( ostype *os, const char *cp ) { 107 return write( os, cp, strlen( cp ) ); 108 } // ?|? 109 110 111 forall( dtype ostype, dtype retostype | ostream( ostype ) | ostream( retostype ) ) 112 retostype * ?|?( ostype *os, retostype * (*manip)(ostype*) ) { 113 return manip( os ); 114 } 115 116 forall( dtype ostype | ostream( ostype ) ) 167 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 168 prtfmt( os, "%p", p ); 169 return os; 170 } // ?|? 171 172 173 forall( dtype ostype | ostream( ostype ) ) 174 ostype * ?|?( ostype *os, ostype * (* manip)( ostype * ) ) { 175 return manip( os ); 176 } // ?|? 177 178 forall( dtype ostype | ostream( ostype ) ) 117 179 ostype * endl( ostype * os ) { 118 os | "\n";180 os | '\n'; 119 181 flush( os ); 182 sepOff( os ); 120 183 return os; 121 184 } // endl 122 185 186 forall( dtype ostype | ostream( ostype ) ) 187 ostype * sepOn( ostype * os ) { 188 sepOn( os ); 189 return os; 190 } // sepOn 191 192 forall( dtype ostype | ostream( ostype ) ) 193 ostype * sepOff( ostype * os ) { 194 sepOff( os ); 195 return os; 196 } // sepOff 197 123 198 //--------------------------------------- 124 199 125 forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ), 126 dtype os_type | ostream( os_type ) ) 127 void write( iterator_type begin, iterator_type end, os_type *os ) { 128 void print( elt_type i ) { os | i | ' '; } 200 forall( otype elttype | writeable( elttype ), otype iteratortype | iterator( iteratortype, elttype ), dtype ostype | ostream( ostype ) ) 201 void write( iteratortype begin, iteratortype end, ostype *os ) { 202 void print( elttype i ) { os | i; } 129 203 for_each( begin, end, print ); 130 204 } // ?|? 131 205 132 forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ), 133 dtype os_type | ostream( os_type ) ) 134 void write_reverse( iterator_type begin, iterator_type end, os_type *os ) { 135 void print( elt_type i ) { os | i | ' '; } 206 forall( otype elttype | writeable( elttype ), otype iteratortype | iterator( iteratortype, elttype ), dtype ostype | ostream( ostype ) ) 207 void write_reverse( iteratortype begin, iteratortype end, ostype *os ) { 208 void print( elttype i ) { os | i; } 136 209 for_each_reverse( begin, end, print ); 137 210 } // ?|? … … 140 213 141 214 forall( dtype istype | istream( istype ) ) 142 istype * ?|?( istype *is, char *cp ) { 143 return read( is, cp, 1 ); 144 } // ?|? 145 146 forall( dtype istype | istream( istype ) ) 147 istype * ?|?( istype *is, int *ip ) { 148 return get( is, ip ); 149 } // ?|? 215 istype * ?|?( istype * is, char * c ) { 216 scanfmt( is, "%c", c ); 217 return is; 218 } // ?|? 219 220 forall( dtype istype | istream( istype ) ) 221 istype * ?|?( istype * is, short int * si ) { 222 scanfmt( is, "%hd", si ); 223 return is; 224 } // ?|? 225 226 forall( dtype istype | istream( istype ) ) 227 istype * ?|?( istype * is, unsigned short int * usi ) { 228 scanfmt( is, "%hu", usi ); 229 return is; 230 } // ?|? 231 232 forall( dtype istype | istream( istype ) ) 233 istype * ?|?( istype * is, int * i ) { 234 scanfmt( is, "%d", i ); 235 return is; 236 } // ?|? 237 238 forall( dtype istype | istream( istype ) ) 239 istype * ?|?( istype * is, unsigned int * ui ) { 240 scanfmt( is, "%u", ui ); 241 return is; 242 } // ?|? 243 244 forall( dtype istype | istream( istype ) ) 245 istype * ?|?( istype * is, long int * li ) { 246 scanfmt( is, "%ld", li ); 247 return is; 248 } // ?|? 249 250 forall( dtype istype | istream( istype ) ) 251 istype * ?|?( istype * is, unsigned long int * ulli ) { 252 scanfmt( is, "%lu", ulli ); 253 return is; 254 } // ?|? 255 256 forall( dtype istype | istream( istype ) ) 257 istype * ?|?( istype * is, long long int * lli ) { 258 scanfmt( is, "%lld", lli ); 259 return is; 260 } // ?|? 261 262 forall( dtype istype | istream( istype ) ) 263 istype * ?|?( istype * is, unsigned long long int * ulli ) { 264 scanfmt( is, "%llu", ulli ); 265 return is; 266 } // ?|? 267 268 269 forall( dtype istype | istream( istype ) ) 270 istype * ?|?( istype * is, float * f ) { 271 scanfmt( is, "%f", f ); 272 return is; 273 } // ?|? 274 275 forall( dtype istype | istream( istype ) ) 276 istype * ?|?( istype * is, double * d ) { 277 scanfmt( is, "%lf", d ); 278 return is; 279 } // ?|? 280 281 forall( dtype istype | istream( istype ) ) 282 istype * ?|?( istype * is, long double * ld ) { 283 scanfmt( is, "%Lf", ld ); 284 return is; 285 } // ?|? 286 287 288 forall( dtype istype | istream( istype ) ) 289 istype * ?|?( istype * is, float _Complex * fc ) { 290 float re, im; 291 scanfmt( is, "%g%gi", &re, &im ); 292 *fc = re + im * _Complex_I; 293 return is; 294 } // ?|? 295 296 forall( dtype istype | istream( istype ) ) 297 istype * ?|?( istype * is, double _Complex * dc ) { 298 double re, im; 299 scanfmt( is, "%lf%lfi", &re, &im ); 300 *dc = re + im * _Complex_I; 301 return is; 302 } // ?|? 303 304 forall( dtype istype | istream( istype ) ) 305 istype * ?|?( istype * is, long double _Complex * ldc ) { 306 long double re, im; 307 scanfmt( is, "%Lf%Lfi", &re, &im ); 308 *ldc = re + im * _Complex_I; 309 return is; 310 } // ?|? 311 312 _Istream_str1 str( char * str ) { _Istream_str1 s = { str }; 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 * str, int size ) { _Istream_str2 s = { str, size }; return s; } 320 forall( dtype istype | istream( istype ) ) 321 istype * ?|?( istype * is, _Istream_str2 str ) { 322 char buf[16]; 323 sprintf( buf, "%%%ds", str.size ); 324 scanfmt( is, buf, str.s ); 325 return is; 326 } // str 150 327 151 328 // Local Variables: // -
src/libcfa/iterator
r39786813 ra5a71d0 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Jan 27 23:49:13201613 // Update Count : 712 // Last Modified On : Wed Mar 2 18:06:05 2016 13 // Update Count : 9 14 14 // 15 15 … … 18 18 19 19 // An iterator can be used to traverse a data structure. 20 context iterator( type iterator_type,type elt_type ) {20 trait iterator( otype iterator_type, otype elt_type ) { 21 21 // point to the next element 22 22 // iterator_type ?++( iterator_type * ); … … 32 32 }; 33 33 34 context iterator_for( type iterator_type, type collection_type,type elt_type | iterator( iterator_type, elt_type ) ) {34 trait iterator_for( otype iterator_type, otype collection_type, otype elt_type | iterator( iterator_type, elt_type ) ) { 35 35 // [ iterator_type begin, iterator_type end ] get_iterators( collection_type ); 36 36 iterator_type begin( collection_type ); … … 38 38 }; 39 39 40 forall( type iterator_type,type elt_type | iterator( iterator_type, elt_type ) )40 forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) ) 41 41 void for_each( iterator_type begin, iterator_type end, void (*func)( elt_type ) ); 42 42 43 forall( type iterator_type,type elt_type | iterator( iterator_type, elt_type ) )43 forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) ) 44 44 void for_each_reverse( iterator_type begin, iterator_type end, void (*func)( elt_type ) ); 45 45 -
src/libcfa/iterator.c
r39786813 ra5a71d0 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Jan 26 17:16:07201613 // Update Count : 2 612 // Last Modified On : Wed Mar 2 18:08:11 2016 13 // Update Count : 27 14 14 // 15 15 16 16 #include "iterator" 17 17 18 forall( type iterator_type,type elt_type | iterator( iterator_type, elt_type ) )18 forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) ) 19 19 void for_each( iterator_type begin, iterator_type end, void (*func)( elt_type ) ) { 20 20 for ( iterator_type i = begin; i != end; ++i ) { … … 23 23 } 24 24 25 forall( type iterator_type,type elt_type | iterator( iterator_type, elt_type ) )25 forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) ) 26 26 void for_each_reverse( iterator_type begin, iterator_type end, void (*func)( elt_type ) ) { 27 27 for ( iterator_type i = end; i != begin; ) { -
src/libcfa/prelude.cf
r39786813 ra5a71d0 1 # 2 "prelude.cf" // needed for error messages from this file 1 2 // -*- Mode: C -*- 2 3 // … … 8 9 // Created On : Sat Nov 29 07:23:41 2014 9 10 // Last Modified By : Peter A. Buhr 10 // Last Modified On : Mon Jan 4 11:13:26201611 // Update Count : 8 111 // Last Modified On : Wed Mar 2 18:03:41 2016 12 // Update Count : 89 12 13 // 13 14 … … 63 64 long double _Complex ?--( long double _Complex * ), ?--( volatile long double _Complex * ); 64 65 65 forall( type T ) T * ?++( T ** );66 forall( type T ) const T * ?++( const T ** );67 forall( type T ) volatile T * ?++( volatile T ** );68 forall( type T ) const volatile T * ?++( const volatile T ** );69 forall( type T ) T * ?--( T ** );70 forall( type T ) const T * ?--( const T ** );71 forall( type T ) volatile T * ?--( volatile T ** );72 forall( type T ) const volatile T * ?--( const volatile T ** );73 74 forall( type T ) lvalue T ?[?]( T *, ptrdiff_t );75 forall( type T ) const lvalue T?[?]( const T *, ptrdiff_t );76 forall( type T ) volatile lvalue T ?[?]( volatile T *, ptrdiff_t );77 forall( type T ) const volatile lvalue T ?[?]( const volatile T *, ptrdiff_t );78 forall( type T ) lvalue T ?[?]( ptrdiff_t, T * );79 forall( type T ) const lvalue T?[?]( ptrdiff_t, const T * );80 forall( type T ) volatile lvalue T ?[?]( ptrdiff_t, volatile T * );81 forall( type T ) const volatile lvalue T ?[?]( ptrdiff_t, const volatile T * );66 forall( otype T ) T * ?++( T ** ); 67 forall( otype T ) const T * ?++( const T ** ); 68 forall( otype T ) volatile T * ?++( volatile T ** ); 69 forall( otype T ) const volatile T * ?++( const volatile T ** ); 70 forall( otype T ) T * ?--( T ** ); 71 forall( otype T ) const T * ?--( const T ** ); 72 forall( otype T ) volatile T * ?--( volatile T ** ); 73 forall( otype T ) const volatile T * ?--( const volatile T ** ); 74 75 forall( otype T ) lvalue T ?[?]( T *, ptrdiff_t ); 76 forall( otype T ) const lvalue T ?[?]( const T *, ptrdiff_t ); 77 forall( otype T ) volatile lvalue T ?[?]( volatile T *, ptrdiff_t ); 78 forall( otype T ) const volatile lvalue T ?[?]( const volatile T *, ptrdiff_t ); 79 forall( otype T ) lvalue T ?[?]( ptrdiff_t, T * ); 80 forall( otype T ) const lvalue T ?[?]( ptrdiff_t, const T * ); 81 forall( otype T ) volatile lvalue T ?[?]( ptrdiff_t, volatile T * ); 82 forall( otype T ) const volatile lvalue T ?[?]( ptrdiff_t, const volatile T * ); 82 83 83 84 // ------------------------------------------------------------ … … 101 102 long double _Complex ++?( long double _Complex * ), --?( long double _Complex * ); 102 103 103 forall( type T ) T * ++?( T ** );104 forall( type T ) const T * ++?( const T ** );105 forall( type T ) volatile T * ++?( volatile T ** );106 forall( type T ) const volatile T * ++?( const volatile T ** );107 forall( type T ) T * --?( T ** );108 forall( type T ) const T * --?( const T ** );109 forall( type T ) volatile T * --?( volatile T ** );110 forall( type T ) const volatile T * --?( const volatile T ** );111 112 forall( type T ) lvalue T *?( T * );113 forall( type T ) const lvalue T *?( const T * );114 forall( type T ) volatile lvalue T *?( volatile T * );115 forall( type T ) const volatile lvalue T *?( const volatile T * );104 forall( otype T ) T * ++?( T ** ); 105 forall( otype T ) const T * ++?( const T ** ); 106 forall( otype T ) volatile T * ++?( volatile T ** ); 107 forall( otype T ) const volatile T * ++?( const volatile T ** ); 108 forall( otype T ) T * --?( T ** ); 109 forall( otype T ) const T * --?( const T ** ); 110 forall( otype T ) volatile T * --?( volatile T ** ); 111 forall( otype T ) const volatile T * --?( const volatile T ** ); 112 113 forall( otype T ) lvalue T *?( T * ); 114 forall( otype T ) const lvalue T *?( const T * ); 115 forall( otype T ) volatile lvalue T *?( volatile T * ); 116 forall( otype T ) const volatile lvalue T *?( const volatile T * ); 116 117 forall( ftype FT ) lvalue FT *?( FT * ); 117 118 … … 183 184 long double _Complex ?+?( long double _Complex, long double _Complex ), ?-?( long double _Complex, long double _Complex ); 184 185 185 forall( type T ) T * ?+?( T *, ptrdiff_t );186 forall( type T ) T * ?+?( ptrdiff_t, T * );187 forall( type T ) const T * ?+?( const T *, ptrdiff_t );188 forall( type T ) const T * ?+?( ptrdiff_t, const T * );189 forall( type T ) volatile T * ?+?( volatile T *, ptrdiff_t );190 forall( type T ) volatile T * ?+?( ptrdiff_t, volatile T * );191 forall( type T ) const volatile T * ?+?( const volatile T *, ptrdiff_t );192 forall( type T ) const volatile T * ?+?( ptrdiff_t, const volatile T * );193 forall( type T ) T * ?-?( T *, ptrdiff_t );194 forall( type T ) const T * ?-?( const T *, ptrdiff_t );195 forall( type T ) volatile T * ?-?( volatile T *, ptrdiff_t );196 forall( type T ) const volatile T * ?-?( const volatile T *, ptrdiff_t );197 forall( type T ) ptrdiff_t ?-?( const volatile T *, const volatile T * );186 forall( otype T ) T * ?+?( T *, ptrdiff_t ); 187 forall( otype T ) T * ?+?( ptrdiff_t, T * ); 188 forall( otype T ) const T * ?+?( const T *, ptrdiff_t ); 189 forall( otype T ) const T * ?+?( ptrdiff_t, const T * ); 190 forall( otype T ) volatile T * ?+?( volatile T *, ptrdiff_t ); 191 forall( otype T ) volatile T * ?+?( ptrdiff_t, volatile T * ); 192 forall( otype T ) const volatile T * ?+?( const volatile T *, ptrdiff_t ); 193 forall( otype T ) const volatile T * ?+?( ptrdiff_t, const volatile T * ); 194 forall( otype T ) T * ?-?( T *, ptrdiff_t ); 195 forall( otype T ) const T * ?-?( const T *, ptrdiff_t ); 196 forall( otype T ) volatile T * ?-?( volatile T *, ptrdiff_t ); 197 forall( otype T ) const volatile T * ?-?( const volatile T *, ptrdiff_t ); 198 forall( otype T ) ptrdiff_t ?-?( const volatile T *, const volatile T * ); 198 199 199 200 // ------------------------------------------------------------ … … 431 432 forall( ftype FT ) FT * ?=?( FT * volatile *, forall( ftype FT2 ) FT2 * ); 432 433 433 forall( type T ) T * ?+=?( T * *, ptrdiff_t );434 forall( type T ) T * ?+=?( T * volatile *, ptrdiff_t );435 forall( type T ) const T * ?+=?( const T * *, ptrdiff_t );436 forall( type T ) const T * ?+=?( const T * volatile *, ptrdiff_t );437 forall( type T ) volatile T * ?+=?( volatile T * *, ptrdiff_t );438 forall( type T ) volatile T * ?+=?( volatile T * volatile *, ptrdiff_t );439 forall( type T ) const volatile T * ?+=?( const volatile T * *, ptrdiff_t );440 forall( type T ) const volatile T * ?+=?( const volatile T * volatile *, ptrdiff_t );441 forall( type T ) T * ?-=?( T * *, ptrdiff_t );442 forall( type T ) T * ?-=?( T * volatile *, ptrdiff_t );443 forall( type T ) const T * ?-=?( const T * *, ptrdiff_t );444 forall( type T ) const T * ?-=?( const T * volatile *, ptrdiff_t );445 forall( type T ) volatile T * ?-=?( volatile T * *, ptrdiff_t );446 forall( type T ) volatile T * ?-=?( volatile T * volatile *, ptrdiff_t );447 forall( type T ) const volatile T * ?-=?( const volatile T * *, ptrdiff_t );448 forall( type T ) const volatile T * ?-=?( const volatile T * volatile *, ptrdiff_t );434 forall( otype T ) T * ?+=?( T * *, ptrdiff_t ); 435 forall( otype T ) T * ?+=?( T * volatile *, ptrdiff_t ); 436 forall( otype T ) const T * ?+=?( const T * *, ptrdiff_t ); 437 forall( otype T ) const T * ?+=?( const T * volatile *, ptrdiff_t ); 438 forall( otype T ) volatile T * ?+=?( volatile T * *, ptrdiff_t ); 439 forall( otype T ) volatile T * ?+=?( volatile T * volatile *, ptrdiff_t ); 440 forall( otype T ) const volatile T * ?+=?( const volatile T * *, ptrdiff_t ); 441 forall( otype T ) const volatile T * ?+=?( const volatile T * volatile *, ptrdiff_t ); 442 forall( otype T ) T * ?-=?( T * *, ptrdiff_t ); 443 forall( otype T ) T * ?-=?( T * volatile *, ptrdiff_t ); 444 forall( otype T ) const T * ?-=?( const T * *, ptrdiff_t ); 445 forall( otype T ) const T * ?-=?( const T * volatile *, ptrdiff_t ); 446 forall( otype T ) volatile T * ?-=?( volatile T * *, ptrdiff_t ); 447 forall( otype T ) volatile T * ?-=?( volatile T * volatile *, ptrdiff_t ); 448 forall( otype T ) const volatile T * ?-=?( const volatile T * *, ptrdiff_t ); 449 forall( otype T ) const volatile T * ?-=?( const volatile T * volatile *, ptrdiff_t ); 449 450 450 451 _Bool ?=?( _Bool *, _Bool ), ?=?( volatile _Bool *, _Bool ); -
src/libcfa/stdlib
r39786813 ra5a71d0 10 10 // Created On : Thu Jan 28 17:12:35 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Feb 5 15:21:18201613 // Update Count : 6 112 // 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 forall( type T ) T * memset( T * ptr, unsigned char fill ); // use default value '\0' for fill 23 forall( type T ) T * memset( T * ptr ); // remove when default value available 22 forall( otype T ) T * malloc( void ); 23 forall( otype T ) T * malloc( char fill ); 24 forall( otype T ) T * malloc( T * ptr, size_t size ); 25 forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill ); 26 forall( otype T ) T * calloc( size_t size ); 27 forall( otype T ) T * realloc( T * ptr, size_t size ); 28 forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill ); 24 29 25 forall( type T ) T * malloc( void ); 26 forall( type T ) T * malloc( char fill ); 27 forall( type T ) T * malloc( size_t size ); 28 forall( type T ) T * malloc( T * ptr, size_t size ); 29 forall( type T ) T * malloc( T * ptr, size_t size, unsigned char fill ); 30 forall( type T ) T * calloc( size_t size ); 31 forall( type T ) T * realloc( T * ptr, size_t size ); 32 forall( type T ) T * realloc( T * ptr, size_t size, unsigned char fill ); 30 forall( otype T ) T * aligned_alloc( size_t alignment ); 31 forall( otype T ) T * memalign( size_t alignment ); // deprecated 32 forall( otype T ) int posix_memalign( T ** ptr, size_t alignment ); 33 33 34 forall( type T ) T * aligned_alloc( size_t alignment ); 35 forall( type T ) T * memalign( size_t alignment ); // deprecated 36 forall( type T ) int posix_memalign( T ** ptr, size_t alignment ); 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 37 36 38 37 //--------------------------------------- … … 66 65 //--------------------------------------- 67 66 68 forall( type T | { int ?<?( T, T ); } )67 forall( otype T | { int ?<?( T, T ); } ) 69 68 T * bsearch( const T key, const T * arr, size_t dimension ); 70 69 71 forall( type T | { int ?<?( T, T ); } )70 forall( otype T | { int ?<?( T, T ); } ) 72 71 void qsort( const T * arr, size_t dimension ); 73 72 74 73 //--------------------------------------- 75 74 76 forall( type T | { T ?/?( T, T ); T ?%?( T, T ); } )75 forall( otype T | { T ?/?( T, T ); T ?%?( T, T ); } ) 77 76 [ T, T ] div( T t1, T t2 ); 78 77 … … 94 93 //--------------------------------------- 95 94 96 void rand seed( long int s );97 char rand om();98 int rand om();99 unsigned int rand om();100 long int rand om();101 unsigned long int rand om();102 float rand om();103 double rand om();104 float _Complex rand om();105 double _Complex rand om();106 long double _Complex rand om();95 void rand48seed( long int s ); 96 char rand48(); 97 int rand48(); 98 unsigned int rand48(); 99 long int rand48(); 100 unsigned long int rand48(); 101 float rand48(); 102 double rand48(); 103 float _Complex rand48(); 104 double _Complex rand48(); 105 long double _Complex rand48(); 107 106 108 107 //--------------------------------------- 109 108 110 forall( type T | { int ?<?( T, T ); } )109 forall( otype T | { int ?<?( T, T ); } ) 111 110 T min( const T t1, const T t2 ); 112 111 113 forall( type T | { int ?>?( T, T ); } )112 forall( otype T | { int ?>?( T, T ); } ) 114 113 T max( const T t1, const T t2 ); 115 114 116 forall( type T )115 forall( otype T ) 117 116 void swap( T * t1, T * t2 ); 118 117 -
src/libcfa/stdlib.c
r39786813 ra5a71d0 10 10 // Created On : Thu Jan 28 17:10:29 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Feb 10 15:45:56201613 // Update Count : 14 012 // Last Modified On : Wed Mar 23 13:26:42 2016 13 // Update Count : 146 14 14 // 15 15 … … 27 27 } // extern "C" 28 28 29 forall( type T ) T * memset( T * ptr, unsigned char fill ) { // use default value '\0' for fill 30 printf( "memset1\n" ); 31 return (T *)memset( ptr, (int)fill, malloc_usable_size( ptr ) ); 32 } // memset 33 forall( type T ) T * memset( T * ptr ) { // remove when default value available 34 printf( "memset2\n" ); 35 return (T *)memset( ptr, 0, malloc_usable_size( ptr ) ); 36 } // memset 37 38 forall( type T ) T * malloc( void ) { 29 forall( otype T ) T * malloc( void ) { 39 30 printf( "malloc1\n" ); 40 31 return (T *)malloc( sizeof(T) ); 41 32 } // malloc 42 forall( type T ) T * malloc( size_t size ) {33 forall( otype T ) T * malloc( size_t size ) { 43 34 printf( "malloc2\n" ); 44 35 return (T *)(void *)malloc( size ); 45 36 } // malloc 46 forall( type T ) T * malloc( char fill ) {37 forall( otype T ) T * malloc( char fill ) { 47 38 printf( "malloc3\n" ); 48 39 T * ptr = (T *)malloc( sizeof(T) ); … … 50 41 } // malloc 51 42 52 forall( type T ) T * calloc( size_t size ) {43 forall( otype T ) T * calloc( size_t size ) { 53 44 printf( "calloc\n" ); 54 45 return (T *)calloc( size, sizeof(T) ); 55 46 } // calloc 56 47 57 forall( type T ) T * realloc( T * ptr, size_t size ) {48 forall( otype T ) T * realloc( T * ptr, size_t size ) { 58 49 printf( "realloc1\n" ); 59 50 return (T *)(void *)realloc( (void *)ptr, size ); 60 51 } // realloc 61 forall( type T ) T * realloc( T * ptr, size_t size, unsigned char fill ) {52 forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill ) { 62 53 printf( "realloc2\n" ); 63 54 char * nptr = (T *)(void *)realloc( (void *)ptr, size ); … … 67 58 } // realloc 68 59 69 forall( type T ) T * malloc( T * ptr, size_t size ) {60 forall( otype T ) T * malloc( T * ptr, size_t size ) { 70 61 printf( "malloc4\n" ); 71 62 return (T *)realloc( ptr, size ); 72 63 } // malloc 73 forall( type T ) T * malloc( T * ptr, size_t size, unsigned char fill ) {64 forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill ) { 74 65 printf( "malloc5\n" ); 75 66 return (T *)realloc( ptr, size, fill ); 76 67 } // malloc 77 68 78 forall( type T ) T * aligned_alloc( size_t alignment ) {69 forall( otype T ) T * aligned_alloc( size_t alignment ) { 79 70 printf( "aligned_alloc\n" ); 80 71 return (T *)memalign( alignment, sizeof(T) ); 81 72 } // aligned_alloc 82 73 83 forall( type T ) T * memalign( size_t alignment ) {74 forall( otype T ) T * memalign( size_t alignment ) { 84 75 printf( "memalign\n" ); 85 76 return (T *)memalign( alignment, sizeof(T) ); 86 77 } // memalign 87 78 88 forall( type T ) int posix_memalign( T ** ptr, size_t alignment ) {79 forall( otype T ) int posix_memalign( T ** ptr, size_t alignment ) { 89 80 printf( "posix_memalign\n" ); 90 81 return posix_memalign( (void **)ptr, alignment, sizeof(T) ); 91 82 } // posix_memalign 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 92 93 93 //--------------------------------------- … … 123 123 return ulli; 124 124 } 125 125 126 float ato( const char * ptr ) { 126 127 float f; … … 138 139 return ld; 139 140 } 141 140 142 float _Complex ato( const char * ptr ) { 141 143 float re, im; … … 172 174 return strtoull( sptr, eptr, base ); 173 175 } 176 174 177 float strto( const char * sptr, char ** eptr ) { 175 178 return strtof( sptr, eptr ); … … 181 184 return strtold( sptr, eptr ); 182 185 } 186 183 187 float _Complex strto( const char * sptr, char ** eptr ) { 184 188 float re, im; … … 208 212 //--------------------------------------- 209 213 210 forall( type T | { int ?<?( T, T ); } )214 forall( otype T | { int ?<?( T, T ); } ) 211 215 T * bsearch( const T key, const T * arr, size_t dimension ) { 212 216 int comp( const void * t1, const void * t2 ) { return *(T *)t1 < *(T *)t2 ? -1 : *(T *)t2 < *(T *)t1 ? 1 : 0; } … … 214 218 } // bsearch 215 219 216 forall( type T | { int ?<?( T, T ); } )220 forall( otype T | { int ?<?( T, T ); } ) 217 221 void qsort( const T * arr, size_t dimension ) { 218 222 int comp( const void * t1, const void * t2 ) { return *(T *)t1 < *(T *)t2 ? -1 : *(T *)t2 < *(T *)t1 ? 1 : 0; } … … 222 226 //--------------------------------------- 223 227 224 forall( type T | { T ?/?( T, T ); T ?%?( T, T ); } )228 forall( otype T | { T ?/?( T, T ); T ?%?( T, T ); } ) 225 229 [ T, T ] div( T t1, T t2 ) { /* return [ t1 / t2, t1 % t2 ]; */ } 226 230 … … 239 243 //--------------------------------------- 240 244 241 void rand seed( long int s ) { srand48( s ); }242 char rand om() { return lrand48(); }243 int rand om() { return mrand48(); }244 unsigned int rand om() { return lrand48(); }245 long int rand om() { return mrand48(); }246 unsigned long int rand om() { return lrand48(); }247 float rand om() { return (float)drand48(); } // otherwise float uses lrand48248 double rand om() { return drand48(); }249 float _Complex rand om() { return (float)drand48() + (float _Complex)(drand48() * _Complex_I); }250 double _Complex rand om() { return drand48() + (double _Complex)(drand48() * _Complex_I); }251 long double _Complex rand om() { return (long double)drand48() + (long double _Complex)(drand48() * _Complex_I); }252 253 //--------------------------------------- 254 255 forall( type T | { int ?<?( T, T ); } )245 void rand48seed( long int s ) { srand48( s ); } 246 char rand48() { return mrand48(); } 247 int rand48() { return mrand48(); } 248 unsigned int rand48() { return lrand48(); } 249 long int rand48() { return mrand48(); } 250 unsigned long int rand48() { return lrand48(); } 251 float rand48() { return (float)drand48(); } // otherwise float uses lrand48 252 double rand48() { return drand48(); } 253 float _Complex rand48() { return (float)drand48() + (float _Complex)(drand48() * _Complex_I); } 254 double _Complex rand48() { return drand48() + (double _Complex)(drand48() * _Complex_I); } 255 long double _Complex rand48() { return (long double)drand48() + (long double _Complex)(drand48() * _Complex_I); } 256 257 //--------------------------------------- 258 259 forall( otype T | { int ?<?( T, T ); } ) 256 260 T min( const T t1, const T t2 ) { 257 261 return t1 < t2 ? t1 : t2; 258 262 } // min 259 263 260 forall( type T | { int ?>?( T, T ); } )264 forall( otype T | { int ?>?( T, T ); } ) 261 265 T max( const T t1, const T t2 ) { 262 266 return t1 > t2 ? t1 : t2; 263 267 } // max 264 268 265 forall( type T )269 forall( otype T ) 266 270 void swap( T * t1, T * t2 ) { 267 271 T temp = *t1;
Note:
See TracChangeset
for help on using the changeset viewer.