Changeset 0f9e4403
- Timestamp:
- Apr 15, 2016, 12:03:11 PM (10 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, gc_noraii, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 29ad0ac
- Parents:
- c5833e8 (diff), 37f0da8 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Files:
-
- 14 added
- 21 deleted
- 123 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
.gitignore
rc5833e8 r0f9e4403 33 33 34 34 # generated by latex 35 doc/refrat/refrat.aux36 doc/refrat/refrat.bbl37 doc/refrat/refrat.blg38 doc/refrat/refrat.brf39 doc/refrat/refrat.dvi40 doc/refrat/refrat.idx41 doc/refrat/refrat.ilg42 doc/refrat/refrat.ind43 doc/refrat/refrat.log44 doc/refrat/refrat.out45 doc/refrat/refrat.pdf46 doc/refrat/refrat.ps47 doc/refrat/refrat.toc35 *.aux 36 *.bbl 37 *.blg 38 *.brf 39 *.dvi 40 *.idx 41 *.ilg 42 *.ind 43 *.log 44 *.out 45 *.pdf 46 *.ps 47 *.toc -
configure
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 1 1 ## Define the appropriate configuration variables. 2 2 3 TeXLIB = .: :3 TeXLIB = .:../bibliography/:../LaTeXmacros/: 4 4 LaTeX = TEXINPUTS=${TeXLIB} && export TEXINPUTS && latex 5 BibTeX = B STINPUTS=${TeXLIB} && export BSTINPUTS && bibtex5 BibTeX = BIBINPUTS=${TeXLIB} && export BIBINPUTS && bibtex 6 6 7 7 ## Define the text source files. … … 43 43 dvips $< -o $@ 44 44 45 ${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex ${basename ${DOCUMENT}}.bib 45 ${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex \ 46 ../LaTeXmacros/common.tex ../LaTeXmacros/indexstyle ../bibliography/cfa.bib 46 47 # Conditionally create an empty *.ind (index) file for inclusion until makeindex is run. 47 48 if [ ! -r ${basename $@}.ind ] ; then touch ${basename $@}.ind ; fi … … 53 54 -${BibTeX} ${basename $@} 54 55 # Make index from *.aux entries and input index at end of document 55 makeindex -s indexstyle ${basename $@}.idx56 makeindex -s ../LaTeXmacros/indexstyle ${basename $@}.idx 56 57 ${LaTeX} ${basename $@}.tex 57 58 # Run again to get index title into table of contents -
doc/refrat/refrat.tex
rc5833e8 r0f9e4403 1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -*- Mode: Latex -*- %%%%%%%%%%%%%%%%%%%%%%%%%%%% 2 %% 3 %% Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo 4 %% 5 %% The contents of this file are covered under the licence agreement in the 6 %% file "LICENCE" distributed with Cforall. 7 %% 8 %% refrat.tex -- 9 %% 10 %% Author : Peter A. Buhr 11 %% Created On : Wed Apr 6 14:52:25 2016 12 %% Last Modified By : Peter A. Buhr 13 %% Last Modified On : Sat Apr 9 10:19:12 2016 14 %% Update Count : 8 15 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16 1 17 % requires tex packages: texlive-base texlive-latex-base tex-common texlive-humanities texlive-latex-extra texlive-fonts-recommended 2 18 … … 5 21 6 22 % Latex packages used in the document. 7 8 23 \usepackage{fullpage,times} 9 24 \usepackage{xspace} … … 11 26 \usepackage{listings} 12 27 \usepackage{comment} 13 \usepackage{latexsym} 14 \usepackage{mathptmx} 28 \usepackage{latexsym} % \Box 29 \usepackage{mathptmx} % better math font with "times" 15 30 \usepackage[pagewise]{lineno} 16 31 \renewcommand{\linenumberfont}{\scriptsize\sffamily} 17 32 \usepackage[dvips,plainpages=false,pdfpagelabels,pdfpagemode=UseNone,colorlinks=true,pagebackref=true,linkcolor=blue,citecolor=blue,urlcolor=blue,pagebackref=true,breaklinks=true]{hyperref} 18 33 \usepackage{breakurl} 19 \ urlstyle{sf}34 \renewcommand{\UrlFont}{\small\sf} 20 35 21 36 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 22 37 23 % Names used in the document. 24 25 \newcommand{\CFA}{Cforall\xspace} % set language text name 26 \newcommand{\CFAA}{C$\forall$\xspace} % set language symbolic name 27 \newcommand{\CC}{C\kern-.1em\hbox{+\kern-.25em+}\xspace} % CC symbolic name 28 \def\c11{ISO/IEC C} % C11 name (cannot have numbers in latex command name) 38 % Bespoke macros used in the document. 39 \input{common} 29 40 30 41 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 31 42 32 % Bespoke macros used in the document. 33 34 \makeatletter 35 % index macros 36 \newcommand{\italic}[1]{\emph{\hyperpage{#1}}} 37 \newcommand{\definition}[1]{\textbf{\hyperpage{#1}}} 38 \newcommand{\see}[1]{\emph{see} #1} 39 40 % Define some commands that produce formatted index entries suitable for cross-references. 41 % ``\spec'' produces entries for specifications of entities. ``\impl'' produces entries for their 42 % implementations, and ``\use'' for their uses. 43 44 % \newcommand{\bold}[1]{{\bf #1}} 45 % \def\spec{\@bsphack\begingroup 46 % \def\protect##1{\string##1\space}\@sanitize 47 % \@wrxref{|bold}} 48 \def\impl{\@bsphack\begingroup 49 \def\protect##1{\string##1\space}\@sanitize 50 \@wrxref{|definition}} 51 \newcommand{\indexcode}[1]{{\lstinline$#1$}} 52 \def\use{\@bsphack\begingroup 53 \def\protect##1{\string##1\space}\@sanitize 54 \@wrxref{|hyperpage}} 55 \def\@wrxref#1#2{\let\thepage\relax 56 \xdef\@gtempa{\write\@indexfile{\string 57 \indexentry{#2@{\lstinline$#2$}#1}{\thepage}}}\endgroup\@gtempa 58 \if@nobreak \ifvmode\nobreak\fi\fi\@esphack} 59 %\newcommand{\use}[1]{\index{#1@{\lstinline$#1$}}} 60 %\newcommand{\impl}[1]{\index{\protect#1@{\lstinline$\protect#1$}|definition}} 61 62 % text inline and lowercase index: \Index{Inline and index text} 63 % text inline and as-in index: \Index{Inline and Index text} 64 % text inline but index with different as-is text: \Index[index text]{inline text} 65 \newcommand{\Index}{\@ifstar\@sIndex\@Index} 66 \newcommand{\@Index}[2][\@empty]{\lowercase{\def\temp{#2}}#2\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi} 67 \newcommand{\@sIndex}[2][\@empty]{#2\ifx#1\@empty\index{#2}\else\index{#1@{\protect#2}}\fi} 68 \makeatother 69 70 % blocks and titles 71 \newcommand{\define}[1]{\emph{#1\/}\index{#1}} 72 \newenvironment{rationale}{% 73 \begin{quotation}\noindent$\Box$\enspace 74 }{% 75 \hfill\enspace$\Box$\end{quotation} 76 }% 77 \newcommand{\rewrite}{\(\Rightarrow\)} 78 \newcommand{\rewriterules}{\paragraph{Rewrite Rules}~\par\noindent} 79 \newcommand{\examples}{\paragraph{Examples}~\par\noindent} 80 \newcommand{\semantics}{\paragraph{Semantics}~\par\noindent} 81 \newcommand{\constraints}{\paragraph{Constraints}~\par\noindent} 82 \newcommand{\predefined}{\paragraph{Predefined Identifiers}~\par\noindent} 83 84 % BNF macros 85 \def\syntax{\paragraph{Syntax}\trivlist\parindent=.5in\item[\hskip.5in]} 86 \let\endsyntax=\endtrivlist 87 \newcommand{\lhs}[1]{\par{\emph{#1:}}\index{#1@{\emph{#1}}|italic}} 88 \newcommand{\rhs}{\hfil\break\hbox{\hskip1in}} 89 \newcommand{\oldlhs}[1]{\emph{#1: \ldots}\index{#1@{\emph{#1}}|italic}} 90 \newcommand{\nonterm}[1]{\emph{#1\/}\index{#1@{\emph{#1}}|italic}} 91 \newcommand{\opt}{$_{opt}$\ } 92 93 % adjust varioref package with default "section" and "page" titles, and optional title with faraway page numbers 94 % \VRef{label} => Section 2.7, \VPageref{label} => page 17 95 % \VRef[Figure]{label} => Figure 3.4, \VPageref{label} => page 17 96 \renewcommand{\reftextfaceafter}{\unskip} 97 \renewcommand{\reftextfacebefore}{\unskip} 98 \renewcommand{\reftextafter}{\unskip} 99 \renewcommand{\reftextbefore}{\unskip} 100 \renewcommand{\reftextfaraway}[1]{\unskip, p.~\pageref{#1}} 101 \renewcommand{\reftextpagerange}[2]{\unskip, pp.~\pageref{#1}--\pageref{#2}} 102 \newcommand{\VRef}[2][Section]{\ifx#1\@empty\else{#1}\nobreakspace\fi\vref{#2}} 103 \newcommand{\VPageref}[2][page]{\ifx#1\@empty\else{#1}\nobreakspace\fi\pageref{#2}} 104 105 % adjust listings macros 106 \lstdefinelanguage{CFA}[ANSI]{C}% 107 {morekeywords={asm,_Alignas,_Alignof,_At,_Atomic,_Bool,catch,catchResume,choose,_Complex,context,disable,dtype,enable, 108 fallthru,finally,forall,ftype,_Generic,_Imaginary,inline,lvalue,_Noreturn,restrict,_Static_assert, 109 _Thread_local,throw,throwResume,try,type,}, 110 }% 111 112 \lstset{ 113 language=CFA, 114 columns=flexible, 115 basicstyle=\sf\small, 116 tabsize=4, 117 xleftmargin=\parindent, 118 escapechar=@, 119 keepspaces=true, 120 %showtabs=true, 121 %tab=\rightarrowfill, 122 }% 123 124 \makeatletter 125 % replace/adjust listings characters that look bad in sanserif 126 \lst@CCPutMacro 127 \lst@ProcessOther{"2D}{\lst@ttfamily{-{}}{{\ttfamily\upshape -}}} % replace minus 128 \lst@ProcessOther{"3C}{\lst@ttfamily{<}{\texttt{<}}} % replace less than 129 \lst@ProcessOther{"3E}{\lst@ttfamily{<}{\texttt{>}}} % replace greater than 130 \lst@ProcessOther{"5E}{\raisebox{0.4ex}{$\scriptstyle\land\,$}} % replace circumflex 131 \lst@ProcessLetter{"5F}{\lst@ttfamily{\char95}{{\makebox[1.2ex][c]{\rule{1ex}{0.1ex}}}}} % replace underscore 132 \lst@ProcessOther{"7E}{\raisebox{0.3ex}{$\scriptstyle\sim\,$}} % replace tilde 133 %\lst@ProcessOther{"7E}{\raisebox{-.4ex}[1ex][0pt]{\textasciitilde}} % lower tilde 134 \@empty\z@\@empty 135 \makeatother 136 137 \setcounter{secnumdepth}{3} % number subsubsections 138 \setcounter{tocdepth}{3} % subsubsections in table of contents 43 \setcounter{secnumdepth}{3} % number subsubsections 44 \setcounter{tocdepth}{3} % subsubsections in table of contents 139 45 \makeindex 140 46 … … 143 49 \begin{document} 144 50 \pagestyle{headings} 145 \linenumbers % comment out to turn off line numbering 146 147 \title{\CFA (\CFAA) Reference Manual and Rationale} 148 \author{Glen Ditchfield \and Peter A. Buhr} 149 \date{DRAFT\\\today} 51 \linenumbers % comment out to turn off line numbering 52 53 \title{\Huge 54 \vspace*{1in} 55 \CFA (\CFL) Reference Manual and Rationale 56 }% title 57 \author{\huge 58 Glen Ditchfield and Peter A. Buhr 59 }% author 60 \date{ 61 DRAFT\\\today 62 }% date 150 63 151 64 \pagenumbering{roman} … … 159 72 \copyright\,2015 Glen Ditchfield \\ \\ 160 73 \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}}.74 This work is licensed under the Creative Commons Attribution 4.0 International License. 75 To view a copy of this license, visit {\small\url{http://creativecommons.org/licenses/by/4.0}}. 163 76 \vspace*{1in} 164 77 … … 173 86 \chapter*{Introduction}\addcontentsline{toc}{chapter}{Introduction} 174 87 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'' 88 This document is a reference manual and rationale for \CFA, a polymorphic extension of the C programming language. 89 It makes frequent reference to the {\c11} standard \cite{C11}, and occasionally compares \CFA to {\CC} \cite{C++}. 90 91 The manual deliberately imitates the ordering of the {\c11} standard (although the section numbering differs). 92 Unfortunately, this means the manual contains more ``forward references'' than usual, making it harder to follow if the reader does not have a copy of the {\c11} standard. 93 For a simple introduction to \CFA, see the companion document ``An Overview of \CFA'' 183 94 \cite{Ditchfield96:Overview}. 184 95 185 96 \begin{rationale} 186 Commentary (like this) is quoted with quads. Commentary usually deals with subtle points, the187 rationale behind a rule, and design decisions.97 Commentary (like this) is quoted with quads. 98 Commentary usually deals with subtle points, the rationale behind a rule, and design decisions. 188 99 \end{rationale} 189 100 … … 194 105 \chapter{Terms, definitions, and symbols} 195 106 196 Terms from the {\c11} standard used in this document have the same meaning as in the {\c11} 197 standard. 107 Terms from the {\c11} standard used in this document have the same meaning as in the {\c11} standard. 198 108 199 109 % No ``Conformance'' or ``Environment'' chapters yet. … … 205 115 206 116 \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. 117 The syntax notation used in this document is the same as in the {\c11} standard, with one exception: ellipsis in the definition of a nonterminal, as in ``\emph{declaration:} \ldots'', indicates that these rules extend a previous definition, which occurs in this document or in the {\c11} standard. 210 118 211 119 … … 215 123 \subsection{Scopes of identifiers}\index{scopes} 216 124 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 125 \CFA's scope rules differ from C's in one major respect: a declaration of an identifier may overload\index{overloading} outer declarations of lexically identical identifiers in the same 126 \Index{name space}, instead of hiding them. 127 The outer declaration is hidden if the two declarations have \Index{compatible type}, or if one declares an array type and the other declares a pointer type and the element type and pointed-at type are compatible, or if one has function type and the other is a pointer to a compatible function type, or if one declaration is a \lstinline$type$\use{type} or 223 128 \lstinline$typedef$\use{typedef} declaration and the other is not. The outer declaration becomes 224 129 \Index{visible} when the scope of the inner declaration terminates. 225 130 \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.131 Hence, a \CFA program can declare an \lstinline$int v$ and a \lstinline$float v$ in the same scope; 132 a {\CC} program can not. 228 133 \end{rationale} 229 134 … … 232 137 \index{linkage} 233 138 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. 139 \CFA's linkage rules differ from C's in only one respect: instances of a particular identifier with external or internal linkage do not necessarily denote the same object or function. 140 Instead, in the set of translation units and libraries that constitutes an entire program, any two instances of a particular identifier with \Index{external linkage} denote the same object or function if they have 141 \Index{compatible type}s, or if one declares an array type and the other declares a pointer type and the element type and pointed-at type are compatible, or if one has function type and the other is a pointer to a compatible function type. 142 Within one translation unit, each instance of an identifier with \Index{internal linkage} denotes the same object or function in the same circumstances. 242 143 Identifiers with \Index{no linkage} always denote unique entities. 243 144 \begin{rationale} 244 A \CFA program can declare an \lstinline$extern int v$ and an \lstinline$extern float v$; a C245 program cannot.145 A \CFA program can declare an \lstinline$extern int v$ and an \lstinline$extern float v$; 146 a C program cannot. 246 147 \end{rationale} 247 148 … … 253 154 \subsubsection{Semantics} 254 155 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 { 156 \CFA provides a capability for generic types; 157 using this capability a single "generic type generator" can be written that can represent multiple concrete type instantiations by substitution of the "type parameters" of the generic type for concrete types. 158 Syntactically a generic type generator is represented by putting a forall specifier on a struct or union declaration, as defined in \VRef{forall}. 159 An instantiation of the generic type is written by specifying the type parameters in parentheses after the name of the generic type generator: 160 \begin{lstlisting} 161 forall( otype T | sumable( T ) ) struct pair { 263 162 T x; 264 163 T y; … … 267 166 \end{lstlisting} 268 167 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 ) { 168 The type parameters in an instantiation of a generic type must satisfy any constraints in the forall specifier on the type generator declaration, e.g., \lstinline$sumable$. 169 The instantiation then has the semantics that would result if the type parameters were substituted into the type generator declaration by macro substitution. 170 171 Polymorphic functions may have generic types as parameters, and those generic types may use type parameters of the polymorphic function as type parameters of the generic type: 172 \begin{lstlisting} 173 forall( otype T ) void swap( pair(T) *p ) { 278 174 T z = p->x; 279 175 p->x = p->y; … … 285 181 \subsubsection{Constraints} 286 182 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. 183 To avoid unduly constraining implementors, the generic type generator definition must be visible at any point where it is instantiated. 184 Forward declarations of generic type generators are not forbidden, but the definition must be visible to instantiate the generic type. Equivalently, instantiations of generic types are not allowed to be incomplete types. 291 185 292 186 \examples 293 187 \begin{lstlisting} 294 forall( type T ) struct A;295 296 forall( type T ) struct B {297 A(T) *a; 188 forall( otype T ) struct A; 189 190 forall( otype T ) struct B { 191 A(T) *a; // legal, but cannot instantiate B(T) 298 192 }; 299 193 300 B(T) x; 301 302 forall( type T ) struct A {194 B(T) x; // illegal, *x.a is of an incomplete generic type 195 196 forall( otype T ) struct A { 303 197 B( T ) *b; 304 198 }; 305 199 306 B( T ) y; // legal, *x.a is now of a complete generic type 307 200 B( T ) y; // legal, *x.a is now of a complete generic type 308 201 309 202 // 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 );203 forall( otype T ) struct box; 204 forall( otype T ) box( T ) *make_box( T ); 205 forall( otype T ) void use_box( box( T ) *b ); 313 206 314 207 // main.c: 315 box( int ) *b = make_box( 42 ); // illegal, def 'n of box not visible316 use_box( b ); 208 box( int ) *b = make_box( 42 ); // illegal, definition of box not visible 209 use_box( b ); // illegal 317 210 \end{lstlisting} 318 211 … … 320 213 \section{Conversions} 321 214 \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 215 These conversions are called \define{implicit conversion}s. 216 The programmer can request 323 217 \define{explicit conversion}s using cast expressions. 324 218 … … 330 224 \subsubsection{Safe arithmetic conversions} 331 225 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. 226 In C, a pattern of conversions known as the \define{usual arithmetic conversion}s is used with most binary arithmetic operators to convert the operands to a common type and determine the type of the operator's result. 227 In \CFA, these conversions play a role in overload resolution, and collectively are called the \define{safe arithmetic conversion}s. 228 229 Let \(int_r\) and \(unsigned_r\) be the signed and unsigned integer types with integer conversion rank\index{integer conversion rank}\index{rank|see{integer conversion rank}} $r$. 230 Let \(unsigned_{mr}\) be the unsigned integer type with maximal rank. 340 231 341 232 The following conversions are \emph{direct} safe arithmetic conversions. … … 343 234 \item 344 235 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 236 \item 237 For every rank $r$ greater than or equal to the rank of \lstinline$int$, conversion from \(int_r\) to \(unsigned_r\). 238 \item 239 For every rank $r$ greater than or equal to the rank of \lstinline$int$, where \(int_{r+1}\) exists and can represent all values of \(unsigned_r\), conversion from \(unsigned_r\) to \(int_{r+1}\). 354 240 \item 355 241 Conversion from \(unsigned_{mr}\) to \lstinline$float$. 356 357 242 \item 358 243 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 244 \item 245 Conversion from \lstinline$float$ to \lstinline$double$, and from \lstinline$double$ to \lstinline$long double$. 246 \item 247 Conversion from \lstinline$float _Complex$ to \lstinline$double _Complex$, and from \lstinline$double _Complex$ to \lstinline$long double _Complex$. 368 248 \begin{sloppypar} 369 249 \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. 250 Conversion from \lstinline$float _Imaginary$ to \lstinline$double _Imaginary$, and from \lstinline$double _Imaginary$ to \lstinline$long double$ \lstinline$_Imaginary$, if the implementation supports imaginary types. 373 251 \end{sloppypar} 374 252 \end{itemize} 375 253 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. 254 If type \lstinline$T$ can be converted to type \lstinline$U$ by a safe direct arithmetic conversion and type \lstinline$U$ can be converted to type \lstinline$V$ by a safe arithmetic conversion, then the conversion from \lstinline$T$ to type \lstinline$V$ is an \emph{indirect} safe arithmetic conversion. 255 256 \begin{rationale} 257 Note that {\c11} does not include conversion from \Index{real type}s to \Index{complex type}s in the usual arithmetic conversions, and \CFA does not include them as safe conversions. 384 258 \end{rationale} 385 259 … … 393 267 394 268 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. 269 \Index{anonymous structure} or an \Index{anonymous union}, it can be implicitly converted\index{implicit conversion} to a pointer to the anonymous structure's or anonymous union's type. 270 The result of the conversion is a pointer to the member. 398 271 399 272 \examples … … 402 275 int x, y; 403 276 }; 404 void move_by( struct point * p1, struct point * p2) {@\impl{move_by}@277 void move_by( struct point * p1, struct point * p2 ) {@\impl{move_by}@ 405 278 p1->x += p2.x; 406 279 p1->y += p2.y; 407 280 } 408 409 281 struct color_point { 410 282 enum { RED, BLUE, GREEN } color; 411 283 struct point; 412 284 } cp1, cp2; 413 move_to( &cp1, &cp2);285 move_to( &cp1, &cp2 ); 414 286 \end{lstlisting} 415 287 Thanks to implicit conversion, the two arguments that \lstinline$move_by()$ receives are pointers to … … 418 290 419 291 \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. 292 A function or value whose type is polymorphic may be implicitly converted to one whose type is \Index{less polymorphic} by binding values to one or more of its \Index{inferred parameter}. 293 Any value that is legal for the inferred parameter may be used, including other inferred parameters. 294 295 If, after the inferred parameter binding, an \Index{assertion parameter} has no inferred parameters in its type, then an object or function must be visible at the point of the specialization that has the same identifier as the assertion parameter and has a type that is compatible\index{compatible type} with or can be specialized to the type of the assertion parameter. 296 The assertion parameter is bound to that object or function. 297 298 The type of the specialization is the type of the original with the bound inferred parameters and the bound assertion parameters replaced by their bound values. 432 299 433 300 \examples 434 301 The type 435 302 \begin{lstlisting} 436 forall( type T,type U ) void (*)( T, U );303 forall( otype T, otype U ) void (*)( T, U ); 437 304 \end{lstlisting} 438 305 can be specialized to (among other things) 439 306 \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 real307 forall( otype T ) void (*)( T, T ); // U bound to T 308 forall( otype T ) void (*)( T, real ); // U bound to real 309 forall( otype U ) void (*)( real, U ); // T bound to real 443 310 void f( real, real ); // both bound to real 444 311 \end{lstlisting} … … 446 313 The type 447 314 \begin{lstlisting} 448 forall( type T | T ?+?( T, T )) T (*)( T );315 forall( otype T | T ?+?( T, T ) ) T (*)( T ); 449 316 \end{lstlisting} 450 317 can be specialized to (among other things) 451 318 \begin{lstlisting} 452 int (*)( int ); 319 int (*)( int ); // T bound to int, and T ?+?(T, T ) bound to int ?+?( int, int ) 453 320 \end{lstlisting} 454 321 … … 465 332 from a pointer to any non-\lstinline$void$ type to a pointer to \lstinline$void$; 466 333 \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. 334 from a pointer to any type to a pointer to a more qualified version of the type\index{qualified type}; 335 \item 336 from a pointer to a structure or union type to a pointer to the type of a member of the structure or union that is an \Index{anonymous structure} or an \Index{anonymous union}; 337 \item 338 within the scope of an initialized \Index{type declaration}, conversions between a type and its implementation or between a pointer to a type and a pointer to its implementation. 475 339 \end{itemize} 476 340 477 341 Conversions that are not safe conversions are \define{unsafe conversion}s. 478 342 \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. 343 As in C, there is an implicit conversion from \lstinline$void *$ to any pointer type. 344 This is clearly dangerous, and {\CC} does not have this implicit conversion. 345 \CFA\index{deficiencies!void * conversion} keeps it, in the interest of remaining as pure a superset of C as possible, but discourages it by making it unsafe. 483 346 \end{rationale} 484 347 … … 486 349 \subsection{Conversion cost} 487 350 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. 351 The \define{conversion cost} of a safe\index{safe conversion} conversion\footnote{Unsafe\index{unsafe conversion} conversions do not have defined conversion costs.} is a measure of how desirable or undesirable it is. 352 It is defined as follows. 491 353 \begin{itemize} 492 354 \item … … 497 359 498 360 \item 499 The cost of an indirect safe arithmetic conversion is the smallest number of direct conversions 500 needed to make up the conversion. 361 The cost of an indirect safe arithmetic conversion is the smallest number of direct conversions needed to make up the conversion. 501 362 \end{itemize} 502 363 … … 506 367 \begin{itemize} 507 368 \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. 369 The cost of an implicit conversion from \lstinline$int$ to \lstinline$long$ is 1. 370 The cost of an implicit conversion from \lstinline$long$ to \lstinline$double$ is 3, because it is defined in terms of conversions from \lstinline$long$ to \lstinline$unsigned long$, then to \lstinline$float$, and then to \lstinline$double$. 371 372 \item 373 If \lstinline$int$ can represent all the values of \lstinline$unsigned short$, then the cost of an implicit conversion from \lstinline$unsigned short$ to \lstinline$unsigned$ is 2: 374 \lstinline$unsigned short$ to \lstinline$int$ to \lstinline$unsigned$. 375 Otherwise, \lstinline$unsigned short$ is converted directly to \lstinline$unsigned$, and the cost is 1. 376 377 \item 378 If \lstinline$long$ can represent all the values of \lstinline$unsigned$, then the conversion cost of \lstinline$unsigned$ to \lstinline$long$ is 1. 379 Otherwise, the conversion is an unsafe conversion, and its conversion cost is undefined. 523 380 \end{itemize} 524 381 … … 529 386 \rhs \lstinline$forall$ 530 387 \rhs \lstinline$lvalue$ 531 \rhs \lstinline$ context$388 \rhs \lstinline$trait$ 532 389 \rhs \lstinline$dtype$ 533 390 \rhs \lstinline$ftype$ … … 538 395 \subsection{Identifiers} 539 396 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. 397 \CFA allows operator \Index{overloading} by associating operators with special function identifiers. 398 Furthermore, the constants ``\lstinline$0$'' and ``\lstinline$1$'' have special status for many of C's data types (and for many programmer-defined data types as well), so \CFA treats them as overloadable identifiers. 399 Programmers can use these identifiers to declare functions and objects that implement operators and constants for their own types. 545 400 546 401 … … 554 409 \end{syntax} 555 410 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. 411 \index{constant identifiers}\index{identifiers!for constants} The tokens ``\lstinline$0$''\impl{0} and ``\lstinline$1$''\impl{1} are identifiers. 412 No other tokens defined by the rules for integer constants are considered to be identifiers. 413 \begin{rationale} 414 Why ``\lstinline$0$'' and ``\lstinline$1$''? Those integers have special status in C. 415 All scalar types can be incremented and decremented, which is defined in terms of adding or subtracting 1. 416 The operations ``\lstinline$&&$'', ``\lstinline$||$'', and ``\lstinline$!$'' can be applied to any scalar arguments, and are defined in terms of comparison against 0. 417 A \nonterm{constant-expression} that evaluates to 0 is effectively compatible with every pointer type. 418 419 In C, the integer constants 0 and 1 suffice because the integer promotion rules can convert them to any arithmetic type, and the rules for pointer expressions treat constant expressions evaluating to 0 as a special case. 420 However, user-defined arithmetic types often need the equivalent of a 1 or 0 for their functions or operators, polymorphic functions often need 0 and 1 constants of a type matching their polymorphic parameters, and user-defined pointer-like types may need a null value. 421 Defining special constants for a user-defined type is more efficient than defining a conversion to the type from \lstinline$_Bool$. 422 423 Why \emph{just} ``\lstinline$0$'' and ``\lstinline$1$''? Why not other integers? No other integers have special status in C. 424 A facility that let programmers declare specific constants---``\lstinline$const Rational 12$'', for instance---would not be much of an improvement. 425 Some facility for defining the creation of values of programmer-defined types from arbitrary integer tokens would be needed. 426 The complexity of such a feature doesn't seem worth the gain. 579 427 \end{rationale} 580 428 … … 582 430 \subsubsection{Operator identifiers} 583 431 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. 432 \index{operator identifiers}\index{identifiers!for operators} Table \ref{opids} lists the programmer-definable operator identifiers and the operations they are associated with. 433 Functions that are declared with (or pointed at by function pointers that are declared with) these identifiers can be called by expressions that use the operator tokens and syntax, or the operator identifiers and ``function call'' syntax. 434 The relationships between operators and function calls are discussed in descriptions of the operators. 590 435 591 436 \begin{table}[hbt] … … 644 489 645 490 \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$--$''. 491 Operator identifiers are made up of the characters of the operator token, with question marks added to mark the positions of the arguments of operators. 492 The question marks serve as mnemonic devices; 493 programmers can not create new operators by arbitrarily mixing question marks and other non-alphabetic characters. 494 Note that prefix and postfix versions of the increment and decrement operators are distinguished by the position of the question mark. 495 \end{rationale} 496 497 \begin{rationale} 498 The use of ``\lstinline$?$'' in identifiers means that some C programs are not \CFA programs. For instance, the sequence of characters ``\lstinline$(i < 0)?--i:i$'' is legal in a C program, but a 499 \CFA compiler detects a syntax error because it treats ``\lstinline$?--$'' as an identifier, not as the two tokens ``\lstinline$?$'' and ``\lstinline$--$''. 658 500 \end{rationale} 659 501 … … 663 505 \item 664 506 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. 507 ``\lstinline$?:$''. 508 These operators do not always evaluate their operands, and hence can not be properly defined by functions unless some mechanism like call-by-name is added to the language. 509 Note that the definitions of ``\lstinline$&&$'' and ``\lstinline$||$'' say that they work by checking that their arguments are unequal to 0, so defining ``\lstinline$!=$'' and ``\lstinline$0$'' for user-defined types is enough to allow them to be used in logical expressions. 510 511 \item 512 The comma operator\index{comma expression}. 513 It is a control-flow operator like those above. 673 514 Changing its meaning seems pointless and confusing. 674 515 675 516 \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 )$'' 517 The ``address of'' operator. 518 It would seem useful to define a unary ``\lstinline$&$'' operator that returns values of some programmer-defined pointer-like type. 519 The problem lies with the type of the operator. 520 Consider the expression ``\lstinline$p = &x$'', where \lstinline$x$ is of type 521 \lstinline$T$ and \lstinline$p$ has the programmer-defined type \lstinline$T_ptr$. 522 The expression might be treated as a call to the unary function ``\lstinline$&?$''. 523 Now what is the type of the function's parameter? It can not be \lstinline$T$, because then \lstinline$x$ would be passed by value, and there is no way to create a useful pointer-like result from a value. 524 Hence the parameter must have type \lstinline$T *$. 525 But then the expression must be rewritten as ``\lstinline$p = &?( &x )$'' 684 526 ---which doesn't seem like progress! 685 527 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. 528 The rule for address-of expressions would have to be something like ``keep applying address-of functions until you get one that takes a pointer argument, then use the built-in operator and stop''. 529 It seems simpler to define a conversion function from \lstinline$T *$ to \lstinline$T_ptr$. 530 531 \item 532 The \lstinline$sizeof$ operator. 533 It is already defined for every object type, and intimately tied into the language's storage allocation model. 534 Redefining it seems pointless. 535 536 \item 537 The ``member of'' operators ``\lstinline$.$'' and ``\lstinline$->$''. 538 These are not really infix operators, since their right ``operand'' is not a value or object. 539 540 \item 541 Cast operators\index{cast expression}. 542 Anything that can be done with an explicit cast can be done with a function call. 543 The difference in syntax is small. 701 544 \end{itemize} 702 545 \end{rationale} … … 705 548 \section{Expressions} 706 549 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 550 \CFA allows operators and identifiers to be overloaded. 551 Hence, each expression can have a number of \define{interpretation}s, each of which has a different type. 552 The interpretations that are potentially executable are called \define{valid interpretation}s. 553 The set of interpretations depends on the kind of expression and on the interpretations of the subexpressions that it contains. 554 The rules for determining the valid interpretations of an expression are discussed below for each kind of expression. 555 Eventually the context of the outermost expression chooses one interpretation of that expression. 556 557 An \define{ambiguous interpretation} is an interpretation which does not specify the exact object or function denoted by every identifier in the expression. 558 An expression can have some interpretations that are ambiguous and others that are unambiguous. 559 An expression that is chosen to be executed shall not be ambiguous. 560 561 The \define{best valid interpretations} are the valid interpretations that use the fewest unsafe\index{unsafe conversion} conversions. 562 Of these, the best are those where the functions and objects involved are the least polymorphic\index{less polymorphic}. 563 Of these, the best have the lowest total \Index{conversion cost}, including all implicit conversions in the argument expressions. 564 Of these, the best have the highest total conversion cost for the implicit conversions 565 (if any) applied to the argument expressions. 566 If there is no single best valid interpretation, or if the best valid interpretation is ambiguous, then the resulting interpretation is ambiguous\index{ambiguous interpretation}. 567 568 \begin{rationale} 569 \CFA's rules for selecting the best interpretation are designed to allow overload resolution to mimic C's operator semantics. 570 In C, the ``usual arithmetic conversions'' are applied to the operands of binary operators if necessary to convert the operands to types with a common real type. 571 In \CFA, those conversions are ``safe''. 572 The ``fewest unsafe conversions'' rule ensures that the usual conversions are done, if possible. 573 The ``lowest total expression cost'' rule chooses the proper common type. 574 The odd-looking ``highest argument conversion cost'' rule ensures that, when unary expressions must be converted, conversions of function results are preferred to conversion of function arguments: \lstinline$(double)-i$ will be preferred to \lstinline$-(double)i$. 575 576 The ``least polymorphic'' rule reduces the number of polymorphic function calls, since such functions are presumably more expensive than monomorphic functions and since the more specific function is presumably more appropriate. 577 It also gives preference to monomorphic values (such as the 742 578 \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. 579 \lstinline$0$\use{0}). 580 However, interpretations that call polymorphic functions are preferred to interpretations that perform unsafe conversions, because those conversions potentially lose accuracy or violate strong typing. 746 581 747 582 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. 583 {\CC} defined in \cite{C++}. 584 First, the result type of a function plays a role. 585 In {\CC}, a function call must be completely resolved based on the arguments to the call in most circumstances. 586 In \CFA, a function call may have several interpretations, each with a different result type, and the interpretations of the containing context choose among them. 587 Second, safe conversions are used to choose among interpretations of all sorts of functions; 588 in {\CC}, the ``usual arithmetic conversions'' are a separate set of rules that apply only to the built-in operators. 589 \end{rationale} 590 591 Expressions involving certain operators\index{operator identifiers} are considered to be equivalent to function calls. 592 A transformation from ``operator'' syntax to ``function call'' syntax is defined by \define{rewrite rules}. 593 Each operator has a set of predefined functions that overload its identifier. 594 Overload resolution determines which member of the set is executed in a given expression. 595 The functions have \Index{internal linkage} and are implicitly declared with \Index{file scope}. 596 The predefined functions and rewrite rules are discussed below for each of these operators. 597 \begin{rationale} 598 Predefined functions and constants have internal linkage because that simplifies optimization in traditional compile-and-link environments. 599 For instance, ``\lstinline$an_int + an_int$'' is equivalent to ``\lstinline$?+?(an_int, an_int)$''. 600 If integer addition has not been redefined in the current scope, a compiler can generate code to perform the addition directly. 601 If predefined functions had external linkage, this optimization would be difficult. 602 \end{rationale} 603 604 \begin{rationale} 605 Since each subsection describes the interpretations of an expression in terms of the interpretations of its subexpressions, this chapter can be taken as describing an overload resolution algorithm that uses one bottom-up pass over an expression tree. 606 Such an algorithm was first described (for Ada) by Baker~\cite{Bak:overload}. 607 It is extended here to handle polymorphic functions and arithmetic conversions. 608 The overload resolution rules and the predefined functions have been chosen so that, in programs that do not introduce overloaded declarations, expressions will have the same meaning in C and in \CFA. 609 \end{rationale} 610 611 \begin{rationale} 612 Expression syntax is quoted from the {\c11} standard. 613 The syntax itself defines the precedence and associativity of operators. 614 The sections are arranged in decreasing order of precedence, with all operators in a section having the same precedence. 785 615 \end{rationale} 786 616 … … 801 631 const int 1;@\use{1}@ 802 632 const int 0;@\use{0}@ 803 forall( dtype DT ) DT * const 0;804 forall( ftype FT ) FT * const 0;633 forall( dtype DT ) DT * const 0; 634 forall( ftype FT ) FT * const 0; 805 635 \end{lstlisting} 806 636 807 637 \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. 638 The \Index{valid interpretation} of an \nonterm{identifier} are given by the visible\index{visible} declarations of the identifier. 639 640 A \nonterm{constant} or \nonterm{string-literal} has one valid interpretation, which has the type and value defined by {\c11}. 641 The predefined integer identifiers ``\lstinline$1$'' and ``\lstinline$0$'' have the integer values 1 and 0, respectively. 642 The other two predefined ``\lstinline$0$'' identifiers are bound to polymorphic pointer values that, when specialized\index{specialization} with a data type or function type respectively, produce a null pointer of that type. 817 643 818 644 A parenthesised expression has the same interpretations as the contained \nonterm{expression}. 819 645 820 646 \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 647 The expression \lstinline$(void *)0$\use{0} specializes the (polymorphic) null pointer to a null pointer to \lstinline$void$. \lstinline$(const void *)0$ does the same, and also uses a safe conversion from \lstinline$void *$ to \lstinline$const void *$. 648 In each case, the null pointer conversion is better\index{best valid interpretations} than the unsafe conversion of the integer 825 649 \lstinline$0$ to a pointer. 826 650 … … 828 652 Note that the predefined identifiers have addresses. 829 653 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. 654 \CFA does not have C's concept of ``null pointer constants'', which are not typed values but special strings of tokens. 655 The C token ``\lstinline$0$'' is an expression of type \lstinline$int$ with the value ``zero'', and it \emph{also} is a null pointer constant. 656 Similarly, 657 ``\lstinline$(void *)0$ is an expression of type \lstinline$(void *)$ whose value is a null pointer, and it also is a null pointer constant. 658 However, in C, ``\lstinline$(void *)(void *)0$'' is 659 \emph{not} a null pointer constant, even though it is null-valued, a pointer, and constant! The semantics of C expressions contain many special cases to deal with subexpressions that are null pointer constants. 660 661 \CFA handles these cases through overload resolution. 662 The declaration 663 \begin{lstlisting} 664 forall( dtype DT ) DT * const 0; 665 \end{lstlisting} means that \lstinline$0$ is a polymorphic object, and contains a value that can have \emph{any} pointer-to-object type or pointer-to-incomplete type. 666 The only such value is the null pointer. 667 Therefore the type \emph{alone} is enough to identify a null pointer. 668 Where C defines an operator with a special case for the null pointer constant, \CFA defines predefined functions with a polymorphic object parameter. 848 669 \end{rationale} 849 670 … … 851 672 \subsubsection{Generic selection} 852 673 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. 674 \constraints The best interpretation of the controlling expression shall be unambiguous\index{ambiguous interpretation}, and shall have type compatible with at most one of the types named in its generic association list. 675 If a generic selection has no \lstinline$default$ generic association, the best interpretation of its controlling expression shall have type compatible with exactly one of the types named in its generic association list. 858 676 859 677 \semantics … … 883 701 \rewriterules 884 702 \begin{lstlisting} 885 a[b] @\rewrite@ ?[?]( b, a ) // if a has integer type */@\use{?[?]}@703 a[b] @\rewrite@ ?[?]( b, a ) // if a has integer type@\use{?[?]}@ 886 704 a[b] @\rewrite@ ?[?]( a, b ) // otherwise 887 a( ${\em arguments }$ ) @\rewrite@ ?()( a, ${\em arguments} )$@\use{?()}@705 a( @\emph{arguments}@ ) @\rewrite@ ?()( a, @\emph{arguments}@ )@\use{?()}@ 888 706 a++ @\rewrite@ ?++(&( a ))@\use{?++}@ 889 707 a-- @\rewrite@ ?--(&( a ))@\use{?--}@ … … 895 713 \predefined 896 714 \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 );715 forall( otype T ) lvalue T ?[?]( T *, ptrdiff_t );@\use{ptrdiff_t}@ 716 forall( otype T ) lvalue _Atomic T ?[?]( _Atomic T *, ptrdiff_t ); 717 forall( otype T ) lvalue const T ?[?]( const T *, ptrdiff_t ); 718 forall( otype T ) lvalue restrict T ?[?]( restrict T *, ptrdiff_t ); 719 forall( otype T ) lvalue volatile T ?[?]( volatile T *, ptrdiff_t ); 720 forall( otype T ) lvalue _Atomic const T ?[?]( _Atomic const T *, ptrdiff_t ); 721 forall( otype T ) lvalue _Atomic restrict T ?[?]( _Atomic restrict T *, ptrdiff_t ); 722 forall( otype T ) lvalue _Atomic volatile T ?[?]( _Atomic volatile T *, ptrdiff_t ); 723 forall( otype T ) lvalue const restrict T ?[?]( const restrict T *, ptrdiff_t ); 724 forall( otype T ) lvalue const volatile T ?[?]( const volatile T *, ptrdiff_t ); 725 forall( otype T ) lvalue restrict volatile T ?[?]( restrict volatile T *, ptrdiff_t ); 726 forall( otype T ) lvalue _Atomic const restrict T ?[?]( _Atomic const restrict T *, ptrdiff_t ); 727 forall( otype T ) lvalue _Atomic const volatile T ?[?]( _Atomic const volatile T *, ptrdiff_t ); 728 forall( otype T ) lvalue _Atomic restrict volatile T ?[?]( _Atomic restrict volatile T *, ptrdiff_t ); 729 forall( otype T ) lvalue const restrict volatile T ?[?]( const restrict volatile T *, ptrdiff_t ); 730 forall( otype T ) lvalue _Atomic const restrict volatile T ?[?]( _Atomic const restrict volatile T *, ptrdiff_t ); 913 731 \end{lstlisting} 914 732 \semantics 915 The interpretations of subscript expressions are the interpretations of the corresponding function 916 call expressions. 733 The interpretations of subscript expressions are the interpretations of the corresponding function call expressions. 917 734 \begin{rationale} 918 735 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. 736 \lstinline$i[a]$ equivalent. \CFA provides the equivalence through a rewrite rule to reduce the number of overloadings of \lstinline$?[?]$. 737 738 Subscript expressions are rewritten as function calls that pass the first parameter by value. 739 This is somewhat unfortunate, since array-like types tend to be large. 740 The alternative is to use the rewrite rule ``\lstinline$a[b]$ \rewrite \lstinline$?[?](&(a), b)$''. 741 However, C semantics forbid this approach: the \lstinline$a$ in ``\lstinline$a[b]$'' can be an arbitrary pointer value, which does not have an address. 927 742 928 743 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. 744 to qualified types} of \CFA's type system. 745 Type qualifiers are not included in type values, so polymorphic functions that take pointers to arbitrary types often come in one flavor for each possible qualification of the pointed-at type. 932 746 \end{rationale} 933 747 … … 936 750 937 751 \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: 752 A \define{function designator} is an interpretation of an expression that has function type. 753 The 754 \nonterm{postfix-expression} in a function call may have some interpretations that are function designators and some that are not. 755 756 For those interpretations of the \nonterm{postfix-expression} that are not function designators, the expression is rewritten and becomes a call of a function named ``\lstinline$?()$''. 757 The valid interpretations of the rewritten expression are determined in the manner described below. 758 759 Each combination of function designators and argument interpretations is considered. 760 For those interpretations of the \nonterm{postfix-expression} that are \Index{monomorphic function} designators, the combination has a \Index{valid interpretation} if the function designator accepts the number of arguments given, and each argument interpretation matches the corresponding explicit parameter: 951 761 \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 762 \item if the argument corresponds to a parameter in the function designator's prototype, the argument interpretation must have the same type as the corresponding parameter, or be implicitly convertible to the parameter's type 763 \item if the function designator's type does not include a prototype or if the argument corresponds to 958 764 ``\lstinline$...$'' in a prototype, a \Index{default argument promotion} is applied to it. 959 765 \end{itemize} … … 961 767 962 768 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 769 \Index{polymorphic function} designator and the function designator accepts the number of arguments given, there shall be at least one set of \define{implicit argument}s for the implicit parameters such that 966 770 \begin{itemize} 967 771 \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. 772 If the declaration of the implicit parameter uses \Index{type-class} \lstinline$type$\use{type}, the implicit argument must be an object type; 773 if it uses \lstinline$dtype$, the implicit argument must be an object type or an incomplete type; 774 and if it uses \lstinline$ftype$, the implicit argument must be a function type. 775 776 \item if an explicit parameter's type uses any implicit parameters, then the corresponding explicit argument must have a type that is (or can be safely converted\index{safe conversion} to) the type produced by substituting the implicit arguments for the implicit parameters in the explicit parameter type. 777 778 \item the remaining explicit arguments must match the remaining explicit parameters, as described for monomorphic function designators. 779 780 \item for each \Index{assertion parameter} in the function designator's type, there must be an object or function with the same identifier that is visible at the call site and whose type is compatible with or can be specialized to the type of the assertion declaration. 987 781 \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$. 782 There is a valid interpretation for each such set of implicit parameters. 783 The type of each valid interpretation is the return type of the function designator with implicit parameter values substituted for the implicit arguments. 784 785 A valid interpretation is ambiguous\index{ambiguous interpretation} if the function designator or any of the argument interpretations is ambiguous. 786 787 Every valid interpretation whose return type is not compatible with any other valid interpretation's return type is an interpretation of the function call expression. 788 789 Every set of valid interpretations that have mutually compatible\index{compatible type} result types also produces an interpretation of the function call expression. 790 The type of the interpretation is the \Index{composite type} of the types of the valid interpretations, and the value of the interpretation is that of the \Index{best valid interpretation}. 791 \begin{rationale} 792 One desirable property of a polymorphic programming language is \define{generalizability}: the ability to replace an abstraction with a more general but equivalent abstraction without requiring changes in any of the uses of the original\cite{Cormack90}. 793 For instance, it should be possible to replace a function ``\lstinline$int f( int );$'' with ``\lstinline$forall( otype T ) T f( T );$'' without affecting any calls of \lstinline$f$. 1008 794 1009 795 \CFA\index{deficiencies!generalizability} does not fully possess this property, because … … 1015 801 float f; 1016 802 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 803 f = g( f, f ); // (1) 804 f = g( i, f ); // (2) (safe conversion to float) 805 f = g( d, f ); // (3) (unsafe conversion to float) 806 \end{lstlisting} 807 If \lstinline$g$ was replaced by ``\lstinline$forall( otype T ) T g( T, T );$'', the first and second calls would be unaffected, but the third would change: \lstinline$f$ would be converted to 1023 808 \lstinline$double$, and the result would be a \lstinline$double$. 1024 809 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.810 Another example is the function ``\lstinline$void h( int *);$''. 811 This function can be passed a 812 \lstinline$void *$ argument, but the generalization ``\lstinline$forall( otype T ) void h( T *);$'' can not. 813 In this case, \lstinline$void$ is not a valid value for \lstinline$T$ because it is not an object type. 814 If unsafe conversions were allowed, \lstinline$T$ could be inferred to be \emph{any} object type, which is undesirable. 1030 815 \end{rationale} 1031 816 … … 1033 818 A function called ``\lstinline$?()$'' might be part of a numerical differentiation package. 1034 819 \begin{lstlisting} 1035 extern type Derivative;820 extern otype Derivative; 1036 821 extern double ?()( Derivative, double ); 1037 822 extern Derivative derivative_of( double (*f)( double ) ); … … 1045 830 For that interpretation, the function call is treated as ``\lstinline$?()( sin_dx, 12.9 )$''. 1046 831 \begin{lstlisting} 1047 int f( long ); // (1) 1048 int f( int, int ); // (2) 832 int f( long ); // (1) 833 int f( int, int ); // (2) 1049 834 int f( int *); // (3) 1050 1051 835 int i = f( 5 ); // calls (1) 1052 836 \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 ); 837 Function (1) provides a valid interpretation of ``\lstinline$f( 5 )$'', using an implicit \lstinline$int$ to \lstinline$long$ conversion. 838 The other functions do not, since the second requires two arguments, and since there is no implicit conversion from \lstinline$int$ to \lstinline$int *$ that could be used with the third function. 839 840 \begin{lstlisting} 841 forall( otype T ) T h( T ); 1060 842 double d = h( 1.5 ); 1061 843 \end{lstlisting} … … 1064 846 1065 847 \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) 848 forall( otype T, otype U ) void g( T, U ); // (4) 849 forall( otype T ) void g( T, T ); // (5) 850 forall( otype T ) void g( T, long ); // (6) 851 void g( long, long ); // (7) 1070 852 double d; 1071 853 int i; 1072 854 int *p; 1073 1074 g( d, d ); // calls (5) 1075 g( d, i ); // calls (6) 1076 g( i, i ); // calls (7) 855 g( d, d ); // calls (5) 856 g( d, i ); // calls (6) 857 g( i, i ); // calls (7) 1077 858 g( i, p ); // calls (4) 1078 859 \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 ); 860 The first call has valid interpretations for all four versions of \lstinline$g$. (6) and (7) are discarded because they involve unsafe \lstinline$double$-to-\lstinline$long$ conversions. (5) is chosen because it is less polymorphic than (4). 861 862 For the second call, (7) is again discarded. 863 Of the remaining interpretations for (4), (5), and (6) (with \lstinline$i$ converted to \lstinline$long$), (6) is chosen because it is the least polymorphic. 864 865 The third call has valid interpretations for all of the functions; 866 (7) is chosen since it is not polymorphic at all. 867 868 The fourth call has no interpretation for (5), because its arguments must have compatible type. (4) is chosen because it does not involve unsafe conversions. 869 \begin{lstlisting} 870 forall( otype T ) T min( T, T ); 1094 871 double max( double, double ); 1095 context min_max( T ) {@\impl{min_max}@872 trait min_max( T ) {@\impl{min_max}@ 1096 873 T min( T, T ); 1097 874 T max( T, T ); 1098 875 } 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 876 forall( otype U | min_max( U ) ) void shuffle( U, U ); 877 shuffle( 9, 10 ); 878 \end{lstlisting} 879 The only possibility for \lstinline$U$ is \lstinline$double$, because that is the type used in the only visible \lstinline$max$ function. 9 and 10 must be converted to \lstinline$double$, and 1104 880 \lstinline$min$ must be specialized with \lstinline$T$ bound to \lstinline$double$. 1105 881 \begin{lstlisting} 1106 extern void q( int ); // (8) 1107 extern void q( void * ); // (9) 882 extern void q( int ); // (8) 883 extern void q( void * ); // (9) 1108 884 extern void r(); 1109 885 q( 0 ); 1110 886 r( 0 ); 1111 887 \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. 888 The \lstinline$int 0$ could be passed to (8), or the \lstinline$(void *)$ \Index{specialization} of the null pointer\index{null pointer} \lstinline$0$\use{0} could be passed to (9). 889 The former is chosen because the \lstinline$int$ \lstinline$0$ is \Index{less polymorphic}. 890 For the same reason, \lstinline$int$ \lstinline$0$ is passed to \lstinline$r()$, even though it has \emph{no} declared parameter types. 1117 891 1118 892 1119 893 \subsubsection{Structure and union members} 1120 894 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. 895 \semantics In the member selection expression ``\lstinline$s$.\lstinline$m$'', there shall be at least one interpretation of \lstinline$s$ whose type is a structure type or union type containing a member named \lstinline$m$. 896 If two or more interpretations of \lstinline$s$ have members named 897 \lstinline$m$ with mutually compatible types, then the expression has an \Index{ambiguous interpretation} whose type is the composite type of the types of the members. 898 If an interpretation of \lstinline$s$ has a member \lstinline$m$ whose type is not compatible with any other 899 \lstinline$s$'s \lstinline$m$, then the expression has an interpretation with the member's type. 900 The expression has no other interpretations. 1129 901 1130 902 The expression ``\lstinline$p->m$'' has the same interpretations as the expression … … 1136 908 \predefined 1137 909 \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 * ), 910 _Bool ?++( volatile _Bool * ), ?++( _Atomic volatile _Bool * ); 911 char ?++( volatile char * ), ?++( _Atomic volatile char * ); 912 signed char ?++( volatile signed char * ), ?++( _Atomic volatile signed char * ); 913 unsigned char ?++( volatile signed char * ), ?++( _Atomic volatile signed char * ); 914 short int ?++( volatile short int * ), ?++( _Atomic volatile short int * ); 915 unsigned short int ?++( volatile unsigned short int * ), ?++( _Atomic volatile unsigned short int * ); 916 int ?++( volatile int * ), ?++( _Atomic volatile int * ); 917 unsigned int ?++( volatile unsigned int * ), ?++( _Atomic volatile unsigned int * ); 918 long int ?++( volatile long int * ), ?++( _Atomic volatile long int * ); 919 long unsigned int ?++( volatile long unsigned int * ), ?++( _Atomic volatile long unsigned int * ); 920 long long int ?++( volatile long long int * ), ?++( _Atomic volatile long long int * ); 921 long long unsigned ?++( volatile long long unsigned int * ), ?++( _Atomic volatile long long unsigned int * ); 922 float ?++( volatile float * ), ?++( _Atomic volatile float * ); 923 double ?++( volatile double * ), ?++( _Atomic volatile double * ); 924 long double ?++( volatile long double * ), ?++( _Atomic volatile long double * ); 925 926 forall( otype T ) T * ?++( T * restrict volatile * ), * ?++( T * _Atomic restrict volatile * ); 927 forall( otype T ) _Atomic T * ?++( _Atomic T * restrict volatile * ), * ?++( _Atomic T * _Atomic restrict volatile * ); 928 forall( otype T ) const T * ?++( const T * restrict volatile * ), * ?++( const T * _Atomic restrict volatile * ); 929 forall( otype T ) volatile T * ?++( volatile T * restrict volatile * ), * ?++( volatile T * _Atomic restrict volatile * ); 930 forall( otype T ) restrict T * ?++( restrict T * restrict volatile * ), * ?++( restrict T * _Atomic restrict volatile * ); 931 forall( otype T ) _Atomic const T * ?++( _Atomic const T * restrict volatile * ), 1185 932 * ?++( _Atomic const T * _Atomic restrict volatile * ); 1186 1187 forall( type T ) _Atomic restrict T * ?++( _Atomic restrict T * restrict volatile * ), 933 forall( otype T ) _Atomic restrict T * ?++( _Atomic restrict T * restrict volatile * ), 1188 934 * ?++( _Atomic restrict T * _Atomic restrict volatile * ); 1189 1190 forall( type T ) _Atomic volatile T * ?++( _Atomic volatile T * restrict volatile * ), 935 forall( otype T ) _Atomic volatile T * ?++( _Atomic volatile T * restrict volatile * ), 1191 936 * ?++( _Atomic volatile T * _Atomic restrict volatile * ); 1192 1193 forall( type T ) const restrict T * ?++( const restrict T * restrict volatile * ), 937 forall( otype T ) const restrict T * ?++( const restrict T * restrict volatile * ), 1194 938 * ?++( const restrict T * _Atomic restrict volatile * ); 1195 1196 forall( type T ) const volatile T * ?++( const volatile T * restrict volatile * ), 939 forall( otype T ) const volatile T * ?++( const volatile T * restrict volatile * ), 1197 940 * ?++( const volatile T * _Atomic restrict volatile * ); 1198 1199 forall( type T ) restrict volatile T * ?++( restrict volatile T * restrict volatile * ), 941 forall( otype T ) restrict volatile T * ?++( restrict volatile T * restrict volatile * ), 1200 942 * ?++( restrict volatile T * _Atomic restrict volatile * ); 1201 1202 forall( type T ) _Atomic const restrict T * ?++( _Atomic const restrict T * restrict volatile * ), 943 forall( otype T ) _Atomic const restrict T * ?++( _Atomic const restrict T * restrict volatile * ), 1203 944 * ?++( _Atomic const restrict T * _Atomic restrict volatile * ); 1204 1205 forall( type T ) _Atomic const volatile T * ?++( _Atomic const volatile T * restrict volatile * ), 945 forall( otype T ) _Atomic const volatile T * ?++( _Atomic const volatile T * restrict volatile * ), 1206 946 * ?++( _Atomic const volatile T * _Atomic restrict volatile * ); 1207 1208 forall( type T ) _Atomic restrict volatile T * ?++( _Atomic restrict volatile T * restrict volatile * ), 947 forall( otype T ) _Atomic restrict volatile T * ?++( _Atomic restrict volatile T * restrict volatile * ), 1209 948 * ?++( _Atomic restrict volatile T * _Atomic restrict volatile * ); 1210 1211 forall( type T ) const restrict volatile T * ?++( const restrict volatile T * restrict volatile * ), 949 forall( otype T ) const restrict volatile T * ?++( const restrict volatile T * restrict volatile * ), 1212 950 * ?++( const restrict volatile T * _Atomic restrict volatile * ); 1213 1214 forall( type T ) _Atomic const restrict volatile T * ?++( _Atomic const restrict volatile T * restrict volatile * ), 951 forall( otype T ) _Atomic const restrict volatile T * ?++( _Atomic const restrict volatile T * restrict volatile * ), 1215 952 * ?++( _Atomic const restrict volatile T * _Atomic restrict volatile * ); 1216 953 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 * ), 954 _Bool ?--( volatile _Bool * ), ?--( _Atomic volatile _Bool * ); 955 char ?--( volatile char * ), ?--( _Atomic volatile char * ); 956 signed char ?--( volatile signed char * ), ?--( _Atomic volatile signed char * ); 957 unsigned char ?--( volatile signed char * ), ?--( _Atomic volatile signed char * ); 958 short int ?--( volatile short int * ), ?--( _Atomic volatile short int * ); 959 unsigned short int ?--( volatile unsigned short int * ), ?--( _Atomic volatile unsigned short int * ); 960 int ?--( volatile int * ), ?--( _Atomic volatile int * ); 961 unsigned int ?--( volatile unsigned int * ), ?--( _Atomic volatile unsigned int * ); 962 long int ?--( volatile long int * ), ?--( _Atomic volatile long int * ); 963 long unsigned int ?--( volatile long unsigned int * ), ?--( _Atomic volatile long unsigned int * ); 964 long long int ?--( volatile long long int * ), ?--( _Atomic volatile long long int * ); 965 long long unsigned ?--( volatile long long unsigned int * ), ?--( _Atomic volatile long long unsigned int * ); 966 float ?--( volatile float * ), ?--( _Atomic volatile float * ); 967 double ?--( volatile double * ), ?--( _Atomic volatile double * ); 968 long double ?--( volatile long double * ), ?--( _Atomic volatile long double * ); 969 970 forall( otype T ) T * ?--( T * restrict volatile * ), * ?--( T * _Atomic restrict volatile * ); 971 forall( otype T ) _Atomic T * ?--( _Atomic T * restrict volatile * ), * ?--( _Atomic T * _Atomic restrict volatile * ); 972 forall( otype T ) const T * ?--( const T * restrict volatile * ), * ?--( const T * _Atomic restrict volatile * ); 973 forall( otype T ) volatile T * ?--( volatile T * restrict volatile * ), * ?--( volatile T * _Atomic restrict volatile * ); 974 forall( otype T ) restrict T * ?--( restrict T * restrict volatile * ), * ?--( restrict T * _Atomic restrict volatile * ); 975 forall( otype T ) _Atomic const T * ?--( _Atomic const T * restrict volatile * ), 1264 976 * ?--( _Atomic const T * _Atomic restrict volatile * ); 1265 1266 forall( type T ) _Atomic restrict T * ?--( _Atomic restrict T * restrict volatile * ), 977 forall( otype T ) _Atomic restrict T * ?--( _Atomic restrict T * restrict volatile * ), 1267 978 * ?--( _Atomic restrict T * _Atomic restrict volatile * ); 1268 1269 forall( type T ) _Atomic volatile T * ?--( _Atomic volatile T * restrict volatile * ), 979 forall( otype T ) _Atomic volatile T * ?--( _Atomic volatile T * restrict volatile * ), 1270 980 * ?--( _Atomic volatile T * _Atomic restrict volatile * ); 1271 1272 forall( type T ) const restrict T * ?--( const restrict T * restrict volatile * ), 981 forall( otype T ) const restrict T * ?--( const restrict T * restrict volatile * ), 1273 982 * ?--( const restrict T * _Atomic restrict volatile * ); 1274 1275 forall( type T ) const volatile T * ?--( const volatile T * restrict volatile * ), 983 forall( otype T ) const volatile T * ?--( const volatile T * restrict volatile * ), 1276 984 * ?--( const volatile T * _Atomic restrict volatile * ); 1277 1278 forall( type T ) restrict volatile T * ?--( restrict volatile T * restrict volatile * ), 985 forall( otype T ) restrict volatile T * ?--( restrict volatile T * restrict volatile * ), 1279 986 * ?--( restrict volatile T * _Atomic restrict volatile * ); 1280 1281 forall( type T ) _Atomic const restrict T * ?--( _Atomic const restrict T * restrict volatile * ), 987 forall( otype T ) _Atomic const restrict T * ?--( _Atomic const restrict T * restrict volatile * ), 1282 988 * ?--( _Atomic const restrict T * _Atomic restrict volatile * ); 1283 1284 forall( type T ) _Atomic const volatile T * ?--( _Atomic const volatile T * restrict volatile * ), 989 forall( otype T ) _Atomic const volatile T * ?--( _Atomic const volatile T * restrict volatile * ), 1285 990 * ?--( _Atomic const volatile T * _Atomic restrict volatile * ); 1286 1287 forall( type T ) _Atomic restrict volatile T * ?--( _Atomic restrict volatile T * restrict volatile * ), 991 forall( otype T ) _Atomic restrict volatile T * ?--( _Atomic restrict volatile T * restrict volatile * ), 1288 992 * ?--( _Atomic restrict volatile T * _Atomic restrict volatile * ); 1289 1290 forall( type T ) const restrict volatile T * ?--( const restrict volatile T * restrict volatile * ), 993 forall( otype T ) const restrict volatile T * ?--( const restrict volatile T * restrict volatile * ), 1291 994 * ?--( const restrict volatile T * _Atomic restrict volatile * ); 1292 1293 forall( type T ) _Atomic const restrict volatile T * ?--( _Atomic const restrict volatile T * restrict volatile * ), 995 forall( otype T ) _Atomic const restrict volatile T * ?--( _Atomic const restrict volatile T * restrict volatile * ), 1294 996 * ?--( _Atomic const restrict volatile T * _Atomic restrict volatile * ); 1295 997 \end{lstlisting} … … 1308 1010 1309 1011 \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$. 1012 Note that ``\lstinline$++$'' and ``\lstinline$--$'' are rewritten as function calls that are given a pointer to that operand. (This is true of all operators that modify an operand.) As Hamish Macdonald has pointed out, this forces the modified operand of such expressions to be an lvalue. 1013 This partially enforces the C semantic rule that such operands must be \emph{modifiable} lvalues. 1014 \end{rationale} 1015 1016 \begin{rationale} 1017 In C, a semantic rule requires that pointer operands of increment and decrement be pointers to object types. 1018 Hence, \lstinline$void *$ objects cannot be incremented. 1019 In \CFA, the restriction follows from the use of a \lstinline$type$ parameter in the predefined function definitions, as opposed to \lstinline$dtype$, since only object types can be inferred arguments corresponding to the type parameter \lstinline$T$. 1322 1020 \end{rationale} 1323 1021 1324 1022 \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. 1023 First, each interpretation of the operand of an increment or decrement expression is considered separately. 1024 For each interpretation that is a bit-field or is declared with the 1025 \lstinline$register$\index{register@{\lstinline$register$}} \index{Itorage-class specifier}, the expression has one valid interpretation, with the type of the operand, and the expression is ambiguous if the operand is. 1026 1027 For the remaining interpretations, the expression is rewritten, and the interpretations of the expression are the interpretations of the corresponding function call. 1028 Finally, all interpretations of the expression produced for the different interpretations of the operand are combined to produce the interpretations of the expression as a whole; where interpretations have compatible result types, the best interpretations are selected in the manner described for function call expressions. 1336 1029 1337 1030 \examples … … 1346 1039 \lstinline$vs++$ calls the \lstinline$?++$ function with the \lstinline$volatile short *$ parameter. 1347 1040 \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. 1041 \lstinline$volatile short int *$. 1042 Note that there is no conversion that adds an \lstinline$_Atomic$ qualifier, so the \lstinline$_Atomic volatile short int$ overloading does not provide a valid interpretation. 1351 1043 \end{sloppypar} 1352 1044 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. 1045 There is no safe conversion from \lstinline$const short int *$ to \lstinline$volatile short int *$, and no \lstinline$?++$ function that accepts a \lstinline$const *$ parameter, so \lstinline$cs++$ has no valid interpretations. 1046 1047 The best valid interpretation of \lstinline$as++$ calls the \lstinline$short ?++$ function with the \lstinline$_Atomic volatile short int *$ parameter, applying a safe conversion to add the \lstinline$volatile$ qualifier. 1048 \begin{lstlisting} 1049 char * const restrict volatile * restrict volatile pqpc; 1050 pqpc++ 1051 char * * restrict volatile ppc; 1052 ppc++; 1053 \end{lstlisting} 1054 Since \lstinline$&(pqpc)$ has type \lstinline$char * const restrict volatile * restrict volatile *$, the best valid interpretation of \lstinline$pqpc++$ calls the polymorphic \lstinline$?++$ function with the \lstinline$const restrict volatile T * restrict volatile *$ parameter, inferring \lstinline$T$ to be \lstinline$char *$. 1055 1056 \lstinline$ppc++$ calls the same function, again inferring \lstinline$T$ to be \lstinline$char *$, and using the safe conversions from \lstinline$T$ to \lstinline$T const$ \lstinline$restrict volatile$. 1057 1058 \begin{rationale} 1059 Increment and decrement expressions show up a deficiency of \CFA's type system. 1060 There is no such thing as a pointer to a register object or bit-field\index{deficiencies!pointers to bit-fields}. 1061 Therefore, there is no way to define a function that alters them, and hence no way to define increment and decrement functions for them. 1062 As a result, the semantics of increment and decrement expressions must treat them specially. 1063 This holds true for all of the operators that may modify such objects. 1064 \end{rationale} 1065 1066 \begin{rationale} 1067 The polymorphic overloadings for pointer increment and decrement can be understood by considering increasingly complex types. 1387 1068 \begin{enumerate} 1388 1069 \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 1070 ``\lstinline$char * p; p++;$''. 1071 The argument to \lstinline$?++$ has type \lstinline$char * *$, and the result has type \lstinline$char *$. 1072 The expression would be valid if \lstinline$?++$ were declared by 1073 \begin{lstlisting} 1074 forall( otype T ) T * ?++( T * * ); 1075 \end{lstlisting} with \lstinline$T$ inferred to be \lstinline$char$. 1076 1077 \item 1078 ``\lstinline$char *restrict volatile qp; qp++$''. 1079 The result again has type \lstinline$char *$, but the argument now has type \lstinline$char *restrict volatile *$, so it cannot be passed to the hypothetical function declared in point 1. 1080 Hence the actual predefined function is 1081 \begin{lstlisting} 1082 forall( otype T ) T * ?++( T * restrict volatile * ); 1083 \end{lstlisting} which also accepts a \lstinline$char * *$ argument, because of the safe conversions that add 1084 \lstinline$volatile$ and \lstinline$restrict$ qualifiers. (The parameter is not const-qualified, so constant pointers cannot be incremented.) 1085 1086 \item 1087 ``\lstinline$char *_Atomic ap; ap++$''. 1088 The result again has type \lstinline$char *$, but no safe conversion adds an \lstinline$_Atomic$ qualifier, so the function in point 2 is not applicable. 1089 A separate overloading of \lstinline$?++$ is required. 1090 1091 \item 1092 ``\lstinline$char const volatile * pq; pq++$''. 1093 Here the result has type 1415 1094 \lstinline$char const volatile *$, so a new overloading is needed: 1416 1095 \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}. 1096 forall( otype T ) T const volatile * ?++( T const volatile *restrict volatile * ); 1097 \end{lstlisting} 1098 One overloading is needed for each combination of qualifiers in the pointed-at type\index{deficiencies!pointers to qualified types}. 1421 1099 1422 1100 \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. 1101 ``\lstinline$float *restrict * prp; prp++$''. 1102 The \lstinline$restrict$ qualifier is handled just like \lstinline$const$ and \lstinline$volatile$ in the previous case: 1103 \begin{lstlisting} 1104 forall( otype T ) T restrict * ?++( T restrict *restrict volatile * ); 1105 \end{lstlisting} with \lstinline$T$ inferred to be \lstinline$float *$. 1106 This looks odd, because {\c11} contains a constraint that requires restrict-qualified types to be pointer-to-object types, and \lstinline$T$ is not syntactically a pointer type. \CFA loosens the constraint. 1431 1107 \end{enumerate} 1432 1108 \end{rationale} … … 1436 1112 1437 1113 \semantics 1438 A compound literal has one interpretation, with the type given by the \nonterm{type-name} of the 1439 compound literal. 1114 A compound literal has one interpretation, with the type given by the \nonterm{type-name} of the compound literal. 1440 1115 1441 1116 … … 1455 1130 \rewriterules 1456 1131 \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{--?}@1132 *a @\rewrite@ *?( a ) @\use{*?}@ 1133 +a @\rewrite@ +?( a ) @\use{+?}@ 1134 -a @\rewrite@ -?( a ) @\use{-?}@ 1135 ~a @\rewrite@ ~?( a ) @\use{~?}@ 1136 !a @\rewrite@ !?( a ) @\use{"!?}@ 1137 ++a @\rewrite@ ++?(&( a )) @\use{++?}@ 1138 --a @\rewrite@ --?(&( a )) @\use{--?}@ 1464 1139 \end{lstlisting} 1465 1140 … … 1469 1144 \predefined 1470 1145 \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 * ), 1146 _Bool ++?( volatile _Bool * ), ++?( _Atomic volatile _Bool * ); 1147 char ++?( volatile char * ), ++?( _Atomic volatile char * ); 1148 signed char ++?( volatile signed char * ), ++?( _Atomic volatile signed char * ); 1149 unsigned char ++?( volatile signed char * ), ++?( _Atomic volatile signed char * ); 1150 short int ++?( volatile short int * ), ++?( _Atomic volatile short int * ); 1151 unsigned short int ++?( volatile unsigned short int * ), ++?( _Atomic volatile unsigned short int * ); 1152 int ++?( volatile int * ), ++?( _Atomic volatile int * ); 1153 unsigned int ++?( volatile unsigned int * ), ++?( _Atomic volatile unsigned int * ); 1154 long int ++?( volatile long int * ), ++?( _Atomic volatile long int * ); 1155 long unsigned int ++?( volatile long unsigned int * ), ++?( _Atomic volatile long unsigned int * ); 1156 long long int ++?( volatile long long int * ), ++?( _Atomic volatile long long int * ); 1157 long long unsigned ++?( volatile long long unsigned int * ), ++?( _Atomic volatile long long unsigned int * ); 1158 float ++?( volatile float * ), ++?( _Atomic volatile float * ); 1159 double ++?( volatile double * ), ++?( _Atomic volatile double * ); 1160 long double ++?( volatile long double * ), ++?( _Atomic volatile long double * ); 1161 1162 forall( otype T ) T * ++?( T * restrict volatile * ), * ++?( T * _Atomic restrict volatile * ); 1163 forall( otype T ) _Atomic T * ++?( _Atomic T * restrict volatile * ), * ++?( _Atomic T * _Atomic restrict volatile * ); 1164 forall( otype T ) const T * ++?( const T * restrict volatile * ), * ++?( const T * _Atomic restrict volatile * ); 1165 forall( otype T ) volatile T * ++?( volatile T * restrict volatile * ), * ++?( volatile T * _Atomic restrict volatile * ); 1166 forall( otype T ) restrict T * ++?( restrict T * restrict volatile * ), * ++?( restrict T * _Atomic restrict volatile * ); 1167 forall( otype T ) _Atomic const T * ++?( _Atomic const T * restrict volatile * ), 1518 1168 * ++?( _Atomic const T * _Atomic restrict volatile * ); 1519 1520 forall( type T ) _Atomic volatile T * ++?( _Atomic volatile T * restrict volatile * ), 1169 forall( otype T ) _Atomic volatile T * ++?( _Atomic volatile T * restrict volatile * ), 1521 1170 * ++?( _Atomic volatile T * _Atomic restrict volatile * ); 1522 1523 forall( type T ) _Atomic restrict T * ++?( _Atomic restrict T * restrict volatile * ), 1171 forall( otype T ) _Atomic restrict T * ++?( _Atomic restrict T * restrict volatile * ), 1524 1172 * ++?( _Atomic restrict T * _Atomic restrict volatile * ); 1525 1526 forall( type T ) const volatile T * ++?( const volatile T * restrict volatile * ), 1173 forall( otype T ) const volatile T * ++?( const volatile T * restrict volatile * ), 1527 1174 * ++?( const volatile T * _Atomic restrict volatile * ); 1528 1529 forall( type T ) const restrict T * ++?( const restrict T * restrict volatile * ), 1175 forall( otype T ) const restrict T * ++?( const restrict T * restrict volatile * ), 1530 1176 * ++?( const restrict T * _Atomic restrict volatile * ); 1531 1532 forall( type T ) restrict volatile T * ++?( restrict volatile T * restrict volatile * ), 1177 forall( otype T ) restrict volatile T * ++?( restrict volatile T * restrict volatile * ), 1533 1178 * ++?( restrict volatile T * _Atomic restrict volatile * ); 1534 1535 forall( type T ) _Atomic const volatile T * ++?( _Atomic const volatile T * restrict volatile * ), 1179 forall( otype T ) _Atomic const volatile T * ++?( _Atomic const volatile T * restrict volatile * ), 1536 1180 * ++?( _Atomic const volatile T * _Atomic restrict volatile * ); 1537 1538 forall( type T ) _Atomic const restrict T * ++?( _Atomic const restrict T * restrict volatile * ), 1181 forall( otype T ) _Atomic const restrict T * ++?( _Atomic const restrict T * restrict volatile * ), 1539 1182 * ++?( _Atomic const restrict T * _Atomic restrict volatile * ); 1540 1541 forall( type T ) _Atomic restrict volatile T * ++?( _Atomic restrict volatile T * restrict volatile * ), 1183 forall( otype T ) _Atomic restrict volatile T * ++?( _Atomic restrict volatile T * restrict volatile * ), 1542 1184 * ++?( _Atomic restrict volatile T * _Atomic restrict volatile * ); 1543 1544 forall( type T ) const restrict volatile T * ++?( const restrict volatile T * restrict volatile * ), 1185 forall( otype T ) const restrict volatile T * ++?( const restrict volatile T * restrict volatile * ), 1545 1186 * ++?( const restrict volatile T * _Atomic restrict volatile * ); 1546 1547 forall( type T ) _Atomic const restrict volatile T * ++?( _Atomic const restrict volatile T * restrict volatile * ), 1187 forall( otype T ) _Atomic const restrict volatile T * ++?( _Atomic const restrict volatile T * restrict volatile * ), 1548 1188 * ++?( _Atomic const restrict volatile T * _Atomic restrict volatile * ); 1549 1189 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 * ), 1190 _Bool --?( volatile _Bool * ), --?( _Atomic volatile _Bool * ); 1191 char --?( volatile char * ), --?( _Atomic volatile char * ); 1192 signed char --?( volatile signed char * ), --?( _Atomic volatile signed char * ); 1193 unsigned char --?( volatile signed char * ), --?( _Atomic volatile signed char * ); 1194 short int --?( volatile short int * ), --?( _Atomic volatile short int * ); 1195 unsigned short int --?( volatile unsigned short int * ), --?( _Atomic volatile unsigned short int * ); 1196 int --?( volatile int * ), --?( _Atomic volatile int * ); 1197 unsigned int --?( volatile unsigned int * ), --?( _Atomic volatile unsigned int * ); 1198 long int --?( volatile long int * ), --?( _Atomic volatile long int * ); 1199 long unsigned int --?( volatile long unsigned int * ), --?( _Atomic volatile long unsigned int * ); 1200 long long int --?( volatile long long int * ), --?( _Atomic volatile long long int * ); 1201 long long unsigned --?( volatile long long unsigned int * ), --?( _Atomic volatile long long unsigned int * ); 1202 float --?( volatile float * ), --?( _Atomic volatile float * ); 1203 double --?( volatile double * ), --?( _Atomic volatile double * ); 1204 long double --?( volatile long double * ), --?( _Atomic volatile long double * ); 1205 1206 forall( otype T ) T * --?( T * restrict volatile * ), * --?( T * _Atomic restrict volatile * ); 1207 forall( otype T ) _Atomic T * --?( _Atomic T * restrict volatile * ), * --?( _Atomic T * _Atomic restrict volatile * ); 1208 forall( otype T ) const T * --?( const T * restrict volatile * ), * --?( const T * _Atomic restrict volatile * ); 1209 forall( otype T ) volatile T * --?( volatile T * restrict volatile * ), * --?( volatile T * _Atomic restrict volatile * ); 1210 forall( otype T ) restrict T * --?( restrict T * restrict volatile * ), * --?( restrict T * _Atomic restrict volatile * ); 1211 forall( otype T ) _Atomic const T * --?( _Atomic const T * restrict volatile * ), 1597 1212 * --?( _Atomic const T * _Atomic restrict volatile * ); 1598 1599 forall( type T ) _Atomic volatile T * --?( _Atomic volatile T * restrict volatile * ), 1213 forall( otype T ) _Atomic volatile T * --?( _Atomic volatile T * restrict volatile * ), 1600 1214 * --?( _Atomic volatile T * _Atomic restrict volatile * ); 1601 1602 forall( type T ) _Atomic restrict T * --?( _Atomic restrict T * restrict volatile * ), 1215 forall( otype T ) _Atomic restrict T * --?( _Atomic restrict T * restrict volatile * ), 1603 1216 * --?( _Atomic restrict T * _Atomic restrict volatile * ); 1604 1605 forall( type T ) const volatile T * --?( const volatile T * restrict volatile * ), 1217 forall( otype T ) const volatile T * --?( const volatile T * restrict volatile * ), 1606 1218 * --?( const volatile T * _Atomic restrict volatile * ); 1607 1608 forall( type T ) const restrict T * --?( const restrict T * restrict volatile * ), 1219 forall( otype T ) const restrict T * --?( const restrict T * restrict volatile * ), 1609 1220 * --?( const restrict T * _Atomic restrict volatile * ); 1610 1611 forall( type T ) restrict volatile T * --?( restrict volatile T * restrict volatile * ), 1221 forall( otype T ) restrict volatile T * --?( restrict volatile T * restrict volatile * ), 1612 1222 * --?( restrict volatile T * _Atomic restrict volatile * ); 1613 1614 forall( type T ) _Atomic const volatile T * --?( _Atomic const volatile T * restrict volatile * ), 1223 forall( otype T ) _Atomic const volatile T * --?( _Atomic const volatile T * restrict volatile * ), 1615 1224 * --?( _Atomic const volatile T * _Atomic restrict volatile * ); 1616 1617 forall( type T ) _Atomic const restrict T * --?( _Atomic const restrict T * restrict volatile * ), 1225 forall( otype T ) _Atomic const restrict T * --?( _Atomic const restrict T * restrict volatile * ), 1618 1226 * --?( _Atomic const restrict T * _Atomic restrict volatile * ); 1619 1620 forall( type T ) _Atomic restrict volatile T * --?( _Atomic restrict volatile T * restrict volatile * ), 1227 forall( otype T ) _Atomic restrict volatile T * --?( _Atomic restrict volatile T * restrict volatile * ), 1621 1228 * --?( _Atomic restrict volatile T * _Atomic restrict volatile * ); 1622 1623 forall( type T ) const restrict volatile T * --?( const restrict volatile T * restrict volatile * ), 1229 forall( otype T ) const restrict volatile T * --?( const restrict volatile T * restrict volatile * ), 1624 1230 * --?( const restrict volatile T * _Atomic restrict volatile * ); 1625 1626 forall( type T ) _Atomic const restrict volatile T * --?( _Atomic const restrict volatile T * restrict volatile * ), 1231 forall( otype T ) _Atomic const restrict volatile T * --?( _Atomic const restrict volatile T * restrict volatile * ), 1627 1232 * --?( _Atomic const restrict volatile T * _Atomic restrict volatile * ); 1628 1233 \end{lstlisting} … … 1645 1250 1646 1251 \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. 1252 The interpretations of prefix increment and decrement expressions are determined in the same way as the interpretations of postfix increment and decrement expressions. 1650 1253 1651 1254 … … 1654 1257 \predefined 1655 1258 \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 1259 forall( otype T ) lvalue T *?( T * ); 1260 forall( otype T ) _Atomic lvalue T *?( _Atomic T * ); 1261 forall( otype T ) const lvalue T *?( const T * ); 1262 forall( otype T ) volatile lvalue T *?( volatile T * ); 1263 forall( otype T ) restrict lvalue T *?( restrict T * ); 1264 forall( otype T ) _Atomic const lvalue T *?( _Atomic const T * ); 1265 forall( otype T ) _Atomic volatile lvalue T *?( _Atomic volatile T * ); 1266 forall( otype T ) _Atomic restrict lvalue T *?( _Atomic restrict T * ); 1267 forall( otype T ) const volatile lvalue T *?( const volatile T * ); 1268 forall( otype T ) const restrict lvalue T *?( const restrict T * ); 1269 forall( otype T ) restrict volatile lvalue T *?( restrict volatile T * ); 1270 forall( otype T ) _Atomic const volatile lvalue T *?( _Atomic const volatile T * ); 1271 forall( otype T ) _Atomic const restrict lvalue T *?( _Atomic const restrict T * ); 1272 forall( otype T ) _Atomic restrict volatile lvalue T *?( _Atomic restrict volatile T * ); 1273 forall( otype T ) const restrict volatile lvalue T *?( const restrict volatile T * ); 1274 forall( otype T ) _Atomic const restrict volatile lvalue T *?( _Atomic const restrict volatile T * ); 1673 1275 forall( ftype FT ) FT *?( FT * ); 1674 1276 \end{lstlisting} … … 1682 1284 \lstinline$T$ is the type of the operand. 1683 1285 1684 The interpretations of an indirection expression are the interpretations of the corresponding 1685 function call. 1286 The interpretations of an indirection expression are the interpretations of the corresponding function call. 1686 1287 1687 1288 … … 1690 1291 \predefined 1691 1292 \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 1293 int +?( int ), -?( int ), ~?( int ); 1294 unsigned int +?( unsigned int ), -?( unsigned int ), ~?( unsigned int ); 1295 long int +?( long int ), -?( long int ), ~?( long int ); 1296 long unsigned int +?( long unsigned int ), -?( long unsigned int ), ~?( long unsigned int ); 1297 long long int +?( long long int ), -?( long long int ), ~?( long long int ); 1298 long long unsigned int +?( long long unsigned int ), -?( long long unsigned int ), ~?( long long unsigned int ); 1299 float +?( float ), -?( float ); 1300 double +?( double ), -?( double ); 1301 long double +?( long double ), -?( long double ); 1302 _Complex float +?( _Complex float ), -?( _Complex float ); 1303 _Complex double +?( _Complex double ), -?( _Complex double ); 1304 _Complex long double +?( _Complex long double ), -?( _Complex long double ); 1305 int !?( int ), !?( unsigned int ), !?( long ), !?( long unsigned int ), 1306 !?( long long int ), !?( long long unsigned int ), 1307 !?( float ), !?( double ), !?( long double ), 1308 !?( _Complex float ), !?( _Complex double ), !?( _Complex long double ); 1748 1309 forall( dtype DT ) int !?( const restrict volatile DT * ); 1749 1310 forall( dtype DT ) int !?( _Atomic const restrict volatile DT * ); 1750 1311 forall( ftype FT ) int !?( FT * ); 1751 1312 \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 1313 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 1754 1314 % Don't use predefined: keep this out of prelude.cf. 1755 1315 \begin{lstlisting} … … 1759 1319 1760 1320 \semantics 1761 The interpretations of a unary arithmetic expression are the interpretations of the corresponding 1762 function call. 1321 The interpretations of a unary arithmetic expression are the interpretations of the corresponding function call. 1763 1322 1764 1323 \examples … … 1766 1325 long int li; 1767 1326 void eat_double( double );@\use{eat_double}@ 1768 1769 eat_double(-li ); // @\rewrite@ eat_double( -?( li ) ); 1327 eat_double(-li ); // @\rewrite@ eat_double( -?( li ) ); 1770 1328 \end{lstlisting} 1771 1329 The valid interpretations of ``\lstinline$-li$'' (assuming no extended integer types exist) are 1772 1330 \begin{center} 1773 \begin{tabular}{llc} 1774 interpretation & result type & expression conversion cost \\ 1331 \begin{tabular}{llc} interpretation & result type & expression conversion cost \\ 1775 1332 \hline 1776 1333 \lstinline$-?( (int)li )$ & \lstinline$int$ & (unsafe) \\ … … 1788 1345 \end{tabular} 1789 1346 \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 1347 The valid interpretations of the \lstinline$eat_double$ call, with the cost of the argument conversion and the cost of the entire expression, are 1792 1348 \begin{center} 1793 \begin{tabular}{lcc} 1794 interpretation & argument cost & expression cost \\ 1349 \begin{tabular}{lcc} interpretation & argument cost & expression cost \\ 1795 1350 \hline 1796 1351 \lstinline$eat_double( (double)-?( (int)li) )$ & 7 & (unsafe) \\ … … 1808 1363 \end{tabular} 1809 1364 \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 1365 Each has result type \lstinline$void$, so the best must be selected. 1366 The interpretations involving unsafe conversions are discarded. 1367 The remainder have equal expression conversion costs, so the 1812 1368 ``highest argument conversion cost'' rule is invoked, and the chosen interpretation is 1813 1369 \lstinline$eat_double( (double)-?(li) )$. … … 1820 1376 \lstinline$dtype$, or \lstinline$ftype$. 1821 1377 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$. 1378 When the \lstinline$sizeof$\use{sizeof} operator is applied to an expression, the expression shall have exactly one \Index{interpretation}\index{ambiguous interpretation}, which shall be unambiguous. \semantics A \lstinline$sizeof$ or \lstinline$_Alignof$ expression has one interpretation, of type \lstinline$size_t$. 1826 1379 1827 1380 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. 1381 \nonterm{type-parameter}, it yields the size in bytes of the type that implements the operand. 1382 When the operand is an opaque type or an inferred type parameter\index{inferred parameter}, the expression is not a constant expression. 1831 1383 1832 1384 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; }; 1385 \nonterm{type-parameter}, it yields the alignment requirement of the type that implements the operand. 1386 When the operand is an opaque type or an inferred type parameter\index{inferred parameter}, the expression is not a constant expression. 1387 \begin{rationale} 1388 \begin{lstlisting} 1389 otype Pair = struct { int first, second; }; 1839 1390 size_t p_size = sizeof(Pair); // constant expression 1840 1841 extern type Rational;@\use{Rational}@ 1391 extern otype Rational;@\use{Rational}@ 1842 1392 size_t c_size = sizeof(Rational); // non-constant expression 1843 1844 1393 forall(type T) T f(T p1, T p2) { 1845 1394 size_t t_size = sizeof(T); // non-constant expression … … 1847 1396 } 1848 1397 \end{lstlisting} 1849 ``\lstinline$sizeof Rational$'', although not statically known, is fixed. Within \lstinline$f()$, 1398 ``\lstinline$sizeof Rational$'', although not statically known, is fixed. 1399 Within \lstinline$f()$, 1850 1400 ``\lstinline$sizeof(T)$'' is fixed for each call of \lstinline$f()$, but may vary from call to call. 1851 1401 \end{rationale} … … 1867 1417 1868 1418 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. 1419 \nonterm{type-name} is the type of an interpretation of \lstinline$e$, then that interpretation is the only interpretation of the cast expression; 1420 otherwise, \lstinline$e$ shall have some interpretation that can be converted to \nonterm{type-name}, and the interpretation of the cast expression is the cast of the interpretation that can be converted at the lowest cost. 1421 The cast expression's interpretation is ambiguous\index{ambiguous interpretation} if more than one interpretation can be converted at the lowest cost or if the selected interpretation is ambiguous. 1422 1423 \begin{rationale} 1424 Casts can be used to eliminate ambiguity in expressions by selecting interpretations of subexpressions, and to specialize polymorphic functions and values. 1879 1425 \end{rationale} 1880 1426 … … 1899 1445 \predefined 1900 1446 \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 ); 1447 int?*?( int, int ), ?/?( int, int ), ?%?( int, int ); 1448 unsigned int?*?( unsigned int, unsigned int ), ?/?( unsigned int, unsigned int ), ?%?( unsigned int, unsigned int ); 1449 long int?*?( long int, long int ), ?/?( long, long ), ?%?( long, long ); 1910 1450 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 ), 1451 ?/?( long unsigned int, long unsigned int ), ?%?( long unsigned int, long unsigned int ); 1452 long long int?*?( long long int, long long int ), ?/?( long long int, long long int ), 1915 1453 ?%?( long long int, long long int ); 1916 1454 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 1455 ?/?( long long unsigned int, long long unsigned int ), ?%?( long long unsigned int, long long unsigned int ); 1456 float?*?( float, float ), ?/?( float, float ); 1457 double?*?( double, double ), ?/?( double, double ); 1458 long double?*?( long double, long double ), ?/?( long double, long double ); 1459 _Complex float?*?( float, _Complex float ), ?/?( float, _Complex float ), 1460 ?*?( _Complex float, float ), ?/?( _Complex float, float ), 1461 ?*?( _Complex float, _Complex float ), ?/?( _Complex float, _Complex float ); 1462 _Complex double?*?( double, _Complex double ), ?/?( double, _Complex double ), 1463 ?*?( _Complex double, double ), ?/?( _Complex double, double ), 1464 ?*?( _Complex double, _Complex double ), ?/?( _Complex double, _Complex double ); 1465 _Complex long double?*?( long double, _Complex long double ), ?/?( long double, _Complex long double ), 1466 ?*?( _Complex long double, long double ), ?/?( _Complex long double, long double ), 1467 ?*?( _Complex long double, _Complex long double ), ?/?( _Complex long double, _Complex long double ); 1468 \end{lstlisting} 1469 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 1946 1470 % Don't use predefined: keep this out of prelude.cf. 1947 1471 \begin{lstlisting} … … 1951 1475 \begin{rationale} 1952 1476 {\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. 1477 \Index{usual arithmetic conversion}s. Instead it specifies conversion of the result of binary operations on arguments from mixed type domains. \CFA's predefined operators match that pattern. 1955 1478 \end{rationale} 1956 1479 1957 1480 \semantics 1958 The interpretations of multiplicative expressions are the interpretations of the corresponding 1959 function call. 1481 The interpretations of multiplicative expressions are the interpretations of the corresponding function call. 1960 1482 1961 1483 \examples … … 1966 1488 eat_double( li % i ); 1967 1489 \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 1490 ``\lstinline$li % i$'' is rewritten as ``\lstinline$?%?(li, i )$''. 1491 The valid interpretations of \lstinline$?%?(li, i )$, the cost\index{conversion cost} of converting their arguments, and the cost of converting the result to \lstinline$double$ (assuming no extended integer types are present ) are 1972 1492 \begin{center} 1973 \begin{tabular}{lcc} 1974 interpretation & argument cost & result cost \\ 1493 \begin{tabular}{lcc} interpretation & argument cost & result cost \\ 1975 1494 \hline 1976 1495 \lstinline$ ?%?( (int)li, i )$ & (unsafe) & 6 \\ 1977 1496 \lstinline$ ?%?( (unsigned)li,(unsigned)i )$ & (unsafe) & 5 \\ 1978 \lstinline$ ?%?( li,(long)i )$ & 1 & 4 \\1497 \lstinline$ ?%?( li, (long)i )$ & 1 & 4 \\ 1979 1498 \lstinline$ ?%?( (long unsigned)li,(long unsigned)i )$ & 3 & 3 \\ 1980 1499 \lstinline$ ?%?( (long long)li,(long long)i )$ & 5 & 2 \\ … … 1983 1502 \end{center} 1984 1503 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 1504 \lstinline$eat_double( (double)?%?(li, (long)i ))$, which has no unsafe conversions and the lowest total cost. 1505 1506 \begin{rationale} 1507 {\c11} defines most arithmetic operations to apply an \Index{integer promotion} to any argument that belongs to a type that has an \Index{integer conversion rank} less than that of \lstinline$int$.If 1991 1508 \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 ); 1509 it is treated as ``\lstinline$( (int)s ) * ( (int)s )$'', and has type \lstinline$int$. \CFA matches that pattern; 1510 it does not predefine ``\lstinline$short ?*?( short, short )$''. 1511 1512 These ``missing'' operators limit polymorphism. 1513 Consider 1514 \begin{lstlisting} 1515 forall( otype T | T ?*?( T, T ) ) T square( T ); 1998 1516 short s; 1999 1517 square( s ); … … 2001 1519 Since \CFA does not define a multiplication operator for \lstinline$short int$, 2002 1520 \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. 1521 \lstinline$int$. 1522 This is mildly surprising, but it follows the {\c11} operator pattern. 2004 1523 2005 1524 A more troubling example is 2006 1525 \begin{lstlisting} 2007 forall( type T | ?*?( T, T ) ) T product( T[], int n );1526 forall( otype T | ?*?( T, T ) ) T product( T[], int n ); 2008 1527 short sa[5]; 2009 1528 product( sa, 5); 2010 1529 \end{lstlisting} 2011 1530 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 include1531 \lstinline$short int$'' to ``array of \lstinline$int$''. 1532 The alternatives in such situations include 2014 1533 \begin{itemize} 2015 1534 \item … … 2020 1539 \lstinline$product$. 2021 1540 \item 2022 Defining \lstinline$product$ to take as an argument a conversion function from the ``small'' type to 2023 the operator's argument type. 1541 Defining \lstinline$product$ to take as an argument a conversion function from the ``small'' type to the operator's argument type. 2024 1542 \end{itemize} 2025 1543 \end{rationale} … … 2043 1561 \predefined 2044 1562 \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 ); 1563 int?+?( int, int ), ?-?( int, int ); 1564 unsigned int?+?( unsigned int, unsigned int ), ?-?( unsigned int, unsigned int ); 1565 long int?+?( long int, long int ), ?-?( long int, long int ); 1566 long unsigned int?+?( long unsigned int, long unsigned int ), ?-?( long unsigned int, long unsigned int ); 1567 long long int?+?( long long int, long long int ), ?-?( long long int, long long int ); 2055 1568 long long unsigned int ?+?( long long unsigned int, long long unsigned int ), 2056 1569 ?-?( 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 * ), 1570 float?+?( float, float ), ?-?( float, float ); 1571 double?+?( double, double ), ?-?( double, double ); 1572 long double?+?( long double, long double ), ?-?( long double, long double ); 1573 _Complex float?+?( _Complex float, float ), ?-?( _Complex float, float ), 1574 ?+?( float, _Complex float ), ?-?( float, _Complex float ), 1575 ?+?( _Complex float, _Complex float ), ?-?( _Complex float, _Complex float ); 1576 _Complex double?+?( _Complex double, double ), ?-?( _Complex double, double ), 1577 ?+?( double, _Complex double ), ?-?( double, _Complex double ), 1578 ?+?( _Complex double, _Complex double ), ?-?( _Complex double, _Complex double ); 1579 _Complex long double?+?( _Complex long double, long double ), ?-?( _Complex long double, long double ), 1580 ?+?( long double, _Complex long double ), ?-?( long double, _Complex long double ), 1581 ?+?( _Complex long double, _Complex long double ), ?-?( _Complex long double, _Complex long double ); 1582 1583 forall( otype T ) T * ?+?( T *, ptrdiff_t ), * ?+?( ptrdiff_t, T * ), * ?-?( T *, ptrdiff_t ); 1584 forall( otype T ) _Atomic T * ?+?( _Atomic T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic T * ), 2090 1585 * ?-?( _Atomic T *, ptrdiff_t ); 2091 2092 forall( type T ) const T 2093 * ?+?( const T *, ptrdiff_t ), 2094 * ?+?( ptrdiff_t, const T * ), 1586 forall( otype T ) const T * ?+?( const T *, ptrdiff_t ), * ?+?( ptrdiff_t, const T * ), 2095 1587 * ?-?( const T *, ptrdiff_t ); 2096 2097 forall( type T ) restrict T 2098 * ?+?( restrict T *, ptrdiff_t ), 2099 * ?+?( ptrdiff_t, restrict T * ), 1588 forall( otype T ) restrict T * ?+?( restrict T *, ptrdiff_t ), * ?+?( ptrdiff_t, restrict T * ), 2100 1589 * ?-?( restrict T *, ptrdiff_t ); 2101 2102 forall( type T ) volatile T 2103 * ?+?( volatile T *, ptrdiff_t ), 2104 * ?+?( ptrdiff_t, volatile T * ), 1590 forall( otype T ) volatile T * ?+?( volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, volatile T * ), 2105 1591 * ?-?( volatile T *, ptrdiff_t ); 2106 2107 forall( type T ) _Atomic const T 2108 * ?+?( _Atomic const T *, ptrdiff_t ), 2109 * ?+?( ptrdiff_t, _Atomic const T * ), 1592 forall( otype T ) _Atomic const T * ?+?( _Atomic const T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic const T * ), 2110 1593 * ?-?( _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 * ), 1594 forall( otype T ) _Atomic restrict T * ?+?( _Atomic restrict T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic restrict T * ), 2115 1595 * ?-?( _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 * ), 1596 forall( otype T ) _Atomic volatile T * ?+?( _Atomic volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic volatile T * ), 2120 1597 * ?-?( _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 * ), 1598 forall( otype T ) const restrict T * ?+?( const restrict T *, ptrdiff_t ), * ?+?( ptrdiff_t, const restrict T * ), 2125 1599 * ?-?( 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 * ), 1600 forall( otype T ) const volatile T * ?+?( const volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, const volatile T * ), 2130 1601 * ?-?( 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 * ), 1602 forall( otype T ) restrict volatile T * ?+?( restrict volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, restrict volatile T * ), 2135 1603 * ?-?( restrict volatile T *, ptrdiff_t ); 2136 2137 forall( type T ) _Atomic const restrict T 2138 * ?+?( _Atomic const restrict T *, ptrdiff_t ), 1604 forall( otype T ) _Atomic const restrict T * ?+?( _Atomic const restrict T *, ptrdiff_t ), 2139 1605 * ?+?( ptrdiff_t, _Atomic const restrict T * ), 2140 1606 * ?-?( _Atomic const restrict T *, ptrdiff_t ); 2141 2142 forall( type T ) ptrdiff_t 1607 forall( otype T ) ptrdiff_t 2143 1608 * ?-?( const restrict volatile T *, const restrict volatile T * ), 2144 1609 * ?-?( _Atomic const restrict volatile T *, _Atomic const restrict volatile T * ); 2145 1610 \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 1611 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 2148 1612 % Don't use predefined: keep this out of prelude.cf. 2149 1613 \begin{lstlisting} … … 2152 1616 2153 1617 \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. 1618 The interpretations of additive expressions are the interpretations of the corresponding function calls. 1619 1620 \begin{rationale} 1621 \lstinline$ptrdiff_t$ is an implementation-defined identifier defined in \lstinline$<stddef.h>$ that is synonymous with a signed integral type that is large enough to hold the difference between two pointers. 1622 It seems reasonable to use it for pointer addition as well. (This is technically a difference between \CFA and C, which only specifies that pointer addition uses an \emph{integral} argument.) Hence it is also used for subscripting, which is defined in terms of pointer addition. 1623 The {\c11} standard uses \lstinline$size_t$ in several cases where a library function takes an argument that is used as a subscript, but \lstinline$size_t$ is unsuitable here because it is an unsigned type. 2166 1624 \end{rationale} 2167 1625 … … 2184 1642 \predefined 2185 1643 \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 1644 int ?<<?( int, int ), ?>>?( int, int ); 1645 unsigned int ?<<?( unsigned int, int ), ?>>?( unsigned int, int ); 1646 long int ?<<?( long int, int ), ?>>?( long int, int ); 1647 long unsigned int ?<<?( long unsigned int, int ), ?>>?( long unsigned int, int ); 1648 long long int ?<<?( long long int, int ), ?>>?( long long int, int ); 1649 long long unsigned int ?<<?( long long unsigned int, int ), ?>>?( long long unsigned int, int); 1650 \end{lstlisting} 1651 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 2201 1652 % Don't use predefined: keep this out of prelude.cf. 2202 1653 \begin{lstlisting} … … 2205 1656 2206 1657 \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}.1658 The bitwise shift operators break the usual pattern: they do not convert both operands to a common type. 1659 The right operand only undergoes \Index{integer promotion}. 2209 1660 \end{rationale} 2210 1661 2211 1662 \semantics 2212 The interpretations of a bitwise shift expression are the interpretations of the corresponding 2213 function calls. 1663 The interpretations of a bitwise shift expression are the interpretations of the corresponding function calls. 2214 1664 2215 1665 … … 2235 1685 \predefined 2236 1686 \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 * ), 1687 int ?<?( int, int ), ?<=?( int, int ), 1688 ?>?( int, int ), ?>=?( int, int ); 1689 int ?<?( unsigned int, unsigned int ), ?<=?( unsigned int, unsigned int ), 1690 ?>?( unsigned int, unsigned int ), ?>=?( unsigned int, unsigned int ); 1691 int ?<?( long int, long int ), ?<=?( long int, long int ), 1692 ?>?( long int, long int ), ?>=?( long int, long int ); 1693 int ?<?( long unsigned int, long unsigned ), ?<=?( long unsigned int, long unsigned ), 1694 ?>?( long unsigned int, long unsigned ), ?>=?( long unsigned int, long unsigned ); 1695 int ?<?( long long int, long long int ), ?<=?( long long int, long long int ), 1696 ?>?( long long int, long long int ), ?>=?( long long int, long long int ); 1697 int ?<?( long long unsigned int, long long unsigned ), ?<=?( long long unsigned int, long long unsigned ), 1698 ?>?( long long unsigned int, long long unsigned ), ?>=?( long long unsigned int, long long unsigned ); 1699 int ?<?( float, float ), ?<=?( float, float ), 1700 ?>?( float, float ), ?>=?( float, float ); 1701 int ?<?( double, double ), ?<=?( double, double ), 1702 ?>?( double, double ), ?>=?( double, double ); 1703 int ?<?( long double, long double ), ?<=?( long double, long double ), 1704 ?>?( long double, long double ), ?>=?( long double, long double ); 1705 forall( dtype DT ) int ?<?( const restrict volatile DT *, const restrict volatile DT * ), 2276 1706 ?<?( _Atomic const restrict volatile DT *, _Atomic const restrict volatile DT * ), 2277 1707 ?<=?( const restrict volatile DT *, const restrict volatile DT * ), … … 2282 1712 ?>=?( _Atomic const restrict volatile DT *, _Atomic const restrict volatile DT * ); 2283 1713 \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 1714 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 2286 1715 % Don't use predefined: keep this out of prelude.cf. 2287 1716 \begin{lstlisting} … … 2293 1722 2294 1723 \semantics 2295 The interpretations of a relational expression are the interpretations of the corresponding function 2296 call. 1724 The interpretations of a relational expression are the interpretations of the corresponding function call. 2297 1725 2298 1726 … … 2314 1742 \predefined 2315 1743 \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 1744 int ?==?( int, int ), ?!=?( int, int ), 1745 ?==?( unsigned int, unsigned int ), ?!=?( unsigned int, unsigned int ), 1746 ?==?( long int, long int ), ?!=?( long int, long int ), 1747 ?==?( long unsigned int, long unsigned int ), ?!=?( long unsigned int, long unsigned int ), 1748 ?==?( long long int, long long int ), ?!=?( long long int, long long int ), 1749 ?==?( long long unsigned int, long long unsigned int ), ?!=?( long long unsigned int, long long unsigned int ), 1750 ?==?( float, float ), ?!=?( float, float ), 1751 ?==?( _Complex float, float ), ?!=?( _Complex float, float ), 1752 ?==?( float, _Complex float ), ?!=?( float, _Complex float ), 1753 ?==?( _Complex float, _Complex float ), ?!=?( _Complex float, _Complex float ), 1754 ?==?( double, double ), ?!=?( double, double ), 1755 ?==?( _Complex double, double ), ?!=?( _Complex double, double ), 1756 ?==?( double, _Complex double ), ?!=?( double, _Complex double ), 1757 ?==?( _Complex double, _Complex double ), ?!=?( _Complex double, _Complex double ), 1758 ?==?( long double, long double ), ?!=?( long double, long double ), 1759 ?==?( _Complex long double, long double ), ?!=?( _Complex long double, long double ), 1760 ?==?( long double, _Complex long double ), ?!=?( long double, _Complex long double ), 1761 ?==?( _Complex long double, _Complex long double ), ?!=?( _Complex long double, _Complex long double ); 2353 1762 forall( dtype DT ) int 2354 1763 ?==?( const restrict volatile DT *, const restrict volatile DT * ), … … 2375 1784 ?==?( forall( dtype DT2) const DT2*, _Atomic const restrict volatile DT * ), 2376 1785 ?!=?( forall( dtype DT2) const DT2*, _Atomic const restrict volatile DT * ); 2377 2378 1786 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 1787 ?==?( FT *, FT * ), ?!=?( FT *, FT * ), 1788 ?==?( FT *, forall( ftype FT2) FT2 * ), ?!=?( FT *, forall( ftype FT2) FT2 * ), 1789 ?==?( forall( ftype FT2) FT2*, FT * ), ?!=?( forall( ftype FT2) FT2*, FT * ), 1790 ?==?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * ), ?!=?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * ); 1791 \end{lstlisting} 1792 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 2390 1793 % Don't use predefined: keep this out of prelude.cf. 2391 1794 \begin{lstlisting} … … 2395 1798 2396 1799 \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. 1800 The polymorphic equality operations come in three styles: comparisons between pointers of compatible types, between pointers to \lstinline$void$ and pointers to object types or incomplete types, and between the \Index{null pointer} constant and pointers to any type. 1801 In the last case, a special constraint rule for null pointer constant operands has been replaced by a consequence of the \CFA type system. 2402 1802 \end{rationale} 2403 1803 2404 1804 \semantics 2405 The interpretations of an equality expression are the interpretations of the corresponding function 2406 call. 1805 The interpretations of an equality expression are the interpretations of the corresponding function call. 2407 1806 2408 1807 \begin{sloppypar} 2409 The result of an equality comparison between two pointers to predefined functions or predefined 2410 values is implementation-defined. 1808 The result of an equality comparison between two pointers to predefined functions or predefined values is implementation-defined. 2411 1809 \end{sloppypar} 2412 1810 \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 1811 The implementation-defined status of equality comparisons allows implementations to use one library routine to implement many predefined functions. 1812 These optimization are particularly important when the predefined functions are polymorphic, as is the case for most pointer operations 2416 1813 \end{rationale} 2417 1814 … … 2439 1836 long long unsigned int ?&?( long long unsigned int, long long unsigned int ); 2440 1837 \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 1838 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 2443 1839 % Don't use predefined: keep this out of prelude.cf. 2444 1840 \begin{lstlisting} … … 2447 1843 2448 1844 \semantics 2449 The interpretations of a bitwise AND expression are the interpretations of the corresponding 2450 function call. 1845 The interpretations of a bitwise AND expression are the interpretations of the corresponding function call. 2451 1846 2452 1847 … … 2473 1868 long long unsigned int ?^?( long long unsigned int, long long unsigned int ); 2474 1869 \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 1870 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 2477 1871 % Don't use predefined: keep this out of prelude.cf. 2478 1872 \begin{lstlisting} … … 2481 1875 2482 1876 \semantics 2483 The interpretations of a bitwise exclusive OR expression are the interpretations of the 2484 corresponding function call. 1877 The interpretations of a bitwise exclusive OR expression are the interpretations of the corresponding function call. 2485 1878 2486 1879 … … 2507 1900 long long unsigned int ?|?( long long unsigned int, long long unsigned int ); 2508 1901 \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 1902 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 2511 1903 % Don't use predefined: keep this out of prelude.cf. 2512 1904 \begin{lstlisting} … … 2515 1907 2516 1908 \semantics 2517 The interpretations of a bitwise inclusive OR expression are the interpretations of the 2518 corresponding function call. 1909 The interpretations of a bitwise inclusive OR expression are the interpretations of the corresponding function call. 2519 1910 2520 1911 … … 2528 1919 2529 1920 \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. 1921 ``\lstinline$(int)((a)!=0)$'' and ``\lstinline$(int)((b)!=0)$'', which shall both be unambiguous. 1922 The expression has only one interpretation, which is of type \lstinline$int$. 1923 \begin{rationale} 1924 When the operands of a logical expression are values of built-in types, and ``\lstinline$!=$'' has not been redefined for those types, the compiler can optimize away the function calls. 2535 1925 2536 1926 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}@1927 \lstinline$if$ statements. 1928 For instance, the loop below iterates as long as \lstinline$rp$ points at a \lstinline$Rational$ value that is non-zero. 1929 1930 \begin{lstlisting} 1931 extern otype Rational;@\use{Rational}@ 2542 1932 extern const Rational 0;@\use{0}@ 2543 1933 extern int ?!=?( Rational, Rational ); 2544 1934 Rational *rp; 2545 2546 1935 while ( rp && *rp ) { ... } 2547 1936 \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. 1937 The logical expression calls the \lstinline$Rational$ inequality operator, passing it \lstinline$*rp$ and the \lstinline$Rational 0$, and getting a 1 or 0 as a result. 1938 In contrast, {\CC} would apply a programmer-defined \lstinline$Rational$-to-\lstinline$int$ conversion to \lstinline$*rp$ in the equivalent situation. 1939 The conversion to \lstinline$int$ would produce a general integer value, which is unfortunate, and possibly dangerous if the conversion was not written with this situation in mind. 2554 1940 \end{rationale} 2555 1941 … … 2565 1951 \semantics 2566 1952 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$. 1953 The operands of the expression ``\lstinline$a || b$'' are treated as ``\lstinline$(int)((a)!=0)$'' and ``\lstinline$(int)((b))!=0)$'', which shall both be unambiguous. 1954 The expression has only one interpretation, which is of type \lstinline$int$. 2570 1955 2571 1956 … … 2580 1965 2581 1966 \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 1967 In the conditional expression\use{?:} ``\lstinline$a?b:c$'', if the second and third operands both have an interpretation with \lstinline$void$ type, then the expression has an interpretation with type \lstinline$void$, equivalent to 2585 1968 \begin{lstlisting} 2586 1969 ( int)(( a)!=0) ? ( void)( b) : ( void)( c) 2587 1970 \end{lstlisting} 2588 1971 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 * ), 1972 If the second and third operands both have interpretations with non-\lstinline$void$ types, the expression is treated as if it were the call ``\lstinline$cond((a)!=0, b, c)$'', with \lstinline$cond$ declared as 1973 \begin{lstlisting} 1974 forall( otype T ) T cond( int, T, T ); 1975 forall( dtype D ) void * cond( int, D *, void * ), * cond( int, void *, D * ); 1976 forall( dtype D ) _atomic void * cond( 1977 int, _Atomic D *, _Atomic void * ), * cond( int, _Atomic void *, _Atomic D * ); 1978 forall( dtype D ) const void * cond( 1979 int, const D *, const void * ), * cond( int, const void *, const D * ); 1980 forall( dtype D ) restrict void * cond( 1981 int, restrict D *, restrict void * ), * cond( int, restrict void *, restrict D * ); 1982 forall( dtype D ) volatile void * cond( 1983 int, volatile D *, volatile void * ), * cond( int, volatile void *, volatile D * ); 1984 forall( dtype D ) _Atomic const void * cond( 1985 int, _Atomic const D *, _Atomic const void * ), * cond( int, _Atomic const void *, _Atomic const D * ); 1986 forall( dtype D ) _Atomic restrict void * cond( 1987 int, _Atomic restrict D *, _Atomic restrict void * ), * cond( int, _Atomic restrict void *, _Atomic restrict D * ); 1988 forall( dtype D ) _Atomic volatile void * cond( 1989 int, _Atomic volatile D *, _Atomic volatile void * ), * cond( int, _Atomic volatile void *, _Atomic volatile D * ); 1990 forall( dtype D ) const restrict void * cond( 1991 int, const restrict D *, const restrict void * ), * cond( int, const restrict void *, const restrict D * ); 1992 forall( dtype D ) const volatile void * cond( 1993 int, const volatile D *, const volatile void * ), * cond( int, const volatile void *, const volatile D * ); 1994 forall( dtype D ) restrict volatile void * cond( 1995 int, restrict volatile D *, restrict volatile void * ), * cond( int, restrict volatile void *, restrict volatile D * ); 1996 forall( dtype D ) _Atomic const restrict void * cond( 1997 int, _Atomic const restrict D *, _Atomic const restrict void * ), 2641 1998 * 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 * ), 1999 forall( dtype D ) _Atomic const volatile void * cond( 2000 int, _Atomic const volatile D *, _Atomic const volatile void * ), 2645 2001 * 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. 2002 forall( dtype D ) _Atomic restrict volatile void * cond( 2003 int, _Atomic restrict volatile D *, _Atomic restrict volatile void * ), 2004 * cond( int, _Atomic restrict volatile void *, _Atomic restrict volatile D * ); 2005 forall( dtype D ) const restrict volatile void * cond( 2006 int, const restrict volatile D *, const restrict volatile void * ), 2007 * cond( int, const restrict volatile void *, const restrict volatile D * ); 2008 forall( dtype D ) _Atomic const restrict volatile void * cond( 2009 int, _Atomic const restrict volatile D *, _Atomic const restrict volatile void * ), 2010 * cond( int, _Atomic const restrict volatile void *, _Atomic const restrict volatile D * ); 2011 \end{lstlisting} 2012 2013 \begin{rationale} 2014 The object of the above is to apply the \Index{usual arithmetic conversion}s when the second and third operands have arithmetic type, and to combine the qualifiers of the second and third operands if they are pointers. 2670 2015 \end{rationale} 2671 2016 … … 2685 2030 rand() ? cip : vip; 2686 2031 \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. 2032 The expression has type \lstinline$const volatile int *$, with safe conversions applied to the second and third operands to add \lstinline$volatile$ and \lstinline$const$ qualifiers, respectively. 2689 2033 2690 2034 \begin{lstlisting} … … 2708 2052 2709 2053 \rewriterules 2710 Let ``\(\leftarrow\)'' be any of the assignment operators. Then 2054 Let ``\(\leftarrow\)'' be any of the assignment operators. 2055 Then 2711 2056 \use{?=?}\use{?*=?}\use{?/=?}\use{?%=?}\use{?+=?}\use{?-=?} 2712 2057 \use{?>>=?}\use{?&=?}\use{?^=?}\use{?"|=?}%use{?<<=?} … … 2716 2061 2717 2062 \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. 2063 Each interpretation of the left operand of an assignment expression is considered separately. 2064 For each interpretation that is a bit-field or is declared with the \lstinline$register$ storage class specifier, the expression has one valid interpretation, with the type of the left operand. 2065 The right operand is cast to that type, and the assignment expression is ambiguous if either operand is. 2066 For the remaining interpretations, the expression is rewritten, and the interpretations of the assignment expression are the interpretations of the corresponding function call. 2067 Finally, all interpretations of the expression produced for the different interpretations of the left operand are combined to produce the interpretations of the expression as a whole; 2068 where interpretations have compatible result types, the best interpretations are selected in the manner described for function call expressions. 2728 2069 2729 2070 … … 2790 2131 ?=?( volatile _Complex long double *, _Complex long double ), 2791 2132 ?=?( _Atomic volatile _Complex long double *, _Atomic _Complex long double ); 2792 2793 2133 forall( ftype FT ) FT 2794 2134 * ?=?( FT * volatile *, FT * ), 2795 2135 * ?=?( FT * volatile *, forall( ftype F ) F * ); 2796 2797 2136 forall( ftype FT ) FT const 2798 2137 * ?=?( FT const * volatile *, FT const * ), 2799 2138 * ?=?( FT const * volatile *, forall( ftype F ) F * ); 2800 2801 2139 forall( ftype FT ) FT volatile 2802 2140 * ?=?( FT volatile * volatile *, FT * ), 2803 2141 * ?=?( FT volatile * volatile *, forall( ftype F ) F * ); 2804 2805 2142 forall( ftype FT ) FT const 2806 2143 * ?=?( FT const volatile * volatile *, FT const * ), 2807 2144 * ?=?( FT const volatile * volatile *, forall( ftype F ) F * ); 2808 2809 2145 forall( dtype DT ) DT 2810 2146 * ?=?( DT * restrict volatile *, DT * ), … … 2814 2150 * ?=?( DT * _Atomic restrict volatile *, void * ), 2815 2151 * ?=?( DT * _Atomic restrict volatile *, forall( dtype D ) D * ); 2816 2817 2152 forall( dtype DT ) DT _Atomic 2818 2153 * ?=?( _Atomic DT * restrict volatile *, DT _Atomic * ), … … 2822 2157 * ?=?( _Atomic DT * _Atomic restrict volatile *, void * ), 2823 2158 * ?=?( _Atomic DT * _Atomic restrict volatile *, forall( dtype D ) D * ); 2824 2825 2159 forall( dtype DT ) DT const 2826 2160 * ?=?( DT const * restrict volatile *, DT const * ), … … 2830 2164 * ?=?( DT const * _Atomic restrict volatile *, void const * ), 2831 2165 * ?=?( DT const * _Atomic restrict volatile *, forall( dtype D ) D * ); 2832 2833 2166 forall( dtype DT ) DT restrict 2834 2167 * ?=?( restrict DT * restrict volatile *, DT restrict * ), … … 2838 2171 * ?=?( restrict DT * _Atomic restrict volatile *, void * ), 2839 2172 * ?=?( restrict DT * _Atomic restrict volatile *, forall( dtype D ) D * ); 2840 2841 2173 forall( dtype DT ) DT volatile 2842 2174 * ?=?( DT volatile * restrict volatile *, DT volatile * ), … … 2846 2178 * ?=?( DT volatile * _Atomic restrict volatile *, void volatile * ), 2847 2179 * ?=?( DT volatile * _Atomic restrict volatile *, forall( dtype D ) D * ); 2848 2849 2180 forall( dtype DT ) DT _Atomic const 2850 2181 * ?=?( DT _Atomic const * restrict volatile *, DT _Atomic const * ), … … 2854 2185 * ?=?( DT _Atomic const * _Atomic restrict volatile *, void const * ), 2855 2186 * ?=?( DT _Atomic const * _Atomic restrict volatile *, forall( dtype D ) D * ); 2856 2857 2187 forall( dtype DT ) DT _Atomic restrict 2858 2188 * ?=?( _Atomic restrict DT * restrict volatile *, DT _Atomic restrict * ), … … 2862 2192 * ?=?( _Atomic restrict DT * _Atomic restrict volatile *, void * ), 2863 2193 * ?=?( _Atomic restrict DT * _Atomic restrict volatile *, forall( dtype D ) D * ); 2864 2865 2194 forall( dtype DT ) DT _Atomic volatile 2866 2195 * ?=?( DT _Atomic volatile * restrict volatile *, DT _Atomic volatile * ), … … 2870 2199 * ?=?( DT _Atomic volatile * _Atomic restrict volatile *, void volatile * ), 2871 2200 * ?=?( DT _Atomic volatile * _Atomic restrict volatile *, forall( dtype D ) D * ); 2872 2873 2201 forall( dtype DT ) DT const restrict 2874 2202 * ?=?( DT const restrict * restrict volatile *, DT const restrict * ), … … 2878 2206 * ?=?( DT const restrict * _Atomic restrict volatile *, void const * ), 2879 2207 * ?=?( DT const restrict * _Atomic restrict volatile *, forall( dtype D ) D * ); 2880 2881 2208 forall( dtype DT ) DT const volatile 2882 2209 * ?=?( DT const volatile * restrict volatile *, DT const volatile * ), … … 2886 2213 * ?=?( DT const volatile * _Atomic restrict volatile *, void const volatile * ), 2887 2214 * ?=?( DT const volatile * _Atomic restrict volatile *, forall( dtype D ) D * ); 2888 2889 2215 forall( dtype DT ) DT restrict volatile 2890 2216 * ?=?( DT restrict volatile * restrict volatile *, DT restrict volatile * ), … … 2894 2220 * ?=?( DT restrict volatile * _Atomic restrict volatile *, void volatile * ), 2895 2221 * ?=?( DT restrict volatile * _Atomic restrict volatile *, forall( dtype D ) D * ); 2896 2897 2222 forall( dtype DT ) DT _Atomic const restrict 2898 2223 * ?=?( DT _Atomic const restrict * restrict volatile *, … … 2908 2233 * ?=?( DT _Atomic const restrict * _Atomic restrict volatile *, 2909 2234 forall( dtype D ) D * ); 2910 2911 2235 forall( dtype DT ) DT _Atomic const volatile 2912 2236 * ?=?( DT _Atomic const volatile * restrict volatile *, … … 2922 2246 * ?=?( DT _Atomic const volatile * _Atomic restrict volatile *, 2923 2247 forall( dtype D ) D * ); 2924 2925 2248 forall( dtype DT ) DT _Atomic restrict volatile 2926 2249 * ?=?( DT _Atomic restrict volatile * restrict volatile *, … … 2936 2259 * ?=?( DT _Atomic restrict volatile * _Atomic restrict volatile *, 2937 2260 forall( dtype D ) D * ); 2938 2939 2261 forall( dtype DT ) DT const restrict volatile 2940 2262 * ?=?( DT const restrict volatile * restrict volatile *, … … 2950 2272 * ?=?( DT const restrict volatile * _Atomic restrict volatile *, 2951 2273 forall( dtype D ) D * ); 2952 2953 2274 forall( dtype DT ) DT _Atomic const restrict volatile 2954 2275 * ?=?( DT _Atomic const restrict volatile * restrict volatile *, … … 2964 2285 * ?=?( DT _Atomic const restrict volatile * _Atomic restrict volatile *, 2965 2286 forall( dtype D ) D * ); 2966 2967 2287 forall( dtype DT ) void 2968 2288 * ?=?( void * restrict volatile *, DT * ); 2969 2970 2289 forall( dtype DT ) void const 2971 2290 * ?=?( void const * restrict volatile *, DT const * ); 2972 2973 2291 forall( dtype DT ) void volatile 2974 2292 * ?=?( void volatile * restrict volatile *, DT volatile * ); 2975 2976 2293 forall( dtype DT ) void const volatile 2977 2294 * ?=?( void const volatile * restrict volatile *, DT const volatile * ); 2978 2295 \end{lstlisting} 2979 2296 \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. 2297 The pattern of overloadings for simple assignment resembles that of pointer increment and decrement, except that the polymorphic pointer assignment functions declare a \lstinline$dtype$ parameter, instead of a \lstinline$type$ parameter, because the left operand may be a pointer to an incomplete type. 2984 2298 \end{rationale} 2985 2299 … … 3006 2320 3007 2321 \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. 2322 The structure assignment functions provide member-wise assignment; 2323 each non-array member and each element of each array member of the right argument is assigned to the corresponding member or element of the left argument using the assignment function defined for its type. 2324 All other assignment functions have the same effect as the corresponding C assignment expression. 2325 \begin{rationale} 2326 Note that, by default, union assignment\index{deficiencies!union assignment} uses C semantics---that is, bitwise copy---even if some of the union members have programmer-defined assignment functions. 3015 2327 \end{rationale} 3016 2328 … … 3020 2332 \predefined 3021 2333 \begin{lstlisting} 3022 forall( type T ) T2334 forall( otype T ) T 3023 2335 * ?+=?( T * restrict volatile *, ptrdiff_t ), 3024 2336 * ?-=?( T * restrict volatile *, ptrdiff_t ), 3025 2337 * ?+=?( T * _Atomic restrict volatile *, ptrdiff_t ), 3026 2338 * ?-=?( T * _Atomic restrict volatile *, ptrdiff_t ); 3027 3028 forall( type T ) T _Atomic 2339 forall( otype T ) T _Atomic 3029 2340 * ?+=?( T _Atomic * restrict volatile *, ptrdiff_t ), 3030 2341 * ?-=?( T _Atomic * restrict volatile *, ptrdiff_t ), 3031 2342 * ?+=?( T _Atomic * _Atomic restrict volatile *, ptrdiff_t ), 3032 2343 * ?-=?( T _Atomic * _Atomic restrict volatile *, ptrdiff_t ); 3033 3034 forall( type T ) T const 2344 forall( otype T ) T const 3035 2345 * ?+=?( T const * restrict volatile *, ptrdiff_t ), 3036 2346 * ?-=?( T const * restrict volatile *, ptrdiff_t ), 3037 2347 * ?+=?( T const * _Atomic restrict volatile *, ptrdiff_t ), 3038 2348 * ?-=?( T const * _Atomic restrict volatile *, ptrdiff_t ); 3039 3040 forall( type T ) T restrict 2349 forall( otype T ) T restrict 3041 2350 * ?+=?( T restrict * restrict volatile *, ptrdiff_t ), 3042 2351 * ?-=?( T restrict * restrict volatile *, ptrdiff_t ), 3043 2352 * ?+=?( T restrict * _Atomic restrict volatile *, ptrdiff_t ), 3044 2353 * ?-=?( T restrict * _Atomic restrict volatile *, ptrdiff_t ); 3045 3046 forall( type T ) T volatile 2354 forall( otype T ) T volatile 3047 2355 * ?+=?( T volatile * restrict volatile *, ptrdiff_t ), 3048 2356 * ?-=?( T volatile * restrict volatile *, ptrdiff_t ), 3049 2357 * ?+=?( T volatile * _Atomic restrict volatile *, ptrdiff_t ), 3050 2358 * ?-=?( T volatile * _Atomic restrict volatile *, ptrdiff_t ); 3051 3052 forall( type T ) T _Atomic const 2359 forall( otype T ) T _Atomic const 3053 2360 * ?+=?( T _Atomic const restrict volatile *, ptrdiff_t ), 3054 2361 * ?-=?( T _Atomic const restrict volatile *, ptrdiff_t ), 3055 2362 * ?+=?( T _Atomic const _Atomic restrict volatile *, ptrdiff_t ), 3056 2363 * ?-=?( T _Atomic const _Atomic restrict volatile *, ptrdiff_t ); 3057 3058 forall( type T ) T _Atomic restrict 2364 forall( otype T ) T _Atomic restrict 3059 2365 * ?+=?( T _Atomic restrict * restrict volatile *, ptrdiff_t ), 3060 2366 * ?-=?( T _Atomic restrict * restrict volatile *, ptrdiff_t ), 3061 2367 * ?+=?( T _Atomic restrict * _Atomic restrict volatile *, ptrdiff_t ), 3062 2368 * ?-=?( T _Atomic restrict * _Atomic restrict volatile *, ptrdiff_t ); 3063 3064 forall( type T ) T _Atomic volatile 2369 forall( otype T ) T _Atomic volatile 3065 2370 * ?+=?( T _Atomic volatile * restrict volatile *, ptrdiff_t ), 3066 2371 * ?-=?( T _Atomic volatile * restrict volatile *, ptrdiff_t ), 3067 2372 * ?+=?( T _Atomic volatile * _Atomic restrict volatile *, ptrdiff_t ), 3068 2373 * ?-=?( T _Atomic volatile * _Atomic restrict volatile *, ptrdiff_t ); 3069 3070 forall( type T ) T const restrict 2374 forall( otype T ) T const restrict 3071 2375 * ?+=?( T const restrict * restrict volatile *, ptrdiff_t ), 3072 2376 * ?-=?( T const restrict * restrict volatile *, ptrdiff_t ), 3073 2377 * ?+=?( T const restrict * _Atomic restrict volatile *, ptrdiff_t ), 3074 2378 * ?-=?( T const restrict * _Atomic restrict volatile *, ptrdiff_t ); 3075 3076 forall( type T ) T const volatile 2379 forall( otype T ) T const volatile 3077 2380 * ?+=?( T const volatile * restrict volatile *, ptrdiff_t ), 3078 2381 * ?-=?( T const volatile * restrict volatile *, ptrdiff_t ), 3079 2382 * ?+=?( T const volatile * _Atomic restrict volatile *, ptrdiff_t ), 3080 2383 * ?-=?( T const volatile * _Atomic restrict volatile *, ptrdiff_t ); 3081 3082 forall( type T ) T restrict volatile 2384 forall( otype T ) T restrict volatile 3083 2385 * ?+=?( T restrict volatile * restrict volatile *, ptrdiff_t ), 3084 2386 * ?-=?( T restrict volatile * restrict volatile *, ptrdiff_t ), 3085 2387 * ?+=?( T restrict volatile * _Atomic restrict volatile *, ptrdiff_t ), 3086 2388 * ?-=?( T restrict volatile * _Atomic restrict volatile *, ptrdiff_t ); 3087 3088 forall( type T ) T _Atomic const restrict 2389 forall( otype T ) T _Atomic const restrict 3089 2390 * ?+=?( T _Atomic const restrict * restrict volatile *, ptrdiff_t ), 3090 2391 * ?-=?( T _Atomic const restrict * restrict volatile *, ptrdiff_t ), 3091 2392 * ?+=?( T _Atomic const restrict * _Atomic restrict volatile *, ptrdiff_t ), 3092 2393 * ?-=?( T _Atomic const restrict * _Atomic restrict volatile *, ptrdiff_t ); 3093 3094 forall( type T ) T _Atomic const volatile 2394 forall( otype T ) T _Atomic const volatile 3095 2395 * ?+=?( T _Atomic const volatile * restrict volatile *, ptrdiff_t ), 3096 2396 * ?-=?( T _Atomic const volatile * restrict volatile *, ptrdiff_t ), 3097 2397 * ?+=?( T _Atomic const volatile * _Atomic restrict volatile *, ptrdiff_t ), 3098 2398 * ?-=?( T _Atomic const volatile * _Atomic restrict volatile *, ptrdiff_t ); 3099 3100 forall( type T ) T _Atomic restrict volatile 2399 forall( otype T ) T _Atomic restrict volatile 3101 2400 * ?+=?( T _Atomic restrict volatile * restrict volatile *, ptrdiff_t ), 3102 2401 * ?-=?( T _Atomic restrict volatile * restrict volatile *, ptrdiff_t ), 3103 2402 * ?+=?( T _Atomic restrict volatile * _Atomic restrict volatile *, ptrdiff_t ), 3104 2403 * ?-=?( T _Atomic restrict volatile * _Atomic restrict volatile *, ptrdiff_t ); 3105 3106 forall( type T ) T const restrict volatile 2404 forall( otype T ) T const restrict volatile 3107 2405 * ?+=?( T const restrict volatile * restrict volatile *, ptrdiff_t ), 3108 2406 * ?-=?( T const restrict volatile * restrict volatile *, ptrdiff_t ), 3109 2407 * ?+=?( T const restrict volatile * _Atomic restrict volatile *, ptrdiff_t ), 3110 2408 * ?-=?( T const restrict volatile * _Atomic restrict volatile *, ptrdiff_t ); 3111 3112 forall( type T ) T _Atomic const restrict volatile 2409 forall( otype T ) T _Atomic const restrict volatile 3113 2410 * ?+=?( T _Atomic const restrict volatile * restrict volatile *, ptrdiff_t ), 3114 2411 * ?-=?( T _Atomic const restrict volatile * restrict volatile *, ptrdiff_t ), … … 3321 2618 \semantics 3322 2619 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.2620 ``\lstinline$( void )(a)$'', which shall be unambiguous\index{ambiguous interpretation}. 2621 The interpretations of the expression are the interpretations of the second operand. 3325 2622 3326 2623 … … 3337 2634 3338 2635 \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: 2636 If an identifier has \Index{no linkage}, there shall be no more than one declaration of the identifier ( in a declarator or type specifier ) with compatible types in the same scope and in the same name space, except that: 3342 2637 \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. 2638 \item a typedef name may be redefined to denote the same type as it currently does, provided that type is not a variably modified type; 2639 \item tags may be redeclared as specified in section 6.7.2.3 of the {\c11} standard. 3348 2640 \end{itemize} 3349 2641 \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: 2642 This constraint adds the phrase ``with compatible types'' to the {\c11} constraint, to allow overloading. 2643 \end{rationale} 2644 2645 An identifier declared by a type declaration shall not be redeclared as a parameter in a function definition whose declarator includes an identifier list. 2646 \begin{rationale} 2647 This restriction echos {\c11}'s ban on the redeclaration of typedef names as parameters. 2648 This avoids an ambiguity between old-style function declarations and new-style function prototypes: 3359 2649 \begin{lstlisting} 3360 2650 void f( Complex, // ... 3000 characters ... 3361 2651 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.2652 int Complex; 2653 { ... } 2654 \end{lstlisting} 2655 Without the rule, \lstinline$Complex$ would be a type in the first case, and a parameter name in the second. 3366 2656 \end{rationale} 3367 2657 … … 3382 2672 3383 2673 \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. 2674 \CFA extends the {\c11} definition of \define{anonymous structure} to include structure specifiers with tags, and extends the {\c11} definition of \define{anonymous union} to include union specifiers with tags. 3387 2675 \begin{rationale} 3388 2676 This extension imitates an extension in the Plan 9 C compiler \cite{Thompson90new}. … … 3401 2689 cp.x = 0; 3402 2690 cp.color = RED; 3403 3404 2691 struct literal {@\impl{literal}@ 3405 2692 enum { NUMBER, STRING } tag; 3406 2693 union { 3407 3408 2694 double n; 2695 char *s; 3409 2696 }; 3410 2697 }; … … 3428 2715 \begin{comment} 3429 2716 \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? 2717 If the \nonterm{declaration-specifiers} of a declaration that contains a \nonterm{forall-specifier} declares a structure or union tag, the types of the members of the structure or union shall not use any of the type identifiers declared by the \nonterm{type-parameter-list}. 2718 \begin{rationale} 2719 This sort of declaration is illegal because the scope of the type identifiers ends at the end of the declaration, but the scope of the structure tag does not. 2720 \begin{lstlisting} 2721 forall( otype T ) struct Pair { T a, b; 2722 } mkPair( T, T ); // illegal 2723 \end{lstlisting} 2724 If an instance of \lstinline$struct Pair$ was declared later in the current scope, what would the members' type be? 3441 2725 \end{rationale} 3442 2726 \end{comment} 3443 2727 3444 2728 \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}. 2729 The \nonterm{type-parameter-list}s and assertions of the \nonterm{forall-specifier}s declare type identifiers, function and object identifiers with \Index{no linkage}. 3447 2730 3448 2731 If, in the declaration ``\lstinline$T D$'', \lstinline$T$ contains \nonterm{forall-specifier}s and … … 3450 2733 \begin{lstlisting} 3451 2734 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 2735 \end{lstlisting} then a type identifier declared by one of the \nonterm{forall-specifier}s is an \define{inferred parameter} of the function declarator if and only if it is not an inferred parameter of a function declarator in \lstinline$D$, and it is used in the type of a parameter in the following 3456 2736 \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. 2737 \Index{specification} in one of the \nonterm{forall-specifier}s. 2738 The identifiers declared by assertions that use an inferred parameter of a function declarator are \Index{assertion parameter}s of that function declarator. 3460 2739 3461 2740 \begin{comment} 3462 2741 \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. 2742 Since every inferred parameter is used by some parameter, inference can be understood as a single bottom-up pass over the expression tree, that only needs to apply local reasoning at each node. 3465 2743 3466 2744 If this restriction were lifted, it would be possible to write 3467 2745 \begin{lstlisting} 3468 forall( type T ) T * alloc( void );@\use{alloc}@ 3469 int *p = alloc(); 2746 forall( otype T ) T * alloc( void );@\use{alloc}@ int *p = alloc(); 3470 2747 \end{lstlisting} 3471 2748 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. 2749 \lstinline$int *$. 2750 In general, if a call to \lstinline$alloc()$ is a subexpression of an expression involving polymorphic functions and overloaded identifiers, there could be considerable distance between the call and the subexpression that causes \lstinline$T$ to be bound. 3475 2751 3476 2752 With the current restriction, \lstinline$alloc()$ must be given an argument that determines 3477 2753 \lstinline$T$: 3478 2754 \begin{lstlisting} 3479 forall( type T ) T * alloc( T initial_value );@\use{alloc}@2755 forall( otype T ) T * alloc( T initial_value );@\use{alloc}@ 3480 2756 \end{lstlisting} 3481 2757 \end{rationale} 3482 2758 \end{comment} 3483 2759 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 a2760 If a function declarator is part of a function definition, its inferred parameters and assertion parameters have \Index{block scope}; 2761 otherwise, identifiers declared by assertions have a 3486 2762 \define{declaration scope}, which terminates at the end of the \nonterm{declaration}. 3487 2763 3488 2764 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. 2765 Function types with no inferred parameters are \define{monomorphic function} types. 2766 One function type is \define{less polymorphic} than another if it has fewer inferred parameters, or if it has the same number of inferred parameters and fewer of its explicit parameters have types that depend on an inferred parameter. 2767 2768 The names of inferred parameters and the order of identifiers in forall specifiers are not relevant to polymorphic function type compatibility. 2769 Let $f$ and $g$ be two polymorphic function types with the same number of inferred parameters, and let $f_i$ and $g_i$ be the inferred parameters of $f$ and $g$ in their order of occurance in the function types' \nonterm{parameter-type-list}s. 2770 Let $f'$ be $f$ with every occurrence of $f_i$ replaced by $g_i$, for all $i$. 2771 Then $f$ and $g$ are 2772 \Index{compatible type}s if $f'$'s and $g$'s return types and parameter lists are compatible, and if for every assertion parameter of $f'$ there is an assertion parameter in $g$ with the same identifier and compatible type, and vice versa. 3502 2773 3503 2774 \examples … … 3505 2776 \begin{lstlisting} 3506 2777 int fi( int ); 3507 forall( type T ) T fT( T );2778 forall( otype T ) T fT( T ); 3508 2779 \end{lstlisting} 3509 2780 \lstinline$fi()$ takes an \lstinline$int$ and returns an \lstinline$int$. \lstinline$fT()$ takes a … … 3511 2782 \begin{lstlisting} 3512 2783 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. 2784 forall( otype T ) T (*pfT )( T ) = fT; 2785 \end{lstlisting} 2786 \lstinline$pfi$ and \lstinline$pfT$ are pointers to functions. \lstinline$pfT$ is not polymorphic, but the function it points at is. 3517 2787 \begin{lstlisting} 3518 2788 int (*fvpfi( void ))( int ) { 3519 2789 return pfi; 3520 2790 } 3521 forall( type T ) T (*fvpfT( void ))( T ) {2791 forall( otype T ) T (*fvpfT( void ))( T ) { 3522 2792 return pfT; 3523 2793 } 3524 2794 \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 2795 \lstinline$fvpfi()$ and \lstinline$fvpfT()$ are functions taking no arguments and returning pointers to functions. \lstinline$fvpfT()$ is monomorphic, but the function that its return value points at is polymorphic. 2796 \begin{lstlisting} 2797 forall( otype T ) int ( *fTpfi( T ) )( int ); 2798 forall( otype T ) T ( *fTpfT( T ) )( T ); 2799 forall( otype T, otype U ) U ( *fTpfU( T ) )( U ); 2800 \end{lstlisting} 2801 \lstinline$fTpfi()$ is a polymorphic function that returns a pointer to a monomorphic function taking an integer and returning an integer. 2802 It could return \lstinline$pfi$. \lstinline$fTpfT()$ is subtle: it is a polymorphic function returning a \emph{monomorphic} function taking and returning 2803 \lstinline$T$, where \lstinline$T$ is an inferred parameter of \lstinline$fTpfT()$. 2804 For instance, in the expression ``\lstinline$fTpfT(17)$'', \lstinline$T$ is inferred to be \lstinline$int$, and the returned value would have type \lstinline$int ( * )( int )$. ``\lstinline$fTpfT(17)(13)$'' and 3539 2805 ``\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 2806 \lstinline$fTpfU()$ is polymorphic ( in type \lstinline$T$), and returns a pointer to a function that is polymorphic ( in type \lstinline$U$). ``\lstinline$f5(17)("no")$'' is a legal expression of type 3542 2807 \lstinline$char *$. 3543 2808 \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. 2809 forall( otype T, otype U, otype V ) U * f( T *, U, V * const ); 2810 forall( otype U, otype V, otype W ) U * g( V *, U, W * const ); 2811 \end{lstlisting} 2812 The functions \lstinline$f()$ and \lstinline$g()$ have compatible types. 2813 Let \(f\) and \(g\) be their types; 2814 then \(f_1\) = \lstinline$T$, \(f_2\) = \lstinline$U$, \(f_3\) = \lstinline$V$, \(g_1\) 2815 = \lstinline$V$, \(g_2\) = \lstinline$U$, and \(g_3\) = \lstinline$W$. 2816 Replacing every \(f_i\) by \(g_i\) in \(f\) gives 2817 \begin{lstlisting} 2818 forall( otype V, otype U, otype W ) U * f( V *, U, W * const ); 2819 \end{lstlisting} which has a return type and parameter list that is compatible with \(g\). 2820 \begin{rationale} 2821 The word ``\lstinline$type$'' in a forall specifier is redundant at the moment, but I want to leave room for inferred parameters of ordinary types in case parameterized types get added one day. 3558 2822 3559 2823 Even without parameterized types, I might try to allow 3560 2824 \begin{lstlisting} 3561 2825 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. 2826 \end{lstlisting} but C currently rewrites array parameters as pointer parameters, so the effects of such a change require more thought. 2827 \end{rationale} 2828 2829 \begin{rationale} 2830 A polymorphic declaration must do two things: it must introduce type parameters, and it must apply assertions to those types. 2831 Adding this to existing C declaration syntax and semantics was delicate, and not entirely successful. 2832 2833 C depends on declaration-before-use, so a forall specifier must introduce type names before they can be used in the declaration specifiers. 2834 This could be done by making the forall specifier part of the declaration specifiers, or by making it a new introductory clause of declarations. 2835 2836 Assertions are also part of polymorphic function types, because it must be clear which functions have access to the assertion parameters declared by the assertions. 2837 All attempts to put assertions inside an introductory clause produced complex semantics and confusing code. 2838 Building them into the declaration specifiers could be done by placing them in the function's parameter list, or in a forall specifier that is a declaration specifier. 2839 Assertions are also used with type parameters of specifications, and by type declarations. 2840 For consistency's sake it seems best to attach assertions to the type declarations in forall specifiers, which means that forall specifiers must be declaration specifiers. 3584 2841 \end{rationale} 3585 2842 %HERE … … 3595 2852 3596 2853 \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. 2854 \lstinline$restrict$\index{register@{\lstinline$restrict$}} Types other than type parameters and pointer types whose referenced type is an object type shall not be restrict-qualified. 3599 2855 3600 2856 \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 2857 An object's type may be a restrict-qualified type parameter. \lstinline$restrict$ does not establish any special semantics in that case. 2858 2859 \begin{rationale} 2860 \CFA loosens the constraint on the restrict qualifier so that restrict-qualified pointers may be passed to polymorphic functions. 2861 \end{rationale} 2862 2863 \lstinline$lvalue$ may be used to qualify the return type of a function type. 2864 Let \lstinline$T$ be an unqualified version of a type; 2865 then the result of calling a function with return type 3611 2866 \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}. 2867 \lstinline$const$\use{const} and \lstinline$volatile$\use{volatile} qualifiers may also be added to indicate that the function result is a constant or volatile lvalue. 2868 \begin{rationale} 2869 The \lstinline$const$ and \lstinline$volatile$ qualifiers can only be sensibly used to qualify the return type of a function if the \lstinline$lvalue$ qualifier is also used. 2870 \end{rationale} 2871 2872 An {lvalue}-qualified type may be used in a \Index{cast expression} if the operand is an lvalue; 2873 the result of the expression is an lvalue. 2874 2875 \begin{rationale} 2876 \lstinline$lvalue$ provides some of the functionality of {\CC}'s ``\lstinline$T&$'' ( reference to object of type \lstinline$T$) type. 2877 Reference types have four uses in {\CC}. 3625 2878 \begin{itemize} 3626 2879 \item … … 3629 2882 3630 2883 \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. 2884 A reference can be used to define an alias for a complicated lvalue expression, as a way of getting some of the functionality of the Pascal \lstinline$with$ statement. 2885 The following {\CC} code gives an example. 3634 2886 \begin{lstlisting} 3635 2887 { … … 3641 2893 3642 2894 \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 2895 A reference parameter can be used to allow a function to modify an argument without forcing the caller to pass the address of the argument. 2896 This is most useful for user-defined assignment operators. 2897 In {\CC}, plain assignment is done by a function called ``\lstinline$operator=$'', and the two expressions 3647 2898 \begin{lstlisting} 3648 2899 a = b; 3649 2900 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 type2901 \end{lstlisting} are equivalent. 2902 If \lstinline$a$ and \lstinline$b$ are of type \lstinline$T$, then the first parameter of \lstinline$operator=$ must have type ``\lstinline$T&$''. 2903 It cannot have type 3653 2904 \lstinline$T$, because then assignment couldn't alter the variable, and it can't have type 3654 2905 ``\lstinline$T *$'', because the assignment would have to be written ``\lstinline$&a = b;$''. 3655 2906 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$&$''. 2907 In the case of user-defined operators, this could just as well be handled by using pointer types and by changing the rewrite rules so that ``\lstinline$a = b;$'' is equivalent to 2908 ``\lstinline$operator=(&( a), b )$''. 2909 Reference parameters of ``normal'' functions are Bad Things, because they remove a useful property of C function calls: an argument can only be modified by a function if it is preceded by ``\lstinline$&$''. 3661 2910 3662 2911 \item … … 3668 2917 void fiddle( const Thing & ); 3669 2918 \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''. 2919 If the second form is used, then constructors and destructors are not invoked to create a temporary variable at the call site ( and it is bad style for the caller to make any assumptions about such things), and within \lstinline$fiddle$ the parameter is subject to the usual problems caused by aliases. 2920 The reference form might be chosen for efficiency's sake if \lstinline$Thing$s are too large or their constructors or destructors are too expensive. 2921 An implementation may switch between them without causing trouble for well-behaved clients. 2922 This leaves the implementor to define ``too large'' and ``too expensive''. 3677 2923 3678 2924 I propose to push this job onto the compiler by allowing it to implement 3679 2925 \begin{lstlisting} 3680 2926 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''. 2927 \end{lstlisting} with call-by-reference. 2928 Since it knows all about the size of \lstinline$Thing$s and the parameter passing mechanism, it should be able to come up with a better definition of ``too large'', and may be able to make a good guess at ``too expensive''. 3685 2929 \end{itemize} 3686 2930 3687 In summary, since references are only really necessary for returning lvalues, I'll only provide 3688 lvalue functions. 2931 In summary, since references are only really necessary for returning lvalues, I'll only provide lvalue functions. 3689 2932 \end{rationale} 3690 2933 … … 3693 2936 \subsection{Initialization} 3694 2937 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}. 2938 An expression that is used as an \nonterm{initializer} is treated as being cast to the type of the object being initialized. 2939 An expression used in an \nonterm{initializer-list} is treated as being cast to the type of the aggregate member that it initializes. 2940 In either case the cast must have a single unambiguous \Index{interpretation}. 3699 2941 3700 2942 … … 3717 2959 \end{syntax} 3718 2960 \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. 2961 The declarations allowed in a specification are much the same as those allowed in a structure, except that bit fields are not allowed, and \Index{incomplete type}s and function types are allowed. 3721 2962 \end{rationale} 3722 2963 3723 2964 \semantics 3724 A \define{specification definition} defines a name for a \define{specification}: a parameterized 3725 collection of object and function declarations. 2965 A \define{specification definition} defines a name for a \define{specification}: a parameterized collection of object and function declarations. 3726 2966 3727 2967 The declarations in a specification consist of the declarations in the 3728 2968 \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. 2969 \nonterm{spec-parameter-list}. 2970 If the collection contains two declarations that declare the same identifier and have compatible types, they are combined into one declaration with the composite type constructed from the two types. 3732 2971 3733 2972 … … 3747 2986 3748 2987 \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}. 2988 The \nonterm{identifier} in an assertion that is not a \nonterm{spec-declaration} shall be the name of a specification. 2989 The \nonterm{type-name-list} shall contain one \nonterm{type-name} argument for each \nonterm{type-parameter} in that specification's \nonterm{spec-parameter-list}. 2990 If the 2991 \nonterm{type-parameter} uses type-class \lstinline$type$\use{type}, the argument shall be the type name of an \Index{object type}; 2992 if it uses \lstinline$dtype$, the argument shall be the type name of an object type or an \Index{incomplete type}; 2993 and if it uses \lstinline$ftype$, the argument shall be the type name of a \Index{function type}. 3756 2994 3757 2995 \semantics … … 3759 2997 \define{assertion parameters}. 3760 2998 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. 2999 The assertion parameters produced by an assertion that applies the name of a specification to type arguments are found by taking the declarations specified in the specification and treating each of the specification's parameters as a synonym for the corresponding \nonterm{type-name} argument. 3000 3001 The collection of assertion parameters produced by the \nonterm{assertion-list} are found by combining the declarations produced by each assertion. 3002 If the collection contains two declarations that declare the same identifier and have compatible types, they are combined into one declaration with the \Index{composite type} constructed from the two types. 3769 3003 3770 3004 \examples 3771 3005 \begin{lstlisting} 3772 forall( type T | T ?*?( T, T ))@\use{?*?}@3006 forall( otype T | T ?*?( T, T ))@\use{?*?}@ 3773 3007 T square( T val ) {@\impl{square}@ 3774 3008 return val + val; 3775 3009 } 3776 3777 context summable( type T ) {@\impl{summable}@ 3010 trait summable( otype T ) {@\impl{summable}@ 3778 3011 T ?+=?( T *, T );@\use{?+=?}@ 3779 3012 const T 0;@\use{0}@ 3780 3013 }; 3781 context list_of( type List,type Element ) {@\impl{list_of}@3014 trait list_of( otype List, otype Element ) {@\impl{list_of}@ 3782 3015 Element car( List ); 3783 3016 List cdr( List ); … … 3786 3019 int is_nil( List ); 3787 3020 }; 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 3021 trait sum_list( otype List, otype Element | summable( Element ) | list_of( List, Element ) ) {}; 3022 \end{lstlisting} 3023 \lstinline$sum_list$ contains seven declarations, which describe a list whose elements can be added up. 3024 The assertion ``\lstinline$|sum_list( i_list, int )$''\use{sum_list} produces the assertion parameters 3793 3025 \begin{lstlisting} 3794 3026 int ?+=?( int *, int ); … … 3825 3057 3826 3058 \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. 3059 If a type declaration has block scope, and the declared identifier has external or internal linkage, the declaration shall have no initializer for the identifier. 3829 3060 3830 3061 \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). 3062 A \nonterm{type-parameter} or a \nonterm{type-declarator} declares an identifier to be a \Index{type name} for a type incompatible with all other types. 3063 3064 An identifier declared by a \nonterm{type-parameter} has \Index{no linkage}. 3065 Identifiers declared with type-class \lstinline$type$\use{type} are \Index{object type}s; 3066 those declared with type-class 3067 \lstinline$dtype$\use{dtype} are \Index{incomplete type}s; 3068 and those declared with type-class 3069 \lstinline$ftype$\use{ftype} are \Index{function type}s. 3070 The identifier has \Index{block scope} that terminates at the end of the \nonterm{spec-declaration-list} or polymorphic function that contains the \nonterm{type-parameter}. 3071 3072 A \nonterm{type-declarator} with an \Index{initializer} is a \define{type definition}. The declared identifier is an \Index{incomplete type} within the initializer, and an \Index{object type} after the end of the initializer. 3073 The type in the initializer is called the \define{implementation 3074 type}. 3075 Within the scope of the declaration, \Index{implicit conversion}s can be performed between the defined type and the implementation type, and between pointers to the defined type and pointers to the implementation type. 3076 3077 A type declaration without an \Index{initializer} and without a \Index{storage-class specifier} or with storage-class specifier \lstinline$static$\use{static} defines an \Index{incomplete type}. 3078 If a 3079 \Index{translation unit} or \Index{block} contains one or more such declarations for an identifier, it must contain exactly one definition of the identifier ( but not in an enclosed block, which would define a new type known only within that block). 3853 3080 \begin{rationale} 3854 3081 Incomplete type declarations allow compact mutually-recursive types. 3855 3082 \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. 3083 otype t1; // incomplete type declaration 3084 otype t2 = struct { t1 * p; ... }; 3085 otype t1 = struct { t2 * p; ... }; 3086 \end{lstlisting} 3087 Without them, mutual recursion could be handled by declaring mutually recursive structures, then initializing the types to those structures. 3862 3088 \begin{lstlisting} 3863 3089 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. 3090 otype t2 = struct s2 { struct s1 * p; ... }; 3091 otype t1 = struct s1 { struct s2 * p; ... }; 3092 \end{lstlisting} 3093 This introduces extra names, and may force the programmer to cast between the types and their implementations. 3869 3094 \end{rationale} 3870 3095 3871 3096 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$.A3097 \lstinline$extern$\use{extern} is an \define{opaque type declaration}. 3098 Opaque types are 3099 \Index{object type}s. 3100 An opaque type is not a \nonterm{constant-expression}; 3101 neither is a structure or union that has a member whose type is not a \nonterm{constant-expression}. Every other 3102 \Index{object type} is a \nonterm{constant-expression}. 3103 Objects with static storage duration shall be declared with a type that is a \nonterm{constant-expression}. 3104 \begin{rationale} 3105 Type declarations can declare identifiers with external linkage, whereas typedef declarations declare identifiers that only exist within a translation unit. 3106 These opaque types can be used in declarations, but the implementation of the type is not visible. 3107 3108 Static objects can not have opaque types because space for them would have to be allocated at program start-up. 3109 This is a deficiency\index{deficiencies!static opaque objects}, but I don't want to deal with ``module initialization'' code just now. 3110 \end{rationale} 3111 3112 An \Index{incomplete type} which is not a qualified version\index{qualified type} of a type is a value of \Index{type-class} \lstinline$dtype$. 3113 An object type\index{object types} which is not a qualified version of a type is a value of type-classes \lstinline$type$ and \lstinline$dtype$. 3114 A 3890 3115 \Index{function type} is a value of type-class \lstinline$ftype$. 3891 3116 \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. 3117 Syntactically, a type value is a \nonterm{type-name}, which is a declaration for an object which omits the identifier being declared. 3118 3119 Object types are precisely the types that can be instantiated. 3120 Type qualifiers are not included in type values because the compiler needs the information they provide at compile time to detect illegal statements or to produce efficient machine instructions. 3121 For instance, the code that a compiler must generate to manipulate an object that has volatile-qualified type may be different from the code to manipulate an ordinary object. 3122 3123 Type qualifiers are a weak point of C's type system. 3124 Consider the standard library function 3125 \lstinline$strchr()$ which, given a string and a character, returns a pointer to the first occurrence of the character in the string. 3904 3126 \begin{lstlisting} 3905 3127 char *strchr( const char *s, int c ) {@\impl{strchr}@ 3906 3128 char real_c = c; // done because c was declared as int. 3907 3129 for ( ; *s != real_c; s++ ) 3908 3130 if ( *s == '\0' ) return NULL; 3909 3131 return ( char * )s; 3910 3132 } 3911 3133 \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 3134 The parameter \lstinline$s$ must be \lstinline$const char *$, because \lstinline$strchr()$ might be used to search a constant string, but the return type must be \lstinline$char *$, because the result might be used to modify a non-constant string. 3135 Hence the body must perform a cast, and ( even worse) 3136 \lstinline$strchr()$ provides a type-safe way to attempt to modify constant strings. 3137 What is needed is some way to say that \lstinline$s$'s type might contain qualifiers, and the result type has exactly the same qualifiers. 3138 Polymorphic functions do not provide a fix for this deficiency\index{deficiencies!pointers to qualified types}, because type qualifiers are not part of type values. 3139 Instead, overloading can be used to define \lstinline$strchr()$ for each combination of qualifiers. 3140 \end{rationale} 3141 3142 \begin{rationale} 3143 Since \Index{incomplete type}s are not type values, they can not be used as the initializer in a type declaration, or as the type of a structure or union member. 3144 This prevents the declaration of types that contain each other. 3145 \begin{lstlisting} 3146 otype t1; 3147 otype t2 = t1; // illegal: incomplete type t1 3148 otype t1 = t2; 3149 \end{lstlisting} 3150 3151 The initializer in a file-scope declaration must be a constant expression. 3152 This means type declarations can not build on opaque types, which is a deficiency\index{deficiencies!nesting opaque 3935 3153 types}. 3936 3154 \begin{lstlisting} 3937 extern type Huge; // extended-precision integer type.3938 type Rational = struct {3155 extern otype Huge; // extended-precision integer type 3156 otype Rational = struct { 3939 3157 Huge numerator, denominator; // illegal 3940 3158 }; … … 3944 3162 \end{lstlisting} 3945 3163 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. 3164 \lstinline$Rational$ has external linkage, it must be created before any other translation unit instantiates it), and would force an ordering on the initialization of the translation unit that defines \lstinline$Huge$ and the translation that declares \lstinline$Rational$. 3165 3166 A benefit of the restriction is that it prevents the declaration in separate translation units of types that contain each other, which would be hard to prevent otherwise. 3952 3167 \begin{lstlisting} 3953 3168 // File a.c: … … 3962 3177 \begin{rationale} 3963 3178 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 3179 \nonterm{struct-declaration}, type declarations can not be structure members. 3180 The form of 3965 3181 \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. 3182 Hence the syntax of \nonterm{type-specifier} does not have to be extended to allow type-valued expressions. 3183 It also side-steps the problem of type-valued expressions producing different values in different declarations. 3184 3185 Since a type declaration is not a \nonterm{parameter-declaration}, functions can not have explicit type parameters. 3186 This may be too restrictive, but it attempts to make compilation simpler. 3187 Recall that when traditional C scanners read in an identifier, they look it up in the symbol table to determine whether or not it is a typedef name, and return a ``type'' or ``identifier'' token depending on what they find. 3188 A type parameter would add a type name to the current scope. 3189 The scope manipulations involved in parsing the declaration of a function that takes function pointer parameters and returns a function pointer may just be too complicated. 3190 3191 Explicit type parameters don't seem to be very useful, anyway, because their scope would not include the return type of the function. 3192 Consider the following attempt to define a type-safe memory allocation function. 3981 3193 \begin{lstlisting} 3982 3194 #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. 3195 T * new( otype T ) { return ( T * )malloc( sizeof( T) ); }; 3196 @\ldots@ int * ip = new( int ); 3197 \end{lstlisting} 3198 This looks sensible, but \CFA's declaration-before-use rules mean that ``\lstinline$T$'' in the function body refers to the parameter, but the ``\lstinline$T$'' in the return type refers to the meaning of \lstinline$T$ in the scope that contains \lstinline$new$; 3199 it could be undefined, or a type name, or a function or variable name. 3200 Nothing good can result from such a situation. 3991 3201 \end{rationale} 3992 3202 … … 3994 3204 Since type declarations create new types, instances of types are always passed by value. 3995 3205 \begin{lstlisting} 3996 type A1 = int[2];3206 otype A1 = int[2]; 3997 3207 void f1( A1 a ) { a[0] = 0; }; 3998 typedef int A2[2];3208 otypedef int A2[2]; 3999 3209 void f2( A2 a ) { a[0] = 0; }; 4000 3210 A1 v1; … … 4003 3213 f2( v2 ); 4004 3214 \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]$. 3215 \lstinline$V1$ is passed by value, so \lstinline$f1()$'s assignment to \lstinline$a[0]$ does not modify v1. \lstinline$V2$ is converted to a pointer, so \lstinline$f2()$ modifies \lstinline$v2[0]$. 4008 3216 4009 3217 A translation unit containing the declarations 4010 3218 \begin{lstlisting} 4011 extern type Complex;@\use{Complex}@ // opaque type declaration .3219 extern type Complex;@\use{Complex}@ // opaque type declaration 4012 3220 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}@ 3221 \end{lstlisting} can contain declarations of complex numbers, which can be passed to \lstinline$abs$. 3222 Some other translation unit must implement \lstinline$Complex$ and \lstinline$abs$. 3223 That unit might contain the declarations 3224 \begin{lstlisting} 3225 otype Complex = struct { float re, im; };@\impl{Complex}@ 4019 3226 Complex cplx_i = { 0.0, 1.0 };@\impl{cplx_i}@ 4020 3227 float abs( Complex c ) {@\impl{abs( Complex )}@ … … 4022 3229 } 4023 3230 \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. 3231 Note that \lstinline$c$ is implicitly converted to a \lstinline$struct$ so that its components can be retrieved. 3232 3233 \begin{lstlisting} 3234 otype Time_of_day = int;@\impl{Time_of_day}@ // seconds since midnight. 4029 3235 Time_of_day ?+?( Time_of_day t1, int seconds ) {@\impl{?+?}@ 4030 3236 return (( int)t1 + seconds ) % 86400; … … 4034 3240 4035 3241 \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. 3242 Within the scope of a type definition, an instance of the type can be viewed as having that type or as having the implementation type. 3243 In the \lstinline$Time_of_day$ example, the difference is important. 3244 Different languages have treated the distinction between the abstraction and the implementation in different ways. 4040 3245 \begin{itemize} 4041 3246 \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. 3247 Inside a Clu cluster \cite{CLU}, the declaration of an instance states which view applies. 3248 Two primitives called \lstinline$up$ and \lstinline$down$ can be used to convert between the views. 3249 \item 3250 The Simula class \cite{SIMULA87} is essentially a record type. 3251 Since the only operations on a record are member selection and assignment, which can not be overloaded, there is never any ambiguity as to whether the abstraction or the implementation view is being used. 3252 In {\CC} 3253 \cite{C++}, operations on class instances include assignment and ``\lstinline$&$'', which can be overloaded. 3254 A ``scope resolution'' operator can be used inside the class to specify whether the abstract or implementation version of the operation should be used. 3255 \item 3256 An Ada derived type definition \cite{Ada} creates a new type from an old type, and also implicitly declares derived subprograms that correspond to the existing subprograms that use the old type as a parameter type or result type. 3257 The derived subprograms are clones of the existing subprograms with the old type replaced by the derived type. 3258 Literals and aggregates of the old type are also cloned. 4056 3259 In other words, the abstract view provides exactly the same operations as the implementation view. 4057 3260 This allows the abstract view to be used in all cases. 4058 3261 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.3262 The derived subprograms can be replaced by programmer-specified subprograms. 3263 This is an exception to the normal scope rules, which forbid duplicate definitions of a subprogram in a scope. 3264 In this case, explicit conversions between the derived type and the old type can be used. 4062 3265 \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$. 3266 \CFA's rules are like Clu's, except that implicit conversions and conversion costs allow it to do away with most uses of \lstinline$up$ and \lstinline$down$. 4065 3267 \end{rationale} 4066 3268 … … 4070 3272 A declaration\index{type declaration} of a type identifier \lstinline$T$ with type-class 4071 3273 \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: 3274 \lstinline$T ?=?( T *, T )$\use{?=?}, with the same \Index{scope} and \Index{linkage} as the identifier \lstinline$T$. 3275 \begin{rationale} 3276 Assignment is central to C's imperative programming style, and every existing C object type has assignment defined for it ( except for array types, which are treated as pointer types for purposes of assignment). 3277 Without this rule, nearly every inferred type parameter would need an accompanying assignment assertion parameter. 3278 If a type parameter should not have an assignment operation, 3279 \lstinline$dtype$ should be used. 3280 If a type should not have assignment defined, the user can define an assignment function that causes a run-time error, or provide an external declaration but no definition and thus cause a link-time error. 3281 \end{rationale} 3282 3283 A definition\index{type definition} of a type identifier \lstinline$T$ with \Index{implementation type} \lstinline$I$ and type-class \lstinline$type$ implicitly defines a default assignment function. 3284 A definition\index{type definition} of a type identifier \lstinline$T$ with implementation type \lstinline$I$ and an assertion list implicitly defines \define{default function}s and 3285 \define{default object}s as declared by the assertion declarations. 3286 The default objects and functions have the same \Index{scope} and \Index{linkage} as the identifier \lstinline$T$. 3287 Their values are determined as follows: 4091 3288 \begin{itemize} 4092 3289 \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. 3290 If at the definition of \lstinline$T$ there is visible a declaration of an object with the same name as the default object, and if the type of that object with all occurrence of \lstinline$I$ replaced by \lstinline$T$ is compatible with the type of the default object, then the default object is initialized with that object. 3291 Otherwise the scope of the declaration of \lstinline$T$ must contain a definition of the default object. 4098 3292 4099 3293 \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. 3294 If at the definition of \lstinline$T$ there is visible a declaration of a function with the same name as the default function, and if the type of that function with all occurrence of \lstinline$I$ replaced by \lstinline$T$ is compatible with the type of the default function, then the default function calls that function after converting its arguments and returns the converted result. 3295 3296 Otherwise, if \lstinline$I$ contains exactly one anonymous member\index{anonymous member} such that at the definition of \lstinline$T$ there is visible a declaration of a function with the same name as the default function, and the type of that function with all occurrences of the anonymous member's type in its parameter list replaced by \lstinline$T$ is compatible with the type of the default function, then the default function calls that function after converting its arguments and returns the result. 3297 3298 Otherwise the scope of the declaration of \lstinline$T$ must contain a definition of the default function. 4114 3299 \end{itemize} 4115 3300 \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. 3301 Note that a pointer to a default function will not compare as equal to a pointer to the inherited function. 3302 \end{rationale} 3303 3304 A function or object with the same type and name as a default function or object that is declared within the scope of the definition of \lstinline$T$ replaces the default function or object. 4122 3305 4123 3306 \examples 4124 3307 \begin{lstlisting} 4125 context s(type T ) {3308 trait s( otype T ) { 4126 3309 T a, b; 4127 } 4128 struct impl { int left, right; } a = { 0, 0 }; 4129 type Pair | s( Pair ) = struct impl; 3310 } struct impl { int left, right; } a = { 0, 0 }; 3311 otype Pair | s( Pair ) = struct impl; 4130 3312 Pair b = { 1, 1 }; 4131 3313 \end{lstlisting} 4132 3314 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 ) {3315 \lstinline$Pair a$ inherits its value from the \lstinline$struct impl a$. 3316 The definition of 3317 \lstinline$Pair b$ is compulsory because there is no \lstinline$struct impl b$ to construct a value from. 3318 \begin{lstlisting} 3319 trait ss( otype T ) { 4138 3320 T clone( T ); 4139 3321 void munge( T * ); 4140 3322 } 4141 type Whatsit | ss( Whatsit );@\use{Whatsit}@4142 type Doodad | ss( Doodad ) = struct doodad {@\use{Doodad}@3323 otype Whatsit | ss( Whatsit );@\use{Whatsit}@ 3324 otype Doodad | ss( Doodad ) = struct doodad {@\use{Doodad}@ 4143 3325 Whatsit; // anonymous member 4144 3326 int extra; … … 4152 3334 void munge( Doodad * ); 4153 3335 \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. 3336 The assignment function inherits \lstinline$struct doodad$'s assignment function because the types match when \lstinline$struct doodad$ is replaced by \lstinline$Doodad$ throughout. 4156 3337 \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 3338 \lstinline$Whatsit$ is replaced by \lstinline$Doodad$ in the parameter list. \lstinline$clone()$ does \emph{not} inherit \lstinline$Whatsit$'s \lstinline$clone()$: replacement in the parameter list yields ``\lstinline$Whatsit clone( Doodad )$'', which is not compatible with 3339 \lstinline$Doodad$'s \lstinline$clone()$'s type. 3340 Hence the definition of 4161 3341 ``\lstinline$Doodad clone( Doodad )$'' is necessary. 4162 3342 4163 3343 Default functions and objects are subject to the normal scope rules. 4164 3344 \begin{lstlisting} 4165 type T = @\ldots@;3345 otype T = @\ldots@; 4166 3346 T a_T = @\ldots@; // Default assignment used. 4167 3347 T ?=?( T *, T ); … … 4173 3353 4174 3354 \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.3355 The \emph{class} construct of object-oriented programming languages performs three independent functions. 3356 It \emph{encapsulates} a data structure; 3357 it defines a \emph{subtype} relationship, whereby instances of one class may be used in contexts that require instances of another; 3358 and it allows one class to \emph{inherit} the implementation of another. 3359 3360 In \CFA, encapsulation is provided by opaque types and the scope rules, and subtyping is provided by specifications and assertions. 3361 Inheritance is provided by default functions and objects. 4182 3362 \end{rationale} 4183 3363 … … 4190 3370 \end{syntax} 4191 3371 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}.3372 Many statements contain expressions, which may have more than one interpretation. 3373 The following sections describe how the \CFA translator selects an interpretation. 3374 In all cases the result of the selection shall be a single unambiguous \Index{interpretation}. 4195 3375 4196 3376 … … 4239 3419 switch ( E ) ... 4240 3420 choose ( E ) ... 4241 \end{lstlisting} 4242 may have more than one interpretation, but it shall have only one interpretation with an integral type. 3421 \end{lstlisting} may have more than one interpretation, but it shall have only one interpretation with an integral type. 4243 3422 An \Index{integer promotion} is performed on the expression if necessary. 4244 3423 The constant expressions in \lstinline$case$ statements with the switch are converted to the promoted type. … … 4284 3463 while ( E ) ... 4285 3464 do ... while ( E ); 4286 \end{lstlisting} 4287 is treated as ``\lstinline$( int )((E)!=0)$''. 3465 \end{lstlisting} is treated as ``\lstinline$( int )((E)!=0)$''. 4288 3466 4289 3467 The statement 4290 3468 \begin{lstlisting} 4291 3469 for ( a; b; c ) @\ldots@ 4292 \end{lstlisting} 4293 is treated as 3470 \end{lstlisting} is treated as 4294 3471 \begin{lstlisting} 4295 3472 for ( ( void )( a ); ( int )(( b )!=0); ( void )( c ) ) ... … … 4413 3590 4414 3591 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. 3592 \lstinline$__DATE__$, and \lstinline$__TIME__$, as in the {\c11} standard. 3593 It shall not define the macro name \lstinline$__STDC__$. 3594 3595 In addition, the implementation shall define the macro name \lstinline$__CFORALL__$ to be the decimal constant 1. 4420 3596 4421 3597 … … 4427 3603 4428 3604 \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. 3605 This section gives example specifications for some groups of types that are important in the C language, in terms of the predefined operations that can be applied to those types. 4431 3606 4432 3607 4433 3608 \subsection{Scalar, arithmetic, and integral types} 4434 3609 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}@3610 The pointer, integral, and floating-point types are all \define{scalar types}. 3611 All of these types can be logically negated and compared. 3612 The assertion ``\lstinline$scalar( Complex )$'' should be read as ``type \lstinline$Complex$ is scalar''. 3613 \begin{lstlisting} 3614 trait scalar( otype T ) {@\impl{scalar}@ 4440 3615 int !?( T ); 4441 3616 int ?<?( T, T ), ?<=?( T, T ), ?==?( T, T ), ?>=?( T, T ), ?>?( T, T ), ?!=?( T, T ); … … 4443 3618 \end{lstlisting} 4444 3619 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}@ 3620 The integral and floating-point types are \define{arithmetic types}, which support the basic arithmetic operators. 3621 The use of an assertion in the \nonterm{spec-parameter-list} declares that, in order to be arithmetic, a type must also be scalar ( and hence that scalar operations are available ). 3622 This is equivalent to inheritance of specifications. 3623 \begin{lstlisting} 3624 trait arithmetic( otype T | scalar( T ) ) {@\impl{arithmetic}@@\use{scalar}@ 4451 3625 T +?( T ), -?( T ); 4452 3626 T ?*?( T, T ), ?/?( T, T ), ?+?( T, T ), ?-?( T, T ); … … 4457 3631 \define{integral types}. 4458 3632 \begin{lstlisting} 4459 context integral(type T | arithmetic( T ) ) {@\impl{integral}@@\use{arithmetic}@3633 trait integral( otype T | arithmetic( T ) ) {@\impl{integral}@@\use{arithmetic}@ 4460 3634 T ~?( T ); 4461 3635 T ?&?( T, T ), ?|?( T, T ), ?^?( T, T ); … … 4471 3645 The only operation that can be applied to all modifiable lvalues is simple assignment. 4472 3646 \begin{lstlisting} 4473 context m_lvalue(type T ) {@\impl{m_lvalue}@3647 trait m_lvalue( otype T ) {@\impl{m_lvalue}@ 4474 3648 T ?=?( T *, T ); 4475 3649 }; … … 4477 3651 4478 3652 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}@ 3653 \nonterm{spec-parameter-list} reflect those relationships. 3654 This is equivalent to multiple inheritance of specifications. 3655 Scalars can also be incremented and decremented. 3656 \begin{lstlisting} 3657 trait m_l_scalar( otype T | scalar( T ) | m_lvalue( T ) ) {@\impl{m_l_scalar}@ 4483 3658 T ?++( T * ), ?--( T * );@\use{scalar}@@\use{m_lvalue}@ 4484 3659 T ++?( T * ), --?( T * ); … … 4486 3661 \end{lstlisting} 4487 3662 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}@3663 Modifiable arithmetic lvalues are both modifiable scalar lvalues and arithmetic. 3664 Note that this results in the ``inheritance'' of \lstinline$scalar$ along both paths. 3665 \begin{lstlisting} 3666 trait m_l_arithmetic( otype T | m_l_scalar( T ) | arithmetic( T ) ) {@\impl{m_l_arithmetic}@ 4492 3667 T ?/=?( T *, T ), ?*=?( T *, T );@\use{m_l_scalar}@@\use{arithmetic}@ 4493 3668 T ?+=?( T *, T ), ?-=?( T *, T ); 4494 3669 }; 4495 4496 context m_l_integral( type T | m_l_arithmetic( T ) | integral( T ) ) {@\impl{m_l_integral}@ 3670 trait m_l_integral( otype T | m_l_arithmetic( T ) | integral( T ) ) {@\impl{m_l_integral}@ 4497 3671 T ?&=?( T *, T ), ?|=?( T *, T ), ?^=?( T *, T );@\use{m_l_arithmetic}@ 4498 3672 T ?%=?( T *, T ), ?<<=?( T *, T ), ?>>=?( T *, T );@\use{integral}@ … … 4503 3677 \subsection{Pointer and array types} 4504 3678 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 3679 Array types can barely be said to exist in {\c11}, since in most cases an array name is treated as a constant pointer to the first element of the array, and the subscript expression 4507 3680 ``\lstinline$a[i]$'' is equivalent to the dereferencing expression ``\lstinline$(*( a+( i )))$''. 4508 3681 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$+$'' and3682 ``\lstinline$!=$'' are only defined for pointers to array elements, but the type system does not enforce those restrictions. 3683 Consequently, there is no need for a separate ``array type'' specification. 3684 3685 Pointer types are scalar types. 3686 Like other scalar types, they have ``\lstinline$+$'' and 4514 3687 ``\lstinline$-$'' operators, but the types do not match the types of the operations in 4515 3688 \lstinline$arithmetic$, so these operators cannot be consolidated in \lstinline$scalar$. 4516 3689 \begin{lstlisting} 4517 context pointer( type P | scalar( P ) ) {@\impl{pointer}@@\use{scalar}@3690 trait pointer( type P | scalar( P ) ) {@\impl{pointer}@@\use{scalar}@ 4518 3691 P ?+?( P, long int ), ?+?( long int, P ), ?-?( P, long int ); 4519 3692 ptrdiff_t ?-?( P, P ); 4520 3693 }; 4521 4522 context m_l_pointer( type P | pointer( P ) | m_l_scalar( P ) ) {@\impl{m_l_pointer}@ 3694 trait m_l_pointer( type P | pointer( P ) | m_l_scalar( P ) ) {@\impl{m_l_pointer}@ 4523 3695 P ?+=?( P *, long int ), ?-=?( P *, long int ); 4524 3696 P ?=?( P *, void * ); … … 4527 3699 \end{lstlisting} 4528 3700 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 3701 Specifications that define the dereference operator ( or subscript operator ) require two parameters, one for the pointer type and one for the pointed-at ( or element ) type. 3702 Different specifications are needed for each set of \Index{type qualifier}s, because qualifiers are not included in types. 3703 The assertion ``\lstinline$|ptr_to( Safe_pointer, int )$'' should be read as 4533 3704 ``\lstinline$Safe_pointer$ acts like a pointer to \lstinline$int$''. 4534 3705 \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 ); 3706 trait ptr_to( otype P | pointer( P ), otype T ) {@\impl{ptr_to}@@\use{pointer}@ 3707 lvalue T *?( P ); 3708 lvalue T ?[?]( P, long int ); 4537 3709 }; 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}@3710 trait ptr_to_const( otype P | pointer( P ), otype T ) {@\impl{ptr_to_const}@ 3711 const lvalue T *?( P ); 3712 const lvalue T ?[?]( P, long int );@\use{pointer}@ 4541 3713 }; 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}@3714 trait ptr_to_volatile( otype P | pointer( P ), otype T ) }@\impl{ptr_to_volatile}@ 3715 volatile lvalue T *?( P ); 3716 volatile lvalue T ?[?]( P, long int );@\use{pointer}@ 4545 3717 }; 4546 \end{lstlisting} 4547 \begin{lstlisting} 4548 context ptr_to_const_volatile( type P | pointer( P ), type T ) }@\impl{ptr_to_const_volatile}@ 3718 trait ptr_to_const_volatile( otype P | pointer( P ), otype T ) }@\impl{ptr_to_const_volatile}@ 4549 3719 const volatile lvalue T *?( P );@\use{pointer}@ 4550 3720 const volatile lvalue T ?[?]( P, long int ); … … 4552 3722 \end{lstlisting} 4553 3723 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 *$''. 3724 Assignment to pointers is more complicated than is the case with other types, because the target's type can have extra type qualifiers in the pointed-at type: a ``\lstinline$T *$'' can be assigned to a ``\lstinline$const T *$'', a ``\lstinline$volatile T *$'', and a ``\lstinline$const volatile T *$''. 4557 3725 Again, the pointed-at type is passed in, so that assertions can connect these specifications to the 4558 3726 ``\lstinline$ptr_to$'' specifications. 4559 3727 \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}@ {3728 trait m_l_ptr_to( otype P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to}@ otype T | ptr_to( P, T )@\use{ptr_to}@ { 4561 3729 P ?=?( P *, T * ); 4562 3730 T * ?=?( T **, P ); 4563 3731 }; 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}@) { 3732 trait m_l_ptr_to_const( otype P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to_const}@ otype T | ptr_to_const( P, T )@\use{ptr_to_const}@) { 4566 3733 P ?=?( P *, const T * ); 4567 3734 const T * ?=?( const T **, P ); 4568 3735 }; 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}@ 3736 trait m_l_ptr_to_volatile( otype P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to_volatile}@ otype T | ptr_to_volatile( P, T )) {@\use{ptr_to_volatile}@ 4571 3737 P ?=?( P *, volatile T * ); 4572 3738 volatile T * ?=?( volatile T **, P ); 4573 3739 }; 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}@ 4576 type T | m_l_ptr_to_volatile( P, T ) | m_l_ptr_to_const( P )) {@\use{m_l_ptr_to_const}@@\use{m_l_ptr_to_volatile}@ 3740 trait m_l_ptr_to_const_volatile( otype P | ptr_to_const_volatile( P ),@\use{ptr_to_const_volatile}@@\impl{m_l_ptr_to_const_volatile}@ 3741 otype T | m_l_ptr_to_volatile( P, T ) | m_l_ptr_to_const( P )) {@\use{m_l_ptr_to_const}@@\use{m_l_ptr_to_volatile}@ 4577 3742 P ?=?( P *, const volatile T * ); 4578 3743 const volatile T * ?=?( const volatile T **, P ); … … 4580 3745 \end{lstlisting} 4581 3746 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 ) ) { 3747 Note the regular manner in which type qualifiers appear in those specifications. 3748 An alternative specification can make use of the fact that qualification of the pointed-at type is part of a pointer type to capture that regularity. 3749 \begin{lstlisting} 3750 trait m_l_ptr_like( type MyP | m_l_pointer( MyP ),@\use{m_l_pointer}@@\impl{m_l_ptr_like}@ type CP | m_l_pointer( CP ) ) { 4587 3751 MyP ?=?( MyP *, CP ); 4588 3752 CP ?=?( CP *, MyP ); … … 4590 3754 \end{lstlisting} 4591 3755 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 a3756 ``\lstinline$Safe_ptr$ is a pointer type like \lstinline$const int *$''. 3757 This specification has two defects, compared to the original four: there is no automatic assertion that dereferencing a 4594 3758 \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. 3759 ``\lstinline$|m_l_pointer( CP )$'' assertion provides only a weak assurance that the argument passed to \lstinline$CP$ really is a pointer type. 4597 3760 4598 3761 4599 3762 \section{Relationships between operations} 4600 3763 4601 Different operators often have related meanings; for instance, in C, ``\lstinline$+$'', 3764 Different operators often have related meanings; 3765 for instance, in C, ``\lstinline$+$'', 4602 3766 ``\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. 3767 Languages like {\CC} and Ada allow programmers to define operators for new types, but do not require that these relationships be preserved, or even that all of the operators be implemented. 3768 Completeness and consistency is left to the good taste and discretion of the programmer. 3769 It is possible to encourage these attributes by providing generic operator functions, or member functions of abstract classes, that are defined in terms of other, related operators. 3770 3771 In \CFA, polymorphic functions provide the equivalent of these generic operators, and specifications explicitly define the minimal implementation that a programmer should provide. 3772 This section shows a few examples. 4612 3773 4613 3774 4614 3775 \subsection{Relational and equality operators} 4615 3776 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 ) { 3777 The different comparison operators have obvious relationships, but there is no obvious subset of the operations to use in the implementation of the others. 3778 However, it is usually convenient to implement a single comparison function that returns a negative integer, 0, or a positive integer if its first argument is respectively less than, equal to, or greater than its second argument; 3779 the library function \lstinline$strcmp$ is an example. 3780 3781 C and \CFA have an extra, non-obvious comparison operator: ``\lstinline$!$'', logical negation, returns 1 if its operand compares equal to 0, and 0 otherwise. 3782 \begin{lstlisting} 3783 trait comparable( otype T ) { 4626 3784 const T 0; 4627 3785 int compare( T, T ); 4628 3786 } 4629 4630 forall( type T | comparable( T ) ) int ?<?( T l, T r ) { 3787 forall( otype T | comparable( T ) ) int ?<?( T l, T r ) { 4631 3788 return compare( l, r ) < 0; 4632 3789 } 4633 3790 // ... similarly for <=, ==, >=, >, and !=. 4634 4635 forall( type T | comparable( T ) ) int !?( T operand ) { 3791 forall( otype T | comparable( T ) ) int !?( T operand ) { 4636 3792 return !compare( operand, 0 ); 4637 3793 } … … 4641 3797 \subsection{Arithmetic and integer operations} 4642 3798 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 ) { 3799 A complete arithmetic type would provide the arithmetic operators and the corresponding assignment operators. 3800 Of these, the assignment operators are more likely to be implemented directly, because it is usually more efficient to alter the contents of an existing object than to create and return a new one. 3801 Similarly, a complete integral type would provide integral operations based on integral assignment operations. 3802 \begin{lstlisting} 3803 trait arith_base( otype T ) { 4650 3804 const T 1; 4651 3805 T ?+=?( T *, T ), ?-=?( T *, T ), ?*=?( T *, T ), ?/=?( T *, T ); 4652 3806 } 4653 4654 forall( type T | arith_base( T ) ) T ?+?( T l, T r ) { 3807 forall( otype T | arith_base( T ) ) T ?+?( T l, T r ) { 4655 3808 return l += r; 4656 3809 } 4657 4658 forall( type T | arith_base( T ) ) T ?++( T * operand ) { 3810 forall( otype T | arith_base( T ) ) T ?++( T * operand ) { 4659 3811 T temporary = *operand; 4660 3812 *operand += 1; 4661 3813 return temporary; 4662 3814 } 4663 4664 forall( type T | arith_base( T ) ) T ++?( T * operand ) { 3815 forall( otype T | arith_base( T ) ) T ++?( T * operand ) { 4665 3816 return *operand += 1; 4666 3817 } 4667 3818 // ... similarly for -, --, *, and /. 4668 4669 context int_base( type T ) { 3819 trait int_base( otype T ) { 4670 3820 T ?&=?( T *, T ), ?|=?( T *, T ), ?^=?( T *, T ); 4671 3821 T ?%=?( T *, T ), ?<<=?( T *, T ), ?>>=?( T *, T ); 4672 3822 } 4673 4674 forall( type T | int_base( T ) ) T ?&?( T l, T r ) { 3823 forall( otype T | int_base( T ) ) T ?&?( T l, T r ) { 4675 3824 return l &= r; 4676 3825 } … … 4678 3827 \end{lstlisting} 4679 3828 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 3829 Note that, although an arithmetic type would certainly provide comparison functions, and an integral type would provide arithmetic operations, there does not have to be any relationship among 3830 \lstinline$int_base$, \lstinline$arith_base$ and \lstinline$comparable$. 3831 Note also that these declarations provide guidance and assistance, but they do not define an absolutely minimal set of requirements. 3832 A truly minimal implementation of an arithmetic type might only provide 4685 3833 \lstinline$0$, \lstinline$1$, and \lstinline$?-=?$, which would be used by polymorphic 4686 3834 \lstinline$?+=?$, \lstinline$?*=?$, and \lstinline$?/=?$ functions. … … 4692 3840 Review index entries. 4693 3841 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 3842 Restrict allowed to qualify anything, or type/dtype parameters, but only affects pointers. 3843 This gets into \lstinline$noalias$ territory. 3844 Qualifying anything (``\lstinline$short restrict rs$'') means pointer parameters of \lstinline$?++$, etc, would need restrict qualifiers. 3845 3846 Enumerated types. 3847 Constants are not ints. 3848 Overloading. 3849 Definition should be ``representable as an integer type'', not ``as an int''. 3850 C11 usual conversions freely convert to and from ordinary integer types via assignment, which works between any integer types. 3851 Does enum Color ?*?( enum 4701 3852 Color, enum Color ) really make sense? ?++ does, but it adds (int)1. 4702 3853 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 3854 Operators on {,signed,unsigned} char and other small types. ?<? harmless; 3855 ?*? questionable for chars. 3856 Generic selections make these choices visible. 3857 Safe conversion operators? Predefined 4705 3858 ``promotion'' function? 4706 3859 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. 3860 \lstinline$register$ assignment might be handled as assignment to a temporary with copying back and forth, but copying must not be done by assignment. 4709 3861 4710 3862 Don't use ptrdiff\_t by name in the predefineds. 4711 3863 4712 Polymorphic objects. Polymorphic typedefs and type declarations. 3864 Polymorphic objects. 3865 Polymorphic typedefs and type declarations. 4713 3866 4714 3867 4715 3868 \bibliographystyle{plain} 4716 \bibliography{ refrat}3869 \bibliography{cfa} 4717 3870 4718 3871 4719 3872 \addcontentsline{toc}{chapter}{\indexname} % add index name to table of contents 4720 3873 \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. 3874 Italic page numbers give the location of the main entry for the referenced term. 3875 Plain page numbers denote uses of the indexed term. 3876 Entries for grammar non-terminals are italicized. 3877 A typewriter font is used for grammar terminals and program identifiers. 4724 3878 \indexspace 4725 3879 \input{refrat.ind} -
src/CodeGen/CodeGenerator.cc
rc5833e8 r0f9e4403 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Jan 25 21:22:00201613 // Update Count : 24 212 // Last Modified On : Wed Mar 2 17:32:16 2016 13 // Update Count : 243 14 14 // 15 15 … … 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 ) { … … 454 455 455 456 void CodeGenerator::visit( UntypedOffsetofExpr *offsetofExpr ) { 456 assert( false );457 assert( false && "UntypedOffsetofExpr should not reach code generation" ); 457 458 } 458 459 … … 463 464 output << ", " << mangleName( offsetofExpr->get_member() ); 464 465 output << ")"; 466 } 467 468 void CodeGenerator::visit( OffsetPackExpr *offsetPackExpr ) { 469 assert( false && "OffsetPackExpr should not reach code generation" ); 465 470 } 466 471 -
src/CodeGen/CodeGenerator.h
rc5833e8 r0f9e4403 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 ); … … 63 65 virtual void visit( UntypedOffsetofExpr *offsetofExpr ); 64 66 virtual void visit( OffsetofExpr *offsetofExpr ); 67 virtual void visit( OffsetPackExpr *offsetPackExpr ); 65 68 virtual void visit( LogicalExpr *logicalExpr ); 66 69 virtual void visit( ConditionalExpr *conditionalExpr ); -
src/CodeGen/GenType.cc
rc5833e8 r0f9e4403 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 { … … 39 41 virtual void visit( EnumInstType *enumInst ); 40 42 virtual void visit( TypeInstType *typeInst ); 43 virtual void visit( VarArgsType *varArgsType ); 41 44 42 45 private: … … 191 194 } 192 195 196 void GenType::visit( VarArgsType *varArgsType ) { 197 typeString = "__builtin_va_list " + typeString; 198 handleQualifiers( varArgsType ); 199 } 200 193 201 void GenType::handleQualifiers( Type *type ) { 194 202 if ( type->get_isConst() ) { -
src/GenPoly/Box.cc
rc5833e8 r0f9e4403 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" 32 #include "ScopedSet.h" 27 33 #include "ScrubTyVars.h" 28 34 … … 30 36 31 37 #include "SynTree/Constant.h" 32 #include "SynTree/ Type.h"38 #include "SynTree/Declaration.h" 33 39 #include "SynTree/Expression.h" 34 40 #include "SynTree/Initializer.h" 41 #include "SynTree/Mutator.h" 35 42 #include "SynTree/Statement.h" 36 #include "SynTree/Mutator.h" 43 #include "SynTree/Type.h" 44 #include "SynTree/TypeSubstitution.h" 37 45 38 46 #include "ResolvExpr/TypeEnvironment.h" … … 40 48 #include "ResolvExpr/typeops.h" 41 49 50 #include "SymTab/Indexer.h" 42 51 #include "SymTab/Mangler.h" 43 52 … … 54 63 FunctionType *makeAdapterType( FunctionType *adaptee, const TyVarMap &tyVars ); 55 64 65 /// Abstracts type equality for a list of parameter types 66 struct TypeList { 67 TypeList() : params() {} 68 TypeList( const std::list< Type* > &_params ) : params() { cloneAll(_params, params); } 69 TypeList( std::list< Type* > &&_params ) : params( _params ) {} 70 71 TypeList( const TypeList &that ) : params() { cloneAll(that.params, params); } 72 TypeList( TypeList &&that ) : params( std::move( that.params ) ) {} 73 74 /// Extracts types from a list of TypeExpr* 75 TypeList( const std::list< TypeExpr* >& _params ) : params() { 76 for ( std::list< TypeExpr* >::const_iterator param = _params.begin(); param != _params.end(); ++param ) { 77 params.push_back( (*param)->get_type()->clone() ); 78 } 79 } 80 81 TypeList& operator= ( const TypeList &that ) { 82 deleteAll( params ); 83 84 params.clear(); 85 cloneAll( that.params, params ); 86 87 return *this; 88 } 89 90 TypeList& operator= ( TypeList &&that ) { 91 deleteAll( params ); 92 93 params = std::move( that.params ); 94 95 return *this; 96 } 97 98 ~TypeList() { deleteAll( params ); } 99 100 bool operator== ( const TypeList& that ) const { 101 if ( params.size() != that.params.size() ) return false; 102 103 SymTab::Indexer dummy; 104 for ( std::list< Type* >::const_iterator it = params.begin(), jt = that.params.begin(); it != params.end(); ++it, ++jt ) { 105 if ( ! ResolvExpr::typesCompatible( *it, *jt, dummy ) ) return false; 106 } 107 return true; 108 } 109 110 std::list< Type* > params; ///< Instantiation parameters 111 }; 112 113 /// Maps a key and a TypeList to the some value, accounting for scope 114 template< typename Key, typename Value > 115 class InstantiationMap { 116 /// Wraps value for a specific (Key, TypeList) combination 117 typedef std::pair< TypeList, Value* > Instantiation; 118 /// List of TypeLists paired with their appropriate values 119 typedef std::vector< Instantiation > ValueList; 120 /// Underlying map type; maps keys to a linear list of corresponding TypeLists and values 121 typedef ScopedMap< Key*, ValueList > InnerMap; 122 123 InnerMap instantiations; ///< instantiations 124 125 public: 126 /// Starts a new scope 127 void beginScope() { instantiations.beginScope(); } 128 129 /// Ends a scope 130 void endScope() { instantiations.endScope(); } 131 132 /// Gets the value for the (key, typeList) pair, returns NULL on none such. 133 Value *lookup( Key *key, const std::list< TypeExpr* >& params ) const { 134 TypeList typeList( params ); 135 136 // scan scopes for matches to the key 137 for ( typename InnerMap::const_iterator insts = instantiations.find( key ); insts != instantiations.end(); insts = instantiations.findNext( insts, key ) ) { 138 for ( typename ValueList::const_reverse_iterator inst = insts->second.rbegin(); inst != insts->second.rend(); ++inst ) { 139 if ( inst->first == typeList ) return inst->second; 140 } 141 } 142 // no matching instantiations found 143 return 0; 144 } 145 146 /// Adds a value for a (key, typeList) pair to the current scope 147 void insert( Key *key, const std::list< TypeExpr* > ¶ms, Value *value ) { 148 instantiations[ key ].push_back( Instantiation( TypeList( params ), value ) ); 149 } 150 }; 151 152 /// Adds layout-generation functions to polymorphic types 153 class LayoutFunctionBuilder : public DeclMutator { 154 unsigned int functionNesting; // current level of nested functions 155 public: 156 LayoutFunctionBuilder() : functionNesting( 0 ) {} 157 158 virtual DeclarationWithType *mutate( FunctionDecl *functionDecl ); 159 virtual Declaration *mutate( StructDecl *structDecl ); 160 virtual Declaration *mutate( UnionDecl *unionDecl ); 161 }; 162 56 163 /// 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 164 class Pass1 : public PolyMutator { … … 72 179 virtual void doEndScope(); 73 180 private: 74 /// Makes a new temporary array holding the offsets of the fields of `type`, and returns a new variable expression referencing it75 Expression *makeOffsetArray( StructInstType *type );76 181 /// Pass the extra type parameters from polymorphic generic arguments or return types into a function application 77 182 void passArgTypeVars( ApplicationExpr *appExpr, Type *parmType, Type *argBaseType, std::list< Expression *>::iterator &arg, const TyVarMap &exprTyVars, std::set< std::string > &seenTypes ); … … 100 205 ObjectDecl *makeTemporary( Type *type ); 101 206 102 typedef std::map< std::string, DeclarationWithType *> AdapterMap;103 std::map< std::string, DeclarationWithType *> assignOps;104 ResolvExpr::TypeMap< DeclarationWithType > scopedAssignOps;105 std::stack< AdapterMap > adapters;207 ScopedMap< std::string, DeclarationWithType *> assignOps; ///< Currently known type variable assignment operators 208 ResolvExpr::TypeMap< DeclarationWithType > scopedAssignOps; ///< Currently known assignment operators 209 ScopedMap< std::string, DeclarationWithType* > adapters; ///< Set of adapter functions in the current scope 210 106 211 DeclarationWithType *retval; 107 212 bool useRetval; … … 109 214 }; 110 215 111 /// Moves polymorphic returns in function types to pointer-type parameters, adds type size and assertion parameters to parameter lists as well 216 /// * Moves polymorphic returns in function types to pointer-type parameters 217 /// * adds type size and assertion parameters to parameter lists 112 218 class Pass2 : public PolyMutator { 113 219 public: … … 120 226 virtual Type *mutate( PointerType *pointerType ); 121 227 virtual Type *mutate( FunctionType *funcType ); 228 122 229 private: 123 230 void addAdapters( FunctionType *functionType ); … … 126 233 }; 127 234 128 /// Replaces member expressions for polymorphic types with calculated add-field-offset-and-dereference; 129 /// also fixes offsetof expressions. 130 class MemberExprFixer : public PolyMutator { 131 public: 235 /// Mutator pass that replaces concrete instantiations of generic types with actual struct declarations, scoped appropriately 236 class GenericInstantiator : public DeclMutator { 237 /// Map of (generic type, parameter list) pairs to concrete type instantiations 238 InstantiationMap< AggregateDecl, AggregateDecl > instantiations; 239 /// Namer for concrete types 240 UniqueName typeNamer; 241 242 public: 243 GenericInstantiator() : DeclMutator(), instantiations(), typeNamer("_conc_") {} 244 245 virtual Type* mutate( StructInstType *inst ); 246 virtual Type* mutate( UnionInstType *inst ); 247 248 // virtual Expression* mutate( MemberExpr *memberExpr ); 249 250 virtual void doBeginScope(); 251 virtual void doEndScope(); 252 private: 253 /// Wrap instantiation lookup for structs 254 StructDecl* lookup( StructInstType *inst, const std::list< TypeExpr* > &typeSubs ) { return (StructDecl*)instantiations.lookup( inst->get_baseStruct(), typeSubs ); } 255 /// Wrap instantiation lookup for unions 256 UnionDecl* lookup( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs ) { return (UnionDecl*)instantiations.lookup( inst->get_baseUnion(), typeSubs ); } 257 /// Wrap instantiation insertion for structs 258 void insert( StructInstType *inst, const std::list< TypeExpr* > &typeSubs, StructDecl *decl ) { instantiations.insert( inst->get_baseStruct(), typeSubs, decl ); } 259 /// Wrap instantiation insertion for unions 260 void insert( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs, UnionDecl *decl ) { instantiations.insert( inst->get_baseUnion(), typeSubs, decl ); } 261 }; 262 263 /// Replaces member and size/align/offsetof expressions on polymorphic generic types with calculated expressions. 264 /// * Replaces member expressions for polymorphic types with calculated add-field-offset-and-dereference 265 /// * Calculates polymorphic offsetof expressions from offset array 266 /// * Inserts dynamic calculation of polymorphic type layouts where needed 267 class PolyGenericCalculator : public PolyMutator { 268 public: 132 269 template< typename DeclClass > 133 270 DeclClass *handleDecl( DeclClass *decl, Type *type ); … … 140 277 virtual Type *mutate( FunctionType *funcType ); 141 278 virtual Expression *mutate( MemberExpr *memberExpr ); 279 virtual Expression *mutate( SizeofExpr *sizeofExpr ); 280 virtual Expression *mutate( AlignofExpr *alignofExpr ); 142 281 virtual Expression *mutate( OffsetofExpr *offsetofExpr ); 282 virtual Expression *mutate( OffsetPackExpr *offsetPackExpr ); 283 284 virtual void doBeginScope(); 285 virtual void doEndScope(); 286 287 private: 288 /// Makes a new variable in the current scope with the given name, type & optional initializer 289 ObjectDecl *makeVar( const std::string &name, Type *type, Initializer *init = 0 ); 290 /// returns true if the type has a dynamic layout; such a layout will be stored in appropriately-named local variables when the function returns 291 bool findGeneric( Type *ty ); 292 /// adds type parameters to the layout call; will generate the appropriate parameters if needed 293 void addOtypeParamsToLayoutCall( UntypedExpr *layoutCall, const std::list< Type* > &otypeParams ); 294 295 /// Enters a new scope for type-variables, adding the type variables from ty 296 void beginTypeScope( Type *ty ); 297 /// Exits the type-variable scope 298 void endTypeScope(); 299 300 ScopedSet< std::string > knownLayouts; ///< Set of generic type layouts known in the current scope, indexed by sizeofName 301 ScopedSet< std::string > knownOffsets; ///< Set of non-generic types for which the offset array exists in the current scope, indexed by offsetofName 143 302 }; 144 303 … … 159 318 } // anonymous namespace 160 319 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 320 /// version of mutateAll with special handling for translation unit so you can check the end of the prelude when debugging 171 321 template< typename MutatorType > … … 195 345 196 346 void box( std::list< Declaration *>& translationUnit ) { 347 LayoutFunctionBuilder layoutBuilder; 197 348 Pass1 pass1; 198 349 Pass2 pass2; 199 MemberExprFixer memberFixer; 350 GenericInstantiator instantiator; 351 PolyGenericCalculator polyCalculator; 200 352 Pass3 pass3; 353 354 layoutBuilder.mutateDeclarationList( translationUnit ); 201 355 mutateTranslationUnit/*All*/( translationUnit, pass1 ); 202 356 mutateTranslationUnit/*All*/( translationUnit, pass2 ); 203 instantiat eGeneric( translationUnit );204 mutateTranslationUnit/*All*/( translationUnit, memberFixer );357 instantiator.mutateDeclarationList( translationUnit ); 358 mutateTranslationUnit/*All*/( translationUnit, polyCalculator ); 205 359 mutateTranslationUnit/*All*/( translationUnit, pass3 ); 206 360 } 207 361 362 ////////////////////////////////// LayoutFunctionBuilder //////////////////////////////////////////// 363 364 DeclarationWithType *LayoutFunctionBuilder::mutate( FunctionDecl *functionDecl ) { 365 functionDecl->set_functionType( maybeMutate( functionDecl->get_functionType(), *this ) ); 366 mutateAll( functionDecl->get_oldDecls(), *this ); 367 ++functionNesting; 368 functionDecl->set_statements( maybeMutate( functionDecl->get_statements(), *this ) ); 369 --functionNesting; 370 return functionDecl; 371 } 372 373 /// Get a list of type declarations that will affect a layout function 374 std::list< TypeDecl* > takeOtypeOnly( std::list< TypeDecl* > &decls ) { 375 std::list< TypeDecl * > otypeDecls; 376 377 for ( std::list< TypeDecl* >::const_iterator decl = decls.begin(); decl != decls.end(); ++decl ) { 378 if ( (*decl)->get_kind() == TypeDecl::Any ) { 379 otypeDecls.push_back( *decl ); 380 } 381 } 382 383 return otypeDecls; 384 } 385 386 /// Adds parameters for otype layout to a function type 387 void addOtypeParams( FunctionType *layoutFnType, std::list< TypeDecl* > &otypeParams ) { 388 BasicType sizeAlignType( Type::Qualifiers(), BasicType::LongUnsignedInt ); 389 390 for ( std::list< TypeDecl* >::const_iterator param = otypeParams.begin(); param != otypeParams.end(); ++param ) { 391 TypeInstType paramType( Type::Qualifiers(), (*param)->get_name(), *param ); 392 std::string paramName = mangleType( ¶mType ); 393 layoutFnType->get_parameters().push_back( new ObjectDecl( sizeofName( paramName ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignType.clone(), 0 ) ); 394 layoutFnType->get_parameters().push_back( new ObjectDecl( alignofName( paramName ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignType.clone(), 0 ) ); 395 } 396 } 397 398 /// Builds a layout function declaration 399 FunctionDecl *buildLayoutFunctionDecl( AggregateDecl *typeDecl, unsigned int functionNesting, FunctionType *layoutFnType ) { 400 // Routines at global scope marked "static" to prevent multiple definitions is separate translation units 401 // because each unit generates copies of the default routines for each aggregate. 402 FunctionDecl *layoutDecl = new FunctionDecl( 403 layoutofName( typeDecl ), functionNesting > 0 ? DeclarationNode::NoStorageClass : DeclarationNode::Static, LinkageSpec::AutoGen, layoutFnType, new CompoundStmt( noLabels ), true, false ); 404 layoutDecl->fixUniqueId(); 405 return layoutDecl; 406 } 407 408 /// Makes a unary operation 409 Expression *makeOp( const std::string &name, Expression *arg ) { 410 UntypedExpr *expr = new UntypedExpr( new NameExpr( name ) ); 411 expr->get_args().push_back( arg ); 412 return expr; 413 } 414 415 /// Makes a binary operation 416 Expression *makeOp( const std::string &name, Expression *lhs, Expression *rhs ) { 417 UntypedExpr *expr = new UntypedExpr( new NameExpr( name ) ); 418 expr->get_args().push_back( lhs ); 419 expr->get_args().push_back( rhs ); 420 return expr; 421 } 422 423 /// Returns the dereference of a local pointer variable 424 Expression *derefVar( ObjectDecl *var ) { 425 return makeOp( "*?", new VariableExpr( var ) ); 426 } 427 428 /// makes an if-statement with a single-expression if-block and no then block 429 Statement *makeCond( Expression *cond, Expression *ifPart ) { 430 return new IfStmt( noLabels, cond, new ExprStmt( noLabels, ifPart ), 0 ); 431 } 432 433 /// makes a statement that assigns rhs to lhs if lhs < rhs 434 Statement *makeAssignMax( Expression *lhs, Expression *rhs ) { 435 return makeCond( makeOp( "?<?", lhs, rhs ), makeOp( "?=?", lhs->clone(), rhs->clone() ) ); 436 } 437 438 /// makes a statement that aligns lhs to rhs (rhs should be an integer power of two) 439 Statement *makeAlignTo( Expression *lhs, Expression *rhs ) { 440 // check that the lhs is zeroed out to the level of rhs 441 Expression *ifCond = makeOp( "?&?", lhs, makeOp( "?-?", rhs, new ConstantExpr( Constant( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), "1" ) ) ) ); 442 // if not aligned, increment to alignment 443 Expression *ifExpr = makeOp( "?+=?", lhs->clone(), makeOp( "?-?", rhs->clone(), ifCond->clone() ) ); 444 return makeCond( ifCond, ifExpr ); 445 } 446 447 /// adds an expression to a compound statement 448 void addExpr( CompoundStmt *stmts, Expression *expr ) { 449 stmts->get_kids().push_back( new ExprStmt( noLabels, expr ) ); 450 } 451 452 /// adds a statement to a compound statement 453 void addStmt( CompoundStmt *stmts, Statement *stmt ) { 454 stmts->get_kids().push_back( stmt ); 455 } 456 457 Declaration *LayoutFunctionBuilder::mutate( StructDecl *structDecl ) { 458 // do not generate layout function for "empty" tag structs 459 if ( structDecl->get_members().empty() ) return structDecl; 460 461 // get parameters that can change layout, exiting early if none 462 std::list< TypeDecl* > otypeParams = takeOtypeOnly( structDecl->get_parameters() ); 463 if ( otypeParams.empty() ) return structDecl; 464 465 // build layout function signature 466 FunctionType *layoutFnType = new FunctionType( Type::Qualifiers(), false ); 467 BasicType *sizeAlignType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ); 468 PointerType *sizeAlignOutType = new PointerType( Type::Qualifiers(), sizeAlignType ); 469 470 ObjectDecl *sizeParam = new ObjectDecl( sizeofName( structDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType, 0 ); 471 layoutFnType->get_parameters().push_back( sizeParam ); 472 ObjectDecl *alignParam = new ObjectDecl( alignofName( structDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 ); 473 layoutFnType->get_parameters().push_back( alignParam ); 474 ObjectDecl *offsetParam = new ObjectDecl( offsetofName( structDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 ); 475 layoutFnType->get_parameters().push_back( offsetParam ); 476 addOtypeParams( layoutFnType, otypeParams ); 477 478 // build function decl 479 FunctionDecl *layoutDecl = buildLayoutFunctionDecl( structDecl, functionNesting, layoutFnType ); 480 481 // calculate struct layout in function body 482 483 // initialize size and alignment to 0 and 1 (will have at least one member to re-edit size 484 addExpr( layoutDecl->get_statements(), makeOp( "?=?", derefVar( sizeParam ), new ConstantExpr( Constant( sizeAlignType->clone(), "0" ) ) ) ); 485 addExpr( layoutDecl->get_statements(), makeOp( "?=?", derefVar( alignParam ), new ConstantExpr( Constant( sizeAlignType->clone(), "1" ) ) ) ); 486 unsigned long n_members = 0; 487 bool firstMember = true; 488 for ( std::list< Declaration* >::const_iterator member = structDecl->get_members().begin(); member != structDecl->get_members().end(); ++member ) { 489 DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( *member ); 490 assert( dwt ); 491 Type *memberType = dwt->get_type(); 492 493 if ( firstMember ) { 494 firstMember = false; 495 } else { 496 // make sure all members after the first (automatically aligned at 0) are properly padded for alignment 497 addStmt( layoutDecl->get_statements(), makeAlignTo( derefVar( sizeParam ), new AlignofExpr( memberType->clone() ) ) ); 498 } 499 500 // place current size in the current offset index 501 addExpr( layoutDecl->get_statements(), makeOp( "?=?", makeOp( "?[?]", new VariableExpr( offsetParam ), new ConstantExpr( Constant::from( n_members ) ) ), 502 derefVar( sizeParam ) ) ); 503 ++n_members; 504 505 // add member size to current size 506 addExpr( layoutDecl->get_statements(), makeOp( "?+=?", derefVar( sizeParam ), new SizeofExpr( memberType->clone() ) ) ); 507 508 // take max of member alignment and global alignment 509 addStmt( layoutDecl->get_statements(), makeAssignMax( derefVar( alignParam ), new AlignofExpr( memberType->clone() ) ) ); 510 } 511 // make sure the type is end-padded to a multiple of its alignment 512 addStmt( layoutDecl->get_statements(), makeAlignTo( derefVar( sizeParam ), derefVar( alignParam ) ) ); 513 514 addDeclarationAfter( layoutDecl ); 515 return structDecl; 516 } 517 518 Declaration *LayoutFunctionBuilder::mutate( UnionDecl *unionDecl ) { 519 // do not generate layout function for "empty" tag unions 520 if ( unionDecl->get_members().empty() ) return unionDecl; 521 522 // get parameters that can change layout, exiting early if none 523 std::list< TypeDecl* > otypeParams = takeOtypeOnly( unionDecl->get_parameters() ); 524 if ( otypeParams.empty() ) return unionDecl; 525 526 // build layout function signature 527 FunctionType *layoutFnType = new FunctionType( Type::Qualifiers(), false ); 528 BasicType *sizeAlignType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ); 529 PointerType *sizeAlignOutType = new PointerType( Type::Qualifiers(), sizeAlignType ); 530 531 ObjectDecl *sizeParam = new ObjectDecl( sizeofName( unionDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType, 0 ); 532 layoutFnType->get_parameters().push_back( sizeParam ); 533 ObjectDecl *alignParam = new ObjectDecl( alignofName( unionDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 ); 534 layoutFnType->get_parameters().push_back( alignParam ); 535 addOtypeParams( layoutFnType, otypeParams ); 536 537 // build function decl 538 FunctionDecl *layoutDecl = buildLayoutFunctionDecl( unionDecl, functionNesting, layoutFnType ); 539 540 // calculate union layout in function body 541 addExpr( layoutDecl->get_statements(), makeOp( "?=?", derefVar( sizeParam ), new ConstantExpr( Constant( sizeAlignType->clone(), "1" ) ) ) ); 542 addExpr( layoutDecl->get_statements(), makeOp( "?=?", derefVar( alignParam ), new ConstantExpr( Constant( sizeAlignType->clone(), "1" ) ) ) ); 543 for ( std::list< Declaration* >::const_iterator member = unionDecl->get_members().begin(); member != unionDecl->get_members().end(); ++member ) { 544 DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( *member ); 545 assert( dwt ); 546 Type *memberType = dwt->get_type(); 547 548 // take max member size and global size 549 addStmt( layoutDecl->get_statements(), makeAssignMax( derefVar( sizeParam ), new SizeofExpr( memberType->clone() ) ) ); 550 551 // take max of member alignment and global alignment 552 addStmt( layoutDecl->get_statements(), makeAssignMax( derefVar( alignParam ), new AlignofExpr( memberType->clone() ) ) ); 553 } 554 // make sure the type is end-padded to a multiple of its alignment 555 addStmt( layoutDecl->get_statements(), makeAlignTo( derefVar( sizeParam ), derefVar( alignParam ) ) ); 556 557 addDeclarationAfter( layoutDecl ); 558 return unionDecl; 559 } 560 208 561 ////////////////////////////////////////// Pass1 //////////////////////////////////////////////////// 209 562 … … 245 598 } 246 599 247 Pass1::Pass1() : useRetval( false ), tempNamer( "_temp" ) { 248 adapters.push(AdapterMap()); 249 } 600 Pass1::Pass1() : useRetval( false ), tempNamer( "_temp" ) {} 250 601 251 602 /// Returns T if the given declaration is (*?=?)(T *, T) for some TypeInstType T (return not checked, but maybe should be), NULL otherwise … … 309 660 310 661 DeclarationWithType *Pass1::mutate( FunctionDecl *functionDecl ) { 311 // if this is a polymorphicassignment function, put it in the map for this scope662 // if this is a assignment function, put it in the map for this scope 312 663 if ( Type *assignedType = isAssignment( functionDecl ) ) { 313 664 if ( ! dynamic_cast< TypeInstType* >( assignedType ) ) { … … 318 669 if ( functionDecl->get_statements() ) { // empty routine body ? 319 670 doBeginScope(); 320 TyVarMap oldtyVars = scopeTyVars;321 std::map< std::string, DeclarationWithType *> oldassignOps = assignOps;671 scopeTyVars.beginScope(); 672 assignOps.beginScope(); 322 673 DeclarationWithType *oldRetval = retval; 323 674 bool oldUseRetval = useRetval; … … 350 701 } // for 351 702 352 AdapterMap & adapters = Pass1::adapters.top();353 703 for ( std::list< FunctionType *>::iterator funType = functions.begin(); funType != functions.end(); ++funType ) { 354 704 std::string mangleName = mangleAdapterName( *funType, scopeTyVars ); … … 361 711 functionDecl->set_statements( functionDecl->get_statements()->acceptMutator( *this ) ); 362 712 363 scopeTyVars = oldtyVars; 364 assignOps = oldassignOps; 365 // std::cerr << "end FunctionDecl: "; 366 // for ( TyVarMap::iterator i = scopeTyVars.begin(); i != scopeTyVars.end(); ++i ) { 367 // std::cerr << i->first << " "; 368 // } 369 // std::cerr << "\n"; 713 scopeTyVars.endScope(); 714 assignOps.endScope(); 370 715 retval = oldRetval; 371 716 useRetval = oldUseRetval; … … 400 745 } 401 746 402 Expression *Pass1::makeOffsetArray( StructInstType *ty ) {403 std::list< Declaration* > &baseMembers = ty->get_baseStruct()->get_members();404 405 // make a new temporary array406 Type *offsetType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt );407 std::stringstream lenGen;408 lenGen << baseMembers.size();409 ConstantExpr *lenExpr = new ConstantExpr( Constant( offsetType->clone(), lenGen.str() ) );410 ObjectDecl *arrayTemp = makeTemporary( new ArrayType( Type::Qualifiers(), offsetType, lenExpr, false, false ) );411 412 // build initializer list for temporary413 std::list< Initializer* > inits;414 for ( std::list< Declaration* >::const_iterator member = baseMembers.begin(); member != baseMembers.end(); ++member ) {415 DeclarationWithType *memberDecl;416 if ( DeclarationWithType *origMember = dynamic_cast< DeclarationWithType* >( *member ) ) {417 memberDecl = origMember->clone();418 } else {419 memberDecl = new ObjectDecl( (*member)->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, offsetType->clone(), 0 );420 }421 inits.push_back( new SingleInit( new OffsetofExpr( ty->clone(), memberDecl ) ) );422 }423 arrayTemp->set_init( new ListInit( inits ) );424 425 // return variable pointing to temporary426 return new VariableExpr( arrayTemp );427 }428 429 747 void Pass1::passArgTypeVars( ApplicationExpr *appExpr, Type *parmType, Type *argBaseType, std::list< Expression *>::iterator &arg, const TyVarMap &exprTyVars, std::set< std::string > &seenTypes ) { 430 Type *poly Base = hasPolyBase( parmType, exprTyVars );431 if ( poly Base && ! dynamic_cast< TypeInstType* >( polyBase ) ) {432 std::string sizeName = sizeofName( polyBase );433 if ( seenTypes.count( sizeName ) ) return;748 Type *polyType = isPolyType( parmType, exprTyVars ); 749 if ( polyType && ! dynamic_cast< TypeInstType* >( polyType ) ) { 750 std::string typeName = mangleType( polyType ); 751 if ( seenTypes.count( typeName ) ) return; 434 752 435 753 arg = appExpr->get_args().insert( arg, new SizeofExpr( argBaseType->clone() ) ); … … 437 755 arg = appExpr->get_args().insert( arg, new AlignofExpr( argBaseType->clone() ) ); 438 756 arg++; 439 if ( dynamic_cast< StructInstType* >( poly Base ) ) {757 if ( dynamic_cast< StructInstType* >( polyType ) ) { 440 758 if ( StructInstType *argBaseStructType = dynamic_cast< StructInstType* >( argBaseType ) ) { 441 arg = appExpr->get_args().insert( arg, makeOffsetArray( argBaseStructType ) ); 442 arg++; 759 // zero-length arrays are forbidden by C, so don't pass offset for empty struct 760 if ( ! argBaseStructType->get_baseStruct()->get_members().empty() ) { 761 arg = appExpr->get_args().insert( arg, new OffsetPackExpr( argBaseStructType->clone() ) ); 762 arg++; 763 } 443 764 } else { 444 765 throw SemanticError( "Cannot pass non-struct type for generic struct" ); … … 446 767 } 447 768 448 seenTypes.insert( sizeName );769 seenTypes.insert( typeName ); 449 770 } 450 771 } … … 588 909 return; 589 910 } else if ( arg->get_results().front()->get_isLvalue() ) { 590 // VariableExpr and MemberExpr are lvalues 591 arg = new AddressExpr( arg ); 911 // VariableExpr and MemberExpr are lvalues; need to check this isn't coming from the second arg of a comma expression though (not an lvalue) 912 if ( CommaExpr *commaArg = dynamic_cast< CommaExpr* >( arg ) ) { 913 commaArg->set_arg2( new AddressExpr( commaArg->get_arg2() ) ); 914 } else { 915 arg = new AddressExpr( arg ); 916 } 592 917 } else { 593 918 // use type computed in unification to declare boxed variables … … 684 1009 } // for 685 1010 } 686 687 688 1011 689 1012 FunctionDecl *Pass1::makeAdapter( FunctionType *adaptee, FunctionType *realType, const std::string &mangleName, const TyVarMap &tyVars ) { … … 772 1095 mangleName += makePolyMonoSuffix( originalFunction, exprTyVars ); 773 1096 774 AdapterMap & adapters = Pass1::adapters.top();775 Adapter Map::iterator adapter = adapters.find( mangleName );1097 typedef ScopedMap< std::string, DeclarationWithType* >::iterator AdapterIter; 1098 AdapterIter adapter = adapters.find( mangleName ); 776 1099 if ( adapter == adapters.end() ) { 777 1100 // adapter has not been created yet in the current scope, so define it 778 1101 FunctionDecl *newAdapter = makeAdapter( *funType, realFunction, mangleName, exprTyVars ); 779 adapter = adapters.insert( adapters.begin(), std::pair< std::string, DeclarationWithType *>( mangleName, newAdapter ) ); 1102 std::pair< AdapterIter, bool > answer = adapters.insert( std::pair< std::string, DeclarationWithType *>( mangleName, newAdapter ) ); 1103 adapter = answer.first; 780 1104 stmtsToAdd.push_back( new DeclStmt( noLabels, newAdapter ) ); 781 1105 } // if … … 801 1125 addAssign->get_args().push_back( appExpr->get_args().front() ); 802 1126 } // if 803 addAssign->get_args().push_back( new NameExpr( sizeofName( polyType) ) );1127 addAssign->get_args().push_back( new NameExpr( sizeofName( mangleType( polyType ) ) ) ); 804 1128 addAssign->get_results().front() = appExpr->get_results().front()->clone(); 805 1129 if ( appExpr->get_env() ) { … … 828 1152 UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) ); 829 1153 multiply->get_args().push_back( appExpr->get_args().back() ); 830 multiply->get_args().push_back( new NameExpr( sizeofName( baseType1) ) );1154 multiply->get_args().push_back( new SizeofExpr( baseType1->clone() ) ); 831 1155 ret->get_args().push_back( appExpr->get_args().front() ); 832 1156 ret->get_args().push_back( multiply ); … … 834 1158 UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) ); 835 1159 multiply->get_args().push_back( appExpr->get_args().front() ); 836 multiply->get_args().push_back( new NameExpr( sizeofName( baseType2) ) );1160 multiply->get_args().push_back( new SizeofExpr( baseType2->clone() ) ); 837 1161 ret->get_args().push_back( multiply ); 838 1162 ret->get_args().push_back( appExpr->get_args().back() ); … … 897 1221 UntypedExpr *divide = new UntypedExpr( new NameExpr( "?/?" ) ); 898 1222 divide->get_args().push_back( appExpr ); 899 divide->get_args().push_back( new NameExpr( sizeofName( baseType1) ) );1223 divide->get_args().push_back( new SizeofExpr( baseType1->clone() ) ); 900 1224 divide->get_results().push_front( appExpr->get_results().front()->clone() ); 901 1225 if ( appExpr->get_env() ) { … … 907 1231 UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) ); 908 1232 multiply->get_args().push_back( appExpr->get_args().back() ); 909 multiply->get_args().push_back( new NameExpr( sizeofName( baseType1) ) );1233 multiply->get_args().push_back( new SizeofExpr( baseType1->clone() ) ); 910 1234 appExpr->get_args().back() = multiply; 911 1235 } else if ( baseType2 ) { 912 1236 UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) ); 913 1237 multiply->get_args().push_back( appExpr->get_args().front() ); 914 multiply->get_args().push_back( new NameExpr( sizeofName( baseType2) ) );1238 multiply->get_args().push_back( new SizeofExpr( baseType2->clone() ) ); 915 1239 appExpr->get_args().front() = multiply; 916 1240 } // if … … 922 1246 UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) ); 923 1247 multiply->get_args().push_back( appExpr->get_args().back() ); 924 multiply->get_args().push_back( new NameExpr( sizeofName( baseType) ) );1248 multiply->get_args().push_back( new SizeofExpr( baseType->clone() ) ); 925 1249 appExpr->get_args().back() = multiply; 926 1250 } // if … … 959 1283 std::list< Expression *>::iterator paramBegin = appExpr->get_args().begin(); 960 1284 961 TyVarMap exprTyVars ;1285 TyVarMap exprTyVars( (TypeDecl::Kind)-1 ); 962 1286 makeTyVarMap( function, exprTyVars ); 963 1287 ReferenceToType *polyRetType = isPolyRet( function ); … … 982 1306 983 1307 boxParams( appExpr, function, arg, exprTyVars ); 984 985 1308 passAdapters( appExpr, function, exprTyVars ); 986 1309 … … 1062 1385 if ( TypeInstType *typeInst = dynamic_cast< TypeInstType *>( retval->get_type() ) ) { 1063 1386 // find assignment operator for type variable 1064 std::map< std::string, DeclarationWithType *>::const_iterator assignIter = assignOps.find( typeInst->get_name() );1387 ScopedMap< std::string, DeclarationWithType *>::const_iterator assignIter = assignOps.find( typeInst->get_name() ); 1065 1388 if ( assignIter == assignOps.end() ) { 1066 1389 throw SemanticError( "Attempt to return dtype or ftype object in ", returnStmt->get_expr() ); … … 1084 1407 std::list< TypeDecl* >::const_iterator forallIt = forallParams.begin(); 1085 1408 for ( ; tyIt != tyParams.end() && forallIt != forallParams.end(); ++tyIt, ++forallIt ) { 1086 if ( (*forallIt)->get_kind() != TypeDecl::Any ) continue; // skip types with no assign op (ftype/dtype) 1087 1088 std::list< DeclarationWithType* > &asserts = (*forallIt)->get_assertions(); 1089 assert( ! asserts.empty() && "Type param needs assignment operator assertion" ); 1090 DeclarationWithType *actualDecl = asserts.front(); 1091 TypeInstType *actualType = isTypeInstAssignment( actualDecl ); 1092 assert( actualType && "First assertion of type with assertions should be assignment operator" ); 1409 // Add appropriate mapping to assignment expression environment 1093 1410 TypeExpr *formalTypeExpr = dynamic_cast< TypeExpr* >( *tyIt ); 1094 1411 assert( formalTypeExpr && "type parameters must be type expressions" ); 1095 1412 Type *formalType = formalTypeExpr->get_type(); 1096 assignExpr->get_env()->add( actualType->get_name(), formalType ); 1097 1413 assignExpr->get_env()->add( (*forallIt)->get_name(), formalType ); 1414 1415 // skip types with no assign op (ftype/dtype) 1416 if ( (*forallIt)->get_kind() != TypeDecl::Any ) continue; 1417 1418 // find assignment operator for formal type 1098 1419 DeclarationWithType *assertAssign = 0; 1099 1420 if ( TypeInstType *formalTypeInstType = dynamic_cast< TypeInstType* >( formalType ) ) { 1100 std::map< std::string, DeclarationWithType *>::const_iterator assertAssignIt = assignOps.find( formalTypeInstType->get_name() );1421 ScopedMap< std::string, DeclarationWithType *>::const_iterator assertAssignIt = assignOps.find( formalTypeInstType->get_name() ); 1101 1422 if ( assertAssignIt == assignOps.end() ) { 1102 1423 throw SemanticError( "No assignment operation found for ", formalTypeInstType ); … … 1109 1430 } 1110 1431 } 1111 1112 1432 1433 // add inferred parameter for field assignment operator to assignment expression 1434 std::list< DeclarationWithType* > &asserts = (*forallIt)->get_assertions(); 1435 assert( ! asserts.empty() && "Type param needs assignment operator assertion" ); 1436 DeclarationWithType *actualDecl = asserts.front(); 1113 1437 assignExpr->get_inferParams()[ actualDecl->get_uniqueId() ] 1114 1438 = ParamEntry( assertAssign->get_uniqueId(), assertAssign->get_type()->clone(), actualDecl->get_type()->clone(), wrapFunctionDecl( assertAssign ) ); … … 1136 1460 1137 1461 Type * Pass1::mutate( PointerType *pointerType ) { 1138 TyVarMap oldtyVars = scopeTyVars;1462 scopeTyVars.beginScope(); 1139 1463 makeTyVarMap( pointerType, scopeTyVars ); 1140 1464 1141 1465 Type *ret = Mutator::mutate( pointerType ); 1142 1466 1143 scopeTyVars = oldtyVars;1467 scopeTyVars.endScope(); 1144 1468 return ret; 1145 1469 } 1146 1470 1147 1471 Type * Pass1::mutate( FunctionType *functionType ) { 1148 TyVarMap oldtyVars = scopeTyVars;1472 scopeTyVars.beginScope(); 1149 1473 makeTyVarMap( functionType, scopeTyVars ); 1150 1474 1151 1475 Type *ret = Mutator::mutate( functionType ); 1152 1476 1153 scopeTyVars = oldtyVars;1477 scopeTyVars.endScope(); 1154 1478 return ret; 1155 1479 } 1156 1480 1157 1481 void Pass1::doBeginScope() { 1158 // push a copy of the current map 1159 adapters.push(adapters.top()); 1482 adapters.beginScope(); 1160 1483 scopedAssignOps.beginScope(); 1161 1484 } 1162 1485 1163 1486 void Pass1::doEndScope() { 1164 adapters. pop();1487 adapters.endScope(); 1165 1488 scopedAssignOps.endScope(); 1166 1489 } … … 1217 1540 1218 1541 Type * Pass2::mutate( PointerType *pointerType ) { 1219 TyVarMap oldtyVars = scopeTyVars;1542 scopeTyVars.beginScope(); 1220 1543 makeTyVarMap( pointerType, scopeTyVars ); 1221 1544 1222 1545 Type *ret = Mutator::mutate( pointerType ); 1223 1546 1224 scopeTyVars = oldtyVars;1547 scopeTyVars.endScope(); 1225 1548 return ret; 1226 1549 } 1227 1550 1228 1551 Type *Pass2::mutate( FunctionType *funcType ) { 1229 TyVarMap oldtyVars = scopeTyVars;1552 scopeTyVars.beginScope(); 1230 1553 makeTyVarMap( funcType, scopeTyVars ); 1231 1554 … … 1244 1567 ObjectDecl newPtr( "", DeclarationNode::NoStorageClass, LinkageSpec::C, 0, 1245 1568 new PointerType( Type::Qualifiers(), new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ) ), 0 ); 1246 // ObjectDecl *newFunPtr = new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, new PointerType( Type::Qualifiers(), new FunctionType( Type::Qualifiers(), true ) ), 0 );1247 1569 for ( std::list< TypeDecl *>::const_iterator tyParm = funcType->get_forall().begin(); tyParm != funcType->get_forall().end(); ++tyParm ) { 1248 1570 ObjectDecl *sizeParm, *alignParm; … … 1250 1572 if ( (*tyParm)->get_kind() == TypeDecl::Any ) { 1251 1573 TypeInstType parmType( Type::Qualifiers(), (*tyParm)->get_name(), *tyParm ); 1574 std::string parmName = mangleType( &parmType ); 1252 1575 1253 1576 sizeParm = newObj.clone(); 1254 sizeParm->set_name( sizeofName( &parmType ) );1577 sizeParm->set_name( sizeofName( parmName ) ); 1255 1578 last = funcType->get_parameters().insert( last, sizeParm ); 1256 1579 ++last; 1257 1580 1258 1581 alignParm = newObj.clone(); 1259 alignParm->set_name( alignofName( &parmType ) );1582 alignParm->set_name( alignofName( parmName ) ); 1260 1583 last = funcType->get_parameters().insert( last, alignParm ); 1261 1584 ++last; … … 1272 1595 std::set< std::string > seenTypes; // sizeofName for generic types we've seen 1273 1596 for ( std::list< DeclarationWithType* >::const_iterator fnParm = last; fnParm != funcType->get_parameters().end(); ++fnParm ) { 1274 Type *poly Base = hasPolyBase( (*fnParm)->get_type(), scopeTyVars );1275 if ( poly Base && ! dynamic_cast< TypeInstType* >( polyBase ) ) {1276 std::string sizeName = sizeofName( polyBase );1277 if ( seenTypes.count( sizeName ) ) continue;1597 Type *polyType = isPolyType( (*fnParm)->get_type(), scopeTyVars ); 1598 if ( polyType && ! dynamic_cast< TypeInstType* >( polyType ) ) { 1599 std::string typeName = mangleType( polyType ); 1600 if ( seenTypes.count( typeName ) ) continue; 1278 1601 1279 1602 ObjectDecl *sizeParm, *alignParm, *offsetParm; 1280 1603 sizeParm = newObj.clone(); 1281 sizeParm->set_name( size Name);1604 sizeParm->set_name( sizeofName( typeName ) ); 1282 1605 last = funcType->get_parameters().insert( last, sizeParm ); 1283 1606 ++last; 1284 1607 1285 1608 alignParm = newObj.clone(); 1286 alignParm->set_name( alignofName( polyBase ) );1609 alignParm->set_name( alignofName( typeName ) ); 1287 1610 last = funcType->get_parameters().insert( last, alignParm ); 1288 1611 ++last; 1289 1612 1290 if ( dynamic_cast< StructInstType* >( polyBase ) ) { 1291 offsetParm = newPtr.clone(); 1292 offsetParm->set_name( offsetofName( polyBase ) ); 1293 last = funcType->get_parameters().insert( last, offsetParm ); 1294 ++last; 1613 if ( StructInstType *polyBaseStruct = dynamic_cast< StructInstType* >( polyType ) ) { 1614 // NOTE zero-length arrays are illegal in C, so empty structs have no offset array 1615 if ( ! polyBaseStruct->get_baseStruct()->get_members().empty() ) { 1616 offsetParm = newPtr.clone(); 1617 offsetParm->set_name( offsetofName( typeName ) ); 1618 last = funcType->get_parameters().insert( last, offsetParm ); 1619 ++last; 1620 } 1295 1621 } 1296 1622 1297 seenTypes.insert( sizeName );1623 seenTypes.insert( typeName ); 1298 1624 } 1299 1625 } … … 1305 1631 mutateAll( funcType->get_parameters(), *this ); 1306 1632 1307 scopeTyVars = oldtyVars;1633 scopeTyVars.endScope(); 1308 1634 return funcType; 1309 1635 } 1310 1636 1311 ////////////////////////////////////////// MemberExprFixer //////////////////////////////////////////////////// 1637 //////////////////////////////////////// GenericInstantiator ////////////////////////////////////////////////// 1638 1639 /// Makes substitutions of params into baseParams; returns true if all parameters substituted for a concrete type 1640 bool makeSubstitutions( const std::list< TypeDecl* >& baseParams, const std::list< Expression* >& params, std::list< TypeExpr* >& out ) { 1641 bool allConcrete = true; // will finish the substitution list even if they're not all concrete 1642 1643 // substitute concrete types for given parameters, and incomplete types for placeholders 1644 std::list< TypeDecl* >::const_iterator baseParam = baseParams.begin(); 1645 std::list< Expression* >::const_iterator param = params.begin(); 1646 for ( ; baseParam != baseParams.end() && param != params.end(); ++baseParam, ++param ) { 1647 // switch ( (*baseParam)->get_kind() ) { 1648 // case TypeDecl::Any: { // any type is a valid substitution here; complete types can be used to instantiate generics 1649 TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param ); 1650 assert(paramType && "Aggregate parameters should be type expressions"); 1651 out.push_back( paramType->clone() ); 1652 // check that the substituted type isn't a type variable itself 1653 if ( dynamic_cast< TypeInstType* >( paramType->get_type() ) ) { 1654 allConcrete = false; 1655 } 1656 // break; 1657 // } 1658 // case TypeDecl::Dtype: // dtype can be consistently replaced with void [only pointers, which become void*] 1659 // out.push_back( new TypeExpr( new VoidType( Type::Qualifiers() ) ) ); 1660 // break; 1661 // case TypeDecl::Ftype: // pointer-to-ftype can be consistently replaced with void (*)(void) [similar to dtype] 1662 // out.push_back( new TypeExpr( new FunctionType( Type::Qualifiers(), false ) ) ); 1663 // break; 1664 // } 1665 } 1666 1667 // if any parameters left over, not done 1668 if ( baseParam != baseParams.end() ) return false; 1669 // // if not enough parameters given, substitute remaining incomplete types for placeholders 1670 // for ( ; baseParam != baseParams.end(); ++baseParam ) { 1671 // switch ( (*baseParam)->get_kind() ) { 1672 // case TypeDecl::Any: // no more substitutions here, fail early 1673 // return false; 1674 // case TypeDecl::Dtype: // dtype can be consistently replaced with void [only pointers, which become void*] 1675 // out.push_back( new TypeExpr( new VoidType( Type::Qualifiers() ) ) ); 1676 // break; 1677 // case TypeDecl::Ftype: // pointer-to-ftype can be consistently replaced with void (*)(void) [similar to dtype] 1678 // out.push_back( new TypeExpr( new FunctionType( Type::Qualifiers(), false ) ) ); 1679 // break; 1680 // } 1681 // } 1682 1683 return allConcrete; 1684 } 1685 1686 /// Substitutes types of members of in according to baseParams => typeSubs, appending the result to out 1687 void substituteMembers( const std::list< Declaration* >& in, const std::list< TypeDecl* >& baseParams, const std::list< TypeExpr* >& typeSubs, 1688 std::list< Declaration* >& out ) { 1689 // substitute types into new members 1690 TypeSubstitution subs( baseParams.begin(), baseParams.end(), typeSubs.begin() ); 1691 for ( std::list< Declaration* >::const_iterator member = in.begin(); member != in.end(); ++member ) { 1692 Declaration *newMember = (*member)->clone(); 1693 subs.apply(newMember); 1694 out.push_back( newMember ); 1695 } 1696 } 1697 1698 Type* GenericInstantiator::mutate( StructInstType *inst ) { 1699 // mutate subtypes 1700 Type *mutated = Mutator::mutate( inst ); 1701 inst = dynamic_cast< StructInstType* >( mutated ); 1702 if ( ! inst ) return mutated; 1703 1704 // exit early if no need for further mutation 1705 if ( inst->get_parameters().empty() ) return inst; 1706 assert( inst->get_baseParameters() && "Base struct has parameters" ); 1707 1708 // check if type can be concretely instantiated; put substitutions into typeSubs 1709 std::list< TypeExpr* > typeSubs; 1710 if ( ! makeSubstitutions( *inst->get_baseParameters(), inst->get_parameters(), typeSubs ) ) { 1711 deleteAll( typeSubs ); 1712 return inst; 1713 } 1714 1715 // make concrete instantiation of generic type 1716 StructDecl *concDecl = lookup( inst, typeSubs ); 1717 if ( ! concDecl ) { 1718 // set concDecl to new type, insert type declaration into statements to add 1719 concDecl = new StructDecl( typeNamer.newName( inst->get_name() ) ); 1720 substituteMembers( inst->get_baseStruct()->get_members(), *inst->get_baseParameters(), typeSubs, concDecl->get_members() ); 1721 DeclMutator::addDeclaration( concDecl ); 1722 insert( inst, typeSubs, concDecl ); 1723 } 1724 StructInstType *newInst = new StructInstType( inst->get_qualifiers(), concDecl->get_name() ); 1725 newInst->set_baseStruct( concDecl ); 1726 1727 deleteAll( typeSubs ); 1728 delete inst; 1729 return newInst; 1730 } 1731 1732 Type* GenericInstantiator::mutate( UnionInstType *inst ) { 1733 // mutate subtypes 1734 Type *mutated = Mutator::mutate( inst ); 1735 inst = dynamic_cast< UnionInstType* >( mutated ); 1736 if ( ! inst ) return mutated; 1737 1738 // exit early if no need for further mutation 1739 if ( inst->get_parameters().empty() ) return inst; 1740 assert( inst->get_baseParameters() && "Base union has parameters" ); 1741 1742 // check if type can be concretely instantiated; put substitutions into typeSubs 1743 std::list< TypeExpr* > typeSubs; 1744 if ( ! makeSubstitutions( *inst->get_baseParameters(), inst->get_parameters(), typeSubs ) ) { 1745 deleteAll( typeSubs ); 1746 return inst; 1747 } 1748 1749 // make concrete instantiation of generic type 1750 UnionDecl *concDecl = lookup( inst, typeSubs ); 1751 if ( ! concDecl ) { 1752 // set concDecl to new type, insert type declaration into statements to add 1753 concDecl = new UnionDecl( typeNamer.newName( inst->get_name() ) ); 1754 substituteMembers( inst->get_baseUnion()->get_members(), *inst->get_baseParameters(), typeSubs, concDecl->get_members() ); 1755 DeclMutator::addDeclaration( concDecl ); 1756 insert( inst, typeSubs, concDecl ); 1757 } 1758 UnionInstType *newInst = new UnionInstType( inst->get_qualifiers(), concDecl->get_name() ); 1759 newInst->set_baseUnion( concDecl ); 1760 1761 deleteAll( typeSubs ); 1762 delete inst; 1763 return newInst; 1764 } 1765 1766 // /// Gets the base struct or union declaration for a member expression; NULL if not applicable 1767 // AggregateDecl* getMemberBaseDecl( MemberExpr *memberExpr ) { 1768 // // get variable for member aggregate 1769 // VariableExpr *varExpr = dynamic_cast< VariableExpr* >( memberExpr->get_aggregate() ); 1770 // if ( ! varExpr ) return NULL; 1771 // 1772 // // get object for variable 1773 // ObjectDecl *objectDecl = dynamic_cast< ObjectDecl* >( varExpr->get_var() ); 1774 // if ( ! objectDecl ) return NULL; 1775 // 1776 // // get base declaration from object type 1777 // Type *objectType = objectDecl->get_type(); 1778 // StructInstType *structType = dynamic_cast< StructInstType* >( objectType ); 1779 // if ( structType ) return structType->get_baseStruct(); 1780 // UnionInstType *unionType = dynamic_cast< UnionInstType* >( objectType ); 1781 // if ( unionType ) return unionType->get_baseUnion(); 1782 // 1783 // return NULL; 1784 // } 1785 // 1786 // /// Finds the declaration with the given name, returning decls.end() if none such 1787 // std::list< Declaration* >::const_iterator findDeclNamed( const std::list< Declaration* > &decls, const std::string &name ) { 1788 // for( std::list< Declaration* >::const_iterator decl = decls.begin(); decl != decls.end(); ++decl ) { 1789 // if ( (*decl)->get_name() == name ) return decl; 1790 // } 1791 // return decls.end(); 1792 // } 1793 // 1794 // Expression* Instantiate::mutate( MemberExpr *memberExpr ) { 1795 // // mutate, exiting early if no longer MemberExpr 1796 // Expression *expr = Mutator::mutate( memberExpr ); 1797 // memberExpr = dynamic_cast< MemberExpr* >( expr ); 1798 // if ( ! memberExpr ) return expr; 1799 // 1800 // // get declaration of member and base declaration of member, exiting early if not found 1801 // AggregateDecl *memberBase = getMemberBaseDecl( memberExpr ); 1802 // if ( ! memberBase ) return memberExpr; 1803 // DeclarationWithType *memberDecl = memberExpr->get_member(); 1804 // std::list< Declaration* >::const_iterator baseIt = findDeclNamed( memberBase->get_members(), memberDecl->get_name() ); 1805 // if ( baseIt == memberBase->get_members().end() ) return memberExpr; 1806 // DeclarationWithType *baseDecl = dynamic_cast< DeclarationWithType* >( *baseIt ); 1807 // if ( ! baseDecl ) return memberExpr; 1808 // 1809 // // check if stated type of the member is not the type of the member's declaration; if so, need a cast 1810 // // this *SHOULD* be safe, I don't think anything but the void-replacements I put in for dtypes would make it past the typechecker 1811 // SymTab::Indexer dummy; 1812 // if ( ResolvExpr::typesCompatible( memberDecl->get_type(), baseDecl->get_type(), dummy ) ) return memberExpr; 1813 // else return new CastExpr( memberExpr, memberDecl->get_type() ); 1814 // } 1815 1816 void GenericInstantiator::doBeginScope() { 1817 DeclMutator::doBeginScope(); 1818 instantiations.beginScope(); 1819 } 1820 1821 void GenericInstantiator::doEndScope() { 1822 DeclMutator::doEndScope(); 1823 instantiations.endScope(); 1824 } 1825 1826 ////////////////////////////////////////// PolyGenericCalculator //////////////////////////////////////////////////// 1827 1828 void PolyGenericCalculator::beginTypeScope( Type *ty ) { 1829 scopeTyVars.beginScope(); 1830 makeTyVarMap( ty, scopeTyVars ); 1831 } 1832 1833 void PolyGenericCalculator::endTypeScope() { 1834 scopeTyVars.endScope(); 1835 } 1312 1836 1313 1837 template< typename DeclClass > 1314 DeclClass * MemberExprFixer::handleDecl( DeclClass *decl, Type *type ) { 1315 TyVarMap oldtyVars = scopeTyVars; 1316 makeTyVarMap( type, scopeTyVars ); 1838 DeclClass * PolyGenericCalculator::handleDecl( DeclClass *decl, Type *type ) { 1839 beginTypeScope( type ); 1840 knownLayouts.beginScope(); 1841 knownOffsets.beginScope(); 1317 1842 1318 1843 DeclClass *ret = static_cast< DeclClass *>( Mutator::mutate( decl ) ); 1319 1844 1320 scopeTyVars = oldtyVars; 1845 knownOffsets.endScope(); 1846 knownLayouts.endScope(); 1847 endTypeScope(); 1321 1848 return ret; 1322 1849 } 1323 1850 1324 ObjectDecl * MemberExprFixer::mutate( ObjectDecl *objectDecl ) {1851 ObjectDecl * PolyGenericCalculator::mutate( ObjectDecl *objectDecl ) { 1325 1852 return handleDecl( objectDecl, objectDecl->get_type() ); 1326 1853 } 1327 1854 1328 DeclarationWithType * MemberExprFixer::mutate( FunctionDecl *functionDecl ) {1855 DeclarationWithType * PolyGenericCalculator::mutate( FunctionDecl *functionDecl ) { 1329 1856 return handleDecl( functionDecl, functionDecl->get_functionType() ); 1330 1857 } 1331 1858 1332 TypedefDecl * MemberExprFixer::mutate( TypedefDecl *typedefDecl ) {1859 TypedefDecl * PolyGenericCalculator::mutate( TypedefDecl *typedefDecl ) { 1333 1860 return handleDecl( typedefDecl, typedefDecl->get_base() ); 1334 1861 } 1335 1862 1336 TypeDecl * MemberExprFixer::mutate( TypeDecl *typeDecl ) {1863 TypeDecl * PolyGenericCalculator::mutate( TypeDecl *typeDecl ) { 1337 1864 scopeTyVars[ typeDecl->get_name() ] = typeDecl->get_kind(); 1338 1865 return Mutator::mutate( typeDecl ); 1339 1866 } 1340 1867 1341 Type * MemberExprFixer::mutate( PointerType *pointerType ) { 1342 TyVarMap oldtyVars = scopeTyVars; 1343 makeTyVarMap( pointerType, scopeTyVars ); 1868 Type * PolyGenericCalculator::mutate( PointerType *pointerType ) { 1869 beginTypeScope( pointerType ); 1344 1870 1345 1871 Type *ret = Mutator::mutate( pointerType ); 1346 1872 1347 scopeTyVars = oldtyVars;1873 endTypeScope(); 1348 1874 return ret; 1349 1875 } 1350 1876 1351 Type * MemberExprFixer::mutate( FunctionType *functionType ) { 1352 TyVarMap oldtyVars = scopeTyVars; 1353 makeTyVarMap( functionType, scopeTyVars ); 1354 1355 Type *ret = Mutator::mutate( functionType ); 1356 1357 scopeTyVars = oldtyVars; 1877 Type * PolyGenericCalculator::mutate( FunctionType *funcType ) { 1878 beginTypeScope( funcType ); 1879 1880 // make sure that any type information passed into the function is accounted for 1881 for ( std::list< DeclarationWithType* >::const_iterator fnParm = funcType->get_parameters().begin(); fnParm != funcType->get_parameters().end(); ++fnParm ) { 1882 // condition here duplicates that in Pass2::mutate( FunctionType* ) 1883 Type *polyType = isPolyType( (*fnParm)->get_type(), scopeTyVars ); 1884 if ( polyType && ! dynamic_cast< TypeInstType* >( polyType ) ) { 1885 knownLayouts.insert( mangleType( polyType ) ); 1886 } 1887 } 1888 1889 Type *ret = Mutator::mutate( funcType ); 1890 1891 endTypeScope(); 1358 1892 return ret; 1359 1893 } 1360 1894 1361 Statement * MemberExprFixer::mutate( DeclStmt *declStmt ) {1895 Statement *PolyGenericCalculator::mutate( DeclStmt *declStmt ) { 1362 1896 if ( ObjectDecl *objectDecl = dynamic_cast< ObjectDecl *>( declStmt->get_decl() ) ) { 1363 if ( isPolyType( objectDecl->get_type(), scopeTyVars) ) {1897 if ( findGeneric( objectDecl->get_type() ) ) { 1364 1898 // change initialization of a polymorphic value object 1365 1899 // to allocate storage with alloca 1366 1900 Type *declType = objectDecl->get_type(); 1367 1901 UntypedExpr *alloc = new UntypedExpr( new NameExpr( "__builtin_alloca" ) ); 1368 alloc->get_args().push_back( new NameExpr( sizeofName( declType) ) );1902 alloc->get_args().push_back( new NameExpr( sizeofName( mangleType( declType ) ) ) ); 1369 1903 1370 1904 delete objectDecl->get_init(); … … 1398 1932 ConstantExpr *fieldIndex = new ConstantExpr( Constant( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), offset_namer.str() ) ); 1399 1933 UntypedExpr *fieldOffset = new UntypedExpr( new NameExpr( "?[?]" ) ); 1400 fieldOffset->get_args().push_back( new NameExpr( offsetofName( objectType) ) );1934 fieldOffset->get_args().push_back( new NameExpr( offsetofName( mangleType( objectType ) ) ) ); 1401 1935 fieldOffset->get_args().push_back( fieldIndex ); 1402 1936 return fieldOffset; … … 1413 1947 } 1414 1948 1415 Expression * MemberExprFixer::mutate( MemberExpr *memberExpr ) {1949 Expression *PolyGenericCalculator::mutate( MemberExpr *memberExpr ) { 1416 1950 // mutate, exiting early if no longer MemberExpr 1417 1951 Expression *expr = Mutator::mutate( memberExpr ); … … 1430 1964 Type *objectType = hasPolyBase( objectDecl->get_type(), scopeTyVars, &tyDepth ); 1431 1965 if ( ! objectType ) return memberExpr; 1966 findGeneric( objectType ); // ensure layout for this type is available 1432 1967 1433 1968 Expression *newMemberExpr = 0; … … 1461 1996 } 1462 1997 1463 Expression *MemberExprFixer::mutate( OffsetofExpr *offsetofExpr ) { 1998 ObjectDecl *PolyGenericCalculator::makeVar( const std::string &name, Type *type, Initializer *init ) { 1999 ObjectDecl *newObj = new ObjectDecl( name, DeclarationNode::NoStorageClass, LinkageSpec::C, 0, type, init ); 2000 stmtsToAdd.push_back( new DeclStmt( noLabels, newObj ) ); 2001 return newObj; 2002 } 2003 2004 void PolyGenericCalculator::addOtypeParamsToLayoutCall( UntypedExpr *layoutCall, const std::list< Type* > &otypeParams ) { 2005 for ( std::list< Type* >::const_iterator param = otypeParams.begin(); param != otypeParams.end(); ++param ) { 2006 if ( findGeneric( *param ) ) { 2007 // push size/align vars for a generic parameter back 2008 std::string paramName = mangleType( *param ); 2009 layoutCall->get_args().push_back( new NameExpr( sizeofName( paramName ) ) ); 2010 layoutCall->get_args().push_back( new NameExpr( alignofName( paramName ) ) ); 2011 } else { 2012 layoutCall->get_args().push_back( new SizeofExpr( (*param)->clone() ) ); 2013 layoutCall->get_args().push_back( new AlignofExpr( (*param)->clone() ) ); 2014 } 2015 } 2016 } 2017 2018 /// returns true if any of the otype parameters have a dynamic layout and puts all otype parameters in the output list 2019 bool findGenericParams( std::list< TypeDecl* > &baseParams, std::list< Expression* > &typeParams, std::list< Type* > &out ) { 2020 bool hasDynamicLayout = false; 2021 2022 std::list< TypeDecl* >::const_iterator baseParam = baseParams.begin(); 2023 std::list< Expression* >::const_iterator typeParam = typeParams.begin(); 2024 for ( ; baseParam != baseParams.end() && typeParam != typeParams.end(); ++baseParam, ++typeParam ) { 2025 // skip non-otype parameters 2026 if ( (*baseParam)->get_kind() != TypeDecl::Any ) continue; 2027 TypeExpr *typeExpr = dynamic_cast< TypeExpr* >( *typeParam ); 2028 assert( typeExpr && "all otype parameters should be type expressions" ); 2029 2030 Type *type = typeExpr->get_type(); 2031 out.push_back( type ); 2032 if ( isPolyType( type ) ) hasDynamicLayout = true; 2033 } 2034 assert( baseParam == baseParams.end() && typeParam == typeParams.end() ); 2035 2036 return hasDynamicLayout; 2037 } 2038 2039 bool PolyGenericCalculator::findGeneric( Type *ty ) { 2040 if ( TypeInstType *typeInst = dynamic_cast< TypeInstType* >( ty ) ) { 2041 // duplicate logic from isPolyType() 2042 if ( env ) { 2043 if ( Type *newType = env->lookup( typeInst->get_name() ) ) { 2044 return findGeneric( newType ); 2045 } // if 2046 } // if 2047 if ( scopeTyVars.find( typeInst->get_name() ) != scopeTyVars.end() ) { 2048 // NOTE assumes here that getting put in the scopeTyVars included having the layout variables set 2049 return true; 2050 } 2051 return false; 2052 } else if ( StructInstType *structTy = dynamic_cast< StructInstType* >( ty ) ) { 2053 // check if this type already has a layout generated for it 2054 std::string typeName = mangleType( ty ); 2055 if ( knownLayouts.find( typeName ) != knownLayouts.end() ) return true; 2056 2057 // check if any of the type parameters have dynamic layout; if none do, this type is (or will be) monomorphized 2058 std::list< Type* > otypeParams; 2059 if ( ! findGenericParams( *structTy->get_baseParameters(), structTy->get_parameters(), otypeParams ) ) return false; 2060 2061 // insert local variables for layout and generate call to layout function 2062 knownLayouts.insert( typeName ); // done early so as not to interfere with the later addition of parameters to the layout call 2063 Type *layoutType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ); 2064 2065 int n_members = structTy->get_baseStruct()->get_members().size(); 2066 if ( n_members == 0 ) { 2067 // all empty structs have the same layout - size 1, align 1 2068 makeVar( sizeofName( typeName ), layoutType, new SingleInit( new ConstantExpr( Constant::from( (unsigned long)1 ) ) ) ); 2069 makeVar( alignofName( typeName ), layoutType->clone(), new SingleInit( new ConstantExpr( Constant::from( (unsigned long)1 ) ) ) ); 2070 // NOTE zero-length arrays are forbidden in C, so empty structs have no offsetof array 2071 } else { 2072 ObjectDecl *sizeVar = makeVar( sizeofName( typeName ), layoutType ); 2073 ObjectDecl *alignVar = makeVar( alignofName( typeName ), layoutType->clone() ); 2074 ObjectDecl *offsetVar = makeVar( offsetofName( typeName ), new ArrayType( Type::Qualifiers(), layoutType->clone(), new ConstantExpr( Constant::from( n_members ) ), false, false ) ); 2075 2076 // generate call to layout function 2077 UntypedExpr *layoutCall = new UntypedExpr( new NameExpr( layoutofName( structTy->get_baseStruct() ) ) ); 2078 layoutCall->get_args().push_back( new AddressExpr( new VariableExpr( sizeVar ) ) ); 2079 layoutCall->get_args().push_back( new AddressExpr( new VariableExpr( alignVar ) ) ); 2080 layoutCall->get_args().push_back( new VariableExpr( offsetVar ) ); 2081 addOtypeParamsToLayoutCall( layoutCall, otypeParams ); 2082 2083 stmtsToAdd.push_back( new ExprStmt( noLabels, layoutCall ) ); 2084 } 2085 2086 return true; 2087 } else if ( UnionInstType *unionTy = dynamic_cast< UnionInstType* >( ty ) ) { 2088 // check if this type already has a layout generated for it 2089 std::string typeName = mangleType( ty ); 2090 if ( knownLayouts.find( typeName ) != knownLayouts.end() ) return true; 2091 2092 // check if any of the type parameters have dynamic layout; if none do, this type is (or will be) monomorphized 2093 std::list< Type* > otypeParams; 2094 if ( ! findGenericParams( *unionTy->get_baseParameters(), unionTy->get_parameters(), otypeParams ) ) return false; 2095 2096 // insert local variables for layout and generate call to layout function 2097 knownLayouts.insert( typeName ); // done early so as not to interfere with the later addition of parameters to the layout call 2098 Type *layoutType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ); 2099 2100 ObjectDecl *sizeVar = makeVar( sizeofName( typeName ), layoutType ); 2101 ObjectDecl *alignVar = makeVar( alignofName( typeName ), layoutType->clone() ); 2102 2103 // generate call to layout function 2104 UntypedExpr *layoutCall = new UntypedExpr( new NameExpr( layoutofName( unionTy->get_baseUnion() ) ) ); 2105 layoutCall->get_args().push_back( new AddressExpr( new VariableExpr( sizeVar ) ) ); 2106 layoutCall->get_args().push_back( new AddressExpr( new VariableExpr( alignVar ) ) ); 2107 addOtypeParamsToLayoutCall( layoutCall, otypeParams ); 2108 2109 stmtsToAdd.push_back( new ExprStmt( noLabels, layoutCall ) ); 2110 2111 return true; 2112 } 2113 2114 return false; 2115 } 2116 2117 Expression *PolyGenericCalculator::mutate( SizeofExpr *sizeofExpr ) { 2118 Type *ty = sizeofExpr->get_type(); 2119 if ( findGeneric( ty ) ) { 2120 Expression *ret = new NameExpr( sizeofName( mangleType( ty ) ) ); 2121 delete sizeofExpr; 2122 return ret; 2123 } 2124 return sizeofExpr; 2125 } 2126 2127 Expression *PolyGenericCalculator::mutate( AlignofExpr *alignofExpr ) { 2128 Type *ty = alignofExpr->get_type(); 2129 if ( findGeneric( ty ) ) { 2130 Expression *ret = new NameExpr( alignofName( mangleType( ty ) ) ); 2131 delete alignofExpr; 2132 return ret; 2133 } 2134 return alignofExpr; 2135 } 2136 2137 Expression *PolyGenericCalculator::mutate( OffsetofExpr *offsetofExpr ) { 1464 2138 // mutate, exiting early if no longer OffsetofExpr 1465 2139 Expression *expr = Mutator::mutate( offsetofExpr ); … … 1468 2142 1469 2143 // only mutate expressions for polymorphic structs/unions 1470 Type *ty = isPolyType( offsetofExpr->get_type(), scopeTyVars);1471 if ( ! ty) return offsetofExpr;1472 2144 Type *ty = offsetofExpr->get_type(); 2145 if ( ! findGeneric( ty ) ) return offsetofExpr; 2146 1473 2147 if ( StructInstType *structType = dynamic_cast< StructInstType* >( ty ) ) { 1474 2148 // replace offsetof expression by index into offset array … … 1486 2160 } 1487 2161 2162 Expression *PolyGenericCalculator::mutate( OffsetPackExpr *offsetPackExpr ) { 2163 StructInstType *ty = offsetPackExpr->get_type(); 2164 2165 Expression *ret = 0; 2166 if ( findGeneric( ty ) ) { 2167 // pull offset back from generated type information 2168 ret = new NameExpr( offsetofName( mangleType( ty ) ) ); 2169 } else { 2170 std::string offsetName = offsetofName( mangleType( ty ) ); 2171 if ( knownOffsets.find( offsetName ) != knownOffsets.end() ) { 2172 // use the already-generated offsets for this type 2173 ret = new NameExpr( offsetName ); 2174 } else { 2175 knownOffsets.insert( offsetName ); 2176 2177 std::list< Declaration* > &baseMembers = ty->get_baseStruct()->get_members(); 2178 Type *offsetType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ); 2179 2180 // build initializer list for offset array 2181 std::list< Initializer* > inits; 2182 for ( std::list< Declaration* >::const_iterator member = baseMembers.begin(); member != baseMembers.end(); ++member ) { 2183 DeclarationWithType *memberDecl; 2184 if ( DeclarationWithType *origMember = dynamic_cast< DeclarationWithType* >( *member ) ) { 2185 memberDecl = origMember->clone(); 2186 } else { 2187 memberDecl = new ObjectDecl( (*member)->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, offsetType->clone(), 0 ); 2188 } 2189 inits.push_back( new SingleInit( new OffsetofExpr( ty->clone(), memberDecl ) ) ); 2190 } 2191 2192 // build the offset array and replace the pack with a reference to it 2193 ObjectDecl *offsetArray = makeVar( offsetName, new ArrayType( Type::Qualifiers(), offsetType, new ConstantExpr( Constant::from( baseMembers.size() ) ), false, false ), 2194 new ListInit( inits ) ); 2195 ret = new VariableExpr( offsetArray ); 2196 } 2197 } 2198 2199 delete offsetPackExpr; 2200 return ret; 2201 } 2202 2203 void PolyGenericCalculator::doBeginScope() { 2204 knownLayouts.beginScope(); 2205 knownOffsets.beginScope(); 2206 } 2207 2208 void PolyGenericCalculator::doEndScope() { 2209 knownLayouts.endScope(); 2210 knownOffsets.endScope(); 2211 } 2212 1488 2213 ////////////////////////////////////////// Pass3 //////////////////////////////////////////////////// 1489 2214 1490 2215 template< typename DeclClass > 1491 2216 DeclClass * Pass3::handleDecl( DeclClass *decl, Type *type ) { 1492 TyVarMap oldtyVars = scopeTyVars;2217 scopeTyVars.beginScope(); 1493 2218 makeTyVarMap( type, scopeTyVars ); 1494 2219 … … 1496 2221 ScrubTyVars::scrub( decl, scopeTyVars ); 1497 2222 1498 scopeTyVars = oldtyVars;2223 scopeTyVars.endScope(); 1499 2224 return ret; 1500 2225 } … … 1526 2251 1527 2252 Type * Pass3::mutate( PointerType *pointerType ) { 1528 TyVarMap oldtyVars = scopeTyVars;2253 scopeTyVars.beginScope(); 1529 2254 makeTyVarMap( pointerType, scopeTyVars ); 1530 2255 1531 2256 Type *ret = Mutator::mutate( pointerType ); 1532 2257 1533 scopeTyVars = oldtyVars;2258 scopeTyVars.endScope(); 1534 2259 return ret; 1535 2260 } 1536 2261 1537 2262 Type * Pass3::mutate( FunctionType *functionType ) { 1538 TyVarMap oldtyVars = scopeTyVars;2263 scopeTyVars.beginScope(); 1539 2264 makeTyVarMap( functionType, scopeTyVars ); 1540 2265 1541 2266 Type *ret = Mutator::mutate( functionType ); 1542 2267 1543 scopeTyVars = oldtyVars;2268 scopeTyVars.endScope(); 1544 2269 return ret; 1545 2270 } -
src/GenPoly/DeclMutator.cc
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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/FindFunction.cc
rc5833e8 r0f9e4403 55 55 TyVarMap::iterator var = tyVars.find( (*i)->get_name() ); 56 56 if ( var != tyVars.end() ) { 57 tyVars.erase( var );57 tyVars.erase( var->first ); 58 58 } // if 59 59 } // for … … 61 61 62 62 Type * FindFunction::mutate( FunctionType *functionType ) { 63 TyVarMap oldTyVars = tyVars;63 tyVars.beginScope(); 64 64 handleForall( functionType->get_forall() ); 65 65 mutateAll( functionType->get_returnVals(), *this ); … … 72 72 } // if 73 73 } // if 74 tyVars = oldTyVars;74 tyVars.endScope(); 75 75 return ret; 76 76 } 77 77 78 78 Type * FindFunction::mutate( PointerType *pointerType ) { 79 TyVarMap oldTyVars = tyVars;79 tyVars.beginScope(); 80 80 handleForall( pointerType->get_forall() ); 81 81 Type *ret = Mutator::mutate( pointerType ); 82 tyVars = oldTyVars;82 tyVars.endScope(); 83 83 return ret; 84 84 } -
src/GenPoly/GenPoly.cc
rc5833e8 r0f9e4403 16 16 #include "GenPoly.h" 17 17 18 #include "SymTab/Mangler.h"19 18 #include "SynTree/Expression.h" 20 19 #include "SynTree/Type.h" … … 38 37 ReferenceToType *isPolyRet( FunctionType *function ) { 39 38 if ( ! function->get_returnVals().empty() ) { 40 TyVarMap forallTypes ;39 TyVarMap forallTypes( (TypeDecl::Kind)-1 ); 41 40 makeTyVarMap( function, forallTypes ); 42 41 return (ReferenceToType*)isPolyType( function->get_returnVals().front()->get_type(), forallTypes ); … … 218 217 } 219 218 220 std::string sizeofName( Type *ty ) {221 return std::string( "_sizeof_" ) + SymTab::Mangler::mangleType( ty );222 }223 224 std::string alignofName( Type *ty ) {225 return std::string( "_alignof_" ) + SymTab::Mangler::mangleType( ty );226 }227 228 std::string offsetofName( Type* ty ) {229 return std::string( "_offsetof_" ) + SymTab::Mangler::mangleType( ty );230 }231 232 219 } // namespace GenPoly 233 220 -
src/GenPoly/GenPoly.h
rc5833e8 r0f9e4403 17 17 #define GENPOLY_H 18 18 19 #include <map>20 19 #include <string> 21 20 #include <iostream> 22 21 #include <utility> 22 23 #include "ErasableScopedMap.h" 24 25 #include "SymTab/Mangler.h" 23 26 24 27 #include "SynTree/Declaration.h" … … 27 30 28 31 namespace GenPoly { 29 typedef std::map< std::string, TypeDecl::Kind > TyVarMap;32 typedef ErasableScopedMap< std::string, TypeDecl::Kind > TyVarMap; 30 33 31 34 /// A function needs an adapter if it returns a polymorphic value or if any of its … … 69 72 void printTyVarMap( std::ostream &os, const TyVarMap &tyVarMap ); 70 73 71 /// Gets the name of the sizeof parameter for the type 72 std::string sizeofName( Type *ty ); 74 /// Gets the mangled name of this type; alias for SymTab::Mangler::mangleType(). 75 inline std::string mangleType( Type *ty ) { return SymTab::Mangler::mangleType( ty ); } 76 77 /// Gets the name of the sizeof parameter for the type, given its mangled name 78 inline std::string sizeofName( const std::string &name ) { return std::string( "_sizeof_" ) + name; } 73 79 74 /// Gets the name of the alignof parameter for the type 75 std::string alignofName( Type *ty );80 /// Gets the name of the alignof parameter for the type, given its mangled name 81 inline std::string alignofName( const std::string &name ) { return std::string( "_alignof_" ) + name; } 76 82 77 /// Gets the name of the offsetof parameter for the type 78 std::string offsetofName( Type *ty ); 83 /// Gets the name of the offsetof parameter for the type, given its mangled name 84 inline std::string offsetofName( const std::string &name ) { return std::string( "_offsetof_" ) + name; } 85 86 /// Gets the name of the layout function for a given aggregate type, given its declaration 87 inline std::string layoutofName( AggregateDecl *decl ) { return std::string( "_layoutof_" ) + decl->get_name(); } 88 79 89 } // namespace GenPoly 80 90 -
src/GenPoly/Lvalue.cc
rc5833e8 r0f9e4403 17 17 18 18 #include "Lvalue.h" 19 20 #include "GenPoly.h" 19 21 20 22 #include "SynTree/Declaration.h" … … 63 65 64 66 namespace { 65 bool isLvalueRet( FunctionType *function ) { 66 if ( ! function->get_returnVals().empty() ) { 67 return function->get_returnVals().front()->get_type()->get_isLvalue(); 68 } else { 69 return false; 70 } // if 67 Type* isLvalueRet( FunctionType *function ) { 68 if ( function->get_returnVals().empty() ) return 0; 69 Type *ty = function->get_returnVals().front()->get_type(); 70 return ty->get_isLvalue() ? ty : 0; 71 71 } 72 72 … … 107 107 assert( function ); 108 108 109 std::string typeName; 110 if ( isLvalueRet( function ) && ! isIntrinsicApp( appExpr ) ) { 109 Type *funType = isLvalueRet( function ); 110 if ( funType && ! isIntrinsicApp( appExpr ) ) { 111 Expression *expr = appExpr; 112 Type *appType = appExpr->get_results().front(); 113 if ( isPolyType( funType ) && ! isPolyType( appType ) ) { 114 // make sure cast for polymorphic type is inside dereference 115 expr = new CastExpr( appExpr, new PointerType( Type::Qualifiers(), appType->clone() ) ); 116 } 111 117 UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) ); 112 deref->get_results().push_back( app Expr->get_results().front() );113 appExpr->get_results().front() = new PointerType( Type::Qualifiers(), deref->get_results().front()->clone());114 deref->get_args().push_back( appExpr );118 deref->get_results().push_back( appType->clone() ); 119 appExpr->get_results().front() = new PointerType( Type::Qualifiers(), appType ); 120 deref->get_args().push_back( expr ); 115 121 return deref; 116 122 } else { -
src/GenPoly/PolyMutator.cc
rc5833e8 r0f9e4403 27 27 } 28 28 29 PolyMutator::PolyMutator() : env( 0 ) { 30 } 29 PolyMutator::PolyMutator() : scopeTyVars( (TypeDecl::Kind)-1 ), env( 0 ) {} 31 30 32 31 void PolyMutator::mutateStatementList( std::list< Statement* > &statements ) { -
src/GenPoly/ScopedMap.h
rc5833e8 r0f9e4403 17 17 #define _SCOPEDMAP_H 18 18 19 #include <cassert> 19 20 #include <iterator> 20 21 #include <map> … … 50 51 typedef typename scope_list::size_type size_type; 51 52 53 /// Checks if this iterator points to a valid item 54 bool is_valid() const { 55 return it != (*scopes)[i].end(); 56 } 57 58 /// Increments on invalid 59 iterator& next_valid() { 60 if ( ! is_valid() ) { ++(*this); } 61 return *this; 62 } 63 64 /// Decrements on invalid 65 iterator& prev_valid() { 66 if ( ! is_valid() ) { --(*this); } 67 return *this; 68 } 69 52 70 iterator(scope_list const &_scopes, const wrapped_iterator &_it, size_type _i) 53 71 : scopes(&_scopes), it(_it), i(_i) {} … … 67 85 --i; 68 86 it = (*scopes)[i].begin(); 69 return *this;70 }71 ++it;72 return *this;87 } else { 88 ++it; 89 } 90 return next_valid(); 73 91 } 74 92 iterator& operator++ (int) { iterator tmp = *this; ++(*this); return tmp; } … … 81 99 } 82 100 --it; 83 return *this;101 return prev_valid(); 84 102 } 85 103 iterator& operator-- (int) { iterator tmp = *this; --(*this); return tmp; } … … 104 122 typedef typename scope_list::size_type size_type; 105 123 124 /// Checks if this iterator points to a valid item 125 bool is_valid() const { 126 return it != (*scopes)[i].end(); 127 } 128 129 /// Increments on invalid 130 const_iterator& next_valid() { 131 if ( ! is_valid() ) { ++(*this); } 132 return *this; 133 } 134 135 /// Decrements on invalid 136 const_iterator& prev_valid() { 137 if ( ! is_valid() ) { --(*this); } 138 return *this; 139 } 140 106 141 const_iterator(scope_list const &_scopes, const wrapped_const_iterator &_it, size_type _i) 107 142 : scopes(&_scopes), it(_it), i(_i) {} … … 126 161 --i; 127 162 it = (*scopes)[i].begin(); 128 return *this;129 }130 ++it;131 return *this;163 } else { 164 ++it; 165 } 166 return next_valid(); 132 167 } 133 168 const_iterator& operator++ (int) { const_iterator tmp = *this; ++(*this); return tmp; } … … 140 175 } 141 176 --it; 142 return *this;177 return prev_valid(); 143 178 } 144 179 const_iterator& operator-- (int) { const_iterator tmp = *this; --(*this); return tmp; } … … 164 199 void endScope() { 165 200 scopes.pop_back(); 201 assert( ! scopes.empty() ); 166 202 } 167 203 … … 169 205 ScopedMap() { beginScope(); } 170 206 171 iterator begin() { return iterator(scopes, scopes.back().begin(), scopes.size()-1) ; }172 const_iterator begin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1) ; }173 const_iterator cbegin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1) ; }207 iterator begin() { return iterator(scopes, scopes.back().begin(), scopes.size()-1).next_valid(); } 208 const_iterator begin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1).next_valid(); } 209 const_iterator cbegin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1).next_valid(); } 174 210 iterator end() { return iterator(scopes, scopes[0].end(), 0); } 175 211 const_iterator end() const { return const_iterator(scopes, scopes[0].end(), 0); } … … 188 224 return end(); 189 225 } 190 const_iterator find( const Key &key ) const { return const_iterator( find( key ) ); } 226 const_iterator find( const Key &key ) const { 227 return const_iterator( const_cast< ScopedMap< Key, Value >* >(this)->find( key ) ); 228 } 191 229 192 230 /// Finds the given key in the outermost scope inside the given scope where it occurs … … 200 238 return end(); 201 239 } 202 const_iterator findNext( const_iterator &it, const Key &key ) const { return const_iterator( findNext( it, key ) ); } 240 const_iterator findNext( const_iterator &it, const Key &key ) const { 241 return const_iterator( const_cast< ScopedMap< Key, Value >* >(this)->findNext( it, key ) ); 242 } 203 243 204 244 /// Inserts the given key-value pair into the outermost scope … … 208 248 } 209 249 std::pair< iterator, bool > insert( const Key &key, const Value &value ) { return insert( std::make_pair( key, value ) ); } 210 250 251 Value& operator[] ( const Key &key ) { 252 iterator slot = find( key ); 253 if ( slot != end() ) return slot->second; 254 return insert( key, Value() ).first->second; 255 } 211 256 }; 212 257 } // namespace GenPoly -
src/GenPoly/ScrubTyVars.cc
rc5833e8 r0f9e4403 64 64 // sizeof( T ) => _sizeof_T parameter, which is the size of T 65 65 if ( Type *polyType = isPolyType( szeof->get_type() ) ) { 66 Expression *expr = new NameExpr( sizeofName( polyType) );66 Expression *expr = new NameExpr( sizeofName( mangleType( polyType ) ) ); 67 67 return expr; 68 68 } else { … … 74 74 // alignof( T ) => _alignof_T parameter, which is the alignment of T 75 75 if ( Type *polyType = isPolyType( algnof->get_type() ) ) { 76 Expression *expr = new NameExpr( alignofName( polyType) );76 Expression *expr = new NameExpr( alignofName( mangleType( polyType ) ) ); 77 77 return expr; 78 78 } else { -
src/GenPoly/module.mk
rc5833e8 r0f9e4403 23 23 GenPoly/CopyParams.cc \ 24 24 GenPoly/FindFunction.cc \ 25 GenPoly/InstantiateGeneric.cc \26 25 GenPoly/DeclMutator.cc -
src/InitTweak/InitModel.h
rc5833e8 r0f9e4403 75 75 void visit( UntypedOffsetofExpr * ) { throw 0; } 76 76 void visit( OffsetofExpr * ) { throw 0; } 77 void visit( OffsetPackExpr * ) { throw 0; } 77 78 void visit( AttrExpr * ) { throw 0; } 78 79 void visit( LogicalExpr * ) { throw 0; } -
src/Makefile.am
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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) \ … … 154 153 ResolvExpr/driver_cfa_cpp-Occurs.$(OBJEXT) \ 155 154 ResolvExpr/driver_cfa_cpp-TypeEnvironment.$(OBJEXT) \ 156 SymTab/driver_cfa_cpp-IdTable.$(OBJEXT) \157 155 SymTab/driver_cfa_cpp-Indexer.$(OBJEXT) \ 158 156 SymTab/driver_cfa_cpp-Mangler.$(OBJEXT) \ … … 171 169 SynTree/driver_cfa_cpp-TypeofType.$(OBJEXT) \ 172 170 SynTree/driver_cfa_cpp-AttrType.$(OBJEXT) \ 171 SynTree/driver_cfa_cpp-VarArgsType.$(OBJEXT) \ 173 172 SynTree/driver_cfa_cpp-Constant.$(OBJEXT) \ 174 173 SynTree/driver_cfa_cpp-Expression.$(OBJEXT) \ … … 191 190 SynTree/driver_cfa_cpp-Visitor.$(OBJEXT) \ 192 191 SynTree/driver_cfa_cpp-Mutator.$(OBJEXT) \ 193 SynTree/driver_cfa_cpp-CodeGenVisitor.$(OBJEXT) \194 192 SynTree/driver_cfa_cpp-TypeSubstitution.$(OBJEXT) \ 195 193 Tuples/driver_cfa_cpp-Mutate.$(OBJEXT) \ … … 247 245 CXX = @CXX@ 248 246 CXXDEPMODE = @CXXDEPMODE@ 249 CXXFLAGS = -g # remove default -O2 to allow better debugging247 CXXFLAGS = -g -std=c++11 # remove default -O2 to allow better debugging 250 248 CYGPATH_W = @CYGPATH_W@ 251 249 DEFS = @DEFS@ … … 347 345 GenPoly/ScrubTyVars.cc GenPoly/Lvalue.cc GenPoly/Specialize.cc \ 348 346 GenPoly/CopyParams.cc GenPoly/FindFunction.cc \ 349 GenPoly/InstantiateGeneric.cc GenPoly/DeclMutator.cc \ 350 InitTweak/RemoveInit.cc Parser/parser.yy Parser/lex.ll \ 351 Parser/TypedefTable.cc Parser/ParseNode.cc \ 352 Parser/DeclarationNode.cc Parser/ExpressionNode.cc \ 353 Parser/StatementNode.cc Parser/InitializerNode.cc \ 354 Parser/TypeData.cc Parser/LinkageSpec.cc \ 355 Parser/parseutility.cc Parser/Parser.cc \ 347 GenPoly/DeclMutator.cc InitTweak/RemoveInit.cc \ 348 Parser/parser.yy Parser/lex.ll Parser/TypedefTable.cc \ 349 Parser/ParseNode.cc Parser/DeclarationNode.cc \ 350 Parser/ExpressionNode.cc Parser/StatementNode.cc \ 351 Parser/InitializerNode.cc Parser/TypeData.cc \ 352 Parser/LinkageSpec.cc Parser/parseutility.cc Parser/Parser.cc \ 356 353 ResolvExpr/AlternativeFinder.cc ResolvExpr/Alternative.cc \ 357 354 ResolvExpr/Unify.cc ResolvExpr/PtrsAssignable.cc \ … … 362 359 ResolvExpr/RenameVars.cc ResolvExpr/FindOpenVars.cc \ 363 360 ResolvExpr/PolyCost.cc ResolvExpr/Occurs.cc \ 364 ResolvExpr/TypeEnvironment.cc SymTab/I dTable.cc \365 SymTab/ Indexer.cc SymTab/Mangler.cc SymTab/Validate.cc \366 SymTab/ FixFunction.cc SymTab/ImplementationType.cc \367 Sy mTab/TypeEquality.cc SynTree/Type.cc SynTree/VoidType.cc \368 SynTree/ BasicType.cc SynTree/PointerType.cc \369 SynTree/ ArrayType.cc SynTree/FunctionType.cc \370 SynTree/ ReferenceToType.cc SynTree/TupleType.cc \371 SynTree/ TypeofType.cc SynTree/AttrType.cc SynTree/Constant.cc \361 ResolvExpr/TypeEnvironment.cc SymTab/Indexer.cc \ 362 SymTab/Mangler.cc SymTab/Validate.cc SymTab/FixFunction.cc \ 363 SymTab/ImplementationType.cc SymTab/TypeEquality.cc \ 364 SynTree/Type.cc SynTree/VoidType.cc SynTree/BasicType.cc \ 365 SynTree/PointerType.cc SynTree/ArrayType.cc \ 366 SynTree/FunctionType.cc SynTree/ReferenceToType.cc \ 367 SynTree/TupleType.cc SynTree/TypeofType.cc SynTree/AttrType.cc \ 368 SynTree/VarArgsType.cc SynTree/Constant.cc \ 372 369 SynTree/Expression.cc SynTree/TupleExpr.cc \ 373 370 SynTree/CommaExpr.cc SynTree/TypeExpr.cc \ … … 379 376 SynTree/NamedTypeDecl.cc SynTree/TypeDecl.cc \ 380 377 SynTree/Initializer.cc SynTree/Visitor.cc SynTree/Mutator.cc \ 381 SynTree/ CodeGenVisitor.cc SynTree/TypeSubstitution.cc \382 Tuples/ Mutate.cc Tuples/AssignExpand.cc \383 Tuples/ FunctionFixer.cc Tuples/TupleAssignment.cc \384 Tuples/ FunctionChecker.cc Tuples/NameMatcher.cc378 SynTree/TypeSubstitution.cc Tuples/Mutate.cc \ 379 Tuples/AssignExpand.cc Tuples/FunctionFixer.cc \ 380 Tuples/TupleAssignment.cc Tuples/FunctionChecker.cc \ 381 Tuples/NameMatcher.cc 385 382 MAINTAINERCLEANFILES = Parser/parser.output ${libdir}/${notdir \ 386 383 ${cfa_cpplib_PROGRAMS}} … … 410 407 esac; \ 411 408 done; \ 412 echo ' cd $(top_srcdir) && $(AUTOMAKE) -- gnusrc/Makefile'; \409 echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ 413 410 $(am__cd) $(top_srcdir) && \ 414 $(AUTOMAKE) -- gnusrc/Makefile411 $(AUTOMAKE) --foreign src/Makefile 415 412 .PRECIOUS: Makefile 416 413 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status … … 555 552 GenPoly/$(DEPDIR)/$(am__dirstamp) 556 553 GenPoly/driver_cfa_cpp-FindFunction.$(OBJEXT): \ 557 GenPoly/$(am__dirstamp) GenPoly/$(DEPDIR)/$(am__dirstamp)558 GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT): \559 554 GenPoly/$(am__dirstamp) GenPoly/$(DEPDIR)/$(am__dirstamp) 560 555 GenPoly/driver_cfa_cpp-DeclMutator.$(OBJEXT): GenPoly/$(am__dirstamp) \ … … 663 658 @$(MKDIR_P) SymTab/$(DEPDIR) 664 659 @: > SymTab/$(DEPDIR)/$(am__dirstamp) 665 SymTab/driver_cfa_cpp-IdTable.$(OBJEXT): SymTab/$(am__dirstamp) \666 SymTab/$(DEPDIR)/$(am__dirstamp)667 660 SymTab/driver_cfa_cpp-Indexer.$(OBJEXT): SymTab/$(am__dirstamp) \ 668 661 SymTab/$(DEPDIR)/$(am__dirstamp) … … 702 695 SynTree/$(DEPDIR)/$(am__dirstamp) 703 696 SynTree/driver_cfa_cpp-AttrType.$(OBJEXT): SynTree/$(am__dirstamp) \ 697 SynTree/$(DEPDIR)/$(am__dirstamp) 698 SynTree/driver_cfa_cpp-VarArgsType.$(OBJEXT): SynTree/$(am__dirstamp) \ 704 699 SynTree/$(DEPDIR)/$(am__dirstamp) 705 700 SynTree/driver_cfa_cpp-Constant.$(OBJEXT): SynTree/$(am__dirstamp) \ … … 743 738 SynTree/driver_cfa_cpp-Mutator.$(OBJEXT): SynTree/$(am__dirstamp) \ 744 739 SynTree/$(DEPDIR)/$(am__dirstamp) 745 SynTree/driver_cfa_cpp-CodeGenVisitor.$(OBJEXT): \746 SynTree/$(am__dirstamp) SynTree/$(DEPDIR)/$(am__dirstamp)747 740 SynTree/driver_cfa_cpp-TypeSubstitution.$(OBJEXT): \ 748 741 SynTree/$(am__dirstamp) SynTree/$(DEPDIR)/$(am__dirstamp) … … 795 788 -rm -f GenPoly/driver_cfa_cpp-FindFunction.$(OBJEXT) 796 789 -rm -f GenPoly/driver_cfa_cpp-GenPoly.$(OBJEXT) 797 -rm -f GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT)798 790 -rm -f GenPoly/driver_cfa_cpp-Lvalue.$(OBJEXT) 799 791 -rm -f GenPoly/driver_cfa_cpp-PolyMutator.$(OBJEXT) … … 831 823 -rm -f ResolvExpr/driver_cfa_cpp-Unify.$(OBJEXT) 832 824 -rm -f SymTab/driver_cfa_cpp-FixFunction.$(OBJEXT) 833 -rm -f SymTab/driver_cfa_cpp-IdTable.$(OBJEXT)834 825 -rm -f SymTab/driver_cfa_cpp-ImplementationType.$(OBJEXT) 835 826 -rm -f SymTab/driver_cfa_cpp-Indexer.$(OBJEXT) … … 843 834 -rm -f SynTree/driver_cfa_cpp-AttrType.$(OBJEXT) 844 835 -rm -f SynTree/driver_cfa_cpp-BasicType.$(OBJEXT) 845 -rm -f SynTree/driver_cfa_cpp-CodeGenVisitor.$(OBJEXT)846 836 -rm -f SynTree/driver_cfa_cpp-CommaExpr.$(OBJEXT) 847 837 -rm -f SynTree/driver_cfa_cpp-CompoundStmt.$(OBJEXT) … … 867 857 -rm -f SynTree/driver_cfa_cpp-TypeSubstitution.$(OBJEXT) 868 858 -rm -f SynTree/driver_cfa_cpp-TypeofType.$(OBJEXT) 859 -rm -f SynTree/driver_cfa_cpp-VarArgsType.$(OBJEXT) 869 860 -rm -f SynTree/driver_cfa_cpp-Visitor.$(OBJEXT) 870 861 -rm -f SynTree/driver_cfa_cpp-VoidType.$(OBJEXT) … … 902 893 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-FindFunction.Po@am__quote@ 903 894 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-GenPoly.Po@am__quote@ 904 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Po@am__quote@905 895 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-Lvalue.Po@am__quote@ 906 896 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-PolyMutator.Po@am__quote@ … … 938 928 @AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/driver_cfa_cpp-Unify.Po@am__quote@ 939 929 @AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-FixFunction.Po@am__quote@ 940 @AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Po@am__quote@941 930 @AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-ImplementationType.Po@am__quote@ 942 931 @AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-Indexer.Po@am__quote@ … … 950 939 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-AttrType.Po@am__quote@ 951 940 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-BasicType.Po@am__quote@ 952 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Po@am__quote@953 941 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-CommaExpr.Po@am__quote@ 954 942 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-CompoundStmt.Po@am__quote@ … … 974 962 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-TypeSubstitution.Po@am__quote@ 975 963 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-TypeofType.Po@am__quote@ 964 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Po@am__quote@ 976 965 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-Visitor.Po@am__quote@ 977 966 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-VoidType.Po@am__quote@ … … 1363 1352 @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` 1364 1353 1365 GenPoly/driver_cfa_cpp-InstantiateGeneric.o: GenPoly/InstantiateGeneric.cc1366 @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.cc1367 @am__fastdepCXX_TRUE@ $(am__mv) GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Po1368 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='GenPoly/InstantiateGeneric.cc' object='GenPoly/driver_cfa_cpp-InstantiateGeneric.o' libtool=no @AMDEPBACKSLASH@1369 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@1370 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.o `test -f 'GenPoly/InstantiateGeneric.cc' || echo '$(srcdir)/'`GenPoly/InstantiateGeneric.cc1371 1372 GenPoly/driver_cfa_cpp-InstantiateGeneric.obj: GenPoly/InstantiateGeneric.cc1373 @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-InstantiateGeneric.obj -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.obj `if test -f 'GenPoly/InstantiateGeneric.cc'; then $(CYGPATH_W) 'GenPoly/InstantiateGeneric.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/InstantiateGeneric.cc'; fi`1374 @am__fastdepCXX_TRUE@ $(am__mv) GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Po1375 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='GenPoly/InstantiateGeneric.cc' object='GenPoly/driver_cfa_cpp-InstantiateGeneric.obj' libtool=no @AMDEPBACKSLASH@1376 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@1377 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.obj `if test -f 'GenPoly/InstantiateGeneric.cc'; then $(CYGPATH_W) 'GenPoly/InstantiateGeneric.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/InstantiateGeneric.cc'; fi`1378 1379 1354 GenPoly/driver_cfa_cpp-DeclMutator.o: GenPoly/DeclMutator.cc 1380 1355 @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 … … 1811 1786 @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` 1812 1787 1813 SymTab/driver_cfa_cpp-IdTable.o: SymTab/IdTable.cc1814 @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.cc1815 @am__fastdepCXX_TRUE@ $(am__mv) SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Tpo SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Po1816 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='SymTab/IdTable.cc' object='SymTab/driver_cfa_cpp-IdTable.o' libtool=no @AMDEPBACKSLASH@1817 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@1818 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SymTab/driver_cfa_cpp-IdTable.o `test -f 'SymTab/IdTable.cc' || echo '$(srcdir)/'`SymTab/IdTable.cc1819 1820 SymTab/driver_cfa_cpp-IdTable.obj: SymTab/IdTable.cc1821 @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SymTab/driver_cfa_cpp-IdTable.obj -MD -MP -MF SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Tpo -c -o SymTab/driver_cfa_cpp-IdTable.obj `if test -f 'SymTab/IdTable.cc'; then $(CYGPATH_W) 'SymTab/IdTable.cc'; else $(CYGPATH_W) '$(srcdir)/SymTab/IdTable.cc'; fi`1822 @am__fastdepCXX_TRUE@ $(am__mv) SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Tpo SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Po1823 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='SymTab/IdTable.cc' object='SymTab/driver_cfa_cpp-IdTable.obj' libtool=no @AMDEPBACKSLASH@1824 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@1825 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SymTab/driver_cfa_cpp-IdTable.obj `if test -f 'SymTab/IdTable.cc'; then $(CYGPATH_W) 'SymTab/IdTable.cc'; else $(CYGPATH_W) '$(srcdir)/SymTab/IdTable.cc'; fi`1826 1827 1788 SymTab/driver_cfa_cpp-Indexer.o: SymTab/Indexer.cc 1828 1789 @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 … … 2049 2010 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-AttrType.obj `if test -f 'SynTree/AttrType.cc'; then $(CYGPATH_W) 'SynTree/AttrType.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/AttrType.cc'; fi` 2050 2011 2012 SynTree/driver_cfa_cpp-VarArgsType.o: SynTree/VarArgsType.cc 2013 @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-VarArgsType.o -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Tpo -c -o SynTree/driver_cfa_cpp-VarArgsType.o `test -f 'SynTree/VarArgsType.cc' || echo '$(srcdir)/'`SynTree/VarArgsType.cc 2014 @am__fastdepCXX_TRUE@ $(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Po 2015 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='SynTree/VarArgsType.cc' object='SynTree/driver_cfa_cpp-VarArgsType.o' libtool=no @AMDEPBACKSLASH@ 2016 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 2017 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-VarArgsType.o `test -f 'SynTree/VarArgsType.cc' || echo '$(srcdir)/'`SynTree/VarArgsType.cc 2018 2019 SynTree/driver_cfa_cpp-VarArgsType.obj: SynTree/VarArgsType.cc 2020 @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-VarArgsType.obj -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Tpo -c -o SynTree/driver_cfa_cpp-VarArgsType.obj `if test -f 'SynTree/VarArgsType.cc'; then $(CYGPATH_W) 'SynTree/VarArgsType.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/VarArgsType.cc'; fi` 2021 @am__fastdepCXX_TRUE@ $(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Po 2022 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='SynTree/VarArgsType.cc' object='SynTree/driver_cfa_cpp-VarArgsType.obj' libtool=no @AMDEPBACKSLASH@ 2023 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 2024 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-VarArgsType.obj `if test -f 'SynTree/VarArgsType.cc'; then $(CYGPATH_W) 'SynTree/VarArgsType.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/VarArgsType.cc'; fi` 2025 2051 2026 SynTree/driver_cfa_cpp-Constant.o: SynTree/Constant.cc 2052 2027 @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-Constant.o -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-Constant.Tpo -c -o SynTree/driver_cfa_cpp-Constant.o `test -f 'SynTree/Constant.cc' || echo '$(srcdir)/'`SynTree/Constant.cc … … 2328 2303 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 2329 2304 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-Mutator.obj `if test -f 'SynTree/Mutator.cc'; then $(CYGPATH_W) 'SynTree/Mutator.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/Mutator.cc'; fi` 2330 2331 SynTree/driver_cfa_cpp-CodeGenVisitor.o: SynTree/CodeGenVisitor.cc2332 @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.cc2333 @am__fastdepCXX_TRUE@ $(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Po2334 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='SynTree/CodeGenVisitor.cc' object='SynTree/driver_cfa_cpp-CodeGenVisitor.o' libtool=no @AMDEPBACKSLASH@2335 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@2336 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-CodeGenVisitor.o `test -f 'SynTree/CodeGenVisitor.cc' || echo '$(srcdir)/'`SynTree/CodeGenVisitor.cc2337 2338 SynTree/driver_cfa_cpp-CodeGenVisitor.obj: SynTree/CodeGenVisitor.cc2339 @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-CodeGenVisitor.obj -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Tpo -c -o SynTree/driver_cfa_cpp-CodeGenVisitor.obj `if test -f 'SynTree/CodeGenVisitor.cc'; then $(CYGPATH_W) 'SynTree/CodeGenVisitor.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/CodeGenVisitor.cc'; fi`2340 @am__fastdepCXX_TRUE@ $(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Po2341 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='SynTree/CodeGenVisitor.cc' object='SynTree/driver_cfa_cpp-CodeGenVisitor.obj' libtool=no @AMDEPBACKSLASH@2342 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@2343 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-CodeGenVisitor.obj `if test -f 'SynTree/CodeGenVisitor.cc'; then $(CYGPATH_W) 'SynTree/CodeGenVisitor.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/CodeGenVisitor.cc'; fi`2344 2305 2345 2306 SynTree/driver_cfa_cpp-TypeSubstitution.o: SynTree/TypeSubstitution.cc -
src/Parser/DeclarationNode.cc
rc5833e8 r0f9e4403 10 10 // Created On : Sat May 16 12:34:05 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Jul 14 14:46:32 201513 // Update Count : 1 2612 // Last Modified On : Wed Apr 13 16:53:17 2016 13 // Update Count : 161 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 ) { … … 116 117 newnode->type->function->newStyle = newStyle; 117 118 newnode->type->function->body = body; 119 typedefTable.addToEnclosingScope( newnode->name, TypedefTable::ID ); 118 120 119 121 if ( body ) { … … 128 130 129 131 return newnode; 130 } 132 } // DeclarationNode::newFunction 131 133 132 134 DeclarationNode *DeclarationNode::newQualifier( Qualifier q ) { … … 135 137 newnode->type->qualifiers.push_back( q ); 136 138 return newnode; 137 } 139 } // DeclarationNode::newQualifier 138 140 139 141 DeclarationNode *DeclarationNode::newStorageClass( DeclarationNode::StorageClass sc ) { … … 141 143 newnode->storageClasses.push_back( sc ); 142 144 return newnode; 143 } 145 } // DeclarationNode::newStorageClass 144 146 145 147 DeclarationNode *DeclarationNode::newBasicType( BasicType bt ) { … … 148 150 newnode->type->basic->typeSpec.push_back( bt ); 149 151 return newnode; 150 } 152 } // DeclarationNode::newBasicType 153 154 DeclarationNode *DeclarationNode::newBuiltinType( BuiltinType bt ) { 155 DeclarationNode *newnode = new DeclarationNode; 156 newnode->type = new TypeData( TypeData::Builtin ); 157 newnode->type->builtin->type = bt; 158 return newnode; 159 } // DeclarationNode::newBuiltinType 151 160 152 161 DeclarationNode *DeclarationNode::newModifier( Modifier mod ) { … … 155 164 newnode->type->basic->modifiers.push_back( mod ); 156 165 return newnode; 157 } 166 } // DeclarationNode::newModifier 158 167 159 168 DeclarationNode *DeclarationNode::newForall( DeclarationNode *forall ) { … … 162 171 newnode->type->forall = forall; 163 172 return newnode; 164 } 173 } // DeclarationNode::newForall 165 174 166 175 DeclarationNode *DeclarationNode::newFromTypedef( std::string *name ) { … … 171 180 newnode->type->symbolic->params = 0; 172 181 return newnode; 173 } 182 } // DeclarationNode::newFromTypedef 174 183 175 184 DeclarationNode *DeclarationNode::newAggregate( Aggregate kind, const std::string *name, ExpressionNode *actuals, DeclarationNode *fields ) { … … 179 188 newnode->type->aggregate->name = assign_strptr( name ); 180 189 if ( newnode->type->aggregate->name == "" ) { // anonymous aggregate ? 181 newnode->type->aggregate->name = DeclarationNode::anonymous.newName(); 182 } else { 183 // SKULLDUGGERY: generate a typedef for the aggregate name so that the aggregate does not have to be qualified 184 // by "struct" 185 typedefTable.addToEnclosingScope( newnode->type->aggregate->name, TypedefTable::TD ); 186 DeclarationNode *typedf = new DeclarationNode; 187 typedf->name = newnode->type->aggregate->name; 188 newnode->appendList( typedf->addType( newnode->clone() )->addTypedef() ); 190 newnode->type->aggregate->name = anonymous.newName(); 189 191 } // if 190 192 newnode->type->aggregate->actuals = actuals; 191 193 newnode->type->aggregate->fields = fields; 192 194 return newnode; 193 } 195 } // DeclarationNode::newAggregate 194 196 195 197 DeclarationNode *DeclarationNode::newEnum( std::string *name, DeclarationNode *constants ) { … … 200 202 if ( newnode->type->enumeration->name == "" ) { // anonymous enumeration ? 201 203 newnode->type->enumeration->name = DeclarationNode::anonymous.newName(); 202 } else {203 // SKULLDUGGERY: generate a typedef for the enumeration name so that the enumeration does not have to be204 // qualified by "enum"205 typedefTable.addToEnclosingScope( newnode->type->enumeration->name, TypedefTable::TD );206 DeclarationNode *typedf = new DeclarationNode;207 typedf->name = newnode->type->enumeration->name;208 newnode->appendList( typedf->addType( newnode->clone() )->addTypedef() );209 204 } // if 210 205 newnode->type->enumeration->constants = constants; 211 206 return newnode; 212 } 207 } // DeclarationNode::newEnum 213 208 214 209 DeclarationNode *DeclarationNode::newEnumConstant( std::string *name, ExpressionNode *constant ) { 215 210 DeclarationNode *newnode = new DeclarationNode; 216 211 newnode->name = assign_strptr( name ); 217 // do something with the constant 218 return newnode; 219 } 212 newnode->enumeratorValue = constant; 213 typedefTable.addToEnclosingScope( newnode->name, TypedefTable::ID ); 214 return newnode; 215 } // DeclarationNode::newEnumConstant 220 216 221 217 DeclarationNode *DeclarationNode::newName( std::string *name ) { … … 223 219 newnode->name = assign_strptr( name ); 224 220 return newnode; 225 } 221 } // DeclarationNode::newName 226 222 227 223 DeclarationNode *DeclarationNode::newFromTypeGen( std::string *name, ExpressionNode *params ) { … … 232 228 newnode->type->symbolic->actuals = params; 233 229 return newnode; 234 } 230 } // DeclarationNode::newFromTypeGen 235 231 236 232 DeclarationNode *DeclarationNode::newTypeParam( TypeClass tc, std::string *name ) { … … 241 237 newnode->type->variable->name = newnode->name; 242 238 return newnode; 243 } 244 245 DeclarationNode *DeclarationNode::new Context( std::string *name, DeclarationNode *params, DeclarationNode *asserts ) {239 } // DeclarationNode::newTypeParam 240 241 DeclarationNode *DeclarationNode::newTrait( std::string *name, DeclarationNode *params, DeclarationNode *asserts ) { 246 242 DeclarationNode *newnode = new DeclarationNode; 247 243 newnode->type = new TypeData( TypeData::Aggregate ); 248 newnode->type->aggregate->kind = Context;244 newnode->type->aggregate->kind = Trait; 249 245 newnode->type->aggregate->params = params; 250 246 newnode->type->aggregate->fields = asserts; 251 247 newnode->type->aggregate->name = assign_strptr( name ); 252 248 return newnode; 253 } 254 255 DeclarationNode *DeclarationNode::new ContextUse( std::string *name, ExpressionNode *params ) {249 } // DeclarationNode::newTrait 250 251 DeclarationNode *DeclarationNode::newTraitUse( std::string *name, ExpressionNode *params ) { 256 252 DeclarationNode *newnode = new DeclarationNode; 257 253 newnode->type = new TypeData( TypeData::AggregateInst ); 258 254 newnode->type->aggInst->aggregate = new TypeData( TypeData::Aggregate ); 259 newnode->type->aggInst->aggregate->aggregate->kind = Context;255 newnode->type->aggInst->aggregate->aggregate->kind = Trait; 260 256 newnode->type->aggInst->aggregate->aggregate->name = assign_strptr( name ); 261 257 newnode->type->aggInst->params = params; 262 258 return newnode; 263 } 259 } // DeclarationNode::newTraitUse 264 260 265 261 DeclarationNode *DeclarationNode::newTypeDecl( std::string *name, DeclarationNode *typeParams ) { … … 271 267 newnode->type->symbolic->name = newnode->name; 272 268 return newnode; 273 } 269 } // DeclarationNode::newTypeDecl 274 270 275 271 DeclarationNode *DeclarationNode::newPointer( DeclarationNode *qualifiers ) { … … 277 273 newnode->type = new TypeData( TypeData::Pointer ); 278 274 return newnode->addQualifiers( qualifiers ); 279 } 275 } // DeclarationNode::newPointer 280 276 281 277 DeclarationNode *DeclarationNode::newArray( ExpressionNode *size, DeclarationNode *qualifiers, bool isStatic ) { … … 290 286 } // if 291 287 return newnode->addQualifiers( qualifiers ); 292 } 288 } // DeclarationNode::newArray 293 289 294 290 DeclarationNode *DeclarationNode::newVarArray( DeclarationNode *qualifiers ) { … … 794 790 errors.append( e ); 795 791 } // try 796 cur = dynamic_cast< 792 cur = dynamic_cast<DeclarationNode *>( cur->get_link() ); 797 793 } // while 798 794 if ( ! errors.isEmpty() ) { … … 881 877 ret = new UnionInstType( type->buildQualifiers(), type->aggregate->name ); 882 878 break; 883 case DeclarationNode:: Context:884 ret = new ContextInstType( type->buildQualifiers(), type->aggregate->name );879 case DeclarationNode::Trait: 880 ret = new TraitInstType( type->buildQualifiers(), type->aggregate->name ); 885 881 break; 886 882 default: -
src/Parser/ExpressionNode.cc
rc5833e8 r0f9e4403 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 : 2 7112 // Last Modified On : Fri Apr 8 15:43:05 2016 13 // Update Count : 296 14 14 // 15 15 … … 22 22 23 23 #include "ParseNode.h" 24 #include "TypeData.h" 24 25 #include "SynTree/Constant.h" 25 26 #include "SynTree/Expression.h" 27 #include "SynTree/Declaration.h" 26 28 #include "Common/UnimplementedError.h" 27 29 #include "parseutility.h" … … 487 489 args.front() = new AddressExpr( args.front() ); 488 490 break; 489 default: 490 /* do nothing */ 491 default: // do nothing 491 492 ; 492 } 493 } // switch 493 494 494 495 switch ( op->get_type() ) { … … 873 874 } 874 875 876 877 CompoundLiteralNode::CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids ) : type( type ), kids( kids ) {} 878 CompoundLiteralNode::CompoundLiteralNode( const CompoundLiteralNode &other ) : ExpressionNode( other ), type( other.type ), kids( other.kids ) {} 879 880 CompoundLiteralNode::~CompoundLiteralNode() { 881 delete kids; 882 delete type; 883 } 884 885 CompoundLiteralNode *CompoundLiteralNode::clone() const { 886 return new CompoundLiteralNode( *this ); 887 } 888 889 void CompoundLiteralNode::print( std::ostream &os, int indent ) const { 890 os << string( indent,' ' ) << "CompoundLiteralNode:" << endl; 891 892 os << string( indent + 2, ' ' ) << "type:" << endl; 893 if ( type != 0 ) 894 type->print( os, indent + 4 ); 895 896 os << string( indent + 2, ' ' ) << "initialization:" << endl; 897 if ( kids != 0 ) 898 kids->printList( os, indent + 4 ); 899 } 900 901 void CompoundLiteralNode::printOneLine( std::ostream &os, int indent ) const { 902 os << "( "; 903 if ( type ) type->print( os ); 904 os << ", "; 905 if ( kids ) kids->printOneLine( os ); 906 os << ") "; 907 } 908 909 Expression *CompoundLiteralNode::build() const { 910 Declaration * newDecl = type->build(); // compound literal type 911 if ( DeclarationWithType * newDeclWithType = dynamic_cast< DeclarationWithType * >( newDecl ) ) { // non-sue compound-literal type 912 return new CompoundLiteralExpr( newDeclWithType->get_type(), kids->build() ); 913 // these types do not have associated type information 914 } else if ( StructDecl * newDeclStructDecl = dynamic_cast< StructDecl * >( newDecl ) ) { 915 return new CompoundLiteralExpr( new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() ), kids->build() ); 916 } else if ( UnionDecl * newDeclUnionDecl = dynamic_cast< UnionDecl * >( newDecl ) ) { 917 return new CompoundLiteralExpr( new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() ), kids->build() ); 918 } else if ( EnumDecl * newDeclEnumDecl = dynamic_cast< EnumDecl * >( newDecl ) ) { 919 return new CompoundLiteralExpr( new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() ), kids->build() ); 920 } else { 921 assert( false ); 922 } // if 923 } 924 925 875 926 ExpressionNode *flattenCommas( ExpressionNode *list ) { 876 927 if ( CompositeExprNode *composite = dynamic_cast< CompositeExprNode * >( list ) ) { -
src/Parser/ParseNode.h
rc5833e8 r0f9e4403 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // ParseNode.h -- 7 // ParseNode.h -- 8 8 // 9 9 // Author : Rodolfo G. Esteves 10 10 // Created On : Sat May 16 13:28:16 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Mon Feb 1 13:32:32 201613 // Update Count : 18411 // Last Modified By : Rob Schluntz 12 // Last Modified On : Mon Apr 11 11:50:52 2016 13 // Update Count : 205 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 … … 177 177 enum Type { TupleC, Comma, TupleFieldSel, // n-adic 178 178 // triadic 179 Cond, NCond, 179 Cond, NCond, 180 180 // diadic 181 SizeOf, AlignOf, OffsetOf, Attr, CompLit, Plus, Minus, Mul, Div, Mod, Or, And, 182 BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq, 181 SizeOf, AlignOf, OffsetOf, Attr, CompLit, Plus, Minus, Mul, Div, Mod, Or, And, 182 BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq, 183 183 Assign, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn, 184 184 Index, FieldSel, PFieldSel, Range, … … 309 309 ValofExprNode( const ValofExprNode &other ); 310 310 ~ValofExprNode(); 311 311 312 312 virtual ValofExprNode *clone() const { return new ValofExprNode( *this ); } 313 313 … … 329 329 enum BasicType { Char, Int, Float, Double, Void, Bool, Complex, Imaginary }; 330 330 enum Modifier { Signed, Unsigned, Short, Long }; 331 enum Aggregate { Struct, Union, Context };331 enum Aggregate { Struct, Union, Trait }; 332 332 enum TypeClass { Type, Dtype, Ftype }; 333 334 static const char *storageName[]; 333 enum BuiltinType { Valist }; 334 335 static const char *storageName[]; 335 336 static const char *qualifierName[]; 336 337 static const char *basicTypeName[]; … … 338 339 static const char *aggregateName[]; 339 340 static const char *typeClassName[]; 341 static const char *builtinTypeName[]; 340 342 341 343 static DeclarationNode *newFunction( std::string *name, DeclarationNode *ret, DeclarationNode *param, StatementNode *body, bool newStyle = false ); … … 352 354 static DeclarationNode *newFromTypeGen( std::string *, ExpressionNode *params ); 353 355 static DeclarationNode *newTypeParam( TypeClass, std::string *); 354 static DeclarationNode *new Context( std::string *name, DeclarationNode *params, DeclarationNode *asserts );355 static DeclarationNode *new ContextUse( std::string *name, ExpressionNode *params );356 static DeclarationNode *newTrait( std::string *name, DeclarationNode *params, DeclarationNode *asserts ); 357 static DeclarationNode *newTraitUse( std::string *name, ExpressionNode *params ); 356 358 static DeclarationNode *newTypeDecl( std::string *name, DeclarationNode *typeParams ); 357 359 static DeclarationNode *newPointer( DeclarationNode *qualifiers ); … … 363 365 static DeclarationNode *newAttr( std::string *, ExpressionNode *expr ); 364 366 static DeclarationNode *newAttr( std::string *, DeclarationNode *type ); 367 static DeclarationNode *newBuiltinType( BuiltinType ); 365 368 366 369 DeclarationNode *addQualifiers( DeclarationNode *); … … 401 404 LinkageSpec::Type get_linkage() const { return linkage; } 402 405 DeclarationNode *extractAggregate() const; 406 ExpressionNode *get_enumeratorValue() const { return enumeratorValue; } 403 407 404 408 DeclarationNode(); … … 413 417 std::list< std::string > attributes; 414 418 ExpressionNode *bitfieldWidth; 419 ExpressionNode *enumeratorValue; 415 420 InitializerNode *initializer; 416 421 bool hasEllipsis; … … 422 427 class StatementNode : public ParseNode { 423 428 public: 424 enum Type { Exp, If, Switch, Case, Default, Choose, Fallthru, 429 enum Type { Exp, If, Switch, Case, Default, Choose, Fallthru, 425 430 While, Do, For, 426 431 Goto, Continue, Break, Return, Throw, … … 530 535 bool aggregate; 531 536 ExpressionNode *designator; // may be list 537 InitializerNode *kids; 538 }; 539 540 class CompoundLiteralNode : public ExpressionNode { 541 public: 542 CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids ); 543 CompoundLiteralNode( const CompoundLiteralNode &type ); 544 ~CompoundLiteralNode(); 545 546 virtual CompoundLiteralNode *clone() const; 547 548 DeclarationNode *get_type() const { return type; } 549 CompoundLiteralNode *set_type( DeclarationNode *t ) { type = t; return this; } 550 551 InitializerNode *get_initializer() const { return kids; } 552 CompoundLiteralNode *set_initializer( InitializerNode *k ) { kids = k; return this; } 553 554 void print( std::ostream &, int indent = 0 ) const; 555 void printOneLine( std::ostream &, int indent = 0 ) const; 556 557 virtual Expression *build() const; 558 private: 559 DeclarationNode *type; 532 560 InitializerNode *kids; 533 561 }; -
src/Parser/Parser.cc
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 10 10 // Created On : Sat May 16 15:12:51 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Jul 14 14:57:23 201513 // Update Count : 3212 // Last Modified On : Wed Mar 2 17:26:45 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: … … 506 519 case Typeof: 507 520 return buildTypeof(); 521 case Builtin: 522 return new VarArgsType( buildQualifiers() ); 508 523 case Attr: 509 524 return buildAttr(); … … 805 820 buildForall( aggregate->params, at->get_parameters() ); 806 821 break; 807 case DeclarationNode:: Context:808 at = new ContextDecl( aggregate->name );822 case DeclarationNode::Trait: 823 at = new TraitDecl( aggregate->name ); 809 824 buildList( aggregate->params, at->get_parameters() ); 810 825 break; … … 845 860 ret = new UnionInstType( buildQualifiers(), aggInst->aggregate->aggregate->name ); 846 861 break; 847 case DeclarationNode:: Context:848 ret = new ContextInstType( buildQualifiers(), aggInst->aggregate->aggregate->name );862 case DeclarationNode::Trait: 863 ret = new TraitInstType( buildQualifiers(), aggInst->aggregate->aggregate->name ); 849 864 break; 850 865 default: … … 883 898 EnumDecl *ret = new EnumDecl( enumeration->name ); 884 899 buildList( enumeration->constants, ret->get_members() ); 900 std::list< Declaration * >::iterator members = ret->get_members().begin(); 901 for ( const DeclarationNode *cur = enumeration->constants; cur != NULL; cur = dynamic_cast<DeclarationNode *>( cur->get_link() ), ++members ) { 902 if ( cur->get_enumeratorValue() != NULL ) { 903 ObjectDecl *member = dynamic_cast<ObjectDecl *>(*members); 904 member->set_init( new SingleInit( maybeBuild< Expression >( cur->get_enumeratorValue() ) ) ); 905 } // if 906 } // for 885 907 return ret; 886 908 } -
src/Parser/TypeData.h
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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 : Wed Apr 13 16:57:30 2016 13 // Update Count : 24 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 35 int TypedefTable::isKind( const string &identifier ) const { 36 tableType::const_iterator id_pos = table.find( identifier ); 37 // Name lookup defaults to identifier, and then the identifier's kind is set by the parser. 38 if ( id_pos == table.end() ) return IDENTIFIER; 39 return id_pos->second.begin()->kind; 40 } 41 31 42 void TypedefTable::changeKind( const string &identifier, kind_t kind ) { 32 43 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; 44 if ( id_pos == table.end() ) return; 45 id_pos->second.begin()->kind = kind; 46 } 47 48 // SKULLDUGGERY: Generate a typedef for the aggregate name so the aggregate does not have to be qualified by 49 // "struct". Only generate the typedef, if the name is not in use. The typedef is implicitly (silently) removed 50 // if the name is explicitly used. 51 void TypedefTable::makeTypedef( const string &name ) { 52 if ( ! typedefTable.exists( name ) ) { 53 typedefTable.addToEnclosingScope( name, TypedefTable::TD ); 38 54 } // if 39 55 } 40 56 41 bool TypedefTable::isKind( const string &identifier, kind_t kind ) const {42 tableType::const_iterator id_pos = table.find( identifier );43 if ( id_pos == table.end() ) {44 return true;45 } else {46 return (*((*id_pos ).second.begin())).kind == kind;47 } // if48 }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 );60 }61 62 57 void TypedefTable::addToScope( const std::string &identifier, kind_t kind, int scope ) { 63 if ( current Context != "" && scope == contextScope ) {58 if ( currentTrait != "" && scope == contextScope ) { 64 59 DeferredEntry entry = { identifier, kind }; 65 contexts[current Context].push_back( entry );60 contexts[currentTrait].push_back( entry ); 66 61 } else { 67 62 debugPrint( "Adding " << identifier << " as kind " << kind << " scope " << scope << " from scope " << currentScope << endl ); … … 112 107 } 113 108 114 void TypedefTable::open Context( const std::string &contextName ) {109 void TypedefTable::openTrait( const std::string &contextName ) { 115 110 map< string, deferListType >::iterator i = contexts.find( contextName ); 116 111 if ( i != contexts.end() ) { … … 150 145 } 151 146 152 void TypedefTable::enter Context( const std::string &contextName ) {153 current Context = contextName;147 void TypedefTable::enterTrait( const std::string &contextName ) { 148 currentTrait = contextName; 154 149 contextScope = currentScope; 155 150 } 156 151 157 void TypedefTable::leave Context() {158 current Context = "";152 void TypedefTable::leaveTrait() { 153 currentTrait = ""; 159 154 } 160 155 -
src/Parser/TypedefTable.h
rc5833e8 r0f9e4403 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 : Wed Apr 13 16:59:56 2016 13 // Update Count : 27 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;58 bool exists( const std::string &identifier ); 59 int isKind( const std::string &identifier ) const; 60 void changeKind( const std::string &identifier, kind_t kind ); 59 61 60 void changeKind( const std::string &identifier, kind_t kind);61 62 void makeTypedef( const std::string &name ); 63 62 64 // "addToCurrentScope" adds the identifier/type pair to the current scope. This does less than you think it does, 63 65 // since each declaration is within its own scope. Mostly useful for type parameters. … … 79 81 80 82 // dump the definitions from a pre-defined context into the current scope 81 void open Context( const std::string &contextName );83 void openTrait( const std::string &contextName ); 82 84 83 85 void enterScope(); 84 86 void leaveScope(); 85 void enter Context( const std::string &contextName );86 void leave Context();87 void enterTrait( const std::string &contextName ); 88 void leaveTrait(); 87 89 88 90 void print() const; -
src/Parser/lex.cc
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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 11449 590 593 591 594 /* YYNTOKENS -- Number of terminals. */ 592 #define YYNTOKENS 13 2595 #define YYNTOKENS 133 593 596 /* YYNNTS -- Number of nonterminals. */ 594 #define YYNNTS 2 38597 #define YYNNTS 240 595 598 /* YYNRULES -- Number of rules. */ 596 #define YYNRULES 75 1599 #define YYNRULES 754 597 600 /* YYNRULES -- Number of states. */ 598 #define YYNSTATES 15 78601 #define YYNSTATES 1581 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 138 4, 1387, 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 15 30, 1534, 1538, 1540, 1543, 1545, 1549, 1551, 1553, 1555,698 1557, 1559, 1561, 1563, 1565, 1567, 1569, 1571, 157 4, 1576,699 157 8, 1580, 1583, 1584, 1587, 1590, 1592, 1597, 1598, 1600,700 1603, 160 7, 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 1707, 17 13, 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 20 49, 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 22 52, 2254, 2257, 2260, 2262, 2264, 2267, 2271, 2275, 2278,718 22 83, 2290, 2299, 2301, 2304, 2307, 2309, 2312, 2315, 2319,719 23 23, 2325, 2330, 2335, 2339, 2345, 2354, 2358, 2361, 2365,720 236 7, 2373, 2379, 2386, 2393, 2395, 2398, 2401, 2403, 2406,721 240 9, 2413, 2417, 2419, 2424, 2429, 2433, 2439, 2448, 2452,722 24 54, 2457, 2459, 2462, 2469, 2475, 2482, 2490, 2498, 2500,723 2 503, 2506, 2508, 2511, 2514, 2518, 2522, 2524, 2529, 2534,724 253 8, 2547, 2551, 2553, 2555, 2558, 2560, 2562, 2565, 2569,725 25 72, 2576, 2579, 2583, 2587, 2590, 2595, 2599, 2602, 2606,726 260 9, 2614, 2618, 2621, 2628, 2635, 2642, 2650, 2652, 2655,727 265 7, 2659, 2661, 2664, 2668, 2671, 2675, 2678, 2682, 2686,728 26 91, 2694, 2698, 2703, 2706, 2712, 2718, 2725, 2732, 2733,729 273 5, 2736690 1197, 1199, 1201, 1203, 1205, 1207, 1210, 1213, 1217, 1221, 691 1223, 1227, 1229, 1232, 1235, 1238, 1243, 1248, 1253, 1258, 692 1260, 1263, 1266, 1270, 1272, 1275, 1278, 1280, 1283, 1286, 693 1290, 1292, 1295, 1298, 1300, 1302, 1307, 1310, 1311, 1318, 694 1326, 1329, 1332, 1335, 1337, 1340, 1343, 1347, 1350, 1354, 695 1356, 1359, 1363, 1366, 1369, 1374, 1375, 1377, 1380, 1383, 696 1385, 1386, 1388, 1391, 1394, 1400, 1403, 1404, 1412, 1415, 697 1420, 1421, 1424, 1425, 1427, 1429, 1431, 1437, 1443, 1449, 698 1451, 1457, 1463, 1473, 1475, 1481, 1482, 1484, 1486, 1492, 699 1494, 1496, 1502, 1508, 1510, 1514, 1518, 1523, 1525, 1527, 700 1529, 1531, 1534, 1536, 1540, 1544, 1546, 1549, 1551, 1555, 701 1557, 1559, 1561, 1563, 1565, 1567, 1569, 1571, 1573, 1575, 702 1577, 1580, 1582, 1584, 1586, 1589, 1590, 1593, 1596, 1598, 703 1603, 1604, 1606, 1609, 1613, 1618, 1621, 1624, 1626, 1629, 704 1631, 1634, 1640, 1646, 1654, 1661, 1663, 1666, 1669, 1673, 705 1675, 1678, 1681, 1686, 1689, 1694, 1695, 1700, 1703, 1705, 706 1707, 1709, 1710, 1713, 1719, 1725, 1739, 1741, 1743, 1747, 707 1751, 1754, 1758, 1762, 1765, 1770, 1772, 1779, 1789, 1790, 708 1802, 1804, 1808, 1812, 1816, 1818, 1820, 1826, 1829, 1835, 709 1836, 1838, 1840, 1844, 1845, 1847, 1849, 1851, 1853, 1854, 710 1861, 1864, 1866, 1869, 1874, 1877, 1881, 1885, 1889, 1894, 711 1900, 1906, 1912, 1919, 1921, 1923, 1925, 1929, 1930, 1936, 712 1937, 1939, 1941, 1944, 1951, 1953, 1957, 1958, 1960, 1965, 713 1967, 1969, 1971, 1973, 1976, 1978, 1981, 1984, 1986, 1990, 714 1993, 1997, 2001, 2004, 2009, 2014, 2018, 2027, 2031, 2034, 715 2036, 2039, 2046, 2055, 2059, 2062, 2066, 2070, 2075, 2080, 716 2084, 2086, 2088, 2090, 2095, 2102, 2106, 2109, 2113, 2117, 717 2122, 2127, 2131, 2134, 2136, 2139, 2142, 2144, 2148, 2151, 718 2155, 2159, 2162, 2167, 2172, 2176, 2183, 2192, 2196, 2199, 719 2201, 2204, 2207, 2210, 2214, 2218, 2221, 2226, 2231, 2235, 720 2242, 2251, 2255, 2258, 2260, 2263, 2266, 2268, 2270, 2273, 721 2277, 2281, 2284, 2289, 2296, 2305, 2307, 2310, 2313, 2315, 722 2318, 2321, 2325, 2329, 2331, 2336, 2341, 2345, 2351, 2360, 723 2364, 2367, 2371, 2373, 2379, 2385, 2392, 2399, 2401, 2404, 724 2407, 2409, 2412, 2415, 2419, 2423, 2425, 2430, 2435, 2439, 725 2445, 2454, 2458, 2460, 2463, 2465, 2468, 2475, 2481, 2488, 726 2496, 2504, 2506, 2509, 2512, 2514, 2517, 2520, 2524, 2528, 727 2530, 2535, 2540, 2544, 2553, 2557, 2559, 2561, 2564, 2566, 728 2568, 2571, 2575, 2578, 2582, 2585, 2589, 2593, 2596, 2601, 729 2605, 2608, 2612, 2615, 2620, 2624, 2627, 2634, 2641, 2648, 730 2656, 2658, 2661, 2663, 2665, 2667, 2670, 2674, 2677, 2681, 731 2684, 2688, 2692, 2697, 2700, 2704, 2709, 2712, 2718, 2724, 732 2731, 2738, 2739, 2741, 2742 730 733 }; 731 734 … … 733 736 static const yytype_int16 yyrhs[] = 734 737 { 735 298, 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 2 68, 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 301, 0, -1, -1, -1, 79, -1, 80, -1, 81, 739 -1, 72, -1, 76, -1, 140, -1, 72, -1, 76, 740 -1, 72, -1, 140, -1, 83, -1, 84, -1, 82, 741 -1, 141, 82, -1, 72, -1, 140, -1, 109, 168, 742 110, -1, 109, 172, 110, -1, 142, -1, 143, 111, 743 134, 163, 135, 112, -1, 143, 109, 144, 110, -1, 744 143, 113, 139, -1, 143, 113, 111, 134, 146, 135, 745 112, -1, 143, 85, 139, -1, 143, 85, 111, 134, 746 146, 135, 112, -1, 143, 86, -1, 143, 87, -1, 747 109, 274, 110, 114, 278, 371, 115, -1, 143, 114, 748 144, 115, -1, 145, -1, 144, 116, 145, -1, -1, 749 163, -1, 139, 117, 163, -1, 111, 134, 163, 135, 750 112, 117, 163, -1, 111, 134, 163, 116, 166, 135, 751 112, 117, 163, -1, 147, -1, 146, 116, 147, -1, 752 139, -1, 139, 113, 147, -1, 139, 113, 111, 134, 753 146, 135, 112, -1, 139, 85, 147, -1, 139, 85, 754 111, 134, 146, 135, 112, -1, 143, -1, 136, -1, 755 141, -1, 86, 148, -1, 87, 148, -1, 40, 150, 756 -1, 149, 150, -1, 118, 150, -1, 119, 150, -1, 757 37, 148, -1, 37, 109, 274, 110, -1, 38, 109, 758 274, 116, 139, 110, -1, 76, -1, 76, 109, 275, 759 110, -1, 76, 109, 145, 110, -1, 66, 148, -1, 760 66, 109, 274, 110, -1, 94, 139, -1, 120, -1, 761 121, -1, 122, -1, 123, -1, 148, -1, 109, 274, 762 110, 150, -1, 109, 274, 110, 165, -1, 150, -1, 763 151, 119, 150, -1, 151, 124, 150, -1, 151, 125, 764 150, -1, 151, -1, 152, 121, 151, -1, 152, 122, 765 151, -1, 152, -1, 153, 88, 152, -1, 153, 89, 766 152, -1, 153, -1, 154, 126, 153, -1, 154, 127, 767 153, -1, 154, 90, 153, -1, 154, 91, 153, -1, 768 154, -1, 155, 92, 154, -1, 155, 93, 154, -1, 769 155, -1, 156, 120, 155, -1, 156, -1, 157, 128, 770 156, -1, 157, -1, 158, 129, 157, -1, 158, -1, 771 159, 94, 158, -1, 159, -1, 160, 95, 159, -1, 772 160, -1, 160, 130, 168, 117, 161, -1, 160, 130, 773 117, 161, -1, 160, 130, 168, 117, 165, -1, 161, 774 -1, 161, -1, 148, 131, 163, -1, 148, 167, 163, 775 -1, 165, 372, -1, -1, 163, -1, 111, 112, -1, 776 111, 134, 163, 135, 112, -1, 111, 134, 116, 166, 777 135, 112, -1, 111, 134, 163, 116, 166, 135, 112, 778 -1, 164, -1, 166, 116, 164, -1, 97, -1, 98, 779 -1, 99, -1, 100, -1, 101, -1, 102, -1, 103, 780 -1, 104, -1, 105, -1, 106, -1, 163, -1, 168, 781 116, 163, -1, -1, 168, -1, 171, -1, 172, -1, 782 176, -1, 177, -1, 189, -1, 191, -1, 192, -1, 783 197, -1, 128, 143, 114, 144, 115, 132, -1, 139, 784 117, 311, 170, -1, 114, 115, -1, 114, 134, 134, 785 208, 173, 135, 115, -1, 174, -1, 173, 134, 174, 786 -1, 211, -1, 40, 211, -1, 307, -1, 170, 135, 787 -1, 170, -1, 175, 170, -1, 169, 132, -1, 41, 788 109, 168, 110, 170, -1, 41, 109, 168, 110, 170, 789 42, 170, -1, 43, 109, 168, 110, 182, -1, 43, 790 109, 168, 110, 114, 134, 204, 183, 115, -1, 53, 791 109, 168, 110, 182, -1, 53, 109, 168, 110, 114, 792 134, 204, 185, 115, -1, 162, -1, 162, 96, 162, 793 -1, 309, -1, 178, -1, 179, 116, 178, -1, 44, 794 179, 117, -1, 45, 117, -1, 180, -1, 181, 180, 795 -1, 181, 170, -1, -1, 184, -1, 181, 175, -1, 796 184, 181, 175, -1, -1, 186, -1, 181, 188, -1, 797 181, 175, 187, -1, 186, 181, 188, -1, 186, 181, 798 175, 187, -1, -1, 188, -1, 56, -1, 56, 132, 799 -1, 47, 109, 168, 110, 170, -1, 46, 170, 47, 800 109, 168, 110, 132, -1, 48, 109, 134, 190, 110, 801 170, -1, 169, 135, 132, 169, 132, 169, -1, 211, 802 169, 132, 169, -1, 51, 139, 132, -1, 51, 119, 803 168, 132, -1, 50, 132, -1, 50, 139, 132, -1, 804 49, 132, -1, 49, 139, 132, -1, 52, 169, 132, 805 -1, 61, 164, 132, -1, 62, 164, 132, -1, 62, 806 164, 63, 163, 132, -1, 57, 172, 193, -1, 57, 807 172, 195, -1, 57, 172, 193, 195, -1, 194, -1, 808 58, 109, 96, 110, 172, -1, 194, 58, 109, 96, 809 110, 172, -1, 59, 109, 96, 110, 172, -1, 194, 810 59, 109, 96, 110, 172, -1, 58, 109, 134, 134, 811 196, 135, 110, 172, 135, -1, 194, 58, 109, 134, 812 134, 196, 135, 110, 172, 135, -1, 59, 109, 134, 813 134, 196, 135, 110, 172, 135, -1, 194, 59, 109, 814 134, 134, 196, 135, 110, 172, 135, -1, 60, 172, 815 -1, 224, -1, 224, 308, -1, 224, 356, -1, 365, 816 139, -1, 365, -1, 64, 198, 109, 141, 110, 132, 817 -1, 64, 198, 109, 141, 117, 199, 110, 132, -1, 818 64, 198, 109, 141, 117, 199, 117, 199, 110, 132, 819 -1, 64, 198, 109, 141, 117, 199, 117, 199, 117, 820 202, 110, 132, -1, 64, 198, 51, 109, 141, 117, 821 117, 199, 117, 202, 117, 203, 110, 132, -1, -1, 822 11, -1, -1, 200, -1, 201, -1, 200, 116, 201, 823 -1, 141, 109, 162, 110, -1, 111, 162, 112, 141, 824 109, 162, 110, -1, -1, 141, -1, 202, 116, 141, 825 -1, 139, -1, 203, 116, 139, -1, 135, -1, 205, 826 -1, 211, -1, 205, 134, 211, -1, 135, -1, 207, 827 -1, 221, -1, 207, 134, 221, -1, -1, 209, -1, 828 29, 210, 132, -1, 209, 29, 210, 132, -1, 273, 829 -1, 210, 116, 273, -1, 212, -1, 221, -1, 213, 830 135, 132, -1, 218, 135, 132, -1, 215, 135, 132, 831 -1, 292, 135, 132, -1, 295, 135, 132, -1, 214, 832 276, -1, 230, 214, 276, -1, 213, 135, 116, 134, 833 271, 276, -1, 366, 271, 310, -1, 369, 271, 310, 834 -1, 226, 369, 271, 310, -1, 216, -1, 226, 216, 835 -1, 230, 216, -1, 230, 226, 216, -1, 215, 135, 836 116, 134, 271, -1, 111, 112, 271, 109, 134, 259, 837 135, 110, -1, 369, 271, 109, 134, 259, 135, 110, 838 -1, 217, 271, 109, 134, 259, 135, 110, -1, 111, 839 134, 261, 135, 112, -1, 111, 134, 261, 135, 116, 840 134, 262, 135, 112, -1, 3, 214, -1, 3, 216, 841 -1, 218, 135, 116, 134, 139, -1, 3, 224, 308, 842 -1, 219, 135, 116, 134, 308, -1, 226, 3, 224, 843 308, -1, 224, 3, 308, -1, 224, 3, 226, 308, 844 -1, 3, 139, 131, 163, -1, 220, 135, 116, 134, 845 139, 131, 163, -1, 222, 135, 132, -1, 219, 135, 846 132, -1, 220, 135, 132, -1, 239, 135, 132, -1, 847 223, 308, 310, 276, -1, 222, 116, 311, 308, 310, 848 276, -1, 235, -1, 239, -1, 241, -1, 282, -1, 849 236, -1, 240, -1, 242, -1, 283, -1, -1, 226, 850 -1, 227, -1, 226, 227, -1, 228, -1, 313, -1, 851 10, -1, 12, -1, 11, -1, 14, -1, 67, -1, 852 -1, 13, 109, 229, 285, 110, -1, 231, -1, 226, 853 231, -1, 230, 226, 231, -1, 232, -1, 231, 232, 854 -1, 233, -1, 5, -1, 7, -1, 4, -1, 6, 855 -1, 8, -1, 9, -1, 69, -1, 71, -1, 16, 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 275, 110, -1, 28, 109, 168, 110, -1, 78, 109, 863 275, 110, -1, 78, 109, 168, 110, -1, 240, -1, 864 230, 240, -1, 239, 232, -1, 239, 232, 226, -1, 865 243, -1, 226, 243, -1, 240, 227, -1, 242, -1, 866 230, 242, -1, 241, 232, -1, 241, 232, 226, -1, 867 74, -1, 226, 74, -1, 242, 227, -1, 244, -1, 868 255, -1, 246, 114, 247, 115, -1, 246, 273, -1, 869 -1, 246, 273, 245, 114, 247, 115, -1, 246, 109, 870 291, 110, 114, 247, 115, -1, 246, 284, -1, 31, 871 311, -1, 32, 311, -1, 248, -1, 247, 248, -1, 872 249, 132, -1, 40, 249, 132, -1, 250, 132, -1, 873 40, 250, 132, -1, 365, -1, 365, 273, -1, 249, 874 116, 273, -1, 249, 116, -1, 224, 251, -1, 250, 875 116, 311, 251, -1, -1, 253, -1, 317, 252, -1, 876 330, 252, -1, 356, -1, -1, 253, -1, 117, 162, 877 -1, 30, 311, -1, 254, 114, 257, 371, 115, -1, 878 254, 273, -1, -1, 254, 273, 256, 114, 257, 371, 879 115, -1, 273, 258, -1, 257, 116, 273, 258, -1, 880 -1, 131, 162, -1, -1, 260, -1, 262, -1, 261, 881 -1, 261, 135, 116, 134, 262, -1, 262, 135, 116, 882 134, 96, -1, 261, 135, 116, 134, 96, -1, 266, 883 -1, 262, 135, 116, 134, 266, -1, 261, 135, 116, 884 134, 266, -1, 261, 135, 116, 134, 262, 135, 116, 885 134, 266, -1, 267, -1, 262, 135, 116, 134, 267, 886 -1, -1, 264, -1, 265, -1, 265, 135, 116, 134, 887 96, -1, 269, -1, 268, -1, 265, 135, 116, 134, 888 269, -1, 265, 135, 116, 134, 268, -1, 268, -1, 889 361, 271, 372, -1, 369, 271, 372, -1, 226, 369, 890 271, 372, -1, 216, -1, 269, -1, 361, -1, 369, 891 -1, 226, 369, -1, 370, -1, 223, 335, 372, -1, 892 223, 339, 372, -1, 223, -1, 223, 350, -1, 139, 893 -1, 270, 116, 139, -1, 137, -1, 74, -1, 75, 894 -1, 138, -1, 74, -1, 75, -1, 139, -1, 74, 895 -1, 75, -1, 365, -1, 224, -1, 224, 356, -1, 896 365, -1, 370, -1, 224, -1, 224, 344, -1, -1, 897 131, 277, -1, 107, 277, -1, 163, -1, 114, 278, 898 371, 115, -1, -1, 277, -1, 279, 277, -1, 278, 899 116, 277, -1, 278, 116, 279, 277, -1, 280, 117, 900 -1, 273, 117, -1, 281, -1, 280, 281, -1, 80, 901 -1, 113, 273, -1, 111, 134, 163, 135, 112, -1, 902 111, 134, 309, 135, 112, -1, 111, 134, 162, 96, 903 162, 135, 112, -1, 113, 111, 134, 146, 135, 112, 904 -1, 283, -1, 230, 283, -1, 282, 232, -1, 282, 905 232, 226, -1, 284, -1, 226, 284, -1, 283, 227, 906 -1, 75, 109, 291, 110, -1, 286, 372, -1, 285, 907 116, 286, 372, -1, -1, 288, 273, 287, 289, -1, 908 224, 335, -1, 33, -1, 35, -1, 34, -1, -1, 909 289, 290, -1, 129, 273, 109, 291, 110, -1, 129, 910 114, 134, 297, 115, -1, 129, 109, 134, 285, 135, 911 110, 114, 134, 297, 115, 109, 291, 110, -1, 275, 912 -1, 163, -1, 291, 116, 275, -1, 291, 116, 163, 913 -1, 33, 293, -1, 231, 33, 293, -1, 292, 116, 914 293, -1, 294, 289, -1, 294, 289, 131, 275, -1, 915 273, -1, 272, 109, 134, 285, 135, 110, -1, 36, 916 273, 109, 134, 285, 135, 110, 114, 115, -1, -1, 917 36, 273, 109, 134, 285, 135, 110, 114, 296, 297, 918 115, -1, 298, -1, 297, 134, 298, -1, 299, 135, 919 132, -1, 300, 135, 132, -1, 214, -1, 216, -1, 920 299, 135, 116, 134, 271, -1, 224, 308, -1, 300, 921 135, 116, 134, 308, -1, -1, 302, -1, 304, -1, 922 302, 134, 304, -1, -1, 302, -1, 211, -1, 306, 923 -1, 197, -1, -1, 5, 82, 305, 114, 303, 115, 924 -1, 40, 304, -1, 307, -1, 322, 172, -1, 326, 925 134, 206, 172, -1, 215, 172, -1, 223, 322, 172, 926 -1, 226, 322, 172, -1, 230, 322, 172, -1, 230, 927 226, 322, 172, -1, 223, 326, 134, 206, 172, -1, 928 226, 326, 134, 206, 172, -1, 230, 326, 134, 206, 929 172, -1, 230, 226, 326, 134, 206, 172, -1, 317, 930 -1, 322, -1, 330, -1, 162, 123, 162, -1, -1, 931 64, 109, 141, 110, 311, -1, -1, 312, -1, 313, 932 -1, 312, 313, -1, 39, 109, 109, 314, 110, 110, 933 -1, 315, -1, 314, 116, 315, -1, -1, 316, -1, 934 316, 109, 169, 110, -1, 271, -1, 233, -1, 234, 935 -1, 227, -1, 318, 311, -1, 319, -1, 320, 311, 936 -1, 321, 311, -1, 137, -1, 109, 318, 110, -1, 937 119, 317, -1, 119, 226, 317, -1, 109, 319, 110, 938 -1, 318, 348, -1, 109, 319, 110, 348, -1, 109, 939 320, 110, 349, -1, 109, 320, 110, -1, 109, 319, 940 110, 109, 134, 263, 135, 110, -1, 109, 321, 110, 941 -1, 323, 311, -1, 324, -1, 325, 311, -1, 318, 942 109, 134, 263, 135, 110, -1, 109, 324, 110, 109, 943 134, 263, 135, 110, -1, 109, 323, 110, -1, 119, 944 322, -1, 119, 226, 322, -1, 109, 324, 110, -1, 945 109, 324, 110, 348, -1, 109, 325, 110, 349, -1, 946 109, 325, 110, -1, 327, -1, 328, -1, 329, -1, 947 318, 109, 270, 110, -1, 109, 328, 110, 109, 270, 948 110, -1, 109, 327, 110, -1, 119, 326, -1, 119, 949 226, 326, -1, 109, 328, 110, -1, 109, 328, 110, 950 348, -1, 109, 329, 110, 349, -1, 109, 329, 110, 951 -1, 331, 311, -1, 332, -1, 333, 311, -1, 334, 952 311, -1, 340, -1, 109, 331, 110, -1, 119, 330, 953 -1, 119, 226, 330, -1, 109, 332, 110, -1, 331, 954 348, -1, 109, 332, 110, 348, -1, 109, 333, 110, 955 349, -1, 109, 333, 110, -1, 331, 109, 134, 263, 956 135, 110, -1, 109, 332, 110, 109, 134, 263, 135, 957 110, -1, 109, 334, 110, -1, 318, 311, -1, 336, 958 -1, 337, 311, -1, 338, 311, -1, 119, 335, -1, 959 119, 226, 335, -1, 109, 336, 110, -1, 318, 354, 960 -1, 109, 336, 110, 348, -1, 109, 337, 110, 349, 961 -1, 109, 337, 110, -1, 318, 109, 134, 263, 135, 962 110, -1, 109, 336, 110, 109, 134, 263, 135, 110, 963 -1, 109, 338, 110, -1, 340, 311, -1, 341, -1, 964 342, 311, -1, 343, 311, -1, 74, -1, 75, -1, 965 119, 339, -1, 119, 226, 339, -1, 109, 341, 110, 966 -1, 340, 354, -1, 109, 341, 110, 354, -1, 340, 967 109, 134, 263, 135, 110, -1, 109, 341, 110, 109, 968 134, 263, 135, 110, -1, 345, -1, 346, 311, -1, 969 347, 311, -1, 119, -1, 119, 226, -1, 119, 344, 970 -1, 119, 226, 344, -1, 109, 345, 110, -1, 348, 971 -1, 109, 345, 110, 348, -1, 109, 346, 110, 349, 972 -1, 109, 346, 110, -1, 109, 134, 263, 135, 110, 973 -1, 109, 345, 110, 109, 134, 263, 135, 110, -1, 974 109, 347, 110, -1, 111, 112, -1, 111, 112, 349, 975 -1, 349, -1, 111, 134, 163, 135, 112, -1, 111, 976 134, 119, 135, 112, -1, 349, 111, 134, 163, 135, 977 112, -1, 349, 111, 134, 119, 135, 112, -1, 351, 978 -1, 352, 311, -1, 353, 311, -1, 119, -1, 119, 979 226, -1, 119, 350, -1, 119, 226, 350, -1, 109, 980 351, 110, -1, 354, -1, 109, 351, 110, 354, -1, 981 109, 352, 110, 349, -1, 109, 352, 110, -1, 109, 982 134, 263, 135, 110, -1, 109, 351, 110, 109, 134, 983 263, 135, 110, -1, 109, 353, 110, -1, 355, -1, 984 355, 349, -1, 349, -1, 111, 112, -1, 111, 134, 985 226, 119, 135, 112, -1, 111, 134, 226, 135, 112, 986 -1, 111, 134, 226, 163, 135, 112, -1, 111, 134, 987 7, 225, 163, 135, 112, -1, 111, 134, 226, 7, 988 163, 135, 112, -1, 357, -1, 358, 311, -1, 359, 989 311, -1, 119, -1, 119, 226, -1, 119, 356, -1, 990 119, 226, 356, -1, 109, 357, 110, -1, 348, -1, 991 109, 357, 110, 348, -1, 109, 358, 110, 349, -1, 992 109, 358, 110, -1, 109, 357, 110, 109, 134, 263, 993 135, 110, -1, 109, 359, 110, -1, 361, -1, 369, 994 -1, 226, 369, -1, 362, -1, 363, -1, 119, 224, 995 -1, 226, 119, 224, -1, 119, 370, -1, 226, 119, 996 370, -1, 119, 360, -1, 226, 119, 360, -1, 111, 997 112, 224, -1, 364, 224, -1, 111, 112, 349, 224, 998 -1, 364, 349, 224, -1, 349, 224, -1, 111, 112, 999 362, -1, 364, 362, -1, 111, 112, 349, 362, -1, 1000 364, 349, 362, -1, 349, 362, -1, 111, 134, 226, 1001 119, 135, 112, -1, 111, 134, 226, 163, 135, 112, 1002 -1, 111, 134, 230, 163, 135, 112, -1, 111, 134, 1003 230, 226, 163, 135, 112, -1, 369, -1, 226, 369, 1004 -1, 366, -1, 367, -1, 368, -1, 119, 224, -1, 1005 226, 119, 224, -1, 119, 370, -1, 226, 119, 370, 1006 -1, 119, 365, -1, 226, 119, 365, -1, 111, 112, 1007 224, -1, 111, 112, 349, 224, -1, 349, 224, -1, 1008 111, 112, 367, -1, 111, 112, 349, 367, -1, 349, 1009 367, -1, 111, 134, 262, 135, 112, -1, 111, 112, 1010 109, 259, 110, -1, 369, 109, 134, 259, 135, 110, 1011 -1, 217, 109, 134, 259, 135, 110, -1, -1, 116, 1012 -1, -1, 131, 163, -1 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 15 07, 1512, 1516, 1518, 1520, 1525, 1527, 1533, 1534, 1542,1054 154 3, 1547, 1548, 1549, 1551, 1553, 1560, 1561, 1563, 1565,1055 157 0, 1571, 1577, 1578, 1582, 1583, 1588, 1589, 1590, 1592,1056 160 0, 1601, 1603, 1606, 1608, 1612, 1613, 1614, 1616, 1618,1057 162 2, 1627, 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 17 03, 1704, 1719, 1720, 1725, 1726, 1734, 1736, 1738, 1741,1061 17 43, 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 20 89, 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 22 07, 2212, 2214, 2216, 2221, 2223, 2225, 2234, 2235, 2236,1073 224 0, 2242, 2244, 2249, 2251, 2253, 2258, 2260, 2262, 2277,1074 227 9, 2280, 2282, 2287, 2288, 2293, 2295, 2297, 2302, 2304,1075 23 06, 2308, 2313, 2315, 2317, 2327, 2329, 2330, 2332, 2337,1076 23 39, 2341, 2346, 2348, 2350, 2352, 2357, 2359, 2361, 2392,1077 23 94, 2395, 2397, 2402, 2407, 2415, 2417, 2419, 2424, 2426,1078 243 1, 2433, 2447, 2448, 2450, 2455, 2457, 2459, 2461, 2463,1079 24 68, 2469, 2471, 2473, 2478, 2480, 2482, 2488, 2490, 2492,1080 2 496, 2498, 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 26 25, 2627, 2635, 2636, 2637, 2642, 2643, 2647, 2649, 2651,1085 26 53, 2655, 2657, 2664, 2666, 2668, 2670, 2672, 2674, 2676,1086 26 78, 2680, 2682, 2687, 2689, 2691, 2696, 2722, 2723, 2725,1087 27 29, 2730, 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, 1445, 1444, 1448, 1055 1450, 1455, 1457, 1462, 1464, 1469, 1470, 1472, 1473, 1478, 1056 1479, 1481, 1483, 1488, 1490, 1496, 1497, 1499, 1502, 1505, 1057 1510, 1511, 1516, 1521, 1525, 1527, 1533, 1532, 1539, 1541, 1058 1547, 1548, 1556, 1557, 1561, 1562, 1563, 1565, 1567, 1574, 1059 1575, 1577, 1579, 1584, 1585, 1591, 1592, 1596, 1597, 1602, 1060 1603, 1604, 1606, 1614, 1615, 1617, 1620, 1622, 1626, 1627, 1061 1628, 1630, 1632, 1636, 1641, 1649, 1650, 1659, 1661, 1666, 1062 1667, 1668, 1672, 1673, 1674, 1678, 1679, 1680, 1684, 1685, 1063 1686, 1691, 1692, 1693, 1694, 1700, 1701, 1703, 1708, 1709, 1064 1714, 1715, 1716, 1717, 1718, 1733, 1734, 1739, 1740, 1748, 1065 1750, 1752, 1755, 1757, 1759, 1782, 1783, 1785, 1787, 1792, 1066 1793, 1795, 1800, 1805, 1806, 1812, 1811, 1815, 1819, 1821, 1067 1823, 1829, 1830, 1835, 1840, 1842, 1847, 1849, 1850, 1852, 1068 1857, 1859, 1861, 1866, 1868, 1873, 1878, 1886, 1892, 1891, 1069 1905, 1906, 1911, 1912, 1916, 1921, 1926, 1934, 1939, 1950, 1070 1951, 1962, 1963, 1969, 1970, 1974, 1975, 1976, 1979, 1978, 1071 1989, 1994, 1999, 2005, 2014, 2020, 2026, 2032, 2038, 2046, 1072 2052, 2060, 2066, 2075, 2076, 2077, 2081, 2085, 2087, 2092, 1073 2093, 2097, 2098, 2103, 2109, 2110, 2113, 2115, 2116, 2120, 1074 2121, 2122, 2123, 2157, 2159, 2160, 2162, 2167, 2172, 2177, 1075 2179, 2181, 2186, 2188, 2190, 2192, 2197, 2199, 2209, 2211, 1076 2212, 2217, 2219, 2221, 2226, 2228, 2230, 2235, 2237, 2239, 1077 2248, 2249, 2250, 2254, 2256, 2258, 2263, 2265, 2267, 2272, 1078 2274, 2276, 2291, 2293, 2294, 2296, 2301, 2302, 2307, 2309, 1079 2311, 2316, 2318, 2320, 2322, 2327, 2329, 2331, 2341, 2343, 1080 2344, 2346, 2351, 2353, 2355, 2360, 2362, 2364, 2366, 2371, 1081 2373, 2375, 2406, 2408, 2409, 2411, 2416, 2421, 2429, 2431, 1082 2433, 2438, 2440, 2445, 2447, 2461, 2462, 2464, 2469, 2471, 1083 2473, 2475, 2477, 2482, 2483, 2485, 2487, 2492, 2494, 2496, 1084 2502, 2504, 2506, 2510, 2512, 2514, 2516, 2530, 2531, 2533, 1085 2538, 2540, 2542, 2544, 2546, 2551, 2552, 2554, 2556, 2561, 1086 2563, 2565, 2571, 2572, 2574, 2583, 2586, 2588, 2591, 2593, 1087 2595, 2608, 2609, 2611, 2616, 2618, 2620, 2622, 2624, 2629, 1088 2630, 2632, 2634, 2639, 2641, 2649, 2650, 2651, 2656, 2657, 1089 2661, 2663, 2665, 2667, 2669, 2671, 2678, 2680, 2682, 2684, 1090 2686, 2688, 2690, 2692, 2694, 2696, 2701, 2703, 2705, 2710, 1091 2736, 2737, 2739, 2743, 2744, 2748, 2750, 2752, 2754, 2756, 1092 2758, 2765, 2767, 2769, 2771, 2773, 2775, 2780, 2785, 2787, 1093 2789, 2807, 2809, 2814, 2815 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", … … 1152 1156 "sue_declaration_specifier", "sue_type_specifier", 1153 1157 "typedef_declaration_specifier", "typedef_type_specifier", 1154 "elaborated_type_name", "aggregate_name", " aggregate_key",1158 "elaborated_type_name", "aggregate_name", "$@2", "aggregate_key", 1155 1159 "field_declaration_list", "field_declaration", 1156 1160 "new_field_declaring_list", "field_declaring_list", "field_declarator", 1157 1161 "bit_subrange_size_opt", "bit_subrange_size", "enum_key", "enum_name", 1158 " enumerator_list", "enumerator_value_opt", "new_parameter_type_list_opt",1159 "new_parameter_type_list ", "new_parameter_list",1160 "new_ abstract_parameter_list", "parameter_type_list_opt",1161 "parameter_type_list ", "parameter_list", "new_parameter_declaration",1162 "new_ abstract_parameter_declaration", "parameter_declaration",1163 " abstract_parameter_declaration", "identifier_list",1164 "identifier_ or_type_name", "no_01_identifier_or_type_name",1165 "no_ attr_identifier_or_type_name", "type_name_no_function", "type_name",1166 " initializer_opt", "initializer", "initializer_list", "designation",1167 " designator_list", "designator", "typegen_declaration_specifier",1168 "typegen_ type_specifier", "typegen_name", "type_parameter_list",1169 "type _parameter", "$@2", "type_class", "assertion_list_opt", "assertion",1170 "type_ name_list", "type_declaring_list", "type_declarator",1171 "type_declar ator_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",1162 "$@3", "enumerator_list", "enumerator_value_opt", 1163 "new_parameter_type_list_opt", "new_parameter_type_list", 1164 "new_parameter_list", "new_abstract_parameter_list", 1165 "parameter_type_list_opt", "parameter_type_list", "parameter_list", 1166 "new_parameter_declaration", "new_abstract_parameter_declaration", 1167 "parameter_declaration", "abstract_parameter_declaration", 1168 "identifier_list", "identifier_or_type_name", 1169 "no_01_identifier_or_type_name", "no_attr_identifier_or_type_name", 1170 "type_name_no_function", "type_name", "initializer_opt", "initializer", 1171 "initializer_list", "designation", "designator_list", "designator", 1172 "typegen_declaration_specifier", "typegen_type_specifier", 1173 "typegen_name", "type_parameter_list", "type_parameter", "$@4", 1174 "type_class", "assertion_list_opt", "assertion", "type_name_list", 1175 "type_declaring_list", "type_declarator", "type_declarator_name", 1176 "trait_specifier", "$@5", "trait_declaration_list", "trait_declaration", 1177 "new_trait_declaring_list", "trait_declaring_list", "translation_unit", 1178 "external_definition_list", "external_definition_list_opt", 1179 "external_definition", "$@6", "external_function_definition", 1180 "function_definition", "declarator", "subrange", "asm_name_opt", 1181 "attribute_list_opt", "attribute_list", "attribute", 1182 "attribute_parameter_list", "attrib", "any_word", "variable_declarator", 1183 "paren_identifier", "variable_ptr", "variable_array", 1184 "variable_function", "function_declarator", "function_no_ptr", 1185 "function_ptr", "function_array", "old_function_declarator", 1186 "old_function_no_ptr", "old_function_ptr", "old_function_array", 1187 "type_redeclarator", "paren_type", "type_ptr", "type_array", 1188 "type_function", "identifier_parameter_declarator", 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 244, 24 5, 245, 246, 246, 246, 246, 247, 247, 247,1269 24 7, 248, 248, 249, 249, 249, 249, 249, 250, 250,1270 25 1, 252, 253, 253, 253, 254, 254, 255, 255, 256,1271 25 6, 257, 257, 257, 257, 257, 258, 258, 258, 258,1272 2 59, 259, 260, 260, 261, 261, 262, 262, 262, 262,1273 26 3, 263, 263, 263, 263, 264, 264, 264, 264, 264,1274 26 5, 265, 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 2 78, 278, 279, 279, 279, 279, 280, 280, 280, 281,1279 28 2, 282, 284, 283, 283, 285, 285, 285, 286, 286,1280 28 7, 287, 287, 288, 288, 288, 288, 289, 289, 289,1281 29 0, 290, 291, 291, 292, 293, 292, 294, 294, 295,1282 29 5, 296, 296, 296, 297, 297, 298, 298, 299, 299,1283 30 0, 300, 301, 301, 301, 302, 301, 301, 303, 303,1284 30 3, 304, 304, 304, 304, 304, 304, 304, 304, 304,1285 30 5, 305, 305, 306, 307, 307, 308, 308, 309, 309,1286 31 0, 311, 311, 312, 312, 312, 313, 313, 313, 313,1287 31 4, 314, 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 32 4, 324, 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 34 0, 340, 341, 341, 341, 342, 342, 342, 342, 342,1296 34 3, 343, 343, 343, 344, 344, 344, 345, 345, 345,1297 34 6, 346, 346, 346, 347, 347, 347, 348, 348, 348,1298 3 48, 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 35 6, 356, 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 36 3, 363, 364, 364, 364, 364, 364, 364, 365, 365,1305 36 5, 365, 365, 365, 366, 367, 367, 367, 368, 368,1306 3 69, 3691235 0, 133, 134, 135, 136, 136, 136, 137, 137, 137, 1236 138, 138, 139, 139, 140, 140, 141, 141, 142, 142, 1237 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 1238 143, 143, 143, 144, 144, 145, 145, 145, 145, 145, 1239 146, 146, 147, 147, 147, 147, 147, 148, 148, 148, 1240 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 1241 148, 148, 148, 148, 148, 149, 149, 149, 149, 150, 1242 150, 150, 151, 151, 151, 151, 152, 152, 152, 153, 1243 153, 153, 154, 154, 154, 154, 154, 155, 155, 155, 1244 156, 156, 157, 157, 158, 158, 159, 159, 160, 160, 1245 161, 161, 161, 161, 162, 163, 163, 163, 163, 164, 1246 164, 165, 165, 165, 165, 166, 166, 167, 167, 167, 1247 167, 167, 167, 167, 167, 167, 167, 168, 168, 169, 1248 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 1249 171, 172, 172, 173, 173, 174, 174, 174, 174, 175, 1250 175, 176, 177, 177, 177, 177, 177, 177, 178, 178, 1251 178, 179, 179, 180, 180, 181, 181, 182, 183, 183, 1252 184, 184, 185, 185, 186, 186, 186, 186, 187, 187, 1253 188, 188, 189, 189, 189, 190, 190, 191, 191, 191, 1254 191, 191, 191, 191, 191, 191, 191, 192, 192, 192, 1255 193, 193, 193, 193, 193, 194, 194, 194, 194, 195, 1256 196, 196, 196, 196, 196, 197, 197, 197, 197, 197, 1257 198, 198, 199, 199, 200, 200, 201, 201, 202, 202, 1258 202, 203, 203, 204, 204, 205, 205, 206, 206, 207, 1259 207, 208, 208, 209, 209, 210, 210, 211, 211, 212, 1260 212, 212, 212, 212, 213, 213, 213, 214, 214, 214, 1261 215, 215, 215, 215, 215, 216, 216, 216, 217, 217, 1262 218, 218, 218, 219, 219, 219, 219, 219, 220, 220, 1263 221, 221, 221, 221, 222, 222, 223, 223, 223, 223, 1264 224, 224, 224, 224, 225, 225, 226, 226, 227, 227, 1265 228, 228, 228, 228, 228, 229, 228, 230, 230, 230, 1266 231, 231, 232, 233, 233, 233, 233, 233, 233, 233, 1267 233, 234, 234, 234, 234, 234, 234, 234, 234, 234, 1268 234, 234, 234, 234, 235, 235, 235, 235, 235, 236, 1269 236, 237, 237, 237, 237, 238, 238, 238, 238, 239, 1270 239, 239, 239, 240, 240, 240, 241, 241, 241, 241, 1271 242, 242, 242, 243, 243, 244, 244, 245, 244, 244, 1272 244, 246, 246, 247, 247, 248, 248, 248, 248, 249, 1273 249, 249, 249, 250, 250, 251, 251, 251, 251, 251, 1274 252, 252, 253, 254, 255, 255, 256, 255, 257, 257, 1275 258, 258, 259, 259, 260, 260, 260, 260, 260, 261, 1276 261, 261, 261, 262, 262, 263, 263, 264, 264, 265, 1277 265, 265, 265, 266, 266, 266, 266, 266, 267, 267, 1278 267, 267, 267, 268, 268, 269, 269, 270, 270, 271, 1279 271, 271, 272, 272, 272, 273, 273, 273, 274, 274, 1280 274, 275, 275, 275, 275, 276, 276, 276, 277, 277, 1281 278, 278, 278, 278, 278, 279, 279, 280, 280, 281, 1282 281, 281, 281, 281, 281, 282, 282, 282, 282, 283, 1283 283, 283, 284, 285, 285, 287, 286, 286, 288, 288, 1284 288, 289, 289, 290, 290, 290, 291, 291, 291, 291, 1285 292, 292, 292, 293, 293, 294, 294, 295, 296, 295, 1286 297, 297, 298, 298, 299, 299, 299, 300, 300, 301, 1287 301, 302, 302, 303, 303, 304, 304, 304, 305, 304, 1288 304, 306, 306, 306, 307, 307, 307, 307, 307, 307, 1289 307, 307, 307, 308, 308, 308, 309, 310, 310, 311, 1290 311, 312, 312, 313, 314, 314, 315, 315, 315, 316, 1291 316, 316, 316, 317, 317, 317, 317, 318, 318, 319, 1292 319, 319, 320, 320, 320, 320, 321, 321, 322, 322, 1293 322, 323, 323, 323, 324, 324, 324, 325, 325, 325, 1294 326, 326, 326, 327, 327, 327, 328, 328, 328, 329, 1295 329, 329, 330, 330, 330, 330, 331, 331, 332, 332, 1296 332, 333, 333, 333, 333, 334, 334, 334, 335, 335, 1297 335, 335, 336, 336, 336, 337, 337, 337, 337, 338, 1298 338, 338, 339, 339, 339, 339, 340, 340, 341, 341, 1299 341, 342, 342, 343, 343, 344, 344, 344, 345, 345, 1300 345, 345, 345, 346, 346, 346, 346, 347, 347, 347, 1301 348, 348, 348, 349, 349, 349, 349, 350, 350, 350, 1302 351, 351, 351, 351, 351, 352, 352, 352, 352, 353, 1303 353, 353, 354, 354, 354, 355, 355, 355, 355, 355, 1304 355, 356, 356, 356, 357, 357, 357, 357, 357, 358, 1305 358, 358, 358, 359, 359, 360, 360, 360, 361, 361, 1306 362, 362, 362, 362, 362, 362, 363, 363, 363, 363, 1307 363, 363, 363, 363, 363, 363, 364, 364, 364, 364, 1308 365, 365, 365, 366, 366, 367, 367, 367, 367, 367, 1309 367, 368, 368, 368, 368, 368, 368, 369, 370, 370, 1310 370, 371, 371, 372, 372 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,1368 2, 1, 2, 2, 1, 3, 2, 3, 3, 2,1369 4, 4, 3, 8, 3, 2, 1, 2, 6, 8,1370 3, 2, 3, 3, 4, 4, 3, 1, 1, 1,1371 4, 6, 3, 2, 3, 3, 4, 4, 3, 2,1372 1, 2, 2, 1, 3, 2, 3, 3, 2, 4,1373 4, 3, 6, 8, 3, 2, 1, 2, 2, 2,1374 3, 3, 2, 4, 4, 3, 6, 8, 3, 2,1375 1, 2, 2, 1, 1, 2, 3, 3, 2, 4,1376 6, 8, 1, 2, 2, 1, 2, 2, 3, 3,1377 1, 4, 4, 3, 5, 8, 3, 2, 3, 1,1378 5, 5, 6, 6, 1, 2, 2, 1, 2, 2,1379 3, 3, 1, 4, 4, 3, 5, 8, 3, 1,1380 2, 1, 2, 6, 5, 6, 7, 7, 1, 2,1381 2, 1, 2, 2, 3, 3, 1, 4, 4, 3,1382 8, 3, 1, 1, 2, 1, 1, 2, 3, 2,1383 3, 2, 3, 3, 2, 4, 3, 2, 3, 2,1384 4, 3, 2, 6, 6, 6, 7, 1, 2, 1,1385 1, 1, 2, 3, 2, 3, 2, 3, 3, 4,1386 2, 3, 4, 2, 5, 5, 6, 6, 0, 1,1387 0, 21349 1, 1, 1, 1, 1, 2, 2, 3, 3, 1, 1350 3, 1, 2, 2, 2, 4, 4, 4, 4, 1, 1351 2, 2, 3, 1, 2, 2, 1, 2, 2, 3, 1352 1, 2, 2, 1, 1, 4, 2, 0, 6, 7, 1353 2, 2, 2, 1, 2, 2, 3, 2, 3, 1, 1354 2, 3, 2, 2, 4, 0, 1, 2, 2, 1, 1355 0, 1, 2, 2, 5, 2, 0, 7, 2, 4, 1356 0, 2, 0, 1, 1, 1, 5, 5, 5, 1, 1357 5, 5, 9, 1, 5, 0, 1, 1, 5, 1, 1358 1, 5, 5, 1, 3, 3, 4, 1, 1, 1, 1359 1, 2, 1, 3, 3, 1, 2, 1, 3, 1, 1360 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1361 2, 1, 1, 1, 2, 0, 2, 2, 1, 4, 1362 0, 1, 2, 3, 4, 2, 2, 1, 2, 1, 1363 2, 5, 5, 7, 6, 1, 2, 2, 3, 1, 1364 2, 2, 4, 2, 4, 0, 4, 2, 1, 1, 1365 1, 0, 2, 5, 5, 13, 1, 1, 3, 3, 1366 2, 3, 3, 2, 4, 1, 6, 9, 0, 11, 1367 1, 3, 3, 3, 1, 1, 5, 2, 5, 0, 1368 1, 1, 3, 0, 1, 1, 1, 1, 0, 6, 1369 2, 1, 2, 4, 2, 3, 3, 3, 4, 5, 1370 5, 5, 6, 1, 1, 1, 3, 0, 5, 0, 1371 1, 1, 2, 6, 1, 3, 0, 1, 4, 1, 1372 1, 1, 1, 2, 1, 2, 2, 1, 3, 2, 1373 3, 3, 2, 4, 4, 3, 8, 3, 2, 1, 1374 2, 6, 8, 3, 2, 3, 3, 4, 4, 3, 1375 1, 1, 1, 4, 6, 3, 2, 3, 3, 4, 1376 4, 3, 2, 1, 2, 2, 1, 3, 2, 3, 1377 3, 2, 4, 4, 3, 6, 8, 3, 2, 1, 1378 2, 2, 2, 3, 3, 2, 4, 4, 3, 6, 1379 8, 3, 2, 1, 2, 2, 1, 1, 2, 3, 1380 3, 2, 4, 6, 8, 1, 2, 2, 1, 2, 1381 2, 3, 3, 1, 4, 4, 3, 5, 8, 3, 1382 2, 3, 1, 5, 5, 6, 6, 1, 2, 2, 1383 1, 2, 2, 3, 3, 1, 4, 4, 3, 5, 1384 8, 3, 1, 2, 1, 2, 6, 5, 6, 7, 1385 7, 1, 2, 2, 1, 2, 2, 3, 3, 1, 1386 4, 4, 3, 8, 3, 1, 1, 2, 1, 1, 1387 2, 3, 2, 3, 2, 3, 3, 2, 4, 3, 1388 2, 3, 2, 4, 3, 2, 6, 6, 6, 7, 1389 1, 2, 1, 1, 1, 2, 3, 2, 3, 2, 1390 3, 3, 4, 2, 3, 4, 2, 5, 5, 6, 1391 6, 0, 1, 0, 2 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 583, 586, 5 92, 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 6 01, 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, 549, 549, 549, 0, 1402 0, 0, 294, 220, 304, 319, 320, 7, 360, 0, 1403 8, 14, 15, 0, 2, 294, 567, 9, 527, 525, 1404 247, 3, 455, 3, 260, 0, 3, 3, 3, 248, 1405 3, 0, 0, 0, 295, 296, 298, 294, 307, 310, 1406 312, 341, 286, 334, 339, 287, 349, 288, 356, 353, 1407 363, 0, 0, 364, 289, 475, 479, 3, 3, 0, 1408 2, 521, 526, 531, 299, 0, 0, 549, 579, 549, 1409 2, 590, 591, 592, 294, 0, 733, 734, 0, 12, 1410 294, 0, 13, 270, 271, 0, 295, 290, 291, 292, 1411 293, 528, 305, 393, 550, 551, 371, 372, 12, 446, 1412 447, 11, 442, 445, 0, 505, 500, 491, 446, 447, 1413 0, 0, 530, 221, 0, 294, 0, 0, 0, 0, 1414 0, 0, 0, 0, 294, 294, 2, 0, 735, 295, 1415 584, 596, 739, 732, 730, 737, 0, 0, 0, 254, 1416 2, 0, 534, 440, 441, 439, 0, 0, 0, 0, 1417 549, 0, 636, 637, 0, 0, 547, 543, 549, 564, 1418 549, 549, 544, 2, 545, 549, 603, 549, 549, 606, 1419 0, 0, 0, 294, 294, 313, 361, 2, 294, 261, 1420 297, 308, 342, 354, 480, 0, 2, 0, 455, 262, 1421 295, 335, 350, 357, 476, 0, 2, 0, 311, 336, 1422 343, 344, 0, 351, 355, 358, 362, 447, 294, 294, 1423 366, 370, 0, 395, 477, 481, 0, 0, 0, 1, 1424 294, 2, 532, 578, 580, 294, 2, 743, 295, 746, 1425 547, 547, 295, 0, 0, 0, 273, 549, 544, 2, 1426 294, 0, 0, 294, 552, 2, 503, 2, 556, 0, 1427 0, 0, 0, 0, 0, 18, 59, 4, 5, 6, 1428 16, 0, 0, 0, 294, 2, 0, 294, 65, 66, 1429 67, 68, 48, 19, 49, 22, 47, 69, 0, 72, 1430 76, 79, 82, 87, 90, 92, 94, 96, 98, 100, 1431 105, 497, 753, 453, 496, 0, 451, 452, 0, 568, 1432 583, 586, 589, 595, 598, 601, 360, 0, 2, 741, 1433 0, 294, 744, 2, 294, 3, 427, 0, 435, 295, 1434 294, 307, 334, 287, 349, 356, 3, 3, 409, 413, 1435 423, 428, 475, 294, 429, 708, 709, 294, 430, 432, 1436 294, 2, 585, 597, 731, 2, 2, 249, 2, 460, 1437 0, 458, 457, 456, 141, 2, 2, 251, 2, 2, 1438 250, 2, 281, 2, 282, 0, 280, 0, 0, 0, 1439 0, 0, 0, 0, 0, 0, 569, 608, 0, 455, 1440 2, 563, 572, 662, 565, 566, 535, 294, 2, 602, 1441 611, 604, 605, 0, 276, 294, 294, 340, 295, 0, 1442 295, 0, 294, 736, 740, 738, 536, 294, 547, 255, 1443 263, 309, 0, 2, 537, 294, 501, 337, 338, 283, 1444 352, 359, 0, 294, 2, 385, 294, 373, 0, 0, 1445 379, 730, 0, 751, 400, 0, 478, 502, 252, 253, 1446 522, 294, 437, 0, 294, 237, 0, 2, 239, 0, 1447 295, 0, 257, 2, 258, 278, 0, 0, 2, 294, 1448 547, 294, 488, 490, 489, 0, 0, 753, 0, 294, 1449 0, 294, 492, 294, 562, 560, 561, 559, 0, 554, 1450 557, 0, 0, 294, 56, 294, 69, 52, 294, 62, 1451 294, 294, 50, 51, 64, 2, 127, 0, 0, 449, 1452 0, 448, 111, 294, 54, 55, 17, 0, 29, 30, 1453 35, 2, 0, 35, 117, 118, 119, 120, 121, 122, 1454 123, 124, 125, 126, 0, 0, 53, 0, 0, 0, 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 546, 681, 433, 664, 546, 546, 672, 679, 294, 428, 1458 295, 0, 0, 294, 717, 295, 722, 750, 714, 294, 1459 719, 750, 294, 294, 294, 0, 111, 0, 18, 5, 1460 2, 0, 19, 0, 458, 748, 0, 0, 464, 241, 1461 0, 294, 0, 0, 0, 544, 568, 572, 574, 604, 1462 607, 611, 614, 567, 606, 0, 284, 657, 0, 294, 1463 277, 0, 0, 0, 0, 275, 2, 0, 259, 535, 1464 294, 0, 0, 0, 0, 294, 294, 0, 0, 691, 1465 381, 384, 388, 546, 388, 696, 387, 688, 546, 546, 1466 364, 372, 380, 373, 546, 375, 378, 294, 749, 0, 1467 0, 395, 748, 295, 3, 413, 3, 417, 416, 590, 1468 0, 530, 294, 3, 3, 294, 432, 295, 3, 426, 1469 427, 2, 0, 0, 0, 484, 306, 294, 480, 482, 1470 3, 2, 2, 0, 501, 3, 0, 553, 129, 0, 1471 0, 222, 0, 0, 0, 2, 0, 0, 36, 0, 1472 0, 111, 294, 20, 0, 21, 0, 691, 447, 0, 1473 109, 3, 2, 27, 2, 0, 33, 0, 2, 25, 1474 0, 106, 107, 73, 74, 75, 77, 78, 80, 81, 1475 85, 86, 83, 84, 88, 89, 91, 93, 95, 97, 1476 99, 0, 0, 751, 294, 0, 0, 0, 646, 647, 1477 643, 644, 496, 495, 294, 0, 3, 294, 713, 294, 1478 718, 295, 294, 294, 294, 661, 704, 660, 2, 294, 1479 0, 0, 0, 0, 0, 0, 0, 0, 682, 0, 1480 668, 619, 635, 669, 2, 615, 622, 430, 617, 618, 1481 431, 2, 629, 638, 631, 632, 665, 666, 680, 708, 1482 712, 710, 750, 268, 2, 744, 2, 421, 716, 721, 1483 422, 0, 400, 3, 3, 3, 3, 452, 3, 0, 1484 2, 467, 463, 749, 0, 459, 466, 2, 462, 465, 1485 0, 294, 242, 264, 3, 272, 274, 0, 452, 2, 1486 570, 571, 2, 609, 610, 0, 658, 536, 3, 345, 1487 344, 347, 346, 294, 537, 0, 538, 294, 374, 376, 1488 2, 0, 0, 0, 0, 104, 390, 692, 693, 385, 1489 389, 386, 689, 690, 379, 383, 366, 397, 392, 398, 1490 0, 0, 0, 435, 240, 0, 0, 3, 2, 667, 1491 428, 0, 526, 0, 750, 488, 0, 294, 294, 294, 1492 0, 550, 552, 130, 0, 0, 215, 0, 0, 0, 1493 223, 224, 57, 0, 63, 294, 0, 61, 60, 0, 1494 128, 692, 457, 70, 71, 110, 115, 3, 109, 0, 1495 0, 0, 24, 35, 3, 0, 32, 102, 0, 3, 1496 649, 653, 656, 648, 3, 591, 3, 715, 720, 2, 1497 294, 3, 3, 295, 0, 3, 621, 625, 628, 637, 1498 671, 675, 678, 294, 3, 620, 636, 670, 294, 294, 1499 423, 294, 294, 745, 0, 0, 0, 0, 256, 0, 1500 104, 0, 3, 3, 0, 460, 0, 456, 0, 0, 1501 245, 294, 0, 0, 129, 0, 0, 0, 0, 0, 1502 129, 0, 0, 109, 109, 2, 0, 0, 0, 3, 1503 131, 132, 2, 143, 133, 134, 135, 136, 137, 138, 1504 145, 147, 0, 0, 0, 285, 294, 294, 546, 0, 1505 539, 294, 111, 695, 699, 701, 694, 382, 396, 393, 1506 578, 2, 663, 662, 0, 668, 2, 481, 483, 503, 1507 3, 511, 512, 0, 2, 507, 3, 3, 0, 0, 1508 555, 222, 0, 0, 0, 222, 0, 0, 3, 37, 1509 748, 109, 0, 3, 660, 42, 3, 40, 3, 34, 1510 0, 3, 101, 103, 0, 2, 651, 652, 0, 0, 1511 294, 0, 0, 0, 3, 637, 0, 2, 623, 624, 1512 2, 639, 2, 673, 674, 0, 0, 3, 0, 3, 1513 3, 3, 3, 408, 407, 411, 2, 2, 747, 746, 1514 112, 0, 0, 0, 0, 3, 461, 3, 0, 243, 1515 146, 3, 295, 294, 0, 0, 0, 0, 2, 191, 1516 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 1517 111, 0, 546, 151, 148, 294, 0, 0, 267, 279, 1518 3, 3, 545, 612, 367, 2, 697, 698, 294, 266, 1519 294, 0, 514, 491, 294, 0, 0, 490, 505, 0, 1520 0, 0, 216, 0, 225, 58, 109, 0, 0, 116, 1521 113, 0, 0, 0, 0, 0, 0, 23, 0, 654, 1522 294, 579, 265, 723, 724, 725, 0, 676, 294, 294, 1523 294, 3, 3, 0, 684, 0, 0, 0, 0, 294, 1524 294, 3, 543, 468, 469, 0, 0, 246, 295, 0, 1525 0, 0, 0, 294, 192, 190, 0, 187, 193, 0, 1526 0, 0, 0, 197, 200, 198, 194, 0, 195, 35, 1527 129, 144, 142, 244, 0, 0, 294, 415, 419, 418, 1528 0, 508, 2, 509, 2, 510, 504, 294, 228, 0, 1529 226, 0, 228, 3, 660, 31, 114, 2, 45, 2, 1530 43, 41, 28, 112, 26, 3, 726, 3, 3, 3, 1531 0, 0, 683, 685, 626, 640, 269, 2, 405, 3, 1532 404, 0, 471, 468, 129, 0, 0, 129, 3, 0, 1533 129, 188, 0, 2, 2, 209, 199, 0, 0, 0, 1534 0, 140, 573, 613, 3, 2, 0, 0, 2, 229, 1535 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 1536 0, 0, 686, 687, 294, 0, 470, 152, 0, 0, 1537 2, 165, 129, 154, 0, 182, 0, 129, 0, 2, 1538 156, 0, 2, 0, 2, 2, 2, 196, 32, 0, 1539 294, 513, 515, 506, 0, 0, 0, 0, 114, 38, 1540 3, 3, 655, 627, 641, 677, 409, 129, 158, 161, 1541 0, 160, 164, 3, 167, 166, 0, 129, 184, 129, 1542 3, 0, 294, 0, 294, 0, 2, 0, 2, 139, 1543 700, 2, 230, 231, 0, 227, 218, 0, 0, 0, 1544 153, 0, 0, 163, 233, 168, 2, 235, 183, 0, 1545 186, 172, 201, 3, 210, 214, 203, 3, 0, 294, 1546 0, 294, 0, 0, 0, 39, 46, 44, 159, 162, 1547 129, 0, 169, 294, 129, 129, 0, 173, 0, 0, 1548 691, 211, 212, 213, 0, 202, 3, 204, 3, 294, 1549 219, 232, 149, 170, 155, 129, 236, 185, 180, 178, 1550 174, 157, 129, 0, 692, 0, 0, 0, 0, 150, 1551 171, 181, 175, 179, 178, 176, 3, 3, 0, 0, 1552 492, 177, 205, 207, 3, 3, 206, 208 1456 0, 0, 0, 0, 0, 0, 0, 108, 2, 648, 1457 454, 645, 549, 549, 653, 482, 294, 2, 587, 588, 1458 0, 599, 600, 0, 2, 742, 745, 111, 294, 2, 1459 294, 0, 710, 295, 714, 705, 706, 712, 0, 2, 1460 2, 670, 549, 753, 619, 549, 549, 753, 549, 633, 1461 549, 549, 684, 436, 667, 549, 549, 675, 682, 294, 1462 431, 295, 0, 0, 294, 720, 295, 725, 753, 717, 1463 294, 722, 753, 294, 294, 294, 0, 111, 0, 18, 1464 5, 2, 0, 19, 0, 461, 751, 0, 0, 467, 1465 241, 0, 294, 0, 0, 0, 547, 571, 575, 577, 1466 607, 610, 614, 617, 570, 609, 0, 284, 660, 0, 1467 294, 277, 0, 0, 0, 0, 275, 2, 0, 259, 1468 538, 294, 0, 0, 0, 0, 294, 294, 0, 0, 1469 694, 383, 386, 390, 549, 390, 699, 389, 691, 549, 1470 549, 365, 374, 382, 375, 549, 377, 380, 294, 752, 1471 0, 0, 398, 0, 295, 3, 416, 3, 420, 419, 1472 593, 0, 533, 294, 3, 3, 294, 435, 295, 3, 1473 429, 430, 2, 0, 0, 0, 487, 306, 294, 483, 1474 485, 3, 2, 2, 0, 504, 3, 0, 556, 129, 1475 0, 0, 222, 0, 0, 0, 2, 0, 0, 36, 1476 0, 0, 111, 294, 20, 0, 21, 0, 694, 450, 1477 0, 109, 3, 2, 27, 2, 0, 33, 0, 2, 1478 25, 0, 106, 107, 73, 74, 75, 77, 78, 80, 1479 81, 85, 86, 83, 84, 88, 89, 91, 93, 95, 1480 97, 99, 0, 0, 754, 294, 0, 0, 0, 649, 1481 650, 646, 647, 499, 498, 294, 0, 3, 294, 716, 1482 294, 721, 295, 294, 294, 294, 664, 707, 663, 2, 1483 294, 0, 0, 0, 0, 0, 0, 0, 0, 685, 1484 0, 671, 622, 638, 672, 2, 618, 625, 433, 620, 1485 621, 434, 2, 632, 641, 634, 635, 668, 669, 683, 1486 711, 715, 713, 753, 268, 2, 747, 2, 424, 719, 1487 724, 425, 0, 403, 3, 3, 3, 3, 455, 3, 1488 0, 2, 470, 466, 752, 0, 462, 469, 2, 465, 1489 468, 0, 294, 242, 264, 3, 272, 274, 0, 455, 1490 2, 573, 574, 2, 612, 613, 0, 661, 539, 3, 1491 346, 345, 348, 347, 294, 540, 0, 541, 294, 376, 1492 378, 2, 0, 0, 0, 0, 104, 392, 695, 696, 1493 387, 391, 388, 692, 693, 381, 385, 294, 400, 394, 1494 401, 751, 0, 0, 438, 240, 0, 0, 3, 2, 1495 670, 431, 0, 529, 0, 753, 491, 0, 294, 294, 1496 294, 0, 553, 555, 130, 0, 0, 215, 0, 0, 1497 0, 223, 224, 57, 0, 63, 294, 0, 61, 60, 1498 0, 128, 695, 460, 70, 71, 110, 115, 3, 109, 1499 0, 0, 0, 24, 35, 3, 0, 32, 102, 0, 1500 3, 652, 656, 659, 651, 3, 594, 3, 718, 723, 1501 2, 294, 3, 3, 295, 0, 3, 624, 628, 631, 1502 640, 674, 678, 681, 294, 3, 623, 639, 673, 294, 1503 294, 426, 294, 294, 748, 0, 0, 0, 0, 256, 1504 0, 104, 0, 3, 3, 0, 463, 0, 459, 0, 1505 0, 245, 294, 0, 0, 129, 0, 0, 0, 0, 1506 0, 129, 0, 0, 109, 109, 2, 0, 0, 0, 1507 3, 131, 132, 2, 143, 133, 134, 135, 136, 137, 1508 138, 145, 147, 0, 0, 0, 285, 294, 294, 549, 1509 0, 542, 294, 111, 698, 702, 704, 697, 384, 368, 1510 399, 0, 581, 2, 666, 665, 0, 671, 2, 484, 1511 486, 506, 3, 514, 515, 0, 2, 510, 3, 3, 1512 0, 0, 558, 222, 0, 0, 0, 222, 0, 0, 1513 3, 37, 751, 109, 0, 3, 663, 42, 3, 40, 1514 3, 34, 0, 3, 101, 103, 0, 2, 654, 655, 1515 0, 0, 294, 0, 0, 0, 3, 640, 0, 2, 1516 626, 627, 2, 642, 2, 676, 677, 0, 0, 3, 1517 0, 3, 3, 3, 3, 411, 410, 414, 2, 2, 1518 750, 749, 112, 0, 0, 0, 0, 3, 464, 3, 1519 0, 243, 146, 3, 295, 294, 0, 0, 0, 0, 1520 2, 191, 0, 189, 0, 0, 0, 0, 0, 0, 1521 0, 0, 111, 0, 549, 151, 148, 294, 0, 0, 1522 267, 279, 3, 3, 548, 615, 369, 2, 700, 701, 1523 397, 294, 266, 294, 0, 517, 494, 294, 0, 0, 1524 493, 508, 0, 0, 0, 216, 0, 225, 58, 109, 1525 0, 0, 116, 113, 0, 0, 0, 0, 0, 0, 1526 23, 0, 657, 294, 582, 265, 726, 727, 728, 0, 1527 679, 294, 294, 294, 3, 3, 0, 687, 0, 0, 1528 0, 0, 294, 294, 3, 546, 471, 472, 0, 0, 1529 246, 295, 0, 0, 0, 0, 294, 192, 190, 0, 1530 187, 193, 0, 0, 0, 0, 197, 200, 198, 194, 1531 0, 195, 35, 129, 144, 142, 244, 0, 0, 294, 1532 418, 422, 421, 0, 511, 2, 512, 2, 513, 507, 1533 294, 228, 0, 226, 0, 228, 3, 663, 31, 114, 1534 2, 45, 2, 43, 41, 28, 112, 26, 3, 729, 1535 3, 3, 3, 0, 0, 686, 688, 629, 643, 269, 1536 2, 408, 3, 407, 0, 474, 471, 129, 0, 0, 1537 129, 3, 0, 129, 188, 0, 2, 2, 209, 199, 1538 0, 0, 0, 0, 140, 576, 616, 3, 2, 0, 1539 0, 2, 229, 0, 0, 217, 0, 0, 0, 0, 1540 0, 0, 0, 0, 0, 689, 690, 294, 0, 473, 1541 152, 0, 0, 2, 165, 129, 154, 0, 182, 0, 1542 129, 0, 2, 156, 0, 2, 0, 2, 2, 2, 1543 196, 32, 0, 294, 516, 518, 509, 0, 0, 0, 1544 0, 114, 38, 3, 3, 658, 630, 644, 680, 412, 1545 129, 158, 161, 0, 160, 164, 3, 167, 166, 0, 1546 129, 184, 129, 3, 0, 294, 0, 294, 0, 2, 1547 0, 2, 139, 703, 2, 230, 231, 0, 227, 218, 1548 0, 0, 0, 153, 0, 0, 163, 233, 168, 2, 1549 235, 183, 0, 186, 172, 201, 3, 210, 214, 203, 1550 3, 0, 294, 0, 294, 0, 0, 0, 39, 46, 1551 44, 159, 162, 129, 0, 169, 294, 129, 129, 0, 1552 173, 0, 0, 694, 211, 212, 213, 0, 202, 3, 1553 204, 3, 294, 219, 232, 149, 170, 155, 129, 236, 1554 185, 180, 178, 174, 157, 129, 0, 695, 0, 0, 1555 0, 0, 150, 171, 181, 175, 179, 178, 176, 3, 1556 3, 0, 0, 495, 177, 205, 207, 3, 3, 206, 1557 208 1553 1558 }; 1554 1559 … … 1556 1561 static const yytype_int16 yydefgoto[] = 1557 1562 { 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 81, 82, 462, 721, 881, 882, 355, 356, 724, 725,1571 72 6, 357, 358, 359, 360, 472, 339, 133, 134, 529,1572 323, 168, 654, 655, 656, 657, 658, 83, 119, 85,1573 495, 496, 965, 497, 275, 501, 324, 86, 135, 136,1574 87, 1337, 1124, 1125, 1126, 1127, 88, 89, 742, 90,1575 271, 91, 92, 185, 1053, 688, 410, 123, 93, 507,1576 508, 509, 186, 266, 188, 189, 190, 267, 96, 97,1577 9 8, 99, 100, 101, 102, 193, 194, 195, 196, 197,1578 851, 613, 614, 615, 616, 198, 618, 619, 620, 579,1579 580, 581, 582, 705, 103, 622, 623, 624, 625, 626,1580 62 7, 938, 707, 708, 709, 603, 363, 364, 365, 366,1581 3 25, 162, 105, 106, 107, 368, 719, 5761563 -1, 840, 475, 302, 46, 132, 133, 303, 304, 305, 1564 306, 786, 787, 1148, 1149, 307, 308, 309, 310, 311, 1565 312, 313, 314, 315, 316, 317, 318, 319, 320, 1052, 1566 526, 997, 322, 998, 555, 974, 1079, 1545, 1081, 1082, 1567 1083, 1084, 1546, 1085, 1086, 1462, 1463, 1424, 1425, 1426, 1568 1524, 1525, 1529, 1530, 1565, 1566, 1087, 1382, 1088, 1089, 1569 1316, 1317, 1318, 1506, 1090, 144, 980, 981, 982, 1403, 1570 1487, 1498, 1499, 476, 477, 902, 903, 1060, 49, 50, 1571 51, 52, 53, 346, 157, 56, 57, 58, 59, 60, 1572 348, 62, 63, 262, 65, 66, 273, 350, 351, 69, 1573 70, 71, 72, 117, 74, 203, 353, 118, 77, 119, 1574 79, 80, 462, 81, 456, 457, 458, 459, 701, 940, 1575 702, 82, 83, 465, 463, 722, 882, 883, 356, 357, 1576 725, 726, 727, 358, 359, 360, 361, 473, 340, 134, 1577 135, 530, 324, 169, 655, 656, 657, 658, 659, 84, 1578 120, 86, 496, 497, 966, 498, 276, 502, 325, 87, 1579 136, 137, 88, 1340, 1126, 1127, 1128, 1129, 89, 90, 1580 743, 91, 272, 92, 93, 186, 1054, 689, 411, 124, 1581 94, 508, 509, 510, 187, 267, 189, 190, 191, 268, 1582 97, 98, 99, 100, 101, 102, 103, 194, 195, 196, 1583 197, 198, 852, 614, 615, 616, 617, 199, 619, 620, 1584 621, 580, 581, 582, 583, 706, 104, 623, 624, 625, 1585 626, 627, 628, 939, 708, 709, 710, 604, 364, 365, 1586 366, 367, 326, 163, 106, 107, 108, 369, 720, 577 1582 1587 }; 1583 1588 1584 1589 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing 1585 1590 STATE-NUM. */ 1586 #define YYPACT_NINF -1 2811591 #define YYPACT_NINF -1332 1587 1592 static const yytype_int16 yypact[] = 1588 1593 { 1589 3705, 8889, -1281, 104, -1281, -1281, -1281, -1281, -1281, -1281, 1590 -1281, 44, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, 1591 -1281, -1281, -1281, -1281, -1281, 155, 155, 155, 1205, 815, 1592 110, 6006, 222, -1281, -1281, -1281, -1281, -1281, 130, -1281, 1593 -1281, -1281, 1267, 189, 3199, -1281, -1281, -1281, -1281, -1281, 1594 -1281, 31, 144, -1281, 1338, -1281, -1281, -1281, -1281, 153, 1595 1410, 279, 82, 7674, -1281, -1281, 8086, 1234, -1281, -1281, 1596 -1281, 981, 359, 7231, 925, 669, 981, 1012, -1281, -1281, 1597 738, 575, -1281, 981, 1119, -1281, 242, -1281, 416, 419, 1598 -1281, -1281, -1281, -1281, 277, 144, 155, -1281, 155, -1281, 1599 -1281, -1281, -1281, 9536, 1338, -1281, -1281, 1338, -1281, 9574, 1600 321, -1281, -1281, -1281, 2195, 9607, -1281, 565, 565, 565, 1601 -1281, -1281, -1281, 155, -1281, -1281, -1281, 280, 366, 418, 1602 -1281, -1281, -1281, 425, -1281, -1281, -1281, -1281, -1281, 443, 1603 475, -1281, -1281, 120, 8972, 3739, 375, 387, 486, 496, 1604 514, 527, 541, 8273, 7081, 550, 568, -1281, 9460, -1281, 1605 -1281, -1281, -1281, 602, -1281, 121, 4456, 4456, -1281, 552, 1606 298, -1281, -1281, -1281, -1281, 634, 302, 306, 327, 155, 1607 590, -1281, -1281, 1410, 2454, 696, -1281, 90, -1281, 155, 1608 155, 144, -1281, -1281, 124, -1281, 155, 155, -1281, 2638, 1609 658, 667, 565, 6993, -1281, -1281, 678, 3199, -1281, -1281, 1610 981, -1281, -1281, -1281, 144, -1281, 1338, 31, -1281, 8010, 1611 -1281, 565, 565, 565, 144, -1281, 1205, -1281, 5198, -1281, 1612 -1281, 673, 565, -1281, 565, -1281, 130, 8972, 9002, 686, 1613 -1281, 815, 694, 565, -1281, 1205, 728, 736, -1281, 6006, 1614 544, -1281, -1281, -1281, 9431, -1281, -1281, 3957, -1281, 696, 1615 79, 9607, 6464, 2195, 2638, -1281, 157, -1281, -1281, 9574, 1616 1338, 717, 7703, -1281, -1281, 699, -1281, 10744, 783, 831, 1617 3925, 787, 6306, 10567, -1281, 827, -1281, -1281, -1281, -1281, 1618 10625, 10625, 544, 8633, 829, 6306, 9085, -1281, -1281, -1281, 1619 -1281, -1281, -1281, 862, -1281, 1121, 2197, 6306, -1281, 599, 1620 388, 472, 354, 593, 830, 867, 873, 970, 245, -1281, 1621 -1281, 874, 650, -1281, 325, -1281, -1281, 3739, -1281, -1281, 1622 585, 901, -1281, 747, 901, 958, 130, -1281, -1281, 962, 1623 9536, -1281, 977, 8746, -1281, -1281, 957, 935, 8355, 6993, 1624 981, -1281, 981, 565, 565, -1281, -1281, -1281, -1281, -1281, 1625 -1281, 565, 9645, 1338, -1281, -1281, 9683, 1067, -1281, 9123, 1626 -1281, -1281, -1281, -1281, -1281, -1281, -1281, 990, 5315, 6306, 1627 -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, 1628 -1281, -1281, -1281, -1281, 2195, -1281, 846, 996, 998, 1002, 1629 864, 1005, 1008, 1026, 2454, -1281, -1281, 1031, 31, 1033, 1630 -1281, -1281, 1061, -1281, -1281, -1281, 9431, -1281, -1281, -1281, 1631 -1281, -1281, 2638, -1281, 8972, 8972, -1281, 565, 2195, 7112, 1632 1338, 8426, -1281, -1281, -1281, -1281, 9431, 79, -1281, -1281, 1633 981, 144, -1281, -1281, 9431, -1281, 6877, -1281, -1281, 565, 1634 565, 376, 9716, 1035, 1868, 2111, -1281, 334, 338, 815, 1635 -1281, 9002, 1059, 1047, 815, 565, -1281, -1281, -1281, -1281, 1636 9940, -1281, 583, 6755, -1281, 144, 1065, -1281, 2195, 10825, 1637 10471, -1281, -1281, -1281, -1281, 889, 2638, -1281, 8497, 696, 1638 7558, -1281, -1281, -1281, 1286, 636, 874, 815, 7703, 868, 1639 9574, -1281, 7703, -1281, -1281, -1281, -1281, 638, -1281, 1073, 1640 831, 207, 8633, -1281, 9716, -1281, -1281, 8633, -1281, 8859, 1641 8633, -1281, -1281, -1281, 1071, -1281, 681, 1077, 668, 1078, 1642 -1281, 4381, 6724, -1281, -1281, -1281, 328, -1281, -1281, 10490, 1643 -1281, 385, 10490, -1281, -1281, -1281, -1281, -1281, -1281, -1281, 1644 -1281, -1281, -1281, 6464, 6464, -1281, 6306, 6306, 6306, 6306, 1645 6306, 6306, 6306, 6306, 6306, 6306, 6306, 6306, 6306, 6306, 1646 6306, 6306, 6306, 6306, 4789, 6464, -1281, 650, 1062, -1281, 1647 -1281, 155, 155, -1281, -1281, 8972, -1281, -1281, 1061, 544, 1648 -1281, 1061, 10548, -1281, -1281, -1281, 5232, 6724, 1079, 9198, 1649 1080, -1281, 9754, -1281, -1281, 602, -1281, 1082, 1185, 1084, 1650 1899, 185, 874, -1281, 155, 155, 874, 233, -1281, 155, 1651 155, 1061, -1281, -1281, 155, 155, -1281, 901, 9792, 1338, 1652 10968, 234, 509, 9792, -1281, 5821, -1281, 874, -1281, 9645, 1653 -1281, 293, 5525, 5525, 5525, 1338, -1281, 5054, 1072, 558, 1654 990, 1016, 1083, 1086, -1281, 1074, 4456, 592, -1281, 1172, 1655 1338, 5525, 544, 2195, 544, 696, 809, 901, -1281, -1281, 1656 814, 901, -1281, -1281, -1281, 831, -1281, 901, 144, 9940, 1657 -1281, 682, 1095, 691, 1099, -1281, 1098, 144, -1281, -1281, 1658 9431, 144, 1103, 362, 407, 9825, 7200, 1999, 6306, 1917, 1659 -1281, -1281, 1101, 94, 1101, -1281, -1281, -1281, 155, 155, 1660 -1281, -1281, 815, -1281, 155, -1281, -1281, 3122, 815, 1107, 1661 6306, -1281, 1059, 10968, -1281, -1281, 1102, -1281, -1281, -1281, 1662 544, -1281, 10897, 6306, -1281, 5525, 675, 8355, -1281, -1281, 1663 602, 1108, 1109, 1286, 3745, -1281, -1281, 7703, -1281, -1281, 1664 1111, -1281, -1281, 1116, -1281, 1111, 1128, 10744, 6464, 146, 1665 1113, 53, 1136, 1115, 1137, 829, 1131, 1139, -1281, 1142, 1666 1143, 1696, 6843, -1281, 6464, -1281, 668, 1691, -1281, 6022, 1667 6464, 1138, -1281, -1281, 990, 708, -1281, 6464, -1281, -1281, 1668 727, -1281, -1281, -1281, -1281, -1281, 599, 599, 388, 388, 1669 472, 472, 472, 472, 354, 354, 593, 830, 867, 873, 1670 970, 6306, 755, -1281, 9940, 1148, 1149, 1152, 1062, -1281, 1671 -1281, -1281, -1281, -1281, 9940, 713, 6306, 5525, -1281, 9645, 1672 -1281, 7319, 9311, 9236, 7081, -1281, -1281, -1281, 1185, 9940, 1673 951, 1160, 1163, 1165, 1166, 1175, 1176, 1182, -1281, 3532, 1674 1899, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, 1675 -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, 1061, -1281, 1676 -1281, -1281, 874, -1281, -1281, -1281, -1281, -1281, -1281, -1281, 1677 -1281, 1183, -1281, 1187, 1189, -1281, -1281, 31, 1138, 5054, 1678 -1281, -1281, -1281, 5315, 1180, -1281, -1281, -1281, -1281, -1281, 1679 815, 6243, 1272, -1281, -1281, -1281, -1281, 1188, 31, -1281, 1680 -1281, 1061, -1281, -1281, 1061, 70, 1061, -1281, -1281, -1281, 1681 -1281, -1281, -1281, 9498, -1281, 144, -1281, 9002, -1281, -1281, 1682 1201, 818, 1208, 1212, 1213, -1281, -1281, 1917, -1281, -1281, 1683 -1281, -1281, -1281, -1281, -1281, 1868, -1281, 1047, -1281, -1281, 1684 1210, 1216, 1211, -1281, -1281, 1218, 1223, -1281, 675, 1777, 1685 -1281, 562, -1281, 3745, 874, -1281, 1226, 7703, 9863, 8972, 1686 1230, -1281, -1281, 1225, 1235, 1238, -1281, 6306, 252, 40, 1687 1231, -1281, 1242, 544, 1242, 6724, 6464, -1281, -1281, 1242, 1688 -1281, 1691, 5315, -1281, -1281, -1281, -1281, 1236, 6464, 1245, 1689 544, 5054, -1281, 10490, -1281, 544, -1281, -1281, 6464, -1281, 1690 850, 901, -1281, -1281, -1281, -1281, -1281, -1281, -1281, 990, 1691 8746, -1281, -1281, 7438, 1249, -1281, 856, 901, -1281, 872, 1692 904, 901, -1281, 565, 4646, -1281, -1281, -1281, 9940, 9940, 1693 -1281, 8426, 8426, -1281, 1252, 1255, 1264, 1271, -1281, 1253, 1694 594, 247, 1138, -1281, 544, -1281, 4456, -1281, 6464, 459, 1695 -1281, 6603, 1274, 1279, 10343, 1281, 1283, 301, 308, 344, 1696 6464, 1285, 144, 6464, 6464, 1284, 498, 1282, 1268, -1281, 1697 -1281, -1281, 1289, -1281, -1281, -1281, -1281, -1281, -1281, -1281, 1698 -1281, -1281, 815, 1296, 6464, -1281, 9940, 9940, 155, 1301, 1699 -1281, 9349, 4935, 934, 901, -1281, -1281, -1281, -1281, -1281, 1700 -1281, -1281, -1281, -1281, 1305, 1777, -1281, -1281, 1290, -1281, 1701 1111, -1281, -1281, 2195, 1309, -1281, -1281, -1281, 734, 1312, 1702 -1281, 53, 1317, 6306, 1303, 53, 53, 1327, 1323, -1281, 1703 1074, 6464, 1328, 1236, 1036, 113, 1326, -1281, 1323, -1281, 1704 1331, 1326, -1281, -1281, 1337, -1281, -1281, 1061, 1340, 1343, 1705 6962, 1342, 1344, 1350, -1281, -1281, 1353, -1281, -1281, 1061, 1706 -1281, -1281, -1281, -1281, 1061, 6464, 6464, 6306, 1355, -1281, 1707 -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, 1708 -1281, 6306, 6306, 1356, 1357, 1326, -1281, -1281, 815, -1281, 1709 -1281, -1281, 7939, 9863, 6464, 6464, 1423, 6464, -1281, -1281, 1710 1341, -1281, 1345, 6464, 1347, 1358, 6464, 1097, 1360, 74, 1711 8776, 1197, 155, -1281, -1281, 6243, 1361, 467, -1281, -1281, 1712 -1281, -1281, -1281, -1281, -1281, -1281, -1281, 1061, 10467, -1281, 1713 8497, 1362, -1281, -1281, 9863, 482, 494, -1281, 1372, 1383, 1714 831, 1394, -1281, 66, -1281, -1281, 6464, 1395, 1393, -1281, 1715 -1281, 1399, 430, 657, 544, 1400, 1401, -1281, 1406, -1281, 1716 9940, -1281, -1281, -1281, -1281, -1281, 1412, -1281, 9940, 9940, 1717 9940, -1281, -1281, 1413, -1281, 1415, 1425, 1427, 623, 8125, 1718 8240, -1281, -1281, 278, -1281, 1426, 1429, -1281, 8568, 745, 1719 759, 1430, 769, 6445, -1281, -1281, 502, -1281, -1281, 770, 1720 1434, 1436, 144, 1487, 911, -1281, -1281, 6464, -1281, 10490, 1721 10343, -1281, -1281, -1281, 1442, 1444, 9940, -1281, -1281, -1281, 1722 1437, -1281, -1281, -1281, -1281, -1281, -1281, 9863, 831, 269, 1723 -1281, 1424, 831, 1236, 373, -1281, -1281, -1281, -1281, -1281, 1724 -1281, -1281, -1281, 1443, -1281, -1281, -1281, -1281, -1281, -1281, 1725 1452, 1454, -1281, -1281, -1281, -1281, -1281, -1281, -1281, 1458, 1726 -1281, 1457, -1281, -1281, 10343, 148, 6464, 10343, -1281, 1462, 1727 6464, -1281, 171, 1484, 1486, -1281, -1281, 1465, 1476, 1455, 1728 905, -1281, -1281, -1281, -1281, -1281, 1338, 2195, 1471, 862, 1729 918, 6306, -1281, 772, 1477, 6464, 544, 544, 1480, 1482, 1730 1483, 1485, -1281, -1281, 8426, 1472, -1281, 1555, 6306, 1493, 1731 -1281, -1281, 10254, -1281, 790, -1281, 1467, 10343, 1468, -1281, 1732 -1281, 1511, -1281, 1513, -1281, 1507, 1529, -1281, 1496, 1519, 1733 9863, -1281, -1281, -1281, 831, 544, 1520, 1499, 1515, -1281, 1734 1326, 1326, -1281, -1281, -1281, -1281, -1281, 10343, 258, -1281, 1735 922, -1281, -1281, 7790, -1281, -1281, 1501, 6464, -1281, 6464, 1736 7790, 144, 9716, 144, 9716, 1528, -1281, 1530, -1281, -1281, 1737 -1281, 1524, 862, -1281, 794, -1281, -1281, 6464, 1540, 1542, 1738 -1281, 6306, 6306, -1281, -1281, 1051, 133, -1281, -1281, 1510, 1739 -1281, 1051, -1281, -1281, 2099, 544, -1281, -1281, 144, 9716, 1740 144, 9716, 1546, 1525, 544, -1281, -1281, -1281, -1281, -1281, 1741 10254, 1541, 1051, 7866, 6464, 10165, 1543, 1051, 1551, 2099, 1742 2338, -1281, -1281, -1281, 1552, -1281, -1281, -1281, -1281, 8972, 1743 -1281, -1281, -1281, 10072, -1281, 10254, -1281, -1281, 1531, 9979, 1744 -1281, -1281, 10165, 144, 2338, 144, 1557, 1559, 795, -1281, 1745 10072, -1281, -1281, -1281, 9979, -1281, -1281, -1281, 144, 144, 1746 -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281 1594 3506, 8076, -1332, 12, -1332, -1332, -1332, -1332, -1332, -1332, 1595 -1332, 61, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, 1596 -1332, -1332, -1332, -1332, -1332, -1332, 102, 102, 102, 1011, 1597 1062, 86, 5961, 228, -1332, -1332, -1332, -1332, -1332, 138, 1598 -1332, -1332, -1332, 684, 144, 9470, -1332, -1332, -1332, -1332, 1599 -1332, -1332, 190, 182, -1332, 1658, -1332, -1332, -1332, -1332, 1600 201, 1834, 303, 32, 4928, -1332, -1332, 9508, 1650, -1332, 1601 -1332, -1332, 615, 401, 4443, 184, 589, 615, 1225, -1332, 1602 -1332, 848, 938, -1332, 615, 1259, -1332, 301, -1332, 486, 1603 503, -1332, -1332, -1332, -1332, 316, 182, 102, -1332, 102, 1604 -1332, -1332, -1332, -1332, 9240, 1658, -1332, -1332, 1658, -1332, 1605 9354, 391, -1332, -1332, -1332, 1948, 9876, -1332, 810, 810, 1606 810, -1332, -1332, -1332, 102, -1332, -1332, -1332, 426, 447, 1607 456, -1332, -1332, -1332, 477, -1332, -1332, -1332, -1332, -1332, 1608 485, 495, -1332, -1332, 36, 8974, 2459, 272, 545, 579, 1609 623, 632, 671, 733, 8777, 7372, 596, 719, -1332, 9546, 1610 -1332, -1332, -1332, -1332, 739, -1332, 209, 3245, 3245, -1332, 1611 760, 213, -1332, -1332, -1332, -1332, 770, 237, 353, 362, 1612 102, 755, -1332, -1332, 1834, 1803, 846, -1332, 70, -1332, 1613 102, 102, 182, -1332, -1332, 98, -1332, 102, 102, -1332, 1614 2479, 820, 843, 810, 5405, -1332, -1332, 844, 9470, -1332, 1615 -1332, 615, -1332, -1332, -1332, 182, -1332, 1658, 190, -1332, 1616 7926, -1332, 810, 810, 810, 182, -1332, 1011, -1332, 2880, 1617 -1332, -1332, 827, 810, -1332, 810, -1332, 138, 8974, 8891, 1618 857, -1332, 1062, 864, 810, -1332, 1011, 870, 879, -1332, 1619 5961, 735, -1332, -1332, -1332, 9437, -1332, -1332, 3894, -1332, 1620 846, 69, 9876, 6310, 1948, 2479, -1332, 114, -1332, -1332, 1621 9354, 1658, 875, 11374, -1332, -1332, 546, -1332, 11116, 886, 1622 926, 10861, 905, 10919, 10938, -1332, 919, -1332, -1332, -1332, 1623 -1332, 10996, 10996, 735, 8632, 928, 10919, 9088, -1332, -1332, 1624 -1332, -1332, -1332, -1332, 949, -1332, 840, 2531, 10919, -1332, 1625 516, 336, 425, 270, 704, 934, 936, 960, 997, 52, 1626 -1332, -1332, 974, 356, -1332, 290, -1332, -1332, 2459, -1332, 1627 -1332, 600, 996, -1332, 701, 996, 1007, 138, -1332, -1332, 1628 1010, 9240, -1332, 1018, 8746, -1332, -1332, 1849, 1084, 8347, 1629 5405, 615, -1332, 615, 810, 810, -1332, -1332, -1332, -1332, 1630 -1332, -1332, 810, 9914, 1658, -1332, -1332, 9987, 1975, -1332, 1631 9012, -1332, -1332, -1332, -1332, -1332, -1332, -1332, 1030, 3059, 1632 10919, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, 1633 -1332, -1332, -1332, -1332, -1332, 1948, -1332, 773, 1012, 1034, 1634 1040, 889, 1045, 1051, 1053, 1803, -1332, -1332, 1063, 190, 1635 1064, -1332, -1332, 1066, -1332, -1332, -1332, 9437, -1332, -1332, 1636 -1332, -1332, -1332, 2479, -1332, 8974, 8974, -1332, 810, 1948, 1637 6923, 1658, 8420, -1332, -1332, -1332, -1332, 9437, 69, -1332, 1638 -1332, 615, 182, -1332, -1332, 9437, -1332, 3625, -1332, -1332, 1639 810, 810, 464, 10025, 1068, 907, 9695, -1332, 437, 475, 1640 1062, -1332, 1067, 1069, 1047, 1070, 810, -1332, -1332, -1332, 1641 -1332, 10283, -1332, 522, 6793, -1332, 182, 1074, -1332, 1948, 1642 11198, 6368, -1332, -1332, -1332, -1332, 939, 2479, -1332, 8493, 1643 846, 5374, -1332, -1332, -1332, 828, 610, 974, 1062, 11374, 1644 861, 9354, -1332, 11374, -1332, -1332, -1332, -1332, 618, -1332, 1645 1073, 926, 326, 8632, -1332, 10025, -1332, -1332, 8632, -1332, 1646 8860, 8632, -1332, -1332, -1332, 1077, -1332, 619, 1082, 630, 1647 1087, -1332, 5066, 7012, -1332, -1332, -1332, 47, -1332, -1332, 1648 10784, -1332, 474, 10784, -1332, -1332, -1332, -1332, -1332, -1332, 1649 -1332, -1332, -1332, -1332, 6310, 6310, -1332, 10919, 10919, 10919, 1650 10919, 10919, 10919, 10919, 10919, 10919, 10919, 10919, 10919, 10919, 1651 10919, 10919, 10919, 10919, 10919, 4001, 6310, -1332, 356, 777, 1652 -1332, -1332, 102, 102, -1332, -1332, 8974, -1332, -1332, 1066, 1653 735, -1332, 1066, 10842, -1332, -1332, -1332, 6075, 7012, 1086, 1654 9202, 1093, -1332, 10055, -1332, -1332, 739, -1332, 1094, 690, 1655 1096, 1090, 157, 974, -1332, 102, 102, 974, 166, -1332, 1656 102, 102, 1066, -1332, -1332, 102, 102, -1332, 996, 10137, 1657 1658, 11343, 372, 531, 10137, -1332, 6678, -1332, 974, -1332, 1658 9914, -1332, 285, 8042, 8042, 8042, 1658, -1332, 5183, 1085, 1659 453, 1030, 955, 1095, 1097, -1332, 1099, 3245, 590, -1332, 1660 1182, 1658, 8042, 735, 1948, 735, 846, 706, 996, -1332, 1661 -1332, 806, 996, -1332, -1332, -1332, 926, -1332, 996, 182, 1662 10283, -1332, 647, 1107, 688, 1108, -1332, 1109, 182, -1332, 1663 -1332, 9437, 182, 1105, 497, 502, 10167, 7492, 1400, 10919, 1664 1678, -1332, -1332, 1103, 62, 1103, -1332, -1332, -1332, 102, 1665 102, -1332, -1332, 1062, -1332, 102, -1332, -1332, 8891, 1062, 1666 1110, 10919, -1332, 1062, 11343, -1332, -1332, 1113, -1332, -1332, 1667 -1332, 735, -1332, 11271, 10919, -1332, 8042, 718, 8347, -1332, 1668 -1332, 739, 1114, 1115, 828, 2655, -1332, -1332, 11374, -1332, 1669 -1332, 1116, -1332, -1332, 1122, -1332, 1116, 1123, 11116, 6310, 1670 163, 1092, 54, 1131, 1128, 1135, 928, 1130, 1138, -1332, 1671 1140, 1141, 9733, 7132, -1332, 6310, -1332, 630, 1274, -1332, 1672 5523, 6310, 1139, -1332, -1332, 1030, 695, -1332, 6310, -1332, 1673 -1332, 741, -1332, -1332, -1332, -1332, -1332, 516, 516, 336, 1674 336, 425, 425, 425, 425, 270, 270, 704, 934, 936, 1675 960, 997, 10919, 754, -1332, 10283, 1150, 1151, 1153, 777, 1676 -1332, -1332, -1332, -1332, -1332, 10283, 748, 10919, 8042, -1332, 1677 9914, -1332, 7612, 9316, 9126, 7372, -1332, -1332, -1332, 690, 1678 10283, 950, 1164, 1165, 1171, 1172, 1179, 1180, 1181, -1332, 1679 3591, 1090, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, 1680 -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, 1066, 1681 -1332, -1332, -1332, 974, -1332, -1332, -1332, -1332, -1332, -1332, 1682 -1332, -1332, 1183, -1332, 1184, 1187, -1332, -1332, 190, 1139, 1683 5183, -1332, -1332, -1332, 3059, 1185, -1332, -1332, -1332, -1332, 1684 -1332, 1062, 6532, 1270, -1332, -1332, -1332, -1332, 1173, 190, 1685 -1332, -1332, 1066, -1332, -1332, 1066, 152, 1066, -1332, -1332, 1686 -1332, -1332, -1332, -1332, 9584, -1332, 182, -1332, 8891, -1332, 1687 -1332, 1193, 795, 1199, 1200, 1204, -1332, -1332, 1678, -1332, 1688 -1332, -1332, -1332, -1332, -1332, -1332, 907, 9763, 1047, -1332, 1689 -1332, 1069, 1205, 1201, -1332, -1332, 1206, 1207, -1332, 718, 1690 1989, -1332, 634, -1332, 2655, 974, -1332, 1211, 11374, 10205, 1691 8974, 1214, -1332, -1332, 1212, 1217, 1213, -1332, 10919, 229, 1692 205, 1215, -1332, 1202, 735, 1202, 7012, 6310, -1332, -1332, 1693 1202, -1332, 1274, 3059, -1332, -1332, -1332, -1332, 1220, 6310, 1694 1228, 735, 5183, -1332, 10784, -1332, 735, -1332, -1332, 6310, 1695 -1332, 863, 996, -1332, -1332, -1332, -1332, -1332, -1332, -1332, 1696 1030, 8746, -1332, -1332, 7732, 1219, -1332, 876, 996, -1332, 1697 883, 896, 996, -1332, 810, 4775, -1332, -1332, -1332, 10283, 1698 10283, -1332, 8420, 8420, -1332, 1221, 1226, 1233, 1235, -1332, 1699 1234, 643, 137, 1139, -1332, 735, -1332, 3245, -1332, 6310, 1700 517, -1332, 6892, 1245, 1249, 10726, 1253, 1258, 330, 380, 1701 387, 6310, 1265, 182, 6310, 6310, 1256, 294, 1269, 1250, 1702 -1332, -1332, -1332, 1277, -1332, -1332, -1332, -1332, -1332, -1332, 1703 -1332, -1332, -1332, 1062, 1285, 6310, -1332, 10283, 10283, 102, 1704 1287, -1332, 9845, 9622, 932, 996, -1332, -1332, -1332, -1332, 1705 -1332, 1286, -1332, -1332, -1332, -1332, 1293, 1989, -1332, -1332, 1706 1275, -1332, 1116, -1332, -1332, 1948, 1290, -1332, -1332, -1332, 1707 749, 1292, -1332, 54, 1295, 10919, 1279, 54, 54, 1305, 1708 1301, -1332, 1099, 6310, 1308, 1220, 605, 89, 1306, -1332, 1709 1301, -1332, 1312, 1306, -1332, -1332, 1317, -1332, -1332, 1066, 1710 1319, 1322, 7252, 1323, 1325, 1326, -1332, -1332, 1329, -1332, 1711 -1332, 1066, -1332, -1332, -1332, -1332, 1066, 6310, 6310, 10919, 1712 1330, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, 1713 -1332, -1332, -1332, 10919, 10919, 1332, 1335, 1306, -1332, -1332, 1714 1062, -1332, -1332, -1332, 7853, 10205, 6310, 6310, 1394, 6310, 1715 -1332, -1332, 1321, -1332, 1324, 6310, 1327, 1331, 6310, 1013, 1716 1333, 97, 8265, 1262, 102, -1332, -1332, 6532, 1334, 537, 1717 -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, 1066, 1718 -1332, 10544, -1332, 8493, 1345, -1332, -1332, 10205, 562, 563, 1719 -1332, 1343, 1344, 926, 1352, -1332, 450, -1332, -1332, 6310, 1720 1355, 1349, -1332, -1332, 1356, 543, 613, 735, 1357, 1358, 1721 -1332, 1361, -1332, 10283, -1332, -1332, -1332, -1332, -1332, 1365, 1722 -1332, 10283, 10283, 10283, -1332, -1332, 1367, -1332, 1368, 1371, 1723 1372, 668, 8115, 8231, -1332, -1332, 457, -1332, 1376, 1378, 1724 -1332, 8566, 750, 782, 1387, 793, 6762, -1332, -1332, 598, 1725 -1332, -1332, 803, 1388, 1393, 182, 1445, 882, -1332, -1332, 1726 6310, -1332, 10784, 10726, -1332, -1332, -1332, 1396, 1404, 10283, 1727 -1332, -1332, -1332, 1401, -1332, -1332, -1332, -1332, -1332, -1332, 1728 10205, 926, 254, -1332, 1384, 926, 1220, 366, -1332, -1332, 1729 -1332, -1332, -1332, -1332, -1332, -1332, 1405, -1332, -1332, -1332, 1730 -1332, -1332, -1332, 1406, 1409, -1332, -1332, -1332, -1332, -1332, 1731 -1332, -1332, 1414, -1332, 1413, -1332, -1332, 10726, 84, 6310, 1732 10726, -1332, 1417, 6310, -1332, 99, 1433, 1434, -1332, -1332, 1733 1422, 1425, 1408, 852, -1332, -1332, -1332, -1332, -1332, 1658, 1734 1948, 1421, 949, 918, 10919, -1332, 832, 1426, 6310, 735, 1735 735, 1427, 1431, 1440, 1441, -1332, -1332, 8420, 1428, -1332, 1736 1501, 10919, 1437, -1332, -1332, 10637, -1332, 845, -1332, 1424, 1737 10726, 1436, -1332, -1332, 1460, -1332, 1461, -1332, 1476, 1481, 1738 -1332, 1446, 1471, 10205, -1332, -1332, -1332, 926, 735, 1472, 1739 1452, 1468, -1332, 1306, 1306, -1332, -1332, -1332, -1332, -1332, 1740 10726, 295, -1332, 940, -1332, -1332, 5671, -1332, -1332, 1454, 1741 6310, -1332, 6310, 5671, 182, 10025, 182, 10025, 1478, -1332, 1742 1482, -1332, -1332, -1332, 1480, 949, -1332, 850, -1332, -1332, 1743 6310, 1479, 1487, -1332, 10919, 10919, -1332, -1332, 1054, 123, 1744 -1332, -1332, 1465, -1332, 1054, -1332, -1332, 1818, 735, -1332, 1745 -1332, 182, 10025, 182, 10025, 1492, 1474, 735, -1332, -1332, 1746 -1332, -1332, -1332, 10637, 1488, 1054, 6242, 6310, 10548, 1495, 1747 1054, 1502, 1818, 2347, -1332, -1332, -1332, 1505, -1332, -1332, 1748 -1332, -1332, 8974, -1332, -1332, -1332, 10415, -1332, 10637, -1332, 1749 -1332, 1484, 10322, -1332, -1332, 10548, 182, 2347, 182, 1509, 1750 1510, 853, -1332, 10415, -1332, -1332, -1332, 10322, -1332, -1332, 1751 -1332, 182, 182, -1332, -1332, -1332, -1332, -1332, -1332, -1332, 1752 -1332 1747 1753 }; 1748 1754 … … 1750 1756 static const yytype_int16 yypgoto[] = 1751 1757 { 1752 -1 281, 4254, 1590, -1281, 1409, -1281, 52, 0, -229, -1281,1753 5 96, -527, -497, -931, -99, 4508, -1281, 358, 609, 563,1754 5 18, 591, 1104, 1105, 1110, 1117, 1112, -1281, 613, -339,1755 53 46, -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 -1281, -1281, 1269, 793, -513, -1281, -522, -57, -636, -1281,1765 -1281, -959, -994, 122, 819, 1153, 135, -1281, 1441, 296,1766 -299, -212, -109, 749, 844, -1281, 1087, -1281, 2859, 1478,1767 -462, 1000, -1281, -1281, 778, -1281, -233, -1281, -72, -1281,1768 -1281, -1281, -1232, 504, -1281, -1281, -1281, 1259, -1281, 68,1769 -1 281, -1281, -850, -96, -1280, -93, 1665, -1281, 2401, -1281,1770 993, -1281, -164, 689, -177, -176, -170, 2, -39, -33,1771 - 28, 1052, 48, 75, 93, -100, -167, -166, -153, -148,1772 - 277, -569, -500, -490, -543, -300, -514, -1281, -1281, -506,1773 1174, 1177, 1181, 2149, 5126, -572, -549, -544, -523, -484,1774 -1281, -427, -665, -663, -660, -602, -320, -271, -1281, -1281,1775 102, 140, -84, -1281, 3728, 128, -603, -4471758 -1332, 4383, 1919, -1332, 1457, -1332, 41, 0, -257, -1332, 1759 544, -527, -514, -956, -190, 3713, -1332, 1485, 580, 585, 1760 548, 602, 1055, 1052, 1056, 1059, 1061, -1332, -217, -341, 1761 5350, -699, -697, -922, -1332, -83, -701, -678, -1332, 561, 1762 -1332, 399, -1087, -1332, -1332, 141, -1332, -1329, -838, 252, 1763 -1332, -1332, -1332, -1332, 71, -1078, -1332, -1332, -1332, -1332, 1764 -1332, -1332, 325, -1308, 57, -1332, -297, -1332, 504, 305, 1765 -1332, 173, -1332, -305, -1332, -1332, -1332, 558, -799, -1332, 1766 -1332, 11, -1027, 151, 658, -1332, -1332, -1332, -52, -1332, 1767 117, 913, -200, 1494, 4071, -1332, -1332, 19, 107, 365, 1768 -232, 1565, -1332, 2150, -1332, -1332, 134, 2571, -1332, 3063, 1769 1550, -1332, -1332, -1332, -643, -431, 1210, 1216, 707, 947, 1770 188, -1332, -1332, -1332, 945, 723, -404, -1332, -520, -362, 1771 293, -1332, -1332, -990, -995, 965, 1194, 1083, 304, -1332, 1772 150, 317, -75, -197, -129, 679, 781, -1332, 1020, -1332, 1773 3338, 1566, -427, 948, -1332, -1332, 710, -1332, -230, -1332, 1774 -89, -1332, -1332, -1332, -1266, 433, -1332, -1332, -1332, 1195, 1775 -1332, 22, -1332, -1332, -865, -105, -1331, -98, 1750, -1332, 1776 2253, -1332, 929, -1332, -168, 288, -180, -179, -173, 2, 1777 -34, -29, -28, 687, 75, 77, 92, -161, -162, -153, 1778 -151, -148, -320, -530, -516, -495, -552, -307, -529, -1332, 1779 -1332, -506, 1106, 1117, 1121, 2218, 5180, -562, -569, -544, 1780 -538, -550, -1332, -429, -691, -685, -671, -611, -246, -241, 1781 -1332, -1332, 1149, 273, -84, -1332, 3714, 76, -612, -441 1776 1782 }; 1777 1783 … … 1779 1785 positive, shift that token. If negative, reduce the rule which 1780 1786 number is the opposite. If YYTABLE_NINF, syntax error. */ 1781 #define YYTABLE_NINF -52 21787 #define YYTABLE_NINF -525 1782 1788 static const yytype_int16 yytable[] = 1783 1789 { 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, 1790 47, 112, 96, 427, 398, 399, 768, 933, 452, 148, 1791 266, 400, 113, 934, 149, 150, 791, 406, 871, 67, 1792 259, 439, 401, 512, 407, 712, 707, 935, 613, 112, 1793 112, 402, 47, 403, 96, 1203, 404, 1092, 382, 383, 1794 846, 618, 111, 47, 895, 47, 505, 160, 1187, 854, 1795 1153, 67, 1185, 1186, 142, 47, 749, 48, 975, 853, 1796 201, 47, 857, 192, 47, 847, 215, 47, 864, 225, 1797 342, 848, 751, 820, 1401, 947, 756, 1145, 218, 842, 1798 845, 112, 112, 995, 398, 399, 933, 279, 409, 48, 1799 1464, 400, 934, 843, 121, 424, 1468, 406, 605, 1197, 1800 779, 31, 401, 1091, 407, 47, 935, 68, 47, 31, 1801 202, 402, 679, 403, 844, 47, 404, 61, 151, 109, 1802 152, 165, 637, 884, 884, 884, 641, 739, 1421, 1422, 1803 41, 42, 688, 408, 75, 153, 290, 31, 446, 68, 1804 692, 31, 884, 1421, 1422, 280, 47, 574, 160, 61, 1805 148, 54, 114, 31, 47, 149, 150, 467, 783, 47, 1806 1320, 372, 482, 484, 1464, 978, 75, -234, -234, 1510, 1807 122, 211, 858, 410, 1265, 746, 861, 1484, 483, 251, 1808 140, 410, 575, 54, 47, 47, 165, 160, 2, 205, 1809 4, 5, 6, 7, 1468, 141, 31, 878, 1423, 1468, 1810 47, 881, 1266, 478, 1539, 31, 1541, 418, 47, 410, 1811 160, 527, 677, 1432, 842, 209, 884, 47, 219, 1468, 1812 47, 327, 442, 488, 1080, 410, 1468, 112, 843, 1321, 1813 148, 240, 243, 1193, 536, 149, 150, 674, -234, 143, 1814 886, 887, 112, 740, 675, 536, 112, 145, 1187, 844, 1815 47, 112, 96, 35, 760, 36, 154, 596, 905, 151, 1816 1194, 152, 1099, 1202, 47, 47, 855, 160, 610, 67, 1817 846, 47, 470, 105, 105, 862, 153, 610, 47, 1203, 1818 976, 885, 885, 885, 435, 1102, 342, 703, 95, 1038, 1819 666, 857, 472, 112, 705, 847, 170, 167, 1187, 1037, 1820 885, 848, 1185, 1186, 618, 105, 200, 48, 884, 842, 1821 1025, 536, 1155, 1014, 327, 1136, -3, 180, 681, 674, 1822 95, 168, 1137, 843, 686, 376, 675, 441, 47, 386, 1823 372, 147, 958, 95, 524, 739, 536, 1346, 1135, 1111, 1824 105, 377, 682, 684, 844, 387, 435, 47, 47, 188, 1825 683, 685, 95, 389, 605, 95, 831, 68, 937, 176, 1826 564, 565, 1092, 1404, 47, 478, 285, 61, 47, 390, 1827 1217, 440, 479, 165, 885, 1220, 1221, 41, 42, 653, 1828 950, 251, 329, 605, 75, 478, 926, 1208, 605, 75, 1829 846, 1494, 464, 478, 483, 47, 566, 567, 854, 880, 1830 585, 54, 109, 521, -290, 47, 586, 372, 536, 260, 1831 871, 739, 261, 41, 42, 847, 576, 246, 1194, 916, 1832 607, 848, 1187, 47, 1017, 251, 755, 1459, 1091, 47, 1833 527, 47, 1041, 228, 95, 527, 761, 229, 527, 1203, 1834 233, 1552, 235, 762, 1262, 770, 1203, 95, 342, 244, 1835 1553, 740, 109, 1453, 1454, 47, 211, 560, 561, 109, 1836 112, 1563, 1211, 41, 42, 578, 885, 410, 1567, 391, 1837 41, 42, 397, 188, 112, 579, -112, 1568, 393, 47, 1838 1173, 1175, 936, 1408, 874, 392, 249, 47, 875, 372, 1839 1151, 47, 813, 96, 394, 47, 95, -112, 112, 1203, 1840 112, 327, 327, -520, 936, 979, 1215, 1383, 95, 1107, 1841 67, 824, 1213, 562, 563, 111, 712, 707, 398, 399, 1842 653, 438, 263, 105, 1119, 400, 505, 740, 896, 654, 1843 1261, 1036, 406, -469, 479, -10, 401, 112, 95, 407, 1844 653, 1122, 112, 653, 618, 402, 109, 403, 48, 1080, 1845 404, 75, 486, 713, 479, 1038, -443, 41, 42, 907, 1846 1344, 767, 479, 1107, -469, -444, -469, 1345, 909, 714, 1847 -469, 75, -112, -112, 693, 490, 228, 327, 784, 75, 1848 586, 767, 507, 790, 767, 789, 275, 211, -112, 1019, 1849 112, 715, -291, 831, 277, 1008, 327, 47, 68, 8, 1850 9, 10, 11, 12, 278, 1381, 737, 716, 61, 47, 1851 717, 47, 342, 713, 172, 109, 95, 833, 715, 2, 1852 205, 4, 5, 6, 7, 75, 41, 42, 31, 929, 1853 47, 472, 730, 1200, 930, 557, 612, 1134, 731, 478, 1854 558, 559, 54, 876, 1036, 1394, 47, 877, 750, 1201, 1855 754, 176, 112, 1200, 1350, 330, 34, 252, 55, 55, 1856 1523, 47, 327, 112, 47, 112, 1528, 1500, 638, 1326, 1857 897, 712, 642, 1051, 1500, 500, 607, 501, 1335, 1337, 1858 1184, 955, 1431, 831, 35, 109, 36, 1548, 342, 331, 1859 55, 1049, 1555, 188, 1336, 1338, 41, 42, 47, 1420, 1860 47, 898, 1428, 652, 906, 872, 908, 899, 370, 587, 1861 607, 410, 1096, 112, 775, -112, 228, -112, 233, 112, 1862 747, -112, 55, 112, 1352, 55, 748, 1549, 757, 774, 1863 1384, 112, 161, 332, 758, 775, -112, -112, 441, 777, 1864 1130, 410, 333, 704, 47, 47, 876, 1467, 193, 778, 1865 1118, 216, 1471, 416, 226, -105, 37, 920, 47, -105, 1866 40, 936, 37, 775, 105, 1056, 40, 41, 42, 1502, 1867 674, 1503, 954, 41, 42, 605, 436, 675, 703, 95, 1868 1369, 334, 1493, 612, 1370, 705, 444, 8, 9, 10, 1869 11, 12, 1154, 43, 1254, 1393, 568, 569, 922, 839, 1870 739, 610, 892, 146, 775, 1003, 228, 109, 479, 611, 1871 590, 1004, 410, 347, 737, 910, 31, 410, 41, 42, 1872 8, 9, 10, 11, 12, 75, 1550, 959, 371, 610, 1873 763, 211, 764, 161, 1177, 765, 1252, 960, 771, 47, 1874 1256, 933, 1051, 335, 34, 211, 373, 934, 375, 31, 1875 479, 47, 1294, 1295, 833, 528, 1007, 1004, 1016, 1250, 1876 1377, 935, 831, 945, 731, 586, 775, 75, 1562, 948, 1877 775, 1009, 161, 464, 1562, 384, 979, 34, 55, 388, 1878 979, 979, 251, 329, 410, 1562, 578, 396, 410, 1562, 1879 737, 941, 1378, 941, 653, 161, 579, 841, 775, 612, 1880 37, 112, 653, 1380, 40, 329, 410, 443, 55, 775, 1881 408, 41, 42, 1385, 115, 913, 740, 410, 936, 775, 1882 109, 67, 138, 237, 47, 537, 538, 539, 1198, 425, 1883 1372, 41, 42, 109, 873, 138, 139, 744, 47, 211, 1884 1390, 1391, 1450, 1078, 41, 42, 47, 745, 1447, 540, 1885 888, 541, 426, 542, 543, 1469, 431, 238, 158, 449, 1886 1516, 775, 239, 1573, 47, 904, 1517, 1441, 1004, 586, 1887 752, -367, 1157, 919, 410, 753, 936, 936, -396, 37, 1888 1123, 182, 183, 40, 112, 1169, 932, 410, 704, 491, 1889 41, 42, 1172, 653, 610, 511, 1342, 740, 418, 670, 1890 410, 112, 468, 690, 653, 1174, 112, 610, 290, 68, 1891 109, 469, 138, 139, 515, 373, 698, 257, 410, 61, 1892 1245, 41, 42, 158, 699, 1139, 700, 109, 520, 138, 1893 139, 536, 841, 612, 1447, 1448, 75, 732, 41, 42, 1894 532, 1237, 1147, 410, 654, 767, 327, 1147, 488, 329, 1895 410, 1061, 242, 54, 570, 112, 1495, 1496, 323, 855, 1896 329, 610, 507, 1449, 571, 653, 891, 339, 112, 112, 1897 112, 1313, 1314, 1315, 528, 1351, 1353, 1354, 1535, 528, 1898 1461, 1205, 528, 128, 1402, 129, 130, 131, 1402, 572, 1899 347, 573, 373, 112, 41, 42, 1147, 872, 1421, 1422, 1900 8, 9, 10, 11, 12, 576, 1078, 338, 1010, 1212, 1901 1214, 1216, 801, 802, 803, 804, -440, 429, 1015, 594, 1902 1124, 433, 667, 1302, 1303, 47, 1305, 841, 1107, 31, 1903 597, 441, 1309, 1026, 109, 1312, 138, 139, 342, 612, 1904 797, 798, 647, 654, 668, 41, 42, 799, 800, 55, 1905 669, 323, 455, 1521, 1461, 671, 37, 34, 182, 183, 1906 40, 672, 37, 673, 182, 183, 40, 41, 42, 68, 1907 805, 806, 676, 41, 42, 105, 678, 256, 721, 479, 1908 696, 718, 759, 433, 723, 719, 495, 936, -238, 772, 1909 1485, 347, 776, 609, 162, 610, 75, 780, 834, 609, 1910 112, 610, -12, 611, 936, 836, 838, 529, 849, 611, 1911 158, 901, -13, 54, 893, 894, 218, 921, 923, 928, 1912 699, 924, 47, -417, 977, 949, 704, 653, -292, -524, 1913 963, 970, 748, 972, 704, 8, 9, 10, 11, 12, 1914 918, 983, 105, 1061, 984, 985, 67, 987, 988, 925, 1915 989, 990, 612, 927, 595, 999, 347, 602, 1123, 162, 1916 1011, 1012, -293, 1013, 31, 112, 112, 112, 1078, 8, 1917 9, 10, 11, 12, 1027, 1028, 635, 936, 936, 737, 1918 639, 1029, 1030, 339, 8, 9, 10, 11, 12, 1031, 1919 1032, 1033, 34, 1044, -405, 1445, 1427, -404, 31, 1093, 1920 1058, 347, 347, 347, 1095, 1103, 1147, 1147, 1147, 1104, 1921 1105, 211, 1561, 31, 1106, 1112, 993, 1113, 1114, 1115, 1922 347, 1121, 653, 653, 1131, 1205, 34, 1132, 775, 1167, 1923 1133, 1138, 1182, 1183, 68, 105, 1143, 1188, 323, 323, 1924 1146, 34, 1189, 1190, 61, 1191, 1192, 537, 538, 539, 1925 1300, 1123, 398, 399, 1206, 209, 219, 434, 1207, 400, 1926 737, 75, 1209, 767, 1078, 406, 455, 1210, 1222, 455, 1927 401, 540, 407, 541, 1218, 542, 1322, 653, 54, 402, 1928 653, 403, 1225, 777, 404, 410, 1224, 115, 460, 674, 1929 1232, 1233, -3, 778, 347, 1230, 675, 1235, 1124, 47, 1930 47, 1240, 1534, 1242, 500, 1246, 1251, 1253, 441, 112, 1931 112, 1255, 495, 68, 323, 1258, 495, 1259, 1078, 434, 1932 1263, 1078, 1267, 479, 1270, 653, 529, 1272, 529, 1274, 1933 653, 529, 1275, 323, 529, 1276, 728, 1277, 1278, 1280, 1934 75, 1304, 1287, 531, 1296, 339, 162, 1297, 112, 1325, 1935 1147, 1147, 440, 1307, 1123, 1333, 1308, 54, 1339, 1310, 1936 653, 1341, 1343, 1311, 1348, 1319, 1078, 1347, 1349, 1355, 1937 1356, 1078, 37, 1357, 182, 183, 40, 1359, 105, 1365, 1938 1366, 1367, 1368, 41, 42, 1205, 347, 1101, 1375, 1486, 1939 1376, 1124, 1205, 347, 64, 116, 1379, 1386, 148, 323, 1940 105, 1078, 1387, 149, 150, 1315, 1395, 47, 112, 698, 1941 829, 410, 175, 602, 1396, 1398, 1405, 112, 1415, 700, 1942 105, 1416, 1408, 653, -406, 1419, 64, 1430, 653, 1434, 1943 1436, 1438, 47, 47, 1439, 160, 1446, 1455, 1451, 159, 1944 1440, 1456, 870, 1460, 1370, 1205, 653, 602, 653, 1536, 1945 1457, 1458, 653, 879, 1465, 653, 1470, 47, 1544, 372, 1946 55, 220, 175, 653, 1078, 175, 1358, 653, 1472, 1078, 1947 1474, 1476, 1478, 68, 1360, 1361, 1362, 1480, 1482, 105, 1948 68, 1483, 1488, 479, 1489, 1490, 1501, 1078, 1511, 1078, 1949 479, 1519, 1513, 1078, 1124, 1515, 1078, 1527, 258, 1520, 1950 75, 1542, 460, 1547, 1078, 460, 1543, 75, 1078, 339, 1951 1554, 175, 1556, 105, 213, 1558, 1564, 54, 327, 1571, 1952 1572, 1223, 1397, 808, 54, 807, 1324, 55, 809, 212, 1953 214, 455, 810, 68, 1219, 811, 1522, 1433, 1574, 231, 1954 328, 1389, 1257, 479, 347, 728, 1504, 241, 258, 349, 1955 1406, 1229, 942, 1108, 2, 205, 4, 5, 6, 7, 1956 75, 495, 531, 694, 531, 729, 213, 531, 951, 695, 1957 531, 1110, 1142, 826, 175, 1057, 1120, 54, 900, 405, 1958 1334, 212, 214, 227, 816, 339, 742, 973, 8, 9, 1959 10, 11, 12, 0, 423, 817, 965, 428, 430, 818, 1960 347, 347, 159, 1444, 0, 0, 0, 0, 0, 213, 1961 0, 0, 0, 0, 0, 0, 105, 31, 0, 35, 1962 55, 36, 0, 447, 212, 214, 0, 450, 175, 451, 1963 37, 0, 173, 174, 40, 175, 0, 0, 466, 105, 1964 0, 41, 42, 1018, 64, 34, 105, 829, 0, 480, 1965 37, 0, 182, 183, 40, 0, 0, 0, 0, 487, 1966 0, 41, 42, 0, 0, 0, 0, 430, 517, 0, 1967 213, 0, 0, 0, 0, 0, 123, 126, 127, 0, 1968 728, 534, 535, 0, 0, 212, 214, 698, 0, 410, 1969 728, 0, 0, 556, 0, 0, 0, 700, 0, 105, 1970 0, 0, 0, 0, 175, 728, 0, 0, 213, 0, 1971 0, 0, 213, 8, 9, 10, 11, 12, 0, 0, 1972 486, 175, 0, 212, 214, 175, 0, 212, 214, 535, 1973 0, 0, 0, 0, 0, 258, 0, 829, 603, 0, 1974 0, 455, 31, 506, 631, 0, 0, 253, 0, 254, 1975 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 1976 455, 636, 55, 55, 258, 535, 0, 460, 0, 0, 1977 34, 0, 0, 0, 729, 37, 1388, 182, 183, 40, 1978 0, 495, 1125, 323, 0, 55, 41, 42, 175, 0, 1979 37, 0, 182, 183, 40, 0, 0, 0, 0, 213, 1980 0, 41, 42, 0, 0, 55, 37, 0, 182, 183, 1981 40, 480, 184, 0, 212, 214, 0, 41, 42, 0, 1982 0, 37, 185, 173, 174, 40, 349, 1532, 0, 410, 1983 395, 480, 41, 42, 870, 0, 0, 1533, 0, 480, 1984 414, 415, 0, 184, 0, 419, 0, 421, 422, 0, 1985 347, 347, 0, 185, 0, 0, 0, 0, 371, 55, 1986 0, 0, 0, 0, 55, 724, 0, 0, 430, 0, 1987 166, 0, 171, 0, 0, 177, 178, 179, 0, 181, 1988 213, 0, 0, 738, 0, 64, 0, 0, 0, 0, 1989 0, 0, 0, 430, 232, 212, 214, 430, 55, 8, 1990 9, 10, 11, 12, 728, 728, 247, 248, 0, 729, 1991 0, 0, 212, 0, 0, 455, 829, 0, 0, 729, 1992 37, 0, 182, 183, 40, 0, 258, 349, 31, 0, 1993 213, 41, 42, 0, 729, 1505, 0, 1509, 0, 0, 1994 0, 0, 794, 795, 796, 212, 214, 37, 0, 173, 1995 174, 40, 0, 0, 175, 0, 34, 264, 41, 42, 1996 0, 0, 728, 728, 0, 0, 0, 265, 0, 0, 1997 0, 0, 1538, 819, 1540, 347, 0, 460, 0, 0, 1998 0, 0, 0, 0, 375, 535, 0, 175, 0, 0, 1999 0, 636, 832, 0, 603, 0, 460, 0, 959, 0, 2000 610, 55, 0, 175, 0, 851, 0, 0, 960, 0, 2001 0, 0, 0, 0, 0, 0, 0, 1569, 175, 1570, 2002 0, 0, 0, 603, 55, 0, 0, 0, 603, 0, 2003 0, 55, 1577, 1578, 636, 339, 0, 349, 349, 349, 2004 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2005 73, 0, 0, 213, 0, 0, 349, 0, 0, 0, 2006 1125, 0, 0, 0, 0, 0, 0, 0, 212, 214, 2007 0, 0, 0, 0, 724, 0, 0, 0, 0, 0, 2008 0, 213, 73, 0, 55, 480, 213, 0, 0, 0, 2009 258, 738, 0, 0, 938, 0, 212, 214, 0, 0, 2010 0, 212, 214, 0, 0, 0, 1331, 0, 0, 0, 2011 0, 0, 0, 0, 0, 175, 0, 221, 0, 535, 2012 0, 0, 0, 0, 0, 0, 0, 480, 0, 0, 2013 349, 0, 0, 729, 729, 0, 0, 0, 728, 964, 2014 0, 0, 430, 0, 0, 0, 728, 728, 728, 0, 2015 0, 460, 0, 1125, 0, 0, 0, 0, 0, 0, 2016 0, 0, 0, 601, 608, 994, 258, 738, 0, 0, 2017 0, 0, 992, 0, 213, 632, 633, 0, 0, 125, 2018 125, 125, 0, 0, 0, 0, 0, 0, 213, 212, 2019 214, 729, 729, 0, 728, 0, 0, 0, 0, 0, 2020 0, 0, 0, 212, 214, 352, 0, 0, 0, 724, 2021 0, 0, 535, 0, 0, 0, 0, 0, 0, 724, 2022 0, 0, 349, 506, 636, 0, 0, 1024, 636, 832, 2023 0, 0, 821, 822, 724, 0, 0, 0, 0, 0, 2024 0, 0, 0, 0, 1035, 0, 0, 0, 0, 0, 2025 125, 0, 125, 0, 0, 0, 1125, 8, 9, 10, 2026 11, 12, 856, 0, 0, 859, 860, 0, 863, 0, 2027 865, 866, 0, 0, 0, 867, 868, 274, 0, 448, 2028 0, 175, 213, 0, 0, 0, 31, 0, 1507, 0, 2029 1507, 0, 0, 0, 0, 0, 64, 212, 214, 0, 2030 73, 0, 0, 0, 0, 73, 412, 0, 0, 0, 2031 0, 0, 0, 420, 34, 0, 0, 0, 636, 37, 2032 0, 182, 183, 40, 0, 1507, 0, 1507, 0, 0, 2033 41, 42, 0, 125, 0, 1332, 0, 0, 0, 0, 2034 0, 125, 0, 125, 125, 0, 0, 0, 125, 0, 2035 125, 125, 0, 0, 1117, 323, 1532, 0, 410, 943, 2036 944, 0, 430, 116, 0, 946, 1533, 729, 0, 8, 2037 9, 10, 11, 12, 0, 729, 729, 729, 0, 0, 2038 349, 0, 0, 0, 0, 412, 0, 0, 0, 8, 2039 9, 10, 11, 12, 0, 0, 0, 0, 31, 0, 2040 221, 0, 0, 0, 0, 0, 535, 0, 0, 0, 2041 0, 0, 0, 0, 0, 603, 0, 0, 31, 0, 2042 125, 0, 0, 729, 0, 0, 34, 0, 428, 0, 2043 0, 37, 0, 724, 724, 40, 349, 349, 0, 0, 2044 0, 584, 41, 42, 0, 0, 34, 517, 0, 588, 2045 0, 37, 591, 182, 183, 40, 1204, 0, 0, 0, 2046 0, 0, 41, 42, 0, 0, 0, 73, 43, 0, 2047 0, 76, 0, 0, 213, 0, 0, 0, 146, 0, 2048 0, 0, 352, 0, 0, 0, 0, 73, 264, 212, 2049 214, 724, 724, 0, 0, 73, 0, 636, 265, 0, 2050 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 2051 0, 0, 0, 0, 0, 412, 0, 0, 0, 420, 2052 0, 352, 0, 0, 1508, 0, 1508, 0, 544, 545, 2053 546, 547, 548, 549, 550, 551, 552, 553, 222, 352, 2054 0, 73, 0, 0, 952, 0, 953, 0, 0, 0, 2055 0, 0, 0, 956, 957, 0, 738, 0, 962, 0, 2056 0, 1508, 554, 1508, 535, 8, 9, 10, 11, 12, 2057 967, 0, 0, 0, 0, 971, 0, 0, 0, 175, 2058 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 2059 0, 0, 0, 0, 31, 0, 0, 0, 0, 1301, 2060 0, 1000, 0, 0, 412, 0, 0, 0, 0, 0, 2061 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 2062 0, 64, 34, 0, 0, 0, 354, 37, 0, 0, 2063 0, 40, 0, 0, 0, 724, 0, 738, 41, 42, 2064 0, 116, 0, 0, 0, 0, 601, 0, 352, 0, 2065 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 2066 0, 0, 0, 0, 744, 0, 0, 724, 0, 212, 2067 214, 0, 0, 0, 745, 724, 724, 724, 0, 0, 2068 0, 0, 0, 0, 0, 0, 349, 349, 0, 0, 2069 0, 0, 0, 352, 352, 352, 584, 584, 0, 0, 2070 1204, 0, 0, 1045, 1046, 1047, 1048, 0, 1050, 0, 2071 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 2072 0, 76, 0, 724, 1094, 0, 76, 0, 0, 0, 2073 352, 0, 0, 0, 116, 125, 125, 0, 1100, 0, 2074 0, 73, 0, 0, 0, 0, 0, 352, 0, 1234, 2075 0, 213, 0, 0, 0, 0, 175, 0, 0, 0, 2076 0, 0, 0, 0, 0, 125, 212, 214, 125, 125, 2077 0, 125, 0, 125, 125, 0, 0, 1116, 125, 125, 2078 0, 0, 0, 73, 0, 911, 352, 0, 0, 914, 2079 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2080 18, 19, 20, 21, 22, 23, 24, 25, -294, 0, 2081 0, 349, 0, 0, 0, 0, 0, 1144, 0, 31, 2082 0, 222, 412, 352, 1152, 0, 0, 0, 0, 1156, 2083 0, 0, 0, 0, 1160, 0, 1161, 116, 0, 0, 2084 1163, 1164, 1165, 0, 0, 1168, 0, 34, 0, 0, 2085 0, 0, 0, 0, 1180, 0, 0, 125, -294, 0, 2086 1204, 0, 125, 125, 0, 352, 0, 1204, 125, 0, 2087 0, 0, 1195, 1196, 1323, 352, 0, 0, 352, 0, 2088 0, 0, 0, 221, 0, 352, 0, 0, 76, 0, 2089 352, 0, 0, 0, 0, 0, 0, 0, 0, 1226, 2090 0, 0, 1228, 354, 0, 0, 0, 0, 76, 0, 2091 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 2092 1204, 0, 0, 0, 0, 0, 0, 1557, 0, 0, 2093 0, 0, 0, 0, 0, 0, 0, 584, 0, 0, 2094 0, 1244, 354, 0, 0, 0, 0, 1248, 1249, 0, 2095 0, 0, 73, 0, 0, 0, 0, 0, 0, 1260, 2096 354, 0, 76, 78, 1264, 0, 0, 1268, 0, 1269, 2097 0, 0, 1271, 0, 0, 0, 0, 0, 0, 0, 2098 0, 0, 0, 0, 0, 1279, 0, 0, 0, 0, 2099 0, 0, 0, 0, 0, 78, 281, 282, 1286, 283, 2100 1288, 1289, 1290, 1291, 354, 0, 0, 0, 0, 0, 2101 0, 0, 0, 0, 0, 0, 1298, 0, 1299, 0, 2102 0, 0, 171, 0, 0, 284, 0, 0, 0, 0, 2103 223, 649, 0, 138, 139, 286, 352, 0, 287, 650, 2104 289, 290, 41, 42, 0, 291, 292, 0, 0, 0, 2105 412, 1327, 1328, 293, 0, 0, 0, 0, 0, 0, 2106 0, 0, 0, 0, 0, 0, 0, 0, 294, 354, 2107 651, 0, 652, 379, 0, 0, 0, 296, 380, 298, 2108 299, 300, 301, 0, 0, 0, 0, 0, 0, 352, 2109 352, 0, 352, 352, 0, 0, 0, 0, 0, 0, 2110 0, 0, 0, 1363, 1364, 0, 0, 0, 0, 0, 2111 0, 0, 73, 1374, 354, 354, 354, 0, 355, 0, 2112 0, 0, 0, 0, 0, 0, 0, 0, 0, 1158, 2113 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 2114 0, 0, 0, 0, 0, 1170, 0, 352, 352, 0, 2115 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 2116 0, 0, 76, 0, 0, 1407, 0, 0, 354, 0, 2117 0, 0, 0, 0, 0, 0, 0, 1411, 0, 1412, 2118 1413, 1414, 281, 282, 0, 283, 0, 0, 0, 0, 2119 0, 1418, 0, 0, 0, 0, 0, 0, 0, 0, 2120 1429, 0, 0, 0, 76, 0, 0, 354, 0, 0, 2121 0, 284, 352, 78, 0, 0, 1442, 285, 78, 0, 2122 0, 286, 1238, 0, 287, 288, 289, 290, 41, 42, 2123 0, 291, 292, 0, 0, 0, 0, 0, 85, 293, 2124 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 2125 0, 0, 125, 0, 294, 221, 378, 0, 0, 379, 2126 0, 0, 0, 296, 380, 298, 299, 300, 301, 0, 2127 85, 0, 1491, 1492, 0, 0, 0, 73, 0, 0, 2128 0, 0, 0, 0, 0, 1497, 354, 0, 0, 0, 2129 0, 352, 1497, 352, 0, 0, 354, 0, 0, 354, 2130 0, 0, 0, 0, 222, 224, 354, 0, 0, 0, 2131 0, 354, 0, 223, 0, 0, 0, 0, 0, 0, 2132 0, 0, 0, 352, 0, 1531, 0, 0, 0, 1537, 2133 0, 352, 352, 352, 0, 0, 0, 0, 0, 0, 2134 0, 0, 352, 352, 0, 0, 0, 0, 0, 0, 2135 0, 0, 0, 0, 0, 0, 73, 0, 1559, 0, 2136 1560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2137 0, 0, 0, 76, 0, 0, 0, 125, 0, 352, 2138 78, 0, 0, 0, 0, 0, 0, 0, 1575, 1576, 2139 0, 0, 0, 362, 0, 355, 1579, 1580, 0, 0, 2140 78, 0, 0, 0, 0, 0, -519, 0, 78, 1, 2141 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1955 2142 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, 2143 22, 23, 24, 25, 355, 0, 26, 27, 28, 29, 2144 0, 0, 30, 0, 0, 31, 32, 0, 0, 0, 2145 0, 0, 355, 0, 78, 0, 0, 354, 0, 0, 2146 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 2147 33, 0, 0, 34, 0, 35, 0, 36, 37, 0, 2148 38, 39, 40, 0, 0, 0, 0, 0, 85, 41, 2149 42, 0, 0, 85, 0, 0, 355, 0, 1034, 0, 2150 0, 8, 9, 10, 11, 12, 0, 0, 0, 0, 2151 354, 354, 0, 354, 354, 43, 73, 44, 0, 0, 2152 0, 0, 0, 73, 0, 45, 0, 0, 281, 282, 2153 31, 283, 0, 76, 0, 8, 9, 10, 11, 12, 2154 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2155 23, 24, 25, -295, 0, 0, 0, 284, 34, 0, 2156 0, 355, 0, 285, 31, 0, 0, 286, 354, 354, 2157 287, 288, 289, 290, 41, 42, 73, 291, 292, 0, 2158 0, 0, 0, 0, 0, 293, 0, 0, 224, 0, 2159 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 2160 294, 0, 378, -295, 0, 0, 355, 355, 355, 296, 2161 827, 298, 299, 300, 301, 0, 0, 0, 0, 0, 2162 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, 2163 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 2164 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 2165 0, 0, 0, 0, 78, 85, 0, 0, 0, 164, 2166 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2167 362, 0, 0, 0, 0, 85, 222, 0, 217, 0, 2168 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 2169 0, 0, 0, 0, 0, 0, 78, 0, 76, 355, 2170 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 2171 0, 0, 354, 0, 354, 0, 0, 0, 0, 0, 2172 0, 0, 0, 0, 164, 0, 0, 362, 0, 85, 2173 271, 0, 0, 0, 0, 0, 355, 0, 0, 0, 2174 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 2175 0, 0, 354, 354, 354, 0, 0, 0, 0, 164, 2176 0, 0, 0, 354, 354, 0, 0, 0, 0, 368, 2177 0, 362, 0, 374, 0, 0, 0, 76, 355, 0, 2178 0, 0, 0, 0, 0, 0, 0, 0, 355, 0, 2179 0, 355, 0, 0, 0, 0, 223, 0, 355, 0, 2180 354, 0, 0, 355, 8, 9, 10, 11, 12, 13, 2181 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2182 24, 25, 164, 0, 26, 27, 28, 0, 0, 0, 2183 0, 0, 0, 31, 217, 0, 362, 0, 0, 0, 2091 2184 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, 2185 0, 0, 164, 461, 0, 0, 0, 0, 0, 0, 2186 0, 34, 0, 0, 0, 78, 0, 0, 206, 39, 2187 0, 0, 0, 0, 0, 0, 374, 0, 0, 0, 2188 0, 362, 362, 362, 164, 0, 0, 0, 354, 0, 2189 0, 0, 0, 0, 514, 0, 516, 519, 0, 0, 2190 362, 0, 0, 0, 522, 523, 0, 0, 461, 516, 2191 516, 164, 0, 270, 0, 0, 0, 0, 362, 0, 2192 0, 516, 0, 0, 0, 0, 0, 0, 0, 85, 2193 0, 0, 0, 0, 0, 362, 0, 76, 281, 282, 2194 0, 283, 0, 0, 76, 0, 0, 0, 0, 355, 2195 0, 0, 0, 0, 0, 0, 0, 516, 606, 0, 2196 0, 0, 0, 630, 0, 0, 0, 284, 0, 0, 2197 0, 85, 0, 285, 362, 0, 0, 286, 0, 0, 2198 287, 288, 289, 290, 41, 42, 0, 291, 292, 0, 2199 0, 0, 0, 516, 0, 293, 0, 76, 0, 0, 2200 0, 0, 355, 355, 0, 355, 355, 0, 0, 0, 2201 294, 362, 378, 0, 0, 0, 0, 0, 812, 296, 2202 380, 298, 299, 300, 301, 78, 0, 0, 0, 0, 2203 0, 0, 0, 0, 0, 210, 0, 0, 0, 164, 2204 164, 0, 0, 0, 0, 230, 368, 234, 0, 236, 2205 0, 0, 0, 362, 0, 0, 245, 0, 0, 0, 2206 355, 355, 0, 362, 0, 0, 362, 461, 0, 0, 2207 461, 224, 0, 362, 0, 0, 0, 0, 362, 0, 2208 0, 0, 0, 0, 0, 0, 0, 210, 0, 234, 2209 236, 245, 0, 0, 0, 0, 0, 0, 0, 0, 2210 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, 2211 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, 2212 0, 0, 0, 0, 0, 355, 0, 461, 0, 461, 2213 210, 0, 461, 0, 164, 461, 0, 0, 0, 0, 2214 85, 0, 0, 0, 0, 0, 0, 368, 0, 0, 2215 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2216 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 2217 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 2218 516, 516, 516, 516, 516, 516, 516, 516, 0, 0, 2219 78, 210, 0, 234, 236, 245, 0, 0, 0, 0, 2220 164, 0, 0, 0, 355, 0, 355, 0, 0, 0, 2221 0, 0, 368, 516, 606, 0, 0, 837, 0, 0, 2222 0, 0, 0, 0, 362, 0, 0, 0, 0, 210, 2223 0, 0, 0, 210, 0, 0, 355, 0, 0, 0, 2224 0, 0, 0, 606, 355, 355, 355, 0, 606, 504, 2225 0, 0, 0, 0, 0, 355, 355, 368, 368, 368, 2226 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 2227 0, 0, 0, 0, 0, 0, 368, 362, 362, 0, 2228 362, 362, 0, 0, 0, 0, 0, 0, 0, 0, 2229 0, 0, 355, 0, 0, 0, 0, 0, 0, 210, 2230 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2231 0, 741, 516, 0, 0, 0, 0, 0, 0, 0, 2232 210, 0, 0, 0, 0, 234, 236, 155, 0, 0, 2233 0, 0, 461, 245, 516, 362, 362, 0, 0, 0, 2234 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 2235 368, 0, 961, 8, 9, 10, 11, 12, 13, 14, 2236 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2237 25, 0, 0, 250, 0, 0, 210, 0, 0, 0, 2238 355, 0, 31, 255, 0, 0, 0, 741, 0, 0, 2239 0, 0, 0, 516, 210, 0, 0, 0, 0, 210, 2240 362, 210, 0, 0, 0, 0, 0, 0, 0, 0, 2241 34, 0, 0, 0, 0, 0, 0, 0, 210, 0, 2242 0, 210, 210, 0, 0, 516, 0, 0, 0, 78, 2243 0, 0, 0, 0, 0, 0, 78, 210, 0, 155, 2244 516, 0, 368, 224, 0, 0, 630, 0, 0, 368, 2245 0, 210, 0, 385, 0, 0, 0, 0, 210, 0, 2246 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 2247 0, 0, 0, 0, 0, 0, 417, 0, 0, 362, 2248 0, 362, 0, 0, 0, 0, 0, 0, 0, 78, 2249 432, 0, 0, 0, 0, 0, 0, 0, 0, 437, 2250 0, 0, 0, 0, 0, 0, 0, 0, 0, 445, 2251 0, 362, 0, 0, 0, 0, 0, 0, 0, 362, 2252 362, 362, 0, 0, 0, 0, 0, 0, 0, 0, 2253 362, 362, 0, 0, 471, 0, 0, 0, 0, 481, 2254 0, 0, 461, 0, 85, 0, 0, 0, 0, 0, 2255 0, 0, 489, 0, 0, 0, 0, 0, 499, 0, 2256 503, 461, 0, 0, 0, 0, 0, 362, 0, 0, 2257 0, 0, 0, 0, 210, 0, 0, 0, 533, 0, 2258 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 2259 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 2260 368, 0, 210, 0, 0, 0, 0, 210, 0, 0, 2261 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2262 0, 593, 516, 0, 0, 0, 598, 0, 0, 0, 2263 0, 0, 0, 0, 516, 606, 0, 0, 0, 0, 2264 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2265 0, 0, 0, 0, 644, 362, 368, 368, 645, 646, 2266 0, 648, 0, 0, 0, 0, 0, 0, 660, 661, 2267 0, 662, 663, 0, 664, 516, 665, 0, 0, 0, 2268 0, 0, 1178, 0, 0, 8, 9, 10, 11, 12, 2269 0, 0, 0, 593, 0, 210, 0, 0, 0, 0, 2270 0, 680, 0, 0, 85, 0, 0, 0, 0, 210, 2271 0, 85, 281, 282, 31, 283, 461, 0, 0, 0, 2272 0, 0, 0, 0, 0, 0, 691, 0, 0, 504, 2273 0, 0, 0, 0, 0, 0, 0, 697, 0, 0, 2274 0, 284, 34, 0, 0, 0, 0, 285, 516, 0, 2275 0, 286, 0, 0, 287, 288, 289, 290, 41, 42, 2276 733, 291, 292, 0, 85, 0, 736, 0, 0, 293, 2277 0, 471, 0, 0, 0, 0, 741, 0, 0, 0, 2278 0, 0, 0, 0, 294, 0, 378, 0, 0, 0, 2279 210, 0, 516, 296, 1179, 298, 299, 300, 301, 0, 2280 0, 0, 0, 210, 0, 0, 516, 516, 773, 0, 2281 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, 2282 0, 0, 210, 0, 788, 0, 0, 0, 0, 0, 2283 0, 204, 2, 205, 4, 5, 6, 7, 8, 9, 2284 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2285 20, 21, 22, 23, 24, 25, 0, 741, 26, 27, 2286 28, 815, 0, 0, 0, 0, 0, 31, 0, 0, 2287 825, 0, 0, 0, 0, 0, 0, 828, 0, 0, 2288 0, 0, 835, 0, 0, 0, 0, 0, 0, 0, 2289 0, 0, 0, 850, 0, 34, 0, 35, 0, 36, 2290 37, 0, 206, 39, 40, 0, 368, 368, 0, 210, 2291 0, 41, 42, 0, 0, 217, 0, 0, 0, 0, 2292 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2293 0, 0, 0, 0, 890, 210, 0, 43, 0, 207, 2294 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 2295 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2296 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 2297 835, 0, 0, 0, 0, 0, 8, 9, 10, 11, 2298 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2299 22, 23, 24, 25, -294, 210, 26, 27, 28, 0, 2300 0, 0, 0, 0, 0, 31, 210, 0, 0, 0, 2301 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 2302 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 2303 0, 368, 0, 34, 516, 968, 969, 0, 0, 0, 2304 38, 39, 0, 0, -294, 0, 0, 0, 0, 986, 2305 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2306 0, 0, 0, 0, 0, 0, 1001, 0, 1002, 0, 2307 0, 0, 1006, 0, 0, 643, 0, 338, 0, 0, 2308 0, 0, 0, 0, 0, 110, 0, 0, 210, 461, 2309 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 2310 0, 0, 0, 0, 0, 0, 0, 516, 516, 0, 2311 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2312 281, 282, 0, 283, 0, 0, 461, 0, 461, 0, 2313 0, 0, 0, 0, 0, 0, 0, 0, 1039, 0, 2314 0, 0, 0, 0, 0, 1040, 0, 0, 0, 284, 2315 0, 0, 0, 0, 0, 285, 164, 0, 1042, 286, 2316 1043, 0, 287, 288, 289, 290, 41, 42, 0, 291, 2317 292, 0, 0, 0, 1055, 210, 0, 293, 0, 0, 2318 0, 1059, 0, 0, 0, 0, 0, 0, 0, 0, 2319 0, 0, 294, 1097, 378, 0, 1098, 0, 0, 781, 2320 0, 296, 380, 298, 299, 300, 301, 0, 0, 0, 2321 0, 0, 0, 0, 598, 0, 0, 0, 0, 0, 2322 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2323 0, 0, 0, 0, 341, 363, 0, 0, 0, 0, 2324 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2325 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2326 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, 2327 0, 0, 210, 0, 0, 413, 0, 1, 2, 3, 2328 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 2329 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2330 24, 25, 0, 1162, 26, 27, 28, 29, 0, 0, 2331 30, 0, 0, 31, 32, 8, 9, 10, 11, 12, 2332 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2333 23, 24, 25, 0, 0, 26, 27, 28, 33, 0, 2334 0, 34, 0, 35, 31, 36, 37, 413, 38, 39, 2335 40, 0, 0, 0, 0, 0, 0, 41, 42, 533, 2336 0, 0, 0, 0, 0, 0, 1227, 0, 0, 0, 2337 0, 0, 34, 0, 0, 0, 0, 0, 0, 38, 2338 39, 0, 0, 43, 0, 44, 0, 0, 0, -523, 2339 0, 0, 0, 45, 0, 321, 1241, 0, 0, 0, 2340 0, 1243, 0, 413, 0, 345, 0, 0, 0, 1247, 2341 0, 413, 589, 0, 413, 592, 0, 381, 381, 0, 2342 0, 0, 0, 0, 363, 0, 0, 0, 622, 0, 2343 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2344 1273, 0, 0, 0, 0, 0, 0, 640, 0, 0, 2345 341, 0, 1281, 0, 0, 1282, 0, 1283, 0, 0, 2346 281, 282, 0, 283, 0, 0, 0, 0, 0, 0, 2347 0, 1292, 1293, 0, 0, 0, 0, 413, 0, 0, 2348 0, 413, 0, 0, 0, 0, 0, 0, 321, 284, 2349 0, 0, 0, 1306, 0, 285, 0, 0, 0, 286, 2350 0, 0, 287, 288, 289, 290, 41, 42, 0, 291, 2351 292, 0, 363, 485, 0, 0, 0, 293, 0, 0, 2352 1329, 0, 0, 0, 0, 0, 0, 0, 210, 0, 2353 0, 0, 294, 0, 378, 413, 0, 993, 0, 0, 2354 0, 296, 380, 298, 299, 300, 301, 0, 0, 0, 2355 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2356 0, 0, 0, 0, 0, 0, 413, 0, 0, 363, 2357 0, 0, 0, 0, 1, 2, 205, 4, 5, 6, 2358 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2359 17, 18, 19, 20, 21, 22, 23, 24, 25, -294, 2360 0, 26, 27, 28, 29, 0, 0, 30, 0, 413, 2361 31, 0, 341, 363, 0, 0, 0, 0, 1399, 0, 2362 1400, 0, 0, 0, 0, 0, 0, 0, 0, 381, 2363 0, 0, 0, 1409, 0, 1410, 0, 0, 34, 0, 2364 35, 0, 36, 0, 0, 38, 39, 0, 0, -294, 2365 0, 0, 0, 1417, 0, 0, 0, 0, 413, 413, 2366 0, 0, 0, 0, 0, 0, 0, 0, 0, 1435, 2367 1437, 0, 0, 0, 0, 0, 0, 830, 363, 0, 2368 363, 1443, 44, 0, 1247, 0, 0, 0, 0, 622, 2369 110, 622, 622, 0, 0, 0, 0, 0, 622, 0, 2370 0, 0, 0, 0, 0, 0, 1466, 0, 869, 363, 2371 0, 0, 0, 0, 363, 1473, 0, 0, 1475, 0, 2372 1477, 1479, 1481, 363, 363, 363, 0, 0, 0, 0, 2373 0, 735, 0, 0, 0, 0, 0, 0, 0, 0, 2374 0, 0, 363, 0, 0, 0, 0, 413, 912, 0, 2375 0, 413, 915, 0, 0, 0, 0, 0, 917, 0, 2376 0, 0, 1512, 0, 1514, 0, 0, 1247, 0, 0, 2377 769, 0, 0, 0, 0, 0, 341, 363, 413, 0, 2378 413, 0, 1526, 782, 413, 0, 0, 0, 0, 0, 2379 769, 0, 0, 769, 0, 0, 0, 0, 0, 0, 2380 0, 0, 0, 0, 792, 793, 0, 0, 0, 0, 2381 0, 0, 0, 0, 0, 0, 363, 622, 0, 0, 2382 0, 0, 0, 0, 0, 0, 814, 0, 0, 0, 2383 0, 0, 0, 0, 0, 0, 823, 0, 0, 0, 2384 0, 0, 0, 345, 0, 0, 0, 0, 782, 0, 2385 0, 0, 341, 363, 0, 0, 0, 413, 413, 0, 2386 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 2387 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2388 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 2389 0, 26, 27, 28, 29, 0, 0, 30, 889, 413, 2390 31, 32, 0, 0, 0, 0, 0, 381, 363, 0, 2391 0, 0, 0, 0, 830, 363, 0, 0, 0, 622, 2392 0, 622, 0, 0, 0, 33, 0, 0, 34, 0, 2393 35, 622, 36, 37, 0, 38, 39, 40, 0, 0, 2394 0, 0, 0, 0, 41, 42, 0, 345, 0, 0, 2395 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2396 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2397 43, 0, 44, 0, 0, 0, 0, 0, 0, 0, 2398 45, 0, 0, 0, 0, 8, 9, 10, 11, 12, 2399 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2400 23, 24, 25, -294, 830, 26, 27, 28, 0, 0, 2401 0, 0, 413, 0, 31, 0, 0, 0, 413, 0, 2402 0, 0, 0, 782, 0, 991, 413, 0, 0, 0, 2403 0, 996, 0, 0, 0, 0, 0, 0, 1005, 622, 2404 622, 0, 34, 0, 0, 0, 0, 37, 0, 336, 2405 337, 40, 0, -294, 0, 0, 0, 0, 41, 42, 2406 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 2407 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 2408 0, 0, 1022, 1023, 643, 345, 338, 0, 0, 0, 2409 0, 413, 1159, 0, 634, 0, 0, 0, 0, 0, 2410 345, 363, 0, 0, 0, 0, 0, 413, 1171, 0, 2411 622, 622, 1176, 0, 0, 0, 0, 0, 0, 0, 2412 0, 0, 363, 363, 0, 0, 0, 0, 0, 0, 2413 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2414 1053, 0, 0, 0, 381, 1, 2, 205, 4, 5, 2415 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2416 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2417 0, 0, 26, 27, 28, 29, 0, 0, 30, 0, 2418 0, 31, 0, 830, 413, 1239, 0, 0, 0, 0, 2419 0, 0, 0, 0, 0, 0, 0, 622, 0, 0, 2420 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 2421 0, 35, 0, 36, 0, 0, 38, 39, 0, 0, 2422 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2423 0, 0, 0, 0, 0, 0, 1140, 1141, 0, 0, 2424 0, 0, 363, 381, 0, 0, 0, 281, 282, 996, 2425 283, 0, 1150, 44, 769, 0, 0, 0, 0, 0, 2426 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 2427 0, 0, 0, 0, 1166, 0, 284, 0, 0, 0, 2428 0, 0, 285, 0, 0, 1181, 286, 0, 0, 287, 2429 288, 289, 290, 41, 42, 0, 291, 292, 0, 0, 2430 0, 0, 341, 0, 293, 281, 282, 381, 283, 1199, 2431 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 2432 0, 378, 0, 363, 996, 996, 0, 0, 296, 380, 2433 298, 299, 300, 301, 284, 0, 0, 0, 0, 0, 2434 285, 0, 0, 0, 286, 1231, 0, 287, 288, 289, 2435 290, 41, 42, 0, 291, 292, 0, 0, 0, 0, 2436 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 2437 0, 0, 363, 363, 0, 0, 0, 294, 0, 378, 2438 0, 0, 0, 0, 0, 0, 296, 734, 298, 299, 2439 300, 301, 0, 996, 0, 0, 0, 0, 0, 0, 2440 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2441 0, 0, 889, 0, 0, 0, 0, 0, 0, 0, 2442 0, 0, 0, 0, 0, 0, 0, 1284, 1285, 0, 2443 0, 0, 0, 0, 0, 1, 2, 205, 4, 5, 2444 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2445 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2446 0, 0, 26, 27, 28, 29, 0, 0, 30, 281, 2447 282, 31, 1062, 1063, 0, 1064, 0, 0, 1065, 1066, 2448 1067, 1068, 1069, 1070, 1071, 1072, 0, 0, 0, 1073, 2449 0, 0, 0, 1074, 1075, 0, 33, 363, 284, 34, 2450 0, 35, 0, 36, 649, 0, 38, 39, 286, 996, 2451 0, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2452 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 2453 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2454 0, 294, 0, 1076, 0, 0, 170, 0, 0, 0, 2455 296, 297, 298, 299, 300, 301, 0, 0, 0, 0, 2456 1077, 0, 0, 0, -129, 0, 0, 0, 0, 0, 2457 1392, 0, 769, 0, 0, 0, 0, 0, 0, 0, 2458 0, 0, 0, 0, 0, 0, 0, 413, 8, 9, 2459 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2460 20, 21, 22, 23, 24, 25, 0, 0, 26, 27, 2461 28, 0, 413, 413, 0, 0, 0, 31, 0, 0, 2462 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2463 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, 2464 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 2465 0, 0, 206, 39, 0, 0, 0, 0, 1452, 0, 2466 0, 0, 0, 0, 0, 1, 2, 205, 4, 5, 2467 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2468 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2469 0, 0, 26, 27, 28, 29, 0, 629, 30, 281, 2470 282, 31, 283, 8, 9, 10, 11, 12, 13, 14, 2471 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2472 25, 0, 0, 26, 27, 28, 0, 0, 284, 34, 2473 0, 35, 31, 36, 285, 0, 38, 39, 286, 0, 2474 1518, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2475 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 2476 34, 0, 0, 0, 0, 109, 0, 38, 39, 0, 2477 0, 294, 0, 1076, 0, 0, 41, 42, 0, 0, 2478 296, 297, 298, 299, 300, 301, 0, 0, 0, 0, 2479 0, 0, 321, 0, -129, 1, 2, 205, 4, 5, 2480 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2481 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2482 0, 0, 26, 27, 28, 29, 0, 0, 30, 281, 2483 282, 31, 283, 8, 9, 10, 11, 12, 13, 14, 2484 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2485 25, 0, 0, 26, 27, 28, 0, 0, 284, 34, 2486 0, 35, 31, 36, 285, 0, 38, 39, 286, 0, 2487 0, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2488 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 2489 34, 0, 0, 0, 0, 0, 0, 206, 39, 0, 2490 0, 294, 0, 44, 0, 0, 0, 0, 0, 0, 2491 296, 297, 298, 299, 300, 301, 2, 205, 4, 5, 2492 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2493 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2494 0, 0, 26, 27, 28, 0, 0, 0, 0, 281, 2495 282, 31, 283, 0, 0, 0, 0, 0, 0, 0, 2496 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2497 0, 0, 0, 0, 0, 0, 0, 0, 284, 34, 2498 0, 35, 0, 36, 285, 0, 38, 39, 286, 0, 2499 0, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2500 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 2501 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2502 0, 294, 0, 343, 0, 0, 0, 0, 781, 0, 2503 296, 344, 298, 299, 300, 301, 2, 205, 4, 5, 2504 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2505 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2506 0, 0, 26, 27, 28, 0, 0, 0, 0, 281, 2507 282, 31, 283, 0, 0, 0, 0, 0, 0, 0, 2508 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2509 0, 0, 0, 0, 0, 0, 0, 0, 284, 34, 2510 0, 35, 0, 36, 285, 0, 38, 39, 286, 0, 2511 0, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2512 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 2513 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2514 0, 294, 0, 931, 0, 0, 0, 0, 781, 0, 2515 296, 344, 298, 299, 300, 301, 2, 205, 4, 5, 2516 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2517 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2518 0, 0, 26, 27, 28, 0, 0, 0, 0, 281, 2519 282, 31, 283, 0, 0, 0, 0, 0, 0, 0, 2520 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2521 0, 0, 0, 0, 0, 0, 0, 0, 284, 34, 2522 0, 35, 0, 36, 285, 0, 38, 39, 286, 0, 2523 0, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2524 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 2525 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2526 0, 294, 0, 931, 0, 0, 0, 0, 781, 0, 2527 296, 600, 298, 299, 300, 301, 2, 205, 4, 5, 2528 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2529 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2530 0, 0, 26, 27, 28, 0, 0, 0, 0, 281, 2531 282, 31, 283, 0, 0, 0, 0, 0, 0, 0, 2532 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2533 0, 0, 0, 0, 0, 0, 0, 0, 284, 34, 2534 0, 35, 0, 36, 285, 0, 38, 39, 286, 0, 2535 0, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2536 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 2537 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2538 0, 294, 0, 343, 0, 0, 0, 0, 0, 0, 2539 296, 344, 298, 299, 300, 301, 2, 205, 4, 5, 2540 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2541 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2542 0, 0, 26, 27, 28, 0, 0, 0, 0, 281, 2543 282, 31, 283, 0, 0, 0, 0, 0, 0, 0, 2544 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2545 0, 0, 0, 0, 0, 0, 0, 0, 284, 34, 2546 0, 35, 0, 36, 285, 0, 38, 39, 286, 0, 2547 0, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2548 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 2549 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2550 0, 294, 0, 931, 0, 0, 0, 0, 0, 0, 2551 296, 344, 298, 299, 300, 301, 2, 205, 4, 5, 2552 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2553 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2554 0, 0, 26, 27, 28, 0, 0, 0, 0, 281, 2555 282, 31, 283, 0, 0, 0, 0, 0, 0, 0, 2556 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2557 0, 0, 0, 0, 0, 0, 0, 0, 284, 34, 2558 0, 35, 0, 36, 285, 0, 206, 39, 286, 0, 2559 0, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2560 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 2561 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2562 0, 294, 0, 1020, 0, 0, 0, 0, 0, 0, 2563 296, 1021, 298, 299, 300, 301, 2, 205, 4, 5, 2564 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2565 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2566 0, 0, 26, 27, 28, 0, 0, 0, 0, 281, 2567 282, 31, 283, 0, 0, 0, 0, 0, 0, 0, 2568 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2569 0, 0, 0, 0, 0, 0, 0, 0, 284, 34, 2570 0, 35, 0, 36, 285, 0, 206, 39, 286, 0, 2571 0, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2572 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 2573 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2574 0, 294, 0, 378, 0, 0, 0, 0, 0, 0, 2575 296, 380, 298, 299, 300, 301, 204, 2, 205, 4, 2576 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2577 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2578 25, 0, 0, 26, 27, 28, 0, 0, 0, 0, 2579 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 2580 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2581 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2582 34, 0, 35, 0, 36, 0, 0, 206, 39, 0, 2583 2, 205, 4, 5, 6, 7, 8, 9, 10, 11, 2584 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2585 22, 23, 24, 25, 0, 0, 26, 27, 28, 0, 2586 0, 0, 0, 0, 207, 31, 0, 0, 0, 0, 2587 0, 0, 270, 0, 0, 0, 0, 0, 0, 0, 2588 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2589 0, 0, 0, 34, 0, 35, 0, 36, 37, 0, 2590 206, 39, 40, 0, 0, 0, 0, 0, 0, 41, 2591 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2592 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2593 0, 0, 0, 0, 0, 43, 0, 207, 0, 0, 2594 0, 0, 0, 0, 0, 208, 2, 205, 4, 5, 2595 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2596 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2597 0, 0, 26, 27, 28, 0, 0, 0, 0, 0, 2598 0, 31, 0, 0, 0, 0, 8, 9, 10, 11, 2599 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2600 22, 23, 24, 25, 0, 0, 26, 27, 28, 34, 2601 0, 35, 0, 36, 0, 31, 38, 39, 0, 2, 2602 205, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2603 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2604 23, 24, 25, 34, 0, 26, 27, 28, 109, 0, 2605 38, 39, -402, 687, 31, 0, 0, 0, 0, 41, 2606 42, 634, 0, 0, 0, 0, 0, 0, 0, 0, 2607 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2608 0, 0, 34, 0, 35, 0, 36, 44, 0, 38, 2609 39, 0, 0, 0, 0, 110, 0, 0, 0, 0, 2610 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2611 0, 1371, 0, 0, 0, 0, 0, 0, 0, 0, 2612 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, 2613 0, 0, 0, 0, 634, 2, 205, 4, 5, 6, 2614 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2615 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 2616 0, 26, 27, 28, 0, 0, 0, 0, 0, 0, 2617 31, 0, 0, 0, 0, 8, 9, 10, 11, 12, 2618 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2619 23, 24, 25, -294, 0, 26, 27, 28, 34, 0, 2620 35, 0, 36, 0, 31, 38, 39, 0, 0, 0, 2621 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2622 0, 0, 0, 0, 0, 0, 0, 1373, 0, 0, 2623 0, 0, 34, 0, 0, 0, 0, 37, 0, 336, 2624 337, 40, 687, -294, 0, 0, 0, 0, 41, 42, 2625 634, 2, 205, 4, 5, 6, 7, 8, 9, 10, 2626 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2627 21, 22, 23, 24, 25, 0, 338, 26, 27, 28, 2628 0, 0, 0, 0, 110, 0, 31, 0, 0, 0, 2629 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2630 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2631 0, 0, 0, 0, 34, 0, 35, 0, 36, 0, 2632 0, 206, 39, 0, 2, 205, 4, 5, 6, 7, 2633 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2634 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 2635 26, 27, 28, 0, 0, 0, 0, 0, 269, 31, 2636 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 2637 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2638 0, 0, 0, 0, 0, 0, 0, 34, 0, 35, 2639 0, 36, 0, 0, 38, 39, 0, 2, 205, 4, 2640 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2641 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2642 25, 0, 0, 26, 27, 28, 0, 0, 0, 0, 2643 0, 687, 31, 0, 0, 0, 0, 0, 0, 634, 2644 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2645 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2646 34, 0, 35, 0, 36, 0, 0, 38, 39, 0, 2647 2, 205, 4, 5, 6, 7, 8, 9, 10, 11, 2648 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2649 22, 23, 24, 25, 0, 0, 26, 27, 28, 0, 2650 0, 0, 0, 0, 599, 31, 0, 0, 0, 0, 2651 0, 0, 634, 0, 0, 0, 0, 0, 0, 0, 2652 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2653 0, 0, 0, 34, 0, 35, 0, 36, 0, 0, 2654 206, 39, 8, 9, 10, 11, 12, 13, 14, 15, 2655 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2656 0, 0, 26, 27, 28, 0, 0, 0, 0, 281, 2657 282, 31, 283, 0, 0, 0, 0, 207, 0, 0, 2658 0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 2659 0, 0, 0, 0, 0, 0, 0, 0, 284, 34, 2660 0, 0, 0, 0, 285, 0, 38, 39, 286, 0, 2661 0, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2662 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 2663 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2664 0, 294, 0, 525, 0, 0, 170, 0, 0, 0, 2665 296, 297, 298, 299, 300, 301, 8, 9, 10, 11, 2666 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2667 22, 23, 24, 25, 0, 0, 26, 27, 28, 0, 2668 0, 0, 0, 281, 282, 31, 283, 8, 9, 10, 2669 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2670 21, 22, 23, 24, 25, 0, 0, 26, 27, 28, 2671 0, 0, 284, 34, 0, 0, 31, 0, 285, 0, 2672 38, 39, 286, 0, 0, 287, 288, 289, 290, 41, 2673 42, 0, 291, 292, 0, 0, 0, 0, 0, 0, 2674 293, 0, 0, 0, 34, 0, 0, 0, 0, 37, 2675 0, 336, 337, 40, 0, 294, 0, 599, -3, 0, 2676 41, 42, 0, 0, 296, 600, 298, 299, 300, 301, 2677 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2678 18, 19, 20, 21, 22, 23, 24, 25, 338, 0, 2679 26, 27, 28, 0, 0, 0, 110, 281, 282, 31, 2680 283, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2681 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 2682 0, 26, 27, 28, 0, 0, 284, 34, 0, 0, 2683 31, 453, 649, 0, 38, 39, 286, 0, 0, 287, 2684 288, 289, 290, 41, 42, 0, 291, 292, 0, 0, 2685 0, 0, 0, 0, 293, 0, 0, 0, 34, 0, 2686 0, 0, 0, 0, 0, 38, 39, 0, 0, 294, 2687 -35, 766, 0, 0, 0, 0, 0, 0, 296, 297, 2688 298, 299, 300, 301, 8, 9, 10, 11, 12, 13, 2689 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2690 24, 25, 454, 0, 26, 27, 28, 0, 0, 0, 2691 110, 281, 282, 31, 283, 0, 0, 0, 0, 0, 2097 2692 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, 2693 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2694 284, 34, 26, 27, 28, 0, 285, 0, 38, 39, 2695 286, 31, 0, 287, 288, 289, 290, 41, 42, 0, 2696 291, 292, 0, 0, 0, 0, 0, 0, 293, 0, 2697 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 2698 0, 0, 0, 294, 0, 295, 38, 39, 0, 0, 2699 0, 0, 296, 297, 298, 299, 300, 301, 8, 9, 2700 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2701 20, 21, 22, 23, 24, 25, 0, 0, 26, 27, 2702 28, 643, 0, 338, 0, 281, 282, 31, 283, 0, 2703 0, 110, 0, 0, 0, 0, 8, 9, 10, 11, 2704 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2705 22, 23, 24, 25, 284, 34, 26, 27, 28, 0, 2706 285, 0, 38, 39, 286, 31, 0, 287, 288, 289, 2707 290, 41, 42, 0, 291, 292, 0, 0, 0, 0, 2708 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 2709 0, 0, 0, 34, 0, 0, 0, 294, 0, 156, 2710 38, 39, 0, 0, 0, 0, 296, 297, 298, 299, 2711 300, 301, 8, 9, 10, 11, 12, 13, 14, 15, 2712 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2713 0, 0, 26, 27, 28, 643, 0, 338, 0, 281, 2714 282, 31, 283, 0, 0, 634, 0, 0, 0, 0, 2715 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2716 18, 19, 20, 21, 22, 23, 24, 25, 284, 34, 2717 26, 27, 28, 0, 285, 0, 38, 39, 286, 31, 2718 0, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2719 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 2720 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 2721 0, 294, 0, 599, 38, 39, 0, 0, 0, 0, 2722 296, 600, 298, 299, 300, 301, 8, 9, 10, 11, 2723 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2724 22, 23, 24, 25, 0, 0, 26, 27, 28, 0, 2725 0, 256, 0, 281, 282, 31, 283, 0, 0, 110, 2726 0, 0, 0, 0, 8, 9, 10, 11, 12, 13, 2727 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2728 24, 25, 284, 34, 26, 27, 28, 0, 285, 0, 2729 38, 39, 286, 31, 0, 287, 288, 289, 290, 41, 2730 42, 0, 291, 292, 0, 0, 0, 0, 0, 0, 2731 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2732 0, 34, 0, 0, 0, 294, 0, 378, 38, 39, 2733 0, 0, 0, 0, 296, 380, 298, 299, 300, 301, 2734 474, 2, 205, 4, 5, 6, 7, 8, 9, 10, 2735 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2736 21, 22, 23, 24, 25, 156, 0, 26, 27, 28, 2737 0, 0, 0, 110, 0, 0, 31, 0, 0, 0, 2738 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2739 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 2740 26, 27, 28, 0, 34, 0, 35, 0, 36, 31, 2741 0, 38, 39, 0, 0, 0, 0, 0, 8, 9, 2742 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2743 20, 21, 22, 23, 24, 25, 0, 34, 26, 27, 2744 28, 0, 37, 0, 38, 39, 40, 31, 0, 0, 2745 0, -3, 0, 41, 42, 0, 8, 9, 10, 11, 2746 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2747 22, 23, 24, 25, 0, 34, 26, 27, 28, 43, 2748 37, 156, 38, 39, 40, 31, 0, 0, 0, 45, 2749 0, 41, 42, 0, 8, 9, 10, 11, 12, 13, 2750 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2751 24, 25, 0, 34, 26, 27, 28, 43, 37, 44, 2752 206, 39, 40, 31, 0, 0, 0, 45, 0, 41, 2753 42, 0, 8, 9, 10, 11, 12, 13, 14, 15, 2754 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2755 -294, 34, 26, 27, 28, 43, 37, 269, 336, 337, 2756 40, 31, 0, 0, 0, 208, 0, 41, 42, 0, 2757 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2758 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 2759 0, 0, 0, 643, 0, 338, 38, 39, 0, 0, 2760 -294, 0, 0, 634, 0, 8, 9, 10, 11, 12, 2761 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2762 23, 24, 25, 0, 0, 26, 27, 28, 0, 0, 2763 0, 643, 0, 338, 31, 453, 0, 0, 0, 0, 2764 0, 634, 0, 8, 9, 10, 11, 12, 13, 14, 2765 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2766 25, -294, 34, 26, 27, 28, 0, 0, 0, 38, 2767 39, 0, 31, 8, 9, 10, 11, 12, 13, 14, 2768 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2769 25, 0, 0, 26, 27, 28, 0, 0, 0, 0, 2770 34, 0, 31, 453, 0, 0, 454, 38, 39, 0, 2771 711, -294, 0, 0, 110, 0, 0, 0, 0, 0, 2772 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2773 34, 0, 0, 0, 0, 0, 0, 38, 39, 0, 2774 0, 0, 0, 0, 338, 0, 0, 0, 0, 0, 2775 0, 0, 110, 0, 0, 8, 9, 10, 11, 12, 2776 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2777 23, 24, 25, 0, 454, 26, 27, 28, 1109, 0, 2778 0, 0, 110, 0, 31, 453, 8, 9, 10, 11, 2779 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2780 22, 23, 24, 25, 0, 0, 26, 27, 28, 0, 2781 0, 0, 34, 0, 0, 31, 0, 0, 0, 38, 2782 39, 0, 0, 0, 8, 9, 10, 11, 12, 13, 2783 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2784 24, 25, 0, 34, 26, 27, 28, 0, 0, 0, 2785 206, 39, 0, 31, 0, 0, 454, 0, 0, 0, 2786 1236, 0, 0, 0, 110, 0, 0, 0, 0, 0, 2787 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2788 0, 34, 0, 0, 0, 0, 0, 269, 38, 39, 2789 0, 0, 0, 0, 0, 270, 0, 8, 9, 10, 2790 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2791 21, 22, 23, 24, 25, 0, 0, 26, 27, 28, 2792 0, 0, 0, 0, 0, 256, 31, 0, 0, 0, 2793 0, 0, 0, 634, 0, 8, 9, 10, 11, 12, 2794 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2795 23, 24, 25, 0, 34, 26, 27, 28, 0, 0, 2796 0, 38, 39, 0, 31, 8, 9, 10, 11, 12, 2797 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2798 23, 24, 25, 0, 0, 26, 27, 28, 0, 0, 2799 0, 0, 34, 0, 31, 0, 0, 0, 338, 38, 2800 39, 0, 0, 0, 0, 0, 634, 0, 0, 0, 2801 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2802 0, 0, 34, 0, 0, 0, 0, 0, 0, 206, 2803 39, 0, 0, 0, 0, 0, 454, 0, 0, 0, 2804 0, 0, 0, 0, 110, 0, 0, 8, 9, 10, 2805 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2806 21, 22, 23, 24, 25, 0, 269, 26, 27, 28, 2807 0, 0, 0, 0, 629, 0, 31, 8, 9, 10, 2808 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2809 21, 22, 23, 24, 25, 0, 0, 26, 27, 28, 2810 0, 0, 0, 0, 34, 0, 31, 0, 0, 0, 2811 0, 38, 39, 0, 0, 8, 9, 10, 11, 12, 2812 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2813 23, 24, 25, 0, 34, 26, 27, 28, 0, 0, 2814 0, 38, 39, 0, 31, 0, 0, 0, 599, 0, 2815 0, 0, 0, 0, 0, 0, 634, 0, 0, 0, 2816 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2817 0, 0, 34, 0, 0, 0, 0, 0, 338, 38, 2818 39, 0, 0, 0, 0, 0, 110, 2, 205, 4, 2819 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2820 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2821 25, 0, 0, 26, 27, 28, 44, 0, 0, 0, 2822 0, 0, 31, 0, 110, 0, 0, 0, 0, 0, 2823 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2824 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2825 34, 0, 35, 0, 36, 0, 0, 38, 39, 281, 2826 282, 0, 283, 1063, 0, 1064, 0, 0, 1065, 1066, 2827 1067, 1068, 1069, 1070, 1071, 1072, 0, 0, 1551, 1073, 2828 0, 0, 0, 1074, 1075, 0, 33, 0, 284, 0, 2829 0, 0, 0, -415, 649, 0, 0, 0, 286, 0, 2830 0, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2831 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 2832 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2833 0, 294, 0, 378, 0, 0, 170, 0, 0, 0, 2834 296, 380, 298, 299, 300, 301, 0, 0, 0, 0, 2835 1077, 0, 281, 282, -129, 283, 1063, 0, 1064, 0, 2836 0, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 0, 2837 0, 0, 1073, 0, 0, 0, 1074, 1075, 0, 33, 2838 0, 284, 0, 0, 0, 0, 0, 649, 0, 0, 2839 0, 286, 0, 0, 287, 288, 289, 290, 41, 42, 2840 0, 291, 292, 0, 0, 0, 0, 0, 0, 293, 2841 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2842 0, 0, 0, 0, 294, 0, 378, 0, 0, 170, 2843 0, 0, 0, 296, 380, 298, 299, 300, 301, 0, 2844 0, 0, 0, 1077, 0, 0, 0, -129, 2, 205, 2845 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 2846 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2847 24, 25, 0, 0, 26, 27, 28, 0, 0, 0, 2848 0, 0, 0, 31, 0, 281, 282, 0, 283, 1063, 2849 0, 1064, 1421, 1422, 1065, 1066, 1067, 1068, 1069, 1070, 2850 1071, 1072, 0, 0, 1551, 1073, 0, 0, 0, 1074, 2851 1075, 34, 33, 35, 284, 36, 0, 0, 38, 39, 2852 649, 0, 0, 0, 286, 0, 0, 287, 288, 289, 2853 290, 41, 42, 0, 291, 292, 0, 0, 0, 0, 2854 1330, 0, 293, 0, 0, 0, 0, 0, 0, 0, 2855 0, 0, 0, 0, 0, 0, 0, 294, 0, 378, 2856 0, 0, 170, 0, 0, 0, 296, 380, 298, 299, 2857 300, 301, 0, 0, 281, 282, 1077, 283, 1063, 0, 2858 1064, 1421, 1422, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 2859 1072, 0, 0, 0, 1073, 0, 0, 0, 1074, 1075, 2860 0, 33, 0, 284, 0, 0, 0, 0, 0, 649, 2861 0, 0, 0, 286, 0, 0, 287, 288, 289, 290, 2862 41, 42, 0, 291, 292, 0, 0, 0, 0, 0, 2863 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 2864 0, 0, 0, 0, 0, 0, 294, 0, 378, 0, 2865 0, 170, 0, 0, 0, 296, 380, 298, 299, 300, 2866 301, 0, 0, 281, 282, 1077, 283, 1063, 0, 1064, 2867 0, 0, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 2868 0, 0, 0, 1073, 0, 0, 0, 1074, 1075, 0, 2869 33, 0, 284, 0, 0, 0, 0, 0, 649, 0, 2870 0, 0, 286, 0, 0, 287, 288, 289, 290, 41, 2871 42, 0, 291, 292, 0, 0, 0, 0, 0, 0, 2872 293, 281, 282, 0, 283, 0, 0, 0, 0, 0, 2873 0, 0, 0, 0, 0, 294, 0, 378, 0, 0, 2874 170, 0, 0, 0, 296, 380, 298, 299, 300, 301, 2875 284, 0, 0, 0, 1077, 0, 649, 0, 0, 0, 2876 286, 0, 0, 287, 288, 289, 290, 41, 42, 0, 2877 291, 292, 0, 0, 0, 0, 0, 0, 293, 281, 2878 282, 0, 283, 0, 0, 0, 0, 0, 0, 0, 2879 0, 0, 0, 294, 0, 785, 0, 0, 281, 282, 2880 0, 283, 296, 380, 298, 299, 300, 301, 284, 0, 2881 0, 0, 0, 0, 285, 0, 0, 0, 286, 0, 2882 0, 287, 288, 289, 290, 41, 42, 284, 291, 292, 2883 0, 0, 0, 285, 0, 0, 293, 286, 0, 0, 2884 287, 288, 289, 290, 41, 42, 0, 291, 292, 0, 2885 0, 294, 0, 378, 0, 293, 281, 282, 0, 283, 2886 296, 827, 298, 299, 300, 301, 0, 0, 0, 0, 2887 513, 0, 0, 0, 0, 281, 282, 0, 283, 296, 2888 380, 298, 299, 300, 301, 284, 0, 0, 0, 0, 2889 0, 285, 0, 0, 0, 286, 0, 0, 287, 288, 2890 289, 290, 41, 42, 284, 291, 292, 0, 0, 0, 2891 285, 0, 0, 293, 286, 0, 0, 287, 288, 289, 2892 290, 41, 42, 0, 291, 292, 0, 0, 294, 0, 2893 0, 0, 293, 281, 282, 0, 283, 296, 380, 298, 2894 299, 300, 301, 0, 0, 0, 0, 518, 0, 0, 2895 0, 0, 0, 0, 0, 0, 296, 380, 298, 299, 2896 300, 301, 284, 0, 0, 0, 0, 0, 285, 0, 2897 0, 0, 286, 0, 0, 287, 288, 289, 290, 41, 2898 42, 0, 291, 292, 0, 0, 0, 0, 0, 0, 2899 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2900 0, 0, 0, 0, 0, 521, 0, 0, 0, 0, 2901 0, 0, 0, 0, 296, 380, 298, 299, 300, 301, 2902 2, 205, 4, 5, 6, 7, 8, 9, 10, 11, 2903 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2904 22, 23, 24, 25, 0, 0, 0, 0, 0, 0, 2905 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 2906 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2907 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2908 0, 0, 0, 34, 0, 35, 0, 36, 37, 0, 2909 173, 174, 40, 0, 0, 0, 0, 0, 0, 41, 2910 42, 204, 2, 205, 4, 5, 6, 7, 8, 9, 2911 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2912 20, 21, 22, 23, 24, 25, 0, 0, 26, 27, 2913 28, 0, 0, 0, 0, 0, 0, 31, 0, 0, 2914 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2915 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2916 0, 0, 0, 0, 0, 34, 0, 35, 0, 36, 2917 0, 0, 206, 39, 474, 2, 205, 4, 5, 6, 2918 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2919 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 2920 0, 26, 27, 28, 0, 0, 0, 0, 0, 0, 2921 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2922 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2923 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 2924 35, 0, 36, 0, 0, 38, 39, 2, 205, 4, 2925 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2926 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2927 25, 0, 0, 26, 27, 28, 0, 0, 0, 0, 2928 0, 0, 31, 0, 8, 9, 10, 11, 12, 13, 2929 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2930 24, 25, 0, 0, 26, 27, 28, 492, 493, 494, 2931 34, 0, 35, 31, 36, 0, 0, 206, 39, 0, 2932 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2933 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2934 0, 34, 0, 0, 0, 0, 0, 0, 38, 39 2935 }; 2936 2937 #define yypact_value_is_default(yystate) \ 2938 ((yystate) == (-1332)) 2939 2940 #define yytable_value_is_error(yytable_value) \ 2941 YYID (0) 2942 2943 static const yytype_int16 yycheck[] = 2944 { 2945 0, 1, 0, 203, 184, 184, 520, 698, 238, 43, 2946 115, 184, 1, 698, 43, 43, 543, 185, 629, 0, 2947 104, 218, 184, 280, 185, 456, 455, 698, 348, 29, 2948 30, 184, 32, 184, 32, 1062, 184, 902, 167, 168, 2949 609, 348, 1, 43, 656, 45, 278, 45, 1043, 611, 2950 1006, 32, 1042, 1043, 32, 55, 497, 0, 759, 611, 2951 28, 61, 612, 61, 64, 609, 64, 67, 618, 67, 2952 154, 609, 499, 579, 1340, 718, 503, 999, 67, 609, 2953 609, 81, 82, 780, 264, 264, 777, 51, 186, 32, 2954 1421, 264, 777, 609, 82, 200, 1425, 265, 344, 1055, 2955 529, 39, 264, 902, 265, 105, 777, 0, 108, 39, 2956 78, 264, 417, 264, 609, 115, 264, 0, 43, 72, 2957 43, 45, 363, 643, 644, 645, 367, 489, 44, 45, 2958 83, 84, 437, 64, 0, 43, 82, 39, 227, 32, 2959 445, 39, 662, 44, 45, 109, 146, 95, 146, 32, 2960 184, 0, 1, 39, 154, 184, 184, 246, 111, 159, 2961 63, 159, 260, 261, 1495, 111, 32, 44, 45, 1477, 2962 109, 64, 613, 111, 85, 495, 617, 1443, 109, 109, 2963 30, 111, 130, 32, 184, 185, 110, 185, 4, 5, 2964 6, 7, 8, 9, 1523, 109, 39, 638, 114, 1528, 2965 200, 642, 113, 255, 1512, 39, 1514, 109, 208, 111, 2966 208, 294, 409, 114, 744, 64, 736, 217, 67, 1548, 2967 220, 145, 220, 109, 902, 111, 1555, 227, 744, 132, 2968 264, 81, 82, 96, 82, 264, 264, 405, 115, 11, 2969 644, 645, 242, 489, 405, 82, 246, 109, 1243, 744, 2970 250, 251, 250, 69, 511, 71, 112, 341, 662, 184, 2971 123, 184, 110, 1062, 264, 265, 109, 265, 111, 250, 2972 839, 271, 250, 0, 1, 109, 184, 111, 278, 1306, 2973 117, 643, 644, 645, 208, 928, 370, 455, 0, 851, 2974 395, 841, 251, 293, 455, 839, 114, 107, 1293, 851, 2975 662, 839, 1292, 1293, 611, 32, 3, 250, 828, 839, 2976 839, 82, 1009, 819, 238, 110, 132, 116, 423, 487, 2977 32, 131, 117, 839, 429, 116, 487, 220, 328, 116, 2978 328, 43, 736, 45, 293, 697, 82, 1259, 109, 951, 2979 67, 132, 425, 426, 839, 132, 270, 347, 348, 61, 2980 425, 426, 64, 116, 600, 67, 597, 250, 699, 55, 2981 90, 91, 1227, 109, 364, 417, 72, 250, 368, 132, 2982 1071, 220, 255, 297, 736, 1074, 1075, 83, 84, 379, 2983 721, 109, 110, 629, 250, 437, 691, 1065, 634, 255, 2984 959, 96, 242, 445, 109, 395, 126, 127, 960, 640, 2985 110, 250, 72, 109, 3, 405, 116, 405, 82, 105, 2986 1021, 773, 108, 83, 84, 959, 131, 116, 123, 676, 2987 344, 959, 1417, 423, 828, 109, 501, 1417, 1227, 429, 2988 513, 431, 873, 68, 146, 518, 110, 72, 521, 1466, 2989 75, 1528, 77, 117, 1143, 520, 1473, 159, 532, 84, 2990 1528, 697, 72, 1409, 1410, 455, 349, 121, 122, 72, 2991 460, 1548, 132, 83, 84, 109, 828, 111, 1555, 116, 2992 83, 84, 184, 185, 474, 119, 110, 1555, 116, 479, 2993 1030, 1031, 699, 117, 112, 132, 0, 487, 116, 487, 2994 1004, 491, 575, 491, 132, 495, 208, 131, 498, 1526, 2995 500, 425, 426, 0, 721, 762, 119, 1306, 220, 938, 2996 491, 586, 132, 88, 89, 474, 947, 946, 698, 698, 2997 520, 217, 131, 250, 965, 698, 758, 773, 657, 379, 2998 1142, 851, 700, 80, 417, 109, 698, 537, 250, 700, 2999 540, 968, 542, 543, 851, 698, 72, 698, 491, 1227, 3000 698, 417, 264, 116, 437, 1117, 109, 83, 84, 664, 3001 110, 520, 445, 992, 111, 109, 113, 117, 666, 132, 3002 117, 437, 115, 116, 110, 271, 211, 501, 537, 445, 3003 116, 540, 278, 542, 543, 111, 109, 480, 131, 830, 3004 590, 116, 3, 834, 109, 812, 520, 597, 491, 10, 3005 11, 12, 13, 14, 109, 1306, 489, 132, 491, 609, 3006 460, 611, 696, 116, 53, 72, 328, 598, 116, 4, 3007 5, 6, 7, 8, 9, 491, 83, 84, 39, 132, 3008 630, 590, 110, 116, 132, 119, 348, 978, 116, 691, 3009 124, 125, 491, 112, 964, 1323, 646, 116, 498, 132, 3010 500, 347, 652, 116, 111, 110, 67, 96, 0, 1, 3011 1498, 661, 586, 663, 664, 665, 1504, 1466, 364, 132, 3012 80, 1102, 368, 890, 1473, 129, 600, 131, 116, 116, 3013 1042, 733, 1383, 924, 69, 72, 71, 1525, 772, 110, 3014 32, 888, 1530, 405, 132, 132, 83, 84, 698, 1377, 3015 700, 111, 1380, 113, 663, 629, 665, 117, 112, 109, 3016 634, 111, 909, 713, 116, 110, 351, 112, 353, 719, 3017 110, 116, 64, 723, 111, 67, 116, 1526, 110, 110, 3018 132, 731, 45, 110, 116, 116, 131, 132, 631, 109, 3019 970, 111, 110, 455, 744, 745, 112, 1425, 61, 119, 3020 116, 64, 1430, 192, 67, 112, 72, 110, 758, 116, 3021 76, 978, 72, 116, 491, 894, 76, 83, 84, 1470, 3022 938, 1472, 731, 83, 84, 1021, 215, 938, 946, 491, 3023 112, 110, 1460, 495, 116, 946, 225, 10, 11, 12, 3024 13, 14, 1009, 109, 1135, 1322, 92, 93, 110, 109, 3025 1162, 111, 652, 119, 116, 110, 441, 72, 691, 119, 3026 109, 116, 111, 155, 697, 109, 39, 111, 83, 84, 3027 10, 11, 12, 13, 14, 691, 1527, 109, 109, 111, 3028 513, 724, 515, 146, 1034, 518, 1133, 119, 521, 839, 3029 1137, 1532, 1059, 110, 67, 738, 159, 1532, 109, 39, 3030 733, 851, 1193, 1194, 835, 294, 115, 116, 110, 110, 3031 110, 1532, 1103, 713, 116, 116, 116, 733, 1546, 719, 3032 116, 117, 185, 723, 1552, 115, 1133, 67, 220, 109, 3033 1137, 1138, 109, 110, 111, 1563, 109, 132, 111, 1567, 3034 773, 703, 110, 705, 894, 208, 119, 609, 116, 611, 3035 72, 901, 902, 110, 76, 110, 111, 220, 250, 116, 3036 64, 83, 84, 110, 1, 109, 1162, 111, 1135, 116, 3037 72, 902, 74, 75, 924, 85, 86, 87, 1057, 109, 3038 1292, 83, 84, 72, 630, 74, 75, 109, 938, 832, 3039 58, 59, 110, 902, 83, 84, 946, 119, 116, 109, 3040 646, 111, 109, 113, 114, 110, 112, 109, 45, 132, 3041 110, 116, 114, 110, 964, 661, 116, 115, 116, 116, 3042 109, 114, 109, 680, 111, 114, 1193, 1194, 114, 72, 3043 969, 74, 75, 76, 984, 109, 698, 111, 700, 114, 3044 83, 84, 109, 993, 111, 109, 1253, 1243, 109, 110, 3045 111, 1001, 132, 442, 1004, 109, 1006, 111, 82, 902, 3046 72, 132, 74, 75, 109, 328, 109, 104, 111, 902, 3047 1125, 83, 84, 110, 117, 984, 119, 72, 109, 74, 3048 75, 82, 744, 745, 116, 117, 902, 476, 83, 84, 3049 112, 109, 1001, 111, 894, 1004, 970, 1006, 109, 110, 3050 111, 901, 114, 902, 120, 1055, 116, 117, 145, 109, 3051 110, 111, 758, 1404, 128, 1065, 111, 154, 1068, 1069, 3052 1070, 58, 59, 60, 513, 1265, 1266, 1267, 1507, 518, 3053 1421, 1062, 521, 72, 1341, 74, 75, 76, 1345, 129, 3054 432, 94, 405, 1093, 83, 84, 1055, 1021, 44, 45, 3055 10, 11, 12, 13, 14, 131, 1065, 111, 815, 1068, 3056 1069, 1070, 564, 565, 566, 567, 109, 204, 825, 109, 3057 969, 208, 110, 1206, 1207, 1125, 1209, 839, 1557, 39, 3058 112, 1024, 1215, 840, 72, 1218, 74, 75, 1222, 851, 3059 560, 561, 112, 993, 110, 83, 84, 562, 563, 491, 3060 110, 238, 239, 1494, 1495, 110, 72, 67, 74, 75, 3061 76, 110, 72, 110, 74, 75, 76, 83, 84, 1062, 3062 568, 569, 109, 83, 84, 902, 112, 111, 131, 1062, 3063 112, 114, 109, 270, 114, 116, 273, 1404, 114, 112, 3064 1447, 533, 110, 109, 45, 111, 1062, 110, 112, 109, 3065 1200, 111, 117, 119, 1421, 112, 112, 294, 112, 119, 3066 297, 29, 117, 1062, 117, 116, 1205, 110, 110, 114, 3067 117, 112, 1222, 110, 132, 115, 938, 1227, 3, 115, 3068 115, 109, 116, 110, 946, 10, 11, 12, 13, 14, 3069 679, 110, 969, 1093, 116, 110, 1227, 117, 110, 688, 3070 110, 110, 964, 692, 341, 116, 598, 344, 1247, 110, 3071 110, 110, 3, 110, 39, 1265, 1266, 1267, 1227, 10, 3072 11, 12, 13, 14, 110, 110, 363, 1494, 1495, 1162, 3073 367, 110, 110, 370, 10, 11, 12, 13, 14, 110, 3074 110, 110, 67, 110, 110, 1400, 1379, 110, 39, 29, 3075 115, 643, 644, 645, 131, 112, 1265, 1266, 1267, 110, 3076 110, 1204, 1542, 39, 110, 110, 114, 116, 112, 112, 3077 662, 110, 1322, 1323, 110, 1306, 67, 110, 116, 110, 3078 117, 116, 1039, 1040, 1227, 1062, 116, 116, 425, 426, 3079 112, 67, 116, 110, 1227, 110, 112, 85, 86, 87, 3080 1200, 1340, 1532, 1532, 109, 1204, 1205, 208, 109, 1532, 3081 1243, 1227, 109, 1322, 1323, 1533, 453, 109, 112, 456, 3082 1532, 109, 1533, 111, 109, 113, 114, 1377, 1227, 1532, 3083 1380, 1532, 132, 109, 1532, 111, 117, 474, 239, 1557, 3084 1097, 1098, 115, 119, 736, 110, 1557, 110, 1247, 1399, 3085 1400, 115, 1507, 110, 129, 115, 114, 112, 1301, 1409, 3086 1410, 132, 499, 1306, 501, 110, 503, 116, 1377, 270, 3087 112, 1380, 116, 1306, 112, 1425, 513, 110, 515, 110, 3088 1430, 518, 110, 520, 521, 112, 471, 112, 112, 110, 3089 1306, 47, 112, 294, 112, 532, 297, 112, 1448, 115, 3090 1409, 1410, 1301, 132, 1443, 110, 132, 1306, 115, 132, 3091 1460, 117, 110, 132, 115, 132, 1425, 112, 112, 112, 3092 112, 1430, 72, 112, 74, 75, 76, 112, 1205, 112, 3093 112, 110, 110, 83, 84, 1466, 828, 926, 112, 1448, 3094 112, 1340, 1473, 835, 0, 1, 109, 109, 1532, 586, 3095 1227, 1460, 109, 1532, 1532, 60, 110, 1507, 1508, 109, 3096 597, 111, 55, 600, 110, 114, 132, 1517, 112, 119, 3097 1247, 112, 117, 1523, 110, 112, 32, 110, 1528, 96, 3098 96, 109, 1532, 1533, 109, 1533, 115, 110, 112, 45, 3099 132, 110, 629, 42, 116, 1526, 1546, 634, 1548, 1508, 3100 110, 110, 1552, 640, 117, 1555, 132, 1557, 1517, 1557, 3101 902, 67, 105, 1563, 1523, 108, 1273, 1567, 132, 1528, 3102 110, 110, 96, 1466, 1281, 1282, 1283, 96, 132, 1306, 3103 1473, 110, 110, 1466, 132, 117, 132, 1546, 110, 1548, 3104 1473, 112, 110, 1552, 1443, 115, 1555, 132, 104, 112, 3105 1466, 109, 453, 115, 1563, 456, 132, 1473, 1567, 696, 3106 115, 154, 110, 1340, 64, 110, 132, 1466, 1542, 110, 3107 110, 1077, 1329, 571, 1473, 570, 1227, 969, 572, 64, 3108 64, 718, 573, 1526, 1073, 574, 1495, 1385, 1567, 74, 3109 146, 1316, 1138, 1526, 986, 680, 1473, 81, 154, 155, 3110 1345, 1093, 705, 946, 4, 5, 6, 7, 8, 9, 3111 1526, 748, 513, 453, 515, 471, 116, 518, 723, 453, 3112 521, 948, 993, 590, 217, 894, 966, 1526, 658, 185, 3113 1247, 116, 116, 33, 578, 772, 491, 758, 10, 11, 3114 12, 13, 14, -1, 200, 578, 748, 203, 204, 578, 3115 1042, 1043, 208, 1399, -1, -1, -1, -1, -1, 159, 3116 -1, -1, -1, -1, -1, -1, 1443, 39, -1, 69, 3117 1062, 71, -1, 229, 159, 159, -1, 233, 271, 235, 3118 72, -1, 74, 75, 76, 278, -1, -1, 244, 1466, 3119 -1, 83, 84, 830, 250, 67, 1473, 834, -1, 255, 3120 72, -1, 74, 75, 76, -1, -1, -1, -1, 265, 3121 -1, 83, 84, -1, -1, -1, -1, 273, 283, -1, 3122 220, -1, -1, -1, -1, -1, 26, 27, 28, -1, 3123 815, 296, 297, -1, -1, 220, 220, 109, -1, 111, 3124 825, -1, -1, 308, -1, -1, -1, 119, -1, 1526, 3125 -1, -1, -1, -1, 347, 840, -1, -1, 258, -1, 3126 -1, -1, 262, 10, 11, 12, 13, 14, -1, -1, 3127 1532, 364, -1, 258, 258, 368, -1, 262, 262, 344, 3128 -1, -1, -1, -1, -1, 341, -1, 924, 344, -1, 3129 -1, 928, 39, 278, 350, -1, -1, 97, -1, 99, 3130 -1, -1, -1, -1, -1, -1, -1, 363, -1, -1, 3131 947, 367, 1204, 1205, 370, 380, -1, 718, -1, -1, 3132 67, -1, -1, -1, 680, 72, 1315, 74, 75, 76, 3133 -1, 968, 969, 970, -1, 1227, 83, 84, 431, -1, 3134 72, -1, 74, 75, 76, -1, -1, -1, -1, 349, 3135 -1, 83, 84, -1, -1, 1247, 72, -1, 74, 75, 3136 76, 417, 109, -1, 349, 349, -1, 83, 84, -1, 3137 -1, 72, 119, 74, 75, 76, 432, 109, -1, 111, 3138 180, 437, 83, 84, 1021, -1, -1, 119, -1, 445, 3139 190, 191, -1, 109, -1, 195, -1, 197, 198, -1, 3140 1292, 1293, -1, 119, -1, -1, -1, -1, 109, 1301, 3141 -1, -1, -1, -1, 1306, 471, -1, -1, 474, -1, 3142 51, -1, 53, -1, -1, 56, 57, 58, -1, 60, 3143 430, -1, -1, 489, -1, 491, -1, -1, -1, -1, 3144 -1, -1, -1, 499, 75, 430, 430, 503, 1340, 10, 3145 11, 12, 13, 14, 1039, 1040, 87, 88, -1, 815, 3146 -1, -1, 447, -1, -1, 1102, 1103, -1, -1, 825, 3147 72, -1, 74, 75, 76, -1, 532, 533, 39, -1, 3148 480, 83, 84, -1, 840, 1474, -1, 1476, -1, -1, 3149 -1, -1, 557, 558, 559, 480, 480, 72, -1, 74, 3150 75, 76, -1, -1, 597, -1, 67, 109, 83, 84, 3151 -1, -1, 1097, 1098, -1, -1, -1, 119, -1, -1, 3152 -1, -1, 1511, 579, 1513, 1417, -1, 928, -1, -1, 3153 -1, -1, -1, -1, 109, 600, -1, 630, -1, -1, 3154 -1, 597, 598, -1, 600, -1, 947, -1, 109, -1, 3155 111, 1443, -1, 646, -1, 611, -1, -1, 119, -1, 3156 -1, -1, -1, -1, -1, -1, -1, 1556, 661, 1558, 3157 -1, -1, -1, 629, 1466, -1, -1, -1, 634, -1, 3158 -1, 1473, 1571, 1572, 640, 1222, -1, 643, 644, 645, 3159 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3160 0, -1, -1, 603, -1, -1, 662, -1, -1, -1, 3161 1247, -1, -1, -1, -1, -1, -1, -1, 603, 603, 3162 -1, -1, -1, -1, 680, -1, -1, -1, -1, -1, 3163 -1, 631, 32, -1, 1526, 691, 636, -1, -1, -1, 3164 696, 697, -1, -1, 700, -1, 631, 631, -1, -1, 3165 -1, 636, 636, -1, -1, -1, 1241, -1, -1, -1, 3166 -1, -1, -1, -1, -1, 758, -1, 67, -1, 734, 3167 -1, -1, -1, -1, -1, -1, -1, 733, -1, -1, 3168 736, -1, -1, 1039, 1040, -1, -1, -1, 1273, 745, 3169 -1, -1, 748, -1, -1, -1, 1281, 1282, 1283, -1, 3170 -1, 1102, -1, 1340, -1, -1, -1, -1, -1, -1, 3171 -1, -1, -1, 344, 345, 780, 772, 773, -1, -1, 3172 -1, -1, 778, -1, 724, 356, 357, -1, -1, 26, 3173 27, 28, -1, -1, -1, -1, -1, -1, 738, 724, 3174 724, 1097, 1098, -1, 1329, -1, -1, -1, -1, -1, 3175 -1, -1, -1, 738, 738, 155, -1, -1, -1, 815, 3176 -1, -1, 827, -1, -1, -1, -1, -1, -1, 825, 3177 -1, -1, 828, 758, 830, -1, -1, 833, 834, 835, 3178 -1, -1, 582, 583, 840, -1, -1, -1, -1, -1, 3179 -1, -1, -1, -1, 850, -1, -1, -1, -1, -1, 3180 97, -1, 99, -1, -1, -1, 1443, 10, 11, 12, 3181 13, 14, 612, -1, -1, 615, 616, -1, 618, -1, 3182 620, 621, -1, -1, -1, 625, 626, 124, -1, 229, 3183 -1, 924, 832, -1, -1, -1, 39, -1, 1475, -1, 3184 1477, -1, -1, -1, -1, -1, 902, 832, 832, -1, 3185 250, -1, -1, -1, -1, 255, 188, -1, -1, -1, 3186 -1, -1, -1, 195, 67, -1, -1, -1, 924, 72, 3187 -1, 74, 75, 76, -1, 1512, -1, 1514, -1, -1, 3188 83, 84, -1, 180, -1, 1241, -1, -1, -1, -1, 3189 -1, 188, -1, 190, 191, -1, -1, -1, 195, -1, 3190 197, 198, -1, -1, 960, 1542, 109, -1, 111, 709, 3191 710, -1, 968, 969, -1, 715, 119, 1273, -1, 10, 3192 11, 12, 13, 14, -1, 1281, 1282, 1283, -1, -1, 3193 986, -1, -1, -1, -1, 267, -1, -1, -1, 10, 3194 11, 12, 13, 14, -1, -1, -1, -1, 39, -1, 3195 350, -1, -1, -1, -1, -1, 1021, -1, -1, -1, 3196 -1, -1, -1, -1, -1, 1021, -1, -1, 39, -1, 3197 267, -1, -1, 1329, -1, -1, 67, -1, 1034, -1, 3198 -1, 72, -1, 1039, 1040, 76, 1042, 1043, -1, -1, 3199 -1, 323, 83, 84, -1, -1, 67, 1062, -1, 331, 3200 -1, 72, 334, 74, 75, 76, 1062, -1, -1, -1, 3201 -1, -1, 83, 84, -1, -1, -1, 417, 109, -1, 3202 -1, 0, -1, -1, 1024, -1, -1, -1, 119, -1, 3203 -1, -1, 432, -1, -1, -1, -1, 437, 109, 1024, 3204 1024, 1097, 1098, -1, -1, 445, -1, 1103, 119, -1, 3205 -1, -1, -1, 32, -1, -1, -1, -1, -1, -1, 3206 -1, -1, -1, -1, -1, 397, -1, -1, -1, 401, 3207 -1, 471, -1, -1, 1475, -1, 1477, -1, 97, 98, 3208 99, 100, 101, 102, 103, 104, 105, 106, 67, 489, 3209 -1, 491, -1, -1, 725, -1, 727, -1, -1, -1, 3210 -1, -1, -1, 734, 735, -1, 1162, -1, 739, -1, 3211 -1, 1512, 131, 1514, 1179, 10, 11, 12, 13, 14, 3212 751, -1, -1, -1, -1, 756, -1, -1, -1, 1222, 3213 -1, -1, -1, 533, -1, -1, -1, -1, -1, -1, 3214 -1, -1, -1, -1, 39, -1, -1, -1, -1, 1205, 3215 -1, 782, -1, -1, 486, -1, -1, -1, -1, -1, 3216 -1, -1, -1, -1, -1, -1, 1222, -1, -1, -1, 3217 -1, 1227, 67, -1, -1, -1, 155, 72, -1, -1, 3218 -1, 76, -1, -1, -1, 1241, -1, 1243, 83, 84, 3219 -1, 1247, -1, -1, -1, -1, 827, -1, 598, -1, 3220 -1, -1, -1, -1, 1204, -1, -1, -1, -1, -1, 3221 -1, -1, -1, -1, 109, -1, -1, 1273, -1, 1204, 3222 1204, -1, -1, -1, 119, 1281, 1282, 1283, -1, -1, 3223 -1, -1, -1, -1, -1, -1, 1292, 1293, -1, -1, 3224 -1, -1, -1, 643, 644, 645, 578, 579, -1, -1, 3225 1306, -1, -1, 884, 885, 886, 887, -1, 889, -1, 3226 -1, -1, 662, -1, -1, -1, -1, -1, -1, -1, 3227 -1, 250, -1, 1329, 905, -1, 255, -1, -1, -1, 3228 680, -1, -1, -1, 1340, 582, 583, -1, 919, -1, 3229 -1, 691, -1, -1, -1, -1, -1, 697, -1, 1099, 3230 -1, 1301, -1, -1, -1, -1, 1399, -1, -1, -1, 3231 -1, -1, -1, -1, -1, 612, 1301, 1301, 615, 616, 3232 -1, 618, -1, 620, 621, -1, -1, 958, 625, 626, 3233 -1, -1, -1, 733, -1, 667, 736, -1, -1, 671, 3234 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3235 20, 21, 22, 23, 24, 25, 26, 27, 28, -1, 3236 -1, 1417, -1, -1, -1, -1, -1, 998, -1, 39, 3237 -1, 350, 704, 773, 1005, -1, -1, -1, -1, 1010, 3238 -1, -1, -1, -1, 1015, -1, 1017, 1443, -1, -1, 3239 1021, 1022, 1023, -1, -1, 1026, -1, 67, -1, -1, 3240 -1, -1, -1, -1, 1035, -1, -1, 704, 78, -1, 3241 1466, -1, 709, 710, -1, 815, -1, 1473, 715, -1, 3242 -1, -1, 1053, 1054, 1224, 825, -1, -1, 828, -1, 3243 -1, -1, -1, 833, -1, 835, -1, -1, 417, -1, 3244 840, -1, -1, -1, -1, -1, -1, -1, -1, 1080, 3245 -1, -1, 1083, 432, -1, -1, -1, -1, 437, -1, 3246 -1, -1, -1, -1, -1, -1, 445, -1, -1, -1, 3247 1526, -1, -1, -1, -1, -1, -1, 1533, -1, -1, 3248 -1, -1, -1, -1, -1, -1, -1, 819, -1, -1, 3249 -1, 1122, 471, -1, -1, -1, -1, 1128, 1129, -1, 3250 -1, -1, 902, -1, -1, -1, -1, -1, -1, 1140, 3251 489, -1, 491, 0, 1145, -1, -1, 1148, -1, 1150, 3252 -1, -1, 1153, -1, -1, -1, -1, -1, -1, -1, 3253 -1, -1, -1, -1, -1, 1166, -1, -1, -1, -1, 3254 -1, -1, -1, -1, -1, 32, 37, 38, 1179, 40, 3255 1181, 1182, 1183, 1184, 533, -1, -1, -1, -1, -1, 3256 -1, -1, -1, -1, -1, -1, 1197, -1, 1199, -1, 3257 -1, -1, 1203, -1, -1, 66, -1, -1, -1, -1, 3258 67, 72, -1, 74, 75, 76, 986, -1, 79, 80, 3259 81, 82, 83, 84, -1, 86, 87, -1, -1, -1, 3260 932, 1232, 1233, 94, -1, -1, -1, -1, -1, -1, 3261 -1, -1, -1, -1, -1, -1, -1, -1, 109, 598, 3262 111, -1, 113, 114, -1, -1, -1, 118, 119, 120, 3263 121, 122, 123, -1, -1, -1, -1, -1, -1, 1039, 3264 1040, -1, 1042, 1043, -1, -1, -1, -1, -1, -1, 3265 -1, -1, -1, 1284, 1285, -1, -1, -1, -1, -1, 3266 -1, -1, 1062, 1294, 643, 644, 645, -1, 155, -1, 3267 -1, -1, -1, -1, -1, -1, -1, -1, -1, 1011, 3268 -1, -1, -1, 662, -1, -1, -1, -1, -1, -1, 3269 -1, -1, -1, -1, -1, 1027, -1, 1097, 1098, -1, 3270 -1, 680, -1, -1, -1, -1, -1, -1, -1, -1, 3271 -1, -1, 691, -1, -1, 1346, -1, -1, 697, -1, 3272 -1, -1, -1, -1, -1, -1, -1, 1358, -1, 1360, 3273 1361, 1362, 37, 38, -1, 40, -1, -1, -1, -1, 3274 -1, 1372, -1, -1, -1, -1, -1, -1, -1, -1, 3275 1381, -1, -1, -1, 733, -1, -1, 736, -1, -1, 3276 -1, 66, 1162, 250, -1, -1, 1397, 72, 255, -1, 3277 -1, 76, 1104, -1, 79, 80, 81, 82, 83, 84, 3278 -1, 86, 87, -1, -1, -1, -1, -1, 0, 94, 3279 -1, -1, -1, -1, 773, -1, -1, -1, -1, -1, 3280 -1, -1, 1099, -1, 109, 1205, 111, -1, -1, 114, 3281 -1, -1, -1, 118, 119, 120, 121, 122, 123, -1, 3282 32, -1, 1453, 1454, -1, -1, -1, 1227, -1, -1, 3283 -1, -1, -1, -1, -1, 1466, 815, -1, -1, -1, 3284 -1, 1241, 1473, 1243, -1, -1, 825, -1, -1, 828, 3285 -1, -1, -1, -1, 833, 67, 835, -1, -1, -1, 3286 -1, 840, -1, 350, -1, -1, -1, -1, -1, -1, 3287 -1, -1, -1, 1273, -1, 1506, -1, -1, -1, 1510, 3288 -1, 1281, 1282, 1283, -1, -1, -1, -1, -1, -1, 3289 -1, -1, 1292, 1293, -1, -1, -1, -1, -1, -1, 3290 -1, -1, -1, -1, -1, -1, 1306, -1, 1539, -1, 3291 1541, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3292 -1, -1, -1, 902, -1, -1, -1, 1224, -1, 1329, 3293 417, -1, -1, -1, -1, -1, -1, -1, 1569, 1570, 3294 -1, -1, -1, 155, -1, 432, 1577, 1578, -1, -1, 3295 437, -1, -1, -1, -1, -1, 0, -1, 445, 3, 3296 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 3297 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3298 24, 25, 26, 27, 471, -1, 30, 31, 32, 33, 3299 -1, -1, 36, -1, -1, 39, 40, -1, -1, -1, 3300 -1, -1, 489, -1, 491, -1, -1, 986, -1, -1, 3301 -1, -1, -1, -1, -1, -1, -1, 1417, -1, -1, 3302 64, -1, -1, 67, -1, 69, -1, 71, 72, -1, 3303 74, 75, 76, -1, -1, -1, -1, -1, 250, 83, 3304 84, -1, -1, 255, -1, -1, 533, -1, 7, -1, 3305 -1, 10, 11, 12, 13, 14, -1, -1, -1, -1, 3306 1039, 1040, -1, 1042, 1043, 109, 1466, 111, -1, -1, 3307 -1, -1, -1, 1473, -1, 119, -1, -1, 37, 38, 3308 39, 40, -1, 1062, -1, 10, 11, 12, 13, 14, 3309 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3310 25, 26, 27, 28, -1, -1, -1, 66, 67, -1, 3311 -1, 598, -1, 72, 39, -1, -1, 76, 1097, 1098, 3312 79, 80, 81, 82, 83, 84, 1526, 86, 87, -1, 3313 -1, -1, -1, -1, -1, 94, -1, -1, 350, -1, 3314 -1, -1, 67, -1, -1, -1, -1, -1, -1, -1, 3315 109, -1, 111, 78, -1, -1, 643, 644, 645, 118, 3316 119, 120, 121, 122, 123, -1, -1, -1, -1, -1, 3317 -1, -1, -1, -1, -1, 662, -1, -1, -1, -1, 3318 -1, -1, -1, 1162, -1, -1, -1, -1, -1, -1, 3319 -1, -1, -1, 680, -1, -1, -1, -1, -1, -1, 3320 -1, -1, -1, -1, 691, 417, -1, -1, -1, 45, 3321 697, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3322 432, -1, -1, -1, -1, 437, 1205, -1, 64, -1, 3323 -1, -1, -1, 445, -1, -1, -1, -1, -1, -1, 3324 -1, -1, -1, -1, -1, -1, 733, -1, 1227, 736, 3325 -1, -1, -1, -1, -1, -1, -1, -1, -1, 471, 3326 -1, -1, 1241, -1, 1243, -1, -1, -1, -1, -1, 3327 -1, -1, -1, -1, 110, -1, -1, 489, -1, 491, 3328 116, -1, -1, -1, -1, -1, 773, -1, -1, -1, 3329 -1, -1, -1, -1, 1273, -1, -1, -1, -1, -1, 3330 -1, -1, 1281, 1282, 1283, -1, -1, -1, -1, 145, 3331 -1, -1, -1, 1292, 1293, -1, -1, -1, -1, 155, 3332 -1, 533, -1, 159, -1, -1, -1, 1306, 815, -1, 3333 -1, -1, -1, -1, -1, -1, -1, -1, 825, -1, 3334 -1, 828, -1, -1, -1, -1, 833, -1, 835, -1, 3335 1329, -1, -1, 840, 10, 11, 12, 13, 14, 15, 3336 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3337 26, 27, 208, -1, 30, 31, 32, -1, -1, -1, 3338 -1, -1, -1, 39, 220, -1, 598, -1, -1, -1, 3339 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3340 -1, -1, 238, 239, -1, -1, -1, -1, -1, -1, 3341 -1, 67, -1, -1, -1, 902, -1, -1, 74, 75, 3342 -1, -1, -1, -1, -1, -1, 262, -1, -1, -1, 3343 -1, 643, 644, 645, 270, -1, -1, -1, 1417, -1, 3344 -1, -1, -1, -1, 281, -1, 283, 284, -1, -1, 3345 662, -1, -1, -1, 291, 292, -1, -1, 294, 296, 3346 297, 297, -1, 119, -1, -1, -1, -1, 680, -1, 3347 -1, 308, -1, -1, -1, -1, -1, -1, -1, 691, 3348 -1, -1, -1, -1, -1, 697, -1, 1466, 37, 38, 3349 -1, 40, -1, -1, 1473, -1, -1, -1, -1, 986, 3350 -1, -1, -1, -1, -1, -1, -1, 344, 344, -1, 3351 -1, -1, -1, 349, -1, -1, -1, 66, -1, -1, 3352 -1, 733, -1, 72, 736, -1, -1, 76, -1, -1, 3353 79, 80, 81, 82, 83, 84, -1, 86, 87, -1, 3354 -1, -1, -1, 380, -1, 94, -1, 1526, -1, -1, 3355 -1, -1, 1039, 1040, -1, 1042, 1043, -1, -1, -1, 3356 109, 773, 111, -1, -1, -1, -1, -1, 117, 118, 3357 119, 120, 121, 122, 123, 1062, -1, -1, -1, -1, 3358 -1, -1, -1, -1, -1, 64, -1, -1, -1, 425, 3359 426, -1, -1, -1, -1, 74, 432, 76, -1, 78, 3360 -1, -1, -1, 815, -1, -1, 85, -1, -1, -1, 3361 1097, 1098, -1, 825, -1, -1, 828, 453, -1, -1, 3362 456, 833, -1, 835, -1, -1, -1, -1, 840, -1, 3363 -1, -1, -1, -1, -1, -1, -1, 116, -1, 118, 3364 119, 120, -1, -1, -1, -1, -1, -1, -1, -1, 3365 -1, -1, -1, 489, -1, -1, -1, -1, -1, -1, 3366 -1, -1, -1, -1, -1, 501, -1, -1, -1, -1, 3367 -1, -1, -1, -1, -1, 1162, -1, 513, -1, 515, 3368 159, -1, 518, -1, 520, 521, -1, -1, -1, -1, 3369 902, -1, -1, -1, -1, -1, -1, 533, -1, -1, 3370 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3371 -1, -1, -1, -1, -1, -1, -1, -1, 1205, -1, 3372 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 3373 567, 568, 569, 570, 571, 572, 573, 574, -1, -1, 3374 1227, 220, -1, 222, 223, 224, -1, -1, -1, -1, 3375 586, -1, -1, -1, 1241, -1, 1243, -1, -1, -1, 3376 -1, -1, 598, 600, 600, -1, -1, 603, -1, -1, 3377 -1, -1, -1, -1, 986, -1, -1, -1, -1, 258, 3378 -1, -1, -1, 262, -1, -1, 1273, -1, -1, -1, 3379 -1, -1, -1, 629, 1281, 1282, 1283, -1, 634, 278, 3380 -1, -1, -1, -1, -1, 1292, 1293, 643, 644, 645, 3381 -1, -1, -1, -1, -1, -1, -1, -1, -1, 1306, 3382 -1, -1, -1, -1, -1, -1, 662, 1039, 1040, -1, 3383 1042, 1043, -1, -1, -1, -1, -1, -1, -1, -1, 3384 -1, -1, 1329, -1, -1, -1, -1, -1, -1, 328, 3385 1062, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3386 -1, 697, 699, -1, -1, -1, -1, -1, -1, -1, 3387 349, -1, -1, -1, -1, 354, 355, 44, -1, -1, 3388 -1, -1, 718, 362, 721, 1097, 1098, -1, -1, -1, 3389 -1, -1, -1, -1, -1, -1, -1, 734, -1, -1, 3390 736, -1, 738, 10, 11, 12, 13, 14, 15, 16, 3391 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3392 27, -1, -1, 90, -1, -1, 405, -1, -1, -1, 3393 1417, -1, 39, 100, -1, -1, -1, 773, -1, -1, 3394 -1, -1, -1, 780, 423, -1, -1, -1, -1, 428, 3395 1162, 430, -1, -1, -1, -1, -1, -1, -1, -1, 3396 67, -1, -1, -1, -1, -1, -1, -1, 447, -1, 3397 -1, 450, 451, -1, -1, 812, -1, -1, -1, 1466, 3398 -1, -1, -1, -1, -1, -1, 1473, 466, -1, 156, 3399 827, -1, 828, 1205, -1, -1, 832, -1, -1, 835, 3400 -1, 480, -1, 170, -1, -1, -1, -1, 487, -1, 3401 -1, -1, -1, -1, -1, 1227, -1, -1, -1, -1, 3402 -1, -1, -1, -1, -1, -1, 193, -1, -1, 1241, 3403 -1, 1243, -1, -1, -1, -1, -1, -1, -1, 1526, 3404 207, -1, -1, -1, -1, -1, -1, -1, -1, 216, 3405 -1, -1, -1, -1, -1, -1, -1, -1, -1, 226, 3406 -1, 1273, -1, -1, -1, -1, -1, -1, -1, 1281, 3407 1282, 1283, -1, -1, -1, -1, -1, -1, -1, -1, 3408 1292, 1293, -1, -1, 251, -1, -1, -1, -1, 256, 3409 -1, -1, 928, -1, 1306, -1, -1, -1, -1, -1, 3410 -1, -1, 269, -1, -1, -1, -1, -1, 275, -1, 3411 277, 947, -1, -1, -1, -1, -1, 1329, -1, -1, 3412 -1, -1, -1, -1, 603, -1, -1, -1, 295, -1, 3413 -1, -1, -1, -1, 970, -1, -1, -1, -1, -1, 3414 -1, 978, -1, -1, -1, -1, -1, -1, -1, -1, 3415 986, -1, 631, -1, -1, -1, -1, 636, -1, -1, 3416 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3417 -1, 338, 1009, -1, -1, -1, 343, -1, -1, -1, 3418 -1, -1, -1, -1, 1021, 1021, -1, -1, -1, -1, 3419 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3420 -1, -1, -1, -1, 371, 1417, 1042, 1043, 375, 376, 3421 -1, 378, -1, -1, -1, -1, -1, -1, 385, 386, 3422 -1, 388, 389, -1, 391, 1062, 393, -1, -1, -1, 3423 -1, -1, 7, -1, -1, 10, 11, 12, 13, 14, 3424 -1, -1, -1, 410, -1, 724, -1, -1, -1, -1, 3425 -1, 418, -1, -1, 1466, -1, -1, -1, -1, 738, 3426 -1, 1473, 37, 38, 39, 40, 1102, -1, -1, -1, 3427 -1, -1, -1, -1, -1, -1, 443, -1, -1, 758, 3428 -1, -1, -1, -1, -1, -1, -1, 454, -1, -1, 3429 -1, 66, 67, -1, -1, -1, -1, 72, 1135, -1, 3430 -1, 76, -1, -1, 79, 80, 81, 82, 83, 84, 3431 477, 86, 87, -1, 1526, -1, 483, -1, -1, 94, 3432 -1, 488, -1, -1, -1, -1, 1162, -1, -1, -1, 3433 -1, -1, -1, -1, 109, -1, 111, -1, -1, -1, 3434 819, -1, 1179, 118, 119, 120, 121, 122, 123, -1, 3435 -1, -1, -1, 832, -1, -1, 1193, 1194, 525, -1, 3436 -1, -1, -1, -1, -1, -1, -1, -1, 1204, -1, 3437 -1, -1, 851, -1, 541, -1, -1, -1, -1, -1, 3438 -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 3439 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3440 22, 23, 24, 25, 26, 27, -1, 1243, 30, 31, 3441 32, 578, -1, -1, -1, -1, -1, 39, -1, -1, 3442 587, -1, -1, -1, -1, -1, -1, 594, -1, -1, 3443 -1, -1, 599, -1, -1, -1, -1, -1, -1, -1, 3444 -1, -1, -1, 610, -1, 67, -1, 69, -1, 71, 3445 72, -1, 74, 75, 76, -1, 1292, 1293, -1, 938, 3446 -1, 83, 84, -1, -1, 1301, -1, -1, -1, -1, 3447 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3448 -1, -1, -1, -1, 651, 964, -1, 109, -1, 111, 3449 -1, -1, -1, -1, -1, -1, -1, 119, -1, -1, 3450 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3451 -1, -1, -1, 992, -1, -1, -1, -1, -1, -1, 3452 687, -1, -1, -1, -1, -1, 10, 11, 12, 13, 3453 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3454 24, 25, 26, 27, 28, 1024, 30, 31, 32, -1, 3455 -1, -1, -1, -1, -1, 39, 1035, -1, -1, -1, 3456 -1, -1, -1, -1, -1, -1, -1, 1404, -1, -1, 3457 -1, -1, -1, -1, -1, 742, -1, -1, -1, -1, 3458 -1, 1417, -1, 67, 1421, 752, 753, -1, -1, -1, 3459 74, 75, -1, -1, 78, -1, -1, -1, -1, 766, 3460 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3461 -1, -1, -1, -1, -1, -1, 783, -1, 785, -1, 3462 -1, -1, 789, -1, -1, 109, -1, 111, -1, -1, 3463 -1, -1, -1, -1, -1, 119, -1, -1, 1117, 1475, 3464 -1, 1477, -1, -1, -1, -1, -1, -1, -1, -1, 3465 -1, -1, -1, -1, -1, -1, -1, 1494, 1495, -1, 3466 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3467 37, 38, -1, 40, -1, -1, 1512, -1, 1514, -1, 3468 -1, -1, -1, -1, -1, -1, -1, -1, 855, -1, 3469 -1, -1, -1, -1, -1, 862, -1, -1, -1, 66, 3470 -1, -1, -1, -1, -1, 72, 1542, -1, 875, 76, 3471 877, -1, 79, 80, 81, 82, 83, 84, -1, 86, 3472 87, -1, -1, -1, 891, 1204, -1, 94, -1, -1, 3473 -1, 898, -1, -1, -1, -1, -1, -1, -1, -1, 3474 -1, -1, 109, 910, 111, -1, 913, -1, -1, 116, 3475 -1, 118, 119, 120, 121, 122, 123, -1, -1, -1, 3476 -1, -1, -1, -1, 931, -1, -1, -1, -1, -1, 3477 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3478 -1, -1, -1, -1, 154, 155, -1, -1, -1, -1, 3479 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3480 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3481 -1, -1, -1, -1, -1, -1, -1, -1, 188, -1, 3482 -1, -1, 1301, -1, -1, 195, -1, 3, 4, 5, 3483 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 3484 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3485 26, 27, -1, 1020, 30, 31, 32, 33, -1, -1, 3486 36, -1, -1, 39, 40, 10, 11, 12, 13, 14, 3487 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3488 25, 26, 27, -1, -1, 30, 31, 32, 64, -1, 3489 -1, 67, -1, 69, 39, 71, 72, 267, 74, 75, 3490 76, -1, -1, -1, -1, -1, -1, 83, 84, 1076, 3491 -1, -1, -1, -1, -1, -1, 1083, -1, -1, -1, 3492 -1, -1, 67, -1, -1, -1, -1, -1, -1, 74, 3493 75, -1, -1, 109, -1, 111, -1, -1, -1, 115, 3494 -1, -1, -1, 119, -1, 145, 1113, -1, -1, -1, 3495 -1, 1118, -1, 323, -1, 155, -1, -1, -1, 1126, 3496 -1, 331, 332, -1, 334, 335, -1, 167, 168, -1, 3497 -1, -1, -1, -1, 344, -1, -1, -1, 348, -1, 3498 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3499 1157, -1, -1, -1, -1, -1, -1, 367, -1, -1, 3500 370, -1, 1169, -1, -1, 1172, -1, 1174, -1, -1, 3501 37, 38, -1, 40, -1, -1, -1, -1, -1, -1, 3502 -1, 1188, 1189, -1, -1, -1, -1, 397, -1, -1, 3503 -1, 401, -1, -1, -1, -1, -1, -1, 238, 66, 3504 -1, -1, -1, 1210, -1, 72, -1, -1, -1, 76, 3505 -1, -1, 79, 80, 81, 82, 83, 84, -1, 86, 3506 87, -1, 432, 263, -1, -1, -1, 94, -1, -1, 3507 1237, -1, -1, -1, -1, -1, -1, -1, 1557, -1, 3508 -1, -1, 109, -1, 111, 455, -1, 114, -1, -1, 3509 -1, 118, 119, 120, 121, 122, 123, -1, -1, -1, 3510 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3511 -1, -1, -1, -1, -1, -1, 486, -1, -1, 489, 3512 -1, -1, -1, -1, 3, 4, 5, 6, 7, 8, 2105 3513 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, 3514 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 3515 -1, 30, 31, 32, 33, -1, -1, 36, -1, 529, 3516 39, -1, 532, 533, -1, -1, -1, -1, 1335, -1, 3517 1337, -1, -1, -1, -1, -1, -1, -1, -1, 379, 3518 -1, -1, -1, 1350, -1, 1352, -1, -1, 67, -1, 3519 69, -1, 71, -1, -1, 74, 75, -1, -1, 78, 3520 -1, -1, -1, 1370, -1, -1, -1, -1, 578, 579, 3521 -1, -1, -1, -1, -1, -1, -1, -1, -1, 1386, 3522 1387, -1, -1, -1, -1, -1, -1, 597, 598, -1, 3523 600, 1398, 111, -1, 1401, -1, -1, -1, -1, 609, 3524 119, 611, 612, -1, -1, -1, -1, -1, 618, -1, 3525 -1, -1, -1, -1, -1, -1, 1423, -1, 628, 629, 3526 -1, -1, -1, -1, 634, 1432, -1, -1, 1435, -1, 3527 1437, 1438, 1439, 643, 644, 645, -1, -1, -1, -1, 3528 -1, 481, -1, -1, -1, -1, -1, -1, -1, -1, 3529 -1, -1, 662, -1, -1, -1, -1, 667, 668, -1, 3530 -1, 671, 672, -1, -1, -1, -1, -1, 678, -1, 3531 -1, -1, 1479, -1, 1481, -1, -1, 1484, -1, -1, 3532 520, -1, -1, -1, -1, -1, 696, 697, 698, -1, 3533 700, -1, 1499, 533, 704, -1, -1, -1, -1, -1, 3534 540, -1, -1, 543, -1, -1, -1, -1, -1, -1, 3535 -1, -1, -1, -1, 554, 555, -1, -1, -1, -1, 3536 -1, -1, -1, -1, -1, -1, 736, 737, -1, -1, 3537 -1, -1, -1, -1, -1, -1, 576, -1, -1, -1, 3538 -1, -1, -1, -1, -1, -1, 586, -1, -1, -1, 3539 -1, -1, -1, 593, -1, -1, -1, -1, 598, -1, 3540 -1, -1, 772, 773, -1, -1, -1, 777, 778, -1, 3541 -1, -1, -1, -1, 3, 4, 5, 6, 7, 8, 3542 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3543 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, 3544 -1, 30, 31, 32, 33, -1, -1, 36, 648, 819, 3545 39, 40, -1, -1, -1, -1, -1, 657, 828, -1, 3546 -1, -1, -1, -1, 834, 835, -1, -1, -1, 839, 3547 -1, 841, -1, -1, -1, 64, -1, -1, 67, -1, 3548 69, 851, 71, 72, -1, 74, 75, 76, -1, -1, 3549 -1, -1, -1, -1, 83, 84, -1, 697, -1, -1, 3550 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3551 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3552 109, -1, 111, -1, -1, -1, -1, -1, -1, -1, 3553 119, -1, -1, -1, -1, 10, 11, 12, 13, 14, 3554 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3555 25, 26, 27, 28, 924, 30, 31, 32, -1, -1, 3556 -1, -1, 932, -1, 39, -1, -1, -1, 938, -1, 3557 -1, -1, -1, 773, -1, 775, 946, -1, -1, -1, 3558 -1, 781, -1, -1, -1, -1, -1, -1, 788, 959, 3559 960, -1, 67, -1, -1, -1, -1, 72, -1, 74, 3560 75, 76, -1, 78, -1, -1, -1, -1, 83, 84, 3561 -1, -1, -1, -1, -1, -1, 986, -1, -1, -1, 3562 -1, -1, 992, -1, -1, -1, -1, -1, -1, -1, 3563 -1, -1, 832, 833, 109, 835, 111, -1, -1, -1, 3564 -1, 1011, 1012, -1, 119, -1, -1, -1, -1, -1, 3565 850, 1021, -1, -1, -1, -1, -1, 1027, 1028, -1, 3566 1030, 1031, 1032, -1, -1, -1, -1, -1, -1, -1, 3567 -1, -1, 1042, 1043, -1, -1, -1, -1, -1, -1, 3568 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3569 890, -1, -1, -1, 894, 3, 4, 5, 6, 7, 3570 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3571 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3572 -1, -1, 30, 31, 32, 33, -1, -1, 36, -1, 3573 -1, 39, -1, 1103, 1104, 1105, -1, -1, -1, -1, 3574 -1, -1, -1, -1, -1, -1, -1, 1117, -1, -1, 3575 -1, -1, -1, -1, -1, -1, -1, -1, -1, 67, 3576 -1, 69, -1, 71, -1, -1, 74, 75, -1, -1, 3577 970, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3578 -1, -1, -1, -1, -1, -1, 986, 987, -1, -1, 3579 -1, -1, 1162, 993, -1, -1, -1, 37, 38, 999, 3580 40, -1, 1002, 111, 1004, -1, -1, -1, -1, -1, 3581 -1, 119, -1, -1, -1, -1, -1, -1, -1, -1, 3582 -1, -1, -1, -1, 1024, -1, 66, -1, -1, -1, 3583 -1, -1, 72, -1, -1, 1035, 76, -1, -1, 79, 3584 80, 81, 82, 83, 84, -1, 86, 87, -1, -1, 3585 -1, -1, 1222, -1, 94, 37, 38, 1057, 40, 1059, 3586 -1, -1, -1, -1, -1, -1, -1, -1, -1, 109, 3587 -1, 111, -1, 1243, 1074, 1075, -1, -1, 118, 119, 3588 120, 121, 122, 123, 66, -1, -1, -1, -1, -1, 3589 72, -1, -1, -1, 76, 1095, -1, 79, 80, 81, 3590 82, 83, 84, -1, 86, 87, -1, -1, -1, -1, 3591 -1, -1, 94, -1, -1, -1, -1, -1, -1, -1, 3592 -1, -1, 1292, 1293, -1, -1, -1, 109, -1, 111, 3593 -1, -1, -1, -1, -1, -1, 118, 119, 120, 121, 3594 122, 123, -1, 1143, -1, -1, -1, -1, -1, -1, 3595 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3596 -1, -1, 1162, -1, -1, -1, -1, -1, -1, -1, 3597 -1, -1, -1, -1, -1, -1, -1, 1177, 1178, -1, 3598 -1, -1, -1, -1, -1, 3, 4, 5, 6, 7, 3599 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3600 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3601 -1, -1, 30, 31, 32, 33, -1, -1, 36, 37, 3602 38, 39, 40, 41, -1, 43, -1, -1, 46, 47, 3603 48, 49, 50, 51, 52, 53, -1, -1, -1, 57, 3604 -1, -1, -1, 61, 62, -1, 64, 1417, 66, 67, 3605 -1, 69, -1, 71, 72, -1, 74, 75, 76, 1259, 3606 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3607 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, 3608 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3609 -1, 109, -1, 111, -1, -1, 114, -1, -1, -1, 3610 118, 119, 120, 121, 122, 123, -1, -1, -1, -1, 3611 128, -1, -1, -1, 132, -1, -1, -1, -1, -1, 3612 1320, -1, 1322, -1, -1, -1, -1, -1, -1, -1, 3613 -1, -1, -1, -1, -1, -1, -1, 1507, 10, 11, 3614 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3615 22, 23, 24, 25, 26, 27, -1, -1, 30, 31, 3616 32, -1, 1532, 1533, -1, -1, -1, 39, -1, -1, 3617 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3618 -1, -1, -1, -1, -1, -1, -1, 1557, -1, -1, 3619 -1, -1, -1, -1, -1, 67, -1, -1, -1, -1, 3620 -1, -1, 74, 75, -1, -1, -1, -1, 1408, -1, 3621 -1, -1, -1, -1, -1, 3, 4, 5, 6, 7, 3622 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3623 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3624 -1, -1, 30, 31, 32, 33, -1, 119, 36, 37, 3625 38, 39, 40, 10, 11, 12, 13, 14, 15, 16, 3626 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3627 27, -1, -1, 30, 31, 32, -1, -1, 66, 67, 3628 -1, 69, 39, 71, 72, -1, 74, 75, 76, -1, 3629 1490, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3630 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, 3631 67, -1, -1, -1, -1, 72, -1, 74, 75, -1, 3632 -1, 109, -1, 111, -1, -1, 83, 84, -1, -1, 3633 118, 119, 120, 121, 122, 123, -1, -1, -1, -1, 3634 -1, -1, 1542, -1, 132, 3, 4, 5, 6, 7, 3635 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3636 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3637 -1, -1, 30, 31, 32, 33, -1, -1, 36, 37, 3638 38, 39, 40, 10, 11, 12, 13, 14, 15, 16, 3639 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3640 27, -1, -1, 30, 31, 32, -1, -1, 66, 67, 3641 -1, 69, 39, 71, 72, -1, 74, 75, 76, -1, 3642 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3643 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, 3644 67, -1, -1, -1, -1, -1, -1, 74, 75, -1, 3645 -1, 109, -1, 111, -1, -1, -1, -1, -1, -1, 3646 118, 119, 120, 121, 122, 123, 4, 5, 6, 7, 3647 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3648 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3649 -1, -1, 30, 31, 32, -1, -1, -1, -1, 37, 3650 38, 39, 40, -1, -1, -1, -1, -1, -1, -1, 3651 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3652 -1, -1, -1, -1, -1, -1, -1, -1, 66, 67, 3653 -1, 69, -1, 71, 72, -1, 74, 75, 76, -1, 3654 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3655 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, 3656 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3657 -1, 109, -1, 111, -1, -1, -1, -1, 116, -1, 3658 118, 119, 120, 121, 122, 123, 4, 5, 6, 7, 3659 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3660 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3661 -1, -1, 30, 31, 32, -1, -1, -1, -1, 37, 3662 38, 39, 40, -1, -1, -1, -1, -1, -1, -1, 3663 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3664 -1, -1, -1, -1, -1, -1, -1, -1, 66, 67, 3665 -1, 69, -1, 71, 72, -1, 74, 75, 76, -1, 3666 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3667 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, 3668 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3669 -1, 109, -1, 111, -1, -1, -1, -1, 116, -1, 3670 118, 119, 120, 121, 122, 123, 4, 5, 6, 7, 3671 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3672 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3673 -1, -1, 30, 31, 32, -1, -1, -1, -1, 37, 3674 38, 39, 40, -1, -1, -1, -1, -1, -1, -1, 3675 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3676 -1, -1, -1, -1, -1, -1, -1, -1, 66, 67, 3677 -1, 69, -1, 71, 72, -1, 74, 75, 76, -1, 3678 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3679 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, 3680 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3681 -1, 109, -1, 111, -1, -1, -1, -1, 116, -1, 3682 118, 119, 120, 121, 122, 123, 4, 5, 6, 7, 3683 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3684 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3685 -1, -1, 30, 31, 32, -1, -1, -1, -1, 37, 3686 38, 39, 40, -1, -1, -1, -1, -1, -1, -1, 3687 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3688 -1, -1, -1, -1, -1, -1, -1, -1, 66, 67, 3689 -1, 69, -1, 71, 72, -1, 74, 75, 76, -1, 3690 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3691 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, 3692 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3693 -1, 109, -1, 111, -1, -1, -1, -1, -1, -1, 3694 118, 119, 120, 121, 122, 123, 4, 5, 6, 7, 3695 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3696 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3697 -1, -1, 30, 31, 32, -1, -1, -1, -1, 37, 3698 38, 39, 40, -1, -1, -1, -1, -1, -1, -1, 3699 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3700 -1, -1, -1, -1, -1, -1, -1, -1, 66, 67, 3701 -1, 69, -1, 71, 72, -1, 74, 75, 76, -1, 3702 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3703 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, 3704 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3705 -1, 109, -1, 111, -1, -1, -1, -1, -1, -1, 3706 118, 119, 120, 121, 122, 123, 4, 5, 6, 7, 3707 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3708 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3709 -1, -1, 30, 31, 32, -1, -1, -1, -1, 37, 3710 38, 39, 40, -1, -1, -1, -1, -1, -1, -1, 3711 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3712 -1, -1, -1, -1, -1, -1, -1, -1, 66, 67, 3713 -1, 69, -1, 71, 72, -1, 74, 75, 76, -1, 3714 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3715 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, 3716 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3717 -1, 109, -1, 111, -1, -1, -1, -1, -1, -1, 3718 118, 119, 120, 121, 122, 123, 4, 5, 6, 7, 3719 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3720 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3721 -1, -1, 30, 31, 32, -1, -1, -1, -1, 37, 3722 38, 39, 40, -1, -1, -1, -1, -1, -1, -1, 3723 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3724 -1, -1, -1, -1, -1, -1, -1, -1, 66, 67, 3725 -1, 69, -1, 71, 72, -1, 74, 75, 76, -1, 3726 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3727 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, 3728 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3729 -1, 109, -1, 111, -1, -1, -1, -1, -1, -1, 3730 118, 119, 120, 121, 122, 123, 3, 4, 5, 6, 3731 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 3732 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3733 27, -1, -1, 30, 31, 32, -1, -1, -1, -1, 3734 -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, 3735 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3736 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3737 67, -1, 69, -1, 71, -1, -1, 74, 75, -1, 3738 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 3739 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3740 24, 25, 26, 27, -1, -1, 30, 31, 32, -1, 3741 -1, -1, -1, -1, 111, 39, -1, -1, -1, -1, 3742 -1, -1, 119, -1, -1, -1, -1, -1, -1, -1, 3743 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3744 -1, -1, -1, 67, -1, 69, -1, 71, 72, -1, 3745 74, 75, 76, -1, -1, -1, -1, -1, -1, 83, 3746 84, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3747 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3748 -1, -1, -1, -1, -1, 109, -1, 111, -1, -1, 3749 -1, -1, -1, -1, -1, 119, 4, 5, 6, 7, 3750 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3751 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3752 -1, -1, 30, 31, 32, -1, -1, -1, -1, -1, 3753 -1, 39, -1, -1, -1, -1, 10, 11, 12, 13, 3754 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3755 24, 25, 26, 27, -1, -1, 30, 31, 32, 67, 3756 -1, 69, -1, 71, -1, 39, 74, 75, -1, 4, 3757 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3758 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3759 25, 26, 27, 67, -1, 30, 31, 32, 72, -1, 3760 74, 75, 110, 111, 39, -1, -1, -1, -1, 83, 3761 84, 119, -1, -1, -1, -1, -1, -1, -1, -1, 3762 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3763 -1, -1, 67, -1, 69, -1, 71, 111, -1, 74, 3764 75, -1, -1, -1, -1, 119, -1, -1, -1, -1, 3765 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3766 -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, 3767 -1, -1, -1, -1, -1, -1, 111, -1, -1, -1, 3768 -1, -1, -1, -1, 119, 4, 5, 6, 7, 8, 3769 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3770 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, 3771 -1, 30, 31, 32, -1, -1, -1, -1, -1, -1, 3772 39, -1, -1, -1, -1, 10, 11, 12, 13, 14, 3773 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3774 25, 26, 27, 28, -1, 30, 31, 32, 67, -1, 3775 69, -1, 71, -1, 39, 74, 75, -1, -1, -1, 3776 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3777 -1, -1, -1, -1, -1, -1, -1, 96, -1, -1, 3778 -1, -1, 67, -1, -1, -1, -1, 72, -1, 74, 3779 75, 76, 111, 78, -1, -1, -1, -1, 83, 84, 3780 119, 4, 5, 6, 7, 8, 9, 10, 11, 12, 3781 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3782 23, 24, 25, 26, 27, -1, 111, 30, 31, 32, 3783 -1, -1, -1, -1, 119, -1, 39, -1, -1, -1, 3784 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3785 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3786 -1, -1, -1, -1, 67, -1, 69, -1, 71, -1, 3787 -1, 74, 75, -1, 4, 5, 6, 7, 8, 9, 3788 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3789 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, 3790 30, 31, 32, -1, -1, -1, -1, -1, 111, 39, 3791 -1, -1, -1, -1, -1, -1, 119, -1, -1, -1, 3792 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3793 -1, -1, -1, -1, -1, -1, -1, 67, -1, 69, 3794 -1, 71, -1, -1, 74, 75, -1, 4, 5, 6, 3795 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 3796 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3797 27, -1, -1, 30, 31, 32, -1, -1, -1, -1, 3798 -1, 111, 39, -1, -1, -1, -1, -1, -1, 119, 3799 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3800 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3801 67, -1, 69, -1, 71, -1, -1, 74, 75, -1, 3802 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 3803 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3804 24, 25, 26, 27, -1, -1, 30, 31, 32, -1, 3805 -1, -1, -1, -1, 111, 39, -1, -1, -1, -1, 3806 -1, -1, 119, -1, -1, -1, -1, -1, -1, -1, 3807 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3808 -1, -1, -1, 67, -1, 69, -1, 71, -1, -1, 3809 74, 75, 10, 11, 12, 13, 14, 15, 16, 17, 3810 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3811 -1, -1, 30, 31, 32, -1, -1, -1, -1, 37, 3812 38, 39, 40, -1, -1, -1, -1, 111, -1, -1, 3813 -1, -1, -1, -1, -1, 119, -1, -1, -1, -1, 3814 -1, -1, -1, -1, -1, -1, -1, -1, 66, 67, 3815 -1, -1, -1, -1, 72, -1, 74, 75, 76, -1, 3816 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3817 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, 3818 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3819 -1, 109, -1, 111, -1, -1, 114, -1, -1, -1, 3820 118, 119, 120, 121, 122, 123, 10, 11, 12, 13, 3821 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3822 24, 25, 26, 27, -1, -1, 30, 31, 32, -1, 3823 -1, -1, -1, 37, 38, 39, 40, 10, 11, 12, 3824 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3825 23, 24, 25, 26, 27, -1, -1, 30, 31, 32, 3826 -1, -1, 66, 67, -1, -1, 39, -1, 72, -1, 3827 74, 75, 76, -1, -1, 79, 80, 81, 82, 83, 3828 84, -1, 86, 87, -1, -1, -1, -1, -1, -1, 3829 94, -1, -1, -1, 67, -1, -1, -1, -1, 72, 3830 -1, 74, 75, 76, -1, 109, -1, 111, 112, -1, 3831 83, 84, -1, -1, 118, 119, 120, 121, 122, 123, 3832 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3833 20, 21, 22, 23, 24, 25, 26, 27, 111, -1, 3834 30, 31, 32, -1, -1, -1, 119, 37, 38, 39, 3835 40, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3836 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, 3837 -1, 30, 31, 32, -1, -1, 66, 67, -1, -1, 3838 39, 40, 72, -1, 74, 75, 76, -1, -1, 79, 3839 80, 81, 82, 83, 84, -1, 86, 87, -1, -1, 3840 -1, -1, -1, -1, 94, -1, -1, -1, 67, -1, 3841 -1, -1, -1, -1, -1, 74, 75, -1, -1, 109, 3842 110, 111, -1, -1, -1, -1, -1, -1, 118, 119, 3843 120, 121, 122, 123, 10, 11, 12, 13, 14, 15, 3844 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3845 26, 27, 111, -1, 30, 31, 32, -1, -1, -1, 3846 119, 37, 38, 39, 40, -1, -1, -1, -1, -1, 3847 -1, -1, 10, 11, 12, 13, 14, 15, 16, 17, 3848 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3849 66, 67, 30, 31, 32, -1, 72, -1, 74, 75, 3850 76, 39, -1, 79, 80, 81, 82, 83, 84, -1, 3851 86, 87, -1, -1, -1, -1, -1, -1, 94, -1, 3852 -1, -1, -1, -1, -1, -1, -1, -1, -1, 67, 3853 -1, -1, -1, 109, -1, 111, 74, 75, -1, -1, 3854 -1, -1, 118, 119, 120, 121, 122, 123, 10, 11, 3855 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3856 22, 23, 24, 25, 26, 27, -1, -1, 30, 31, 3857 32, 109, -1, 111, -1, 37, 38, 39, 40, -1, 3858 -1, 119, -1, -1, -1, -1, 10, 11, 12, 13, 3859 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3860 24, 25, 26, 27, 66, 67, 30, 31, 32, -1, 3861 72, -1, 74, 75, 76, 39, -1, 79, 80, 81, 3862 82, 83, 84, -1, 86, 87, -1, -1, -1, -1, 3863 -1, -1, 94, -1, -1, -1, -1, -1, -1, -1, 3864 -1, -1, -1, 67, -1, -1, -1, 109, -1, 111, 3865 74, 75, -1, -1, -1, -1, 118, 119, 120, 121, 3866 122, 123, 10, 11, 12, 13, 14, 15, 16, 17, 3867 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3868 -1, -1, 30, 31, 32, 109, -1, 111, -1, 37, 3869 38, 39, 40, -1, -1, 119, -1, -1, -1, -1, 3870 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3871 20, 21, 22, 23, 24, 25, 26, 27, 66, 67, 3872 30, 31, 32, -1, 72, -1, 74, 75, 76, 39, 3873 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3874 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, 3875 -1, -1, -1, -1, -1, -1, -1, 67, -1, -1, 3876 -1, 109, -1, 111, 74, 75, -1, -1, -1, -1, 3877 118, 119, 120, 121, 122, 123, 10, 11, 12, 13, 3878 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3879 24, 25, 26, 27, -1, -1, 30, 31, 32, -1, 3880 -1, 111, -1, 37, 38, 39, 40, -1, -1, 119, 3881 -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, 3882 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3883 26, 27, 66, 67, 30, 31, 32, -1, 72, -1, 3884 74, 75, 76, 39, -1, 79, 80, 81, 82, 83, 3885 84, -1, 86, 87, -1, -1, -1, -1, -1, -1, 3886 94, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3887 -1, 67, -1, -1, -1, 109, -1, 111, 74, 75, 3888 -1, -1, -1, -1, 118, 119, 120, 121, 122, 123, 2155 3889 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2156 3890 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2157 23, 24, 0, 77, 25, 26, 27, 28, 0, 0, 2158 29, 0, 0, 30, 31, 0, 0, 0, 0, 8, 2159 9, 10, 11, 12, 0, 8, 9, 10, 11, 12, 2160 84, 0, 0, 0, 0, 0, 54, 0, 32, 0, 2161 0, 33, 163, 34, 0, 35, 36, 30, 37, 38, 2162 39, 0, 0, 30, 0, 0, 0, 40, 41, 0, 2163 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 2164 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 2165 36, 33, 0, 42, 39, 43, 36, 354, 0, 0, 2166 39, 40, 41, 44, 0, 0, 0, 40, 41, 0, 2167 0, 0, 0, 54, 0, 0, 0, 163, 0, 0, 2168 0, 0, 0, 270, 361, 0, 0, 42, 0, 0, 2169 346, 0, 0, 743, 0, 0, 0, 145, 0, 0, 2170 0, 0, 0, 744, 0, 0, 0, 0, 0, 0, 2171 354, 354, 163, 354, 354, 0, 0, 0, 0, 0, 2172 0, 0, 367, 0, 0, 0, 373, 0, 0, 0, 2173 0, 0, 0, 77, 0, 0, 0, 361, 361, 0, 2174 361, 361, 0, 0, 0, 0, 346, 346, 0, 0, 2175 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2176 84, 0, 0, 0, 0, 0, 54, 0, 354, 354, 2177 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 2178 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 2179 0, 0, 0, 0, 0, 361, 361, 0, 0, 0, 2180 0, 280, 281, 0, 282, 163, 460, 8, 9, 10, 2181 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2182 21, 22, 23, 24, 0, 0, 25, 26, 27, 373, 2183 283, 0, 354, 0, 0, 30, 284, 163, 0, 0, 2184 285, 0, 0, 286, 287, 288, 289, 40, 41, 0, 2185 290, 291, 0, 0, 0, 0, 0, 0, 292, 361, 2186 0, 460, 0, 33, 163, 0, 0, 0, 0, 0, 2187 205, 38, 0, 512, 0, 222, 0, 0, 0, 0, 2188 0, 0, 295, 379, 297, 298, 299, 300, 0, 0, 2189 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 2190 0, 0, 223, 0, 0, 0, 0, 54, 54, 0, 2191 354, 605, 354, 0, 0, 269, 629, 0, 0, 0, 2192 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 2193 54, 0, 0, 0, 0, 0, 0, 361, 0, 361, 2194 0, 0, 354, 0, 0, 0, 0, 0, 0, 54, 2195 354, 354, 354, 0, 0, 0, 0, 0, 0, 0, 2196 0, 354, 354, 0, 0, 0, 0, 0, 0, 361, 2197 0, 0, 0, 0, 0, 77, 0, 361, 361, 361, 2198 0, 0, 0, 0, 0, 0, 0, 0, 361, 361, 2199 0, 0, 163, 163, 346, 346, 0, 0, 354, 367, 2200 0, 0, 84, 54, 0, 0, 0, 0, 54, 0, 2201 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2202 460, 0, 0, 460, 0, 361, 0, 0, 0, 460, 2203 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2204 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 2205 0, 0, 0, 0, 0, 0, 740, 0, 0, 0, 2206 209, 0, 0, 0, 0, 0, 0, 0, 163, 0, 2207 229, 0, 233, 0, 235, 0, 0, 0, 0, 0, 2208 460, 244, 460, 0, 0, 460, 354, 163, 460, 0, 2209 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2210 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2211 0, 0, 209, 361, 233, 235, 244, 0, 0, 346, 2212 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2213 0, 0, 0, 0, 0, 77, 0, 154, 0, 0, 2214 0, 0, 77, 0, 0, 54, 0, 0, 0, 0, 2215 0, 0, 0, 163, 0, 209, 0, 0, 0, 0, 2216 0, 0, 84, 0, 0, 367, 0, 605, 54, 84, 2217 836, 0, 0, 0, 0, 54, 0, 0, 0, 0, 2218 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 2219 0, 0, 0, 254, 0, 77, 605, 0, 0, 0, 2220 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, 2221 367, 367, 367, 0, 0, 0, 209, 0, 233, 235, 2222 244, 0, 84, 0, 0, 0, 0, 0, 54, 367, 2223 0, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2224 17, 18, 19, 20, 21, 22, 23, 24, -294, 154, 2225 25, 26, 27, 0, 209, 0, 0, 0, 209, 30, 2226 0, 0, 0, 384, 740, 0, 0, 0, 0, 0, 2227 0, 0, 0, 0, 503, 0, 0, 0, 0, 0, 2228 0, 0, 0, 0, 0, 460, 416, 33, 0, 0, 2229 0, 0, 0, 0, 37, 38, 0, 0, -294, 0, 2230 431, 0, 0, 367, 0, 960, 0, 0, 0, 436, 2231 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 2232 0, 0, 0, 0, 209, 0, 0, 0, 0, 642, 2233 0, 337, 280, 281, 0, 282, 0, 0, 0, 109, 2234 740, 0, 0, 0, 470, 209, 0, 0, 0, 480, 2235 233, 235, 0, 0, 0, 0, 0, 0, 244, 0, 2236 0, 283, 488, 0, 0, 0, 0, 284, 498, 0, 2237 502, 285, 0, 0, 286, 287, 288, 289, 40, 41, 2238 0, 290, 291, 0, 0, 0, 0, 0, 532, 292, 2239 0, 0, 0, 0, 0, 367, 0, 0, 0, 629, 2240 0, 209, 367, 0, 293, 0, 377, 0, 0, 378, 2241 0, 0, 0, 295, 379, 297, 298, 299, 300, 209, 2242 0, 0, 0, 0, 209, 0, 209, 0, 0, 0, 2243 0, 592, 0, 0, 0, 0, 597, 0, 0, 0, 2244 0, 0, 0, 209, 0, 0, 209, 209, 0, 0, 2245 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2246 0, 0, 209, 0, 643, 0, 0, 0, 644, 645, 2247 0, 647, 0, 0, 0, 0, 209, 0, 659, 660, 2248 0, 661, 662, 209, 663, 0, 664, 0, 0, 0, 2249 0, 0, 0, 1176, 0, 460, 8, 9, 10, 11, 2250 12, 0, 0, 592, 0, 0, 0, 0, 0, 0, 2251 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 2252 0, 0, 280, 281, 30, 282, 0, 0, 0, 0, 2253 0, 0, 0, 0, 0, 0, 690, 163, 0, 0, 2254 0, 0, 0, 0, 0, 0, 0, 696, 0, 0, 2255 0, 283, 33, 367, 0, 0, 0, 284, 0, 0, 2256 0, 285, 0, 0, 286, 287, 288, 289, 40, 41, 2257 732, 290, 291, 0, 0, 0, 735, 0, 0, 292, 2258 0, 470, 0, 0, 0, 0, 0, 0, 605, 0, 2259 0, 0, 0, 0, 293, 0, 377, 0, 0, 209, 2260 0, 0, 0, 295, 1177, 297, 298, 299, 300, 367, 2261 367, 0, 0, 0, 0, 0, 0, 0, 772, 0, 2262 0, 0, 0, 0, 0, 0, 0, 209, 513, 0, 2263 515, 518, 209, 0, 787, 0, 0, 0, 521, 522, 2264 0, 0, 0, 515, 515, 0, 0, 0, 0, 0, 2265 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 2266 0, 0, 0, 0, 0, 280, 281, 0, 282, 460, 2267 0, 814, 0, 0, 0, 0, 0, 0, 0, 0, 2268 824, 0, 0, 0, 0, 0, 0, 827, 0, 0, 2269 0, 515, 834, 0, 283, 0, 0, 0, 0, 0, 2270 284, 0, 0, 849, 285, 0, 0, 286, 287, 288, 2271 289, 40, 41, 0, 290, 291, 0, 0, 0, 0, 2272 209, 0, 292, 0, 0, 0, 0, 515, 740, 0, 2273 0, 0, 0, 0, 209, 0, 0, 293, 0, 377, 2274 0, 0, 0, 0, 889, 811, 295, 379, 297, 298, 2275 299, 300, 0, 0, 503, 0, 0, 0, 0, 0, 2276 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2277 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2278 834, 0, 0, 0, 0, 8, 9, 10, 11, 12, 3891 23, 24, 25, 26, 27, 111, -1, 30, 31, 32, 3892 -1, -1, -1, 119, -1, -1, 39, -1, -1, -1, 3893 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3894 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, 3895 30, 31, 32, -1, 67, -1, 69, -1, 71, 39, 3896 -1, 74, 75, -1, -1, -1, -1, -1, 10, 11, 3897 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3898 22, 23, 24, 25, 26, 27, -1, 67, 30, 31, 3899 32, -1, 72, -1, 74, 75, 76, 39, -1, -1, 3900 -1, 114, -1, 83, 84, -1, 10, 11, 12, 13, 3901 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3902 24, 25, 26, 27, -1, 67, 30, 31, 32, 109, 3903 72, 111, 74, 75, 76, 39, -1, -1, -1, 119, 3904 -1, 83, 84, -1, 10, 11, 12, 13, 14, 15, 3905 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3906 26, 27, -1, 67, 30, 31, 32, 109, 72, 111, 3907 74, 75, 76, 39, -1, -1, -1, 119, -1, 83, 3908 84, -1, 10, 11, 12, 13, 14, 15, 16, 17, 3909 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3910 28, 67, 30, 31, 32, 109, 72, 111, 74, 75, 3911 76, 39, -1, -1, -1, 119, -1, 83, 84, -1, 3912 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3913 -1, -1, -1, -1, -1, -1, -1, -1, -1, 67, 3914 -1, -1, -1, 109, -1, 111, 74, 75, -1, -1, 3915 78, -1, -1, 119, -1, 10, 11, 12, 13, 14, 3916 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3917 25, 26, 27, -1, -1, 30, 31, 32, -1, -1, 3918 -1, 109, -1, 111, 39, 40, -1, -1, -1, -1, 3919 -1, 119, -1, 10, 11, 12, 13, 14, 15, 16, 3920 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3921 27, 28, 67, 30, 31, 32, -1, -1, -1, 74, 3922 75, -1, 39, 10, 11, 12, 13, 14, 15, 16, 3923 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3924 27, -1, -1, 30, 31, 32, -1, -1, -1, -1, 3925 67, -1, 39, 40, -1, -1, 111, 74, 75, -1, 3926 115, 78, -1, -1, 119, -1, -1, -1, -1, -1, 3927 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3928 67, -1, -1, -1, -1, -1, -1, 74, 75, -1, 3929 -1, -1, -1, -1, 111, -1, -1, -1, -1, -1, 3930 -1, -1, 119, -1, -1, 10, 11, 12, 13, 14, 3931 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3932 25, 26, 27, -1, 111, 30, 31, 32, 115, -1, 3933 -1, -1, 119, -1, 39, 40, 10, 11, 12, 13, 3934 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3935 24, 25, 26, 27, -1, -1, 30, 31, 32, -1, 3936 -1, -1, 67, -1, -1, 39, -1, -1, -1, 74, 3937 75, -1, -1, -1, 10, 11, 12, 13, 14, 15, 3938 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3939 26, 27, -1, 67, 30, 31, 32, -1, -1, -1, 3940 74, 75, -1, 39, -1, -1, 111, -1, -1, -1, 3941 115, -1, -1, -1, 119, -1, -1, -1, -1, -1, 3942 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3943 -1, 67, -1, -1, -1, -1, -1, 111, 74, 75, 3944 -1, -1, -1, -1, -1, 119, -1, 10, 11, 12, 2279 3945 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, 3946 23, 24, 25, 26, 27, -1, -1, 30, 31, 32, 3947 -1, -1, -1, -1, -1, 111, 39, -1, -1, -1, 3948 -1, -1, -1, 119, -1, 10, 11, 12, 13, 14, 3949 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3950 25, 26, 27, -1, 67, 30, 31, 32, -1, -1, 3951 -1, 74, 75, -1, 39, 10, 11, 12, 13, 14, 3952 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3953 25, 26, 27, -1, -1, 30, 31, 32, -1, -1, 3954 -1, -1, 67, -1, 39, -1, -1, -1, 111, 74, 3955 75, -1, -1, -1, -1, -1, 119, -1, -1, -1, 3956 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3957 -1, -1, 67, -1, -1, -1, -1, -1, -1, 74, 3958 75, -1, -1, -1, -1, -1, 111, -1, -1, -1, 3959 -1, -1, -1, -1, 119, -1, -1, 10, 11, 12, 2338 3960 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, 2409 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3961 23, 24, 25, 26, 27, -1, 111, 30, 31, 32, 3962 -1, -1, -1, -1, 119, -1, 39, 10, 11, 12, 3963 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3964 23, 24, 25, 26, 27, -1, -1, 30, 31, 32, 3965 -1, -1, -1, -1, 67, -1, 39, -1, -1, -1, 3966 -1, 74, 75, -1, -1, 10, 11, 12, 13, 14, 2410 3967 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2411 0, 0, 25, 26, 27, 28, 0, 0, 29, 280, 2412 281, 30, 1061, 1062, 0, 1063, 362, 0, 1064, 1065, 2413 1066, 1067, 1068, 1069, 1070, 1071, 0, 0, 0, 1072, 2414 0, 0, 0, 1073, 1074, 0, 32, 0, 283, 33, 2415 0, 34, 0, 35, 648, 320, 37, 38, 285, 0, 2416 0, 286, 287, 288, 289, 40, 41, 0, 290, 291, 2417 0, 1138, 1139, 0, 0, 0, 292, 0, 380, 0, 2418 0, 0, 280, 281, 995, 282, 340, 1148, 0, 768, 2419 0, 293, 0, 1075, 0, 0, 169, 0, 0, 0, 2420 295, 296, 297, 298, 299, 300, 362, 0, 0, 1164, 2421 1076, 283, 0, 0, -129, 0, 0, 284, 0, 0, 2422 1179, 285, 0, 0, 286, 287, 288, 289, 40, 41, 2423 0, 290, 291, 0, 0, 0, 0, 0, 0, 292, 2424 0, 0, 380, 0, 1197, 0, 0, 0, 0, 0, 2425 0, 0, 0, 0, 293, 362, 362, 0, 0, 995, 2426 995, 0, 0, 295, 379, 297, 298, 299, 300, 0, 2427 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2428 1229, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2429 204, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2430 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2431 23, 24, 0, 0, 25, 26, 27, 28, 0, 0, 2432 29, 280, 281, 30, 282, 0, 0, 995, 0, 0, 2433 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2434 280, 281, 0, 282, 0, 0, 888, 0, 0, 0, 2435 283, 33, 0, 34, 0, 35, 284, 0, 37, 38, 2436 285, 1281, 1282, 286, 287, 288, 289, 40, 41, 283, 2437 290, 291, 0, 0, 0, 284, 0, 0, 292, 285, 2438 362, 0, 286, 287, 288, 289, 40, 41, 0, 290, 2439 291, 0, 0, 293, 0, 1075, 0, 292, 0, 0, 2440 0, 0, 295, 296, 297, 298, 299, 300, 0, 0, 2441 0, 0, 293, 0, 377, 0, -129, 0, 0, 0, 2442 0, 295, 379, 297, 298, 299, 300, 0, 0, 0, 2443 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2444 0, 0, 995, 0, 0, 0, 1, 2, 204, 4, 2445 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2446 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2447 412, 0, 25, 26, 27, 28, 0, 0, 29, 280, 2448 281, 30, 282, 0, 0, 0, 0, 0, 0, 0, 2449 0, 0, 0, 0, 0, 412, 412, 0, 0, 0, 2450 0, 0, 0, 1389, 0, 768, 0, 0, 283, 33, 2451 0, 34, 0, 35, 284, 0, 37, 38, 285, 0, 2452 412, 286, 287, 288, 289, 40, 41, 0, 290, 291, 2453 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 2454 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2455 0, 293, 0, 43, 0, 0, 0, 0, 0, 0, 2456 295, 296, 297, 298, 299, 300, 0, 0, 2, 204, 3968 25, 26, 27, -1, 67, 30, 31, 32, -1, -1, 3969 -1, 74, 75, -1, 39, -1, -1, -1, 111, -1, 3970 -1, -1, -1, -1, -1, -1, 119, -1, -1, -1, 3971 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3972 -1, -1, 67, -1, -1, -1, -1, -1, 111, 74, 3973 75, -1, -1, -1, -1, -1, 119, 4, 5, 6, 3974 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 3975 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3976 27, -1, -1, 30, 31, 32, 111, -1, -1, -1, 3977 -1, -1, 39, -1, 119, -1, -1, -1, -1, -1, 3978 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3979 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3980 67, -1, 69, -1, 71, -1, -1, 74, 75, 37, 3981 38, -1, 40, 41, -1, 43, -1, -1, 46, 47, 3982 48, 49, 50, 51, 52, 53, -1, -1, 56, 57, 3983 -1, -1, -1, 61, 62, -1, 64, -1, 66, -1, 3984 -1, -1, -1, 110, 72, -1, -1, -1, 76, -1, 3985 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3986 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, 3987 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3988 -1, 109, -1, 111, -1, -1, 114, -1, -1, -1, 3989 118, 119, 120, 121, 122, 123, -1, -1, -1, -1, 3990 128, -1, 37, 38, 132, 40, 41, -1, 43, -1, 3991 -1, 46, 47, 48, 49, 50, 51, 52, 53, -1, 3992 -1, -1, 57, -1, -1, -1, 61, 62, -1, 64, 3993 -1, 66, -1, -1, -1, -1, -1, 72, -1, -1, 3994 -1, 76, -1, -1, 79, 80, 81, 82, 83, 84, 3995 -1, 86, 87, -1, -1, -1, -1, -1, -1, 94, 3996 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3997 -1, -1, -1, -1, 109, -1, 111, -1, -1, 114, 3998 -1, -1, -1, 118, 119, 120, 121, 122, 123, -1, 3999 -1, -1, -1, 128, -1, -1, -1, 132, 4, 5, 4000 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 4001 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 4002 26, 27, -1, -1, 30, 31, 32, -1, -1, -1, 4003 -1, -1, -1, 39, -1, 37, 38, -1, 40, 41, 4004 -1, 43, 44, 45, 46, 47, 48, 49, 50, 51, 4005 52, 53, -1, -1, 56, 57, -1, -1, -1, 61, 4006 62, 67, 64, 69, 66, 71, -1, -1, 74, 75, 4007 72, -1, -1, -1, 76, -1, -1, 79, 80, 81, 4008 82, 83, 84, -1, 86, 87, -1, -1, -1, -1, 4009 96, -1, 94, -1, -1, -1, -1, -1, -1, -1, 4010 -1, -1, -1, -1, -1, -1, -1, 109, -1, 111, 4011 -1, -1, 114, -1, -1, -1, 118, 119, 120, 121, 4012 122, 123, -1, -1, 37, 38, 128, 40, 41, -1, 4013 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 4014 53, -1, -1, -1, 57, -1, -1, -1, 61, 62, 4015 -1, 64, -1, 66, -1, -1, -1, -1, -1, 72, 4016 -1, -1, -1, 76, -1, -1, 79, 80, 81, 82, 4017 83, 84, -1, 86, 87, -1, -1, -1, -1, -1, 4018 -1, 94, -1, -1, -1, -1, -1, -1, -1, -1, 4019 -1, -1, -1, -1, -1, -1, 109, -1, 111, -1, 4020 -1, 114, -1, -1, -1, 118, 119, 120, 121, 122, 4021 123, -1, -1, 37, 38, 128, 40, 41, -1, 43, 4022 -1, -1, 46, 47, 48, 49, 50, 51, 52, 53, 4023 -1, -1, -1, 57, -1, -1, -1, 61, 62, -1, 4024 64, -1, 66, -1, -1, -1, -1, -1, 72, -1, 4025 -1, -1, 76, -1, -1, 79, 80, 81, 82, 83, 4026 84, -1, 86, 87, -1, -1, -1, -1, -1, -1, 4027 94, 37, 38, -1, 40, -1, -1, -1, -1, -1, 4028 -1, -1, -1, -1, -1, 109, -1, 111, -1, -1, 4029 114, -1, -1, -1, 118, 119, 120, 121, 122, 123, 4030 66, -1, -1, -1, 128, -1, 72, -1, -1, -1, 4031 76, -1, -1, 79, 80, 81, 82, 83, 84, -1, 4032 86, 87, -1, -1, -1, -1, -1, -1, 94, 37, 4033 38, -1, 40, -1, -1, -1, -1, -1, -1, -1, 4034 -1, -1, -1, 109, -1, 111, -1, -1, 37, 38, 4035 -1, 40, 118, 119, 120, 121, 122, 123, 66, -1, 4036 -1, -1, -1, -1, 72, -1, -1, -1, 76, -1, 4037 -1, 79, 80, 81, 82, 83, 84, 66, 86, 87, 4038 -1, -1, -1, 72, -1, -1, 94, 76, -1, -1, 4039 79, 80, 81, 82, 83, 84, -1, 86, 87, -1, 4040 -1, 109, -1, 111, -1, 94, 37, 38, -1, 40, 4041 118, 119, 120, 121, 122, 123, -1, -1, -1, -1, 4042 109, -1, -1, -1, -1, 37, 38, -1, 40, 118, 4043 119, 120, 121, 122, 123, 66, -1, -1, -1, -1, 4044 -1, 72, -1, -1, -1, 76, -1, -1, 79, 80, 4045 81, 82, 83, 84, 66, 86, 87, -1, -1, -1, 4046 72, -1, -1, 94, 76, -1, -1, 79, 80, 81, 4047 82, 83, 84, -1, 86, 87, -1, -1, 109, -1, 4048 -1, -1, 94, 37, 38, -1, 40, 118, 119, 120, 4049 121, 122, 123, -1, -1, -1, -1, 109, -1, -1, 4050 -1, -1, -1, -1, -1, -1, 118, 119, 120, 121, 4051 122, 123, 66, -1, -1, -1, -1, -1, 72, -1, 4052 -1, -1, 76, -1, -1, 79, 80, 81, 82, 83, 4053 84, -1, 86, 87, -1, -1, -1, -1, -1, -1, 4054 94, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4055 -1, -1, -1, -1, -1, 109, -1, -1, -1, -1, 4056 -1, -1, -1, -1, 118, 119, 120, 121, 122, 123, 2457 4057 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 2458 4058 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, 4059 24, 25, 26, 27, -1, -1, -1, -1, -1, -1, 4060 -1, -1, -1, -1, -1, 39, -1, -1, -1, -1, 3519 4061 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3520 4062 -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, 4063 -1, -1, -1, 67, -1, 69, -1, 71, 72, -1, 4064 74, 75, 76, -1, -1, -1, -1, -1, -1, 83, 4065 84, 3, 4, 5, 6, 7, 8, 9, 10, 11, 4066 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 4067 22, 23, 24, 25, 26, 27, -1, -1, 30, 31, 4068 32, -1, -1, -1, -1, -1, -1, 39, -1, -1, 4069 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4070 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4071 -1, -1, -1, -1, -1, 67, -1, 69, -1, 71, 4072 -1, -1, 74, 75, 3, 4, 5, 6, 7, 8, 4073 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 4074 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, 4075 -1, 30, 31, 32, -1, -1, -1, -1, -1, -1, 4076 39, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4077 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4078 -1, -1, -1, -1, -1, -1, -1, -1, 67, -1, 4079 69, -1, 71, -1, -1, 74, 75, 4, 5, 6, 3524 4080 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 3525 4081 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, 4082 27, -1, -1, 30, 31, 32, -1, -1, -1, -1, 4083 -1, -1, 39, -1, 10, 11, 12, 13, 14, 15, 3573 4084 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, 4085 26, 27, -1, -1, 30, 31, 32, 33, 34, 35, 4086 67, -1, 69, 39, 71, -1, -1, 74, 75, -1, 3635 4087 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3636 4088 -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 4089 -1, 67, -1, -1, -1, -1, -1, -1, 74, 75 4004 4090 }; 4005 4091 … … 4010 4096 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 4011 4097 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,4098 22, 23, 24, 25, 26, 27, 30, 31, 32, 33, 4099 36, 39, 40, 64, 67, 69, 71, 72, 74, 75, 4100 76, 83, 84, 109, 111, 119, 137, 140, 197, 211, 4015 4101 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 32 4, 325, 326, 346, 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 3 18, 319, 323, 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 2 68, 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,4102 222, 223, 224, 225, 226, 227, 228, 230, 231, 232, 4103 233, 234, 235, 236, 237, 239, 240, 241, 242, 243, 4104 244, 246, 254, 255, 282, 283, 284, 292, 295, 301, 4105 302, 304, 306, 307, 313, 318, 322, 323, 324, 325, 4106 326, 327, 328, 329, 349, 366, 367, 368, 369, 72, 4107 119, 139, 140, 214, 216, 224, 226, 236, 240, 242, 4108 283, 82, 109, 311, 312, 313, 311, 311, 72, 74, 4109 75, 76, 138, 139, 272, 273, 293, 294, 74, 75, 4110 273, 109, 304, 11, 198, 109, 119, 318, 323, 324, 4111 325, 327, 328, 329, 112, 134, 111, 217, 224, 226, 4112 322, 326, 365, 366, 369, 370, 135, 107, 131, 276, 4113 114, 135, 172, 74, 75, 137, 271, 135, 135, 135, 4114 116, 135, 74, 75, 109, 119, 308, 317, 318, 319, 4115 320, 321, 322, 326, 330, 331, 332, 333, 334, 340, 4116 3, 28, 78, 238, 3, 5, 74, 111, 119, 216, 4117 227, 231, 234, 243, 284, 322, 326, 369, 214, 216, 4118 226, 236, 240, 242, 283, 322, 326, 33, 232, 232, 4119 227, 234, 135, 232, 227, 232, 227, 75, 109, 114, 4120 273, 284, 114, 273, 232, 227, 116, 135, 135, 0, 4121 134, 109, 172, 311, 311, 134, 111, 224, 226, 367, 4122 271, 271, 226, 131, 109, 119, 308, 318, 322, 111, 4123 119, 369, 305, 229, 313, 109, 289, 109, 109, 51, 4124 109, 37, 38, 40, 66, 72, 76, 79, 80, 81, 4125 82, 86, 87, 94, 109, 111, 118, 119, 120, 121, 4126 122, 123, 136, 140, 141, 142, 143, 148, 149, 150, 4041 4127 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 4042 162, 164, 223, 272, 288, 362, 367, 225, 109, 109, 4043 109, 109, 109, 109, 109, 73, 74, 110, 223, 268, 4044 346, 364, 110, 118, 162, 215, 216, 222, 225, 229, 4045 230, 235, 238, 239, 241, 258, 259, 263, 264, 265, 4046 266, 280, 346, 358, 359, 360, 361, 366, 367, 111, 4047 108, 319, 323, 366, 108, 115, 131, 110, 113, 118, 4048 162, 274, 274, 114, 133, 115, 131, 108, 115, 131, 4049 115, 131, 115, 131, 308, 131, 315, 316, 317, 318, 4050 328, 329, 330, 331, 225, 314, 327, 63, 307, 110, 4051 308, 345, 346, 308, 308, 171, 133, 108, 308, 345, 4052 308, 308, 225, 305, 108, 108, 224, 225, 223, 225, 4053 111, 133, 223, 362, 367, 171, 133, 268, 273, 215, 4054 230, 319, 323, 171, 133, 290, 225, 235, 131, 225, 4055 225, 288, 39, 110, 223, 245, 246, 247, 248, 362, 4056 366, 113, 254, 270, 113, 225, 290, 131, 131, 301, 4057 133, 138, 267, 3, 134, 205, 206, 220, 222, 225, 4058 133, 307, 108, 307, 162, 315, 225, 108, 133, 268, 4059 113, 32, 33, 34, 223, 282, 283, 285, 133, 128, 4060 130, 287, 133, 226, 232, 233, 268, 311, 312, 313, 4061 108, 140, 108, 147, 108, 147, 149, 108, 147, 108, 4062 108, 147, 147, 138, 110, 162, 167, 171, 223, 271, 4063 362, 111, 133, 149, 149, 81, 84, 85, 86, 108, 4064 110, 112, 113, 96, 97, 98, 99, 100, 101, 102, 4065 103, 104, 105, 130, 166, 149, 118, 123, 124, 120, 4066 121, 87, 88, 89, 90, 125, 126, 91, 92, 119, 4067 127, 128, 93, 94, 129, 130, 369, 108, 118, 341, 4068 342, 343, 344, 345, 109, 115, 108, 345, 346, 108, 4069 345, 346, 133, 108, 223, 364, 111, 133, 110, 118, 4070 134, 223, 225, 357, 358, 366, 367, 134, 108, 110, 4071 118, 315, 332, 333, 334, 335, 336, 337, 338, 339, 4072 340, 346, 347, 348, 349, 350, 351, 352, 118, 366, 4073 225, 134, 134, 118, 223, 225, 359, 268, 223, 346, 4074 359, 268, 108, 133, 133, 133, 111, 133, 71, 79, 4075 110, 112, 139, 270, 274, 275, 276, 277, 278, 133, 4076 133, 133, 133, 133, 133, 305, 109, 109, 109, 109, 4077 109, 109, 109, 314, 327, 108, 273, 111, 205, 133, 4078 305, 167, 272, 167, 272, 305, 110, 205, 307, 171, 4079 133, 205, 109, 247, 248, 111, 133, 108, 116, 118, 4080 249, 251, 314, 315, 327, 345, 353, 354, 355, 356, 4081 114, 246, 115, 131, 115, 131, 270, 245, 115, 368, 4082 130, 255, 254, 225, 260, 261, 262, 265, 266, 109, 4083 115, 171, 133, 118, 162, 133, 222, 225, 259, 358, 4084 366, 299, 300, 108, 118, 332, 109, 115, 369, 270, 4085 282, 108, 113, 270, 272, 282, 109, 115, 108, 140, 4086 109, 116, 271, 271, 271, 110, 138, 144, 162, 272, 4087 271, 111, 133, 109, 115, 109, 108, 118, 353, 109, 4088 115, 162, 110, 138, 110, 143, 144, 133, 110, 138, 4089 143, 162, 162, 149, 149, 149, 150, 150, 151, 151, 4090 152, 152, 152, 152, 153, 153, 154, 155, 156, 157, 4091 158, 116, 167, 162, 133, 342, 343, 344, 225, 341, 4092 308, 308, 162, 272, 133, 267, 118, 133, 223, 346, 4093 359, 225, 229, 111, 133, 111, 366, 111, 108, 133, 4094 315, 333, 334, 335, 338, 348, 349, 350, 111, 133, 4095 225, 332, 336, 347, 108, 308, 351, 369, 308, 308, 4096 369, 108, 308, 351, 308, 308, 308, 308, 346, 223, 4097 357, 367, 268, 111, 115, 111, 115, 369, 223, 359, 4098 369, 256, 257, 258, 259, 256, 256, 268, 162, 133, 4099 110, 270, 116, 115, 368, 274, 79, 110, 116, 278, 4100 28, 207, 208, 268, 256, 138, 305, 138, 307, 108, 4101 345, 346, 108, 345, 346, 140, 346, 171, 260, 109, 4102 109, 109, 109, 111, 171, 205, 171, 113, 131, 131, 4103 110, 315, 354, 355, 356, 160, 161, 225, 353, 250, 4104 251, 250, 308, 308, 270, 308, 114, 270, 114, 161, 4105 368, 134, 134, 138, 220, 134, 134, 256, 108, 118, 4106 366, 134, 114, 225, 283, 284, 134, 133, 133, 108, 4107 134, 109, 312, 167, 168, 116, 131, 110, 140, 198, 4108 199, 200, 109, 115, 109, 133, 116, 109, 109, 109, 4109 162, 225, 113, 149, 164, 162, 163, 165, 115, 134, 4110 133, 133, 109, 115, 162, 133, 114, 160, 116, 260, 4111 109, 109, 109, 341, 260, 109, 256, 223, 359, 110, 4112 118, 162, 162, 225, 338, 260, 109, 109, 109, 109, 4113 109, 109, 109, 7, 225, 332, 336, 347, 133, 133, 4114 369, 133, 133, 109, 134, 134, 134, 134, 273, 134, 4115 160, 161, 162, 306, 133, 274, 276, 114, 133, 209, 4116 270, 39, 40, 42, 45, 46, 47, 48, 49, 50, 4117 51, 52, 56, 60, 61, 110, 127, 138, 168, 169, 4118 170, 171, 172, 173, 175, 176, 188, 190, 191, 196, 4119 210, 304, 28, 134, 130, 273, 133, 133, 109, 134, 4120 171, 245, 111, 109, 109, 109, 353, 249, 255, 114, 4121 109, 115, 111, 111, 134, 225, 115, 369, 286, 109, 4122 282, 213, 215, 223, 294, 295, 296, 297, 288, 109, 4123 109, 116, 161, 108, 109, 116, 115, 138, 162, 162, 4124 275, 115, 134, 165, 111, 138, 145, 146, 162, 144, 4125 134, 145, 160, 164, 134, 108, 345, 346, 134, 134, 4126 133, 134, 134, 134, 162, 109, 134, 108, 345, 346, 4127 108, 351, 108, 351, 346, 224, 7, 118, 134, 162, 4128 260, 260, 259, 263, 263, 264, 115, 115, 109, 109, 4129 111, 95, 122, 134, 134, 145, 274, 162, 115, 131, 4130 210, 214, 225, 229, 108, 108, 169, 108, 108, 131, 4131 138, 131, 138, 118, 138, 168, 108, 171, 163, 163, 4132 111, 142, 116, 131, 134, 133, 134, 209, 109, 162, 4133 260, 260, 308, 109, 114, 108, 345, 346, 133, 109, 4134 133, 134, 305, 114, 133, 134, 134, 109, 113, 198, 4135 111, 161, 131, 198, 200, 109, 115, 134, 368, 163, 4136 111, 134, 84, 112, 115, 134, 134, 111, 134, 109, 4137 133, 109, 109, 111, 111, 111, 134, 109, 133, 133, 4138 133, 162, 162, 134, 111, 134, 134, 134, 134, 133, 4139 133, 161, 161, 111, 111, 134, 134, 270, 225, 167, 4140 167, 46, 167, 133, 131, 131, 167, 131, 131, 167, 4141 57, 58, 59, 192, 193, 194, 131, 62, 131, 113, 4142 308, 173, 114, 131, 134, 134, 133, 95, 265, 266, 4143 109, 295, 115, 131, 115, 131, 114, 293, 116, 140, 4144 109, 109, 116, 165, 111, 114, 111, 110, 146, 110, 4145 146, 146, 111, 111, 111, 260, 111, 260, 260, 260, 4146 134, 134, 111, 111, 109, 109, 111, 115, 95, 259, 4147 95, 134, 111, 111, 109, 109, 108, 109, 168, 189, 4148 210, 131, 109, 108, 108, 171, 194, 57, 58, 162, 4149 143, 169, 109, 109, 260, 113, 133, 133, 294, 140, 4150 201, 108, 131, 201, 134, 116, 133, 133, 134, 134, 4151 134, 134, 111, 111, 133, 134, 111, 169, 43, 44, 4152 113, 179, 180, 181, 167, 169, 134, 109, 168, 113, 4153 181, 95, 133, 95, 133, 108, 108, 131, 114, 134, 4154 133, 268, 305, 114, 115, 116, 161, 109, 111, 162, 4155 145, 145, 109, 109, 109, 109, 263, 41, 161, 177, 4156 178, 306, 116, 133, 169, 179, 109, 131, 169, 131, 4157 133, 109, 133, 109, 133, 95, 133, 95, 133, 131, 4158 109, 294, 140, 138, 202, 109, 131, 116, 134, 134, 4159 169, 95, 115, 116, 134, 203, 204, 210, 131, 168, 4160 168, 203, 171, 195, 223, 362, 171, 195, 109, 133, 4161 109, 133, 114, 109, 115, 162, 111, 111, 161, 177, 4162 180, 182, 183, 133, 131, 180, 184, 185, 134, 108, 4163 118, 305, 353, 138, 134, 171, 195, 171, 195, 108, 4164 131, 138, 169, 174, 114, 180, 210, 168, 55, 174, 4165 187, 114, 180, 109, 225, 109, 134, 134, 288, 169, 4166 174, 131, 186, 187, 174, 187, 171, 171, 109, 109, 4167 109, 186, 134, 134, 171, 171, 134, 134 4128 161, 163, 165, 224, 275, 291, 365, 370, 226, 110, 4129 110, 110, 110, 110, 110, 110, 74, 75, 111, 224, 4130 271, 349, 367, 111, 119, 163, 216, 217, 223, 226, 4131 230, 231, 236, 239, 240, 242, 261, 262, 266, 267, 4132 268, 269, 283, 349, 361, 362, 363, 364, 369, 370, 4133 112, 109, 322, 326, 369, 109, 116, 132, 111, 114, 4134 119, 163, 277, 277, 115, 134, 116, 132, 109, 116, 4135 132, 116, 132, 116, 132, 311, 132, 318, 319, 320, 4136 321, 331, 332, 333, 334, 226, 317, 330, 64, 310, 4137 111, 311, 348, 349, 311, 311, 172, 134, 109, 311, 4138 348, 311, 311, 226, 308, 109, 109, 225, 226, 224, 4139 226, 112, 134, 224, 365, 370, 172, 134, 271, 276, 4140 216, 231, 322, 326, 172, 134, 293, 226, 236, 132, 4141 226, 226, 291, 40, 111, 224, 247, 248, 249, 250, 4142 365, 369, 245, 257, 273, 256, 226, 293, 132, 132, 4143 304, 134, 139, 270, 3, 135, 206, 207, 221, 223, 4144 226, 134, 310, 109, 310, 163, 318, 226, 109, 134, 4145 271, 114, 33, 34, 35, 224, 285, 286, 288, 134, 4146 129, 131, 290, 134, 227, 233, 234, 271, 314, 315, 4147 316, 109, 141, 109, 148, 109, 148, 150, 109, 148, 4148 109, 109, 148, 148, 139, 111, 163, 168, 172, 224, 4149 274, 365, 112, 134, 150, 150, 82, 85, 86, 87, 4150 109, 111, 113, 114, 97, 98, 99, 100, 101, 102, 4151 103, 104, 105, 106, 131, 167, 150, 119, 124, 125, 4152 121, 122, 88, 89, 90, 91, 126, 127, 92, 93, 4153 120, 128, 129, 94, 95, 130, 131, 372, 109, 119, 4154 344, 345, 346, 347, 348, 110, 116, 109, 348, 349, 4155 109, 348, 349, 134, 109, 224, 367, 112, 134, 111, 4156 119, 135, 224, 226, 360, 361, 369, 370, 135, 109, 4157 111, 119, 318, 335, 336, 337, 338, 339, 340, 341, 4158 342, 343, 349, 350, 351, 352, 353, 354, 355, 119, 4159 369, 226, 135, 135, 119, 224, 226, 362, 271, 224, 4160 349, 362, 271, 109, 134, 134, 134, 112, 134, 72, 4161 80, 111, 113, 140, 273, 277, 278, 279, 280, 281, 4162 134, 134, 134, 134, 134, 134, 308, 110, 110, 110, 4163 110, 110, 110, 110, 317, 330, 109, 276, 112, 206, 4164 134, 308, 168, 275, 168, 275, 308, 111, 206, 310, 4165 172, 134, 206, 110, 249, 250, 112, 134, 109, 117, 4166 119, 251, 253, 317, 318, 330, 348, 356, 357, 358, 4167 359, 115, 248, 116, 132, 116, 132, 273, 114, 116, 4168 371, 131, 258, 114, 226, 263, 264, 265, 268, 269, 4169 110, 116, 172, 134, 119, 163, 134, 223, 226, 262, 4170 361, 369, 302, 303, 109, 119, 335, 110, 116, 372, 4171 273, 285, 109, 114, 273, 275, 285, 110, 116, 109, 4172 141, 110, 117, 274, 274, 274, 111, 139, 145, 163, 4173 275, 274, 112, 134, 110, 116, 110, 109, 119, 356, 4174 110, 116, 163, 111, 139, 111, 144, 145, 134, 111, 4175 139, 144, 163, 163, 150, 150, 150, 151, 151, 152, 4176 152, 153, 153, 153, 153, 154, 154, 155, 156, 157, 4177 158, 159, 117, 168, 163, 134, 345, 346, 347, 226, 4178 344, 311, 311, 163, 275, 134, 270, 119, 134, 224, 4179 349, 362, 226, 230, 112, 134, 112, 369, 112, 109, 4180 134, 318, 336, 337, 338, 341, 351, 352, 353, 112, 4181 134, 226, 335, 339, 350, 109, 311, 354, 372, 311, 4182 311, 372, 109, 311, 354, 311, 311, 311, 311, 349, 4183 224, 360, 370, 271, 112, 116, 112, 116, 372, 224, 4184 362, 372, 259, 260, 261, 262, 259, 259, 271, 163, 4185 134, 111, 273, 117, 116, 371, 277, 80, 111, 117, 4186 281, 29, 208, 209, 271, 259, 139, 308, 139, 310, 4187 109, 348, 349, 109, 348, 349, 141, 349, 172, 263, 4188 110, 110, 110, 110, 112, 172, 206, 172, 114, 132, 4189 132, 111, 318, 357, 358, 359, 161, 162, 226, 356, 4190 252, 253, 252, 311, 311, 273, 311, 247, 273, 115, 4191 162, 257, 135, 135, 139, 221, 135, 135, 259, 109, 4192 119, 369, 135, 115, 226, 286, 287, 135, 134, 134, 4193 109, 135, 110, 315, 168, 169, 117, 132, 111, 141, 4194 199, 200, 201, 110, 116, 110, 134, 117, 110, 110, 4195 110, 163, 226, 114, 150, 165, 163, 164, 166, 116, 4196 135, 134, 134, 110, 116, 163, 134, 115, 161, 117, 4197 263, 110, 110, 110, 344, 263, 110, 259, 224, 362, 4198 111, 119, 163, 163, 226, 341, 263, 110, 110, 110, 4199 110, 110, 110, 110, 7, 226, 335, 339, 350, 134, 4200 134, 372, 134, 134, 110, 135, 135, 135, 135, 276, 4201 135, 161, 162, 163, 309, 134, 277, 279, 115, 134, 4202 210, 273, 40, 41, 43, 46, 47, 48, 49, 50, 4203 51, 52, 53, 57, 61, 62, 111, 128, 139, 169, 4204 170, 171, 172, 173, 174, 176, 177, 189, 191, 192, 4205 197, 211, 307, 29, 135, 131, 276, 134, 134, 110, 4206 135, 172, 247, 112, 110, 110, 110, 356, 251, 115, 4207 258, 371, 110, 116, 112, 112, 135, 226, 116, 372, 4208 289, 110, 285, 214, 216, 224, 297, 298, 299, 300, 4209 291, 110, 110, 117, 162, 109, 110, 117, 116, 139, 4210 163, 163, 278, 116, 135, 166, 112, 139, 146, 147, 4211 163, 145, 135, 146, 161, 165, 135, 109, 348, 349, 4212 135, 135, 134, 135, 135, 135, 163, 110, 135, 109, 4213 348, 349, 109, 354, 109, 354, 349, 225, 7, 119, 4214 135, 163, 263, 263, 262, 266, 266, 267, 116, 116, 4215 110, 110, 112, 96, 123, 135, 135, 146, 277, 163, 4216 116, 132, 211, 215, 226, 230, 109, 109, 170, 109, 4217 109, 132, 139, 132, 139, 119, 139, 169, 109, 172, 4218 164, 164, 112, 143, 117, 132, 135, 134, 135, 210, 4219 110, 163, 263, 263, 311, 110, 115, 109, 348, 349, 4220 115, 134, 110, 134, 135, 308, 115, 134, 135, 135, 4221 110, 114, 199, 112, 162, 132, 199, 201, 110, 116, 4222 135, 371, 164, 112, 135, 85, 113, 116, 135, 135, 4223 112, 135, 110, 134, 110, 110, 112, 112, 112, 135, 4224 110, 134, 134, 134, 163, 163, 135, 112, 135, 135, 4225 135, 135, 134, 134, 162, 162, 112, 112, 135, 135, 4226 273, 226, 168, 168, 47, 168, 134, 132, 132, 168, 4227 132, 132, 168, 58, 59, 60, 193, 194, 195, 132, 4228 63, 132, 114, 311, 174, 115, 132, 135, 135, 134, 4229 96, 268, 269, 110, 298, 116, 132, 116, 132, 115, 4230 296, 117, 141, 110, 110, 117, 166, 112, 115, 112, 4231 111, 147, 111, 147, 147, 112, 112, 112, 263, 112, 4232 263, 263, 263, 135, 135, 112, 112, 110, 110, 112, 4233 116, 96, 262, 96, 135, 112, 112, 110, 110, 109, 4234 110, 169, 190, 211, 132, 110, 109, 109, 172, 195, 4235 58, 59, 163, 144, 170, 110, 110, 263, 114, 134, 4236 134, 297, 141, 202, 109, 132, 202, 135, 117, 134, 4237 134, 135, 135, 135, 135, 112, 112, 134, 135, 112, 4238 170, 44, 45, 114, 180, 181, 182, 168, 170, 135, 4239 110, 169, 114, 182, 96, 134, 96, 134, 109, 109, 4240 132, 115, 135, 134, 271, 308, 115, 116, 117, 162, 4241 110, 112, 163, 146, 146, 110, 110, 110, 110, 266, 4242 42, 162, 178, 179, 309, 117, 134, 170, 180, 110, 4243 132, 170, 132, 134, 110, 134, 110, 134, 96, 134, 4244 96, 134, 132, 110, 297, 141, 139, 203, 110, 132, 4245 117, 135, 135, 170, 96, 116, 117, 135, 204, 205, 4246 211, 132, 169, 169, 204, 172, 196, 224, 365, 172, 4247 196, 110, 134, 110, 134, 115, 110, 116, 163, 112, 4248 112, 162, 178, 181, 183, 184, 134, 132, 181, 185, 4249 186, 135, 109, 119, 308, 356, 139, 135, 172, 196, 4250 172, 196, 109, 132, 139, 170, 175, 115, 181, 211, 4251 169, 56, 175, 188, 115, 181, 110, 226, 110, 135, 4252 135, 291, 170, 175, 132, 187, 188, 175, 188, 172, 4253 172, 110, 110, 110, 187, 135, 135, 172, 172, 135, 4254 135 4168 4255 }; 4169 4256 … … 5002 5089 5003 5090 /* Line 1806 of yacc.c */ 5004 #line 29 0"parser.yy"5091 #line 292 "parser.yy" 5005 5092 { 5006 5093 typedefTable.enterScope(); … … 5011 5098 5012 5099 /* Line 1806 of yacc.c */ 5013 #line 29 6"parser.yy"5100 #line 298 "parser.yy" 5014 5101 { 5015 5102 typedefTable.leaveScope(); … … 5020 5107 5021 5108 /* Line 1806 of yacc.c */ 5022 #line 30 5"parser.yy"5109 #line 307 "parser.yy" 5023 5110 { (yyval.constant) = new ConstantNode( ConstantNode::Integer, (yyvsp[(1) - (1)].tok) ); } 5024 5111 break; … … 5027 5114 5028 5115 /* Line 1806 of yacc.c */ 5029 #line 30 6"parser.yy"5116 #line 308 "parser.yy" 5030 5117 { (yyval.constant) = new ConstantNode( ConstantNode::Float, (yyvsp[(1) - (1)].tok) ); } 5031 5118 break; … … 5034 5121 5035 5122 /* Line 1806 of yacc.c */ 5036 #line 30 7"parser.yy"5123 #line 309 "parser.yy" 5037 5124 { (yyval.constant) = new ConstantNode( ConstantNode::Character, (yyvsp[(1) - (1)].tok) ); } 5038 5125 break; … … 5041 5128 5042 5129 /* Line 1806 of yacc.c */ 5043 #line 33 2"parser.yy"5130 #line 334 "parser.yy" 5044 5131 { (yyval.constant) = new ConstantNode( ConstantNode::String, (yyvsp[(1) - (1)].tok) ); } 5045 5132 break; … … 5048 5135 5049 5136 /* Line 1806 of yacc.c */ 5050 #line 33 3"parser.yy"5137 #line 335 "parser.yy" 5051 5138 { (yyval.constant) = (yyvsp[(1) - (2)].constant)->appendstr( (yyvsp[(2) - (2)].tok) ); } 5052 5139 break; 5053 5140 5054 5141 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 5142 5063 5143 /* Line 1806 of yacc.c */ … … 5066 5146 break; 5067 5147 5148 case 19: 5149 5150 /* Line 1806 of yacc.c */ 5151 #line 344 "parser.yy" 5152 { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); } 5153 break; 5154 5068 5155 case 20: 5069 5156 5070 5157 /* Line 1806 of yacc.c */ 5071 #line 34 4"parser.yy"5158 #line 346 "parser.yy" 5072 5159 { (yyval.en) = (yyvsp[(2) - (3)].en); } 5073 5160 break; … … 5076 5163 5077 5164 /* Line 1806 of yacc.c */ 5078 #line 34 6"parser.yy"5165 #line 348 "parser.yy" 5079 5166 { (yyval.en) = new ValofExprNode( (yyvsp[(2) - (3)].sn) ); } 5080 5167 break; … … 5083 5170 5084 5171 /* Line 1806 of yacc.c */ 5085 #line 35 6"parser.yy"5172 #line 358 "parser.yy" 5086 5173 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Index ), (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ); } 5087 5174 break; … … 5090 5177 5091 5178 /* Line 1806 of yacc.c */ 5092 #line 3 58"parser.yy"5179 #line 360 "parser.yy" 5093 5180 { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ); } 5094 5181 break; … … 5097 5184 5098 5185 /* Line 1806 of yacc.c */ 5099 #line 36 2"parser.yy"5186 #line 364 "parser.yy" 5100 5187 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); } 5101 5188 break; … … 5104 5191 5105 5192 /* Line 1806 of yacc.c */ 5106 #line 36 5"parser.yy"5193 #line 367 "parser.yy" 5107 5194 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); } 5108 5195 break; … … 5111 5198 5112 5199 /* Line 1806 of yacc.c */ 5113 #line 3 68"parser.yy"5200 #line 370 "parser.yy" 5114 5201 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::IncrPost ), (yyvsp[(1) - (2)].en) ); } 5115 5202 break; … … 5118 5205 5119 5206 /* Line 1806 of yacc.c */ 5120 #line 37 0"parser.yy"5207 #line 372 "parser.yy" 5121 5208 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), (yyvsp[(1) - (2)].en) ); } 5122 5209 break; … … 5125 5212 5126 5213 /* Line 1806 of yacc.c */ 5127 #line 37 2"parser.yy"5128 { (yyval.en) = 0; }5214 #line 374 "parser.yy" 5215 { (yyval.en) = new CompoundLiteralNode( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ); } 5129 5216 break; 5130 5217 … … 5132 5219 5133 5220 /* Line 1806 of yacc.c */ 5134 #line 37 4"parser.yy"5221 #line 376 "parser.yy" 5135 5222 { 5136 5223 Token fn; fn.str = new std::string( "?{}" ); // location undefined … … 5142 5229 5143 5230 /* Line 1806 of yacc.c */ 5144 #line 38 3"parser.yy"5231 #line 385 "parser.yy" 5145 5232 { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); } 5146 5233 break; … … 5149 5236 5150 5237 /* Line 1806 of yacc.c */ 5151 #line 3 88"parser.yy"5238 #line 390 "parser.yy" 5152 5239 { (yyval.en) = 0; } 5153 5240 break; … … 5156 5243 5157 5244 /* Line 1806 of yacc.c */ 5158 #line 39 1"parser.yy"5245 #line 393 "parser.yy" 5159 5246 { (yyval.en) = (yyvsp[(3) - (3)].en)->set_argName( (yyvsp[(1) - (3)].tok) ); } 5160 5247 break; … … 5163 5250 5164 5251 /* Line 1806 of yacc.c */ 5165 #line 39 6"parser.yy"5252 #line 398 "parser.yy" 5166 5253 { (yyval.en) = (yyvsp[(7) - (7)].en)->set_argName( (yyvsp[(3) - (7)].en) ); } 5167 5254 break; … … 5170 5257 5171 5258 /* Line 1806 of yacc.c */ 5172 #line 398"parser.yy"5259 #line 400 "parser.yy" 5173 5260 { (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 5261 break; … … 5177 5264 5178 5265 /* Line 1806 of yacc.c */ 5179 #line 40 3"parser.yy"5266 #line 405 "parser.yy" 5180 5267 { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); } 5181 5268 break; … … 5184 5271 5185 5272 /* Line 1806 of yacc.c */ 5186 #line 4 08"parser.yy"5273 #line 410 "parser.yy" 5187 5274 { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); } 5188 5275 break; … … 5191 5278 5192 5279 /* Line 1806 of yacc.c */ 5193 #line 41 2"parser.yy"5280 #line 414 "parser.yy" 5194 5281 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); } 5195 5282 break; … … 5198 5285 5199 5286 /* Line 1806 of yacc.c */ 5200 #line 41 4"parser.yy"5287 #line 416 "parser.yy" 5201 5288 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); } 5202 5289 break; … … 5205 5292 5206 5293 /* Line 1806 of yacc.c */ 5207 #line 41 6"parser.yy"5294 #line 418 "parser.yy" 5208 5295 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); } 5209 5296 break; … … 5212 5299 5213 5300 /* Line 1806 of yacc.c */ 5214 #line 4 18"parser.yy"5301 #line 420 "parser.yy" 5215 5302 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); } 5216 5303 break; 5217 5304 5218 5305 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 5306 5227 5307 /* Line 1806 of yacc.c */ … … 5230 5310 break; 5231 5311 5312 case 49: 5313 5314 /* Line 1806 of yacc.c */ 5315 #line 430 "parser.yy" 5316 { (yyval.en) = (yyvsp[(1) - (1)].constant); } 5317 break; 5318 5232 5319 case 50: 5233 5320 5234 5321 /* Line 1806 of yacc.c */ 5235 #line 43 0"parser.yy"5322 #line 432 "parser.yy" 5236 5323 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Incr ), (yyvsp[(2) - (2)].en) ); } 5237 5324 break; … … 5240 5327 5241 5328 /* Line 1806 of yacc.c */ 5242 #line 43 2"parser.yy"5329 #line 434 "parser.yy" 5243 5330 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), (yyvsp[(2) - (2)].en) ); } 5244 5331 break; … … 5247 5334 5248 5335 /* Line 1806 of yacc.c */ 5249 #line 43 4"parser.yy"5336 #line 436 "parser.yy" 5250 5337 { (yyval.en) = (yyvsp[(2) - (2)].en); } 5251 5338 break; … … 5254 5341 5255 5342 /* Line 1806 of yacc.c */ 5256 #line 43 6"parser.yy"5343 #line 438 "parser.yy" 5257 5344 { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); } 5258 5345 break; … … 5261 5348 5262 5349 /* Line 1806 of yacc.c */ 5263 #line 4 38"parser.yy"5350 #line 440 "parser.yy" 5264 5351 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neg ), (yyvsp[(2) - (2)].en) ); } 5265 5352 break; … … 5268 5355 5269 5356 /* Line 1806 of yacc.c */ 5270 #line 44 0"parser.yy"5357 #line 442 "parser.yy" 5271 5358 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PointTo ), (yyvsp[(2) - (2)].en) ); } 5272 5359 break; … … 5275 5362 5276 5363 /* Line 1806 of yacc.c */ 5277 #line 44 6"parser.yy"5364 #line 448 "parser.yy" 5278 5365 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), (yyvsp[(2) - (2)].en) ); } 5279 5366 break; … … 5282 5369 5283 5370 /* Line 1806 of yacc.c */ 5284 #line 4 48"parser.yy"5371 #line 450 "parser.yy" 5285 5372 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); } 5286 5373 break; … … 5289 5376 5290 5377 /* Line 1806 of yacc.c */ 5291 #line 45 0"parser.yy"5378 #line 452 "parser.yy" 5292 5379 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( (yyvsp[(3) - (6)].decl) ), new VarRefNode( (yyvsp[(5) - (6)].tok) )); } 5293 5380 break; … … 5296 5383 5297 5384 /* Line 1806 of yacc.c */ 5298 #line 45 2"parser.yy"5385 #line 454 "parser.yy" 5299 5386 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (1)].tok) )); } 5300 5387 break; … … 5303 5390 5304 5391 /* Line 1806 of yacc.c */ 5305 #line 45 4"parser.yy"5392 #line 456 "parser.yy" 5306 5393 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); } 5307 5394 break; … … 5310 5397 5311 5398 /* Line 1806 of yacc.c */ 5312 #line 45 6"parser.yy"5399 #line 458 "parser.yy" 5313 5400 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ); } 5314 5401 break; … … 5317 5404 5318 5405 /* Line 1806 of yacc.c */ 5319 #line 4 58"parser.yy"5406 #line 460 "parser.yy" 5320 5407 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), (yyvsp[(2) - (2)].en) ); } 5321 5408 break; … … 5324 5411 5325 5412 /* Line 1806 of yacc.c */ 5326 #line 46 0"parser.yy"5413 #line 462 "parser.yy" 5327 5414 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ); } 5328 5415 break; … … 5331 5418 5332 5419 /* Line 1806 of yacc.c */ 5333 #line 46 2"parser.yy"5420 #line 464 "parser.yy" 5334 5421 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LabelAddress ), new VarRefNode( (yyvsp[(2) - (2)].tok), true ) ); } 5335 5422 break; … … 5338 5425 5339 5426 /* Line 1806 of yacc.c */ 5340 #line 46 6"parser.yy"5427 #line 468 "parser.yy" 5341 5428 { (yyval.en) = new OperatorNode( OperatorNode::AddressOf ); } 5342 5429 break; … … 5345 5432 5346 5433 /* Line 1806 of yacc.c */ 5347 #line 46 7"parser.yy"5434 #line 469 "parser.yy" 5348 5435 { (yyval.en) = new OperatorNode( OperatorNode::UnPlus ); } 5349 5436 break; … … 5352 5439 5353 5440 /* Line 1806 of yacc.c */ 5354 #line 4 68"parser.yy"5441 #line 470 "parser.yy" 5355 5442 { (yyval.en) = new OperatorNode( OperatorNode::UnMinus ); } 5356 5443 break; … … 5359 5446 5360 5447 /* Line 1806 of yacc.c */ 5361 #line 4 69"parser.yy"5448 #line 471 "parser.yy" 5362 5449 { (yyval.en) = new OperatorNode( OperatorNode::BitNeg ); } 5363 5450 break; 5364 5451 5365 5452 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 5453 5374 5454 /* Line 1806 of yacc.c */ … … 5377 5457 break; 5378 5458 5459 case 71: 5460 5461 /* Line 1806 of yacc.c */ 5462 #line 479 "parser.yy" 5463 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); } 5464 break; 5465 5379 5466 case 73: 5380 5467 5381 5468 /* Line 1806 of yacc.c */ 5382 #line 48 3"parser.yy"5469 #line 485 "parser.yy" 5383 5470 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mul ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5384 5471 break; … … 5387 5474 5388 5475 /* Line 1806 of yacc.c */ 5389 #line 48 5"parser.yy"5476 #line 487 "parser.yy" 5390 5477 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Div ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5391 5478 break; … … 5394 5481 5395 5482 /* Line 1806 of yacc.c */ 5396 #line 48 7"parser.yy"5483 #line 489 "parser.yy" 5397 5484 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mod ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5398 5485 break; … … 5401 5488 5402 5489 /* Line 1806 of yacc.c */ 5403 #line 49 3"parser.yy"5490 #line 495 "parser.yy" 5404 5491 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Plus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5405 5492 break; … … 5408 5495 5409 5496 /* Line 1806 of yacc.c */ 5410 #line 49 5"parser.yy"5497 #line 497 "parser.yy" 5411 5498 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Minus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5412 5499 break; … … 5415 5502 5416 5503 /* Line 1806 of yacc.c */ 5417 #line 50 1"parser.yy"5504 #line 503 "parser.yy" 5418 5505 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5419 5506 break; … … 5422 5509 5423 5510 /* Line 1806 of yacc.c */ 5424 #line 50 3"parser.yy"5511 #line 505 "parser.yy" 5425 5512 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::RShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5426 5513 break; … … 5429 5516 5430 5517 /* Line 1806 of yacc.c */ 5431 #line 5 09"parser.yy"5518 #line 511 "parser.yy" 5432 5519 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5433 5520 break; … … 5436 5523 5437 5524 /* Line 1806 of yacc.c */ 5438 #line 51 1"parser.yy"5525 #line 513 "parser.yy" 5439 5526 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5440 5527 break; … … 5443 5530 5444 5531 /* Line 1806 of yacc.c */ 5445 #line 51 3"parser.yy"5532 #line 515 "parser.yy" 5446 5533 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5447 5534 break; … … 5450 5537 5451 5538 /* Line 1806 of yacc.c */ 5452 #line 51 5"parser.yy"5539 #line 517 "parser.yy" 5453 5540 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5454 5541 break; … … 5457 5544 5458 5545 /* Line 1806 of yacc.c */ 5459 #line 52 1"parser.yy"5546 #line 523 "parser.yy" 5460 5547 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Eq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5461 5548 break; … … 5464 5551 5465 5552 /* Line 1806 of yacc.c */ 5466 #line 52 3"parser.yy"5553 #line 525 "parser.yy" 5467 5554 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5468 5555 break; … … 5471 5558 5472 5559 /* Line 1806 of yacc.c */ 5473 #line 5 29"parser.yy"5560 #line 531 "parser.yy" 5474 5561 { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::BitAnd ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5475 5562 break; … … 5478 5565 5479 5566 /* Line 1806 of yacc.c */ 5480 #line 53 5"parser.yy"5567 #line 537 "parser.yy" 5481 5568 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Xor ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5482 5569 break; … … 5485 5572 5486 5573 /* Line 1806 of yacc.c */ 5487 #line 54 1"parser.yy"5574 #line 543 "parser.yy" 5488 5575 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::BitOr ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5489 5576 break; … … 5492 5579 5493 5580 /* Line 1806 of yacc.c */ 5494 #line 54 7"parser.yy"5581 #line 549 "parser.yy" 5495 5582 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::And ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5496 5583 break; … … 5499 5586 5500 5587 /* Line 1806 of yacc.c */ 5501 #line 55 3"parser.yy"5588 #line 555 "parser.yy" 5502 5589 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Or ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5503 5590 break; … … 5506 5593 5507 5594 /* Line 1806 of yacc.c */ 5508 #line 5 59"parser.yy"5595 #line 561 "parser.yy" 5509 5596 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); } 5510 5597 break; … … 5513 5600 5514 5601 /* Line 1806 of yacc.c */ 5515 #line 56 1"parser.yy"5602 #line 563 "parser.yy" 5516 5603 { (yyval.en)=new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ); } 5517 5604 break; … … 5520 5607 5521 5608 /* Line 1806 of yacc.c */ 5522 #line 56 3"parser.yy"5609 #line 565 "parser.yy" 5523 5610 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); } 5524 5611 break; … … 5527 5614 5528 5615 /* Line 1806 of yacc.c */ 5529 #line 57 4"parser.yy"5616 #line 576 "parser.yy" 5530 5617 { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5531 5618 break; … … 5534 5621 5535 5622 /* Line 1806 of yacc.c */ 5536 #line 57 6"parser.yy"5623 #line 578 "parser.yy" 5537 5624 { (yyval.en) =new CompositeExprNode( (yyvsp[(2) - (3)].en), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5538 5625 break; … … 5541 5628 5542 5629 /* Line 1806 of yacc.c */ 5543 #line 5 78"parser.yy"5630 #line 580 "parser.yy" 5544 5631 { (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 5632 break; … … 5548 5635 5549 5636 /* Line 1806 of yacc.c */ 5550 #line 58 3"parser.yy"5637 #line 585 "parser.yy" 5551 5638 { (yyval.en) = new NullExprNode; } 5552 5639 break; … … 5555 5642 5556 5643 /* Line 1806 of yacc.c */ 5557 #line 59 1"parser.yy"5644 #line 593 "parser.yy" 5558 5645 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ) ); } 5559 5646 break; … … 5562 5649 5563 5650 /* Line 1806 of yacc.c */ 5564 #line 59 3"parser.yy"5651 #line 595 "parser.yy" 5565 5652 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (yyvsp[(3) - (5)].en) ); } 5566 5653 break; … … 5569 5656 5570 5657 /* Line 1806 of yacc.c */ 5571 #line 59 5"parser.yy"5658 #line 597 "parser.yy" 5572 5659 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(new NullExprNode)->set_link( (yyvsp[(4) - (6)].en) ) ); } 5573 5660 break; … … 5576 5663 5577 5664 /* Line 1806 of yacc.c */ 5578 #line 59 7"parser.yy"5665 #line 599 "parser.yy" 5579 5666 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( flattenCommas( (yyvsp[(5) - (7)].en) ) ) ); } 5580 5667 break; … … 5583 5670 5584 5671 /* Line 1806 of yacc.c */ 5585 #line 60 3"parser.yy"5672 #line 605 "parser.yy" 5586 5673 { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); } 5587 5674 break; … … 5590 5677 5591 5678 /* Line 1806 of yacc.c */ 5592 #line 60 7"parser.yy"5679 #line 609 "parser.yy" 5593 5680 { (yyval.en) = new OperatorNode( OperatorNode::MulAssn ); } 5594 5681 break; … … 5597 5684 5598 5685 /* Line 1806 of yacc.c */ 5599 #line 6 08"parser.yy"5686 #line 610 "parser.yy" 5600 5687 { (yyval.en) = new OperatorNode( OperatorNode::DivAssn ); } 5601 5688 break; … … 5604 5691 5605 5692 /* Line 1806 of yacc.c */ 5606 #line 6 09"parser.yy"5693 #line 611 "parser.yy" 5607 5694 { (yyval.en) = new OperatorNode( OperatorNode::ModAssn ); } 5608 5695 break; … … 5611 5698 5612 5699 /* Line 1806 of yacc.c */ 5613 #line 61 0"parser.yy"5700 #line 612 "parser.yy" 5614 5701 { (yyval.en) = new OperatorNode( OperatorNode::PlusAssn ); } 5615 5702 break; … … 5618 5705 5619 5706 /* Line 1806 of yacc.c */ 5620 #line 61 1"parser.yy"5707 #line 613 "parser.yy" 5621 5708 { (yyval.en) = new OperatorNode( OperatorNode::MinusAssn ); } 5622 5709 break; … … 5625 5712 5626 5713 /* Line 1806 of yacc.c */ 5627 #line 61 2"parser.yy"5714 #line 614 "parser.yy" 5628 5715 { (yyval.en) = new OperatorNode( OperatorNode::LSAssn ); } 5629 5716 break; … … 5632 5719 5633 5720 /* Line 1806 of yacc.c */ 5634 #line 61 3"parser.yy"5721 #line 615 "parser.yy" 5635 5722 { (yyval.en) = new OperatorNode( OperatorNode::RSAssn ); } 5636 5723 break; … … 5639 5726 5640 5727 /* Line 1806 of yacc.c */ 5641 #line 61 4"parser.yy"5728 #line 616 "parser.yy" 5642 5729 { (yyval.en) = new OperatorNode( OperatorNode::AndAssn ); } 5643 5730 break; … … 5646 5733 5647 5734 /* Line 1806 of yacc.c */ 5648 #line 61 5"parser.yy"5735 #line 617 "parser.yy" 5649 5736 { (yyval.en) = new OperatorNode( OperatorNode::ERAssn ); } 5650 5737 break; … … 5653 5740 5654 5741 /* Line 1806 of yacc.c */ 5655 #line 61 6"parser.yy"5742 #line 618 "parser.yy" 5656 5743 { (yyval.en) = new OperatorNode( OperatorNode::OrAssn ); } 5657 5744 break; … … 5660 5747 5661 5748 /* Line 1806 of yacc.c */ 5662 #line 62 2"parser.yy"5749 #line 624 "parser.yy" 5663 5750 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Comma ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5664 5751 break; … … 5667 5754 5668 5755 /* Line 1806 of yacc.c */ 5669 #line 62 7"parser.yy"5756 #line 629 "parser.yy" 5670 5757 { (yyval.en) = 0; } 5671 5758 break; … … 5674 5761 5675 5762 /* Line 1806 of yacc.c */ 5676 #line 63 6"parser.yy"5763 #line 638 "parser.yy" 5677 5764 { (yyval.sn) = (yyvsp[(1) - (1)].sn); } 5678 5765 break; … … 5681 5768 5682 5769 /* Line 1806 of yacc.c */ 5683 #line 64 3"parser.yy"5770 #line 645 "parser.yy" 5684 5771 { 5685 5772 Token fn; fn.str = new std::string( "^?{}" ); // location undefined … … 5692 5779 5693 5780 /* Line 1806 of yacc.c */ 5694 #line 65 2"parser.yy"5781 #line 654 "parser.yy" 5695 5782 { 5696 5783 (yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) ); … … 5701 5788 5702 5789 /* Line 1806 of yacc.c */ 5703 #line 6 59"parser.yy"5790 #line 661 "parser.yy" 5704 5791 { (yyval.sn) = new CompoundStmtNode( (StatementNode *)0 ); } 5705 5792 break; … … 5708 5795 5709 5796 /* Line 1806 of yacc.c */ 5710 #line 66 6"parser.yy"5797 #line 668 "parser.yy" 5711 5798 { (yyval.sn) = new CompoundStmtNode( (yyvsp[(5) - (7)].sn) ); } 5712 5799 break; … … 5715 5802 5716 5803 /* Line 1806 of yacc.c */ 5717 #line 67 2"parser.yy"5804 #line 674 "parser.yy" 5718 5805 { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } } 5719 5806 break; … … 5722 5809 5723 5810 /* Line 1806 of yacc.c */ 5724 #line 67 7"parser.yy"5811 #line 679 "parser.yy" 5725 5812 { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); } 5726 5813 break; … … 5729 5816 5730 5817 /* Line 1806 of yacc.c */ 5731 #line 6 79"parser.yy"5818 #line 681 "parser.yy" 5732 5819 { (yyval.sn) = new StatementNode( (yyvsp[(2) - (2)].decl) ); } 5733 5820 break; … … 5736 5823 5737 5824 /* Line 1806 of yacc.c */ 5738 #line 68 1"parser.yy"5825 #line 683 "parser.yy" 5739 5826 { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); } 5740 5827 break; … … 5743 5830 5744 5831 /* Line 1806 of yacc.c */ 5745 #line 6 88"parser.yy"5832 #line 690 "parser.yy" 5746 5833 { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } } 5747 5834 break; … … 5750 5837 5751 5838 /* Line 1806 of yacc.c */ 5752 #line 69 3"parser.yy"5839 #line 695 "parser.yy" 5753 5840 { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); } 5754 5841 break; … … 5757 5844 5758 5845 /* Line 1806 of yacc.c */ 5759 #line 699"parser.yy"5846 #line 701 "parser.yy" 5760 5847 { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); } 5761 5848 break; … … 5764 5851 5765 5852 /* Line 1806 of yacc.c */ 5766 #line 70 1"parser.yy"5853 #line 703 "parser.yy" 5767 5854 { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); } 5768 5855 break; … … 5771 5858 5772 5859 /* Line 1806 of yacc.c */ 5773 #line 70 3"parser.yy"5860 #line 705 "parser.yy" 5774 5861 { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); } 5775 5862 break; … … 5778 5865 5779 5866 /* Line 1806 of yacc.c */ 5780 #line 70 5"parser.yy"5867 #line 707 "parser.yy" 5781 5868 { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); /* xxx */ } 5782 5869 break; … … 5785 5872 5786 5873 /* Line 1806 of yacc.c */ 5787 #line 71 0"parser.yy"5874 #line 712 "parser.yy" 5788 5875 { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); } 5789 5876 break; … … 5792 5879 5793 5880 /* Line 1806 of yacc.c */ 5794 #line 71 2"parser.yy"5881 #line 714 "parser.yy" 5795 5882 { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); } 5796 5883 break; … … 5799 5886 5800 5887 /* Line 1806 of yacc.c */ 5801 #line 7 19"parser.yy"5888 #line 721 "parser.yy" 5802 5889 { (yyval.en) = (yyvsp[(1) - (1)].en); } 5803 5890 break; … … 5806 5893 5807 5894 /* Line 1806 of yacc.c */ 5808 #line 72 1"parser.yy"5895 #line 723 "parser.yy" 5809 5896 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5810 5897 break; … … 5813 5900 5814 5901 /* Line 1806 of yacc.c */ 5815 #line 7 28"parser.yy"5902 #line 730 "parser.yy" 5816 5903 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(tupleContents( (yyvsp[(1) - (3)].en) ))->set_link( (yyvsp[(3) - (3)].en) ) ); } 5817 5904 break; … … 5820 5907 5821 5908 /* Line 1806 of yacc.c */ 5822 #line 73 2"parser.yy"5909 #line 734 "parser.yy" 5823 5910 { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(2) - (3)].en), 0 ); } 5824 5911 break; … … 5827 5914 5828 5915 /* Line 1806 of yacc.c */ 5829 #line 73 3"parser.yy"5916 #line 735 "parser.yy" 5830 5917 { (yyval.sn) = new StatementNode( StatementNode::Default ); } 5831 5918 break; … … 5834 5921 5835 5922 /* Line 1806 of yacc.c */ 5836 #line 7 39"parser.yy"5923 #line 741 "parser.yy" 5837 5924 { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); } 5838 5925 break; … … 5841 5928 5842 5929 /* Line 1806 of yacc.c */ 5843 #line 74 3"parser.yy"5930 #line 745 "parser.yy" 5844 5931 { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); } 5845 5932 break; … … 5848 5935 5849 5936 /* Line 1806 of yacc.c */ 5850 #line 7 48"parser.yy"5937 #line 750 "parser.yy" 5851 5938 { (yyval.sn) = 0; } 5852 5939 break; … … 5855 5942 5856 5943 /* Line 1806 of yacc.c */ 5857 #line 75 4"parser.yy"5944 #line 756 "parser.yy" 5858 5945 { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); } 5859 5946 break; … … 5862 5949 5863 5950 /* Line 1806 of yacc.c */ 5864 #line 75 6"parser.yy"5951 #line 758 "parser.yy" 5865 5952 { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); } 5866 5953 break; … … 5869 5956 5870 5957 /* Line 1806 of yacc.c */ 5871 #line 76 1"parser.yy"5958 #line 763 "parser.yy" 5872 5959 { (yyval.sn) = 0; } 5873 5960 break; … … 5876 5963 5877 5964 /* Line 1806 of yacc.c */ 5878 #line 76 7"parser.yy"5965 #line 769 "parser.yy" 5879 5966 { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); } 5880 5967 break; … … 5883 5970 5884 5971 /* Line 1806 of yacc.c */ 5885 #line 7 69"parser.yy"5972 #line 771 "parser.yy" 5886 5973 { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].sn) ))); } 5887 5974 break; … … 5890 5977 5891 5978 /* Line 1806 of yacc.c */ 5892 #line 77 1"parser.yy"5979 #line 773 "parser.yy" 5893 5980 { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); } 5894 5981 break; … … 5897 5984 5898 5985 /* Line 1806 of yacc.c */ 5899 #line 77 3"parser.yy"5986 #line 775 "parser.yy" 5900 5987 { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_link( (yyvsp[(2) - (4)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(3) - (4)].sn),*(yyvsp[(4) - (4)].sn) ))))); } 5901 5988 break; … … 5904 5991 5905 5992 /* Line 1806 of yacc.c */ 5906 #line 7 78"parser.yy"5993 #line 780 "parser.yy" 5907 5994 { (yyval.sn) = 0; } 5908 5995 break; … … 5911 5998 5912 5999 /* Line 1806 of yacc.c */ 5913 #line 78 3"parser.yy"6000 #line 785 "parser.yy" 5914 6001 { (yyval.sn) = new StatementNode( StatementNode::Fallthru ); } 5915 6002 break; … … 5918 6005 5919 6006 /* Line 1806 of yacc.c */ 5920 #line 78 4"parser.yy"6007 #line 786 "parser.yy" 5921 6008 { (yyval.sn) = new StatementNode( StatementNode::Fallthru ); } 5922 6009 break; … … 5925 6012 5926 6013 /* Line 1806 of yacc.c */ 5927 #line 7 89"parser.yy"6014 #line 791 "parser.yy" 5928 6015 { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); } 5929 6016 break; … … 5932 6019 5933 6020 /* Line 1806 of yacc.c */ 5934 #line 79 1"parser.yy"6021 #line 793 "parser.yy" 5935 6022 { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); } 5936 6023 break; … … 5939 6026 5940 6027 /* Line 1806 of yacc.c */ 5941 #line 79 3"parser.yy"6028 #line 795 "parser.yy" 5942 6029 { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); } 5943 6030 break; … … 5946 6033 5947 6034 /* Line 1806 of yacc.c */ 5948 #line 798"parser.yy"6035 #line 800 "parser.yy" 5949 6036 { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); } 5950 6037 break; … … 5953 6040 5954 6041 /* Line 1806 of yacc.c */ 5955 #line 80 0"parser.yy"6042 #line 802 "parser.yy" 5956 6043 { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); } 5957 6044 break; … … 5960 6047 5961 6048 /* Line 1806 of yacc.c */ 5962 #line 80 5"parser.yy"6049 #line 807 "parser.yy" 5963 6050 { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); } 5964 6051 break; … … 5967 6054 5968 6055 /* Line 1806 of yacc.c */ 5969 #line 8 09"parser.yy"6056 #line 811 "parser.yy" 5970 6057 { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); } 5971 6058 break; … … 5974 6061 5975 6062 /* Line 1806 of yacc.c */ 5976 #line 81 2"parser.yy"6063 #line 814 "parser.yy" 5977 6064 { (yyval.sn) = new StatementNode( StatementNode::Continue ); } 5978 6065 break; … … 5981 6068 5982 6069 /* Line 1806 of yacc.c */ 5983 #line 81 6"parser.yy"6070 #line 818 "parser.yy" 5984 6071 { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); } 5985 6072 break; … … 5988 6075 5989 6076 /* Line 1806 of yacc.c */ 5990 #line 8 19"parser.yy"6077 #line 821 "parser.yy" 5991 6078 { (yyval.sn) = new StatementNode( StatementNode::Break ); } 5992 6079 break; … … 5995 6082 5996 6083 /* Line 1806 of yacc.c */ 5997 #line 82 3"parser.yy"6084 #line 825 "parser.yy" 5998 6085 { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); } 5999 6086 break; … … 6002 6089 6003 6090 /* Line 1806 of yacc.c */ 6004 #line 82 5"parser.yy"6091 #line 827 "parser.yy" 6005 6092 { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); } 6006 6093 break; … … 6009 6096 6010 6097 /* Line 1806 of yacc.c */ 6011 #line 82 7"parser.yy"6098 #line 829 "parser.yy" 6012 6099 { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); } 6013 6100 break; … … 6016 6103 6017 6104 /* Line 1806 of yacc.c */ 6018 #line 83 1"parser.yy"6105 #line 833 "parser.yy" 6019 6106 { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); } 6020 6107 break; … … 6023 6110 6024 6111 /* Line 1806 of yacc.c */ 6025 #line 83 3"parser.yy"6112 #line 835 "parser.yy" 6026 6113 { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (5)].en), 0 ); } 6027 6114 break; 6028 6115 6029 6116 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 6117 6038 6118 /* Line 1806 of yacc.c */ … … 6041 6121 break; 6042 6122 6123 case 198: 6124 6125 /* Line 1806 of yacc.c */ 6126 #line 844 "parser.yy" 6127 { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); } 6128 break; 6129 6043 6130 case 199: 6044 6131 6045 6132 /* Line 1806 of yacc.c */ 6046 #line 84 4"parser.yy"6133 #line 846 "parser.yy" 6047 6134 { 6048 6135 (yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) ); … … 6054 6141 6055 6142 /* Line 1806 of yacc.c */ 6056 #line 85 5"parser.yy"6143 #line 857 "parser.yy" 6057 6144 { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); } 6058 6145 break; … … 6061 6148 6062 6149 /* Line 1806 of yacc.c */ 6063 #line 85 7"parser.yy"6150 #line 859 "parser.yy" 6064 6151 { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); } 6065 6152 break; … … 6068 6155 6069 6156 /* Line 1806 of yacc.c */ 6070 #line 8 59"parser.yy"6157 #line 861 "parser.yy" 6071 6158 { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); } 6072 6159 break; … … 6075 6162 6076 6163 /* Line 1806 of yacc.c */ 6077 #line 86 1"parser.yy"6164 #line 863 "parser.yy" 6078 6165 { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); } 6079 6166 break; … … 6082 6169 6083 6170 /* Line 1806 of yacc.c */ 6084 #line 86 6"parser.yy"6171 #line 868 "parser.yy" 6085 6172 { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); } 6086 6173 break; … … 6089 6176 6090 6177 /* Line 1806 of yacc.c */ 6091 #line 8 68"parser.yy"6178 #line 870 "parser.yy" 6092 6179 { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); } 6093 6180 break; … … 6096 6183 6097 6184 /* Line 1806 of yacc.c */ 6098 #line 87 0"parser.yy"6185 #line 872 "parser.yy" 6099 6186 { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); } 6100 6187 break; … … 6103 6190 6104 6191 /* Line 1806 of yacc.c */ 6105 #line 87 2"parser.yy"6192 #line 874 "parser.yy" 6106 6193 { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); } 6107 6194 break; … … 6110 6197 6111 6198 /* Line 1806 of yacc.c */ 6112 #line 87 7"parser.yy"6199 #line 879 "parser.yy" 6113 6200 { 6114 6201 (yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) ); … … 6120 6207 6121 6208 /* Line 1806 of yacc.c */ 6122 #line 89 1"parser.yy"6209 #line 893 "parser.yy" 6123 6210 { 6124 6211 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6130 6217 6131 6218 /* Line 1806 of yacc.c */ 6132 #line 89 6"parser.yy"6219 #line 898 "parser.yy" 6133 6220 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); } 6134 6221 break; … … 6137 6224 6138 6225 /* Line 1806 of yacc.c */ 6139 #line 898"parser.yy"6226 #line 900 "parser.yy" 6140 6227 { 6141 6228 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6147 6234 6148 6235 /* Line 1806 of yacc.c */ 6149 #line 90 7"parser.yy"6236 #line 909 "parser.yy" 6150 6237 { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); } 6151 6238 break; … … 6154 6241 6155 6242 /* Line 1806 of yacc.c */ 6156 #line 9 09"parser.yy"6243 #line 911 "parser.yy" 6157 6244 { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); } 6158 6245 break; … … 6161 6248 6162 6249 /* Line 1806 of yacc.c */ 6163 #line 91 1"parser.yy"6250 #line 913 "parser.yy" 6164 6251 { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ); } 6165 6252 break; … … 6168 6255 6169 6256 /* Line 1806 of yacc.c */ 6170 #line 91 3"parser.yy"6257 #line 915 "parser.yy" 6171 6258 { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].constant) ); } 6172 6259 break; … … 6175 6262 6176 6263 /* Line 1806 of yacc.c */ 6177 #line 91 5"parser.yy"6264 #line 917 "parser.yy" 6178 6265 { (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 6266 break; … … 6182 6269 6183 6270 /* Line 1806 of yacc.c */ 6184 #line 92 0"parser.yy"6271 #line 922 "parser.yy" 6185 6272 { (yyval.flag) = false; } 6186 6273 break; … … 6189 6276 6190 6277 /* Line 1806 of yacc.c */ 6191 #line 92 2"parser.yy"6278 #line 924 "parser.yy" 6192 6279 { (yyval.flag) = true; } 6193 6280 break; … … 6196 6283 6197 6284 /* Line 1806 of yacc.c */ 6198 #line 92 7"parser.yy"6285 #line 929 "parser.yy" 6199 6286 { (yyval.en) = 0; } 6200 6287 break; … … 6203 6290 6204 6291 /* Line 1806 of yacc.c */ 6205 #line 93 4"parser.yy"6292 #line 936 "parser.yy" 6206 6293 { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); } 6207 6294 break; … … 6210 6297 6211 6298 /* Line 1806 of yacc.c */ 6212 #line 9 39"parser.yy"6299 #line 941 "parser.yy" 6213 6300 { (yyval.en) = new AsmExprNode( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ); } 6214 6301 break; … … 6217 6304 6218 6305 /* Line 1806 of yacc.c */ 6219 #line 94 1"parser.yy"6306 #line 943 "parser.yy" 6220 6307 { (yyval.en) = new AsmExprNode( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ); } 6221 6308 break; … … 6224 6311 6225 6312 /* Line 1806 of yacc.c */ 6226 #line 94 6"parser.yy"6313 #line 948 "parser.yy" 6227 6314 { (yyval.constant) = 0; } 6228 6315 break; … … 6231 6318 6232 6319 /* Line 1806 of yacc.c */ 6233 #line 9 48"parser.yy"6320 #line 950 "parser.yy" 6234 6321 { (yyval.constant) = (yyvsp[(1) - (1)].constant); } 6235 6322 break; … … 6238 6325 6239 6326 /* Line 1806 of yacc.c */ 6240 #line 95 0"parser.yy"6327 #line 952 "parser.yy" 6241 6328 { (yyval.constant) = (ConstantNode *)(yyvsp[(1) - (3)].constant)->set_link( (yyvsp[(3) - (3)].constant) ); } 6242 6329 break; … … 6245 6332 6246 6333 /* Line 1806 of yacc.c */ 6247 #line 95 5"parser.yy"6334 #line 957 "parser.yy" 6248 6335 { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); } 6249 6336 break; … … 6252 6339 6253 6340 /* Line 1806 of yacc.c */ 6254 #line 95 7"parser.yy"6341 #line 959 "parser.yy" 6255 6342 { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); } 6256 6343 break; … … 6259 6346 6260 6347 /* Line 1806 of yacc.c */ 6261 #line 96 4"parser.yy"6348 #line 966 "parser.yy" 6262 6349 { (yyval.decl) = 0; } 6263 6350 break; … … 6266 6353 6267 6354 /* Line 1806 of yacc.c */ 6268 #line 97 1"parser.yy"6355 #line 973 "parser.yy" 6269 6356 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); } 6270 6357 break; … … 6273 6360 6274 6361 /* Line 1806 of yacc.c */ 6275 #line 97 6"parser.yy"6362 #line 978 "parser.yy" 6276 6363 { (yyval.decl) = 0; } 6277 6364 break; … … 6280 6367 6281 6368 /* Line 1806 of yacc.c */ 6282 #line 98 3"parser.yy"6369 #line 985 "parser.yy" 6283 6370 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); } 6284 6371 break; … … 6287 6374 6288 6375 /* Line 1806 of yacc.c */ 6289 #line 99 7"parser.yy"6376 #line 999 "parser.yy" 6290 6377 {} 6291 6378 break; … … 6294 6381 6295 6382 /* Line 1806 of yacc.c */ 6296 #line 998"parser.yy"6383 #line 1000 "parser.yy" 6297 6384 {} 6298 6385 break; … … 6301 6388 6302 6389 /* Line 1806 of yacc.c */ 6303 #line 102 7"parser.yy"6390 #line 1029 "parser.yy" 6304 6391 { 6305 6392 typedefTable.addToEnclosingScope( TypedefTable::ID ); 6306 (yyval.decl) = (yyvsp[(1) - (2)].decl) ;6393 (yyval.decl) = (yyvsp[(1) - (2)].decl)->addInitializer( (yyvsp[(2) - (2)].in) ); 6307 6394 } 6308 6395 break; … … 6311 6398 6312 6399 /* Line 1806 of yacc.c */ 6313 #line 103 4"parser.yy"6400 #line 1036 "parser.yy" 6314 6401 { 6315 6402 typedefTable.addToEnclosingScope( TypedefTable::ID ); 6316 (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ) ;6403 (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addInitializer( (yyvsp[(3) - (3)].in) );; 6317 6404 } 6318 6405 break; … … 6321 6408 6322 6409 /* Line 1806 of yacc.c */ 6323 #line 10 39"parser.yy"6410 #line 1041 "parser.yy" 6324 6411 { 6325 6412 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) ) );6413 (yyval.decl) = (yyvsp[(1) - (6)].decl)->appendList( (yyvsp[(1) - (6)].decl)->cloneType( (yyvsp[(5) - (6)].tok) )->addInitializer( (yyvsp[(6) - (6)].in) ) ); 6327 6414 } 6328 6415 break; … … 6331 6418 6332 6419 /* Line 1806 of yacc.c */ 6333 #line 10 49"parser.yy"6420 #line 1051 "parser.yy" 6334 6421 { 6335 6422 typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) ); … … 6341 6428 6342 6429 /* Line 1806 of yacc.c */ 6343 #line 105 4"parser.yy"6430 #line 1056 "parser.yy" 6344 6431 { 6345 6432 typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) ); … … 6351 6438 6352 6439 /* Line 1806 of yacc.c */ 6353 #line 10 59"parser.yy"6440 #line 1061 "parser.yy" 6354 6441 { 6355 6442 typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) ); … … 6361 6448 6362 6449 /* Line 1806 of yacc.c */ 6363 #line 106 7"parser.yy"6450 #line 1069 "parser.yy" 6364 6451 { 6365 6452 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6371 6458 6372 6459 /* Line 1806 of yacc.c */ 6373 #line 107 2"parser.yy"6460 #line 1074 "parser.yy" 6374 6461 { 6375 6462 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6381 6468 6382 6469 /* Line 1806 of yacc.c */ 6383 #line 107 7"parser.yy"6470 #line 1079 "parser.yy" 6384 6471 { 6385 6472 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6391 6478 6392 6479 /* Line 1806 of yacc.c */ 6393 #line 108 2"parser.yy"6480 #line 1084 "parser.yy" 6394 6481 { 6395 6482 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6401 6488 6402 6489 /* Line 1806 of yacc.c */ 6403 #line 108 7"parser.yy"6490 #line 1089 "parser.yy" 6404 6491 { 6405 6492 typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID ); … … 6411 6498 6412 6499 /* Line 1806 of yacc.c */ 6413 #line 109 5"parser.yy"6500 #line 1097 "parser.yy" 6414 6501 { 6415 6502 (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true ); … … 6420 6507 6421 6508 /* Line 1806 of yacc.c */ 6422 #line 11 18"parser.yy"6509 #line 1120 "parser.yy" 6423 6510 { 6424 6511 (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true ); … … 6429 6516 6430 6517 /* Line 1806 of yacc.c */ 6431 #line 112 2"parser.yy"6518 #line 1124 "parser.yy" 6432 6519 { 6433 6520 (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true ); … … 6438 6525 6439 6526 /* Line 1806 of yacc.c */ 6440 #line 11 29"parser.yy"6527 #line 1131 "parser.yy" 6441 6528 { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); } 6442 6529 break; … … 6445 6532 6446 6533 /* Line 1806 of yacc.c */ 6447 #line 113 3"parser.yy"6534 #line 1135 "parser.yy" 6448 6535 { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); } 6449 6536 break; … … 6452 6539 6453 6540 /* Line 1806 of yacc.c */ 6454 #line 11 38"parser.yy"6541 #line 1140 "parser.yy" 6455 6542 { 6456 6543 typedefTable.addToEnclosingScope( TypedefTable::TD ); … … 6462 6549 6463 6550 /* Line 1806 of yacc.c */ 6464 #line 114 3"parser.yy"6551 #line 1145 "parser.yy" 6465 6552 { 6466 6553 typedefTable.addToEnclosingScope( TypedefTable::TD ); … … 6472 6559 6473 6560 /* Line 1806 of yacc.c */ 6474 #line 11 48"parser.yy"6561 #line 1150 "parser.yy" 6475 6562 { 6476 6563 typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD ); … … 6482 6569 6483 6570 /* Line 1806 of yacc.c */ 6484 #line 11 59"parser.yy"6571 #line 1161 "parser.yy" 6485 6572 { 6486 6573 typedefTable.addToEnclosingScope( TypedefTable::TD ); … … 6492 6579 6493 6580 /* Line 1806 of yacc.c */ 6494 #line 116 4"parser.yy"6581 #line 1166 "parser.yy" 6495 6582 { 6496 6583 typedefTable.addToEnclosingScope( TypedefTable::TD ); … … 6502 6589 6503 6590 /* Line 1806 of yacc.c */ 6504 #line 11 69"parser.yy"6591 #line 1171 "parser.yy" 6505 6592 { 6506 6593 typedefTable.addToEnclosingScope( TypedefTable::TD ); … … 6512 6599 6513 6600 /* Line 1806 of yacc.c */ 6514 #line 117 4"parser.yy"6601 #line 1176 "parser.yy" 6515 6602 { 6516 6603 typedefTable.addToEnclosingScope( TypedefTable::TD ); … … 6522 6609 6523 6610 /* Line 1806 of yacc.c */ 6524 #line 11 79"parser.yy"6611 #line 1181 "parser.yy" 6525 6612 { 6526 6613 typedefTable.addToEnclosingScope( TypedefTable::TD ); … … 6532 6619 6533 6620 /* Line 1806 of yacc.c */ 6534 #line 11 88"parser.yy"6621 #line 1190 "parser.yy" 6535 6622 { 6536 6623 typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD ); … … 6542 6629 6543 6630 /* Line 1806 of yacc.c */ 6544 #line 119 3"parser.yy"6631 #line 1195 "parser.yy" 6545 6632 { 6546 6633 typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD ); … … 6552 6639 6553 6640 /* Line 1806 of yacc.c */ 6554 #line 121 0"parser.yy"6641 #line 1212 "parser.yy" 6555 6642 { 6556 6643 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6562 6649 6563 6650 /* Line 1806 of yacc.c */ 6564 #line 121 5"parser.yy"6651 #line 1217 "parser.yy" 6565 6652 { 6566 6653 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6572 6659 6573 6660 /* Line 1806 of yacc.c */ 6574 #line 123 7"parser.yy"6661 #line 1239 "parser.yy" 6575 6662 { (yyval.decl) = 0; } 6576 6663 break; … … 6579 6666 6580 6667 /* Line 1806 of yacc.c */ 6581 #line 12 49"parser.yy"6668 #line 1251 "parser.yy" 6582 6669 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6583 6670 break; … … 6586 6673 6587 6674 /* Line 1806 of yacc.c */ 6588 #line 126 0"parser.yy"6675 #line 1262 "parser.yy" 6589 6676 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); } 6590 6677 break; … … 6593 6680 6594 6681 /* Line 1806 of yacc.c */ 6595 #line 126 2"parser.yy"6682 #line 1264 "parser.yy" 6596 6683 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); } 6597 6684 break; … … 6600 6687 6601 6688 /* Line 1806 of yacc.c */ 6602 #line 126 4"parser.yy"6689 #line 1266 "parser.yy" 6603 6690 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); } 6604 6691 break; … … 6607 6694 6608 6695 /* Line 1806 of yacc.c */ 6609 #line 126 6"parser.yy"6696 #line 1268 "parser.yy" 6610 6697 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); } 6611 6698 break; … … 6614 6701 6615 6702 /* Line 1806 of yacc.c */ 6616 #line 12 68"parser.yy"6703 #line 1270 "parser.yy" 6617 6704 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); } 6618 6705 break; … … 6621 6708 6622 6709 /* Line 1806 of yacc.c */ 6623 #line 127 0"parser.yy"6710 #line 1272 "parser.yy" 6624 6711 { 6625 6712 typedefTable.enterScope(); … … 6630 6717 6631 6718 /* Line 1806 of yacc.c */ 6632 #line 127 4"parser.yy"6719 #line 1276 "parser.yy" 6633 6720 { 6634 6721 typedefTable.leaveScope(); … … 6640 6727 6641 6728 /* Line 1806 of yacc.c */ 6642 #line 128 3"parser.yy"6729 #line 1285 "parser.yy" 6643 6730 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6644 6731 break; … … 6647 6734 6648 6735 /* Line 1806 of yacc.c */ 6649 #line 128 5"parser.yy"6736 #line 1287 "parser.yy" 6650 6737 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); } 6651 6738 break; … … 6654 6741 6655 6742 /* Line 1806 of yacc.c */ 6656 #line 129 6"parser.yy"6743 #line 1298 "parser.yy" 6657 6744 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6658 6745 break; … … 6661 6748 6662 6749 /* Line 1806 of yacc.c */ 6663 #line 130 5"parser.yy"6750 #line 1307 "parser.yy" 6664 6751 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); } 6665 6752 break; … … 6668 6755 6669 6756 /* Line 1806 of yacc.c */ 6670 #line 130 7"parser.yy"6757 #line 1309 "parser.yy" 6671 6758 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); } 6672 6759 break; … … 6675 6762 6676 6763 /* Line 1806 of yacc.c */ 6677 #line 13 09"parser.yy"6764 #line 1311 "parser.yy" 6678 6765 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); } 6679 6766 break; … … 6682 6769 6683 6770 /* Line 1806 of yacc.c */ 6684 #line 131 1"parser.yy"6771 #line 1313 "parser.yy" 6685 6772 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); } 6686 6773 break; … … 6689 6776 6690 6777 /* Line 1806 of yacc.c */ 6691 #line 131 3"parser.yy"6778 #line 1315 "parser.yy" 6692 6779 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); } 6693 6780 break; … … 6696 6783 6697 6784 /* Line 1806 of yacc.c */ 6698 #line 131 5"parser.yy"6785 #line 1317 "parser.yy" 6699 6786 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); } 6700 6787 break; … … 6703 6790 6704 6791 /* Line 1806 of yacc.c */ 6705 #line 131 7"parser.yy"6792 #line 1319 "parser.yy" 6706 6793 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); } 6707 6794 break; … … 6710 6797 6711 6798 /* Line 1806 of yacc.c */ 6712 #line 13 19"parser.yy"6799 #line 1321 "parser.yy" 6713 6800 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); } 6714 6801 break; … … 6717 6804 6718 6805 /* Line 1806 of yacc.c */ 6719 #line 132 4"parser.yy"6806 #line 1326 "parser.yy" 6720 6807 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); } 6721 6808 break; … … 6724 6811 6725 6812 /* Line 1806 of yacc.c */ 6726 #line 132 6"parser.yy"6813 #line 1328 "parser.yy" 6727 6814 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); } 6728 6815 break; … … 6731 6818 6732 6819 /* Line 1806 of yacc.c */ 6733 #line 13 28"parser.yy"6820 #line 1330 "parser.yy" 6734 6821 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); } 6735 6822 break; … … 6738 6825 6739 6826 /* Line 1806 of yacc.c */ 6740 #line 133 0"parser.yy"6827 #line 1332 "parser.yy" 6741 6828 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); } 6742 6829 break; … … 6745 6832 6746 6833 /* Line 1806 of yacc.c */ 6747 #line 133 2"parser.yy"6834 #line 1334 "parser.yy" 6748 6835 { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); } 6749 6836 break; … … 6752 6839 6753 6840 /* Line 1806 of yacc.c */ 6754 #line 133 4"parser.yy"6841 #line 1336 "parser.yy" 6755 6842 { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); } 6756 6843 break; … … 6759 6846 6760 6847 /* Line 1806 of yacc.c */ 6761 #line 133 6"parser.yy"6848 #line 1338 "parser.yy" 6762 6849 { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); } 6763 6850 break; … … 6766 6853 6767 6854 /* Line 1806 of yacc.c */ 6768 #line 13 38"parser.yy"6855 #line 1340 "parser.yy" 6769 6856 { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); } 6770 6857 break; … … 6773 6860 6774 6861 /* Line 1806 of yacc.c */ 6775 #line 134 0"parser.yy"6862 #line 1342 "parser.yy" 6776 6863 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); } 6777 6864 break; … … 6780 6867 6781 6868 /* Line 1806 of yacc.c */ 6782 #line 134 2"parser.yy"6869 #line 1344 "parser.yy" 6783 6870 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); } 6784 6871 break; … … 6787 6874 6788 6875 /* Line 1806 of yacc.c */ 6789 #line 134 4"parser.yy"6876 #line 1346 "parser.yy" 6790 6877 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); } 6791 6878 break; … … 6794 6881 6795 6882 /* Line 1806 of yacc.c */ 6796 #line 134 6"parser.yy"6883 #line 1348 "parser.yy" 6797 6884 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); } 6798 6885 break; 6799 6886 6800 case 334: 6801 6802 /* Line 1806 of yacc.c */ 6803 #line 1353 "parser.yy" 6887 case 333: 6888 6889 /* Line 1806 of yacc.c */ 6890 #line 1350 "parser.yy" 6891 { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); } 6892 break; 6893 6894 case 335: 6895 6896 /* Line 1806 of yacc.c */ 6897 #line 1357 "parser.yy" 6804 6898 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 6805 6899 break; 6806 6900 6807 case 33 5:6808 6809 /* Line 1806 of yacc.c */ 6810 #line 135 5"parser.yy"6901 case 336: 6902 6903 /* Line 1806 of yacc.c */ 6904 #line 1359 "parser.yy" 6811 6905 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6812 6906 break; 6813 6907 6814 case 33 6:6815 6816 /* Line 1806 of yacc.c */ 6817 #line 13 57"parser.yy"6908 case 337: 6909 6910 /* Line 1806 of yacc.c */ 6911 #line 1361 "parser.yy" 6818 6912 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); } 6819 6913 break; 6820 6914 6821 case 33 7:6822 6823 /* Line 1806 of yacc.c */ 6824 #line 13 59"parser.yy"6915 case 338: 6916 6917 /* Line 1806 of yacc.c */ 6918 #line 1363 "parser.yy" 6825 6919 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); } 6826 6920 break; 6827 6921 6828 case 3 39:6829 6830 /* Line 1806 of yacc.c */ 6831 #line 136 5"parser.yy"6922 case 340: 6923 6924 /* Line 1806 of yacc.c */ 6925 #line 1369 "parser.yy" 6832 6926 { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); } 6833 6927 break; 6834 6928 6835 case 34 1:6836 6837 /* Line 1806 of yacc.c */ 6838 #line 137 2"parser.yy"6929 case 342: 6930 6931 /* Line 1806 of yacc.c */ 6932 #line 1376 "parser.yy" 6839 6933 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 6840 6934 break; 6841 6935 6842 case 34 2:6843 6844 /* Line 1806 of yacc.c */ 6845 #line 137 4"parser.yy"6936 case 343: 6937 6938 /* Line 1806 of yacc.c */ 6939 #line 1378 "parser.yy" 6846 6940 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6847 6941 break; 6848 6942 6849 case 34 3:6850 6851 /* Line 1806 of yacc.c */ 6852 #line 13 76"parser.yy"6943 case 344: 6944 6945 /* Line 1806 of yacc.c */ 6946 #line 1380 "parser.yy" 6853 6947 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); } 6854 6948 break; 6855 6949 6856 case 34 4:6857 6858 /* Line 1806 of yacc.c */ 6859 #line 138 1"parser.yy"6950 case 345: 6951 6952 /* Line 1806 of yacc.c */ 6953 #line 1385 "parser.yy" 6860 6954 { (yyval.decl) = (yyvsp[(3) - (4)].decl); } 6861 6955 break; 6862 6956 6863 case 34 5:6864 6865 /* Line 1806 of yacc.c */ 6866 #line 138 3"parser.yy"6957 case 346: 6958 6959 /* Line 1806 of yacc.c */ 6960 #line 1387 "parser.yy" 6867 6961 { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); } 6868 6962 break; 6869 6963 6870 case 34 6:6871 6872 /* Line 1806 of yacc.c */ 6873 #line 138 5"parser.yy"6964 case 347: 6965 6966 /* Line 1806 of yacc.c */ 6967 #line 1389 "parser.yy" 6874 6968 { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); } 6875 6969 break; 6876 6970 6877 case 34 7:6878 6879 /* Line 1806 of yacc.c */ 6880 #line 13 87"parser.yy"6971 case 348: 6972 6973 /* Line 1806 of yacc.c */ 6974 #line 1391 "parser.yy" 6881 6975 { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); } 6882 6976 break; 6883 6977 6884 case 3 49:6885 6886 /* Line 1806 of yacc.c */ 6887 #line 139 3"parser.yy"6978 case 350: 6979 6980 /* Line 1806 of yacc.c */ 6981 #line 1397 "parser.yy" 6888 6982 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 6889 6983 break; 6890 6984 6891 case 35 0:6892 6893 /* Line 1806 of yacc.c */ 6894 #line 139 5"parser.yy"6985 case 351: 6986 6987 /* Line 1806 of yacc.c */ 6988 #line 1399 "parser.yy" 6895 6989 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6896 6990 break; 6897 6991 6898 case 35 1:6899 6900 /* Line 1806 of yacc.c */ 6901 #line 1 397"parser.yy"6992 case 352: 6993 6994 /* Line 1806 of yacc.c */ 6995 #line 1401 "parser.yy" 6902 6996 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); } 6903 6997 break; 6904 6998 6905 case 35 3:6906 6907 /* Line 1806 of yacc.c */ 6908 #line 140 3"parser.yy"6999 case 354: 7000 7001 /* Line 1806 of yacc.c */ 7002 #line 1407 "parser.yy" 6909 7003 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 6910 7004 break; 6911 7005 6912 case 35 4:6913 6914 /* Line 1806 of yacc.c */ 6915 #line 140 5"parser.yy"7006 case 355: 7007 7008 /* Line 1806 of yacc.c */ 7009 #line 1409 "parser.yy" 6916 7010 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6917 7011 break; 6918 7012 6919 case 35 6:6920 6921 /* Line 1806 of yacc.c */ 6922 #line 141 1"parser.yy"7013 case 357: 7014 7015 /* Line 1806 of yacc.c */ 7016 #line 1415 "parser.yy" 6923 7017 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 6924 7018 break; 6925 7019 6926 case 35 7:6927 6928 /* Line 1806 of yacc.c */ 6929 #line 141 3"parser.yy"7020 case 358: 7021 7022 /* Line 1806 of yacc.c */ 7023 #line 1417 "parser.yy" 6930 7024 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6931 7025 break; 6932 7026 6933 case 35 8:6934 6935 /* Line 1806 of yacc.c */ 6936 #line 141 5"parser.yy"7027 case 359: 7028 7029 /* Line 1806 of yacc.c */ 7030 #line 1419 "parser.yy" 6937 7031 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); } 6938 7032 break; 6939 7033 6940 case 3 59:6941 6942 /* Line 1806 of yacc.c */ 6943 #line 142 0"parser.yy"7034 case 360: 7035 7036 /* Line 1806 of yacc.c */ 7037 #line 1424 "parser.yy" 6944 7038 { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); } 6945 7039 break; 6946 7040 6947 case 36 0:6948 6949 /* Line 1806 of yacc.c */ 6950 #line 142 2"parser.yy"7041 case 361: 7042 7043 /* Line 1806 of yacc.c */ 7044 #line 1426 "parser.yy" 6951 7045 { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 6952 7046 break; 6953 7047 6954 case 36 1:6955 6956 /* Line 1806 of yacc.c */ 6957 #line 142 4"parser.yy"7048 case 362: 7049 7050 /* Line 1806 of yacc.c */ 7051 #line 1428 "parser.yy" 6958 7052 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6959 7053 break; 6960 7054 6961 case 36 4:6962 6963 /* Line 1806 of yacc.c */ 6964 #line 143 4"parser.yy"7055 case 365: 7056 7057 /* Line 1806 of yacc.c */ 7058 #line 1438 "parser.yy" 6965 7059 { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl) ); } 6966 7060 break; 6967 7061 6968 case 365:6969 6970 /* Line 1806 of yacc.c */6971 #line 1436 "parser.yy"6972 { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (2)].aggKey), (yyvsp[(2) - (2)].tok), 0, 0 ); }6973 break;6974 6975 7062 case 366: 6976 7063 6977 7064 /* Line 1806 of yacc.c */ 6978 #line 1438 "parser.yy" 6979 { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (5)].aggKey), (yyvsp[(2) - (5)].tok), 0, (yyvsp[(4) - (5)].decl) ); } 7065 #line 1440 "parser.yy" 7066 { 7067 typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); 7068 (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (2)].aggKey), (yyvsp[(2) - (2)].tok), 0, 0 ); 7069 } 6980 7070 break; 6981 7071 … … 6983 7073 6984 7074 /* Line 1806 of yacc.c */ 6985 #line 1440 "parser.yy" 7075 #line 1445 "parser.yy" 7076 { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); } 7077 break; 7078 7079 case 368: 7080 7081 /* Line 1806 of yacc.c */ 7082 #line 1447 "parser.yy" 7083 { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl)); } 7084 break; 7085 7086 case 369: 7087 7088 /* Line 1806 of yacc.c */ 7089 #line 1449 "parser.yy" 6986 7090 { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl) ); } 6987 7091 break; 6988 7092 6989 case 3 68:6990 6991 /* Line 1806 of yacc.c */ 6992 #line 14 42"parser.yy"7093 case 370: 7094 7095 /* Line 1806 of yacc.c */ 7096 #line 1451 "parser.yy" 6993 7097 { (yyval.decl) = (yyvsp[(2) - (2)].decl); } 6994 7098 break; 6995 7099 6996 case 3 69:6997 6998 /* Line 1806 of yacc.c */ 6999 #line 14 47"parser.yy"7100 case 371: 7101 7102 /* Line 1806 of yacc.c */ 7103 #line 1456 "parser.yy" 7000 7104 { (yyval.aggKey) = DeclarationNode::Struct; } 7001 7105 break; 7002 7106 7003 case 37 0:7004 7005 /* Line 1806 of yacc.c */ 7006 #line 14 49"parser.yy"7107 case 372: 7108 7109 /* Line 1806 of yacc.c */ 7110 #line 1458 "parser.yy" 7007 7111 { (yyval.aggKey) = DeclarationNode::Union; } 7008 7112 break; 7009 7113 7010 case 37 1:7011 7012 /* Line 1806 of yacc.c */ 7013 #line 14 54"parser.yy"7114 case 373: 7115 7116 /* Line 1806 of yacc.c */ 7117 #line 1463 "parser.yy" 7014 7118 { (yyval.decl) = (yyvsp[(1) - (1)].decl); } 7015 7119 break; 7016 7120 7017 case 37 2:7018 7019 /* Line 1806 of yacc.c */ 7020 #line 14 56"parser.yy"7121 case 374: 7122 7123 /* Line 1806 of yacc.c */ 7124 #line 1465 "parser.yy" 7021 7125 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); } 7022 7126 break; 7023 7127 7024 case 37 4:7025 7026 /* Line 1806 of yacc.c */ 7027 #line 14 62"parser.yy"7128 case 376: 7129 7130 /* Line 1806 of yacc.c */ 7131 #line 1471 "parser.yy" 7028 7132 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 7029 7133 break; 7030 7134 7031 case 37 6:7032 7033 /* Line 1806 of yacc.c */ 7034 #line 14 65"parser.yy"7135 case 378: 7136 7137 /* Line 1806 of yacc.c */ 7138 #line 1474 "parser.yy" 7035 7139 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 7036 7140 break; 7037 7141 7038 case 3 78:7039 7040 /* Line 1806 of yacc.c */ 7041 #line 14 71"parser.yy"7142 case 380: 7143 7144 /* Line 1806 of yacc.c */ 7145 #line 1480 "parser.yy" 7042 7146 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); } 7043 7147 break; 7044 7148 7045 case 3 79:7046 7047 /* Line 1806 of yacc.c */ 7048 #line 14 73"parser.yy"7149 case 381: 7150 7151 /* Line 1806 of yacc.c */ 7152 #line 1482 "parser.yy" 7049 7153 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); } 7050 7154 break; 7051 7155 7052 case 38 0:7053 7054 /* Line 1806 of yacc.c */ 7055 #line 14 75"parser.yy"7156 case 382: 7157 7158 /* Line 1806 of yacc.c */ 7159 #line 1484 "parser.yy" 7056 7160 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); } 7057 7161 break; 7058 7162 7059 case 38 1:7060 7061 /* Line 1806 of yacc.c */ 7062 #line 148 0"parser.yy"7163 case 383: 7164 7165 /* Line 1806 of yacc.c */ 7166 #line 1489 "parser.yy" 7063 7167 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); } 7064 7168 break; 7065 7169 7066 case 38 2:7067 7068 /* Line 1806 of yacc.c */ 7069 #line 14 82"parser.yy"7170 case 384: 7171 7172 /* Line 1806 of yacc.c */ 7173 #line 1491 "parser.yy" 7070 7174 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); } 7071 7175 break; 7072 7176 7073 case 38 3:7074 7075 /* Line 1806 of yacc.c */ 7076 #line 14 87"parser.yy"7177 case 385: 7178 7179 /* Line 1806 of yacc.c */ 7180 #line 1496 "parser.yy" 7077 7181 { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ } 7078 7182 break; 7079 7183 7080 case 38 4:7081 7082 /* Line 1806 of yacc.c */ 7083 #line 14 89"parser.yy"7184 case 386: 7185 7186 /* Line 1806 of yacc.c */ 7187 #line 1498 "parser.yy" 7084 7188 { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); } 7085 7189 break; 7086 7190 7087 case 38 5:7088 7089 /* Line 1806 of yacc.c */ 7090 #line 1 492"parser.yy"7191 case 387: 7192 7193 /* Line 1806 of yacc.c */ 7194 #line 1501 "parser.yy" 7091 7195 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); } 7092 7196 break; 7093 7197 7094 case 38 6:7095 7096 /* Line 1806 of yacc.c */ 7097 #line 1 495"parser.yy"7198 case 388: 7199 7200 /* Line 1806 of yacc.c */ 7201 #line 1504 "parser.yy" 7098 7202 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); } 7099 7203 break; 7100 7204 7101 case 3 88:7102 7103 /* Line 1806 of yacc.c */ 7104 #line 15 01"parser.yy"7205 case 390: 7206 7207 /* Line 1806 of yacc.c */ 7208 #line 1510 "parser.yy" 7105 7209 { (yyval.en) = 0; } 7106 7210 break; 7107 7211 7108 case 3 89:7109 7110 /* Line 1806 of yacc.c */ 7111 #line 15 03"parser.yy"7212 case 391: 7213 7214 /* Line 1806 of yacc.c */ 7215 #line 1512 "parser.yy" 7112 7216 { (yyval.en) = (yyvsp[(1) - (1)].en); } 7113 7217 break; 7114 7218 7115 case 39 0:7116 7117 /* Line 1806 of yacc.c */ 7118 #line 15 08"parser.yy"7219 case 392: 7220 7221 /* Line 1806 of yacc.c */ 7222 #line 1517 "parser.yy" 7119 7223 { (yyval.en) = (yyvsp[(2) - (2)].en); } 7120 7224 break; 7121 7225 7122 case 39 2:7123 7124 /* Line 1806 of yacc.c */ 7125 #line 15 17"parser.yy"7226 case 394: 7227 7228 /* Line 1806 of yacc.c */ 7229 #line 1526 "parser.yy" 7126 7230 { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); } 7127 7231 break; 7128 7232 7129 case 393:7130 7131 /* Line 1806 of yacc.c */7132 #line 1519 "parser.yy"7133 { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (6)].tok), (yyvsp[(4) - (6)].decl) ); }7134 break;7135 7136 case 394:7137 7138 /* Line 1806 of yacc.c */7139 #line 1521 "parser.yy"7140 { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (2)].tok), 0 ); }7141 break;7142 7143 7233 case 395: 7144 7234 7145 7235 /* Line 1806 of yacc.c */ 7146 #line 1526 "parser.yy" 7236 #line 1528 "parser.yy" 7237 { 7238 typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); 7239 (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (2)].tok), 0 ); 7240 } 7241 break; 7242 7243 case 396: 7244 7245 /* Line 1806 of yacc.c */ 7246 #line 1533 "parser.yy" 7247 { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); } 7248 break; 7249 7250 case 397: 7251 7252 /* Line 1806 of yacc.c */ 7253 #line 1535 "parser.yy" 7254 { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); } 7255 break; 7256 7257 case 398: 7258 7259 /* Line 1806 of yacc.c */ 7260 #line 1540 "parser.yy" 7147 7261 { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); } 7148 7262 break; 7149 7263 7150 case 39 6:7151 7152 /* Line 1806 of yacc.c */ 7153 #line 15 28"parser.yy"7264 case 399: 7265 7266 /* Line 1806 of yacc.c */ 7267 #line 1542 "parser.yy" 7154 7268 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); } 7155 7269 break; 7156 7270 7157 case 397:7158 7159 /* Line 1806 of yacc.c */ 7160 #line 15 33"parser.yy"7271 case 400: 7272 7273 /* Line 1806 of yacc.c */ 7274 #line 1547 "parser.yy" 7161 7275 { (yyval.en) = 0; } 7162 7276 break; 7163 7277 7164 case 398:7165 7166 /* Line 1806 of yacc.c */ 7167 #line 15 35"parser.yy"7278 case 401: 7279 7280 /* Line 1806 of yacc.c */ 7281 #line 1549 "parser.yy" 7168 7282 { (yyval.en) = (yyvsp[(2) - (2)].en); } 7169 7283 break; 7170 7284 7171 case 399:7172 7173 /* Line 1806 of yacc.c */ 7174 #line 15 42"parser.yy"7285 case 402: 7286 7287 /* Line 1806 of yacc.c */ 7288 #line 1556 "parser.yy" 7175 7289 { (yyval.decl) = 0; } 7176 7290 break; 7177 7291 7178 case 403: 7179 7180 /* Line 1806 of yacc.c */ 7181 #line 1550 "parser.yy" 7182 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7183 break; 7184 7185 case 404: 7186 7187 /* Line 1806 of yacc.c */ 7188 #line 1552 "parser.yy" 7189 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); } 7190 break; 7191 7192 case 405: 7193 7194 /* Line 1806 of yacc.c */ 7195 #line 1554 "parser.yy" 7196 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); } 7197 break; 7198 7199 case 407: 7200 7201 /* Line 1806 of yacc.c */ 7202 #line 1562 "parser.yy" 7203 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7204 break; 7205 7206 case 408: 7292 case 406: 7207 7293 7208 7294 /* Line 1806 of yacc.c */ … … 7211 7297 break; 7212 7298 7213 case 40 9:7299 case 407: 7214 7300 7215 7301 /* Line 1806 of yacc.c */ 7216 7302 #line 1566 "parser.yy" 7303 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); } 7304 break; 7305 7306 case 408: 7307 7308 /* Line 1806 of yacc.c */ 7309 #line 1568 "parser.yy" 7310 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); } 7311 break; 7312 7313 case 410: 7314 7315 /* Line 1806 of yacc.c */ 7316 #line 1576 "parser.yy" 7317 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7318 break; 7319 7320 case 411: 7321 7322 /* Line 1806 of yacc.c */ 7323 #line 1578 "parser.yy" 7324 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7325 break; 7326 7327 case 412: 7328 7329 /* Line 1806 of yacc.c */ 7330 #line 1580 "parser.yy" 7217 7331 { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); } 7218 7332 break; 7219 7333 7220 case 41 1:7221 7222 /* Line 1806 of yacc.c */ 7223 #line 15 72"parser.yy"7334 case 414: 7335 7336 /* Line 1806 of yacc.c */ 7337 #line 1586 "parser.yy" 7224 7338 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7225 7339 break; 7226 7340 7227 case 41 2:7228 7229 /* Line 1806 of yacc.c */ 7230 #line 15 77"parser.yy"7341 case 415: 7342 7343 /* Line 1806 of yacc.c */ 7344 #line 1591 "parser.yy" 7231 7345 { (yyval.decl) = 0; } 7232 7346 break; 7233 7347 7234 case 41 5:7235 7236 /* Line 1806 of yacc.c */ 7237 #line 15 84"parser.yy"7348 case 418: 7349 7350 /* Line 1806 of yacc.c */ 7351 #line 1598 "parser.yy" 7238 7352 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); } 7239 7353 break; 7240 7354 7241 case 4 18:7242 7243 /* Line 1806 of yacc.c */ 7244 #line 1 591"parser.yy"7355 case 421: 7356 7357 /* Line 1806 of yacc.c */ 7358 #line 1605 "parser.yy" 7245 7359 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7246 7360 break; 7247 7361 7248 case 4 19:7249 7250 /* Line 1806 of yacc.c */ 7251 #line 1 593"parser.yy"7362 case 422: 7363 7364 /* Line 1806 of yacc.c */ 7365 #line 1607 "parser.yy" 7252 7366 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7253 7367 break; 7254 7368 7255 case 42 1:7256 7257 /* Line 1806 of yacc.c */ 7258 #line 16 02"parser.yy"7369 case 424: 7370 7371 /* Line 1806 of yacc.c */ 7372 #line 1616 "parser.yy" 7259 7373 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); } 7260 7374 break; 7261 7375 7262 case 42 2:7263 7264 /* Line 1806 of yacc.c */ 7265 #line 16 05"parser.yy"7376 case 425: 7377 7378 /* Line 1806 of yacc.c */ 7379 #line 1619 "parser.yy" 7266 7380 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); } 7267 7381 break; 7268 7382 7269 case 42 3:7270 7271 /* Line 1806 of yacc.c */ 7272 #line 16 07"parser.yy"7383 case 426: 7384 7385 /* Line 1806 of yacc.c */ 7386 #line 1621 "parser.yy" 7273 7387 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); } 7274 7388 break; 7275 7389 7276 case 4 28:7277 7278 /* Line 1806 of yacc.c */ 7279 #line 16 17"parser.yy"7390 case 431: 7391 7392 /* Line 1806 of yacc.c */ 7393 #line 1631 "parser.yy" 7280 7394 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 7281 7395 break; 7282 7396 7283 case 43 0:7284 7285 /* Line 1806 of yacc.c */ 7286 #line 16 23"parser.yy"7397 case 433: 7398 7399 /* Line 1806 of yacc.c */ 7400 #line 1637 "parser.yy" 7287 7401 { 7288 7402 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7291 7405 break; 7292 7406 7293 case 43 1:7294 7295 /* Line 1806 of yacc.c */ 7296 #line 16 28"parser.yy"7407 case 434: 7408 7409 /* Line 1806 of yacc.c */ 7410 #line 1642 "parser.yy" 7297 7411 { 7298 7412 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7301 7415 break; 7302 7416 7303 case 43 3:7304 7305 /* Line 1806 of yacc.c */ 7306 #line 16 37"parser.yy"7417 case 436: 7418 7419 /* Line 1806 of yacc.c */ 7420 #line 1651 "parser.yy" 7307 7421 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); } 7308 7422 break; 7309 7423 7310 case 43 4:7311 7312 /* Line 1806 of yacc.c */ 7313 #line 16 46"parser.yy"7424 case 437: 7425 7426 /* Line 1806 of yacc.c */ 7427 #line 1660 "parser.yy" 7314 7428 { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); } 7315 7429 break; 7316 7430 7317 case 43 5:7318 7319 /* Line 1806 of yacc.c */ 7320 #line 16 48"parser.yy"7431 case 438: 7432 7433 /* Line 1806 of yacc.c */ 7434 #line 1662 "parser.yy" 7321 7435 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); } 7322 7436 break; 7323 7437 7324 case 4 47:7325 7326 /* Line 1806 of yacc.c */ 7327 #line 16 73"parser.yy"7438 case 450: 7439 7440 /* Line 1806 of yacc.c */ 7441 #line 1687 "parser.yy" 7328 7442 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); } 7329 7443 break; 7330 7444 7331 case 45 1:7332 7333 /* Line 1806 of yacc.c */ 7334 #line 16 81"parser.yy"7445 case 454: 7446 7447 /* Line 1806 of yacc.c */ 7448 #line 1695 "parser.yy" 7335 7449 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); } 7336 7450 break; 7337 7451 7338 case 452:7339 7340 /* Line 1806 of yacc.c */7341 #line 1686 "parser.yy"7342 { (yyval.in) = 0; }7343 break;7344 7345 case 453:7346 7347 /* Line 1806 of yacc.c */7348 #line 1688 "parser.yy"7349 { (yyval.in) = (yyvsp[(2) - (2)].in); }7350 break;7351 7352 case 454:7353 7354 /* Line 1806 of yacc.c */7355 #line 1690 "parser.yy"7356 { (yyval.in) = (yyvsp[(2) - (2)].in); }7357 break;7358 7359 7452 case 455: 7360 7361 /* Line 1806 of yacc.c */7362 #line 1694 "parser.yy"7363 { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }7364 break;7365 7366 case 456:7367 7368 /* Line 1806 of yacc.c */7369 #line 1695 "parser.yy"7370 { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }7371 break;7372 7373 case 457:7374 7453 7375 7454 /* Line 1806 of yacc.c */ … … 7378 7457 break; 7379 7458 7459 case 456: 7460 7461 /* Line 1806 of yacc.c */ 7462 #line 1702 "parser.yy" 7463 { (yyval.in) = (yyvsp[(2) - (2)].in); } 7464 break; 7465 7466 case 457: 7467 7468 /* Line 1806 of yacc.c */ 7469 #line 1704 "parser.yy" 7470 { (yyval.in) = (yyvsp[(2) - (2)].in); } 7471 break; 7472 7473 case 458: 7474 7475 /* Line 1806 of yacc.c */ 7476 #line 1708 "parser.yy" 7477 { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); } 7478 break; 7479 7380 7480 case 459: 7381 7481 7382 7482 /* Line 1806 of yacc.c */ 7383 #line 1702 "parser.yy" 7483 #line 1709 "parser.yy" 7484 { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); } 7485 break; 7486 7487 case 460: 7488 7489 /* Line 1806 of yacc.c */ 7490 #line 1714 "parser.yy" 7491 { (yyval.in) = 0; } 7492 break; 7493 7494 case 462: 7495 7496 /* Line 1806 of yacc.c */ 7497 #line 1716 "parser.yy" 7384 7498 { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); } 7385 7499 break; 7386 7500 7387 case 46 0:7388 7389 /* Line 1806 of yacc.c */ 7390 #line 17 03"parser.yy"7501 case 463: 7502 7503 /* Line 1806 of yacc.c */ 7504 #line 1717 "parser.yy" 7391 7505 { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); } 7392 7506 break; 7393 7507 7394 case 46 1:7395 7396 /* Line 1806 of yacc.c */ 7397 #line 17 05"parser.yy"7508 case 464: 7509 7510 /* Line 1806 of yacc.c */ 7511 #line 1719 "parser.yy" 7398 7512 { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); } 7399 7513 break; 7400 7514 7401 case 46 3:7402 7403 /* Line 1806 of yacc.c */ 7404 #line 17 21"parser.yy"7515 case 466: 7516 7517 /* Line 1806 of yacc.c */ 7518 #line 1735 "parser.yy" 7405 7519 { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); } 7406 7520 break; 7407 7521 7408 case 46 5:7409 7410 /* Line 1806 of yacc.c */ 7411 #line 17 27"parser.yy"7522 case 468: 7523 7524 /* Line 1806 of yacc.c */ 7525 #line 1741 "parser.yy" 7412 7526 { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); } 7413 7527 break; 7414 7528 7415 case 46 6:7416 7417 /* Line 1806 of yacc.c */ 7418 #line 17 35"parser.yy"7529 case 469: 7530 7531 /* Line 1806 of yacc.c */ 7532 #line 1749 "parser.yy" 7419 7533 { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); } 7420 7534 break; 7421 7535 7422 case 4 67:7423 7424 /* Line 1806 of yacc.c */ 7425 #line 17 37"parser.yy"7536 case 470: 7537 7538 /* Line 1806 of yacc.c */ 7539 #line 1751 "parser.yy" 7426 7540 { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); } 7427 7541 break; 7428 7542 7429 case 4 68:7430 7431 /* Line 1806 of yacc.c */ 7432 #line 17 40"parser.yy"7543 case 471: 7544 7545 /* Line 1806 of yacc.c */ 7546 #line 1754 "parser.yy" 7433 7547 { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); } 7434 7548 break; 7435 7549 7436 case 4 69:7437 7438 /* Line 1806 of yacc.c */ 7439 #line 17 42"parser.yy"7550 case 472: 7551 7552 /* Line 1806 of yacc.c */ 7553 #line 1756 "parser.yy" 7440 7554 { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); } 7441 7555 break; 7442 7556 7443 case 47 0:7444 7445 /* Line 1806 of yacc.c */ 7446 #line 17 44"parser.yy"7557 case 473: 7558 7559 /* Line 1806 of yacc.c */ 7560 #line 1758 "parser.yy" 7447 7561 { (yyval.en) = new DesignatorNode( new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ), true ); } 7448 7562 break; 7449 7563 7450 case 47 1:7451 7452 /* Line 1806 of yacc.c */ 7453 #line 17 46"parser.yy"7564 case 474: 7565 7566 /* Line 1806 of yacc.c */ 7567 #line 1760 "parser.yy" 7454 7568 { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); } 7455 7569 break; 7456 7570 7457 case 47 3:7458 7459 /* Line 1806 of yacc.c */ 7460 #line 17 70"parser.yy"7571 case 476: 7572 7573 /* Line 1806 of yacc.c */ 7574 #line 1784 "parser.yy" 7461 7575 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 7462 7576 break; 7463 7577 7464 case 47 4:7465 7466 /* Line 1806 of yacc.c */ 7467 #line 17 72"parser.yy"7578 case 477: 7579 7580 /* Line 1806 of yacc.c */ 7581 #line 1786 "parser.yy" 7468 7582 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 7469 7583 break; 7470 7584 7471 case 47 5:7472 7473 /* Line 1806 of yacc.c */ 7474 #line 17 74"parser.yy"7585 case 478: 7586 7587 /* Line 1806 of yacc.c */ 7588 #line 1788 "parser.yy" 7475 7589 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); } 7476 7590 break; 7477 7591 7478 case 4 77:7479 7480 /* Line 1806 of yacc.c */ 7481 #line 17 80"parser.yy"7592 case 480: 7593 7594 /* Line 1806 of yacc.c */ 7595 #line 1794 "parser.yy" 7482 7596 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 7483 7597 break; 7484 7598 7485 case 4 78:7486 7487 /* Line 1806 of yacc.c */ 7488 #line 17 82"parser.yy"7599 case 481: 7600 7601 /* Line 1806 of yacc.c */ 7602 #line 1796 "parser.yy" 7489 7603 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 7490 7604 break; 7491 7605 7492 case 4 79:7493 7494 /* Line 1806 of yacc.c */ 7495 #line 1 787"parser.yy"7606 case 482: 7607 7608 /* Line 1806 of yacc.c */ 7609 #line 1801 "parser.yy" 7496 7610 { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); } 7497 7611 break; 7498 7612 7499 case 48 1:7500 7501 /* Line 1806 of yacc.c */ 7502 #line 1 793"parser.yy"7613 case 484: 7614 7615 /* Line 1806 of yacc.c */ 7616 #line 1807 "parser.yy" 7503 7617 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); } 7504 7618 break; 7505 7619 7506 case 48 2:7507 7508 /* Line 1806 of yacc.c */ 7509 #line 1 798"parser.yy"7620 case 485: 7621 7622 /* Line 1806 of yacc.c */ 7623 #line 1812 "parser.yy" 7510 7624 { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); } 7511 7625 break; 7512 7626 7513 case 48 3:7514 7515 /* Line 1806 of yacc.c */ 7516 #line 18 00"parser.yy"7627 case 486: 7628 7629 /* Line 1806 of yacc.c */ 7630 #line 1814 "parser.yy" 7517 7631 { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); } 7518 7632 break; 7519 7633 7520 case 48 5:7521 7522 /* Line 1806 of yacc.c */ 7523 #line 18 06"parser.yy"7634 case 488: 7635 7636 /* Line 1806 of yacc.c */ 7637 #line 1820 "parser.yy" 7524 7638 { (yyval.tclass) = DeclarationNode::Type; } 7525 7639 break; 7526 7640 7527 case 48 6:7528 7529 /* Line 1806 of yacc.c */ 7530 #line 18 08"parser.yy"7641 case 489: 7642 7643 /* Line 1806 of yacc.c */ 7644 #line 1822 "parser.yy" 7531 7645 { (yyval.tclass) = DeclarationNode::Ftype; } 7532 7646 break; 7533 7647 7534 case 4 87:7535 7536 /* Line 1806 of yacc.c */ 7537 #line 18 10"parser.yy"7648 case 490: 7649 7650 /* Line 1806 of yacc.c */ 7651 #line 1824 "parser.yy" 7538 7652 { (yyval.tclass) = DeclarationNode::Dtype; } 7539 7653 break; 7540 7654 7541 case 488:7542 7543 /* Line 1806 of yacc.c */7544 #line 1815 "parser.yy"7545 { (yyval.decl) = 0; }7546 break;7547 7548 case 489:7549 7550 /* Line 1806 of yacc.c */7551 #line 1817 "parser.yy"7552 { (yyval.decl) = (yyvsp[(1) - (2)].decl) == 0 ? (yyvsp[(2) - (2)].decl) : (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }7553 break;7554 7555 case 490:7556 7557 /* Line 1806 of yacc.c */7558 #line 1822 "parser.yy"7559 {7560 typedefTable.openContext( *(yyvsp[(2) - (5)].tok) );7561 (yyval.decl) = DeclarationNode::newContextUse( (yyvsp[(2) - (5)].tok), (yyvsp[(4) - (5)].en) );7562 }7563 break;7564 7565 7655 case 491: 7566 7567 /* Line 1806 of yacc.c */7568 #line 1827 "parser.yy"7569 { (yyval.decl) = (yyvsp[(4) - (5)].decl); }7570 break;7571 7572 case 492:7573 7656 7574 7657 /* Line 1806 of yacc.c */ … … 7577 7660 break; 7578 7661 7662 case 492: 7663 7664 /* Line 1806 of yacc.c */ 7665 #line 1831 "parser.yy" 7666 { (yyval.decl) = (yyvsp[(1) - (2)].decl) == 0 ? (yyvsp[(2) - (2)].decl) : (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); } 7667 break; 7668 7579 7669 case 493: 7580 7670 7581 7671 /* Line 1806 of yacc.c */ 7582 #line 1834 "parser.yy" 7672 #line 1836 "parser.yy" 7673 { 7674 typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) ); 7675 (yyval.decl) = DeclarationNode::newTraitUse( (yyvsp[(2) - (5)].tok), (yyvsp[(4) - (5)].en) ); 7676 } 7677 break; 7678 7679 case 494: 7680 7681 /* Line 1806 of yacc.c */ 7682 #line 1841 "parser.yy" 7683 { (yyval.decl) = (yyvsp[(4) - (5)].decl); } 7684 break; 7685 7686 case 495: 7687 7688 /* Line 1806 of yacc.c */ 7689 #line 1843 "parser.yy" 7690 { (yyval.decl) = 0; } 7691 break; 7692 7693 case 496: 7694 7695 /* Line 1806 of yacc.c */ 7696 #line 1848 "parser.yy" 7583 7697 { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); } 7584 7698 break; 7585 7699 7586 case 49 5:7587 7588 /* Line 1806 of yacc.c */ 7589 #line 18 37"parser.yy"7700 case 498: 7701 7702 /* Line 1806 of yacc.c */ 7703 #line 1851 "parser.yy" 7590 7704 { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); } 7591 7705 break; 7592 7706 7593 case 49 6:7594 7595 /* Line 1806 of yacc.c */ 7596 #line 18 39"parser.yy"7707 case 499: 7708 7709 /* Line 1806 of yacc.c */ 7710 #line 1853 "parser.yy" 7597 7711 { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); } 7598 7712 break; 7599 7713 7600 case 497:7601 7602 /* Line 1806 of yacc.c */ 7603 #line 18 44"parser.yy"7714 case 500: 7715 7716 /* Line 1806 of yacc.c */ 7717 #line 1858 "parser.yy" 7604 7718 { (yyval.decl) = (yyvsp[(2) - (2)].decl); } 7605 7719 break; 7606 7720 7607 case 498:7608 7609 /* Line 1806 of yacc.c */ 7610 #line 18 46"parser.yy"7721 case 501: 7722 7723 /* Line 1806 of yacc.c */ 7724 #line 1860 "parser.yy" 7611 7725 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); } 7612 7726 break; 7613 7727 7614 case 499:7615 7616 /* Line 1806 of yacc.c */ 7617 #line 18 48"parser.yy"7728 case 502: 7729 7730 /* Line 1806 of yacc.c */ 7731 #line 1862 "parser.yy" 7618 7732 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); } 7619 7733 break; 7620 7734 7621 case 50 0:7622 7623 /* Line 1806 of yacc.c */ 7624 #line 18 53"parser.yy"7735 case 503: 7736 7737 /* Line 1806 of yacc.c */ 7738 #line 1867 "parser.yy" 7625 7739 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); } 7626 7740 break; 7627 7741 7628 case 50 1:7629 7630 /* Line 1806 of yacc.c */ 7631 #line 18 55"parser.yy"7742 case 504: 7743 7744 /* Line 1806 of yacc.c */ 7745 #line 1869 "parser.yy" 7632 7746 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); } 7633 7747 break; 7634 7748 7635 case 50 2:7636 7637 /* Line 1806 of yacc.c */ 7638 #line 18 60"parser.yy"7749 case 505: 7750 7751 /* Line 1806 of yacc.c */ 7752 #line 1874 "parser.yy" 7639 7753 { 7640 7754 typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD ); … … 7643 7757 break; 7644 7758 7645 case 50 3:7646 7647 /* Line 1806 of yacc.c */ 7648 #line 18 65"parser.yy"7759 case 506: 7760 7761 /* Line 1806 of yacc.c */ 7762 #line 1879 "parser.yy" 7649 7763 { 7650 7764 typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG ); … … 7653 7767 break; 7654 7768 7655 case 50 4:7656 7657 /* Line 1806 of yacc.c */ 7658 #line 18 73"parser.yy"7769 case 507: 7770 7771 /* Line 1806 of yacc.c */ 7772 #line 1887 "parser.yy" 7659 7773 { 7660 7774 typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID ); 7661 (yyval.decl) = DeclarationNode::new Context( (yyvsp[(2) - (9)].tok), (yyvsp[(5) - (9)].decl), 0 );7775 (yyval.decl) = DeclarationNode::newTrait( (yyvsp[(2) - (9)].tok), (yyvsp[(5) - (9)].decl), 0 ); 7662 7776 } 7663 7777 break; 7664 7778 7665 case 50 5:7666 7667 /* Line 1806 of yacc.c */ 7668 #line 18 78"parser.yy"7779 case 508: 7780 7781 /* Line 1806 of yacc.c */ 7782 #line 1892 "parser.yy" 7669 7783 { 7670 typedefTable.enter Context( *(yyvsp[(2) - (8)].tok) );7784 typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) ); 7671 7785 typedefTable.enterScope(); 7672 7786 } 7673 7787 break; 7674 7788 7675 case 50 6:7676 7677 /* Line 1806 of yacc.c */ 7678 #line 18 83"parser.yy"7789 case 509: 7790 7791 /* Line 1806 of yacc.c */ 7792 #line 1897 "parser.yy" 7679 7793 { 7680 typedefTable.leave Context();7794 typedefTable.leaveTrait(); 7681 7795 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) );7796 (yyval.decl) = DeclarationNode::newTrait( (yyvsp[(2) - (11)].tok), (yyvsp[(5) - (11)].decl), (yyvsp[(10) - (11)].decl) ); 7683 7797 } 7684 7798 break; 7685 7799 7686 case 5 08:7687 7688 /* Line 1806 of yacc.c */ 7689 #line 1 893"parser.yy"7800 case 511: 7801 7802 /* Line 1806 of yacc.c */ 7803 #line 1907 "parser.yy" 7690 7804 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); } 7691 7805 break; 7692 7806 7693 case 51 1:7694 7695 /* Line 1806 of yacc.c */ 7696 #line 19 03"parser.yy"7807 case 514: 7808 7809 /* Line 1806 of yacc.c */ 7810 #line 1917 "parser.yy" 7697 7811 { 7698 7812 typedefTable.addToEnclosingScope2( TypedefTable::ID ); … … 7701 7815 break; 7702 7816 7703 case 51 2:7704 7705 /* Line 1806 of yacc.c */ 7706 #line 19 08"parser.yy"7817 case 515: 7818 7819 /* Line 1806 of yacc.c */ 7820 #line 1922 "parser.yy" 7707 7821 { 7708 7822 typedefTable.addToEnclosingScope2( TypedefTable::ID ); … … 7711 7825 break; 7712 7826 7713 case 51 3:7714 7715 /* Line 1806 of yacc.c */ 7716 #line 19 13"parser.yy"7827 case 516: 7828 7829 /* Line 1806 of yacc.c */ 7830 #line 1927 "parser.yy" 7717 7831 { 7718 7832 typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID ); … … 7721 7835 break; 7722 7836 7723 case 51 4:7724 7725 /* Line 1806 of yacc.c */ 7726 #line 19 21"parser.yy"7837 case 517: 7838 7839 /* Line 1806 of yacc.c */ 7840 #line 1935 "parser.yy" 7727 7841 { 7728 7842 typedefTable.addToEnclosingScope2( TypedefTable::ID ); … … 7731 7845 break; 7732 7846 7733 case 51 5:7734 7735 /* Line 1806 of yacc.c */ 7736 #line 19 26"parser.yy"7847 case 518: 7848 7849 /* Line 1806 of yacc.c */ 7850 #line 1940 "parser.yy" 7737 7851 { 7738 7852 typedefTable.addToEnclosingScope2( TypedefTable::ID ); … … 7741 7855 break; 7742 7856 7743 case 51 6:7744 7745 /* Line 1806 of yacc.c */ 7746 #line 19 36"parser.yy"7857 case 519: 7858 7859 /* Line 1806 of yacc.c */ 7860 #line 1950 "parser.yy" 7747 7861 {} 7748 7862 break; 7749 7863 7750 case 5 17:7751 7752 /* Line 1806 of yacc.c */ 7753 #line 19 38"parser.yy"7864 case 520: 7865 7866 /* Line 1806 of yacc.c */ 7867 #line 1952 "parser.yy" 7754 7868 { 7755 7869 if ( theTree ) { … … 7761 7875 break; 7762 7876 7763 case 5 19:7764 7765 /* Line 1806 of yacc.c */ 7766 #line 19 50"parser.yy"7877 case 522: 7878 7879 /* Line 1806 of yacc.c */ 7880 #line 1964 "parser.yy" 7767 7881 { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); } 7768 7882 break; 7769 7883 7770 case 52 0:7771 7772 /* Line 1806 of yacc.c */ 7773 #line 19 55"parser.yy"7884 case 523: 7885 7886 /* Line 1806 of yacc.c */ 7887 #line 1969 "parser.yy" 7774 7888 { (yyval.decl) = 0; } 7775 7889 break; 7776 7890 7777 case 52 4:7778 7779 /* Line 1806 of yacc.c */ 7780 #line 19 63"parser.yy"7891 case 527: 7892 7893 /* Line 1806 of yacc.c */ 7894 #line 1977 "parser.yy" 7781 7895 {} 7782 7896 break; 7783 7897 7784 case 52 5:7785 7786 /* Line 1806 of yacc.c */ 7787 #line 19 65"parser.yy"7898 case 528: 7899 7900 /* Line 1806 of yacc.c */ 7901 #line 1979 "parser.yy" 7788 7902 { 7789 7903 linkageStack.push( linkage ); … … 7792 7906 break; 7793 7907 7794 case 52 6:7795 7796 /* Line 1806 of yacc.c */ 7797 #line 19 70"parser.yy"7908 case 529: 7909 7910 /* Line 1806 of yacc.c */ 7911 #line 1984 "parser.yy" 7798 7912 { 7799 7913 linkage = linkageStack.top(); … … 7803 7917 break; 7804 7918 7805 case 5 27:7806 7807 /* Line 1806 of yacc.c */ 7808 #line 19 76"parser.yy"7919 case 530: 7920 7921 /* Line 1806 of yacc.c */ 7922 #line 1990 "parser.yy" 7809 7923 { (yyval.decl) = (yyvsp[(2) - (2)].decl); } 7810 7924 break; 7811 7925 7812 case 5 29:7813 7814 /* Line 1806 of yacc.c */ 7815 #line 1986"parser.yy"7926 case 532: 7927 7928 /* Line 1806 of yacc.c */ 7929 #line 2000 "parser.yy" 7816 7930 { 7817 7931 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7821 7935 break; 7822 7936 7823 case 53 0:7824 7825 /* Line 1806 of yacc.c */ 7826 #line 1992"parser.yy"7937 case 533: 7938 7939 /* Line 1806 of yacc.c */ 7940 #line 2006 "parser.yy" 7827 7941 { 7828 7942 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7832 7946 break; 7833 7947 7834 case 53 1:7835 7836 /* Line 1806 of yacc.c */ 7837 #line 20 01"parser.yy"7948 case 534: 7949 7950 /* Line 1806 of yacc.c */ 7951 #line 2015 "parser.yy" 7838 7952 { 7839 7953 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7843 7957 break; 7844 7958 7845 case 53 2:7846 7847 /* Line 1806 of yacc.c */ 7848 #line 20 07"parser.yy"7959 case 535: 7960 7961 /* Line 1806 of yacc.c */ 7962 #line 2021 "parser.yy" 7849 7963 { 7850 7964 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7854 7968 break; 7855 7969 7856 case 53 3:7857 7858 /* Line 1806 of yacc.c */ 7859 #line 20 13"parser.yy"7970 case 536: 7971 7972 /* Line 1806 of yacc.c */ 7973 #line 2027 "parser.yy" 7860 7974 { 7861 7975 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7865 7979 break; 7866 7980 7867 case 53 4:7868 7869 /* Line 1806 of yacc.c */ 7870 #line 20 19"parser.yy"7981 case 537: 7982 7983 /* Line 1806 of yacc.c */ 7984 #line 2033 "parser.yy" 7871 7985 { 7872 7986 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7876 7990 break; 7877 7991 7878 case 53 5:7879 7880 /* Line 1806 of yacc.c */ 7881 #line 20 25"parser.yy"7992 case 538: 7993 7994 /* Line 1806 of yacc.c */ 7995 #line 2039 "parser.yy" 7882 7996 { 7883 7997 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7887 8001 break; 7888 8002 7889 case 53 6:7890 7891 /* Line 1806 of yacc.c */ 7892 #line 20 33"parser.yy"8003 case 539: 8004 8005 /* Line 1806 of yacc.c */ 8006 #line 2047 "parser.yy" 7893 8007 { 7894 8008 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7898 8012 break; 7899 8013 7900 case 5 37:7901 7902 /* Line 1806 of yacc.c */ 7903 #line 20 39"parser.yy"8014 case 540: 8015 8016 /* Line 1806 of yacc.c */ 8017 #line 2053 "parser.yy" 7904 8018 { 7905 8019 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7909 8023 break; 7910 8024 7911 case 5 38:7912 7913 /* Line 1806 of yacc.c */ 7914 #line 20 47"parser.yy"8025 case 541: 8026 8027 /* Line 1806 of yacc.c */ 8028 #line 2061 "parser.yy" 7915 8029 { 7916 8030 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7920 8034 break; 7921 8035 7922 case 5 39:7923 7924 /* Line 1806 of yacc.c */ 7925 #line 20 53"parser.yy"8036 case 542: 8037 8038 /* Line 1806 of yacc.c */ 8039 #line 2067 "parser.yy" 7926 8040 { 7927 8041 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7931 8045 break; 7932 8046 7933 case 54 3:7934 7935 /* Line 1806 of yacc.c */ 7936 #line 20 68"parser.yy"8047 case 546: 8048 8049 /* Line 1806 of yacc.c */ 8050 #line 2082 "parser.yy" 7937 8051 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 7938 8052 break; 7939 8053 7940 case 54 6:7941 7942 /* Line 1806 of yacc.c */ 7943 #line 20 78"parser.yy"8054 case 549: 8055 8056 /* Line 1806 of yacc.c */ 8057 #line 2092 "parser.yy" 7944 8058 { (yyval.decl) = 0; } 7945 8059 break; 7946 8060 7947 case 5 49:7948 7949 /* Line 1806 of yacc.c */ 7950 #line 20 85"parser.yy"8061 case 552: 8062 8063 /* Line 1806 of yacc.c */ 8064 #line 2099 "parser.yy" 7951 8065 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 7952 8066 break; 7953 8067 7954 case 55 0:7955 7956 /* Line 1806 of yacc.c */ 7957 #line 2 091"parser.yy"8068 case 553: 8069 8070 /* Line 1806 of yacc.c */ 8071 #line 2105 "parser.yy" 7958 8072 { (yyval.decl) = 0; } 7959 8073 break; 7960 8074 7961 case 55 6:7962 7963 /* Line 1806 of yacc.c */ 7964 #line 21 06"parser.yy"8075 case 559: 8076 8077 /* Line 1806 of yacc.c */ 8078 #line 2120 "parser.yy" 7965 8079 {} 7966 8080 break; 7967 8081 7968 case 5 57:7969 7970 /* Line 1806 of yacc.c */ 7971 #line 21 07"parser.yy"8082 case 560: 8083 8084 /* Line 1806 of yacc.c */ 8085 #line 2121 "parser.yy" 7972 8086 {} 7973 8087 break; 7974 8088 7975 case 5 58:7976 7977 /* Line 1806 of yacc.c */ 7978 #line 21 08"parser.yy"8089 case 561: 8090 8091 /* Line 1806 of yacc.c */ 8092 #line 2122 "parser.yy" 7979 8093 {} 7980 8094 break; 7981 8095 7982 case 5 59:7983 7984 /* Line 1806 of yacc.c */ 7985 #line 21 09"parser.yy"8096 case 562: 8097 8098 /* Line 1806 of yacc.c */ 8099 #line 2123 "parser.yy" 7986 8100 {} 7987 8101 break; 7988 8102 7989 case 56 0:7990 7991 /* Line 1806 of yacc.c */ 7992 #line 21 44"parser.yy"8103 case 563: 8104 8105 /* Line 1806 of yacc.c */ 8106 #line 2158 "parser.yy" 7993 8107 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 7994 8108 break; 7995 8109 7996 case 56 2:7997 7998 /* Line 1806 of yacc.c */ 7999 #line 21 47"parser.yy"8110 case 565: 8111 8112 /* Line 1806 of yacc.c */ 8113 #line 2161 "parser.yy" 8000 8114 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8001 8115 break; 8002 8116 8003 case 56 3:8004 8005 /* Line 1806 of yacc.c */ 8006 #line 21 49"parser.yy"8117 case 566: 8118 8119 /* Line 1806 of yacc.c */ 8120 #line 2163 "parser.yy" 8007 8121 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8008 8122 break; 8009 8123 8010 case 56 4:8011 8012 /* Line 1806 of yacc.c */ 8013 #line 21 54"parser.yy"8124 case 567: 8125 8126 /* Line 1806 of yacc.c */ 8127 #line 2168 "parser.yy" 8014 8128 { 8015 8129 typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) ); … … 8018 8132 break; 8019 8133 8020 case 56 5:8021 8022 /* Line 1806 of yacc.c */ 8023 #line 21 59"parser.yy"8134 case 568: 8135 8136 /* Line 1806 of yacc.c */ 8137 #line 2173 "parser.yy" 8024 8138 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8025 8139 break; 8026 8140 8027 case 56 6:8028 8029 /* Line 1806 of yacc.c */ 8030 #line 21 64"parser.yy"8141 case 569: 8142 8143 /* Line 1806 of yacc.c */ 8144 #line 2178 "parser.yy" 8031 8145 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8032 8146 break; 8033 8147 8034 case 5 67:8035 8036 /* Line 1806 of yacc.c */ 8037 #line 21 66"parser.yy"8148 case 570: 8149 8150 /* Line 1806 of yacc.c */ 8151 #line 2180 "parser.yy" 8038 8152 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8039 8153 break; 8040 8154 8041 case 5 68:8042 8043 /* Line 1806 of yacc.c */ 8044 #line 21 68"parser.yy"8155 case 571: 8156 8157 /* Line 1806 of yacc.c */ 8158 #line 2182 "parser.yy" 8045 8159 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8046 8160 break; 8047 8161 8048 case 5 69:8049 8050 /* Line 1806 of yacc.c */ 8051 #line 21 73"parser.yy"8162 case 572: 8163 8164 /* Line 1806 of yacc.c */ 8165 #line 2187 "parser.yy" 8052 8166 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8053 8167 break; 8054 8168 8055 case 57 0:8056 8057 /* Line 1806 of yacc.c */ 8058 #line 21 75"parser.yy"8169 case 573: 8170 8171 /* Line 1806 of yacc.c */ 8172 #line 2189 "parser.yy" 8059 8173 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8060 8174 break; 8061 8175 8062 case 57 1:8063 8064 /* Line 1806 of yacc.c */ 8065 #line 21 77"parser.yy"8176 case 574: 8177 8178 /* Line 1806 of yacc.c */ 8179 #line 2191 "parser.yy" 8066 8180 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8067 8181 break; 8068 8182 8069 case 57 2:8070 8071 /* Line 1806 of yacc.c */ 8072 #line 21 79"parser.yy"8183 case 575: 8184 8185 /* Line 1806 of yacc.c */ 8186 #line 2193 "parser.yy" 8073 8187 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8074 8188 break; 8075 8189 8076 case 57 3:8077 8078 /* Line 1806 of yacc.c */ 8079 #line 21 84"parser.yy"8190 case 576: 8191 8192 /* Line 1806 of yacc.c */ 8193 #line 2198 "parser.yy" 8080 8194 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8081 8195 break; 8082 8196 8083 case 57 4:8084 8085 /* Line 1806 of yacc.c */ 8086 #line 2 186"parser.yy"8197 case 577: 8198 8199 /* Line 1806 of yacc.c */ 8200 #line 2200 "parser.yy" 8087 8201 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8088 8202 break; 8089 8203 8090 case 57 5:8091 8092 /* Line 1806 of yacc.c */ 8093 #line 2 196"parser.yy"8204 case 578: 8205 8206 /* Line 1806 of yacc.c */ 8207 #line 2210 "parser.yy" 8094 8208 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8095 8209 break; 8096 8210 8097 case 5 77:8098 8099 /* Line 1806 of yacc.c */ 8100 #line 2 199"parser.yy"8211 case 580: 8212 8213 /* Line 1806 of yacc.c */ 8214 #line 2213 "parser.yy" 8101 8215 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8102 8216 break; 8103 8217 8104 case 5 78:8105 8106 /* Line 1806 of yacc.c */ 8107 #line 22 04"parser.yy"8218 case 581: 8219 8220 /* Line 1806 of yacc.c */ 8221 #line 2218 "parser.yy" 8108 8222 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); } 8109 8223 break; 8110 8224 8111 case 5 79:8112 8113 /* Line 1806 of yacc.c */ 8114 #line 22 06"parser.yy"8225 case 582: 8226 8227 /* Line 1806 of yacc.c */ 8228 #line 2220 "parser.yy" 8115 8229 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8116 8230 break; 8117 8231 8118 case 58 0:8119 8120 /* Line 1806 of yacc.c */ 8121 #line 22 08"parser.yy"8232 case 583: 8233 8234 /* Line 1806 of yacc.c */ 8235 #line 2222 "parser.yy" 8122 8236 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8123 8237 break; 8124 8238 8125 case 58 1:8126 8127 /* Line 1806 of yacc.c */ 8128 #line 22 13"parser.yy"8239 case 584: 8240 8241 /* Line 1806 of yacc.c */ 8242 #line 2227 "parser.yy" 8129 8243 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8130 8244 break; 8131 8245 8132 case 58 2:8133 8134 /* Line 1806 of yacc.c */ 8135 #line 22 15"parser.yy"8246 case 585: 8247 8248 /* Line 1806 of yacc.c */ 8249 #line 2229 "parser.yy" 8136 8250 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8137 8251 break; 8138 8252 8139 case 58 3:8140 8141 /* Line 1806 of yacc.c */ 8142 #line 22 17"parser.yy"8253 case 586: 8254 8255 /* Line 1806 of yacc.c */ 8256 #line 2231 "parser.yy" 8143 8257 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8144 8258 break; 8145 8259 8146 case 58 4:8147 8148 /* Line 1806 of yacc.c */ 8149 #line 22 22"parser.yy"8260 case 587: 8261 8262 /* Line 1806 of yacc.c */ 8263 #line 2236 "parser.yy" 8150 8264 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8151 8265 break; 8152 8266 8153 case 58 5:8154 8155 /* Line 1806 of yacc.c */ 8156 #line 22 24"parser.yy"8267 case 588: 8268 8269 /* Line 1806 of yacc.c */ 8270 #line 2238 "parser.yy" 8157 8271 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8158 8272 break; 8159 8273 8160 case 58 6:8161 8162 /* Line 1806 of yacc.c */ 8163 #line 22 26"parser.yy"8274 case 589: 8275 8276 /* Line 1806 of yacc.c */ 8277 #line 2240 "parser.yy" 8164 8278 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8165 8279 break; 8166 8280 8167 case 59 0:8168 8169 /* Line 1806 of yacc.c */ 8170 #line 22 41"parser.yy"8281 case 593: 8282 8283 /* Line 1806 of yacc.c */ 8284 #line 2255 "parser.yy" 8171 8285 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); } 8172 8286 break; 8173 8287 8174 case 59 1:8175 8176 /* Line 1806 of yacc.c */ 8177 #line 22 43"parser.yy"8288 case 594: 8289 8290 /* Line 1806 of yacc.c */ 8291 #line 2257 "parser.yy" 8178 8292 { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); } 8179 8293 break; 8180 8294 8181 case 59 2:8182 8183 /* Line 1806 of yacc.c */ 8184 #line 22 45"parser.yy"8295 case 595: 8296 8297 /* Line 1806 of yacc.c */ 8298 #line 2259 "parser.yy" 8185 8299 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8186 8300 break; 8187 8301 8188 case 59 3:8189 8190 /* Line 1806 of yacc.c */ 8191 #line 22 50"parser.yy"8302 case 596: 8303 8304 /* Line 1806 of yacc.c */ 8305 #line 2264 "parser.yy" 8192 8306 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8193 8307 break; 8194 8308 8195 case 59 4:8196 8197 /* Line 1806 of yacc.c */ 8198 #line 22 52"parser.yy"8309 case 597: 8310 8311 /* Line 1806 of yacc.c */ 8312 #line 2266 "parser.yy" 8199 8313 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8200 8314 break; 8201 8315 8202 case 59 5:8203 8204 /* Line 1806 of yacc.c */ 8205 #line 22 54"parser.yy"8316 case 598: 8317 8318 /* Line 1806 of yacc.c */ 8319 #line 2268 "parser.yy" 8206 8320 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8207 8321 break; 8208 8322 8209 case 59 6:8210 8211 /* Line 1806 of yacc.c */ 8212 #line 22 59"parser.yy"8323 case 599: 8324 8325 /* Line 1806 of yacc.c */ 8326 #line 2273 "parser.yy" 8213 8327 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8214 8328 break; 8215 8329 8216 case 597:8217 8218 /* Line 1806 of yacc.c */ 8219 #line 22 61"parser.yy"8330 case 600: 8331 8332 /* Line 1806 of yacc.c */ 8333 #line 2275 "parser.yy" 8220 8334 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8221 8335 break; 8222 8336 8223 case 598:8224 8225 /* Line 1806 of yacc.c */ 8226 #line 22 63"parser.yy"8337 case 601: 8338 8339 /* Line 1806 of yacc.c */ 8340 #line 2277 "parser.yy" 8227 8341 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8228 8342 break; 8229 8343 8230 case 599:8231 8232 /* Line 1806 of yacc.c */ 8233 #line 22 78"parser.yy"8344 case 602: 8345 8346 /* Line 1806 of yacc.c */ 8347 #line 2292 "parser.yy" 8234 8348 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8235 8349 break; 8236 8350 8237 case 60 1:8238 8239 /* Line 1806 of yacc.c */ 8240 #line 22 81"parser.yy"8351 case 604: 8352 8353 /* Line 1806 of yacc.c */ 8354 #line 2295 "parser.yy" 8241 8355 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8242 8356 break; 8243 8357 8244 case 60 2:8245 8246 /* Line 1806 of yacc.c */ 8247 #line 22 83"parser.yy"8358 case 605: 8359 8360 /* Line 1806 of yacc.c */ 8361 #line 2297 "parser.yy" 8248 8362 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8249 8363 break; 8250 8364 8251 case 60 4:8252 8253 /* Line 1806 of yacc.c */ 8254 #line 2 289"parser.yy"8365 case 607: 8366 8367 /* Line 1806 of yacc.c */ 8368 #line 2303 "parser.yy" 8255 8369 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8256 8370 break; 8257 8371 8258 case 60 5:8259 8260 /* Line 1806 of yacc.c */ 8261 #line 2 294"parser.yy"8372 case 608: 8373 8374 /* Line 1806 of yacc.c */ 8375 #line 2308 "parser.yy" 8262 8376 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8263 8377 break; 8264 8378 8265 case 60 6:8266 8267 /* Line 1806 of yacc.c */ 8268 #line 2 296"parser.yy"8379 case 609: 8380 8381 /* Line 1806 of yacc.c */ 8382 #line 2310 "parser.yy" 8269 8383 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8270 8384 break; 8271 8385 8272 case 6 07:8273 8274 /* Line 1806 of yacc.c */ 8275 #line 2 298"parser.yy"8386 case 610: 8387 8388 /* Line 1806 of yacc.c */ 8389 #line 2312 "parser.yy" 8276 8390 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8277 8391 break; 8278 8392 8279 case 6 08:8280 8281 /* Line 1806 of yacc.c */ 8282 #line 23 03"parser.yy"8393 case 611: 8394 8395 /* Line 1806 of yacc.c */ 8396 #line 2317 "parser.yy" 8283 8397 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8284 8398 break; 8285 8399 8286 case 6 09:8287 8288 /* Line 1806 of yacc.c */ 8289 #line 23 05"parser.yy"8400 case 612: 8401 8402 /* Line 1806 of yacc.c */ 8403 #line 2319 "parser.yy" 8290 8404 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8291 8405 break; 8292 8406 8293 case 61 0:8294 8295 /* Line 1806 of yacc.c */ 8296 #line 23 07"parser.yy"8407 case 613: 8408 8409 /* Line 1806 of yacc.c */ 8410 #line 2321 "parser.yy" 8297 8411 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8298 8412 break; 8299 8413 8300 case 61 1:8301 8302 /* Line 1806 of yacc.c */ 8303 #line 23 09"parser.yy"8414 case 614: 8415 8416 /* Line 1806 of yacc.c */ 8417 #line 2323 "parser.yy" 8304 8418 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8305 8419 break; 8306 8420 8307 case 61 2:8308 8309 /* Line 1806 of yacc.c */ 8310 #line 23 14"parser.yy"8421 case 615: 8422 8423 /* Line 1806 of yacc.c */ 8424 #line 2328 "parser.yy" 8311 8425 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); } 8312 8426 break; 8313 8427 8314 case 61 3:8315 8316 /* Line 1806 of yacc.c */ 8317 #line 23 16"parser.yy"8428 case 616: 8429 8430 /* Line 1806 of yacc.c */ 8431 #line 2330 "parser.yy" 8318 8432 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8319 8433 break; 8320 8434 8321 case 61 4:8322 8323 /* Line 1806 of yacc.c */ 8324 #line 23 18"parser.yy"8435 case 617: 8436 8437 /* Line 1806 of yacc.c */ 8438 #line 2332 "parser.yy" 8325 8439 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8326 8440 break; 8327 8441 8328 case 61 5:8329 8330 /* Line 1806 of yacc.c */ 8331 #line 23 28"parser.yy"8442 case 618: 8443 8444 /* Line 1806 of yacc.c */ 8445 #line 2342 "parser.yy" 8332 8446 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8333 8447 break; 8334 8448 8335 case 6 17:8336 8337 /* Line 1806 of yacc.c */ 8338 #line 23 31"parser.yy"8449 case 620: 8450 8451 /* Line 1806 of yacc.c */ 8452 #line 2345 "parser.yy" 8339 8453 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8340 8454 break; 8341 8455 8342 case 6 18:8343 8344 /* Line 1806 of yacc.c */ 8345 #line 23 33"parser.yy"8456 case 621: 8457 8458 /* Line 1806 of yacc.c */ 8459 #line 2347 "parser.yy" 8346 8460 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8347 8461 break; 8348 8462 8349 case 6 19:8350 8351 /* Line 1806 of yacc.c */ 8352 #line 23 38"parser.yy"8463 case 622: 8464 8465 /* Line 1806 of yacc.c */ 8466 #line 2352 "parser.yy" 8353 8467 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8354 8468 break; 8355 8469 8356 case 62 0:8357 8358 /* Line 1806 of yacc.c */ 8359 #line 23 40"parser.yy"8470 case 623: 8471 8472 /* Line 1806 of yacc.c */ 8473 #line 2354 "parser.yy" 8360 8474 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8361 8475 break; 8362 8476 8363 case 62 1:8364 8365 /* Line 1806 of yacc.c */ 8366 #line 23 42"parser.yy"8477 case 624: 8478 8479 /* Line 1806 of yacc.c */ 8480 #line 2356 "parser.yy" 8367 8481 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8368 8482 break; 8369 8483 8370 case 62 2:8371 8372 /* Line 1806 of yacc.c */ 8373 #line 23 47"parser.yy"8484 case 625: 8485 8486 /* Line 1806 of yacc.c */ 8487 #line 2361 "parser.yy" 8374 8488 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8375 8489 break; 8376 8490 8377 case 62 3:8378 8379 /* Line 1806 of yacc.c */ 8380 #line 23 49"parser.yy"8491 case 626: 8492 8493 /* Line 1806 of yacc.c */ 8494 #line 2363 "parser.yy" 8381 8495 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8382 8496 break; 8383 8497 8384 case 62 4:8385 8386 /* Line 1806 of yacc.c */ 8387 #line 23 51"parser.yy"8498 case 627: 8499 8500 /* Line 1806 of yacc.c */ 8501 #line 2365 "parser.yy" 8388 8502 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8389 8503 break; 8390 8504 8391 case 62 5:8392 8393 /* Line 1806 of yacc.c */ 8394 #line 23 53"parser.yy"8505 case 628: 8506 8507 /* Line 1806 of yacc.c */ 8508 #line 2367 "parser.yy" 8395 8509 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8396 8510 break; 8397 8511 8398 case 62 6:8399 8400 /* Line 1806 of yacc.c */ 8401 #line 23 58"parser.yy"8512 case 629: 8513 8514 /* Line 1806 of yacc.c */ 8515 #line 2372 "parser.yy" 8402 8516 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); } 8403 8517 break; 8404 8518 8405 case 6 27:8406 8407 /* Line 1806 of yacc.c */ 8408 #line 23 60"parser.yy"8519 case 630: 8520 8521 /* Line 1806 of yacc.c */ 8522 #line 2374 "parser.yy" 8409 8523 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8410 8524 break; 8411 8525 8412 case 6 28:8413 8414 /* Line 1806 of yacc.c */ 8415 #line 23 62"parser.yy"8526 case 631: 8527 8528 /* Line 1806 of yacc.c */ 8529 #line 2376 "parser.yy" 8416 8530 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8417 8531 break; 8418 8532 8419 case 6 29:8420 8421 /* Line 1806 of yacc.c */ 8422 #line 2 393"parser.yy"8533 case 632: 8534 8535 /* Line 1806 of yacc.c */ 8536 #line 2407 "parser.yy" 8423 8537 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8424 8538 break; 8425 8539 8426 case 63 1:8427 8428 /* Line 1806 of yacc.c */ 8429 #line 2 396"parser.yy"8540 case 634: 8541 8542 /* Line 1806 of yacc.c */ 8543 #line 2410 "parser.yy" 8430 8544 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8431 8545 break; 8432 8546 8433 case 63 2:8434 8435 /* Line 1806 of yacc.c */ 8436 #line 2 398"parser.yy"8547 case 635: 8548 8549 /* Line 1806 of yacc.c */ 8550 #line 2412 "parser.yy" 8437 8551 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8438 8552 break; 8439 8553 8440 case 63 3:8441 8442 /* Line 1806 of yacc.c */ 8443 #line 24 03"parser.yy"8554 case 636: 8555 8556 /* Line 1806 of yacc.c */ 8557 #line 2417 "parser.yy" 8444 8558 { 8445 8559 typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) ); … … 8448 8562 break; 8449 8563 8450 case 63 4:8451 8452 /* Line 1806 of yacc.c */ 8453 #line 24 08"parser.yy"8564 case 637: 8565 8566 /* Line 1806 of yacc.c */ 8567 #line 2422 "parser.yy" 8454 8568 { 8455 8569 typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) ); … … 8458 8572 break; 8459 8573 8460 case 63 5:8461 8462 /* Line 1806 of yacc.c */ 8463 #line 24 16"parser.yy"8574 case 638: 8575 8576 /* Line 1806 of yacc.c */ 8577 #line 2430 "parser.yy" 8464 8578 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8465 8579 break; 8466 8580 8467 case 63 6:8468 8469 /* Line 1806 of yacc.c */ 8470 #line 24 18"parser.yy"8581 case 639: 8582 8583 /* Line 1806 of yacc.c */ 8584 #line 2432 "parser.yy" 8471 8585 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8472 8586 break; 8473 8587 8474 case 6 37:8475 8476 /* Line 1806 of yacc.c */ 8477 #line 24 20"parser.yy"8588 case 640: 8589 8590 /* Line 1806 of yacc.c */ 8591 #line 2434 "parser.yy" 8478 8592 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8479 8593 break; 8480 8594 8481 case 6 38:8482 8483 /* Line 1806 of yacc.c */ 8484 #line 24 25"parser.yy"8595 case 641: 8596 8597 /* Line 1806 of yacc.c */ 8598 #line 2439 "parser.yy" 8485 8599 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8486 8600 break; 8487 8601 8488 case 6 39:8489 8490 /* Line 1806 of yacc.c */ 8491 #line 24 27"parser.yy"8602 case 642: 8603 8604 /* Line 1806 of yacc.c */ 8605 #line 2441 "parser.yy" 8492 8606 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8493 8607 break; 8494 8608 8495 case 64 0:8496 8497 /* Line 1806 of yacc.c */ 8498 #line 24 32"parser.yy"8609 case 643: 8610 8611 /* Line 1806 of yacc.c */ 8612 #line 2446 "parser.yy" 8499 8613 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); } 8500 8614 break; 8501 8615 8502 case 64 1:8503 8504 /* Line 1806 of yacc.c */ 8505 #line 24 34"parser.yy"8616 case 644: 8617 8618 /* Line 1806 of yacc.c */ 8619 #line 2448 "parser.yy" 8506 8620 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8507 8621 break; 8508 8622 8509 case 64 3:8510 8511 /* Line 1806 of yacc.c */ 8512 #line 24 49"parser.yy"8623 case 646: 8624 8625 /* Line 1806 of yacc.c */ 8626 #line 2463 "parser.yy" 8513 8627 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8514 8628 break; 8515 8629 8516 case 64 4:8517 8518 /* Line 1806 of yacc.c */ 8519 #line 24 51"parser.yy"8630 case 647: 8631 8632 /* Line 1806 of yacc.c */ 8633 #line 2465 "parser.yy" 8520 8634 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8521 8635 break; 8522 8636 8523 case 64 5:8524 8525 /* Line 1806 of yacc.c */ 8526 #line 24 56"parser.yy"8637 case 648: 8638 8639 /* Line 1806 of yacc.c */ 8640 #line 2470 "parser.yy" 8527 8641 { (yyval.decl) = DeclarationNode::newPointer( 0 ); } 8528 8642 break; 8529 8643 8530 case 64 6:8531 8532 /* Line 1806 of yacc.c */ 8533 #line 24 58"parser.yy"8644 case 649: 8645 8646 /* Line 1806 of yacc.c */ 8647 #line 2472 "parser.yy" 8534 8648 { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); } 8535 8649 break; 8536 8650 8537 case 6 47:8538 8539 /* Line 1806 of yacc.c */ 8540 #line 24 60"parser.yy"8651 case 650: 8652 8653 /* Line 1806 of yacc.c */ 8654 #line 2474 "parser.yy" 8541 8655 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8542 8656 break; 8543 8657 8544 case 6 48:8545 8546 /* Line 1806 of yacc.c */ 8547 #line 24 62"parser.yy"8658 case 651: 8659 8660 /* Line 1806 of yacc.c */ 8661 #line 2476 "parser.yy" 8548 8662 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8549 8663 break; 8550 8664 8551 case 6 49:8552 8553 /* Line 1806 of yacc.c */ 8554 #line 24 64"parser.yy"8665 case 652: 8666 8667 /* Line 1806 of yacc.c */ 8668 #line 2478 "parser.yy" 8555 8669 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8556 8670 break; 8557 8671 8558 case 65 1:8559 8560 /* Line 1806 of yacc.c */ 8561 #line 24 70"parser.yy"8672 case 654: 8673 8674 /* Line 1806 of yacc.c */ 8675 #line 2484 "parser.yy" 8562 8676 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8563 8677 break; 8564 8678 8565 case 65 2:8566 8567 /* Line 1806 of yacc.c */ 8568 #line 24 72"parser.yy"8679 case 655: 8680 8681 /* Line 1806 of yacc.c */ 8682 #line 2486 "parser.yy" 8569 8683 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8570 8684 break; 8571 8685 8572 case 65 3:8573 8574 /* Line 1806 of yacc.c */ 8575 #line 24 74"parser.yy"8686 case 656: 8687 8688 /* Line 1806 of yacc.c */ 8689 #line 2488 "parser.yy" 8576 8690 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8577 8691 break; 8578 8692 8579 case 65 4:8580 8581 /* Line 1806 of yacc.c */ 8582 #line 24 79"parser.yy"8693 case 657: 8694 8695 /* Line 1806 of yacc.c */ 8696 #line 2493 "parser.yy" 8583 8697 { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); } 8584 8698 break; 8585 8699 8586 case 65 5:8587 8588 /* Line 1806 of yacc.c */ 8589 #line 24 81"parser.yy"8700 case 658: 8701 8702 /* Line 1806 of yacc.c */ 8703 #line 2495 "parser.yy" 8590 8704 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8591 8705 break; 8592 8706 8593 case 65 6:8594 8595 /* Line 1806 of yacc.c */ 8596 #line 24 83"parser.yy"8707 case 659: 8708 8709 /* Line 1806 of yacc.c */ 8710 #line 2497 "parser.yy" 8597 8711 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8598 8712 break; 8599 8713 8600 case 6 57:8601 8602 /* Line 1806 of yacc.c */ 8603 #line 2 489"parser.yy"8714 case 660: 8715 8716 /* Line 1806 of yacc.c */ 8717 #line 2503 "parser.yy" 8604 8718 { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); } 8605 8719 break; 8606 8720 8607 case 6 58:8608 8609 /* Line 1806 of yacc.c */ 8610 #line 2 491"parser.yy"8721 case 661: 8722 8723 /* Line 1806 of yacc.c */ 8724 #line 2505 "parser.yy" 8611 8725 { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); } 8612 8726 break; 8613 8727 8614 case 66 0:8615 8616 /* Line 1806 of yacc.c */ 8617 #line 2 497"parser.yy"8728 case 663: 8729 8730 /* Line 1806 of yacc.c */ 8731 #line 2511 "parser.yy" 8618 8732 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); } 8619 8733 break; 8620 8734 8621 case 66 1:8622 8623 /* Line 1806 of yacc.c */ 8624 #line 2 499"parser.yy"8735 case 664: 8736 8737 /* Line 1806 of yacc.c */ 8738 #line 2513 "parser.yy" 8625 8739 { (yyval.decl) = DeclarationNode::newVarArray( 0 ); } 8626 8740 break; 8627 8741 8628 case 66 2:8629 8630 /* Line 1806 of yacc.c */ 8631 #line 25 01"parser.yy"8742 case 665: 8743 8744 /* Line 1806 of yacc.c */ 8745 #line 2515 "parser.yy" 8632 8746 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); } 8633 8747 break; 8634 8748 8635 case 66 3:8636 8637 /* Line 1806 of yacc.c */ 8638 #line 25 03"parser.yy"8749 case 666: 8750 8751 /* Line 1806 of yacc.c */ 8752 #line 2517 "parser.yy" 8639 8753 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); } 8640 8754 break; 8641 8755 8642 case 66 5:8643 8644 /* Line 1806 of yacc.c */ 8645 #line 25 18"parser.yy"8756 case 668: 8757 8758 /* Line 1806 of yacc.c */ 8759 #line 2532 "parser.yy" 8646 8760 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8647 8761 break; 8648 8762 8649 case 66 6:8650 8651 /* Line 1806 of yacc.c */ 8652 #line 25 20"parser.yy"8763 case 669: 8764 8765 /* Line 1806 of yacc.c */ 8766 #line 2534 "parser.yy" 8653 8767 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8654 8768 break; 8655 8769 8656 case 6 67:8657 8658 /* Line 1806 of yacc.c */ 8659 #line 25 25"parser.yy"8770 case 670: 8771 8772 /* Line 1806 of yacc.c */ 8773 #line 2539 "parser.yy" 8660 8774 { (yyval.decl) = DeclarationNode::newPointer( 0 ); } 8661 8775 break; 8662 8776 8663 case 6 68:8664 8665 /* Line 1806 of yacc.c */ 8666 #line 25 27"parser.yy"8777 case 671: 8778 8779 /* Line 1806 of yacc.c */ 8780 #line 2541 "parser.yy" 8667 8781 { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); } 8668 8782 break; 8669 8783 8670 case 6 69:8671 8672 /* Line 1806 of yacc.c */ 8673 #line 25 29"parser.yy"8784 case 672: 8785 8786 /* Line 1806 of yacc.c */ 8787 #line 2543 "parser.yy" 8674 8788 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8675 8789 break; 8676 8790 8677 case 67 0:8678 8679 /* Line 1806 of yacc.c */ 8680 #line 25 31"parser.yy"8791 case 673: 8792 8793 /* Line 1806 of yacc.c */ 8794 #line 2545 "parser.yy" 8681 8795 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8682 8796 break; 8683 8797 8684 case 67 1:8685 8686 /* Line 1806 of yacc.c */ 8687 #line 25 33"parser.yy"8798 case 674: 8799 8800 /* Line 1806 of yacc.c */ 8801 #line 2547 "parser.yy" 8688 8802 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8689 8803 break; 8690 8804 8691 case 67 3:8692 8693 /* Line 1806 of yacc.c */ 8694 #line 25 39"parser.yy"8805 case 676: 8806 8807 /* Line 1806 of yacc.c */ 8808 #line 2553 "parser.yy" 8695 8809 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8696 8810 break; 8697 8811 8698 case 67 4:8699 8700 /* Line 1806 of yacc.c */ 8701 #line 25 41"parser.yy"8812 case 677: 8813 8814 /* Line 1806 of yacc.c */ 8815 #line 2555 "parser.yy" 8702 8816 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8703 8817 break; 8704 8818 8705 case 67 5:8706 8707 /* Line 1806 of yacc.c */ 8708 #line 25 43"parser.yy"8819 case 678: 8820 8821 /* Line 1806 of yacc.c */ 8822 #line 2557 "parser.yy" 8709 8823 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8710 8824 break; 8711 8825 8712 case 67 6:8713 8714 /* Line 1806 of yacc.c */ 8715 #line 25 48"parser.yy"8826 case 679: 8827 8828 /* Line 1806 of yacc.c */ 8829 #line 2562 "parser.yy" 8716 8830 { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); } 8717 8831 break; 8718 8832 8719 case 6 77:8720 8721 /* Line 1806 of yacc.c */ 8722 #line 25 50"parser.yy"8833 case 680: 8834 8835 /* Line 1806 of yacc.c */ 8836 #line 2564 "parser.yy" 8723 8837 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8724 8838 break; 8725 8839 8726 case 6 78:8727 8728 /* Line 1806 of yacc.c */ 8729 #line 25 52"parser.yy"8840 case 681: 8841 8842 /* Line 1806 of yacc.c */ 8843 #line 2566 "parser.yy" 8730 8844 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8731 8845 break; 8732 8846 8733 case 68 0:8734 8735 /* Line 1806 of yacc.c */ 8736 #line 25 59"parser.yy"8847 case 683: 8848 8849 /* Line 1806 of yacc.c */ 8850 #line 2573 "parser.yy" 8737 8851 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8738 8852 break; 8739 8853 8740 case 68 2:8741 8742 /* Line 1806 of yacc.c */ 8743 #line 25 70"parser.yy"8854 case 685: 8855 8856 /* Line 1806 of yacc.c */ 8857 #line 2584 "parser.yy" 8744 8858 { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); } 8745 8859 break; 8746 8860 8747 case 68 3:8748 8749 /* Line 1806 of yacc.c */ 8750 #line 25 73"parser.yy"8861 case 686: 8862 8863 /* Line 1806 of yacc.c */ 8864 #line 2587 "parser.yy" 8751 8865 { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); } 8752 8866 break; 8753 8867 8754 case 68 4:8755 8756 /* Line 1806 of yacc.c */ 8757 #line 25 75"parser.yy"8868 case 687: 8869 8870 /* Line 1806 of yacc.c */ 8871 #line 2589 "parser.yy" 8758 8872 { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); } 8759 8873 break; 8760 8874 8761 case 68 5:8762 8763 /* Line 1806 of yacc.c */ 8764 #line 25 78"parser.yy"8875 case 688: 8876 8877 /* Line 1806 of yacc.c */ 8878 #line 2592 "parser.yy" 8765 8879 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); } 8766 8880 break; 8767 8881 8768 case 68 6:8769 8770 /* Line 1806 of yacc.c */ 8771 #line 25 80"parser.yy"8882 case 689: 8883 8884 /* Line 1806 of yacc.c */ 8885 #line 2594 "parser.yy" 8772 8886 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); } 8773 8887 break; 8774 8888 8775 case 6 87:8776 8777 /* Line 1806 of yacc.c */ 8778 #line 25 82"parser.yy"8889 case 690: 8890 8891 /* Line 1806 of yacc.c */ 8892 #line 2596 "parser.yy" 8779 8893 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); } 8780 8894 break; 8781 8895 8782 case 6 89:8783 8784 /* Line 1806 of yacc.c */ 8785 #line 2 596"parser.yy"8896 case 692: 8897 8898 /* Line 1806 of yacc.c */ 8899 #line 2610 "parser.yy" 8786 8900 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8787 8901 break; 8788 8902 8789 case 69 0:8790 8791 /* Line 1806 of yacc.c */ 8792 #line 2 598"parser.yy"8903 case 693: 8904 8905 /* Line 1806 of yacc.c */ 8906 #line 2612 "parser.yy" 8793 8907 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8794 8908 break; 8795 8909 8796 case 69 1:8797 8798 /* Line 1806 of yacc.c */ 8799 #line 26 03"parser.yy"8910 case 694: 8911 8912 /* Line 1806 of yacc.c */ 8913 #line 2617 "parser.yy" 8800 8914 { (yyval.decl) = DeclarationNode::newPointer( 0 ); } 8801 8915 break; 8802 8916 8803 case 69 2:8804 8805 /* Line 1806 of yacc.c */ 8806 #line 26 05"parser.yy"8917 case 695: 8918 8919 /* Line 1806 of yacc.c */ 8920 #line 2619 "parser.yy" 8807 8921 { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); } 8808 8922 break; 8809 8923 8810 case 69 3:8811 8812 /* Line 1806 of yacc.c */ 8813 #line 26 07"parser.yy"8924 case 696: 8925 8926 /* Line 1806 of yacc.c */ 8927 #line 2621 "parser.yy" 8814 8928 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8815 8929 break; 8816 8930 8817 case 69 4:8818 8819 /* Line 1806 of yacc.c */ 8820 #line 26 09"parser.yy"8931 case 697: 8932 8933 /* Line 1806 of yacc.c */ 8934 #line 2623 "parser.yy" 8821 8935 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8822 8936 break; 8823 8937 8824 case 69 5:8825 8826 /* Line 1806 of yacc.c */ 8827 #line 26 11"parser.yy"8938 case 698: 8939 8940 /* Line 1806 of yacc.c */ 8941 #line 2625 "parser.yy" 8828 8942 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8829 8943 break; 8830 8944 8831 case 697:8832 8833 /* Line 1806 of yacc.c */ 8834 #line 26 17"parser.yy"8945 case 700: 8946 8947 /* Line 1806 of yacc.c */ 8948 #line 2631 "parser.yy" 8835 8949 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8836 8950 break; 8837 8951 8838 case 698:8839 8840 /* Line 1806 of yacc.c */ 8841 #line 26 19"parser.yy"8952 case 701: 8953 8954 /* Line 1806 of yacc.c */ 8955 #line 2633 "parser.yy" 8842 8956 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8843 8957 break; 8844 8958 8845 case 699:8846 8847 /* Line 1806 of yacc.c */ 8848 #line 26 21"parser.yy"8959 case 702: 8960 8961 /* Line 1806 of yacc.c */ 8962 #line 2635 "parser.yy" 8849 8963 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8850 8964 break; 8851 8965 8852 case 70 0:8853 8854 /* Line 1806 of yacc.c */ 8855 #line 26 26"parser.yy"8966 case 703: 8967 8968 /* Line 1806 of yacc.c */ 8969 #line 2640 "parser.yy" 8856 8970 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8857 8971 break; 8858 8972 8859 case 70 1:8860 8861 /* Line 1806 of yacc.c */ 8862 #line 26 28"parser.yy"8973 case 704: 8974 8975 /* Line 1806 of yacc.c */ 8976 #line 2642 "parser.yy" 8863 8977 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8864 8978 break; 8865 8979 8866 case 70 4:8867 8868 /* Line 1806 of yacc.c */ 8869 #line 26 38"parser.yy"8980 case 707: 8981 8982 /* Line 1806 of yacc.c */ 8983 #line 2652 "parser.yy" 8870 8984 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 8871 8985 break; 8872 8986 8873 case 7 07:8874 8875 /* Line 1806 of yacc.c */ 8876 #line 26 48"parser.yy"8987 case 710: 8988 8989 /* Line 1806 of yacc.c */ 8990 #line 2662 "parser.yy" 8877 8991 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 8878 8992 break; 8879 8993 8880 case 7 08:8881 8882 /* Line 1806 of yacc.c */ 8883 #line 26 50"parser.yy"8994 case 711: 8995 8996 /* Line 1806 of yacc.c */ 8997 #line 2664 "parser.yy" 8884 8998 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); } 8885 8999 break; 8886 9000 8887 case 7 09:8888 8889 /* Line 1806 of yacc.c */ 8890 #line 26 52"parser.yy"9001 case 712: 9002 9003 /* Line 1806 of yacc.c */ 9004 #line 2666 "parser.yy" 8891 9005 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 8892 9006 break; 8893 9007 8894 case 71 0:8895 8896 /* Line 1806 of yacc.c */ 8897 #line 26 54"parser.yy"9008 case 713: 9009 9010 /* Line 1806 of yacc.c */ 9011 #line 2668 "parser.yy" 8898 9012 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); } 8899 9013 break; 8900 9014 8901 case 71 1:8902 8903 /* Line 1806 of yacc.c */ 8904 #line 26 56"parser.yy"9015 case 714: 9016 9017 /* Line 1806 of yacc.c */ 9018 #line 2670 "parser.yy" 8905 9019 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 8906 9020 break; 8907 9021 8908 case 71 2:8909 8910 /* Line 1806 of yacc.c */ 8911 #line 26 58"parser.yy"9022 case 715: 9023 9024 /* Line 1806 of yacc.c */ 9025 #line 2672 "parser.yy" 8912 9026 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); } 8913 9027 break; 8914 9028 8915 case 71 3:8916 8917 /* Line 1806 of yacc.c */ 8918 #line 26 65"parser.yy"9029 case 716: 9030 9031 /* Line 1806 of yacc.c */ 9032 #line 2679 "parser.yy" 8919 9033 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 8920 9034 break; 8921 9035 8922 case 71 4:8923 8924 /* Line 1806 of yacc.c */ 8925 #line 26 67"parser.yy"9036 case 717: 9037 9038 /* Line 1806 of yacc.c */ 9039 #line 2681 "parser.yy" 8926 9040 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 8927 9041 break; 8928 9042 8929 case 71 5:8930 8931 /* Line 1806 of yacc.c */ 8932 #line 26 69"parser.yy"9043 case 718: 9044 9045 /* Line 1806 of yacc.c */ 9046 #line 2683 "parser.yy" 8933 9047 { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 8934 9048 break; 8935 9049 8936 case 71 6:8937 8938 /* Line 1806 of yacc.c */ 8939 #line 26 71"parser.yy"9050 case 719: 9051 9052 /* Line 1806 of yacc.c */ 9053 #line 2685 "parser.yy" 8940 9054 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); } 8941 9055 break; 8942 9056 8943 case 7 17:8944 8945 /* Line 1806 of yacc.c */ 8946 #line 26 73"parser.yy"9057 case 720: 9058 9059 /* Line 1806 of yacc.c */ 9060 #line 2687 "parser.yy" 8947 9061 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 8948 9062 break; 8949 9063 8950 case 7 18:8951 8952 /* Line 1806 of yacc.c */ 8953 #line 26 75"parser.yy"9064 case 721: 9065 9066 /* Line 1806 of yacc.c */ 9067 #line 2689 "parser.yy" 8954 9068 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 8955 9069 break; 8956 9070 8957 case 7 19:8958 8959 /* Line 1806 of yacc.c */ 8960 #line 26 77"parser.yy"9071 case 722: 9072 9073 /* Line 1806 of yacc.c */ 9074 #line 2691 "parser.yy" 8961 9075 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 8962 9076 break; 8963 9077 8964 case 72 0:8965 8966 /* Line 1806 of yacc.c */ 8967 #line 26 79"parser.yy"9078 case 723: 9079 9080 /* Line 1806 of yacc.c */ 9081 #line 2693 "parser.yy" 8968 9082 { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 8969 9083 break; 8970 9084 8971 case 72 1:8972 8973 /* Line 1806 of yacc.c */ 8974 #line 26 81"parser.yy"9085 case 724: 9086 9087 /* Line 1806 of yacc.c */ 9088 #line 2695 "parser.yy" 8975 9089 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); } 8976 9090 break; 8977 9091 8978 case 72 2:8979 8980 /* Line 1806 of yacc.c */ 8981 #line 26 83"parser.yy"9092 case 725: 9093 9094 /* Line 1806 of yacc.c */ 9095 #line 2697 "parser.yy" 8982 9096 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 8983 9097 break; 8984 9098 8985 case 72 3:8986 8987 /* Line 1806 of yacc.c */ 8988 #line 2 688"parser.yy"9099 case 726: 9100 9101 /* Line 1806 of yacc.c */ 9102 #line 2702 "parser.yy" 8989 9103 { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); } 8990 9104 break; 8991 9105 8992 case 72 4:8993 8994 /* Line 1806 of yacc.c */ 8995 #line 2 690"parser.yy"9106 case 727: 9107 9108 /* Line 1806 of yacc.c */ 9109 #line 2704 "parser.yy" 8996 9110 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); } 8997 9111 break; 8998 9112 8999 case 72 5:9000 9001 /* Line 1806 of yacc.c */ 9002 #line 2 695"parser.yy"9113 case 728: 9114 9115 /* Line 1806 of yacc.c */ 9116 #line 2709 "parser.yy" 9003 9117 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); } 9004 9118 break; 9005 9119 9006 case 72 6:9007 9008 /* Line 1806 of yacc.c */ 9009 #line 2 697"parser.yy"9120 case 729: 9121 9122 /* Line 1806 of yacc.c */ 9123 #line 2711 "parser.yy" 9010 9124 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); } 9011 9125 break; 9012 9126 9013 case 7 28:9014 9015 /* Line 1806 of yacc.c */ 9016 #line 27 24"parser.yy"9127 case 731: 9128 9129 /* Line 1806 of yacc.c */ 9130 #line 2738 "parser.yy" 9017 9131 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 9018 9132 break; 9019 9133 9020 case 73 2:9021 9022 /* Line 1806 of yacc.c */ 9023 #line 27 35"parser.yy"9134 case 735: 9135 9136 /* Line 1806 of yacc.c */ 9137 #line 2749 "parser.yy" 9024 9138 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 9025 9139 break; 9026 9140 9027 case 73 3:9028 9029 /* Line 1806 of yacc.c */ 9030 #line 27 37"parser.yy"9141 case 736: 9142 9143 /* Line 1806 of yacc.c */ 9144 #line 2751 "parser.yy" 9031 9145 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); } 9032 9146 break; 9033 9147 9034 case 73 4:9035 9036 /* Line 1806 of yacc.c */ 9037 #line 27 39"parser.yy"9148 case 737: 9149 9150 /* Line 1806 of yacc.c */ 9151 #line 2753 "parser.yy" 9038 9152 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 9039 9153 break; 9040 9154 9041 case 73 5:9042 9043 /* Line 1806 of yacc.c */ 9044 #line 27 41"parser.yy"9155 case 738: 9156 9157 /* Line 1806 of yacc.c */ 9158 #line 2755 "parser.yy" 9045 9159 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); } 9046 9160 break; 9047 9161 9048 case 73 6:9049 9050 /* Line 1806 of yacc.c */ 9051 #line 27 43"parser.yy"9162 case 739: 9163 9164 /* Line 1806 of yacc.c */ 9165 #line 2757 "parser.yy" 9052 9166 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 9053 9167 break; 9054 9168 9055 case 7 37:9056 9057 /* Line 1806 of yacc.c */ 9058 #line 27 45"parser.yy"9169 case 740: 9170 9171 /* Line 1806 of yacc.c */ 9172 #line 2759 "parser.yy" 9059 9173 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); } 9060 9174 break; 9061 9175 9062 case 7 38:9063 9064 /* Line 1806 of yacc.c */ 9065 #line 27 52"parser.yy"9176 case 741: 9177 9178 /* Line 1806 of yacc.c */ 9179 #line 2766 "parser.yy" 9066 9180 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 9067 9181 break; 9068 9182 9069 case 7 39:9070 9071 /* Line 1806 of yacc.c */ 9072 #line 27 54"parser.yy"9183 case 742: 9184 9185 /* Line 1806 of yacc.c */ 9186 #line 2768 "parser.yy" 9073 9187 { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 9074 9188 break; 9075 9189 9076 case 74 0:9077 9078 /* Line 1806 of yacc.c */ 9079 #line 27 56"parser.yy"9190 case 743: 9191 9192 /* Line 1806 of yacc.c */ 9193 #line 2770 "parser.yy" 9080 9194 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 9081 9195 break; 9082 9196 9083 case 74 1:9084 9085 /* Line 1806 of yacc.c */ 9086 #line 27 58"parser.yy"9197 case 744: 9198 9199 /* Line 1806 of yacc.c */ 9200 #line 2772 "parser.yy" 9087 9201 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 9088 9202 break; 9089 9203 9090 case 74 2:9091 9092 /* Line 1806 of yacc.c */ 9093 #line 27 60"parser.yy"9204 case 745: 9205 9206 /* Line 1806 of yacc.c */ 9207 #line 2774 "parser.yy" 9094 9208 { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 9095 9209 break; 9096 9210 9097 case 74 3:9098 9099 /* Line 1806 of yacc.c */ 9100 #line 27 62"parser.yy"9211 case 746: 9212 9213 /* Line 1806 of yacc.c */ 9214 #line 2776 "parser.yy" 9101 9215 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 9102 9216 break; 9103 9217 9104 case 74 4:9105 9106 /* Line 1806 of yacc.c */ 9107 #line 27 67"parser.yy"9218 case 747: 9219 9220 /* Line 1806 of yacc.c */ 9221 #line 2781 "parser.yy" 9108 9222 { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); } 9109 9223 break; 9110 9224 9111 case 74 5:9112 9113 /* Line 1806 of yacc.c */ 9114 #line 27 72"parser.yy"9225 case 748: 9226 9227 /* Line 1806 of yacc.c */ 9228 #line 2786 "parser.yy" 9115 9229 { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); } 9116 9230 break; 9117 9231 9118 case 74 6:9119 9120 /* Line 1806 of yacc.c */ 9121 #line 27 74"parser.yy"9232 case 749: 9233 9234 /* Line 1806 of yacc.c */ 9235 #line 2788 "parser.yy" 9122 9236 { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); } 9123 9237 break; 9124 9238 9125 case 7 47:9126 9127 /* Line 1806 of yacc.c */ 9128 #line 27 76"parser.yy"9239 case 750: 9240 9241 /* Line 1806 of yacc.c */ 9242 #line 2790 "parser.yy" 9129 9243 { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); } 9130 9244 break; 9131 9245 9132 case 75 0:9133 9134 /* Line 1806 of yacc.c */ 9135 #line 28 00"parser.yy"9246 case 753: 9247 9248 /* Line 1806 of yacc.c */ 9249 #line 2814 "parser.yy" 9136 9250 { (yyval.en) = 0; } 9137 9251 break; 9138 9252 9139 case 75 1:9140 9141 /* Line 1806 of yacc.c */ 9142 #line 28 02"parser.yy"9253 case 754: 9254 9255 /* Line 1806 of yacc.c */ 9256 #line 2816 "parser.yy" 9143 9257 { (yyval.en) = (yyvsp[(2) - (2)].en); } 9144 9258 break; … … 9147 9261 9148 9262 /* Line 1806 of yacc.c */ 9149 #line 9 150"Parser/parser.cc"9263 #line 9264 "Parser/parser.cc" 9150 9264 default: break; 9151 9265 } … … 9378 9492 9379 9493 /* Line 2067 of yacc.c */ 9380 #line 28 05"parser.yy"9494 #line 2819 "parser.yy" 9381 9495 9382 9496 // ----end of grammar---- … … 9385 9499 std::cout << "Error "; 9386 9500 if ( yyfilename ) { 9387 9501 std::cout << "in file " << yyfilename << " "; 9388 9502 } // if 9389 9503 std::cout << "at line " << yylineno << " reading token \"" << (yytext[0] == '\0' ? "EOF" : yytext) << "\"" << std::endl; -
src/Parser/parser.h
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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 : 1 48312 // Last Modified On : Wed Apr 13 16:58:43 2016 13 // Update Count : 1519 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 … … 370 372 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), $1 ); } 371 373 | '(' type_name_no_function ')' '{' initializer_list comma_opt '}' // C99 372 { $$ = 0; }374 { $$ = new CompoundLiteralNode( $2, new InitializerNode( $5, true ) ); } 373 375 | postfix_expression '{' argument_expression_list '}' // CFA 374 376 { … … 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 … … 1434 1438 { $$ = DeclarationNode::newAggregate( $1, 0, 0, $3 ); } 1435 1439 | aggregate_key no_attr_identifier_or_type_name 1436 { $$ = DeclarationNode::newAggregate( $1, $2, 0, 0 ); } 1437 | aggregate_key no_attr_identifier_or_type_name '{' field_declaration_list '}' 1438 { $$ = DeclarationNode::newAggregate( $1, $2, 0, $4 ); } 1440 { 1441 typedefTable.makeTypedef( *$2 ); 1442 $$ = DeclarationNode::newAggregate( $1, $2, 0, 0 ); 1443 } 1444 | aggregate_key no_attr_identifier_or_type_name 1445 { typedefTable.makeTypedef( *$2 ); } 1446 '{' field_declaration_list '}' 1447 { $$ = DeclarationNode::newAggregate( $1, $2, 0, $5); } 1439 1448 | aggregate_key '(' type_name_list ')' '{' field_declaration_list '}' // CFA 1440 1449 { $$ = DeclarationNode::newAggregate( $1, 0, $3, $6 ); } 1441 1450 | aggregate_key typegen_name // CFA, S/R conflict 1442 1451 { $$ = $2; } … … 1516 1525 enum_key '{' enumerator_list comma_opt '}' 1517 1526 { $$ = DeclarationNode::newEnum( 0, $3 ); } 1518 | enum_key no_attr_identifier_or_type_name '{' enumerator_list comma_opt '}'1519 { $$ = DeclarationNode::newEnum( $2, $4 ); }1520 1527 | enum_key no_attr_identifier_or_type_name 1521 { $$ = DeclarationNode::newEnum( $2, 0 ); } 1528 { 1529 typedefTable.makeTypedef( *$2 ); 1530 $$ = DeclarationNode::newEnum( $2, 0 ); 1531 } 1532 | enum_key no_attr_identifier_or_type_name 1533 { typedefTable.makeTypedef( *$2 ); } 1534 '{' enumerator_list comma_opt '}' 1535 { $$ = DeclarationNode::newEnum( $2, $5 ); } 1522 1536 ; 1523 1537 … … 1803 1817 1804 1818 type_class: // CFA 1805 TYPE1819 OTYPE 1806 1820 { $$ = DeclarationNode::Type; } 1807 1821 | DTYPE … … 1821 1835 '|' no_attr_identifier_or_type_name '(' type_name_list ')' 1822 1836 { 1823 typedefTable.open Context( *$2 );1824 $$ = DeclarationNode::new ContextUse( $2, $4 );1825 } 1826 | '|' '{' push context_declaration_list '}'1837 typedefTable.openTrait( *$2 ); 1838 $$ = DeclarationNode::newTraitUse( $2, $4 ); 1839 } 1840 | '|' '{' push trait_declaration_list '}' 1827 1841 { $$ = $4; } 1828 | '|' '(' push type_parameter_list pop ')' '{' push context_declaration_list '}' '(' type_name_list ')'1842 | '|' '(' push type_parameter_list pop ')' '{' push trait_declaration_list '}' '(' type_name_list ')' 1829 1843 { $$ = 0; } 1830 1844 ; … … 1841 1855 1842 1856 type_declaring_list: // CFA 1843 TYPE type_declarator1844 { $$ = $2; } 1845 | storage_class_list TYPE type_declarator1857 OTYPE type_declarator 1858 { $$ = $2; } 1859 | storage_class_list OTYPE type_declarator 1846 1860 { $$ = $3->addQualifiers( $1 ); } 1847 1861 | type_declaring_list ',' type_declarator … … 1869 1883 ; 1870 1884 1871 context_specifier: // CFA1872 CONTEXT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' '}'1885 trait_specifier: // CFA 1886 TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' '}' 1873 1887 { 1874 1888 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 );1889 $$ = DeclarationNode::newTrait( $2, $5, 0 ); 1890 } 1891 | TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' 1892 { 1893 typedefTable.enterTrait( *$2 ); 1880 1894 typedefTable.enterScope(); 1881 1895 } 1882 context_declaration_list '}'1883 { 1884 typedefTable.leave Context();1896 trait_declaration_list '}' 1897 { 1898 typedefTable.leaveTrait(); 1885 1899 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_declaration1900 $$ = DeclarationNode::newTrait( $2, $5, $10 ); 1901 } 1902 ; 1903 1904 trait_declaration_list: // CFA 1905 trait_declaration 1906 | trait_declaration_list push trait_declaration 1893 1907 { $$ = $1->appendList( $3 ); } 1894 1908 ; 1895 1909 1896 context_declaration: // CFA1897 new_ context_declaring_list pop ';'1898 | context_declaring_list pop ';'1899 ; 1900 1901 new_ context_declaring_list: // CFA1910 trait_declaration: // CFA 1911 new_trait_declaring_list pop ';' 1912 | trait_declaring_list pop ';' 1913 ; 1914 1915 new_trait_declaring_list: // CFA 1902 1916 new_variable_specifier 1903 1917 { … … 1910 1924 $$ = $1; 1911 1925 } 1912 | new_ context_declaring_list pop ',' push identifier_or_type_name1926 | new_trait_declaring_list pop ',' push identifier_or_type_name 1913 1927 { 1914 1928 typedefTable.addToEnclosingScope2( *$5, TypedefTable::ID ); … … 1917 1931 ; 1918 1932 1919 context_declaring_list: // CFA1933 trait_declaring_list: // CFA 1920 1934 type_specifier declarator 1921 1935 { … … 1923 1937 $$ = $2->addType( $1 ); 1924 1938 } 1925 | context_declaring_list pop ',' push declarator1939 | trait_declaring_list pop ',' push declarator 1926 1940 { 1927 1941 typedefTable.addToEnclosingScope2( TypedefTable::ID ); … … 2809 2823 std::cout << "Error "; 2810 2824 if ( yyfilename ) { 2811 2825 std::cout << "in file " << yyfilename << " "; 2812 2826 } // if 2813 2827 std::cout << "at line " << yylineno << " reading token \"" << (yytext[0] == '\0' ? "EOF" : yytext) << "\"" << std::endl; -
src/ResolvExpr/AdjustExprType.cc
rc5833e8 r0f9e4403 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 ); 38 virtual Type* mutate( VarArgsType *varArgsType ); 38 39 39 40 const TypeEnvironment &env; … … 86 87 } 87 88 88 Type *AdjustExprType::mutate( ContextInstType *aggregateUseType ) {89 Type *AdjustExprType::mutate( TraitInstType *aggregateUseType ) { 89 90 return aggregateUseType; 90 91 } … … 111 112 return tupleType; 112 113 } 114 115 Type *AdjustExprType::mutate( VarArgsType *varArgsType ) { 116 return varArgsType; 117 } 113 118 } // namespace ResolvExpr 114 119 -
src/ResolvExpr/AlternativeFinder.cc
rc5833e8 r0f9e4403 848 848 } 849 849 850 void AlternativeFinder::visit( OffsetPackExpr *offsetPackExpr ) { 851 alternatives.push_back( Alternative( offsetPackExpr->clone(), env, Cost::zero ) ); 852 } 853 850 854 void AlternativeFinder::resolveAttr( DeclarationWithType *funcDecl, FunctionType *function, Type *argType, const TypeEnvironment &env ) { 851 855 // assume no polymorphism -
src/ResolvExpr/AlternativeFinder.h
rc5833e8 r0f9e4403 59 59 virtual void visit( UntypedOffsetofExpr *offsetofExpr ); 60 60 virtual void visit( OffsetofExpr *offsetofExpr ); 61 virtual void visit( OffsetPackExpr *offsetPackExpr ); 61 62 virtual void visit( AttrExpr *attrExpr ); 62 63 virtual void visit( LogicalExpr *logicalExpr ); -
src/ResolvExpr/CommonType.cc
rc5833e8 r0f9e4403 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 ); 40 virtual void visit( VarArgsType *varArgsType ); 40 41 41 42 template< typename RefType > void handleRefType( RefType *inst, Type *other ); … … 185 186 } 186 187 187 void CommonType::visit( ContextInstType *aggregateUseType ) {188 void CommonType::visit( TraitInstType *aggregateUseType ) { 188 189 } 189 190 … … 213 214 void CommonType::visit( TupleType *tupleType ) { 214 215 } 216 217 void CommonType::visit( VarArgsType *varArgsType ) { 218 } 215 219 } // namespace ResolvExpr 216 220 -
src/ResolvExpr/ConversionCost.cc
rc5833e8 r0f9e4403 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 … … 247 247 } // if 248 248 } 249 250 void ConversionCost::visit(VarArgsType *varArgsType) { 251 if ( dynamic_cast< VarArgsType* >( dest ) ) { 252 cost = Cost::zero; 253 } 254 } 249 255 } // namespace ResolvExpr 250 256 -
src/ResolvExpr/ConversionCost.h
rc5833e8 r0f9e4403 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); 42 virtual void visit(VarArgsType *varArgsType); 42 43 protected: 43 44 Type *dest; -
src/ResolvExpr/PtrsAssignable.cc
rc5833e8 r0f9e4403 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 ); 40 virtual void visit( VarArgsType *varArgsType ); 40 41 private: 41 42 Type *dest; … … 100 101 } 101 102 102 void PtrsAssignable::visit( ContextInstType *inst ) {103 void PtrsAssignable::visit( TraitInstType *inst ) { 103 104 // I definitely don't think we should be doing anything here 104 105 } … … 137 138 /// } 138 139 } 140 141 void PtrsAssignable::visit( VarArgsType *varArgsType ) { 142 } 139 143 } // namespace ResolvExpr 140 144 -
src/ResolvExpr/PtrsCastable.cc
rc5833e8 r0f9e4403 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); 41 virtual void visit(VarArgsType *varArgsType); 41 42 private: 42 43 Type *dest; … … 115 116 116 117 void PtrsCastable::visit(EnumInstType *inst) { 117 if ( dynamic_cast< EnumInstType* >( inst ) ) {118 if ( dynamic_cast< EnumInstType* >( dest ) ) { 118 119 result = 1; 119 } else if ( BasicType *bt = dynamic_cast< BasicType* >( inst ) ) {120 } else if ( BasicType *bt = dynamic_cast< BasicType* >( dest ) ) { 120 121 if ( bt->get_kind() == BasicType::SignedInt ) { 121 122 result = 0; … … 128 129 } 129 130 130 void PtrsCastable::visit( ContextInstType *inst) {131 void PtrsCastable::visit(TraitInstType *inst) { 131 132 // I definitely don't think we should be doing anything here 132 133 } … … 139 140 result = objectCast( dest, env, indexer ); 140 141 } 142 143 void PtrsCastable::visit(VarArgsType *varArgsType) { 144 result = objectCast( dest, env, indexer ); 145 } 141 146 } // namespace ResolvExpr 142 147 -
src/ResolvExpr/RenameVars.cc
rc5833e8 r0f9e4403 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 ); … … 111 111 acceptAll( tupleType->get_types(), *this ); 112 112 typeAfter( tupleType ); 113 } 114 115 void RenameVars::visit( VarArgsType *varArgsType ) { 116 typeBefore( varArgsType ); 117 typeAfter( varArgsType ); 113 118 } 114 119 -
src/ResolvExpr/RenameVars.h
rc5833e8 r0f9e4403 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 ); 45 virtual void visit( VarArgsType *varArgsType ); 45 46 46 47 void typeBefore( Type *type ); -
src/ResolvExpr/Resolver.cc
rc5833e8 r0f9e4403 10 10 // Created On : Sun May 17 12:17:01 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : T ue Feb 9 21:57:52201613 // Update Count : 1 7912 // Last Modified On : Thu Mar 24 16:43:11 2016 13 // Update Count : 181 14 14 // 15 15 … … 165 165 Type *new_type = resolveTypeof( objectDecl->get_type(), *this ); 166 166 objectDecl->set_type( new_type ); 167 // To handle initialization of routine pointers, e.g., int (*fp)(int) = foo(), means that class-variable 168 // initContext is changed multiple time because the LHS is analysed twice. The second analysis changes 169 // initContext because of a function type can contain object declarations in the return and parameter types. So 170 // each value of initContext is retained, so the type on the first analysis is preserved and used for selecting 171 // the RHS. 172 Type *temp = initContext; 167 173 initContext = new_type; 168 174 SymTab::Indexer::visit( objectDecl ); 175 initContext = temp; 169 176 } 170 177 -
src/ResolvExpr/Unify.cc
rc5833e8 r0f9e4403 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // Unify.cc -- 7 // Unify.cc -- 8 8 // 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 … … 38 38 WidenMode operator&( const WidenMode &other ) { WidenMode newWM( *this ); newWM &= other; return newWM; } 39 39 operator bool() { return widenFirst && widenSecond; } 40 40 41 41 bool widenFirst : 1, widenSecond : 1; 42 42 }; … … 45 45 public: 46 46 Unify( Type *type2, TypeEnvironment &env, AssertionSet &needAssertions, AssertionSet &haveAssertions, const OpenVarSet &openVars, WidenMode widenMode, const SymTab::Indexer &indexer ); 47 47 48 48 bool get_result() const { return result; } 49 49 private: … … 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); 61 virtual void visit(VarArgsType *varArgsType); 61 62 62 63 template< typename RefType > void handleRefType( RefType *inst, Type *other ); … … 78 79 bool unifyInexact( Type *type1, Type *type2, TypeEnvironment &env, AssertionSet &needAssertions, AssertionSet &haveAssertions, const OpenVarSet &openVars, WidenMode widenMode, const SymTab::Indexer &indexer, Type *&common ); 79 80 bool unifyExact( Type *type1, Type *type2, TypeEnvironment &env, AssertionSet &needAssertions, AssertionSet &haveAssertions, const OpenVarSet &openVars, WidenMode widenMode, const SymTab::Indexer &indexer ); 80 81 81 82 bool typesCompatible( Type *first, Type *second, const SymTab::Indexer &indexer, const TypeEnvironment &env ) { 82 83 TypeEnvironment newEnv; … … 136 137 case TypeDecl::Dtype: 137 138 return ! isFtype( type, indexer ); 138 139 139 140 case TypeDecl::Ftype: 140 141 return isFtype( type, indexer ); … … 195 196 bool widen1 = false, widen2 = false; 196 197 Type *type1 = 0, *type2 = 0; 197 198 198 199 if ( env.lookup( var1->get_name(), class1 ) ) { 199 200 hasClass1 = true; … … 216 217 widen2 = widenMode.widenSecond && class2.allowWidening; 217 218 } // if 218 219 219 220 if ( type1 && type2 ) { 220 221 // std::cout << "has type1 && type2" << std::endl; … … 435 436 // to unify, array types must both be VLA or both not VLA 436 437 // and must both have a dimension expression or not have a dimension 437 if ( otherArray && arrayType->get_isVarLen() == otherArray->get_isVarLen() 438 && ((arrayType->get_dimension() != 0 && otherArray->get_dimension() != 0) 439 || (arrayType->get_dimension() == 0 && otherArray->get_dimension() == 0))) { 438 if ( otherArray && arrayType->get_isVarLen() == otherArray->get_isVarLen() ) { 440 439 441 440 // not positive this is correct in all cases, but it's needed for typedefs … … 448 447 ConstantExpr * ce1 = dynamic_cast< ConstantExpr * >( arrayType->get_dimension() ); 449 448 ConstantExpr * ce2 = dynamic_cast< ConstantExpr * >( otherArray->get_dimension() ); 450 assert(ce1 && ce2); 451 452 Constant * c1 = ce1->get_constant(); 453 Constant * c2 = ce2->get_constant(); 454 455 if ( c1->get_value() != c2->get_value() ) { 456 // does not unify if the dimension is different 457 return; 449 // see C11 Reference Manual 6.7.6.2.6 450 // two array types with size specifiers that are integer constant expressions are 451 // compatible if both size specifiers have the same constant value 452 if ( ce1 && ce2 ) { 453 Constant * c1 = ce1->get_constant(); 454 Constant * c2 = ce2->get_constant(); 455 456 if ( c1->get_value() != c2->get_value() ) { 457 // does not unify if the dimension is different 458 return; 459 } 458 460 } 459 461 } … … 484 486 485 487 if ( unifyDeclList( functionType->get_parameters().begin(), functionType->get_parameters().end(), otherFunction->get_parameters().begin(), otherFunction->get_parameters().end(), env, needAssertions, haveAssertions, openVars, indexer ) ) { 486 488 487 489 if ( unifyDeclList( functionType->get_returnVals().begin(), functionType->get_returnVals().end(), otherFunction->get_returnVals().begin(), otherFunction->get_returnVals().end(), env, needAssertions, haveAssertions, openVars, indexer ) ) { 488 490 … … 539 541 } 540 542 541 void Unify::visit( ContextInstType *contextInst) {543 void Unify::visit(TraitInstType *contextInst) { 542 544 handleRefType( contextInst, type2 ); 543 545 } … … 582 584 } 583 585 586 void Unify::visit(VarArgsType *varArgsType) { 587 result = dynamic_cast< VarArgsType* >( type2 ); 588 } 589 584 590 } // namespace ResolvExpr 585 591 -
src/SymTab/AddVisit.h
rc5833e8 r0f9e4403 9 9 // Author : Richard C. Bilson 10 10 // Created On : Sun May 17 16:14:32 2015 11 // Last Modified By : Rob Schluntz12 // Last Modified On : T ue Jul 14 12:26:17 201513 // Update Count : 411 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Apr 7 14:42:21 2016 13 // Update Count : 5 14 14 // 15 15 … … 27 27 28 28 template< typename Visitor > 29 inline void addVisitStatement( Statement *stmt, Visitor &visitor ) {30 maybeAccept( stmt, visitor );31 /// if ( ! declsToAdd.empty() ) {32 /// CompoundStmt *compound = new CompoundStmt( noLabels );33 /// compound->get_kids().push_back( stmt );34 /// addDecls( declsToAdd, compound->get_kids(), compound->get_kids().end() );35 /// }36 }37 38 template< typename Visitor >39 29 inline void addVisit(CompoundStmt *compoundStmt, Visitor &visitor) { 40 30 addVisitStatementList( compoundStmt->get_kids(), visitor ); 41 }42 43 template< typename Visitor >44 inline void addVisit(IfStmt *ifStmt, Visitor &visitor) {45 addVisitStatement( ifStmt->get_thenPart(), visitor );46 addVisitStatement( ifStmt->get_elsePart(), visitor );47 maybeAccept( ifStmt->get_condition(), visitor );48 }49 50 template< typename Visitor >51 inline void addVisit(WhileStmt *whileStmt, Visitor &visitor) {52 addVisitStatement( whileStmt->get_body(), visitor );53 maybeAccept( whileStmt->get_condition(), visitor );54 }55 56 template< typename Visitor >57 inline void addVisit(ForStmt *forStmt, Visitor &visitor) {58 addVisitStatement( forStmt->get_body(), visitor );59 acceptAll( forStmt->get_initialization(), visitor );60 maybeAccept( forStmt->get_condition(), visitor );61 maybeAccept( forStmt->get_increment(), visitor );62 31 } 63 32 … … 74 43 } 75 44 76 template< typename Visitor > 77 inline void addVisit(CaseStmt *caseStmt, Visitor &visitor) { 78 addVisitStatementList( caseStmt->get_statements(), visitor ); 79 maybeAccept( caseStmt->get_condition(), visitor ); 80 } 81 82 template< typename Visitor > 83 inline void addVisit(CatchStmt *cathStmt, Visitor &visitor) { 84 addVisitStatement( cathStmt->get_body(), visitor ); 85 maybeAccept( cathStmt->get_decl(), visitor ); 86 } 45 // template< typename Visitor > 46 // inline void addVisit(CaseStmt *caseStmt, Visitor &visitor) { 47 // addVisitStatementList( caseStmt->get_statements(), visitor ); 48 // maybeAccept( caseStmt->get_condition(), visitor ); 49 // } 87 50 } // namespace SymTab 88 51 -
src/SymTab/FixFunction.cc
rc5833e8 r0f9e4403 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 } … … 72 72 return tupleType; 73 73 } 74 75 Type * FixFunction::mutate(VarArgsType *varArgsType) { 76 return varArgsType; 77 } 74 78 } // namespace SymTab 75 79 -
src/SymTab/FixFunction.h
rc5833e8 r0f9e4403 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); 43 virtual Type* mutate(VarArgsType *varArgsType); 43 44 44 45 bool isVoid; -
src/SymTab/ImplementationType.cc
rc5833e8 r0f9e4403 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); 42 virtual void visit(VarArgsType *varArgsType); 42 43 43 44 Type *result; // synthesized … … 95 96 } 96 97 97 void ImplementationType::visit( ContextInstType *aggregateUseType) {98 void ImplementationType::visit(TraitInstType *aggregateUseType) { 98 99 } 99 100 … … 116 117 result = newType; 117 118 } 119 120 void ImplementationType::visit(VarArgsType *varArgsType) { 121 } 118 122 } // namespace SymTab 119 123 -
src/SymTab/Indexer.cc
rc5833e8 r0f9e4403 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 … … 236 344 maybeAccept( offsetofExpr->get_type(), *this ); 237 345 maybeAccept( offsetofExpr->get_member(), *this ); 346 } 347 348 void Indexer::visit( OffsetPackExpr *offsetPackExpr ) { 349 acceptAllNewScope( offsetPackExpr->get_results(), *this ); 350 maybeAccept( offsetPackExpr->get_type(), *this ); 238 351 } 239 352 … … 293 406 294 407 295 void Indexer::visit( ContextInstType *contextInst ) {408 void Indexer::visit( TraitInstType *contextInst ) { 296 409 acceptAll( contextInst->get_parameters(), *this ); 297 410 acceptAll( contextInst->get_members(), *this ); … … 299 412 300 413 void Indexer::visit( StructInstType *structInst ) { 301 if ( ! structTable.lookup( structInst->get_name() ) ) {414 if ( ! lookupStruct( structInst->get_name() ) ) { 302 415 debugPrint( "Adding struct " << structInst->get_name() << " from implicit forward declaration" << std::endl ); 303 structTable.add( structInst->get_name() );416 addStruct( structInst->get_name() ); 304 417 } 305 418 enterScope(); … … 309 422 310 423 void Indexer::visit( UnionInstType *unionInst ) { 311 if ( ! unionTable.lookup( unionInst->get_name() ) ) {424 if ( ! lookupUnion( unionInst->get_name() ) ) { 312 425 debugPrint( "Adding union " << unionInst->get_name() << " from implicit forward declaration" << std::endl ); 313 unionTable.add( unionInst->get_name() );426 addUnion( unionInst->get_name() ); 314 427 } 315 428 enterScope(); … … 325 438 } 326 439 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); 440 441 442 void Indexer::lookupId( const std::string &id, std::list< DeclarationWithType* > &out ) const { 443 std::unordered_set< std::string > foundMangleNames; 444 445 Indexer::Impl *searchTables = tables; 446 while ( searchTables ) { 447 448 IdTable::const_iterator decls = searchTables->idTable.find( id ); 449 if ( decls != searchTables->idTable.end() ) { 450 const MangleTable &mangleTable = decls->second; 451 for ( MangleTable::const_iterator decl = mangleTable.begin(); decl != mangleTable.end(); ++decl ) { 452 // mark the mangled name as found, skipping this insertion if a declaration for that name has already been found 453 if ( foundMangleNames.insert( decl->first ).second == false ) continue; 454 455 out.push_back( decl->second ); 456 } 457 } 458 459 // get declarations from base indexers 460 searchTables = searchTables->base.tables; 461 } 334 462 } 335 463 336 464 NamedTypeDecl *Indexer::lookupType( const std::string &id ) const { 337 return typeTable.lookup( id ); 465 if ( ! tables ) return 0; 466 467 TypeTable::const_iterator ret = tables->typeTable.find( id ); 468 return ret != tables->typeTable.end() ? ret->second : tables->base.lookupType( id ); 338 469 } 339 470 340 471 StructDecl *Indexer::lookupStruct( const std::string &id ) const { 341 return structTable.lookup( id ); 472 if ( ! tables ) return 0; 473 474 StructTable::const_iterator ret = tables->structTable.find( id ); 475 return ret != tables->structTable.end() ? ret->second : tables->base.lookupStruct( id ); 342 476 } 343 477 344 478 EnumDecl *Indexer::lookupEnum( const std::string &id ) const { 345 return enumTable.lookup( id ); 479 if ( ! tables ) return 0; 480 481 EnumTable::const_iterator ret = tables->enumTable.find( id ); 482 return ret != tables->enumTable.end() ? ret->second : tables->base.lookupEnum( id ); 346 483 } 347 484 348 485 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 ); 486 if ( ! tables ) return 0; 487 488 UnionTable::const_iterator ret = tables->unionTable.find( id ); 489 return ret != tables->unionTable.end() ? ret->second : tables->base.lookupUnion( id ); 490 } 491 492 TraitDecl *Indexer::lookupTrait( const std::string &id ) const { 493 if ( ! tables ) return 0; 494 495 TraitTable::const_iterator ret = tables->traitTable.find( id ); 496 return ret != tables->traitTable.end() ? ret->second : tables->base.lookupTrait( id ); 497 } 498 499 DeclarationWithType *Indexer::lookupIdAtScope( const std::string &id, const std::string &mangleName, unsigned long scope ) const { 500 if ( ! tables ) return 0; 501 if ( tables->scope < scope ) return 0; 502 503 IdTable::const_iterator decls = tables->idTable.find( id ); 504 if ( decls != tables->idTable.end() ) { 505 const MangleTable &mangleTable = decls->second; 506 MangleTable::const_iterator decl = mangleTable.find( mangleName ); 507 if ( decl != mangleTable.end() ) return decl->second; 508 } 509 510 return tables->base.lookupIdAtScope( id, mangleName, scope ); 511 } 512 513 bool Indexer::hasIncompatibleCDecl( const std::string &id, const std::string &mangleName ) const { 514 if ( ! tables ) return false; 515 516 IdTable::const_iterator decls = tables->idTable.find( id ); 517 if ( decls != tables->idTable.end() ) { 518 const MangleTable &mangleTable = decls->second; 519 for ( MangleTable::const_iterator decl = mangleTable.begin(); decl != mangleTable.end(); ++decl ) { 520 // check for C decls with the same name, skipping 521 // those with a compatible type (by mangleName) 522 if ( decl->second->get_linkage() == LinkageSpec::C && decl->first != mangleName ) return true; 523 } 524 } 525 526 return tables->base.hasIncompatibleCDecl( id, mangleName ); 527 } 528 529 NamedTypeDecl *Indexer::lookupTypeAtScope( const std::string &id, unsigned long scope ) const { 530 if ( ! tables ) return 0; 531 if ( tables->scope < scope ) return 0; 532 533 TypeTable::const_iterator ret = tables->typeTable.find( id ); 534 return ret != tables->typeTable.end() ? ret->second : tables->base.lookupTypeAtScope( id, scope ); 535 } 536 537 StructDecl *Indexer::lookupStructAtScope( const std::string &id, unsigned long scope ) const { 538 if ( ! tables ) return 0; 539 if ( tables->scope < scope ) return 0; 540 541 StructTable::const_iterator ret = tables->structTable.find( id ); 542 return ret != tables->structTable.end() ? ret->second : tables->base.lookupStructAtScope( id, scope ); 543 } 544 545 EnumDecl *Indexer::lookupEnumAtScope( const std::string &id, unsigned long scope ) const { 546 if ( ! tables ) return 0; 547 if ( tables->scope < scope ) return 0; 548 549 EnumTable::const_iterator ret = tables->enumTable.find( id ); 550 return ret != tables->enumTable.end() ? ret->second : tables->base.lookupEnumAtScope( id, scope ); 551 } 552 553 UnionDecl *Indexer::lookupUnionAtScope( const std::string &id, unsigned long scope ) const { 554 if ( ! tables ) return 0; 555 if ( tables->scope < scope ) return 0; 556 557 UnionTable::const_iterator ret = tables->unionTable.find( id ); 558 return ret != tables->unionTable.end() ? ret->second : tables->base.lookupUnionAtScope( id, scope ); 559 } 560 561 TraitDecl *Indexer::lookupTraitAtScope( const std::string &id, unsigned long scope ) const { 562 if ( ! tables ) return 0; 563 if ( tables->scope < scope ) return 0; 564 565 TraitTable::const_iterator ret = tables->traitTable.find( id ); 566 return ret != tables->traitTable.end() ? ret->second : tables->base.lookupTraitAtScope( id, scope ); 567 } 568 569 bool addedIdConflicts( DeclarationWithType *existing, DeclarationWithType *added ) { 570 // if we're giving the same name mangling to things of different types then there is something wrong 571 assert( (dynamic_cast<ObjectDecl*>( added ) && dynamic_cast<ObjectDecl*>( existing ) ) 572 || (dynamic_cast<FunctionDecl*>( added ) && dynamic_cast<FunctionDecl*>( existing ) ) ); 573 574 if ( LinkageSpec::isOverridable( existing->get_linkage() ) ) { 575 // new definition shadows the autogenerated one, even at the same scope 576 return false; 577 } else if ( added->get_linkage() != LinkageSpec::C || ResolvExpr::typesCompatible( added->get_type(), existing->get_type(), Indexer() ) ) { 578 // typesCompatible doesn't really do the right thing here. When checking compatibility of function types, 579 // we should ignore outermost pointer qualifiers, except _Atomic? 580 FunctionDecl *newentry = dynamic_cast< FunctionDecl* >( added ); 581 FunctionDecl *oldentry = dynamic_cast< FunctionDecl* >( existing ); 582 if ( newentry && oldentry ) { 583 if ( newentry->get_statements() && oldentry->get_statements() ) { 584 throw SemanticError( "duplicate function definition for ", added ); 585 } // if 586 } else { 587 // two objects with the same mangled name defined in the same scope. 588 // both objects must be marked extern or both must be intrinsic for this to be okay 589 // xxx - perhaps it's actually if either is intrinsic then this is okay? 590 // might also need to be same storage class? 591 ObjectDecl *newobj = dynamic_cast< ObjectDecl* >( added ); 592 ObjectDecl *oldobj = dynamic_cast< ObjectDecl* >( existing ); 593 if ( newobj->get_storageClass() != DeclarationNode::Extern && oldobj->get_storageClass() != DeclarationNode::Extern ) { 594 throw SemanticError( "duplicate object definition for ", added ); 595 } // if 596 } // if 597 } else { 598 throw SemanticError( "duplicate definition for ", added ); 599 } // if 600 601 return true; 602 } 603 604 void Indexer::addId( DeclarationWithType *decl ) { 605 makeWritable(); 606 607 const std::string &name = decl->get_name(); 608 std::string mangleName; 609 if ( LinkageSpec::isOverridable( decl->get_linkage() ) ) { 610 // mangle the name without including the appropriate suffix, so overridable routines are placed into the 611 // same "bucket" as their user defined versions. 612 mangleName = Mangler::mangle( decl, false ); 613 } else { 614 mangleName = Mangler::mangle( decl ); 615 } // if 616 617 DeclarationWithType *existing = lookupIdAtScope( name, mangleName, scope ); 618 if ( ! existing || ! addedIdConflicts( existing, decl ) ) { 619 // this ensures that no two declarations with the same unmangled name both have C linkage 620 if ( decl->get_linkage() == LinkageSpec::C && hasIncompatibleCDecl( name, mangleName ) ) { 621 throw SemanticError( "invalid overload of C function ", decl ); 622 } // NOTE this is broken in Richard's original code in such a way that it never triggers (it 623 // doesn't check decls that have the same manglename, and all C-linkage decls are defined to 624 // have their name as their manglename, hence the error can never trigger). 625 // The code here is closer to correct, but name mangling would have to be completely 626 // isomorphic to C type-compatibility, which it may not be. 627 628 tables->idTable[ name ][ mangleName ] = decl; 629 ++tables->size; 630 } 631 } 632 633 bool addedTypeConflicts( NamedTypeDecl *existing, NamedTypeDecl *added ) { 634 if ( existing->get_base() == 0 ) { 635 return false; 636 } else if ( added->get_base() == 0 ) { 637 return true; 638 } else { 639 throw SemanticError( "redeclaration of ", added ); 640 } 641 } 642 643 void Indexer::addType( NamedTypeDecl *decl ) { 644 makeWritable(); 645 646 const std::string &id = decl->get_name(); 647 TypeTable::iterator existing = tables->typeTable.find( id ); 648 if ( existing == tables->typeTable.end() ) { 649 NamedTypeDecl *parent = tables->base.lookupTypeAtScope( id, scope ); 650 if ( ! parent || ! addedTypeConflicts( parent, decl ) ) { 651 tables->typeTable.insert( existing, std::make_pair( id, decl ) ); 652 ++tables->size; 653 } 654 } else { 655 if ( ! addedTypeConflicts( existing->second, decl ) ) { 656 existing->second = decl; 657 } 658 } 659 } 660 661 bool addedDeclConflicts( AggregateDecl *existing, AggregateDecl *added ) { 662 if ( existing->get_members().empty() ) { 663 return false; 664 } else if ( ! added->get_members().empty() ) { 665 throw SemanticError( "redeclaration of ", added ); 666 } // if 667 return true; 668 } 669 670 void Indexer::addStruct( const std::string &id ) { 671 addStruct( new StructDecl( id ) ); 672 } 673 674 void Indexer::addStruct( StructDecl *decl ) { 675 makeWritable(); 676 677 const std::string &id = decl->get_name(); 678 StructTable::iterator existing = tables->structTable.find( id ); 679 if ( existing == tables->structTable.end() ) { 680 StructDecl *parent = tables->base.lookupStructAtScope( id, scope ); 681 if ( ! parent || ! addedDeclConflicts( parent, decl ) ) { 682 tables->structTable.insert( existing, std::make_pair( id, decl ) ); 683 ++tables->size; 684 } 685 } else { 686 if ( ! addedDeclConflicts( existing->second, decl ) ) { 687 existing->second = decl; 688 } 689 } 690 } 691 692 void Indexer::addEnum( EnumDecl *decl ) { 693 makeWritable(); 694 695 const std::string &id = decl->get_name(); 696 EnumTable::iterator existing = tables->enumTable.find( id ); 697 if ( existing == tables->enumTable.end() ) { 698 EnumDecl *parent = tables->base.lookupEnumAtScope( id, scope ); 699 if ( ! parent || ! addedDeclConflicts( parent, decl ) ) { 700 tables->enumTable.insert( existing, std::make_pair( id, decl ) ); 701 ++tables->size; 702 } 703 } else { 704 if ( ! addedDeclConflicts( existing->second, decl ) ) { 705 existing->second = decl; 706 } 707 } 708 } 709 710 void Indexer::addUnion( const std::string &id ) { 711 addUnion( new UnionDecl( id ) ); 712 } 713 714 void Indexer::addUnion( UnionDecl *decl ) { 715 makeWritable(); 716 717 const std::string &id = decl->get_name(); 718 UnionTable::iterator existing = tables->unionTable.find( id ); 719 if ( existing == tables->unionTable.end() ) { 720 UnionDecl *parent = tables->base.lookupUnionAtScope( id, scope ); 721 if ( ! parent || ! addedDeclConflicts( parent, decl ) ) { 722 tables->unionTable.insert( existing, std::make_pair( id, decl ) ); 723 ++tables->size; 724 } 725 } else { 726 if ( ! addedDeclConflicts( existing->second, decl ) ) { 727 existing->second = decl; 728 } 729 } 730 } 731 732 void Indexer::addTrait( TraitDecl *decl ) { 733 makeWritable(); 734 735 const std::string &id = decl->get_name(); 736 TraitTable::iterator existing = tables->traitTable.find( id ); 737 if ( existing == tables->traitTable.end() ) { 738 TraitDecl *parent = tables->base.lookupTraitAtScope( id, scope ); 739 if ( ! parent || ! addedDeclConflicts( parent, decl ) ) { 740 tables->traitTable.insert( existing, std::make_pair( id, decl ) ); 741 ++tables->size; 742 } 743 } else { 744 if ( ! addedDeclConflicts( existing->second, decl ) ) { 745 existing->second = decl; 746 } 747 } 354 748 } 355 749 356 750 void Indexer::enterScope() { 751 ++scope; 752 357 753 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(); 754 std::cout << "--- Entering scope " << scope << std::endl; 755 } 366 756 } 367 757 368 758 void Indexer::leaveScope() { 369 759 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(); 760 761 assert( scope > 0 && "cannot leave initial scope" ); 762 --scope; 763 764 while ( tables && tables->scope > scope ) { 765 if ( doDebug ) { 766 cout << "--- Leaving scope " << tables->scope << " containing" << std::endl; 767 dump( tables->idTable, cout ); 768 dump( tables->typeTable, cout ); 769 dump( tables->structTable, cout ); 770 dump( tables->enumTable, cout ); 771 dump( tables->unionTable, cout ); 772 dump( tables->traitTable, cout ); 773 } 774 775 // swap tables for base table until we find one at an appropriate scope 776 Indexer::Impl *base = newRef( tables->base.tables ); 777 deleteRef( tables ); 778 tables = base; 779 } 387 780 } 388 781 389 782 void Indexer::print( std::ostream &os, int indent ) const { 390 783 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 784 785 cerr << "===idTable===" << std::endl; 786 if ( tables ) dump( tables->idTable, os ); 787 cerr << "===typeTable===" << std::endl; 788 if ( tables ) dump( tables->typeTable, os ); 789 cerr << "===structTable===" << std::endl; 790 if ( tables ) dump( tables->structTable, os ); 791 cerr << "===enumTable===" << std::endl; 792 if ( tables ) dump( tables->enumTable, os ); 793 cerr << "===unionTable===" << std::endl; 794 if ( tables ) dump( tables->unionTable, os ); 795 cerr << "===contextTable===" << std::endl; 796 if ( tables ) dump( tables->traitTable, os ); 413 797 } 414 798 } // namespace SymTab -
src/SymTab/Indexer.h
rc5833e8 r0f9e4403 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 ); … … 57 59 virtual void visit( UntypedOffsetofExpr *offsetofExpr ); 58 60 virtual void visit( OffsetofExpr *offsetofExpr ); 61 virtual void visit( OffsetPackExpr *offsetPackExpr ); 59 62 virtual void visit( AttrExpr *attrExpr ); 60 63 virtual void visit( LogicalExpr *logicalExpr ); … … 67 70 virtual void visit( UntypedValofExpr *valofExpr ); 68 71 69 virtual void visit( ContextInstType *contextInst );72 virtual void visit( TraitInstType *contextInst ); 70 73 virtual void visit( StructInstType *contextInst ); 71 74 virtual void visit( UnionInstType *contextInst ); … … 78 81 void leaveScope(); 79 82 80 void lookupId( const std::string &id, std::list< DeclarationWithType* >& ) const; 81 DeclarationWithType* lookupId( const std::string &id) const; 83 /// Gets all declarations with the given ID 84 void lookupId( const std::string &id, std::list< DeclarationWithType* > &out ) const; 85 /// Gets the top-most type declaration with the given ID 82 86 NamedTypeDecl *lookupType( const std::string &id ) const; 87 /// Gets the top-most struct declaration with the given ID 83 88 StructDecl *lookupStruct( const std::string &id ) const; 89 /// Gets the top-most enum declaration with the given ID 84 90 EnumDecl *lookupEnum( const std::string &id ) const; 91 /// Gets the top-most union declaration with the given ID 85 92 UnionDecl *lookupUnion( const std::string &id ) const; 86 ContextDecl *lookupContext( const std::string &id ) const; 93 /// Gets the top-most trait declaration with the given ID 94 TraitDecl *lookupTrait( const std::string &id ) const; 87 95 88 96 void print( std::ostream &os, int indent = 0 ) const; 89 97 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 98 /// looks up a specific mangled ID at the given scope 99 DeclarationWithType *lookupIdAtScope( const std::string &id, const std::string &mangleName, unsigned long scope ) const; 100 /// returns true if there exists a declaration with C linkage and the given name with a different mangled name 101 bool hasIncompatibleCDecl( const std::string &id, const std::string &mangleName ) const; 102 // equivalents to lookup functions that only look at tables at scope `scope` (which should be >= tables->scope) 103 NamedTypeDecl *lookupTypeAtScope( const std::string &id, unsigned long scope ) const; 104 StructDecl *lookupStructAtScope( const std::string &id, unsigned long scope ) const; 105 EnumDecl *lookupEnumAtScope( const std::string &id, unsigned long scope ) const; 106 UnionDecl *lookupUnionAtScope( const std::string &id, unsigned long scope ) const; 107 TraitDecl *lookupTraitAtScope( const std::string &id, unsigned long scope ) const; 108 109 void addId( DeclarationWithType *decl ); 110 void addType( NamedTypeDecl *decl ); 111 void addStruct( const std::string &id ); 112 void addStruct( StructDecl *decl ); 113 void addEnum( EnumDecl *decl ); 114 void addUnion( const std::string &id ); 115 void addUnion( UnionDecl *decl ); 116 void addTrait( TraitDecl *decl ); 117 118 struct Impl; 119 Impl *tables; ///< Copy-on-write instance of table data structure 120 unsigned long scope; ///< Scope index of this pointer 121 bool doDebug; ///< Display debugging trace? 122 123 /// Takes a new ref to a table (returns null if null) 124 static Impl *newRef( Impl *toClone ); 125 /// Clears a ref to a table (does nothing if null) 126 static void deleteRef( Impl *toFree ); 127 128 /// Ensures that tables variable is writable (i.e. allocated, uniquely owned by this Indexer, and at the current scope) 129 void makeWritable(); 98 130 }; 99 131 } // namespace SymTab -
src/SymTab/Mangler.cc
rc5833e8 r0f9e4403 224 224 acceptAll( tupleType->get_types(), *this ); 225 225 mangleName << "_"; 226 } 227 228 void Mangler::visit( VarArgsType *varArgsType ) { 229 printQualifiers( varArgsType ); 230 mangleName << "VARGS"; 226 231 } 227 232 -
src/SymTab/Mangler.h
rc5833e8 r0f9e4403 45 45 virtual void visit( TypeInstType *aggregateUseType ); 46 46 virtual void visit( TupleType *tupleType ); 47 virtual void visit( VarArgsType *varArgsType ); 47 48 48 49 std::string get_mangleName() { return mangleName.str(); } -
src/SymTab/TypeEquality.cc
rc5833e8 r0f9e4403 41 41 virtual void visit( EnumInstType *enumInst ); 42 42 virtual void visit( TypeInstType *typeInst ); 43 virtual void visit( VarArgsType *varArgsType ); 43 44 44 45 void handleQualifiers( Type * t ); … … 191 192 } 192 193 } 194 195 void TypeEquality::visit( VarArgsType *varArgsType ) { 196 handleQualifiers( varArgsType ); 197 if ( ! dynamic_cast< VarArgsType * >( other ) ) { 198 result = false; 199 } 200 } 193 201 } // namespace SymTab -
src/SymTab/Validate.cc
rc5833e8 r0f9e4403 10 10 // Created On : Sun May 17 21:50:04 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Jan 27 22:03:12201613 // Update Count : 2 2512 // Last Modified On : Wed Apr 13 16:39:30 2016 13 // Update Count : 251 14 14 // 15 15 … … 40 40 #include <list> 41 41 #include <iterator> 42 #include "Common/utility.h" 43 #include "Common/UniqueName.h" 42 44 #include "Validate.h" 43 45 #include "SynTree/Visitor.h" 44 46 #include "SynTree/Mutator.h" 45 47 #include "SynTree/Type.h" 48 #include "SynTree/Expression.h" 46 49 #include "SynTree/Statement.h" 47 50 #include "SynTree/TypeSubstitution.h" … … 49 52 #include "FixFunction.h" 50 53 // #include "ImplementationType.h" 51 #include "Common/utility.h" 52 #include "Common/UniqueName.h" 54 #include "GenPoly/DeclMutator.h" 53 55 #include "AddVisit.h" 54 56 #include "MakeLibCfa.h" … … 70 72 71 73 virtual void visit( CompoundStmt *compoundStmt ); 72 virtual void visit( IfStmt *ifStmt );73 virtual void visit( WhileStmt *whileStmt );74 virtual void visit( ForStmt *forStmt );75 74 virtual void visit( SwitchStmt *switchStmt ); 76 75 virtual void visit( ChooseStmt *chooseStmt ); 77 virtual void visit( CaseStmt *caseStmt ); 78 virtual void visit( CatchStmt *catchStmt ); 76 // virtual void visit( CaseStmt *caseStmt ); 79 77 private: 80 78 HoistStruct(); … … 101 99 virtual void visit( StructInstType *structInst ); 102 100 virtual void visit( UnionInstType *unionInst ); 103 virtual void visit( ContextInstType *contextInst );101 virtual void visit( TraitInstType *contextInst ); 104 102 virtual void visit( StructDecl *structDecl ); 105 103 virtual void visit( UnionDecl *unionDecl ); … … 137 135 virtual void visit( UnionDecl *structDecl ); 138 136 virtual void visit( TypeDecl *typeDecl ); 139 virtual void visit( ContextDecl *ctxDecl );137 virtual void visit( TraitDecl *ctxDecl ); 140 138 virtual void visit( FunctionDecl *functionDecl ); 141 139 … … 144 142 145 143 virtual void visit( CompoundStmt *compoundStmt ); 146 virtual void visit( IfStmt *ifStmt );147 virtual void visit( WhileStmt *whileStmt );148 virtual void visit( ForStmt *forStmt );149 144 virtual void visit( SwitchStmt *switchStmt ); 150 145 virtual void visit( ChooseStmt *chooseStmt ); 151 virtual void visit( CaseStmt *caseStmt ); 152 virtual void visit( CatchStmt *catchStmt ); 146 // virtual void visit( CaseStmt *caseStmt ); 153 147 154 148 AutogenerateRoutines() : functionNesting( 0 ) {} … … 166 160 /// and return something if the return type is non-void. 167 161 static void checkFunctionReturns( std::list< Declaration * > & translationUnit ); 168 169 162 private: 170 163 virtual void visit( FunctionDecl * functionDecl ); … … 192 185 virtual Declaration *mutate( UnionDecl * unionDecl ); 193 186 virtual Declaration *mutate( EnumDecl * enumDecl ); 194 virtual Declaration *mutate( ContextDecl * contextDecl );187 virtual Declaration *mutate( TraitDecl * contextDecl ); 195 188 196 189 template<typename AggDecl> 197 190 AggDecl *handleAggregate( AggDecl * aggDecl ); 198 191 192 template<typename AggDecl> 193 void addImplicitTypedef( AggDecl * aggDecl ); 194 199 195 typedef std::map< std::string, std::pair< TypedefDecl *, int > > TypedefMap; 200 196 TypedefMap typedefNames; … … 202 198 }; 203 199 200 class CompoundLiteral : public GenPoly::DeclMutator { 201 DeclarationNode::StorageClass storageclass = DeclarationNode::NoStorageClass; 202 203 virtual DeclarationWithType * mutate( ObjectDecl *objectDecl ); 204 virtual Expression *mutate( CompoundLiteralExpr *compLitExpr ); 205 }; 206 204 207 void validate( std::list< Declaration * > &translationUnit, bool doDebug ) { 205 208 Pass1 pass1; 206 209 Pass2 pass2( doDebug, 0 ); 207 210 Pass3 pass3( 0 ); 211 CompoundLiteral compoundliteral; 212 208 213 EliminateTypedef::eliminateTypedef( translationUnit ); 209 214 HoistStruct::hoistStruct( translationUnit ); … … 211 216 acceptAll( translationUnit, pass2 ); 212 217 ReturnChecker::checkFunctionReturns( translationUnit ); 218 mutateAll( translationUnit, compoundliteral ); 213 219 AutogenerateRoutines::autogenerateRoutines( translationUnit ); 214 220 acceptAll( translationUnit, pass3 ); … … 292 298 } 293 299 294 void HoistStruct::visit( IfStmt *ifStmt ) {295 addVisit( ifStmt, *this );296 }297 298 void HoistStruct::visit( WhileStmt *whileStmt ) {299 addVisit( whileStmt, *this );300 }301 302 void HoistStruct::visit( ForStmt *forStmt ) {303 addVisit( forStmt, *this );304 }305 306 300 void HoistStruct::visit( SwitchStmt *switchStmt ) { 307 301 addVisit( switchStmt, *this ); … … 312 306 } 313 307 314 void HoistStruct::visit( CaseStmt *caseStmt ) { 315 addVisit( caseStmt, *this ); 316 } 317 318 void HoistStruct::visit( CatchStmt *cathStmt ) { 319 addVisit( cathStmt, *this ); 320 } 308 // void HoistStruct::visit( CaseStmt *caseStmt ) { 309 // addVisit( caseStmt, *this ); 310 // } 321 311 322 312 void Pass1::visit( EnumDecl *enumDecl ) { … … 404 394 } 405 395 406 void Pass2::visit( ContextInstType *contextInst ) {396 void Pass2::visit( TraitInstType *contextInst ) { 407 397 Parent::visit( contextInst ); 408 ContextDecl *ctx = indexer->lookupContext( contextInst->get_name() );398 TraitDecl *ctx = indexer->lookupTrait( contextInst->get_name() ); 409 399 if ( ! ctx ) { 410 400 throw SemanticError( "use of undeclared context " + contextInst->get_name() ); … … 412 402 for ( std::list< TypeDecl * >::const_iterator i = ctx->get_parameters().begin(); i != ctx->get_parameters().end(); ++i ) { 413 403 for ( std::list< DeclarationWithType * >::const_iterator assert = (*i )->get_assertions().begin(); assert != (*i )->get_assertions().end(); ++assert ) { 414 if ( ContextInstType *otherCtx = dynamic_cast< ContextInstType * >(*assert ) ) {404 if ( TraitInstType *otherCtx = dynamic_cast< TraitInstType * >(*assert ) ) { 415 405 cloneAll( otherCtx->get_members(), contextInst->get_members() ); 416 406 } else { … … 476 466 while ( ! toBeDone.empty() ) { 477 467 for ( std::list< DeclarationWithType * >::iterator assertion = toBeDone.begin(); assertion != toBeDone.end(); ++assertion ) { 478 if ( ContextInstType *ctx = dynamic_cast< ContextInstType * >( (*assertion )->get_type() ) ) {468 if ( TraitInstType *ctx = dynamic_cast< TraitInstType * >( (*assertion )->get_type() ) ) { 479 469 for ( std::list< Declaration * >::const_iterator i = ctx->get_members().begin(); i != ctx->get_members().end(); ++i ) { 480 470 DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( *i ); … … 851 841 } 852 842 853 void AutogenerateRoutines::visit( ContextDecl *) {843 void AutogenerateRoutines::visit( TraitDecl *) { 854 844 // ensure that we don't add assignment ops for types defined as part of the context 855 845 } … … 874 864 } 875 865 876 void AutogenerateRoutines::visit( IfStmt *ifStmt ) {877 visitStatement( ifStmt );878 }879 880 void AutogenerateRoutines::visit( WhileStmt *whileStmt ) {881 visitStatement( whileStmt );882 }883 884 void AutogenerateRoutines::visit( ForStmt *forStmt ) {885 visitStatement( forStmt );886 }887 888 866 void AutogenerateRoutines::visit( SwitchStmt *switchStmt ) { 889 867 visitStatement( switchStmt ); … … 894 872 } 895 873 896 void AutogenerateRoutines::visit( CaseStmt *caseStmt ) { 897 visitStatement( caseStmt ); 898 } 899 900 void AutogenerateRoutines::visit( CatchStmt *cathStmt ) { 901 visitStatement( cathStmt ); 902 } 874 // void AutogenerateRoutines::visit( CaseStmt *caseStmt ) { 875 // visitStatement( caseStmt ); 876 // } 903 877 904 878 void ReturnChecker::checkFunctionReturns( std::list< Declaration * > & translationUnit ) { … … 1043 1017 } 1044 1018 1045 // there may be typedefs nested within aggregates 1046 // in order for everything to work properly, these 1047 // should be removed as well 1019 // there may be typedefs nested within aggregates in order for everything to work properly, these should be removed 1020 // as well 1048 1021 template<typename AggDecl> 1049 1022 AggDecl *EliminateTypedef::handleAggregate( AggDecl * aggDecl ) { … … 1059 1032 return aggDecl; 1060 1033 } 1061 1034 1035 template<typename AggDecl> 1036 void EliminateTypedef::addImplicitTypedef( AggDecl * aggDecl ) { 1037 if ( typedefNames.count( aggDecl->get_name() ) == 0 ) { 1038 Type *type; 1039 if ( StructDecl * newDeclStructDecl = dynamic_cast< StructDecl * >( aggDecl ) ) { 1040 type = new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() ); 1041 } else if ( UnionDecl * newDeclUnionDecl = dynamic_cast< UnionDecl * >( aggDecl ) ) { 1042 type = new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() ); 1043 } else if ( EnumDecl * newDeclEnumDecl = dynamic_cast< EnumDecl * >( aggDecl ) ) { 1044 type = new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() ); 1045 } // if 1046 TypedefDecl * tyDecl = new TypedefDecl( aggDecl->get_name(), DeclarationNode::NoStorageClass, type ); 1047 typedefNames[ aggDecl->get_name() ] = std::make_pair( tyDecl, scopeLevel ); 1048 } // if 1049 } 1062 1050 Declaration *EliminateTypedef::mutate( StructDecl * structDecl ) { 1051 addImplicitTypedef( structDecl ); 1063 1052 Mutator::mutate( structDecl ); 1064 1053 return handleAggregate( structDecl ); … … 1066 1055 1067 1056 Declaration *EliminateTypedef::mutate( UnionDecl * unionDecl ) { 1057 addImplicitTypedef( unionDecl ); 1068 1058 Mutator::mutate( unionDecl ); 1069 1059 return handleAggregate( unionDecl ); … … 1071 1061 1072 1062 Declaration *EliminateTypedef::mutate( EnumDecl * enumDecl ) { 1063 addImplicitTypedef( enumDecl ); 1073 1064 Mutator::mutate( enumDecl ); 1074 1065 return handleAggregate( enumDecl ); 1075 1066 } 1076 1067 1077 Declaration *EliminateTypedef::mutate( ContextDecl * contextDecl ) {1068 Declaration *EliminateTypedef::mutate( TraitDecl * contextDecl ) { 1078 1069 Mutator::mutate( contextDecl ); 1079 1070 return handleAggregate( contextDecl ); 1080 1071 } 1081 1072 1073 DeclarationWithType * CompoundLiteral::mutate( ObjectDecl *objectDecl ) { 1074 storageclass = objectDecl->get_storageClass(); 1075 DeclarationWithType * temp = Mutator::mutate( objectDecl ); 1076 storageclass = DeclarationNode::NoStorageClass; 1077 return temp; 1078 } 1079 1080 Expression *CompoundLiteral::mutate( CompoundLiteralExpr *compLitExpr ) { 1081 // transform [storage_class] ... (struct S){ 3, ... }; 1082 // into [storage_class] struct S temp = { 3, ... }; 1083 static UniqueName indexName( "_compLit" ); 1084 1085 ObjectDecl *tempvar = new ObjectDecl( indexName.newName(), storageclass, LinkageSpec::C, 0, compLitExpr->get_type(), compLitExpr->get_initializer() ); 1086 compLitExpr->set_type( 0 ); 1087 compLitExpr->set_initializer( 0 ); 1088 delete compLitExpr; 1089 DeclarationWithType * newtempvar = mutate( tempvar ); 1090 addDeclaration( newtempvar ); // add modified temporary to current block 1091 return new VariableExpr( newtempvar ); 1092 } 1082 1093 } // namespace SymTab 1083 1094 -
src/SymTab/module.mk
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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/Constant.cc
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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 Dec 09 14:08:22 201513 // Update Count : 3 211 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 17:28:11 2016 13 // Update Count : 33 14 14 // 15 15 … … 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/Expression.cc
rc5833e8 r0f9e4403 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // Expression.cc -- 7 // Expression.cc -- 8 8 // 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 Dec 09 14:10:29 201513 // Update Count : 3411 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Apr 8 17:16:23 2016 13 // Update Count : 40 14 14 // 15 15 … … 22 22 23 23 #include "Type.h" 24 #include "Initializer.h" 24 25 #include "Expression.h" 25 26 #include "Declaration.h" … … 211 212 212 213 os << " of "; 214 215 if ( type ) { 216 type->print(os, indent + 2); 217 } else { 218 os << "<NULL>"; 219 } 220 221 os << std::endl; 222 Expression::print( os, indent ); 223 } 224 225 OffsetPackExpr::OffsetPackExpr( StructInstType *type_, Expression *aname_ ) : Expression( aname_ ), type( type_ ) { 226 add_result( new ArrayType( Type::Qualifiers(), new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), 0, false, false ) ); 227 } 228 229 OffsetPackExpr::OffsetPackExpr( const OffsetPackExpr &other ) : Expression( other ), type( maybeClone( other.type ) ) {} 230 231 OffsetPackExpr::~OffsetPackExpr() { delete type; } 232 233 void OffsetPackExpr::print( std::ostream &os, int indent ) const { 234 os << std::string( indent, ' ' ) << "Offset pack expression on "; 213 235 214 236 if ( type ) { … … 422 444 } 423 445 446 AsmExpr::AsmExpr( const AsmExpr & other ) : inout( maybeClone( other.inout ) ), constraint( maybeClone( other.constraint ) ), operand( maybeClone( other.operand ) ) {} 447 448 424 449 void AsmExpr::print( std::ostream &os, int indent ) const { 425 450 os << "Asm Expression: " << std::endl; … … 429 454 } 430 455 456 UntypedValofExpr::UntypedValofExpr( const UntypedValofExpr & other ) : Expression( other ), body ( maybeClone( other.body ) ) {} 457 458 UntypedValofExpr::~UntypedValofExpr() { delete body; } 459 431 460 void UntypedValofExpr::print( std::ostream &os, int indent ) const { 432 461 os << std::string( indent, ' ' ) << "Valof Expression: " << std::endl; … … 434 463 get_body()->print( os, indent + 2 ); 435 464 } 465 466 467 CompoundLiteralExpr::CompoundLiteralExpr( Type * type, Initializer * initializer ) : type( type ), initializer( initializer ) { 468 add_result( type->clone() ); 469 } 470 471 CompoundLiteralExpr::CompoundLiteralExpr( const CompoundLiteralExpr &other ) : Expression( other ), type( maybeClone( other.type ) ), initializer( maybeClone( other.initializer ) ) {} 472 473 CompoundLiteralExpr::~CompoundLiteralExpr() { 474 delete initializer; 475 delete type; 476 } 477 478 void CompoundLiteralExpr::print( std::ostream &os, int indent ) const { 479 os << "Compound Literal Expression: " << std::endl; 480 if ( type ) type->print( os, indent + 2 ); 481 if ( initializer ) initializer->print( os, indent + 2 ); 482 } 483 436 484 437 485 std::ostream & operator<<( std::ostream & out, Expression * expr ) { -
src/SynTree/Expression.h
rc5833e8 r0f9e4403 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // Expression.h -- 7 // Expression.h -- 8 8 // 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 Dec 09 14:10:21 201513 // Update Count : 1911 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Apr 8 17:18:06 2016 13 // Update Count : 21 14 14 // 15 15 … … 155 155 }; 156 156 157 // xxx - this doesn't appear to actually be hooked in anywhere. We should use this instead of the "&&"" UntypedExpr hack 157 158 class LabelAddressExpr : public Expression { 158 159 public: 159 160 LabelAddressExpr( Expression *arg ); 160 LabelAddressExpr( const AddressExpr &other );161 LabelAddressExpr( const LabelAddressExpr &other ); 161 162 virtual ~LabelAddressExpr(); 162 163 … … 251 252 }; 252 253 253 /// ConstantExpr represents an expression that simply refers to the value of a constant 254 /// ConstantExpr represents an expression that simply refers to the value of a constant 254 255 class ConstantExpr : public Expression { 255 256 public: … … 359 360 Type *type; 360 361 DeclarationWithType *member; 362 }; 363 364 /// Expression representing a pack of field-offsets for a generic type 365 class OffsetPackExpr : public Expression { 366 public: 367 OffsetPackExpr( StructInstType *type_, Expression *aname_ = 0 ); 368 OffsetPackExpr( const OffsetPackExpr &other ); 369 virtual ~OffsetPackExpr(); 370 371 StructInstType *get_type() const { return type; } 372 void set_type( StructInstType *newValue ) { type = newValue; } 373 374 virtual OffsetPackExpr *clone() const { return new OffsetPackExpr( *this ); } 375 virtual void accept( Visitor &v ) { v.visit( this ); } 376 virtual Expression *acceptMutator( Mutator &m ) { return m.mutate( this ); } 377 378 virtual void print( std::ostream &os, int indent = 0 ) const; 379 380 private: 381 StructInstType *type; 361 382 }; 362 383 … … 515 536 public: 516 537 AsmExpr( Expression *inout, ConstantExpr *constraint, Expression *operand ) : inout( inout ), constraint( constraint ), operand( operand ) {} 538 AsmExpr( const AsmExpr & other ); 517 539 virtual ~AsmExpr() { delete inout; delete constraint; delete operand; }; 518 540 … … 541 563 public: 542 564 UntypedValofExpr( Statement *_body, Expression *_aname = 0 ) : Expression( _aname ), body ( _body ) {} 543 virtual ~UntypedValofExpr() {} 565 UntypedValofExpr( const UntypedValofExpr & other ); 566 virtual ~UntypedValofExpr(); 544 567 545 568 Expression *get_value(); … … 552 575 private: 553 576 Statement *body; 577 }; 578 579 /// CompoundLiteralExpr represents a C99 'compound literal' 580 class CompoundLiteralExpr : public Expression { 581 public: 582 CompoundLiteralExpr( Type * type, Initializer * initializer ); 583 CompoundLiteralExpr( const CompoundLiteralExpr &other ); 584 ~CompoundLiteralExpr(); 585 586 Type * get_type() const { return type; } 587 void set_type( Type * t ) { type = t; } 588 589 Initializer * get_initializer() const { return initializer; } 590 void set_initializer( Initializer * i ) { initializer = i; } 591 592 virtual CompoundLiteralExpr *clone() const { return new CompoundLiteralExpr( *this ); } 593 virtual void accept( Visitor &v ) { v.visit( this ); } 594 virtual Expression *acceptMutator( Mutator &m ) { return m.mutate( this ); } 595 virtual void print( std::ostream &os, int indent = 0 ) const; 596 private: 597 Type * type; 598 Initializer * initializer; 554 599 }; 555 600 -
src/SynTree/Mutator.cc
rc5833e8 r0f9e4403 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Jul 25 19:21:33 201513 // Update Count : 1 112 // Last Modified On : Fri Apr 1 18:05:16 2016 13 // Update Count : 16 14 14 // 15 15 … … 63 63 } 64 64 65 Declaration *Mutator::mutate( ContextDecl *aggregateDecl ) {65 Declaration *Mutator::mutate( TraitDecl *aggregateDecl ) { 66 66 handleAggregateDecl( aggregateDecl ); 67 67 return aggregateDecl; … … 274 274 } 275 275 276 Expression *Mutator::mutate( OffsetPackExpr *offsetPackExpr ) { 277 mutateAll( offsetPackExpr->get_results(), *this ); 278 offsetPackExpr->set_type( maybeMutate( offsetPackExpr->get_type(), *this ) ); 279 return offsetPackExpr; 280 } 281 276 282 Expression *Mutator::mutate( AttrExpr *attrExpr ) { 277 283 mutateAll( attrExpr->get_results(), *this ); … … 336 342 } 337 343 344 Expression *Mutator::mutate( CompoundLiteralExpr *compLitExpr ) { 345 mutateAll( compLitExpr->get_results(), *this ); 346 compLitExpr->set_type( maybeMutate( compLitExpr->get_type(), *this ) ); 347 compLitExpr->set_initializer( maybeMutate( compLitExpr->get_initializer(), *this ) ); 348 return compLitExpr; 349 } 350 338 351 Type *Mutator::mutate( VoidType *voidType ) { 339 352 mutateAll( voidType->get_forall(), *this ); … … 387 400 } 388 401 389 Type *Mutator::mutate( ContextInstType *aggregateUseType ) {402 Type *Mutator::mutate( TraitInstType *aggregateUseType ) { 390 403 handleReferenceToType( aggregateUseType ); 391 404 mutateAll( aggregateUseType->get_members(), *this ); … … 421 434 } 422 435 436 Type *Mutator::mutate( VarArgsType *varArgsType ) { 437 mutateAll( varArgsType->get_forall(), *this ); 438 return varArgsType; 439 } 440 423 441 Initializer *Mutator::mutate( SingleInit *singleInit ) { 424 442 singleInit->set_value( singleInit->get_value()->acceptMutator( *this ) ); -
src/SynTree/Mutator.h
rc5833e8 r0f9e4403 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Nov 19 22:26:16 201513 // Update Count : 812 // Last Modified On : Fri Apr 1 17:26:56 2016 13 // Update Count : 10 14 14 // 15 15 #include <cassert> … … 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 ); … … 67 67 virtual Expression* mutate( UntypedOffsetofExpr *offsetofExpr ); 68 68 virtual Expression* mutate( OffsetofExpr *offsetofExpr ); 69 virtual Expression* mutate( OffsetPackExpr *offsetPackExpr ); 69 70 virtual Expression* mutate( AttrExpr *attrExpr ); 70 71 virtual Expression* mutate( LogicalExpr *logicalExpr ); … … 76 77 virtual Expression* mutate( AsmExpr *asmExpr ); 77 78 virtual Expression* mutate( UntypedValofExpr *valofExpr ); 79 virtual Expression* mutate( CompoundLiteralExpr *compLitExpr ); 78 80 79 81 virtual Type* mutate( VoidType *basicType ); … … 85 87 virtual Type* mutate( UnionInstType *aggregateUseType ); 86 88 virtual Type* mutate( EnumInstType *aggregateUseType ); 87 virtual Type* mutate( ContextInstType *aggregateUseType );89 virtual Type* mutate( TraitInstType *aggregateUseType ); 88 90 virtual Type* mutate( TypeInstType *aggregateUseType ); 89 91 virtual Type* mutate( TupleType *tupleType ); 90 92 virtual Type* mutate( TypeofType *typeofType ); 91 93 virtual Type* mutate( AttrType *attrType ); 94 virtual Type* mutate( VarArgsType *varArgsType ); 92 95 93 96 virtual Initializer* mutate( SingleInit *singleInit ); -
src/SynTree/ReferenceToType.cc
rc5833e8 r0f9e4403 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/Statement.cc
rc5833e8 r0f9e4403 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // Statement.cc -- 7 // Statement.cc -- 8 8 // 9 9 // Author : Richard C. Bilson … … 36 36 ExprStmt::ExprStmt( std::list<Label> _labels, Expression *_expr ) : Statement( _labels ), expr( _expr ) {} 37 37 38 ExprStmt::~ExprStmt() {} 38 ExprStmt::ExprStmt( const ExprStmt &other ) : Statement( other ), expr( maybeClone( other.expr ) ) {} 39 40 ExprStmt::~ExprStmt() { 41 delete expr; 42 } 39 43 40 44 void ExprStmt::print( std::ostream &os, int indent ) const { 41 45 os << string( indent, ' ' ) << "Expression Statement:" << endl; 42 46 expr->print( os, indent + 2 ); 43 } 47 } 44 48 45 49 46 50 AsmStmt::AsmStmt( std::list<Label> labels, bool voltile, ConstantExpr *instruction, std::list<Expression *> output, std::list<Expression *> input, std::list<ConstantExpr *> clobber, std::list<Label> gotolabels ) : Statement( labels ), voltile( voltile ), instruction( instruction ), output( output ), input( input ), clobber( clobber ), gotolabels( gotolabels ) {} 51 52 AsmStmt::AsmStmt( const AsmStmt & other ) : Statement( other ), voltile( other.voltile ), instruction( maybeClone( other.instruction ) ), gotolabels( other.gotolabels ) { 53 cloneAll( other.output, output ); 54 cloneAll( other.input, input ); 55 cloneAll( other.clobber, clobber ); 56 } 47 57 48 58 AsmStmt::~AsmStmt() { … … 60 70 os << endl << std::string( indent, ' ' ) << "output: " << endl; 61 71 printAll( output, os, indent + 2 ); 62 } // if 72 } // if 63 73 if ( ! input.empty() ) { 64 74 os << std::string( indent, ' ' ) << "input: " << endl << std::string( indent, ' ' ); … … 69 79 printAll( clobber, os, indent + 2 ); 70 80 } // if 71 } 81 } 72 82 73 83 … … 93 103 ReturnStmt::ReturnStmt( std::list<Label> labels, Expression *_expr, bool throwP ) : Statement( labels ), expr( _expr ), isThrow( throwP ) {} 94 104 105 ReturnStmt::ReturnStmt( const ReturnStmt & other ) : Statement( other ), expr( maybeClone( other.expr ) ), isThrow( other.isThrow ) {} 106 95 107 ReturnStmt::~ReturnStmt() { 96 108 delete expr; … … 106 118 Statement( _labels ), condition( _condition ), thenPart( _thenPart ), elsePart( _elsePart ) {} 107 119 120 IfStmt::IfStmt( const IfStmt & other ) : 121 Statement( other ), condition( maybeClone( other.condition ) ), thenPart( maybeClone( other.thenPart ) ), elsePart( maybeClone( other.elsePart ) ) {} 122 108 123 IfStmt::~IfStmt() {} 109 124 … … 123 138 SwitchStmt::SwitchStmt( std::list<Label> _labels, Expression * _condition, std::list<Statement *> &_branches ): 124 139 Statement( _labels ), condition( _condition ), branches( _branches ) { 140 } 141 142 SwitchStmt::SwitchStmt( const SwitchStmt & other ): 143 Statement( other ), condition( maybeClone( other.condition ) ) { 144 cloneAll( other.branches, branches ); 125 145 } 126 146 … … 145 165 } 146 166 147 CaseStmt::CaseStmt( std::list<Label> _labels, Expression *_condition, std::list<Statement *> &_statements, bool deflt ) throw ( SemanticError ) : 167 CaseStmt::CaseStmt( std::list<Label> _labels, Expression *_condition, std::list<Statement *> &_statements, bool deflt ) throw ( SemanticError ) : 148 168 Statement( _labels ), condition( _condition ), stmts( _statements ), _isDefault( deflt ) { 149 169 if ( isDefault() && condition != 0 ) 150 170 throw SemanticError("default with conditions"); 171 } 172 173 CaseStmt::CaseStmt( const CaseStmt & other ) : 174 Statement( other ), condition( maybeClone(other.condition ) ), _isDefault( other._isDefault ) { 175 cloneAll( other.stmts, stmts ); 151 176 } 152 177 … … 181 206 } 182 207 208 ChooseStmt::ChooseStmt( const ChooseStmt & other ): 209 Statement( other ), condition( maybeClone( other.condition ) ) { 210 cloneAll( other.branches, branches ); 211 } 212 183 213 ChooseStmt::~ChooseStmt() { 184 214 delete condition; … … 208 238 } 209 239 240 WhileStmt::WhileStmt( const WhileStmt & other ): 241 Statement( other ), condition( maybeClone( other.condition ) ), body( maybeClone( other.body ) ), isDoWhile( other.isDoWhile ) { 242 } 243 210 244 WhileStmt::~WhileStmt() { 211 245 delete body; … … 223 257 ForStmt::ForStmt( std::list<Label> labels, std::list<Statement *> initialization_, Expression *condition_, Expression *increment_, Statement *body_ ): 224 258 Statement( labels ), initialization( initialization_ ), condition( condition_ ), increment( increment_ ), body( body_ ) { 259 } 260 261 ForStmt::ForStmt( const ForStmt & other ): 262 Statement( other ), condition( maybeClone( other.condition ) ), increment( maybeClone( other.increment ) ), body( maybeClone( other.body ) ) { 263 cloneAll( other.initialization, initialization ); 264 225 265 } 226 266 … … 241 281 os << string( indent, ' ' ) << "For Statement" << endl ; 242 282 243 os << string( indent + 2, ' ' ) << "initialization: \n"; 283 os << string( indent + 2, ' ' ) << "initialization: \n"; 244 284 for ( std::list<Statement *>::const_iterator it = initialization.begin(); it != initialization.end(); ++it ) { 245 285 (*it)->print( os, indent + 4 ); 246 286 } 247 287 248 os << "\n" << string( indent + 2, ' ' ) << "condition: \n"; 288 os << "\n" << string( indent + 2, ' ' ) << "condition: \n"; 249 289 if ( condition != 0 ) 250 290 condition->print( os, indent + 4 ); 251 291 252 os << "\n" << string( indent + 2, ' ' ) << "increment: \n"; 292 os << "\n" << string( indent + 2, ' ' ) << "increment: \n"; 253 293 if ( increment != 0 ) 254 294 increment->print( os, indent + 4 ); 255 295 256 os << "\n" << string( indent + 2, ' ' ) << "statement block: \n"; 296 os << "\n" << string( indent + 2, ' ' ) << "statement block: \n"; 257 297 if ( body != 0 ) 258 298 body->print( os, indent + 4 ); … … 265 305 } 266 306 267 TryStmt::TryStmt( const TryStmt &other ) : Statement( other.labels ) { 268 block = other.block; 269 std::copy( other.handlers.begin(), other.handlers.end(), back_inserter( handlers ) ); 270 finallyBlock = other.finallyBlock; 307 TryStmt::TryStmt( const TryStmt &other ) : Statement( other ), block( maybeClone( other.block ) ), finallyBlock( maybeClone( other.finallyBlock ) ) { 308 cloneAll( other.handlers, handlers ); 271 309 } 272 310 … … 294 332 CatchStmt::CatchStmt( std::list<Label> labels, Declaration *_decl, Statement *_body, bool isCatchRest ) : 295 333 Statement( labels ), decl ( _decl ), body( _body ), catchRest ( isCatchRest ) { 334 } 335 336 CatchStmt::CatchStmt( const CatchStmt & other ) : 337 Statement( other ), decl ( maybeClone( other.decl ) ), body( maybeClone( other.body ) ), catchRest ( other.catchRest ) { 296 338 } 297 339 … … 319 361 } 320 362 363 FinallyStmt::FinallyStmt( const FinallyStmt & other ) : Statement( other ), block( maybeClone( other.block ) ) { 364 } 365 321 366 FinallyStmt::~FinallyStmt() { 322 367 delete block; … … 331 376 NullStmt::NullStmt( std::list<Label> labels ) : CompoundStmt( labels ) {} 332 377 NullStmt::NullStmt() : CompoundStmt( std::list<Label>() ) {} 333 NullStmt::~NullStmt() {}334 378 335 379 void NullStmt::print( std::ostream &os, int indent ) const { -
src/SynTree/Statement.h
rc5833e8 r0f9e4403 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // Statement.h -- 7 // Statement.h -- 8 8 // 9 9 // Author : Richard C. Bilson … … 57 57 public: 58 58 ExprStmt( std::list<Label> labels, Expression *expr ); 59 ExprStmt( const ExprStmt &other ); 59 60 virtual ~ExprStmt(); 60 61 … … 73 74 public: 74 75 AsmStmt( std::list<Label> labels, bool voltile, ConstantExpr *instruction, std::list<Expression *> input, std::list<Expression *> output, std::list<ConstantExpr *> clobber, std::list<Label> gotolabels ); 76 AsmStmt( const AsmStmt &other ); 75 77 virtual ~AsmStmt(); 76 78 … … 103 105 public: 104 106 IfStmt( std::list<Label> labels, Expression *condition, Statement *thenPart, Statement *elsePart ); 107 IfStmt( const IfStmt &other ); 105 108 virtual ~IfStmt(); 106 109 … … 111 114 Statement *get_elsePart() { return elsePart; } 112 115 void set_elsePart( Statement *newValue ) { elsePart = newValue; } 113 116 114 117 virtual IfStmt *clone() const { return new IfStmt( *this ); } 115 118 virtual void accept( Visitor &v ) { v.visit( this ); } … … 125 128 public: 126 129 SwitchStmt( std::list<Label> labels, Expression *condition, std::list<Statement *> &branches ); 130 SwitchStmt( const SwitchStmt &other ); 127 131 virtual ~SwitchStmt(); 128 132 … … 146 150 public: 147 151 ChooseStmt( std::list<Label> labels, Expression *condition, std::list<Statement *> &branches ); 152 ChooseStmt( const ChooseStmt &other ); 148 153 virtual ~ChooseStmt(); 149 154 … … 177 182 class CaseStmt : public Statement { 178 183 public: 179 CaseStmt( std::list<Label> labels, Expression *conditions, 184 CaseStmt( std::list<Label> labels, Expression *conditions, 180 185 std::list<Statement *> &stmts, bool isdef = false ) throw(SemanticError); 186 CaseStmt( const CaseStmt &other ); 181 187 virtual ~CaseStmt(); 182 188 … … 192 198 std::list<Statement *> &get_statements() { return stmts; } 193 199 void set_statements( std::list<Statement *> &newValue ) { stmts = newValue; } 194 200 195 201 virtual void accept( Visitor &v ) { v.visit( this ); } 196 202 virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); } … … 208 214 WhileStmt( std::list<Label> labels, Expression *condition, 209 215 Statement *body, bool isDoWhile = false ); 216 WhileStmt( const WhileStmt &other ); 210 217 virtual ~WhileStmt(); 211 218 … … 216 223 bool get_isDoWhile() { return isDoWhile; } 217 224 void set_isDoWhile( bool newValue ) { isDoWhile = newValue; } 218 225 219 226 virtual WhileStmt *clone() const { return new WhileStmt( *this ); } 220 227 virtual void accept( Visitor &v ) { v.visit( this ); } … … 231 238 ForStmt( std::list<Label> labels, std::list<Statement *> initialization, 232 239 Expression *condition = 0, Expression *increment = 0, Statement *body = 0 ); 240 ForStmt( const ForStmt &other ); 233 241 virtual ~ForStmt(); 234 242 … … 241 249 Statement *get_body() { return body; } 242 250 void set_body( Statement *newValue ) { body = newValue; } 243 251 244 252 virtual ForStmt *clone() const { return new ForStmt( *this ); } 245 253 virtual void accept( Visitor &v ) { v.visit( this ); } … … 259 267 BranchStmt( std::list<Label> labels, Label target, Type ) throw (SemanticError); 260 268 BranchStmt( std::list<Label> labels, Expression *computedTarget, Type ) throw (SemanticError); 261 virtual ~BranchStmt() {}262 269 263 270 Label get_originalTarget() { return originalTarget; } 264 271 Label get_target() { return target; } 265 272 void set_target( Label newValue ) { target = newValue; } 266 273 267 274 Expression *get_computedTarget() { return computedTarget; } 268 275 void set_target( Expression * newValue ) { computedTarget = newValue; } … … 286 293 public: 287 294 ReturnStmt( std::list<Label> labels, Expression *expr, bool throwP = false ); 295 ReturnStmt( const ReturnStmt &other ); 288 296 virtual ~ReturnStmt(); 289 297 290 298 Expression *get_expr() { return expr; } 291 299 void set_expr( Expression *newValue ) { expr = newValue; } 292 300 293 301 virtual ReturnStmt *clone() const { return new ReturnStmt( *this ); } 294 302 virtual void accept( Visitor &v ) { v.visit( this ); } … … 305 313 NullStmt(); 306 314 NullStmt( std::list<Label> labels ); 307 virtual ~NullStmt();308 315 309 316 virtual NullStmt *clone() const { return new NullStmt( *this ); } … … 311 318 virtual NullStmt *acceptMutator( Mutator &m ) { return m.mutate( this ); } 312 319 virtual void print( std::ostream &os, int indent = 0 ) const; 313 314 private: 315 }; 316 317 class TryStmt : public Statement { 320 321 private: 322 }; 323 324 class TryStmt : public Statement { 318 325 public: 319 326 TryStmt( std::list<Label> labels, CompoundStmt *tryBlock, std::list<Statement *> &handlers, FinallyStmt *finallyBlock = 0 ); … … 332 339 virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); } 333 340 virtual void print( std::ostream &os, int indent = 0 ) const; 334 341 335 342 private: 336 343 CompoundStmt *block; 337 344 std::list<Statement *> handlers; 338 345 FinallyStmt *finallyBlock; 339 }; 346 }; 340 347 341 348 class CatchStmt : public Statement { 342 349 public: 343 350 CatchStmt( std::list<Label> labels, Declaration *decl, Statement *body, bool isCatchRest = false ); 351 CatchStmt( const CatchStmt &other ); 344 352 virtual ~CatchStmt(); 345 353 … … 349 357 Statement *get_body() { return body; } 350 358 void set_body( Statement *newValue ) { body = newValue; } 351 359 352 360 virtual CatchStmt *clone() const { return new CatchStmt( *this ); } 353 361 virtual void accept( Visitor &v ) { v.visit( this ); } 354 362 virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); } 355 363 virtual void print( std::ostream &os, int indent = 0 ) const; 356 364 357 365 private: 358 366 Declaration *decl; … … 361 369 }; 362 370 363 class FinallyStmt : public Statement { 371 class FinallyStmt : public Statement { 364 372 public: 365 373 FinallyStmt( std::list<Label> labels, CompoundStmt *block ); 374 FinallyStmt( const FinallyStmt &other ); 366 375 virtual ~FinallyStmt(); 367 376 368 377 CompoundStmt *get_block() const { return block; } 369 378 void set_block( CompoundStmt *newValue ) { block = newValue; } 370 379 371 380 virtual FinallyStmt *clone() const { return new FinallyStmt( *this ); } 372 381 virtual void accept( Visitor &v ) { v.visit( this ); } … … 375 384 private: 376 385 CompoundStmt *block; 377 }; 386 }; 378 387 379 388 -
src/SynTree/SynTree.h
rc5833e8 r0f9e4403 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Jul 23 23:25:04 201513 // Update Count : 312 // Last Modified On : Fri Apr 1 16:47:44 2016 13 // Update Count : 5 14 14 // 15 15 … … 30 30 class UnionDecl; 31 31 class EnumDecl; 32 class ContextDecl;32 class TraitDecl; 33 33 class NamedTypeDecl; 34 34 class TypeDecl; … … 72 72 class UntypedOffsetofExpr; 73 73 class OffsetofExpr; 74 class OffsetPackExpr; 74 75 class AttrExpr; 75 76 class LogicalExpr; … … 81 82 class AsmExpr; 82 83 class UntypedValofExpr; 84 class CompoundLiteralExpr; 83 85 84 86 class Type; … … 92 94 class UnionInstType; 93 95 class EnumInstType; 94 class ContextInstType;96 class TraitInstType; 95 97 class TypeInstType; 96 98 class TupleType; 97 99 class TypeofType; 98 100 class AttrType; 101 class VarArgsType; 99 102 100 103 class Initializer; -
src/SynTree/Type.h
rc5833e8 r0f9e4403 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 ); } … … 400 400 }; 401 401 402 /// Represents the GCC built-in varargs type 403 class VarArgsType : public Type { 404 public: 405 VarArgsType(); 406 VarArgsType( Type::Qualifiers tq ); 407 408 virtual VarArgsType *clone() const { return new VarArgsType( *this ); } 409 virtual void accept( Visitor &v ) { v.visit( this ); } 410 virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); } 411 virtual void print( std::ostream &os, int indent = 0 ) const; 412 }; 413 402 414 inline Type::Qualifiers &Type::Qualifiers::operator+=( const Type::Qualifiers &other ) { 403 415 isConst |= other.isConst; -
src/SynTree/TypeSubstitution.cc
rc5833e8 r0f9e4403 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 } … … 196 196 Type * TypeSubstitution::mutate( TupleType *tupleType ) { 197 197 return handleType( tupleType ); 198 } 199 200 Type * TypeSubstitution::mutate( VarArgsType *varArgsType ) { 201 return handleType( varArgsType ); 198 202 } 199 203 -
src/SynTree/TypeSubstitution.h
rc5833e8 r0f9e4403 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 virtual Type* mutate(VarArgsType *varArgsType); 76 77 77 78 // TODO: worry about traversing into a forall-qualified function type or type decl with assertions -
src/SynTree/Visitor.cc
rc5833e8 r0f9e4403 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Jul 24 16:11:05 201513 // Update Count : 1 512 // Last Modified On : Fri Apr 1 18:05:13 2016 13 // Update Count : 18 14 14 // 15 15 … … 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 } … … 230 230 } 231 231 232 void Visitor::visit( OffsetPackExpr *offsetPackExpr ) { 233 acceptAll( offsetPackExpr->get_results(), *this ); 234 maybeAccept( offsetPackExpr->get_type(), *this ); 235 } 236 232 237 void Visitor::visit( AttrExpr *attrExpr ) { 233 238 acceptAll( attrExpr->get_results(), *this ); … … 284 289 } 285 290 291 void Visitor::visit( CompoundLiteralExpr *compLitExpr ) { 292 acceptAll( compLitExpr->get_results(), *this ); 293 maybeAccept( compLitExpr->get_type(), *this ); 294 maybeAccept( compLitExpr->get_initializer(), *this ); 295 } 296 286 297 void Visitor::visit( VoidType *voidType ) { 287 298 acceptAll( voidType->get_forall(), *this ); … … 326 337 } 327 338 328 void Visitor::visit( ContextInstType *aggregateUseType ) {339 void Visitor::visit( TraitInstType *aggregateUseType ) { 329 340 visit( static_cast< ReferenceToType * >( aggregateUseType ) ); 330 341 acceptAll( aggregateUseType->get_members(), *this ); … … 355 366 } 356 367 368 void Visitor::visit( VarArgsType *varArgsType ) { 369 acceptAll( varArgsType->get_forall(), *this ); 370 } 371 357 372 void Visitor::visit( SingleInit *singleInit ) { 358 373 singleInit->get_value()->accept( *this ); -
src/SynTree/Visitor.h
rc5833e8 r0f9e4403 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Jan 25 21:20:44201613 // Update Count : 512 // Last Modified On : Fri Apr 1 17:26:55 2016 13 // Update Count : 7 14 14 // 15 15 … … 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 ); … … 67 67 virtual void visit( UntypedOffsetofExpr *offsetofExpr ); 68 68 virtual void visit( OffsetofExpr *offsetofExpr ); 69 virtual void visit( OffsetPackExpr *offsetPackExpr ); 69 70 virtual void visit( AttrExpr *attrExpr ); 70 71 virtual void visit( LogicalExpr *logicalExpr ); … … 76 77 virtual void visit( AsmExpr *asmExpr ); 77 78 virtual void visit( UntypedValofExpr *valofExpr ); 79 virtual void visit( CompoundLiteralExpr *compLitExpr ); 78 80 79 81 virtual void visit( VoidType *basicType ); … … 85 87 virtual void visit( UnionInstType *aggregateUseType ); 86 88 virtual void visit( EnumInstType *aggregateUseType ); 87 virtual void visit( ContextInstType *aggregateUseType );89 virtual void visit( TraitInstType *aggregateUseType ); 88 90 virtual void visit( TypeInstType *aggregateUseType ); 89 91 virtual void visit( TupleType *tupleType ); 90 92 virtual void visit( TypeofType *typeofType ); 91 93 virtual void visit( AttrType *attrType ); 94 virtual void visit( VarArgsType *varArgsType ); 92 95 93 96 virtual void visit( SingleInit *singleInit ); -
src/SynTree/module.mk
rc5833e8 r0f9e4403 25 25 SynTree/TypeofType.cc \ 26 26 SynTree/AttrType.cc \ 27 SynTree/VarArgsType.cc \ 27 28 SynTree/Constant.cc \ 28 29 SynTree/Expression.cc \ … … 45 46 SynTree/Visitor.cc \ 46 47 SynTree/Mutator.cc \ 47 SynTree/CodeGenVisitor.cc \48 48 SynTree/TypeSubstitution.cc 49 49 -
src/Tuples/FlattenTuple.cc
rc5833e8 r0f9e4403 49 49 void FlattenTuple::CollectArgs::visit( UntypedOffsetofExpr *expr ) { currentArgs.insert( currentArgs.end(), expr ); } 50 50 void FlattenTuple::CollectArgs::visit( OffsetofExpr *expr ) { currentArgs.insert( currentArgs.end(), expr ); } 51 void FlattenTuple::CollectArgs::visit( OffsetPackExpr *expr ) { currentArgs.insert( currentArgs.end(), expr ); } 51 52 void FlattenTuple::CollectArgs::visit( AttrExpr *expr ) { currentArgs.insert( currentArgs.end(), expr ); } 52 53 void FlattenTuple::CollectArgs::visit( LogicalExpr *expr ) { currentArgs.insert( currentArgs.end(), expr ); } -
src/Tuples/FlattenTuple.h
rc5833e8 r0f9e4403 45 45 virtual void visit( UntypedOffsetofExpr * ); 46 46 virtual void visit( OffsetofExpr * ); 47 virtual void visit( OffsetPackExpr * ); 47 48 virtual void visit( AttrExpr * ); 48 49 virtual void visit( LogicalExpr * ); -
src/driver/Makefile.in
rc5833e8 r0f9e4403 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/driver/cfa.cc
rc5833e8 r0f9e4403 10 10 // Created On : Tue Aug 20 13:44:49 2002 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Jan 28 18:24:06201613 // Update Count : 1 2712 // Last Modified On : Wed Apr 6 14:04:22 2016 13 // Update Count : 132 14 14 // 15 15 … … 165 165 nargs += 1; 166 166 } else if ( prefix( arg, "-std=" ) ) { 167 std_flag = true; // std=XX provided167 std_flag = true; // -std=XX provided 168 168 args[nargs] = argv[i]; // pass the argument along 169 169 nargs += 1; … … 307 307 nargs += 1; 308 308 if ( ! std_flag ) { // default c99, if none specified 309 args[nargs] = "-std= c99";309 args[nargs] = "-std=gnu99"; 310 310 nargs += 1; 311 311 } // if -
src/examples/Makefile.in
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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 : 1 1713 ## Last Modified On : Wed Apr 6 21:10:44 2016 14 ## Update Count : 123 15 15 ############################################################################### 16 16 … … 60 60 ${CC} ${CFLAGS} -c -o $@ $< 61 61 62 libs = stdlib iostream fstream iterator62 libs = limits stdlib iostream fstream iterator rational 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 math66 cfaheaders = limits65 cheaders = # expat 66 cfaheaders = # limits 67 67 include_HEADERS = ${cheaders:=.h} ${libs} ${cfaheaders} 68 68 -
src/libcfa/Makefile.in
rc5833e8 r0f9e4403 83 83 libcfa_a_AR = $(AR) $(ARFLAGS) 84 84 libcfa_a_LIBADD = 85 am__objects_1 = stdlib.$(OBJEXT) iostream.$(OBJEXT) fstream.$(OBJEXT) \86 iterator.$(OBJEXT)85 am__objects_1 = limits.$(OBJEXT) stdlib.$(OBJEXT) iostream.$(OBJEXT) \ 86 fstream.$(OBJEXT) iterator.$(OBJEXT) rational.$(OBJEXT) 87 87 am_libcfa_a_OBJECTS = libcfa-prelude.$(OBJEXT) $(am__objects_1) 88 88 libcfa_a_OBJECTS = $(am_libcfa_a_OBJECTS) … … 213 213 MAINTAINERCLEANFILES = ${addprefix ${libdir}/,${cfalib_DATA}} \ 214 214 ${addprefix ${libdir}/,${lib_LIBRARIES}} ${includedir}/* 215 libs = stdlib iostream fstream iterator215 libs = limits stdlib iostream fstream iterator rational 216 216 libcfa_a_SOURCES = libcfa-prelude.c ${libs:=.c} 217 cheaders = bfd bfdlink demangle dialog evdns evhttp evrpc expat fcntl form gcrypt math218 cfaheaders = limits217 cheaders = # expat 218 cfaheaders = # limits 219 219 include_HEADERS = ${cheaders:=.h} ${libs} ${cfaheaders} 220 220 all: all-am … … 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 … … 297 297 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iterator.Po@am__quote@ 298 298 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa-prelude.Po@am__quote@ 299 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/limits.Po@am__quote@ 300 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rational.Po@am__quote@ 299 301 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stdlib.Po@am__quote@ 300 302 -
src/libcfa/builtins.cf
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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 : Tue Apr 5 22:37:12 2016 13 // Update Count : 82 14 14 // 15 15 … … 19 19 #include "iostream" 20 20 21 // implement context ostream 22 struct ofstream; 21 enum { separateSize = 16 }; 22 struct ofstream { 23 void *file; 24 _Bool sepDefault; 25 _Bool sepOnOff; 26 char separator[separateSize]; 27 }; // ofstream 23 28 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 ); 29 _Bool sepPrt( ofstream * ); 30 void sepOn( ofstream * ); 31 void sepOff( ofstream * ); 32 void sepReset( ofstream * ); 33 void sepReset( ofstream *, _Bool ); 34 void sepSet( ofstream *, const char * ); 35 const char * sepGet( ofstream * ); 36 _Bool sepDisable( ofstream * ); 37 _Bool sepEnable( ofstream * ); 38 int fail( ofstream * ); 39 int flush( ofstream * ); 40 void open( ofstream *, const char * name, const char * mode ); 41 void close( ofstream * ); 42 ofstream * write( ofstream *, const char * data, unsigned long int size ); 43 int prtfmt( ofstream *, const char fmt[], ... ); 29 44 30 45 extern ofstream * sout, * serr; 31 46 32 47 // implement context istream 33 struct ifstream; 48 struct ifstream { 49 void *file; 50 }; // ifstream 34 51 35 52 int fail( ifstream * is ); 36 53 int eof( ifstream * is ); 37 void open( ifstream * *is, const char * name, const char * mode );54 void open( ifstream * is, const char * name, const char * mode ); 38 55 void close( ifstream * is ); 39 ifstream * get( ifstream * is, int * data ); 40 ifstream * read( ifstream * is, char * data, streamsize_type size ); 56 ifstream * read( ifstream * is, char * data, unsigned long int size ); 41 57 ifstream * ungetc( ifstream * is, char c ); 58 int scanfmt( ifstream *, const char fmt[], ... ); 42 59 43 60 extern ifstream *sin; … … 49 66 // tab-width: 4 // 50 67 // End: // 68 -
src/libcfa/fstream.c
rc5833e8 r0f9e4403 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 : Wed Apr 6 17:55:27 2016 13 // Update Count : 176 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 26 23 struct ofstream { 24 FILE *file; 25 }; 27 #define IO_MSG "I/O error: " 26 28 27 #define IO_MSG "I/O error " 29 _Bool sepPrt( ofstream * os ) { return os->sepOnOff; } 30 void sepOn( ofstream * os ) { os->sepOnOff = 1; } 31 void sepOff( ofstream * os ) { os->sepOnOff = 0; } 32 void sepReset( ofstream * os ) { os->sepOnOff = os->sepDefault; } 33 void sepReset( ofstream * os, _Bool reset ) { os->sepDefault = reset; os->sepOnOff = os->sepDefault; } 34 void sepSet( ofstream * os, const char * s ) { 35 strncpy( &(os->separator[0]), s, separateSize - 1 ); 36 os->separator[separateSize - 1] = '\0'; 37 } // sepSet 38 const char * sepGet( ofstream * os ) { return &(os->separator[0]); } 39 _Bool sepDisable( ofstream *os ) { 40 _Bool temp = os->sepDefault; 41 os->sepDefault = 0; 42 sepReset( os ); 43 return temp; 44 } // sepDisable 45 _Bool sepEnable( ofstream *os ) { 46 _Bool temp = os->sepDefault; 47 os->sepDefault = 1; 48 sepReset( os ); 49 return temp; 50 } // sepEnable 28 51 29 52 int fail( ofstream * os ) { 30 return ferror( os->file);53 return ferror( (FILE *)(os->file) ); 31 54 } // fail 32 55 33 56 int flush( ofstream * os ) { 34 return fflush( os->file);57 return fflush( (FILE *)(os->file) ); 35 58 } // flush 36 59 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 successful 40 perror( IO_MSG "open output" ); 60 void open( ofstream * os, const char * name, const char * mode ) { 61 FILE *file = fopen( name, mode ); 62 if ( file == 0 ) { // do not change unless successful 63 fprintf( stderr, IO_MSG "open output file \"%s\", ", name ); 64 perror( 0 ); 41 65 exit( EXIT_FAILURE ); 42 66 } // if 43 (*os)->file = t; 67 os->file = file; 68 sepOff( os ); 69 sepSet( os, " " ); 44 70 } // open 45 71 46 72 void close( ofstream * os ) { 47 if ( os->file == stdout || os->file== stderr ) return;73 if ( (FILE *)(os->file) == stdout || (FILE *)(os->file) == stderr ) return; 48 74 49 if ( fclose( os->file) == EOF ) {75 if ( fclose( (FILE *)(os->file) ) == EOF ) { 50 76 perror( IO_MSG "close output" ); 51 77 } // if 52 78 } // close 53 79 54 ofstream * write( ofstream * os, const char * data, streamsize_typesize ) {80 ofstream * write( ofstream * os, const char * data, unsigned long int size ) { 55 81 if ( fail( os ) ) { 56 82 fprintf( stderr, "attempt write I/O on failed stream\n" ); … … 58 84 } // if 59 85 60 if ( fwrite( data, 1, size, os->file) != size ) {86 if ( fwrite( data, 1, size, (FILE *)(os->file) ) != size ) { 61 87 perror( IO_MSG "write" ); 62 88 exit( EXIT_FAILURE ); … … 65 91 } // write 66 92 67 static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_) }; 93 int prtfmt( ofstream * os, const char fmt[], ... ) { 94 va_list args; 95 96 va_start( args, fmt ); 97 int len = vfprintf( (FILE *)(os->file), fmt, args ); 98 if ( len == EOF ) { 99 if ( ferror( (FILE *)(os->file) ) ) { 100 fprintf( stderr, "invalid write\n" ); 101 exit( EXIT_FAILURE ); 102 } // if 103 } // if 104 va_end( args ); 105 return len; 106 } // prtfmt 107 108 109 static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_), 1, 0, { ' ', '\0' } }; 68 110 ofstream *sout = &soutFile; 69 static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_) };111 static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_), 1, 0, { ' ', '\0' } }; 70 112 ofstream *serr = &serrFile; 113 71 114 72 115 //--------------------------------------- 73 116 74 struct ifstream {75 FILE *file;76 };77 117 78 118 int fail( ifstream * is ) { 79 return ferror( is->file);119 return ferror( (FILE *)(is->file) ); 80 120 } // fail 81 121 82 122 int eof( ifstream * is ) { 83 return feof( is->file);123 return feof( (FILE *)(is->file) ); 84 124 } // eof 85 125 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 } // if126 void open( ifstream * is, const char * name, const char * mode ) { 127 FILE *t = fopen( name, mode ); 128 if ( t == 0 ) { // do not change unless successful 129 fprintf( stderr, IO_MSG "open input file \"%s\", ", name ); 130 perror( 0 ); 131 exit( EXIT_FAILURE ); 92 132 } // if 93 return is;94 } // read133 is->file = t; 134 } // open 95 135 96 ifstream * read( ifstream * is, char * data, streamsize_type size ) { 136 void close( ifstream * is ) { 137 if ( (FILE *)(is->file) == stdin ) return; 138 139 if ( fclose( (FILE *)(is->file) ) == EOF ) { 140 perror( IO_MSG "close input" ); 141 } // if 142 } // close 143 144 ifstream * read( ifstream * is, char * data, unsigned long int size ) { 97 145 if ( fail( is ) ) { 98 146 fprintf( stderr, "attempt read I/O on failed stream\n" ); … … 100 148 } // if 101 149 102 if ( fread( data, size, 1, is->file) == 0 ) {150 if ( fread( data, size, 1, (FILE *)(is->file) ) == 0 ) { 103 151 perror( IO_MSG "read" ); 104 152 exit( EXIT_FAILURE ); … … 113 161 } // if 114 162 115 if ( ungetc( c, is->file) == EOF ) {163 if ( ungetc( c, (FILE *)(is->file) ) == EOF ) { 116 164 perror( IO_MSG "ungetc" ); 117 165 exit( EXIT_FAILURE ); … … 120 168 } // ungetc 121 169 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 ); 170 int scanfmt( ifstream * is, const char fmt[], ... ) { 171 va_list args; 172 173 va_start( args, fmt ); 174 int len = vfscanf( (FILE *)(is->file), fmt, args ); 175 if ( len == EOF ) { 176 if ( ferror( (FILE *)(is->file) ) ) { 177 fprintf( stderr, "invalid read\n" ); 178 exit( EXIT_FAILURE ); 179 } // if 127 180 } // if 128 (*is)->file = t; 129 } // open 181 va_end( args ); 182 return len; 183 } // prtfmt 130 184 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 185 139 186 static ifstream sinFile = { (FILE *)(&_IO_2_1_stdin_) }; … … 142 189 // Local Variables: // 143 190 // tab-width: 4 // 144 // compile-command: "cfa fstream.c" //145 191 // End: // -
src/libcfa/iostream
rc5833e8 r0f9e4403 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 : Sun Apr 10 23:00:12 2016 13 // Update Count : 92 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; 21 trait ostream( dtype ostype ) { 22 _Bool sepPrt( ostype * ); // return separator state (on/off) 23 void sepOn( ostype * ); // turn separator state on 24 void sepOff( ostype * ); // turn separator state off 25 void sepReset( ostype * ); // set separator state to default state 26 void sepReset( ostype *, _Bool ); // set separator and default state 27 void sepSet( ostype *, const char * ); // set separator to string (15 character maximum) 28 const char * sepGet( ostype * ); // get separator string 29 _Bool sepDisable( ostype * ); // set default state to off, and return previous state 30 _Bool sepEnable( ostype * ); // set default state to on, and return previous state 22 31 23 context ostream( dtype ostype ) {24 32 int fail( ostype * ); 25 33 int flush( ostype * ); 26 ostype * write( ostype *, const char *, streamsize_type ); 34 void open( ostype * os, const char * name, const char * mode ); 35 void close( ostype * os ); 36 ostype * write( ostype *, const char *, unsigned long int ); 37 int prtfmt( ostype *, const char fmt[], ... ); 27 38 }; 28 context writeable( type T ) { 39 40 trait writeable( otype T ) { 29 41 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, T ); 30 42 }; … … 33 45 34 46 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, char ); 47 48 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, short int ); 49 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned short int ); 35 50 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, int ); 36 51 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned int ); … … 39 54 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned long int ); 40 55 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned long long int ); 56 41 57 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, float ); // FIX ME: should not be required 42 58 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, double ); 43 59 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, long double ); 60 44 61 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, float _Complex ); 45 62 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, double _Complex ); 46 63 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, long double _Complex ); 64 47 65 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const char * ); 48 66 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const void * ); 49 67 50 forall( dtype ostype , dtype retostype | ostream( ostype ) | ostream( retostype ) ) retostype * ?|?( ostype *os, retostype * (* manip)(ostype*) );68 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, ostype * (*)( ostype * ) ); 51 69 forall( dtype ostype | ostream( ostype ) ) ostype * endl( ostype * ); 70 forall( dtype ostype | ostream( ostype ) ) ostype * sepOn( ostype * ); 71 forall( dtype ostype | ostream( ostype ) ) ostype * sepOff( ostype * ); 72 forall( dtype ostype | ostream( ostype ) ) ostype * sepDisable( ostype * ); 73 forall( dtype ostype | ostream( ostype ) ) ostype * sepEnable( ostype * ); 52 74 53 75 // 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 ) )76 forall( otype elt_type | writeable( elt_type ), otype iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) ) 55 77 void write( iterator_type begin, iterator_type end, os_type *os ); 56 78 57 forall( type elt_type | writeable( elt_type ),type iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )79 forall( otype elt_type | writeable( elt_type ), otype iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) ) 58 80 void write_reverse( iterator_type begin, iterator_type end, os_type *os ); 59 81 60 82 //--------------------------------------- 61 83 62 context istream( dtype istype ) {84 trait istream( dtype istype ) { 63 85 int fail( istype * ); 64 86 int eof( istype * ); 65 istype * get( istype *, int * ); 66 istype * read( istype *, char *, streamsize_type ); 87 void open( istype * is, const char * name, const char * mode ); 88 void close( istype * is ); 89 istype * read( istype *, char *, unsigned long int ); 67 90 istype * ungetc( istype *, char ); 91 int scanfmt( istype *, const char fmt[], ... ); 68 92 }; 69 93 70 context readable(type T ) {94 trait readable( otype T ) { 71 95 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, T ); 72 96 }; 73 97 74 forall( dtype istype | istream( istype ) ) 75 istype * ?|?( istype *, char * ); 98 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, char * ); 76 99 77 forall( dtype istype | istream( istype ) ) 78 istype * ?|?( istype *, int * ); 100 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, short int * ); 101 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned short int * ); 102 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, int * ); 103 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned int * ); 104 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long int * ); 105 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long long int * ); 106 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned long int * ); 107 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned long long int * ); 79 108 80 #endif // IOSTREAM_H 109 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, float * ); 110 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, double * ); 111 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long double * ); 112 113 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, float _Complex * ); 114 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, double _Complex * ); 115 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long double _Complex * ); 116 117 struct _Istream_cstrUC { char * s; }; 118 _Istream_cstrUC cstr( char * ); 119 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_cstrUC ); 120 121 struct _Istream_cstrC { char * s; int size; }; 122 _Istream_cstrC cstr( char *, int size ); 123 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_cstrC ); 124 125 #endif // __IOSTREAM_H__ 81 126 82 127 // Local Variables: // -
src/libcfa/iostream.c
rc5833e8 r0f9e4403 7 7 // iostream.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:19:56201613 // Update Count : 7612 // Last Modified On : Wed Apr 6 16:13:29 2016 13 // Update Count : 278 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 sepOff( os ); 30 return os; 31 } // ?|? 32 33 forall( dtype ostype | ostream( ostype ) ) 34 ostype * ?|?( ostype *os, short int si ) { 35 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 36 sepReset( os ); 37 prtfmt( os, "%hd", si ); 38 return os; 39 } // ?|? 40 41 forall( dtype ostype | ostream( ostype ) ) 42 ostype * ?|?( ostype *os, unsigned short int usi ) { 43 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 44 sepReset( os ); 45 prtfmt( os, "%hu", usi ); 46 return os; 28 47 } // ?|? 29 48 30 49 forall( dtype ostype | ostream( ostype ) ) 31 50 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 ) ); 51 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 52 sepReset( os ); 53 prtfmt( os, "%d", i ); 54 return os; 55 } // ?|? 56 57 forall( dtype ostype | ostream( ostype ) ) 58 ostype * ?|?( ostype *os, unsigned int ui ) { 59 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 60 sepReset( os ); 61 prtfmt( os, "%u", ui ); 62 return os; 63 } // ?|? 64 65 forall( dtype ostype | ostream( ostype ) ) 66 ostype * ?|?( ostype *os, long int li ) { 67 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 68 sepReset( os ); 69 prtfmt( os, "%ld", li ); 70 return os; 71 } // ?|? 72 73 forall( dtype ostype | ostream( ostype ) ) 74 ostype * ?|?( ostype *os, unsigned long int uli ) { 75 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 76 sepReset( os ); 77 prtfmt( os, "%lu", uli ); 78 return os; 79 } // ?|? 80 81 forall( dtype ostype | ostream( ostype ) ) 82 ostype * ?|?( ostype *os, long long int lli ) { 83 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 84 sepReset( os ); 85 prtfmt( os, "%lld", lli ); 86 return os; 87 } // ?|? 88 89 forall( dtype ostype | ostream( ostype ) ) 90 ostype * ?|?( ostype *os, unsigned long long int ulli ) { 91 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 92 sepReset( os ); 93 prtfmt( os, "%llu", ulli ); 94 return os; 64 95 } // ?|? 65 96 66 97 forall( dtype ostype | ostream( ostype ) ) 67 98 ostype * ?|?( ostype *os, float f ) { 68 char buffer[32]; 69 return write( os, buffer, sprintf( buffer, "%g", f ) ); 99 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 100 sepReset( os ); 101 prtfmt( os, "%g", f ); 102 return os; 70 103 } // ?|? 71 104 72 105 forall( dtype ostype | ostream( ostype ) ) 73 106 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'; 107 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 108 sepReset( os ); 109 prtfmt( os, "%.*lg", DBL_DIG, d ); 110 return os; 111 } // ?|? 112 113 forall( dtype ostype | ostream( ostype ) ) 114 ostype * ?|?( ostype *os, long double ld ) { 115 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 116 sepReset( os ); 117 prtfmt( os, "%.*Lg", LDBL_DIG, ld ); 118 return os; 119 } // ?|? 120 121 forall( dtype ostype | ostream( ostype ) ) 122 ostype * ?|?( ostype *os, float _Complex fc ) { 123 os | crealf( fc ); 124 _Bool temp = sepDisable( os ); // disable separators within complex value 125 if ( cimagf( fc ) >= 0 ) os | '+'; // negative value prints '-' 126 os | cimagf( fc ) | 'i'; 127 sepReset( os, temp ); // reset separator 128 return os; 129 } // ?|? 130 131 forall( dtype ostype | ostream( ostype ) ) 132 ostype * ?|?( ostype *os, double _Complex dc ) { 133 os | creal( dc ); 134 _Bool temp = sepDisable( os ); // disable separators within complex value 135 if ( cimag( dc ) >= 0 ) os | '+'; // negative value prints '-' 136 os | cimag( dc ) | 'i'; 137 sepReset( os, temp ); // reset separator 138 return os; 139 } // ?|? 140 141 forall( dtype ostype | ostream( ostype ) ) 142 ostype * ?|?( ostype *os, long double _Complex ldc ) { 143 os | creall( ldc ); 144 _Bool temp = sepDisable( os ); // disable separators within complex value 145 if ( cimagl( ldc ) >= 0 ) os | '+'; // negative value prints '-' 146 os | cimagl( ldc ) | 'i'; 147 sepReset( os, temp ); // reset separator 148 return os; 149 } // ?|? 150 151 forall( dtype ostype | ostream( ostype ) ) 152 ostype * ?|?( ostype *os, const char *cp ) { 153 enum { Open = 1, Close, OpenClose }; 154 static const unsigned char mask[256] = { 155 // opening delimiters 156 ['('] : Open, ['['] : Open, ['{'] : Open, 157 ['$'] : Open, [(unsigned char)'£'] : Open, [(unsigned char)'¥'] : Open, [(unsigned char)'¿'] : Open, [(unsigned char)'«'] : Open, 158 // closing delimiters 159 [','] : Close, ['.'] : Close, [':'] : Close, [';'] : Close, ['!'] : Close, ['?'] : Close, 160 [')'] : Close, [']'] : Close, ['}'] : Close, 161 ['%'] : Close, [(unsigned char)'¢'] : Close, [(unsigned char)'»'] : Close, 162 // opening-closing delimiters 163 ['\''] : OpenClose, ['`'] : OpenClose, ['"'] : OpenClose, 164 ['\f'] : OpenClose, ['\n'] : OpenClose, ['\r'] : OpenClose, ['\t'] : OpenClose, ['\v'] : OpenClose, // isspace 165 }; // mask 166 167 int len = strlen( cp ); 168 // null string => no separator 169 if ( len == 0 ) { sepOff( os ); return os; } 170 // first character IS NOT spacing or closing punctuation => add left separator 171 unsigned char ch = cp[0]; // must make unsigned 172 if ( sepPrt( os ) && mask[ ch ] != Close && mask[ ch ] != OpenClose ) { 173 prtfmt( os, "%s", sepGet( os ) ); 174 } // if 175 // last character IS spacing or opening punctuation => turn off separator for next item 176 unsigned int posn = len - 1; 177 ch = cp[posn]; // must make unsigned 178 if ( mask[ ch ] == Open || mask[ ch ] == OpenClose ) { 179 sepOff( os ); 180 } else { 181 sepOn( os ); 182 } // if 183 return write( os, cp, len ); 97 184 } // ?|? 98 185 99 186 forall( dtype ostype | ostream( ostype ) ) 100 187 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 } 188 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 189 sepReset( os ); 190 prtfmt( os, "%p", p ); 191 return os; 192 } // ?|? 193 194 195 forall( dtype ostype | ostream( ostype ) ) 196 ostype * ?|?( ostype *os, ostype * (* manip)( ostype * ) ) { 197 return manip( os ); 198 } // ?|? 115 199 116 200 forall( dtype ostype | ostream( ostype ) ) 117 201 ostype * endl( ostype * os ) { 118 os | "\n";202 os | '\n'; 119 203 flush( os ); 204 sepOff( os ); 120 205 return os; 121 206 } // endl 122 207 208 forall( dtype ostype | ostream( ostype ) ) 209 ostype * sepOn( ostype * os ) { 210 sepOn( os ); 211 return os; 212 } // sepOn 213 214 forall( dtype ostype | ostream( ostype ) ) 215 ostype * sepOff( ostype * os ) { 216 sepOff( os ); 217 return os; 218 } // sepOff 219 220 forall( dtype ostype | ostream( ostype ) ) 221 ostype * sepEnable( ostype * os ) { 222 sepEnable( os ); 223 return os; 224 } // sepEnable 225 226 forall( dtype ostype | ostream( ostype ) ) 227 ostype * sepDisable( ostype * os ) { 228 sepDisable( os ); 229 return os; 230 } // sepDisable 231 123 232 //--------------------------------------- 124 233 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 | ' '; } 234 forall( otype elttype | writeable( elttype ), otype iteratortype | iterator( iteratortype, elttype ), dtype ostype | ostream( ostype ) ) 235 void write( iteratortype begin, iteratortype end, ostype *os ) { 236 void print( elttype i ) { os | i; } 129 237 for_each( begin, end, print ); 130 238 } // ?|? 131 239 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 | ' '; } 240 forall( otype elttype | writeable( elttype ), otype iteratortype | iterator( iteratortype, elttype ), dtype ostype | ostream( ostype ) ) 241 void write_reverse( iteratortype begin, iteratortype end, ostype *os ) { 242 void print( elttype i ) { os | i; } 136 243 for_each_reverse( begin, end, print ); 137 244 } // ?|? … … 140 247 141 248 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 } // ?|? 249 istype * ?|?( istype * is, char * c ) { 250 scanfmt( is, "%c", c ); 251 return is; 252 } // ?|? 253 254 forall( dtype istype | istream( istype ) ) 255 istype * ?|?( istype * is, short int * si ) { 256 scanfmt( is, "%hd", si ); 257 return is; 258 } // ?|? 259 260 forall( dtype istype | istream( istype ) ) 261 istype * ?|?( istype * is, unsigned short int * usi ) { 262 scanfmt( is, "%hu", usi ); 263 return is; 264 } // ?|? 265 266 forall( dtype istype | istream( istype ) ) 267 istype * ?|?( istype * is, int * i ) { 268 scanfmt( is, "%d", i ); 269 return is; 270 } // ?|? 271 272 forall( dtype istype | istream( istype ) ) 273 istype * ?|?( istype * is, unsigned int * ui ) { 274 scanfmt( is, "%u", ui ); 275 return is; 276 } // ?|? 277 278 forall( dtype istype | istream( istype ) ) 279 istype * ?|?( istype * is, long int * li ) { 280 scanfmt( is, "%ld", li ); 281 return is; 282 } // ?|? 283 284 forall( dtype istype | istream( istype ) ) 285 istype * ?|?( istype * is, unsigned long int * ulli ) { 286 scanfmt( is, "%lu", ulli ); 287 return is; 288 } // ?|? 289 290 forall( dtype istype | istream( istype ) ) 291 istype * ?|?( istype * is, long long int * lli ) { 292 scanfmt( is, "%lld", lli ); 293 return is; 294 } // ?|? 295 296 forall( dtype istype | istream( istype ) ) 297 istype * ?|?( istype * is, unsigned long long int * ulli ) { 298 scanfmt( is, "%llu", ulli ); 299 return is; 300 } // ?|? 301 302 303 forall( dtype istype | istream( istype ) ) 304 istype * ?|?( istype * is, float * f ) { 305 scanfmt( is, "%f", f ); 306 return is; 307 } // ?|? 308 309 forall( dtype istype | istream( istype ) ) 310 istype * ?|?( istype * is, double * d ) { 311 scanfmt( is, "%lf", d ); 312 return is; 313 } // ?|? 314 315 forall( dtype istype | istream( istype ) ) 316 istype * ?|?( istype * is, long double * ld ) { 317 scanfmt( is, "%Lf", ld ); 318 return is; 319 } // ?|? 320 321 322 forall( dtype istype | istream( istype ) ) 323 istype * ?|?( istype * is, float _Complex * fc ) { 324 float re, im; 325 scanfmt( is, "%g%gi", &re, &im ); 326 *fc = re + im * _Complex_I; 327 return is; 328 } // ?|? 329 330 forall( dtype istype | istream( istype ) ) 331 istype * ?|?( istype * is, double _Complex * dc ) { 332 double re, im; 333 scanfmt( is, "%lf%lfi", &re, &im ); 334 *dc = re + im * _Complex_I; 335 return is; 336 } // ?|? 337 338 forall( dtype istype | istream( istype ) ) 339 istype * ?|?( istype * is, long double _Complex * ldc ) { 340 long double re, im; 341 scanfmt( is, "%Lf%Lfi", &re, &im ); 342 *ldc = re + im * _Complex_I; 343 return is; 344 } // ?|? 345 346 _Istream_cstrUC cstr( char * s ) { _Istream_cstrUC s = { s }; return s; } 347 forall( dtype istype | istream( istype ) ) 348 istype * ?|?( istype * is, _Istream_cstrUC cstr ) { 349 scanfmt( is, "%s", cstr.s ); 350 return is; 351 } // cstr 352 353 _Istream_cstrC cstr( char * s, int size ) { _Istream_cstrC s = { s, size }; return s; } 354 forall( dtype istype | istream( istype ) ) 355 istype * ?|?( istype * is, _Istream_cstrC cstr ) { 356 char buf[16]; 357 sprintf( buf, "%%%ds", cstr.size ); 358 scanfmt( is, buf, cstr.s ); 359 return is; 360 } // cstr 150 361 151 362 // Local Variables: // -
src/libcfa/iterator
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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/limits
rc5833e8 r0f9e4403 1 // 2 // Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo 3 // 4 // The contents of this file are covered under the licence agreement in the 5 // file "LICENCE" distributed with Cforall. 6 // 7 // limits -- 8 // 9 // Author : Peter A. Buhr 10 // Created On : Wed Apr 6 18:06:52 2016 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Apr 6 21:08:16 2016 13 // Update Count : 6 14 // 15 1 16 // Integral Constants 2 17 3 const short int MIN = -32768;4 const int MIN = -2147483648;5 const long int MIN = -9223372036854775807L - 1L;6 const long long int MIN = -9223372036854775807LL - 1LL;18 extern const short int MIN; 19 extern const int MIN; 20 extern const long int MIN; 21 extern const long long int MIN; 7 22 8 const short int MAX = 32767;9 const unsigned short int MAX = 65535;10 const int MAX = 2147483647;11 const unsigned int MAX = 4294967295_U;12 const long int MAX = 9223372036854775807_L;13 const unsigned long int MAX = 4294967295_U;14 const long long int MAX = 9223372036854775807_LL;15 const unsigned long long int MAX = 18446744073709551615_ULL;23 extern const short int MAX; 24 extern const unsigned short int MAX; 25 extern const int MAX; 26 extern const unsigned int MAX; 27 extern const long int MAX; 28 extern const unsigned long int MAX; 29 extern const long long int MAX; 30 extern const unsigned long long int MAX; 16 31 17 32 // Floating-Point Constants 18 33 19 const float PI = 3.141592_F;// pi20 const float PI_2 = 1.570796_F;// pi / 221 const float PI_4 = 0.7853981_F;// pi / 422 const float _1_PI = 0.3183098_F;// 1 / pi23 const float _2_PI = 0.6366197_F;// 2 / pi24 const float _2_SQRT_PI = 1.128379_F;// 2 / sqrt(pi)34 extern const float PI; // pi 35 extern const float PI_2; // pi / 2 36 extern const float PI_4; // pi / 4 37 extern const float _1_PI; // 1 / pi 38 extern const float _2_PI; // 2 / pi 39 extern const float _2_SQRT_PI; // 2 / sqrt(pi) 25 40 26 const double PI = 3.14159265358979323846_D;// pi27 const double PI_2 = 1.57079632679489661923_D;// pi / 228 const double PI_4 = 0.78539816339744830962_D;// pi / 429 const double _1_PI = 0.31830988618379067154_D;// 1 / pi30 const double _2_PI = 0.63661977236758134308_D;// 2 / pi31 const double _2_SQRT_PI = 1.12837916709551257390_D;// 2 / sqrt(pi)41 extern const double PI; // pi 42 extern const double PI_2; // pi / 2 43 extern const double PI_4; // pi / 4 44 extern const double _1_PI; // 1 / pi 45 extern const double _2_PI; // 2 / pi 46 extern const double _2_SQRT_PI; // 2 / sqrt(pi) 32 47 33 const long double PI = 3.1415926535897932384626433832795029_DL;// pi34 const long double PI_2 = 1.5707963267948966192313216916397514_DL;// pi / 235 const long double PI_4 = 0.7853981633974483096156608458198757_DL;// pi / 436 const long double _1_PI = 0.3183098861837906715377675267450287_DL;// 1 / pi37 const long double _2_PI = 0.6366197723675813430755350534900574_DL;// 2 / pi38 const long double _2_SQRT_PI = 1.1283791670955125738961589031215452_DL;// 2 / sqrt(pi)48 extern const long double PI; // pi 49 extern const long double PI_2; // pi / 2 50 extern const long double PI_4; // pi / 4 51 extern const long double _1_PI; // 1 / pi 52 extern const long double _2_PI; // 2 / pi 53 extern const long double _2_SQRT_PI; // 2 / sqrt(pi) 39 54 40 const _Complex PI = 3.14159265358979323846_D+0.0_iD;// pi41 const _Complex PI_2 = 1.57079632679489661923_D+0.0_iD;// pi / 242 const _Complex PI_4 = 0.78539816339744830962_D+0.0_iD;// pi / 443 const _Complex _1_PI = 0.31830988618379067154_D+0.0_iD;// 1 / pi44 const _Complex _2_PI = 0.63661977236758134308_D+0.0_iD;// 2 / pi45 const _Complex _2_SQRT_PI = 1.12837916709551257390_D+0.0_iD;// 2 / sqrt(pi)55 extern const _Complex PI; // pi 56 extern const _Complex PI_2; // pi / 2 57 extern const _Complex PI_4; // pi / 4 58 extern const _Complex _1_PI; // 1 / pi 59 extern const _Complex _2_PI; // 2 / pi 60 extern const _Complex _2_SQRT_PI; // 2 / sqrt(pi) 46 61 47 const long _Complex PI = 3.1415926535897932384626433832795029_L+0.0iL;// pi48 const long _Complex PI_2 = 1.5707963267948966192313216916397514_L+0.0iL;// pi / 249 const long _Complex PI_4 = 0.7853981633974483096156608458198757_L+0.0iL;// pi / 450 const long _Complex _1_PI = 0.3183098861837906715377675267450287_L+0.0iL;// 1 / pi51 const long _Complex _2_PI = 0.6366197723675813430755350534900574_L+0.0iL;// 2 / pi52 const long _Complex _2_SQRT_PI = 1.1283791670955125738961589031215452_L+0.0iL;// 2 / sqrt(pi)62 extern const long _Complex PI; // pi 63 extern const long _Complex PI_2; // pi / 2 64 extern const long _Complex PI_4; // pi / 4 65 extern const long _Complex _1_PI; // 1 / pi 66 extern const long _Complex _2_PI; // 2 / pi 67 extern const long _Complex _2_SQRT_PI; // 2 / sqrt(pi) 53 68 54 const float E = 2.718281;// e55 const float LOG2_E = 1.442695;// log_2(e)56 const float LOG10_E = 0.4342944;// log_10(e)57 const float LN_2 = 0.6931471;// log_e(2)58 const float LN_10 = 2.302585;// log_e(10)59 const float SQRT_2 = 1.414213;// sqrt(2)60 const float _1_SQRT_2 = 0.7071067;// 1 / sqrt(2)69 extern const float E; // e 70 extern const float LOG2_E; // log_2(e) 71 extern const float LOG10_E; // log_10(e) 72 extern const float LN_2; // log_e(2) 73 extern const float LN_10; // log_e(10) 74 extern const float SQRT_2; // sqrt(2) 75 extern const float _1_SQRT_2; // 1 / sqrt(2) 61 76 62 const double E = 2.7182818284590452354_D;// e63 const double LOG2_E = 1.4426950408889634074_D;// log_2(e)64 const double LOG10_E = 0.43429448190325182765_D;// log_10(e)65 const double LN_2 = 0.69314718055994530942_D;// log_e(2)66 const double LN_10 = 2.30258509299404568402_D;// log_e(10)67 const double SQRT_2 = 1.41421356237309504880_D;// sqrt(2)68 const double _1_SQRT_2 = 0.70710678118654752440_D;// 1 / sqrt(2)77 extern const double E; // e 78 extern const double LOG2_E; // log_2(e) 79 extern const double LOG10_E; // log_10(e) 80 extern const double LN_2; // log_e(2) 81 extern const double LN_10; // log_e(10) 82 extern const double SQRT_2; // sqrt(2) 83 extern const double _1_SQRT_2; // 1 / sqrt(2) 69 84 70 const long double E = 2.7182818284590452353602874713526625_DL;// e71 const long double LOG2_E = 1.4426950408889634073599246810018921_DL;// log_2(e)72 const long double LOG10_E = 0.4342944819032518276511289189166051_DL;// log_10(e)73 const long double LN_2 = 0.6931471805599453094172321214581766_DL;// log_e(2)74 const long double LN_10 = 2.3025850929940456840179914546843642_DL;// log_e(10)75 const long double SQRT_2 = 1.4142135623730950488016887242096981_DL;// sqrt(2)76 const long double _1_SQRT_2 = 0.7071067811865475244008443621048490_DL;// 1/sqrt(2)85 extern const long double E; // e 86 extern const long double LOG2_E; // log_2(e) 87 extern const long double LOG10_E; // log_10(e) 88 extern const long double LN_2; // log_e(2) 89 extern const long double LN_10; // log_e(10) 90 extern const long double SQRT_2; // sqrt(2) 91 extern const long double _1_SQRT_2; // 1/sqrt(2) 77 92 78 const _Complex E = 2.7182818284590452354_D+0.0_iD;// e79 const _Complex LOG2_E = 1.4426950408889634074_D+0.0_iD;// log_2(e)80 const _Complex LOG10_E = 0.43429448190325182765_D+0.0_iD;// log_10(e)81 const _Complex LN_2 = 0.69314718055994530942_D+0.0_iD;// log_e(2)82 const _Complex LN_10 = 2.30258509299404568402_D+0.0_iD;// log_e(10)83 const _Complex SQRT_2 = 1.41421356237309504880_D+0.0_iD;// sqrt(2)84 const _Complex _1_SQRT_2 = 0.70710678118654752440_D+0.0_iD;// 1 / sqrt(2)93 extern const _Complex E; // e 94 extern const _Complex LOG2_E; // log_2(e) 95 extern const _Complex LOG10_E; // log_10(e) 96 extern const _Complex LN_2; // log_e(2) 97 extern const _Complex LN_10; // log_e(10) 98 extern const _Complex SQRT_2; // sqrt(2) 99 extern const _Complex _1_SQRT_2; // 1 / sqrt(2) 85 100 86 const long _Complex E = 2.7182818284590452353602874713526625_L+0.0_iL; // e 87 const long _Complex LOG2_E = 1.4426950408889634073599246810018921_L+0.0_iL; // log_2(e) 88 const long _Complex LOG10_E = 0.4342944819032518276511289189166051_L+0.0_iL; // log_10(e) 89 const long _Complex LN_2 = 0.6931471805599453094172321214581766_L+0.0_iL; // log_e(2) 90 const long _Complex LN_10 = 2.3025850929940456840179914546843642_L+0.0_iL; // log_e(10) 91 const long _Complex SQRT_2 = 1.4142135623730950488016887242096981_L+0.0_iL; // sqrt(2) 92 const long _Complex _1_SQRT_2 = 0.7071067811865475244008443621048490_L+0.0_iL; // 1 / sqrt(2) 101 extern const long _Complex E; // e 102 extern const long _Complex LOG2_E; // log_2(e) 103 extern const long _Complex LOG10_E; // log_10(e) 104 extern const long _Complex LN_2; // log_e(2) 105 extern const long _Complex LN_10; // log_e(10) 106 extern const long _Complex SQRT_2; // sqrt(2) 107 extern const long _Complex _1_SQRT_2; // 1 / sqrt(2) 108 109 // Local Variables: // 110 // mode: c // 111 // tab-width: 4 // 112 // End: // -
src/libcfa/prelude.cf
rc5833e8 r0f9e4403 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
rc5833e8 r0f9e4403 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 : 6112 // Last Modified On : Wed Apr 13 14:45:53 2016 13 // Update Count : 85 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 //--------------------------------------- 24 23 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 ); 24 extern "C" { 25 #ifndef EXIT_FAILURE 26 #define EXIT_FAILURE 1 // failing exit status 27 #define EXIT_SUCCESS 0 // successful exit status 28 #endif // ! EXIT_FAILURE 29 void exit( int rc ); 30 } // extern "C" 33 31 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 ); 32 //--------------------------------------- 33 34 extern "C" { 35 void * malloc( size_t ); // use default C routine for void * 36 } // extern "C" 37 forall( otype T ) T * malloc( void ); 38 forall( otype T ) T * malloc( char fill ); 39 forall( otype T ) T * malloc( T * ptr, size_t size ); 40 forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill ); 41 extern "C" { 42 void * calloc( size_t nmemb, size_t size ); // use default C routine for void * 43 } // extern "C" 44 forall( otype T ) T * calloc( size_t nmemb ); 45 extern "C" { 46 void * realloc( void * ptr, size_t size ); // use default C routine for void * 47 } // extern "C" 48 forall( otype T ) T * realloc( T * ptr, size_t size ); 49 forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill ); 50 51 forall( otype T ) T * aligned_alloc( size_t alignment ); 52 forall( otype T ) T * memalign( size_t alignment ); // deprecated 53 forall( otype T ) int posix_memalign( T ** ptr, size_t alignment ); 54 55 forall( otype T ) T * memset( T * ptr, unsigned char fill ); // use default value '\0' for fill 56 forall( otype T ) T * memset( T * ptr ); // remove when default value available 37 57 38 58 //--------------------------------------- … … 66 86 //--------------------------------------- 67 87 68 forall( type T | { int ?<?( T, T ); } )88 forall( otype T | { int ?<?( T, T ); } ) 69 89 T * bsearch( const T key, const T * arr, size_t dimension ); 70 90 71 forall( type T | { int ?<?( T, T ); } )91 forall( otype T | { int ?<?( T, T ); } ) 72 92 void qsort( const T * arr, size_t dimension ); 73 93 74 94 //--------------------------------------- 75 95 76 forall( type T | { T ?/?( T, T ); T ?%?( T, T ); } )96 forall( otype T | { T ?/?( T, T ); T ?%?( T, T ); } ) 77 97 [ T, T ] div( T t1, T t2 ); 78 98 … … 81 101 char abs( char ); 82 102 extern "C" { 83 int abs( int ); // use default C routine for int84 } // extern 103 int abs( int ); // use default C routine for int 104 } // extern "C" 85 105 long int abs( long int ); 86 106 long long int abs( long long int ); … … 94 114 //--------------------------------------- 95 115 96 void randseed( long int s);97 char random(); 98 int random(); 99 unsigned int random(); 100 long int random();101 unsigned long int random(); 102 float random();103 double random(); 104 float _Complex random(); 105 double _Complex random(); 106 long double _Complex random();116 float floor( float ); 117 extern "C" { 118 double floor( double ); // use C routine for double 119 } // extern "C" 120 long double floor( long double ); 121 122 float ceil( float ); 123 extern "C" { 124 double ceil( double ); // use C routine for double 125 } // extern "C" 126 long double ceil( long double ); 107 127 108 128 //--------------------------------------- 109 129 110 forall( type T | { int ?<?( T, T ); } ) 130 void rand48seed( long int s ); 131 char rand48(); 132 int rand48(); 133 unsigned int rand48(); 134 long int rand48(); 135 unsigned long int rand48(); 136 float rand48(); 137 double rand48(); 138 float _Complex rand48(); 139 double _Complex rand48(); 140 long double _Complex rand48(); 141 142 //--------------------------------------- 143 144 forall( otype T | { int ?<?( T, T ); } ) 111 145 T min( const T t1, const T t2 ); 112 146 113 forall( type T | { int ?>?( T, T ); } )147 forall( otype T | { int ?>?( T, T ); } ) 114 148 T max( const T t1, const T t2 ); 115 149 116 forall( type T )150 forall( otype T ) 117 151 void swap( T * t1, T * t2 ); 118 152 -
src/libcfa/stdlib.c
rc5833e8 r0f9e4403 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 : 1 4012 // Last Modified On : Wed Apr 13 14:49:58 2016 13 // Update Count : 155 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 ) { 39 printf( "malloc1\n" ); 29 forall( otype T ) T * malloc( void ) { 30 //printf( "malloc1\n" ); 40 31 return (T *)malloc( sizeof(T) ); 41 32 } // malloc 42 forall( type T ) T * malloc( size_t size ) { 43 printf( "malloc2\n" ); 44 return (T *)(void *)malloc( size ); 45 } // malloc 46 forall( type T ) T * malloc( char fill ) { 47 printf( "malloc3\n" ); 33 forall( otype T ) T * malloc( char fill ) { 34 //printf( "malloc3\n" ); 48 35 T * ptr = (T *)malloc( sizeof(T) ); 49 36 return memset( ptr ); 50 37 } // malloc 51 38 52 forall( type T ) T * calloc( size_t size) {53 printf( "calloc\n" );54 return (T *)calloc( size, sizeof(T) );39 forall( otype T ) T * calloc( size_t nmemb ) { 40 //printf( "calloc\n" ); 41 return (T *)calloc( nmemb, sizeof(T) ); 55 42 } // calloc 56 43 57 forall( type T ) T * realloc( T * ptr, size_t size ) {58 printf( "realloc1\n" );44 forall( otype T ) T * realloc( T * ptr, size_t size ) { 45 //printf( "realloc1\n" ); 59 46 return (T *)(void *)realloc( (void *)ptr, size ); 60 47 } // realloc 61 forall( type T ) T * realloc( T * ptr, size_t size, unsigned char fill ) {62 printf( "realloc2\n" );48 forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill ) { 49 //printf( "realloc2\n" ); 63 50 char * nptr = (T *)(void *)realloc( (void *)ptr, size ); 64 51 size_t unused = malloc_usable_size( nptr ); … … 67 54 } // realloc 68 55 69 forall( type T ) T * malloc( T * ptr, size_t size ) {70 printf( "malloc4\n" );56 forall( otype T ) T * malloc( T * ptr, size_t size ) { 57 //printf( "malloc4\n" ); 71 58 return (T *)realloc( ptr, size ); 72 59 } // malloc 73 forall( type T ) T * malloc( T * ptr, size_t size, unsigned char fill ) {74 printf( "malloc5\n" );60 forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill ) { 61 //printf( "malloc5\n" ); 75 62 return (T *)realloc( ptr, size, fill ); 76 63 } // malloc 77 64 78 forall( type T ) T * aligned_alloc( size_t alignment ) {79 printf( "aligned_alloc\n" );65 forall( otype T ) T * aligned_alloc( size_t alignment ) { 66 //printf( "aligned_alloc\n" ); 80 67 return (T *)memalign( alignment, sizeof(T) ); 81 68 } // aligned_alloc 82 69 83 forall( type T ) T * memalign( size_t alignment ) {84 printf( "memalign\n" );70 forall( otype T ) T * memalign( size_t alignment ) { 71 //printf( "memalign\n" ); 85 72 return (T *)memalign( alignment, sizeof(T) ); 86 73 } // memalign 87 74 88 forall( type T ) int posix_memalign( T ** ptr, size_t alignment ) {89 printf( "posix_memalign\n" );75 forall( otype T ) int posix_memalign( T ** ptr, size_t alignment ) { 76 //printf( "posix_memalign\n" ); 90 77 return posix_memalign( (void **)ptr, alignment, sizeof(T) ); 91 78 } // posix_memalign 79 80 forall( otype T ) T * memset( T * ptr, unsigned char fill ) { // use default value '\0' for fill 81 //printf( "memset1\n" ); 82 return (T *)memset( ptr, (int)fill, malloc_usable_size( ptr ) ); 83 } // memset 84 forall( otype T ) T * memset( T * ptr ) { // remove when default value available 85 //printf( "memset2\n" ); 86 return (T *)memset( ptr, 0, malloc_usable_size( ptr ) ); 87 } // memset 92 88 93 89 //--------------------------------------- … … 123 119 return ulli; 124 120 } 121 125 122 float ato( const char * ptr ) { 126 123 float f; … … 138 135 return ld; 139 136 } 137 140 138 float _Complex ato( const char * ptr ) { 141 139 float re, im; … … 172 170 return strtoull( sptr, eptr, base ); 173 171 } 172 174 173 float strto( const char * sptr, char ** eptr ) { 175 174 return strtof( sptr, eptr ); … … 181 180 return strtold( sptr, eptr ); 182 181 } 182 183 183 float _Complex strto( const char * sptr, char ** eptr ) { 184 184 float re, im; … … 208 208 //--------------------------------------- 209 209 210 forall( type T | { int ?<?( T, T ); } )210 forall( otype T | { int ?<?( T, T ); } ) 211 211 T * bsearch( const T key, const T * arr, size_t dimension ) { 212 212 int comp( const void * t1, const void * t2 ) { return *(T *)t1 < *(T *)t2 ? -1 : *(T *)t2 < *(T *)t1 ? 1 : 0; } … … 214 214 } // bsearch 215 215 216 forall( type T | { int ?<?( T, T ); } )216 forall( otype T | { int ?<?( T, T ); } ) 217 217 void qsort( const T * arr, size_t dimension ) { 218 218 int comp( const void * t1, const void * t2 ) { return *(T *)t1 < *(T *)t2 ? -1 : *(T *)t2 < *(T *)t1 ? 1 : 0; } … … 222 222 //--------------------------------------- 223 223 224 forall( type T | { T ?/?( T, T ); T ?%?( T, T ); } )224 forall( otype T | { T ?/?( T, T ); T ?%?( T, T ); } ) 225 225 [ T, T ] div( T t1, T t2 ) { /* return [ t1 / t2, t1 % t2 ]; */ } 226 226 … … 239 239 //--------------------------------------- 240 240 241 void randseed( long int s ) { srand48( s ); } 242 char random() { return lrand48(); } 243 int random() { return mrand48(); } 244 unsigned int random() { return lrand48(); } 245 long int random() { return mrand48(); } 246 unsigned long int random() { return lrand48(); } 247 float random() { return (float)drand48(); } // otherwise float uses lrand48 248 double random() { return drand48(); } 249 float _Complex random() { return (float)drand48() + (float _Complex)(drand48() * _Complex_I); } 250 double _Complex random() { return drand48() + (double _Complex)(drand48() * _Complex_I); } 251 long double _Complex random() { return (long double)drand48() + (long double _Complex)(drand48() * _Complex_I); } 252 253 //--------------------------------------- 254 255 forall( type T | { int ?<?( T, T ); } ) 241 float floor( float v ) { return floorf( v ); } 242 long double floor( long double v ) { return floorl( v ); } 243 244 float ceil( float v ) { return ceilf( v ); } 245 long double ceil( long double v ) { return ceill( v ); } 246 247 //--------------------------------------- 248 249 void rand48seed( long int s ) { srand48( s ); } 250 char rand48() { return mrand48(); } 251 int rand48() { return mrand48(); } 252 unsigned int rand48() { return lrand48(); } 253 long int rand48() { return mrand48(); } 254 unsigned long int rand48() { return lrand48(); } 255 float rand48() { return (float)drand48(); } // otherwise float uses lrand48 256 double rand48() { return drand48(); } 257 float _Complex rand48() { return (float)drand48() + (float _Complex)(drand48() * _Complex_I); } 258 double _Complex rand48() { return drand48() + (double _Complex)(drand48() * _Complex_I); } 259 long double _Complex rand48() { return (long double)drand48() + (long double _Complex)(drand48() * _Complex_I); } 260 261 //--------------------------------------- 262 263 forall( otype T | { int ?<?( T, T ); } ) 256 264 T min( const T t1, const T t2 ) { 257 265 return t1 < t2 ? t1 : t2; 258 266 } // min 259 267 260 forall( type T | { int ?>?( T, T ); } )268 forall( otype T | { int ?>?( T, T ); } ) 261 269 T max( const T t1, const T t2 ) { 262 270 return t1 > t2 ? t1 : t2; 263 271 } // max 264 272 265 forall( type T )273 forall( otype T ) 266 274 void swap( T * t1, T * t2 ) { 267 275 T temp = *t1;
Note:
See TracChangeset
for help on using the changeset viewer.