Changeset 7527e63
- Timestamp:
- Aug 16, 2016, 3:20:06 PM (9 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, 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:
- 1f6d4624
- Parents:
- 950f7a7 (diff), 7880579 (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:
-
- 11 added
- 6 deleted
- 95 edited
Legend:
- Unmodified
- Added
- Removed
-
.gitignore
r950f7a7 r7527e63 34 34 # generated by bison and lex from cfa.yy and lex.ll, respectively 35 35 src/Parser/parser.output 36 37 # generated by xfig for user manual 38 doc/user/Cdecl.tex 39 doc/user/pointer1.tex 40 doc/user/pointer2.tex -
INSTALL
r950f7a7 r7527e63 3 3 4 4 Cforall is built using GNU Make and the GNU Autoconf system. It also requires 5 g++ version 4, bison and flex. On systems where GNU Make is the default make6 it may suffice to build the system by entering the commands 5 g++ version >= 4.6, bison and flex. On systems where GNU Make is the default 6 make, the system is built by entering the commands: 7 7 8 8 ./configure … … 17 17 18 18 --prefix=/some/directory controls the path prefix common to all installed 19 cfa-cc components. Some components will be installed in /some/directory/bin,19 cfa-cc components. Some components are installed in /some/directory/bin, 20 20 others in /some/directory/lib. If unspecified, this defaults to /usr/local. 21 If you wish to use (a subdirectory of) your home directory, ${HOME}/some/dir22 works, but it is important not to put quotes around the directory path;23 Cforall mayappear to build, but the installed version may not work properly.21 To use (a subdirectory of) your home directory, ${HOME}/some/dir works, but 22 it is important not to put quotes around the directory path; Cforall may 23 appear to build, but the installed version may not work properly. 24 24 25 25 --with-backend-compiler=PROGRAM specifies the installed path of gcc. It -
Jenkins/FullBuild
r950f7a7 r7527e63 14 14 name: 'buildArchitecture', \ 15 15 value: arch] \ 16 ] 16 ], \ 17 propagate: false 17 18 18 19 echo(result.result) 19 echo(result.absoluteUrl) 20 21 if(result.result != 'SUCCESS') { 22 sh("wget -q -O - ${result.absoluteUrl}/consoleText") 23 error(result.result) 24 } 20 25 } 21 26 … … 32 37 checkout scm 33 38 39 collect_git_info() 40 34 41 //parse git logs to find what changed 35 42 sh "git remote > ${out_dir}/GIT_REMOTE" … … 41 48 } 42 49 43 sh "git push DoLang ${gitRefNewValue}:master" 50 //sh "GIT_SSH_COMMAND=\"ssh -v\" git push DoLang ${gitRefNewValue}:master" 51 echo('BUILD NOT PUSH SINCE DO-LANG SERVER WAS DOWN') 52 } 53 54 //Helper routine to collect information about the git history 55 def collect_git_info() { 56 57 //create the temporary output directory in case it doesn't already exist 58 def out_dir = pwd tmp: true 59 sh "mkdir -p ${out_dir}" 60 61 //parse git logs to find what changed 62 dir("../Cforall_Full_Build@script") { 63 sh "git reflog > ${out_dir}/GIT_COMMIT" 64 } 65 git_reflog = readFile("${out_dir}/GIT_COMMIT") 66 gitRefOldValue = (git_reflog =~ /moving from (.+) to (.+)/)[0][1] 67 gitRefNewValue = (git_reflog =~ /moving from (.+) to (.+)/)[0][2] 44 68 } 45 69 … … 49 73 50 74 node ('master') { 75 def err = null 76 51 77 try { 52 78 //Prevent the build from exceeding 30 minutes … … 78 104 //attach the build log to the email 79 105 catch (Exception caughtError) { 106 echo('error caught') 107 80 108 //rethrow error later 81 109 err = caughtError 82 110 83 111 //Store the result of the build log 84 currentBuild.result = "${status_prefix} FAILURE".trim()112 currentBuild.result = 'FAILURE' 85 113 86 114 //Send email to notify the failure 87 promote_ email(currentBuild.result)115 promote_failure_email() 88 116 } 89 117 … … 100 128 101 129 //Email notification on a full build failure 102 def promote_email(String status) { 130 def promote_failure_email() { 131 echo('notifying users') 132 103 133 //Since tokenizer doesn't work, figure stuff out from the environnement variables and command line 104 134 //Configurations for email format … … 113 143 - Status -------------------------------------------------------------- 114 144 115 PROMOTE FAILURE - ${status}145 PROMOTE FAILURE 116 146 """ 117 147 -
doc/LaTeXmacros/common.tex
r950f7a7 r7527e63 11 11 %% Created On : Sat Apr 9 10:06:17 2016 12 12 %% Last Modified By : Peter A. Buhr 13 %% Last Modified On : Tue Jul 12 20:37:57201614 %% Update Count : 2 0613 %% Last Modified On : Sun Aug 14 08:27:29 2016 14 %% Update Count : 231 15 15 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16 17 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18 16 19 17 \setlength{\textheight}{9in} 20 18 %\oddsidemargin 0.0in 21 \renewcommand{\topfraction}{0.8} % float must be greater than X of the page before it is forced onto its own page22 \renewcommand{\bottomfraction}{0.8} % float must be greater than X of the page before it is forced onto its own page19 \renewcommand{\topfraction}{0.8} % float must be greater than X of the page before it is forced onto its own page 20 \renewcommand{\bottomfraction}{0.8} % float must be greater than X of the page before it is forced onto its own page 23 21 \renewcommand{\floatpagefraction}{0.8} % float must be greater than X of the page before it is forced onto its own page 24 \renewcommand{\textfraction}{0.0} % the entire page maybe devoted to floats with no text on the page at all25 26 \lefthyphenmin=4 22 \renewcommand{\textfraction}{0.0} % the entire page maybe devoted to floats with no text on the page at all 23 24 \lefthyphenmin=4 % hyphen only after 4 characters 27 25 \righthyphenmin=4 28 26 … … 38 36 % Names used in the document. 39 37 40 \newcommand{\CFA}{C$\mathbf\forall$\xspace} 41 \newcommand{\CFL}{Cforall\xspace} 38 \newcommand{\CFA}{C$\mathbf\forall$\xspace} % set language symbolic name 39 \newcommand{\CFL}{Cforall\xspace} % set language text name 42 40 \newcommand{\CC}{\rm C\kern-.1em\hbox{+\kern-.25em+}\xspace} % CC symbolic name 43 \def\c11{ISO/IEC C} % C11 name (cannot have numbers in latex command name) 41 \newcommand{\CCeleven}{\rm C\kern-.1em\hbox{+\kern-.25em+}11\xspace} % C++11 symbolic name 42 \newcommand{\Celeven}{C11\xspace} % C11 symbolic name 44 43 45 44 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% … … 51 50 \setlength{\parindentlnth}{\parindent} 52 51 53 \newlength{\gcolumnposn} 52 \newlength{\gcolumnposn} % temporary hack because lstlisting does handle tabs correctly 54 53 \newlength{\columnposn} 55 54 \setlength{\gcolumnposn}{2.5in} … … 62 61 %\patchcmd{\lsthk@TextStyle}{\let\lst@DefEsc\@empty}{}{}{\errmessage{failed to patch}} 63 62 64 \usepackage{pslatex} 65 \usepackage{relsize} 63 \usepackage{pslatex} % reduce size of san serif font 64 \usepackage{relsize} % must be after change to small or selects old size 66 65 67 66 % reduce size of chapter/section titles … … 119 118 120 119 % inline text and lowercase index: \Index{inline and lowercase index text} 120 \newcommand{\Index}{\@ifstar\@sIndex\@Index} 121 121 % inline text and as-in index: \Index[as-is index text]{inline text} 122 \newcommand{\@Index}[2][\@empty]{\lowercase{\def\temp{#2}}#2\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi} 122 123 % inline text but index with different as-is text: \Index[index text]{inline text} 123 \newcommand{\Index}{\@ifstar\@sIndex\@Index}124 \newcommand{\@Index}[2][\@empty]{\lowercase{\def\temp{#2}}#2\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi}125 124 \newcommand{\@sIndex}[2][\@empty]{#2\ifx#1\@empty\index{#2}\else\index{#1@{\protect#2}}\fi} 126 125 127 % cannot use ©126 % inline text and code index (cannot use ©) 128 127 \newcommand{\Indexc}[1]{\lstinline$#1$\index{#1@\lstinline$#1$}} 128 % code index (cannot use ©) 129 129 \newcommand{\indexc}[1]{\index{#1@\lstinline$#1$}} 130 130 … … 136 136 \newcommand{\@newterm}[2][\@empty]{\lowercase{\def\temp{#2}}{\newtermFontInline{#2}}\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi} 137 137 \newcommand{\@snewterm}[2][\@empty]{{\newtermFontInline{#2}}\ifx#1\@empty\index{#2}\else\index{#1@{\protect#2}}\fi} 138 139 % Latin abbreviation 140 \newcommand{\abbrevFont}{\textit} % set empty for no italics 141 \newcommand*{\eg}{% 142 \@ifnextchar{,}{\abbrevFont{e}.\abbrevFont{g}.}% 143 {\@ifnextchar{:}{\abbrevFont{e}.\abbrevFont{g}.}% 144 {\abbrevFont{e}.\abbrevFont{g}.,\xspace}}% 145 }% 146 \newcommand*{\ie}{% 147 \@ifnextchar{,}{\abbrevFont{i}.\abbrevFont{e}.}% 148 {\@ifnextchar{:}{\abbrevFont{i}.\abbrevFont{e}.}% 149 {\abbrevFont{i}.\abbrevFont{e}.,\xspace}}% 150 }% 151 \newcommand*{\etc}{% 152 \@ifnextchar{.}{\abbrevFont{etc}}% 153 {\abbrevFont{etc}.\xspace}% 154 }% 155 \newcommand{\etal}{% 156 \@ifnextchar{.}{\abbrevFont{et~al}}% 157 {\abbrevFont{et al}.\xspace}% 158 }% 138 159 \makeatother 139 160 … … 144 165 \endlist 145 166 }% quote2 167 146 168 \newenvironment{rationale}{% 147 169 \begin{quote2}\noindent$\Box$\enspace … … 187 209 \newcommand{\VPageref}[2][page]{\ifx#1\@empty\else{#1}\nobreakspace\fi\pageref{#2}} 188 210 189 % Go programming language 211 % Go programming language: https://github.com/julienc91/listings-golang/blob/master/listings-golang.sty 190 212 \lstdefinelanguage{Golang}{ 191 213 morekeywords=[1]{package,import,func,type,struct,return,defer,panic, recover,select,var,const,iota,},% … … 203 225 } 204 226 205 % CFA programming language, based on ANSI C 227 % CFA programming language, based on ANSI C (with some gcc additions) 206 228 \lstdefinelanguage{CFA}[ANSI]{C}{ 207 229 morekeywords={_Alignas,_Alignof,__alignof,__alignof__,asm,__asm,__asm__,_At,_Atomic,__attribute,__attribute__,auto, 208 230 _Bool,catch,catchResume,choose,_Complex,__complex,__complex__,__const,__const__,disable,dtype,enable,__extension__, 209 fallthr u,finally,forall,ftype,_Generic,_Imaginary,inline,__label__,lvalue,_Noreturn,otype,restrict,_Static_assert,231 fallthrough,fallthru,finally,forall,ftype,_Generic,_Imaginary,inline,__label__,lvalue,_Noreturn,otype,restrict,_Static_assert, 210 232 _Thread_local,throw,throwResume,trait,try,typeof,__typeof,__typeof__,}, 211 233 }% … … 214 236 language=CFA, 215 237 columns=fullflexible, 216 basicstyle=\linespread{0.9}\sf, 217 stringstyle=\tt, 218 tabsize=4, 219 xleftmargin=\parindentlnth, 220 extendedchars=true, 221 escapechar=§, 222 mathescape=true, 223 keepspaces=true, 224 showstringspaces=false, 225 showlines=true, 226 aboveskip=4pt, 238 basicstyle=\linespread{0.9}\sf, % reduce line spacing and use sanserif font 239 stringstyle=\tt, % use typewriter font 240 tabsize=4, % 4 space tabbing 241 xleftmargin=\parindentlnth, % indent code to paragraph indentation 242 extendedchars=true, % allow ASCII characters in the range 128-255 243 escapechar=§, % escape to latex in CFA code 244 mathescape=true, % allow $...$ LaTeX math escapes in code 245 %keepspaces=true, % 246 showstringspaces=false, % do not show spaces with cup 247 showlines=true, % show blank lines at end of code 248 aboveskip=4pt, % spacing above/below code block 227 249 belowskip=3pt, 228 moredelim=**[is][\color{red}]{®}{®}, 229 moredelim=**[is][\color{blue}]{ß}{ß}, 250 moredelim=**[is][\color{red}]{®}{®}, % red highlighting 251 moredelim=**[is][\color{blue}]{ß}{ß}, % blue highlighting 230 252 moredelim=**[is][\color{OliveGreen}]{¢}{¢}, % green highlighting 231 253 moredelim=[is][\lstset{keywords={}}]{¶}{¶}, % temporarily turn off keywords … … 233 255 literate={-}{\raisebox{-0.15ex}{\texttt{-}}}1 {^}{\raisebox{0.6ex}{$\scriptscriptstyle\land\,$}}1 234 256 {~}{\raisebox{0.3ex}{$\scriptstyle\sim\,$}}1 {_}{\makebox[1.2ex][c]{\rule{1ex}{0.1ex}}}1 {`}{\ttfamily\upshape\hspace*{-0.1ex}`}1 235 {<-}{$\leftarrow$}2 {=>}{$\Rightarrow$}2 {...}{$\dots$}2,257 {<-}{$\leftarrow$}2 {=>}{$\Rightarrow$}2, 236 258 }% 237 259 … … 241 263 \renewcommand\thebibliography[1]{ 242 264 \Oldthebibliography{#1} 243 \setlength{\parskip}{0pt} % reduce vertical spacing between references265 \setlength{\parskip}{0pt} % reduce vertical spacing between references 244 266 \setlength{\itemsep}{5pt plus 0.3ex} 245 267 }% -
doc/bibliography/cfa.bib
r950f7a7 r7527e63 832 832 address = {http://www.iso.org}, 833 833 year = 2012, 834 } 835 836 @manual{C++Concepts, 837 keywords = {ISO/IEC TS 19217:2015}, 838 contributer = {a3moss@uwaterloo.ca}, 839 key = {C++ Concepts}, 840 title = {Information technology -- Programming languages -- {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Extensions for concepts}, 841 organization = {International Standard ISO/IEC TS 19217:2015}, 842 publisher = {International Standard Organization}, 843 address = {http://www.iso.org}, 844 year = 2015 834 845 } 835 846 … … 1623 1634 year = 1974, 1624 1635 } 1636 1637 @unpublished{Ditchfield:conversions, 1638 contributer = {a3moss@uwaterloo.ca}, 1639 author = {Glen Ditchfield}, 1640 title = {Conversions for {Cforall}}, 1641 note = {\href{http://plg.uwaterloo.ca/~cforall/Conversions/index.html}{http://\-plg.uwaterloo.ca/\-\textasciitilde cforall/\-Conversions/\-index.html}}, 1642 month = {Nov}, 1643 year = {2002}, 1644 urldate = {28 July 2016}, 1645 } 1646 1625 1647 1626 1648 @techreport{Dijkstra65, … … 4663 4685 } 4664 4686 4687 @article{Ganzinger80, 4688 contributer = {a3moss@uwaterloo.ca}, 4689 author = {Ganzinger, Harald and Ripken, Knut}, 4690 title = {Operator Identification in {ADA}: Formal Specification, Complexity, and Concrete Implementation}, 4691 journal = {SIGPLAN Notices}, 4692 issue_date = {February 1980}, 4693 volume = {15}, 4694 number = {2}, 4695 month = feb, 4696 year = {1980}, 4697 issn = {0362-1340}, 4698 pages = {30--42}, 4699 numpages = {13}, 4700 url = {http://doi.acm.org/10.1145/947586.947589}, 4701 doi = {10.1145/947586.947589}, 4702 publisher = {ACM}, 4703 address = {New York, NY, USA} 4704 } 4705 4665 4706 @article{Ford82, 4666 4707 keywords = {}, … … 5829 5870 } 5830 5871 5872 @article{Pennello80, 5873 contributer = {a3moss@uwaterloo.ca}, 5874 author = {Pennello, Tom and DeRemer, Frank and Meyers, Richard}, 5875 title = {A Simplified Operator Identification Scheme for {Ada}}, 5876 journal = {SIGPLAN Notices}, 5877 issue_date = {July-August 1980}, 5878 volume = {15}, 5879 number = {7 and 8}, 5880 month = jul, 5881 year = {1980}, 5882 issn = {0362-1340}, 5883 pages = {82--87}, 5884 numpages = {6}, 5885 url = {http://doi.acm.org/10.1145/947680.947688}, 5886 doi = {10.1145/947680.947688}, 5887 publisher = {ACM}, 5888 address = {New York, NY, USA}, 5889 } 5890 5831 5891 @inproceedings{Dice10, 5832 5892 keywords = {hardware, synchronization, transactional memory}, -
doc/user/user.tex
r950f7a7 r7527e63 11 11 %% Created On : Wed Apr 6 14:53:29 2016 12 12 %% Last Modified By : Peter A. Buhr 13 %% Last Modified On : Wed Jul 13 08:14:39201614 %% Update Count : 1 24713 %% Last Modified On : Sun Aug 14 08:23:06 2016 14 %% Update Count : 1323 15 15 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16 16 … … 211 211 however, it largely extended the language, and did not address many existing problems.\footnote{% 212 212 Two important existing problems addressed were changing the type of character literals from ©int© to ©char© and enumerator from ©int© to the type of its enumerators.} 213 \Index*{Fortran}~\cite{Fortran08}, \Index*{Ada}~\cite{Ada12}, and \Index*{Cobol}~\cite{Cobol14} are examples of programming languages that took an evolutionary approach, where modern language features ( e.g.,objects, concurrency) are added and problems fixed within the framework of the existing language.213 \Index*{Fortran}~\cite{Fortran08}, \Index*{Ada}~\cite{Ada12}, and \Index*{Cobol}~\cite{Cobol14} are examples of programming languages that took an evolutionary approach, where modern language features (\eg objects, concurrency) are added and problems fixed within the framework of the existing language. 214 214 \Index*{Java}~\cite{Java8}, \Index*{Go}~\cite{Go}, \Index*{Rust}~\cite{Rust} and \Index*{D}~\cite{D} are examples of the revolutionary approach for modernizing C/\CC, resulting in a new language rather than an extension of the descendent. 215 215 These languages have different syntax and semantics from C, and do not interoperate directly with C, largely because of garbage collection. … … 226 226 227 227 \section{Interoperability} 228 \label{s:Interoperability} 228 229 229 230 \CFA is designed to integrate well with existing C programs and libraries. … … 265 266 \section[Compiling CFA Program]{Compiling \CFA Program} 266 267 267 The command ©cfa© is used to compile \CFA program(s), and is based on the GNU \Indexc{gcc} command, e.g.:268 The command ©cfa© is used to compile \CFA program(s), and is based on the GNU \Indexc{gcc} command, \eg: 268 269 \begin{lstlisting} 269 270 cfa§\indexc{cfa}\index{compilation!cfa@©cfa©}§ [ gcc-options ] C/§\CFA§-files [ assembler/loader-files ] … … 314 315 The \CFA compilation message is printed at the beginning of a compilation. 315 316 \textbf{This option is the default.} 317 318 \item 319 \Indexc{-no-include-stdhdr}\index{compilation option!-no-include-stdhdr@©-no-include-stdhdr©} 320 Do not supply ©extern "C"© wrappers for \Celeven standard include files (see~\VRef{s:StandardHeaders}). 321 \textbf{This option is \emph{not} the default.} 316 322 \end{description} 317 323 … … 350 356 \section{Underscores in Constants} 351 357 352 Numeric constants are extended to allow \Index{underscore}s within constants\index{constant!underscore}, e.g.:358 Numeric constants are extended to allow \Index{underscore}s within constants\index{constant!underscore}, \eg: 353 359 \begin{lstlisting} 354 360 2®_®147®_®483®_®648; §\C{// decimal constant}§ … … 366 372 \begin{enumerate} 367 373 \item 368 A sequence of underscores is disallowed, e.g.,©12__34© is invalid.374 A sequence of underscores is disallowed, \eg ©12__34© is invalid. 369 375 \item 370 376 Underscores may only appear within a sequence of digits (regardless of the digit radix). 371 In other words, an underscore cannot start or end a sequence of digits, e.g.,©_1©, ©1_© and ©_1_© are invalid (actually, the 1st and 3rd examples are identifier names).377 In other words, an underscore cannot start or end a sequence of digits, \eg ©_1©, ©1_© and ©_1_© are invalid (actually, the 1st and 3rd examples are identifier names). 372 378 \item 373 379 A numeric prefix may end with an underscore; … … 498 504 \end{quote2} 499 505 500 All type qualifiers, e.g., ©const©, ©volatile©, etc., are used in the normal way with the new declarations and also appear left to right, e.g.:506 All type qualifiers, \eg ©const©, ©volatile©, etc., are used in the normal way with the new declarations and also appear left to right, \eg: 501 507 \begin{quote2} 502 508 \begin{tabular}{@{}l@{\hspace{1em}}l@{\hspace{1em}}l@{}} … … 518 524 \end{tabular} 519 525 \end{quote2} 520 All declaration qualifiers, e.g.,©extern©, ©static©, etc., are used in the normal way with the new declarations but can only appear at the start of a \CFA routine declaration,\footnote{\label{StorageClassSpecifier}521 The placement of a storage-class specifier other than at the beginning of the declaration specifiers in a declaration is an obsolescent feature.~\cite[\S~6.11.5(1)]{C11}} e.g.:526 All declaration qualifiers, \eg ©extern©, ©static©, etc., are used in the normal way with the new declarations but can only appear at the start of a \CFA routine declaration,\footnote{\label{StorageClassSpecifier} 527 The placement of a storage-class specifier other than at the beginning of the declaration specifiers in a declaration is an obsolescent feature.~\cite[\S~6.11.5(1)]{C11}} \eg: 522 528 \begin{quote2} 523 529 \begin{tabular}{@{}l@{\hspace{3em}}l@{\hspace{2em}}l@{}} … … 542 548 Unsupported are K\&R C declarations where the base type defaults to ©int©, if no type is specified,\footnote{ 543 549 At least one type specifier shall be given in the declaration specifiers in each declaration, and in the specifier-qualifier list in each structure declaration and type name~\cite[\S~6.7.2(2)]{C11}} 544 e.g.:550 \eg: 545 551 \begin{lstlisting} 546 552 x; §\C{// int x}§ … … 612 618 A \Index{pointer}/\Index{reference} is a generalization of a variable name, i.e., a mutable address that can point to more than one memory location during its lifetime. 613 619 (Similarly, an integer variable can contain multiple integer literals during its lifetime versus an integer constant representing a single literal during its lifetime and may not occupy storage as the literal is embedded directly into instructions.) 614 Hence, a pointer occupies memory to store its current address, and the pointer's value is loaded by dereferencing, e.g.:620 Hence, a pointer occupies memory to store its current address, and the pointer's value is loaded by dereferencing, \eg: 615 621 \begin{quote2} 616 622 \begin{tabular}{@{}ll@{}} … … 669 675 Except for auto-dereferencing by the compiler, this reference example is the same as the previous pointer example. 670 676 Hence, a reference behaves like the variable name for the current variable it is pointing-to. 671 The simplest way to understand a reference is to imagine the compiler inserting a dereference operator before the reference variable for each reference qualifier in a declaration, e.g.:677 The simplest way to understand a reference is to imagine the compiler inserting a dereference operator before the reference variable for each reference qualifier in a declaration, \eg: 672 678 \begin{lstlisting} 673 679 r2 = ((r1 + r2) * (r3 - r1)) / (r3 - 15); … … 677 683 ®*®r2 = ((®*®r1 + ®*®r2) ®*® (®**®r3 - ®*®r1)) / (®**®r3 - 15); 678 684 \end{lstlisting} 679 When a reference operation appears beside a dereference operation, e.g.,©&*©, they cancel out.\footnote{685 When a reference operation appears beside a dereference operation, \eg ©&*©, they cancel out.\footnote{ 680 686 The unary ©&© operator yields the address of its operand. 681 687 If the operand has type ``type'', the result has type ``pointer to type''. … … 721 727 ®&®crc = &cx; §\C{// error, cannot change crc}§ 722 728 \end{lstlisting} 723 Hence, for type ©& const©, there is no pointer assignment, so ©&rc = &x© is disallowed, and \emph{the address value cannot be ©0© unless an arbitrary pointer is assigned to the reference}, e.g.:729 Hence, for type ©& const©, there is no pointer assignment, so ©&rc = &x© is disallowed, and \emph{the address value cannot be ©0© unless an arbitrary pointer is assigned to the reference}, \eg: 724 730 \begin{lstlisting} 725 731 int & const r = *0; §\C{// where 0 is the int * zero}§ 726 732 \end{lstlisting} 727 733 Otherwise, the compiler is managing the addresses for type ©& const© not the programmer, and by a programming discipline of only using references with references, address errors can be prevented. 734 Finally, the position of the ©const© qualifier \emph{after} the pointer/reference qualifier causes confuse for C programmers. 735 The ©const© qualifier cannot be moved before the pointer/reference qualifier for C style-declarations; 736 \CFA-style declarations attempt to address this issue: 737 \begin{quote2} 738 \begin{tabular}{@{}l@{\hspace{3em}}l@{}} 739 \multicolumn{1}{c@{\hspace{3em}}}{\textbf{\CFA}} & \multicolumn{1}{c}{\textbf{C}} \\ 740 \begin{lstlisting} 741 ®const® * ®const® * const int ccp; 742 ®const® & ®const® & const int ccr; 743 \end{lstlisting} 744 & 745 \begin{lstlisting} 746 const int * ®const® * ®const® ccp; 747 748 \end{lstlisting} 749 \end{tabular} 750 \end{quote2} 751 where the \CFA declaration is read left-to-right (see \VRef{s:Declarations}). 728 752 729 753 \Index{Initialization} is different than \Index{assignment} because initialization occurs on the empty (uninitialized) storage on an object, while assignment occurs on possibly initialized storage of an object. … … 783 807 784 808 809 \section{Backquote Identifiers} 810 \label{s:BackquoteIdentifiers} 811 812 \CFA accommodates keyword clashes by syntactic transformations using the \CFA backquote escape-mechanism: 813 \begin{lstlisting} 814 int `otype` = 3; // make keyword an identifier 815 double `choose` = 3.5; 816 \end{lstlisting} 817 Programs can be converted easily by enclosing keyword identifiers in backquotes, and the backquotes can be removed later when the identifier name is changed to an non-keyword name. 818 Clashes in C header files (see~\VRef{s:StandardHeaders}) can be handled automatically using the preprocessor, ©#include_next© and ©-I filename©: 819 \begin{lstlisting} 820 // include file uses the CFA keyword "otype". 821 #if ! defined( otype ) // nesting ? 822 #define otype `otype` 823 #define __CFA_BFD_H__ 824 #endif // ! otype 825 826 #include_next <bfd.h> // must have internal check for multiple expansion 827 828 #if defined( otype ) && defined( __CFA_BFD_H__ ) // reset only if set 829 #undef otype 830 #undef __CFA_BFD_H__ 831 #endif // otype && __CFA_BFD_H__ 832 \end{lstlisting} 833 834 785 835 \section{Type Operators} 786 836 787 The new declaration syntax can be used in other contexts where types are required, e.g.,casts and the pseudo-routine ©sizeof©:837 The new declaration syntax can be used in other contexts where types are required, \eg casts and the pseudo-routine ©sizeof©: 788 838 \begin{quote2} 789 839 \begin{tabular}{@{}l@{\hspace{3em}}l@{}} … … 805 855 806 856 \CFA also supports a new syntax for routine definition, as well as ISO C and K\&R routine syntax. 807 The point of the new syntax is to allow returning multiple values from a routine~\cite{Galletly96,CLU}, e.g.:857 The point of the new syntax is to allow returning multiple values from a routine~\cite{Galletly96,CLU}, \eg: 808 858 \begin{lstlisting} 809 859 ®[ int o1, int o2, char o3 ]® f( int i1, char i2, char i3 ) { … … 817 867 \Index*{Michael Tiemann}, with help from \Index*{Doug Lea}, provided named return values in g++, circa 1989.} 818 868 The value of each local return variable is automatically returned at routine termination. 819 Declaration qualifiers can only appear at the start of a routine definition, e.g.:869 Declaration qualifiers can only appear at the start of a routine definition, \eg: 820 870 \begin{lstlisting} 821 871 ®extern® [ int x ] g( int y ) {§\,§} … … 849 899 The inability to use \CFA declarations in these two contexts is probably a blessing because it precludes programmers from arbitrarily switching between declarations forms within a declaration contexts. 850 900 851 C-style declarations can be used to declare parameters for \CFA style routine definitions, e.g.:901 C-style declarations can be used to declare parameters for \CFA style routine definitions, \eg: 852 902 \begin{lstlisting} 853 903 [ int ] f( * int, int * ); §\C{// returns an integer, accepts 2 pointers to integers}§ … … 898 948 899 949 The syntax of the new routine prototype declaration follows directly from the new routine definition syntax; 900 as well, parameter names are optional, e.g.:950 as well, parameter names are optional, \eg: 901 951 \begin{lstlisting} 902 952 [ int x ] f (); §\C{// returning int with no parameters}§ … … 906 956 \end{lstlisting} 907 957 This syntax allows a prototype declaration to be created by cutting and pasting source text from the routine definition header (or vice versa). 908 It is possible to declare multiple routine-prototypes in a single declaration, but the entire type specification is distributed across \emph{all} routine names in the declaration list (see~\VRef{s:Declarations}), e.g.:958 It is possible to declare multiple routine-prototypes in a single declaration, but the entire type specification is distributed across \emph{all} routine names in the declaration list (see~\VRef{s:Declarations}), \eg: 909 959 \begin{quote2} 910 960 \begin{tabular}{@{}l@{\hspace{3em}}l@{}} … … 919 969 \end{tabular} 920 970 \end{quote2} 921 Declaration qualifiers can only appear at the start of a \CFA routine declaration,\footref{StorageClassSpecifier} e.g.:971 Declaration qualifiers can only appear at the start of a \CFA routine declaration,\footref{StorageClassSpecifier} \eg: 922 972 \begin{lstlisting} 923 973 extern [ int ] f (int); … … 928 978 \section{Routine Pointers} 929 979 930 The syntax for pointers to \CFA routines specifies the pointer name on the right, e.g.:980 The syntax for pointers to \CFA routines specifies the pointer name on the right, \eg: 931 981 \begin{lstlisting} 932 982 * [ int x ] () fp; §\C{// pointer to routine returning int with no parameters}§ … … 987 1037 Alternatively, prototype definitions can be eliminated by using a two-pass compilation, and implicitly creating header files for exports. 988 1038 The former is easy to do, while the latter is more complex. 989 Currently, \CFA does \emph{not} attempt to support named arguments. 1039 1040 Furthermore, named arguments do not work well in a \CFA-style programming-languages because they potentially introduces a new criteria for type matching. 1041 For example, it is technically possible to disambiguate between these two overloaded definitions of ©f© based on named arguments at the call site: 1042 \begin{lstlisting} 1043 int f( int i, int j ); 1044 int f( int x, double y ); 1045 1046 f( j : 3, i : 4 ); §\C{// 1st f}§ 1047 f( x : 7, y : 8.1 ); §\C{// 2nd f}§ 1048 f( 4, 5 ); §\C{// ambiguous call}§ 1049 \end{lstlisting} 1050 However, named arguments compound routine resolution in conjunction with conversions: 1051 \begin{lstlisting} 1052 f( i : 3, 5.7 ); §\C{// ambiguous call ?}§ 1053 \end{lstlisting} 1054 Depending on the cost associated with named arguments, this call could be resolvable or ambiguous. 1055 Adding named argument into the routine resolution algorithm does not seem worth the complexity. 1056 Therefore, \CFA does \emph{not} attempt to support named arguments. 990 1057 991 1058 \item[Default Arguments] … … 997 1064 the allowable positional calls are: 998 1065 \begin{lstlisting} 999 p(); §\C{// rewrite $\Rightarrow$ p( 1, 2, 3 )}§1000 p( 4 ); §\C{// rewrite $\Rightarrow$ p( 4, 2, 3 )}§1001 p( 4, 4 ); §\C{// rewrite $\Rightarrow$ p( 4, 4, 3 )}§1002 p( 4, 4, 4 ); §\C{// rewrite $\Rightarrow$ p( 4, 4, 4 )}§1066 p(); §\C{// rewrite $\Rightarrow$ p( 1, 2, 3 )}§ 1067 p( 4 ); §\C{// rewrite $\Rightarrow$ p( 4, 2, 3 )}§ 1068 p( 4, 4 ); §\C{// rewrite $\Rightarrow$ p( 4, 4, 3 )}§ 1069 p( 4, 4, 4 ); §\C{// rewrite $\Rightarrow$ p( 4, 4, 4 )}§ 1003 1070 // empty arguments 1004 p( , 4, 4 ); §\C{// rewrite $\Rightarrow$ p( 1, 4, 4 )}§1005 p( 4, , 4 ); §\C{// rewrite $\Rightarrow$ p( 4, 2, 4 )}§1006 p( 4, 4, ); §\C{// rewrite $\Rightarrow$ p( 4, 4, 3 )}§1007 p( 4, , ); §\C{// rewrite $\Rightarrow$ p( 4, 2, 3 )}§1008 p( , 4, ); §\C{// rewrite $\Rightarrow$ p( 1, 4, 3 )}§1009 p( , , 4 ); §\C{// rewrite $\Rightarrow$ p( 1, 2, 4 )}§1010 p( , , ); §\C{// rewrite $\Rightarrow$ p( 1, 2, 3 )}§1071 p( , 4, 4 ); §\C{// rewrite $\Rightarrow$ p( 1, 4, 4 )}§ 1072 p( 4, , 4 ); §\C{// rewrite $\Rightarrow$ p( 4, 2, 4 )}§ 1073 p( 4, 4, ); §\C{// rewrite $\Rightarrow$ p( 4, 4, 3 )}§ 1074 p( 4, , ); §\C{// rewrite $\Rightarrow$ p( 4, 2, 3 )}§ 1075 p( , 4, ); §\C{// rewrite $\Rightarrow$ p( 1, 4, 3 )}§ 1076 p( , , 4 ); §\C{// rewrite $\Rightarrow$ p( 1, 2, 4 )}§ 1077 p( , , ); §\C{// rewrite $\Rightarrow$ p( 1, 2, 3 )}§ 1011 1078 \end{lstlisting} 1012 1079 Here the missing arguments are inserted from the default values in the parameter list. … … 1043 1110 The conflict occurs because both named and ellipse arguments must appear after positional arguments, giving two possibilities: 1044 1111 \begin{lstlisting} 1045 p( /* positional */, . . ., /* named */ );1046 p( /* positional */, /* named */, . .. );1047 \end{lstlisting} 1048 While it is possible to implement both approaches, the first possibly is more complex than the second, e.g.:1049 \begin{lstlisting} 1050 p( int x, int y, int z, . .. );1051 p( 1, 4, 5, 6, z : 3, y : 2 ); §\C{// assume p( /* positional */, . . ., /* named */ );}§1052 p( 1, z : 3, y : 2, 4, 5, 6 ); §\C{// assume p( /* positional */, /* named */, . .. );}§1112 p( /* positional */, ... , /* named */ ); 1113 p( /* positional */, /* named */, ... ); 1114 \end{lstlisting} 1115 While it is possible to implement both approaches, the first possibly is more complex than the second, \eg: 1116 \begin{lstlisting} 1117 p( int x, int y, int z, ... ); 1118 p( 1, 4, 5, 6, z : 3, y : 2 ); §\C{// assume p( /* positional */, ... , /* named */ );}§ 1119 p( 1, z : 3, y : 2, 4, 5, 6 ); §\C{// assume p( /* positional */, /* named */, ... );}§ 1053 1120 \end{lstlisting} 1054 1121 In the first call, it is necessary for the programmer to conceptually rewrite the call, changing named arguments into positional, before knowing where the ellipse arguments begin. … … 1056 1123 In the second call, the named arguments separate the positional and ellipse arguments, making it trivial to read the call. 1057 1124 1058 The problem is exacerbated with default arguments, e.g.:1059 \begin{lstlisting} 1060 void p( int x, int y = 2, int z = 3. .. );1061 p( 1, 4, 5, 6, z : 3 ); §\C{// assume p( /* positional */, . . ., /* named */ );}§1062 p( 1, z : 3, 4, 5, 6 ); §\C{// assume p( /* positional */, /* named */, . .. );}§1125 The problem is exacerbated with default arguments, \eg: 1126 \begin{lstlisting} 1127 void p( int x, int y = 2, int z = 3... ); 1128 p( 1, 4, 5, 6, z : 3 ); §\C{// assume p( /* positional */, ... , /* named */ );}§ 1129 p( 1, z : 3, 4, 5, 6 ); §\C{// assume p( /* positional */, /* named */, ... );}§ 1063 1130 \end{lstlisting} 1064 1131 The first call is an error because arguments 4 and 5 are actually positional not ellipse arguments; … … 1105 1172 \subsection{Type Nesting} 1106 1173 1107 \CFA allows \Index{type nesting}, and type qualification of the nested typ es (see \VRef[Figure]{f:TypeNestingQualification}), where as C hoists\index{type hoisting} (refactors) nested types into the enclosing scope and has no type qualification.1174 \CFA allows \Index{type nesting}, and type qualification of the nested typres (see \VRef[Figure]{f:TypeNestingQualification}), where as C hoists\index{type hoisting} (refactors) nested types into the enclosing scope and has no type qualification. 1108 1175 \begin{figure} 1176 \centering 1109 1177 \begin{tabular}{@{}l@{\hspace{3em}}l|l@{}} 1110 1178 \multicolumn{1}{c@{\hspace{3em}}}{\textbf{C Type Nesting}} & \multicolumn{1}{c}{\textbf{C Implicit Hoisting}} & \multicolumn{1}{|c}{\textbf{\CFA}} \\ … … 1264 1332 1265 1333 As mentioned, tuples can appear in contexts requiring a list of value, such as an argument list of a routine call. 1266 In unambiguous situations, the tuple brackets may be omitted, e.g.,a tuple that appears as an argument may have its1334 In unambiguous situations, the tuple brackets may be omitted, \eg a tuple that appears as an argument may have its 1267 1335 square brackets omitted for convenience; therefore, the following routine invocations are equivalent: 1268 1336 \begin{lstlisting} … … 1303 1371 1304 1372 Type qualifiers, i.e., const and volatile, may modify a tuple type. 1305 The meaning is the same as for a type qualifier modifying an aggregate type [Int99, x 6.5.2.3(7),x 6.7.3(11)], i.e., the qualifier is distributed across all of the types in the tuple, e.g.:1373 The meaning is the same as for a type qualifier modifying an aggregate type [Int99, x 6.5.2.3(7),x 6.7.3(11)], i.e., the qualifier is distributed across all of the types in the tuple, \eg: 1306 1374 \begin{lstlisting} 1307 1375 const volatile [ int, float, const int ] x; … … 1311 1379 [ const volatile int, const volatile float, const volatile int ] x; 1312 1380 \end{lstlisting} 1313 Declaration qualifiers can only appear at the start of a \CFA tuple declaration4, e.g.:1381 Declaration qualifiers can only appear at the start of a \CFA tuple declaration4, \eg: 1314 1382 \begin{lstlisting} 1315 1383 extern [ int, int ] w1; … … 1319 1387 Unfortunately, C's syntax for subscripts precluded treating them as tuples. 1320 1388 The C subscript list has the form ©[i][j]...© and not ©[i, j, ...]©. 1321 Therefore, there is no syntactic way for a routine returning multiple values to specify the different subscript values, e.g.,©f[g()]© always means a single subscript value because there is only one set of brackets.1389 Therefore, there is no syntactic way for a routine returning multiple values to specify the different subscript values, \eg ©f[g()]© always means a single subscript value because there is only one set of brackets. 1322 1390 Fixing this requires a major change to C because the syntactic form ©M[i, j, k]© already has a particular meaning: ©i, j, k© is a comma expression. 1323 1391 \end{rationale} … … 1373 1441 Mass assignment has the following form: 1374 1442 \begin{lstlisting} 1375 [ §\emph{lvalue}§, ... , §\emph{lvalue}§ ] = §\emph{expr}§;1443 [ §\emph{lvalue}§, ... , §\emph{lvalue}§ ] = §\emph{expr}§; 1376 1444 \end{lstlisting} 1377 1445 \index{lvalue} … … 1380 1448 Clearly, the types of the entities being assigned must be type compatible with the value of the expression. 1381 1449 1382 Mass assignment has parallel semantics, e.g.,the statement:1450 Mass assignment has parallel semantics, \eg the statement: 1383 1451 \begin{lstlisting} 1384 1452 [ x, y, z ] = 1.5; … … 1413 1481 Multiple assignment has the following form: 1414 1482 \begin{lstlisting} 1415 [ §\emph{lvalue}§, . . ., §\emph{lvalue}§ ] = [ §\emph{expr}§, . . ., §\emph{expr}§ ];1483 [ §\emph{lvalue}§, ... , §\emph{lvalue}§ ] = [ §\emph{expr}§, ... , §\emph{expr}§ ]; 1416 1484 \end{lstlisting} 1417 1485 \index{lvalue} … … 1469 1537 \section{Unnamed Structure Fields} 1470 1538 1471 C requires each field of a structure to have a name, except for a bit field associated with a basic type, e.g.:1539 C requires each field of a structure to have a name, except for a bit field associated with a basic type, \eg: 1472 1540 \begin{lstlisting} 1473 1541 struct { 1474 int f1; // named field1475 int f2 : 4; // named field with bit field size1476 int : 3; // unnamed field for basic type with bit field size1477 int ; // disallowed, unnamed field1478 int *; // disallowed, unnamed field1479 int (*)(int); // disallowed, unnamed field1542 int f1; §\C{// named field}§ 1543 int f2 : 4; §\C{// named field with bit field size}§ 1544 int : 3; §\C{// unnamed field for basic type with bit field size}§ 1545 int ; §\C{// disallowed, unnamed field}§ 1546 int *; §\C{// disallowed, unnamed field}§ 1547 int (*)(int); §\C{// disallowed, unnamed field}§ 1480 1548 }; 1481 1549 \end{lstlisting} 1482 1550 This requirement is relaxed by making the field name optional for all field declarations; therefore, all the field declarations in the example are allowed. 1483 1551 As for unnamed bit fields, an unnamed field is used for padding a structure to a particular size. 1484 A list of unnamed fields is also supported, e.g.:1552 A list of unnamed fields is also supported, \eg: 1485 1553 \begin{lstlisting} 1486 1554 struct { 1487 int , , ; // 3 unnamed fields1555 int , , ; §\C{// 3 unnamed fields}§ 1488 1556 } 1489 1557 \end{lstlisting} … … 1498 1566 §\emph{expr}§ -> [ §\emph{fieldlist}§ ] 1499 1567 \end{lstlisting} 1500 \emph{expr} is any expression yielding a value of type record, e.g.,©struct©, ©union©.1568 \emph{expr} is any expression yielding a value of type record, \eg ©struct©, ©union©. 1501 1569 Each element of \emph{ fieldlist} is an element of the record specified by \emph{expr}. 1502 1570 A record-field tuple may be used anywhere a tuple can be used. An example of the use of a record-field tuple is … … 1760 1828 } 1761 1829 \end{lstlisting} 1762 While the declaration of the local variable ©y© is useful and its scope is across all ©case© clauses, the initialization for such a variable is defined to never be executed because control always transfers over it. 1763 Furthermore, any statements before the first ©case© clause can only be executed if labelled and transferred to using a ©goto©, either from outside or inside of the ©switch©. 1764 As mentioned, transfer into control structures should be forbidden; 1765 transfers from within the ©switch© body using a ©goto© are equally unpalatable. 1766 As well, the declaration of ©z© is cannot occur after the ©case© because a label can only be attached to a statement, and without a fall through to case 3, ©z© is uninitialized. 1830 While the declaration of the local variable ©y© is useful with a scope across all ©case© clauses, the initialization for such a variable is defined to never be executed because control always transfers over it. 1831 Furthermore, any statements before the first ©case© clause can only be executed if labelled and transferred to using a ©goto©, either from outside or inside of the ©switch©, both of which are problematic. 1832 As well, the declaration of ©z© cannot occur after the ©case© because a label can only be attached to a statement, and without a fall through to case 3, ©z© is uninitialized. 1833 The key observation is that the ©switch© statement branches into control structure, i.e., there are multiple entry points into its statement body. 1767 1834 \end{enumerate} 1768 1835 … … 1778 1845 and there is only a medium amount of fall-through from one ©case© clause to the next, and most of these result from a list of case values executing common code, rather than a sequence of case actions that compound. 1779 1846 \end{itemize} 1780 These observations help to put the suggestedchanges to the ©switch© into perspective.1847 These observations help to put the \CFA changes to the ©switch© into perspective. 1781 1848 \begin{enumerate} 1782 1849 \item 1783 1850 Eliminating default fall-through has the greatest potential for affecting existing code. 1784 However, even if fall-through is removed, most ©switch© statements would continue to work because of the explicit transfers already present at the end of each ©case© clause, the common placement of the ©default© clause at the end of the case list, and the most common use of fall-through, i.e., a list of ©case© clauses executing common code, e.g.:1785 \begin{lstlisting}1851 However, even if fall-through is removed, most ©switch© statements would continue to work because of the explicit transfers already present at the end of each ©case© clause, the common placement of the ©default© clause at the end of the case list, and the most common use of fall-through, i.e., a list of ©case© clauses executing common code, \eg: 1852 \begin{lstlisting} 1786 1853 case 1: case 2: case 3: ... 1787 1854 \end{lstlisting} 1788 1855 still work. 1789 1856 Nevertheless, reversing the default action would have a non-trivial effect on case actions that compound, such as the above example of processing shell arguments. 1790 Therefore, to preserve backwards compatibility, it is necessary to introduce a new kind of ©switch© statement, called ©choose©, with no implicit fall-through semantics and an explicit fall-through if the last statement of a case-clause ends with the new keyword ©fallthru©, e.g.: 1857 <<<<<<< HEAD 1858 Therefore, to preserve backwards compatibility, it is necessary to introduce a new kind of ©switch© statement, called ©choose©, with no implicit fall-through semantics and an explicit fall-through if the last statement of a case-clause ends with the new keyword ©fallthru©, \eg: 1859 ======= 1860 Therefore, to preserve backwards compatibility, it is necessary to introduce a new kind of ©switch© statement, called ©choose©, with no implicit fall-through semantics and an explicit fall-through if the last statement of a case-clause ends with the new keyword ©fallthrough©/©fallthru©, e.g.: 1861 >>>>>>> 080615890f586cb9954c252b55cab47f52c25758 1791 1862 \begin{lstlisting} 1792 1863 ®choose® ( i ) { … … 1815 1886 Therefore, no change is made for this issue. 1816 1887 \item 1817 Dealing with unreachable code in a ©switch©/©choose© body is solved by restricting declarations and associated initialization to the start of statement body, which is executed \emph{before} the transfer to the appropriate ©case© clause .\footnote{1818 Essentially, these declarations are hoisted before the statement and both declarations and statement are surrounded by a compound statement.} and precluding statements before the first ©case© clause.1819 Further declaration in the statement body are disallowed.1888 Dealing with unreachable code in a ©switch©/©choose© body is solved by restricting declarations and associated initialization to the start of statement body, which is executed \emph{before} the transfer to the appropriate ©case© clause\footnote{ 1889 Essentially, these declarations are hoisted before the ©switch©/©choose© statement and both declarations and statement are surrounded by a compound statement.} and precluding statements before the first ©case© clause. 1890 Further declarations at the same nesting level as the statement body are disallowed to ensure every transfer into the body is sound. 1820 1891 \begin{lstlisting} 1821 1892 switch ( x ) { 1822 ®int i = 0;® §\C{// allowed }§1893 ®int i = 0;® §\C{// allowed only at start}§ 1823 1894 case 0: 1824 1895 ... 1825 ®int i= 0;® §\C{// disallowed}§1896 ®int j = 0;® §\C{// disallowed}§ 1826 1897 case 1: 1827 1898 { 1828 ®int i = 0;® §\C{// allowed in any compound statement}§1899 ®int k = 0;® §\C{// allowed at different nesting levels}§ 1829 1900 ... 1830 1901 } … … 1846 1917 \begin{lstlisting} 1847 1918 switch ( i ) { 1848 ®case1, 3, 5®:1919 case ®1, 3, 5®: 1849 1920 ... 1850 ®case2, 4, 6®:1921 case ®2, 4, 6®: 1851 1922 ... 1852 1923 } … … 1879 1950 \begin{lstlisting} 1880 1951 switch ( i ) { 1881 ®case1~5:®1952 case ®1~5:® 1882 1953 ... 1883 ®case10~15:®1954 case ®10~15:® 1884 1955 ... 1885 1956 } … … 1888 1959 \begin{lstlisting} 1889 1960 switch ( i ) 1890 case 1 ... 5:1961 case ®1 ... 5®: 1891 1962 ... 1892 case 10 ... 15:1963 case ®10 ... 15®: 1893 1964 ... 1894 1965 } … … 2707 2778 Like the \Index*[C++]{\CC} lexical problem with closing template-syntax, e.g, ©Foo<Bar<int®>>®©, this issue can be solved with a more powerful lexer/parser. 2708 2779 2709 There are several ambiguous cases with operator identifiers, e.g.,©int *?*?()©, where the string ©*?*?© can be lexed as ©*©/©?*?© or ©*?©/©*?©.2710 Since it is common practise to put a unary operator juxtaposed to an identifier, e.g.,©*i©, users will be annoyed if they cannot do this with respect to operator identifiers.2780 There are several ambiguous cases with operator identifiers, \eg ©int *?*?()©, where the string ©*?*?© can be lexed as ©*©/©?*?© or ©*?©/©*?©. 2781 Since it is common practise to put a unary operator juxtaposed to an identifier, \eg ©*i©, users will be annoyed if they cannot do this with respect to operator identifiers. 2711 2782 Even with this special hack, there are 5 general cases that cannot be handled. 2712 2783 The first case is for the function-call identifier ©?()©: … … 2773 2844 This means that a function requiring mutual exclusion could block if the lock is already held by another thread. 2774 2845 Blocking on a monitor lock does not block the kernel thread, it simply blocks the user thread, which yields its kernel thread while waiting to obtain the lock. 2775 If multiple mutex parameters are specified, they will be locked in parameter order ( i.e.first parameter is locked first) and unlocked in the2846 If multiple mutex parameters are specified, they will be locked in parameter order (\ie first parameter is locked first) and unlocked in the 2776 2847 reverse order. 2777 2848 \begin{lstlisting} … … 4350 4421 \begin{description} 4351 4422 \item[Change:] add new keywords \\ 4352 New keywords are added to \CFA .4423 New keywords are added to \CFA (see~\VRef{s:NewKeywords}). 4353 4424 \item[Rationale:] keywords added to implement new semantics of \CFA. 4354 4425 \item[Effect on original feature:] change to semantics of well-defined feature. \\ 4355 4426 Any ISO C programs using these keywords as identifiers are invalid \CFA programs. 4356 \item[Difficulty of converting:] keyword clashes are accommodated by syntactic transformations using the \CFA backquote escape-mechanism: 4357 \begin{lstlisting} 4358 int `otype` = 3; // make keyword an identifier 4359 double `choose` = 3.5; 4360 \end{lstlisting} 4361 Programs can be converted automatically by enclosing keyword identifiers in backquotes, and the backquotes can be remove later when the identifier name is changed. 4362 Clashes in C system libraries (include files) can be handled automatically using preprocessor, ©#include_next© and ©-Ifilename©: 4363 \begin{lstlisting} 4364 // include file uses the CFA keyword "otype". 4365 #if ! defined( otype ) // nesting ? 4366 #define otype `otype` 4367 #define __CFA_BFD_H__ 4368 #endif // ! otype 4369 4370 #include_next <bfd.h> // must have internal check for multiple expansion 4371 4372 #if defined( otype ) && defined( __CFA_BFD_H__ ) // reset only if set 4373 #undef otype 4374 #undef __CFA_BFD_H__ 4375 #endif // otype && __CFA_BFD_H__ 4376 \end{lstlisting} 4427 \item[Difficulty of converting:] keyword clashes are accommodated by syntactic transformations using the \CFA backquote escape-mechanism (see~\VRef{s:BackquoteIdentifiers}): 4377 4428 \item[How widely used:] clashes among new \CFA keywords and existing identifiers are rare. 4378 4429 \end{description} … … 4384 4435 int rtn( int i ); 4385 4436 int rtn( char c ); 4386 rtn( 'x' ); // programmer expects 2nd rtn to be called4437 rtn( 'x' ); §\C{// programmer expects 2nd rtn to be called}§ 4387 4438 \end{lstlisting} 4388 4439 \item[Rationale:] it is more intuitive for the call to ©rtn© to match the second version of definition of ©rtn© rather than the first. … … 4406 4457 \item[Change:] make string literals ©const©: 4407 4458 \begin{lstlisting} 4408 char * p = "abc"; // valid in C, deprecated in §\CFA§4409 char * q = expr ? "abc" : "de"; // valid in C, invalid in §\CFA§4459 char * p = "abc"; §\C{// valid in C, deprecated in \CFA}§ 4460 char * q = expr ? "abc" : "de"; §\C{// valid in C, invalid in \CFA}§ 4410 4461 \end{lstlisting} 4411 4462 The type of a string literal is changed from ©[] char© to ©const [] char©. … … 4414 4465 \begin{lstlisting} 4415 4466 char * p = "abc"; 4416 p[0] = 'w'; // segment fault or change constant literal4467 p[0] = 'w'; §\C{// segment fault or change constant literal}§ 4417 4468 \end{lstlisting} 4418 4469 The same problem occurs when passing a string literal to a routine that changes its argument. … … 4426 4477 \item[Change:] remove \newterm{tentative definitions}, which only occurs at file scope: 4427 4478 \begin{lstlisting} 4428 int i; // forward definition4429 int *j = ®&i®; // forward reference, valid in C, invalid in §\CFA§4430 int i = 0; // definition4479 int i; §\C{// forward definition}§ 4480 int *j = ®&i®; §\C{// forward reference, valid in C, invalid in \CFA}§ 4481 int i = 0; §\C{// definition}§ 4431 4482 \end{lstlisting} 4432 4483 is valid in C, and invalid in \CFA because duplicate overloaded object definitions at the same scope level are disallowed. … … 4434 4485 \begin{lstlisting} 4435 4486 struct X { int i; struct X *next; }; 4436 static struct X a; // forward definition4437 static struct X b = { 0, ®&a® }; // forward reference, valid in C, invalid in §\CFA§4438 static struct X a = { 1, &b }; // definition4487 static struct X a; §\C{// forward definition}§ 4488 static struct X b = { 0, ®&a® }; §\C{// forward reference, valid in C, invalid in \CFA}§ 4489 static struct X a = { 1, &b }; §\C{// definition}§ 4439 4490 \end{lstlisting} 4440 4491 \item[Rationale:] avoids having different initialization rules for builtin types and userdefined types. … … 4446 4497 \item 4447 4498 \begin{description} 4448 \item[Change:] have ©struct© introduce a scope for nested types 4449 In C, the name of the nested types belongs to the same scope as the name of the outermost enclosing 4450 Example: 4499 \item[Change:] have ©struct© introduce a scope for nested types: 4451 4500 \begin{lstlisting} 4452 4501 enum ®Colour® { R, G, B, Y, C, M }; 4453 4502 struct Person { 4454 enum ®Colour® { R, G, B }; // nested type4455 struct Face { // nested type4456 ®Colour® Eyes, Hair; // type defined outside (1 level)4503 enum ®Colour® { R, G, B }; §\C{// nested type}§ 4504 struct Face { §\C{// nested type}§ 4505 ®Colour® Eyes, Hair; §\C{// type defined outside (1 level)}§ 4457 4506 }; 4458 ß.ß®Colour® shirt; // type defined outside (top level)4459 ®Colour® pants; // type defined same level4460 Face looks[10]; // type defined same level4507 ß.ß®Colour® shirt; §\C{// type defined outside (top level)}§ 4508 ®Colour® pants; §\C{// type defined same level}§ 4509 Face looks[10]; §\C{// type defined same level}§ 4461 4510 }; 4462 ®Colour® c = R; // type/enum defined same level 4463 Personß.ß®Colour® pc = Personß.ßR; // type/enum defined inside 4464 Personß.ßFace pretty; // type defined inside 4465 \end{lstlisting} 4511 ®Colour® c = R; §\C{// type/enum defined same level}§ 4512 Personß.ß®Colour® pc = Personß.ßR; §\C{// type/enum defined inside}§ 4513 Personß.ßFace pretty; §\C{// type defined inside}§ 4514 \end{lstlisting} 4515 In C, the name of the nested types belongs to the same scope as the name of the outermost enclosing structure, i.e., the nested types are hoisted to the scope of the outer-most type, which is not useful and confusing. 4516 \CFA is C \emph{incompatible} on this issue, and provides semantics similar to \Index*[C++]{\CC}. 4517 Nested types are not hoisted and can be referenced using the field selection operator ``©.©'', unlike the \CC scope-resolution operator ``©::©''. 4466 4518 \item[Rationale:] ©struct© scope is crucial to \CFA as an information structuring and hiding mechanism. 4467 4519 \item[Effect on original feature:] change to semantics of well-defined feature. 4468 4520 \item[Difficulty of converting:] Semantic transformation. 4469 4521 \item[How widely used:] C programs rarely have nest types because they are equivalent to the hoisted version. 4470 4471 \CFA is C \emph{incompatible} on this issue, and provides semantics similar to \Index*[C++]{\CC}.4472 Nested types are not hoisted and can be referenced using the field selection operator ``©.©'', unlike the \CC scope-resolution operator ``©::©''.4473 Given that nested types in C are equivalent to not using them, i.e., they are essentially useless, it is unlikely there are any realistic usages that break because of this incompatibility.4474 4522 \end{description} 4475 4523 … … 4480 4528 \item[Difficulty of converting:] Semantic transformation. To make the struct type name visible in the scope of the enclosing struct, the struct tag could be declared in the scope of the enclosing struct, before the enclosing struct is defined. Example: 4481 4529 \begin{lstlisting} 4482 struct Y; // struct Y and struct X are at the same scope4530 struct Y; §\C{// struct Y and struct X are at the same scope}§ 4483 4531 struct X { 4484 4532 struct Y { /* ... */ } y; … … 4501 4549 4502 4550 4551 \section{New Keywords} 4552 \label{s:NewKeywords} 4553 4554 \begin{quote2} 4555 \begin{tabular}{lll} 4556 ©catch© & ©fallthrough© & ©otype© \\ 4557 ©catchResume© & ©fallthru© & ©throw© \\ 4558 ©choose© & ©finally© & ©throwResume© \\ 4559 ©disable© & ©forall© & ©trait© \\ 4560 ©dtype© & ©ftype© & ©try© \\ 4561 ©enable© & ©lvalue© & \\ 4562 \end{tabular} 4563 \end{quote2} 4564 4565 4566 \section{Standard Headers} 4567 \label{s:StandardHeaders} 4568 4569 C prescribes the following standard header-files~\cite[\S~7.1.2]{C11}: 4570 \begin{quote2} 4571 \begin{minipage}{\linewidth} 4572 \begin{tabular}{lll} 4573 assert.h & math.h & stdlib.h \\ 4574 complex.h & setjmp.h & stdnoreturn.h \\ 4575 ctype.h & signal.h & string.h \\ 4576 errno.h & stdalign.h & tgmath.h \\ 4577 fenv.h & stdarg.h & threads.h \\ 4578 float.h & stdatomic.h & time.h \\ 4579 inttypes.h & stdbool.h & uchar.h \\ 4580 iso646.h & stddef.h & wchar.h \\ 4581 limits.h & stdint.h & wctype.h \\ 4582 locale.h & stdio.h & unistd.h\footnote{\CFA extension} 4583 \end{tabular} 4584 \end{minipage} 4585 \end{quote2} 4586 For the prescribed head-files, \CFA implicitly wraps their includes in an ©extern "C"©; 4587 hence, names in these include files are not mangled\index{mangling!name} (see~\VRef{s:Interoperability}). 4588 All other C header files must be explicitly wrapped in ©extern "C"© to prevent name mangling. 4589 4590 4503 4591 \section{I/O Library} 4504 4592 \label{s:IOLibrary} … … 4570 4658 %$ 4571 4659 \begin{lstlisting}[mathescape=off] 4572 sout | "x (" | 1 | "x [" | 2 | "x {" | 3 | "x $" | 4 | "x £" | 5 | "x ¥" | 6 | "x ¡" | 7 | "x ¿" | 8 | "x «" | 9 | endl; 4660 sout | "x (" | 1 | "x [" | 2 | "x {" | 3 | "x $" | 4 | "x £" | 5 | "x ¥" | 6 | "x ¡" | 7 4661 | "x ¿" | 8 | "x «" | 9 | endl; 4573 4662 \end{lstlisting} 4574 4663 %$ … … 4580 4669 A seperator does not appear after a C string ending with the (extended) \Index{ASCII}\index{ASCII!extended} characters: ©,.:;!?)]}%¢»© 4581 4670 \begin{lstlisting}[belowskip=0pt] 4582 sout | 1 | ", x" | 2 | ". x" | 3 | ": x" | 4 | "; x" | 5 | "! x" | 6 | "? x" | 7 | ") x" | 8 | "] x" | 9 | "} x"4583 | 10 | "% x" | 11 | "¢ x" | 12 | "» x" | endl;4671 sout | 1 | ", x" | 2 | ". x" | 3 | ": x" | 4 | "; x" | 5 | "! x" | 6 | "? x" | 7 4672 | ") x" | 8 | "] x" | 9 | "} x" | 10 | "% x" | 11 | "¢ x" | 12 | "» x" | endl; 4584 4673 \end{lstlisting} 4585 4674 \begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt] … … 4597 4686 The following \CC-style \Index{manipulator}s allow further control over implicit seperation. 4598 4687 \begin{lstlisting}[mathescape=off,belowskip=0pt] 4599 sout | sepOn | 1 | 2 | 3 | sepOn | endl; // separator at start of line4688 sout | sepOn | 1 | 2 | 3 | sepOn | endl; §\C{// separator at start of line}§ 4600 4689 \end{lstlisting} 4601 4690 \begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt] … … 4603 4692 \end{lstlisting} 4604 4693 \begin{lstlisting}[mathescape=off,aboveskip=0pt,belowskip=0pt] 4605 sout | 1 | sepOff | 2 | 3 | endl; // turn off implicit separator temporarily4694 sout | 1 | sepOff | 2 | 3 | endl; §\C{// turn off implicit separator temporarily}§ 4606 4695 \end{lstlisting} 4607 4696 \begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt] … … 4609 4698 \end{lstlisting} 4610 4699 \begin{lstlisting}[mathescape=off,aboveskip=0pt,belowskip=0pt] 4611 sout | sepDisable | 1 | 2 | 3 | endl; // turn off implicit separation, affects all subsequent prints4700 sout | sepDisable | 1 | 2 | 3 | endl; §\C{// turn off implicit separation, affects all subsequent prints}§ 4612 4701 \end{lstlisting} 4613 4702 \begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt] … … 4615 4704 \end{lstlisting} 4616 4705 \begin{lstlisting}[mathescape=off,aboveskip=0pt,belowskip=0pt] 4617 sout | 1 | sepOn | 2 | 3 | endl; // turn on implicit separator temporarily4706 sout | 1 | sepOn | 2 | 3 | endl; §\C{// turn on implicit separator temporarily}§ 4618 4707 \end{lstlisting} 4619 4708 \begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt] … … 4621 4710 \end{lstlisting} 4622 4711 \begin{lstlisting}[mathescape=off,aboveskip=0pt,belowskip=0pt] 4623 sout | sepEnable | 1 | 2 | 3 | endl; // turn on implicit separation, affects all subsequent prints4712 sout | sepEnable | 1 | 2 | 3 | endl; §\C{// turn on implicit separation, affects all subsequent prints}§ 4624 4713 \end{lstlisting} 4625 4714 \begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt] … … 4627 4716 \end{lstlisting} 4628 4717 \begin{lstlisting}[mathescape=off,aboveskip=0pt,aboveskip=0pt,belowskip=0pt] 4629 sepSet( sout, ", $" ); // change separator from " " to ", $"4718 sepSet( sout, ", $" ); §\C{// change separator from " " to ", \$"}§ 4630 4719 sout | 1 | 2 | 3 | endl; 4631 4720 \end{lstlisting} … … 4673 4762 \subsection{malloc} 4674 4763 4764 \leavevmode 4675 4765 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt] 4676 4766 forall( otype T ) T * malloc( void );§\indexc{malloc}§ … … 4689 4779 forall( otype T ) T * memset( T * ptr ); // remove when default value available 4690 4780 \end{lstlisting} 4691 \ 4781 4692 4782 4693 4783 \subsection{ato / strto} 4694 4784 4785 \leavevmode 4695 4786 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt] 4696 4787 int ato( const char * ptr );§\indexc{ato}§ … … 4720 4811 long double _Complex strto( const char * sptr, char ** eptr ); 4721 4812 \end{lstlisting} 4722 \4723 4813 4724 4814 4725 4815 \subsection{bsearch / qsort} 4726 4816 4817 \leavevmode 4727 4818 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt] 4728 4819 forall( otype T | { int ?<?( T, T ); } ) … … 4732 4823 void qsort( const T * arr, size_t dimension );§\indexc{qsort}§ 4733 4824 \end{lstlisting} 4734 \4735 4825 4736 4826 4737 4827 \subsection{abs} 4738 4828 4829 \leavevmode 4739 4830 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt] 4740 4831 char abs( char );§\indexc{abs}§ … … 4749 4840 long double abs( long double _Complex ); 4750 4841 \end{lstlisting} 4751 \4752 4842 4753 4843 4754 4844 \subsection{random} 4755 4845 4846 \leavevmode 4756 4847 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt] 4757 4848 void rand48seed( long int s );§\indexc{rand48seed}§ … … 4767 4858 long double _Complex rand48(); 4768 4859 \end{lstlisting} 4769 \4770 4860 4771 4861 4772 4862 \subsection{min / max / clamp / swap} 4773 4863 4864 \leavevmode 4774 4865 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt] 4775 4866 forall( otype T | { int ?<?( T, T ); } ) … … 4785 4876 void swap( T * t1, T * t2 );§\indexc{swap}§ 4786 4877 \end{lstlisting} 4787 \4788 4878 4789 4879 … … 4796 4886 \subsection{General} 4797 4887 4888 \leavevmode 4798 4889 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt] 4799 4890 float fabs( float );§\indexc{fabs}§ … … 4841 4932 long double nan( const char * ); 4842 4933 \end{lstlisting} 4843 \4844 4934 4845 4935 4846 4936 \subsection{Exponential} 4847 4937 4938 \leavevmode 4848 4939 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt] 4849 4940 float exp( float );§\indexc{exp}§ … … 4898 4989 long double logb( long double ); 4899 4990 \end{lstlisting} 4900 \4901 4991 4902 4992 4903 4993 \subsection{Power} 4904 4994 4995 \leavevmode 4905 4996 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt] 4906 4997 float sqrt( float );§\indexc{sqrt}§ … … 4926 5017 long double _Complex pow( long double _Complex, long double _Complex ); 4927 5018 \end{lstlisting} 4928 \4929 5019 4930 5020 4931 5021 \subsection{Trigonometric} 4932 5022 5023 \leavevmode 4933 5024 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt] 4934 5025 float sin( float );§\indexc{sin}§ … … 4982 5073 long double atan( long double, long double ); 4983 5074 \end{lstlisting} 4984 \4985 5075 4986 5076 4987 5077 \subsection{Hyperbolic} 4988 5078 5079 \leavevmode 4989 5080 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt] 4990 5081 float sinh( float );§\indexc{sinh}§ … … 5030 5121 long double _Complex atanh( long double _Complex ); 5031 5122 \end{lstlisting} 5032 \5033 5123 5034 5124 5035 5125 \subsection{Error / Gamma} 5036 5126 5127 \leavevmode 5037 5128 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt] 5038 5129 float erf( float );§\indexc{erf}§ … … 5061 5152 long double tgamma( long double ); 5062 5153 \end{lstlisting} 5063 \5064 5154 5065 5155 5066 5156 \subsection{Nearest Integer} 5067 5157 5158 \leavevmode 5068 5159 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt] 5069 5160 float floor( float );§\indexc{floor}§ … … 5115 5206 long long int llround( long double ); 5116 5207 \end{lstlisting} 5117 \5118 5208 5119 5209 5120 5210 \subsection{Manipulation} 5121 5211 5212 \leavevmode 5122 5213 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt] 5123 5214 float copysign( float, float );§\indexc{copysign}§ … … 5156 5247 long double scalbln( long double, long int ); 5157 5248 \end{lstlisting} 5158 \5159 5249 5160 5250 … … 5162 5252 \label{s:RationalNumbers} 5163 5253 5164 Rational numbers are numbers written as a ratio, i.e.,as a fraction, where the numerator (top number) and the denominator (bottom number) are whole numbers.5254 Rational numbers are numbers written as a ratio, \ie as a fraction, where the numerator (top number) and the denominator (bottom number) are whole numbers. 5165 5255 When creating and computing with rational numbers, results are constantly reduced to keep the numerator and denominator as small as possible. 5166 5256 -
doc/working/resolver_design.md
r950f7a7 r7527e63 37 37 38 38 An alternate possibility would be to only count two-arg constructors 39 `void ?{} ( To*, From )` as unsafe conversions; under this semantics, safe and 39 `void ?{} ( To*, From )` as unsafe conversions; under this semantics, safe and 40 40 explicit conversions should also have a compiler-enforced restriction to 41 41 ensure that they are two-arg functions (this restriction may be valuable … … 69 69 two chains of conversions, one among the signed integral types, another among 70 70 the unsigned, and to use monomorphic conversions to allow conversions between 71 signed and unsigned integer types). 71 signed and unsigned integer types). 72 72 73 73 ### Implementation Details ### … … 509 509 A variant of the above scheme would be to fix a maximum depth of polymorphic 510 510 type variables (16 seems like a reasonable choice) at which a parameter would 511 be considered to be effectively monomorphic, and to subtract the value 511 be considered to be effectively monomorphic, and to subtract the value 512 512 described above from that maximum, clamping the result to a minimum of 0. 513 513 Under this scheme, assuming a maximum value of 4, `int` has value 0, `T` has … … 577 577 specifying the (completely arbitrary) maximum depth as part of the language or 578 578 allowing the compiler to refuse to accept otherwise well-typed deeply-nested 579 polymorphic types. 579 polymorphic types. 580 580 581 581 For purposes of determining polymorphism, the list of return types of a … … 951 951 `sizeof`, `alignof`, and `offsetof` expressions have at most a single 952 952 interpretation, of type `size_t`. 953 `sizeof` and `alignof` expressions take either a type or an expression as a 954 a n argument; if the argument is a type, it must be a complete type which is955 not afunction type, if an expression, the expression must have a single953 `sizeof` and `alignof` expressions take either a type or an expression as an 954 argument; if the argument is a type, it must be a complete type which is not a 955 function type, if an expression, the expression must have a single 956 956 interpretation, the type of which conforms to the same rules. 957 957 `offsetof` takes two arguments, a type and a member name; the type must be … … 1620 1620 = delete; 1621 1621 } 1622 1623 ## Appendix E: Features to Add in Resolver Re-write ## 1624 * Reference types 1625 * Special types for 0 and 1 literals 1626 * Expression type for return statement that resolves similarly to ?=? 1627 - This is to get rid of the kludge in the box pass that effectively 1628 re-implements the resolver poorly. -
src/CodeGen/CodeGenerator.cc
r950f7a7 r7527e63 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 15 15:53:15201613 // Update Count : 3 0612 // Last Modified On : Thu Aug 4 13:35:30 2016 13 // Update Count : 352 14 14 // 15 15 … … 45 45 bool wantSpacing( Statement * stmt) { 46 46 return dynamic_cast< IfStmt * >( stmt ) || dynamic_cast< CompoundStmt * >( stmt ) || 47 dynamic_cast< WhileStmt * >( stmt ) || dynamic_cast< ForStmt * > 48 } 49 50 void CodeGenerator::extension( Expression * expr ) {47 dynamic_cast< WhileStmt * >( stmt ) || dynamic_cast< ForStmt * >( stmt ) || dynamic_cast< SwitchStmt *>( stmt ); 48 } 49 50 void CodeGenerator::extension( Expression * expr ) { 51 51 if ( expr->get_extension() ) { 52 52 output << "__extension__ "; … … 54 54 } // extension 55 55 56 void CodeGenerator::extension( Declaration * decl ) {56 void CodeGenerator::extension( Declaration * decl ) { 57 57 if ( decl->get_extension() ) { 58 58 output << "__extension__ "; … … 73 73 } 74 74 75 ostream & operator<<( ostream & output, CodeGenerator::LabelPrinter & printLabels ) {75 ostream & operator<<( ostream & output, CodeGenerator::LabelPrinter & printLabels ) { 76 76 std::list< Label > & labs = *printLabels.labels; 77 77 // l.unique(); // assumes a sorted list. Why not use set? Does order matter? … … 79 79 output << l.get_name() + ": "; 80 80 printLabels.cg.genAttributes( l.get_attributes() ); 81 } 81 } // for 82 82 return output; 83 83 } 84 84 85 CodeGenerator::CodeGenerator( std::ostream & os ) : indent( *this), cur_indent( 0 ), insideFunction( false ), output( os ), printLabels( *this ) {}86 87 CodeGenerator::CodeGenerator( std::ostream & os, std::string init, int indentation, bool infunp )85 CodeGenerator::CodeGenerator( std::ostream & os ) : indent( *this), cur_indent( 0 ), insideFunction( false ), output( os ), printLabels( *this ) {} 86 87 CodeGenerator::CodeGenerator( std::ostream & os, std::string init, int indentation, bool infunp ) 88 88 : indent( *this), cur_indent( indentation ), insideFunction( infunp ), output( os ), printLabels( *this ) { 89 89 //output << std::string( init ); 90 90 } 91 91 92 CodeGenerator::CodeGenerator( std::ostream & os, char *init, int indentation, bool infunp )92 CodeGenerator::CodeGenerator( std::ostream & os, char * init, int indentation, bool infunp ) 93 93 : indent( *this ), cur_indent( indentation ), insideFunction( infunp ), output( os ), printLabels( *this ) { 94 94 //output << std::string( init ); 95 95 } 96 96 97 string mangleName( DeclarationWithType * decl ) {97 string mangleName( DeclarationWithType * decl ) { 98 98 if ( decl->get_mangleName() != "" ) { 99 99 // need to incorporate scope level in order to differentiate names for destructors … … 112 112 genCommaList( attr->get_parameters().begin(), attr->get_parameters().end() ); 113 113 output << ")"; 114 } 114 } // if 115 115 output << ","; 116 } 116 } // for 117 117 output << ")) "; 118 } 118 } // if 119 119 } 120 120 121 121 122 122 //*** Declarations 123 void CodeGenerator::visit( FunctionDecl * functionDecl ) {123 void CodeGenerator::visit( FunctionDecl * functionDecl ) { 124 124 extension( functionDecl ); 125 125 genAttributes( functionDecl->get_attributes() ); … … 146 146 } 147 147 148 void CodeGenerator::visit( ObjectDecl * objectDecl ) {148 void CodeGenerator::visit( ObjectDecl * objectDecl ) { 149 149 extension( objectDecl ); 150 genAttributes( objectDecl->get_attributes() ); 151 150 152 handleStorageClass( objectDecl ); 151 153 output << genType( objectDecl->get_type(), mangleName( objectDecl ) ); … … 155 157 objectDecl->get_init()->accept( *this ); 156 158 } // if 159 157 160 if ( objectDecl->get_bitfieldWidth() ) { 158 161 output << ":"; … … 161 164 } 162 165 163 void CodeGenerator::handleAggregate( AggregateDecl * aggDecl ) {166 void CodeGenerator::handleAggregate( AggregateDecl * aggDecl ) { 164 167 if ( aggDecl->get_name() != "" ) 165 168 output << aggDecl->get_name(); 166 169 167 std::list< Declaration * > & memb = aggDecl->get_members();170 std::list< Declaration * > & memb = aggDecl->get_members(); 168 171 if ( ! memb.empty() ) { 169 172 // if ( aggDecl->has_body() ) { 170 // std::list< Declaration * > & memb = aggDecl->get_members();173 // std::list< Declaration * > & memb = aggDecl->get_members(); 171 174 output << " {" << endl; 172 175 173 176 cur_indent += CodeGenerator::tabsize; 174 for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end(); i++) {177 for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end(); i++ ) { 175 178 output << indent; 176 179 (*i)->accept( *this ); 177 180 output << ";" << endl; 178 } 181 } // for 179 182 180 183 cur_indent -= CodeGenerator::tabsize; … … 184 187 } 185 188 186 void CodeGenerator::visit( StructDecl * structDecl ) {189 void CodeGenerator::visit( StructDecl * structDecl ) { 187 190 extension( structDecl ); 188 191 output << "struct "; … … 190 193 } 191 194 192 void CodeGenerator::visit( UnionDecl * unionDecl ) {195 void CodeGenerator::visit( UnionDecl * unionDecl ) { 193 196 extension( unionDecl ); 194 197 output << "union "; … … 196 199 } 197 200 198 void CodeGenerator::visit( EnumDecl * enumDecl ) {201 void CodeGenerator::visit( EnumDecl * enumDecl ) { 199 202 extension( enumDecl ); 200 203 output << "enum "; … … 210 213 cur_indent += CodeGenerator::tabsize; 211 214 for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end(); i++) { 212 ObjectDecl * obj = dynamic_cast< ObjectDecl* >( *i );215 ObjectDecl * obj = dynamic_cast< ObjectDecl* >( *i ); 213 216 assert( obj ); 214 217 output << indent << mangleName( obj ); … … 226 229 } 227 230 228 void CodeGenerator::visit( TraitDecl * traitDecl ) {}229 230 void CodeGenerator::visit( TypedefDecl * typeDecl ) {231 void CodeGenerator::visit( TraitDecl * traitDecl ) {} 232 233 void CodeGenerator::visit( TypedefDecl * typeDecl ) { 231 234 assert( false && "Typedefs are removed and substituted in earlier passes." ); 232 235 //output << "typedef "; … … 234 237 } 235 238 236 void CodeGenerator::visit( TypeDecl * typeDecl ) {239 void CodeGenerator::visit( TypeDecl * typeDecl ) { 237 240 // really, we should mutate this into something that isn't a TypeDecl but that requires large-scale changes, 238 241 // still to be done … … 257 260 (*iter)->accept( *this ); 258 261 output << "]"; 259 } 260 } 262 } // if 263 } // for 261 264 output << " = "; 262 265 } 263 266 264 void CodeGenerator::visit( SingleInit * init ) {267 void CodeGenerator::visit( SingleInit * init ) { 265 268 printDesignators( init->get_designators() ); 266 269 init->get_value()->accept( *this ); 267 270 } 268 271 269 void CodeGenerator::visit( ListInit * init ) {272 void CodeGenerator::visit( ListInit * init ) { 270 273 printDesignators( init->get_designators() ); 271 274 output << "{ "; 272 if ( init->begin _initializers() == init->end_initializers() ) {275 if ( init->begin() == init->end() ) { 273 276 // illegal to leave initializer list empty for scalar initializers, but always legal to have 0 274 277 output << "0"; 275 278 } else { 276 genCommaList( init->begin _initializers(), init->end_initializers() );277 } 279 genCommaList( init->begin(), init->end() ); 280 } // if 278 281 output << " }"; 279 282 } 280 283 281 void CodeGenerator::visit( Constant * constant ) {284 void CodeGenerator::visit( Constant * constant ) { 282 285 output << constant->get_value() ; 283 286 } 284 287 285 288 //*** Expressions 286 void CodeGenerator::visit( ApplicationExpr * applicationExpr ) {289 void CodeGenerator::visit( ApplicationExpr * applicationExpr ) { 287 290 extension( applicationExpr ); 288 if ( VariableExpr * varExpr = dynamic_cast< VariableExpr* >( applicationExpr->get_function() ) ) {291 if ( VariableExpr * varExpr = dynamic_cast< VariableExpr* >( applicationExpr->get_function() ) ) { 289 292 OperatorInfo opInfo; 290 293 if ( varExpr->get_var()->get_linkage() == LinkageSpec::Intrinsic && operatorLookup( varExpr->get_var()->get_name(), opInfo ) ) { … … 298 301 { 299 302 assert( arg != applicationExpr->get_args().end() ); 300 if ( AddressExpr * addrExpr = dynamic_cast< AddressExpr * >( *arg ) ) {303 if ( AddressExpr * addrExpr = dynamic_cast< AddressExpr * >( *arg ) ) { 301 304 // remove & from first assignment/ctor argument 302 305 *arg = addrExpr->get_arg(); 303 306 } else { 304 307 // no address-of operator, so must be a pointer - add dereference 305 UntypedExpr * newExpr = new UntypedExpr( new NameExpr( "*?" ) );308 UntypedExpr * newExpr = new UntypedExpr( new NameExpr( "*?" ) ); 306 309 newExpr->get_args().push_back( *arg ); 307 310 assert( (*arg)->get_results().size() == 1 ); … … 317 320 // do nothing 318 321 ; 319 } 322 } // switch 320 323 321 324 switch ( opInfo.type ) { … … 351 354 // no constructors with 0 or more than 2 parameters 352 355 assert( false ); 353 } 356 } // if 354 357 break; 355 358 … … 385 388 // there are no intrinsic definitions of 0/1 or label addresses as functions 386 389 assert( false ); 387 } 390 } // switch 388 391 } else { 389 392 varExpr->accept( *this ); … … 400 403 } 401 404 402 void CodeGenerator::visit( UntypedExpr * untypedExpr ) {405 void CodeGenerator::visit( UntypedExpr * untypedExpr ) { 403 406 extension( untypedExpr ); 404 if ( NameExpr * nameExpr = dynamic_cast< NameExpr* >( untypedExpr->get_function() ) ) {407 if ( NameExpr * nameExpr = dynamic_cast< NameExpr* >( untypedExpr->get_function() ) ) { 405 408 OperatorInfo opInfo; 406 409 if ( operatorLookup( nameExpr->get_name(), opInfo ) ) { … … 417 420 case OT_CALL: 418 421 assert( false ); 419 420 422 421 423 case OT_CTOR: … … 437 439 // no constructors with 0 or more than 2 parameters 438 440 assert( false ); 439 } 441 } // if 440 442 break; 441 443 … … 470 472 // there are no intrinsic definitions of 0 or 1 as functions 471 473 assert( false ); 472 } 474 } // switch 473 475 } else { 474 nameExpr->accept( *this ); 475 output << "("; 476 genCommaList( untypedExpr->get_args().begin(), untypedExpr->get_args().end() ); 477 output << ")"; 476 if ( nameExpr->get_name() == "..." ) { // case V1 ... V2 or case V1~V2 477 assert( untypedExpr->get_args().size() == 2 ); 478 (*untypedExpr->get_args().begin())->accept( *this ); 479 output << " ... "; 480 (*--untypedExpr->get_args().end())->accept( *this ); 481 } else { // builtin routines 482 nameExpr->accept( *this ); 483 output << "("; 484 genCommaList( untypedExpr->get_args().begin(), untypedExpr->get_args().end() ); 485 output << ")"; 486 } // if 478 487 } // if 479 488 } else { … … 485 494 } 486 495 487 void CodeGenerator::visit( NameExpr *nameExpr ) { 496 void CodeGenerator::visit( RangeExpr * rangeExpr ) { 497 rangeExpr->get_low()->accept( *this ); 498 output << " ... "; 499 rangeExpr->get_high()->accept( *this ); 500 } 501 502 void CodeGenerator::visit( NameExpr * nameExpr ) { 488 503 extension( nameExpr ); 489 504 OperatorInfo opInfo; … … 496 511 } 497 512 498 void CodeGenerator::visit( AddressExpr * addressExpr ) {513 void CodeGenerator::visit( AddressExpr * addressExpr ) { 499 514 extension( addressExpr ); 500 515 output << "(&"; 501 516 // this hack makes sure that we don't convert "constant_zero" to "0" if we're taking its address 502 if ( VariableExpr * variableExpr = dynamic_cast< VariableExpr* >( addressExpr->get_arg() ) ) {517 if ( VariableExpr * variableExpr = dynamic_cast< VariableExpr* >( addressExpr->get_arg() ) ) { 503 518 output << mangleName( variableExpr->get_var() ); 504 519 } else { … … 508 523 } 509 524 510 void CodeGenerator::visit( CastExpr * castExpr ) {525 void CodeGenerator::visit( CastExpr * castExpr ) { 511 526 extension( castExpr ); 512 527 output << "("; … … 521 536 // otherwise, the cast is to an lvalue type, so the cast should be dropped, since the result of a cast is 522 537 // never an lvalue in C 523 } 538 } // if 524 539 castExpr->get_arg()->accept( *this ); 525 540 output << ")"; 526 541 } 527 542 528 void CodeGenerator::visit( UntypedMemberExpr * memberExpr ) {543 void CodeGenerator::visit( UntypedMemberExpr * memberExpr ) { 529 544 assert( false ); 530 545 } 531 546 532 void CodeGenerator::visit( MemberExpr * memberExpr ) {547 void CodeGenerator::visit( MemberExpr * memberExpr ) { 533 548 extension( memberExpr ); 534 549 memberExpr->get_aggregate()->accept( *this ); … … 536 551 } 537 552 538 void CodeGenerator::visit( VariableExpr * variableExpr ) {553 void CodeGenerator::visit( VariableExpr * variableExpr ) { 539 554 extension( variableExpr ); 540 555 OperatorInfo opInfo; … … 546 561 } 547 562 548 void CodeGenerator::visit( ConstantExpr * constantExpr ) {563 void CodeGenerator::visit( ConstantExpr * constantExpr ) { 549 564 assert( constantExpr->get_constant() ); 550 565 extension( constantExpr ); … … 552 567 } 553 568 554 void CodeGenerator::visit( SizeofExpr * sizeofExpr ) {569 void CodeGenerator::visit( SizeofExpr * sizeofExpr ) { 555 570 extension( sizeofExpr ); 556 571 output << "sizeof("; … … 563 578 } 564 579 565 void CodeGenerator::visit( AlignofExpr * alignofExpr ) {580 void CodeGenerator::visit( AlignofExpr * alignofExpr ) { 566 581 // use GCC extension to avoid bumping std to C11 567 582 extension( alignofExpr ); … … 575 590 } 576 591 577 void CodeGenerator::visit( UntypedOffsetofExpr * offsetofExpr ) {592 void CodeGenerator::visit( UntypedOffsetofExpr * offsetofExpr ) { 578 593 assert( false && "UntypedOffsetofExpr should not reach code generation." ); 579 594 } 580 595 581 void CodeGenerator::visit( OffsetofExpr * offsetofExpr ) {596 void CodeGenerator::visit( OffsetofExpr * offsetofExpr ) { 582 597 // use GCC builtin 583 598 output << "__builtin_offsetof("; … … 587 602 } 588 603 589 void CodeGenerator::visit( OffsetPackExpr * offsetPackExpr ) {604 void CodeGenerator::visit( OffsetPackExpr * offsetPackExpr ) { 590 605 assert( false && "OffsetPackExpr should not reach code generation." ); 591 606 } 592 607 593 void CodeGenerator::visit( LogicalExpr * logicalExpr ) {608 void CodeGenerator::visit( LogicalExpr * logicalExpr ) { 594 609 extension( logicalExpr ); 595 610 output << "("; … … 604 619 } 605 620 606 void CodeGenerator::visit( ConditionalExpr * conditionalExpr ) {621 void CodeGenerator::visit( ConditionalExpr * conditionalExpr ) { 607 622 extension( conditionalExpr ); 608 623 output << "("; … … 615 630 } 616 631 617 void CodeGenerator::visit( CommaExpr * commaExpr ) {632 void CodeGenerator::visit( CommaExpr * commaExpr ) { 618 633 extension( commaExpr ); 619 634 output << "("; … … 624 639 } 625 640 626 void CodeGenerator::visit( TupleExpr * tupleExpr ) {}627 628 void CodeGenerator::visit( TypeExpr * typeExpr ) {}629 630 void CodeGenerator::visit( AsmExpr * asmExpr ) {641 void CodeGenerator::visit( TupleExpr * tupleExpr ) {} 642 643 void CodeGenerator::visit( TypeExpr * typeExpr ) {} 644 645 void CodeGenerator::visit( AsmExpr * asmExpr ) { 631 646 if ( asmExpr->get_inout() ) { 632 647 output << "[ "; … … 641 656 642 657 //*** Statements 643 void CodeGenerator::visit( CompoundStmt * compoundStmt ) {658 void CodeGenerator::visit( CompoundStmt * compoundStmt ) { 644 659 std::list<Statement*> ks = compoundStmt->get_kids(); 645 660 output << "{" << endl; … … 654 669 if ( wantSpacing( *i ) ) { 655 670 output << endl; 656 } 657 } 671 } // if 672 } // for 658 673 cur_indent -= CodeGenerator::tabsize; 659 674 … … 661 676 } 662 677 663 void CodeGenerator::visit( ExprStmt * exprStmt ) {678 void CodeGenerator::visit( ExprStmt * exprStmt ) { 664 679 assert( exprStmt ); 665 680 // cast the top-level expression to void to reduce gcc warnings. … … 669 684 } 670 685 671 void CodeGenerator::visit( AsmStmt * asmStmt ) {686 void CodeGenerator::visit( AsmStmt * asmStmt ) { 672 687 output << "asm "; 673 688 if ( asmStmt->get_voltile() ) output << "volatile "; … … 692 707 } 693 708 694 void CodeGenerator::visit( IfStmt * ifStmt ) {709 void CodeGenerator::visit( IfStmt * ifStmt ) { 695 710 output << "if ( "; 696 711 ifStmt->get_condition()->accept( *this ); … … 705 720 } 706 721 707 void CodeGenerator::visit( SwitchStmt * switchStmt ) {722 void CodeGenerator::visit( SwitchStmt * switchStmt ) { 708 723 output << "switch ( " ; 709 724 switchStmt->get_condition()->accept( *this ); … … 712 727 output << "{" << std::endl; 713 728 cur_indent += CodeGenerator::tabsize; 714 715 acceptAll( switchStmt->get_branches(), *this ); 716 729 acceptAll( switchStmt->get_statements(), *this ); 717 730 cur_indent -= CodeGenerator::tabsize; 718 719 731 output << indent << "}"; 720 732 } 721 733 722 void CodeGenerator::visit( CaseStmt * caseStmt ) {734 void CodeGenerator::visit( CaseStmt * caseStmt ) { 723 735 output << indent; 724 736 if ( caseStmt->isDefault()) { … … 737 749 (*i)->accept( *this ); 738 750 output << endl; 739 } 751 } // for 740 752 cur_indent -= CodeGenerator::tabsize; 741 753 } 742 754 743 void CodeGenerator::visit( BranchStmt * branchStmt ) {755 void CodeGenerator::visit( BranchStmt * branchStmt ) { 744 756 switch ( branchStmt->get_type()) { 745 757 case BranchStmt::Goto: … … 759 771 output << "continue"; 760 772 break; 761 } 773 } // switch 762 774 output << ";"; 763 775 } 764 776 765 777 766 void CodeGenerator::visit( ReturnStmt * returnStmt ) {778 void CodeGenerator::visit( ReturnStmt * returnStmt ) { 767 779 output << "return "; 768 780 maybeAccept( returnStmt->get_expr(), *this ); … … 770 782 } 771 783 772 void CodeGenerator::visit( WhileStmt * whileStmt ) {784 void CodeGenerator::visit( WhileStmt * whileStmt ) { 773 785 if ( whileStmt->get_isDoWhile() ) { 774 786 output << "do" ; … … 792 804 } 793 805 794 void CodeGenerator::visit( ForStmt * forStmt ) {806 void CodeGenerator::visit( ForStmt * forStmt ) { 795 807 // initialization is always hoisted, so don't bother doing anything with that 796 808 output << "for (;"; … … 798 810 if ( forStmt->get_condition() != 0 ) { 799 811 forStmt->get_condition()->accept( *this ); 800 } 812 } // if 801 813 output << ";"; 802 814 … … 805 817 Expression * expr = new CastExpr( forStmt->get_increment() ); 806 818 expr->accept( *this ); 807 } 819 } // if 808 820 output << ") "; 809 821 … … 814 826 } 815 827 816 void CodeGenerator::visit( NullStmt * nullStmt ) {828 void CodeGenerator::visit( NullStmt * nullStmt ) { 817 829 //output << indent << CodeGenerator::printLabels( nullStmt->get_labels() ); 818 830 output << "/* null statement */ ;"; 819 831 } 820 832 821 void CodeGenerator::visit( DeclStmt * declStmt ) {833 void CodeGenerator::visit( DeclStmt * declStmt ) { 822 834 declStmt->get_decl()->accept( *this ); 823 835 … … 827 839 } 828 840 829 void CodeGenerator::handleStorageClass( Declaration * decl ) {841 void CodeGenerator::handleStorageClass( Declaration * decl ) { 830 842 switch ( decl->get_storageClass() ) { 831 843 case DeclarationNode::Extern: -
src/CodeGen/CodeGenerator.h
r950f7a7 r7527e63 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Jul 4 17:12:40201613 // Update Count : 3 412 // Last Modified On : Thu Aug 4 13:37:07 2016 13 // Update Count : 38 14 14 // 15 15 … … 54 54 virtual void visit( ApplicationExpr *applicationExpr ); 55 55 virtual void visit( UntypedExpr *untypedExpr ); 56 virtual void visit( RangeExpr * rangeExpr ); 56 57 virtual void visit( NameExpr *nameExpr ); 57 58 virtual void visit( AddressExpr *addressExpr ); … … 118 119 void handleAggregate( AggregateDecl *aggDecl ); 119 120 void handleTypedef( NamedTypeDecl *namedType ); 120 }; 121 }; // CodeGenerator 121 122 122 123 template< class Iterator > -
src/ControlStruct/MLEMutator.cc
r950f7a7 r7527e63 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : T ue Jul 12 17:36:51201613 // Update Count : 19712 // Last Modified On : Thu Aug 4 11:21:32 2016 13 // Update Count : 202 14 14 // 15 15 … … 128 128 Label brkLabel = generator->newLabel("switchBreak"); 129 129 enclosingControlStructures.push_back( Entry(switchStmt, brkLabel) ); 130 mutateAll( switchStmt->get_ branches(), *this );130 mutateAll( switchStmt->get_statements(), *this ); 131 131 132 132 Entry &e = enclosingControlStructures.back(); … … 138 138 // switch should be CastStmts), append the exit label + break to the last case statement; create a default 139 139 // case if there are no cases 140 std::list< Statement * > & branches = switchStmt->get_branches();141 if ( branches.empty() ) {142 branches.push_back( CaseStmt::makeDefault() );143 } // if 144 145 if ( CaseStmt * c = dynamic_cast< CaseStmt * >( branches.back() ) ) {140 std::list< Statement * > &statements = switchStmt->get_statements(); 141 if ( statements.empty() ) { 142 statements.push_back( CaseStmt::makeDefault() ); 143 } // if 144 145 if ( CaseStmt * c = dynamic_cast< CaseStmt * >( statements.back() ) ) { 146 146 std::list<Label> temp; temp.push_back( brkLabel ); 147 147 c->get_statements().push_back( new BranchStmt( temp, Label("brkLabel"), BranchStmt::Break ) ); 148 } else assert(0); // as of this point, all branches of a switch are still CaseStmts148 } else assert(0); // as of this point, all statements of a switch are still CaseStmts 149 149 } // if 150 150 -
src/ControlStruct/Mutate.cc
r950f7a7 r7527e63 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : T ue Jul 12 17:37:45201613 // Update Count : 812 // Last Modified On : Thu Aug 4 11:39:08 2016 13 // Update Count : 9 14 14 // 15 15 … … 22 22 #include "LabelFixer.h" 23 23 #include "MLEMutator.h" 24 #include "CaseRangeMutator.h"25 24 #include "ForExprMutator.h" 26 25 #include "LabelTypeChecker.h" … … 41 40 LabelFixer lfix; 42 41 43 // expand case ranges and turn fallthru into a null statement44 CaseRangeMutator ranges;45 46 42 //ExceptMutator exc; 47 43 // LabelTypeChecker lbl; … … 49 45 mutateAll( translationUnit, formut ); 50 46 acceptAll( translationUnit, lfix ); 51 mutateAll( translationUnit, ranges );52 47 //mutateAll( translationUnit, exc ); 53 48 //acceptAll( translationUnit, lbl ); -
src/ControlStruct/module.mk
r950f7a7 r7527e63 11 11 ## Created On : Mon Jun 1 17:49:17 2015 12 12 ## Last Modified By : Peter A. Buhr 13 ## Last Modified On : T ue Jul 12 17:40:31201614 ## Update Count : 213 ## Last Modified On : Thu Aug 4 11:38:06 2016 14 ## Update Count : 3 15 15 ############################################################################### 16 16 … … 18 18 ControlStruct/LabelFixer.cc \ 19 19 ControlStruct/MLEMutator.cc \ 20 ControlStruct/CaseRangeMutator.cc \21 20 ControlStruct/Mutate.cc \ 22 21 ControlStruct/ForExprMutator.cc \ -
src/GenPoly/Box.cc
r950f7a7 r7527e63 62 62 63 63 FunctionType *makeAdapterType( FunctionType *adaptee, const TyVarMap &tyVars ); 64 65 /// Abstracts type equality for a list of parameter types66 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 parameters111 };112 113 /// Maps a key and a TypeList to the some value, accounting for scope114 template< typename Key, typename Value >115 class InstantiationMap {116 /// Wraps value for a specific (Key, TypeList) combination117 typedef std::pair< TypeList, Value* > Instantiation;118 /// List of TypeLists paired with their appropriate values119 typedef std::vector< Instantiation > ValueList;120 /// Underlying map type; maps keys to a linear list of corresponding TypeLists and values121 typedef ScopedMap< Key*, ValueList > InnerMap;122 123 InnerMap instantiations; ///< instantiations124 125 public:126 /// Starts a new scope127 void beginScope() { instantiations.beginScope(); }128 129 /// Ends a scope130 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 key137 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 found143 return 0;144 }145 146 /// Adds a value for a (key, typeList) pair to the current scope147 void insert( Key *key, const std::list< TypeExpr* > ¶ms, Value *value ) {148 instantiations[ key ].push_back( Instantiation( TypeList( params ), value ) );149 }150 };151 64 152 65 /// Adds layout-generation functions to polymorphic types … … 191 104 Type *replaceWithConcrete( ApplicationExpr *appExpr, Type *type, bool doClone = true ); 192 105 /// wraps a function application returning a polymorphic type with a new temporary for the out-parameter return value 193 Expression *add PolyRetParam( ApplicationExpr *appExpr, FunctionType *function, ReferenceToType *polyType, std::list< Expression *>::iterator &arg );106 Expression *addDynRetParam( ApplicationExpr *appExpr, FunctionType *function, ReferenceToType *polyType, std::list< Expression *>::iterator &arg ); 194 107 Expression *applyAdapter( ApplicationExpr *appExpr, FunctionType *function, std::list< Expression *>::iterator &arg, const TyVarMap &exprTyVars ); 195 108 void boxParam( Type *formal, Expression *&arg, const TyVarMap &exprTyVars ); … … 237 150 238 151 std::map< UniqueId, std::string > adapterName; 239 };240 241 /// Mutator pass that replaces concrete instantiations of generic types with actual struct declarations, scoped appropriately242 class GenericInstantiator : public DeclMutator {243 /// Map of (generic type, parameter list) pairs to concrete type instantiations244 InstantiationMap< AggregateDecl, AggregateDecl > instantiations;245 /// Namer for concrete types246 UniqueName typeNamer;247 248 public:249 GenericInstantiator() : DeclMutator(), instantiations(), typeNamer("_conc_") {}250 251 virtual Type* mutate( StructInstType *inst );252 virtual Type* mutate( UnionInstType *inst );253 254 // virtual Expression* mutate( MemberExpr *memberExpr );255 256 virtual void doBeginScope();257 virtual void doEndScope();258 private:259 /// Wrap instantiation lookup for structs260 StructDecl* lookup( StructInstType *inst, const std::list< TypeExpr* > &typeSubs ) { return (StructDecl*)instantiations.lookup( inst->get_baseStruct(), typeSubs ); }261 /// Wrap instantiation lookup for unions262 UnionDecl* lookup( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs ) { return (UnionDecl*)instantiations.lookup( inst->get_baseUnion(), typeSubs ); }263 /// Wrap instantiation insertion for structs264 void insert( StructInstType *inst, const std::list< TypeExpr* > &typeSubs, StructDecl *decl ) { instantiations.insert( inst->get_baseStruct(), typeSubs, decl ); }265 /// Wrap instantiation insertion for unions266 void insert( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs, UnionDecl *decl ) { instantiations.insert( inst->get_baseUnion(), typeSubs, decl ); }267 152 }; 268 153 … … 354 239 Pass1 pass1; 355 240 Pass2 pass2; 356 GenericInstantiator instantiator;357 241 PolyGenericCalculator polyCalculator; 358 242 Pass3 pass3; … … 361 245 mutateTranslationUnit/*All*/( translationUnit, pass1 ); 362 246 mutateTranslationUnit/*All*/( translationUnit, pass2 ); 363 instantiator.mutateDeclarationList( translationUnit );364 247 mutateTranslationUnit/*All*/( translationUnit, polyCalculator ); 365 248 mutateTranslationUnit/*All*/( translationUnit, pass3 ); … … 619 502 return 0; 620 503 } 621 504 622 505 /// Returns T if the given declaration is a function with parameters (T*, T) for some TypeInstType T, NULL otherwise 623 506 TypeInstType *isTypeInstPtrValFn( DeclarationWithType *decl ) { … … 637 520 return 0; 638 521 } 639 522 640 523 /// Returns T if the given declaration is (*?=?)(T *, T) for some TypeInstType T (return not checked, but maybe should be), NULL otherwise 641 524 TypeInstType *isTypeInstAssignment( DeclarationWithType *decl ) { … … 677 560 return 0; 678 561 } 679 562 680 563 /// Returns T if the given declaration is a function with parameters (T*, T) for some type T, where neither parameter is cv-qualified, 681 564 /// NULL otherwise … … 772 655 copyOps.beginScope(); 773 656 dtorOps.beginScope(); 774 657 775 658 DeclarationWithType *oldRetval = retval; 776 659 bool oldUseRetval = useRetval; … … 778 661 // process polymorphic return value 779 662 retval = 0; 780 if ( is PolyRet( functionDecl->get_functionType() ) && functionDecl->get_linkage() == LinkageSpec::Cforall ) {663 if ( isDynRet( functionDecl->get_functionType() ) && functionDecl->get_linkage() == LinkageSpec::Cforall ) { 781 664 retval = functionDecl->get_functionType()->get_returnVals().front(); 782 665 … … 889 772 arg++; 890 773 } else { 891 // /xxx - should this be an assertion?774 // xxx - should this be an assertion? 892 775 throw SemanticError( "unbound type variable: " + tyParm->first + " in application ", appExpr ); 893 776 } // if … … 902 785 std::list< DeclarationWithType* >::const_iterator fnParm = funcType->get_parameters().begin(); 903 786 std::list< Expression* >::const_iterator fnArg = arg; 904 std::set< std::string > seenTypes; // < names for generic types we've seen787 std::set< std::string > seenTypes; ///< names for generic types we've seen 905 788 906 789 // a polymorphic return type may need to be added to the argument list … … 985 868 } 986 869 987 Expression *Pass1::add PolyRetParam( ApplicationExpr *appExpr, FunctionType *function, ReferenceToType *polyType, std::list< Expression *>::iterator &arg ) {870 Expression *Pass1::addDynRetParam( ApplicationExpr *appExpr, FunctionType *function, ReferenceToType *dynType, std::list< Expression *>::iterator &arg ) { 988 871 assert( env ); 989 Type *concrete = replaceWithConcrete( appExpr, polyType );872 Type *concrete = replaceWithConcrete( appExpr, dynType ); 990 873 // add out-parameter for return value 991 874 return addRetParam( appExpr, function, concrete, arg ); … … 994 877 Expression *Pass1::applyAdapter( ApplicationExpr *appExpr, FunctionType *function, std::list< Expression *>::iterator &arg, const TyVarMap &tyVars ) { 995 878 Expression *ret = appExpr; 996 if ( ! function->get_returnVals().empty() && isPolyType( function->get_returnVals().front()->get_type(), tyVars ) ) { 879 // if ( ! function->get_returnVals().empty() && isPolyType( function->get_returnVals().front()->get_type(), tyVars ) ) { 880 if ( isDynRet( function, tyVars ) ) { 997 881 ret = addRetParam( appExpr, function, function->get_returnVals().front()->get_type(), arg ); 998 882 } // if … … 1042 926 /// this gets rid of warnings from gcc. 1043 927 void addCast( Expression *&actual, Type *formal, const TyVarMap &tyVars ) { 1044 Type * newType = formal->clone();1045 if ( getFunctionType( newType ) ) {928 if ( getFunctionType( formal ) ) { 929 Type * newType = formal->clone(); 1046 930 newType = ScrubTyVars::scrub( newType, tyVars ); 1047 931 actual = new CastExpr( actual, newType ); … … 1085 969 // actually make the adapter type 1086 970 FunctionType *adapter = adaptee->clone(); 1087 if ( ! adapter->get_returnVals().empty() && isPolyType( adapter->get_returnVals().front()->get_type(), tyVars ) ) { 971 // if ( ! adapter->get_returnVals().empty() && isPolyType( adapter->get_returnVals().front()->get_type(), tyVars ) ) { 972 if ( isDynRet( adapter, tyVars ) ) { 1088 973 makeRetParm( adapter ); 1089 974 } // if … … 1147 1032 addAdapterParams( adapteeApp, arg, param, adapterType->get_parameters().end(), realParam, tyVars ); 1148 1033 bodyStmt = new ExprStmt( noLabels, adapteeApp ); 1149 } else if ( isPolyType( adaptee->get_returnVals().front()->get_type(), tyVars ) ) { 1034 // } else if ( isPolyType( adaptee->get_returnVals().front()->get_type(), tyVars ) ) { 1035 } else if ( isDynType( adaptee->get_returnVals().front()->get_type(), tyVars ) ) { 1150 1036 // return type T 1151 1037 if ( (*param)->get_name() == "" ) { … … 1394 1280 TyVarMap exprTyVars( (TypeDecl::Kind)-1 ); 1395 1281 makeTyVarMap( function, exprTyVars ); 1396 ReferenceToType * polyRetType = isPolyRet( function);1397 1398 if ( polyRetType ) {1399 ret = add PolyRetParam( appExpr, function, polyRetType, arg );1282 ReferenceToType *dynRetType = isDynRet( function, exprTyVars ); 1283 1284 if ( dynRetType ) { 1285 ret = addDynRetParam( appExpr, function, dynRetType, arg ); 1400 1286 } else if ( needsAdapter( function, scopeTyVars ) ) { 1401 1287 // std::cerr << "needs adapter: "; … … 1407 1293 arg = appExpr->get_args().begin(); 1408 1294 1409 passTypeVars( appExpr, polyRetType, arg, exprTyVars );1295 passTypeVars( appExpr, dynRetType, arg, exprTyVars ); 1410 1296 addInferredParams( appExpr, function, arg, exprTyVars ); 1411 1297 … … 1471 1357 VariableExpr *wrapFunctionDecl( DeclarationWithType *functionDecl ) { 1472 1358 // line below cloned from FixFunction.cc 1359 // xxx - functionObj is never added to a list of declarations... 1473 1360 ObjectDecl *functionObj = new ObjectDecl( functionDecl->get_name(), functionDecl->get_storageClass(), functionDecl->get_linkage(), 0, 1474 1361 new PointerType( Type::Qualifiers(), functionDecl->get_type()->clone() ), 0 ); 1475 1362 functionObj->set_mangleName( functionDecl->get_mangleName() ); 1363 functionObj->set_scopeLevel( functionDecl->get_scopeLevel() ); 1476 1364 return new VariableExpr( functionObj ); 1477 1365 } … … 1492 1380 = ParamEntry( assertOp->get_uniqueId(), assertOp->get_type()->clone(), actualDecl->get_type()->clone(), wrapFunctionDecl( assertOp ) ); 1493 1381 } 1494 1382 1495 1383 Statement * Pass1::mutate( ReturnStmt *returnStmt ) { 1496 1384 if ( retval && returnStmt->get_expr() ) { … … 1554 1442 DeclarationWithType *assertDtor = findOpForType( formalType, dtorOps, scopedDtorOps ); 1555 1443 if ( ! assertDtor ) throw SemanticError( "No destructor found for ", formalType ); 1556 1444 1557 1445 // add inferred parameters for otype operators to assignment expression 1558 1446 // NOTE: Code here assumes that first four assertions are assign op, ctor, copy ctor, dtor, in that order … … 1568 1456 ++actualIt; 1569 1457 addAssertionFor( assignExpr, *actualIt, assertDtor ); 1570 1571 //DeclarationWithType *actualDecl = asserts.front(); 1572 //assignExpr->get_inferParams()[ actualDecl->get_uniqueId() ] 1573 // = ParamEntry( assertAssign->get_uniqueId(), assertAssign->get_type()->clone(), actualDecl->get_type()->clone(), wrapFunctionDecl( assertAssign ) ); 1458 1574 1459 } 1575 1460 } … … 1695 1580 1696 1581 // move polymorphic return type to parameter list 1697 if ( is PolyRet( funcType ) ) {1582 if ( isDynRet( funcType ) ) { 1698 1583 DeclarationWithType *ret = funcType->get_returnVals().front(); 1699 1584 ret->set_type( new PointerType( Type::Qualifiers(), ret->get_type() ) ); … … 1776 1661 } 1777 1662 1778 //////////////////////////////////////// GenericInstantiator //////////////////////////////////////////////////1779 1780 /// Makes substitutions of params into baseParams; returns true if all parameters substituted for a concrete type1781 bool makeSubstitutions( const std::list< TypeDecl* >& baseParams, const std::list< Expression* >& params, std::list< TypeExpr* >& out ) {1782 bool allConcrete = true; // will finish the substitution list even if they're not all concrete1783 1784 // substitute concrete types for given parameters, and incomplete types for placeholders1785 std::list< TypeDecl* >::const_iterator baseParam = baseParams.begin();1786 std::list< Expression* >::const_iterator param = params.begin();1787 for ( ; baseParam != baseParams.end() && param != params.end(); ++baseParam, ++param ) {1788 // switch ( (*baseParam)->get_kind() ) {1789 // case TypeDecl::Any: { // any type is a valid substitution here; complete types can be used to instantiate generics1790 TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param );1791 assert(paramType && "Aggregate parameters should be type expressions");1792 out.push_back( paramType->clone() );1793 // check that the substituted type isn't a type variable itself1794 if ( dynamic_cast< TypeInstType* >( paramType->get_type() ) ) {1795 allConcrete = false;1796 }1797 // break;1798 // }1799 // case TypeDecl::Dtype: // dtype can be consistently replaced with void [only pointers, which become void*]1800 // out.push_back( new TypeExpr( new VoidType( Type::Qualifiers() ) ) );1801 // break;1802 // case TypeDecl::Ftype: // pointer-to-ftype can be consistently replaced with void (*)(void) [similar to dtype]1803 // out.push_back( new TypeExpr( new FunctionType( Type::Qualifiers(), false ) ) );1804 // break;1805 // }1806 }1807 1808 // if any parameters left over, not done1809 if ( baseParam != baseParams.end() ) return false;1810 // // if not enough parameters given, substitute remaining incomplete types for placeholders1811 // for ( ; baseParam != baseParams.end(); ++baseParam ) {1812 // switch ( (*baseParam)->get_kind() ) {1813 // case TypeDecl::Any: // no more substitutions here, fail early1814 // return false;1815 // case TypeDecl::Dtype: // dtype can be consistently replaced with void [only pointers, which become void*]1816 // out.push_back( new TypeExpr( new VoidType( Type::Qualifiers() ) ) );1817 // break;1818 // case TypeDecl::Ftype: // pointer-to-ftype can be consistently replaced with void (*)(void) [similar to dtype]1819 // out.push_back( new TypeExpr( new FunctionType( Type::Qualifiers(), false ) ) );1820 // break;1821 // }1822 // }1823 1824 return allConcrete;1825 }1826 1827 /// Substitutes types of members of in according to baseParams => typeSubs, appending the result to out1828 void substituteMembers( const std::list< Declaration* >& in, const std::list< TypeDecl* >& baseParams, const std::list< TypeExpr* >& typeSubs,1829 std::list< Declaration* >& out ) {1830 // substitute types into new members1831 TypeSubstitution subs( baseParams.begin(), baseParams.end(), typeSubs.begin() );1832 for ( std::list< Declaration* >::const_iterator member = in.begin(); member != in.end(); ++member ) {1833 Declaration *newMember = (*member)->clone();1834 subs.apply(newMember);1835 out.push_back( newMember );1836 }1837 }1838 1839 Type* GenericInstantiator::mutate( StructInstType *inst ) {1840 // mutate subtypes1841 Type *mutated = Mutator::mutate( inst );1842 inst = dynamic_cast< StructInstType* >( mutated );1843 if ( ! inst ) return mutated;1844 1845 // exit early if no need for further mutation1846 if ( inst->get_parameters().empty() ) return inst;1847 assert( inst->get_baseParameters() && "Base struct has parameters" );1848 1849 // check if type can be concretely instantiated; put substitutions into typeSubs1850 std::list< TypeExpr* > typeSubs;1851 if ( ! makeSubstitutions( *inst->get_baseParameters(), inst->get_parameters(), typeSubs ) ) {1852 deleteAll( typeSubs );1853 return inst;1854 }1855 1856 // make concrete instantiation of generic type1857 StructDecl *concDecl = lookup( inst, typeSubs );1858 if ( ! concDecl ) {1859 // set concDecl to new type, insert type declaration into statements to add1860 concDecl = new StructDecl( typeNamer.newName( inst->get_name() ) );1861 substituteMembers( inst->get_baseStruct()->get_members(), *inst->get_baseParameters(), typeSubs, concDecl->get_members() );1862 DeclMutator::addDeclaration( concDecl );1863 insert( inst, typeSubs, concDecl );1864 }1865 StructInstType *newInst = new StructInstType( inst->get_qualifiers(), concDecl->get_name() );1866 newInst->set_baseStruct( concDecl );1867 1868 deleteAll( typeSubs );1869 delete inst;1870 return newInst;1871 }1872 1873 Type* GenericInstantiator::mutate( UnionInstType *inst ) {1874 // mutate subtypes1875 Type *mutated = Mutator::mutate( inst );1876 inst = dynamic_cast< UnionInstType* >( mutated );1877 if ( ! inst ) return mutated;1878 1879 // exit early if no need for further mutation1880 if ( inst->get_parameters().empty() ) return inst;1881 assert( inst->get_baseParameters() && "Base union has parameters" );1882 1883 // check if type can be concretely instantiated; put substitutions into typeSubs1884 std::list< TypeExpr* > typeSubs;1885 if ( ! makeSubstitutions( *inst->get_baseParameters(), inst->get_parameters(), typeSubs ) ) {1886 deleteAll( typeSubs );1887 return inst;1888 }1889 1890 // make concrete instantiation of generic type1891 UnionDecl *concDecl = lookup( inst, typeSubs );1892 if ( ! concDecl ) {1893 // set concDecl to new type, insert type declaration into statements to add1894 concDecl = new UnionDecl( typeNamer.newName( inst->get_name() ) );1895 substituteMembers( inst->get_baseUnion()->get_members(), *inst->get_baseParameters(), typeSubs, concDecl->get_members() );1896 DeclMutator::addDeclaration( concDecl );1897 insert( inst, typeSubs, concDecl );1898 }1899 UnionInstType *newInst = new UnionInstType( inst->get_qualifiers(), concDecl->get_name() );1900 newInst->set_baseUnion( concDecl );1901 1902 deleteAll( typeSubs );1903 delete inst;1904 return newInst;1905 }1906 1907 // /// Gets the base struct or union declaration for a member expression; NULL if not applicable1908 // AggregateDecl* getMemberBaseDecl( MemberExpr *memberExpr ) {1909 // // get variable for member aggregate1910 // VariableExpr *varExpr = dynamic_cast< VariableExpr* >( memberExpr->get_aggregate() );1911 // if ( ! varExpr ) return NULL;1912 //1913 // // get object for variable1914 // ObjectDecl *objectDecl = dynamic_cast< ObjectDecl* >( varExpr->get_var() );1915 // if ( ! objectDecl ) return NULL;1916 //1917 // // get base declaration from object type1918 // Type *objectType = objectDecl->get_type();1919 // StructInstType *structType = dynamic_cast< StructInstType* >( objectType );1920 // if ( structType ) return structType->get_baseStruct();1921 // UnionInstType *unionType = dynamic_cast< UnionInstType* >( objectType );1922 // if ( unionType ) return unionType->get_baseUnion();1923 //1924 // return NULL;1925 // }1926 //1927 // /// Finds the declaration with the given name, returning decls.end() if none such1928 // std::list< Declaration* >::const_iterator findDeclNamed( const std::list< Declaration* > &decls, const std::string &name ) {1929 // for( std::list< Declaration* >::const_iterator decl = decls.begin(); decl != decls.end(); ++decl ) {1930 // if ( (*decl)->get_name() == name ) return decl;1931 // }1932 // return decls.end();1933 // }1934 //1935 // Expression* Instantiate::mutate( MemberExpr *memberExpr ) {1936 // // mutate, exiting early if no longer MemberExpr1937 // Expression *expr = Mutator::mutate( memberExpr );1938 // memberExpr = dynamic_cast< MemberExpr* >( expr );1939 // if ( ! memberExpr ) return expr;1940 //1941 // // get declaration of member and base declaration of member, exiting early if not found1942 // AggregateDecl *memberBase = getMemberBaseDecl( memberExpr );1943 // if ( ! memberBase ) return memberExpr;1944 // DeclarationWithType *memberDecl = memberExpr->get_member();1945 // std::list< Declaration* >::const_iterator baseIt = findDeclNamed( memberBase->get_members(), memberDecl->get_name() );1946 // if ( baseIt == memberBase->get_members().end() ) return memberExpr;1947 // DeclarationWithType *baseDecl = dynamic_cast< DeclarationWithType* >( *baseIt );1948 // if ( ! baseDecl ) return memberExpr;1949 //1950 // // check if stated type of the member is not the type of the member's declaration; if so, need a cast1951 // // this *SHOULD* be safe, I don't think anything but the void-replacements I put in for dtypes would make it past the typechecker1952 // SymTab::Indexer dummy;1953 // if ( ResolvExpr::typesCompatible( memberDecl->get_type(), baseDecl->get_type(), dummy ) ) return memberExpr;1954 // else return new CastExpr( memberExpr, memberDecl->get_type() );1955 // }1956 1957 void GenericInstantiator::doBeginScope() {1958 DeclMutator::doBeginScope();1959 instantiations.beginScope();1960 }1961 1962 void GenericInstantiator::doEndScope() {1963 DeclMutator::doEndScope();1964 instantiations.endScope();1965 }1966 1967 1663 ////////////////////////////////////////// PolyGenericCalculator //////////////////////////////////////////////////// 1968 1664 … … 2108 1804 findGeneric( objectType ); // ensure layout for this type is available 2109 1805 1806 // replace member expression with dynamically-computed layout expression 2110 1807 Expression *newMemberExpr = 0; 2111 1808 if ( StructInstType *structType = dynamic_cast< StructInstType* >( objectType ) ) { … … 2181 1878 bool PolyGenericCalculator::findGeneric( Type *ty ) { 2182 1879 ty = replaceTypeInst( ty, env ); 2183 1880 2184 1881 if ( TypeInstType *typeInst = dynamic_cast< TypeInstType* >( ty ) ) { 2185 1882 if ( scopeTyVars.find( typeInst->get_name() ) != scopeTyVars.end() ) { -
src/GenPoly/DeclMutator.cc
r950f7a7 r7527e63 10 10 // Created On : Fri Nov 27 14:44:00 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : T ue Jul 12 17:38:46201613 // Update Count : 212 // Last Modified On : Thu Aug 4 11:16:43 2016 13 // Update Count : 3 14 14 // 15 15 … … 163 163 Statement* DeclMutator::mutate(SwitchStmt *switchStmt) { 164 164 switchStmt->set_condition( maybeMutate( switchStmt->get_condition(), *this ) ); 165 mutateAll( switchStmt->get_ branches(), *this );165 mutateAll( switchStmt->get_statements(), *this ); 166 166 return switchStmt; 167 167 } -
src/GenPoly/DeclMutator.h
r950f7a7 r7527e63 28 28 class DeclMutator : public Mutator { 29 29 public: 30 typedef Mutator Parent; 31 30 32 DeclMutator(); 31 33 virtual ~DeclMutator(); 32 34 35 using Parent::mutate; 33 36 virtual CompoundStmt* mutate(CompoundStmt *compoundStmt); 34 37 virtual Statement* mutate(IfStmt *ifStmt); … … 42 45 /// Mutates a list of declarations with this visitor 43 46 void mutateDeclarationList(std::list< Declaration* >& decls); 44 47 45 48 /// Called on entry to a new scope; overriders should call this as a super-class call 46 49 virtual void doBeginScope(); -
src/GenPoly/GenPoly.cc
r950f7a7 r7527e63 23 23 24 24 namespace GenPoly { 25 bool needsAdapter( FunctionType *adaptee, const TyVarMap &tyVars ) {26 if ( ! adaptee->get_returnVals().empty() && isPolyType( adaptee->get_returnVals().front()->get_type(), tyVars ) ) {27 return true;28 } // if29 for ( std::list< DeclarationWithType* >::const_iterator innerArg = adaptee->get_parameters().begin(); innerArg != adaptee->get_parameters().end(); ++innerArg ) {30 if ( isPolyType( (*innerArg)->get_type(), tyVars ) ) {31 return true;32 } // if33 } // for34 return false;35 }36 37 ReferenceToType *isPolyRet( FunctionType *function ) {38 if ( ! function->get_returnVals().empty() ) {39 TyVarMap forallTypes( (TypeDecl::Kind)-1 );40 makeTyVarMap( function, forallTypes );41 return (ReferenceToType*)isPolyType( function->get_returnVals().front()->get_type(), forallTypes );42 } // if43 return 0;44 }45 46 25 namespace { 47 26 /// Checks a parameter list for polymorphic parameters; will substitute according to env if present … … 64 43 return false; 65 44 } 45 46 /// Checks a parameter list for dynamic-layout parameters from tyVars; will substitute according to env if present 47 bool hasDynParams( std::list< Expression* >& params, const TyVarMap &tyVars, const TypeSubstitution *env ) { 48 for ( std::list< Expression* >::iterator param = params.begin(); param != params.end(); ++param ) { 49 TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param ); 50 assert(paramType && "Aggregate parameters should be type expressions"); 51 if ( isDynType( paramType->get_type(), tyVars, env ) ) return true; 52 } 53 return false; 54 } 66 55 } 67 56 … … 101 90 } 102 91 return 0; 92 } 93 94 Type *isDynType( Type *type, const TyVarMap &tyVars, const TypeSubstitution *env ) { 95 type = replaceTypeInst( type, env ); 96 97 if ( TypeInstType *typeInst = dynamic_cast< TypeInstType * >( type ) ) { 98 auto var = tyVars.find( typeInst->get_name() ); 99 if ( var != tyVars.end() && var->second == TypeDecl::Any ) { 100 return type; 101 } 102 } else if ( StructInstType *structType = dynamic_cast< StructInstType* >( type ) ) { 103 if ( hasDynParams( structType->get_parameters(), tyVars, env ) ) return type; 104 } else if ( UnionInstType *unionType = dynamic_cast< UnionInstType* >( type ) ) { 105 if ( hasDynParams( unionType->get_parameters(), tyVars, env ) ) return type; 106 } 107 return 0; 108 } 109 110 ReferenceToType *isDynRet( FunctionType *function, const TyVarMap &forallTypes ) { 111 if ( function->get_returnVals().empty() ) return 0; 112 113 return (ReferenceToType*)isDynType( function->get_returnVals().front()->get_type(), forallTypes ); 114 } 115 116 ReferenceToType *isDynRet( FunctionType *function ) { 117 if ( function->get_returnVals().empty() ) return 0; 118 119 TyVarMap forallTypes( (TypeDecl::Kind)-1 ); 120 makeTyVarMap( function, forallTypes ); 121 return (ReferenceToType*)isDynType( function->get_returnVals().front()->get_type(), forallTypes ); 122 } 123 124 bool needsAdapter( FunctionType *adaptee, const TyVarMap &tyVars ) { 125 // if ( ! adaptee->get_returnVals().empty() && isPolyType( adaptee->get_returnVals().front()->get_type(), tyVars ) ) { 126 // return true; 127 // } // if 128 if ( isDynRet( adaptee, tyVars ) ) return true; 129 130 for ( std::list< DeclarationWithType* >::const_iterator innerArg = adaptee->get_parameters().begin(); innerArg != adaptee->get_parameters().end(); ++innerArg ) { 131 // if ( isPolyType( (*innerArg)->get_type(), tyVars ) ) { 132 if ( isDynType( (*innerArg)->get_type(), tyVars ) ) { 133 return true; 134 } // if 135 } // for 136 return false; 103 137 } 104 138 -
src/GenPoly/GenPoly.h
r950f7a7 r7527e63 31 31 namespace GenPoly { 32 32 typedef ErasableScopedMap< std::string, TypeDecl::Kind > TyVarMap; 33 34 /// A function needs an adapter if it returns a polymorphic value or if any of its35 /// parameters have polymorphic type36 bool needsAdapter( FunctionType *adaptee, const TyVarMap &tyVarr );37 38 /// true iff function has polymorphic return type39 ReferenceToType *isPolyRet( FunctionType *function );40 33 41 34 /// Replaces a TypeInstType by its referrent in the environment, if applicable … … 47 40 /// returns polymorphic type if is polymorphic type in tyVars, NULL otherwise; will look up substitution in env if provided 48 41 Type *isPolyType( Type *type, const TyVarMap &tyVars, const TypeSubstitution *env = 0 ); 42 43 /// returns dynamic-layout type if is dynamic-layout type in tyVars, NULL otherwise; will look up substitution in env if provided 44 Type *isDynType( Type *type, const TyVarMap &tyVars, const TypeSubstitution *env = 0 ); 45 46 /// true iff function has dynamic-layout return type under the given type variable map 47 ReferenceToType *isDynRet( FunctionType *function, const TyVarMap &tyVars ); 48 49 /// true iff function has dynamic-layout return type under the type variable map generated from its forall-parameters 50 ReferenceToType *isDynRet( FunctionType *function ); 51 52 /// A function needs an adapter if it returns a dynamic-layout value or if any of its parameters have dynamic-layout type 53 bool needsAdapter( FunctionType *adaptee, const TyVarMap &tyVarr ); 49 54 50 55 /// returns polymorphic type if is pointer to polymorphic type, NULL otherwise; will look up substitution in env if provided -
src/GenPoly/PolyMutator.cc
r950f7a7 r7527e63 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : T ue Jul 12 17:39:32 201613 // Update Count : 1 212 // Last Modified On : Thu Aug 4 11:26:22 2016 13 // Update Count : 16 14 14 // 15 15 … … 99 99 100 100 Statement * PolyMutator::mutate(SwitchStmt *switchStmt) { 101 mutateStatementList( switchStmt->get_ branches() );101 mutateStatementList( switchStmt->get_statements() ); 102 102 switchStmt->set_condition( mutateExpression( switchStmt->get_condition() ) ); 103 103 return switchStmt; -
src/GenPoly/ScrubTyVars.cc
r950f7a7 r7527e63 45 45 46 46 Type * ScrubTyVars::mutateAggregateType( Type *ty ) { 47 if ( isPolyType( ty, tyVars) ) {47 if ( shouldScrub( ty ) ) { 48 48 PointerType *ret = new PointerType( Type::Qualifiers(), new VoidType( ty->get_qualifiers() ) ); 49 49 delete ty; … … 63 63 Expression * ScrubTyVars::mutate( SizeofExpr *szeof ) { 64 64 // sizeof( T ) => _sizeof_T parameter, which is the size of T 65 if ( Type * polyType = isPolyType( szeof->get_type() ) ) {66 Expression *expr = new NameExpr( sizeofName( mangleType( polyType ) ) );65 if ( Type *dynType = shouldScrub( szeof->get_type() ) ) { 66 Expression *expr = new NameExpr( sizeofName( mangleType( dynType ) ) ); 67 67 return expr; 68 68 } else { … … 73 73 Expression * ScrubTyVars::mutate( AlignofExpr *algnof ) { 74 74 // alignof( T ) => _alignof_T parameter, which is the alignment of T 75 if ( Type * polyType = isPolyType( algnof->get_type() ) ) {76 Expression *expr = new NameExpr( alignofName( mangleType( polyType ) ) );75 if ( Type *dynType = shouldScrub( algnof->get_type() ) ) { 76 Expression *expr = new NameExpr( alignofName( mangleType( dynType ) ) ); 77 77 return expr; 78 78 } else { … … 82 82 83 83 Type * ScrubTyVars::mutate( PointerType *pointer ) { 84 if ( Type *polyType = isPolyType( pointer->get_base(), tyVars ) ) { 85 Type *ret = polyType->acceptMutator( *this ); 84 // // special case of shouldScrub that takes all TypeInstType pointer bases, even if they're not dynamic 85 // Type *base = pointer->get_base(); 86 // Type *dynType = 0; 87 // if ( dynamicOnly ) { 88 // if ( TypeInstType *typeInst = dynamic_cast< TypeInstType* >( base ) ) { 89 // if ( tyVars.find( typeInst->get_name() ) != tyVars.end() ) { dynType = typeInst; } 90 // } else { 91 // dynType = isDynType( base, tyVars ); 92 // } 93 // } else { 94 // dynType = isPolyType( base, tyVars ); 95 // } 96 // if ( dynType ) { 97 if ( Type *dynType = shouldScrub( pointer->get_base() ) ) { 98 Type *ret = dynType->acceptMutator( *this ); 86 99 ret->get_qualifiers() += pointer->get_qualifiers(); 87 100 pointer->set_base( 0 ); -
src/GenPoly/ScrubTyVars.h
r950f7a7 r7527e63 27 27 class ScrubTyVars : public Mutator { 28 28 public: 29 ScrubTyVars( const TyVarMap &tyVars ): tyVars( tyVars) {}29 ScrubTyVars( const TyVarMap &tyVars, bool dynamicOnly = false ): tyVars( tyVars ), dynamicOnly( dynamicOnly ) {} 30 30 31 31 /// For all polymorphic types with type variables in `tyVars`, replaces generic types, dtypes, and ftypes with the appropriate void type, … … 33 33 template< typename SynTreeClass > 34 34 static SynTreeClass *scrub( SynTreeClass *target, const TyVarMap &tyVars ); 35 36 /// For all dynamic-layout types with type variables in `tyVars`, replaces generic types, dtypes, and ftypes with the appropriate void type, 37 /// and sizeof/alignof expressions with the proper variable 38 template< typename SynTreeClass > 39 static SynTreeClass *scrubDynamic( SynTreeClass *target, const TyVarMap &tyVars ); 35 40 36 41 virtual Type* mutate( TypeInstType *typeInst ); … … 42 47 43 48 private: 49 /// Returns the type if it should be scrubbed, NULL otherwise. 50 Type* shouldScrub( Type *ty ) { 51 return dynamicOnly ? isDynType( ty, tyVars ) : isPolyType( ty, tyVars ); 52 // if ( ! dynamicOnly ) return isPolyType( ty, tyVars ); 53 // 54 // if ( TypeInstType *typeInst = dynamic_cast< TypeInstType* >( ty ) ) { 55 // return tyVars.find( typeInst->get_name() ) != tyVars.end() ? ty : 0; 56 // } 57 // 58 // return isDynType( ty, tyVars ); 59 } 60 44 61 /// Mutates (possibly generic) aggregate types appropriately 45 62 Type* mutateAggregateType( Type *ty ); 46 63 47 const TyVarMap &tyVars; 64 const TyVarMap &tyVars; ///< Type variables to scrub 65 bool dynamicOnly; ///< only scrub the types with dynamic layout? [false] 48 66 }; 49 67 50 /* static class method */51 68 template< typename SynTreeClass > 52 69 SynTreeClass * ScrubTyVars::scrub( SynTreeClass *target, const TyVarMap &tyVars ) { 53 70 ScrubTyVars scrubber( tyVars ); 71 return static_cast< SynTreeClass * >( target->acceptMutator( scrubber ) ); 72 } 73 74 template< typename SynTreeClass > 75 SynTreeClass * ScrubTyVars::scrubDynamic( SynTreeClass *target, const TyVarMap &tyVars ) { 76 ScrubTyVars scrubber( tyVars, true ); 54 77 return static_cast< SynTreeClass * >( target->acceptMutator( scrubber ) ); 55 78 } -
src/GenPoly/Specialize.cc
r950f7a7 r7527e63 31 31 #include "Common/UniqueName.h" 32 32 #include "Common/utility.h" 33 #include "InitTweak/InitTweak.h" 33 34 34 35 namespace GenPoly { … … 184 185 mutateAll( appExpr->get_args(), *this ); 185 186 186 // create thunks for the inferred parameters 187 for ( InferredParams::iterator inferParam = appExpr->get_inferParams().begin(); inferParam != appExpr->get_inferParams().end(); ++inferParam ) { 188 inferParam->second.expr = doSpecialization( inferParam->second.formalType, inferParam->second.expr, &appExpr->get_inferParams() ); 189 } 190 191 handleExplicitParams( appExpr ); 187 if ( ! InitTweak::isIntrinsicCallExpr( appExpr ) ) { 188 // create thunks for the inferred parameters 189 // don't need to do this for intrinsic calls, because they aren't actually passed 190 for ( InferredParams::iterator inferParam = appExpr->get_inferParams().begin(); inferParam != appExpr->get_inferParams().end(); ++inferParam ) { 191 inferParam->second.expr = doSpecialization( inferParam->second.formalType, inferParam->second.expr, &appExpr->get_inferParams() ); 192 } 193 194 handleExplicitParams( appExpr ); 195 } 192 196 193 197 return appExpr; -
src/GenPoly/module.mk
r950f7a7 r7527e63 23 23 GenPoly/CopyParams.cc \ 24 24 GenPoly/FindFunction.cc \ 25 GenPoly/DeclMutator.cc 25 GenPoly/DeclMutator.cc \ 26 GenPoly/InstantiateGeneric.cc -
src/InitTweak/FixGlobalInit.cc
r950f7a7 r7527e63 46 46 FunctionDecl * destroyFunction; 47 47 }; 48 49 class ConstExprChecker : public Visitor {50 public:51 ConstExprChecker() : isConstExpr( true ) {}52 53 virtual void visit( ApplicationExpr *applicationExpr ) { isConstExpr = false; }54 virtual void visit( UntypedExpr *untypedExpr ) { isConstExpr = false; }55 virtual void visit( NameExpr *nameExpr ) { isConstExpr = false; }56 virtual void visit( CastExpr *castExpr ) { isConstExpr = false; }57 virtual void visit( LabelAddressExpr *labAddressExpr ) { isConstExpr = false; }58 virtual void visit( UntypedMemberExpr *memberExpr ) { isConstExpr = false; }59 virtual void visit( MemberExpr *memberExpr ) { isConstExpr = false; }60 virtual void visit( VariableExpr *variableExpr ) { isConstExpr = false; }61 virtual void visit( ConstantExpr *constantExpr ) { /* bottom out */ }62 // these might be okay?63 // virtual void visit( SizeofExpr *sizeofExpr );64 // virtual void visit( AlignofExpr *alignofExpr );65 // virtual void visit( UntypedOffsetofExpr *offsetofExpr );66 // virtual void visit( OffsetofExpr *offsetofExpr );67 // virtual void visit( OffsetPackExpr *offsetPackExpr );68 // virtual void visit( AttrExpr *attrExpr );69 // virtual void visit( CommaExpr *commaExpr );70 // virtual void visit( LogicalExpr *logicalExpr );71 // virtual void visit( ConditionalExpr *conditionalExpr );72 virtual void visit( TupleExpr *tupleExpr ) { isConstExpr = false; }73 virtual void visit( SolvedTupleExpr *tupleExpr ) { isConstExpr = false; }74 virtual void visit( TypeExpr *typeExpr ) { isConstExpr = false; }75 virtual void visit( AsmExpr *asmExpr ) { isConstExpr = false; }76 virtual void visit( UntypedValofExpr *valofExpr ) { isConstExpr = false; }77 virtual void visit( CompoundLiteralExpr *compLitExpr ) { isConstExpr = false; }78 79 bool isConstExpr;80 };81 82 bool isConstExpr( Initializer * init ) {83 if ( init ) {84 ConstExprChecker checker;85 init->accept( checker );86 return checker.isConstExpr;87 } // if88 // for all intents and purposes, no initializer means const expr89 return true;90 }91 48 92 49 void fixGlobalInit( std::list< Declaration * > & translationUnit, const std::string & name, bool inLibrary ) { … … 140 97 std::list< Statement * > & destroyStatements = destroyFunction->get_statements()->get_kids(); 141 98 142 if ( ! tryConstruct( objDecl ) ) return; // don't construct @= or designated objects143 if ( objDecl->get_storageClass() == DeclarationNode::Extern ) return;144 99 // C allows you to initialize objects with constant expressions 145 100 // xxx - this is an optimization. Need to first resolve constructors before we decide … … 147 102 // if ( isConstExpr( objDecl->get_init() ) ) return; 148 103 149 if ( dynamic_cast< ArrayType * > ( objDecl->get_type() ) ) { 150 // xxx - initialize each element of the array 151 } else { 152 // steal initializer from object and attach it to a new temporary 153 ObjectDecl *newObj = new ObjectDecl( tempNamer.newName(), DeclarationNode::NoStorageClass, LinkageSpec::C, 0, objDecl->get_type()->clone(), objDecl->get_init() ); 154 objDecl->set_init( NULL ); 155 initStatements.push_back( new DeclStmt( noLabels, newObj ) ); 104 if ( ConstructorInit * ctorInit = dynamic_cast< ConstructorInit * >( objDecl->get_init() ) ) { 105 // a decision should have been made by the resolver, so ctor and init are not both non-NULL 106 assert( ! ctorInit->get_ctor() || ! ctorInit->get_init() ); 156 107 157 // copy construct objDecl using temporary 158 UntypedExpr * init = new UntypedExpr( new NameExpr( "?{}" ) ); 159 init->get_args().push_back( new AddressExpr( new VariableExpr( objDecl ) ) ); 160 init->get_args().push_back( new VariableExpr( newObj ) ); 161 initStatements.push_back( new ImplicitCtorDtorStmt( new ExprStmt( noLabels, init ) ) ); 162 163 // add destructor calls to global destroy function 164 UntypedExpr * destroy = new UntypedExpr( new NameExpr( "^?{}" ) ); 165 destroy->get_args().push_back( new AddressExpr( new VariableExpr( objDecl ) ) ); 166 destroyStatements.push_front( new ImplicitCtorDtorStmt( new ExprStmt( noLabels, destroy ) ) ); 108 Statement * dtor = ctorInit->get_dtor(); 109 if ( dtor && ! isIntrinsicSingleArgCallStmt( dtor ) ) { 110 // don't need to call intrinsic dtor, because it does nothing, but 111 // non-intrinsic dtors must be called 112 destroyStatements.push_front( dtor ); 113 ctorInit->set_dtor( NULL ); 114 } // if 115 if ( Statement * ctor = ctorInit->get_ctor() ) { 116 initStatements.push_back( ctor ); 117 objDecl->set_init( NULL ); 118 ctorInit->set_ctor( NULL ); 119 } else if ( Initializer * init = ctorInit->get_init() ) { 120 objDecl->set_init( init ); 121 ctorInit->set_init( NULL ); 122 } else { 123 // no constructor and no initializer, which is okay 124 objDecl->set_init( NULL ); 125 } // if 126 delete ctorInit; 167 127 } // if 168 128 } -
src/InitTweak/FixInit.cc
r950f7a7 r7527e63 18 18 #include <iterator> 19 19 #include <algorithm> 20 #include "InitTweak.h" 20 21 #include "FixInit.h" 21 #include " InitTweak.h"22 #include "FixGlobalInit.h" 22 23 #include "ResolvExpr/Resolver.h" 23 24 #include "ResolvExpr/typeops.h" … … 25 26 #include "SynTree/Type.h" 26 27 #include "SynTree/Expression.h" 28 #include "SynTree/Attribute.h" 27 29 #include "SynTree/Statement.h" 28 30 #include "SynTree/Initializer.h" … … 83 85 }; 84 86 87 // debug 85 88 struct printSet { 86 89 typedef ObjDeclCollector::ObjectSet ObjectSet; … … 159 162 160 163 virtual DeclarationWithType * mutate( ObjectDecl *objDecl ); 164 165 std::list< Declaration * > staticDtorDecls; 161 166 }; 162 167 … … 171 176 } // namespace 172 177 173 void fix( std::list< Declaration * > & translationUnit ) { 178 void fix( std::list< Declaration * > & translationUnit, const std::string & filename, bool inLibrary ) { 179 // fixes ConstructorInit for global variables. should happen before fixInitializers. 180 InitTweak::fixGlobalInit( translationUnit, filename, inLibrary ); 181 174 182 InsertImplicitCalls::insert( translationUnit ); 175 183 ResolveCopyCtors::resolveImplicitCalls( translationUnit ); … … 194 202 void FixInit::fixInitializers( std::list< Declaration * > & translationUnit ) { 195 203 FixInit fixer; 196 mutateAll( translationUnit, fixer ); 204 205 // can't use mutateAll, because need to insert declarations at top-level 206 // can't use DeclMutator, because sometimes need to insert IfStmt, etc. 207 SemanticError errors; 208 for ( std::list< Declaration * >::iterator i = translationUnit.begin(); i != translationUnit.end(); ++i ) { 209 try { 210 *i = maybeMutate( *i, fixer ); 211 translationUnit.splice( i, fixer.staticDtorDecls ); 212 } catch( SemanticError &e ) { 213 errors.append( e ); 214 } // try 215 } // for 216 if ( ! errors.isEmpty() ) { 217 throw errors; 218 } // if 197 219 } 198 220 … … 422 444 if ( Statement * ctor = ctorInit->get_ctor() ) { 423 445 if ( objDecl->get_storageClass() == DeclarationNode::Static ) { 446 // originally wanted to take advantage of gcc nested functions, but 447 // we get memory errors with this approach. To remedy this, the static 448 // variable is hoisted when the destructor needs to be called. 449 // 424 450 // generate: 425 // static bool __objName_uninitialized = true; 426 // if (__objName_uninitialized) { 427 // __ctor(__objName); 428 // void dtor_atexit() { 429 // __dtor(__objName); 451 // static T __objName_static_varN; 452 // void __objName_dtor_atexitN() { 453 // __dtor__...; 454 // } 455 // int f(...) { 456 // ... 457 // static bool __objName_uninitialized = true; 458 // if (__objName_uninitialized) { 459 // __ctor(__objName); 460 // __objName_uninitialized = false; 461 // atexit(__objName_dtor_atexitN); 430 462 // } 431 // on_exit(dtorOnExit, &__objName); 432 // __objName_uninitialized = false; 463 // ... 433 464 // } 434 465 435 // generate first line 466 static UniqueName dtorCallerNamer( "_dtor_atexit" ); 467 468 // static bool __objName_uninitialized = true 436 469 BasicType * boolType = new BasicType( Type::Qualifiers(), BasicType::Bool ); 437 470 SingleInit * boolInitExpr = new SingleInit( new ConstantExpr( Constant( boolType->clone(), "1" ) ), noDesignators ); … … 439 472 isUninitializedVar->fixUniqueId(); 440 473 441 // void dtor_atexit(...) {...}442 FunctionDecl * dtorCaller = new FunctionDecl( objDecl->get_mangleName() + "_dtor_atexit", DeclarationNode::NoStorageClass, LinkageSpec::C, new FunctionType( Type::Qualifiers(), false ), new CompoundStmt( noLabels ), false, false );443 dtorCaller->fixUniqueId();444 dtorCaller->get_statements()->get_kids().push_back( ctorInit->get_dtor()->clone() );445 446 // on_exit(dtor_atexit);447 UntypedExpr * callAtexit = new UntypedExpr( new NameExpr( "atexit" ) );448 callAtexit->get_args().push_back( new VariableExpr( dtorCaller ) );449 450 474 // __objName_uninitialized = false; 451 475 UntypedExpr * setTrue = new UntypedExpr( new NameExpr( "?=?" ) ); … … 457 481 std::list< Statement * > & body = initStmts->get_kids(); 458 482 body.push_back( ctor ); 459 body.push_back( new DeclStmt( noLabels, dtorCaller ) );460 body.push_back( new ExprStmt( noLabels, callAtexit ) );461 483 body.push_back( new ExprStmt( noLabels, setTrue ) ); 462 484 … … 465 487 stmtsToAddAfter.push_back( new DeclStmt( noLabels, isUninitializedVar ) ); 466 488 stmtsToAddAfter.push_back( ifStmt ); 489 490 if ( ctorInit->get_dtor() ) { 491 // if the object has a non-trivial destructor, have to 492 // hoist it and the object into the global space and 493 // call the destructor function with atexit. 494 495 Statement * dtorStmt = ctorInit->get_dtor()->clone(); 496 497 // void __objName_dtor_atexitN(...) {...} 498 FunctionDecl * dtorCaller = new FunctionDecl( objDecl->get_mangleName() + dtorCallerNamer.newName(), DeclarationNode::Static, LinkageSpec::C, new FunctionType( Type::Qualifiers(), false ), new CompoundStmt( noLabels ), false, false ); 499 dtorCaller->fixUniqueId(); 500 dtorCaller->get_statements()->get_kids().push_back( dtorStmt ); 501 502 // atexit(dtor_atexit); 503 UntypedExpr * callAtexit = new UntypedExpr( new NameExpr( "atexit" ) ); 504 callAtexit->get_args().push_back( new VariableExpr( dtorCaller ) ); 505 506 body.push_back( new ExprStmt( noLabels, callAtexit ) ); 507 508 // hoist variable and dtor caller decls to list of decls that will be added into global scope 509 staticDtorDecls.push_back( objDecl ); 510 staticDtorDecls.push_back( dtorCaller ); 511 512 // need to rename object uniquely since it now appears 513 // at global scope and there could be multiple function-scoped 514 // static variables with the same name in different functions. 515 static UniqueName staticNamer( "_static_var" ); 516 objDecl->set_mangleName( objDecl->get_mangleName() + staticNamer.newName() ); 517 518 objDecl->set_init( NULL ); 519 ctorInit->set_ctor( NULL ); 520 delete ctorInit; 521 522 // xxx - temporary hack: need to return a declaration, but want to hoist the current object out of this scope 523 // create a new object which is never used 524 static UniqueName dummyNamer( "_dummy" ); 525 ObjectDecl * dummy = new ObjectDecl( dummyNamer.newName(), DeclarationNode::Static, LinkageSpec::Cforall, 0, new PointerType( Type::Qualifiers(), new VoidType( Type::Qualifiers() ) ), 0, std::list< Attribute * >{ new Attribute("unused") } ); 526 return dummy; 527 } 467 528 } else { 468 529 stmtsToAddAfter.push_back( ctor ); … … 524 585 assert( ! ctorInit->get_ctor() || ! ctorInit->get_init() ); 525 586 Statement * dtor = ctorInit->get_dtor(); 526 if ( dtor && ! isIn strinsicSingleArgCallStmt( dtor ) ) {587 if ( dtor && ! isIntrinsicSingleArgCallStmt( dtor ) ) { 527 588 // don't need to call intrinsic dtor, because it does nothing, but 528 589 // non-intrinsic dtors must be called -
src/InitTweak/FixInit.h
r950f7a7 r7527e63 27 27 /// replace constructor initializers with expression statements 28 28 /// and unwrap basic C-style initializers 29 void fix( std::list< Declaration * > & translationUnit );29 void fix( std::list< Declaration * > & translationUnit, const std::string & name, bool inLibrary ); 30 30 } // namespace 31 31 -
src/InitTweak/GenInit.cc
r950f7a7 r7527e63 26 26 #include "SymTab/Autogen.h" 27 27 #include "GenPoly/PolyMutator.h" 28 #include "GenPoly/DeclMutator.h" 28 29 29 30 namespace InitTweak { … … 55 56 public: 56 57 /// create constructor and destructor statements for object declarations. 57 /// Destructors are inserted directly into the code, whereas constructors58 /// will be added in after the resolver has run so that the initializer expression59 /// is only removed if a constructor is found58 /// the actual call statements will be added in after the resolver has run 59 /// so that the initializer expression is only removed if a constructor is found 60 /// and the same destructor call is inserted in all of the appropriate locations. 60 61 static void generateCtorDtor( std::list< Declaration * > &translationUnit ); 61 62 CtorDtor() : inFunction( false ) {}63 62 64 63 virtual DeclarationWithType * mutate( ObjectDecl * ); 65 64 virtual DeclarationWithType * mutate( FunctionDecl *functionDecl ); 66 virtual Declaration* mutate( StructDecl *aggregateDecl ); 67 virtual Declaration* mutate( UnionDecl *aggregateDecl ); 68 virtual Declaration* mutate( EnumDecl *aggregateDecl ); 69 virtual Declaration* mutate( TraitDecl *aggregateDecl ); 70 virtual TypeDecl* mutate( TypeDecl *typeDecl ); 71 virtual Declaration* mutate( TypedefDecl *typeDecl ); 72 73 virtual Type * mutate( FunctionType *funcType ); 65 // should not traverse into any of these declarations to find objects 66 // that need to be constructed or destructed 67 virtual Declaration* mutate( StructDecl *aggregateDecl ) { return aggregateDecl; } 68 virtual Declaration* mutate( UnionDecl *aggregateDecl ) { return aggregateDecl; } 69 virtual Declaration* mutate( EnumDecl *aggregateDecl ) { return aggregateDecl; } 70 virtual Declaration* mutate( TraitDecl *aggregateDecl ) { return aggregateDecl; } 71 virtual TypeDecl* mutate( TypeDecl *typeDecl ) { return typeDecl; } 72 virtual Declaration* mutate( TypedefDecl *typeDecl ) { return typeDecl; } 73 74 virtual Type * mutate( FunctionType *funcType ) { return funcType; } 74 75 75 76 protected: 76 bool inFunction; 77 }; 78 79 class HoistArrayDimension : public GenPoly::DeclMutator { 80 public: 81 typedef GenPoly::DeclMutator Parent; 82 83 /// hoist dimension from array types in object declaration so that it uses a single 84 /// const variable of type size_t, so that side effecting array dimensions are only 85 /// computed once. 86 static void hoistArrayDimension( std::list< Declaration * > & translationUnit ); 87 88 private: 89 virtual DeclarationWithType * mutate( ObjectDecl * objectDecl ); 90 virtual DeclarationWithType * mutate( FunctionDecl *functionDecl ); 91 // should not traverse into any of these declarations to find objects 92 // that need to be constructed or destructed 93 virtual Declaration* mutate( StructDecl *aggregateDecl ) { return aggregateDecl; } 94 virtual Declaration* mutate( UnionDecl *aggregateDecl ) { return aggregateDecl; } 95 virtual Declaration* mutate( EnumDecl *aggregateDecl ) { return aggregateDecl; } 96 virtual Declaration* mutate( TraitDecl *aggregateDecl ) { return aggregateDecl; } 97 virtual TypeDecl* mutate( TypeDecl *typeDecl ) { return typeDecl; } 98 virtual Declaration* mutate( TypedefDecl *typeDecl ) { return typeDecl; } 99 100 virtual Type* mutate( FunctionType *funcType ) { return funcType; } 101 102 void hoist( Type * type ); 103 104 DeclarationNode::StorageClass storageclass = DeclarationNode::NoStorageClass; 105 bool inFunction = false; 77 106 }; 78 107 79 108 void genInit( std::list< Declaration * > & translationUnit ) { 80 109 ReturnFixer::makeReturnTemp( translationUnit ); 110 HoistArrayDimension::hoistArrayDimension( translationUnit ); 81 111 CtorDtor::generateCtorDtor( translationUnit ); 82 112 } … … 124 154 } 125 155 156 // precompute array dimension expression, because constructor generation may duplicate it, 157 // which would be incorrect if it is a side-effecting computation. 158 void HoistArrayDimension::hoistArrayDimension( std::list< Declaration * > & translationUnit ) { 159 HoistArrayDimension hoister; 160 hoister.mutateDeclarationList( translationUnit ); 161 } 162 163 DeclarationWithType * HoistArrayDimension::mutate( ObjectDecl * objectDecl ) { 164 storageclass = objectDecl->get_storageClass(); 165 DeclarationWithType * temp = Parent::mutate( objectDecl ); 166 hoist( objectDecl->get_type() ); 167 storageclass = DeclarationNode::NoStorageClass; 168 return temp; 169 } 170 171 void HoistArrayDimension::hoist( Type * type ) { 172 // if in function, generate const size_t var 173 static UniqueName dimensionName( "_array_dim" ); 174 175 // C doesn't allow variable sized arrays at global scope or for static variables, 176 // so don't hoist dimension. 177 if ( ! inFunction ) return; 178 if ( storageclass == DeclarationNode::Static ) return; 179 180 if ( ArrayType * arrayType = dynamic_cast< ArrayType * >( type ) ) { 181 if ( ! arrayType->get_dimension() ) return; // xxx - recursive call to hoist? 182 183 // don't need to hoist dimension if it's a constexpr - only need to if there's potential 184 // for side effects. 185 if ( isConstExpr( arrayType->get_dimension() ) ) return; 186 187 ObjectDecl * arrayDimension = new ObjectDecl( dimensionName.newName(), storageclass, LinkageSpec::C, 0, SymTab::SizeType->clone(), new SingleInit( arrayType->get_dimension() ) ); 188 arrayDimension->get_type()->set_isConst( true ); 189 190 arrayType->set_dimension( new VariableExpr( arrayDimension ) ); 191 addDeclaration( arrayDimension ); 192 193 hoist( arrayType->get_base() ); 194 return; 195 } 196 } 197 198 DeclarationWithType * HoistArrayDimension::mutate( FunctionDecl *functionDecl ) { 199 bool oldInFunc = inFunction; 200 inFunction = true; 201 DeclarationWithType * decl = Parent::mutate( functionDecl ); 202 inFunction = oldInFunc; 203 return decl; 204 } 126 205 127 206 void CtorDtor::generateCtorDtor( std::list< Declaration * > & translationUnit ) { … … 130 209 } 131 210 132 namespace {133 Expression * makeCtorDtorExpr( std::string name, ObjectDecl * objDecl, std::list< Expression * > args ) {134 UntypedExpr * expr = new UntypedExpr( new NameExpr( name ) );135 expr->get_args().push_back( new AddressExpr( new VariableExpr( objDecl ) ) );136 expr->get_args().splice( expr->get_args().end(), args );137 return expr;138 }139 }140 141 211 DeclarationWithType * CtorDtor::mutate( ObjectDecl * objDecl ) { 142 // hands off if designated or if @=212 // hands off if designated, if @=, or if extern 143 213 if ( tryConstruct( objDecl ) ) { 144 if ( inFunction ) { 145 if ( ArrayType * at = dynamic_cast< ArrayType * >( objDecl->get_type() ) ) { 146 // call into makeArrayFunction from validate.cc to generate calls to ctor/dtor for each element of array 147 // TODO: walk initializer and generate appropriate copy ctor if element has initializer 148 std::list< Expression * > args = makeInitList( objDecl->get_init() ); 149 if ( args.empty() ) { 150 std::list< Statement * > ctor; 151 std::list< Statement * > dtor; 152 153 SymTab::makeArrayFunction( NULL, new VariableExpr( objDecl ), at, "?{}", back_inserter( ctor ) ); 154 SymTab::makeArrayFunction( NULL, new VariableExpr( objDecl ), at, "^?{}", front_inserter( dtor ), false ); 155 156 // Currently makeArrayFunction produces a single Statement - a CompoundStmt 157 // which wraps everything that needs to happen. As such, it's technically 158 // possible to use a Statement ** in the above calls, but this is inherently 159 // unsafe, so instead we take the slightly less efficient route, but will be 160 // immediately informed if somehow the above assumption is broken. In this case, 161 // we could always wrap the list of statements at this point with a CompoundStmt, 162 // but it seems reasonable at the moment for this to be done by makeArrayFunction 163 // itself 164 assert( ctor.size() == 1 && dynamic_cast< ImplicitCtorDtorStmt * >( ctor.front() ) ); 165 assert( dtor.size() == 1 && dynamic_cast< ImplicitCtorDtorStmt * >( dtor.front() ) ); 166 objDecl->set_init( new ConstructorInit( ctor.front(), dtor.front(), objDecl->get_init() ) ); 167 } else { 168 // array came with an initializer list: initialize each element 169 // may have more initializers than elements in the array - need to check at each index that 170 // we haven't exceeded size. This requires precomputing the size because it might be a side-effecting 171 // computation. 172 // may have fewer initializers than eleemnts in the array - need to default construct 173 // remaining elements. 174 // might be able to merge this with the case above. 175 } 176 } else { 177 // it's sufficient to attempt to call the ctor/dtor for the given object and its initializer 178 Expression * ctor = makeCtorDtorExpr( "?{}", objDecl, makeInitList( objDecl->get_init() ) ); 179 Expression * dtor = makeCtorDtorExpr( "^?{}", objDecl, std::list< Expression * >() ); 180 181 // need to remember init expression, in case no ctors exist 182 // if ctor does exist, want to use ctor expression instead of init 183 // push this decision to the resolver 184 ExprStmt * ctorStmt = new ExprStmt( noLabels, ctor ); 185 ExprStmt * dtorStmt = new ExprStmt( noLabels, dtor ); 186 objDecl->set_init( new ConstructorInit( new ImplicitCtorDtorStmt( ctorStmt ), new ImplicitCtorDtorStmt( dtorStmt ), objDecl->get_init() ) ); 187 } 214 // call into genImplicitCall from Autogen.h to generate calls to ctor/dtor 215 // for each constructable object 216 std::list< Statement * > ctor; 217 std::list< Statement * > dtor; 218 219 InitExpander srcParam( objDecl->get_init() ); 220 InitExpander nullParam( (Initializer *)NULL ); 221 SymTab::genImplicitCall( srcParam, new VariableExpr( objDecl ), "?{}", back_inserter( ctor ), objDecl ); 222 SymTab::genImplicitCall( nullParam, new VariableExpr( objDecl ), "^?{}", front_inserter( dtor ), objDecl, false ); 223 224 // Currently genImplicitCall produces a single Statement - a CompoundStmt 225 // which wraps everything that needs to happen. As such, it's technically 226 // possible to use a Statement ** in the above calls, but this is inherently 227 // unsafe, so instead we take the slightly less efficient route, but will be 228 // immediately informed if somehow the above assumption is broken. In this case, 229 // we could always wrap the list of statements at this point with a CompoundStmt, 230 // but it seems reasonable at the moment for this to be done by genImplicitCall 231 // itself. It is possible that genImplicitCall produces no statements (e.g. if 232 // an array type does not have a dimension). In this case, it's fine to ignore 233 // the object for the purposes of construction. 234 assert( ctor.size() == dtor.size() && ctor.size() <= 1 ); 235 if ( ctor.size() == 1 ) { 236 // need to remember init expression, in case no ctors exist 237 // if ctor does exist, want to use ctor expression instead of init 238 // push this decision to the resolver 239 assert( dynamic_cast< ImplicitCtorDtorStmt * > ( ctor.front() ) && dynamic_cast< ImplicitCtorDtorStmt * > ( dtor.front() ) ); 240 objDecl->set_init( new ConstructorInit( ctor.front(), dtor.front(), objDecl->get_init() ) ); 188 241 } 189 242 } … … 193 246 DeclarationWithType * CtorDtor::mutate( FunctionDecl *functionDecl ) { 194 247 // parameters should not be constructed and destructed, so don't mutate FunctionType 195 bool oldInFunc = inFunction;196 248 mutateAll( functionDecl->get_oldDecls(), *this ); 197 inFunction = true;198 249 functionDecl->set_statements( maybeMutate( functionDecl->get_statements(), *this ) ); 199 inFunction = oldInFunc;200 250 return functionDecl; 201 251 } 202 203 // should not traverse into any of these declarations to find objects204 // that need to be constructed or destructed205 Declaration* CtorDtor::mutate( StructDecl *aggregateDecl ) { return aggregateDecl; }206 Declaration* CtorDtor::mutate( UnionDecl *aggregateDecl ) { return aggregateDecl; }207 Declaration* CtorDtor::mutate( EnumDecl *aggregateDecl ) { return aggregateDecl; }208 Declaration* CtorDtor::mutate( TraitDecl *aggregateDecl ) { return aggregateDecl; }209 TypeDecl* CtorDtor::mutate( TypeDecl *typeDecl ) { return typeDecl; }210 Declaration* CtorDtor::mutate( TypedefDecl *typeDecl ) { return typeDecl; }211 Type* CtorDtor::mutate( FunctionType *funcType ) { return funcType; }212 213 252 } // namespace InitTweak 214 253 -
src/InitTweak/InitTweak.cc
r950f7a7 r7527e63 1 #include <algorithm> 1 2 #include "InitTweak.h" 2 3 #include "SynTree/Visitor.h" … … 4 5 #include "SynTree/Initializer.h" 5 6 #include "SynTree/Expression.h" 7 #include "SynTree/Attribute.h" 6 8 #include "GenPoly/GenPoly.h" 7 9 … … 20 22 }; 21 23 22 class Init Expander : public Visitor {24 class InitFlattener : public Visitor { 23 25 public: 24 InitExpander() {}25 26 virtual void visit( SingleInit * singleInit ); 26 27 virtual void visit( ListInit * listInit ); … … 28 29 }; 29 30 30 void Init Expander::visit( SingleInit * singleInit ) {31 void InitFlattener::visit( SingleInit * singleInit ) { 31 32 argList.push_back( singleInit->get_value()->clone() ); 32 33 } 33 34 34 void Init Expander::visit( ListInit * listInit ) {35 // xxx - for now, assume nonested list inits36 std::list<Initializer*>::iterator it = listInit->begin _initializers();37 for ( ; it != listInit->end _initializers(); ++it ) {35 void InitFlattener::visit( ListInit * listInit ) { 36 // flatten nested list inits 37 std::list<Initializer*>::iterator it = listInit->begin(); 38 for ( ; it != listInit->end(); ++it ) { 38 39 (*it)->accept( *this ); 39 40 } … … 42 43 43 44 std::list< Expression * > makeInitList( Initializer * init ) { 44 Init Expander expander;45 maybeAccept( init, expander );46 return expander.argList;45 InitFlattener flattener; 46 maybeAccept( init, flattener ); 47 return flattener.argList; 47 48 } 48 49 … … 53 54 } 54 55 56 class InitExpander::ExpanderImpl { 57 public: 58 virtual std::list< Expression * > next( std::list< Expression * > & indices ) = 0; 59 virtual Statement * buildListInit( UntypedExpr * callExpr, std::list< Expression * > & indices ) = 0; 60 }; 61 62 class InitImpl : public InitExpander::ExpanderImpl { 63 public: 64 InitImpl( Initializer * init ) : init( init ) {} 65 66 virtual std::list< Expression * > next( std::list< Expression * > & indices ) { 67 // this is wrong, but just a placeholder for now 68 // if ( ! flattened ) flatten( indices ); 69 // return ! inits.empty() ? makeInitList( inits.front() ) : std::list< Expression * >(); 70 return makeInitList( init ); 71 } 72 73 virtual Statement * buildListInit( UntypedExpr * callExpr, std::list< Expression * > & indices ); 74 private: 75 Initializer * init; 76 }; 77 78 class ExprImpl : public InitExpander::ExpanderImpl { 79 public: 80 ExprImpl( Expression * expr ) : arg( expr ) {} 81 82 virtual std::list< Expression * > next( std::list< Expression * > & indices ) { 83 std::list< Expression * > ret; 84 Expression * expr = maybeClone( arg ); 85 if ( expr ) { 86 for ( std::list< Expression * >::reverse_iterator it = indices.rbegin(); it != indices.rend(); ++it ) { 87 // go through indices and layer on subscript exprs ?[?] 88 ++it; 89 UntypedExpr * subscriptExpr = new UntypedExpr( new NameExpr( "?[?]") ); 90 subscriptExpr->get_args().push_back( expr ); 91 subscriptExpr->get_args().push_back( (*it)->clone() ); 92 expr = subscriptExpr; 93 } 94 ret.push_back( expr ); 95 } 96 return ret; 97 } 98 99 virtual Statement * buildListInit( UntypedExpr * callExpr, std::list< Expression * > & indices ); 100 private: 101 Expression * arg; 102 }; 103 104 InitExpander::InitExpander( Initializer * init ) : expander( new InitImpl( init ) ) {} 105 106 InitExpander::InitExpander( Expression * expr ) : expander( new ExprImpl( expr ) ) {} 107 108 std::list< Expression * > InitExpander::operator*() { 109 return cur; 110 } 111 112 InitExpander & InitExpander::operator++() { 113 cur = expander->next( indices ); 114 return *this; 115 } 116 117 // use array indices list to build switch statement 118 void InitExpander::addArrayIndex( Expression * index, Expression * dimension ) { 119 indices.push_back( index ); 120 indices.push_back( dimension ); 121 } 122 123 void InitExpander::clearArrayIndices() { 124 indices.clear(); 125 } 126 127 namespace { 128 /// given index i, dimension d, initializer init, and callExpr f, generates 129 /// if (i < d) f(..., init) 130 /// ++i; 131 /// so that only elements within the range of the array are constructed 132 template< typename OutIterator > 133 void buildCallExpr( UntypedExpr * callExpr, Expression * index, Expression * dimension, Initializer * init, OutIterator out ) { 134 UntypedExpr * cond = new UntypedExpr( new NameExpr( "?<?") ); 135 cond->get_args().push_back( index->clone() ); 136 cond->get_args().push_back( dimension->clone() ); 137 138 std::list< Expression * > args = makeInitList( init ); 139 callExpr->get_args().splice( callExpr->get_args().end(), args ); 140 141 *out++ = new IfStmt( noLabels, cond, new ExprStmt( noLabels, callExpr ), NULL ); 142 143 UntypedExpr * increment = new UntypedExpr( new NameExpr( "++?" ) ); 144 increment->get_args().push_back( new AddressExpr( index->clone() ) ); 145 *out++ = new ExprStmt( noLabels, increment ); 146 } 147 148 template< typename OutIterator > 149 void build( UntypedExpr * callExpr, InitExpander::IndexList::iterator idx, InitExpander::IndexList::iterator idxEnd, Initializer * init, OutIterator out ) { 150 if ( idx == idxEnd ) return; 151 Expression * index = *idx++; 152 assert( idx != idxEnd ); 153 Expression * dimension = *idx++; 154 155 // xxx - may want to eventually issue a warning here if we can detect 156 // that the number of elements exceeds to dimension of the array 157 if ( idx == idxEnd ) { 158 if ( ListInit * listInit = dynamic_cast< ListInit * >( init ) ) { 159 for ( Initializer * init : *listInit ) { 160 buildCallExpr( callExpr->clone(), index, dimension, init, out ); 161 } 162 } else { 163 buildCallExpr( callExpr->clone(), index, dimension, init, out ); 164 } 165 } else { 166 std::list< Statement * > branches; 167 168 unsigned long cond = 0; 169 ListInit * listInit = dynamic_cast< ListInit * >( init ); 170 if ( ! listInit ) { 171 // xxx - this shouldn't be an error, but need a way to 172 // terminate without creating output, so should catch this error 173 throw SemanticError( "unbalanced list initializers" ); 174 } 175 176 static UniqueName targetLabel( "L__autogen__" ); 177 Label switchLabel( targetLabel.newName(), 0, std::list< Attribute * >{ new Attribute("unused") } ); 178 for ( Initializer * init : *listInit ) { 179 Expression * condition; 180 // check for designations 181 // if ( init-> ) { 182 condition = new ConstantExpr( Constant::from_ulong( cond ) ); 183 ++cond; 184 // } else { 185 // condition = // ... take designation 186 // cond = // ... take designation+1 187 // } 188 std::list< Statement * > stmts; 189 build( callExpr, idx, idxEnd, init, back_inserter( stmts ) ); 190 stmts.push_back( new BranchStmt( noLabels, switchLabel, BranchStmt::Break ) ); 191 CaseStmt * caseStmt = new CaseStmt( noLabels, condition, stmts ); 192 branches.push_back( caseStmt ); 193 } 194 *out++ = new SwitchStmt( noLabels, index->clone(), branches ); 195 *out++ = new NullStmt( std::list<Label>{ switchLabel } ); 196 } 197 } 198 } 199 200 // if array came with an initializer list: initialize each element 201 // may have more initializers than elements in the array - need to check at each index that 202 // we haven't exceeded size. 203 // may have fewer initializers than elements in the array - need to default construct 204 // remaining elements. 205 // To accomplish this, generate switch statement, consuming all of expander's elements 206 Statement * InitImpl::buildListInit( UntypedExpr * dst, std::list< Expression * > & indices ) { 207 if ( ! init ) return NULL; 208 CompoundStmt * block = new CompoundStmt( noLabels ); 209 build( dst, indices.begin(), indices.end(), init, back_inserter( block->get_kids() ) ); 210 if ( block->get_kids().empty() ) { 211 delete block; 212 return NULL; 213 } else { 214 init = NULL; // init was consumed in creating the list init 215 return block; 216 } 217 } 218 219 Statement * ExprImpl::buildListInit( UntypedExpr * dst, std::list< Expression * > & indices ) { 220 return NULL; 221 } 222 223 Statement * InitExpander::buildListInit( UntypedExpr * dst ) { 224 return expander->buildListInit( dst, indices ); 225 } 226 55 227 bool tryConstruct( ObjectDecl * objDecl ) { 56 228 return ! LinkageSpec::isBuiltin( objDecl->get_linkage() ) && 57 229 (objDecl->get_init() == NULL || 58 230 ( objDecl->get_init() != NULL && objDecl->get_init()->get_maybeConstructed() )) && 59 ! isDesignated( objDecl->get_init() ); 231 ! isDesignated( objDecl->get_init() ) 232 && objDecl->get_storageClass() != DeclarationNode::Extern; 233 } 234 235 class CallFinder : public Visitor { 236 public: 237 typedef Visitor Parent; 238 CallFinder( const std::list< std::string > & names ) : names( names ) {} 239 240 virtual void visit( ApplicationExpr * appExpr ) { 241 handleCallExpr( appExpr ); 242 } 243 244 virtual void visit( UntypedExpr * untypedExpr ) { 245 handleCallExpr( untypedExpr ); 246 } 247 248 std::list< Expression * > * matches; 249 private: 250 const std::list< std::string > names; 251 252 template< typename CallExpr > 253 void handleCallExpr( CallExpr * expr ) { 254 Parent::visit( expr ); 255 std::string fname = getFunctionName( expr ); 256 if ( std::find( names.begin(), names.end(), fname ) != names.end() ) { 257 matches->push_back( expr ); 258 } 259 } 260 }; 261 262 void collectCtorDtorCalls( Statement * stmt, std::list< Expression * > & matches ) { 263 static CallFinder finder( std::list< std::string >{ "?{}", "^?{}" } ); 264 finder.matches = &matches; 265 maybeAccept( stmt, finder ); 60 266 } 61 267 62 268 Expression * getCtorDtorCall( Statement * stmt ) { 63 if ( stmt == NULL ) return NULL; 64 if ( ExprStmt * exprStmt = dynamic_cast< ExprStmt * >( stmt ) ) { 65 return exprStmt->get_expr(); 66 } else if ( CompoundStmt * compoundStmt = dynamic_cast< CompoundStmt * >( stmt ) ) { 67 // could also be a compound statement with a loop, in the case of an array 68 if( compoundStmt->get_kids().size() == 2 ) { 69 // loop variable and loop 70 ForStmt * forStmt = dynamic_cast< ForStmt * >( compoundStmt->get_kids().back() ); 71 assert( forStmt && forStmt->get_body() ); 72 return getCtorDtorCall( forStmt->get_body() ); 73 } else if ( compoundStmt->get_kids().size() == 1 ) { 74 // should be the call statement, but in any case there's only one option 75 return getCtorDtorCall( compoundStmt->get_kids().front() ); 76 } else { 77 assert( false && "too many statements in compoundStmt for getCtorDtorCall" ); 78 } 79 } if ( ImplicitCtorDtorStmt * impCtorDtorStmt = dynamic_cast< ImplicitCtorDtorStmt * > ( stmt ) ) { 80 return getCtorDtorCall( impCtorDtorStmt->get_callStmt() ); 81 } else { 82 // should never get here 83 assert( false && "encountered unknown call statement" ); 84 } 85 } 86 87 bool isInstrinsicSingleArgCallStmt( Statement * stmt ) { 88 Expression * callExpr = getCtorDtorCall( stmt ); 89 if ( ! callExpr ) return false; 90 ApplicationExpr * appExpr = dynamic_cast< ApplicationExpr * >( callExpr ); 91 assert( appExpr ); 92 VariableExpr * function = dynamic_cast< VariableExpr * >( appExpr->get_function() ); 269 std::list< Expression * > matches; 270 collectCtorDtorCalls( stmt, matches ); 271 assert( matches.size() <= 1 ); 272 return matches.size() == 1 ? matches.front() : NULL; 273 } 274 275 namespace { 276 VariableExpr * getCalledFunction( ApplicationExpr * appExpr ) { 277 assert( appExpr ); 278 // xxx - it's possible this can be other things, e.g. MemberExpr, so this is insufficient 279 return dynamic_cast< VariableExpr * >( appExpr->get_function() ); 280 } 281 } 282 283 ApplicationExpr * isIntrinsicCallExpr( Expression * expr ) { 284 ApplicationExpr * appExpr = dynamic_cast< ApplicationExpr * >( expr ); 285 if ( ! appExpr ) return NULL; 286 VariableExpr * function = getCalledFunction( appExpr ); 93 287 assert( function ); 94 288 // check for Intrinsic only - don't want to remove all overridable ctor/dtors because autogenerated ctor/dtor 95 289 // will call all member dtors, and some members may have a user defined dtor. 96 FunctionType * funcType = GenPoly::getFunctionType( function->get_var()->get_type() ); 97 assert( funcType ); 98 return function->get_var()->get_linkage() == LinkageSpec::Intrinsic && funcType->get_parameters().size() == 1; 290 return function->get_var()->get_linkage() == LinkageSpec::Intrinsic ? appExpr : NULL; 291 } 292 293 bool isIntrinsicSingleArgCallStmt( Statement * stmt ) { 294 std::list< Expression * > callExprs; 295 collectCtorDtorCalls( stmt, callExprs ); 296 // if ( callExprs.empty() ) return false; // xxx - do I still need this check? 297 return std::all_of( callExprs.begin(), callExprs.end(), []( Expression * callExpr ){ 298 if ( ApplicationExpr * appExpr = isIntrinsicCallExpr( callExpr ) ) { 299 assert( ! appExpr->get_function()->get_results().empty() ); 300 FunctionType *funcType = GenPoly::getFunctionType( appExpr->get_function()->get_results().front() ); 301 assert( funcType ); 302 return funcType->get_parameters().size() == 1; 303 } 304 return false; 305 }); 99 306 } 100 307 … … 160 367 else return NULL; 161 368 } 369 370 class ConstExprChecker : public Visitor { 371 public: 372 ConstExprChecker() : isConstExpr( true ) {} 373 374 virtual void visit( ApplicationExpr *applicationExpr ) { isConstExpr = false; } 375 virtual void visit( UntypedExpr *untypedExpr ) { isConstExpr = false; } 376 virtual void visit( NameExpr *nameExpr ) { isConstExpr = false; } 377 virtual void visit( CastExpr *castExpr ) { isConstExpr = false; } 378 virtual void visit( LabelAddressExpr *labAddressExpr ) { isConstExpr = false; } 379 virtual void visit( UntypedMemberExpr *memberExpr ) { isConstExpr = false; } 380 virtual void visit( MemberExpr *memberExpr ) { isConstExpr = false; } 381 virtual void visit( VariableExpr *variableExpr ) { isConstExpr = false; } 382 virtual void visit( ConstantExpr *constantExpr ) { /* bottom out */ } 383 // these might be okay? 384 // virtual void visit( SizeofExpr *sizeofExpr ); 385 // virtual void visit( AlignofExpr *alignofExpr ); 386 // virtual void visit( UntypedOffsetofExpr *offsetofExpr ); 387 // virtual void visit( OffsetofExpr *offsetofExpr ); 388 // virtual void visit( OffsetPackExpr *offsetPackExpr ); 389 // virtual void visit( AttrExpr *attrExpr ); 390 // virtual void visit( CommaExpr *commaExpr ); 391 // virtual void visit( LogicalExpr *logicalExpr ); 392 // virtual void visit( ConditionalExpr *conditionalExpr ); 393 virtual void visit( TupleExpr *tupleExpr ) { isConstExpr = false; } 394 virtual void visit( SolvedTupleExpr *tupleExpr ) { isConstExpr = false; } 395 virtual void visit( TypeExpr *typeExpr ) { isConstExpr = false; } 396 virtual void visit( AsmExpr *asmExpr ) { isConstExpr = false; } 397 virtual void visit( UntypedValofExpr *valofExpr ) { isConstExpr = false; } 398 virtual void visit( CompoundLiteralExpr *compLitExpr ) { isConstExpr = false; } 399 400 bool isConstExpr; 401 }; 402 403 bool isConstExpr( Expression * expr ) { 404 if ( expr ) { 405 ConstExprChecker checker; 406 expr->accept( checker ); 407 return checker.isConstExpr; 408 } 409 return true; 410 } 411 412 bool isConstExpr( Initializer * init ) { 413 if ( init ) { 414 ConstExprChecker checker; 415 init->accept( checker ); 416 return checker.isConstExpr; 417 } // if 418 // for all intents and purposes, no initializer means const expr 419 return true; 420 } 421 162 422 } -
src/InitTweak/InitTweak.h
r950f7a7 r7527e63 26 26 // helper functions for initialization 27 27 namespace InitTweak { 28 29 28 /// transform Initializer into an argument list that can be passed to a call expression 29 std::list< Expression * > makeInitList( Initializer * init ); 30 30 31 32 31 /// True if the resolver should try to construct objDecl 32 bool tryConstruct( ObjectDecl * objDecl ); 33 33 34 35 34 /// True if the Initializer contains designations 35 bool isDesignated( Initializer * init ); 36 36 37 /// True if stmt is a call statement where the function called is intrinsic and takes one parameter. 38 /// Intended to be used for default ctor/dtor calls, but might have use elsewhere. 39 /// Currently has assertions that make it less than fully general. 40 bool isInstrinsicSingleArgCallStmt( Statement * expr ); 37 /// Non-Null if expr is a call expression whose target function is intrinsic 38 ApplicationExpr * isIntrinsicCallExpr( Expression * expr ); 41 39 42 /// get the Ctor/Dtor call expression from a Statement that looks like a generated ctor/dtor call 43 Expression * getCtorDtorCall( Statement * stmt ); 40 /// True if stmt is a call statement where the function called is intrinsic and takes one parameter. 41 /// Intended to be used for default ctor/dtor calls, but might have use elsewhere. 42 /// Currently has assertions that make it less than fully general. 43 bool isIntrinsicSingleArgCallStmt( Statement * expr ); 44 44 45 /// returns the name of the function being called 46 std::string getFunctionName( Expression * expr);45 /// get all Ctor/Dtor call expressions from a Statement 46 void collectCtorDtorCalls( Statement * stmt, std::list< Expression * > & matches ); 47 47 48 /// returns the argument to a call expression in position N indexed from 0 49 Expression *& getCallArg( Expression * callExpr, unsigned int pos);48 /// get the Ctor/Dtor call expression from a Statement that looks like a generated ctor/dtor call 49 Expression * getCtorDtorCall( Statement * stmt ); 50 50 51 /// returns the base type of a PointerType or ArrayType, else returns NULL 52 Type * getPointerBase( Type *);51 /// returns the name of the function being called 52 std::string getFunctionName( Expression * expr ); 53 53 54 /// returns the argument if it is a PointerType or ArrayType, else returns NULL 55 Type * isPointerType( Type * ); 54 /// returns the argument to a call expression in position N indexed from 0 55 Expression *& getCallArg( Expression * callExpr, unsigned int pos ); 56 57 /// returns the base type of a PointerType or ArrayType, else returns NULL 58 Type * getPointerBase( Type * ); 59 60 /// returns the argument if it is a PointerType or ArrayType, else returns NULL 61 Type * isPointerType( Type * ); 62 63 /// returns true if expr is trivially a compile-time constant 64 bool isConstExpr( Expression * expr ); 65 bool isConstExpr( Initializer * init ); 66 67 class InitExpander { 68 public: 69 // expand by stepping through init to get each list of arguments 70 InitExpander( Initializer * init ); 71 72 // always expand to expr 73 InitExpander( Expression * expr ); 74 75 // iterator-like interface 76 std::list< Expression * > operator*(); 77 InitExpander & operator++(); 78 79 // builds statement which has the same semantics as a C-style list initializer 80 // (for array initializers) using callExpr as the base expression to perform initialization 81 Statement * buildListInit( UntypedExpr * callExpr ); 82 void addArrayIndex( Expression * index, Expression * dimension ); 83 void clearArrayIndices(); 84 85 class ExpanderImpl; 86 private: 87 std::shared_ptr< ExpanderImpl > expander; 88 std::list< Expression * > cur; 89 90 // invariant: list of size 2N (elements come in pairs [index, dimension]) 91 typedef std::list< Expression * > IndexList; 92 IndexList indices; 93 }; 56 94 } // namespace 57 95 -
src/Makefile.in
r950f7a7 r7527e63 108 108 ControlStruct/driver_cfa_cpp-LabelFixer.$(OBJEXT) \ 109 109 ControlStruct/driver_cfa_cpp-MLEMutator.$(OBJEXT) \ 110 ControlStruct/driver_cfa_cpp-CaseRangeMutator.$(OBJEXT) \111 110 ControlStruct/driver_cfa_cpp-Mutate.$(OBJEXT) \ 112 111 ControlStruct/driver_cfa_cpp-ForExprMutator.$(OBJEXT) \ … … 122 121 GenPoly/driver_cfa_cpp-FindFunction.$(OBJEXT) \ 123 122 GenPoly/driver_cfa_cpp-DeclMutator.$(OBJEXT) \ 123 GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT) \ 124 124 InitTweak/driver_cfa_cpp-GenInit.$(OBJEXT) \ 125 125 InitTweak/driver_cfa_cpp-FixInit.$(OBJEXT) \ … … 372 372 Common/SemanticError.cc Common/UniqueName.cc \ 373 373 ControlStruct/LabelGenerator.cc ControlStruct/LabelFixer.cc \ 374 ControlStruct/MLEMutator.cc ControlStruct/ CaseRangeMutator.cc \375 ControlStruct/ Mutate.cc ControlStruct/ForExprMutator.cc \374 ControlStruct/MLEMutator.cc ControlStruct/Mutate.cc \ 375 ControlStruct/ForExprMutator.cc \ 376 376 ControlStruct/LabelTypeChecker.cc Designators/Processor.cc \ 377 377 GenPoly/Box.cc GenPoly/GenPoly.cc GenPoly/PolyMutator.cc \ 378 378 GenPoly/ScrubTyVars.cc GenPoly/Lvalue.cc GenPoly/Specialize.cc \ 379 379 GenPoly/CopyParams.cc GenPoly/FindFunction.cc \ 380 GenPoly/DeclMutator.cc InitTweak/GenInit.cc \381 InitTweak/ FixInit.cc InitTweak/FixGlobalInit.cc \382 InitTweak/ InitTweak.cc Parser/parser.yy Parser/lex.ll\383 Parser/ TypedefTable.cc Parser/ParseNode.cc \384 Parser/ DeclarationNode.cc Parser/ExpressionNode.cc \385 Parser/ StatementNode.cc Parser/InitializerNode.cc \386 Parser/ TypeData.cc Parser/LinkageSpec.cc \387 Parser/ parseutility.cc Parser/Parser.cc \380 GenPoly/DeclMutator.cc GenPoly/InstantiateGeneric.cc \ 381 InitTweak/GenInit.cc InitTweak/FixInit.cc \ 382 InitTweak/FixGlobalInit.cc InitTweak/InitTweak.cc \ 383 Parser/parser.yy Parser/lex.ll Parser/TypedefTable.cc \ 384 Parser/ParseNode.cc Parser/DeclarationNode.cc \ 385 Parser/ExpressionNode.cc Parser/StatementNode.cc \ 386 Parser/InitializerNode.cc Parser/TypeData.cc \ 387 Parser/LinkageSpec.cc Parser/parseutility.cc Parser/Parser.cc \ 388 388 ResolvExpr/AlternativeFinder.cc ResolvExpr/Alternative.cc \ 389 389 ResolvExpr/Unify.cc ResolvExpr/PtrsAssignable.cc \ … … 542 542 ControlStruct/$(DEPDIR)/$(am__dirstamp) 543 543 ControlStruct/driver_cfa_cpp-MLEMutator.$(OBJEXT): \ 544 ControlStruct/$(am__dirstamp) \545 ControlStruct/$(DEPDIR)/$(am__dirstamp)546 ControlStruct/driver_cfa_cpp-CaseRangeMutator.$(OBJEXT): \547 544 ControlStruct/$(am__dirstamp) \ 548 545 ControlStruct/$(DEPDIR)/$(am__dirstamp) … … 589 586 GenPoly/driver_cfa_cpp-DeclMutator.$(OBJEXT): GenPoly/$(am__dirstamp) \ 590 587 GenPoly/$(DEPDIR)/$(am__dirstamp) 588 GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT): \ 589 GenPoly/$(am__dirstamp) GenPoly/$(DEPDIR)/$(am__dirstamp) 591 590 InitTweak/$(am__dirstamp): 592 591 @$(MKDIR_P) InitTweak … … 820 819 -rm -f Common/driver_cfa_cpp-SemanticError.$(OBJEXT) 821 820 -rm -f Common/driver_cfa_cpp-UniqueName.$(OBJEXT) 822 -rm -f ControlStruct/driver_cfa_cpp-CaseRangeMutator.$(OBJEXT)823 821 -rm -f ControlStruct/driver_cfa_cpp-ForExprMutator.$(OBJEXT) 824 822 -rm -f ControlStruct/driver_cfa_cpp-LabelFixer.$(OBJEXT) … … 833 831 -rm -f GenPoly/driver_cfa_cpp-FindFunction.$(OBJEXT) 834 832 -rm -f GenPoly/driver_cfa_cpp-GenPoly.$(OBJEXT) 833 -rm -f GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT) 835 834 -rm -f GenPoly/driver_cfa_cpp-Lvalue.$(OBJEXT) 836 835 -rm -f GenPoly/driver_cfa_cpp-PolyMutator.$(OBJEXT) … … 930 929 @AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/driver_cfa_cpp-SemanticError.Po@am__quote@ 931 930 @AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/driver_cfa_cpp-UniqueName.Po@am__quote@ 932 @AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/driver_cfa_cpp-CaseRangeMutator.Po@am__quote@933 931 @AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/driver_cfa_cpp-ForExprMutator.Po@am__quote@ 934 932 @AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/driver_cfa_cpp-LabelFixer.Po@am__quote@ … … 943 941 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-FindFunction.Po@am__quote@ 944 942 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-GenPoly.Po@am__quote@ 943 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Po@am__quote@ 945 944 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-Lvalue.Po@am__quote@ 946 945 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-PolyMutator.Po@am__quote@ … … 1212 1211 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o ControlStruct/driver_cfa_cpp-MLEMutator.obj `if test -f 'ControlStruct/MLEMutator.cc'; then $(CYGPATH_W) 'ControlStruct/MLEMutator.cc'; else $(CYGPATH_W) '$(srcdir)/ControlStruct/MLEMutator.cc'; fi` 1213 1212 1214 ControlStruct/driver_cfa_cpp-CaseRangeMutator.o: ControlStruct/CaseRangeMutator.cc1215 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT ControlStruct/driver_cfa_cpp-CaseRangeMutator.o -MD -MP -MF ControlStruct/$(DEPDIR)/driver_cfa_cpp-CaseRangeMutator.Tpo -c -o ControlStruct/driver_cfa_cpp-CaseRangeMutator.o `test -f 'ControlStruct/CaseRangeMutator.cc' || echo '$(srcdir)/'`ControlStruct/CaseRangeMutator.cc1216 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) ControlStruct/$(DEPDIR)/driver_cfa_cpp-CaseRangeMutator.Tpo ControlStruct/$(DEPDIR)/driver_cfa_cpp-CaseRangeMutator.Po1217 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ControlStruct/CaseRangeMutator.cc' object='ControlStruct/driver_cfa_cpp-CaseRangeMutator.o' libtool=no @AMDEPBACKSLASH@1218 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@1219 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o ControlStruct/driver_cfa_cpp-CaseRangeMutator.o `test -f 'ControlStruct/CaseRangeMutator.cc' || echo '$(srcdir)/'`ControlStruct/CaseRangeMutator.cc1220 1221 ControlStruct/driver_cfa_cpp-CaseRangeMutator.obj: ControlStruct/CaseRangeMutator.cc1222 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT ControlStruct/driver_cfa_cpp-CaseRangeMutator.obj -MD -MP -MF ControlStruct/$(DEPDIR)/driver_cfa_cpp-CaseRangeMutator.Tpo -c -o ControlStruct/driver_cfa_cpp-CaseRangeMutator.obj `if test -f 'ControlStruct/CaseRangeMutator.cc'; then $(CYGPATH_W) 'ControlStruct/CaseRangeMutator.cc'; else $(CYGPATH_W) '$(srcdir)/ControlStruct/CaseRangeMutator.cc'; fi`1223 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) ControlStruct/$(DEPDIR)/driver_cfa_cpp-CaseRangeMutator.Tpo ControlStruct/$(DEPDIR)/driver_cfa_cpp-CaseRangeMutator.Po1224 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ControlStruct/CaseRangeMutator.cc' object='ControlStruct/driver_cfa_cpp-CaseRangeMutator.obj' libtool=no @AMDEPBACKSLASH@1225 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@1226 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o ControlStruct/driver_cfa_cpp-CaseRangeMutator.obj `if test -f 'ControlStruct/CaseRangeMutator.cc'; then $(CYGPATH_W) 'ControlStruct/CaseRangeMutator.cc'; else $(CYGPATH_W) '$(srcdir)/ControlStruct/CaseRangeMutator.cc'; fi`1227 1228 1213 ControlStruct/driver_cfa_cpp-Mutate.o: ControlStruct/Mutate.cc 1229 1214 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT ControlStruct/driver_cfa_cpp-Mutate.o -MD -MP -MF ControlStruct/$(DEPDIR)/driver_cfa_cpp-Mutate.Tpo -c -o ControlStruct/driver_cfa_cpp-Mutate.o `test -f 'ControlStruct/Mutate.cc' || echo '$(srcdir)/'`ControlStruct/Mutate.cc … … 1407 1392 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1408 1393 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-DeclMutator.obj `if test -f 'GenPoly/DeclMutator.cc'; then $(CYGPATH_W) 'GenPoly/DeclMutator.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/DeclMutator.cc'; fi` 1394 1395 GenPoly/driver_cfa_cpp-InstantiateGeneric.o: GenPoly/InstantiateGeneric.cc 1396 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-InstantiateGeneric.o -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.o `test -f 'GenPoly/InstantiateGeneric.cc' || echo '$(srcdir)/'`GenPoly/InstantiateGeneric.cc 1397 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Po 1398 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='GenPoly/InstantiateGeneric.cc' object='GenPoly/driver_cfa_cpp-InstantiateGeneric.o' libtool=no @AMDEPBACKSLASH@ 1399 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1400 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.o `test -f 'GenPoly/InstantiateGeneric.cc' || echo '$(srcdir)/'`GenPoly/InstantiateGeneric.cc 1401 1402 GenPoly/driver_cfa_cpp-InstantiateGeneric.obj: GenPoly/InstantiateGeneric.cc 1403 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(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` 1404 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Po 1405 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='GenPoly/InstantiateGeneric.cc' object='GenPoly/driver_cfa_cpp-InstantiateGeneric.obj' libtool=no @AMDEPBACKSLASH@ 1406 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1407 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(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` 1409 1408 1410 1409 InitTweak/driver_cfa_cpp-GenInit.o: InitTweak/GenInit.cc -
src/Parser/DeclarationNode.cc
r950f7a7 r7527e63 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 12 20:49:31201613 // Update Count : 1 6412 // Last Modified On : Mon Aug 15 20:48:55 2016 13 // Update Count : 178 14 14 // 15 15 … … 49 49 newnode->name = name; 50 50 newnode->storageClasses = storageClasses; 51 newnode->bitfieldWidth = maybeClone( bitfieldWidth );51 newnode->bitfieldWidth = bitfieldWidth; 52 52 newnode->hasEllipsis = hasEllipsis; 53 53 newnode->initializer = initializer; 54 newnode-> next = maybeClone( next);54 newnode->set_next( maybeClone( get_next() ) ); 55 55 newnode->linkage = linkage; 56 56 return newnode; … … 283 283 newnode->type->array->dimension = size; 284 284 newnode->type->array->isStatic = isStatic; 285 if ( newnode->type->array->dimension == 0 || dynamic_cast< ConstantNode *>( newnode->type->array->dimension) ) {285 if ( newnode->type->array->dimension == 0 || dynamic_cast< ConstantExpr * >( newnode->type->array->dimension->build() ) ) { 286 286 newnode->type->array->isVarLen = false; 287 287 } else { … … 469 469 470 470 // there may be typedefs chained onto the type 471 if ( o->get_ link() ) {472 set_l ink( o->get_link()->clone() );471 if ( o->get_next() ) { 472 set_last( o->get_next()->clone() ); 473 473 } // if 474 474 } // if … … 756 756 DeclarationNode *DeclarationNode::appendList( DeclarationNode *node ) { 757 757 if ( node != 0 ) { 758 set_l ink( node );758 set_last( node ); 759 759 } // if 760 760 return this; … … 775 775 void buildList( const DeclarationNode *firstNode, std::list< Declaration * > &outputList ) { 776 776 SemanticError errors; 777 std::back_insert_iterator< std::list< Declaration * > > out( outputList );777 std::back_insert_iterator< std::list< Declaration * > > out( outputList ); 778 778 const DeclarationNode *cur = firstNode; 779 779 while ( cur ) { … … 793 793 errors.append( e ); 794 794 } // try 795 cur = dynamic_cast< DeclarationNode *>( cur->get_link() );795 cur = dynamic_cast< DeclarationNode * >( cur->get_next() ); 796 796 } // while 797 797 if ( ! errors.isEmpty() ) { … … 800 800 } 801 801 802 void buildList( const DeclarationNode *firstNode, std::list< DeclarationWithType * > &outputList ) {802 void buildList( const DeclarationNode *firstNode, std::list< DeclarationWithType * > &outputList ) { 803 803 SemanticError errors; 804 std::back_insert_iterator< std::list< DeclarationWithType * > > out( outputList );804 std::back_insert_iterator< std::list< DeclarationWithType * > > out( outputList ); 805 805 const DeclarationNode *cur = firstNode; 806 806 while ( cur ) { … … 816 816 Declaration *decl = cur->build(); 817 817 if ( decl ) { 818 if ( DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( decl ) ) {818 if ( DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( decl ) ) { 819 819 *out++ = dwt; 820 } else if ( StructDecl *agg = dynamic_cast< StructDecl * >( decl ) ) {820 } else if ( StructDecl *agg = dynamic_cast< StructDecl * >( decl ) ) { 821 821 StructInstType *inst = new StructInstType( Type::Qualifiers(), agg->get_name() ); 822 822 *out++ = new ObjectDecl( "", DeclarationNode::NoStorageClass, linkage, 0, inst, 0 ); 823 823 delete agg; 824 } else if ( UnionDecl *agg = dynamic_cast< UnionDecl * >( decl ) ) {824 } else if ( UnionDecl *agg = dynamic_cast< UnionDecl * >( decl ) ) { 825 825 UnionInstType *inst = new UnionInstType( Type::Qualifiers(), agg->get_name() ); 826 826 *out++ = new ObjectDecl( "", DeclarationNode::NoStorageClass, linkage, 0, inst, 0 ); … … 830 830 errors.append( e ); 831 831 } // try 832 cur = dynamic_cast< DeclarationNode * >( cur->get_link() );832 cur = dynamic_cast< DeclarationNode * >( cur->get_next() ); 833 833 } // while 834 834 if ( ! errors.isEmpty() ) { … … 837 837 } 838 838 839 void buildTypeList( const DeclarationNode *firstNode, std::list< Type * > &outputList ) {839 void buildTypeList( const DeclarationNode *firstNode, std::list< Type * > &outputList ) { 840 840 SemanticError errors; 841 std::back_insert_iterator< std::list< Type * > > out( outputList );841 std::back_insert_iterator< std::list< Type * > > out( outputList ); 842 842 const DeclarationNode *cur = firstNode; 843 843 while ( cur ) { … … 847 847 errors.append( e ); 848 848 } // try 849 cur = dynamic_cast< DeclarationNode * >( cur->get_link() );849 cur = dynamic_cast< DeclarationNode * >( cur->get_next() ); 850 850 } // while 851 851 if ( ! errors.isEmpty() ) { -
src/Parser/ExpressionNode.cc
r950f7a7 r7527e63 10 10 // Created On : Sat May 16 13:17:07 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Jul 5 13:41:55201613 // Update Count : 32012 // Last Modified On : Tue Aug 16 00:09:20 2016 13 // Update Count : 495 14 14 // 15 15 16 16 #include <cassert> 17 17 #include <cctype> 18 #include <climits> 19 #include <cstdio> 18 20 #include <algorithm> 19 21 #include <sstream> 20 #include <cstdio>21 22 22 23 #include "ParseNode.h" … … 31 32 using namespace std; 32 33 33 ExpressionNode::ExpressionNode() : ParseNode() {} 34 35 ExpressionNode::ExpressionNode( const string *name ) : ParseNode( name ) {} 36 37 ExpressionNode::ExpressionNode( const ExpressionNode &other ) : ParseNode( other.name ), extension( other.extension ) { 38 if ( other.argName ) { 39 argName = other.argName->clone(); 40 } else { 41 argName = 0; 42 } // if 43 } 44 45 ExpressionNode * ExpressionNode::set_argName( const std::string *aName ) { 46 argName = new VarRefNode( aName ); 47 return this; 48 } 49 50 ExpressionNode * ExpressionNode::set_argName( ExpressionNode *aDesignator ) { 51 argName = aDesignator; 52 return this; 53 } 54 55 void ExpressionNode::printDesignation( std::ostream &os, int indent ) const { 56 if ( argName ) { 57 os << string( indent, ' ' ) << "(designated by: "; 58 argName->printOneLine( os, indent ); 59 os << ")" << std::endl; 60 } // if 61 } 34 ExpressionNode::ExpressionNode( const ExpressionNode &other ) : ParseNode( other.get_name() ), extension( other.extension ) {} 62 35 63 36 //############################################################################## 64 37 65 NullExprNode::NullExprNode() {} 66 67 NullExprNode *NullExprNode::clone() const { 68 return new NullExprNode(); 69 } 70 71 void NullExprNode::print( std::ostream & os, int indent ) const { 72 printDesignation( os ); 73 os << "null expression"; 74 } 75 76 void NullExprNode::printOneLine( std::ostream & os, int indent ) const { 77 printDesignation( os ); 78 os << "null"; 79 } 80 81 Expression *NullExprNode::build() const { 82 return 0; 83 } 84 85 CommaExprNode *ExpressionNode::add_to_list( ExpressionNode *exp ) { 86 return new CommaExprNode( this, exp ); 87 } 88 89 //############################################################################## 90 91 ConstantNode::ConstantNode( ConstantExpr *expr ) : expr( expr ) { 92 } // ConstantNode::ConstantNode 93 94 ConstantNode *ConstantNode::appendstr( const std::string *newValue ) { 95 assert( newValue != 0 ); 96 97 string value = expr->get_constant()->get_value(); 98 99 // "abc" "def" "ghi" => "abcdefghi", remove new text from quotes and insert before last quote in old string. 100 value.insert( value.length() - 1, newValue->substr( 1, newValue->length() - 2 ) ); 101 expr->get_constant()->set_value( value ); 102 103 delete newValue; // allocated by lexer 104 return this; 105 } 106 107 void ConstantNode::printOneLine( std::ostream &os, int indent ) const { 108 // os << string( indent, ' ' ); 109 // printDesignation( os ); 110 111 // switch ( type ) { 112 // case Integer: 113 // case Float: 114 // os << value ; 115 // break; 116 // case Character: 117 // os << "'" << value << "'"; 118 // break; 119 // case String: 120 // os << '"' << value << '"'; 121 // break; 122 // } // switch 123 124 // os << ' '; 125 } 126 127 void ConstantNode::print( std::ostream &os, int indent ) const { 128 printOneLine( os, indent ); 129 os << endl; 130 } 131 132 Expression *ConstantNode::build() const { 133 return expr->clone(); 134 } 135 136 //############################################################################## 137 138 VarRefNode::VarRefNode() : isLabel( false ) {} 139 140 VarRefNode::VarRefNode( const string *name_, bool labelp ) : ExpressionNode( name_ ), isLabel( labelp ) {} 141 142 VarRefNode::VarRefNode( const VarRefNode &other ) : ExpressionNode( other ), isLabel( other.isLabel ) { 143 } 144 145 Expression *VarRefNode::build() const { 146 return new NameExpr( get_name(), maybeBuild< Expression >( get_argName() ) ); 147 } 148 149 void VarRefNode::printOneLine( std::ostream &os, int indent ) const { 150 printDesignation( os ); 151 os << get_name() << ' '; 152 } 153 154 void VarRefNode::print( std::ostream &os, int indent ) const { 155 printDesignation( os ); 156 os << string( indent, ' ' ) << "Referencing: "; 157 os << "Variable: " << get_name(); 158 os << endl; 159 } 160 161 //############################################################################## 162 163 DesignatorNode::DesignatorNode( ExpressionNode *expr, bool isArrayIndex ) : isArrayIndex( isArrayIndex ) { 164 set_argName( expr ); 165 assert( get_argName() ); 166 167 if ( ! isArrayIndex ) { 168 if ( VarRefNode * var = dynamic_cast< VarRefNode * >( expr ) ) { 169 170 stringstream ss( var->get_name() ); 171 double value; 172 if ( ss >> value ) { 173 // this is a floating point constant. It MUST be 174 // ".0" or ".1", otherwise the program is invalid 175 if ( ! (var->get_name() == ".0" || var->get_name() == ".1") ) { 176 throw SemanticError( "invalid designator name: " + var->get_name() ); 177 } // if 178 var->set_name( var->get_name().substr(1) ); 38 // Difficult to separate extra parts of constants during lexing because actions are not allow in the middle of patterns: 39 // 40 // prefix action constant action suffix 41 // 42 // Alternatively, breaking a pattern using BEGIN does not work if the following pattern can be empty: 43 // 44 // constant BEGIN CONT ... 45 // <CONT>(...)? BEGIN 0 ... // possible empty suffix 46 // 47 // because the CONT rule is NOT triggered if the pattern is empty. Hence, constants are reparsed here to determine their 48 // type. 49 50 static Type::Qualifiers emptyQualifiers; // no qualifiers on constants 51 52 static inline bool checkU( char c ) { return c == 'u' || c == 'U'; } 53 static inline bool checkL( char c ) { return c == 'l' || c == 'L'; } 54 static inline bool checkF( char c ) { return c == 'f' || c == 'F'; } 55 static inline bool checkD( char c ) { return c == 'd' || c == 'D'; } 56 static inline bool checkI( char c ) { return c == 'i' || c == 'I'; } 57 static inline bool checkX( char c ) { return c == 'x' || c == 'X'; } 58 59 Expression *build_constantInteger( std::string & str ) { 60 static const BasicType::Kind kind[2][3] = { 61 { BasicType::SignedInt, BasicType::LongSignedInt, BasicType::LongLongSignedInt }, 62 { BasicType::UnsignedInt, BasicType::LongUnsignedInt, BasicType::LongLongUnsignedInt }, 63 }; 64 bool dec = true, Unsigned = false; // decimal, unsigned constant 65 int size; // 0 => int, 1 => long, 2 => long long 66 unsigned long long v; // converted integral value 67 size_t last = str.length() - 1; // last character of constant 68 69 if ( str[0] == '0' ) { // octal/hex constant ? 70 dec = false; 71 if ( last != 0 && checkX( str[1] ) ) { // hex constant ? 72 sscanf( (char *)str.c_str(), "%llx", &v ); 73 //printf( "%llx %llu\n", v, v ); 74 } else { // octal constant 75 sscanf( (char *)str.c_str(), "%llo", &v ); 76 //printf( "%llo %llu\n", v, v ); 77 } // if 78 } else { // decimal constant ? 79 sscanf( (char *)str.c_str(), "%llu", &v ); 80 //printf( "%llu %llu\n", v, v ); 81 } // if 82 83 if ( v <= INT_MAX ) { // signed int 84 size = 0; 85 } else if ( v <= UINT_MAX && ! dec ) { // unsigned int 86 size = 0; 87 Unsigned = true; // unsigned 88 } else if ( v <= LONG_MAX ) { // signed long int 89 size = 1; 90 } else if ( v <= ULONG_MAX && ( ! dec || LONG_MAX == LLONG_MAX ) ) { // signed long int 91 size = 1; 92 Unsigned = true; // unsigned long int 93 } else if ( v <= LLONG_MAX ) { // signed long long int 94 size = 2; 95 } else { // unsigned long long int 96 size = 2; 97 Unsigned = true; // unsigned long long int 98 } // if 99 100 if ( checkU( str[last] ) ) { // suffix 'u' ? 101 Unsigned = true; 102 if ( last > 0 && checkL( str[last - 1] ) ) { // suffix 'l' ? 103 size = 1; 104 if ( last > 1 && checkL( str[last - 2] ) ) { // suffix 'll' ? 105 size = 2; 179 106 } // if 180 107 } // if 181 } // if 182 } 183 184 DesignatorNode::DesignatorNode( const DesignatorNode &other ) : ExpressionNode( other ), isArrayIndex( other.isArrayIndex ) { 185 } 186 187 class DesignatorFixer : public Mutator { 188 public: 189 virtual Expression* mutate( NameExpr *nameExpr ) { 190 if ( nameExpr->get_name() == "0" || nameExpr->get_name() == "1" ) { 191 Constant val( new BasicType( Type::Qualifiers(), BasicType::SignedInt ), nameExpr->get_name() ); 192 delete nameExpr; 193 return new ConstantExpr( val ); 194 } 195 return nameExpr; 196 } 197 }; 198 199 Expression *DesignatorNode::build() const { 200 Expression * ret = maybeBuild<Expression>(get_argName()); 201 202 if ( isArrayIndex ) { 203 // need to traverse entire structure and change any instances of 0 or 1 to 204 // ConstantExpr 205 DesignatorFixer fixer; 206 ret = ret->acceptMutator( fixer ); 207 } // if 208 209 return ret; 210 } 211 212 void DesignatorNode::printOneLine( std::ostream &os, int indent ) const { 213 if ( get_argName() ) { 214 if ( isArrayIndex ) { 215 os << "["; 216 get_argName()->printOneLine( os, indent ); 217 os << "]"; 108 } else if ( checkL( str[ last ] ) ) { // suffix 'l' ? 109 size = 1; 110 if ( last > 0 && checkL( str[last - 1] ) ) { // suffix 'll' ? 111 size = 2; 112 if ( last > 1 && checkU( str[last - 2] ) ) { // suffix 'u' ? 113 Unsigned = true; 114 } // if 218 115 } else { 219 os << "."; 220 get_argName()->printOneLine( os, indent ); 221 } 222 } // if 223 } 224 225 void DesignatorNode::print( std::ostream &os, int indent ) const { 226 if ( get_argName() ) { 227 if ( isArrayIndex ) { 228 os << "["; 229 get_argName()->print( os, indent ); 230 os << "]"; 231 } else { 232 os << "."; 233 get_argName()->print( os, indent ); 234 } 235 } // if 236 } 237 238 //############################################################################## 239 240 static const char *opName[] = { 241 "TupleC", "Comma", "TupleFieldSel", // "TuplePFieldSel", // n-adic 242 // triadic 243 "Cond", "NCond", 116 if ( last > 0 && checkU( str[last - 1] ) ) { // suffix 'u' ? 117 Unsigned = true; 118 } // if 119 } // if 120 } // if 121 122 return new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[Unsigned][size] ), str ) ); 123 } // build_constantInteger 124 125 Expression *build_constantFloat( std::string & str ) { 126 static const BasicType::Kind kind[2][3] = { 127 { BasicType::Float, BasicType::Double, BasicType::LongDouble }, 128 { BasicType::FloatComplex, BasicType::DoubleComplex, BasicType::LongDoubleComplex }, 129 }; 130 131 bool complx = false; // real, complex 132 int size = 1; // 0 => float, 1 => double (default), 2 => long double 133 // floating-point constant has minimum of 2 characters: 1. or .1 134 size_t last = str.length() - 1; 135 136 if ( checkI( str[last] ) ) { // imaginary ? 137 complx = true; 138 last -= 1; // backup one character 139 } // if 140 141 if ( checkF( str[last] ) ) { // float ? 142 size = 0; 143 } else if ( checkD( str[last] ) ) { // double ? 144 size = 1; 145 } else if ( checkL( str[last] ) ) { // long double ? 146 size = 2; 147 } // if 148 if ( ! complx && checkI( str[last - 1] ) ) { // imaginary ? 149 complx = true; 150 } // if 151 152 return new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[complx][size] ), str ) ); 153 } // build_constantFloat 154 155 Expression *build_constantChar( std::string & str ) { 156 return new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::Char ), str ) ); 157 } // build_constantChar 158 159 ConstantExpr *build_constantStr( std::string & str ) { 160 // string should probably be a primitive type 161 ArrayType *at = new ArrayType( emptyQualifiers, new BasicType( emptyQualifiers, BasicType::Char ), 162 new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::UnsignedInt ), 163 toString( str.size()+1-2 ) ) ), // +1 for '\0' and -2 for '"' 164 false, false ); 165 return new ConstantExpr( Constant( at, str ) ); 166 } // build_constantStr 167 168 NameExpr * build_varref( const string *name, bool labelp ) { 169 return new NameExpr( *name, nullptr ); 170 } 171 172 static const char *OperName[] = { 244 173 // diadic 245 "SizeOf", "AlignOf", "OffsetOf", " Attr", "?+?", "?-?", "?*?", "?/?", "?%?", "||", "&&",174 "SizeOf", "AlignOf", "OffsetOf", "?+?", "?-?", "?*?", "?/?", "?%?", "||", "&&", 246 175 "?|?", "?&?", "?^?", "Cast", "?<<?", "?>>?", "?<?", "?>?", "?<=?", "?>=?", "?==?", "?!=?", 247 176 "?=?", "?*=?", "?/=?", "?%=?", "?+=?", "?-=?", "?<<=?", "?>>=?", "?&=?", "?^=?", "?|=?", 248 "?[?]", " FieldSel", "PFieldSel", "Range",177 "?[?]", "...", 249 178 // monadic 250 179 "+?", "-?", "AddressOf", "*?", "!?", "~?", "++?", "?++", "--?", "?--", "&&" 251 180 }; 252 181 253 OperatorNode::OperatorNode( Type t ) : type( t ) {} 254 255 OperatorNode::OperatorNode( const OperatorNode &other ) : ExpressionNode( other ), type( other.type ) { 256 } 257 258 OperatorNode::~OperatorNode() {} 259 260 OperatorNode::Type OperatorNode::get_type( void ) const{ 261 return type; 262 } 263 264 void OperatorNode::printOneLine( std::ostream &os, int indent ) const { 265 printDesignation( os ); 266 os << opName[ type ] << ' '; 267 } 268 269 void OperatorNode::print( std::ostream &os, int indent ) const{ 270 printDesignation( os ); 271 os << string( indent, ' ' ) << "Operator: " << opName[type] << endl; 272 return; 273 } 274 275 const char *OperatorNode::get_typename( void ) const{ 276 return opName[ type ]; 277 } 278 279 //############################################################################## 280 281 CompositeExprNode::CompositeExprNode() : ExpressionNode(), function( 0 ), arguments( 0 ) { 282 } 283 284 CompositeExprNode::CompositeExprNode( const string *name_ ) : ExpressionNode( name_ ), function( 0 ), arguments( 0 ) { 285 } 286 287 CompositeExprNode::CompositeExprNode( ExpressionNode *f, ExpressionNode *args ): 288 function( f ), arguments( args ) { 289 } 290 291 CompositeExprNode::CompositeExprNode( ExpressionNode *f, ExpressionNode *arg1, ExpressionNode *arg2): 292 function( f ), arguments( arg1 ) { 293 arguments->set_link( arg2 ); 294 } 295 296 CompositeExprNode::CompositeExprNode( const CompositeExprNode &other ) : ExpressionNode( other ), function( maybeClone( other.function ) ), arguments( 0 ) { 297 ParseNode *cur = other.arguments; 298 while ( cur ) { 299 if ( arguments ) { 300 arguments->set_link( cur->clone() ); 301 } else { 302 arguments = ( ExpressionNode*)cur->clone(); 303 } // if 304 cur = cur->get_link(); 305 } 306 } 307 308 CompositeExprNode::~CompositeExprNode() { 309 delete function; 310 delete arguments; 311 } 312 313 #include "Common/utility.h" 314 315 Expression *CompositeExprNode::build() const { 316 OperatorNode *op; 317 std::list<Expression *> args; 318 319 buildList( get_args(), args ); 320 321 if ( ! ( op = dynamic_cast<OperatorNode *>( function ) ) ) { // function as opposed to operator 322 return new UntypedExpr( maybeBuild<Expression>(function), args, maybeBuild< Expression >( get_argName() )); 323 } // if 324 325 switch ( op->get_type()) { 326 case OperatorNode::Incr: 327 case OperatorNode::Decr: 328 case OperatorNode::IncrPost: 329 case OperatorNode::DecrPost: 330 case OperatorNode::Assign: 331 case OperatorNode::MulAssn: 332 case OperatorNode::DivAssn: 333 case OperatorNode::ModAssn: 334 case OperatorNode::PlusAssn: 335 case OperatorNode::MinusAssn: 336 case OperatorNode::LSAssn: 337 case OperatorNode::RSAssn: 338 case OperatorNode::AndAssn: 339 case OperatorNode::ERAssn: 340 case OperatorNode::OrAssn: 341 // the rewrite rules for these expressions specify that the first argument has its address taken 342 assert( ! args.empty() ); 343 args.front() = new AddressExpr( args.front() ); 344 break; 345 default: // do nothing 346 ; 347 } // switch 348 349 switch ( op->get_type() ) { 350 case OperatorNode::Incr: 351 case OperatorNode::Decr: 352 case OperatorNode::IncrPost: 353 case OperatorNode::DecrPost: 354 case OperatorNode::Assign: 355 case OperatorNode::MulAssn: 356 case OperatorNode::DivAssn: 357 case OperatorNode::ModAssn: 358 case OperatorNode::PlusAssn: 359 case OperatorNode::MinusAssn: 360 case OperatorNode::LSAssn: 361 case OperatorNode::RSAssn: 362 case OperatorNode::AndAssn: 363 case OperatorNode::ERAssn: 364 case OperatorNode::OrAssn: 365 case OperatorNode::Plus: 366 case OperatorNode::Minus: 367 case OperatorNode::Mul: 368 case OperatorNode::Div: 369 case OperatorNode::Mod: 370 case OperatorNode::BitOr: 371 case OperatorNode::BitAnd: 372 case OperatorNode::Xor: 373 case OperatorNode::LShift: 374 case OperatorNode::RShift: 375 case OperatorNode::LThan: 376 case OperatorNode::GThan: 377 case OperatorNode::LEThan: 378 case OperatorNode::GEThan: 379 case OperatorNode::Eq: 380 case OperatorNode::Neq: 381 case OperatorNode::Index: 382 case OperatorNode::Range: 383 case OperatorNode::UnPlus: 384 case OperatorNode::UnMinus: 385 case OperatorNode::PointTo: 386 case OperatorNode::Neg: 387 case OperatorNode::BitNeg: 388 case OperatorNode::LabelAddress: 389 return new UntypedExpr( new NameExpr( opName[ op->get_type() ] ), args ); 390 case OperatorNode::AddressOf: 391 assert( args.size() == 1 ); 392 assert( args.front() ); 393 394 return new AddressExpr( args.front() ); 395 case OperatorNode::Cast: 396 { 397 TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args()); 398 assert( arg ); 399 400 DeclarationNode *decl_node = arg->get_decl(); 401 ExpressionNode *expr_node = dynamic_cast<ExpressionNode *>( arg->get_link()); 402 403 Type *targetType = decl_node->buildType(); 404 if ( dynamic_cast< VoidType* >( targetType ) ) { 405 delete targetType; 406 return new CastExpr( maybeBuild<Expression>(expr_node), maybeBuild< Expression >( get_argName() ) ); 407 } else { 408 return new CastExpr( maybeBuild<Expression>(expr_node),targetType, maybeBuild< Expression >( get_argName() ) ); 409 } // if 410 } 411 case OperatorNode::FieldSel: 412 { 413 assert( args.size() == 2 ); 414 415 NameExpr *member = dynamic_cast<NameExpr *>( args.back()); 416 // TupleExpr *memberTup = dynamic_cast<TupleExpr *>( args.back()); 417 418 if ( member != 0 ) { 419 UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), args.front()); 420 delete member; 421 return ret; 422 /* else if ( memberTup != 0 ) 423 { 424 UntypedMemberExpr *ret = new UntypedMemberExpr( memberTup->get_name(), args.front()); 425 delete member; 426 return ret; 427 } */ 428 } else 429 assert( false ); 430 } 431 case OperatorNode::PFieldSel: 432 { 433 assert( args.size() == 2 ); 434 435 NameExpr *member = dynamic_cast<NameExpr *>( args.back()); // modify for Tuples xxx 436 assert( member != 0 ); 437 438 UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) ); 439 deref->get_args().push_back( args.front() ); 440 441 UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), deref ); 442 delete member; 443 return ret; 444 } 445 case OperatorNode::SizeOf: 446 { 447 if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args()) ) { 448 return new SizeofExpr( arg->get_decl()->buildType()); 449 } else { 450 return new SizeofExpr( args.front()); 451 } // if 452 } 453 case OperatorNode::AlignOf: 454 { 455 if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args()) ) { 456 return new AlignofExpr( arg->get_decl()->buildType()); 457 } else { 458 return new AlignofExpr( args.front()); 459 } // if 460 } 461 case OperatorNode::OffsetOf: 462 { 463 assert( args.size() == 2 ); 464 465 if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args() ) ) { 466 NameExpr *member = dynamic_cast<NameExpr *>( args.back() ); 467 assert( member != 0 ); 468 469 return new UntypedOffsetofExpr( arg->get_decl()->buildType(), member->get_name() ); 470 } else assert( false ); 471 } 472 case OperatorNode::Attr: 473 { 474 VarRefNode *var = dynamic_cast<VarRefNode *>( get_args()); 475 assert( var ); 476 if ( ! get_args()->get_link() ) { 477 return new AttrExpr( maybeBuild<Expression>(var), ( Expression*)0); 478 } else if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args()->get_link()) ) { 479 return new AttrExpr( maybeBuild<Expression>(var), arg->get_decl()->buildType()); 480 } else { 481 return new AttrExpr( maybeBuild<Expression>(var), args.back()); 482 } // if 483 } 484 case OperatorNode::Or: 485 case OperatorNode::And: 486 assert( args.size() == 2); 487 return new LogicalExpr( notZeroExpr( args.front() ), notZeroExpr( args.back() ), ( op->get_type() == OperatorNode::And ) ); 488 case OperatorNode::Cond: 489 { 490 assert( args.size() == 3); 491 std::list< Expression * >::const_iterator i = args.begin(); 492 Expression *arg1 = notZeroExpr( *i++ ); 493 Expression *arg2 = *i++; 494 Expression *arg3 = *i++; 495 return new ConditionalExpr( arg1, arg2, arg3 ); 496 } 497 case OperatorNode::NCond: 498 throw UnimplementedError( "GNU 2-argument conditional expression" ); 499 case OperatorNode::Comma: 500 { 501 assert( args.size() == 2); 502 std::list< Expression * >::const_iterator i = args.begin(); 503 Expression *ret = *i++; 504 while ( i != args.end() ) { 505 ret = new CommaExpr( ret, *i++ ); 506 } 507 return ret; 508 } 509 // Tuples 510 case OperatorNode::TupleC: 511 { 512 TupleExpr *ret = new TupleExpr(); 513 std::copy( args.begin(), args.end(), back_inserter( ret->get_exprs() ) ); 514 return ret; 515 } 516 default: 517 // shouldn't happen 518 assert( false ); 519 return 0; 520 } // switch 521 } 522 523 void CompositeExprNode::printOneLine( std::ostream &os, int indent ) const { 524 printDesignation( os ); 525 os << "( "; 526 function->printOneLine( os, indent ); 527 for ( ExpressionNode *cur = arguments; cur != 0; cur = dynamic_cast< ExpressionNode* >( cur->get_link() ) ) { 528 cur->printOneLine( os, indent ); 529 } // for 530 os << ") "; 531 } 532 533 void CompositeExprNode::print( std::ostream &os, int indent ) const { 534 printDesignation( os ); 535 os << string( indent, ' ' ) << "Application of: " << endl; 536 function->print( os, indent + ParseNode::indent_by ); 537 538 os << string( indent, ' ' ) ; 539 if ( arguments ) { 540 os << "... on arguments: " << endl; 541 arguments->printList( os, indent + ParseNode::indent_by ); 542 } else 543 os << "... on no arguments: " << endl; 544 } 545 546 void CompositeExprNode::set_function( ExpressionNode *f ) { 547 function = f; 548 } 549 550 void CompositeExprNode::set_args( ExpressionNode *args ) { 551 arguments = args; 552 } 553 554 ExpressionNode *CompositeExprNode::get_function( void ) const { 555 return function; 556 } 557 558 ExpressionNode *CompositeExprNode::get_args( void ) const { 559 return arguments; 560 } 561 562 void CompositeExprNode::add_arg( ExpressionNode *arg ) { 563 if ( arguments ) 564 arguments->set_link( arg ); 565 else 566 set_args( arg ); 567 } 568 569 //############################################################################## 570 571 Expression *AsmExprNode::build() const { 572 return new AsmExpr( maybeBuild< Expression >( inout ), (ConstantExpr *)maybeBuild<Expression>(constraint), maybeBuild<Expression>(operand) ); 573 } 574 575 void AsmExprNode::print( std::ostream &os, int indent ) const { 576 os << string( indent, ' ' ) << "Assembler Expression:" << endl; 577 if ( inout ) { 578 os << string( indent, ' ' ) << "inout: " << std::endl; 579 inout->print( os, indent + 2 ); 580 } // if 581 if ( constraint ) { 582 os << string( indent, ' ' ) << "constraint: " << std::endl; 583 constraint->print( os, indent + 2 ); 584 } // if 585 if ( operand ) { 586 os << string( indent, ' ' ) << "operand: " << std::endl; 587 operand->print( os, indent + 2 ); 588 } // if 589 } 590 591 void AsmExprNode::printOneLine( std::ostream &os, int indent ) const { 592 printDesignation( os ); 593 os << "( "; 594 if ( inout ) inout->printOneLine( os, indent + 2 ); 595 os << ", "; 596 if ( constraint ) constraint->printOneLine( os, indent + 2 ); 597 os << ", "; 598 if ( operand ) operand->printOneLine( os, indent + 2 ); 599 os << ") "; 600 } 601 602 //############################################################################## 603 604 void LabelNode::print( std::ostream &os, int indent ) const {} 605 606 void LabelNode::printOneLine( std::ostream &os, int indent ) const {} 607 608 //############################################################################## 609 610 CommaExprNode::CommaExprNode(): CompositeExprNode( new OperatorNode( OperatorNode::Comma )) {} 611 612 CommaExprNode::CommaExprNode( ExpressionNode *exp ) : CompositeExprNode( new OperatorNode( OperatorNode::Comma ), exp ) { 613 } 614 615 CommaExprNode::CommaExprNode( ExpressionNode *exp1, ExpressionNode *exp2) : CompositeExprNode( new OperatorNode( OperatorNode::Comma ), exp1, exp2) { 616 } 617 618 CommaExprNode *CommaExprNode::add_to_list( ExpressionNode *exp ) { 619 add_arg( exp ); 620 621 return this; 622 } 623 624 CommaExprNode::CommaExprNode( const CommaExprNode &other ) : CompositeExprNode( other ) { 625 } 626 627 //############################################################################## 628 629 ValofExprNode::ValofExprNode( StatementNode *s ): body( s ) {} 630 631 ValofExprNode::ValofExprNode( const ValofExprNode &other ) : ExpressionNode( other ), body( maybeClone( body ) ) { 632 } 633 634 ValofExprNode::~ValofExprNode() { 635 delete body; 636 } 637 638 void ValofExprNode::print( std::ostream &os, int indent ) const { 639 printDesignation( os ); 640 os << string( indent, ' ' ) << "Valof Expression:" << std::endl; 641 get_body()->print( os, indent + 4); 642 } 643 644 void ValofExprNode::printOneLine( std::ostream &, int indent ) const { 645 assert( false ); 646 } 647 648 Expression *ValofExprNode::build() const { 649 return new UntypedValofExpr ( maybeBuild<Statement>(get_body()), maybeBuild< Expression >( get_argName() ) ); 650 } 651 652 //############################################################################## 653 654 ForCtlExprNode::ForCtlExprNode( ParseNode *init_, ExpressionNode *cond, ExpressionNode *incr ) throw ( SemanticError ) : condition( cond ), change( incr ) { 655 if ( init_ == 0 ) 656 init = 0; 657 else { 658 DeclarationNode *decl; 659 ExpressionNode *exp; 660 661 if (( decl = dynamic_cast<DeclarationNode *>(init_) ) != 0) 662 init = new StatementNode( decl ); 663 else if (( exp = dynamic_cast<ExpressionNode *>( init_)) != 0) 664 init = new StatementNode( StatementNode::Exp, exp ); 665 else 666 throw SemanticError("Error in for control expression"); 667 } 668 } 669 670 ForCtlExprNode::ForCtlExprNode( const ForCtlExprNode &other ) 671 : ExpressionNode( other ), init( maybeClone( other.init ) ), condition( maybeClone( other.condition ) ), change( maybeClone( other.change ) ) { 672 } 673 674 ForCtlExprNode::~ForCtlExprNode() { 675 delete init; 676 delete condition; 677 delete change; 678 } 679 680 Expression *ForCtlExprNode::build() const { 681 // this shouldn't be used! 682 assert( false ); 683 return 0; 684 } 685 686 void ForCtlExprNode::print( std::ostream &os, int indent ) const{ 687 os << string( indent,' ' ) << "For Control Expression -- :" << endl; 688 689 os << string( indent + 2, ' ' ) << "initialization:" << endl; 690 if ( init != 0 ) 691 init->printList( os, indent + 4 ); 692 693 os << string( indent + 2, ' ' ) << "condition: " << endl; 694 if ( condition != 0 ) 695 condition->print( os, indent + 4 ); 696 os << string( indent + 2, ' ' ) << "increment: " << endl; 697 if ( change != 0 ) 698 change->print( os, indent + 4 ); 699 } 700 701 void ForCtlExprNode::printOneLine( std::ostream &, int indent ) const { 702 assert( false ); 703 } 704 705 //############################################################################## 706 707 TypeValueNode::TypeValueNode( DeclarationNode *decl ) : decl( decl ) { 708 } 709 710 TypeValueNode::TypeValueNode( const TypeValueNode &other ) : ExpressionNode( other ), decl( maybeClone( other.decl ) ) { 711 } 712 713 Expression *TypeValueNode::build() const { 182 Expression *build_cast( DeclarationNode *decl_node, ExpressionNode *expr_node ) { 183 Type *targetType = decl_node->buildType(); 184 if ( dynamic_cast< VoidType * >( targetType ) ) { 185 delete targetType; 186 return new CastExpr( maybeBuild< Expression >(expr_node) ); 187 } else { 188 return new CastExpr( maybeBuild< Expression >(expr_node), targetType ); 189 } // if 190 } 191 192 Expression *build_fieldSel( ExpressionNode *expr_node, NameExpr *member ) { 193 UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), maybeBuild< Expression >(expr_node) ); 194 delete member; 195 return ret; 196 } 197 198 Expression *build_pfieldSel( ExpressionNode *expr_node, NameExpr *member ) { 199 UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) ); 200 deref->get_args().push_back( maybeBuild< Expression >(expr_node) ); 201 UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), deref ); 202 delete member; 203 return ret; 204 } 205 206 Expression *build_addressOf( ExpressionNode *expr_node ) { 207 return new AddressExpr( maybeBuild< Expression >(expr_node) ); 208 } 209 Expression *build_sizeOfexpr( ExpressionNode *expr_node ) { 210 return new SizeofExpr( maybeBuild< Expression >(expr_node) ); 211 } 212 Expression *build_sizeOftype( DeclarationNode *decl_node ) { 213 return new SizeofExpr( decl_node->buildType() ); 214 } 215 Expression *build_alignOfexpr( ExpressionNode *expr_node ) { 216 return new AlignofExpr( maybeBuild< Expression >(expr_node) ); 217 } 218 Expression *build_alignOftype( DeclarationNode *decl_node ) { 219 return new AlignofExpr( decl_node->buildType() ); 220 } 221 Expression *build_offsetOf( DeclarationNode *decl_node, NameExpr *member ) { 222 return new UntypedOffsetofExpr( decl_node->buildType(), member->get_name() ); 223 } 224 225 Expression *build_and_or( ExpressionNode *expr_node1, ExpressionNode *expr_node2, bool kind ) { 226 return new LogicalExpr( notZeroExpr( maybeBuild< Expression >(expr_node1) ), notZeroExpr( maybeBuild< Expression >(expr_node2) ), kind ); 227 } 228 229 Expression *build_unary_val( OperKinds op, ExpressionNode *expr_node ) { 230 std::list< Expression * > args; 231 args.push_back( maybeBuild< Expression >(expr_node) ); 232 return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args ); 233 } 234 Expression *build_unary_ptr( OperKinds op, ExpressionNode *expr_node ) { 235 std::list< Expression * > args; 236 args.push_back( new AddressExpr( maybeBuild< Expression >(expr_node) ) ); 237 return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args ); 238 } 239 Expression *build_binary_val( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) { 240 std::list< Expression * > args; 241 args.push_back( maybeBuild< Expression >(expr_node1) ); 242 args.push_back( maybeBuild< Expression >(expr_node2) ); 243 return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args ); 244 } 245 Expression *build_binary_ptr( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) { 246 std::list< Expression * > args; 247 args.push_back( new AddressExpr( maybeBuild< Expression >(expr_node1) ) ); 248 args.push_back( maybeBuild< Expression >(expr_node2) ); 249 return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args ); 250 } 251 252 Expression *build_cond( ExpressionNode *expr_node1, ExpressionNode *expr_node2, ExpressionNode *expr_node3 ) { 253 return new ConditionalExpr( notZeroExpr( maybeBuild< Expression >(expr_node1) ), maybeBuild< Expression >(expr_node2), maybeBuild< Expression >(expr_node3) ); 254 } 255 256 Expression *build_comma( ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) { 257 return new CommaExpr( maybeBuild< Expression >(expr_node1), maybeBuild< Expression >(expr_node2) ); 258 } 259 260 Expression *build_attrexpr( NameExpr *var, ExpressionNode * expr_node ) { 261 return new AttrExpr( var, maybeBuild< Expression >(expr_node) ); 262 } 263 Expression *build_attrtype( NameExpr *var, DeclarationNode * decl_node ) { 264 return new AttrExpr( var, decl_node->buildType() ); 265 } 266 267 Expression *build_tuple( ExpressionNode * expr_node ) { 268 TupleExpr *ret = new TupleExpr(); 269 buildList( expr_node, ret->get_exprs() ); 270 return ret; 271 } 272 273 Expression *build_func( ExpressionNode * function, ExpressionNode * expr_node ) { 274 std::list< Expression * > args; 275 276 buildList( expr_node, args ); 277 return new UntypedExpr( maybeBuild< Expression >(function), args, nullptr ); 278 } 279 280 Expression *build_range( ExpressionNode * low, ExpressionNode *high ) { 281 Expression *low_cexpr = maybeBuild< Expression >( low ); 282 Expression *high_cexpr = maybeBuild< Expression >( high ); 283 return new RangeExpr( low_cexpr, high_cexpr ); 284 } 285 286 Expression *build_asmexpr( ExpressionNode *inout, ConstantExpr *constraint, ExpressionNode *operand ) { 287 return new AsmExpr( maybeBuild< Expression >( inout ), constraint, maybeBuild< Expression >(operand) ); 288 } 289 290 Expression *build_valexpr( StatementNode *s ) { 291 return new UntypedValofExpr( maybeBuild< Statement >(s), nullptr ); 292 } 293 Expression *build_typevalue( DeclarationNode *decl ) { 714 294 return new TypeExpr( decl->buildType() ); 715 295 } 716 296 717 void TypeValueNode::print( std::ostream &os, int indent ) const { 718 os << std::string( indent, ' ' ) << "Type:"; 719 get_decl()->print( os, indent + 2); 720 } 721 722 void TypeValueNode::printOneLine( std::ostream &os, int indent ) const { 723 os << "Type:"; 724 get_decl()->print( os, indent + 2); 725 } 726 727 728 CompoundLiteralNode::CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids ) : type( type ), kids( kids ) {} 729 CompoundLiteralNode::CompoundLiteralNode( const CompoundLiteralNode &other ) : ExpressionNode( other ), type( other.type ), kids( other.kids ) {} 730 731 CompoundLiteralNode::~CompoundLiteralNode() { 732 delete kids; 733 delete type; 734 } 735 736 CompoundLiteralNode *CompoundLiteralNode::clone() const { 737 return new CompoundLiteralNode( *this ); 738 } 739 740 void CompoundLiteralNode::print( std::ostream &os, int indent ) const { 741 os << string( indent,' ' ) << "CompoundLiteralNode:" << endl; 742 743 os << string( indent + 2, ' ' ) << "type:" << endl; 744 if ( type != 0 ) 745 type->print( os, indent + 4 ); 746 747 os << string( indent + 2, ' ' ) << "initialization:" << endl; 748 if ( kids != 0 ) 749 kids->printList( os, indent + 4 ); 750 } 751 752 void CompoundLiteralNode::printOneLine( std::ostream &os, int indent ) const { 753 os << "( "; 754 if ( type ) type->print( os ); 755 os << ", "; 756 if ( kids ) kids->printOneLine( os ); 757 os << ") "; 758 } 759 760 Expression *CompoundLiteralNode::build() const { 761 Declaration * newDecl = maybeBuild<Declaration>(type); // compound literal type 297 Expression *build_compoundLiteral( DeclarationNode *decl_node, InitializerNode *kids ) { 298 Declaration * newDecl = maybeBuild< Declaration >(decl_node); // compound literal type 762 299 if ( DeclarationWithType * newDeclWithType = dynamic_cast< DeclarationWithType * >( newDecl ) ) { // non-sue compound-literal type 763 return new CompoundLiteralExpr( newDeclWithType->get_type(), maybeBuild< Initializer>(kids) );300 return new CompoundLiteralExpr( newDeclWithType->get_type(), maybeBuild< Initializer >(kids) ); 764 301 // these types do not have associated type information 765 302 } else if ( StructDecl * newDeclStructDecl = dynamic_cast< StructDecl * >( newDecl ) ) { 766 return new CompoundLiteralExpr( new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() ), maybeBuild< Initializer>(kids) );303 return new CompoundLiteralExpr( new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() ), maybeBuild< Initializer >(kids) ); 767 304 } else if ( UnionDecl * newDeclUnionDecl = dynamic_cast< UnionDecl * >( newDecl ) ) { 768 return new CompoundLiteralExpr( new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() ), maybeBuild< Initializer>(kids) );305 return new CompoundLiteralExpr( new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() ), maybeBuild< Initializer >(kids) ); 769 306 } else if ( EnumDecl * newDeclEnumDecl = dynamic_cast< EnumDecl * >( newDecl ) ) { 770 return new CompoundLiteralExpr( new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() ), maybeBuild< Initializer>(kids) );307 return new CompoundLiteralExpr( new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() ), maybeBuild< Initializer >(kids) ); 771 308 } else { 772 309 assert( false ); 773 310 } // if 774 }775 776 777 ExpressionNode *flattenCommas( ExpressionNode *list ) {778 if ( CompositeExprNode *composite = dynamic_cast< CompositeExprNode * >( list ) ) {779 OperatorNode *op;780 if ( ( op = dynamic_cast< OperatorNode * >( composite->get_function() )) && ( op->get_type() == OperatorNode::Comma ) ) {781 if ( ExpressionNode *next = dynamic_cast< ExpressionNode * >( list->get_link() ) )782 composite->add_arg( next );783 return flattenCommas( composite->get_args() );784 } // if785 } // if786 787 if ( ExpressionNode *next = dynamic_cast< ExpressionNode * >( list->get_link() ) )788 list->set_next( flattenCommas( next ) );789 790 return list;791 }792 793 ExpressionNode *tupleContents( ExpressionNode *tuple ) {794 if ( CompositeExprNode *composite = dynamic_cast< CompositeExprNode * >( tuple ) ) {795 OperatorNode *op = 0;796 if ( ( op = dynamic_cast< OperatorNode * >( composite->get_function() )) && ( op->get_type() == OperatorNode::TupleC ) )797 return composite->get_args();798 } // if799 return tuple;800 311 } 801 312 -
src/Parser/InitializerNode.cc
r950f7a7 r7527e63 10 10 // Created On : Sat May 16 13:20:24 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Jul 4 15:37:15201613 // Update Count : 1512 // Last Modified On : Mon Aug 15 18:27:02 2016 13 // Update Count : 20 14 14 // 15 15 … … 25 25 : expr( _expr ), aggregate( aggrp ), designator( des ), kids( 0 ), maybeConstructed( true ) { 26 26 if ( aggrp ) 27 kids = dynamic_cast< InitializerNode * >( get_link() );27 kids = dynamic_cast< InitializerNode * >( get_next() ); 28 28 29 29 if ( kids != 0 ) 30 set_l ink( 0 );30 set_last( 0 ); 31 31 } 32 32 … … 34 34 : expr( 0 ), aggregate( aggrp ), designator( des ), kids( 0 ), maybeConstructed( true ) { 35 35 if ( init != 0 ) 36 set_l ink(init);36 set_last( init ); 37 37 38 38 if ( aggrp ) 39 kids = dynamic_cast< InitializerNode * >( get_link() );39 kids = dynamic_cast< InitializerNode * >( get_next() ); 40 40 41 41 if ( kids != 0 ) … … 58 58 while ( curdes != 0) { 59 59 curdes->printOneLine(os); 60 curdes = (ExpressionNode *)(curdes->get_ link());60 curdes = (ExpressionNode *)(curdes->get_next()); 61 61 if ( curdes ) os << ", "; 62 62 } // while … … 72 72 73 73 InitializerNode *moreInit; 74 if ( get_ link() != 0 && ((moreInit = dynamic_cast< InitializerNode * >( get_link() ) ) != 0) )74 if ( get_next() != 0 && ((moreInit = dynamic_cast< InitializerNode * >( get_next() ) ) != 0) ) 75 75 moreInit->printOneLine( os ); 76 76 } … … 82 82 //assert( next_init() != 0 ); 83 83 84 std::list< Initializer * > initlist;85 buildList< Initializer, InitializerNode>( next_init(), initlist );84 std::list< Initializer * > initlist; 85 buildList< Initializer, InitializerNode >( next_init(), initlist ); 86 86 87 std::list< Expression * > designlist;87 std::list< Expression * > designlist; 88 88 89 89 if ( designator != 0 ) { 90 buildList< Expression, ExpressionNode>( designator, designlist );90 buildList< Expression, ExpressionNode >( designator, designlist ); 91 91 } // if 92 92 93 93 return new ListInit( initlist, designlist, maybeConstructed ); 94 94 } else { 95 std::list< Expression * > designators;95 std::list< Expression * > designators; 96 96 97 97 if ( designator != 0 ) 98 buildList< Expression, ExpressionNode>( designator, designators );98 buildList< Expression, ExpressionNode >( designator, designators ); 99 99 100 100 if ( get_expression() != 0) 101 return new SingleInit( maybeBuild< Expression>( get_expression() ), designators, maybeConstructed );101 return new SingleInit( maybeBuild< Expression >( get_expression() ), designators, maybeConstructed ); 102 102 } // if 103 103 -
src/Parser/ParseNode.cc
r950f7a7 r7527e63 10 10 // Created On : Sat May 16 13:26:29 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Jul 15 18:49:25201613 // Update Count : 6212 // Last Modified On : Tue Aug 16 08:42:29 2016 13 // Update Count : 107 14 14 // 15 15 16 #include <climits>17 16 #include "ParseNode.h" 18 17 using namespace std; 19 18 20 // Difficult to separate extra parts of constants during lexing because actions are not allow in the middle of patterns:21 //22 // prefix action constant action suffix23 //24 // Alternatively, breaking a pattern using BEGIN does not work if the following pattern can be empty:25 //26 // constant BEGIN CONT ...27 // <CONT>(...)? BEGIN 0 ... // possible empty suffix28 //29 // because the CONT rule is NOT triggered if the pattern is empty. Hence, constants are reparsed here to determine their30 // type.31 32 static inline bool checkU( char c ) { return c == 'u' || c == 'U'; }33 static inline bool checkL( char c ) { return c == 'l' || c == 'L'; }34 static inline bool checkF( char c ) { return c == 'f' || c == 'F'; }35 static inline bool checkD( char c ) { return c == 'd' || c == 'D'; }36 static inline bool checkI( char c ) { return c == 'i' || c == 'I'; }37 static inline bool checkX( char c ) { return c == 'x' || c == 'X'; }38 39 BasicType::Kind literalType( ConstantNode::Type type, string &value ) {40 BasicType::Kind btype;41 42 // lexing divides constants into 4 kinds43 switch ( type ) {44 case ConstantNode::Integer:45 {46 static const BasicType::Kind kind[2][3] = {47 { BasicType::SignedInt, BasicType::LongSignedInt, BasicType::LongLongSignedInt },48 { BasicType::UnsignedInt, BasicType::LongUnsignedInt, BasicType::LongLongUnsignedInt },49 };50 bool dec = true, Unsigned = false; // decimal, unsigned constant51 int size; // 0 => int, 1 => long, 2 => long long52 unsigned long long v; // converted integral value53 size_t last = value.length() - 1; // last character of constant54 55 if ( value[0] == '0' ) { // octal/hex constant ?56 dec = false;57 if ( last != 0 && checkX( value[1] ) ) { // hex constant ?58 sscanf( (char *)value.c_str(), "%llx", &v );59 //printf( "%llx %llu\n", v, v );60 } else { // octal constant61 sscanf( (char *)value.c_str(), "%llo", &v );62 //printf( "%llo %llu\n", v, v );63 } // if64 } else { // decimal constant ?65 sscanf( (char *)value.c_str(), "%llu", &v );66 //printf( "%llu %llu\n", v, v );67 } // if68 69 if ( v <= INT_MAX ) { // signed int70 size = 0;71 } else if ( v <= UINT_MAX && ! dec ) { // unsigned int72 size = 0;73 Unsigned = true; // unsigned74 } else if ( v <= LONG_MAX ) { // signed long int75 size = 1;76 } else if ( v <= ULONG_MAX && ( ! dec || LONG_MAX == LLONG_MAX ) ) { // signed long int77 size = 1;78 Unsigned = true; // unsigned long int79 } else if ( v <= LLONG_MAX ) { // signed long long int80 size = 2;81 } else { // unsigned long long int82 size = 2;83 Unsigned = true; // unsigned long long int84 } // if85 86 if ( checkU( value[last] ) ) { // suffix 'u' ?87 Unsigned = true;88 if ( last > 0 && checkL( value[ last - 1 ] ) ) { // suffix 'l' ?89 size = 1;90 if ( last > 1 && checkL( value[ last - 2 ] ) ) { // suffix 'll' ?91 size = 2;92 } // if93 } // if94 } else if ( checkL( value[ last ] ) ) { // suffix 'l' ?95 size = 1;96 if ( last > 0 && checkL( value[ last - 1 ] ) ) { // suffix 'll' ?97 size = 2;98 if ( last > 1 && checkU( value[ last - 2 ] ) ) { // suffix 'u' ?99 Unsigned = true;100 } // if101 } else {102 if ( last > 0 && checkU( value[ last - 1 ] ) ) { // suffix 'u' ?103 Unsigned = true;104 } // if105 } // if106 } // if107 btype = kind[Unsigned][size]; // lookup constant type108 break;109 }110 case ConstantNode::Float:111 {112 //long double v;113 static const BasicType::Kind kind[2][3] = {114 { BasicType::Float, BasicType::Double, BasicType::LongDouble },115 { BasicType::FloatComplex, BasicType::DoubleComplex, BasicType::LongDoubleComplex },116 };117 bool complx = false; // real, complex118 int size = 1; // 0 => float, 1 => double (default), 2 => long double119 // floating-point constant has minimum of 2 characters: 1. or .1120 size_t last = value.length() - 1;121 122 if ( checkI( value[last] ) ) { // imaginary ?123 complx = true;124 last -= 1; // backup one character125 } // if126 127 //sscanf( (char *)value.c_str(), "%Lf", &v );128 //printf( "%s %24.22Lf %Lf\n", value.c_str(), v, v );129 130 if ( checkF( value[last] ) ) { // float ?131 size = 0;132 } else if ( checkD( value[last] ) ) { // double ?133 size = 1;134 } else if ( checkL( value[last] ) ) { // long double ?135 size = 2;136 } // if137 if ( ! complx && checkI( value[last - 1] ) ) { // imaginary ?138 complx = true;139 } // if140 btype = kind[complx][size]; // lookup constant type141 break;142 }143 case ConstantNode::Character:144 btype = BasicType::Char; // default145 if ( string( "LUu" ).find( value[0] ) != string::npos ) {146 // ???147 } // if148 break;149 case ConstantNode::String:150 assert( false );151 // array of char152 if ( string( "LUu" ).find( value[0] ) != string::npos ) {153 if ( value[0] == 'u' && value[1] == '8' ) {154 // ???155 } else {156 // ???157 } // if158 } // if159 break;160 } // switch161 return btype;162 } // literalType163 164 165 ConstantNode *makeConstant( ConstantNode::Type type, std::string *str ) {166 ::Type::Qualifiers emptyQualifiers; // no qualifiers on constants167 return new ConstantNode( new ConstantExpr( Constant( new BasicType( emptyQualifiers, literalType( type, *str ) ), *str ), nullptr ) );168 }169 170 ConstantNode *makeConstantStr( ConstantNode::Type type, std::string *str ) {171 ::Type::Qualifiers emptyQualifiers; // no qualifiers on constants172 // string should probably be a primitive type173 ArrayType *at = new ArrayType( emptyQualifiers, new BasicType( emptyQualifiers, BasicType::Char ),174 new ConstantExpr(175 Constant( new BasicType( emptyQualifiers, BasicType::UnsignedInt ),176 toString( str->size()+1-2 ) ) ), // +1 for '\0' and -2 for '"'177 false, false );178 return new ConstantNode( new ConstantExpr( Constant( at, *str ), nullptr ) );179 }180 181 182 // Builder183 19 int ParseNode::indent_by = 4; 184 20 185 ParseNode::ParseNode() : next( 0) {};186 ParseNode::ParseNode( const string *name ) : name( *name ), next( 0) { delete name; }187 ParseNode::ParseNode( const string &name ) : name( name ), next( 0) { }21 ParseNode::ParseNode() : next( nullptr ) {}; 22 ParseNode::ParseNode( const string *name ) : name( *name ), next( nullptr ) { delete name; } 23 ParseNode::ParseNode( const string &name ) : name( name ), next( nullptr ) { } 188 24 189 25 ParseNode::~ParseNode() { … … 194 30 ParseNode *current = this; 195 31 196 while ( current->get_link() != 0 ) 197 current = current->get_link(); 198 32 while ( current->get_next() != 0 ) 33 current = current->get_next(); 199 34 return current; 200 35 } 201 36 202 ParseNode *ParseNode::set_l ink( ParseNode *next_ ) {37 ParseNode *ParseNode::set_last( ParseNode *next_ ) { 203 38 if ( next_ != 0 ) get_last()->next = next_; 204 39 return this; 205 40 } 206 207 void ParseNode::print( std::ostream &os, int indent ) const {}208 209 41 210 42 void ParseNode::printList( std::ostream &os, int indent ) const { … … 216 48 } 217 49 218 ParseNode &ParseNode::operator,( ParseNode &p ) {219 set_link( &p );220 221 return *this;222 }223 224 ParseNode *mkList( ParseNode &pn ) {225 // it just relies on `operator,' to take care of the "arguments" and provides a nice interface to an awful-looking226 // address-of, rendering, for example (StatementNode *)(&(*$5 + *$7)) into (StatementNode *)mkList(($5, $7))227 // (although "nice" is probably not the word)228 return &pn;229 }230 231 50 // Local Variables: // 232 51 // tab-width: 4 // -
src/Parser/ParseNode.h
r950f7a7 r7527e63 10 10 // Created On : Sat May 16 13:28:16 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Jul 12 20:50:21201613 // Update Count : 26112 // Last Modified On : Tue Aug 16 08:37:47 2016 13 // Update Count : 527 14 14 // 15 15 … … 22 22 #include <memory> 23 23 24 #include "Common/utility.h"25 24 #include "Parser/LinkageSpec.h" 26 25 #include "SynTree/Type.h" 27 26 #include "SynTree/Expression.h" 28 //#include "SynTree/Declaration.h" 27 #include "SynTree/Statement.h" 28 #include "SynTree/Label.h" 29 #include "Common/utility.h" 29 30 #include "Common/UniqueName.h" 30 #include "SynTree/Label.h" 31 32 class ExpressionNode; 33 class CompositeExprNode; 34 class CommaExprNode; 31 35 32 class StatementNode; 36 33 class CompoundStmtNode; 37 34 class DeclarationNode; 35 class ExpressionNode; 38 36 class InitializerNode; 39 37 40 // Builder 38 //############################################################################## 39 41 40 class ParseNode { 42 41 public: … … 45 44 ParseNode( const std::string & ); // for copy constructing subclasses 46 45 virtual ~ParseNode(); 47 48 ParseNode *get_link() const { return next; } 46 virtual ParseNode *clone() const { assert( false ); return nullptr; }; 47 48 ParseNode *get_next() const { return next; } 49 ParseNode *set_next( ParseNode *newlink ) { next = newlink; return this; } 49 50 ParseNode *get_last(); 50 ParseNode *set_link( ParseNode * ); 51 void set_next( ParseNode *newlink ) { next = newlink; } 52 53 virtual ParseNode *clone() const { return 0; }; 51 ParseNode *set_last( ParseNode * ); 54 52 55 53 const std::string &get_name() const { return name; } 56 54 void set_name( const std::string &newValue ) { name = newValue; } 57 55 58 virtual void print( std::ostream &, int indent = 0 ) const; 59 virtual void printList( std::ostream &, int indent = 0 ) const; 60 61 ParseNode &operator,( ParseNode &); 62 protected: 56 virtual void print( std::ostream &os, int indent = 0 ) const {} 57 virtual void printList( std::ostream &os, int indent = 0 ) const; 58 private: 59 static int indent_by; 60 61 ParseNode *next; 63 62 std::string name; 64 static int indent_by; 65 ParseNode *next; 66 }; 67 68 ParseNode *mkList( ParseNode & ); 63 }; // ParseNode 64 65 //############################################################################## 66 67 class InitializerNode : public ParseNode { 68 public: 69 InitializerNode( ExpressionNode *, bool aggrp = false, ExpressionNode *des = 0 ); 70 InitializerNode( InitializerNode *, bool aggrp = false, ExpressionNode *des = 0 ); 71 ~InitializerNode(); 72 73 ExpressionNode *get_expression() const { return expr; } 74 75 InitializerNode *set_designators( ExpressionNode *des ) { designator = des; return this; } 76 ExpressionNode *get_designators() const { return designator; } 77 78 InitializerNode *set_maybeConstructed( bool value ) { maybeConstructed = value; return this; } 79 bool get_maybeConstructed() const { return maybeConstructed; } 80 81 InitializerNode *next_init() const { return kids; } 82 83 void print( std::ostream &os, int indent = 0 ) const; 84 void printOneLine( std::ostream & ) const; 85 86 virtual Initializer *build() const; 87 private: 88 ExpressionNode *expr; 89 bool aggregate; 90 ExpressionNode *designator; // may be list 91 InitializerNode *kids; 92 bool maybeConstructed; 93 }; 94 95 //############################################################################## 69 96 70 97 class ExpressionNode : public ParseNode { 71 98 public: 72 ExpressionNode( );73 ExpressionNode( const std::string * );99 ExpressionNode( Expression * expr = nullptr ) : expr( expr ) {} 100 ExpressionNode( Expression * expr, const std::string *name ) : ParseNode( name ), expr( expr ) {} 74 101 ExpressionNode( const ExpressionNode &other ); 75 virtual ~ExpressionNode() { delete argName; } // cannot delete argName because it might be referenced elsewhere 76 77 virtual ExpressionNode *clone() const = 0; 78 79 virtual CommaExprNode *add_to_list( ExpressionNode * ); 80 81 ExpressionNode *get_argName() const { return argName; } 82 ExpressionNode *set_argName( const std::string *aName ); 83 ExpressionNode *set_argName( ExpressionNode *aDesignator ); 102 virtual ~ExpressionNode() {} 103 104 virtual ExpressionNode *clone() const { assert( false ); return nullptr; } 105 84 106 bool get_extension() const { return extension; } 85 107 ExpressionNode *set_extension( bool exten ) { extension = exten; return this; } 86 108 87 virtual void print( std::ostream &, int indent = 0) const = 0; 88 virtual void printOneLine( std::ostream &, int indent = 0) const = 0; 89 90 virtual Expression *build() const = 0; 91 protected: 92 void printDesignation ( std::ostream &, int indent = 0) const; 93 private: 94 ExpressionNode *argName = 0; 109 virtual void print( std::ostream &os, int indent = 0 ) const {} 110 virtual void printOneLine( std::ostream &os, int indent = 0 ) const {} 111 112 virtual Expression *build() const { return expr; } 113 private: 95 114 bool extension = false; 115 Expression *expr; 96 116 }; 97 117 98 118 template< typename T > 99 struct maybeBuild_t< Expression, T> {119 struct maybeBuild_t< Expression, T > { 100 120 static inline Expression * doit( const T *orig ) { 101 121 if ( orig ) { … … 104 124 return p; 105 125 } else { 106 return 0;126 return nullptr; 107 127 } // if 108 128 } 109 129 }; 110 130 111 // NullExprNode is used in tuples as a place-holder where a tuple component is omitted e.g., [ 2, , 3 ] 112 class NullExprNode : public ExpressionNode { 113 public: 114 NullExprNode(); 115 116 virtual NullExprNode *clone() const; 117 118 virtual void print( std::ostream &, int indent = 0) const; 119 virtual void printOneLine( std::ostream &, int indent = 0) const; 120 121 virtual Expression *build() const; 122 }; 123 124 class ConstantNode : public ExpressionNode { 125 public: 126 enum Type { Integer, Float, Character, String }; 127 128 ConstantNode( ConstantExpr * ); 129 ConstantNode( const ConstantNode &other ) : expr( other.expr->clone() ) {}; 130 ~ConstantNode() { delete expr; } 131 132 virtual ConstantNode *clone() const { return new ConstantNode( *this ); } 133 virtual void print( std::ostream &, int indent = 0) const; 134 virtual void printOneLine( std::ostream &, int indent = 0) const; 135 136 ConstantNode *appendstr( const std::string *newValue ); 137 138 Expression *build() const; 139 private: 140 ConstantExpr *expr; 141 }; 142 143 ConstantNode *makeConstant( ConstantNode::Type, std::string * ); 144 ConstantNode *makeConstantStr( ConstantNode::Type type, std::string *str ); 145 146 class VarRefNode : public ExpressionNode { 147 public: 148 VarRefNode(); 149 VarRefNode( const std::string *, bool isLabel = false ); 150 VarRefNode( const VarRefNode &other ); 151 152 virtual Expression *build() const ; 153 154 virtual VarRefNode *clone() const { return new VarRefNode( *this ); } 155 156 virtual void print( std::ostream &, int indent = 0 ) const; 157 virtual void printOneLine( std::ostream &, int indent = 0 ) const; 158 private: 159 bool isLabel; 160 }; 161 162 class DesignatorNode : public ExpressionNode { 163 public: 164 DesignatorNode( ExpressionNode *expr, bool isArrayIndex = false ); 165 DesignatorNode( const DesignatorNode &other ); 166 167 virtual Expression *build() const ; 168 virtual DesignatorNode *clone() const { return new DesignatorNode( *this ); } 169 170 virtual void print( std::ostream &, int indent = 0 ) const; 171 virtual void printOneLine( std::ostream &, int indent = 0 ) const; 172 private: 173 bool isArrayIndex; 174 }; 175 176 class TypeValueNode : public ExpressionNode { 177 public: 178 TypeValueNode( DeclarationNode * ); 179 TypeValueNode( const TypeValueNode &other ); 180 181 DeclarationNode *get_decl() const { return decl; } 182 183 virtual Expression *build() const ; 184 185 virtual TypeValueNode *clone() const { return new TypeValueNode( *this ); } 186 187 virtual void print( std::ostream &, int indent = 0) const; 188 virtual void printOneLine( std::ostream &, int indent = 0) const; 189 private: 190 DeclarationNode *decl; 191 }; 192 193 class OperatorNode : public ExpressionNode { 194 public: 195 enum Type { TupleC, Comma, TupleFieldSel, // n-adic 196 // triadic 197 Cond, NCond, 198 // diadic 199 SizeOf, AlignOf, OffsetOf, Attr, Plus, Minus, Mul, Div, Mod, Or, And, 200 BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq, 201 Assign, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn, 202 Index, FieldSel, PFieldSel, Range, 203 // monadic 204 UnPlus, UnMinus, AddressOf, PointTo, Neg, BitNeg, Incr, IncrPost, Decr, DecrPost, LabelAddress, 205 Ctor, Dtor, 206 }; 207 208 OperatorNode( Type t ); 209 OperatorNode( const OperatorNode &other ); 210 virtual ~OperatorNode(); 211 212 virtual OperatorNode *clone() const { return new OperatorNode( *this ); } 213 214 Type get_type() const; 215 const char *get_typename() const; 216 217 virtual void print( std::ostream &, int indent = 0) const; 218 virtual void printOneLine( std::ostream &, int indent = 0) const; 219 220 virtual Expression *build() const { return 0; } 221 private: 222 Type type; 223 }; 224 225 class CompositeExprNode : public ExpressionNode { 226 public: 227 CompositeExprNode(); 228 CompositeExprNode( const std::string * ); 229 CompositeExprNode( ExpressionNode *f, ExpressionNode *args = 0 ); 230 CompositeExprNode( ExpressionNode *f, ExpressionNode *arg1, ExpressionNode *arg2 ); 231 CompositeExprNode( const CompositeExprNode &other ); 232 virtual ~CompositeExprNode(); 233 234 virtual CompositeExprNode *clone() const { return new CompositeExprNode( *this ); } 235 virtual Expression *build() const; 236 237 virtual void print( std::ostream &, int indent = 0) const; 238 virtual void printOneLine( std::ostream &, int indent = 0) const; 239 240 void set_function( ExpressionNode * ); 241 void set_args( ExpressionNode * ); 242 243 void add_arg( ExpressionNode * ); 244 245 ExpressionNode *get_function() const; 246 ExpressionNode *get_args() const; 247 private: 248 ExpressionNode *function; 249 ExpressionNode *arguments; 250 }; 251 252 class AsmExprNode : public ExpressionNode { 253 public: 254 AsmExprNode(); 255 AsmExprNode( ExpressionNode *inout, ConstantNode *constraint, ExpressionNode *operand ) : inout( inout ), constraint( constraint ), operand( operand ) {} 256 virtual ~AsmExprNode() { delete inout; delete constraint; delete operand; } 257 258 virtual AsmExprNode *clone() const { return new AsmExprNode( *this ); } 259 virtual Expression *build() const; 260 261 virtual void print( std::ostream &, int indent = 0) const; 262 virtual void printOneLine( std::ostream &, int indent = 0) const; 263 264 ExpressionNode *get_inout() const { return inout; }; 265 void set_inout( ExpressionNode *newValue ) { inout = newValue; } 266 267 ConstantNode *get_constraint() const { return constraint; }; 268 void set_constraint( ConstantNode *newValue ) { constraint = newValue; } 269 270 ExpressionNode *get_operand() const { return operand; }; 271 void set_operand( ExpressionNode *newValue ) { operand = newValue; } 272 private: 273 ExpressionNode *inout; 274 ConstantNode *constraint; 275 ExpressionNode *operand; 276 }; 277 278 class LabelNode : public ExpressionNode { 279 public: 280 virtual Expression *build() const { return NULL; } 281 virtual LabelNode *clone() const { return new LabelNode( *this ); } 282 283 virtual void print( std::ostream &, int indent = 0) const; 284 virtual void printOneLine( std::ostream &, int indent = 0) const; 285 286 const std::list< Label > &get_labels() const { return labels; }; 287 void append_label( std::string *label ) { labels.push_back( *label ); delete label; } 288 private: 131 enum class OperKinds { 132 // diadic 133 SizeOf, AlignOf, OffsetOf, Plus, Minus, Mul, Div, Mod, Or, And, 134 BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq, 135 Assign, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn, 136 Index, Range, 137 // monadic 138 UnPlus, UnMinus, AddressOf, PointTo, Neg, BitNeg, Incr, IncrPost, Decr, DecrPost, LabelAddress, 139 Ctor, Dtor, 140 }; 141 142 struct LabelNode { 289 143 std::list< Label > labels; 290 144 }; 291 145 292 class CommaExprNode : public CompositeExprNode { 293 public: 294 CommaExprNode(); 295 CommaExprNode( ExpressionNode * ); 296 CommaExprNode( ExpressionNode *, ExpressionNode * ); 297 CommaExprNode( const CommaExprNode &other ); 298 299 virtual CommaExprNode *add_to_list( ExpressionNode * ); 300 virtual CommaExprNode *clone() const { return new CommaExprNode( *this ); } 301 }; 302 303 class ForCtlExprNode : public ExpressionNode { 304 public: 305 ForCtlExprNode( ParseNode *, ExpressionNode *, ExpressionNode * ) throw ( SemanticError ); 306 ForCtlExprNode( const ForCtlExprNode &other ); 307 ~ForCtlExprNode(); 308 309 StatementNode *get_init() const { return init; } 310 ExpressionNode *get_condition() const { return condition; } 311 ExpressionNode *get_change() const { return change; } 312 313 virtual ForCtlExprNode *clone() const { return new ForCtlExprNode( *this ); } 314 virtual Expression *build() const; 315 316 virtual void print( std::ostream &, int indent = 0 ) const; 317 virtual void printOneLine( std::ostream &, int indent = 0 ) const; 318 private: 319 StatementNode *init; 320 ExpressionNode *condition; 321 ExpressionNode *change; 322 }; 323 324 class ValofExprNode : public ExpressionNode { 325 public: 326 ValofExprNode(); 327 ValofExprNode( StatementNode *s = 0 ); 328 ValofExprNode( const ValofExprNode &other ); 329 ~ValofExprNode(); 330 331 virtual ValofExprNode *clone() const { return new ValofExprNode( *this ); } 332 333 StatementNode *get_body() const { return body; } 334 void print( std::ostream &, int indent = 0 ) const; 335 void printOneLine( std::ostream &, int indent = 0 ) const; 336 Expression *build() const; 337 338 private: 339 StatementNode *body; 340 }; 146 Expression *build_constantInteger( std::string &str ); 147 Expression *build_constantFloat( std::string &str ); 148 Expression *build_constantChar( std::string &str ); 149 ConstantExpr *build_constantStr( std::string &str ); 150 151 NameExpr *build_varref( const std::string *name, bool labelp = false ); 152 Expression *build_typevalue( DeclarationNode *decl ); 153 154 Expression *build_cast( DeclarationNode * decl_node, ExpressionNode *expr_node ); 155 Expression *build_fieldSel( ExpressionNode *expr_node, NameExpr *member ); 156 Expression *build_pfieldSel( ExpressionNode *expr_node, NameExpr *member ); 157 Expression *build_addressOf( ExpressionNode *expr_node ); 158 Expression *build_sizeOfexpr( ExpressionNode *expr_node ); 159 Expression *build_sizeOftype( DeclarationNode *decl_node ); 160 Expression *build_alignOfexpr( ExpressionNode *expr_node ); 161 Expression *build_alignOftype( DeclarationNode *decl_node ); 162 Expression *build_offsetOf( DeclarationNode *decl_node, NameExpr *member ); 163 Expression *build_and( ExpressionNode *expr_node1, ExpressionNode *expr_node2 ); 164 Expression *build_and_or( ExpressionNode *expr_node1, ExpressionNode *expr_node2, bool kind ); 165 Expression *build_unary_val( OperKinds op, ExpressionNode *expr_node ); 166 Expression *build_unary_ptr( OperKinds op, ExpressionNode *expr_node ); 167 Expression *build_binary_val( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 ); 168 Expression *build_binary_ptr( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 ); 169 Expression *build_cond( ExpressionNode *expr_node1, ExpressionNode *expr_node2, ExpressionNode *expr_node3 ); 170 Expression *build_comma( ExpressionNode *expr_node1, ExpressionNode *expr_node2 ); 171 Expression *build_attrexpr( NameExpr *var, ExpressionNode * expr_node ); 172 Expression *build_attrtype( NameExpr *var, DeclarationNode * decl_node ); 173 Expression *build_tuple( ExpressionNode * expr_node = 0 ); 174 Expression *build_func( ExpressionNode * function, ExpressionNode * expr_node ); 175 Expression *build_range( ExpressionNode * low, ExpressionNode *high ); 176 Expression *build_asmexpr( ExpressionNode *inout, ConstantExpr *constraint, ExpressionNode *operand ); 177 Expression *build_valexpr( StatementNode *s ); 178 Expression *build_compoundLiteral( DeclarationNode *decl_node, InitializerNode *kids ); 179 180 //############################################################################## 341 181 342 182 class TypeData; … … 386 226 static DeclarationNode *newBuiltinType( BuiltinType ); 387 227 228 DeclarationNode(); 229 ~DeclarationNode(); 230 DeclarationNode *clone() const; 231 388 232 DeclarationNode *addQualifiers( DeclarationNode *); 389 233 DeclarationNode *copyStorageClasses( DeclarationNode *); … … 401 245 DeclarationNode *addNewArray( DeclarationNode *array ); 402 246 DeclarationNode *addParamList( DeclarationNode *list ); 403 DeclarationNode *addIdList( DeclarationNode *list ); 247 DeclarationNode *addIdList( DeclarationNode *list ); // old-style functions 404 248 DeclarationNode *addInitializer( InitializerNode *init ); 405 249 … … 412 256 DeclarationNode *appendList( DeclarationNode * ); 413 257 414 DeclarationNode *clone() const; 415 void print( std::ostream &, int indent = 0 ) const; 416 void printList( std::ostream &, int indent = 0 ) const; 258 void print( std::ostream &os, int indent = 0 ) const; 259 void printList( std::ostream &os, int indent = 0 ) const; 417 260 418 261 Declaration *build() const; … … 427 270 bool get_extension() const { return extension; } 428 271 DeclarationNode *set_extension( bool exten ) { extension = exten; return this; } 429 430 DeclarationNode();431 ~DeclarationNode();432 272 private: 433 273 StorageClass buildStorageClass() const; … … 448 288 }; // DeclarationNode 449 289 290 Type *buildType( TypeData *type ); 291 292 //############################################################################## 293 450 294 class StatementNode : public ParseNode { 451 295 public: 452 enum Type { Exp, If, Switch, Case, Default, Choose, Fallthru, 453 While, Do, For, 454 Goto, Continue, Break, Return, Throw, 455 Try, Catch, Finally, Asm, 456 Decl 457 }; 458 459 StatementNode(); 460 StatementNode( const std::string *name ); 461 StatementNode( Type t, ExpressionNode *control = 0, StatementNode *block = 0 ); 462 StatementNode( Type t, std::string *target ); 296 StatementNode() { stmt = nullptr; } 297 StatementNode( Statement *stmt ) : stmt( stmt ) {} 463 298 StatementNode( DeclarationNode *decl ); 464 465 ~StatementNode(); 466 467 static StatementNode *newCatchStmt( DeclarationNode *d = 0, StatementNode *s = 0, bool catchRestP = false ); 468 469 StatementNode *set_block( StatementNode *b ) { block = b; return this; } 470 StatementNode *get_block() const { return block; } 471 472 void set_control( ExpressionNode *c ) { control = c; } 473 ExpressionNode *get_control() const { return control; } 474 475 StatementNode::Type get_type() const { return type; } 476 477 StatementNode *add_label( const std::string * ); 478 const std::list<std::string> &get_labels() const { return labels; } 479 480 void addDeclaration( DeclarationNode *newDecl ) { decl = newDecl; } 481 void setCatchRest( bool newVal ) { isCatchRest = newVal; } 482 483 std::string get_target() const; 484 485 StatementNode *add_controlexp( ExpressionNode * ); 486 StatementNode *append_block( StatementNode * ); 487 StatementNode *append_last_case( StatementNode * ); 488 489 void print( std::ostream &, int indent = 0) const; 490 virtual StatementNode *clone() const; 491 virtual Statement *build() const; 492 private: 493 static const char *StType[]; 494 Type type; 495 ExpressionNode *control; 496 StatementNode *block; 497 std::list<std::string> labels; 498 std::string *target; // target label for jump statements 499 DeclarationNode *decl; 500 bool isCatchRest; 299 virtual ~StatementNode() {} 300 301 virtual StatementNode *clone() const { assert( false ); return nullptr; } 302 virtual Statement *build() const { return stmt; } 303 304 virtual StatementNode *add_label( const std::string * name ) { 305 stmt->get_labels().emplace_back( *name ); 306 return this; 307 } 308 309 virtual StatementNode *append_last_case( StatementNode * ); 310 311 virtual void print( std::ostream &os, int indent = 0 ) {} 312 virtual void printList( std::ostream &os, int indent = 0 ) {} 313 private: 314 Statement *stmt; 501 315 }; // StatementNode 502 316 503 class CompoundStmtNode : public StatementNode { 504 public: 505 CompoundStmtNode(); 506 CompoundStmtNode( const std::string * ); 507 CompoundStmtNode( StatementNode * ); 508 ~CompoundStmtNode(); 509 510 void add_statement( StatementNode * ); 511 512 void print( std::ostream &, int indent = 0 ) const; 513 virtual Statement *build() const; 514 private: 515 StatementNode *first, *last; 516 }; 517 518 class AsmStmtNode : public StatementNode { 519 public: 520 AsmStmtNode( Type, bool voltile, ConstantNode *instruction, ExpressionNode *output = 0, ExpressionNode *input = 0, ConstantNode *clobber = 0, LabelNode *gotolabels = 0 ); 521 ~AsmStmtNode(); 522 523 void print( std::ostream &, int indent = 0 ) const; 524 Statement *build() const; 525 private: 526 bool voltile; 527 ConstantNode *instruction; 528 ExpressionNode *output, *input; 529 ConstantNode *clobber; 530 std::list< Label > gotolabels; 531 }; 532 533 class NullStmtNode : public CompoundStmtNode { 534 public: 535 Statement *build() const; 536 void print( std::ostream &, int indent = 0 ) const; 537 }; 538 539 class InitializerNode : public ParseNode { 540 public: 541 InitializerNode( ExpressionNode *, bool aggrp = false, ExpressionNode *des = 0 ); 542 InitializerNode( InitializerNode *, bool aggrp = false, ExpressionNode *des = 0 ); 543 ~InitializerNode(); 544 545 ExpressionNode *get_expression() const { return expr; } 546 547 InitializerNode *set_designators( ExpressionNode *des ) { designator = des; return this; } 548 ExpressionNode *get_designators() const { return designator; } 549 550 InitializerNode *set_maybeConstructed( bool value ) { maybeConstructed = value; return this; } 551 bool get_maybeConstructed() const { return maybeConstructed; } 552 553 InitializerNode *next_init() const { return kids; } 554 555 void print( std::ostream &, int indent = 0 ) const; 556 void printOneLine( std::ostream & ) const; 557 558 virtual Initializer *build() const; 559 private: 560 ExpressionNode *expr; 561 bool aggregate; 562 ExpressionNode *designator; // may be list 563 InitializerNode *kids; 564 bool maybeConstructed; 565 }; 566 567 class CompoundLiteralNode : public ExpressionNode { 568 public: 569 CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids ); 570 CompoundLiteralNode( const CompoundLiteralNode &type ); 571 ~CompoundLiteralNode(); 572 573 virtual CompoundLiteralNode *clone() const; 574 575 DeclarationNode *get_type() const { return type; } 576 CompoundLiteralNode *set_type( DeclarationNode *t ) { type = t; return this; } 577 578 InitializerNode *get_initializer() const { return kids; } 579 CompoundLiteralNode *set_initializer( InitializerNode *k ) { kids = k; return this; } 580 581 void print( std::ostream &, int indent = 0 ) const; 582 void printOneLine( std::ostream &, int indent = 0 ) const; 583 584 virtual Expression *build() const; 585 private: 586 DeclarationNode *type; 587 InitializerNode *kids; 588 }; 317 Statement *build_expr( ExpressionNode *ctl ); 318 319 struct ForCtl { 320 ForCtl( ExpressionNode *expr, ExpressionNode *condition, ExpressionNode *change ) : 321 init( new StatementNode( build_expr( expr ) ) ), condition( condition ), change( change ) {} 322 ForCtl( DeclarationNode *decl, ExpressionNode *condition, ExpressionNode *change ) : 323 init( new StatementNode( decl ) ), condition( condition ), change( change ) {} 324 325 StatementNode *init; 326 ExpressionNode *condition; 327 ExpressionNode *change; 328 }; 329 330 Statement *build_if( ExpressionNode *ctl, StatementNode *then_stmt, StatementNode *else_stmt ); 331 Statement *build_switch( ExpressionNode *ctl, StatementNode *stmt ); 332 Statement *build_case( ExpressionNode *ctl ); 333 Statement *build_default(); 334 Statement *build_while( ExpressionNode *ctl, StatementNode *stmt, bool kind = false ); 335 Statement *build_for( ForCtl *forctl, StatementNode *stmt ); 336 Statement *build_branch( std::string identifier, BranchStmt::Type kind ); 337 Statement *build_computedgoto( ExpressionNode *ctl ); 338 Statement *build_return( ExpressionNode *ctl ); 339 Statement *build_throw( ExpressionNode *ctl ); 340 Statement *build_try( StatementNode *try_stmt, StatementNode *catch_stmt, StatementNode *finally_stmt ); 341 Statement *build_catch( DeclarationNode *decl, StatementNode *stmt, bool catchAny = false ); 342 Statement *build_finally( StatementNode *stmt ); 343 Statement *build_compound( StatementNode *first ); 344 Statement *build_asmstmt( bool voltile, ConstantExpr *instruction, ExpressionNode *output = 0, ExpressionNode *input = 0, ExpressionNode *clobber = 0, LabelNode *gotolabels = 0 ); 345 346 //############################################################################## 589 347 590 348 template< typename SynTreeType, typename NodeType > 591 void buildList( const NodeType *firstNode, std::list< SynTreeType * > &outputList ) {349 void buildList( const NodeType *firstNode, std::list< SynTreeType * > &outputList ) { 592 350 SemanticError errors; 593 std::back_insert_iterator< std::list< SynTreeType * > > out( outputList );351 std::back_insert_iterator< std::list< SynTreeType * > > out( outputList ); 594 352 const NodeType *cur = firstNode; 595 353 596 354 while ( cur ) { 597 355 try { 598 // SynTreeType *result = dynamic_cast< SynTreeType * >( maybeBuild<typename std::result_of<decltype(&NodeType::build)(NodeType)>::type>( cur ) );599 SynTreeType *result = dynamic_cast< SynTreeType * >( maybeBuild<typename std::pointer_traits<decltype(cur->build())>::element_type>( cur ) );356 // SynTreeType *result = dynamic_cast< SynTreeType * >( maybeBuild< typename std::result_of< decltype(&NodeType::build)(NodeType)>::type >( cur ) ); 357 SynTreeType *result = dynamic_cast< SynTreeType * >( maybeBuild< typename std::pointer_traits< decltype(cur->build())>::element_type >( cur ) ); 600 358 if ( result ) { 601 359 *out++ = result; … … 605 363 errors.append( e ); 606 364 } // try 607 cur = dynamic_cast< NodeType * >( cur->get_link() );365 cur = dynamic_cast< NodeType * >( cur->get_next() ); 608 366 } // while 609 367 if ( ! errors.isEmpty() ) { … … 614 372 // in DeclarationNode.cc 615 373 void buildList( const DeclarationNode *firstNode, std::list< Declaration * > &outputList ); 616 void buildList( const DeclarationNode *firstNode, std::list< DeclarationWithType * > &outputList );374 void buildList( const DeclarationNode *firstNode, std::list< DeclarationWithType * > &outputList ); 617 375 void buildTypeList( const DeclarationNode *firstNode, std::list< Type * > &outputList ); 618 619 // in ExpressionNode.cc620 ExpressionNode *flattenCommas( ExpressionNode *list );621 ExpressionNode *tupleContents( ExpressionNode *tuple );622 376 623 377 #endif // PARSENODE_H -
src/Parser/Parser.cc
r950f7a7 r7527e63 10 10 // Created On : Sat May 16 14:54:28 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Mar 21 18:04:47201613 // Update Count : 512 // Last Modified On : Mon Aug 15 17:44:22 2016 13 // Update Count : 7 14 14 // 15 15 -
src/Parser/Parser.h
r950f7a7 r7527e63 10 10 // Created On : Sat May 16 14:56:50 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat May 16 14:58:56 201513 // Update Count : 212 // Last Modified On : Mon Aug 15 16:33:22 2016 13 // Update Count : 3 14 14 // 15 15 -
src/Parser/StatementNode.cc
r950f7a7 r7527e63 10 10 // Created On : Sat May 16 14:59:41 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Jul 12 17:21:02201613 // Update Count : 13312 // Last Modified On : Mon Aug 15 20:47:11 2016 13 // Update Count : 322 14 14 // 15 15 … … 26 26 using namespace std; 27 27 28 const char *StatementNode::StType[] = {29 "Exp", "If", "Switch", "Case", "Default", "Choose", "Fallthru",30 "While", "Do", "For",31 "Goto", "Continue", "Break", "Return", "Throw",32 "Try", "Catch", "Finally", "Asm",33 "Decl"34 };35 28 36 StatementNode::StatementNode() : ParseNode(), control( 0 ), block( 0 ), labels( 0 ), target( 0 ), decl( 0 ), isCatchRest ( false ) {} 37 38 StatementNode::StatementNode( const string *name ) : ParseNode( name ), control( 0 ), block( 0 ), labels( 0 ), target( 0 ), decl( 0 ), isCatchRest ( false ) {} 39 40 StatementNode::StatementNode( DeclarationNode *decl ) : type( Decl ), control( 0 ), block( 0 ), labels( 0 ), target( 0 ), isCatchRest ( false ) { 29 StatementNode::StatementNode( DeclarationNode *decl ) { 41 30 if ( decl ) { 42 if ( DeclarationNode *agg = decl->extractAggregate() ) { 43 this->decl = agg; 44 StatementNode *nextStmt = new StatementNode; 45 nextStmt->type = Decl; 46 nextStmt->decl = decl; 47 next = nextStmt; 48 if ( decl->get_link() ) { 49 next->set_next( new StatementNode( dynamic_cast< DeclarationNode* >( decl->get_link() ) ) ); 31 DeclarationNode *agg = decl->extractAggregate(); 32 if ( agg ) { 33 StatementNode *nextStmt = new StatementNode( new DeclStmt( noLabels, maybeBuild< Declaration >( decl ) ) ); 34 set_next( nextStmt ); 35 if ( decl->get_next() ) { 36 get_next()->set_next( new StatementNode( dynamic_cast< DeclarationNode * >(decl->get_next()) ) ); 50 37 decl->set_next( 0 ); 51 38 } // if 52 39 } else { 53 if ( decl->get_ link() ) {54 next = new StatementNode( dynamic_cast< DeclarationNode* >( decl->get_link() ) );40 if ( decl->get_next() ) { 41 set_next(new StatementNode( dynamic_cast< DeclarationNode * >( decl->get_next() ) ) ); 55 42 decl->set_next( 0 ); 56 43 } // if 57 this->decl= decl;44 agg = decl; 58 45 } // if 46 stmt = new DeclStmt( noLabels, maybeBuild< Declaration >(agg) ); 47 } else { 48 assert( false ); 59 49 } // if 60 50 } 61 51 62 StatementNode::StatementNode( Type t, ExpressionNode *ctrl_label, StatementNode *block ) : type( t ), control( ctrl_label ), block( block ), labels( 0 ), target( 0 ), decl( 0 ), isCatchRest ( false ) { 63 this->control = ( t == Default ) ? 0 : control; 64 } 65 66 StatementNode::StatementNode( Type t, string *target ) : type( t ), control( 0 ), block( 0 ), labels( 0 ), target( target ), decl( 0 ), isCatchRest ( false ) {} 67 68 StatementNode::~StatementNode() { 69 delete control; 70 delete block; 71 delete target; 72 delete decl; 73 } 74 75 StatementNode * StatementNode::newCatchStmt( DeclarationNode *d, StatementNode *s, bool catchRestP ) { 76 StatementNode *ret = new StatementNode( StatementNode::Catch, 0, s ); 77 ret->addDeclaration( d ); 78 ret->setCatchRest( catchRestP ); 79 80 return ret; 81 } 82 83 std::string StatementNode::get_target() const{ 84 if ( target ) 85 return *target; 86 87 return string(""); 88 } 89 90 StatementNode * StatementNode::clone() const { 91 StatementNode *newnode = new StatementNode( type, maybeClone( control ), maybeClone( block ) ); 92 if ( target ) { 93 newnode->target = new string( *target ); 94 } else { 95 newnode->target = 0; 96 } // if 97 newnode->decl = maybeClone( decl ); 98 return newnode; 99 } 100 101 StatementNode *StatementNode::add_label( const std::string *l ) { 102 if ( l != 0 ) { 103 labels.push_front( *l ); 104 delete l; 105 } // if 52 StatementNode *StatementNode::append_last_case( StatementNode *stmt ) { 53 StatementNode *prev = this; 54 // find end of list and maintain previous pointer 55 for ( StatementNode * curr = prev; curr != nullptr; curr = (StatementNode *)curr->get_next() ) { 56 StatementNode *node = dynamic_cast< StatementNode * >(curr); 57 assert( node ); 58 assert( dynamic_cast< CaseStmt * >(node->stmt) ); 59 prev = curr; 60 } // for 61 // convert from StatementNode list to Statement list 62 StatementNode *node = dynamic_cast< StatementNode * >(prev); 63 std::list< Statement * > stmts; 64 buildList( stmt, stmts ); 65 // splice any new Statements to end of current Statements 66 CaseStmt * caseStmt = dynamic_cast< CaseStmt * >(node->stmt); 67 caseStmt->get_statements().splice( caseStmt->get_statements().end(), stmts ); 106 68 return this; 107 69 } 108 70 109 StatementNode *StatementNode::add_controlexp( ExpressionNode *e ) { 110 if ( control && e ) 111 control->add_to_list( e ); // xxx - check this 112 return this; 71 Statement *build_expr( ExpressionNode *ctl ) { 72 Expression *e = maybeBuild< Expression >( ctl ); 73 74 if ( e ) 75 return new ExprStmt( noLabels, e ); 76 else 77 return new NullStmt( noLabels ); 113 78 } 114 79 115 StatementNode *StatementNode::append_block( StatementNode *stmt ) { 116 if ( stmt != 0 ) { 117 if ( block == 0 ) 118 block = stmt; 119 else 120 block->set_link( stmt ); 80 Statement *build_if( ExpressionNode *ctl, StatementNode *then_stmt, StatementNode *else_stmt ) { 81 Statement *thenb, *elseb = 0; 82 std::list< Statement * > branches; 83 buildList< Statement, StatementNode >( then_stmt, branches ); 84 assert( branches.size() == 1 ); 85 thenb = branches.front(); 86 87 if ( else_stmt ) { 88 std::list< Statement * > branches; 89 buildList< Statement, StatementNode >( else_stmt, branches ); 90 assert( branches.size() == 1 ); 91 elseb = branches.front(); 121 92 } // if 122 return this;93 return new IfStmt( noLabels, notZeroExpr( maybeBuild< Expression >(ctl) ), thenb, elseb ); 123 94 } 124 95 125 StatementNode *StatementNode::append_last_case( StatementNode *stmt ) { 126 if ( stmt != 0 ) { 127 StatementNode *next = ( StatementNode *)get_link(); 128 if ( next && ( next->get_type() == StatementNode::Case || next->get_type() == StatementNode::Default ) ) 129 next->append_last_case ( stmt ); 130 else 131 if ( block == 0 ) 132 block = stmt; 133 else 134 block->set_link( stmt ); 135 } // if 136 return this; 96 Statement *build_switch( ExpressionNode *ctl, StatementNode *stmt ) { 97 std::list< Statement * > branches; 98 buildList< Statement, StatementNode >( stmt, branches ); 99 assert( branches.size() >= 0 ); // size == 0 for switch (...) {}, i.e., no declaration or statements 100 return new SwitchStmt( noLabels, maybeBuild< Expression >(ctl), branches ); 101 } 102 Statement *build_case( ExpressionNode *ctl ) { 103 std::list< Statement * > branches; 104 return new CaseStmt( noLabels, maybeBuild< Expression >(ctl), branches ); 105 } 106 Statement *build_default() { 107 std::list< Statement * > branches; 108 return new CaseStmt( noLabels, nullptr, branches, true ); 137 109 } 138 110 139 void StatementNode::print( std::ostream &os, int indent ) const { 140 if ( ! labels.empty() ) { 141 std::list<std::string>::const_iterator i; 111 Statement *build_while( ExpressionNode *ctl, StatementNode *stmt, bool kind ) { 112 std::list< Statement * > branches; 113 buildList< Statement, StatementNode >( stmt, branches ); 114 assert( branches.size() == 1 ); 115 return new WhileStmt( noLabels, notZeroExpr( maybeBuild< Expression >(ctl) ), branches.front(), kind ); 116 } 142 117 143 os << string( indent, ' ' ); 144 for ( i = labels.begin(); i != labels.end(); i++ ) 145 os << *i << ":"; 146 os << endl; 118 Statement *build_for( ForCtl *forctl, StatementNode *stmt ) { 119 std::list< Statement * > branches; 120 buildList< Statement, StatementNode >( stmt, branches ); 121 assert( branches.size() == 1 ); 122 123 std::list< Statement * > init; 124 if ( forctl->init != 0 ) { 125 buildList( forctl->init, init ); 147 126 } // if 148 127 149 switch ( type ) { 150 case Decl: 151 decl->print( os, indent ); 152 break; 153 case Exp: 154 if ( control ) { 155 os << string( indent, ' ' ); 156 control->print( os, indent ); 157 os << endl; 158 } else 159 os << string( indent, ' ' ) << "Null Statement" << endl; 160 break; 161 default: 162 os << string( indent, ' ' ) << StatementNode::StType[type] << endl; 163 if ( type == Catch ) { 164 if ( decl ) { 165 os << string( indent + ParseNode::indent_by, ' ' ) << "Declaration: " << endl; 166 decl->print( os, indent + 2 * ParseNode::indent_by ); 167 } else if ( isCatchRest ) { 168 os << string( indent + ParseNode::indent_by, ' ' ) << "Catches the rest " << endl; 169 } else { 170 ; // should never reach here 171 } // if 172 } // if 173 if ( control ) { 174 os << string( indent + ParseNode::indent_by, ' ' ) << "Control: " << endl; 175 control->printList( os, indent + 2 * ParseNode::indent_by ); 176 } // if 177 if ( block ) { 178 os << string( indent + ParseNode::indent_by, ' ' ) << "Branches of execution: " << endl; 179 block->printList( os, indent + 2 * ParseNode::indent_by ); 180 } // if 181 if ( target ) { 182 os << string( indent + ParseNode::indent_by, ' ' ) << "Target: " << get_target() << endl; 183 } // if 184 break; 185 } // switch 128 Expression *cond = 0; 129 if ( forctl->condition != 0 ) 130 cond = notZeroExpr( maybeBuild< Expression >(forctl->condition) ); 131 132 Expression *incr = 0; 133 if ( forctl->change != 0 ) 134 incr = maybeBuild< Expression >(forctl->change); 135 136 delete forctl; 137 return new ForStmt( noLabels, init, cond, incr, branches.front() ); 186 138 } 187 139 188 Statement *StatementNode::build() const { 189 std::list<Statement *> branches; 190 std::list<Expression *> exps; 191 std::list<Label> labs; 192 193 if ( ! labels.empty() ) { 194 std::back_insert_iterator< std::list<Label> > lab_it( labs ); 195 copy( labels.begin(), labels.end(), lab_it ); 196 } // if 197 198 // try { 199 buildList<Statement, StatementNode>( get_block(), branches ); 200 201 switch ( type ) { 202 case Decl: 203 return new DeclStmt( labs, maybeBuild< Declaration >( decl ) ); 204 case Exp: 205 { 206 Expression *e = maybeBuild< Expression >( get_control() ); 207 208 if ( e ) 209 return new ExprStmt( labs, e ); 210 else 211 return new NullStmt( labs ); 212 } 213 case If: 214 { 215 Statement *thenb = 0, *elseb = 0; 216 assert( branches.size() >= 1 ); 217 218 thenb = branches.front(); 219 branches.pop_front(); 220 if ( ! branches.empty() ) { 221 elseb = branches.front(); 222 branches.pop_front(); 223 } // if 224 return new IfStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), thenb, elseb ); 225 } 226 case While: 227 assert( branches.size() == 1 ); 228 return new WhileStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), branches.front() ); 229 case Do: 230 assert( branches.size() == 1 ); 231 return new WhileStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), branches.front(), true ); 232 case For: 233 { 234 assert( branches.size() == 1 ); 235 236 ForCtlExprNode *ctl = dynamic_cast<ForCtlExprNode *>( get_control() ); 237 assert( ctl != 0 ); 238 239 std::list<Statement *> init; 240 if ( ctl->get_init() != 0 ) { 241 buildList( ctl->get_init(), init ); 242 } // if 243 244 Expression *cond = 0; 245 if ( ctl->get_condition() != 0 ) 246 cond = notZeroExpr( maybeBuild<Expression>(ctl->get_condition()) ); 247 248 Expression *incr = 0; 249 if ( ctl->get_change() != 0 ) 250 incr = maybeBuild<Expression>(ctl->get_change()); 251 252 return new ForStmt( labs, init, cond, incr, branches.front() ); 253 } 254 case Switch: 255 return new SwitchStmt( labs, maybeBuild<Expression>(get_control()), branches ); 256 case Case: 257 return new CaseStmt( labs, maybeBuild<Expression>(get_control()), branches ); 258 case Default: 259 return new CaseStmt( labs, 0, branches, true ); 260 case Goto: 261 { 262 if ( get_target() == "" ) { // computed goto 263 assert( get_control() != 0 ); 264 return new BranchStmt( labs, maybeBuild<Expression>(get_control()), BranchStmt::Goto ); 265 } // if 266 267 return new BranchStmt( labs, get_target(), BranchStmt::Goto ); 268 } 269 case Break: 270 return new BranchStmt( labs, get_target(), BranchStmt::Break ); 271 case Continue: 272 return new BranchStmt( labs, get_target(), BranchStmt::Continue ); 273 case Return: 274 case Throw : 275 buildList( get_control(), exps ); 276 if ( exps.size() ==0 ) 277 return new ReturnStmt( labs, 0, type == Throw ); 278 if ( exps.size() > 0 ) 279 return new ReturnStmt( labs, exps.back(), type == Throw ); 280 case Try: 281 { 282 assert( branches.size() >= 0 ); 283 CompoundStmt *tryBlock = dynamic_cast<CompoundStmt *>( branches.front()); 284 branches.pop_front(); 285 FinallyStmt *finallyBlock = 0; 286 if ( ( finallyBlock = dynamic_cast<FinallyStmt *>( branches.back())) ) { 287 branches.pop_back(); 288 } // if 289 return new TryStmt( labs, tryBlock, branches, finallyBlock ); 290 } 291 case Catch: 292 { 293 assert( branches.size() == 1 ); 294 295 return new CatchStmt( labs, maybeBuild< Declaration >( decl ), branches.front(), isCatchRest ); 296 } 297 case Finally: 298 { 299 assert( branches.size() == 1 ); 300 CompoundStmt *block = dynamic_cast<CompoundStmt *>( branches.front() ); 301 assert( block != 0 ); 302 303 return new FinallyStmt( labs, block ); 304 } 305 case Asm: 306 assert( false ); 307 default: 308 // shouldn't be here 309 return 0; 310 } // switch 140 Statement *build_branch( std::string identifier, BranchStmt::Type kind ) { 141 return new BranchStmt( noLabels, identifier, kind ); 142 } 143 Statement *build_computedgoto( ExpressionNode *ctl ) { 144 return new BranchStmt( noLabels, maybeBuild< Expression >(ctl), BranchStmt::Goto ); 311 145 } 312 146 313 314 CompoundStmtNode::CompoundStmtNode() : first( 0 ), last( 0 ) {} 315 316 CompoundStmtNode::CompoundStmtNode( const string *name_ ) : StatementNode( name_ ), first( 0 ), last( 0 ) {} 317 318 CompoundStmtNode::CompoundStmtNode( StatementNode *stmt ) : first( stmt ) { 319 if ( first ) { 320 last = ( StatementNode *)( stmt->get_last()); 321 } else { 322 last = 0; 323 } // if 147 Statement *build_return( ExpressionNode *ctl ) { 148 std::list< Expression * > exps; 149 buildList( ctl, exps ); 150 return new ReturnStmt( noLabels, exps.size() > 0 ? exps.back() : nullptr ); 151 } 152 Statement *build_throw( ExpressionNode *ctl ) { 153 std::list< Expression * > exps; 154 buildList( ctl, exps ); 155 return new ReturnStmt( noLabels, exps.size() > 0 ? exps.back() : nullptr, true ); 324 156 } 325 157 326 CompoundStmtNode::~CompoundStmtNode() { 327 delete first; 158 Statement *build_try( StatementNode *try_stmt, StatementNode *catch_stmt, StatementNode *finally_stmt ) { 159 std::list< Statement * > branches; 160 buildList< Statement, StatementNode >( catch_stmt, branches ); 161 CompoundStmt *tryBlock = dynamic_cast< CompoundStmt * >(maybeBuild< Statement >(try_stmt)); 162 assert( tryBlock ); 163 FinallyStmt *finallyBlock = dynamic_cast< FinallyStmt * >(maybeBuild< Statement >(finally_stmt) ); 164 return new TryStmt( noLabels, tryBlock, branches, finallyBlock ); 165 } 166 Statement *build_catch( DeclarationNode *decl, StatementNode *stmt, bool catchAny ) { 167 std::list< Statement * > branches; 168 buildList< Statement, StatementNode >( stmt, branches ); 169 assert( branches.size() == 1 ); 170 return new CatchStmt( noLabels, maybeBuild< Declaration >(decl), branches.front(), catchAny ); 171 } 172 Statement *build_finally( StatementNode *stmt ) { 173 std::list< Statement * > branches; 174 buildList< Statement, StatementNode >( stmt, branches ); 175 assert( branches.size() == 1 ); 176 return new FinallyStmt( noLabels, dynamic_cast< CompoundStmt * >( branches.front() ) ); 328 177 } 329 178 330 void CompoundStmtNode::add_statement( StatementNode *stmt ) { 331 if ( stmt != 0 ) { 332 last->set_link( stmt ); 333 last = ( StatementNode *)( stmt->get_link()); 334 } // if 335 } 336 337 void CompoundStmtNode::print( ostream &os, int indent ) const { 338 if ( first ) { 339 first->printList( os, indent+2 ); 340 } // if 341 } 342 343 Statement *CompoundStmtNode::build() const { 344 std::list<Label> labs; 345 const std::list<std::string> &labels = get_labels(); 346 347 if ( ! labels.empty() ) { 348 std::back_insert_iterator< std::list<Label> > lab_it( labs ); 349 copy( labels.begin(), labels.end(), lab_it ); 350 } // if 351 352 CompoundStmt *cs = new CompoundStmt( labs ); 179 Statement *build_compound( StatementNode *first ) { 180 CompoundStmt *cs = new CompoundStmt( noLabels ); 353 181 buildList( first, cs->get_kids() ); 354 182 return cs; 355 183 } 356 184 357 358 AsmStmtNode::AsmStmtNode( Type t, bool voltile, ConstantNode *instruction, ExpressionNode *output, ExpressionNode *input, ConstantNode *clobber, LabelNode *gotolabels ) : 359 StatementNode( t ), voltile( voltile ), instruction( instruction ), output( output ), input( input ), clobber( clobber ) { 360 if ( gotolabels ) { 361 this->gotolabels = gotolabels->get_labels(); 362 delete gotolabels; 363 } // if 364 } 365 366 AsmStmtNode::~AsmStmtNode() { 367 delete instruction; delete output; delete input; delete clobber; 368 } 369 370 void AsmStmtNode::print( std::ostream &os, int indent ) const { 371 StatementNode::print( os, indent ); // print statement labels 372 os << string( indent + ParseNode::indent_by, ' ' ) << "volatile:" << voltile << endl; 373 if ( instruction ) { 374 os << string( indent + ParseNode::indent_by, ' ' ) << "Instruction:" << endl; 375 instruction->printList( os, indent + 2 * ParseNode::indent_by ); 376 } // if 377 if ( output ) { 378 os << string( indent + ParseNode::indent_by, ' ' ) << "Output:" << endl; 379 output->printList( os, indent + 2 * ParseNode::indent_by ); 380 } // if 381 if ( input ) { 382 os << string( indent + ParseNode::indent_by, ' ' ) << "Input:" << endl; 383 input->printList( os, indent + 2 * ParseNode::indent_by ); 384 } // if 385 if ( clobber ) { 386 os << string( indent + ParseNode::indent_by, ' ' ) << "Clobber:" << endl; 387 clobber->printList( os, indent + 2 * ParseNode::indent_by ); 388 } // if 389 if ( ! gotolabels.empty() ) { 390 os << string( indent + ParseNode::indent_by, ' ' ) << "Goto Labels:" << endl; 391 os << string( indent + 2 * ParseNode::indent_by, ' ' ); 392 for ( std::list<Label>::const_iterator i = gotolabels.begin();; ) { 393 os << *i; 394 i++; 395 if ( i == gotolabels.end() ) break; 396 os << ", "; 397 } 398 os << endl; 399 } // if 400 } 401 402 Statement *AsmStmtNode::build() const { 403 std::list<Label> labs; 404 405 if ( ! get_labels().empty() ) { 406 std::back_insert_iterator< std::list<Label> > lab_it( labs ); 407 copy( get_labels().begin(), get_labels().end(), lab_it ); 408 } // if 409 185 Statement *build_asmstmt( bool voltile, ConstantExpr *instruction, ExpressionNode *output, ExpressionNode *input, ExpressionNode *clobber, LabelNode *gotolabels ) { 410 186 std::list< Expression * > out, in; 411 187 std::list< ConstantExpr * > clob; 188 412 189 buildList( output, out ); 413 190 buildList( input, in ); 414 191 buildList( clobber, clob ); 415 std::list< Label > gotolabs = gotolabels; 416 return new AsmStmt( labs, voltile, (ConstantExpr *)maybeBuild< Expression >( instruction ), out, in, clob, gotolabs ); 417 } 418 419 420 void NullStmtNode::print( ostream &os, int indent ) const { 421 os << string( indent, ' ' ) << "Null Statement:" << endl; 422 } 423 424 Statement *NullStmtNode::build() const { 425 return new NullStmt; 192 return new AsmStmt( noLabels, voltile, instruction, out, in, clob, gotolabels ? gotolabels->labels : noLabels ); 426 193 } 427 194 -
src/Parser/TypeData.cc
r950f7a7 r7527e63 10 10 // Created On : Sat May 16 15:12:51 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Jul 13 18:03:29201613 // Update Count : 5612 // Last Modified On : Mon Aug 15 20:48:52 2016 13 // Update Count : 62 14 14 // 15 15 … … 182 182 break; 183 183 case Array: 184 newtype->array->dimension = maybeClone( array->dimension );184 newtype->array->dimension = array->dimension; 185 185 newtype->array->isVarLen = array->isVarLen; 186 186 newtype->array->isStatic = array->isStatic; … … 488 488 decl = new FunctionDecl( name, sc, linkage, buildFunction(), body, isInline, isNoreturn ); 489 489 } else { 490 // std::list< Label> ls;491 decl = new FunctionDecl( name, sc, linkage, buildFunction(), new CompoundStmt( std::list< Label>() ), isInline, isNoreturn );490 // std::list< Label > ls; 491 decl = new FunctionDecl( name, sc, linkage, buildFunction(), new CompoundStmt( std::list< Label >() ), isInline, isNoreturn ); 492 492 } // if 493 493 } else { 494 494 decl = new FunctionDecl( name, sc, linkage, buildFunction(), 0, isInline, isNoreturn ); 495 495 } // if 496 for ( DeclarationNode *cur = function->idList; cur != 0; cur = dynamic_cast< DeclarationNode* >( cur->get_ link() ) ) {496 for ( DeclarationNode *cur = function->idList; cur != 0; cur = dynamic_cast< DeclarationNode* >( cur->get_next() ) ) { 497 497 if ( cur->get_name() != "" ) { 498 498 decl->get_oldIdents().insert( decl->get_oldIdents().end(), cur->get_name() ); … … 510 510 return buildVariable(); 511 511 } else { 512 return new ObjectDecl( name, sc, linkage, bitfieldWidth, build(), init, isInline, isNoreturn );512 return new ObjectDecl( name, sc, linkage, bitfieldWidth, build(), init, std::list< Attribute * >(), isInline, isNoreturn ); 513 513 } // if 514 514 return 0; … … 908 908 buildList( enumeration->constants, ret->get_members() ); 909 909 std::list< Declaration * >::iterator members = ret->get_members().begin(); 910 for ( const DeclarationNode *cur = enumeration->constants; cur != NULL; cur = dynamic_cast< DeclarationNode *>( cur->get_link() ), ++members ) {910 for ( const DeclarationNode *cur = enumeration->constants; cur != NULL; cur = dynamic_cast< DeclarationNode * >( cur->get_next() ), ++members ) { 911 911 if ( cur->get_enumeratorValue() != NULL ) { 912 ObjectDecl *member = dynamic_cast< ObjectDecl *>(*members);912 ObjectDecl *member = dynamic_cast< ObjectDecl * >(*members); 913 913 member->set_init( new SingleInit( maybeBuild< Expression >( cur->get_enumeratorValue() ), std::list< Expression * >() ) ); 914 914 } // if -
src/Parser/TypeData.h
r950f7a7 r7527e63 10 10 // Created On : Sat May 16 15:18:36 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Jul 12 20:52:02 201613 // Update Count : 2 012 // Last Modified On : Mon Aug 15 14:28:32 2016 13 // Update Count : 21 14 14 // 15 15 -
src/Parser/TypedefTable.cc
r950f7a7 r7527e63 10 10 // Created On : Sat May 16 15:20:13 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Apr 13 16:57:30201613 // Update Count : 2 412 // Last Modified On : Mon Aug 15 18:24:42 2016 13 // Update Count : 25 14 14 // 15 15 … … 64 64 tableType::iterator curPos = table.find( identifier ); 65 65 if ( curPos == table.end()) { 66 list< Entry> newList;66 list< Entry > newList; 67 67 newList.push_front( newEntry ); 68 68 table[identifier] = newList; 69 69 } else { 70 list< Entry>::iterator listPos = (*curPos ).second.begin();70 list< Entry >::iterator listPos = (*curPos ).second.begin(); 71 71 while ( listPos != (*curPos ).second.end() && listPos->scope > scope ) { 72 72 listPos++; … … 127 127 debugPrint( "Leaving scope " << currentScope << endl ); 128 128 for ( tableType::iterator i = table.begin(); i != table.end(); ) { 129 list< Entry> &declList = (*i).second;129 list< Entry > &declList = (*i).second; 130 130 while ( ! declList.empty() && declList.front().scope == currentScope ) { 131 131 declList.pop_front(); … … 157 157 for ( tableType::const_iterator i = table.begin(); i != table.end(); i++) { 158 158 debugPrint( (*i ).first << ": " ); 159 list< Entry> declList = (*i).second;160 for ( list< Entry>::const_iterator j = declList.begin(); j != declList.end(); j++ ) {159 list< Entry > declList = (*i).second; 160 for ( list< Entry >::const_iterator j = declList.begin(); j != declList.end(); j++ ) { 161 161 debugPrint( "(" << (*j).scope << " " << (*j).kind << ") " ); 162 162 } -
src/Parser/TypedefTable.h
r950f7a7 r7527e63 10 10 // Created On : Sat May 16 15:24:36 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Apr 13 16:59:56201613 // Update Count : 2 712 // Last Modified On : Mon Aug 15 18:25:04 2016 13 // Update Count : 28 14 14 // 15 15 … … 39 39 }; 40 40 41 typedef std::map< std::string, std::list<Entry> > tableType;41 typedef std::map< std::string, std::list< Entry > > tableType; 42 42 tableType table; 43 43 -
src/Parser/lex.cc
r950f7a7 r7527e63 382 382 (yy_c_buf_p) = yy_cp; 383 383 384 #define YY_NUM_RULES 18 0385 #define YY_END_OF_BUFFER 18 1384 #define YY_NUM_RULES 181 385 #define YY_END_OF_BUFFER 182 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 88] =393 static yyconst flex_int16_t yy_accept[892] = 394 394 { 0, 395 0, 0, 0, 0, 0, 0, 11 5, 115, 118, 118,396 18 1, 179, 7, 9, 8, 138, 117, 102, 143, 146,397 11 4, 125, 126, 141, 139, 129, 140, 132, 142, 107,398 10 8, 109, 130, 131, 148, 150, 149, 151, 179, 102,399 12 3, 179, 124, 144, 102, 104, 102, 102, 102, 102,400 10 2, 102, 102, 102, 102, 102, 102, 102, 102, 102,401 10 2, 102, 127, 147, 128, 145, 7, 179, 4, 4,402 18 0, 105, 180, 106, 115, 116, 122, 118, 119, 7,403 9, 0, 8, 15 5, 174, 102, 0, 167, 137, 160,404 16 8, 165, 152, 163, 153, 164, 162, 0, 112, 3,405 406 0, 16 6, 112, 110, 0, 0, 110, 110, 0, 0,407 11 0, 109, 109, 109, 0, 109, 135, 136, 134, 156,408 15 8, 154, 159, 157, 0, 0, 0, 0, 0, 0,409 0, 0, 0, 0, 0, 0, 0, 0, 0, 10 3,410 17 3, 0, 117, 114, 102, 0, 0, 170, 0, 102,411 10 2, 102, 102, 102, 102, 102, 102, 102, 102, 102,412 10 2, 102, 102, 102, 102, 102, 38, 102, 102, 102,413 10 2, 102, 102, 102, 102, 102, 102, 56, 102, 102,414 10 2, 102, 102, 102, 102, 102, 102, 102, 102, 102,415 10 2, 102, 102, 102, 169, 161, 7, 0, 0, 0,416 417 2, 0, 5, 10 5, 0, 0, 0, 115, 0, 121,418 12 0, 120, 0, 0, 0, 118, 0, 0, 0, 0,395 0, 0, 0, 0, 0, 0, 116, 116, 119, 119, 396 182, 180, 7, 9, 8, 139, 118, 103, 144, 147, 397 115, 126, 127, 142, 140, 130, 141, 133, 143, 108, 398 109, 110, 131, 132, 149, 151, 150, 152, 180, 103, 399 124, 180, 125, 145, 103, 105, 103, 103, 103, 103, 400 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 401 103, 103, 128, 148, 129, 146, 7, 180, 4, 4, 402 181, 106, 181, 107, 116, 117, 123, 119, 120, 7, 403 9, 0, 8, 156, 175, 103, 0, 168, 138, 161, 404 169, 166, 153, 164, 154, 165, 163, 0, 113, 3, 405 406 0, 167, 113, 111, 0, 0, 111, 111, 0, 0, 407 111, 110, 110, 110, 0, 110, 136, 137, 135, 157, 408 159, 155, 160, 158, 0, 0, 0, 0, 0, 0, 409 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 410 174, 0, 118, 115, 103, 0, 0, 171, 0, 103, 411 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 412 103, 103, 103, 103, 103, 103, 38, 103, 103, 103, 413 103, 103, 103, 103, 103, 103, 103, 57, 103, 103, 414 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 415 103, 103, 103, 103, 170, 162, 7, 0, 0, 0, 416 417 2, 0, 5, 106, 0, 0, 0, 116, 0, 122, 418 121, 121, 0, 0, 0, 119, 0, 0, 0, 0, 419 419 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 420 0, 13 3, 112, 112, 0, 112, 112, 0, 0, 6,421 0, 11 0, 0, 0, 0, 112, 0, 110, 110, 110,422 11 0, 0, 111, 0, 0, 109, 109, 109, 109, 0,423 17 1, 172, 0, 177, 175, 0, 0, 0, 103, 0,424 0, 0, 0, 0, 0, 0, 0, 10 2, 17, 102,425 10 2, 102, 102, 102, 102, 102, 102, 102, 102, 102,426 10 2, 102, 102, 102, 102, 102, 102, 14, 102, 102,427 428 10 2, 102, 102, 102, 102, 102, 102, 102, 102, 102,429 10 2, 102, 102, 102, 102, 102, 50, 102, 102, 102,430 6 3, 102, 102, 102, 102, 102, 102, 102, 102, 102,431 10 2, 102, 102, 102, 102, 89, 102, 102, 102, 102,432 10 2, 102, 102, 0, 0, 0, 0, 0, 0, 0,433 0, 12 0, 0, 0, 0, 0, 0, 120, 0, 0,434 17 8, 0, 0, 0, 0, 0, 0, 0, 112, 0,435 11 2, 0, 112, 0, 0, 112, 0, 110, 110, 0,436 0, 11 1, 111, 0, 111, 0, 111, 109, 109, 0,437 0, 0, 0, 0, 0, 0, 0, 0, 0, 17 6,438 439 10 2, 102, 102, 102, 102, 102, 102, 102, 102, 102,440 10 2, 102, 102, 102, 102, 102, 102, 102, 102, 102,441 10 2, 102, 102, 21, 102, 24, 102, 27, 102, 102,442 10 2, 102, 102, 102, 102, 41, 102, 43, 102, 102,443 10 2, 102, 102, 102, 102, 55, 102, 66, 102, 102,444 10 2, 102, 102, 102, 102, 102, 102, 102, 102, 102,445 10 2, 102, 102, 102, 97, 102, 102, 0, 0, 0,420 0, 134, 113, 113, 0, 113, 113, 0, 0, 6, 421 0, 111, 0, 0, 0, 113, 0, 111, 111, 111, 422 111, 0, 112, 0, 0, 110, 110, 110, 110, 0, 423 172, 173, 0, 178, 176, 0, 0, 0, 104, 0, 424 0, 0, 0, 0, 0, 0, 0, 103, 17, 103, 425 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 426 103, 103, 103, 103, 103, 103, 103, 14, 103, 103, 427 428 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 429 103, 103, 103, 103, 103, 103, 51, 103, 103, 103, 430 64, 103, 103, 103, 103, 103, 103, 103, 103, 103, 431 103, 103, 103, 103, 103, 90, 103, 103, 103, 103, 432 103, 103, 103, 0, 0, 0, 0, 0, 0, 0, 433 0, 121, 0, 0, 0, 0, 0, 121, 0, 0, 434 179, 0, 0, 0, 0, 0, 0, 0, 113, 0, 435 113, 0, 113, 0, 0, 113, 0, 111, 111, 0, 436 0, 112, 112, 0, 112, 0, 112, 110, 110, 0, 437 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 438 439 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 440 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 441 103, 103, 103, 21, 103, 24, 103, 27, 103, 103, 442 103, 103, 103, 103, 103, 41, 103, 43, 103, 103, 443 103, 103, 103, 103, 103, 56, 103, 67, 103, 103, 444 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 445 103, 103, 103, 103, 98, 103, 103, 0, 0, 0, 446 446 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 447 0, 12 0, 0, 0, 0, 0, 0, 112, 0, 0,448 0, 0, 0, 0, 11 1, 111, 0, 113, 0, 111,449 450 11 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,451 0, 0, 0, 0, 10 2, 102, 22, 102, 102, 102,452 10 2, 102, 102, 102, 15, 102, 102, 102, 102, 102,453 10 2, 102, 102, 102, 102, 102, 102, 102, 102, 23,454 25, 10 2, 32, 102, 102, 102, 102, 40, 102, 102,455 10 2, 102, 48, 102, 102, 53, 102, 102, 70, 102,456 10 2, 102, 76, 102, 102, 102, 102, 102, 86, 88,457 10 2, 102, 94, 102, 102, 101, 0, 0, 0, 0,447 0, 121, 0, 0, 0, 0, 0, 113, 0, 0, 448 0, 0, 0, 0, 112, 112, 0, 114, 0, 112, 449 450 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 451 0, 0, 0, 0, 103, 103, 22, 103, 103, 103, 452 103, 103, 103, 103, 15, 103, 103, 103, 103, 103, 453 103, 103, 103, 103, 103, 103, 103, 103, 103, 23, 454 25, 103, 32, 103, 103, 103, 103, 40, 103, 103, 455 103, 103, 49, 103, 103, 54, 103, 103, 71, 103, 456 103, 103, 77, 103, 103, 103, 103, 103, 87, 89, 457 103, 103, 95, 103, 103, 102, 0, 0, 0, 0, 458 458 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459 0, 0, 0, 0, 0, 11 3, 0, 0, 111, 113,460 461 11 3, 113, 113, 0, 111, 0, 0, 0, 0, 0,462 0, 0, 0, 0, 0, 10 2, 0, 102, 102, 102,463 10 2, 102, 102, 102, 102, 102, 102, 102, 102, 102,464 10 2, 102, 102, 58, 102, 102, 102, 102, 102, 102,465 10 2, 102, 28, 102, 102, 102, 39, 42, 45, 102,466 10 2, 51, 102, 60, 67, 102, 102, 75, 77, 80,467 8 1, 83, 84, 102, 102, 91, 102, 102, 0, 1,468 0, 0, 0, 0, 0, 0, 10 5, 0, 0, 0,469 12 0, 0, 0, 0, 0, 113, 0, 113, 113, 0,470 0, 0, 0, 0, 0, 0, 0, 0, 10 2, 102,471 472 18, 10 2, 102, 102, 102, 102, 102, 102, 16, 102,473 10 2, 102, 33, 102, 102, 102, 102, 102, 102, 102,474 10 2, 102, 102, 102, 102, 36, 37, 102, 47, 52,475 10 2, 102, 102, 90, 102, 102, 0, 0, 0, 0,459 0, 0, 0, 0, 0, 114, 0, 0, 112, 114, 460 461 114, 114, 114, 0, 112, 0, 0, 0, 0, 0, 462 0, 0, 0, 0, 0, 103, 0, 103, 103, 103, 463 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 464 103, 103, 103, 59, 103, 103, 103, 103, 103, 103, 465 103, 103, 28, 103, 103, 103, 39, 42, 45, 103, 466 103, 52, 103, 61, 68, 103, 103, 76, 78, 81, 467 82, 84, 85, 103, 103, 92, 103, 103, 0, 1, 468 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 469 121, 0, 0, 0, 0, 114, 0, 114, 114, 0, 470 0, 0, 0, 0, 0, 0, 0, 0, 103, 103, 471 472 18, 103, 103, 103, 103, 103, 103, 103, 16, 103, 473 103, 103, 33, 103, 103, 103, 103, 103, 103, 103, 474 103, 103, 103, 103, 103, 36, 37, 103, 48, 53, 475 103, 103, 103, 91, 103, 103, 0, 0, 0, 0, 476 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 477 11, 29, 55, 103, 103, 103, 103, 103, 103, 103, 478 103, 103, 103, 103, 60, 62, 65, 103, 103, 79, 479 93, 103, 103, 35, 103, 47, 72, 73, 103, 96, 480 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481 0, 0, 0, 103, 69, 103, 103, 12, 103, 103, 482 483 30, 34, 103, 103, 103, 66, 103, 103, 103, 103, 484 103, 103, 103, 0, 0, 0, 0, 0, 0, 0, 485 0, 0, 0, 0, 0, 0, 58, 103, 103, 103, 486 103, 103, 103, 103, 50, 63, 74, 80, 94, 100, 487 103, 103, 103, 0, 0, 0, 0, 0, 0, 0, 488 0, 103, 103, 13, 19, 103, 103, 31, 103, 103, 489 103, 26, 46, 88, 0, 0, 103, 103, 103, 103, 490 103, 103, 75, 101, 103, 86, 20, 103, 103, 44, 491 83, 103, 103, 103, 103, 103, 103, 103, 97, 70, 492 0 493 492 494 } ; 493 495 … … 537 539 } ; 538 540 539 static yyconst flex_int16_t yy_base[106 2] =541 static yyconst flex_int16_t yy_base[1066] = 540 542 { 0, 541 0, 84, 22 72, 2269, 94, 0, 177, 178, 179, 180,542 22 85, 2822, 191, 2822, 197, 55, 2822, 2231, 60, 173,543 282 2, 2822, 2822, 56, 188, 2822, 191, 189, 204, 216,544 275, 0, 22 49, 2822, 216, 2247, 152, 344, 155, 220,545 282 2, 159, 2822, 217, 226, 2822, 185, 154, 212, 251,543 0, 84, 2285, 2282, 94, 0, 177, 178, 179, 180, 544 2298, 2825, 191, 2825, 197, 55, 2825, 2244, 60, 173, 545 2825, 2825, 2825, 56, 188, 2825, 191, 189, 204, 216, 546 275, 0, 2262, 2825, 216, 2260, 152, 344, 155, 220, 547 2825, 159, 2825, 217, 226, 2825, 185, 154, 212, 251, 546 548 237, 270, 235, 257, 241, 205, 193, 305, 314, 333, 547 238, 228, 282 2, 225, 2822, 2242, 402, 390, 2822, 2253,548 282 2, 2221, 235, 2822, 0, 2822, 426, 0, 2822, 417,549 282 2, 439, 451, 2822, 498, 2219, 264, 2822, 2822, 2822,550 282 2, 2822, 2235, 2822, 2232, 2822, 2822, 2244, 559, 2822,551 552 22 61, 2822, 438, 444, 511, 534, 289, 253, 197, 380,553 305, 0, 319, 280, 198, 322, 282 2, 2822, 2822, 2230,554 282 2, 2822, 2822, 2227, 2224, 218, 255, 2239, 298, 350,555 368, 312, 440, 398, 405, 22 20, 441, 2168, 446, 2196,556 282 2, 335, 2822, 2822, 468, 2190, 2189, 2822, 2162, 439,549 238, 228, 2825, 225, 2825, 2255, 402, 390, 2825, 2266, 550 2825, 2234, 235, 2825, 0, 2825, 426, 0, 2825, 417, 551 2825, 439, 451, 2825, 498, 2232, 264, 2825, 2825, 2825, 552 2825, 2825, 2248, 2825, 2245, 2825, 2825, 2257, 559, 2825, 553 554 2274, 2825, 438, 444, 511, 534, 289, 253, 197, 380, 555 305, 0, 319, 280, 198, 322, 2825, 2825, 2825, 2243, 556 2825, 2825, 2825, 2240, 2237, 218, 255, 2252, 298, 350, 557 368, 312, 440, 398, 405, 2233, 441, 2181, 446, 2209, 558 2825, 335, 2825, 2825, 468, 2203, 2202, 2825, 2175, 439, 557 559 282, 433, 372, 281, 437, 434, 428, 570, 444, 466, 558 560 464, 469, 475, 321, 492, 438, 471, 445, 474, 512, 559 489, 503, 496, 521, 276, 515, 516, 2 189, 526, 510,561 489, 503, 496, 521, 276, 515, 516, 2202, 526, 510, 560 562 519, 525, 543, 522, 560, 553, 523, 561, 551, 544, 561 599, 582, 593, 584, 282 2, 2822, 660, 651, 2236, 666,562 563 282 2, 678, 2822, 2183, 607, 2179, 2178, 0, 693, 2822,564 282 2, 684, 2176, 2156, 2154, 0, 2177, 578, 608, 617,565 654, 679, 650, 683, 684, 687, 2 172, 690, 691, 2147,566 21 46, 2822, 0, 683, 710, 686, 700, 2145, 2196, 2822,567 714, 0, 427, 746, 764, 786, 808, 621, 282 2, 2152,568 21 25, 0, 794, 2171, 795, 709, 2822, 2147, 2121, 832,569 282 2, 2822, 2152, 2822, 2822, 711, 714, 2129, 2129, 717,570 21 25, 2123, 2120, 0, 2117, 0, 2088, 694, 679, 712,563 599, 582, 593, 584, 2825, 2825, 660, 651, 2249, 666, 564 565 2825, 678, 2825, 2196, 607, 2192, 2191, 0, 693, 2825, 566 2825, 684, 2189, 2186, 2183, 0, 2206, 578, 608, 617, 567 654, 679, 650, 683, 684, 687, 2203, 690, 691, 2179, 568 2159, 2825, 0, 683, 710, 686, 700, 2157, 2209, 2825, 569 714, 0, 427, 746, 764, 786, 808, 621, 2825, 2165, 570 2138, 0, 794, 2184, 795, 709, 2825, 2160, 2134, 832, 571 2825, 2825, 2165, 2825, 2825, 711, 714, 2142, 2142, 717, 572 2138, 2136, 2133, 0, 2130, 0, 2101, 694, 679, 712, 571 573 709, 711, 698, 566, 726, 743, 771, 741, 790, 784, 572 800, 795, 742, 744, 814, 816, 818, 21 18, 819, 745,574 800, 795, 742, 744, 814, 816, 818, 2131, 819, 745, 573 575 574 576 820, 821, 822, 823, 824, 746, 825, 748, 659, 831, 575 577 826, 833, 838, 839, 848, 850, 851, 844, 834, 857, 576 21 16, 858, 859, 860, 862, 861, 864, 865, 867, 868,577 866, 871, 876, 872, 878, 21 13, 880, 689, 881, 882,578 892, 896, 893, 953, 954, 21 09, 2108, 2106, 0, 2103,579 0, 941, 945, 21 02, 0, 2101, 0, 2099, 0, 2118,580 282 2, 940, 941, 2094, 2088, 0, 2086, 0, 2822, 953,581 975, 964, 282 2, 981, 997, 1021, 2084, 2822, 2822, 939,582 940, 1006, 982, 1041, 310, 1039, 1004, 282 2, 2822, 2081,583 20 79, 2077, 0, 2074, 0, 2071, 0, 2070, 0, 2822,578 2129, 858, 859, 860, 862, 861, 864, 865, 867, 868, 579 866, 871, 876, 872, 878, 2126, 880, 689, 881, 882, 580 892, 896, 893, 953, 954, 2120, 2119, 2118, 0, 2116, 581 0, 941, 945, 2113, 0, 2112, 0, 2111, 0, 2131, 582 2825, 940, 941, 2108, 2105, 0, 2104, 0, 2825, 953, 583 975, 964, 2825, 981, 997, 1021, 2102, 2825, 2825, 939, 584 940, 1006, 982, 1041, 310, 1039, 1004, 2825, 2825, 2099, 585 2095, 2091, 0, 2089, 0, 2087, 0, 2084, 0, 2825, 584 586 585 587 886, 941, 960, 962, 977, 976, 980, 982, 1017, 1010, 586 588 1002, 998, 1022, 1031, 1028, 1033, 1034, 1037, 1040, 1043, 587 1038, 1041, 1053, 20 72, 1055, 2070, 1045, 2067, 1056, 1061,588 1063, 1065, 1066, 1067, 1070, 20 64, 1071, 2063, 1073, 1074,589 1075, 1078, 1080, 1081, 1085, 20 62, 1087, 2060, 1084, 1089,589 1038, 1041, 1053, 2085, 1055, 2083, 1045, 2080, 1056, 1061, 590 1063, 1065, 1066, 1067, 1070, 2077, 1071, 2076, 1073, 1074, 591 1075, 1078, 1080, 1081, 1085, 2075, 1087, 2073, 1084, 1089, 590 592 1091, 1097, 1099, 1092, 1102, 1103, 1105, 1106, 1108, 905, 591 1109, 1116, 1110, 1122, 20 57, 1120, 1123, 1179, 2051, 0,592 20 50, 0, 2049, 0, 2047, 0, 1166, 2044, 0, 2041,593 0, 20 40, 2039, 2037, 0, 2034, 0, 1173, 2031, 1179,594 1137, 1195, 1181, 1178, 1176, 282 2, 1219, 1231, 1253, 2042,595 596 20 17, 2027, 2024, 0, 2021, 0, 2020, 0, 2019, 0,597 20 17, 0, 2014, 0, 1141, 1172, 2014, 1180, 1155, 1196,593 1109, 1116, 1110, 1122, 2070, 1120, 1123, 1179, 2064, 0, 594 2063, 0, 2062, 0, 2060, 0, 1166, 2057, 0, 2054, 595 0, 2053, 2052, 2050, 0, 2047, 0, 1173, 2044, 1179, 596 1137, 1195, 1181, 1178, 1176, 2825, 1219, 1231, 1253, 2055, 597 598 2030, 2040, 2037, 0, 2034, 0, 2033, 0, 2032, 0, 599 2030, 0, 2027, 0, 1141, 1172, 2027, 1180, 1155, 1196, 598 600 1157, 1216, 1207, 1231, 1125, 1210, 1232, 1214, 1187, 1236, 599 1235, 1237, 1238, 1272, 1249, 1252, 1250, 1253, 1254, 20 13,600 1261, 1256, 20 12, 1260, 1263, 1264, 1257, 2010, 1271, 1268,601 1269, 1273, 20 07, 1275, 1282, 2006, 1283, 1284, 2005, 1276,602 1286, 1289, 20 03, 1294, 1291, 1296, 1295, 1297, 1310, 2000,603 1305, 1308, 1999, 1307, 1300, 1998, 2046, 1960, 0, 1958,604 0, 19 57, 0, 1954, 0, 1951, 0, 1950, 0, 1949,605 0, 19 47, 0, 1355, 1361, 1389, 1372, 1944, 2822, 1378,606 607 1325, 1365, 1379, 19 41, 2822, 1940, 0, 1939, 0, 1937,608 0, 19 34, 0, 0, 0, 1936, 0, 1366, 1312, 1311,601 1235, 1237, 1238, 1272, 1249, 1252, 1250, 1253, 1254, 2026, 602 1261, 1256, 2025, 1260, 1263, 1264, 1257, 2023, 1271, 1268, 603 1269, 1273, 2020, 1275, 1282, 2017, 1283, 1284, 2016, 1276, 604 1286, 1289, 2015, 1294, 1291, 1296, 1295, 1297, 1310, 2013, 605 1305, 1308, 2010, 1307, 1300, 2009, 2058, 2003, 0, 2000, 606 0, 1999, 0, 1998, 0, 1996, 0, 1963, 0, 1961, 607 0, 1960, 0, 1355, 1361, 1389, 1372, 1957, 2825, 1378, 608 609 1325, 1365, 1379, 1954, 2825, 1953, 0, 1952, 0, 1950, 610 0, 1947, 0, 0, 0, 1947, 0, 1366, 1312, 1311, 609 611 1341, 1323, 1368, 1369, 1374, 1356, 1383, 1372, 1388, 1390, 610 612 1393, 1395, 1396, 1398, 1400, 1431, 1406, 1407, 1411, 1408, 611 1413, 1414, 19 35, 1409, 1416, 1419, 1933, 1930, 1929, 1422,612 1424, 19 28, 1429, 1926, 1923, 1425, 1430, 1919, 1915, 1911,613 1 895, 1894, 1893, 1436, 1433, 1891, 1439, 1440, 1938, 2822,614 18 84, 0, 1883, 0, 0, 0, 1884, 0, 0, 0,615 282 2, 0, 0, 0, 0, 1486, 1878, 2822, 2822, 1492,616 18 77, 0, 1876, 0, 0, 0, 0, 1874, 1447, 1444,617 618 18 74, 1449, 1471, 1479, 1450, 1480, 1482, 1469, 1873, 1486,613 1413, 1414, 1946, 1409, 1416, 1419, 1945, 1943, 1940, 1422, 614 1424, 1939, 1429, 1938, 1936, 1425, 1430, 1933, 1932, 1931, 615 1929, 1926, 1922, 1436, 1433, 1918, 1439, 1440, 1964, 2825, 616 1895, 0, 1894, 0, 0, 0, 1896, 0, 0, 0, 617 2825, 0, 0, 0, 0, 1486, 1891, 2825, 2825, 1492, 618 1888, 0, 1887, 0, 0, 0, 0, 1886, 1447, 1444, 619 620 1887, 1449, 1471, 1479, 1450, 1480, 1482, 1469, 1884, 1486, 619 621 1490, 1488, 1502, 1452, 1510, 1504, 1491, 1519, 1506, 1498, 620 1508, 1512, 1513, 1514, 1515, 18 72, 1870, 1517, 1867, 1866,621 151 8, 1520, 1523, 1865, 1521, 1525, 0, 0, 0, 1860,622 18 57, 1856, 1575, 0, 1855, 1853, 1850, 1849, 1848, 1849,623 18 46, 1845, 1844, 1531, 1536, 1527, 1528, 1552, 1533, 1537,624 1539, 155 5, 1557, 1569, 1842, 1560, 1839, 1561, 1559, 1568,625 157 2, 1567, 1573, 1838, 1837, 1835, 1828, 1574, 1826, 1825,626 18 19, 1818, 1817, 1815, 1798, 1789, 1788, 1785, 1778, 1775,627 1 768, 1766, 1576, 1768, 1577, 1581, 1580, 1579, 1584, 1585,628 629 1 747, 1586, 1615, 1590, 1746, 1591, 1592, 1602, 1600, 1594,630 1606, 1 742, 1735, 1733, 1732, 1690, 1689, 1686, 1685, 1683,631 1 682, 1678, 1677, 1674, 1676, 1607, 1611, 1614, 1612, 1608,632 161 6, 1620, 1675, 1623, 1624, 1530, 1453, 1630, 1625, 1629,633 1 438, 1354, 1319, 1318, 1267, 1212, 1210, 1208, 1631, 1636,634 1 178, 1639, 1635, 1643, 1177, 1644, 1646, 1650, 1126, 964,635 937, 903, 1651, 1652, 1654, 1655, 1656, 1658, 788, 752,636 166 0, 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 18 87, 1894, 1901, 1908, 1915, 1922, 1929, 1936, 1949, 1956,641 19 60, 1968, 1971, 1978, 1985, 1992, 1995, 2002, 2008, 2021,642 2034, 2041, 2048, 2055, 2062, 2065, 2072, 2075, 2082, 2085,643 20 92, 2095, 2102, 2105, 2112, 2115, 2122, 2125, 2132, 2140,644 21 47, 2154, 2161, 2168, 2171, 2178, 2181, 2188, 2191, 2198,645 2 204, 2217, 2224, 2231, 2234, 2241, 2244, 2251, 2254, 2261,646 22 64, 2271, 2274, 2281, 2284, 2291, 2298, 2301, 2308, 2311,647 23 18, 2325, 2332, 2335, 2342, 2345, 2352, 2355, 2362, 2365,648 23 72, 2375, 2382, 2388, 2401, 2408, 2415, 2418, 2425, 2428,649 24 35, 2438, 2445, 2448, 2455, 2458, 2465, 2468, 2475, 2478,650 651 24 85, 2488, 2495, 2502, 2505, 2512, 2515, 2522, 2525, 2532,652 25 35, 2538, 2544, 2551, 2560, 2567, 2574, 2577, 2584, 2587,653 25 90, 2596, 2603, 2606, 2609, 2612, 2615, 2618, 2621, 2624,654 26 31, 2634, 2641, 2644, 2647, 2650, 2653, 2663, 2670, 2673,655 26 76, 2679, 2686, 2693, 2700, 2703, 2710, 2717, 2724, 2731,656 27 38, 2745, 2752, 2759, 2766, 2773, 2780, 2787, 2794, 2801,657 2 808622 1508, 1512, 1513, 1514, 1515, 1883, 1882, 1518, 1880, 1877, 623 1517, 1520, 1523, 1876, 1521, 1525, 0, 0, 0, 1872, 624 1870, 1867, 1575, 0, 1866, 1865, 1863, 1860, 1859, 1861, 625 1859, 1856, 1855, 1531, 1538, 1527, 1528, 1530, 1533, 1552, 626 1539, 1554, 1553, 1586, 1854, 1559, 1852, 1560, 1561, 1564, 627 1570, 1572, 1571, 1849, 1574, 1848, 1847, 1845, 1575, 1842, 628 1841, 1837, 1835, 1828, 1826, 1825, 1822, 1821, 1820, 1818, 629 1801, 1792, 1791, 1576, 1791, 1579, 1577, 1580, 1582, 1581, 630 631 1585, 1784, 1589, 1616, 1593, 1781, 1591, 1599, 1605, 1592, 632 1606, 1609, 1610, 1771, 1769, 1768, 1747, 1746, 1745, 1738, 633 1736, 1735, 1693, 1689, 1688, 1687, 1689, 1611, 1612, 1614, 634 1615, 1618, 1625, 1621, 1686, 1683, 1627, 1682, 1681, 1631, 635 1635, 1441, 1637, 1677, 1674, 1354, 1319, 1318, 1267, 1212, 636 1210, 1639, 1640, 1211, 1647, 1623, 1649, 1178, 1652, 1653, 637 1657, 1177, 1126, 964, 937, 903, 1641, 1643, 1659, 1663, 638 1664, 1665, 788, 752, 1629, 607, 487, 1666, 1669, 394, 639 357, 1670, 1672, 1671, 1674, 1676, 1675, 1678, 233, 137, 640 2825, 1750, 1763, 1776, 1786, 1796, 1809, 1819, 1832, 1845, 641 642 1858, 1866, 1876, 1883, 1890, 1897, 1904, 1911, 1918, 1925, 643 1932, 1939, 1952, 1959, 1963, 1971, 1974, 1981, 1988, 1995, 644 1998, 2005, 2011, 2024, 2037, 2044, 2051, 2058, 2065, 2068, 645 2075, 2078, 2085, 2088, 2095, 2098, 2105, 2108, 2115, 2118, 646 2125, 2128, 2135, 2143, 2150, 2157, 2164, 2171, 2174, 2181, 647 2184, 2191, 2194, 2201, 2207, 2220, 2227, 2234, 2237, 2244, 648 2247, 2254, 2257, 2264, 2267, 2274, 2277, 2284, 2287, 2294, 649 2301, 2304, 2311, 2314, 2321, 2328, 2335, 2338, 2345, 2348, 650 2355, 2358, 2365, 2368, 2375, 2378, 2385, 2391, 2404, 2411, 651 2418, 2421, 2428, 2431, 2438, 2441, 2448, 2451, 2458, 2461, 652 653 2468, 2471, 2478, 2481, 2488, 2491, 2498, 2505, 2508, 2515, 654 2518, 2525, 2528, 2535, 2538, 2541, 2547, 2554, 2563, 2570, 655 2577, 2580, 2587, 2590, 2593, 2599, 2606, 2609, 2612, 2615, 656 2618, 2621, 2624, 2627, 2634, 2637, 2644, 2647, 2650, 2653, 657 2656, 2666, 2673, 2676, 2679, 2682, 2689, 2696, 2703, 2706, 658 2713, 2720, 2727, 2734, 2741, 2748, 2755, 2762, 2769, 2776, 659 2783, 2790, 2797, 2804, 2811 658 660 } ; 659 661 660 static yyconst flex_int16_t yy_def[106 2] =662 static yyconst flex_int16_t yy_def[1066] = 661 663 { 0, 662 887, 1, 888, 888, 887, 5, 889, 889, 890, 890, 663 887, 887, 887, 887, 887, 887, 887, 891, 887, 887, 664 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 665 887, 31, 887, 887, 887, 887, 887, 887, 892, 891, 666 887, 887, 887, 887, 891, 887, 891, 891, 891, 891, 664 891, 1, 892, 892, 891, 5, 893, 893, 894, 894, 665 891, 891, 891, 891, 891, 891, 891, 895, 891, 891, 667 666 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, 667 891, 31, 891, 891, 891, 891, 891, 891, 896, 895, 668 891, 891, 891, 891, 895, 891, 895, 895, 895, 895, 669 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 670 895, 895, 891, 891, 891, 891, 891, 897, 891, 891, 671 891, 898, 891, 891, 899, 891, 891, 900, 891, 891, 672 891, 891, 891, 891, 891, 895, 891, 891, 891, 891, 673 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 674 675 901, 891, 99, 30, 891, 891, 891, 891, 902, 30, 676 891, 31, 891, 891, 31, 891, 891, 891, 891, 891, 677 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 678 891, 891, 891, 891, 891, 891, 891, 891, 891, 903, 679 891, 891, 891, 891, 895, 904, 905, 891, 891, 895, 680 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 681 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 682 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 683 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 684 895, 895, 895, 895, 891, 891, 891, 897, 897, 897, 685 686 891, 897, 891, 898, 891, 906, 907, 899, 891, 891, 687 891, 891, 908, 909, 910, 900, 891, 891, 891, 891, 688 891, 891, 891, 891, 891, 891, 891, 891, 891, 911, 689 912, 891, 99, 891, 891, 891, 891, 99, 913, 891, 690 891, 104, 104, 891, 891, 891, 891, 891, 891, 891, 691 891, 914, 915, 916, 891, 891, 891, 891, 891, 891, 692 891, 891, 891, 891, 891, 891, 891, 891, 903, 891, 693 917, 918, 919, 920, 921, 922, 891, 923, 923, 923, 694 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 695 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 696 697 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 698 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 699 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 700 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 701 923, 923, 923, 924, 925, 926, 927, 928, 929, 930, 702 931, 891, 891, 932, 933, 934, 935, 936, 937, 891, 703 891, 891, 891, 891, 938, 939, 940, 941, 891, 891, 704 891, 891, 891, 891, 891, 371, 376, 891, 891, 942, 705 943, 944, 891, 891, 891, 944, 891, 891, 891, 945, 706 946, 947, 948, 949, 950, 951, 952, 953, 954, 891, 707 708 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 709 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 710 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 711 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 712 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 713 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 714 955, 955, 955, 955, 955, 955, 955, 956, 957, 958, 715 959, 960, 961, 962, 963, 964, 891, 965, 966, 967, 716 968, 969, 969, 970, 971, 972, 973, 891, 488, 891, 717 974, 891, 974, 891, 891, 891, 891, 891, 891, 891, 718 719 891, 975, 976, 977, 978, 979, 980, 981, 982, 983, 720 984, 985, 986, 987, 988, 988, 988, 988, 988, 988, 721 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 722 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 723 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 724 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 725 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 726 988, 988, 988, 988, 988, 988, 989, 990, 991, 992, 727 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 728 1003, 1004, 1005, 891, 891, 891, 891, 1006, 891, 596, 729 730 891, 891, 891, 600, 891, 1007, 1008, 1009, 1010, 1011, 731 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1017, 1017, 1017, 732 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 733 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 734 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 735 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 736 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1019, 891, 737 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 738 891, 1030, 1031, 1032, 1033, 891, 686, 891, 891, 891, 739 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1042, 740 741 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 742 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 743 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 744 1042, 1042, 1042, 1042, 1042, 1042, 1043, 1044, 1045, 1046, 745 1047, 1048, 891, 1049, 1034, 1036, 1050, 1051, 1041, 1042, 746 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 747 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 748 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 749 1042, 1052, 1053, 1046, 1054, 1047, 1055, 1048, 1056, 1057, 750 1050, 1058, 1051, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 751 752 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 753 1042, 1042, 1042, 1059, 1052, 1060, 1053, 1061, 1054, 1062, 754 1055, 1063, 1056, 1064, 1057, 1058, 1042, 1042, 1042, 1042, 755 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 756 1042, 1042, 1042, 1065, 1059, 1060, 1061, 1062, 1036, 1063, 757 1064, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 758 1042, 1042, 1042, 1042, 1065, 1036, 1042, 1042, 1042, 1042, 759 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 760 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 761 0, 891, 891, 891, 891, 891, 891, 891, 891, 891, 762 678 763 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 679 764 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 680 765 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 681 766 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 767 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 768 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 769 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 770 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 771 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 772 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 773 774 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 775 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 776 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 777 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 778 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 779 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 780 891, 891, 891, 891, 891 779 781 } ; 780 782 781 static yyconst flex_int16_t yy_nxt[29 08] =783 static yyconst flex_int16_t yy_nxt[2911] = 782 784 { 0, 783 785 12, 13, 14, 15, 15, 15, 13, 16, 17, 12, … … 804 806 805 807 83, 83, 83, 82, 91, 93, 87, 142, 146, 98, 806 95, 99, 99, 99, 99, 99, 99, 252, 8 87, 94,808 95, 99, 99, 99, 99, 99, 99, 252, 891, 94, 807 809 100, 85, 96, 97, 85, 101, 161, 118, 143, 77, 808 810 77, 77, 77, 144, 147, 102, 103, 87, 104, 104, … … 825 827 305, 200, 201, 190, 257, 136, 200, 257, 137, 263, 826 828 827 8 87, 264, 192, 197, 81, 82, 82, 82, 197, 87,829 891, 264, 192, 197, 81, 82, 82, 82, 197, 87, 828 830 272, 198, 202, 202, 202, 202, 202, 202, 80, 81, 829 831 82, 82, 82, 80, 87, 138, 139, 209, 210, 263, 830 8 87, 264, 209, 282, 211, 255, 263, 267, 264, 211,831 82, 81, 82, 82, 82, 82, 87, 8 87, 212, 212,832 212, 212, 82, 81, 83, 83, 83, 82, 8 87, 211,832 891, 264, 209, 282, 211, 255, 263, 267, 264, 211, 833 82, 81, 82, 82, 82, 82, 87, 891, 212, 212, 834 212, 212, 82, 81, 83, 83, 83, 82, 891, 211, 833 835 99, 99, 99, 99, 99, 99, 242, 242, 242, 242, 834 836 266, 263, 263, 264, 264, 213, 143, 263, 211, 264, 835 837 87, 144, 375, 211, 211, 87, 87, 211, 211, 87, 836 87, 87, 286, 241, 8 87, 211, 87, 87, 211, 243,838 87, 87, 286, 241, 891, 211, 87, 87, 211, 243, 837 839 838 840 211, 214, 211, 281, 215, 217, 278, 284, 285, 218, 839 841 219, 307, 298, 279, 220, 221, 87, 222, 87, 223, 840 87, 87, 8 87, 87, 309, 300, 87, 87, 224, 225,842 87, 87, 891, 87, 309, 300, 87, 87, 224, 225, 841 843 226, 103, 303, 105, 105, 105, 105, 105, 105, 87, 842 844 299, 87, 301, 302, 87, 304, 308, 310, 87, 227, … … 885 887 87, 450, 87, 87, 87, 452, 455, 454, 87, 453, 886 888 457, 462, 460, 461, 87, 87, 458, 464, 87, 515, 887 459, 463, 465, 466, 344, 201, 201, 87, 8 87, 344,889 459, 463, 465, 466, 344, 201, 201, 87, 891, 344, 888 890 467, 345, 199, 211, 211, 211, 211, 352, 352, 352, 889 891 352, 360, 360, 361, 361, 371, 371, 371, 371, 371, 890 892 371, 370, 569, 370, 492, 492, 371, 371, 371, 371, 891 371, 371, 8 87, 87, 493, 494, 477, 488, 488, 488,893 371, 371, 891, 87, 493, 494, 477, 488, 488, 488, 892 894 893 895 488, 488, 488, 233, 233, 233, 233, 233, 233, 516, … … 896 898 489, 496, 87, 518, 87, 236, 374, 236, 519, 520, 897 899 237, 521, 236, 376, 376, 376, 376, 376, 376, 383, 898 87, 384, 375, 496, 87, 385, 522, 496, 497, 8 87,900 87, 384, 375, 496, 87, 385, 522, 496, 497, 891, 899 901 497, 386, 87, 498, 498, 498, 498, 498, 498, 87, 900 902 525, 495, 526, 387, 87, 524, 377, 384, 523, 496, … … 919 921 236, 498, 498, 498, 498, 498, 498, 620, 87, 492, 920 922 597, 599, 492, 600, 600, 600, 600, 600, 600, 87, 921 631, 622, 87, 887, 625, 887, 87, 862, 87, 601,923 631, 622, 87, 87, 625, 891, 87, 891, 87, 601, 922 924 497, 602, 497, 603, 602, 498, 498, 498, 498, 498, 923 925 498, 624, 628, 87, 87, 630, 604, 87, 87, 87, … … 926 928 634, 87, 87, 635, 87, 87, 87, 642, 87, 87, 927 929 637, 641, 87, 87, 640, 87, 87, 643, 647, 639, 928 87, 87, 8 87, 87, 87, 87, 638, 87, 87, 644,930 87, 87, 866, 87, 87, 87, 638, 87, 87, 644, 929 931 645, 646, 648, 650, 87, 87, 87, 649, 87, 653, 930 932 651, 87, 652, 87, 654, 655, 87, 87, 87, 87, 931 933 656, 657, 87, 660, 659, 661, 664, 87, 658, 87, 932 934 87, 663, 87, 87, 87, 668, 665, 688, 688, 662, 933 666, 701, 702, 8 87, 887, 87, 667, 488, 488, 488,935 666, 701, 702, 891, 891, 87, 667, 488, 488, 488, 934 936 488, 488, 488, 596, 596, 596, 596, 596, 596, 595, 935 937 688, 595, 704, 87, 596, 596, 596, 596, 596, 596, 936 938 937 600, 600, 600, 600, 600, 600, 703, 688, 87, 8 87,939 600, 600, 600, 600, 600, 600, 703, 688, 87, 891, 938 940 594, 686, 686, 686, 686, 686, 686, 689, 87, 689, 939 941 87, 87, 689, 699, 87, 708, 87, 601, 706, 602, … … 944 946 715, 87, 721, 719, 87, 724, 87, 87, 722, 720, 945 947 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,948 726, 87, 87, 87, 728, 734, 87, 733, 730, 87, 949 950 735, 87, 87, 729, 87, 863, 751, 736, 686, 686, 949 951 686, 686, 686, 686, 600, 600, 600, 600, 600, 600, 950 952 750, 87, 755, 87, 601, 763, 602, 752, 603, 602, … … 954 956 87, 768, 87, 769, 87, 87, 87, 87, 770, 87, 955 957 87, 87, 87, 87, 771, 87, 774, 87, 772, 87, 956 87, 7 79, 87, 87, 795, 87, 780, 773, 87, 87,957 776, 87, 775, 803, 777, 796, 778, 686, 686, 686,958 959 686, 686, 686, 79 3, 87, 794, 799, 87, 798, 87,960 80 1, 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 83 1, 833, 87, 87, 87, 834, 87, 836, 810, 811,964 8 26, 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 8 49, 87, 87, 87, 854, 858, 859, 87, 87, 856,968 8 60, 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 8 87, 845, 882, 883, 887, 844, 885, 69, 69, 69,958 87, 780, 87, 87, 796, 87, 781, 773, 775, 777, 959 87, 87, 798, 776, 778, 797, 779, 686, 686, 686, 960 961 686, 686, 686, 794, 87, 87, 87, 795, 799, 802, 962 804, 87, 87, 87, 805, 806, 87, 801, 803, 808, 963 807, 800, 87, 87, 87, 809, 87, 87, 87, 87, 964 743, 87, 87, 87, 87, 830, 832, 87, 87, 810, 965 833, 87, 835, 87, 87, 87, 811, 829, 836, 812, 966 813, 87, 828, 840, 838, 827, 831, 87, 87, 834, 967 839, 87, 87, 87, 87, 837, 87, 87, 87, 854, 968 87, 853, 842, 87, 841, 87, 855, 87, 843, 87, 969 858, 87, 860, 87, 852, 870, 861, 87, 856, 87, 970 859, 87, 87, 87, 857, 87, 862, 868, 864, 87, 971 972 867, 87, 869, 881, 87, 87, 871, 872, 873, 87, 973 876, 87, 874, 875, 877, 87, 87, 87, 87, 879, 974 880, 87, 87, 87, 87, 878, 87, 87, 87, 891, 975 87, 884, 865, 87, 87, 87, 883, 885, 87, 882, 976 890, 87, 891, 891, 851, 886, 888, 887, 891, 889, 975 977 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, 978 69, 69, 69, 75, 75, 75, 75, 75, 75, 75, 979 75, 75, 75, 75, 75, 75, 78, 78, 78, 78, 980 78, 78, 78, 78, 78, 78, 78, 78, 78, 86, 981 850, 891, 86, 848, 86, 86, 86, 86, 86, 140, 982 983 891, 847, 891, 140, 140, 140, 140, 140, 140, 199, 984 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 985 199, 199, 204, 846, 891, 204, 845, 204, 204, 204, 986 204, 204, 208, 87, 208, 208, 87, 208, 208, 208, 987 208, 208, 208, 87, 208, 216, 891, 826, 216, 216, 988 216, 216, 216, 216, 216, 216, 891, 216, 239, 239, 997 989 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, 990 239, 253, 253, 825, 253, 823, 891, 821, 253, 269, 991 891, 819, 269, 891, 269, 269, 269, 269, 269, 273, 992 817, 273, 815, 87, 87, 273, 275, 87, 275, 87, 993 994 87, 87, 275, 348, 87, 348, 87, 87, 87, 348, 995 350, 87, 350, 87, 891, 793, 350, 354, 791, 354, 996 891, 891, 788, 354, 356, 786, 356, 784, 87, 87, 997 356, 358, 87, 358, 87, 87, 87, 358, 365, 87, 998 365, 749, 746, 745, 365, 367, 743, 367, 205, 739, 999 738, 367, 239, 239, 239, 239, 239, 239, 239, 239, 1000 239, 239, 239, 239, 239, 380, 670, 380, 382, 382, 1001 87, 382, 382, 382, 87, 382, 253, 253, 87, 253, 1002 392, 87, 392, 87, 87, 87, 392, 394, 87, 394, 1003 87, 87, 87, 394, 396, 87, 396, 87, 87, 87, 1004 1005 396, 273, 697, 273, 398, 696, 398, 694, 692, 690, 1006 398, 275, 598, 275, 86, 685, 684, 86, 682, 86, 1007 86, 86, 86, 86, 199, 199, 199, 199, 199, 199, 1008 199, 199, 199, 199, 199, 199, 199, 468, 468, 468, 1027 1009 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 1010 469, 680, 469, 678, 676, 674, 469, 471, 672, 471, 1011 670, 87, 87, 471, 473, 87, 473, 87, 87, 87, 1012 473, 348, 87, 348, 475, 87, 475, 87, 87, 87, 1013 475, 350, 617, 350, 478, 615, 478, 613, 611, 609, 1014 478, 354, 607, 354, 480, 502, 480, 605, 605, 594, 1015 1016 480, 356, 593, 356, 482, 591, 482, 483, 483, 589, 1017 482, 358, 587, 358, 484, 585, 484, 583, 581, 579, 1018 484, 365, 87, 365, 486, 87, 486, 87, 87, 87, 1019 486, 367, 87, 367, 491, 87, 491, 87, 491, 514, 1020 491, 380, 512, 380, 510, 380, 508, 380, 382, 382, 1021 506, 382, 382, 382, 504, 382, 503, 490, 503, 487, 1022 485, 361, 503, 505, 361, 505, 483, 481, 479, 505, 1023 507, 476, 507, 474, 472, 470, 507, 392, 87, 392, 1024 509, 87, 509, 87, 400, 399, 509, 394, 397, 394, 1025 511, 395, 511, 393, 270, 265, 511, 396, 264, 396, 1026 1027 513, 389, 513, 389, 252, 379, 513, 398, 379, 398, 1028 86, 240, 374, 86, 368, 86, 86, 86, 86, 86, 1029 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 1030 468, 468, 468, 578, 366, 578, 364, 360, 359, 578, 1031 469, 357, 469, 580, 355, 580, 351, 349, 205, 580, 1032 471, 201, 471, 582, 87, 582, 277, 276, 274, 582, 1033 473, 270, 473, 584, 265, 584, 268, 265, 263, 584, 1034 475, 262, 475, 586, 261, 586, 240, 232, 85, 586, 1035 478, 85, 478, 588, 87, 588, 205, 203, 85, 588, 1036 480, 122, 480, 482, 117, 482, 87, 891, 70, 482, 1037 1038 590, 70, 590, 891, 891, 891, 590, 484, 891, 484, 1039 592, 891, 592, 891, 891, 891, 592, 486, 891, 486, 1040 491, 891, 491, 891, 491, 891, 491, 382, 891, 382, 1041 891, 891, 891, 382, 606, 891, 606, 891, 891, 891, 1042 606, 503, 891, 503, 608, 891, 608, 891, 891, 891, 1043 608, 505, 891, 505, 610, 891, 610, 891, 891, 891, 1044 610, 507, 891, 507, 612, 891, 612, 891, 891, 891, 1045 612, 509, 891, 509, 614, 891, 614, 891, 891, 891, 1046 614, 511, 891, 511, 616, 891, 616, 891, 891, 891, 1047 616, 513, 891, 513, 86, 891, 891, 86, 891, 86, 1048 1049 86, 86, 86, 86, 669, 669, 669, 669, 669, 669, 1050 669, 669, 669, 669, 669, 669, 669, 671, 891, 671, 1051 891, 891, 891, 671, 578, 891, 578, 673, 891, 673, 1052 891, 891, 891, 673, 580, 891, 580, 675, 891, 675, 1053 891, 891, 891, 675, 582, 891, 582, 677, 891, 677, 1054 891, 891, 891, 677, 584, 891, 584, 679, 891, 679, 1055 891, 891, 891, 679, 586, 891, 586, 681, 891, 681, 1056 891, 891, 891, 681, 588, 891, 588, 683, 891, 683, 1057 891, 891, 891, 683, 590, 891, 590, 86, 891, 86, 1058 891, 891, 891, 86, 592, 891, 592, 491, 891, 491, 1059 1060 891, 891, 891, 491, 691, 891, 691, 891, 891, 891, 1061 691, 606, 891, 606, 693, 891, 693, 891, 891, 891, 1062 693, 608, 891, 608, 695, 891, 695, 891, 891, 891, 1063 695, 610, 891, 610, 140, 891, 140, 891, 891, 891, 1064 140, 612, 891, 612, 698, 891, 698, 614, 891, 614, 1065 86, 891, 891, 86, 891, 86, 86, 86, 86, 86, 1066 616, 891, 616, 669, 669, 669, 669, 669, 669, 669, 1067 669, 669, 669, 669, 669, 669, 737, 891, 737, 891, 1068 891, 891, 737, 671, 891, 671, 204, 891, 204, 891, 1069 891, 891, 204, 673, 891, 673, 740, 891, 740, 675, 1070 1071 891, 675, 204, 891, 891, 204, 891, 204, 204, 204, 1072 204, 204, 677, 891, 677, 741, 891, 741, 679, 891, 1073 679, 681, 891, 681, 742, 891, 742, 683, 891, 683, 1074 86, 891, 86, 744, 891, 744, 891, 891, 891, 744, 1075 691, 891, 691, 269, 891, 269, 891, 891, 891, 269, 1076 693, 891, 693, 747, 891, 747, 695, 891, 695, 140, 1077 891, 140, 748, 891, 748, 891, 891, 891, 748, 86, 1078 891, 891, 86, 891, 86, 86, 86, 86, 86, 782, 1079 891, 782, 737, 891, 737, 204, 891, 204, 783, 891, 1080 783, 891, 891, 891, 783, 785, 891, 785, 891, 891, 1081 1082 891, 785, 787, 891, 787, 891, 891, 891, 787, 789, 1083 891, 789, 790, 891, 790, 891, 891, 891, 790, 792, 1084 891, 792, 891, 891, 891, 792, 814, 891, 814, 891, 1085 891, 891, 814, 816, 891, 816, 891, 891, 891, 816, 1086 818, 891, 818, 891, 891, 891, 818, 820, 891, 820, 1087 891, 891, 891, 820, 822, 891, 822, 891, 891, 891, 1088 822, 824, 891, 824, 891, 891, 891, 824, 616, 891, 1089 616, 891, 891, 891, 616, 844, 891, 844, 891, 891, 1090 891, 844, 677, 891, 677, 891, 891, 891, 677, 681, 1091 891, 681, 891, 891, 891, 681, 86, 891, 86, 891, 1092 1093 891, 891, 86, 849, 891, 849, 891, 891, 891, 849, 1094 140, 891, 140, 891, 891, 891, 140, 204, 891, 204, 1095 891, 891, 891, 204, 11, 891, 891, 891, 891, 891, 1096 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 1097 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 1098 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 1099 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 1100 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 1101 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 1102 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 1103 1104 891, 891, 891, 891, 891, 891, 891, 891, 891, 891 1103 1105 } ; 1104 1106 1105 static yyconst flex_int16_t yy_chk[29 08] =1107 static yyconst flex_int16_t yy_chk[2911] = 1106 1108 { 0, 1107 1109 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, … … 1124 1126 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1125 1127 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 1126 8, 9, 10, 37, 37, 20, 39, 9, 10, 8 86,1128 8, 9, 10, 37, 37, 20, 39, 9, 10, 890, 1127 1129 7, 8, 13, 13, 13, 13, 13, 13, 15, 15, 1128 1130 … … 1135 1137 47, 45, 45, 45, 49, 30, 30, 45, 45, 49, 1136 1138 45, 30, 40, 45, 45, 40, 49, 30, 45, 56, 1137 62, 45, 49, 30, 73, 88 5, 127, 53, 127, 51,1139 62, 45, 49, 30, 73, 889, 127, 53, 127, 51, 1138 1140 61, 30, 62, 55, 30, 31, 108, 31, 31, 31, 1139 1141 … … 1149 1151 164, 68, 68, 59, 113, 38, 68, 116, 38, 131, 1150 1152 1151 110, 131, 60, 67, 67, 67, 67, 67, 67, 8 77,1153 110, 131, 60, 67, 67, 67, 67, 67, 67, 881, 1152 1154 142, 67, 68, 68, 68, 68, 68, 68, 80, 80, 1153 1155 80, 80, 80, 80, 153, 38, 38, 77, 77, 134, 1154 1156 110, 134, 77, 153, 77, 110, 135, 135, 135, 77, 1155 82, 82, 82, 82, 82, 82, 8 76, 243, 77, 77,1157 82, 82, 82, 82, 82, 82, 880, 243, 77, 77, 1156 1158 77, 77, 83, 83, 83, 83, 83, 83, 110, 77, 1157 1159 103, 103, 103, 103, 103, 103, 104, 104, 104, 104, … … 1163 1165 85, 166, 159, 150, 85, 85, 161, 85, 160, 85, 1164 1166 145, 162, 104, 167, 168, 161, 169, 163, 85, 85, 1165 85, 105, 163, 105, 105, 105, 105, 105, 105, 87 3,1167 85, 105, 163, 105, 105, 105, 105, 105, 105, 877, 1166 1168 160, 171, 162, 162, 165, 163, 167, 169, 173, 85, 1167 1169 105, 106, 85, 106, 165, 172, 106, 106, 106, 106, … … 1176 1178 189, 158, 158, 188, 192, 158, 194, 158, 284, 219, 1177 1179 185, 219, 158, 158, 158, 193, 158, 192, 220, 194, 1178 220, 191, 198, 198, 191, 192, 205, 198, 193, 87 2,1180 220, 191, 198, 198, 191, 192, 205, 198, 193, 876, 1179 1181 193, 197, 197, 197, 197, 197, 197, 200, 200, 197, 1180 1182 248, 221, 200, 198, 198, 198, 198, 198, 198, 202, … … 1193 1195 245, 245, 270, 288, 293, 286, 294, 300, 306, 293, 1194 1196 1195 308, 244, 300, 306, 87 0, 294, 308, 244, 246, 246,1197 308, 244, 300, 306, 874, 294, 308, 244, 246, 246, 1196 1198 246, 246, 246, 246, 253, 286, 288, 255, 255, 255, 1197 1199 255, 255, 255, 287, 246, 247, 246, 247, 246, 246, 1198 1200 247, 247, 247, 247, 247, 247, 290, 253, 287, 253, 1199 8 69, 246, 289, 253, 287, 287, 246, 292, 246, 253,1201 873, 246, 289, 253, 287, 287, 246, 292, 246, 253, 1200 1202 255, 246, 291, 246, 260, 260, 260, 260, 260, 260, 1201 1203 289, 253, 290, 292, 292, 253, 295, 291, 296, 253, … … 1209 1211 335, 324, 337, 339, 340, 326, 329, 328, 401, 327, 1210 1212 331, 337, 334, 335, 341, 343, 332, 340, 342, 401, 1211 333, 339, 341, 342, 344, 344, 345, 460, 86 2, 344,1213 333, 339, 341, 342, 344, 344, 345, 460, 866, 344, 1212 1214 343, 344, 345, 352, 352, 352, 352, 353, 353, 353, 1213 1215 353, 362, 363, 362, 363, 370, 370, 370, 370, 370, 1214 1216 370, 372, 460, 372, 380, 381, 372, 372, 372, 372, 1215 372, 372, 86 1, 402, 380, 381, 352, 371, 371, 371,1217 372, 372, 865, 402, 380, 381, 352, 371, 371, 371, 1216 1218 1217 1219 371, 371, 371, 374, 374, 374, 374, 374, 374, 402, 1218 380, 381, 403, 371, 404, 371, 86 0, 371, 371, 375,1220 380, 381, 403, 371, 404, 371, 864, 371, 371, 375, 1219 1221 375, 375, 375, 375, 375, 383, 382, 403, 406, 405, 1220 1222 371, 383, 407, 404, 408, 371, 374, 371, 405, 406, … … 1233 1235 450, 453, 442, 444, 455, 456, 447, 457, 458, 449, 1234 1236 459, 461, 463, 455, 451, 458, 454, 459, 462, 452, 1235 457, 453, 466, 456, 464, 467, 462, 525, 8 59, 463,1237 457, 453, 466, 456, 464, 467, 462, 525, 863, 463, 1236 1238 525, 468, 491, 461, 467, 464, 462, 468, 477, 477, 1237 1239 477, 477, 491, 515, 466, 488, 488, 488, 488, 488, … … 1239 1241 488, 490, 490, 490, 490, 490, 490, 519, 491, 521, 1240 1242 515, 488, 492, 488, 492, 488, 488, 492, 492, 492, 1241 492, 492, 492, 494, 516, 495, 493, 519, 488, 8 55,1242 85 1, 521, 518, 488, 490, 488, 493, 516, 488, 529,1243 492, 492, 492, 494, 516, 495, 493, 519, 488, 862, 1244 858, 521, 518, 488, 490, 488, 493, 516, 488, 529, 1243 1245 488, 497, 497, 497, 497, 497, 497, 518, 520, 494, 1244 1246 492, 495, 493, 498, 498, 498, 498, 498, 498, 523, 1245 529, 520, 526, 8 48, 523, 847, 528, 846, 522, 498,1247 529, 520, 526, 854, 523, 851, 528, 850, 522, 498, 1246 1248 499, 498, 499, 498, 498, 499, 499, 499, 499, 499, 1247 1249 499, 522, 526, 524, 527, 528, 498, 531, 530, 532, … … 1250 1252 532, 535, 537, 533, 536, 538, 539, 541, 542, 547, 1251 1253 535, 539, 544, 541, 538, 545, 546, 542, 547, 537, 1252 550, 551, 84 5, 549, 534, 552, 536, 554, 560, 544,1254 550, 551, 849, 549, 534, 552, 536, 554, 560, 544, 1253 1255 545, 546, 549, 551, 555, 557, 558, 550, 561, 555, 1254 1256 552, 562, 554, 565, 557, 558, 564, 567, 566, 568, 1255 1257 560, 561, 575, 565, 564, 566, 569, 571, 562, 574, 1256 1258 572, 568, 569, 620, 619, 575, 571, 601, 601, 567, 1257 572, 619, 620, 84 4, 843, 622, 574, 594, 594, 594,1259 572, 619, 620, 848, 847, 622, 574, 594, 594, 594, 1258 1260 594, 594, 594, 595, 595, 595, 595, 595, 595, 597, 1259 1261 601, 597, 622, 621, 597, 597, 597, 597, 597, 597, 1260 1262 1261 600, 600, 600, 600, 600, 600, 621, 602, 626, 84 2,1263 600, 600, 600, 600, 600, 600, 621, 602, 626, 846, 1262 1264 594, 596, 596, 596, 596, 596, 596, 603, 618, 603, 1263 1265 623, 624, 603, 618, 628, 626, 625, 596, 624, 596, … … 1268 1270 633, 646, 639, 637, 650, 642, 651, 656, 640, 638, 1269 1271 646, 653, 657, 636, 644, 665, 656, 641, 664, 657, 1270 645, 667, 668, 84 1, 650, 665, 700, 664, 653, 699,1271 1272 667, 702, 705, 651, 714, 8 37, 700, 668, 686, 686,1272 645, 667, 668, 842, 650, 665, 700, 664, 653, 699, 1273 1274 667, 702, 705, 651, 714, 842, 700, 668, 686, 686, 1273 1275 686, 686, 686, 686, 690, 690, 690, 690, 690, 690, 1274 1276 699, 708, 705, 703, 686, 714, 686, 702, 686, 686, … … 1276 1278 712, 686, 711, 717, 710, 718, 686, 690, 686, 712, 1277 1279 720, 686, 717, 686, 713, 711, 716, 713, 719, 716, 1278 721, 719, 715, 720, 722, 723, 724, 725, 721, 7 28,1279 7 31, 718, 732, 735, 722, 733, 725, 736, 723, 756,1280 757, 735, 836, 754, 756, 759, 736, 724, 755, 760,1281 7 31, 761, 728, 764, 732, 757, 733, 743, 743, 743,1282 1283 743, 743, 743, 754, 7 58, 755, 760, 762, 759, 763,1284 76 2, 769, 766, 768, 758, 766, 768, 761, 769, 772,1285 7 70, 764, 763, 770, 771, 773, 778, 771, 793, 795,1286 743, 79 8, 797, 796, 772, 797, 799, 800, 802, 799,1287 80 0, 803, 804, 806, 807, 804, 810, 807, 773, 778,1288 7 95, 796, 809, 798, 808, 793, 802, 808, 811, 826,1289 8 30, 809, 810, 827, 829, 806, 828, 803, 831, 828,1290 8 27, 831, 832, 829, 811, 834, 835, 839, 830, 835,1291 8 26, 840, 838, 849, 830, 838, 839, 853, 850, 832,1292 8 40, 852, 849, 850, 852, 854, 856, 853, 857, 856,1293 1294 85 4, 857, 858, 863, 864, 858, 865, 866, 867, 865,1295 868, 86 7, 871, 868, 874, 875, 878, 866, 879, 864,1296 8 80, 882, 881, 863, 883, 878, 884, 833, 825, 824,1297 8 75, 879, 823, 822, 871, 874, 884, 821, 820, 882,1298 8 19, 818, 880, 881, 817, 816, 883, 888, 888, 888,1299 8 88, 888, 888, 888, 888, 888, 888, 888, 888, 888,1300 8 89, 889, 889, 889, 889, 889, 889, 889, 889, 889,1301 8 89, 889, 889, 890, 890, 890, 890, 890, 890, 890,1302 89 0, 890, 890, 890, 890, 890, 891, 815, 814, 891,1303 8 13, 891, 891, 891, 891, 891, 892, 812, 805, 801,1304 1305 8 92, 892, 892, 892, 892, 892, 893, 893, 893, 893,1306 89 3, 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 7 77, 899, 899, 899, 899, 899, 900, 776, 900, 775,1314 7 74, 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 90 6, 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 9 09, 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 91 6, 917, 592, 917, 590, 588, 586, 917, 918, 584,1328 9 18, 919, 582, 580, 919, 578, 919, 919, 919, 919,1329 9 19, 920, 920, 920, 920, 920, 920, 920, 920, 920,1330 92 0, 920, 920, 920, 921, 921, 921, 921, 921, 921,1331 92 1, 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 92 5, 926, 511, 926, 509, 507, 505, 926, 927, 503,1335 9 27, 928, 502, 928, 501, 500, 489, 928, 929, 486,1336 9 29, 930, 484, 930, 483, 482, 480, 930, 931, 478,1337 1338 93 1, 932, 475, 932, 473, 471, 469, 932, 933, 465,1339 93 3, 934, 448, 934, 446, 438, 436, 934, 935, 428,1340 93 5, 936, 426, 936, 424, 398, 396, 936, 937, 394,1341 9 37, 938, 392, 938, 391, 938, 390, 938, 939, 377,1342 9 39, 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 95 1, 214, 951, 951, 951, 951, 951, 952, 952, 952,1351 95 2, 952, 952, 952, 952, 952, 952, 952, 952, 952,1352 95 3, 213, 953, 207, 206, 204, 953, 954, 199, 954,1353 95 5, 178, 955, 149, 147, 146, 955, 956, 140, 956,1354 9 57, 138, 957, 136, 128, 125, 957, 958, 124, 958,1355 9 59, 120, 959, 101, 98, 95, 959, 960, 93, 960,1356 96 1, 86, 961, 72, 70, 66, 961, 962, 36, 962,1357 96 3, 33, 963, 18, 11, 4, 963, 964, 3, 964,1358 96 5, 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 97 3, 974, 0, 974, 0, 0, 0, 974, 975, 0,1365 97 5, 976, 0, 976, 0, 0, 0, 976, 977, 0,1366 9 77, 978, 0, 978, 0, 0, 0, 978, 979, 0,1367 9 79, 980, 0, 980, 0, 0, 0, 980, 981, 0,1368 98 1, 982, 0, 982, 0, 0, 0, 982, 983, 0,1369 98 3, 984, 0, 0, 984, 0, 984, 984, 984, 984,1370 1371 98 4, 985, 985, 985, 985, 985, 985, 985, 985, 985,1372 98 5, 985, 985, 985, 986, 0, 986, 0, 0,0,1373 986, 987, 0, 987, 988, 0, 988, 0, 0, 0,1374 988, 989, 0, 989, 990, 0, 990, 0, 0, 0,1375 990, 991, 0, 991, 992, 0, 992, 0, 0, 0,1376 992, 993, 0, 993, 994, 0, 994, 0, 0, 0,1377 994, 995, 0, 995, 996, 0, 996, 0, 0,0,1378 996, 997, 0, 997, 998, 0, 998, 0, 0, 0,1379 998, 999, 0, 999, 1000, 0, 1000, 0, 0, 0,1380 1000, 1001, 0, 1001, 1002, 0, 1002, 0, 0, 0,1381 1382 1002, 1003, 0, 1003, 0, 0, 0, 1003, 1004, 0,1383 100 4, 1005, 0, 1005, 0, 0, 0, 1005, 1006, 0,1384 100 6, 1007, 0, 1007, 0, 0, 0, 1007, 1008, 0,1385 10 08, 1009, 0, 1009, 0, 0, 0, 1009, 1010, 0,1386 101 0, 1011, 0, 1011, 1012, 0, 1012, 1013, 0, 0,1387 101 3, 0, 1013, 1013, 1013, 1013, 1013, 1014, 0, 1014,1388 101 5, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,1389 101 5, 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 102 6, 1027, 0, 1027, 1028, 0, 1028, 1029, 0, 1029,1396 103 0, 0, 1030, 0, 0, 0, 1030, 1031, 0, 1031,1397 103 2, 0, 1032, 0, 0, 0, 1032, 1033, 0, 1033,1398 103 4, 0, 1034, 1035, 0, 1035, 1036, 0, 1036, 1037,1399 0, 10 37, 0, 0, 0, 1037, 1038, 0, 0, 1038,1400 0, 1038, 1038, 1038, 1038, 1038, 1039, 0, 1039, 1040,1401 0, 104 0, 1041, 0, 1041, 1042, 0, 1042, 0, 0,1402 0, 1042, 1043, 0, 1043, 0, 0, 0, 1043, 1044,1403 1404 0, 104 4, 0, 0, 0, 1044, 1045, 0, 1045, 1046,1405 0, 104 6, 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 105 3, 0, 0, 0, 1053, 1054, 0, 1054, 0, 0,1411 0, 1054, 1055, 0, 1055, 0, 0, 0, 1055, 1056,1412 0, 105 6, 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 8 87, 887, 887, 887, 887, 887, 887, 887, 887, 887,1419 8 87, 887, 887, 887, 887, 887, 887, 887, 887, 887,1420 8 87, 887, 887, 887, 887, 887, 887, 887, 887, 887,1421 8 87, 887, 887, 887, 887, 887, 887, 887, 887, 887,1422 8 87, 887, 887, 887, 887, 887, 887, 887, 887, 887,1423 8 87, 887, 887, 887, 887, 887, 887, 887, 887, 887,1424 8 87, 887, 887, 887, 887, 887, 887, 887, 887, 887,1425 1426 8 87, 887, 887, 887, 887, 887, 8871280 721, 719, 715, 720, 722, 723, 724, 725, 721, 731, 1281 728, 718, 732, 735, 722, 733, 725, 736, 723, 756, 1282 757, 735, 758, 754, 756, 759, 736, 724, 728, 731, 1283 755, 761, 758, 728, 732, 757, 733, 743, 743, 743, 1284 1285 743, 743, 743, 754, 760, 763, 762, 755, 759, 762, 1286 764, 766, 768, 769, 766, 768, 770, 761, 763, 770, 1287 769, 760, 771, 773, 772, 771, 775, 779, 794, 797, 1288 743, 796, 798, 800, 799, 798, 800, 801, 764, 772, 1289 801, 803, 804, 807, 810, 805, 773, 797, 805, 775, 1290 779, 808, 796, 810, 808, 794, 799, 809, 811, 803, 1291 809, 812, 813, 828, 829, 807, 830, 831, 804, 830, 1292 832, 829, 812, 834, 811, 856, 831, 833, 813, 837, 1293 833, 875, 837, 840, 828, 856, 840, 841, 832, 843, 1294 834, 852, 853, 867, 832, 868, 841, 853, 843, 855, 1295 1296 852, 857, 855, 875, 859, 860, 857, 859, 860, 861, 1297 868, 869, 861, 867, 869, 870, 871, 872, 878, 871, 1298 872, 879, 882, 884, 883, 870, 885, 887, 886, 845, 1299 888, 882, 844, 839, 838, 836, 879, 883, 835, 878, 1300 888, 827, 826, 825, 824, 884, 886, 885, 823, 887, 1301 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 1302 892, 892, 892, 893, 893, 893, 893, 893, 893, 893, 1303 893, 893, 893, 893, 893, 893, 894, 894, 894, 894, 1304 894, 894, 894, 894, 894, 894, 894, 894, 894, 895, 1305 822, 821, 895, 820, 895, 895, 895, 895, 895, 896, 1306 1307 819, 818, 817, 896, 896, 896, 896, 896, 896, 897, 1308 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 1309 897, 897, 898, 816, 815, 898, 814, 898, 898, 898, 1310 898, 898, 899, 806, 899, 899, 802, 899, 899, 899, 1311 899, 899, 899, 795, 899, 900, 793, 792, 900, 900, 1312 900, 900, 900, 900, 900, 900, 791, 900, 901, 901, 1313 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 1314 901, 902, 902, 790, 902, 789, 788, 787, 902, 903, 1315 786, 785, 903, 784, 903, 903, 903, 903, 903, 904, 1316 783, 904, 782, 781, 780, 904, 905, 778, 905, 777, 1317 1318 776, 774, 905, 906, 767, 906, 765, 753, 752, 906, 1319 907, 751, 907, 750, 749, 748, 907, 908, 747, 908, 1320 746, 745, 742, 908, 909, 741, 909, 740, 734, 730, 1321 909, 910, 729, 910, 727, 726, 709, 910, 911, 701, 1322 911, 698, 693, 691, 911, 912, 687, 912, 677, 673, 1323 671, 912, 913, 913, 913, 913, 913, 913, 913, 913, 1324 913, 913, 913, 913, 913, 914, 669, 914, 915, 915, 1325 666, 915, 915, 915, 663, 915, 916, 916, 662, 916, 1326 917, 661, 917, 660, 659, 658, 917, 918, 655, 918, 1327 654, 652, 649, 918, 919, 648, 919, 647, 643, 616, 1328 1329 919, 920, 612, 920, 921, 610, 921, 608, 606, 604, 1330 921, 922, 598, 922, 923, 592, 590, 923, 588, 923, 1331 923, 923, 923, 923, 924, 924, 924, 924, 924, 924, 1332 924, 924, 924, 924, 924, 924, 924, 925, 925, 925, 1333 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 1334 926, 586, 926, 584, 582, 580, 926, 927, 578, 927, 1335 577, 576, 573, 927, 928, 570, 928, 563, 559, 556, 1336 928, 929, 553, 929, 930, 548, 930, 543, 540, 517, 1337 930, 931, 513, 931, 932, 511, 932, 509, 507, 505, 1338 932, 933, 503, 933, 934, 502, 934, 501, 500, 489, 1339 1340 934, 935, 486, 935, 936, 484, 936, 483, 482, 480, 1341 936, 937, 478, 937, 938, 475, 938, 473, 471, 469, 1342 938, 939, 465, 939, 940, 448, 940, 446, 438, 436, 1343 940, 941, 428, 941, 942, 426, 942, 424, 942, 398, 1344 942, 943, 396, 943, 394, 943, 392, 943, 944, 944, 1345 391, 944, 944, 944, 390, 944, 945, 377, 945, 367, 1346 365, 364, 945, 946, 360, 946, 358, 356, 354, 946, 1347 947, 350, 947, 348, 347, 346, 947, 948, 336, 948, 1348 949, 321, 949, 298, 277, 275, 949, 950, 273, 950, 1349 951, 272, 951, 271, 269, 268, 951, 952, 263, 952, 1350 1351 953, 259, 953, 258, 254, 251, 953, 954, 250, 954, 1352 955, 239, 238, 955, 231, 955, 955, 955, 955, 955, 1353 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 1354 956, 956, 956, 957, 230, 957, 227, 217, 215, 957, 1355 958, 214, 958, 959, 213, 959, 207, 206, 204, 959, 1356 960, 199, 960, 961, 178, 961, 149, 147, 146, 961, 1357 962, 140, 962, 963, 138, 963, 136, 128, 125, 963, 1358 964, 124, 964, 965, 120, 965, 101, 98, 95, 965, 1359 966, 93, 966, 967, 86, 967, 72, 70, 66, 967, 1360 968, 36, 968, 969, 33, 969, 18, 11, 4, 969, 1361 1362 970, 3, 970, 0, 0, 0, 970, 971, 0, 971, 1363 972, 0, 972, 0, 0, 0, 972, 973, 0, 973, 1364 974, 0, 974, 0, 974, 0, 974, 975, 0, 975, 1365 0, 0, 0, 975, 976, 0, 976, 0, 0, 0, 1366 976, 977, 0, 977, 978, 0, 978, 0, 0, 0, 1367 978, 979, 0, 979, 980, 0, 980, 0, 0, 0, 1368 980, 981, 0, 981, 982, 0, 982, 0, 0, 0, 1369 982, 983, 0, 983, 984, 0, 984, 0, 0, 0, 1370 984, 985, 0, 985, 986, 0, 986, 0, 0, 0, 1371 986, 987, 0, 987, 988, 0, 0, 988, 0, 988, 1372 1373 988, 988, 988, 988, 989, 989, 989, 989, 989, 989, 1374 989, 989, 989, 989, 989, 989, 989, 990, 0, 990, 1375 0, 0, 0, 990, 991, 0, 991, 992, 0, 992, 1376 0, 0, 0, 992, 993, 0, 993, 994, 0, 994, 1377 0, 0, 0, 994, 995, 0, 995, 996, 0, 996, 1378 0, 0, 0, 996, 997, 0, 997, 998, 0, 998, 1379 0, 0, 0, 998, 999, 0, 999, 1000, 0, 1000, 1380 0, 0, 0, 1000, 1001, 0, 1001, 1002, 0, 1002, 1381 0, 0, 0, 1002, 1003, 0, 1003, 1004, 0, 1004, 1382 0, 0, 0, 1004, 1005, 0, 1005, 1006, 0, 1006, 1383 1384 0, 0, 0, 1006, 1007, 0, 1007, 0, 0, 0, 1385 1007, 1008, 0, 1008, 1009, 0, 1009, 0, 0, 0, 1386 1009, 1010, 0, 1010, 1011, 0, 1011, 0, 0, 0, 1387 1011, 1012, 0, 1012, 1013, 0, 1013, 0, 0, 0, 1388 1013, 1014, 0, 1014, 1015, 0, 1015, 1016, 0, 1016, 1389 1017, 0, 0, 1017, 0, 1017, 1017, 1017, 1017, 1017, 1390 1018, 0, 1018, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1391 1019, 1019, 1019, 1019, 1019, 1019, 1020, 0, 1020, 0, 1392 0, 0, 1020, 1021, 0, 1021, 1022, 0, 1022, 0, 1393 0, 0, 1022, 1023, 0, 1023, 1024, 0, 1024, 1025, 1394 1395 0, 1025, 1026, 0, 0, 1026, 0, 1026, 1026, 1026, 1396 1026, 1026, 1027, 0, 1027, 1028, 0, 1028, 1029, 0, 1397 1029, 1030, 0, 1030, 1031, 0, 1031, 1032, 0, 1032, 1398 1033, 0, 1033, 1034, 0, 1034, 0, 0, 0, 1034, 1399 1035, 0, 1035, 1036, 0, 1036, 0, 0, 0, 1036, 1400 1037, 0, 1037, 1038, 0, 1038, 1039, 0, 1039, 1040, 1401 0, 1040, 1041, 0, 1041, 0, 0, 0, 1041, 1042, 1402 0, 0, 1042, 0, 1042, 1042, 1042, 1042, 1042, 1043, 1403 0, 1043, 1044, 0, 1044, 1045, 0, 1045, 1046, 0, 1404 1046, 0, 0, 0, 1046, 1047, 0, 1047, 0, 0, 1405 1406 0, 1047, 1048, 0, 1048, 0, 0, 0, 1048, 1049, 1407 0, 1049, 1050, 0, 1050, 0, 0, 0, 1050, 1051, 1408 0, 1051, 0, 0, 0, 1051, 1052, 0, 1052, 0, 1409 0, 0, 1052, 1053, 0, 1053, 0, 0, 0, 1053, 1410 1054, 0, 1054, 0, 0, 0, 1054, 1055, 0, 1055, 1411 0, 0, 0, 1055, 1056, 0, 1056, 0, 0, 0, 1412 1056, 1057, 0, 1057, 0, 0, 0, 1057, 1058, 0, 1413 1058, 0, 0, 0, 1058, 1059, 0, 1059, 0, 0, 1414 0, 1059, 1060, 0, 1060, 0, 0, 0, 1060, 1061, 1415 0, 1061, 0, 0, 0, 1061, 1062, 0, 1062, 0, 1416 1417 0, 0, 1062, 1063, 0, 1063, 0, 0, 0, 1063, 1418 1064, 0, 1064, 0, 0, 0, 1064, 1065, 0, 1065, 1419 0, 0, 0, 1065, 891, 891, 891, 891, 891, 891, 1420 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 1421 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 1422 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 1423 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 1424 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 1425 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 1426 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 1427 1428 891, 891, 891, 891, 891, 891, 891, 891, 891, 891 1427 1429 } ; 1428 1430 1429 1431 /* Table of booleans, true if rule could match eol. */ 1430 static yyconst flex_int32_t yy_rule_can_match_eol[18 1] =1432 static yyconst flex_int32_t yy_rule_can_match_eol[182] = 1431 1433 { 0, 1432 1434 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, … … 1435 1437 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1436 1438 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1437 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,1438 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1439 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1440 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1439 1441 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1440 1442 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1441 0, };1443 0, 0, }; 1442 1444 1443 1445 static yy_state_type yy_last_accepting_state; … … 1466 1468 * Author : Peter A. Buhr 1467 1469 * Created On : Sat Sep 22 08:58:10 2001 1468 * Last Modified By : Peter A. Buhr1469 * Last Modified On : Thu Jun 23 07:29:3020161470 * Update Count : 45 71470 * Last Modified By : 1471 * Last Modified On : Sun Jul 31 07:19:36 2016 1472 * Update Count : 459 1471 1473 */ 1472 1474 #line 20 "lex.ll" … … 1529 1531 1530 1532 1531 #line 153 2"Parser/lex.cc"1533 #line 1534 "Parser/lex.cc" 1532 1534 1533 1535 #define INITIAL 0 … … 1724 1726 1725 1727 /* line directives */ 1726 #line 172 7"Parser/lex.cc"1728 #line 1729 "Parser/lex.cc" 1727 1729 1728 1730 if ( !(yy_init) ) … … 1778 1780 { 1779 1781 yy_current_state = (int) yy_def[yy_current_state]; 1780 if ( yy_current_state >= 8 88)1782 if ( yy_current_state >= 892 ) 1781 1783 yy_c = yy_meta[(unsigned int) yy_c]; 1782 1784 } … … 1784 1786 ++yy_cp; 1785 1787 } 1786 while ( yy_base[yy_current_state] != 282 2);1788 while ( yy_base[yy_current_state] != 2825 ); 1787 1789 1788 1790 yy_find_action: … … 2081 2083 YY_RULE_SETUP 2082 2084 #line 216 "lex.ll" 2085 { KEYWORD_RETURN(FALLTHRU); } // CFA 2086 YY_BREAK 2087 case 48: 2088 YY_RULE_SETUP 2089 #line 217 "lex.ll" 2083 2090 { KEYWORD_RETURN(FINALLY); } // CFA 2084 2091 YY_BREAK 2085 case 4 8:2086 YY_RULE_SETUP 2087 #line 21 7"lex.ll"2092 case 49: 2093 YY_RULE_SETUP 2094 #line 218 "lex.ll" 2088 2095 { KEYWORD_RETURN(FLOAT); } 2089 2096 YY_BREAK 2090 case 49:2091 YY_RULE_SETUP 2092 #line 21 8"lex.ll"2097 case 50: 2098 YY_RULE_SETUP 2099 #line 219 "lex.ll" 2093 2100 { KEYWORD_RETURN(FLOAT); } // GCC 2094 2101 YY_BREAK 2095 case 5 0:2096 YY_RULE_SETUP 2097 #line 2 19"lex.ll"2102 case 51: 2103 YY_RULE_SETUP 2104 #line 220 "lex.ll" 2098 2105 { KEYWORD_RETURN(FOR); } 2099 2106 YY_BREAK 2100 case 5 1:2101 YY_RULE_SETUP 2102 #line 22 0"lex.ll"2107 case 52: 2108 YY_RULE_SETUP 2109 #line 221 "lex.ll" 2103 2110 { KEYWORD_RETURN(FORALL); } // CFA 2104 2111 YY_BREAK 2105 case 5 2:2106 YY_RULE_SETUP 2107 #line 22 1"lex.ll"2112 case 53: 2113 YY_RULE_SETUP 2114 #line 222 "lex.ll" 2108 2115 { KEYWORD_RETURN(FORTRAN); } 2109 2116 YY_BREAK 2110 case 5 3:2111 YY_RULE_SETUP 2112 #line 22 2"lex.ll"2117 case 54: 2118 YY_RULE_SETUP 2119 #line 223 "lex.ll" 2113 2120 { KEYWORD_RETURN(FTYPE); } // CFA 2114 2121 YY_BREAK 2115 case 5 4:2116 YY_RULE_SETUP 2117 #line 22 3"lex.ll"2122 case 55: 2123 YY_RULE_SETUP 2124 #line 224 "lex.ll" 2118 2125 { KEYWORD_RETURN(GENERIC); } // C11 2119 2126 YY_BREAK 2120 case 5 5:2121 YY_RULE_SETUP 2122 #line 22 4"lex.ll"2127 case 56: 2128 YY_RULE_SETUP 2129 #line 225 "lex.ll" 2123 2130 { KEYWORD_RETURN(GOTO); } 2124 2131 YY_BREAK 2125 case 5 6:2126 YY_RULE_SETUP 2127 #line 22 5"lex.ll"2132 case 57: 2133 YY_RULE_SETUP 2134 #line 226 "lex.ll" 2128 2135 { KEYWORD_RETURN(IF); } 2129 2136 YY_BREAK 2130 case 5 7:2131 YY_RULE_SETUP 2132 #line 22 6"lex.ll"2137 case 58: 2138 YY_RULE_SETUP 2139 #line 227 "lex.ll" 2133 2140 { KEYWORD_RETURN(IMAGINARY); } // C99 2134 YY_BREAK2135 case 58:2136 YY_RULE_SETUP2137 #line 227 "lex.ll"2138 { KEYWORD_RETURN(IMAGINARY); } // GCC2139 2141 YY_BREAK 2140 2142 case 59: … … 2146 2148 YY_RULE_SETUP 2147 2149 #line 229 "lex.ll" 2150 { KEYWORD_RETURN(IMAGINARY); } // GCC 2151 YY_BREAK 2152 case 61: 2153 YY_RULE_SETUP 2154 #line 230 "lex.ll" 2148 2155 { KEYWORD_RETURN(INLINE); } // C99 2149 YY_BREAK2150 case 61:2151 YY_RULE_SETUP2152 #line 230 "lex.ll"2153 { KEYWORD_RETURN(INLINE); } // GCC2154 2156 YY_BREAK 2155 2157 case 62: … … 2161 2163 YY_RULE_SETUP 2162 2164 #line 232 "lex.ll" 2165 { KEYWORD_RETURN(INLINE); } // GCC 2166 YY_BREAK 2167 case 64: 2168 YY_RULE_SETUP 2169 #line 233 "lex.ll" 2163 2170 { KEYWORD_RETURN(INT); } 2164 2171 YY_BREAK 2165 case 6 4:2166 YY_RULE_SETUP 2167 #line 23 3"lex.ll"2172 case 65: 2173 YY_RULE_SETUP 2174 #line 234 "lex.ll" 2168 2175 { KEYWORD_RETURN(INT); } // GCC 2169 2176 YY_BREAK 2170 case 6 5:2171 YY_RULE_SETUP 2172 #line 23 4"lex.ll"2177 case 66: 2178 YY_RULE_SETUP 2179 #line 235 "lex.ll" 2173 2180 { KEYWORD_RETURN(LABEL); } // GCC 2174 2181 YY_BREAK 2175 case 6 6:2176 YY_RULE_SETUP 2177 #line 23 5"lex.ll"2182 case 67: 2183 YY_RULE_SETUP 2184 #line 236 "lex.ll" 2178 2185 { KEYWORD_RETURN(LONG); } 2179 2186 YY_BREAK 2180 case 6 7:2181 YY_RULE_SETUP 2182 #line 23 6"lex.ll"2187 case 68: 2188 YY_RULE_SETUP 2189 #line 237 "lex.ll" 2183 2190 { KEYWORD_RETURN(LVALUE); } // CFA 2184 2191 YY_BREAK 2185 case 6 8:2186 YY_RULE_SETUP 2187 #line 23 7"lex.ll"2192 case 69: 2193 YY_RULE_SETUP 2194 #line 238 "lex.ll" 2188 2195 { KEYWORD_RETURN(NORETURN); } // C11 2189 2196 YY_BREAK 2190 case 69:2191 YY_RULE_SETUP 2192 #line 23 8"lex.ll"2197 case 70: 2198 YY_RULE_SETUP 2199 #line 239 "lex.ll" 2193 2200 { KEYWORD_RETURN(OFFSETOF); } // GCC 2194 2201 YY_BREAK 2195 case 7 0:2196 YY_RULE_SETUP 2197 #line 2 39"lex.ll"2202 case 71: 2203 YY_RULE_SETUP 2204 #line 240 "lex.ll" 2198 2205 { KEYWORD_RETURN(OTYPE); } // CFA 2199 2206 YY_BREAK 2200 case 7 1:2201 YY_RULE_SETUP 2202 #line 24 0"lex.ll"2207 case 72: 2208 YY_RULE_SETUP 2209 #line 241 "lex.ll" 2203 2210 { KEYWORD_RETURN(REGISTER); } 2204 2211 YY_BREAK 2205 case 7 2:2206 YY_RULE_SETUP 2207 #line 24 1"lex.ll"2212 case 73: 2213 YY_RULE_SETUP 2214 #line 242 "lex.ll" 2208 2215 { KEYWORD_RETURN(RESTRICT); } // C99 2209 YY_BREAK2210 case 73:2211 YY_RULE_SETUP2212 #line 242 "lex.ll"2213 { KEYWORD_RETURN(RESTRICT); } // GCC2214 2216 YY_BREAK 2215 2217 case 74: … … 2221 2223 YY_RULE_SETUP 2222 2224 #line 244 "lex.ll" 2225 { KEYWORD_RETURN(RESTRICT); } // GCC 2226 YY_BREAK 2227 case 76: 2228 YY_RULE_SETUP 2229 #line 245 "lex.ll" 2223 2230 { KEYWORD_RETURN(RETURN); } 2224 2231 YY_BREAK 2225 case 7 6:2226 YY_RULE_SETUP 2227 #line 24 5"lex.ll"2232 case 77: 2233 YY_RULE_SETUP 2234 #line 246 "lex.ll" 2228 2235 { KEYWORD_RETURN(SHORT); } 2229 2236 YY_BREAK 2230 case 7 7:2231 YY_RULE_SETUP 2232 #line 24 6"lex.ll"2237 case 78: 2238 YY_RULE_SETUP 2239 #line 247 "lex.ll" 2233 2240 { KEYWORD_RETURN(SIGNED); } 2234 YY_BREAK2235 case 78:2236 YY_RULE_SETUP2237 #line 247 "lex.ll"2238 { KEYWORD_RETURN(SIGNED); } // GCC2239 2241 YY_BREAK 2240 2242 case 79: … … 2246 2248 YY_RULE_SETUP 2247 2249 #line 249 "lex.ll" 2250 { KEYWORD_RETURN(SIGNED); } // GCC 2251 YY_BREAK 2252 case 81: 2253 YY_RULE_SETUP 2254 #line 250 "lex.ll" 2248 2255 { KEYWORD_RETURN(SIZEOF); } 2249 2256 YY_BREAK 2250 case 8 1:2251 YY_RULE_SETUP 2252 #line 25 0"lex.ll"2257 case 82: 2258 YY_RULE_SETUP 2259 #line 251 "lex.ll" 2253 2260 { KEYWORD_RETURN(STATIC); } 2254 2261 YY_BREAK 2255 case 8 2:2256 YY_RULE_SETUP 2257 #line 25 1"lex.ll"2262 case 83: 2263 YY_RULE_SETUP 2264 #line 252 "lex.ll" 2258 2265 { KEYWORD_RETURN(STATICASSERT); } // C11 2259 2266 YY_BREAK 2260 case 8 3:2261 YY_RULE_SETUP 2262 #line 25 2"lex.ll"2267 case 84: 2268 YY_RULE_SETUP 2269 #line 253 "lex.ll" 2263 2270 { KEYWORD_RETURN(STRUCT); } 2264 2271 YY_BREAK 2265 case 8 4:2266 YY_RULE_SETUP 2267 #line 25 3"lex.ll"2272 case 85: 2273 YY_RULE_SETUP 2274 #line 254 "lex.ll" 2268 2275 { KEYWORD_RETURN(SWITCH); } 2269 2276 YY_BREAK 2270 case 8 5:2271 YY_RULE_SETUP 2272 #line 25 4"lex.ll"2277 case 86: 2278 YY_RULE_SETUP 2279 #line 255 "lex.ll" 2273 2280 { KEYWORD_RETURN(THREADLOCAL); } // C11 2274 2281 YY_BREAK 2275 case 8 6:2276 YY_RULE_SETUP 2277 #line 25 5"lex.ll"2282 case 87: 2283 YY_RULE_SETUP 2284 #line 256 "lex.ll" 2278 2285 { KEYWORD_RETURN(THROW); } // CFA 2279 2286 YY_BREAK 2280 case 8 7:2281 YY_RULE_SETUP 2282 #line 25 6"lex.ll"2287 case 88: 2288 YY_RULE_SETUP 2289 #line 257 "lex.ll" 2283 2290 { KEYWORD_RETURN(THROWRESUME); } // CFA 2284 2291 YY_BREAK 2285 case 8 8:2286 YY_RULE_SETUP 2287 #line 25 7"lex.ll"2292 case 89: 2293 YY_RULE_SETUP 2294 #line 258 "lex.ll" 2288 2295 { KEYWORD_RETURN(TRAIT); } // CFA 2289 2296 YY_BREAK 2290 case 89:2291 YY_RULE_SETUP 2292 #line 25 8"lex.ll"2297 case 90: 2298 YY_RULE_SETUP 2299 #line 259 "lex.ll" 2293 2300 { KEYWORD_RETURN(TRY); } // CFA 2294 2301 YY_BREAK 2295 case 9 0:2296 YY_RULE_SETUP 2297 #line 2 59"lex.ll"2302 case 91: 2303 YY_RULE_SETUP 2304 #line 260 "lex.ll" 2298 2305 { KEYWORD_RETURN(TYPEDEF); } 2299 YY_BREAK2300 case 91:2301 YY_RULE_SETUP2302 #line 260 "lex.ll"2303 { KEYWORD_RETURN(TYPEOF); } // GCC2304 2306 YY_BREAK 2305 2307 case 92: … … 2316 2318 YY_RULE_SETUP 2317 2319 #line 263 "lex.ll" 2320 { KEYWORD_RETURN(TYPEOF); } // GCC 2321 YY_BREAK 2322 case 95: 2323 YY_RULE_SETUP 2324 #line 264 "lex.ll" 2318 2325 { KEYWORD_RETURN(UNION); } 2319 2326 YY_BREAK 2320 case 9 5:2321 YY_RULE_SETUP 2322 #line 26 4"lex.ll"2327 case 96: 2328 YY_RULE_SETUP 2329 #line 265 "lex.ll" 2323 2330 { KEYWORD_RETURN(UNSIGNED); } 2324 2331 YY_BREAK 2325 case 9 6:2326 YY_RULE_SETUP 2327 #line 26 5"lex.ll"2332 case 97: 2333 YY_RULE_SETUP 2334 #line 266 "lex.ll" 2328 2335 { KEYWORD_RETURN(VALIST); } // GCC 2329 2336 YY_BREAK 2330 case 9 7:2331 YY_RULE_SETUP 2332 #line 26 6"lex.ll"2337 case 98: 2338 YY_RULE_SETUP 2339 #line 267 "lex.ll" 2333 2340 { KEYWORD_RETURN(VOID); } 2334 2341 YY_BREAK 2335 case 9 8:2336 YY_RULE_SETUP 2337 #line 26 7"lex.ll"2342 case 99: 2343 YY_RULE_SETUP 2344 #line 268 "lex.ll" 2338 2345 { KEYWORD_RETURN(VOLATILE); } 2339 YY_BREAK2340 case 99:2341 YY_RULE_SETUP2342 #line 268 "lex.ll"2343 { KEYWORD_RETURN(VOLATILE); } // GCC2344 2346 YY_BREAK 2345 2347 case 100: … … 2351 2353 YY_RULE_SETUP 2352 2354 #line 270 "lex.ll" 2355 { KEYWORD_RETURN(VOLATILE); } // GCC 2356 YY_BREAK 2357 case 102: 2358 YY_RULE_SETUP 2359 #line 271 "lex.ll" 2353 2360 { KEYWORD_RETURN(WHILE); } 2354 2361 YY_BREAK 2355 2362 /* identifier */ 2356 case 10 2:2357 YY_RULE_SETUP 2358 #line 27 3"lex.ll"2363 case 103: 2364 YY_RULE_SETUP 2365 #line 274 "lex.ll" 2359 2366 { IDENTIFIER_RETURN(); } 2360 2367 YY_BREAK 2361 case 10 3:2362 YY_RULE_SETUP 2363 #line 27 4"lex.ll"2368 case 104: 2369 YY_RULE_SETUP 2370 #line 275 "lex.ll" 2364 2371 { ATTRIBUTE_RETURN(); } 2365 2372 YY_BREAK 2366 case 10 4:2367 YY_RULE_SETUP 2368 #line 27 5"lex.ll"2373 case 105: 2374 YY_RULE_SETUP 2375 #line 276 "lex.ll" 2369 2376 { BEGIN BKQUOTE; } 2370 2377 YY_BREAK 2371 case 10 5:2372 YY_RULE_SETUP 2373 #line 27 6"lex.ll"2378 case 106: 2379 YY_RULE_SETUP 2380 #line 277 "lex.ll" 2374 2381 { IDENTIFIER_RETURN(); } 2375 2382 YY_BREAK 2376 case 10 6:2377 YY_RULE_SETUP 2378 #line 27 7"lex.ll"2383 case 107: 2384 YY_RULE_SETUP 2385 #line 278 "lex.ll" 2379 2386 { BEGIN 0; } 2380 2387 YY_BREAK 2381 2388 /* numeric constants */ 2382 case 10 7:2383 YY_RULE_SETUP 2384 #line 28 0"lex.ll"2389 case 108: 2390 YY_RULE_SETUP 2391 #line 281 "lex.ll" 2385 2392 { NUMERIC_RETURN(ZERO); } // CFA 2386 2393 YY_BREAK 2387 case 10 8:2388 YY_RULE_SETUP 2389 #line 28 1"lex.ll"2394 case 109: 2395 YY_RULE_SETUP 2396 #line 282 "lex.ll" 2390 2397 { NUMERIC_RETURN(ONE); } // CFA 2391 YY_BREAK2392 case 109:2393 YY_RULE_SETUP2394 #line 282 "lex.ll"2395 { NUMERIC_RETURN(INTEGERconstant); }2396 2398 YY_BREAK 2397 2399 case 110: … … 2408 2410 YY_RULE_SETUP 2409 2411 #line 285 "lex.ll" 2410 { NUMERIC_RETURN( FLOATINGconstant); }2412 { NUMERIC_RETURN(INTEGERconstant); } 2411 2413 YY_BREAK 2412 2414 case 113: … … 2415 2417 { NUMERIC_RETURN(FLOATINGconstant); } 2416 2418 YY_BREAK 2419 case 114: 2420 YY_RULE_SETUP 2421 #line 287 "lex.ll" 2422 { NUMERIC_RETURN(FLOATINGconstant); } 2423 YY_BREAK 2417 2424 /* character constant, allows empty value */ 2418 case 11 4:2419 YY_RULE_SETUP 2420 #line 2 89"lex.ll"2425 case 115: 2426 YY_RULE_SETUP 2427 #line 290 "lex.ll" 2421 2428 { BEGIN QUOTE; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); } 2422 2429 YY_BREAK 2423 case 11 5:2424 YY_RULE_SETUP 2425 #line 29 0"lex.ll"2430 case 116: 2431 YY_RULE_SETUP 2432 #line 291 "lex.ll" 2426 2433 { *strtext += std::string( yytext ); } 2427 2434 YY_BREAK 2428 case 11 6:2429 /* rule 11 6can match eol */2430 YY_RULE_SETUP 2431 #line 29 1"lex.ll"2435 case 117: 2436 /* rule 117 can match eol */ 2437 YY_RULE_SETUP 2438 #line 292 "lex.ll" 2432 2439 { BEGIN 0; *strtext += std::string( yytext); RETURN_STR(CHARACTERconstant); } 2433 2440 YY_BREAK 2434 2441 /* ' stop highlighting */ 2435 2442 /* string constant */ 2436 case 11 7:2437 YY_RULE_SETUP 2438 #line 29 5"lex.ll"2443 case 118: 2444 YY_RULE_SETUP 2445 #line 296 "lex.ll" 2439 2446 { BEGIN STRING; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); } 2440 2447 YY_BREAK 2441 case 11 8:2442 YY_RULE_SETUP 2443 #line 29 6"lex.ll"2448 case 119: 2449 YY_RULE_SETUP 2450 #line 297 "lex.ll" 2444 2451 { *strtext += std::string( yytext ); } 2445 2452 YY_BREAK 2446 case 1 19:2447 /* rule 1 19can match eol */2448 YY_RULE_SETUP 2449 #line 29 7"lex.ll"2453 case 120: 2454 /* rule 120 can match eol */ 2455 YY_RULE_SETUP 2456 #line 298 "lex.ll" 2450 2457 { BEGIN 0; *strtext += std::string( yytext ); RETURN_STR(STRINGliteral); } 2451 2458 YY_BREAK 2452 2459 /* " stop highlighting */ 2453 2460 /* common character/string constant */ 2454 case 12 0:2455 YY_RULE_SETUP 2456 #line 30 1"lex.ll"2461 case 121: 2462 YY_RULE_SETUP 2463 #line 302 "lex.ll" 2457 2464 { rm_underscore(); *strtext += std::string( yytext ); } 2458 2465 YY_BREAK 2459 case 12 1:2460 /* rule 12 1can match eol */2461 YY_RULE_SETUP 2462 #line 30 2"lex.ll"2466 case 122: 2467 /* rule 122 can match eol */ 2468 YY_RULE_SETUP 2469 #line 303 "lex.ll" 2463 2470 {} // continuation (ALSO HANDLED BY CPP) 2464 2471 YY_BREAK 2465 case 12 2:2466 YY_RULE_SETUP 2467 #line 30 3"lex.ll"2472 case 123: 2473 YY_RULE_SETUP 2474 #line 304 "lex.ll" 2468 2475 { *strtext += std::string( yytext ); } // unknown escape character 2469 2476 YY_BREAK 2470 2477 /* punctuation */ 2471 case 123:2472 YY_RULE_SETUP2473 #line 306 "lex.ll"2474 { ASCIIOP_RETURN(); }2475 YY_BREAK2476 2478 case 124: 2477 2479 YY_RULE_SETUP … … 2502 2504 YY_RULE_SETUP 2503 2505 #line 312 "lex.ll" 2506 { ASCIIOP_RETURN(); } 2507 YY_BREAK 2508 case 130: 2509 YY_RULE_SETUP 2510 #line 313 "lex.ll" 2504 2511 { ASCIIOP_RETURN(); } // also operator 2505 YY_BREAK2506 case 130:2507 YY_RULE_SETUP2508 #line 313 "lex.ll"2509 { ASCIIOP_RETURN(); }2510 2512 YY_BREAK 2511 2513 case 131: … … 2517 2519 YY_RULE_SETUP 2518 2520 #line 315 "lex.ll" 2521 { ASCIIOP_RETURN(); } 2522 YY_BREAK 2523 case 133: 2524 YY_RULE_SETUP 2525 #line 316 "lex.ll" 2519 2526 { ASCIIOP_RETURN(); } // also operator 2520 2527 YY_BREAK 2521 case 13 3:2522 YY_RULE_SETUP 2523 #line 31 6"lex.ll"2528 case 134: 2529 YY_RULE_SETUP 2530 #line 317 "lex.ll" 2524 2531 { NAMEDOP_RETURN(ELLIPSIS); } 2525 2532 YY_BREAK 2526 2533 /* alternative C99 brackets, "<:" & "<:<:" handled by preprocessor */ 2527 case 13 4:2528 YY_RULE_SETUP 2529 #line 3 19"lex.ll"2534 case 135: 2535 YY_RULE_SETUP 2536 #line 320 "lex.ll" 2530 2537 { RETURN_VAL('['); } 2531 2538 YY_BREAK 2532 case 13 5:2533 YY_RULE_SETUP 2534 #line 32 0"lex.ll"2539 case 136: 2540 YY_RULE_SETUP 2541 #line 321 "lex.ll" 2535 2542 { RETURN_VAL(']'); } 2536 2543 YY_BREAK 2537 case 13 6:2538 YY_RULE_SETUP 2539 #line 32 1"lex.ll"2544 case 137: 2545 YY_RULE_SETUP 2546 #line 322 "lex.ll" 2540 2547 { RETURN_VAL('{'); } 2541 2548 YY_BREAK 2542 case 13 7:2543 YY_RULE_SETUP 2544 #line 32 2"lex.ll"2549 case 138: 2550 YY_RULE_SETUP 2551 #line 323 "lex.ll" 2545 2552 { RETURN_VAL('}'); } 2546 2553 YY_BREAK 2547 2554 /* operators */ 2548 case 138:2549 YY_RULE_SETUP2550 #line 325 "lex.ll"2551 { ASCIIOP_RETURN(); }2552 YY_BREAK2553 2555 case 139: 2554 2556 YY_RULE_SETUP … … 2618 2620 case 152: 2619 2621 YY_RULE_SETUP 2620 #line 340 "lex.ll" 2622 #line 339 "lex.ll" 2623 { ASCIIOP_RETURN(); } 2624 YY_BREAK 2625 case 153: 2626 YY_RULE_SETUP 2627 #line 341 "lex.ll" 2621 2628 { NAMEDOP_RETURN(ICR); } 2622 2629 YY_BREAK 2623 case 15 3:2624 YY_RULE_SETUP 2625 #line 34 1"lex.ll"2630 case 154: 2631 YY_RULE_SETUP 2632 #line 342 "lex.ll" 2626 2633 { NAMEDOP_RETURN(DECR); } 2627 2634 YY_BREAK 2628 case 15 4:2629 YY_RULE_SETUP 2630 #line 34 2"lex.ll"2635 case 155: 2636 YY_RULE_SETUP 2637 #line 343 "lex.ll" 2631 2638 { NAMEDOP_RETURN(EQ); } 2632 2639 YY_BREAK 2633 case 15 5:2634 YY_RULE_SETUP 2635 #line 34 3"lex.ll"2640 case 156: 2641 YY_RULE_SETUP 2642 #line 344 "lex.ll" 2636 2643 { NAMEDOP_RETURN(NE); } 2637 2644 YY_BREAK 2638 case 15 6:2639 YY_RULE_SETUP 2640 #line 34 4"lex.ll"2645 case 157: 2646 YY_RULE_SETUP 2647 #line 345 "lex.ll" 2641 2648 { NAMEDOP_RETURN(LS); } 2642 2649 YY_BREAK 2643 case 15 7:2644 YY_RULE_SETUP 2645 #line 34 5"lex.ll"2650 case 158: 2651 YY_RULE_SETUP 2652 #line 346 "lex.ll" 2646 2653 { NAMEDOP_RETURN(RS); } 2647 2654 YY_BREAK 2648 case 15 8:2649 YY_RULE_SETUP 2650 #line 34 6"lex.ll"2655 case 159: 2656 YY_RULE_SETUP 2657 #line 347 "lex.ll" 2651 2658 { NAMEDOP_RETURN(LE); } 2652 2659 YY_BREAK 2653 case 1 59:2654 YY_RULE_SETUP 2655 #line 34 7"lex.ll"2660 case 160: 2661 YY_RULE_SETUP 2662 #line 348 "lex.ll" 2656 2663 { NAMEDOP_RETURN(GE); } 2657 2664 YY_BREAK 2658 case 16 0:2659 YY_RULE_SETUP 2660 #line 34 8"lex.ll"2665 case 161: 2666 YY_RULE_SETUP 2667 #line 349 "lex.ll" 2661 2668 { NAMEDOP_RETURN(ANDAND); } 2662 2669 YY_BREAK 2663 case 16 1:2664 YY_RULE_SETUP 2665 #line 3 49"lex.ll"2670 case 162: 2671 YY_RULE_SETUP 2672 #line 350 "lex.ll" 2666 2673 { NAMEDOP_RETURN(OROR); } 2667 2674 YY_BREAK 2668 case 16 2:2669 YY_RULE_SETUP 2670 #line 35 0"lex.ll"2675 case 163: 2676 YY_RULE_SETUP 2677 #line 351 "lex.ll" 2671 2678 { NAMEDOP_RETURN(ARROW); } 2672 2679 YY_BREAK 2673 case 16 3:2674 YY_RULE_SETUP 2675 #line 35 1"lex.ll"2680 case 164: 2681 YY_RULE_SETUP 2682 #line 352 "lex.ll" 2676 2683 { NAMEDOP_RETURN(PLUSassign); } 2677 2684 YY_BREAK 2678 case 16 4:2679 YY_RULE_SETUP 2680 #line 35 2"lex.ll"2685 case 165: 2686 YY_RULE_SETUP 2687 #line 353 "lex.ll" 2681 2688 { NAMEDOP_RETURN(MINUSassign); } 2682 2689 YY_BREAK 2683 case 16 5:2684 YY_RULE_SETUP 2685 #line 35 3"lex.ll"2690 case 166: 2691 YY_RULE_SETUP 2692 #line 354 "lex.ll" 2686 2693 { NAMEDOP_RETURN(MULTassign); } 2687 2694 YY_BREAK 2688 case 16 6:2689 YY_RULE_SETUP 2690 #line 35 4"lex.ll"2695 case 167: 2696 YY_RULE_SETUP 2697 #line 355 "lex.ll" 2691 2698 { NAMEDOP_RETURN(DIVassign); } 2692 2699 YY_BREAK 2693 case 16 7:2694 YY_RULE_SETUP 2695 #line 35 5"lex.ll"2700 case 168: 2701 YY_RULE_SETUP 2702 #line 356 "lex.ll" 2696 2703 { NAMEDOP_RETURN(MODassign); } 2697 2704 YY_BREAK 2698 case 16 8:2699 YY_RULE_SETUP 2700 #line 35 6"lex.ll"2705 case 169: 2706 YY_RULE_SETUP 2707 #line 357 "lex.ll" 2701 2708 { NAMEDOP_RETURN(ANDassign); } 2702 2709 YY_BREAK 2703 case 1 69:2704 YY_RULE_SETUP 2705 #line 35 7"lex.ll"2710 case 170: 2711 YY_RULE_SETUP 2712 #line 358 "lex.ll" 2706 2713 { NAMEDOP_RETURN(ORassign); } 2707 2714 YY_BREAK 2708 case 17 0:2709 YY_RULE_SETUP 2710 #line 35 8"lex.ll"2715 case 171: 2716 YY_RULE_SETUP 2717 #line 359 "lex.ll" 2711 2718 { NAMEDOP_RETURN(ERassign); } 2712 2719 YY_BREAK 2713 case 17 1:2714 YY_RULE_SETUP 2715 #line 3 59"lex.ll"2720 case 172: 2721 YY_RULE_SETUP 2722 #line 360 "lex.ll" 2716 2723 { NAMEDOP_RETURN(LSassign); } 2717 2724 YY_BREAK 2718 case 17 2:2719 YY_RULE_SETUP 2720 #line 36 0"lex.ll"2725 case 173: 2726 YY_RULE_SETUP 2727 #line 361 "lex.ll" 2721 2728 { NAMEDOP_RETURN(RSassign); } 2722 2729 YY_BREAK 2723 case 17 3:2724 YY_RULE_SETUP 2725 #line 36 2"lex.ll"2726 { NAMEDOP_RETURN(ATassign); } 2730 case 174: 2731 YY_RULE_SETUP 2732 #line 363 "lex.ll" 2733 { NAMEDOP_RETURN(ATassign); } // CFA 2727 2734 YY_BREAK 2728 2735 /* CFA, operator identifier */ 2729 case 17 4:2730 YY_RULE_SETUP 2731 #line 36 5"lex.ll"2736 case 175: 2737 YY_RULE_SETUP 2738 #line 366 "lex.ll" 2732 2739 { IDENTIFIER_RETURN(); } // unary 2733 YY_BREAK2734 case 175:2735 YY_RULE_SETUP2736 #line 366 "lex.ll"2737 { IDENTIFIER_RETURN(); }2738 2740 YY_BREAK 2739 2741 case 176: … … 2745 2747 YY_RULE_SETUP 2746 2748 #line 368 "lex.ll" 2749 { IDENTIFIER_RETURN(); } 2750 YY_BREAK 2751 case 178: 2752 YY_RULE_SETUP 2753 #line 369 "lex.ll" 2747 2754 { IDENTIFIER_RETURN(); } // binary 2748 2755 YY_BREAK … … 2773 2780 an argument list. 2774 2781 */ 2775 case 17 8:2776 YY_RULE_SETUP 2777 #line 39 5"lex.ll"2782 case 179: 2783 YY_RULE_SETUP 2784 #line 396 "lex.ll" 2778 2785 { 2779 2786 // 1 or 2 character unary operator ? … … 2788 2795 YY_BREAK 2789 2796 /* unknown characters */ 2790 case 1 79:2791 YY_RULE_SETUP 2792 #line 40 7"lex.ll"2797 case 180: 2798 YY_RULE_SETUP 2799 #line 408 "lex.ll" 2793 2800 { printf("unknown character(s):\"%s\" on line %d\n", yytext, yylineno); } 2794 2801 YY_BREAK 2795 case 18 0:2796 YY_RULE_SETUP 2797 #line 4 09"lex.ll"2802 case 181: 2803 YY_RULE_SETUP 2804 #line 410 "lex.ll" 2798 2805 ECHO; 2799 2806 YY_BREAK 2800 #line 280 1"Parser/lex.cc"2807 #line 2808 "Parser/lex.cc" 2801 2808 case YY_STATE_EOF(INITIAL): 2802 2809 case YY_STATE_EOF(COMMENT): … … 3095 3102 { 3096 3103 yy_current_state = (int) yy_def[yy_current_state]; 3097 if ( yy_current_state >= 8 88)3104 if ( yy_current_state >= 892 ) 3098 3105 yy_c = yy_meta[(unsigned int) yy_c]; 3099 3106 } … … 3123 3130 { 3124 3131 yy_current_state = (int) yy_def[yy_current_state]; 3125 if ( yy_current_state >= 8 88)3132 if ( yy_current_state >= 892 ) 3126 3133 yy_c = yy_meta[(unsigned int) yy_c]; 3127 3134 } 3128 3135 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; 3129 yy_is_jam = (yy_current_state == 8 87);3136 yy_is_jam = (yy_current_state == 891); 3130 3137 3131 3138 return yy_is_jam ? 0 : yy_current_state; … … 3773 3780 #define YYTABLES_NAME "yytables" 3774 3781 3775 #line 4 09"lex.ll"3782 #line 410 "lex.ll" 3776 3783 3777 3784 -
src/Parser/lex.ll
r950f7a7 r7527e63 9 9 * Author : Peter A. Buhr 10 10 * Created On : Sat Sep 22 08:58:10 2001 11 * Last Modified By : Peter A. Buhr12 * Last Modified On : Thu Jun 23 07:29:30201613 * Update Count : 45 711 * Last Modified By : 12 * Last Modified On : Sun Jul 31 07:19:36 2016 13 * Update Count : 459 14 14 */ 15 15 … … 213 213 __extension__ { KEYWORD_RETURN(EXTENSION); } // GCC 214 214 extern { KEYWORD_RETURN(EXTERN); } 215 fallthrough { KEYWORD_RETURN(FALLTHRU); } // CFA 215 216 fallthru { KEYWORD_RETURN(FALLTHRU); } // CFA 216 217 finally { KEYWORD_RETURN(FINALLY); } // CFA … … 360 361 ">>=" { NAMEDOP_RETURN(RSassign); } 361 362 362 "@=" { NAMEDOP_RETURN(ATassign); } 363 "@=" { NAMEDOP_RETURN(ATassign); } // CFA 363 364 364 365 /* CFA, operator identifier */ -
src/Parser/parser.cc
r950f7a7 r7527e63 89 89 TypedefTable typedefTable; 90 90 91 void appendStr( std::string &to, std::string *from ) { 92 // "abc" "def" "ghi" => "abcdefghi", remove new text from quotes and insert before last quote in old string. 93 to.insert( to.length() - 1, from->substr( 1, from->length() - 2 ) ); 94 } // appendStr 95 91 96 92 97 /* Line 268 of yacc.c */ 93 #line 9 4"Parser/parser.cc"98 #line 99 "Parser/parser.cc" 94 99 95 100 /* Enabling traces. */ … … 342 347 343 348 /* Line 293 of yacc.c */ 344 #line 11 0"parser.yy"349 #line 115 "parser.yy" 345 350 346 351 Token tok; … … 351 356 DeclarationNode::TypeClass tclass; 352 357 StatementNode *sn; 353 ConstantNode *constant; 358 ConstantExpr *constant; 359 ForCtl *fctl; 354 360 LabelNode *label; 355 361 InitializerNode *in; 362 OperKinds op; 356 363 bool flag; 357 364 … … 359 366 360 367 /* Line 293 of yacc.c */ 361 #line 36 2"Parser/parser.cc"368 #line 369 "Parser/parser.cc" 362 369 } YYSTYPE; 363 370 # define YYSTYPE_IS_TRIVIAL 1 … … 371 378 372 379 /* Line 343 of yacc.c */ 373 #line 3 74"Parser/parser.cc"380 #line 381 "Parser/parser.cc" 374 381 375 382 #ifdef short … … 588 595 589 596 /* YYFINAL -- State number of the termination state. */ 590 #define YYFINAL 25 2597 #define YYFINAL 251 591 598 /* YYLAST -- Last index in YYTABLE. */ 592 #define YYLAST 1 2080599 #define YYLAST 10816 593 600 594 601 /* YYNTOKENS -- Number of terminals. */ … … 597 604 #define YYNNTS 241 598 605 /* YYNRULES -- Number of rules. */ 599 #define YYNRULES 75 5606 #define YYNRULES 750 600 607 /* YYNRULES -- Number of states. */ 601 #define YYNSTATES 15 79608 #define YYNSTATES 1554 602 609 603 610 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ … … 614 621 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 615 622 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 616 2, 2, 2, 12 2, 2, 2, 2, 125, 119, 2,617 109, 110, 11 8, 120, 116, 121, 113, 124, 2, 2,618 2, 2, 2, 2, 2, 2, 2, 2, 1 17, 132,619 12 6, 131, 127, 130, 2, 2, 2, 2, 2, 2,623 2, 2, 2, 121, 2, 2, 2, 124, 118, 2, 624 109, 110, 117, 119, 116, 120, 113, 123, 2, 2, 625 2, 2, 2, 2, 2, 2, 2, 2, 130, 132, 626 125, 131, 126, 129, 2, 2, 2, 2, 2, 2, 620 627 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 621 628 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 622 2, 111, 2, 112, 12 8, 2, 2, 2, 2, 2,629 2, 111, 2, 112, 127, 2, 2, 2, 2, 2, 623 630 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 624 631 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 625 2, 2, 2, 114, 12 9, 115, 123, 2, 2, 2,632 2, 2, 2, 114, 128, 115, 122, 2, 2, 2, 626 633 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 627 634 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, … … 658 665 17, 19, 21, 23, 25, 27, 29, 31, 34, 36, 659 666 38, 42, 46, 48, 55, 60, 64, 72, 76, 84, 660 87, 90, 98, 103, 105, 109, 110, 112, 11 6, 124,661 1 34, 136, 140, 142, 146, 154, 158, 166, 168, 170,662 1 72, 175, 178, 181, 184, 187, 190, 195, 202, 204,663 20 9, 214, 217, 222, 224, 226, 228, 230, 232, 234,664 2 36, 238, 243, 248, 250, 254, 258, 262, 264, 268,665 2 72, 274, 278, 282, 284, 288, 292, 296, 300, 302,666 306, 310, 312, 316, 318, 322, 324, 328, 330, 334,667 3 36, 340, 342, 348, 353, 359, 361, 363, 367, 371,668 3 74, 375, 377, 380, 386, 393, 401, 403, 407, 409,669 411, 413, 415, 417, 419, 421, 423, 425, 427, 429,670 4 33, 434, 436, 438, 440, 442, 444, 446, 448, 450,671 4 52, 459, 464, 467, 475, 477, 481, 483, 486, 488,672 4 91, 493, 496, 499, 505, 513, 519, 529, 535, 545,673 5 47, 551, 553, 555, 559, 563, 566, 568, 571, 574,674 5 75, 577, 580, 584, 585, 587, 590, 594, 598, 603,675 604, 606, 608, 611, 617, 625, 632, 639, 644, 648,676 6 53, 656, 660, 663, 667, 671, 675, 679, 685, 689,677 6 93, 698, 700, 706, 713, 719, 726, 736, 747, 757,678 7 68, 771, 773, 776, 779, 782, 784, 791, 800, 811,679 8 24, 839, 840, 842, 843, 845, 847, 851, 856, 864,680 8 65, 867, 871, 873, 877, 879, 881, 883, 887, 889,681 8 91, 893, 897, 898, 900, 904, 909, 911, 915, 917,682 9 19, 923, 927, 931, 935, 939, 942, 946, 953, 957,683 9 61, 966, 968, 971, 974, 978, 984, 993, 1001, 1009,684 101 5, 1025, 1028, 1031, 1037, 1041, 1047, 1052, 1056, 1061,685 106 6, 1074, 1078, 1082, 1086, 1090, 1095, 1102, 1104, 1106,686 1 108, 1110, 1112, 1114, 1116, 1118, 1119, 1121, 1123, 1126,687 11 28, 1130, 1132, 1134, 1136, 1138, 1140, 1141, 1147, 1149,688 11 52, 1156, 1158, 1161, 1163, 1165, 1167, 1169, 1171, 1173,689 11 75, 1177, 1179, 1181, 1183, 1185, 1187, 1189, 1191, 1193,690 11 95, 1197, 1199, 1201, 1203, 1205, 1207, 1210, 1213, 1217,691 12 21, 1223, 1227, 1229, 1232, 1235, 1238, 1243, 1248, 1253,692 12 58, 1260, 1263, 1266, 1270, 1272, 1275, 1278, 1280, 1283,693 12 86, 1290, 1292, 1295, 1298, 1300, 1302, 1307, 1310, 1311,694 13 18, 1326, 1329, 1332, 1335, 1336, 1339, 1342, 1346, 1349,695 13 53, 1355, 1358, 1362, 1365, 1368, 1373, 1374, 1376, 1379,696 13 82, 1384, 1385, 1387, 1390, 1393, 1399, 1402, 1403, 1411,697 1 414, 1419, 1420, 1423, 1424, 1426, 1428, 1430, 1436, 1442,698 144 8, 1450, 1456, 1462, 1472, 1474, 1480, 1481, 1483, 1485,699 14 91, 1493, 1495, 1501, 1507, 1509, 1513, 1517, 1522, 1524,700 15 26, 1528, 1530, 1533, 1535, 1539, 1543, 1545, 1548, 1550,701 15 54, 1556, 1558, 1560, 1562, 1564, 1566, 1568, 1570, 1572,702 15 74, 1576, 1579, 1581, 1583, 1585, 1588, 1589, 1592, 1595,703 15 97, 1602, 1603, 1605, 1608, 1612, 1617, 1620, 1623, 1625,704 162 8, 1630, 1633, 1639, 1645, 1653, 1660, 1662, 1665, 1668,705 16 72, 1674, 1677, 1680, 1685, 1688, 1693, 1694, 1699, 1702,706 1 704, 1706, 1708, 1709, 1712, 1718, 1724, 1738, 1740, 1742,707 17 46, 1750, 1753, 1757, 1761, 1764, 1769, 1771, 1778, 1788,708 178 9, 1801, 1803, 1807, 1811, 1815, 1817, 1819, 1825, 1828,709 18 34, 1835, 1837, 1839, 1843, 1844, 1846, 1848, 1850, 1852,710 18 53, 1860, 1863, 1865, 1868, 1873, 1876, 1880, 1884, 1888,711 189 3, 1899, 1905, 1911, 1918, 1920, 1922, 1924, 1928, 1929,712 19 35, 1936, 1938, 1940, 1943, 1950, 1952, 1956, 1957, 1959,713 19 64, 1966, 1968, 1970, 1972, 1975, 1977, 1980, 1983, 1985,714 198 9, 1992, 1996, 2000, 2003, 2008, 2013, 2017, 2026, 2030,715 203 3, 2035, 2038, 2045, 2054, 2058, 2061, 2065, 2069, 2074,716 20 79, 2083, 2085, 2087, 2089, 2094, 2101, 2105, 2108, 2112,717 21 16, 2121, 2126, 2130, 2133, 2135, 2138, 2141, 2143, 2147,718 21 50, 2154, 2158, 2161, 2166, 2171, 2175, 2182, 2191, 2195,719 21 98, 2200, 2203, 2206, 2209, 2213, 2217, 2220, 2225, 2230,720 223 4, 2241, 2250, 2254, 2257, 2259, 2262, 2265, 2267, 2269,721 22 72, 2276, 2280, 2283, 2288, 2295, 2304, 2306, 2309, 2312,722 23 14, 2317, 2320, 2324, 2328, 2330, 2335, 2340, 2344, 2350,723 235 9, 2363, 2366, 2370, 2372, 2378, 2384, 2391, 2398, 2400,724 2 403, 2406, 2408, 2411, 2414, 2418, 2422, 2424, 2429, 2434,725 243 8, 2444, 2453, 2457, 2459, 2462, 2464, 2467, 2474, 2480,726 248 7, 2495, 2503, 2505, 2508, 2511, 2513, 2516, 2519, 2523,727 252 7, 2529, 2534, 2539, 2543, 2552, 2556, 2558, 2560, 2563,728 25 65, 2567, 2570, 2574, 2577, 2581, 2584, 2588, 2592, 2595,729 2 600, 2604, 2607, 2611, 2614, 2619, 2623, 2626, 2633, 2640,730 26 47, 2655, 2657, 2660, 2662, 2664, 2666, 2669, 2673, 2676,731 26 80, 2683, 2687, 2691, 2696, 2699, 2703, 2708, 2711, 2717,732 27 23, 2730, 2737, 2738, 2740, 2741667 87, 90, 98, 103, 105, 109, 110, 112, 114, 118, 668 120, 124, 132, 136, 144, 146, 148, 150, 153, 156, 669 159, 162, 165, 168, 173, 176, 181, 188, 190, 195, 670 200, 202, 204, 206, 208, 210, 212, 214, 219, 224, 671 226, 230, 234, 238, 240, 244, 248, 250, 254, 258, 672 260, 264, 268, 272, 276, 278, 282, 286, 288, 292, 673 294, 298, 300, 304, 306, 310, 312, 316, 318, 324, 674 329, 335, 337, 339, 343, 346, 347, 349, 351, 353, 675 355, 357, 359, 361, 363, 365, 367, 369, 371, 374, 676 380, 387, 395, 397, 401, 403, 407, 408, 410, 412, 677 414, 416, 418, 420, 422, 424, 426, 433, 438, 441, 678 449, 451, 455, 457, 460, 462, 465, 467, 470, 473, 679 479, 487, 493, 503, 509, 519, 521, 525, 527, 529, 680 533, 537, 540, 542, 545, 548, 549, 551, 554, 558, 681 559, 561, 564, 568, 572, 577, 578, 580, 582, 585, 682 591, 599, 606, 613, 618, 622, 627, 630, 634, 637, 683 641, 645, 649, 653, 659, 663, 667, 672, 674, 680, 684 687, 693, 700, 710, 721, 731, 742, 745, 747, 750, 685 753, 756, 758, 765, 774, 785, 798, 813, 814, 816, 686 817, 819, 821, 825, 830, 838, 839, 841, 845, 847, 687 851, 853, 855, 857, 861, 863, 865, 867, 871, 872, 688 874, 878, 883, 885, 889, 891, 893, 897, 901, 905, 689 909, 913, 916, 920, 927, 931, 935, 940, 942, 945, 690 948, 952, 958, 967, 975, 983, 989, 999, 1002, 1005, 691 1011, 1015, 1021, 1026, 1030, 1035, 1040, 1048, 1052, 1056, 692 1060, 1064, 1069, 1076, 1078, 1080, 1082, 1084, 1086, 1088, 693 1090, 1092, 1093, 1095, 1097, 1100, 1102, 1104, 1106, 1108, 694 1110, 1112, 1114, 1115, 1121, 1123, 1126, 1130, 1132, 1135, 695 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 696 1157, 1159, 1161, 1163, 1165, 1167, 1169, 1171, 1173, 1175, 697 1177, 1179, 1181, 1184, 1187, 1191, 1195, 1197, 1201, 1203, 698 1206, 1209, 1212, 1217, 1222, 1227, 1232, 1234, 1237, 1240, 699 1244, 1246, 1249, 1252, 1254, 1257, 1260, 1264, 1266, 1269, 700 1272, 1274, 1276, 1281, 1284, 1285, 1292, 1300, 1303, 1306, 701 1309, 1310, 1313, 1316, 1320, 1323, 1327, 1329, 1332, 1336, 702 1339, 1342, 1347, 1348, 1350, 1353, 1356, 1358, 1359, 1361, 703 1364, 1367, 1373, 1376, 1377, 1385, 1388, 1393, 1394, 1397, 704 1398, 1400, 1402, 1404, 1410, 1416, 1422, 1424, 1430, 1436, 705 1446, 1448, 1454, 1455, 1457, 1459, 1465, 1467, 1469, 1475, 706 1481, 1483, 1487, 1491, 1496, 1498, 1500, 1502, 1504, 1507, 707 1509, 1513, 1517, 1519, 1522, 1524, 1528, 1530, 1532, 1534, 708 1536, 1538, 1540, 1542, 1544, 1546, 1548, 1550, 1553, 1555, 709 1557, 1559, 1562, 1563, 1566, 1569, 1571, 1576, 1577, 1579, 710 1582, 1586, 1591, 1594, 1597, 1599, 1602, 1605, 1611, 1617, 711 1625, 1632, 1634, 1637, 1640, 1644, 1646, 1649, 1652, 1657, 712 1660, 1665, 1666, 1671, 1674, 1676, 1678, 1680, 1681, 1684, 713 1690, 1696, 1710, 1712, 1714, 1718, 1722, 1725, 1729, 1733, 714 1736, 1741, 1743, 1750, 1760, 1761, 1773, 1775, 1779, 1783, 715 1787, 1789, 1791, 1797, 1800, 1806, 1807, 1809, 1811, 1815, 716 1816, 1818, 1820, 1822, 1824, 1825, 1832, 1835, 1837, 1840, 717 1845, 1848, 1852, 1856, 1860, 1865, 1871, 1877, 1883, 1890, 718 1892, 1894, 1896, 1900, 1901, 1907, 1908, 1910, 1912, 1915, 719 1922, 1924, 1928, 1929, 1931, 1936, 1938, 1940, 1942, 1944, 720 1947, 1949, 1952, 1955, 1957, 1961, 1964, 1968, 1972, 1975, 721 1980, 1985, 1989, 1998, 2002, 2005, 2007, 2010, 2017, 2026, 722 2030, 2033, 2037, 2041, 2046, 2051, 2055, 2057, 2059, 2061, 723 2066, 2073, 2077, 2080, 2084, 2088, 2093, 2098, 2102, 2105, 724 2107, 2110, 2113, 2115, 2119, 2122, 2126, 2130, 2133, 2138, 725 2143, 2147, 2154, 2163, 2167, 2170, 2172, 2175, 2178, 2181, 726 2185, 2189, 2192, 2197, 2202, 2206, 2213, 2222, 2226, 2229, 727 2231, 2234, 2237, 2239, 2241, 2244, 2248, 2252, 2255, 2260, 728 2267, 2276, 2278, 2281, 2284, 2286, 2289, 2292, 2296, 2300, 729 2302, 2307, 2312, 2316, 2322, 2331, 2335, 2338, 2342, 2344, 730 2350, 2356, 2363, 2370, 2372, 2375, 2378, 2380, 2383, 2386, 731 2390, 2394, 2396, 2401, 2406, 2410, 2416, 2425, 2429, 2431, 732 2434, 2436, 2439, 2446, 2452, 2459, 2467, 2475, 2477, 2480, 733 2483, 2485, 2488, 2491, 2495, 2499, 2501, 2506, 2511, 2515, 734 2524, 2528, 2530, 2532, 2535, 2537, 2539, 2542, 2546, 2549, 735 2553, 2556, 2560, 2564, 2567, 2572, 2576, 2579, 2583, 2586, 736 2591, 2595, 2598, 2605, 2612, 2619, 2627, 2629, 2632, 2634, 737 2636, 2638, 2641, 2645, 2648, 2652, 2655, 2659, 2663, 2668, 738 2671, 2675, 2680, 2683, 2689, 2695, 2702, 2709, 2710, 2712, 739 2713 733 740 }; 734 741 … … 747 754 109, 275, 110, 114, 279, 372, 115, -1, 143, 114, 748 755 144, 115, -1, 145, -1, 144, 116, 145, -1, -1, 749 164, -1, 139, 117, 164, -1, 111, 134, 164, 135, 750 112, 117, 164, -1, 111, 134, 164, 116, 167, 135, 751 112, 117, 164, -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, 40, 151, -1, 149, 151, -1, 150, 151, 756 -1, 86, 148, -1, 87, 148, -1, 37, 148, -1, 757 37, 109, 275, 110, -1, 38, 109, 275, 116, 139, 758 110, -1, 76, -1, 76, 109, 276, 110, -1, 76, 759 109, 145, 110, -1, 66, 148, -1, 66, 109, 275, 760 110, -1, 118, -1, 119, -1, 94, -1, 120, -1, 761 121, -1, 122, -1, 123, -1, 148, -1, 109, 275, 762 110, 151, -1, 109, 275, 110, 166, -1, 151, -1, 763 152, 118, 151, -1, 152, 124, 151, -1, 152, 125, 764 151, -1, 152, -1, 153, 120, 152, -1, 153, 121, 765 152, -1, 153, -1, 154, 88, 153, -1, 154, 89, 766 153, -1, 154, -1, 155, 126, 154, -1, 155, 127, 767 154, -1, 155, 90, 154, -1, 155, 91, 154, -1, 768 155, -1, 156, 92, 155, -1, 156, 93, 155, -1, 769 156, -1, 157, 119, 156, -1, 157, -1, 158, 128, 770 157, -1, 158, -1, 159, 129, 158, -1, 159, -1, 771 160, 94, 159, -1, 160, -1, 161, 95, 160, -1, 772 161, -1, 161, 130, 169, 117, 162, -1, 161, 130, 773 117, 162, -1, 161, 130, 169, 117, 166, -1, 162, 774 -1, 162, -1, 148, 131, 164, -1, 148, 168, 164, 775 -1, 166, 373, -1, -1, 164, -1, 111, 112, -1, 776 111, 134, 164, 135, 112, -1, 111, 134, 116, 167, 777 135, 112, -1, 111, 134, 164, 116, 167, 135, 112, 778 -1, 165, -1, 167, 116, 165, -1, 97, -1, 98, 779 -1, 99, -1, 100, -1, 101, -1, 102, -1, 103, 780 -1, 104, -1, 105, -1, 106, -1, 164, -1, 169, 781 116, 164, -1, -1, 169, -1, 172, -1, 173, -1, 782 177, -1, 178, -1, 190, -1, 192, -1, 193, -1, 783 198, -1, 128, 143, 114, 144, 115, 132, -1, 72, 784 117, 312, 171, -1, 114, 115, -1, 114, 134, 134, 785 209, 174, 135, 115, -1, 175, -1, 174, 134, 175, 786 -1, 212, -1, 40, 212, -1, 308, -1, 171, 135, 787 -1, 171, -1, 176, 171, -1, 170, 132, -1, 41, 788 109, 169, 110, 171, -1, 41, 109, 169, 110, 171, 789 42, 171, -1, 43, 109, 169, 110, 183, -1, 43, 790 109, 169, 110, 114, 134, 205, 184, 115, -1, 53, 791 109, 169, 110, 183, -1, 53, 109, 169, 110, 114, 792 134, 205, 186, 115, -1, 163, -1, 163, 96, 163, 793 -1, 310, -1, 179, -1, 180, 116, 179, -1, 44, 794 180, 117, -1, 45, 117, -1, 181, -1, 182, 181, 795 -1, 182, 171, -1, -1, 185, -1, 182, 176, -1, 796 185, 182, 176, -1, -1, 187, -1, 182, 189, -1, 797 182, 176, 188, -1, 187, 182, 189, -1, 187, 182, 798 176, 188, -1, -1, 189, -1, 56, -1, 56, 132, 799 -1, 47, 109, 169, 110, 171, -1, 46, 171, 47, 800 109, 169, 110, 132, -1, 48, 109, 134, 191, 110, 801 171, -1, 170, 135, 132, 170, 132, 170, -1, 212, 802 170, 132, 170, -1, 51, 72, 132, -1, 51, 118, 803 169, 132, -1, 50, 132, -1, 50, 72, 132, -1, 804 49, 132, -1, 49, 72, 132, -1, 52, 170, 132, 805 -1, 61, 165, 132, -1, 62, 165, 132, -1, 62, 806 165, 63, 164, 132, -1, 57, 173, 194, -1, 57, 807 173, 196, -1, 57, 173, 194, 196, -1, 195, -1, 808 58, 109, 96, 110, 173, -1, 195, 58, 109, 96, 809 110, 173, -1, 59, 109, 96, 110, 173, -1, 195, 810 59, 109, 96, 110, 173, -1, 58, 109, 134, 134, 811 197, 135, 110, 173, 135, -1, 195, 58, 109, 134, 812 134, 197, 135, 110, 173, 135, -1, 59, 109, 134, 813 134, 197, 135, 110, 173, 135, -1, 195, 59, 109, 814 134, 134, 197, 135, 110, 173, 135, -1, 60, 173, 815 -1, 225, -1, 225, 309, -1, 225, 357, -1, 366, 816 139, -1, 366, -1, 64, 199, 109, 141, 110, 132, 817 -1, 64, 199, 109, 141, 117, 200, 110, 132, -1, 818 64, 199, 109, 141, 117, 200, 117, 200, 110, 132, 819 -1, 64, 199, 109, 141, 117, 200, 117, 200, 117, 820 203, 110, 132, -1, 64, 199, 51, 109, 141, 117, 821 117, 200, 117, 203, 117, 204, 110, 132, -1, -1, 822 11, -1, -1, 201, -1, 202, -1, 201, 116, 202, 823 -1, 141, 109, 163, 110, -1, 111, 163, 112, 141, 824 109, 163, 110, -1, -1, 141, -1, 203, 116, 141, 825 -1, 139, -1, 204, 116, 139, -1, 135, -1, 206, 826 -1, 212, -1, 206, 134, 212, -1, 135, -1, 208, 827 -1, 222, -1, 208, 134, 222, -1, -1, 210, -1, 828 29, 211, 132, -1, 210, 29, 211, 132, -1, 274, 829 -1, 211, 116, 274, -1, 213, -1, 222, -1, 214, 830 135, 132, -1, 219, 135, 132, -1, 216, 135, 132, 831 -1, 293, 135, 132, -1, 296, 135, 132, -1, 215, 832 277, -1, 231, 215, 277, -1, 214, 135, 116, 134, 833 272, 277, -1, 367, 272, 311, -1, 370, 272, 311, 834 -1, 227, 370, 272, 311, -1, 217, -1, 227, 217, 835 -1, 231, 217, -1, 231, 227, 217, -1, 216, 135, 836 116, 134, 272, -1, 111, 112, 272, 109, 134, 260, 837 135, 110, -1, 370, 272, 109, 134, 260, 135, 110, 838 -1, 218, 272, 109, 134, 260, 135, 110, -1, 111, 839 134, 262, 135, 112, -1, 111, 134, 262, 135, 116, 840 134, 263, 135, 112, -1, 3, 215, -1, 3, 217, 841 -1, 219, 135, 116, 134, 139, -1, 3, 225, 309, 842 -1, 220, 135, 116, 134, 309, -1, 227, 3, 225, 843 309, -1, 225, 3, 309, -1, 225, 3, 227, 309, 844 -1, 3, 139, 131, 164, -1, 221, 135, 116, 134, 845 139, 131, 164, -1, 223, 135, 132, -1, 220, 135, 846 132, -1, 221, 135, 132, -1, 240, 135, 132, -1, 847 224, 309, 311, 277, -1, 223, 116, 312, 309, 311, 848 277, -1, 236, -1, 240, -1, 242, -1, 283, -1, 849 237, -1, 241, -1, 243, -1, 284, -1, -1, 227, 850 -1, 228, -1, 227, 228, -1, 229, -1, 314, -1, 851 10, -1, 12, -1, 11, -1, 14, -1, 67, -1, 852 -1, 13, 109, 230, 286, 110, -1, 232, -1, 227, 853 232, -1, 231, 227, 232, -1, 233, -1, 232, 233, 854 -1, 234, -1, 5, -1, 7, -1, 4, -1, 6, 855 -1, 8, -1, 9, -1, 69, -1, 71, -1, 16, 856 -1, 21, -1, 20, -1, 18, -1, 19, -1, 17, 857 -1, 22, -1, 23, -1, 15, -1, 25, -1, 26, 858 -1, 27, -1, 24, -1, 237, -1, 231, 237, -1, 859 236, 233, -1, 236, 233, 227, -1, 236, 233, 237, 860 -1, 238, -1, 226, 239, 226, -1, 235, -1, 227, 861 235, -1, 238, 228, -1, 238, 235, -1, 28, 109, 862 276, 110, -1, 28, 109, 169, 110, -1, 78, 109, 863 276, 110, -1, 78, 109, 169, 110, -1, 241, -1, 864 231, 241, -1, 240, 233, -1, 240, 233, 227, -1, 865 244, -1, 227, 244, -1, 241, 228, -1, 243, -1, 866 231, 243, -1, 242, 233, -1, 242, 233, 227, -1, 867 74, -1, 227, 74, -1, 243, 228, -1, 245, -1, 868 256, -1, 247, 114, 248, 115, -1, 247, 274, -1, 869 -1, 247, 274, 246, 114, 248, 115, -1, 247, 109, 870 292, 110, 114, 248, 115, -1, 247, 285, -1, 31, 871 312, -1, 32, 312, -1, -1, 248, 249, -1, 250, 872 132, -1, 40, 250, 132, -1, 251, 132, -1, 40, 873 251, 132, -1, 366, -1, 366, 274, -1, 250, 116, 874 274, -1, 250, 116, -1, 225, 252, -1, 251, 116, 875 312, 252, -1, -1, 254, -1, 318, 253, -1, 331, 876 253, -1, 357, -1, -1, 254, -1, 117, 163, -1, 877 30, 312, -1, 255, 114, 258, 372, 115, -1, 255, 878 274, -1, -1, 255, 274, 257, 114, 258, 372, 115, 879 -1, 274, 259, -1, 258, 116, 274, 259, -1, -1, 880 131, 163, -1, -1, 261, -1, 263, -1, 262, -1, 881 262, 135, 116, 134, 263, -1, 263, 135, 116, 134, 882 96, -1, 262, 135, 116, 134, 96, -1, 267, -1, 883 263, 135, 116, 134, 267, -1, 262, 135, 116, 134, 884 267, -1, 262, 135, 116, 134, 263, 135, 116, 134, 885 267, -1, 268, -1, 263, 135, 116, 134, 268, -1, 886 -1, 265, -1, 266, -1, 266, 135, 116, 134, 96, 887 -1, 270, -1, 269, -1, 266, 135, 116, 134, 270, 888 -1, 266, 135, 116, 134, 269, -1, 269, -1, 362, 889 272, 373, -1, 370, 272, 373, -1, 227, 370, 272, 890 373, -1, 217, -1, 270, -1, 362, -1, 370, -1, 891 227, 370, -1, 371, -1, 224, 336, 373, -1, 224, 892 340, 373, -1, 224, -1, 224, 351, -1, 139, -1, 893 271, 116, 139, -1, 137, -1, 74, -1, 75, -1, 894 138, -1, 74, -1, 75, -1, 139, -1, 74, -1, 895 75, -1, 366, -1, 225, -1, 225, 357, -1, 366, 896 -1, 371, -1, 225, -1, 225, 345, -1, -1, 131, 897 278, -1, 107, 278, -1, 164, -1, 114, 279, 372, 898 115, -1, -1, 278, -1, 280, 278, -1, 279, 116, 899 278, -1, 279, 116, 280, 278, -1, 281, 117, -1, 900 274, 117, -1, 282, -1, 281, 282, -1, 80, -1, 901 113, 274, -1, 111, 134, 164, 135, 112, -1, 111, 902 134, 310, 135, 112, -1, 111, 134, 163, 96, 163, 903 135, 112, -1, 113, 111, 134, 146, 135, 112, -1, 904 284, -1, 231, 284, -1, 283, 233, -1, 283, 233, 905 227, -1, 285, -1, 227, 285, -1, 284, 228, -1, 906 75, 109, 292, 110, -1, 287, 373, -1, 286, 116, 907 287, 373, -1, -1, 289, 274, 288, 290, -1, 225, 908 336, -1, 33, -1, 35, -1, 34, -1, -1, 290, 909 291, -1, 129, 274, 109, 292, 110, -1, 129, 114, 910 134, 298, 115, -1, 129, 109, 134, 286, 135, 110, 911 114, 134, 298, 115, 109, 292, 110, -1, 276, -1, 912 164, -1, 292, 116, 276, -1, 292, 116, 164, -1, 913 33, 294, -1, 232, 33, 294, -1, 293, 116, 294, 914 -1, 295, 290, -1, 295, 290, 131, 276, -1, 274, 915 -1, 273, 109, 134, 286, 135, 110, -1, 36, 274, 916 109, 134, 286, 135, 110, 114, 115, -1, -1, 36, 917 274, 109, 134, 286, 135, 110, 114, 297, 298, 115, 918 -1, 299, -1, 298, 134, 299, -1, 300, 135, 132, 919 -1, 301, 135, 132, -1, 215, -1, 217, -1, 300, 920 135, 116, 134, 272, -1, 225, 309, -1, 301, 135, 921 116, 134, 309, -1, -1, 303, -1, 305, -1, 303, 922 134, 305, -1, -1, 303, -1, 212, -1, 307, -1, 923 198, -1, -1, 5, 82, 306, 114, 304, 115, -1, 924 40, 305, -1, 308, -1, 323, 173, -1, 327, 134, 925 207, 173, -1, 216, 173, -1, 224, 323, 173, -1, 926 227, 323, 173, -1, 231, 323, 173, -1, 231, 227, 927 323, 173, -1, 224, 327, 134, 207, 173, -1, 227, 928 327, 134, 207, 173, -1, 231, 327, 134, 207, 173, 929 -1, 231, 227, 327, 134, 207, 173, -1, 318, -1, 930 331, -1, 323, -1, 163, 123, 163, -1, -1, 64, 931 109, 141, 110, 312, -1, -1, 313, -1, 314, -1, 932 313, 314, -1, 39, 109, 109, 315, 110, 110, -1, 933 316, -1, 315, 116, 316, -1, -1, 317, -1, 317, 934 109, 170, 110, -1, 272, -1, 234, -1, 235, -1, 935 228, -1, 319, 312, -1, 320, -1, 321, 312, -1, 936 322, 312, -1, 137, -1, 109, 319, 110, -1, 149, 937 318, -1, 149, 227, 318, -1, 109, 320, 110, -1, 938 319, 349, -1, 109, 320, 110, 349, -1, 109, 321, 939 110, 350, -1, 109, 321, 110, -1, 109, 320, 110, 940 109, 134, 264, 135, 110, -1, 109, 322, 110, -1, 941 324, 312, -1, 325, -1, 326, 312, -1, 319, 109, 942 134, 264, 135, 110, -1, 109, 325, 110, 109, 134, 943 264, 135, 110, -1, 109, 324, 110, -1, 149, 323, 944 -1, 149, 227, 323, -1, 109, 325, 110, -1, 109, 945 325, 110, 349, -1, 109, 326, 110, 350, -1, 109, 946 326, 110, -1, 328, -1, 329, -1, 330, -1, 319, 947 109, 271, 110, -1, 109, 329, 110, 109, 271, 110, 948 -1, 109, 328, 110, -1, 149, 327, -1, 149, 227, 949 327, -1, 109, 329, 110, -1, 109, 329, 110, 349, 950 -1, 109, 330, 110, 350, -1, 109, 330, 110, -1, 951 332, 312, -1, 333, -1, 334, 312, -1, 335, 312, 952 -1, 341, -1, 109, 332, 110, -1, 149, 331, -1, 953 149, 227, 331, -1, 109, 333, 110, -1, 332, 349, 954 -1, 109, 333, 110, 349, -1, 109, 334, 110, 350, 955 -1, 109, 334, 110, -1, 332, 109, 134, 264, 135, 956 110, -1, 109, 333, 110, 109, 134, 264, 135, 110, 957 -1, 109, 335, 110, -1, 319, 312, -1, 337, -1, 958 338, 312, -1, 339, 312, -1, 149, 336, -1, 149, 959 227, 336, -1, 109, 337, 110, -1, 319, 355, -1, 960 109, 337, 110, 349, -1, 109, 338, 110, 350, -1, 961 109, 338, 110, -1, 319, 109, 134, 264, 135, 110, 962 -1, 109, 337, 110, 109, 134, 264, 135, 110, -1, 963 109, 339, 110, -1, 341, 312, -1, 342, -1, 343, 964 312, -1, 344, 312, -1, 74, -1, 75, -1, 149, 965 340, -1, 149, 227, 340, -1, 109, 342, 110, -1, 966 341, 355, -1, 109, 342, 110, 355, -1, 341, 109, 967 134, 264, 135, 110, -1, 109, 342, 110, 109, 134, 968 264, 135, 110, -1, 346, -1, 347, 312, -1, 348, 969 312, -1, 149, -1, 149, 227, -1, 149, 345, -1, 970 149, 227, 345, -1, 109, 346, 110, -1, 349, -1, 971 109, 346, 110, 349, -1, 109, 347, 110, 350, -1, 972 109, 347, 110, -1, 109, 134, 264, 135, 110, -1, 973 109, 346, 110, 109, 134, 264, 135, 110, -1, 109, 974 348, 110, -1, 111, 112, -1, 111, 112, 350, -1, 975 350, -1, 111, 134, 164, 135, 112, -1, 111, 134, 976 118, 135, 112, -1, 350, 111, 134, 164, 135, 112, 977 -1, 350, 111, 134, 118, 135, 112, -1, 352, -1, 978 353, 312, -1, 354, 312, -1, 149, -1, 149, 227, 979 -1, 149, 351, -1, 149, 227, 351, -1, 109, 352, 980 110, -1, 355, -1, 109, 352, 110, 355, -1, 109, 981 353, 110, 350, -1, 109, 353, 110, -1, 109, 134, 982 264, 135, 110, -1, 109, 352, 110, 109, 134, 264, 983 135, 110, -1, 109, 354, 110, -1, 356, -1, 356, 984 350, -1, 350, -1, 111, 112, -1, 111, 134, 227, 985 118, 135, 112, -1, 111, 134, 227, 135, 112, -1, 986 111, 134, 227, 164, 135, 112, -1, 111, 134, 7, 987 226, 164, 135, 112, -1, 111, 134, 227, 7, 164, 988 135, 112, -1, 358, -1, 359, 312, -1, 360, 312, 989 -1, 149, -1, 149, 227, -1, 149, 357, -1, 149, 990 227, 357, -1, 109, 358, 110, -1, 349, -1, 109, 991 358, 110, 349, -1, 109, 359, 110, 350, -1, 109, 992 359, 110, -1, 109, 358, 110, 109, 134, 264, 135, 993 110, -1, 109, 360, 110, -1, 362, -1, 370, -1, 994 227, 370, -1, 363, -1, 364, -1, 149, 225, -1, 995 227, 149, 225, -1, 149, 371, -1, 227, 149, 371, 996 -1, 149, 361, -1, 227, 149, 361, -1, 111, 112, 997 225, -1, 365, 225, -1, 111, 112, 350, 225, -1, 998 365, 350, 225, -1, 350, 225, -1, 111, 112, 363, 999 -1, 365, 363, -1, 111, 112, 350, 363, -1, 365, 1000 350, 363, -1, 350, 363, -1, 111, 134, 227, 118, 1001 135, 112, -1, 111, 134, 227, 164, 135, 112, -1, 1002 111, 134, 231, 164, 135, 112, -1, 111, 134, 231, 1003 227, 164, 135, 112, -1, 370, -1, 227, 370, -1, 1004 367, -1, 368, -1, 369, -1, 149, 225, -1, 227, 1005 149, 225, -1, 149, 371, -1, 227, 149, 371, -1, 1006 149, 366, -1, 227, 149, 366, -1, 111, 112, 225, 1007 -1, 111, 112, 350, 225, -1, 350, 225, -1, 111, 1008 112, 368, -1, 111, 112, 350, 368, -1, 350, 368, 1009 -1, 111, 134, 263, 135, 112, -1, 111, 112, 109, 1010 260, 110, -1, 370, 109, 134, 260, 135, 110, -1, 1011 218, 109, 134, 260, 135, 110, -1, -1, 116, -1, 1012 -1, 131, 164, -1 756 164, -1, 147, -1, 146, 116, 147, -1, 139, -1, 757 139, 113, 147, -1, 139, 113, 111, 134, 146, 135, 758 112, -1, 139, 85, 147, -1, 139, 85, 111, 134, 759 146, 135, 112, -1, 143, -1, 136, -1, 141, -1, 760 40, 151, -1, 149, 151, -1, 150, 151, -1, 86, 761 148, -1, 87, 148, -1, 37, 148, -1, 37, 109, 762 275, 110, -1, 66, 148, -1, 66, 109, 275, 110, 763 -1, 38, 109, 275, 116, 139, 110, -1, 76, -1, 764 76, 109, 145, 110, -1, 76, 109, 276, 110, -1, 765 117, -1, 118, -1, 119, -1, 120, -1, 121, -1, 766 122, -1, 148, -1, 109, 275, 110, 151, -1, 109, 767 275, 110, 167, -1, 151, -1, 152, 117, 151, -1, 768 152, 123, 151, -1, 152, 124, 151, -1, 152, -1, 769 153, 119, 152, -1, 153, 120, 152, -1, 153, -1, 770 154, 88, 153, -1, 154, 89, 153, -1, 154, -1, 771 155, 125, 154, -1, 155, 126, 154, -1, 155, 90, 772 154, -1, 155, 91, 154, -1, 155, -1, 156, 92, 773 155, -1, 156, 93, 155, -1, 156, -1, 157, 118, 774 156, -1, 157, -1, 158, 127, 157, -1, 158, -1, 775 159, 128, 158, -1, 159, -1, 160, 94, 159, -1, 776 160, -1, 161, 95, 160, -1, 161, -1, 161, 129, 777 169, 130, 162, -1, 161, 129, 130, 162, -1, 161, 778 129, 169, 130, 167, -1, 162, -1, 162, -1, 148, 779 166, 164, -1, 167, 373, -1, -1, 164, -1, 131, 780 -1, 97, -1, 98, -1, 99, -1, 100, -1, 101, 781 -1, 102, -1, 103, -1, 104, -1, 105, -1, 106, 782 -1, 111, 112, -1, 111, 134, 164, 135, 112, -1, 783 111, 134, 116, 168, 135, 112, -1, 111, 134, 164, 784 116, 168, 135, 112, -1, 165, -1, 168, 116, 165, 785 -1, 164, -1, 169, 116, 164, -1, -1, 169, -1, 786 172, -1, 173, -1, 177, -1, 178, -1, 190, -1, 787 192, -1, 193, -1, 198, -1, 127, 143, 114, 144, 788 115, 132, -1, 72, 130, 312, 171, -1, 114, 115, 789 -1, 114, 134, 134, 209, 174, 135, 115, -1, 175, 790 -1, 174, 134, 175, -1, 212, -1, 40, 212, -1, 791 308, -1, 171, 135, -1, 171, -1, 176, 171, -1, 792 170, 132, -1, 41, 109, 169, 110, 171, -1, 41, 793 109, 169, 110, 171, 42, 171, -1, 43, 109, 169, 794 110, 183, -1, 43, 109, 169, 110, 114, 134, 205, 795 184, 115, -1, 53, 109, 169, 110, 183, -1, 53, 796 109, 169, 110, 114, 134, 205, 186, 115, -1, 163, 797 -1, 163, 96, 163, -1, 310, -1, 179, -1, 180, 798 116, 179, -1, 44, 180, 130, -1, 45, 130, -1, 799 181, -1, 182, 181, -1, 182, 171, -1, -1, 185, 800 -1, 182, 176, -1, 185, 182, 176, -1, -1, 187, 801 -1, 182, 189, -1, 182, 176, 188, -1, 187, 182, 802 189, -1, 187, 182, 176, 188, -1, -1, 189, -1, 803 56, -1, 56, 132, -1, 47, 109, 169, 110, 171, 804 -1, 46, 171, 47, 109, 169, 110, 132, -1, 48, 805 109, 134, 191, 110, 171, -1, 170, 135, 132, 170, 806 132, 170, -1, 212, 170, 132, 170, -1, 51, 72, 807 132, -1, 51, 117, 169, 132, -1, 50, 132, -1, 808 50, 72, 132, -1, 49, 132, -1, 49, 72, 132, 809 -1, 52, 170, 132, -1, 61, 165, 132, -1, 62, 810 165, 132, -1, 62, 165, 63, 164, 132, -1, 57, 811 173, 194, -1, 57, 173, 196, -1, 57, 173, 194, 812 196, -1, 195, -1, 58, 109, 96, 110, 173, -1, 813 195, 58, 109, 96, 110, 173, -1, 59, 109, 96, 814 110, 173, -1, 195, 59, 109, 96, 110, 173, -1, 815 58, 109, 134, 134, 197, 135, 110, 173, 135, -1, 816 195, 58, 109, 134, 134, 197, 135, 110, 173, 135, 817 -1, 59, 109, 134, 134, 197, 135, 110, 173, 135, 818 -1, 195, 59, 109, 134, 134, 197, 135, 110, 173, 819 135, -1, 60, 173, -1, 225, -1, 225, 309, -1, 820 225, 357, -1, 366, 139, -1, 366, -1, 64, 199, 821 109, 141, 110, 132, -1, 64, 199, 109, 141, 130, 822 200, 110, 132, -1, 64, 199, 109, 141, 130, 200, 823 130, 200, 110, 132, -1, 64, 199, 109, 141, 130, 824 200, 130, 200, 130, 203, 110, 132, -1, 64, 199, 825 51, 109, 141, 130, 130, 200, 130, 203, 130, 204, 826 110, 132, -1, -1, 11, -1, -1, 201, -1, 202, 827 -1, 201, 116, 202, -1, 141, 109, 163, 110, -1, 828 111, 163, 112, 141, 109, 163, 110, -1, -1, 141, 829 -1, 203, 116, 141, -1, 139, -1, 204, 116, 139, 830 -1, 135, -1, 206, -1, 212, -1, 206, 134, 212, 831 -1, 135, -1, 208, -1, 222, -1, 208, 134, 222, 832 -1, -1, 210, -1, 29, 211, 132, -1, 210, 29, 833 211, 132, -1, 274, -1, 211, 116, 274, -1, 213, 834 -1, 222, -1, 214, 135, 132, -1, 219, 135, 132, 835 -1, 216, 135, 132, -1, 293, 135, 132, -1, 296, 836 135, 132, -1, 215, 277, -1, 231, 215, 277, -1, 837 214, 135, 116, 134, 272, 277, -1, 367, 272, 311, 838 -1, 370, 272, 311, -1, 227, 370, 272, 311, -1, 839 217, -1, 227, 217, -1, 231, 217, -1, 231, 227, 840 217, -1, 216, 135, 116, 134, 272, -1, 111, 112, 841 272, 109, 134, 260, 135, 110, -1, 370, 272, 109, 842 134, 260, 135, 110, -1, 218, 272, 109, 134, 260, 843 135, 110, -1, 111, 134, 262, 135, 112, -1, 111, 844 134, 262, 135, 116, 134, 263, 135, 112, -1, 3, 845 215, -1, 3, 217, -1, 219, 135, 116, 134, 139, 846 -1, 3, 225, 309, -1, 220, 135, 116, 134, 309, 847 -1, 227, 3, 225, 309, -1, 225, 3, 309, -1, 848 225, 3, 227, 309, -1, 3, 139, 131, 164, -1, 849 221, 135, 116, 134, 139, 131, 164, -1, 223, 135, 850 132, -1, 220, 135, 132, -1, 221, 135, 132, -1, 851 240, 135, 132, -1, 224, 309, 311, 277, -1, 223, 852 116, 312, 309, 311, 277, -1, 236, -1, 240, -1, 853 242, -1, 283, -1, 237, -1, 241, -1, 243, -1, 854 284, -1, -1, 227, -1, 228, -1, 227, 228, -1, 855 229, -1, 314, -1, 10, -1, 12, -1, 11, -1, 856 14, -1, 67, -1, -1, 13, 109, 230, 286, 110, 857 -1, 232, -1, 227, 232, -1, 231, 227, 232, -1, 858 233, -1, 232, 233, -1, 234, -1, 5, -1, 7, 859 -1, 4, -1, 6, -1, 8, -1, 9, -1, 69, 860 -1, 71, -1, 16, -1, 21, -1, 20, -1, 18, 861 -1, 19, -1, 17, -1, 22, -1, 23, -1, 15, 862 -1, 25, -1, 26, -1, 27, -1, 24, -1, 237, 863 -1, 231, 237, -1, 236, 233, -1, 236, 233, 227, 864 -1, 236, 233, 237, -1, 238, -1, 226, 239, 226, 865 -1, 235, -1, 227, 235, -1, 238, 228, -1, 238, 866 235, -1, 28, 109, 276, 110, -1, 28, 109, 169, 867 110, -1, 78, 109, 276, 110, -1, 78, 109, 169, 868 110, -1, 241, -1, 231, 241, -1, 240, 233, -1, 869 240, 233, 227, -1, 244, -1, 227, 244, -1, 241, 870 228, -1, 243, -1, 231, 243, -1, 242, 233, -1, 871 242, 233, 227, -1, 74, -1, 227, 74, -1, 243, 872 228, -1, 245, -1, 256, -1, 247, 114, 248, 115, 873 -1, 247, 274, -1, -1, 247, 274, 246, 114, 248, 874 115, -1, 247, 109, 292, 110, 114, 248, 115, -1, 875 247, 285, -1, 31, 312, -1, 32, 312, -1, -1, 876 248, 249, -1, 250, 132, -1, 40, 250, 132, -1, 877 251, 132, -1, 40, 251, 132, -1, 366, -1, 366, 878 274, -1, 250, 116, 274, -1, 250, 116, -1, 225, 879 252, -1, 251, 116, 312, 252, -1, -1, 254, -1, 880 318, 253, -1, 331, 253, -1, 357, -1, -1, 254, 881 -1, 130, 163, -1, 30, 312, -1, 255, 114, 258, 882 372, 115, -1, 255, 274, -1, -1, 255, 274, 257, 883 114, 258, 372, 115, -1, 274, 259, -1, 258, 116, 884 274, 259, -1, -1, 131, 163, -1, -1, 261, -1, 885 263, -1, 262, -1, 262, 135, 116, 134, 263, -1, 886 263, 135, 116, 134, 96, -1, 262, 135, 116, 134, 887 96, -1, 267, -1, 263, 135, 116, 134, 267, -1, 888 262, 135, 116, 134, 267, -1, 262, 135, 116, 134, 889 263, 135, 116, 134, 267, -1, 268, -1, 263, 135, 890 116, 134, 268, -1, -1, 265, -1, 266, -1, 266, 891 135, 116, 134, 96, -1, 270, -1, 269, -1, 266, 892 135, 116, 134, 270, -1, 266, 135, 116, 134, 269, 893 -1, 269, -1, 362, 272, 373, -1, 370, 272, 373, 894 -1, 227, 370, 272, 373, -1, 217, -1, 270, -1, 895 362, -1, 370, -1, 227, 370, -1, 371, -1, 224, 896 336, 373, -1, 224, 340, 373, -1, 224, -1, 224, 897 351, -1, 139, -1, 271, 116, 139, -1, 137, -1, 898 74, -1, 75, -1, 138, -1, 74, -1, 75, -1, 899 139, -1, 74, -1, 75, -1, 366, -1, 225, -1, 900 225, 357, -1, 366, -1, 371, -1, 225, -1, 225, 901 345, -1, -1, 131, 278, -1, 107, 278, -1, 164, 902 -1, 114, 279, 372, 115, -1, -1, 278, -1, 280, 903 278, -1, 279, 116, 278, -1, 279, 116, 280, 278, 904 -1, 281, 130, -1, 274, 130, -1, 282, -1, 281, 905 282, -1, 113, 274, -1, 111, 134, 164, 135, 112, 906 -1, 111, 134, 310, 135, 112, -1, 111, 134, 163, 907 96, 163, 135, 112, -1, 113, 111, 134, 146, 135, 908 112, -1, 284, -1, 231, 284, -1, 283, 233, -1, 909 283, 233, 227, -1, 285, -1, 227, 285, -1, 284, 910 228, -1, 75, 109, 292, 110, -1, 287, 373, -1, 911 286, 116, 287, 373, -1, -1, 289, 274, 288, 290, 912 -1, 225, 336, -1, 33, -1, 35, -1, 34, -1, 913 -1, 290, 291, -1, 128, 274, 109, 292, 110, -1, 914 128, 114, 134, 298, 115, -1, 128, 109, 134, 286, 915 135, 110, 114, 134, 298, 115, 109, 292, 110, -1, 916 276, -1, 164, -1, 292, 116, 276, -1, 292, 116, 917 164, -1, 33, 294, -1, 232, 33, 294, -1, 293, 918 116, 294, -1, 295, 290, -1, 295, 290, 131, 276, 919 -1, 274, -1, 273, 109, 134, 286, 135, 110, -1, 920 36, 274, 109, 134, 286, 135, 110, 114, 115, -1, 921 -1, 36, 274, 109, 134, 286, 135, 110, 114, 297, 922 298, 115, -1, 299, -1, 298, 134, 299, -1, 300, 923 135, 132, -1, 301, 135, 132, -1, 215, -1, 217, 924 -1, 300, 135, 116, 134, 272, -1, 225, 309, -1, 925 301, 135, 116, 134, 309, -1, -1, 303, -1, 305, 926 -1, 303, 134, 305, -1, -1, 303, -1, 212, -1, 927 307, -1, 198, -1, -1, 5, 82, 306, 114, 304, 928 115, -1, 40, 305, -1, 308, -1, 323, 173, -1, 929 327, 134, 207, 173, -1, 216, 173, -1, 224, 323, 930 173, -1, 227, 323, 173, -1, 231, 323, 173, -1, 931 231, 227, 323, 173, -1, 224, 327, 134, 207, 173, 932 -1, 227, 327, 134, 207, 173, -1, 231, 327, 134, 933 207, 173, -1, 231, 227, 327, 134, 207, 173, -1, 934 318, -1, 331, -1, 323, -1, 163, 122, 163, -1, 935 -1, 64, 109, 141, 110, 312, -1, -1, 313, -1, 936 314, -1, 313, 314, -1, 39, 109, 109, 315, 110, 937 110, -1, 316, -1, 315, 116, 316, -1, -1, 317, 938 -1, 317, 109, 170, 110, -1, 272, -1, 234, -1, 939 235, -1, 228, -1, 319, 312, -1, 320, -1, 321, 940 312, -1, 322, 312, -1, 137, -1, 109, 319, 110, 941 -1, 149, 318, -1, 149, 227, 318, -1, 109, 320, 942 110, -1, 319, 349, -1, 109, 320, 110, 349, -1, 943 109, 321, 110, 350, -1, 109, 321, 110, -1, 109, 944 320, 110, 109, 134, 264, 135, 110, -1, 109, 322, 945 110, -1, 324, 312, -1, 325, -1, 326, 312, -1, 946 319, 109, 134, 264, 135, 110, -1, 109, 325, 110, 947 109, 134, 264, 135, 110, -1, 109, 324, 110, -1, 948 149, 323, -1, 149, 227, 323, -1, 109, 325, 110, 949 -1, 109, 325, 110, 349, -1, 109, 326, 110, 350, 950 -1, 109, 326, 110, -1, 328, -1, 329, -1, 330, 951 -1, 319, 109, 271, 110, -1, 109, 329, 110, 109, 952 271, 110, -1, 109, 328, 110, -1, 149, 327, -1, 953 149, 227, 327, -1, 109, 329, 110, -1, 109, 329, 954 110, 349, -1, 109, 330, 110, 350, -1, 109, 330, 955 110, -1, 332, 312, -1, 333, -1, 334, 312, -1, 956 335, 312, -1, 341, -1, 109, 332, 110, -1, 149, 957 331, -1, 149, 227, 331, -1, 109, 333, 110, -1, 958 332, 349, -1, 109, 333, 110, 349, -1, 109, 334, 959 110, 350, -1, 109, 334, 110, -1, 332, 109, 134, 960 264, 135, 110, -1, 109, 333, 110, 109, 134, 264, 961 135, 110, -1, 109, 335, 110, -1, 319, 312, -1, 962 337, -1, 338, 312, -1, 339, 312, -1, 149, 336, 963 -1, 149, 227, 336, -1, 109, 337, 110, -1, 319, 964 355, -1, 109, 337, 110, 349, -1, 109, 338, 110, 965 350, -1, 109, 338, 110, -1, 319, 109, 134, 264, 966 135, 110, -1, 109, 337, 110, 109, 134, 264, 135, 967 110, -1, 109, 339, 110, -1, 341, 312, -1, 342, 968 -1, 343, 312, -1, 344, 312, -1, 74, -1, 75, 969 -1, 149, 340, -1, 149, 227, 340, -1, 109, 342, 970 110, -1, 341, 355, -1, 109, 342, 110, 355, -1, 971 341, 109, 134, 264, 135, 110, -1, 109, 342, 110, 972 109, 134, 264, 135, 110, -1, 346, -1, 347, 312, 973 -1, 348, 312, -1, 149, -1, 149, 227, -1, 149, 974 345, -1, 149, 227, 345, -1, 109, 346, 110, -1, 975 349, -1, 109, 346, 110, 349, -1, 109, 347, 110, 976 350, -1, 109, 347, 110, -1, 109, 134, 264, 135, 977 110, -1, 109, 346, 110, 109, 134, 264, 135, 110, 978 -1, 109, 348, 110, -1, 111, 112, -1, 111, 112, 979 350, -1, 350, -1, 111, 134, 164, 135, 112, -1, 980 111, 134, 117, 135, 112, -1, 350, 111, 134, 164, 981 135, 112, -1, 350, 111, 134, 117, 135, 112, -1, 982 352, -1, 353, 312, -1, 354, 312, -1, 149, -1, 983 149, 227, -1, 149, 351, -1, 149, 227, 351, -1, 984 109, 352, 110, -1, 355, -1, 109, 352, 110, 355, 985 -1, 109, 353, 110, 350, -1, 109, 353, 110, -1, 986 109, 134, 264, 135, 110, -1, 109, 352, 110, 109, 987 134, 264, 135, 110, -1, 109, 354, 110, -1, 356, 988 -1, 356, 350, -1, 350, -1, 111, 112, -1, 111, 989 134, 227, 117, 135, 112, -1, 111, 134, 227, 135, 990 112, -1, 111, 134, 227, 164, 135, 112, -1, 111, 991 134, 7, 226, 164, 135, 112, -1, 111, 134, 227, 992 7, 164, 135, 112, -1, 358, -1, 359, 312, -1, 993 360, 312, -1, 149, -1, 149, 227, -1, 149, 357, 994 -1, 149, 227, 357, -1, 109, 358, 110, -1, 349, 995 -1, 109, 358, 110, 349, -1, 109, 359, 110, 350, 996 -1, 109, 359, 110, -1, 109, 358, 110, 109, 134, 997 264, 135, 110, -1, 109, 360, 110, -1, 362, -1, 998 370, -1, 227, 370, -1, 363, -1, 364, -1, 149, 999 225, -1, 227, 149, 225, -1, 149, 371, -1, 227, 1000 149, 371, -1, 149, 361, -1, 227, 149, 361, -1, 1001 111, 112, 225, -1, 365, 225, -1, 111, 112, 350, 1002 225, -1, 365, 350, 225, -1, 350, 225, -1, 111, 1003 112, 363, -1, 365, 363, -1, 111, 112, 350, 363, 1004 -1, 365, 350, 363, -1, 350, 363, -1, 111, 134, 1005 227, 117, 135, 112, -1, 111, 134, 227, 164, 135, 1006 112, -1, 111, 134, 231, 164, 135, 112, -1, 111, 1007 134, 231, 227, 164, 135, 112, -1, 370, -1, 227, 1008 370, -1, 367, -1, 368, -1, 369, -1, 149, 225, 1009 -1, 227, 149, 225, -1, 149, 371, -1, 227, 149, 1010 371, -1, 149, 366, -1, 227, 149, 366, -1, 111, 1011 112, 225, -1, 111, 112, 350, 225, -1, 350, 225, 1012 -1, 111, 112, 368, -1, 111, 112, 350, 368, -1, 1013 350, 368, -1, 111, 134, 263, 135, 112, -1, 111, 1014 112, 109, 260, 110, -1, 370, 109, 134, 260, 135, 1015 110, -1, 218, 109, 134, 260, 135, 110, -1, -1, 1016 116, -1, -1, 131, 164, -1 1013 1017 }; 1014 1018 … … 1016 1020 static const yytype_uint16 yyrline[] = 1017 1021 { 1018 0, 29 0, 290, 296, 305, 306, 307, 311, 312, 313,1019 3 17, 318, 322, 323, 327, 328, 332, 333, 339, 341,1020 3 43, 345, 350, 351, 357, 361, 363, 364, 366, 367,1021 3 69, 371, 373, 381, 382, 388, 389, 390, 395, 397,1022 4 02, 403, 407, 411, 413, 415, 417, 422, 425, 427,1023 4 29, 431, 436, 438, 440, 442, 444, 446, 448, 450,1024 4 52, 454, 456, 463, 464, 466, 470, 471, 472, 473,1025 477, 478, 480, 485, 486, 488, 490, 495, 496, 498,1026 5 03, 504, 506, 511, 512, 514, 516, 518, 523, 524,1027 5 26, 531, 532, 537, 538, 543, 544, 549, 550, 555,1028 5 56, 561, 562, 564, 566, 571, 576, 577, 579, 581,1029 587, 588, 594, 596, 598, 600, 605, 606, 611, 612,1030 6 13, 614, 615, 616, 617, 618, 619, 620, 624, 625,1031 6 31, 632, 638, 639, 640, 641, 642, 643, 644, 645,1032 6 46, 656, 663, 665, 675, 676, 681, 683, 689, 691,1033 695, 696, 701, 706, 709, 711, 713, 722, 724, 735,1034 7 36, 738, 742, 743, 748, 749, 754, 755, 759, 764,1035 7 65, 769, 771, 777, 778, 782, 784, 786, 788, 794,1036 795, 799, 801, 806, 808, 810, 815, 817, 822, 824,1037 8 28, 831, 835, 838, 842, 844, 848, 850, 857, 859,1038 8 61, 870, 872, 874, 876, 878, 883, 885, 887, 889,1039 894, 907, 908, 913, 915, 920, 924, 926, 928, 930,1040 9 32, 938, 939, 945, 946, 950, 951, 956, 958, 964,1041 9 65, 967, 972, 974, 981, 983, 987, 988, 993, 995,1042 999, 1000, 1004, 1006, 1010, 1011, 1015, 1016, 1020, 1021,1043 10 36, 1037, 1038, 1039, 1040, 1044, 1049, 1056, 1066, 1071,1044 1 076, 1084, 1089, 1094, 1099, 1104, 1112, 1134, 1139, 1146,1045 11 48, 1155, 1160, 1165, 1176, 1181, 1186, 1191, 1196, 1205,1046 12 10, 1218, 1219, 1220, 1221, 1227, 1232, 1240, 1241, 1242,1047 12 43, 1247, 1248, 1249, 1250, 1255, 1256, 1265, 1266, 1271,1048 12 72, 1277, 1279, 1281, 1283, 1285, 1288, 1287, 1299, 1300,1049 13 02, 1312, 1313, 1318, 1322, 1324, 1326, 1328, 1330, 1332,1050 13 34, 1336, 1341, 1343, 1345, 1347, 1349, 1351, 1353, 1355,1051 13 57, 1359, 1361, 1363, 1365, 1371, 1372, 1374, 1376, 1378,1052 1 383, 1384, 1390, 1391, 1393, 1395, 1400, 1402, 1404, 1406,1053 14 11, 1412, 1414, 1416, 1421, 1422, 1424, 1429, 1430, 1432,1054 14 34, 1439, 1441, 1443, 1448, 1449, 1453, 1455, 1461, 1460,1055 14 64, 1466, 1471, 1473, 1479, 1480, 1485, 1486, 1488, 1489,1056 1 498, 1499, 1501, 1503, 1508, 1510, 1516, 1517, 1519, 1522,1057 15 25, 1530, 1531, 1536, 1541, 1545, 1547, 1553, 1552, 1559,1058 15 61, 1567, 1568, 1576, 1577, 1581, 1582, 1583, 1585, 1587,1059 1 594, 1595, 1597, 1599, 1604, 1605, 1611, 1612, 1616, 1617,1060 16 22, 1623, 1624, 1626, 1634, 1635, 1637, 1640, 1642, 1646,1061 16 47, 1648, 1650, 1652, 1656, 1661, 1669, 1670, 1679, 1681,1062 1 686, 1687, 1688, 1692, 1693, 1694, 1698, 1699, 1700, 1704,1063 17 05, 1706, 1711, 1712, 1713, 1714, 1720, 1721, 1723, 1728,1064 17 29, 1734, 1735, 1736, 1737, 1738, 1753, 1754, 1759, 1760,1065 17 68, 1770, 1772, 1775, 1777, 1779, 1802, 1803, 1805, 1807,1066 18 12, 1813, 1815, 1820, 1825, 1826, 1832, 1831, 1835, 1839,1067 18 41, 1843, 1849, 1850, 1855, 1860, 1862, 1867, 1869, 1870,1068 18 72, 1877, 1879, 1881, 1886, 1888, 1893, 1898, 1906, 1912,1069 19 11, 1925, 1926, 1931, 1932, 1936, 1941, 1946, 1954, 1959,1070 19 70, 1971, 1982, 1983, 1989, 1990, 1994, 1995, 1996, 1999,1071 1998, 2009, 2018, 2024, 2030, 2039, 2045, 2051, 2057, 2063,1072 2 071, 2077, 2085, 2091, 2100, 2101, 2102, 2106, 2110, 2112,1073 21 17, 2118, 2122, 2123, 2128, 2134, 2135, 2138, 2140, 2141,1074 21 45, 2146, 2147, 2148, 2182, 2184, 2185, 2187, 2192, 2197,1075 22 02, 2204, 2206, 2211, 2213, 2215, 2217, 2222, 2224, 2233,1076 22 35, 2236, 2241, 2243, 2245, 2250, 2252, 2254, 2259, 2261,1077 22 63, 2272, 2273, 2274, 2278, 2280, 2282, 2287, 2289, 2291,1078 2 296, 2298, 2300, 2315, 2317, 2318, 2320, 2325, 2326, 2331,1079 23 33, 2335, 2340, 2342, 2344, 2346, 2351, 2353, 2355, 2365,1080 23 67, 2368, 2370, 2375, 2377, 2379, 2384, 2386, 2388, 2390,1081 2 395, 2397, 2399, 2430, 2432, 2433, 2435, 2440, 2445, 2453,1082 24 55, 2457, 2462, 2464, 2469, 2471, 2485, 2486, 2488, 2493,1083 2 495, 2497, 2499, 2501, 2506, 2507, 2509, 2511, 2516, 2518,1084 25 20, 2526, 2528, 2530, 2534, 2536, 2538, 2540, 2554, 2555,1085 25 57, 2562, 2564, 2566, 2568, 2570, 2575, 2576, 2578, 2580,1086 2 585, 2587, 2589, 2595, 2596, 2598, 2607, 2610, 2612, 2615,1087 26 17, 2619, 2632, 2633, 2635, 2640, 2642, 2644, 2646, 2648,1088 26 53, 2654, 2656, 2658, 2663, 2665, 2673, 2674, 2675, 2680,1089 26 81, 2685, 2687, 2689, 2691, 2693, 2695, 2702, 2704, 2706,1090 27 08, 2710, 2712, 2714, 2716, 2718, 2720, 2725, 2727, 2729,1091 27 34, 2760, 2761, 2763, 2767, 2768, 2772, 2774, 2776, 2778,1092 27 80, 2782, 2789, 2791, 2793, 2795, 2797, 2799, 2804, 2809,1093 28 11, 2813, 2831, 2833, 2838, 28391022 0, 298, 298, 304, 313, 314, 315, 319, 320, 321, 1023 325, 326, 330, 331, 335, 336, 340, 341, 352, 354, 1024 356, 358, 363, 364, 370, 374, 376, 377, 379, 380, 1025 382, 384, 386, 395, 396, 402, 403, 407, 408, 412, 1026 416, 418, 420, 422, 427, 430, 432, 434, 439, 452, 1027 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 1028 479, 480, 486, 487, 488, 489, 493, 494, 496, 501, 1029 502, 504, 506, 511, 512, 514, 519, 520, 522, 527, 1030 528, 530, 532, 534, 539, 540, 542, 547, 548, 553, 1031 554, 559, 560, 565, 566, 571, 572, 577, 578, 581, 1032 583, 588, 593, 594, 596, 602, 603, 607, 608, 609, 1033 610, 611, 612, 613, 614, 615, 616, 617, 623, 625, 1034 627, 629, 634, 635, 640, 641, 647, 648, 654, 655, 1035 656, 657, 658, 659, 660, 661, 662, 672, 679, 681, 1036 691, 692, 697, 699, 705, 707, 711, 712, 717, 722, 1037 725, 727, 729, 739, 741, 752, 753, 755, 759, 761, 1038 765, 766, 771, 772, 776, 781, 782, 786, 788, 794, 1039 795, 799, 801, 803, 805, 811, 812, 816, 818, 823, 1040 825, 827, 832, 834, 839, 841, 845, 848, 852, 855, 1041 859, 861, 863, 865, 870, 872, 874, 879, 881, 883, 1042 885, 887, 892, 894, 896, 898, 903, 915, 916, 921, 1043 923, 928, 932, 934, 936, 938, 940, 946, 947, 953, 1044 954, 958, 959, 964, 966, 972, 973, 975, 980, 982, 1045 989, 991, 995, 996, 1001, 1003, 1007, 1008, 1012, 1014, 1046 1018, 1019, 1023, 1024, 1028, 1029, 1044, 1045, 1046, 1047, 1047 1048, 1052, 1057, 1064, 1074, 1079, 1084, 1092, 1097, 1102, 1048 1107, 1112, 1120, 1142, 1147, 1154, 1156, 1163, 1168, 1173, 1049 1184, 1189, 1194, 1199, 1204, 1213, 1218, 1226, 1227, 1228, 1050 1229, 1235, 1240, 1248, 1249, 1250, 1251, 1255, 1256, 1257, 1051 1258, 1263, 1264, 1273, 1274, 1279, 1280, 1285, 1287, 1289, 1052 1291, 1293, 1296, 1295, 1307, 1308, 1310, 1320, 1321, 1326, 1053 1330, 1332, 1334, 1336, 1338, 1340, 1342, 1344, 1349, 1351, 1054 1353, 1355, 1357, 1359, 1361, 1363, 1365, 1367, 1369, 1371, 1055 1373, 1379, 1380, 1382, 1384, 1386, 1391, 1392, 1398, 1399, 1056 1401, 1403, 1408, 1410, 1412, 1414, 1419, 1420, 1422, 1424, 1057 1429, 1430, 1432, 1437, 1438, 1440, 1442, 1447, 1449, 1451, 1058 1456, 1457, 1461, 1463, 1469, 1468, 1472, 1474, 1479, 1481, 1059 1487, 1488, 1493, 1494, 1496, 1497, 1506, 1507, 1509, 1511, 1060 1516, 1518, 1524, 1525, 1527, 1530, 1533, 1538, 1539, 1544, 1061 1549, 1553, 1555, 1561, 1560, 1567, 1569, 1575, 1576, 1584, 1062 1585, 1589, 1590, 1591, 1593, 1595, 1602, 1603, 1605, 1607, 1063 1612, 1613, 1619, 1620, 1624, 1625, 1630, 1631, 1632, 1634, 1064 1642, 1643, 1645, 1648, 1650, 1654, 1655, 1656, 1658, 1660, 1065 1664, 1669, 1677, 1678, 1687, 1689, 1694, 1695, 1696, 1700, 1066 1701, 1702, 1706, 1707, 1708, 1712, 1713, 1714, 1719, 1720, 1067 1721, 1722, 1728, 1729, 1731, 1736, 1737, 1742, 1743, 1744, 1068 1745, 1746, 1761, 1762, 1767, 1768, 1774, 1776, 1779, 1781, 1069 1783, 1806, 1807, 1809, 1811, 1816, 1817, 1819, 1824, 1829, 1070 1830, 1836, 1835, 1839, 1843, 1845, 1847, 1853, 1854, 1859, 1071 1864, 1866, 1871, 1873, 1874, 1876, 1881, 1883, 1885, 1890, 1072 1892, 1897, 1902, 1910, 1916, 1915, 1929, 1930, 1935, 1936, 1073 1940, 1945, 1950, 1958, 1963, 1974, 1975, 1986, 1987, 1993, 1074 1994, 1998, 1999, 2000, 2003, 2002, 2013, 2022, 2028, 2034, 1075 2043, 2049, 2055, 2061, 2067, 2075, 2081, 2089, 2095, 2104, 1076 2105, 2106, 2110, 2114, 2116, 2121, 2122, 2126, 2127, 2132, 1077 2138, 2139, 2142, 2144, 2145, 2149, 2150, 2151, 2152, 2186, 1078 2188, 2189, 2191, 2196, 2201, 2206, 2208, 2210, 2215, 2217, 1079 2219, 2221, 2226, 2228, 2237, 2239, 2240, 2245, 2247, 2249, 1080 2254, 2256, 2258, 2263, 2265, 2267, 2276, 2277, 2278, 2282, 1081 2284, 2286, 2291, 2293, 2295, 2300, 2302, 2304, 2319, 2321, 1082 2322, 2324, 2329, 2330, 2335, 2337, 2339, 2344, 2346, 2348, 1083 2350, 2355, 2357, 2359, 2369, 2371, 2372, 2374, 2379, 2381, 1084 2383, 2388, 2390, 2392, 2394, 2399, 2401, 2403, 2434, 2436, 1085 2437, 2439, 2444, 2449, 2457, 2459, 2461, 2466, 2468, 2473, 1086 2475, 2489, 2490, 2492, 2497, 2499, 2501, 2503, 2505, 2510, 1087 2511, 2513, 2515, 2520, 2522, 2524, 2530, 2532, 2534, 2538, 1088 2540, 2542, 2544, 2558, 2559, 2561, 2566, 2568, 2570, 2572, 1089 2574, 2579, 2580, 2582, 2584, 2589, 2591, 2593, 2599, 2600, 1090 2602, 2611, 2614, 2616, 2619, 2621, 2623, 2636, 2637, 2639, 1091 2644, 2646, 2648, 2650, 2652, 2657, 2658, 2660, 2662, 2667, 1092 2669, 2677, 2678, 2679, 2684, 2685, 2689, 2691, 2693, 2695, 1093 2697, 2699, 2706, 2708, 2710, 2712, 2714, 2716, 2718, 2720, 1094 2722, 2724, 2729, 2731, 2733, 2738, 2764, 2765, 2767, 2771, 1095 2772, 2776, 2778, 2780, 2782, 2784, 2786, 2793, 2795, 2797, 1096 2799, 2801, 2803, 2808, 2813, 2815, 2817, 2835, 2837, 2842, 1097 2843 1094 1098 }; 1095 1099 #endif … … 1117 1121 "DIVassign", "MODassign", "PLUSassign", "MINUSassign", "LSassign", 1118 1122 "RSassign", "ANDassign", "ERassign", "ORassign", "ATassign", "THEN", 1119 "'('", "')'", "'['", "']'", "'.'", "'{'", "'}'", "','", "' :'", "'*'",1120 "' &'", "'+'", "'-'", "'!'", "'~'", "'/'", "'%'", "'<'", "'>'", "'^'",1121 "' |'", "'?'", "'='", "';'", "$accept", "push", "pop", "constant",1123 "'('", "')'", "'['", "']'", "'.'", "'{'", "'}'", "','", "'*'", "'&'", 1124 "'+'", "'-'", "'!'", "'~'", "'/'", "'%'", "'<'", "'>'", "'^'", "'|'", 1125 "'?'", "':'", "'='", "';'", "$accept", "push", "pop", "constant", 1122 1126 "identifier", "no_01_identifier", "no_attr_identifier", "zero_one", 1123 1127 "string_literal_list", "primary_expression", "postfix_expression", … … 1129 1133 "logical_AND_expression", "logical_OR_expression", 1130 1134 "conditional_expression", "constant_expression", "assignment_expression", 1131 "assignment_expression_opt", " tuple", "tuple_expression_list",1132 " assignment_operator", "comma_expression", "comma_expression_opt",1135 "assignment_expression_opt", "assignment_operator", "tuple", 1136 "tuple_expression_list", "comma_expression", "comma_expression_opt", 1133 1137 "statement", "labeled_statement", "compound_statement", 1134 1138 "block_item_list", "block_item", "statement_list", … … 1224 1228 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 1225 1229 355, 356, 357, 358, 359, 360, 361, 362, 363, 40, 1226 41, 91, 93, 46, 123, 125, 44, 58, 42, 38,1227 4 3, 45, 33, 126, 47, 37, 60, 62, 94, 124,1228 63, 61, 591230 41, 91, 93, 46, 123, 125, 44, 42, 38, 43, 1231 45, 33, 126, 47, 37, 60, 62, 94, 124, 63, 1232 58, 61, 59 1229 1233 }; 1230 1234 # endif … … 1236 1240 138, 138, 139, 139, 140, 140, 141, 141, 142, 142, 1237 1241 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 1238 143, 143, 143, 144, 144, 145, 145, 14 5, 145, 145,1239 14 6, 146, 147, 147, 147, 147, 147, 148, 148, 148,1242 143, 143, 143, 144, 144, 145, 145, 146, 146, 147, 1243 147, 147, 147, 147, 148, 148, 148, 148, 148, 148, 1240 1244 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 1241 14 8, 148, 148, 149, 149, 149, 150, 150, 150, 150,1242 15 1, 151, 151, 152, 152, 152, 152, 153, 153, 153,1243 15 4, 154, 154, 155, 155, 155, 155, 155, 156, 156,1244 15 6, 157, 157, 158, 158, 159, 159, 160, 160, 161,1245 16 1, 162, 162, 162, 162, 163, 164, 164, 164, 164,1246 16 5, 165, 166, 166, 166, 166, 167, 167, 168, 168,1247 16 8, 168, 168, 168, 168, 168, 168, 168, 169, 169,1248 17 0, 170, 171, 171, 171, 171, 171, 171, 171, 171,1249 17 1, 172, 173, 173, 174, 174, 175, 175, 175, 175,1250 17 6, 176, 177, 178, 178, 178, 178, 178, 178, 179,1251 1 79, 179, 180, 180, 181, 181, 182, 182, 183, 184,1252 18 4, 185, 185, 186, 186, 187, 187, 187, 187, 188,1253 1 88, 189, 189, 190, 190, 190, 191, 191, 192, 192,1254 192, 192, 192, 192, 19 2, 192, 192, 192, 193, 193,1255 19 3, 194, 194, 194, 194, 194, 195, 195, 195, 195,1256 19 6, 197, 197, 197, 197, 197, 198, 198, 198, 198,1257 198, 199, 199, 200, 200, 201, 201, 202, 202, 203,1258 20 3, 203, 204, 204, 205, 205, 206, 206, 207, 207,1259 2 08, 208, 209, 209, 210, 210, 211, 211, 212, 212,1260 213, 21 3, 213, 213, 213, 214, 214, 214, 215, 215,1261 21 5, 216, 216, 216, 216, 216, 217, 217, 217, 218,1262 2 18, 219, 219, 219, 220, 220, 220, 220, 220, 221,1263 22 1, 222, 222, 222, 222, 223, 223, 224, 224, 224,1264 22 4, 225, 225, 225, 225, 226, 226, 227, 227, 228,1265 22 8, 229, 229, 229, 229, 229, 230, 229, 231, 231,1266 23 1, 232, 232, 233, 234, 234, 234, 234, 234, 234,1267 23 4, 234, 235, 235, 235, 235, 235, 235, 235, 235,1268 235, 23 5, 235, 235, 235, 236, 236, 236, 236, 236,1269 23 7, 237, 238, 238, 238, 238, 239, 239, 239, 239,1270 24 0, 240, 240, 240, 241, 241, 241, 242, 242, 242,1271 24 2, 243, 243, 243, 244, 244, 245, 245, 246, 245,1272 24 5, 245, 247, 247, 248, 248, 249, 249, 249, 249,1273 25 0, 250, 250, 250, 251, 251, 252, 252, 252, 252,1274 25 2, 253, 253, 254, 255, 256, 256, 257, 256, 258,1275 2 58, 259, 259, 260, 260, 261, 261, 261, 261, 261,1276 26 2, 262, 262, 262, 263, 263, 264, 264, 265, 265,1277 26 6, 266, 266, 266, 267, 267, 267, 267, 267, 268,1278 26 8, 268, 268, 268, 269, 269, 270, 270, 271, 271,1279 27 2, 272, 272, 273, 273, 273, 274, 274, 274, 275,1280 27 5, 275, 276, 276, 276, 276, 277, 277, 277, 278,1281 27 8, 279, 279, 279, 279, 279, 280, 280, 281, 281,1282 282, 28 2, 282, 282, 282, 282, 283, 283, 283, 283,1283 28 4, 284, 284, 285, 286, 286, 288, 287, 287, 289,1284 2 89, 289, 290, 290, 291, 291, 291, 292, 292, 292,1285 29 2, 293, 293, 293, 294, 294, 295, 295, 296, 297,1286 296, 298, 298, 299, 299, 300, 300, 300, 301, 301,1287 30 2, 302, 303, 303, 304, 304, 305, 305, 305, 306,1288 30 5, 305, 307, 307, 307, 308, 308, 308, 308, 308,1289 30 8, 308, 308, 308, 309, 309, 309, 310, 311, 311,1290 31 2, 312, 313, 313, 314, 315, 315, 316, 316, 316,1291 31 7, 317, 317, 317, 318, 318, 318, 318, 319, 319,1292 32 0, 320, 320, 321, 321, 321, 321, 322, 322, 323,1293 32 3, 323, 324, 324, 324, 325, 325, 325, 326, 326,1294 32 6, 327, 327, 327, 328, 328, 328, 329, 329, 329,1295 33 0, 330, 330, 331, 331, 331, 331, 332, 332, 333,1296 33 3, 333, 334, 334, 334, 334, 335, 335, 335, 336,1297 33 6, 336, 336, 337, 337, 337, 338, 338, 338, 338,1298 3 39, 339, 339, 340, 340, 340, 340, 341, 341, 342,1299 34 2, 342, 343, 343, 344, 344, 345, 345, 345, 346,1300 34 6, 346, 346, 346, 347, 347, 347, 347, 348, 348,1301 3 48, 349, 349, 349, 350, 350, 350, 350, 351, 351,1302 35 1, 352, 352, 352, 352, 352, 353, 353, 353, 353,1303 35 4, 354, 354, 355, 355, 355, 356, 356, 356, 356,1304 35 6, 356, 357, 357, 357, 358, 358, 358, 358, 358,1305 3 59, 359, 359, 359, 360, 360, 361, 361, 361, 362,1306 36 2, 363, 363, 363, 363, 363, 363, 364, 364, 364,1307 364, 364, 36 4, 364, 364, 364, 364, 365, 365, 365,1308 36 5, 366, 366, 366, 367, 367, 368, 368, 368, 368,1309 36 8, 368, 369, 369, 369, 369, 369, 369, 370, 371,1310 37 1, 371, 372, 372, 373, 3731245 149, 149, 150, 150, 150, 150, 151, 151, 151, 152, 1246 152, 152, 152, 153, 153, 153, 154, 154, 154, 155, 1247 155, 155, 155, 155, 156, 156, 156, 157, 157, 158, 1248 158, 159, 159, 160, 160, 161, 161, 162, 162, 162, 1249 162, 163, 164, 164, 164, 165, 165, 166, 166, 166, 1250 166, 166, 166, 166, 166, 166, 166, 166, 167, 167, 1251 167, 167, 168, 168, 169, 169, 170, 170, 171, 171, 1252 171, 171, 171, 171, 171, 171, 171, 172, 173, 173, 1253 174, 174, 175, 175, 175, 175, 176, 176, 177, 178, 1254 178, 178, 178, 178, 178, 179, 179, 179, 180, 180, 1255 181, 181, 182, 182, 183, 184, 184, 185, 185, 186, 1256 186, 187, 187, 187, 187, 188, 188, 189, 189, 190, 1257 190, 190, 191, 191, 192, 192, 192, 192, 192, 192, 1258 192, 192, 192, 192, 193, 193, 193, 194, 194, 194, 1259 194, 194, 195, 195, 195, 195, 196, 197, 197, 197, 1260 197, 197, 198, 198, 198, 198, 198, 199, 199, 200, 1261 200, 201, 201, 202, 202, 203, 203, 203, 204, 204, 1262 205, 205, 206, 206, 207, 207, 208, 208, 209, 209, 1263 210, 210, 211, 211, 212, 212, 213, 213, 213, 213, 1264 213, 214, 214, 214, 215, 215, 215, 216, 216, 216, 1265 216, 216, 217, 217, 217, 218, 218, 219, 219, 219, 1266 220, 220, 220, 220, 220, 221, 221, 222, 222, 222, 1267 222, 223, 223, 224, 224, 224, 224, 225, 225, 225, 1268 225, 226, 226, 227, 227, 228, 228, 229, 229, 229, 1269 229, 229, 230, 229, 231, 231, 231, 232, 232, 233, 1270 234, 234, 234, 234, 234, 234, 234, 234, 235, 235, 1271 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 1272 235, 236, 236, 236, 236, 236, 237, 237, 238, 238, 1273 238, 238, 239, 239, 239, 239, 240, 240, 240, 240, 1274 241, 241, 241, 242, 242, 242, 242, 243, 243, 243, 1275 244, 244, 245, 245, 246, 245, 245, 245, 247, 247, 1276 248, 248, 249, 249, 249, 249, 250, 250, 250, 250, 1277 251, 251, 252, 252, 252, 252, 252, 253, 253, 254, 1278 255, 256, 256, 257, 256, 258, 258, 259, 259, 260, 1279 260, 261, 261, 261, 261, 261, 262, 262, 262, 262, 1280 263, 263, 264, 264, 265, 265, 266, 266, 266, 266, 1281 267, 267, 267, 267, 267, 268, 268, 268, 268, 268, 1282 269, 269, 270, 270, 271, 271, 272, 272, 272, 273, 1283 273, 273, 274, 274, 274, 275, 275, 275, 276, 276, 1284 276, 276, 277, 277, 277, 278, 278, 279, 279, 279, 1285 279, 279, 280, 280, 281, 281, 282, 282, 282, 282, 1286 282, 283, 283, 283, 283, 284, 284, 284, 285, 286, 1287 286, 288, 287, 287, 289, 289, 289, 290, 290, 291, 1288 291, 291, 292, 292, 292, 292, 293, 293, 293, 294, 1289 294, 295, 295, 296, 297, 296, 298, 298, 299, 299, 1290 300, 300, 300, 301, 301, 302, 302, 303, 303, 304, 1291 304, 305, 305, 305, 306, 305, 305, 307, 307, 307, 1292 308, 308, 308, 308, 308, 308, 308, 308, 308, 309, 1293 309, 309, 310, 311, 311, 312, 312, 313, 313, 314, 1294 315, 315, 316, 316, 316, 317, 317, 317, 317, 318, 1295 318, 318, 318, 319, 319, 320, 320, 320, 321, 321, 1296 321, 321, 322, 322, 323, 323, 323, 324, 324, 324, 1297 325, 325, 325, 326, 326, 326, 327, 327, 327, 328, 1298 328, 328, 329, 329, 329, 330, 330, 330, 331, 331, 1299 331, 331, 332, 332, 333, 333, 333, 334, 334, 334, 1300 334, 335, 335, 335, 336, 336, 336, 336, 337, 337, 1301 337, 338, 338, 338, 338, 339, 339, 339, 340, 340, 1302 340, 340, 341, 341, 342, 342, 342, 343, 343, 344, 1303 344, 345, 345, 345, 346, 346, 346, 346, 346, 347, 1304 347, 347, 347, 348, 348, 348, 349, 349, 349, 350, 1305 350, 350, 350, 351, 351, 351, 352, 352, 352, 352, 1306 352, 353, 353, 353, 353, 354, 354, 354, 355, 355, 1307 355, 356, 356, 356, 356, 356, 356, 357, 357, 357, 1308 358, 358, 358, 358, 358, 359, 359, 359, 359, 360, 1309 360, 361, 361, 361, 362, 362, 363, 363, 363, 363, 1310 363, 363, 364, 364, 364, 364, 364, 364, 364, 364, 1311 364, 364, 365, 365, 365, 365, 366, 366, 366, 367, 1312 367, 368, 368, 368, 368, 368, 368, 369, 369, 369, 1313 369, 369, 369, 370, 371, 371, 371, 372, 372, 373, 1314 373 1311 1315 }; 1312 1316 … … 1317 1321 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1318 1322 3, 3, 1, 6, 4, 3, 7, 3, 7, 2, 1319 2, 7, 4, 1, 3, 0, 1, 3, 7, 9, 1320 1, 3, 1, 3, 7, 3, 7, 1, 1, 1, 1321 2, 2, 2, 2, 2, 2, 4, 6, 1, 4, 1322 4, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1323 1, 4, 4, 1, 3, 3, 3, 1, 3, 3, 1324 1, 3, 3, 1, 3, 3, 3, 3, 1, 3, 1325 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1326 3, 1, 5, 4, 5, 1, 1, 3, 3, 2, 1327 0, 1, 2, 5, 6, 7, 1, 3, 1, 1, 1328 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1329 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1330 6, 4, 2, 7, 1, 3, 1, 2, 1, 2, 1331 1, 2, 2, 5, 7, 5, 9, 5, 9, 1, 1332 3, 1, 1, 3, 3, 2, 1, 2, 2, 0, 1333 1, 2, 3, 0, 1, 2, 3, 3, 4, 0, 1334 1, 1, 2, 5, 7, 6, 6, 4, 3, 4, 1335 2, 3, 2, 3, 3, 3, 3, 5, 3, 3, 1336 4, 1, 5, 6, 5, 6, 9, 10, 9, 10, 1337 2, 1, 2, 2, 2, 1, 6, 8, 10, 12, 1338 14, 0, 1, 0, 1, 1, 3, 4, 7, 0, 1339 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1340 1, 3, 0, 1, 3, 4, 1, 3, 1, 1, 1341 3, 3, 3, 3, 3, 2, 3, 6, 3, 3, 1342 4, 1, 2, 2, 3, 5, 8, 7, 7, 5, 1343 9, 2, 2, 5, 3, 5, 4, 3, 4, 4, 1344 7, 3, 3, 3, 3, 4, 6, 1, 1, 1, 1345 1, 1, 1, 1, 1, 0, 1, 1, 2, 1, 1346 1, 1, 1, 1, 1, 1, 0, 5, 1, 2, 1347 3, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1323 2, 7, 4, 1, 3, 0, 1, 1, 3, 1, 1324 3, 7, 3, 7, 1, 1, 1, 2, 2, 2, 1325 2, 2, 2, 4, 2, 4, 6, 1, 4, 4, 1326 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1327 3, 3, 3, 1, 3, 3, 1, 3, 3, 1, 1328 3, 3, 3, 3, 1, 3, 3, 1, 3, 1, 1329 3, 1, 3, 1, 3, 1, 3, 1, 5, 4, 1330 5, 1, 1, 3, 2, 0, 1, 1, 1, 1, 1331 1, 1, 1, 1, 1, 1, 1, 1, 2, 5, 1332 6, 7, 1, 3, 1, 3, 0, 1, 1, 1, 1333 1, 1, 1, 1, 1, 1, 6, 4, 2, 7, 1334 1, 3, 1, 2, 1, 2, 1, 2, 2, 5, 1335 7, 5, 9, 5, 9, 1, 3, 1, 1, 3, 1336 3, 2, 1, 2, 2, 0, 1, 2, 3, 0, 1337 1, 2, 3, 3, 4, 0, 1, 1, 2, 5, 1338 7, 6, 6, 4, 3, 4, 2, 3, 2, 3, 1339 3, 3, 3, 5, 3, 3, 4, 1, 5, 6, 1340 5, 6, 9, 10, 9, 10, 2, 1, 2, 2, 1341 2, 1, 6, 8, 10, 12, 14, 0, 1, 0, 1342 1, 1, 3, 4, 7, 0, 1, 3, 1, 3, 1343 1, 1, 1, 3, 1, 1, 1, 3, 0, 1, 1344 3, 4, 1, 3, 1, 1, 3, 3, 3, 3, 1345 3, 2, 3, 6, 3, 3, 4, 1, 2, 2, 1346 3, 5, 8, 7, 7, 5, 9, 2, 2, 5, 1347 3, 5, 4, 3, 4, 4, 7, 3, 3, 3, 1348 3, 4, 6, 1, 1, 1, 1, 1, 1, 1, 1349 1, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1350 1, 1, 0, 5, 1, 2, 3, 1, 2, 1, 1348 1351 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1349 1, 1, 1, 1, 1, 1, 2, 2, 3, 3,1350 1, 3, 1, 2, 2, 2, 4, 4, 4, 4,1351 1, 2, 2, 3, 1, 2, 2, 1, 2, 2,1352 3, 1, 2, 2, 1, 1, 4, 2, 0, 6,1353 7, 2, 2, 2, 0, 2, 2, 3, 2, 3,1354 1, 2, 3, 2, 2, 4, 0, 1, 2, 2,1355 1, 0, 1, 2, 2, 5, 2, 0, 7, 2,1356 4, 0, 2, 0, 1, 1, 1, 5, 5, 5,1357 1, 5, 5, 9, 1, 5, 0, 1, 1, 5,1358 1, 1, 5, 5, 1, 3, 3, 4, 1, 1,1359 1, 1, 2, 1, 3, 3, 1, 2, 1, 3,1360 1352 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1361 1, 2, 1, 1, 1, 2, 0, 2, 2, 1, 1362 4, 0, 1, 2, 3, 4, 2, 2, 1, 2, 1363 1, 2, 5, 5, 7, 6, 1, 2, 2, 3, 1364 1, 2, 2, 4, 2, 4, 0, 4, 2, 1, 1365 1, 1, 0, 2, 5, 5, 13, 1, 1, 3, 1366 3, 2, 3, 3, 2, 4, 1, 6, 9, 0, 1367 11, 1, 3, 3, 3, 1, 1, 5, 2, 5, 1368 0, 1, 1, 3, 0, 1, 1, 1, 1, 0, 1369 6, 2, 1, 2, 4, 2, 3, 3, 3, 4, 1370 5, 5, 5, 6, 1, 1, 1, 3, 0, 5, 1371 0, 1, 1, 2, 6, 1, 3, 0, 1, 4, 1372 1, 1, 1, 1, 2, 1, 2, 2, 1, 3, 1373 2, 3, 3, 2, 4, 4, 3, 8, 3, 2, 1374 1, 2, 6, 8, 3, 2, 3, 3, 4, 4, 1375 3, 1, 1, 1, 4, 6, 3, 2, 3, 3, 1376 4, 4, 3, 2, 1, 2, 2, 1, 3, 2, 1377 3, 3, 2, 4, 4, 3, 6, 8, 3, 2, 1378 1, 2, 2, 2, 3, 3, 2, 4, 4, 3, 1379 6, 8, 3, 2, 1, 2, 2, 1, 1, 2, 1380 3, 3, 2, 4, 6, 8, 1, 2, 2, 1, 1381 2, 2, 3, 3, 1, 4, 4, 3, 5, 8, 1382 3, 2, 3, 1, 5, 5, 6, 6, 1, 2, 1383 2, 1, 2, 2, 3, 3, 1, 4, 4, 3, 1384 5, 8, 3, 1, 2, 1, 2, 6, 5, 6, 1385 7, 7, 1, 2, 2, 1, 2, 2, 3, 3, 1386 1, 4, 4, 3, 8, 3, 1, 1, 2, 1, 1387 1, 2, 3, 2, 3, 2, 3, 3, 2, 4, 1388 3, 2, 3, 2, 4, 3, 2, 6, 6, 6, 1389 7, 1, 2, 1, 1, 1, 2, 3, 2, 3, 1390 2, 3, 3, 4, 2, 3, 4, 2, 5, 5, 1391 6, 6, 0, 1, 0, 2 1353 1, 1, 2, 2, 3, 3, 1, 3, 1, 2, 1354 2, 2, 4, 4, 4, 4, 1, 2, 2, 3, 1355 1, 2, 2, 1, 2, 2, 3, 1, 2, 2, 1356 1, 1, 4, 2, 0, 6, 7, 2, 2, 2, 1357 0, 2, 2, 3, 2, 3, 1, 2, 3, 2, 1358 2, 4, 0, 1, 2, 2, 1, 0, 1, 2, 1359 2, 5, 2, 0, 7, 2, 4, 0, 2, 0, 1360 1, 1, 1, 5, 5, 5, 1, 5, 5, 9, 1361 1, 5, 0, 1, 1, 5, 1, 1, 5, 5, 1362 1, 3, 3, 4, 1, 1, 1, 1, 2, 1, 1363 3, 3, 1, 2, 1, 3, 1, 1, 1, 1, 1364 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1365 1, 2, 0, 2, 2, 1, 4, 0, 1, 2, 1366 3, 4, 2, 2, 1, 2, 2, 5, 5, 7, 1367 6, 1, 2, 2, 3, 1, 2, 2, 4, 2, 1368 4, 0, 4, 2, 1, 1, 1, 0, 2, 5, 1369 5, 13, 1, 1, 3, 3, 2, 3, 3, 2, 1370 4, 1, 6, 9, 0, 11, 1, 3, 3, 3, 1371 1, 1, 5, 2, 5, 0, 1, 1, 3, 0, 1372 1, 1, 1, 1, 0, 6, 2, 1, 2, 4, 1373 2, 3, 3, 3, 4, 5, 5, 5, 6, 1, 1374 1, 1, 3, 0, 5, 0, 1, 1, 2, 6, 1375 1, 3, 0, 1, 4, 1, 1, 1, 1, 2, 1376 1, 2, 2, 1, 3, 2, 3, 3, 2, 4, 1377 4, 3, 8, 3, 2, 1, 2, 6, 8, 3, 1378 2, 3, 3, 4, 4, 3, 1, 1, 1, 4, 1379 6, 3, 2, 3, 3, 4, 4, 3, 2, 1, 1380 2, 2, 1, 3, 2, 3, 3, 2, 4, 4, 1381 3, 6, 8, 3, 2, 1, 2, 2, 2, 3, 1382 3, 2, 4, 4, 3, 6, 8, 3, 2, 1, 1383 2, 2, 1, 1, 2, 3, 3, 2, 4, 6, 1384 8, 1, 2, 2, 1, 2, 2, 3, 3, 1, 1385 4, 4, 3, 5, 8, 3, 2, 3, 1, 5, 1386 5, 6, 6, 1, 2, 2, 1, 2, 2, 3, 1387 3, 1, 4, 4, 3, 5, 8, 3, 1, 2, 1388 1, 2, 6, 5, 6, 7, 7, 1, 2, 2, 1389 1, 2, 2, 3, 3, 1, 4, 4, 3, 8, 1390 3, 1, 1, 2, 1, 1, 2, 3, 2, 3, 1391 2, 3, 3, 2, 4, 3, 2, 3, 2, 4, 1392 3, 2, 6, 6, 6, 7, 1, 2, 1, 1, 1393 1, 2, 3, 2, 3, 2, 3, 3, 4, 2, 1394 3, 4, 2, 5, 5, 6, 6, 0, 1, 0, 1395 2 1392 1396 }; 1393 1397 … … 1397 1401 static const yytype_uint16 yydefact[] = 1398 1402 { 1399 29 5, 295, 316, 314, 317, 315, 318, 319, 301, 303,1400 302, 0, 304, 330, 322, 327, 325, 326, 324, 323,1401 32 8, 329, 334, 331, 332, 333, 550, 550, 550, 0,1402 0, 0, 29 5, 221, 305, 320, 321, 7, 361, 0,1403 8, 14, 15, 65, 0, 2, 63, 64, 568, 9,1404 295, 528, 526, 248, 3, 456, 3, 261, 0, 3,1405 3, 3, 249, 3, 0, 0, 0, 296, 297, 299,1406 295, 308, 311, 313, 342, 287, 335, 340, 288, 350,1407 289, 357, 354, 364, 0, 0, 365, 290, 476, 480,1408 3, 3, 0, 2, 522, 527, 532, 300, 0, 0,1409 5 50, 580, 550, 2, 591, 592, 593, 295, 0, 734,1410 735, 0, 12, 0, 13, 295, 271, 272, 0, 296,1411 2 91, 292, 293, 294, 529, 306, 394, 551, 552, 372,1412 373, 12, 447, 448, 11, 443, 446, 0, 506, 501,1413 4 92, 447, 448, 0, 0, 531, 222, 0, 295, 0,1414 0, 0, 0, 0, 0, 0, 0, 295, 295, 2,1415 0, 736, 296, 585, 597, 740, 733, 731, 738, 0,1416 0, 0, 255, 2, 0, 535, 441, 442, 440, 0,1417 0, 0, 0, 550, 0, 637, 638, 0, 0, 548,1418 54 4, 550, 565, 550, 550, 546, 2, 545, 550, 604,1419 5 50, 550, 607, 0, 0, 0, 295, 295, 314, 362,1420 2, 295, 262, 298, 309, 343, 355, 481, 0, 2,1421 0, 456, 263, 296, 336, 351, 358, 477, 0, 2,1422 0, 312, 337, 344, 345, 0, 352, 356, 359, 363,1423 448, 295, 374, 367, 371, 0, 396, 478, 482, 0,1424 0, 0, 1, 295, 2, 533, 579, 581, 295, 2,1425 744, 296, 747, 548, 548, 0, 296, 0, 0, 274,1426 5 50, 546, 2, 295, 0, 0, 295, 553, 2, 504,1427 2, 557, 0, 0, 0, 0, 0, 0, 18, 58,1428 4, 5, 6, 16, 0, 0, 295, 2, 66, 67,1429 6 8, 69, 48, 19, 49, 22, 47, 70, 295, 0,1430 73, 7 7, 80, 83, 88, 91, 93, 95, 97, 99,1431 10 1, 106, 498, 754, 454, 497, 0, 452, 453, 0,1432 5 69, 584, 587, 590, 596, 599, 602, 361, 0, 2,1433 742, 0, 295, 745, 2, 63, 295, 3, 428, 0,1434 436, 296, 295, 308, 335, 288, 350, 357, 3, 3,1435 410, 4 14, 424, 429, 476, 295, 430, 709, 710, 295,1436 4 31, 433, 295, 2, 586, 598, 732, 2, 2, 250,1437 2, 461, 0, 459, 458, 457, 142, 2, 2, 252,1438 2, 2, 251, 2, 282, 2, 283, 0, 281, 0,1439 0, 0, 0, 0, 0, 0, 0, 0, 570, 609,1440 0, 456, 2, 564, 573, 663, 566, 567, 536, 295,1441 2, 603, 612, 605, 606, 0, 277, 295, 295, 341,1442 296, 0, 296, 0, 295, 737, 741, 739, 537, 295,1443 548, 256, 264, 310, 0, 2, 538, 295, 502, 338,1444 339, 284, 353, 360, 0, 295, 0, 752, 401, 0,1445 4 79, 503, 253, 254, 523, 295, 438, 0, 295, 238,1446 0, 2, 240, 0, 296, 0, 258, 2, 259, 279,1447 0, 0, 2, 295, 548, 295, 489, 491, 490, 0,1448 0, 754, 0, 295, 0, 295, 493, 295, 563, 561,1449 5 62, 560, 0, 555, 558, 0, 0, 295, 55, 295,1450 70, 50, 295, 61, 295, 295, 53, 54, 2, 128,1451 0, 0, 450, 0, 449, 731, 112, 295, 17, 0,1452 29, 30, 35, 2, 0, 35, 118, 119, 120, 121,1453 1 22, 123, 124, 125, 126, 127, 0, 0, 51, 52,1403 291, 291, 312, 310, 313, 311, 314, 315, 297, 299, 1404 298, 0, 300, 326, 318, 323, 321, 322, 320, 319, 1405 324, 325, 330, 327, 328, 329, 545, 545, 545, 0, 1406 0, 0, 291, 217, 301, 316, 317, 7, 357, 0, 1407 8, 14, 15, 0, 2, 60, 61, 563, 9, 291, 1408 523, 521, 244, 3, 452, 3, 257, 0, 3, 3, 1409 3, 245, 3, 0, 0, 0, 292, 293, 295, 291, 1410 304, 307, 309, 338, 283, 331, 336, 284, 346, 285, 1411 353, 350, 360, 0, 0, 361, 286, 471, 475, 3, 1412 3, 0, 2, 517, 522, 527, 296, 0, 0, 545, 1413 575, 545, 2, 586, 587, 588, 291, 0, 729, 730, 1414 0, 12, 0, 13, 291, 267, 268, 0, 292, 287, 1415 288, 289, 290, 524, 302, 390, 546, 547, 368, 369, 1416 12, 443, 444, 11, 439, 442, 0, 501, 496, 487, 1417 443, 444, 0, 0, 526, 218, 0, 291, 0, 0, 1418 0, 0, 0, 0, 0, 0, 291, 291, 2, 0, 1419 731, 292, 580, 592, 735, 728, 726, 733, 0, 0, 1420 0, 251, 2, 0, 530, 437, 438, 436, 0, 0, 1421 0, 0, 545, 0, 632, 633, 0, 0, 543, 539, 1422 545, 560, 545, 545, 541, 2, 540, 545, 599, 545, 1423 545, 602, 0, 0, 0, 291, 291, 310, 358, 2, 1424 291, 258, 294, 305, 339, 351, 476, 0, 2, 0, 1425 452, 259, 292, 332, 347, 354, 472, 0, 2, 0, 1426 308, 333, 340, 341, 0, 348, 352, 355, 359, 444, 1427 291, 370, 363, 367, 0, 392, 473, 477, 0, 0, 1428 0, 1, 291, 2, 528, 574, 576, 291, 2, 739, 1429 292, 742, 543, 543, 0, 292, 0, 0, 270, 545, 1430 541, 2, 291, 0, 0, 291, 548, 2, 499, 2, 1431 552, 0, 0, 0, 0, 0, 0, 18, 57, 4, 1432 5, 6, 16, 0, 0, 291, 2, 62, 63, 64, 1433 65, 45, 19, 46, 22, 44, 66, 291, 0, 69, 1434 73, 76, 79, 84, 87, 89, 91, 93, 95, 97, 1435 102, 493, 749, 450, 492, 0, 448, 449, 0, 564, 1436 579, 582, 585, 591, 594, 597, 357, 0, 2, 737, 1437 0, 291, 740, 2, 60, 291, 3, 424, 0, 432, 1438 292, 291, 304, 331, 284, 346, 353, 3, 3, 406, 1439 410, 420, 425, 471, 291, 426, 704, 705, 291, 427, 1440 429, 291, 2, 581, 593, 727, 2, 2, 246, 2, 1441 457, 0, 455, 454, 453, 138, 2, 2, 248, 2, 1442 2, 247, 2, 278, 2, 279, 0, 277, 0, 0, 1443 0, 0, 0, 0, 0, 0, 0, 565, 604, 0, 1444 452, 2, 559, 568, 658, 561, 562, 531, 291, 2, 1445 598, 607, 600, 601, 0, 273, 291, 291, 337, 292, 1446 0, 292, 0, 291, 732, 736, 734, 532, 291, 543, 1447 252, 260, 306, 0, 2, 533, 291, 497, 334, 335, 1448 280, 349, 356, 0, 291, 0, 747, 397, 0, 474, 1449 498, 249, 250, 518, 291, 434, 0, 291, 234, 0, 1450 2, 236, 0, 292, 0, 254, 2, 255, 275, 0, 1451 0, 2, 291, 543, 291, 484, 486, 485, 0, 0, 1452 749, 0, 291, 0, 291, 488, 291, 558, 556, 557, 1453 555, 0, 550, 553, 0, 0, 291, 52, 291, 66, 1454 47, 291, 54, 291, 291, 50, 51, 2, 124, 0, 1455 0, 446, 0, 445, 726, 118, 291, 17, 0, 29, 1456 30, 35, 2, 0, 35, 108, 109, 110, 111, 112, 1457 113, 114, 115, 116, 117, 107, 0, 48, 49, 0, 1454 1458 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1455 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1456 109, 2, 649, 455, 646, 550, 550, 654, 483, 295, 1457 2, 588, 589, 0, 600, 601, 0, 2, 743, 746, 1458 112, 295, 0, 2, 711, 296, 715, 706, 707, 713, 1459 0, 2, 2, 671, 550, 754, 620, 550, 550, 754, 1460 550, 634, 550, 550, 685, 437, 668, 550, 550, 676, 1461 683, 295, 432, 296, 0, 0, 295, 721, 296, 726, 1462 754, 718, 295, 723, 754, 295, 295, 295, 0, 112, 1463 0, 18, 5, 2, 0, 19, 0, 462, 752, 0, 1464 0, 468, 242, 0, 295, 0, 0, 0, 548, 572, 1465 576, 578, 608, 611, 615, 618, 571, 610, 0, 285, 1466 661, 0, 295, 278, 0, 0, 0, 0, 276, 2, 1467 0, 260, 539, 295, 0, 0, 295, 2, 366, 386, 1468 375, 0, 0, 380, 374, 753, 0, 0, 399, 0, 1469 296, 3, 417, 3, 421, 420, 594, 0, 534, 295, 1470 63, 3, 295, 436, 296, 3, 430, 431, 2, 0, 1471 0, 0, 488, 307, 295, 484, 486, 3, 2, 2, 1472 0, 505, 3, 0, 557, 130, 0, 0, 223, 0, 1473 0, 0, 2, 0, 0, 36, 0, 0, 112, 295, 1474 20, 0, 21, 0, 695, 700, 451, 692, 550, 550, 1475 0, 110, 3, 2, 27, 2, 0, 33, 0, 2, 1476 25, 0, 107, 108, 74, 75, 76, 78, 79, 81, 1477 82, 86, 87, 84, 85, 89, 90, 92, 94, 96, 1478 98, 100, 0, 0, 755, 295, 0, 0, 0, 650, 1479 651, 647, 648, 500, 499, 295, 0, 295, 717, 295, 1480 722, 296, 295, 665, 295, 295, 708, 664, 2, 295, 1481 0, 0, 0, 0, 0, 0, 0, 0, 686, 0, 1482 672, 623, 639, 673, 2, 619, 626, 434, 621, 622, 1483 435, 2, 633, 642, 635, 636, 669, 670, 684, 712, 1484 716, 714, 754, 269, 2, 748, 2, 425, 720, 725, 1485 426, 0, 404, 3, 3, 3, 3, 456, 3, 0, 1486 2, 471, 467, 753, 0, 463, 470, 2, 466, 469, 1487 0, 295, 243, 265, 3, 273, 275, 0, 456, 2, 1488 574, 575, 2, 613, 614, 0, 662, 540, 3, 347, 1489 346, 349, 348, 295, 541, 0, 542, 374, 0, 0, 1490 295, 295, 0, 0, 695, 384, 387, 391, 550, 391, 1491 390, 383, 376, 550, 378, 381, 295, 401, 395, 105, 1492 402, 752, 0, 0, 439, 241, 0, 0, 3, 2, 1493 671, 432, 0, 530, 0, 754, 492, 0, 295, 295, 1494 295, 0, 554, 556, 131, 0, 0, 216, 0, 0, 1495 0, 224, 225, 56, 0, 62, 295, 0, 60, 59, 1496 0, 2, 129, 0, 0, 0, 696, 697, 693, 694, 1497 461, 71, 72, 111, 116, 3, 110, 0, 0, 0, 1498 24, 35, 3, 0, 32, 103, 0, 3, 653, 657, 1499 660, 652, 3, 595, 3, 719, 724, 2, 63, 295, 1500 3, 3, 296, 0, 3, 625, 629, 632, 641, 675, 1501 679, 682, 295, 3, 624, 640, 674, 295, 295, 427, 1502 295, 295, 749, 0, 0, 0, 0, 257, 0, 105, 1503 0, 3, 3, 0, 464, 0, 460, 0, 0, 246, 1504 295, 0, 0, 130, 0, 0, 0, 0, 0, 130, 1505 0, 0, 110, 110, 18, 2, 0, 0, 3, 132, 1506 133, 2, 144, 134, 135, 136, 137, 138, 139, 146, 1507 148, 0, 0, 0, 286, 295, 295, 550, 0, 543, 1508 295, 377, 379, 0, 393, 696, 388, 392, 389, 382, 1509 386, 369, 400, 0, 582, 2, 667, 666, 0, 672, 1510 2, 485, 487, 507, 3, 515, 516, 0, 2, 511, 1511 3, 3, 0, 0, 559, 223, 0, 0, 0, 223, 1512 0, 0, 3, 37, 112, 699, 703, 705, 698, 752, 1513 110, 0, 3, 664, 42, 3, 40, 3, 34, 0, 1514 3, 102, 104, 0, 2, 655, 656, 0, 0, 295, 1515 0, 0, 0, 3, 641, 0, 2, 627, 628, 2, 1516 643, 2, 677, 678, 0, 0, 63, 0, 3, 3, 1517 3, 3, 412, 411, 415, 2, 2, 751, 750, 113, 1518 0, 0, 0, 0, 3, 465, 3, 0, 244, 147, 1519 3, 296, 295, 0, 0, 0, 0, 2, 0, 192, 1520 0, 190, 0, 0, 0, 0, 0, 0, 0, 550, 1521 112, 0, 152, 149, 295, 0, 0, 268, 280, 3, 1522 3, 549, 616, 370, 385, 398, 295, 267, 295, 0, 1523 518, 495, 295, 0, 0, 494, 509, 0, 0, 0, 1524 217, 0, 226, 57, 110, 0, 2, 701, 702, 0, 1525 117, 114, 0, 0, 0, 0, 0, 0, 23, 0, 1526 658, 295, 583, 266, 727, 728, 729, 0, 680, 295, 1527 295, 295, 3, 3, 0, 688, 0, 0, 0, 0, 1528 295, 295, 3, 547, 472, 473, 0, 0, 247, 296, 1529 0, 0, 0, 0, 295, 193, 191, 188, 0, 194, 1530 0, 0, 0, 0, 198, 201, 199, 195, 0, 196, 1531 130, 35, 145, 143, 245, 0, 0, 419, 423, 422, 1532 0, 512, 2, 513, 2, 514, 508, 295, 229, 0, 1533 227, 0, 229, 3, 664, 295, 31, 115, 2, 45, 1534 2, 43, 41, 28, 113, 26, 3, 730, 3, 3, 1535 3, 0, 0, 687, 689, 630, 644, 270, 2, 409, 1536 3, 408, 0, 475, 472, 130, 0, 0, 130, 3, 1537 0, 130, 189, 0, 2, 2, 210, 200, 0, 0, 1538 0, 141, 0, 577, 617, 2, 0, 0, 2, 230, 1539 0, 0, 218, 0, 0, 0, 3, 0, 0, 0, 1540 0, 0, 0, 690, 691, 295, 0, 474, 153, 0, 1541 0, 2, 166, 130, 155, 0, 183, 0, 130, 0, 1542 2, 157, 0, 2, 0, 2, 2, 2, 197, 32, 1543 295, 517, 519, 510, 0, 0, 0, 0, 115, 38, 1544 0, 3, 3, 659, 631, 645, 681, 413, 130, 159, 1545 162, 0, 161, 165, 3, 168, 167, 0, 130, 185, 1546 130, 3, 0, 295, 0, 295, 0, 2, 0, 2, 1547 140, 2, 231, 232, 0, 228, 219, 0, 704, 0, 1548 0, 154, 0, 0, 164, 234, 169, 2, 236, 184, 1549 0, 187, 173, 202, 3, 211, 215, 204, 3, 0, 1550 295, 0, 295, 0, 0, 0, 39, 46, 44, 160, 1551 163, 130, 0, 170, 295, 130, 130, 0, 174, 0, 1552 0, 695, 212, 213, 214, 0, 203, 3, 205, 3, 1553 295, 220, 233, 150, 171, 156, 130, 237, 186, 181, 1554 179, 175, 158, 130, 0, 696, 0, 0, 0, 0, 1555 151, 172, 182, 176, 180, 179, 177, 3, 3, 0, 1556 0, 496, 178, 206, 208, 3, 3, 207, 209 1459 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 1460 2, 644, 451, 641, 545, 545, 649, 478, 291, 2, 1461 583, 584, 0, 595, 596, 0, 2, 738, 741, 118, 1462 291, 0, 2, 706, 292, 710, 701, 702, 708, 0, 1463 2, 2, 666, 545, 749, 615, 545, 545, 749, 545, 1464 629, 545, 545, 680, 433, 663, 545, 545, 671, 678, 1465 291, 428, 292, 0, 0, 291, 716, 292, 721, 749, 1466 713, 291, 718, 749, 291, 291, 291, 0, 118, 0, 1467 18, 2, 0, 19, 0, 458, 747, 0, 0, 464, 1468 238, 0, 291, 0, 0, 0, 543, 567, 571, 573, 1469 603, 606, 610, 613, 566, 605, 0, 281, 656, 0, 1470 291, 274, 0, 0, 0, 0, 272, 2, 0, 256, 1471 534, 291, 0, 0, 291, 2, 362, 382, 371, 0, 1472 0, 376, 370, 748, 0, 0, 395, 0, 292, 3, 1473 413, 3, 417, 416, 589, 0, 529, 291, 60, 3, 1474 291, 432, 292, 3, 426, 427, 2, 0, 0, 0, 1475 483, 303, 291, 479, 481, 3, 2, 2, 0, 500, 1476 3, 0, 552, 126, 0, 0, 219, 0, 0, 0, 1477 0, 36, 0, 0, 118, 291, 20, 0, 21, 0, 1478 690, 695, 447, 687, 545, 545, 0, 105, 3, 2, 1479 27, 0, 33, 0, 2, 25, 0, 103, 70, 71, 1480 72, 74, 75, 77, 78, 82, 83, 80, 81, 85, 1481 86, 88, 90, 92, 94, 96, 0, 0, 750, 291, 1482 0, 0, 0, 645, 646, 642, 643, 495, 494, 291, 1483 0, 291, 712, 291, 717, 292, 291, 660, 291, 291, 1484 703, 659, 2, 291, 0, 0, 0, 0, 0, 0, 1485 0, 0, 681, 0, 667, 618, 634, 668, 2, 614, 1486 621, 430, 616, 617, 431, 2, 628, 637, 630, 631, 1487 664, 665, 679, 707, 711, 709, 749, 265, 2, 743, 1488 2, 421, 715, 720, 422, 0, 400, 3, 3, 3, 1489 3, 452, 3, 0, 2, 466, 463, 748, 0, 459, 1490 2, 462, 465, 0, 291, 239, 261, 3, 269, 271, 1491 0, 452, 2, 569, 570, 2, 608, 609, 0, 657, 1492 535, 3, 343, 342, 345, 344, 291, 536, 0, 537, 1493 370, 0, 0, 291, 291, 0, 0, 690, 380, 383, 1494 387, 545, 387, 386, 379, 372, 545, 374, 377, 291, 1495 397, 391, 101, 398, 747, 0, 0, 435, 237, 0, 1496 0, 3, 2, 666, 428, 0, 525, 0, 749, 487, 1497 0, 291, 291, 291, 0, 549, 551, 127, 0, 0, 1498 212, 0, 0, 0, 220, 221, 53, 0, 55, 58, 1499 59, 0, 2, 125, 0, 0, 0, 691, 692, 688, 1500 689, 457, 67, 68, 106, 122, 3, 105, 0, 0, 1501 24, 35, 3, 0, 32, 99, 0, 3, 648, 652, 1502 655, 647, 3, 590, 3, 714, 719, 2, 60, 291, 1503 3, 3, 292, 0, 3, 620, 624, 627, 636, 670, 1504 674, 677, 291, 3, 619, 635, 669, 291, 291, 423, 1505 291, 291, 744, 0, 0, 0, 0, 253, 0, 101, 1506 0, 3, 3, 0, 460, 0, 456, 0, 0, 242, 1507 291, 0, 0, 126, 0, 0, 0, 0, 0, 126, 1508 0, 0, 105, 105, 18, 2, 0, 0, 3, 128, 1509 129, 2, 140, 130, 131, 132, 133, 134, 135, 142, 1510 144, 0, 0, 0, 282, 291, 291, 545, 0, 538, 1511 291, 373, 375, 0, 389, 691, 384, 388, 385, 378, 1512 382, 365, 396, 0, 577, 2, 662, 661, 0, 667, 1513 2, 480, 482, 502, 3, 510, 511, 0, 2, 506, 1514 3, 3, 0, 0, 554, 219, 0, 0, 0, 219, 1515 0, 0, 118, 694, 698, 700, 693, 747, 105, 0, 1516 3, 659, 39, 3, 37, 34, 0, 3, 98, 100, 1517 0, 2, 650, 651, 0, 0, 291, 0, 0, 0, 1518 3, 636, 0, 2, 622, 623, 2, 638, 2, 672, 1519 673, 0, 0, 60, 0, 3, 3, 3, 3, 408, 1520 407, 411, 2, 2, 746, 745, 119, 0, 0, 0, 1521 0, 3, 461, 3, 0, 240, 143, 3, 292, 291, 1522 0, 0, 0, 0, 2, 0, 188, 0, 186, 0, 1523 0, 0, 0, 0, 0, 0, 545, 118, 0, 148, 1524 145, 291, 0, 0, 264, 276, 3, 3, 544, 611, 1525 366, 381, 394, 291, 263, 291, 0, 513, 490, 291, 1526 0, 0, 489, 504, 0, 0, 0, 213, 0, 222, 1527 56, 2, 696, 697, 0, 123, 120, 0, 0, 0, 1528 0, 0, 23, 0, 653, 291, 578, 262, 722, 723, 1529 724, 0, 675, 291, 291, 291, 3, 3, 0, 683, 1530 0, 0, 0, 0, 291, 291, 3, 542, 119, 468, 1531 0, 0, 243, 292, 0, 0, 0, 0, 291, 189, 1532 187, 184, 0, 190, 0, 0, 0, 0, 194, 197, 1533 195, 191, 0, 192, 126, 35, 141, 139, 241, 0, 1534 0, 415, 419, 418, 0, 507, 2, 508, 2, 509, 1535 503, 291, 225, 0, 223, 0, 225, 291, 31, 121, 1536 2, 42, 2, 40, 38, 28, 26, 3, 725, 3, 1537 3, 3, 0, 0, 682, 684, 625, 639, 266, 2, 1538 405, 3, 404, 0, 470, 467, 126, 0, 0, 126, 1539 3, 0, 126, 185, 0, 2, 2, 206, 196, 0, 1540 0, 0, 137, 0, 572, 612, 2, 0, 0, 2, 1541 226, 0, 0, 214, 0, 3, 0, 0, 0, 0, 1542 0, 0, 685, 686, 291, 0, 469, 149, 0, 0, 1543 2, 162, 126, 151, 0, 179, 0, 126, 0, 2, 1544 153, 0, 2, 0, 2, 2, 2, 193, 32, 291, 1545 512, 514, 505, 0, 0, 0, 0, 0, 3, 3, 1546 654, 626, 640, 676, 409, 126, 155, 158, 0, 157, 1547 161, 3, 164, 163, 0, 126, 181, 126, 3, 0, 1548 291, 0, 291, 0, 2, 0, 2, 136, 2, 227, 1549 228, 0, 224, 215, 699, 0, 0, 150, 0, 0, 1550 160, 230, 165, 2, 232, 180, 0, 183, 169, 198, 1551 3, 207, 211, 200, 3, 0, 291, 0, 291, 0, 1552 0, 0, 43, 41, 156, 159, 126, 0, 166, 291, 1553 126, 126, 0, 170, 0, 0, 690, 208, 209, 210, 1554 0, 199, 3, 201, 3, 291, 216, 229, 146, 167, 1555 152, 126, 233, 182, 177, 175, 171, 154, 126, 0, 1556 691, 0, 0, 0, 0, 147, 168, 178, 172, 176, 1557 175, 173, 3, 3, 0, 0, 491, 174, 202, 204, 1558 3, 3, 203, 205 1557 1559 }; 1558 1560 … … 1560 1562 static const yytype_int16 yydefgoto[] = 1561 1563 { 1562 -1, 81 9, 469, 302, 48, 135, 136, 303, 304, 305,1563 30 6, 766, 767, 1145, 1146, 307, 382, 309, 310, 311,1564 31 2, 313, 314, 315, 316, 317, 318, 319, 320, 321,1565 10 40, 519, 984, 323, 985, 547, 954, 1067, 1543, 1069,1566 10 70, 1071, 1072, 1544, 1073, 1074, 1460, 1461, 1422, 1423,1567 14 24, 1522, 1523, 1527, 1528, 1563, 1564, 1075, 1380, 1076,1568 10 77, 1314, 1315, 1316, 1504, 1078, 147, 960, 961, 962,1569 1 400, 1484, 1496, 1497, 470, 471, 881, 882, 1048, 52,1570 5 3, 54, 55, 56, 348, 160, 59, 60, 61, 62,1571 6 3, 350, 65, 66, 266, 68, 69, 276, 352, 353,1572 7 2, 73, 74, 75, 120, 77, 206, 355, 121, 80,1573 12 2, 82, 83, 456, 84, 455, 690, 691, 692, 915,1574 10 96, 916, 85, 86, 459, 457, 698, 861, 862, 358,1575 359, 701, 702, 703, 360, 361, 362, 363, 467, 341,1576 13 7, 138, 523, 325, 172, 647, 648, 649, 650, 651,1577 8 7, 123, 89, 490, 491, 946, 492, 279, 496, 326,1578 90, 139, 140, 91, 1337, 1118, 1119, 1120, 1121, 92,1579 9 3, 719, 94, 275, 95, 96, 189, 1042, 681, 413,1580 12 7, 97, 502, 503, 504, 190, 270, 192, 193, 194,1581 27 1, 100, 101, 102, 103, 104, 105, 106, 197, 198,1582 19 9, 200, 201, 831, 606, 607, 608, 609, 202, 611,1583 61 2, 613, 573, 574, 575, 576, 755, 107, 615, 616,1584 61 7, 618, 619, 620, 977, 757, 758, 759, 596, 366,1585 36 7, 368, 369, 327, 166, 109, 110, 111, 371, 696,1586 5 701564 -1, 813, 468, 301, 47, 134, 135, 302, 303, 304, 1565 305, 761, 762, 1133, 1134, 306, 381, 308, 309, 310, 1566 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 1567 1030, 518, 975, 546, 322, 976, 947, 1057, 1518, 1059, 1568 1060, 1061, 1062, 1519, 1063, 1064, 1437, 1438, 1401, 1402, 1569 1403, 1497, 1498, 1502, 1503, 1538, 1539, 1065, 1361, 1066, 1570 1067, 1298, 1299, 1300, 1480, 1068, 146, 953, 954, 955, 1571 1381, 1461, 1472, 1473, 469, 470, 874, 875, 1038, 51, 1572 52, 53, 54, 55, 347, 159, 58, 59, 60, 61, 1573 62, 349, 64, 65, 265, 67, 68, 275, 351, 352, 1574 71, 72, 73, 74, 119, 76, 205, 354, 120, 79, 1575 121, 81, 82, 455, 83, 454, 688, 689, 690, 908, 1576 1086, 909, 84, 85, 458, 456, 696, 855, 856, 857, 1577 858, 699, 700, 701, 359, 360, 361, 362, 466, 340, 1578 136, 137, 522, 324, 171, 645, 646, 647, 648, 649, 1579 86, 122, 88, 489, 490, 939, 491, 278, 495, 325, 1580 89, 138, 139, 90, 1321, 1108, 1109, 1110, 1111, 91, 1581 92, 717, 93, 274, 94, 95, 188, 1032, 679, 412, 1582 126, 96, 501, 502, 503, 189, 269, 191, 192, 193, 1583 270, 99, 100, 101, 102, 103, 104, 105, 196, 197, 1584 198, 199, 200, 825, 605, 606, 607, 608, 201, 610, 1585 611, 612, 572, 573, 574, 575, 751, 106, 614, 615, 1586 616, 617, 618, 619, 968, 753, 754, 755, 595, 365, 1587 366, 367, 368, 326, 165, 108, 109, 110, 370, 694, 1588 569 1587 1589 }; 1588 1590 1589 1591 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing 1590 1592 STATE-NUM. */ 1591 #define YYPACT_NINF -1 4141593 #define YYPACT_NINF -1310 1592 1594 static const yytype_int16 yypact[] = 1593 1595 { 1594 4857, 9883, -1414, 35, -1414, -1414, -1414, -1414, -1414, -1414, 1595 -1414, 142, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414, 1596 -1414, -1414, -1414, -1414, -1414, -1414, 98, 98, 98, 1334, 1597 684, 153, 7496, 290, -1414, -1414, -1414, -1414, -1414, 204, 1598 -1414, -1414, -1414, -1414, 901, 229, -1414, -1414, -1414, -1414, 1599 9565, -1414, -1414, -1414, -1414, -15, 301, -1414, 1624, -1414, 1600 -1414, -1414, -1414, 302, 1806, 471, 143, 7613, -1414, -1414, 1601 9603, 1367, -1414, -1414, -1414, 1721, 510, 3394, 1032, 1137, 1602 1721, 1303, -1414, -1414, 1174, 1520, -1414, 1721, 1532, -1414, 1603 385, -1414, 421, 523, -1414, -1414, -1414, -1414, 460, 301, 1604 98, -1414, 98, -1414, -1414, -1414, -1414, 10414, 1624, -1414, 1605 -1414, 1624, -1414, 447, -1414, 10444, -1414, -1414, 2082, 10554, 1606 -1414, 399, 399, 399, -1414, -1414, -1414, 98, -1414, -1414, 1607 -1414, 544, 555, 575, -1414, -1414, -1414, 617, -1414, -1414, 1608 -1414, -1414, -1414, 621, 629, -1414, -1414, 11, 9069, 3253, 1609 578, 492, 499, 631, 635, 642, 647, 9853, 7015, 649, 1610 656, -1414, 9713, -1414, -1414, -1414, -1414, 661, -1414, 193, 1611 3453, 3453, -1414, 667, 251, -1414, -1414, -1414, -1414, 692, 1612 327, 346, 368, 98, 673, -1414, -1414, 1806, 3136, 748, 1613 -1414, 12, -1414, 98, 98, 301, -1414, -1414, 75, -1414, 1614 98, 98, -1414, 3167, 711, 722, 399, 6806, -1414, -1414, 1615 726, 9565, -1414, -1414, 1721, -1414, -1414, -1414, 301, -1414, 1616 1624, -15, -1414, 7963, -1414, 399, 399, 399, 301, -1414, 1617 1334, -1414, 5769, -1414, -1414, 709, 399, -1414, 399, -1414, 1618 204, 9069, -1414, 763, -1414, 684, 765, 399, -1414, 1334, 1619 750, 766, -1414, 7496, 705, -1414, -1414, -1414, 9532, -1414, 1620 -1414, 10864, -1414, 748, 63, 6244, 10554, 2082, 3167, -1414, 1621 85, -1414, -1414, 10444, 1624, 804, 7644, -1414, -1414, 319, 1622 -1414, 11778, 782, 851, 4657, 828, 4994, 11639, -1414, 839, 1623 -1414, -1414, -1414, -1414, 11658, 11658, 8841, 844, -1414, -1414, 1624 -1414, -1414, -1414, -1414, 869, -1414, 759, 2440, 9183, 4994, 1625 -1414, 593, 571, 645, 313, 861, 842, 858, 843, 911, 1626 -20, -1414, -1414, 876, 326, -1414, 83, -1414, -1414, 3253, 1627 -1414, -1414, 139, 900, -1414, 422, 900, 905, 204, -1414, 1628 -1414, 909, 10414, -1414, 912, 917, 9297, -1414, -1414, 1382, 1629 2358, 8427, 6806, 1721, -1414, 1721, 399, 399, -1414, -1414, 1630 -1414, -1414, -1414, -1414, 399, 10414, 1624, -1414, -1414, 10584, 1631 1776, -1414, 10304, -1414, -1414, -1414, -1414, -1414, -1414, -1414, 1632 936, 11446, 4994, -1414, -1414, -1414, -1414, -1414, -1414, -1414, 1633 -1414, -1414, -1414, -1414, -1414, -1414, -1414, 2082, -1414, 836, 1634 947, 962, 963, 923, 965, 970, 972, 3136, -1414, -1414, 1635 959, -15, 975, -1414, -1414, 978, -1414, -1414, -1414, 9532, 1636 -1414, -1414, -1414, -1414, -1414, 3167, -1414, 9069, 9069, -1414, 1637 399, 2082, 6926, 1624, 8543, -1414, -1414, -1414, -1414, 9532, 1638 63, -1414, -1414, 1721, 301, -1414, -1414, 9532, -1414, 6689, 1639 -1414, -1414, 399, 399, 271, 10023, 907, 977, 960, 988, 1640 399, -1414, -1414, -1414, -1414, 10980, -1414, 500, 6556, -1414, 1641 301, 990, -1414, 2082, 11860, 11504, -1414, -1414, -1414, -1414, 1642 935, 3167, -1414, 8659, 748, 6228, -1414, -1414, -1414, 1482, 1643 550, 876, 684, 7644, 1180, 10444, -1414, 7644, -1414, -1414, 1644 -1414, -1414, 561, -1414, 997, 851, -13, 8841, -1414, 10694, 1645 -1414, -1414, 8841, -1414, 8955, 8841, -1414, -1414, 996, -1414, 1646 585, 1003, 455, 1017, -1414, -1414, 9993, 6037, -1414, 419, 1647 -1414, -1414, 11562, -1414, 469, 11562, -1414, -1414, -1414, -1414, 1648 -1414, -1414, -1414, -1414, -1414, -1414, 6244, 6244, -1414, -1414, 1649 4994, 4994, 4994, 4994, 4994, 4994, 4994, 4994, 4994, 4994, 1650 4994, 4994, 4994, 4994, 4994, 4994, 4994, 4994, 3735, 6244, 1651 -1414, 326, 1049, -1414, -1414, 98, 98, -1414, -1414, 9069, 1652 -1414, -1414, 978, 705, -1414, 978, 11581, -1414, -1414, -1414, 1653 3645, 6037, 1016, 1018, -1414, 10554, -1414, -1414, 661, -1414, 1654 1020, 1157, 1025, 2611, 95, 876, -1414, 98, 98, 876, 1655 134, -1414, 98, 98, 978, -1414, -1414, 98, 98, -1414, 1656 900, 10724, 1624, 12005, 69, 227, 10724, -1414, 10864, -1414, 1657 876, -1414, 10414, -1414, 218, 8079, 8079, 8079, 1624, -1414, 1658 5555, 1012, 260, 936, 778, 1021, 1024, -1414, 1026, 3453, 1659 343, -1414, 1115, 1624, 8079, 705, 2082, 705, 748, 534, 1660 900, -1414, -1414, 596, 900, -1414, -1414, -1414, 851, -1414, 1661 900, 301, 10980, -1414, 687, 1042, 700, 1043, -1414, 1044, 1662 301, -1414, -1414, 9532, 301, 1041, 10694, 1045, -1414, 2066, 1663 -1414, 408, 416, 684, -1414, 684, 1047, 4994, -1414, 684, 1664 12005, -1414, -1414, 1053, -1414, -1414, -1414, 705, -1414, 11933, 1665 917, -1414, 8079, 489, 8427, -1414, -1414, 661, 1055, 1056, 1666 1482, 3284, -1414, -1414, 7644, -1414, -1414, 1038, -1414, -1414, 1667 1064, -1414, 1038, 1070, 11778, 6244, 93, 1051, 138, 1074, 1668 1058, 1075, 844, 1069, 1077, -1414, 1079, 1081, 10133, 6775, 1669 -1414, 6244, -1414, 455, 1974, -1414, -1414, -1414, 98, 98, 1670 6104, 6244, 1076, -1414, -1414, 936, 707, -1414, 6244, -1414, 1671 -1414, 677, -1414, -1414, -1414, -1414, -1414, 593, 593, 571, 1672 571, 645, 645, 645, 645, 313, 313, 861, 842, 858, 1673 843, 911, 4994, 847, -1414, 10980, 1083, 1084, 1088, 1049, 1674 -1414, -1414, -1414, -1414, -1414, 10980, 717, 8079, -1414, 10414, 1675 -1414, 7135, 9411, -1414, 10304, 7015, -1414, -1414, 1157, 10980, 1676 945, 1089, 1090, 1095, 1096, 1099, 1100, 1105, -1414, 4392, 1677 2611, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414, 1678 -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414, 978, -1414, 1679 -1414, -1414, 876, -1414, -1414, -1414, -1414, -1414, -1414, -1414, 1680 -1414, 1112, -1414, 1113, 1118, -1414, -1414, -15, 1076, 5555, 1681 -1414, -1414, -1414, 11446, 1116, -1414, -1414, -1414, -1414, -1414, 1682 684, 6369, 1201, -1414, -1414, -1414, -1414, 1103, -15, -1414, 1683 -1414, 978, -1414, -1414, 978, 126, 978, -1414, -1414, -1414, 1684 -1414, -1414, -1414, 9743, -1414, 301, -1414, -1414, 438, 452, 1685 10584, 7255, 2372, 4994, 2870, -1414, -1414, 1127, 39, 1127, 1686 -1414, 684, -1414, 98, -1414, -1414, 10163, 960, -1414, -1414, 1687 -1414, 977, 1143, 1131, -1414, -1414, 1150, 1153, -1414, 489, 1688 1995, -1414, 363, -1414, 3284, 876, -1414, 1160, 7644, 10834, 1689 9069, 1161, -1414, -1414, 1151, 1162, 1156, -1414, 4994, 120, 1690 279, 1163, -1414, 1166, 705, 1166, 6037, 6244, -1414, -1414, 1691 1166, 1165, -1414, 1176, 1182, 1185, 1974, -1414, -1414, -1414, 1692 11446, -1414, -1414, -1414, -1414, 1168, 6244, 1188, 705, 5555, 1693 -1414, 11562, -1414, 705, -1414, -1414, 6244, -1414, 614, 900, 1694 -1414, -1414, -1414, -1414, -1414, -1414, -1414, 936, 917, 9297, 1695 -1414, -1414, 7375, 1187, -1414, 758, 900, -1414, 785, 797, 1696 900, -1414, 399, 5912, -1414, -1414, -1414, 10980, 10980, -1414, 1697 8543, 8543, -1414, 1186, 1189, 1191, 1199, -1414, 1206, 439, 1698 119, 1076, -1414, 705, -1414, 3453, -1414, 6244, 480, -1414, 1699 6655, 1211, 1212, 11388, 1213, 1217, -6, 58, 117, 6244, 1700 1221, 301, 6244, 6244, 1215, 1222, 610, 1203, -1414, -1414, 1701 -1414, 1218, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414, 1702 -1414, 684, 1226, 6244, -1414, 10980, 10980, 98, 1228, -1414, 1703 10273, -1414, -1414, 864, -1414, 2870, -1414, -1414, -1414, -1414, 1704 2066, -1414, -1414, 1230, -1414, -1414, -1414, -1414, 1231, 1995, 1705 -1414, -1414, 1223, -1414, 1038, -1414, -1414, 2082, 1235, -1414, 1706 -1414, -1414, 744, 1237, -1414, 138, 1245, 4994, 1232, 138, 1707 138, 1250, 1246, -1414, 9993, 825, 900, -1414, -1414, 1026, 1708 6244, 1251, 1168, 536, 161, 1261, -1414, 1246, -1414, 1254, 1709 1261, -1414, -1414, 1257, -1414, -1414, 978, 1270, 1271, 6895, 1710 1272, 1275, 1280, -1414, -1414, 1283, -1414, -1414, 978, -1414, 1711 -1414, -1414, -1414, 978, 6244, 6244, 917, 1282, -1414, -1414, 1712 -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414, 1713 4994, 4994, 1284, 1286, 1261, -1414, -1414, 684, -1414, -1414, 1714 -1414, 5291, 10834, 6244, 6244, 1335, 6244, -1414, 1263, -1414, 1715 1267, -1414, 1281, 6244, 1288, 6244, 1039, 1290, 28, 98, 1716 5165, 856, -1414, -1414, 6369, 1287, 488, -1414, -1414, -1414, 1717 -1414, -1414, -1414, -1414, -1414, -1414, 11206, -1414, 8659, 1304, 1718 -1414, -1414, 10834, 490, 498, -1414, 1301, 1306, 851, 1317, 1719 -1414, 418, -1414, -1414, 6244, 1316, -1414, -1414, 978, 1314, 1720 -1414, -1414, 1318, 589, 691, 705, 1320, 1322, -1414, 1329, 1721 -1414, 10980, -1414, -1414, -1414, -1414, -1414, 1330, -1414, 10980, 1722 10980, 10980, -1414, -1414, 1332, -1414, 1333, 1336, 1339, 517, 1723 8195, 8311, -1414, -1414, 123, -1414, 1343, 1348, -1414, 8775, 1724 755, 768, 1342, 770, 6525, -1414, -1414, -1414, 508, -1414, 1725 777, 1352, 1353, 301, 1403, 933, -1414, -1414, 6244, -1414, 1726 11388, 11562, -1414, -1414, -1414, 1359, 1364, -1414, -1414, -1414, 1727 1363, -1414, -1414, -1414, -1414, -1414, -1414, 10834, 851, 273, 1728 -1414, 1347, 851, 1168, 268, 10980, -1414, -1414, -1414, -1414, 1729 -1414, -1414, -1414, -1414, 1365, -1414, -1414, -1414, -1414, -1414, 1730 -1414, 1368, 1371, -1414, -1414, -1414, -1414, -1414, -1414, -1414, 1731 1375, -1414, 1374, -1414, -1414, 11388, 91, 6244, 11388, -1414, 1732 1385, 6244, -1414, 288, 1402, 1405, -1414, -1414, 1390, 1393, 1733 1376, -1414, 882, -1414, -1414, -1414, 1624, 2082, 1388, 869, 1734 884, 4994, -1414, 803, 1394, 6244, -1414, 705, 705, 1399, 1735 1406, 1407, 1409, -1414, -1414, 8543, 1397, -1414, 1473, 4994, 1736 1404, -1414, -1414, 11299, -1414, 811, -1414, 1395, 11388, 1401, 1737 -1414, -1414, 1410, -1414, 1412, -1414, 1433, 1441, -1414, 1415, 1738 10834, -1414, -1414, -1414, 851, 705, 1429, 1417, 1436, -1414, 1739 1446, 1261, 1261, -1414, -1414, -1414, -1414, -1414, 11388, 278, 1740 -1414, 910, -1414, -1414, 7730, -1414, -1414, 1435, 6244, -1414, 1741 6244, 7730, 301, 10694, 301, 10694, 1462, -1414, 1463, -1414, 1742 -1414, 1460, 869, -1414, 812, -1414, -1414, 6244, -1414, 1465, 1743 1466, -1414, 4994, 4994, -1414, -1414, 1007, 37, -1414, -1414, 1744 1447, -1414, 1007, -1414, -1414, 2485, 705, -1414, -1414, 301, 1745 10694, 301, 10694, 1472, 1450, 705, -1414, -1414, -1414, -1414, 1746 -1414, 11299, 1468, 1007, 7847, 6244, 11210, 1475, 1007, 1477, 1747 2485, 2994, -1414, -1414, -1414, 1495, -1414, -1414, -1414, -1414, 1748 9069, -1414, -1414, -1414, 11077, -1414, 11299, -1414, -1414, 1476, 1749 10984, -1414, -1414, 11210, 301, 2994, 301, 1502, 1506, 813, 1750 -1414, 11077, -1414, -1414, -1414, 10984, -1414, -1414, -1414, 301, 1751 301, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414 1596 7316, 8697, -1310, 16, -1310, -1310, -1310, -1310, -1310, -1310, 1597 -1310, 22, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, 1598 -1310, -1310, -1310, -1310, -1310, -1310, 101, 101, 101, 1152, 1599 941, 64, 7548, 141, -1310, -1310, -1310, -1310, -1310, 87, 1600 -1310, -1310, -1310, 868, 134, -1310, -1310, -1310, -1310, 9158, 1601 -1310, -1310, -1310, -1310, 149, 144, -1310, 1337, -1310, -1310, 1602 -1310, -1310, 139, 935, 260, 102, 2892, -1310, -1310, 9196, 1603 790, -1310, -1310, -1310, 904, 293, 5512, 547, 778, 904, 1604 1166, -1310, -1310, 554, 624, -1310, 904, 1343, -1310, 187, 1605 -1310, 308, 336, -1310, -1310, -1310, -1310, 251, 144, 101, 1606 -1310, 101, -1310, -1310, -1310, -1310, 8923, 1337, -1310, -1310, 1607 1337, -1310, 337, -1310, 9043, -1310, -1310, 1053, 9381, -1310, 1608 1729, 1729, 1729, -1310, -1310, -1310, 101, -1310, -1310, -1310, 1609 410, 413, 418, -1310, -1310, -1310, 433, -1310, -1310, -1310, 1610 -1310, -1310, 468, 477, -1310, -1310, 37, 8666, 2607, 742, 1611 369, 496, 509, 523, 530, 535, 8584, 6836, 536, 546, 1612 -1310, 9234, -1310, -1310, -1310, -1310, 561, -1310, 245, 4633, 1613 4633, -1310, 562, 361, -1310, -1310, -1310, -1310, 574, 383, 1614 408, 429, 101, 577, -1310, -1310, 935, 3015, 664, -1310, 1615 86, -1310, 101, 101, 144, -1310, -1310, 89, -1310, 101, 1616 101, -1310, 3541, 634, 653, 1729, 6748, -1310, -1310, 623, 1617 9158, -1310, -1310, 904, -1310, -1310, -1310, 144, -1310, 1337, 1618 149, -1310, 7737, -1310, 1729, 1729, 1729, 144, -1310, 1152, 1619 -1310, 5996, -1310, -1310, 642, 1729, -1310, 1729, -1310, 87, 1620 8666, -1310, 672, -1310, 941, 697, 1729, -1310, 1152, 699, 1621 702, -1310, 7548, 567, -1310, -1310, -1310, 9125, -1310, -1310, 1622 4167, -1310, 664, 10, 5116, 9381, 1053, 3541, -1310, 94, 1623 -1310, -1310, 9043, 1337, 715, 10741, -1310, -1310, 11, -1310, 1624 10483, 740, 772, 10231, 759, 10288, 10307, -1310, 763, -1310, 1625 -1310, -1310, -1310, 10364, 10364, 8440, 765, -1310, -1310, -1310, 1626 -1310, -1310, -1310, 799, -1310, 616, 2256, 8779, 10288, -1310, 1627 475, 860, 810, 276, 913, 766, 767, 793, 832, 41, 1628 -1310, -1310, 807, 704, -1310, 331, -1310, -1310, 2607, -1310, 1629 -1310, 242, 835, -1310, 421, 835, 841, 87, -1310, -1310, 1630 846, 8923, -1310, 847, 857, 8892, -1310, -1310, 1352, 2069, 1631 8155, 6748, 904, -1310, 904, 1729, 1729, -1310, -1310, -1310, 1632 -1310, -1310, -1310, 1729, 8923, 1337, -1310, -1310, 9419, 1457, 1633 -1310, 7886, -1310, -1310, -1310, -1310, -1310, -1310, -1310, 875, 1634 10098, 10288, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, 1635 -1310, -1310, -1310, -1310, -1310, -1310, 1053, -1310, 928, 862, 1636 891, 893, 1023, 916, 937, 951, 3015, -1310, -1310, 942, 1637 149, 958, -1310, -1310, 970, -1310, -1310, -1310, 9125, -1310, 1638 -1310, -1310, -1310, -1310, 3541, -1310, 8666, 8666, -1310, 1729, 1639 1053, 6867, 1337, 8228, -1310, -1310, -1310, -1310, 9125, 10, 1640 -1310, -1310, 904, 144, -1310, -1310, 9125, -1310, 6513, -1310, 1641 -1310, 1729, 1729, 382, 5342, 969, 972, 960, 1031, 1729, 1642 -1310, -1310, -1310, -1310, 9605, -1310, 450, 6629, -1310, 144, 1643 1033, -1310, 1053, 10565, 10155, -1310, -1310, -1310, -1310, 1039, 1644 3541, -1310, 8301, 664, 7432, -1310, -1310, -1310, 984, 626, 1645 807, 941, 10741, 606, 9043, -1310, 10741, -1310, -1310, -1310, 1646 -1310, 690, -1310, 1044, 772, 255, 8440, -1310, 9457, -1310, 1647 -1310, 8440, -1310, 8553, 8440, -1310, -1310, 1042, -1310, 722, 1648 1047, 818, 1048, -1310, -1310, 9310, 6479, -1310, 321, -1310, 1649 -1310, 5116, -1310, 602, 5116, -1310, -1310, -1310, -1310, -1310, 1650 -1310, -1310, -1310, -1310, -1310, -1310, 5116, -1310, -1310, 10288, 1651 10288, 10288, 10288, 10288, 10288, 10288, 10288, 10288, 10288, 10288, 1652 10288, 10288, 10288, 10288, 10288, 10288, 10288, 2426, 5116, -1310, 1653 704, 830, -1310, -1310, 101, 101, -1310, -1310, 8666, -1310, 1654 -1310, 970, 567, -1310, 970, 10212, -1310, -1310, -1310, 4524, 1655 6479, 1049, 1054, -1310, 9381, -1310, -1310, 561, -1310, 1056, 1656 774, 1073, 2515, 95, 807, -1310, 101, 101, 807, 98, 1657 -1310, 101, 101, 970, -1310, -1310, 101, 101, -1310, 835, 1658 9490, 1337, 10710, 283, 326, 9490, -1310, 4167, -1310, 807, 1659 -1310, 8923, -1310, 80, 7852, 7852, 7852, 1337, -1310, 4787, 1660 1065, 875, 744, 1066, 1067, -1310, 1070, 4633, 333, -1310, 1661 1134, 1337, 7852, 567, 1053, 567, 664, 494, 835, -1310, 1662 -1310, 584, 835, -1310, -1310, -1310, 772, -1310, 835, 144, 1663 9605, -1310, 737, 1083, 750, 1090, -1310, 1089, 144, -1310, 1664 -1310, 9125, 144, 1088, 9457, 1092, -1310, 1677, -1310, 441, 1665 448, 941, -1310, 941, 1091, 10288, -1310, 941, 10710, -1310, 1666 -1310, 1098, -1310, -1310, -1310, 567, -1310, 10638, 857, -1310, 1667 7852, 853, 8155, -1310, -1310, 561, 1095, 1097, 984, 3316, 1668 -1310, -1310, 10741, -1310, -1310, 1099, -1310, -1310, 1105, -1310, 1669 1099, 1111, 10483, 5116, 62, 1102, 167, 1113, 1121, 1129, 1670 1130, -1310, 1131, 1132, 9348, 6598, -1310, 5116, -1310, 818, 1671 978, -1310, -1310, -1310, 101, 101, 5540, 5116, 1135, -1310, 1672 -1310, 757, -1310, 5116, -1310, -1310, 914, -1310, -1310, -1310, 1673 -1310, 475, 475, 860, 860, 810, 810, 810, 810, 276, 1674 276, 913, 766, 767, 793, 832, 10288, 282, -1310, 9605, 1675 1136, 1137, 1140, 830, -1310, -1310, -1310, -1310, -1310, 9605, 1676 779, 7852, -1310, 8923, -1310, 6955, 9005, -1310, 7886, 6836, 1677 -1310, -1310, 774, 9605, 1063, 1142, 1143, 1145, 1146, 1147, 1678 1148, 1154, -1310, 3759, 2515, -1310, -1310, -1310, -1310, -1310, 1679 -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, 1680 -1310, -1310, 970, -1310, -1310, -1310, 807, -1310, -1310, -1310, 1681 -1310, -1310, -1310, -1310, -1310, 1156, -1310, 1159, 1160, -1310, 1682 -1310, 149, 1135, 4787, -1310, -1310, -1310, 10098, 1157, -1310, 1683 -1310, -1310, -1310, 941, 6225, 1247, -1310, -1310, -1310, -1310, 1684 1150, 149, -1310, -1310, 970, -1310, -1310, 970, 137, 970, 1685 -1310, -1310, -1310, -1310, -1310, -1310, 9272, -1310, 144, -1310, 1686 -1310, 451, 452, 9419, 7074, 2178, 10288, 3429, -1310, -1310, 1687 1149, 39, 1149, -1310, 941, -1310, 101, -1310, -1310, 8073, 1688 960, -1310, -1310, -1310, 972, 1168, 1169, -1310, -1310, 1170, 1689 1172, -1310, 853, 1305, -1310, 359, -1310, 3316, 807, -1310, 1690 1177, 10741, 9528, 8666, 1180, -1310, -1310, 1175, 1182, 1164, 1691 -1310, 10288, 56, 233, 1179, -1310, 1183, 567, 1183, -1310, 1692 -1310, 1183, 1184, -1310, 1189, 1190, 1192, 978, -1310, -1310, 1693 -1310, 10098, -1310, -1310, -1310, -1310, 1188, 5116, 1193, 567, 1694 -1310, 5116, -1310, 567, -1310, -1310, 5116, -1310, 595, 835, 1695 -1310, -1310, -1310, -1310, -1310, -1310, -1310, 875, 857, 8892, 1696 -1310, -1310, 7193, 1196, -1310, 622, 835, -1310, 644, 649, 1697 835, -1310, 1729, 4053, -1310, -1310, -1310, 9605, 9605, -1310, 1698 8228, 8228, -1310, 1194, 1195, 1198, 1199, -1310, 1200, 531, 1699 27, 1135, -1310, 567, -1310, 4633, -1310, 5116, 453, -1310, 1700 6359, 1213, 1217, 10041, 1222, 1223, 43, 49, 106, 5116, 1701 1228, 144, 5116, 5116, 1208, 1237, 142, 1218, -1310, -1310, 1702 -1310, 1236, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, 1703 -1310, 941, 1249, 5116, -1310, 9605, 9605, 101, 1252, -1310, 1704 8810, -1310, -1310, 987, -1310, 3429, -1310, -1310, -1310, -1310, 1705 1677, -1310, -1310, 1253, -1310, -1310, -1310, -1310, 1254, 1305, 1706 -1310, -1310, 1239, -1310, 1099, -1310, -1310, 1053, 1258, -1310, 1707 -1310, -1310, 806, 1262, -1310, 167, 1267, 10288, 1248, 167, 1708 167, 1273, 9310, 693, 835, -1310, -1310, 1070, 5116, 1274, 1709 1188, 208, 157, 1269, -1310, -1310, 1278, 1269, -1310, -1310, 1710 1282, -1310, -1310, 970, 1286, 1288, 6717, 1287, 1289, 1291, 1711 -1310, -1310, 1290, -1310, -1310, 970, -1310, -1310, -1310, -1310, 1712 970, 5116, 5116, 857, 1292, -1310, -1310, -1310, -1310, -1310, 1713 -1310, -1310, -1310, -1310, -1310, -1310, -1310, 10288, 10288, 1294, 1714 1295, 1269, -1310, -1310, 941, -1310, -1310, -1310, 5073, 9528, 1715 5116, 5116, 1370, 5116, -1310, 1298, -1310, 1299, -1310, 1302, 1716 5116, 1306, 5116, 1123, 1307, 30, 101, 5821, 1435, -1310, 1717 -1310, 6225, 1303, 456, -1310, -1310, -1310, -1310, -1310, -1310, 1718 -1310, -1310, -1310, 9861, -1310, 8301, 1330, -1310, -1310, 9528, 1719 463, 481, -1310, 1328, 1314, 772, 1341, -1310, 306, -1310, 1720 -1310, -1310, -1310, 970, 1332, -1310, -1310, 1342, 753, 834, 1721 567, 1345, -1310, 1350, -1310, 9605, -1310, -1310, -1310, -1310, 1722 -1310, 1351, -1310, 9605, 9605, 9605, -1310, -1310, 1359, -1310, 1723 1362, 1365, 1366, 557, 7925, 8040, -1310, -1310, 420, -1310, 1724 1368, 1371, -1310, 8374, 815, 844, 1346, 866, 6094, -1310, 1725 -1310, -1310, 485, -1310, 888, 1369, 1375, 144, 1417, 1051, 1726 -1310, -1310, 5116, -1310, 10041, 5116, -1310, -1310, -1310, 1377, 1727 1379, -1310, -1310, -1310, 1376, -1310, -1310, -1310, -1310, -1310, 1728 -1310, 9528, 772, 195, -1310, 1353, 772, 9605, -1310, -1310, 1729 -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, 1730 -1310, -1310, 1384, 1388, -1310, -1310, -1310, -1310, -1310, -1310, 1731 -1310, 1394, -1310, 1397, -1310, -1310, 10041, 217, 5116, 10041, 1732 -1310, 1400, 5116, -1310, 289, 1421, 1423, -1310, -1310, 1403, 1733 1415, 1393, -1310, 1001, -1310, -1310, -1310, 1337, 1053, 1412, 1734 799, 323, 10288, -1310, 953, -1310, 567, 567, 1418, 1425, 1735 1426, 1428, -1310, -1310, 8228, 1427, -1310, 1497, 10288, 1420, 1736 -1310, -1310, 9953, -1310, 955, -1310, 1419, 10041, 1424, -1310, 1737 -1310, 1442, -1310, 1445, -1310, 1461, 1462, -1310, 1430, 9528, 1738 -1310, -1310, -1310, 772, 567, 1453, 1436, 1459, 1269, 1269, 1739 -1310, -1310, -1310, -1310, -1310, 10041, 204, -1310, 370, -1310, 1740 -1310, 3684, -1310, -1310, 1439, 5116, -1310, 5116, 3684, 144, 1741 9457, 144, 9457, 1463, -1310, 1465, -1310, -1310, 1464, 799, 1742 -1310, 968, -1310, -1310, -1310, 1460, 1466, -1310, 10288, 10288, 1743 -1310, -1310, 1075, 122, -1310, -1310, 1444, -1310, 1075, -1310, 1744 -1310, 2191, 567, -1310, -1310, 144, 9457, 144, 9457, 1472, 1745 1450, 567, -1310, -1310, -1310, -1310, 9953, 1469, 1075, 7664, 1746 5116, 9865, 1470, 1075, 1479, 2191, 3509, -1310, -1310, -1310, 1747 1482, -1310, -1310, -1310, -1310, 8666, -1310, -1310, -1310, 9732, 1748 -1310, 9953, -1310, -1310, 1468, 9644, -1310, -1310, 9865, 144, 1749 3509, 144, 1484, 1486, 976, -1310, 9732, -1310, -1310, -1310, 1750 9644, -1310, -1310, -1310, 144, 144, -1310, -1310, -1310, -1310, 1751 -1310, -1310, -1310, -1310 1752 1752 }; 1753 1753 … … 1755 1755 static const yytype_int16 yypgoto[] = 1756 1756 { 1757 -1 414, 4377, 3077, -1414, 1645, -1414, 305, 958, -11, -1414,1758 5 52, -530, -487, -944, -142, 3604, 0, -1414, 1277, 511,1759 5 29, 298, 549, 1057, 1060, 1054, 1062, 1065, -1414, -211,1760 - 327, 5116, -961, -725, -952, -1414, -200, -594, 572, -1414,1761 1379, -1414, 397, -1413, -1414, -1414, 129, -1414, -1160, -935,1762 24 6, -1414, -1414, -1414, -1414, 68, -1131, -1414, -1414, -1414,1763 -1 414, -1414, -1414, 321, -1152, 33, -1414, -696, -1414, 506,1764 296, -1 414, 169, -1414, -339, -1414, -1414, -1414, 558, -728,1765 -1 414, -1414, 19, -974, 177, 2303, -1414, -1414, -1414, -91,1766 -1 414, 166, 269, -194, 1705, 3615, -1414, -1414, 36, 224,1767 6 28, -235, 1694, -1414, 1557, -1414, -1414, 200, 2163, -1414,1768 2 278, 185, -1414, -1414, -1414, -607, -1414, 956, 957, 545,1769 7 25, -320, -1414, -1414, -1414, 950, 719, -493, -1414, -472,1770 - 355, 1296, -1414, -1414, -899, -946, 440, 524, 1067, 168,1771 -1 414, 1040, 317, -281, -198, -141, 672, 781, -1414, 1005,1772 -1 414, 2834, 55, -450, 932, -1414, -1414, 712, -1414, -228,1773 -1 414, 104, -1414, -1414, -1414, -1285, 420, -1414, -1414, -1414,1774 11 78, -1414, 31, -1414, -1414, -862, -94, -1364, -152, 1641,1775 -1 414, 3733, -1414, 927, -1414, -170, 493, -184, -183, -181,1776 7, - 42, -36, -33, 1610, 4, 10, 14, -143, -177,1777 -1 72, -162, -161, -319, -513, -508, -498, -547, -310, -528,1778 -1 414, -1414, -511, 1101, 1102, 1110, 1575, 4802, -565, -560,1779 -55 9, -541, -551, -1414, -506, -744, -736, -732, -593, -267,1780 -2 27, -1414, -1414, 624, 294, -85, -1414, 3753, 44, -634,1781 - 1731757 -1310, 4585, 3220, -1310, 1680, -1310, 79, 965, -162, -1310, 1758 542, -525, -472, -928, -58, 5006, 0, -1310, 115, 571, 1759 588, 220, 578, 1041, 1045, 1037, 1040, 1043, -1310, 682, 1760 -568, 4467, -949, -1310, -743, 627, -136, -680, 399, -1310, 1761 364, -1310, 400, -1052, -1310, -1310, 143, -1310, -1280, -1058, 1762 249, -1310, -1310, -1310, -1310, 74, -1199, -1310, -1310, -1310, 1763 -1310, -1310, -1310, 317, -1213, 36, -1310, -398, -1310, 501, 1764 296, -1310, 175, -1310, -322, -1310, -1310, -1310, 558, -827, 1765 -1310, -1310, 14, -963, 60, 1949, -1310, -1310, -1310, -66, 1766 -1310, 19, 1219, -202, 1852, 4238, -1310, -1310, 54, 75, 1767 689, -242, 1416, -1310, 1975, -1310, -1310, 158, 2131, -1310, 1768 2701, 1038, -1310, -1310, -1310, -621, -1310, 944, 946, 541, 1769 713, -254, -1310, -1310, -1310, 938, 714, -169, -1310, -117, 1770 -134, 1167, -1310, -1310, -857, -878, 837, 910, 1055, 25, 1771 -1310, 900, 597, -39, -190, -145, 668, 773, -1310, 993, 1772 -1310, 2728, 1561, -434, 920, -1310, -1310, 708, -1310, -238, 1773 -1310, 241, -1310, -1310, -1310, -1226, 414, -1310, -1310, -1310, 1774 1165, -1310, 35, -1310, -1310, -830, -111, -1309, -151, 3288, 1775 -1310, 3069, -1310, 921, -1310, -170, 169, -182, -181, -166, 1776 7, -35, -33, -32, 813, 2, 29, 44, -122, -165, 1777 -164, -158, -153, -314, -519, -491, -490, -538, -301, -501, 1778 -1310, -1310, -512, 1078, 1084, 1085, 2540, 5063, -571, -588, 1779 -558, -543, -557, -1310, -503, -733, -723, -722, -570, -311, 1780 -274, -1310, -1310, 240, 176, -77, -1310, 3991, 136, -632, 1781 -222 1782 1782 }; 1783 1783 … … 1785 1785 positive, shift that token. If negative, reduce the rule which 1786 1786 number is the opposite. If YYTABLE_NINF, syntax error. */ 1787 #define YYTABLE_NINF -52 61787 #define YYTABLE_NINF -521 1788 1788 static const yytype_int16 yytable[] = 1789 1789 { 1790 50, 115, 151, 400, 401, 771, 402, 99, 152, 973, 1791 403, 153, 429, 454, 874, 404, 756, 974, 408, 1080, 1792 116, 975, 262, 441, 269, 405, 406, 744, 850, 384, 1793 385, 605, 50, 51, 1142, 982, 70, 411, 833, 99, 1794 610, 825, 826, 727, 149, 409, 499, 732, 154, 1150, 1795 50, 31, 1398, 836, 155, 1462, 832, 163, 156, 843, 1796 827, 800, 282, 145, 188, 51, 1208, 211, 70, 528, 1797 50, 195, 343, 824, 218, 567, 1200, 228, 31, 597, 1798 671, -235, -235, 400, 401, 1184, 402, 926, 821, 221, 1799 403, 1318, 170, 822, 168, 404, 520, 737, 408, 1194, 1800 680, 1217, 1218, 823, 738, 405, 406, 115, 684, 426, 1801 568, 476, 478, 1550, 31, 115, 171, 124, 268, 273, 1802 283, 254, 217, 412, 31, 409, 1209, 410, 715, 1462, 1803 1210, 1182, 1183, 1561, 31, 1419, 1420, 31, 629, 244, 1804 1565, 955, 633, 865, 866, 151, 675, 677, 308, 149, 1805 412, 152, -235, 1079, 153, 1481, 163, 115, 346, 168, 1806 1319, 884, 211, 863, 863, 863, 64, 472, 973, 374, 1807 722, 204, 477, 31, 217, 528, 974, 57, 117, 1260, 1808 975, 853, 863, 920, 420, 854, 412, 188, 188, 1212, 1809 1211, 154, 328, 578, 482, 163, 412, 155, 64, 579, 1810 78, 156, 528, 268, 834, 1421, 602, 821, 528, 57, 1811 956, 50, 822, 669, 731, 1190, 716, 217, 163, 938, 1812 293, 205, 823, 211, 71, 151, 179, 674, 676, 1127, 1813 444, 152, 78, 746, 153, 1213, 1087, 666, -113, -113, 1814 863, 308, 1191, 841, 212, 602, 1263, 222, 580, 958, 1815 412, 125, 216, 50, -113, 437, 71, 589, 825, 826, 1816 99, 273, 144, 1466, 667, 1026, 273, 268, 268, 836, 1817 118, 1152, 506, 115, 1264, 163, 263, 827, 217, 264, 1818 864, 864, 864, 1025, 464, 328, 51, 343, 1001, 70, 1819 1013, 214, 1184, 610, 108, 108, 308, 1103, 804, 864, 1820 1090, 146, 1343, 658, 216, 821, 113, 520, 308, 378, 1821 822, 666, 520, 148, 1004, 520, 217, 437, 725, 161, 1822 823, 217, 1199, 1508, 572, 379, 108, 477, 472, 149, 1823 1200, 673, 1419, 1420, 448, 863, 374, 678, 667, 855, 1824 -470, 157, 115, 856, 905, 1184, 346, 216, 472, 569, 1825 603, 621, 168, 461, 597, 528, 472, 864, 1537, 597, 1826 1539, 1466, 1080, 810, 108, 626, 1466, 388, 793, 626, 1827 930, -470, 115, -470, 1492, 833, 260, -470, -113, 825, 1828 826, 685, 1401, 389, 161, 1405, 1466, 579, 440, 1128, 1829 599, 1182, 1183, 1466, 715, 1551, 1129, 268, 827, -113, 1830 442, 1191, 1430, 557, 558, 859, 217, 188, 216, 8, 1831 9, 10, 11, 12, 374, 173, 850, 324, 183, 64, 1832 43, 252, 1566, 876, 473, 268, 340, 308, 308, 1247, 1833 57, 268, 837, 1251, 626, 571, 840, 412, 31, 559, 1834 560, 343, 484, 391, 46, 47, 216, 443, 494, 501, 1835 495, 216, 864, 78, 877, 115, 644, 857, 78, 392, 1836 878, 860, 393, 1451, 1452, 1214, 34, 1170, 1172, 1184, 1837 1138, 328, 328, 268, 203, 855, 431, 71, 394, 1110, 1838 435, 268, 716, 626, 395, 50, 929, 217, 374, 721, 1839 1200, 112, 99, 98, 736, 115, 1079, 1200, 1114, 499, 1840 396, 249, 41, 42, 1148, 1259, 888, 308, 875, 115, 1841 324, 1024, 308, -291, 308, 308, 1457, 179, 51, 917, 1842 610, 70, 754, -521, 921, 98, 115, 346, 1341, 217, 1843 763, 583, 923, 412, 630, 1342, 216, 150, 634, 328, 1844 922, 112, 435, 98, 1026, 489, 919, 108, 924, 43, 1845 1200, -106, 41, 42, 921, -106, 715, 191, 328, 466, 1846 98, 1521, 886, 98, 753, 522, 412, 1526, 923, 254, 1847 1091, 572, 572, 46, 47, 214, 1381, 161, 265, 308, 1848 769, 995, 1006, 43, 1092, 473, 1094, 810, 1546, 1138, 1849 626, 346, 472, 1553, 920, 621, 1197, 1097, 939, 1097, 1850 602, 603, 331, 603, 1197, 473, 1332, 46, 47, 332, 1851 706, 588, 1198, 473, 1334, 594, 707, 216, 935, 78, 1852 1324, 626, 1333, 328, 751, 1024, 626, 812, 621, 1367, 1853 1335, 1126, 626, 1368, 627, 626, 626, 626, 631, 78, 1854 1382, 340, 98, 889, 716, 412, -113, 78, -113, 713, 1855 217, 64, -113, -10, 626, 98, 268, 895, 1039, 216, 1856 723, 112, 57, 343, -444, 851, 724, -113, -113, 1037, 1857 599, 733, 41, 42, 165, 1181, 810, 734, 217, 1029, 1858 399, 191, 288, 217, -445, 78, 115, 254, 330, 914, 1859 1084, 553, 554, 41, 42, 750, 324, 324, 214, 231, 1860 1348, 751, 929, 232, 98, 892, 236, 412, 238, 71, 1861 1379, 550, 626, 940, 621, 247, 98, 551, 552, 515, 1862 721, 721, 1122, 1154, 689, 412, 278, 959, 400, 401, 1863 280, 402, 1044, 555, 556, 403, 1498, 118, 281, 165, 1864 404, 333, 597, 1498, 408, 334, 98, 929, 115, 346, 1865 405, 406, 335, 754, 754, 217, 112, 336, 141, 142, 1866 480, 372, 489, 112, 324, 373, 489, 41, 42, 217, 1867 377, 409, 1111, 113, 41, 42, 522, 112, 522, 108, 1868 216, 522, 386, 324, 522, 1151, 973, 1429, 41, 42, 1869 852, 1392, 994, 991, 974, 340, 1547, 899, 975, 572, 1870 1249, 390, 1350, 751, 715, 398, 867, 626, 216, 626, 1871 901, 1009, 410, 216, 626, 346, 751, 990, 603, 743, 1872 427, 883, 98, 991, 739, 343, 740, 1003, 1174, 741, 1873 603, 428, 747, 707, 764, 436, 1039, 743, 433, 770, 1874 743, 451, 231, 604, 529, 530, 531, 443, 324, 473, 1875 112, 812, 141, 142, 1245, 781, 782, 783, 784, 808, 1876 579, 41, 42, 1292, 1293, 1375, 217, 1166, 532, 412, 1877 533, 751, 534, 535, 1500, 473, 1501, -368, 1376, -397, 1878 1378, 308, 462, 78, 751, 216, 751, 1383, 466, 870, 1879 849, 505, 716, 751, 1169, 594, 602, 436, 463, 216, 1880 191, 858, 501, 626, 1195, 704, 1171, 810, 602, 78, 1881 115, 346, 914, 1447, 914, 713, 929, 70, 485, 1444, 1882 524, 1467, 1514, 1571, 214, 666, 115, 751, 1515, 579, 1883 917, 1548, 165, 293, 1256, 1370, 412, 509, 214, 940, 1884 940, 529, 530, 531, 721, 254, 330, 412, 514, 115, 1885 308, 528, 667, 561, 562, 689, 526, 919, 49, 114, 1886 885, 563, 887, 751, 996, 532, 346, 533, 1115, 534, 1887 1321, 716, 565, 37, 330, 412, 754, 40, 98, 929, 1888 929, 231, 604, 236, 41, 42, 564, 114, 114, 705, 1889 49, 1388, 1389, 489, 328, 43, 216, 1439, 991, 1533, 1890 1444, 1445, 49, 1300, 1301, 566, 1303, 569, 49, 346, 1891 44, 339, 934, 1308, -441, 1310, 49, 340, 587, 46, 1892 47, 694, 49, 1240, 590, 49, 1493, 1494, 49, -3, 1893 626, 626, 420, 662, 412, 214, 2, 208, 4, 5, 1894 6, 7, 114, 114, 482, 330, 412, 64, 639, 1138, 1895 308, 1419, 1420, 851, 834, 330, 602, 659, 57, 8, 1896 9, 10, 11, 12, 777, 778, 49, 217, 668, 49, 1897 143, 231, 660, 661, 1446, 663, 49, 713, 1005, 693, 1898 664, 78, 665, 808, 779, 780, 1202, 670, 31, 259, 1899 115, 697, 1459, 695, 820, 914, 604, 1311, 1312, 1313, 1900 914, 35, 699, 36, -239, 71, 735, 49, 748, 940, 1901 785, 786, 704, 752, 959, 49, 34, 268, 959, 959, 1902 49, 1349, 1351, 1352, 243, 246, 1116, 760, 813, -12, 1903 814, 524, 817, 524, 626, 343, 524, 828, -13, 524, 1904 -292, 872, 873, 43, 880, 49, 49, 8, 9, 10, 1905 11, 12, 900, 902, 724, 907, 903, 910, 571, 346, 1906 412, 49, 928, -418, -3, 1519, 1459, 46, 47, 49, 1907 -525, 943, 808, 950, 964, 108, 31, 1425, 49, 340, 1908 952, 49, 918, 957, 963, 965, 967, 968, 114, 969, 1909 929, 970, 986, 998, 999, 689, 705, 216, 1000, 1015, 1910 1016, 273, 115, 114, 34, 1017, 1018, 114, 929, 1019, 1911 1020, 49, 114, 820, 604, 1021, 473, 489, 1117, 324, 1912 115, 221, 1032, -406, 308, 49, 49, 57, -405, 37, 1913 1081, 1046, 49, 40, 1083, 704, 443, 1339, 626, 49, 1914 41, 42, 115, 108, 913, 704, 112, 1105, 141, 240, 1915 78, 43, 112, 1104, 141, 142, 217, 41, 42, 704, 1916 70, 1115, 1106, 41, 42, 1107, 818, 751, 602, 1131, 1917 1113, 1123, 1124, 1125, 71, 46, 47, 1134, 849, 1130, 1918 980, 929, 929, 241, 1140, 458, 1135, 49, 242, 728, 1919 626, 626, 1136, 1144, 729, 1137, 743, 1164, 1144, 273, 1920 1143, 1187, 1185, 1442, 308, 1186, -293, 49, 49, 1188, 1921 693, 820, 1559, 8, 9, 10, 11, 12, 1189, 705, 1922 1203, 1204, 1206, 604, 49, 713, 1207, 1399, 49, 705, 1923 1215, 1399, 1219, -3, 1220, 1222, 1227, 115, 1232, 645, 1924 1202, 1237, 31, 705, 108, 1235, 400, 401, 1144, 402, 1925 1241, 1246, 494, 403, 217, 49, 1115, 1248, 404, 689, 1926 1253, 408, 1254, 1261, 1250, 49, 1268, 1270, 405, 406, 1927 34, 2, 208, 4, 5, 6, 7, 1265, 212, 222, 1928 1272, 1273, 1302, 49, 1274, 666, 216, 1275, 409, 49, 1929 64, 49, 1276, 1278, 1285, 1305, 1294, 268, 1295, 1306, 1930 230, 57, 1323, 808, 713, 1093, 131, 918, 132, 133, 1931 134, 1532, 667, 1307, 1330, 626, 1336, 41, 42, 1116, 1932 1309, 646, 1317, 1338, 78, 214, 114, 1340, 1344, 1346, 1933 1347, 49, 1353, 1482, 1354, 175, 35, 604, 36, 49, 1934 115, 1355, 1357, 49, 1363, 1364, 1365, 49, 71, 1366, 1935 114, 1377, 114, 1068, 37, 1373, 176, 177, 40, 1115, 1936 1374, 1384, 1385, 1313, 115, 41, 42, 704, 704, 1393, 1937 473, 115, 645, 115, 1394, 115, 442, 1395, 255, 1402, 1938 1413, 57, 1405, 1414, 216, -407, 1417, 114, 151, 340, 1939 645, 373, 114, 645, 152, 1428, 108, 153, 1432, 1436, 1940 1202, 1434, 1437, 1443, 78, 1531, 1448, 1202, 1438, 1453, 1941 115, 1117, 115, 1368, 1116, 1458, 1454, 1455, 108, 1456, 1942 1472, 1463, 1474, 443, 115, 704, 704, 1468, 71, 1476, 1943 1531, 1531, 726, 1470, 730, -294, 108, 1478, 163, 1485, 1944 308, 114, 8, 9, 10, 11, 12, 1480, 49, 1486, 1945 693, 705, 705, 1487, 37, 1531, 1488, 76, 40, 49, 1946 1202, 49, 374, 511, 1441, 41, 42, 1499, 1144, 1144, 1947 1144, 31, 1509, 1511, 418, 1513, 43, 1517, 1518, 1525, 1948 49, 1540, 1541, 1545, 328, 548, 549, 1554, 918, 76, 1949 1552, 720, 112, 918, 141, 142, 49, 438, 108, 34, 1950 46, 47, 114, 41, 42, 1556, 1117, 446, 1562, 705, 1951 705, 49, 1569, 114, 49, 114, 1570, 1116, 1221, 789, 1952 787, 1322, 1520, 548, 788, 1205, 743, 224, 790, 1431, 1953 473, 108, 791, 1572, 245, 1387, 1252, 473, 1403, 1226, 1954 1502, 57, 908, 909, 1098, 1234, 1102, 49, 57, 931, 1955 806, 114, 1139, 114, 1045, 879, 945, 114, 1112, 548, 1956 164, 953, 1331, 718, 78, 114, 0, 126, 129, 130, 1957 0, 78, 796, 797, 196, 521, 1328, 219, 49, 49, 1958 229, 798, 0, 0, 871, 0, 0, 0, 71, 0, 1959 473, 0, 49, 0, 0, 71, 37, 0, 176, 177, 1960 40, 57, 0, 178, 0, 67, 119, 41, 42, 1117, 1961 0, 704, 1144, 1144, 693, 354, 0, 0, 0, 704, 1962 704, 704, 0, 0, 78, 2, 208, 4, 5, 6, 1963 7, 0, 0, 925, 108, 927, 0, 67, 0, 458, 1964 0, 256, 1505, 257, 1505, 0, 0, 0, 71, 0, 1965 1483, 0, 0, 178, 0, 162, 178, 0, 108, 164, 1966 1329, 215, 0, 0, 0, 108, 414, 0, 0, 0, 1967 0, 234, 375, 422, 0, 223, 49, 0, 0, 1505, 1968 0, 1505, 0, 0, 0, 704, 0, 0, 49, 450, 1969 35, 0, 36, 0, 0, 705, 1068, 0, 164, 0, 1970 0, 0, 178, 705, 705, 705, 0, 0, 0, 324, 1971 76, 1534, 261, 215, 0, 76, 0, 0, 108, 0, 1972 1542, 164, 0, 682, 397, 0, 0, 774, 775, 776, 1973 0, 645, 0, 445, 416, 417, 0, 0, 114, 421, 1974 0, 423, 424, 0, 0, 414, 0, 0, 37, 708, 1975 176, 177, 40, 0, 329, 0, 215, 0, 0, 41, 1976 42, 49, 261, 351, 0, 178, 0, 0, 0, 705, 1977 49, 0, 49, 0, 0, 0, 0, 0, 37, 114, 1978 185, 186, 40, 0, 0, 377, 521, 0, 0, 41, 1979 42, 521, 1391, 407, 521, 0, 0, 0, 0, 577, 1980 43, 0, 49, 0, 0, 0, 0, 581, 425, 224, 1981 584, 430, 432, 646, 0, 187, 162, 215, 0, 178, 1982 1049, 0, 114, 0, 46, 47, 178, 0, 0, 0, 1983 0, 0, 0, 0, 0, 0, 0, 449, 645, 375, 1984 0, 452, 0, 453, 0, 0, 114, 1418, 0, 645, 1985 1426, 114, 460, 0, 0, 215, 0, 0, 67, 0, 1986 215, 1099, 0, 474, 0, 0, 0, 0, 898, 0, 1987 0, 0, 0, 481, 414, 500, 76, 0, 422, 0, 1988 0, 432, 0, 0, 8, 9, 10, 11, 12, 0, 1989 0, 354, 0, 0, 178, 1465, 76, 0, 0, 0, 1990 1469, 114, 0, 0, 76, 8, 9, 10, 11, 12, 1991 0, 178, 0, 31, 0, 178, 0, 375, 0, 0, 1992 646, 0, 354, 480, 0, 0, 0, 0, 0, 0, 1993 1491, 0, 0, 0, 31, 0, 0, 981, 0, 114, 1994 354, 34, 76, 0, 0, 215, 0, 261, 0, 0, 1995 897, 595, 0, 49, 0, 414, 0, 623, 49, 904, 1996 0, 0, 34, 906, 0, 0, 0, 0, 43, 0, 1997 628, 0, 0, 0, 628, 49, 0, 261, 178, 0, 1998 0, 0, 0, 753, 354, 412, 0, 0, 0, 43, 1999 0, 997, 46, 47, 0, 0, 0, 1506, 0, 1506, 2000 0, 1002, 0, 0, 939, 0, 602, 0, 0, 0, 2001 0, 0, 0, 46, 47, 1014, 1560, 0, 0, 0, 2002 0, 1049, 1560, 0, 474, 0, 215, 0, 0, 0, 2003 0, 0, 0, 1560, 1506, 0, 1506, 1560, 37, 351, 2004 185, 186, 40, 215, 474, 0, 577, 577, 354, 41, 2005 42, 0, 474, 0, 37, 114, 185, 186, 40, 0, 2006 43, 0, 0, 79, 0, 41, 42, 0, 215, 0, 2007 700, 0, 0, 432, 0, 912, 43, 412, 49, 0, 2008 0, 0, 0, 913, 46, 47, 0, 0, 714, 0, 2009 67, 267, 354, 354, 354, 79, 0, 0, 432, 0, 2010 46, 47, 432, 0, 0, 0, 0, 0, 0, 0, 2011 0, 354, 0, 0, 0, 0, 801, 802, 0, 0, 2012 0, 114, 114, 114, 0, 0, 0, 0, 0, 354, 2013 0, 261, 351, 225, 890, 178, 0, 1298, 893, 0, 2014 76, 0, 0, 0, 0, 835, 0, 0, 838, 839, 2015 0, 842, 0, 844, 845, 0, 0, 0, 846, 847, 2016 0, 0, 0, 0, 0, 0, 76, 178, 0, 354, 2017 0, 0, 0, 0, 0, 0, 0, 799, 81, 645, 2018 0, 0, 0, 178, 1089, 0, 548, 0, 0, 215, 2019 0, 0, 0, 0, 0, 628, 811, 0, 178, 0, 2020 0, 0, 0, 58, 58, 0, 354, 0, 830, 0, 2021 81, 0, 0, 0, 0, 0, 0, 215, 0, 0, 2022 0, 356, 215, 1179, 1180, 0, 595, 511, 0, 0, 2023 0, 595, 0, 0, 0, 58, 0, 628, 0, 0, 2024 351, 351, 351, 0, 0, 0, 0, 0, 226, 0, 2025 0, 0, 354, 0, 49, 49, 0, 0, 0, 351, 2026 0, 0, 354, 0, 354, 114, 114, 0, 0, 224, 2027 58, 0, 354, 58, 577, 0, 354, 700, 0, 178, 2028 0, 1229, 1230, 0, 0, 0, 0, 0, 474, 0, 2029 0, 0, 0, 0, 215, 0, 0, 0, 0, 978, 2030 979, 0, 0, 114, 0, 0, 0, 0, 215, 0, 2031 0, 0, 0, 0, 474, 0, 79, 351, 0, 0, 2032 0, 79, 0, 0, 0, 0, 944, 0, 500, 432, 2033 37, 0, 185, 186, 40, 0, 357, 0, 76, 0, 2034 1216, 41, 42, 0, 37, 0, 185, 186, 40, 0, 2035 0, 0, 43, 261, 714, 41, 42, 0, 0, 976, 2036 0, 349, 0, 49, 114, 0, 43, 601, 354, 602, 2037 0, 0, 0, 114, 0, 0, 46, 47, 0, 0, 2038 0, 912, 0, 412, 0, 0, 0, 0, 49, 49, 2039 46, 47, 0, 414, 0, 0, 0, 0, 0, 0, 2040 700, 0, 0, 0, 0, 215, 0, 0, 0, 0, 2041 700, 0, 351, 49, 628, 225, 0, 1012, 0, 628, 2042 811, 0, 0, 354, 700, 0, 58, 0, 0, 0, 2043 0, 81, 0, 0, 1023, 0, 81, 536, 537, 538, 2044 539, 540, 541, 542, 543, 544, 545, 0, 178, 0, 2045 0, 0, 0, 0, 0, 0, 58, 37, 0, 185, 2046 186, 40, 0, 0, 1100, 0, 0, 1356, 41, 42, 2047 0, 546, 0, 1155, 0, 1358, 1359, 1360, 0, 43, 2048 0, 0, 79, 0, 354, 354, 67, 354, 354, 0, 2049 1167, 0, 0, 0, 1530, 0, 412, 356, 0, 0, 2050 0, 0, 79, 46, 47, 0, 0, 76, 628, 0, 2051 79, 0, 0, 0, 0, 261, 714, 0, 0, 1095, 2052 0, 8, 9, 10, 11, 12, 0, 0, 356, 0, 2053 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2054 0, 1406, 354, 354, 0, 1109, 356, 0, 79, 0, 2055 31, 0, 0, 432, 119, 0, 0, 0, 0, 0, 2056 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 2057 0, 351, 0, 0, 0, 0, 0, 0, 34, 0, 2058 0, 0, 0, 37, 0, 185, 186, 40, 0, 0, 2059 356, 0, 1386, 0, 41, 42, 0, 81, 0, 0, 2060 0, 0, 0, 0, 0, 43, 215, 0, 0, 0, 2061 1257, 0, 357, 0, 595, 0, 354, 81, 0, 0, 2062 601, 0, 602, 0, 0, 81, 0, 430, 1231, 46, 2063 47, 0, 700, 700, 0, 351, 351, 349, 0, 0, 2064 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 2065 0, 0, 0, 0, 356, 1201, 0, 0, 0, 224, 2066 0, 357, 0, 81, 0, 0, 0, 0, 0, 0, 1790 49, 114, 453, 428, 399, 400, 268, 98, 150, 766, 1791 151, 152, 819, 973, 868, 115, 964, 407, 752, 63, 1792 401, 402, 403, 358, 383, 384, 965, 966, 404, 261, 1793 440, 827, 49, 405, 596, 604, 50, 410, 498, 98, 1794 357, 740, 820, 148, 1070, 153, 830, 1069, 609, 49, 1795 844, 63, 837, 948, 69, 1137, 162, 821, 725, 794, 1796 56, 116, 730, 187, 826, 408, 210, 144, 50, 49, 1797 194, 919, 154, 217, 409, 70, 227, 1187, 31, 342, 1798 112, 815, 178, 220, 399, 400, 69, 155, 281, 1439, 1799 628, 425, 56, 1302, 632, 1379, 669, 407, 123, 818, 1800 401, 402, 403, 1204, 1205, 1181, 114, 70, 404, 816, 1801 817, 475, 477, 405, 114, 1195, 678, 267, 272, 476, 1802 505, 1197, 1443, 1177, 682, 31, 211, 923, 31, 221, 1803 203, 124, 262, 31, 31, 263, 566, 31, 527, 493, 1804 31, 213, 494, 1171, 527, 408, 282, 307, 148, 1178, 1805 411, 150, 145, 151, 152, 162, 114, 345, 77, 519, 1806 1439, 210, 1303, 1169, 1170, 1117, -231, -231, 373, 97, 1807 567, 714, 964, 143, 720, 1196, 107, 107, 1199, 1245, 1808 204, 1198, 965, 966, 913, 167, 187, 187, 153, 476, 1809 77, 471, 949, 1458, 162, 253, 147, 411, 419, 815, 1810 411, 97, 267, 481, 828, 411, 601, 835, 107, 601, 1811 49, 568, 149, 1186, 287, 154, 1443, 162, 97, 527, 1812 667, 1443, 210, 1200, 819, 41, 42, 816, 817, 443, 1813 155, 150, 190, 151, 152, 97, 664, -231, 97, 1484, 1814 307, 1443, 1248, 1139, 439, 107, 156, 1077, 1443, 292, 1815 167, 514, 49, 1016, 820, 182, 169, 830, 172, 98, 1816 272, 1398, 1399, 202, 588, 272, 267, 267, 723, 821, 1817 1249, 63, 114, 1512, 162, 1514, 472, 527, 951, 1080, 1818 170, 991, 441, 327, 665, 656, 1015, 463, 50, 164, 1819 672, 674, 1093, 815, 342, 307, -287, 442, 483, 358, 1820 1468, 609, 1526, 248, 1382, 500, 69, 307, 251, 596, 1821 664, 1003, 56, 671, 596, 804, 357, 97, -119, 676, 1822 -119, 816, 817, 571, -119, 1187, 1178, 70, 148, 1541, 1823 97, 1400, 465, 1398, 1399, 373, -516, 527, 1084, -119, 1824 -119, 114, 734, 1118, 819, 345, 436, 1171, 713, 602, 1825 620, 579, 471, 411, 164, 398, 190, 853, 665, 898, 1826 253, 377, 827, 1119, 625, 735, 556, 557, 625, 1201, 1827 519, 114, 471, 178, 820, 519, 327, 378, 519, 97, 1828 471, 1070, 831, 1116, 1069, 736, 834, 673, 675, 821, 1829 629, 97, 358, 111, 633, 847, 267, 1171, 747, 848, 1830 510, 558, 559, 1409, 41, 42, 187, 851, 436, 357, 1831 77, 854, 986, 373, 1496, 77, 1325, 1169, 1170, 174, 1832 1501, 97, 547, 548, 267, 213, 307, 307, 107, 844, 1833 267, 787, 759, 625, 714, 479, 1326, 472, 849, 1423, 1834 1521, 577, 850, 167, 870, 1528, 642, 578, 342, 1525, 1835 435, 1157, 1159, 1424, 114, 729, 358, 472, 1428, 1429, 1836 547, 1362, 254, 871, 1126, 472, 859, 860, 264, 1536, 1837 447, 849, 267, 357, 742, 1100, 1540, 387, 1187, 330, 1838 267, 598, 625, 877, 49, 1187, 1469, 373, 719, 460, 1839 498, 98, 683, 388, 114, 1244, 547, 97, 578, 390, 1840 1470, 711, 869, 63, 888, 881, 307, 1104, 114, 1135, 1841 1014, 307, 435, 307, 307, 391, 1171, 910, 603, -10, 1842 50, 750, -440, 609, 392, 114, 345, -441, 1016, 996, 1843 582, -467, 411, -467, 804, 523, 1187, 1434, 69, 798, 1844 393, 931, 277, 879, 56, 394, 112, 164, 213, 1236, 1845 -467, 2, 207, 4, 5, 6, 7, 914, 417, 70, 1846 704, 395, 327, 327, 916, 912, 705, 914, 916, 1184, 1847 571, 571, 1184, 915, 952, 190, 77, 279, 307, 1316, 1848 917, 437, 1126, 1081, 1082, 1185, 280, 913, 1308, 625, 1849 345, 445, 549, 714, 620, 1317, 77, 1318, 550, 551, 1850 602, 747, 602, 882, 77, 411, 331, 760, 1360, 1276, 1851 1277, 713, 765, 1319, 1474, 471, 35, 1363, 36, 332, 1852 625, 1474, 804, 1014, 1019, 625, 111, 620, 140, 239, 1853 327, 625, 994, 333, 625, 625, 625, 41, 42, 111, 1854 334, 928, 77, -102, 806, 335, 846, -102, 371, 327, 1855 41, 42, 625, 97, 267, 372, 1087, 603, 1087, 520, 1856 107, 465, 861, 240, 768, 769, 770, 342, 241, 1348, 1857 376, 1027, 1522, 1349, 111, 358, 876, 385, 111, -3, 1858 140, 141, 1408, 389, 114, 41, 42, 907, 596, 41, 1859 42, 1074, 357, 885, 691, 411, 111, 442, 140, 141, 1860 472, 528, 529, 530, 1141, 1112, 411, 41, 42, 397, 1861 625, 933, 620, 764, 327, 726, 1101, 1234, 719, 719, 1862 727, 1238, 1034, 399, 400, 531, 472, 532, 409, 533, 1863 534, 1153, 878, 411, 880, 432, 721, 407, 244, 401, 1864 402, 403, 722, 426, 114, 345, 523, 404, 523, 750, 1865 750, 523, 405, 1156, 523, 601, 845, 500, 1158, 230, 1866 601, 598, 427, 231, 711, 1476, 235, 1477, 237, 814, 1867 713, 603, 964, 213, 450, 246, 775, 776, 777, 778, 1868 1373, -288, 965, 966, 927, 408, -364, 213, 8, 9, 1869 10, 11, 12, 571, 2, 207, 4, 5, 6, 7, 1870 731, 625, 1241, 625, 411, 999, 732, 680, 625, 345, 1871 1161, -393, 602, 570, 1425, 411, 111, 31, 140, 141, 1872 1523, 45, 46, 229, 602, 111, 342, 41, 42, 484, 1873 1436, 461, 746, 706, 462, 714, 41, 42, 747, 77, 1874 8, 9, 10, 11, 12, 34, 37, 892, 804, 504, 1875 40, 253, 329, 747, 292, 864, 911, 41, 42, 35, 1876 894, 36, 163, 806, 1330, 77, 747, 980, 508, 31, 1877 520, 972, 513, 981, 307, 520, 195, 525, 520, 218, 1878 213, 527, 228, 812, 562, 601, 1168, 814, 603, 993, 1879 1182, 45, 46, 63, 563, 705, 625, 34, 554, 555, 1880 1494, 1436, 230, 114, 345, 907, 111, 907, 2, 207, 1881 4, 5, 6, 7, 714, 664, 1232, 41, 42, 114, 1882 910, 564, 578, 711, 691, 1356, 565, 749, 69, 411, 1883 142, 747, 933, 933, 56, 45, 46, 719, 568, 570, 1884 37, 411, 114, 307, 40, 1332, 338, 45, 46, 70, 1885 -437, 41, 42, 952, 1357, 586, 1105, 952, 952, 589, 1886 747, 163, 932, 665, 601, 48, 113, 750, 912, -3, 1887 45, 46, 657, 35, 374, 36, 1359, 43, 1508, 552, 1888 553, 814, 747, 242, 245, 45, 46, 638, 8, 9, 1889 10, 11, 12, 603, 113, 113, 1227, 48, 1364, 345, 1890 163, 658, 1106, 659, 747, 560, 561, 37, 48, 184, 1891 185, 40, 713, 111, 48, 140, 141, 31, 41, 42, 1892 625, 625, 48, 163, 41, 42, 661, 1126, 48, 984, 1893 981, 48, 77, 890, 48, 444, 1121, 253, 329, 411, 1894 307, 230, 897, 235, 186, 34, 899, 662, 113, 113, 1895 107, 666, 45, 46, 1284, 1285, 37, 1287, 1132, 472, 1896 40, 663, 1132, 1426, 1292, 1444, 1294, 41, 42, 1423, 1897 668, 747, 48, 1323, 1083, 48, 911, 442, 1490, 327, 1898 114, 258, 48, 692, 1491, 907, 1546, 749, 693, 411, 1899 907, 695, 578, 718, 1189, 45, 46, 329, 411, 933, 1900 56, 45, 46, 737, 215, 738, 603, 267, 739, 1369, 1901 1370, 743, 1132, 48, 547, 70, 1418, 981, 107, 1398, 1902 1399, 48, 625, 771, 772, 37, 48, 184, 185, 40, 1903 342, 230, 419, 660, 411, 845, 41, 42, 779, 780, 1904 1351, 374, 773, 774, 457, 697, 345, -235, 481, 329, 1905 411, 48, 48, 733, 744, 510, 215, 748, 756, 691, 1906 1380, 807, 266, 873, 1380, 711, 808, 48, 811, -289, 1907 45, 46, 828, 329, 601, 48, 8, 9, 10, 11, 1908 12, 1295, 1296, 1297, 48, 822, 867, 48, 272, 114, 1909 1331, 1333, 1334, 893, 113, -12, -13, 866, 77, 215, 1910 895, 896, 900, 220, 903, 31, 921, 114, -414, 113, 1911 -520, 307, 936, 113, 943, 722, 107, 48, 113, 374, 1912 117, 945, 1404, 956, 130, 625, 131, 132, 133, 114, 1913 63, 48, 48, 34, 950, 41, 42, 957, 48, 958, 1914 959, 960, 961, 1105, 711, 48, 988, 989, 211, 221, 1915 990, 977, 1005, 1006, 911, 1007, 1008, 1009, 1010, 911, 1916 215, 1459, 1079, 213, 1011, 69, 1022, 1421, 160, -402, 1917 -401, 56, 1036, 1058, 625, 625, 1071, 1534, 1094, 906, 1918 644, 1073, 1096, 272, 1097, 1095, 70, 1103, 307, 1106, 1919 1113, 747, 1114, 48, 1115, 1120, 1122, 971, 215, 1123, 1920 1124, 702, 1125, 215, 1128, 1131, 1151, 472, 1174, 1175, 1921 1172, 1173, 1176, 48, 48, 8, 9, 10, 11, 12, 1922 691, 114, 1190, 399, 400, 259, 1191, 1132, 1132, 1132, 1923 48, 1193, 1194, 160, 48, 1105, 407, 1202, 1206, 401, 1924 402, 403, 1189, 441, 31, 643, -290, 404, 56, 1207, 1925 1209, -3, 405, 8, 9, 10, 11, 12, 442, 1214, 1926 664, 48, 1219, 70, 1224, 107, 323, 493, 1222, 77, 1927 1507, 48, 34, 1228, 703, 339, 1233, 922, 267, 1235, 1928 1237, 1106, 31, 1240, 408, 1250, 1246, 107, 215, 48, 1929 1252, 724, 1254, 728, 625, 48, 1256, 48, 1257, 1258, 1930 1262, 1259, 1420, 1260, 1269, 107, 1278, 1279, 665, 37, 1931 34, 175, 176, 40, 932, 1203, 601, 1286, 1307, 114, 1932 41, 42, 45, 46, 37, 430, 175, 176, 40, 434, 1933 1289, 1290, 113, 1105, 1291, 41, 42, 48, 1293, 1301, 1934 1314, 114, 1192, 1320, 1322, 48, 77, 1328, 114, 48, 1935 114, 1324, 114, 48, 1329, 1358, 113, 1335, 113, 323, 1936 472, 372, 1336, 1338, 107, 1132, 1132, 472, 985, 215, 1937 150, 1344, 151, 152, 1345, 1346, 1347, 1297, 1365, 1106, 1938 1354, 1506, 214, 1355, 1366, 1383, 114, 1374, 114, 1375, 1939 1376, 434, 233, 113, 488, 1189, 1392, 107, 113, 114, 1940 1393, 56, 1189, 1460, -403, 1506, 1506, 702, 56, 1396, 1941 1407, 215, 1415, 162, 521, 307, 70, 1411, 472, 1413, 1942 528, 529, 530, 70, 1416, 1417, 160, 1422, 1430, 37, 1943 1506, 175, 176, 40, 214, 1431, 1432, 373, 1433, 1435, 1944 41, 42, 865, 1349, 531, 1029, 532, 113, 533, 1305, 1945 1440, 1445, 1449, 1189, 48, 1451, 1447, 1453, 1455, 56, 1946 587, 1509, 1457, 1462, 593, 48, 376, 48, 1463, 1464, 1947 1517, 1475, 1492, 1485, 70, 1487, 1500, 214, 1493, 1489, 1948 703, 1515, 1516, 626, 1520, 1527, 48, 630, 922, 1529, 1949 339, 918, 1531, 920, 1544, 107, 1545, 457, 1208, 77, 1950 1537, 783, 48, 781, 1130, 784, 77, 113, 782, 785, 1951 1058, 1306, 1495, 1410, 1547, 1368, 48, 107, 113, 48, 1952 113, 1239, 1384, 1478, 107, 1088, 702, 216, 901, 1213, 1953 902, 1221, 215, 922, 1092, 924, 702, 800, 214, 1127, 1954 1035, 872, 938, 1315, 243, 323, 323, 1102, 790, 716, 1955 702, 327, 48, 946, 791, 792, 113, 77, 113, 0, 1956 215, 1367, 113, 0, 0, 215, 0, 0, 1138, 0, 1957 113, 0, 0, 687, 479, 107, 214, 0, 0, 216, 1958 0, 214, 0, 48, 48, 0, 117, 0, 0, 0, 1959 1482, 0, 1482, 0, 0, 0, 499, 48, 0, 703, 1960 0, 0, 0, 1372, 0, 0, 0, 0, 0, 703, 1961 0, 488, 0, 323, 0, 488, 0, 0, 0, 1029, 1962 0, 0, 216, 703, 0, 521, 1482, 521, 1482, 0, 1963 521, 0, 323, 521, 0, 0, 215, 177, 0, 8, 1964 9, 10, 11, 12, 339, 0, 0, 0, 0, 37, 1965 215, 184, 185, 40, 0, 1397, 0, 0, 1405, 0, 1966 41, 42, 0, 0, 0, 0, 214, 644, 31, 0, 1967 0, 0, 0, 1039, 0, 0, 0, 48, 0, 0, 1968 0, 0, 0, 216, 0, 0, 905, 177, 411, 48, 1969 177, 0, 0, 0, 45, 46, 34, 323, 0, 922, 1970 0, 1442, 0, 0, 0, 0, 1446, 906, 802, 0, 1971 0, 0, 0, 1479, 1089, 1483, 0, 0, 0, 0, 1972 0, 216, 0, 0, 0, 0, 216, 0, 0, 0, 1973 0, 0, 643, 0, 1467, 0, 177, 891, 113, 843, 1974 0, 0, 0, 215, 593, 0, 0, 214, 0, 1511, 1975 852, 1513, 66, 118, 702, 702, 0, 0, 0, 922, 1976 922, 48, 0, 0, 214, 0, 0, 0, 0, 0, 1977 48, 644, 48, 0, 0, 0, 0, 0, 0, 113, 1978 0, 0, 0, 0, 66, 0, 0, 0, 0, 214, 1979 0, 0, 0, 1542, 0, 1543, 0, 0, 0, 177, 1980 0, 161, 48, 687, 0, 0, 0, 0, 1550, 1551, 1981 0, 216, 702, 702, 0, 0, 0, 0, 1535, 0, 1982 0, 222, 113, 0, 1535, 0, 0, 703, 703, 0, 1983 0, 0, 0, 0, 0, 1535, 643, 0, 0, 1535, 1984 0, 488, 0, 0, 113, 0, 0, 0, 113, 57, 1985 57, 0, 0, 177, 0, 0, 987, 0, 260, 0, 1986 177, 0, 0, 339, 0, 0, 992, 0, 0, 0, 1987 0, 1039, 0, 0, 0, 75, 0, 0, 0, 0, 1988 1004, 57, 0, 0, 0, 703, 703, 0, 0, 0, 1989 0, 0, 216, 0, 0, 0, 0, 0, 113, 0, 1990 328, 0, 0, 0, 0, 0, 0, 75, 260, 350, 1991 214, 0, 0, 0, 0, 57, 0, 0, 57, 0, 1992 0, 0, 995, 0, 0, 0, 0, 802, 177, 0, 1993 0, 0, 0, 0, 216, 0, 113, 0, 214, 406, 1994 215, 0, 0, 214, 223, 177, 0, 0, 0, 177, 1995 48, 0, 0, 0, 424, 48, 0, 429, 431, 0, 1996 1312, 0, 161, 0, 922, 0, 0, 0, 0, 0, 1997 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 1998 922, 0, 0, 448, 1282, 0, 0, 451, 0, 452, 1999 0, 0, 702, 0, 0, 0, 0, 0, 459, 0, 2000 702, 702, 702, 0, 66, 0, 348, 0, 0, 473, 2001 0, 0, 177, 0, 214, 802, 0, 0, 0, 480, 2002 0, 0, 339, 0, 0, 0, 0, 431, 214, 0, 2003 0, 78, 353, 1313, 0, 0, 0, 0, 687, 0, 2004 0, 37, 0, 184, 185, 40, 0, 0, 499, 113, 2005 922, 922, 41, 42, 0, 216, 0, 0, 0, 0, 2006 488, 1107, 323, 78, 702, 703, 0, 0, 0, 0, 2007 0, 57, 48, 703, 703, 703, 0, 0, 600, 0, 2008 601, 0, 0, 216, 1166, 1167, 45, 46, 216, 0, 2009 0, 0, 0, 260, 0, 0, 0, 594, 0, 0, 2010 224, 57, 0, 622, 0, 0, 449, 0, 0, 0, 2011 0, 0, 0, 113, 113, 113, 627, 0, 843, 0, 2012 627, 214, 0, 260, 0, 0, 215, 75, 0, 0, 2013 0, 0, 75, 0, 0, 0, 0, 703, 0, 0, 2014 0, 0, 1216, 1217, 0, 0, 0, 0, 0, 0, 2015 37, 0, 184, 185, 40, 0, 0, 0, 0, 216, 2016 0, 41, 42, 37, 0, 184, 185, 40, 0, 177, 2017 473, 0, 0, 216, 41, 42, 0, 0, 0, 0, 2018 0, 0, 0, 0, 0, 350, 0, 905, 355, 411, 2019 473, 0, 0, 0, 0, 45, 46, 0, 473, 687, 2020 1505, 177, 411, 0, 0, 0, 0, 0, 45, 46, 2021 0, 0, 0, 0, 0, 0, 698, 177, 0, 431, 2022 0, 215, 0, 0, 0, 0, 223, 0, 0, 0, 2023 0, 177, 0, 0, 712, 0, 66, 0, 0, 0, 2024 0, 802, 48, 48, 431, 0, 0, 0, 431, 0, 2025 0, 113, 113, 535, 536, 537, 538, 539, 540, 541, 2026 542, 543, 544, 0, 0, 0, 216, 0, 0, 0, 2027 0, 0, 0, 0, 0, 0, 0, 260, 350, 0, 2028 0, 0, 348, 78, 0, 0, 0, 545, 78, 113, 2029 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 2030 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 2031 0, 0, 177, 75, 0, 0, 0, 0, 214, 0, 2032 0, 75, 1337, 793, 0, 0, 339, 0, 0, 0, 2033 1339, 1340, 1341, 57, 0, 0, 0, 0, 0, 353, 2034 0, 627, 805, 0, 0, 0, 48, 113, 1107, 0, 2035 0, 0, 0, 0, 824, 0, 113, 353, 0, 75, 2036 0, 0, 0, 283, 284, 0, 285, 0, 0, 0, 2037 48, 48, 594, 0, 0, 348, 0, 594, 0, 0, 2038 0, 0, 224, 627, 0, 0, 350, 350, 350, 0, 2039 0, 0, 286, 0, 1385, 48, 0, 0, 287, 0, 2040 0, 353, 288, 0, 350, 289, 290, 291, 292, 41, 2041 42, 0, 293, 294, 0, 0, 0, 0, 0, 0, 2042 0, 0, 698, 0, 0, 8, 9, 10, 11, 12, 2043 0, 0, 0, 473, 0, 295, 0, 379, 0, 348, 2044 1107, 0, 0, 45, 46, 297, 298, 299, 300, 78, 2045 0, 0, 0, 0, 31, 0, 786, 0, 0, 473, 2046 0, 0, 350, 216, 355, 353, 0, 0, 0, 78, 2047 0, 937, 0, 0, 431, 0, 177, 78, 0, 0, 2048 0, 0, 34, 348, 348, 348, 0, 37, 0, 184, 2049 185, 40, 0, 0, 0, 355, 260, 712, 41, 42, 2050 0, 348, 967, 0, 214, 0, 0, 0, 0, 353, 2051 353, 353, 0, 355, 0, 78, 0, 8, 9, 10, 2052 11, 12, 0, 0, 600, 0, 601, 353, 0, 0, 2053 0, 0, 45, 46, 0, 0, 0, 0, 1107, 0, 2054 0, 698, 0, 0, 0, 353, 31, 0, 0, 0, 2055 0, 698, 0, 350, 0, 627, 75, 355, 1002, 348, 2056 627, 805, 0, 0, 0, 698, 0, 0, 0, 1481, 2057 0, 1481, 0, 0, 34, 1013, 0, 0, 0, 37, 2058 0, 0, 75, 40, 0, 353, 0, 0, 0, 0, 2059 41, 42, 0, 0, 0, 0, 0, 0, 0, 214, 2060 0, 80, 0, 0, 0, 1481, 0, 1481, 0, 0, 2061 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 2062 353, 355, 0, 0, 45, 46, 66, 0, 87, 0, 2063 413, 0, 0, 80, 323, 0, 0, 421, 0, 0, 2064 0, 0, 0, 0, 0, 0, 0, 0, 627, 216, 2065 348, 0, 0, 0, 0, 260, 712, 0, 348, 1085, 2066 87, 0, 0, 0, 353, 355, 355, 355, 0, 0, 2067 225, 0, 0, 0, 353, 0, 353, 0, 0, 0, 2068 0, 223, 0, 355, 353, 1099, 0, 0, 353, 0, 2069 0, 0, 0, 431, 118, 0, 0, 226, 0, 0, 2070 0, 355, 0, 0, 0, 0, 0, 0, 0, 413, 2071 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 2072 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 2073 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 2074 0, 355, 0, 0, 216, 0, 0, 0, 0, 75, 2075 0, 594, 0, 0, 0, 0, 0, 0, 356, 0, 2076 0, 0, 0, 576, 429, 0, 0, 0, 0, 698, 2077 698, 580, 350, 350, 583, 0, 355, 0, 0, 353, 2078 0, 0, 0, 0, 0, 363, 0, 177, 0, 0, 2079 0, 57, 1188, 0, 0, 206, 2, 207, 4, 5, 2080 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2081 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2082 355, 0, 26, 27, 28, 0, 0, 698, 698, 0, 2083 355, 31, 355, 0, 0, 0, 0, 224, 413, 0, 2084 355, 0, 421, 0, 355, 0, 0, 0, 0, 0, 2085 0, 0, 0, 80, 0, 0, 0, 0, 80, 34, 2086 0, 35, 0, 36, 37, 0, 208, 39, 40, 348, 2087 348, 0, 0, 0, 627, 41, 42, 0, 0, 0, 2088 87, 0, 0, 0, 0, 87, 0, 0, 0, 57, 2089 0, 0, 353, 353, 0, 353, 353, 0, 712, 0, 2090 0, 43, 0, 209, 0, 78, 0, 0, 0, 45, 2091 46, 0, 0, 0, 0, 75, 0, 0, 0, 413, 2092 0, 0, 0, 0, 0, 8, 9, 10, 11, 12, 2093 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, 2094 0, 1283, 0, 0, 0, 0, 0, 0, 0, 0, 2095 353, 353, 225, 0, 31, 0, 0, 177, 0, 260, 2096 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 2097 0, 0, 0, 0, 0, 698, 0, 712, 0, 226, 2098 0, 118, 34, 0, 0, 0, 0, 37, 0, 184, 2099 185, 40, 0, 0, 0, 127, 127, 127, 41, 42, 2100 0, 0, 0, 0, 0, 0, 0, 698, 0, 0, 2101 576, 576, 0, 0, 0, 698, 698, 698, 0, 80, 2102 0, 353, 0, 0, 186, 0, 350, 350, 0, 0, 2103 0, 0, 45, 46, 356, 0, 0, 57, 57, 80, 2104 1188, 0, 0, 0, 0, 0, 87, 80, 355, 355, 2105 0, 355, 355, 0, 0, 0, 0, 0, 0, 0, 2106 57, 363, 0, 0, 223, 356, 87, 0, 127, 0, 2107 127, 78, 0, 118, 87, 0, 0, 0, 57, 698, 2108 0, 0, 0, 356, 0, 80, 75, 0, 0, 0, 2109 0, 0, 363, 0, 0, 276, 0, 883, 353, 0, 2110 353, 886, 0, 0, 0, 0, 355, 355, 0, 0, 2111 363, 0, 87, 0, 0, 0, 0, 0, 0, 0, 2112 0, 0, 0, 348, 348, 0, 0, 356, 0, 0, 2113 353, 0, 57, 0, 0, 0, 0, 57, 353, 353, 2114 353, 0, 0, 0, 0, 0, 350, 0, 0, 353, 2115 353, 127, 0, 0, 363, 0, 0, 0, 0, 127, 2116 0, 127, 127, 75, 0, 0, 127, 0, 127, 127, 2117 57, 118, 0, 168, 0, 173, 0, 355, 179, 180, 2118 181, 0, 183, 0, 0, 0, 0, 0, 0, 0, 2119 0, 356, 0, 1188, 0, 0, 0, 234, 0, 0, 2120 1188, 0, 353, 0, 0, 0, 0, 0, 0, 249, 2121 250, 0, 0, 0, 125, 128, 129, 0, 363, 0, 2122 224, 0, 0, 0, 0, 0, 8, 9, 10, 11, 2123 12, 0, 0, 576, 0, 356, 356, 356, 127, 0, 2124 0, 0, 78, 348, 0, 0, 0, 0, 0, 0, 2125 0, 1188, 0, 356, 355, 31, 355, 0, 1530, 0, 2126 0, 0, 363, 363, 363, 0, 0, 0, 57, 353, 2127 0, 356, 0, 0, 0, 0, 0, 0, 0, 0, 2128 363, 0, 80, 34, 0, 0, 355, 255, 37, 256, 2129 57, 0, 40, 0, 355, 355, 355, 57, 363, 41, 2130 42, 0, 0, 0, 0, 355, 355, 0, 80, 87, 2131 0, 356, 0, 0, 0, 0, 75, 0, 0, 78, 2132 0, 0, 0, 75, 0, 718, 0, 0, 0, 0, 2133 0, 0, 0, 45, 46, 87, 0, 0, 363, 8, 2134 9, 10, 11, 12, 0, 0, 356, 0, 57, 0, 2135 0, 413, 0, 0, 0, 0, 0, 0, 355, 0, 2136 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 2137 396, 0, 0, 363, 75, 0, 0, 0, 0, 0, 2138 415, 416, 0, 0, 0, 420, 0, 422, 423, 0, 2139 356, 0, 0, 0, 0, 0, 34, 0, 0, 0, 2140 356, 37, 356, 184, 185, 40, 0, 225, 0, 0, 2141 356, 0, 41, 42, 356, 0, 0, 363, 0, 8, 2142 9, 10, 11, 12, 0, 355, 0, 363, 1142, 363, 2143 0, 0, 0, 0, 226, 0, 0, 363, 905, 0, 2144 411, 363, 0, 0, 0, 1154, 45, 46, 31, 0, 2145 0, 8, 9, 10, 11, 12, 0, 0, 0, 0, 2146 0, 0, 0, 0, 591, 0, 599, 0, 0, 0, 2147 0, 0, 78, 0, 0, 80, 34, 623, 624, 78, 2148 31, 37, 0, 184, 185, 40, 0, 0, 0, 0, 2149 0, 0, 41, 42, 0, 0, 0, 0, 0, 0, 2150 0, 0, 87, 0, 0, 356, 0, 0, 34, 0, 2151 0, 0, 0, 37, 0, 184, 185, 40, 1505, 0, 2152 411, 0, 0, 413, 41, 42, 45, 46, 0, 0, 2153 78, 0, 363, 0, 0, 0, 0, 0, 0, 0, 2154 0, 0, 0, 127, 127, 0, 0, 0, 0, 0, 2155 266, 0, 0, 0, 0, 0, 0, 0, 45, 46, 2156 0, 0, 0, 1242, 0, 0, 0, 0, 0, 0, 2157 0, 0, 127, 0, 0, 127, 127, 0, 127, 0, 2158 127, 127, 0, 0, 0, 127, 127, 1, 2, 207, 2159 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 2160 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2161 24, 25, -291, 0, 26, 27, 28, 29, 356, 356, 2162 30, 356, 356, 31, 0, 0, 0, 0, 0, 0, 2067 2163 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2068 0, 76, 0, 0, 0, 0, 0, 0, 58, 0, 2069 700, 700, 0, 354, 0, 354, 0, 0, 356, 356, 2070 356, 0, 0, 0, 0, 357, 0, 0, 0, 0, 2071 0, 0, 0, 0, 0, 0, 0, 356, 0, 0, 2072 0, 0, 0, 0, 0, 0, 0, 0, 354, 0, 2073 349, 0, 0, 0, 88, 356, 354, 354, 354, 628, 2074 0, 0, 0, 0, 0, 0, 79, 354, 354, 0, 2075 0, 1503, 0, 1507, 0, 0, 0, 0, 0, 0, 2076 1320, 76, 0, 0, 714, 178, 88, 0, 0, 357, 2077 0, 0, 79, 0, 0, 356, 0, 0, 0, 0, 2078 8, 9, 10, 11, 12, 0, 0, 0, 1536, 0, 2079 1538, 0, 0, 0, 349, 215, 0, 0, 0, 0, 2080 0, 0, 354, 0, 227, 0, 0, 1299, 0, 31, 2081 0, 0, 356, 357, 357, 357, 0, 0, 0, 0, 2082 0, 0, 0, 0, 0, 261, 0, 0, 0, 67, 2083 0, 0, 357, 1567, 0, 1568, 0, 34, 349, 349, 2084 349, 700, 37, 714, 185, 186, 40, 119, 1575, 1576, 2085 357, 0, 0, 41, 42, 0, 0, 349, 356, 0, 2086 0, 81, 0, 0, 43, 0, 0, 0, 356, 0, 2087 356, 0, 354, 0, 0, 225, 700, 0, 356, 912, 2088 0, 412, 356, 0, 700, 700, 700, 81, 46, 47, 2089 357, 0, 364, 215, 0, 351, 351, 0, 0, 0, 2090 0, 0, 0, 0, 8, 9, 10, 11, 12, 1201, 2091 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 2092 0, 76, 0, 0, 0, 0, 0, 357, 76, 0, 2093 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 2094 0, 178, 119, 0, 79, 0, 0, 0, 0, 0, 2095 700, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2096 0, 34, 0, 0, 0, 0, 37, 0, 185, 186, 2097 40, 0, 0, 357, 356, 0, 0, 41, 42, 0, 2098 0, 76, 0, 357, 0, 357, 0, 88, 43, 0, 2099 226, 0, 88, 357, 0, 0, 0, 357, 0, 0, 2100 0, 0, 0, 1530, 0, 412, 0, 0, 0, 0, 2101 349, 0, 46, 47, 0, 0, 0, 0, 349, 0, 2102 351, 0, 0, 0, 0, 0, 0, 0, 0, 356, 2103 0, 169, 0, 174, 0, 0, 180, 181, 182, 0, 2104 184, 0, 0, 0, 0, 119, 8, 9, 10, 11, 2105 12, 0, 0, 0, 0, 235, 0, 0, 0, 81, 2106 0, 0, 0, 0, 0, 0, 0, 250, 251, 1201, 2107 0, 0, 0, 0, 0, 31, 1201, 8, 9, 10, 2108 11, 12, 0, 0, 58, 0, 227, 0, 0, 357, 2109 356, 356, 0, 356, 356, 0, 0, 0, 0, 0, 2110 0, 0, 0, 34, 0, 0, 31, 0, 37, 0, 2111 185, 186, 40, 79, 0, 0, 0, 0, 0, 41, 2112 42, 0, 0, 0, 0, 0, 0, 0, 0, 1201, 2113 43, 0, 0, 0, 34, 0, 1555, 0, 0, 37, 2114 0, 185, 186, 40, 357, 187, 0, 0, 356, 356, 2115 41, 42, 58, 88, 46, 47, 0, 0, 0, 0, 2116 0, 43, 0, 8, 9, 10, 11, 12, 364, 349, 2117 0, 0, 0, 88, 0, 0, 267, 0, 0, 0, 2118 0, 88, 0, 0, 0, 46, 47, 0, 0, 0, 2119 0, 0, 31, 0, 8, 9, 10, 11, 12, 364, 2120 0, 0, 0, 0, 0, 357, 357, 0, 357, 357, 2121 0, 0, 0, 0, 0, 0, 0, 364, 0, 88, 2122 34, 0, 356, 31, 0, 37, 0, 0, 81, 40, 2123 0, 0, 0, 349, 349, 0, 41, 42, 0, 0, 2124 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 2125 0, 34, 0, 58, 0, 0, 37, 0, 0, 0, 2126 40, 364, 44, 357, 357, 225, 0, 41, 42, 0, 2127 0, 46, 47, 0, 0, 0, 0, 0, 43, 0, 2128 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 2129 0, 0, 0, 720, 0, 0, 0, 0, 0, 356, 2130 0, 356, 46, 47, 8, 9, 10, 11, 12, 13, 2164 0, 80, 0, 0, 0, 363, 363, 0, 363, 363, 2165 0, 34, 0, 35, 0, 36, 0, 0, 38, 39, 2166 0, 0, -291, 0, 0, 0, 1012, 0, 87, 8, 2167 9, 10, 11, 12, 0, 0, 356, 356, 0, 0, 2168 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2169 0, 0, 0, 0, 0, 44, 283, 284, 31, 285, 2170 0, 45, 46, 363, 363, 0, 0, 0, 0, 0, 2171 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2172 0, 0, 0, 127, 127, 286, 34, 0, 0, 0, 2173 0, 287, 0, 0, 0, 288, 0, 0, 289, 290, 2174 291, 292, 41, 42, 0, 293, 294, 356, 0, 0, 2175 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2176 0, 0, 795, 796, 0, 0, 0, 0, 295, 0, 2177 379, 0, 0, 0, 363, 0, 344, 46, 297, 298, 2178 299, 300, 0, 0, 0, 0, 0, 0, 0, 0, 2179 225, 829, 0, 0, 832, 833, 0, 836, 0, 838, 2180 839, 0, 0, 0, 840, 841, 0, 0, 0, 0, 2181 0, 0, 80, 0, 0, 0, 0, 226, 0, 925, 2182 0, 926, 0, 0, 356, 0, 356, 0, 929, 930, 2183 0, 0, 0, 935, 0, 0, 0, 0, 0, 87, 2184 0, 0, 0, 0, 0, 940, 0, 0, 0, 0, 2185 944, 363, 0, 363, 0, 0, 356, 0, 0, 0, 2186 0, 0, 0, 0, 356, 356, 356, 0, 0, 0, 2187 0, 0, 0, 0, 0, 356, 356, 0, 978, 0, 2188 127, 0, 0, 363, 0, 127, 0, 0, 0, 80, 2189 0, 363, 363, 363, 0, 0, 0, 0, 0, 0, 2190 0, 0, 363, 363, 0, 0, 0, 0, 0, 0, 2191 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 2192 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 2193 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2194 166, 0, 969, 970, 0, 0, 0, 0, 0, 0, 2195 0, 0, 0, 0, 0, 363, 0, 219, 0, 0, 2196 1162, 0, 0, 8, 9, 10, 11, 12, 0, 0, 2197 0, 0, 0, 0, 0, 0, 0, 1023, 1024, 1025, 2198 1026, 0, 1028, 0, 0, 0, 0, 0, 0, 0, 2199 283, 284, 31, 285, 0, 356, 0, 1072, 0, 0, 2200 0, 0, 0, 0, 0, 166, 0, 0, 0, 273, 2201 0, 1078, 0, 0, 0, 0, 0, 0, 0, 286, 2202 34, 0, 363, 0, 0, 287, 0, 0, 0, 288, 2203 0, 0, 289, 290, 291, 292, 41, 42, 166, 293, 2204 294, 0, 80, 0, 0, 0, 127, 0, 369, 80, 2205 0, 1098, 375, 0, 0, 0, 0, 0, 0, 0, 2206 0, 0, 295, 0, 379, 0, 0, 0, 0, 87, 2207 1163, 46, 297, 298, 299, 300, 87, 8, 9, 10, 2208 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2209 21, 22, 23, 24, 25, 0, 1129, 26, 27, 28, 2210 80, 166, 1136, 0, 1090, 0, 31, 1140, 0, 0, 2211 0, 0, 1144, 219, 1145, 0, 0, 0, 1147, 0, 2212 1148, 1149, 0, 0, 1152, 0, 0, 87, 0, 0, 2213 0, 166, 0, 1164, 34, 0, 0, 0, 0, 0, 2214 0, 208, 39, 0, 0, 0, 0, 0, 0, 0, 2215 0, 1179, 1180, 0, 0, 0, 375, 0, 0, 0, 2216 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, 2217 0, 0, 0, 0, 0, 127, 0, 0, 1210, 0, 2218 0, 1212, 0, 0, 45, 46, 524, 0, 0, 0, 2219 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, 2220 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 2221 0, 0, 0, 0, 232, 0, 236, 0, 238, 0, 2222 0, 0, 0, 0, 1226, 247, 0, 0, 0, 0, 2223 1230, 1231, 0, 0, 0, 0, 597, 0, 0, 0, 2224 0, 621, 0, 0, 0, 0, 0, 0, 0, 0, 2225 1247, 0, 0, 1251, 0, 0, 212, 1253, 236, 238, 2226 247, 0, 0, 0, 0, 1218, 0, 0, 0, 0, 2227 1261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2228 0, 0, 0, 1268, 0, 1270, 1271, 1272, 1273, 0, 2229 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 2230 0, 1280, 0, 1281, 0, 0, 0, 173, 0, 0, 2231 0, 0, 0, 0, 0, 0, 0, 166, 166, 0, 2232 0, 0, 0, 0, 369, 0, 0, 0, 0, 0, 2233 0, 0, 0, 0, 0, 0, 1309, 1310, 0, 0, 2234 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 2235 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2236 212, 0, 236, 238, 247, 0, 0, 0, 0, 0, 2237 0, 0, 0, 715, 0, 0, 0, 0, 0, 0, 2238 0, 0, 0, 0, 0, 166, 1342, 1343, 0, 0, 2239 0, 0, 0, 0, 1304, 0, 1353, 524, 212, 524, 2240 0, 0, 524, 212, 166, 524, 0, 0, 0, 0, 2241 0, 0, 0, 0, 0, 0, 0, 369, 497, 0, 2242 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2243 0, 0, 0, 0, 8, 9, 10, 11, 12, 13, 2131 2244 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2132 24, 25, 592, 0, 600, 364, 0, 0, 0, 0, 2133 0, 0, 0, 31, 356, 624, 625, 357, 0, 0, 2134 0, 0, 356, 356, 356, 0, 0, 0, 0, 0, 2135 0, 0, 0, 356, 356, 0, 0, 0, 0, 0, 2136 0, 34, 0, 0, 0, 0, 0, 79, 0, 364, 2137 364, 364, 0, 0, 0, 0, 0, 0, 0, 0, 2138 226, 0, 0, 0, 0, 0, 0, 0, 364, 0, 2139 284, 285, 0, 286, 0, 0, 0, 0, 0, 0, 2140 0, 0, 81, 0, 58, 58, 364, 0, 356, 0, 2141 0, 0, 0, 0, 357, 0, 357, 88, 0, 287, 2142 0, 0, 0, 0, 0, 288, 0, 58, 0, 289, 2143 0, 0, 290, 291, 292, 293, 41, 42, 0, 294, 2144 295, 0, 0, 88, 0, 58, 364, 43, 0, 357, 2145 0, 0, 0, 0, 0, 0, 0, 357, 357, 357, 2146 0, 0, 296, 0, 380, 0, 0, 381, 357, 357, 2147 0, 46, 47, 298, 299, 300, 301, 0, 356, 0, 2148 0, 0, 81, 364, 0, 0, 0, 0, 0, 0, 2149 0, 0, 0, 349, 349, 0, 0, 0, 0, 0, 2150 0, 0, 58, 0, 0, 0, 0, 58, 0, 0, 2245 24, 25, -291, 0, 26, 27, 28, 1388, 0, 1389, 2246 1390, 1391, 0, 31, 0, 0, 212, 0, 0, 166, 2247 0, 1395, 0, 0, 0, 0, 0, 0, 0, 0, 2248 1406, 369, 0, 0, 0, 810, 0, 0, 212, 0, 2249 0, 34, 0, 236, 238, 0, 37, 0, 336, 337, 2250 40, 247, -291, 0, 0, 1427, 0, 41, 42, 0, 2251 0, 597, 0, 0, 321, 0, 597, 0, 0, 0, 2252 0, 0, 0, 0, 346, 369, 369, 369, 0, 157, 2253 0, 0, 0, 634, 0, 338, 382, 382, 0, 0, 2254 0, 45, 46, 369, 212, 0, 0, 0, 1465, 1466, 2151 2255 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2152 0, 0, 0, 357, 0, 0, 0, 79, 0, 364, 2153 0, 0, 0, 0, 79, 0, 0, 0, 0, 364, 2154 58, 364, 0, 0, 0, 0, 227, 0, 0, 364, 2155 0, 0, 0, 364, 0, 8, 9, 10, 11, 12, 2256 0, 1471, 212, 0, 0, 0, 0, 212, 1471, 212, 2257 283, 284, 0, 285, 0, 524, 0, 252, 0, 0, 2258 0, 0, 0, 0, 0, 0, 212, 257, 0, 212, 2259 212, 0, 0, 0, 0, 0, 0, 212, 0, 286, 2260 1504, 369, 0, 934, 1510, 287, 0, 321, 0, 288, 2261 0, 212, 289, 290, 291, 292, 41, 42, 212, 293, 2262 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2263 0, 478, 1532, 0, 1533, 0, 715, 0, 0, 0, 2264 0, 0, 295, 157, 379, 0, 0, 380, 0, 0, 2265 45, 46, 297, 298, 299, 300, 0, 386, 0, 0, 2266 0, 0, 1548, 1549, 0, 0, 0, 0, 0, 0, 2267 1552, 1553, 0, 0, 0, 0, 0, 0, 0, 0, 2268 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2269 0, 0, 369, 0, 433, 0, 621, 0, 0, 0, 2270 369, 0, 0, 438, 0, 0, 0, 0, 0, 0, 2271 0, 0, 0, 446, 0, 0, 0, 0, 0, 0, 2272 0, 0, 0, 0, 283, 284, 0, 285, 0, 0, 2273 0, 0, 212, 0, 0, 0, 0, 0, 464, 0, 2274 0, 0, 0, 474, 0, 0, 0, 382, 0, 0, 2275 0, 0, 0, 286, 0, 0, 482, 0, 0, 287, 2276 212, 0, 492, 288, 496, 212, 289, 290, 291, 292, 2277 41, 42, 0, 293, 294, 0, 0, 0, 0, 0, 2278 0, 526, 0, 0, 0, 0, 0, 0, 0, 0, 2279 0, 0, 0, 0, 0, 715, 295, 0, 379, 0, 2280 0, 0, 0, 757, 45, 46, 297, 298, 299, 300, 2281 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2282 0, 0, 0, 585, 0, 0, 0, 0, 590, 0, 2283 0, 0, 0, 0, 166, 0, 212, 0, 0, 0, 2284 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, 2285 212, 0, 0, 0, 0, 0, 0, 635, 0, 0, 2286 0, 636, 637, 0, 639, 0, 0, 0, 0, 0, 2287 497, 650, 651, 0, 652, 653, 0, 654, 0, 655, 2288 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2289 597, 0, 0, 758, 0, 0, 585, 0, 741, 0, 2290 0, 741, 0, 0, 670, 0, 0, 0, 0, 0, 2291 0, 369, 369, 767, 0, 0, 0, 0, 0, 0, 2292 0, 0, 0, 0, 0, 0, 0, 0, 0, 681, 2293 0, 212, 0, 0, 0, 788, 0, 0, 0, 0, 2294 0, 0, 0, 212, 0, 797, 0, 0, 0, 0, 2295 0, 0, 346, 0, 0, 707, 0, 758, 0, 0, 2296 0, 710, 212, 0, 0, 0, 464, 0, 0, 0, 2297 0, 524, 0, 0, 0, 0, 206, 2, 207, 4, 2298 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2299 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2300 25, 0, 745, 26, 27, 28, 862, 0, 0, 0, 2301 0, 0, 31, 0, 382, 0, 0, 763, 0, 0, 2302 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2303 0, 0, 0, 0, 0, 0, 0, 715, 0, 0, 2304 34, 0, 35, 0, 36, 0, 0, 208, 39, 0, 2305 0, 0, 0, 283, 284, 789, 285, 0, 0, 0, 2306 0, 0, 0, 0, 799, 0, 0, 0, 0, 0, 2307 0, 801, 0, 0, 0, 212, 0, 809, 0, 219, 2308 0, 0, 286, 0, 209, 0, 823, 0, 287, 0, 2309 45, 46, 288, 0, 0, 289, 290, 291, 292, 41, 2310 42, 0, 293, 294, 0, 212, 0, 0, 0, 0, 2311 0, 0, 758, 0, 963, 0, 715, 0, 0, 341, 2312 364, 0, 0, 0, 974, 295, 863, 379, 0, 0, 2313 982, 0, 0, 45, 46, 297, 298, 299, 300, 0, 2314 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2315 0, 212, 0, 414, 0, 0, 0, 0, 0, 0, 2316 414, 0, 809, 0, 0, 369, 369, 0, 0, 0, 2317 904, 0, 1000, 1001, 219, 0, 346, 0, 0, 0, 2318 0, 0, 0, 0, 0, 0, 0, 0, 0, 507, 2319 346, 509, 512, 0, 0, 0, 0, 0, 0, 515, 2320 516, 252, 0, 0, 0, 0, 0, 0, 0, 0, 2321 0, 941, 942, 509, 509, 0, 0, 0, 0, 0, 2322 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 2323 1031, 0, 414, 0, 382, 0, 0, 212, 0, 0, 2324 0, 0, 0, 0, 979, 0, 0, 0, 0, 983, 2325 0, 509, 8, 9, 10, 11, 12, 13, 14, 15, 2326 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2327 0, 346, 26, 27, 28, 0, 0, 0, 0, 0, 2328 0, 31, 684, 0, 0, 369, 414, 509, 0, 0, 2329 0, 0, 0, 0, 414, 581, 0, 414, 584, 0, 2330 0, 0, 0, 0, 0, 0, 0, 0, 364, 34, 2331 321, 0, 613, 1017, 0, 0, 38, 39, 0, 0, 2332 1018, 0, 0, 0, 0, 0, 212, 0, 0, 0, 2333 0, 631, 0, 1020, 341, 1021, 0, 0, 382, 0, 2334 0, 524, 0, 524, 974, 0, 0, 0, 741, 1033, 2335 0, 0, 0, 685, 0, 1037, 0, 686, 0, 45, 2336 46, 414, 0, 0, 0, 414, 0, 1075, 0, 1150, 2337 1076, 0, 0, 0, 0, 0, 0, 524, 0, 524, 2338 1165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2339 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 2340 0, 0, 382, 0, 1183, 0, 166, 0, 0, 0, 2341 0, 0, 0, 0, 0, 0, 0, 0, 0, 974, 2342 974, 212, 8, 9, 10, 11, 12, 13, 14, 15, 2343 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2344 1215, 0, 414, 0, 0, 364, 0, 590, 0, 0, 2345 0, 31, 0, 0, 0, 509, 509, 509, 509, 509, 2346 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 2347 509, 509, 509, 0, 0, 0, 0, 283, 284, 34, 2348 285, 0, 1146, 0, 414, 0, 0, 0, 341, 364, 2349 0, 0, 0, 0, 0, 974, 0, 0, 0, 0, 2350 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 2351 0, 0, 287, 862, 0, 0, 288, 0, 0, 289, 2352 290, 291, 292, 41, 42, 0, 293, 294, 1266, 1267, 2353 0, 0, 0, 414, 414, 0, 0, 0, 0, 0, 2354 526, 0, 0, 0, 0, 0, 1211, 0, 0, 295, 2355 0, 379, 803, 364, 971, 0, 0, 45, 46, 297, 2356 298, 299, 300, 613, 0, 613, 613, 0, 0, 0, 2357 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 2358 1223, 0, 842, 364, 0, 1225, 0, 0, 364, 0, 2359 0, 0, 0, 1229, 0, 0, 0, 364, 364, 364, 2360 0, 509, 0, 0, 0, 0, 0, 0, 0, 0, 2361 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 2362 414, 884, 0, 0, 414, 887, 1255, 0, 0, 0, 2363 0, 889, 0, 0, 0, 0, 0, 0, 1263, 0, 2364 0, 1264, 0, 1265, 0, 0, 0, 0, 0, 0, 2365 414, 0, 0, 0, 0, 0, 0, 1274, 1275, 0, 2366 0, 0, 509, 0, 0, 0, 0, 0, 212, 1371, 2367 0, 0, 741, 364, 613, 0, 0, 0, 0, 1288, 2368 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2369 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, 2370 0, 0, 0, 0, 0, 0, 0, 341, 364, 0, 2371 0, 0, 414, 414, 0, 0, 0, 0, 0, 0, 2372 0, 0, 0, 0, 0, 0, 1327, 0, 0, 0, 2373 0, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2374 17, 18, 19, 20, 21, 22, 23, 24, 25, -291, 2375 0, 26, 27, 28, 0, 0, 414, 0, 0, 0, 2376 31, 0, 0, 0, 364, 0, 0, 0, 0, 0, 2377 0, 803, 364, 0, 0, 613, 0, 613, 0, 0, 2378 0, 0, 0, 0, 0, 0, 0, 613, 34, 0, 2379 0, 0, 0, 37, 0, 336, 337, 40, 0, -291, 2380 0, 1377, 0, 1378, 41, 42, 0, 0, 0, 0, 2381 0, 0, 509, 0, 0, 1386, 0, 1387, 0, 0, 2382 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2383 0, 0, 338, 0, 1394, 0, 0, 0, 45, 46, 2384 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2385 1412, 1414, 0, 0, 0, 0, 0, 509, 0, 803, 2386 0, 1419, 0, 0, 1229, 0, 341, 364, 414, 0, 2387 414, 0, 0, 0, 414, 0, 0, 0, 0, 0, 2388 0, 0, 321, 0, 0, 1441, 0, 0, 0, 0, 2389 0, 0, 509, 0, 1448, 613, 613, 1450, 0, 1452, 2390 1454, 1456, 0, 0, 0, 509, 8, 9, 10, 11, 2391 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2392 22, 23, 24, 25, -291, 0, 0, 0, 0, 0, 2393 414, 0, 0, 0, 0, 31, 0, 0, 0, 1486, 2394 0, 1488, 0, 1229, 0, 0, 509, 0, 0, 0, 2395 0, 414, 1143, 0, 0, 0, 0, 0, 1499, 0, 2396 0, 0, 364, 34, 0, 0, 0, 0, 414, 1155, 2397 0, 613, 613, 1160, -291, 0, 0, 0, 0, 0, 2398 0, 0, 0, 364, 364, 0, 0, 0, 0, 0, 2399 0, 0, 0, 0, 0, 0, 0, 1, 2, 207, 2400 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 2401 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2402 24, 25, 0, 509, 26, 27, 28, 29, 0, 0, 2403 30, 283, 284, 31, 285, 0, 0, 0, 0, 0, 2404 0, 0, 0, 0, 0, 0, 414, 0, 414, 0, 2405 0, 0, 0, 414, 0, 0, 0, 0, 0, 0, 2406 286, 34, 613, 35, 0, 36, 287, 0, 38, 39, 2407 288, 0, 0, 289, 290, 291, 292, 41, 42, 0, 2408 293, 294, 0, 509, 509, 803, 414, 1243, 0, 0, 2409 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2410 0, 0, 0, 295, 0, 1055, 0, 0, 0, 364, 2411 0, 45, 46, 297, 298, 299, 300, 0, 0, 0, 2412 0, 0, 0, 0, 0, 0, -126, 0, 1, 2, 2413 207, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2156 2414 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2157 23, 24, 25, -295, 0, 26, 27, 28, 0, 0, 2158 0, 0, 213, 0, 31, 0, 0, 79, 0, 0, 2159 0, 0, 233, 357, 237, 0, 239, 0, 0, 0, 2160 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 2161 0, 0, 34, 0, 0, 88, 0, 37, 349, 337, 2162 338, 40, 0, -295, 0, 0, 0, 0, 41, 42, 2163 0, 0, 0, 0, 213, 0, 237, 239, 248, 43, 2164 0, 0, 81, 58, 0, 364, 0, 0, 0, 81, 2165 0, 0, 0, 0, 635, 0, 339, 0, 0, 128, 2166 128, 128, 0, 46, 47, 0, 0, 58, 0, 0, 2167 0, 0, 284, 285, 58, 286, 0, 213, 932, 0, 2168 933, 0, 0, 0, 0, 0, 0, 936, 937, 0, 2169 0, 0, 942, 0, 0, 0, 0, 0, 0, 0, 2170 364, 287, 81, 167, 947, 0, 0, 288, 0, 951, 2171 0, 289, 0, 0, 290, 291, 292, 293, 41, 42, 2172 220, 294, 295, 0, 0, 0, 0, 58, 0, 43, 2173 0, 0, 0, 128, 0, 128, 0, 0, 213, 987, 2174 237, 239, 248, 0, 296, 0, 380, 0, 0, 0, 2175 0, 0, 792, 46, 47, 298, 299, 300, 301, 0, 2176 277, 364, 364, 0, 364, 364, 0, 0, 167, 0, 2177 0, 0, 274, 0, 0, 0, 213, 0, 0, 0, 2178 0, 213, 0, 0, 88, 0, 0, 0, 508, 0, 2179 510, 513, 0, 0, 0, 0, 498, 0, 516, 517, 2180 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 2181 0, 370, 510, 510, 0, 376, 128, 0, 0, 364, 2182 364, 0, 0, 0, 128, 0, 128, 128, 0, 0, 2183 0, 128, 0, 128, 128, 0, 0, 0, 0, 0, 2184 1033, 1034, 1035, 1036, 213, 1038, 0, 0, 0, 0, 2185 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2186 0, 1082, 0, 0, 167, 0, 213, 0, 0, 0, 2187 0, 237, 239, 0, 0, 1088, 220, 0, 0, 248, 2188 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 2189 0, 0, 0, 364, 167, 0, 0, 0, 0, 0, 2190 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 2191 0, 0, 0, 0, 0, 1108, 0, 0, 0, 376, 2192 0, 0, 213, 0, 0, 0, 167, 0, 0, 0, 2193 0, 0, 0, 0, 0, 0, 227, 0, 0, 0, 2194 213, 0, 0, 0, 0, 213, 0, 213, 0, 525, 2195 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 2196 0, 167, 1141, 0, 213, 0, 0, 213, 213, 1149, 2197 364, 0, 364, 0, 1153, 213, 0, 0, 0, 1157, 2198 0, 1158, 0, 0, 0, 1160, 0, 1161, 1162, 213, 2199 0, 1165, 0, 0, 0, 0, 213, 0, 0, 598, 2200 1177, 0, 0, 0, 622, 364, 0, 0, 0, 0, 2201 0, 0, 0, 364, 364, 364, 0, 0, 1192, 1193, 2202 0, 0, 0, 0, 364, 364, 0, 0, 0, 0, 2203 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 2204 0, 0, 0, 0, 0, 1223, 0, 0, 1225, 0, 2205 0, 0, 0, 0, 510, 510, 510, 510, 510, 510, 2206 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 2207 510, 510, 0, 0, 0, 0, 0, 0, 0, 364, 2208 167, 167, 0, 0, 0, 0, 0, 370, 0, 0, 2209 0, 1239, 0, 0, 0, 0, 0, 1243, 1244, 0, 2210 0, 0, 0, 0, 0, 0, 0, 0, 525, 1255, 2211 213, 0, 0, 0, 0, 0, 0, 0, 0, 1262, 2212 0, 0, 1266, 0, 1267, 0, 0, 1269, 0, 0, 2213 0, 0, 0, 0, 0, 0, 717, 0, 213, 0, 2214 1277, 0, 0, 213, 0, 0, 0, 0, 167, 364, 2215 0, 0, 0, 1284, 0, 1286, 1287, 1288, 1289, 0, 2216 525, 0, 525, 0, 0, 525, 0, 167, 525, 0, 2217 0, 1296, 0, 1297, 0, 0, 0, 174, 0, 0, 2218 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2219 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 2220 0, 510, 0, 0, 0, 88, 1325, 1326, 128, 128, 2221 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 2222 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2223 0, 0, 167, 0, 0, 0, 0, 128, 0, 0, 2224 128, 128, 0, 128, 370, 128, 128, 0, 816, 498, 2225 128, 128, 0, 0, 0, 0, 0, 0, 88, 1361, 2226 1362, 0, 0, 0, 510, 0, 0, 0, 0, 1372, 2227 0, 0, 0, 0, 598, 0, 0, 0, 0, 598, 2228 0, 0, 0, 0, 0, 0, 0, 0, 370, 370, 2229 370, 0, 0, 0, 0, 0, 510, 0, 0, 1022, 2230 0, 0, 8, 9, 10, 11, 12, 370, 0, 0, 2231 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 2232 1404, 0, 158, 0, 0, 0, 213, 0, 0, 284, 2233 285, 31, 286, 1409, 0, 1410, 1411, 1412, 0, 525, 2234 0, 0, 0, 0, 0, 213, 0, 1416, 0, 0, 2235 0, 0, 0, 0, 0, 0, 1427, 0, 287, 34, 2236 0, 0, 0, 0, 288, 370, 0, 941, 289, 0, 2237 253, 290, 291, 292, 293, 41, 42, 0, 294, 295, 2238 258, 0, 0, 1450, 0, 0, 43, 0, 0, 0, 2239 0, 128, 128, 0, 0, 0, 0, 0, 0, 0, 2240 0, 296, 717, 380, 0, 0, 0, 0, 0, 0, 2241 345, 47, 298, 299, 300, 301, 0, 510, 0, 0, 2242 0, 0, 0, 0, 0, 0, 0, 0, 1489, 1490, 2243 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 2244 0, 1495, 0, 0, 0, 0, 0, 0, 1495, 0, 2245 387, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2246 370, 0, 510, 0, 622, 0, 0, 0, 370, 0, 2247 0, 0, 0, 419, 0, 0, 0, 0, 0, 0, 2248 0, 1529, 0, 0, 0, 1535, 0, 434, 0, 0, 2249 0, 213, 0, 0, 0, 0, 439, 0, 0, 0, 2250 510, 0, 0, 0, 0, 0, 447, 0, 0, 0, 2251 0, 0, 0, 510, 1557, 0, 1558, 0, 0, 0, 2252 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 2253 0, 465, 0, 0, 0, 0, 475, 0, 213, 0, 2254 0, 0, 0, 0, 1573, 1574, 0, 0, 0, 483, 2255 0, 128, 1577, 1578, 510, 493, 128, 497, 0, 0, 2256 0, 0, 0, 0, 717, 0, 0, 0, 0, 0, 2257 0, 0, 0, 0, 527, 0, 0, 0, 0, 525, 2415 23, 24, 25, 0, 0, 26, 27, 28, 29, 0, 2416 0, 30, 283, 284, 31, 1040, 1041, 0, 1042, 0, 2417 341, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 0, 2418 0, 0, 1051, 0, 0, 0, 1052, 1053, 364, 33, 2419 0, 286, 34, 0, 35, 0, 36, 1054, 0, 38, 2420 39, 288, 0, 0, 289, 290, 291, 292, 41, 42, 2421 0, 293, 294, 0, 0, 0, 0, 0, 0, 0, 2258 2422 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2259 0, 0, 0, 0, 284, 285, 0, 286, 0, 0, 2260 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 2261 213, 0, 0, 0, 0, 0, 586, 0, 0, 370, 2262 0, 591, 0, 287, 213, 0, 0, 0, 0, 288, 2263 0, 510, 0, 289, 0, 0, 290, 291, 292, 293, 2264 41, 42, 0, 294, 295, 0, 0, 0, 0, 0, 2265 636, 43, 0, 0, 637, 638, 0, 640, 0, 0, 2266 0, 0, 598, 0, 652, 653, 507, 654, 655, 0, 2267 656, 0, 657, 0, 0, 46, 47, 298, 299, 300, 2268 301, 0, 0, 370, 370, 0, 0, 0, 0, 586, 2269 0, 0, 0, 0, 510, 510, 0, 672, 0, 0, 2423 0, 0, 0, 0, 295, 0, 1055, 364, 364, 172, 2424 0, 0, 45, 46, 297, 298, 299, 300, 0, 0, 2425 0, 0, 1056, 0, 0, 0, 0, -126, 0, 0, 2426 0, 0, 1, 2, 207, 4, 5, 6, 7, 8, 2427 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2428 19, 20, 21, 22, 23, 24, 25, 0, 509, 26, 2429 27, 28, 29, 0, 0, 30, 283, 284, 31, 285, 2430 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 2270 2431 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2271 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 2272 128, 0, 683, 0, 0, 0, 0, 0, 0, 0, 2432 0, 0, 0, 0, 0, 286, 34, 0, 35, 0, 2433 36, 287, 0, 38, 39, 288, 0, 0, 289, 290, 2434 291, 292, 41, 42, 0, 293, 294, 0, 0, 0, 2435 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 2436 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 2437 44, 0, 0, 0, 509, 509, 45, 46, 297, 298, 2438 299, 300, 0, 2, 207, 4, 5, 6, 7, 8, 2439 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2440 19, 20, 21, 22, 23, 24, 25, 0, 0, 26, 2441 27, 28, 0, 0, 0, 0, 283, 284, 31, 285, 2442 0, 0, 0, 8, 9, 10, 11, 12, 13, 14, 2443 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2444 25, -292, 0, 0, 414, 286, 34, 0, 35, 0, 2445 36, 287, 31, 38, 39, 288, 0, 0, 289, 290, 2446 291, 292, 41, 42, 0, 293, 294, 0, 414, 414, 2273 2447 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2274 0, 0, 0, 525, 0, 0, 0, 0, 709, 0, 2275 0, 0, 0, 0, 712, 0, 0, -520, 0, 465, 2276 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2448 34, 0, 0, 0, 0, 0, 0, 0, 295, 0, 2449 343, -292, 0, 414, 0, 757, 344, 46, 297, 298, 2450 299, 300, 2, 207, 4, 5, 6, 7, 8, 9, 2451 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2452 20, 21, 22, 23, 24, 25, 0, 0, 26, 27, 2453 28, 0, 0, 0, 0, 283, 284, 31, 285, 8, 2454 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2455 19, 20, 21, 22, 23, 24, 25, 0, 0, 26, 2456 27, 28, 0, 0, 286, 34, 0, 35, 31, 36, 2457 287, 0, 38, 39, 288, 0, 0, 289, 290, 291, 2458 292, 41, 42, 0, 293, 294, 0, 0, 0, 0, 2459 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 2460 0, 111, 0, 38, 39, 0, 0, 295, 0, 962, 2461 0, 0, 41, 42, 757, 344, 46, 297, 298, 299, 2462 300, 2, 207, 4, 5, 6, 7, 8, 9, 10, 2277 2463 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2278 2464 21, 22, 23, 24, 25, 0, 0, 26, 27, 28, 2279 29, 0, 0, 30, 0, 749, 31, 32, 0, 0, 2280 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2281 768, 0, 717, 0, 213, 0, 0, 0, 0, 0, 2282 0, 33, 0, 0, 34, 0, 35, 0, 36, 37, 2283 0, 38, 39, 40, 0, 0, 0, 0, 0, 0, 2284 41, 42, 0, 0, 0, 0, 0, 0, 795, 0, 2285 0, 43, 128, 0, 220, 0, 0, 805, 0, 342, 2286 365, 0, 0, 0, 807, 0, 44, 0, 45, 0, 2287 815, 0, 0, 0, 0, 46, 47, 0, 0, 829, 2288 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2289 0, 717, 0, 415, 0, 0, 0, 0, 0, 0, 2290 415, 0, 0, 0, 0, 510, 0, 0, 0, 0, 2291 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2292 869, 0, 0, 510, 0, 0, 0, 0, 0, 0, 2293 0, 284, 285, 0, 286, 0, 0, 0, 0, 0, 2294 0, 0, 0, 370, 370, 0, 0, 0, 0, 0, 2295 0, 0, 220, 0, 0, 0, 815, 0, 0, 0, 2296 287, 0, 0, 0, 911, 0, 288, 0, 0, 0, 2297 289, 0, 415, 290, 291, 292, 293, 41, 42, 0, 2298 294, 295, 0, 0, 0, 0, 0, 0, 43, 0, 2299 0, 0, 0, 0, 0, 253, 510, 510, 0, 0, 2300 0, 0, 0, 296, 0, 948, 949, 0, 0, 0, 2301 0, 0, 46, 47, 298, 299, 300, 301, 0, 966, 2302 0, 0, 0, 0, 0, 0, 415, 0, 0, 0, 2303 0, 0, 0, 0, 415, 582, 0, 415, 585, 0, 2304 988, 0, 989, 0, 0, 0, 993, 0, 365, 0, 2305 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 2306 0, 0, 0, 0, 0, 0, 0, 0, 370, 0, 2307 213, 632, 0, 0, 342, 8, 9, 10, 11, 12, 2308 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2309 23, 24, 25, -295, 0, 26, 27, 28, 0, 0, 2310 0, 415, 0, 0, 31, 415, 0, 0, 0, 0, 2311 0, 1027, 0, 0, 0, 0, 0, 0, 1028, 0, 2312 0, 0, 0, 0, 0, 0, 525, 0, 525, 0, 2313 0, 1030, 34, 1031, 0, 0, 365, 37, 0, 337, 2314 338, 40, 0, -295, 0, 0, 0, 1043, 41, 42, 2315 0, 0, 0, 0, 1047, 0, 0, 0, 0, 43, 2316 0, 0, 0, 525, 322, 525, 1085, 0, 0, 1086, 2317 0, 0, 0, 0, 347, 0, 339, 0, 0, 0, 2318 0, 0, 415, 46, 47, 365, 383, 383, 0, 0, 2319 0, 0, 0, 167, 207, 2, 208, 4, 5, 6, 2320 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2321 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 2322 0, 26, 27, 28, 415, 0, 0, 0, 342, 365, 2323 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2324 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 2325 0, 0, 0, 0, 0, 0, 0, 322, 34, 0, 2326 35, 0, 36, 0, 0, 209, 39, 0, 0, 0, 2327 0, 0, 0, 415, 415, 0, 0, 0, 0, 0, 2328 0, 479, 0, 0, 1159, 43, 0, 0, 0, 0, 2329 0, 0, 809, 365, 0, 0, 0, 0, 0, 0, 2330 0, 0, 210, 614, 0, 614, 614, 0, 0, 46, 2331 47, 0, 614, 0, 0, 0, 0, 0, 0, 0, 2332 0, 0, 848, 365, 0, 0, 0, 0, 365, 0, 2333 0, 0, 0, 0, 0, 0, 0, 365, 365, 365, 2334 0, 0, 527, 0, 0, 0, 0, 0, 1224, 0, 2335 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 2336 0, 415, 891, 0, 0, 415, 894, 0, 0, 0, 2337 0, 0, 896, 0, 0, 0, 0, 0, 0, 0, 2338 0, 0, 1236, 0, 0, 0, 0, 1238, 0, 0, 2339 0, 415, 0, 0, 0, 1242, 0, 383, 0, 0, 2340 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2341 0, 0, 0, 0, 365, 614, 0, 0, 0, 0, 2342 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2343 0, 1271, 0, 0, 0, 0, 0, 0, 0, 0, 2344 0, 0, 0, 1279, 0, 0, 1280, 0, 1281, 0, 2345 342, 365, 0, 0, 0, 415, 415, 0, 0, 0, 2346 0, 0, 1290, 1291, 0, 0, 0, 0, 0, 0, 2347 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2348 0, 0, 0, 0, 1304, 0, 0, 0, 0, 0, 2349 0, 711, 284, 285, 0, 286, 0, 0, 0, 0, 2350 0, 415, 0, 0, 0, 0, 0, 0, 0, 365, 2351 0, 0, 0, 0, 0, 0, 809, 365, 0, 0, 2352 614, 287, 614, 0, 0, 0, 0, 288, 0, 0, 2353 745, 289, 614, 1345, 290, 291, 292, 293, 41, 42, 2354 0, 294, 295, 762, 0, 0, 0, 0, 745, 43, 2355 0, 745, 0, 0, 0, 0, 0, 0, 0, 0, 2356 0, 0, 772, 773, 296, 0, 380, 0, 0, 0, 2357 0, 761, 0, 46, 47, 298, 299, 300, 301, 0, 2358 0, 0, 0, 0, 0, 794, 0, 0, 0, 0, 2359 0, 0, 0, 0, 0, 803, 0, 0, 0, 0, 2360 0, 0, 347, 0, 0, 809, 0, 762, 0, 1396, 2361 0, 1397, 342, 365, 415, 0, 415, 0, 0, 0, 2362 415, 0, 0, 0, 0, 1407, 0, 1408, 0, 0, 2363 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2364 0, 614, 614, 0, 0, 1415, 0, 0, 0, 0, 2365 0, 0, 0, 0, 0, 0, 868, 0, 0, 0, 2366 0, 1433, 1435, 0, 0, 383, 0, 0, 365, 0, 2367 0, 0, 1440, 0, 0, 1242, 0, 0, 415, 8, 2368 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2369 19, 20, 21, 22, 23, 24, 25, -295, 1464, 0, 2370 415, 1156, 0, 0, 0, 0, 0, 1471, 31, 0, 2371 1473, 365, 1475, 1477, 1479, 0, 0, 415, 1168, 0, 2372 614, 614, 1173, 0, 0, 0, 0, 0, 0, 0, 2373 0, 0, 365, 365, 0, 0, 34, 0, 0, 0, 2374 0, 0, 0, 0, 0, 0, 0, -295, 0, 0, 2375 0, 0, 0, 0, 1510, 0, 1512, 0, 1242, 0, 2376 0, 0, 0, 0, 0, 762, 0, 972, 0, 0, 2377 0, 0, 0, 0, 1524, 0, 0, 983, 0, 0, 2378 0, 0, 0, 0, 992, 0, 0, 0, 0, 0, 2379 0, 0, 0, 0, 0, 415, 0, 415, 0, 0, 2380 0, 0, 415, 0, 0, 0, 0, 0, 0, 0, 2381 0, 614, 0, 0, 0, 0, 0, 0, 0, 1175, 2382 0, 0, 8, 9, 10, 11, 12, 1010, 1011, 0, 2383 0, 347, 0, 0, 0, 0, 809, 415, 1258, 0, 2384 0, 0, 0, 0, 0, 347, 0, 0, 0, 284, 2385 285, 31, 286, 0, 0, 0, 0, 0, 0, 0, 2386 0, 365, 0, 0, 0, 0, 0, 0, 0, 0, 2387 0, 0, 0, 0, 0, 0, 0, 0, 287, 34, 2388 0, 0, 0, 0, 288, 1041, 0, 0, 289, 383, 2389 0, 290, 291, 292, 293, 41, 42, 0, 294, 295, 2390 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 2391 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2392 0, 296, 342, 380, 0, 0, 0, 347, 0, 0, 2393 1176, 47, 298, 299, 300, 301, 0, 0, 0, 0, 2394 365, 2, 208, 4, 5, 6, 7, 8, 9, 10, 2395 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2396 21, 22, 23, 24, 25, 0, 322, 26, 27, 28, 2397 0, 0, 0, 0, 284, 285, 31, 286, 0, 0, 2398 0, 0, 1132, 1133, 0, 0, 0, 0, 0, 0, 2399 0, 0, 365, 365, 0, 0, 383, 0, 0, 0, 2400 0, 0, 983, 287, 34, 1147, 35, 745, 36, 288, 2401 0, 38, 39, 289, 0, 0, 290, 291, 292, 293, 2402 41, 42, 0, 294, 295, 0, 0, 0, 1163, 0, 2403 0, 43, 0, 0, 0, 0, 0, 0, 0, 1178, 2404 0, 284, 285, 0, 286, 0, 296, 0, 344, 0, 2405 0, 0, 0, 761, 0, 345, 47, 298, 299, 300, 2406 301, 383, 0, 1196, 0, 0, 0, 0, 0, 0, 2407 287, 0, 0, 0, 0, 0, 288, 0, 983, 983, 2408 289, 0, 0, 290, 291, 292, 293, 41, 42, 0, 2409 294, 295, 0, 0, 0, 0, 0, 0, 43, 1228, 2410 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2411 0, 0, 0, 296, 0, 380, 0, 365, 980, 0, 2412 0, 0, 46, 47, 298, 299, 300, 301, 0, 0, 2413 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 2465 0, 0, 0, 0, 283, 284, 31, 285, 8, 9, 2414 2466 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2415 20, 21, 22, 23, 24, 25, 983, 0, 26, 27, 2416 28, 29, 0, 0, 30, 0, 0, 31, 32, 0, 2417 0, 0, 0, 0, 0, 868, 0, 0, 0, 0, 2418 0, 284, 285, 0, 286, 0, 0, 0, 0, 0, 2419 1282, 1283, 33, 0, 0, 34, 0, 35, 0, 36, 2420 37, 0, 38, 39, 40, 0, 0, 415, 0, 0, 2421 287, 41, 42, 0, 0, 0, 288, 0, 0, 0, 2422 289, 0, 43, 290, 291, 292, 293, 41, 42, 0, 2423 294, 295, 415, 415, 0, 0, 0, 44, 43, 45, 2424 0, 0, 0, -524, 0, 0, 46, 47, 0, 0, 2425 0, 0, 0, 296, 0, 380, 0, 415, 0, 0, 2426 0, 0, 46, 47, 298, 299, 300, 301, 0, 0, 2427 983, 0, 1, 2, 208, 4, 5, 6, 7, 8, 2428 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2429 19, 20, 21, 22, 23, 24, 25, 0, 0, 26, 2430 27, 28, 29, 0, 0, 30, 284, 285, 31, 1050, 2431 1051, 0, 1052, 0, 0, 1053, 1054, 1055, 1056, 1057, 2432 1058, 1059, 1060, 0, 0, 0, 1061, 0, 0, 0, 2433 1062, 1063, 0, 33, 1390, 287, 34, 745, 35, 0, 2434 36, 1064, 0, 38, 39, 289, 0, 0, 290, 291, 2435 292, 293, 41, 42, 0, 294, 295, 0, 0, 0, 2436 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 2437 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 2438 1065, 0, 0, 173, 0, 0, 0, 46, 47, 298, 2439 299, 300, 301, 0, 0, 0, 0, 1066, 0, 0, 2440 0, -130, 0, 0, 0, 0, 0, 0, 0, 0, 2441 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2442 0, 1449, 0, 0, 0, 0, 0, 0, 1, 2, 2443 208, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2444 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2445 23, 24, 25, 0, 0, 26, 27, 28, 29, 0, 2446 0, 30, 284, 285, 31, 286, 8, 9, 10, 11, 2467 20, 21, 22, 23, 24, 25, 0, 0, 26, 27, 2468 28, 0, 0, 286, 34, 0, 35, 31, 36, 287, 2469 0, 38, 39, 288, 0, 0, 289, 290, 291, 292, 2470 41, 42, 0, 293, 294, 0, 0, 0, 0, 0, 2471 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 2472 0, 0, 38, 39, 0, 0, 295, 0, 962, 0, 2473 0, 0, 0, 757, 45, 46, 297, 298, 299, 300, 2474 2, 207, 4, 5, 6, 7, 8, 9, 10, 11, 2447 2475 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2448 2476 22, 23, 24, 25, 0, 0, 26, 27, 28, 0, 2449 0, 287, 34, 0, 35, 31, 36, 288, 0, 38, 2450 39, 289, 0, 1516, 290, 291, 292, 293, 41, 42, 2451 0, 294, 295, 0, 0, 0, 0, 0, 0, 43, 2452 0, 0, 0, 34, 0, 0, 0, 0, 112, 0, 2453 38, 39, 0, 0, 296, 0, 1065, 0, 0, 41, 2454 42, 0, 0, 46, 47, 298, 299, 300, 301, 0, 2455 0, 0, 0, 0, 0, 0, 322, -130, 1, 2, 2456 208, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2457 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2458 23, 24, 25, 0, 0, 26, 27, 28, 29, 0, 2459 0, 30, 284, 285, 31, 286, 0, 0, 0, 8, 2460 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2461 19, 20, 21, 22, 23, 24, 25, -296, 0, 0, 2462 0, 287, 34, 0, 35, 0, 36, 288, 31, 38, 2463 39, 289, 0, 0, 290, 291, 292, 293, 41, 42, 2464 0, 294, 295, 0, 0, 0, 0, 0, 0, 43, 2465 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 2466 0, 0, 0, 0, 296, 0, 45, -296, 0, 0, 2467 0, 0, 0, 46, 47, 298, 299, 300, 301, 2, 2468 208, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2477 0, 0, 0, 283, 284, 31, 285, 8, 9, 10, 2478 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2479 21, 22, 23, 24, 25, 0, 0, 26, 27, 28, 2480 0, 0, 286, 34, 0, 35, 31, 36, 287, 0, 2481 38, 39, 288, 0, 0, 289, 290, 291, 292, 41, 2482 42, 0, 293, 294, 0, 0, 0, 0, 0, 0, 2483 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 2484 0, 208, 39, 0, 0, 295, 0, 343, 0, 0, 2485 0, 0, 0, 344, 46, 297, 298, 299, 300, 2, 2486 207, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2469 2487 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2470 2488 23, 24, 25, 0, 0, 26, 27, 28, 0, 0, 2471 0, 0, 284, 285, 31, 286, 8, 9, 10, 11, 2472 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2473 22, 23, 24, 25, 0, 0, 26, 27, 28, 0, 2474 0, 287, 34, 0, 35, 31, 36, 288, 0, 38, 2475 39, 289, 0, 0, 290, 291, 292, 293, 41, 42, 2476 0, 294, 295, 0, 0, 0, 0, 0, 0, 43, 2477 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 2478 38, 39, 0, 0, 296, 0, 971, 0, 0, 0, 2479 0, 761, 0, 345, 47, 298, 299, 300, 301, 2, 2480 208, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2481 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2482 23, 24, 25, 0, 0, 26, 27, 28, 0, 0, 2483 0, 0, 284, 285, 31, 286, 8, 9, 10, 11, 2484 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2485 22, 23, 24, 25, 0, 0, 26, 27, 28, 0, 2486 0, 287, 34, 0, 35, 31, 36, 288, 0, 38, 2487 39, 289, 0, 0, 290, 291, 292, 293, 41, 42, 2488 0, 294, 295, 0, 0, 0, 0, 0, 0, 43, 2489 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 2490 209, 39, 0, 0, 296, 0, 971, 0, 0, 0, 2491 0, 761, 0, 46, 47, 298, 299, 300, 301, 2, 2492 208, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2493 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2494 23, 24, 25, 0, 0, 26, 27, 28, 0, 0, 2495 0, 0, 284, 285, 31, 286, 0, 0, 0, 0, 2489 0, 0, 283, 284, 31, 285, 0, 0, 0, 0, 2496 2490 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2497 2491 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2498 0, 28 7, 34, 0, 35, 0, 36, 288, 0, 38,2499 39, 28 9, 0, 0, 290, 291, 292, 293, 41, 42,2500 0, 29 4, 295, 0, 0, 0, 0, 0, 0, 43,2492 0, 286, 34, 0, 35, 0, 36, 287, 0, 208, 2493 39, 288, 0, 0, 289, 290, 291, 292, 41, 42, 2494 0, 293, 294, 0, 0, 0, 0, 0, 0, 0, 2501 2495 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2502 0, 0, 0, 0, 29 6, 0, 344, 0, 0, 0,2503 0, 0, 0, 345, 47, 298, 299, 300, 301, 2,2504 208, 4, 5, 6, 7, 8, 9, 10, 11, 12,2505 1 3, 14, 15, 16, 17, 18, 19, 20, 21, 22,2506 2 3, 24, 25, 0, 0, 26, 27, 28, 0, 0,2507 0, 0, 284, 285, 31, 286, 0, 0, 0, 0,2496 0, 0, 0, 0, 295, 0, 997, 0, 0, 0, 2497 0, 0, 998, 46, 297, 298, 299, 300, 2, 207, 2498 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 2499 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2500 24, 25, 0, 0, 26, 27, 28, 0, 0, 0, 2501 0, 283, 284, 31, 285, 0, 0, 0, 0, 0, 2508 2502 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2509 2503 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2510 0, 287, 34, 0, 35, 0, 36, 288, 0, 209,2511 39, 289, 0, 0, 290, 291, 292, 293, 41, 42,2512 0, 294, 295, 0, 0, 0, 0, 0, 0, 43,2504 286, 34, 0, 35, 0, 36, 287, 0, 38, 39, 2505 288, 0, 0, 289, 290, 291, 292, 41, 42, 0, 2506 293, 294, 0, 0, 0, 0, 0, 0, 0, 0, 2513 2507 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2514 0, 0, 0, 0, 296, 0, 1007, 0, 0, 0,2515 0, 0, 0, 1008, 47, 298, 299, 300, 301, 2,2516 208, 4, 5, 6, 7, 8, 9, 10, 11, 12,2517 1 3, 14, 15, 16, 17, 18, 19, 20, 21, 22,2518 2 3, 24, 25, 0, 0, 26, 27, 28, 0, 0,2519 0, 0, 284, 285, 31, 286, 0, 0, 0, 0,2508 0, 0, 0, 295, 0, 962, 0, 0, 0, 0, 2509 0, 344, 46, 297, 298, 299, 300, 2, 207, 4, 2510 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2511 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2512 25, 0, 0, 26, 27, 28, 0, 0, 0, 0, 2513 283, 284, 31, 285, 0, 0, 0, 0, 0, 0, 2520 2514 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2515 0, 0, 0, 0, 0, 0, 0, 0, 0, 286, 2516 34, 0, 35, 0, 36, 287, 0, 208, 39, 288, 2517 0, 0, 289, 290, 291, 292, 41, 42, 0, 293, 2518 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2521 2519 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2522 0, 287, 34, 0, 35, 0, 36, 288, 0, 38, 2523 39, 289, 0, 0, 290, 291, 292, 293, 41, 42, 2524 0, 294, 295, 0, 0, 0, 0, 0, 0, 43, 2525 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2526 0, 0, 0, 0, 296, 0, 971, 0, 0, 0, 2527 0, 0, 0, 345, 47, 298, 299, 300, 301, 2, 2528 208, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2529 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2530 23, 24, 25, 0, 0, 26, 27, 28, 0, 0, 2531 0, 0, 284, 285, 31, 286, 0, 0, 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, 287, 34, 0, 35, 0, 36, 288, 0, 209, 2535 39, 289, 0, 0, 290, 291, 292, 293, 41, 42, 2536 0, 294, 295, 0, 0, 0, 0, 0, 0, 43, 2537 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2538 0, 0, 0, 0, 296, 0, 380, 0, 0, 0, 2539 0, 0, 0, 46, 47, 298, 299, 300, 301, 1, 2520 0, 0, 295, 0, 379, 0, 0, 0, 0, 0, 2521 45, 46, 297, 298, 299, 300, -515, 0, 0, 1, 2540 2522 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 2541 2523 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, … … 2547 2529 38, 39, 40, 0, 0, 0, 0, 0, 0, 41, 2548 2530 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2549 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2550 0, 0, 0, 0, 0, 44, 0, 45, 0, 0, 2551 0, 0, 0, 0, 46, 47, 207, 2, 208, 4, 2531 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2532 0, 0, 0, 0, 0, 43, 0, 44, 0, 0, 2533 0, 0, 0, 45, 46, 1, 2, 3, 4, 5, 2534 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2535 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2536 0, 0, 26, 27, 28, 29, 0, 0, 30, 0, 2537 0, 31, 32, 0, 0, 0, 0, 0, 0, 0, 2538 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2539 0, 0, 0, 0, 0, 0, 33, 0, 0, 34, 2540 0, 35, 0, 36, 37, 0, 38, 39, 40, 0, 2541 0, 0, 0, 0, 0, 41, 42, 0, 0, 0, 2542 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2543 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2544 0, 43, 0, 44, 0, 0, 0, -519, 0, 45, 2545 46, 1, 2, 3, 4, 5, 6, 7, 8, 9, 2546 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2547 20, 21, 22, 23, 24, 25, 0, 0, 26, 27, 2548 28, 29, 0, 0, 30, 0, 0, 31, 32, 0, 2549 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2550 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2551 0, 0, 33, 0, 0, 34, 0, 35, 0, 36, 2552 37, 0, 38, 39, 40, 0, 0, 0, 0, 0, 2553 0, 41, 42, 0, 0, 0, 0, 0, 0, 0, 2554 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2555 0, 0, 0, 0, 0, 0, 0, 43, 0, 44, 2556 0, 0, 0, 0, 0, 45, 46, 1, 2, 207, 2557 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 2558 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2559 24, 25, 0, 0, 26, 27, 28, 29, 0, 0, 2560 30, 0, 0, 31, 0, 0, 0, 0, 0, 0, 2561 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2562 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2563 0, 34, 0, 35, 0, 36, 0, 0, 38, 39, 2564 0, 2, 207, 4, 5, 6, 7, 8, 9, 10, 2565 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2566 21, 22, 23, 24, 25, 0, 0, 26, 27, 28, 2567 0, 0, 0, 0, 0, 44, 31, 0, 0, 0, 2568 0, 45, 46, 0, 0, 0, 0, 0, 0, 0, 2569 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2570 0, 0, 0, 0, 34, 0, 35, 0, 36, 37, 2571 0, 208, 39, 40, 0, 0, 0, 0, 0, 0, 2572 41, 42, 0, 0, 0, 0, 0, 0, 0, 0, 2573 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2574 0, 0, 0, 0, 0, 0, 43, 0, 209, 0, 2575 0, 0, 0, 0, 45, 46, 2, 207, 4, 5, 2576 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2577 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2578 0, 0, 26, 27, 28, 0, 0, 0, 0, 0, 2579 0, 31, 0, 0, 0, 0, 8, 9, 10, 11, 2580 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2581 22, 23, 24, 25, 0, 0, 26, 27, 28, 34, 2582 0, 35, 0, 36, 0, 31, 38, 39, 0, 2, 2583 207, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2584 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2585 23, 24, 25, 34, 0, 26, 27, 28, 0, 0, 2586 38, 39, -399, 677, 31, 0, 0, 0, 0, 45, 2587 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2588 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2589 0, 0, 34, 0, 35, 634, 36, 338, 0, 38, 2590 39, 0, 0, 45, 46, 0, 0, 0, 0, 0, 2591 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2592 0, 1350, 0, 0, 0, 0, 0, 0, 0, 0, 2593 0, 0, 0, 0, 0, 0, 677, 0, 0, 0, 2594 0, 0, 45, 46, 2, 207, 4, 5, 6, 7, 2595 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2596 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 2597 26, 27, 28, 0, 0, 0, 0, 0, 0, 31, 2598 0, 0, 0, 8, 9, 10, 11, 12, 13, 14, 2599 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2600 25, 0, 0, 26, 27, 28, 0, 34, 0, 35, 2601 0, 36, 31, 684, 38, 39, 0, 0, 0, 0, 2602 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2603 0, 0, 0, 0, 0, 0, 1352, 0, 0, 0, 2604 34, 0, 0, 0, 0, 0, 0, 38, 39, 0, 2605 0, 677, 0, 0, 0, 0, 0, 45, 46, 2, 2606 207, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2607 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2608 23, 24, 25, 0, 685, 26, 27, 28, 1091, 0, 2609 45, 46, 0, 0, 31, 0, 0, 0, 0, 0, 2610 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2611 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2612 0, 0, 34, 0, 35, 0, 36, 0, 0, 208, 2613 39, 0, 2, 207, 4, 5, 6, 7, 8, 9, 2614 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2615 20, 21, 22, 23, 24, 25, 0, 0, 26, 27, 2616 28, 0, 0, 0, 0, 0, 271, 31, 0, 0, 2617 0, 0, 45, 46, 0, 0, 0, 0, 0, 0, 2618 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2619 0, 0, 0, 0, 0, 34, 0, 35, 0, 36, 2620 0, 0, 38, 39, 0, 2, 207, 4, 5, 6, 2621 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2622 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 2623 0, 26, 27, 28, 0, 0, 0, 0, 0, 677, 2624 31, 0, 0, 0, 0, 45, 46, 0, 0, 0, 2625 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2626 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 2627 35, 0, 36, 0, 0, 38, 39, 0, 2, 207, 2628 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 2629 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2630 24, 25, 0, 0, 26, 27, 28, 0, 0, 0, 2631 0, 0, 592, 31, 0, 0, 0, 0, 45, 46, 2632 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2633 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2634 0, 34, 0, 35, 0, 36, 0, 0, 208, 39, 2635 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2636 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 2637 26, 27, 28, 0, 0, 0, 0, 283, 284, 31, 2638 285, 0, 0, 0, 0, 209, 0, 0, 0, 0, 2639 0, 45, 46, 0, 0, 0, 0, 0, 0, 0, 2640 0, 0, 0, 0, 0, 0, 286, 34, 0, 0, 2641 0, 0, 287, 0, 38, 39, 288, 0, 0, 289, 2642 290, 291, 292, 41, 42, 0, 293, 294, 0, 0, 2643 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2644 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, 2645 0, 517, 0, 0, 172, 0, 0, 45, 46, 297, 2646 298, 299, 300, 8, 9, 10, 11, 12, 13, 14, 2647 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2648 25, 0, 0, 26, 27, 28, 0, 0, 0, 0, 2649 283, 284, 31, 285, 8, 9, 10, 11, 12, 13, 2650 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2651 24, 25, 0, 0, 26, 27, 28, 0, 0, 286, 2652 34, 0, 0, 31, 0, 287, 0, 38, 39, 288, 2653 0, 0, 289, 290, 291, 292, 41, 42, 0, 293, 2654 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2655 0, 34, 0, 0, 0, 0, 37, 0, 336, 337, 2656 40, 0, 295, -35, 296, 0, 0, 41, 42, 0, 2657 45, 46, 297, 298, 299, 300, 8, 9, 10, 11, 2658 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2659 22, 23, 24, 25, 0, 338, 26, 27, 28, 0, 2660 0, 45, 46, 283, 284, 31, 285, 8, 9, 10, 2661 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2662 21, 22, 23, 24, 25, 0, 0, 26, 27, 28, 2663 0, 0, 286, 34, 0, 0, 31, 0, 287, 0, 2664 38, 39, 288, 0, 0, 289, 290, 291, 292, 41, 2665 42, 0, 293, 294, 0, 0, 0, 0, 0, 0, 2666 0, 0, 0, 0, 34, 0, 0, 0, 0, 111, 2667 0, 38, 39, 0, 0, 295, 0, 296, 0, 0, 2668 41, 42, 0, 45, 46, 297, 298, 299, 300, 8, 2669 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2670 19, 20, 21, 22, 23, 24, 25, 0, 44, 26, 2671 27, 28, 0, 0, 45, 46, 283, 284, 31, 285, 2672 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2673 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 2674 26, 27, 28, 0, 0, 286, 34, 0, 0, 31, 2675 684, 287, 0, 38, 39, 288, 0, 0, 289, 290, 2676 291, 292, 41, 42, 0, 293, 294, 0, 0, 0, 2677 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 2678 0, 0, 0, 0, 38, 39, 0, 0, 295, 0, 2679 158, 0, 0, 0, 0, 0, 45, 46, 297, 298, 2680 299, 300, 8, 9, 10, 11, 12, 13, 14, 15, 2681 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2682 0, 685, 26, 27, 28, 1220, 0, 45, 46, 283, 2683 284, 31, 285, 8, 9, 10, 11, 12, 13, 14, 2684 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2685 25, 0, 0, 26, 27, 28, 0, 0, 286, 34, 2686 0, 0, 31, 0, 287, 0, 38, 39, 288, 0, 2687 0, 289, 290, 291, 292, 41, 42, 0, 293, 294, 2688 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2689 34, 0, 0, 0, 0, 0, 0, 38, 39, 0, 2690 0, 295, 0, 592, 0, 0, 0, 0, 0, 45, 2691 46, 297, 298, 299, 300, 8, 9, 10, 11, 12, 2692 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2693 23, 24, 25, 0, 258, 26, 27, 28, 0, 0, 2694 45, 46, 283, 284, 31, 285, 0, 0, 0, 0, 2695 0, 0, 0, 8, 9, 10, 11, 12, 13, 14, 2696 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2697 25, 286, 34, 26, 27, 28, 0, 287, 0, 38, 2698 39, 288, 31, 0, 289, 290, 291, 292, 41, 42, 2699 0, 293, 294, 0, 0, 0, 0, 0, 0, 0, 2700 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2701 34, 0, 0, 0, 295, 0, 379, 38, 39, 0, 2702 0, 0, 45, 46, 297, 298, 299, 300, 467, 2, 2703 207, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2704 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2705 23, 24, 25, 0, 158, 26, 27, 28, 0, 0, 2706 45, 46, 0, 0, 31, 0, 0, 0, 8, 9, 2707 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2708 20, 21, 22, 23, 24, 25, 0, 0, 26, 27, 2709 28, 0, 34, 0, 35, 0, 36, 31, 0, 38, 2710 39, 0, 0, 0, 0, 0, 8, 9, 10, 11, 2711 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2712 22, 23, 24, 25, 0, 34, 26, 27, 28, 0, 2713 37, 0, 38, 39, 40, 31, 0, 0, 0, -3, 2714 0, 41, 42, 0, 8, 9, 10, 11, 12, 13, 2715 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2716 24, 25, 0, 34, 26, 27, 28, 43, 37, 158, 2717 38, 39, 40, 31, 0, 45, 46, 0, 0, 41, 2718 42, 0, 8, 9, 10, 11, 12, 13, 14, 15, 2719 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2720 0, 34, 26, 27, 28, 43, 37, 44, 208, 39, 2721 40, 31, 0, 45, 46, 0, 0, 41, 42, 0, 2722 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2723 18, 19, 20, 21, 22, 23, 24, 25, -291, 34, 2724 26, 27, 28, 43, 37, 271, 336, 337, 40, 31, 2725 0, 45, 46, 0, 0, 41, 42, 0, 8, 9, 2726 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2727 20, 21, 22, 23, 24, 25, -291, 34, 26, 27, 2728 28, 634, 0, 338, 38, 39, 0, 31, -291, 45, 2729 46, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2730 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 2731 0, 26, 27, 28, 0, 34, 0, 0, 0, 634, 2732 31, 338, 38, 39, 0, 0, -291, 45, 46, 8, 2733 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2734 19, 20, 21, 22, 23, 24, 25, 0, 34, 26, 2735 27, 28, 0, 0, 0, 208, 39, 0, 31, 338, 2736 0, 0, 0, 0, 0, 45, 46, 8, 9, 10, 2737 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2738 21, 22, 23, 24, 25, 0, 34, 26, 27, 28, 2739 0, 0, 271, 38, 39, 0, 31, 0, 45, 46, 2740 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2741 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 2742 26, 27, 28, 0, 34, 0, 0, 0, 0, 31, 2743 338, 38, 39, 0, 0, 0, 45, 46, 8, 9, 2744 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2745 20, 21, 22, 23, 24, 25, 0, 34, 26, 27, 2746 28, 0, 0, 0, 38, 39, 0, 31, 685, 0, 2747 0, 0, 0, 0, 45, 46, 0, 0, 0, 0, 2748 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2749 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 2750 0, 592, 38, 39, 0, 0, 0, 45, 46, 2, 2751 207, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2752 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2753 23, 24, 25, 0, 0, 26, 27, 28, 0, 44, 2754 0, 0, 0, 0, 31, 45, 46, 0, 0, 0, 2755 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2756 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2757 0, 0, 34, 0, 35, 0, 36, 0, 0, 38, 2758 39, 283, 284, 0, 285, 1041, 0, 1042, 0, 0, 2759 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 0, 0, 2760 1524, 1051, 0, 0, 0, 1052, 1053, 0, 33, 0, 2761 286, 0, 0, 0, 0, -412, 1054, 0, 0, 0, 2762 288, 0, 0, 289, 290, 291, 292, 41, 42, 0, 2763 293, 294, 0, 0, 0, 0, 0, 0, 0, 0, 2764 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2765 0, 0, 0, 295, 0, 379, 0, 0, 172, 0, 2766 0, 45, 46, 297, 298, 299, 300, 0, 0, 283, 2767 284, 1056, 285, 1041, 0, 1042, -126, 0, 1043, 1044, 2768 1045, 1046, 1047, 1048, 1049, 1050, 0, 0, 0, 1051, 2769 0, 0, 0, 1052, 1053, 0, 33, 0, 286, 0, 2770 0, 0, 0, 0, 1054, 0, 0, 0, 288, 0, 2771 0, 289, 290, 291, 292, 41, 42, 0, 293, 294, 2772 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2773 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2774 0, 295, 0, 379, 0, 0, 172, 0, 0, 45, 2775 46, 297, 298, 299, 300, 0, 0, 0, 0, 1056, 2776 0, 0, 0, 0, -126, 2, 207, 4, 5, 6, 2777 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2778 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 2779 0, 26, 27, 28, 0, 0, 0, 0, 0, 0, 2780 31, 0, 283, 284, 0, 285, 1041, 0, 1042, 1398, 2781 1399, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 0, 2782 0, 1524, 1051, 0, 0, 0, 1052, 1053, 34, 33, 2783 35, 286, 36, 0, 0, 38, 39, 1054, 0, 0, 2784 0, 288, 0, 0, 289, 290, 291, 292, 41, 42, 2785 0, 293, 294, 0, 0, 0, 0, 1311, 0, 0, 2786 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2787 0, 0, 0, 0, 295, 0, 379, 0, 0, 172, 2788 0, 0, 45, 46, 297, 298, 299, 300, 0, 0, 2789 283, 284, 1056, 285, 1041, 0, 1042, 1398, 1399, 1043, 2790 1044, 1045, 1046, 1047, 1048, 1049, 1050, 0, 0, 0, 2791 1051, 0, 0, 0, 1052, 1053, 0, 33, 0, 286, 2792 0, 0, 0, 0, 0, 1054, 0, 0, 0, 288, 2793 0, 0, 289, 290, 291, 292, 41, 42, 0, 293, 2794 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2795 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2796 0, 0, 295, 0, 379, 0, 0, 172, 0, 0, 2797 45, 46, 297, 298, 299, 300, 0, 0, 283, 284, 2798 1056, 285, 1041, 0, 1042, 0, 0, 1043, 1044, 1045, 2799 1046, 1047, 1048, 1049, 1050, 0, 0, 0, 1051, 0, 2800 0, 0, 1052, 1053, 0, 33, 0, 286, 0, 0, 2801 0, 0, 0, 1054, 0, 0, 0, 288, 0, 0, 2802 289, 290, 291, 292, 41, 42, 0, 293, 294, 0, 2803 0, 0, 0, 0, 0, 283, 284, 0, 285, 0, 2804 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2805 295, 0, 379, 0, 0, 172, 0, 0, 45, 46, 2806 297, 298, 299, 300, 286, 0, 0, 0, 1056, 0, 2807 640, 0, 140, 141, 288, 0, 0, 289, 290, 291, 2808 292, 41, 42, 0, 293, 294, 0, 0, 0, 0, 2809 0, 0, 283, 284, 0, 285, 0, 0, 0, 0, 2810 0, 0, 0, 0, 0, 0, 0, 295, 0, 641, 2811 0, 642, 380, 0, 0, 45, 46, 297, 298, 299, 2812 300, 286, 0, 0, 0, 0, 0, 287, 0, 0, 2813 0, 288, 0, 0, 289, 290, 291, 292, 41, 42, 2814 0, 293, 294, 0, 0, 0, 0, 0, 0, 283, 2815 284, 0, 285, 0, 0, 0, 0, 0, 0, 0, 2816 0, 0, 0, 0, 295, 0, 379, 0, 283, 284, 2817 0, 285, 708, 46, 297, 298, 299, 300, 286, 0, 2818 0, 0, 0, 0, 287, 0, 0, 0, 288, 0, 2819 0, 289, 290, 291, 292, 41, 42, 286, 293, 294, 2820 0, 0, 0, 287, 0, 0, 0, 288, 0, 0, 2821 289, 290, 291, 292, 41, 42, 0, 293, 294, 0, 2822 0, 295, 0, 379, 0, 283, 284, 0, 285, 344, 2823 46, 297, 298, 299, 300, 0, 0, 0, 0, 0, 2824 506, 0, 0, 0, 283, 284, 0, 285, 45, 46, 2825 297, 298, 299, 300, 286, 0, 0, 0, 0, 0, 2826 287, 0, 0, 0, 288, 0, 0, 289, 290, 291, 2827 292, 41, 42, 286, 293, 294, 0, 0, 0, 287, 2828 0, 0, 0, 288, 0, 0, 289, 290, 291, 292, 2829 41, 42, 0, 293, 294, 0, 0, 295, 0, 0, 2830 0, 283, 284, 0, 285, 45, 46, 297, 298, 299, 2831 300, 0, 0, 0, 0, 0, 511, 0, 0, 0, 2832 0, 0, 0, 0, 45, 46, 297, 298, 299, 300, 2833 286, 0, 0, 0, 0, 0, 287, 0, 0, 0, 2834 288, 0, 0, 289, 290, 291, 292, 41, 42, 0, 2835 293, 294, 0, 0, 0, 0, 0, 0, 0, 0, 2836 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2837 0, 0, 0, 514, 0, 0, 0, 0, 0, 0, 2838 0, 45, 46, 297, 298, 299, 300, 2, 207, 4, 2552 2839 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2553 2840 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2554 25, 0, 0, 26, 27, 28, 0, 0, 0, 0, 2555 0, 0, 31, 0, 8, 9, 10, 11, 12, 13, 2556 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2557 24, 25, 0, 0, 26, 27, 28, 486, 487, 488, 2558 34, 0, 35, 31, 36, 37, 0, 209, 39, 40, 2559 0, 0, 0, 0, 0, 0, 41, 42, 0, 0, 2560 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 2561 0, 34, 0, 0, 0, 0, 0, 0, 38, 39, 2562 0, 0, 44, 0, 210, 0, 0, 0, 0, 0, 2563 0, 46, 47, 1, 2, 208, 4, 5, 6, 7, 2564 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2565 18, 19, 20, 21, 22, 23, 24, 25, -295, 0, 2566 26, 27, 28, 29, 0, 0, 30, 0, 0, 31, 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, 0, 34, 0, 35, 2570 0, 36, 0, 0, 38, 39, 0, 0, -295, 0, 2571 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2572 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 2573 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2574 0, 45, 0, 0, 0, 0, 0, 0, 46, 47, 2575 1, 2, 208, 4, 5, 6, 7, 8, 9, 10, 2576 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2577 21, 22, 23, 24, 25, 0, 0, 26, 27, 28, 2578 29, 0, 0, 30, 0, 0, 31, 0, 0, 0, 2579 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2580 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2581 0, 0, 0, 0, 34, 0, 35, 0, 36, 0, 2582 0, 38, 39, 0, 0, 0, 0, 0, 0, 0, 2583 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2584 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 2585 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 2586 0, 0, 0, 0, 0, 46, 47, 2, 208, 4, 2587 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2588 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2589 25, 0, 0, 26, 27, 28, 0, 0, 0, 0, 2841 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2590 2842 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 2591 2843 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2592 2844 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2593 34, 0, 35, 0, 36, 37, 0, 209, 39, 40, 2594 0, 0, 0, 0, 0, 0, 41, 42, 0, 0, 2595 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 2596 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2597 0, 0, 44, 0, 210, 0, 0, 0, 0, 0, 2598 0, 46, 47, 2, 208, 4, 5, 6, 7, 8, 2599 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2600 19, 20, 21, 22, 23, 24, 25, 0, 0, 26, 2601 27, 28, 0, 0, 0, 0, 0, 0, 31, 0, 2602 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2603 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2604 0, 0, 0, 0, 0, 0, 34, 0, 35, 0, 2605 36, 0, 0, 38, 39, 0, 0, 0, 0, 0, 2606 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2607 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 2608 0, 0, 0, 0, 0, 0, 0, 0, 0, -403, 2609 679, 0, 0, 0, 0, 0, 0, 46, 47, 2, 2610 208, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2845 34, 0, 35, 0, 36, 37, 0, 175, 176, 40, 2846 0, 0, 0, 0, 0, 0, 41, 42, 206, 2, 2847 207, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2611 2848 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2612 2849 23, 24, 25, 0, 0, 26, 27, 28, 0, 0, … … 2614 2851 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2615 2852 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2616 0, 0, 34, 0, 35, 0, 36, 0, 0, 38, 2617 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2618 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 2619 0, 1369, 0, 0, 0, 0, 0, 0, 0, 0, 2620 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, 2621 0, 0, 0, 46, 47, 2, 208, 4, 5, 6, 2622 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2623 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 2624 0, 26, 27, 28, 0, 0, 0, 0, 0, 0, 2625 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2626 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2627 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 2628 35, 0, 36, 0, 0, 38, 39, 0, 0, 0, 2629 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2630 0, 0, 0, 0, 0, 43, 0, 1371, 0, 0, 2631 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2632 0, 0, 679, 0, 0, 0, 0, 0, 0, 46, 2633 47, 2, 208, 4, 5, 6, 7, 8, 9, 10, 2634 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2635 21, 22, 23, 24, 25, 0, 0, 26, 27, 28, 2636 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 2853 0, 0, 34, 0, 35, 0, 36, 0, 0, 208, 2854 39, 467, 2, 207, 4, 5, 6, 7, 8, 9, 2855 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2856 20, 21, 22, 23, 24, 25, 0, 0, 26, 27, 2857 28, 0, 0, 0, 0, 0, 0, 31, 0, 0, 2637 2858 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2638 2859 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2639 0, 0, 0, 0, 34, 0, 35, 0, 36, 0, 2640 0, 209, 39, 0, 0, 0, 0, 0, 0, 0, 2641 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2642 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 2643 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 2644 0, 0, 0, 0, 0, 46, 47, 2, 208, 4, 2645 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2646 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2647 25, 0, 0, 26, 27, 28, 0, 0, 0, 0, 2648 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 2649 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2650 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2651 34, 0, 35, 0, 36, 0, 0, 38, 39, 0, 2652 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2653 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 2654 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2655 0, 0, 0, 0, 679, 0, 0, 0, 0, 0, 2656 0, 46, 47, 2, 208, 4, 5, 6, 7, 8, 2657 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2658 19, 20, 21, 22, 23, 24, 25, 0, 0, 26, 2659 27, 28, 0, 0, 0, 0, 0, 0, 31, 0, 2660 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2661 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2662 0, 0, 0, 0, 0, 0, 34, 0, 35, 0, 2663 36, 0, 0, 38, 39, 0, 0, 0, 0, 0, 2664 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2665 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 2666 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2667 593, 0, 0, 0, 0, 0, 0, 46, 47, 2, 2668 208, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2669 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2670 23, 24, 25, 0, 0, 26, 27, 28, 0, 0, 2671 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 2672 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2673 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2674 0, 0, 34, 0, 35, 0, 36, 0, 0, 209, 2675 39, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2676 17, 18, 19, 20, 21, 22, 23, 24, 25, 43, 2677 0, 26, 27, 28, 0, 0, 0, 0, 284, 285, 2678 31, 286, 0, 0, 0, 0, 210, 0, 0, 0, 2679 0, 0, 0, 46, 47, 0, 0, 0, 0, 0, 2680 0, 0, 0, 0, 0, 0, 0, 287, 34, 0, 2681 0, 0, 0, 288, 0, 38, 39, 289, 0, 0, 2682 290, 291, 292, 293, 41, 42, 0, 294, 295, 0, 2683 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 2684 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2685 296, 0, 518, 0, 0, 173, 0, 0, 0, 46, 2686 47, 298, 299, 300, 301, 8, 9, 10, 11, 12, 2687 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2688 23, 24, 25, 0, 0, 26, 27, 28, 0, 0, 2689 0, 0, 284, 285, 31, 286, 0, 0, 0, 0, 2690 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2691 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2692 0, 287, 34, 0, 0, 0, 0, 641, 0, 38, 2693 39, 289, 0, 0, 290, 291, 292, 293, 41, 42, 2694 0, 294, 295, 0, 0, 0, 0, 0, 0, 43, 2695 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2696 0, 0, 0, 0, 296, -35, 742, 0, 0, 0, 2697 0, 0, 0, 46, 47, 298, 299, 300, 301, 8, 2698 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2699 19, 20, 21, 22, 23, 24, 25, 0, 0, 26, 2700 27, 28, 0, 0, 0, 0, 284, 285, 31, 286, 2701 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2702 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2703 0, 0, 0, 0, 0, 287, 34, 0, 0, 0, 2704 0, 288, 0, 38, 39, 289, 0, 0, 290, 291, 2705 292, 293, 41, 42, 0, 294, 295, 0, 0, 0, 2706 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 2707 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 2708 297, 0, 0, 0, 0, 0, 0, 46, 47, 298, 2709 299, 300, 301, 8, 9, 10, 11, 12, 13, 14, 2710 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2711 25, 0, 0, 26, 27, 28, 0, 0, 0, 0, 2712 284, 285, 31, 286, 0, 0, 0, 0, 0, 0, 2713 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2714 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 2715 34, 0, 0, 0, 0, 288, 0, 38, 39, 289, 2716 0, 0, 290, 291, 292, 293, 41, 42, 0, 294, 2717 295, 0, 0, 0, 0, 0, 0, 43, 0, 0, 2718 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2719 0, 0, 296, 0, 159, 0, 0, 0, 0, 0, 2720 0, 46, 47, 298, 299, 300, 301, 8, 9, 10, 2721 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2722 21, 22, 23, 24, 25, 0, 0, 26, 27, 28, 2723 0, 0, 0, 0, 284, 285, 31, 286, 0, 0, 2724 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2725 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2726 0, 0, 0, 287, 34, 0, 0, 0, 0, 288, 2727 0, 38, 39, 289, 0, 0, 290, 291, 292, 293, 2728 41, 42, 0, 294, 295, 0, 0, 0, 0, 0, 2729 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 2730 0, 0, 0, 0, 0, 0, 296, 0, 593, 0, 2731 0, 0, 0, 0, 0, 46, 47, 298, 299, 300, 2732 301, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2733 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 2734 0, 26, 27, 28, 0, 0, 0, 0, 284, 285, 2735 31, 286, 0, 0, 0, 0, 0, 0, 0, 0, 2736 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2737 0, 0, 0, 0, 0, 0, 0, 287, 34, 0, 2738 0, 0, 0, 288, 0, 38, 39, 289, 0, 0, 2739 290, 291, 292, 293, 41, 42, 0, 294, 295, 0, 2740 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 2741 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2742 296, 0, 380, 0, 0, 0, 0, 0, 0, 46, 2743 47, 298, 299, 300, 301, 468, 2, 208, 4, 5, 2744 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2745 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2746 0, 0, 26, 27, 28, 0, 0, 0, 0, 0, 2747 0, 31, 0, 0, 0, 8, 9, 10, 11, 12, 2748 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2749 23, 24, 25, 0, 0, 26, 27, 28, 0, 34, 2750 0, 35, 0, 36, 31, 0, 38, 39, 0, 0, 2751 0, 0, 0, 8, 9, 10, 11, 12, 13, 14, 2752 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2753 25, 0, 34, 26, 27, 28, 0, 37, 0, 38, 2754 39, 40, 31, 0, 0, 0, -3, 0, 41, 42, 2755 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 2756 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2757 34, 0, 0, 0, 44, 37, 159, 38, 39, 40, 2758 0, 0, 0, 46, 47, 0, 41, 42, 0, 0, 2759 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 2760 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2761 0, 0, 44, 0, 45, 0, 0, 0, 0, 0, 2762 0, 46, 47, 8, 9, 10, 11, 12, 13, 14, 2763 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2764 25, 0, 0, 26, 27, 28, 0, 0, 0, 0, 2765 0, 0, 31, 8, 9, 10, 11, 12, 13, 14, 2766 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2767 25, 0, 0, 26, 27, 28, 0, 0, 0, 0, 2768 34, 0, 31, 0, 0, 37, 0, 209, 39, 40, 2769 0, 0, 0, 0, 0, 0, 41, 42, 0, 0, 2770 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 2771 34, 0, 0, 0, 0, 37, 0, 337, 338, 40, 2772 0, 0, 44, 0, 272, 0, 41, 42, 0, 0, 2773 0, 46, 47, 0, 0, 0, 0, 43, 0, 0, 2774 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2775 0, 0, 635, 0, 339, 0, 0, 0, 0, 0, 2776 0, 46, 47, 8, 9, 10, 11, 12, 13, 14, 2777 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2778 25, 0, 0, 26, 27, 28, 0, 0, 0, 0, 2779 0, 0, 31, 8, 9, 10, 11, 12, 13, 14, 2780 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2781 25, 0, 0, 26, 27, 28, 0, 0, 0, 0, 2782 34, 0, 31, 0, 0, 37, 0, 337, 338, 40, 2783 0, 0, 0, 0, 0, 0, 41, 42, 0, 0, 2784 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 2785 34, 0, 0, 0, 0, 112, 0, 38, 39, 0, 2786 0, 0, 0, 0, 339, 0, 41, 42, 0, 0, 2787 0, 46, 47, 0, 0, 0, 0, 43, 0, 0, 2788 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2789 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 2790 0, 46, 47, 8, 9, 10, 11, 12, 13, 14, 2791 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2792 25, -295, 0, 26, 27, 28, 0, 0, 0, 0, 2793 0, 0, 31, 8, 9, 10, 11, 12, 13, 14, 2794 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2795 25, 0, 0, 26, 27, 28, 0, 0, 0, 0, 2796 34, 0, 31, 686, 0, 0, 0, 38, 39, 0, 2797 0, -295, 0, 0, 0, 0, 0, 0, 0, 0, 2798 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 2799 34, 0, 0, 0, 0, 0, 0, 38, 39, 0, 2800 0, 0, 635, 0, 339, 0, 0, 0, 0, 0, 2801 0, 46, 47, 0, 0, 0, 0, 43, 0, 0, 2802 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2803 0, 0, 0, 0, 687, 0, 0, 0, 688, 0, 2804 0, 46, 47, 8, 9, 10, 11, 12, 13, 14, 2805 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2806 25, -295, 0, 26, 27, 28, 0, 0, 0, 0, 2807 0, 0, 31, 8, 9, 10, 11, 12, 13, 14, 2808 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2809 25, 0, 0, 26, 27, 28, 0, 0, 0, 0, 2810 34, 0, 31, 686, 0, 0, 0, 38, 39, 0, 2811 0, -295, 0, 0, 0, 0, 0, 0, 0, 0, 2812 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 2813 34, 0, 0, 0, 0, 0, 0, 38, 39, 0, 2814 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 2815 0, 46, 47, 0, 0, 0, 0, 43, 0, 0, 2816 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2817 0, 0, 0, 0, 687, 0, 0, 0, 1101, 0, 2818 0, 46, 47, 8, 9, 10, 11, 12, 13, 14, 2819 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2820 25, 0, 0, 26, 27, 28, 0, 0, 0, 0, 2821 0, 0, 31, 686, 8, 9, 10, 11, 12, 13, 2822 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2823 24, 25, 0, 0, 26, 27, 28, 0, 0, 0, 2824 34, 0, 0, 31, 0, 0, 0, 38, 39, 0, 2825 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2826 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 2827 0, 34, 0, 0, 0, 0, 0, 0, 38, 39, 2828 0, 0, 0, 0, 687, 0, 0, 0, 1233, 0, 2829 0, 46, 47, 0, 0, 0, 0, 0, 43, 0, 2830 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2831 0, 0, 0, 635, 0, 339, 0, 0, 0, 0, 2832 0, 0, 46, 47, 8, 9, 10, 11, 12, 13, 2833 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2834 24, 25, 0, 0, 26, 27, 28, 0, 0, 0, 2835 0, 0, 0, 31, 8, 9, 10, 11, 12, 13, 2836 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2837 24, 25, 0, 0, 26, 27, 28, 0, 0, 0, 2838 0, 34, 0, 31, 0, 0, 0, 0, 38, 39, 2839 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2840 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 2841 0, 34, 0, 0, 0, 0, 0, 0, 38, 39, 2842 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 2843 0, 0, 46, 47, 0, 0, 0, 0, 43, 0, 2844 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2845 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 2846 0, 0, 46, 47, 8, 9, 10, 11, 12, 13, 2847 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2848 24, 25, 0, 0, 26, 27, 28, 0, 0, 0, 2849 0, 0, 0, 31, 8, 9, 10, 11, 12, 13, 2850 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2851 24, 25, 0, 0, 26, 27, 28, 0, 0, 0, 2852 0, 34, 0, 31, 0, 0, 0, 0, 209, 39, 2853 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2854 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 2855 0, 34, 0, 0, 0, 0, 0, 0, 38, 39, 2856 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 2857 0, 0, 46, 47, 0, 0, 0, 0, 43, 0, 2858 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2859 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 2860 0, 0, 46, 47, 8, 9, 10, 11, 12, 13, 2861 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2862 24, 25, 0, 0, 26, 27, 28, 0, 0, 0, 2863 0, 0, 0, 31, 8, 9, 10, 11, 12, 13, 2864 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2865 24, 25, 0, 0, 26, 27, 28, 0, 0, 0, 2866 0, 34, 0, 31, 0, 0, 0, 0, 38, 39, 2867 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2868 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 2869 0, 34, 0, 0, 0, 0, 0, 0, 38, 39, 2870 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, 2871 0, 0, 46, 47, 0, 0, 0, 0, 43, 0, 2872 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2873 0, 0, 0, 0, 0, 593, 0, 0, 0, 0, 2874 0, 0, 46, 47, 8, 9, 10, 11, 12, 13, 2875 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2876 24, 25, 0, 0, 26, 27, 28, 0, 0, 0, 2877 0, 0, 0, 31, 8, 9, 10, 11, 12, 13, 2878 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2879 24, 25, 0, 0, 26, 27, 28, 0, 0, 0, 2880 0, 34, 0, 31, 0, 0, 0, 0, 38, 39, 2881 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2882 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 2883 0, 34, 0, 0, 0, 0, 0, 0, 209, 39, 2884 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 2885 0, 0, 46, 47, 0, 0, 0, 0, 43, 0, 2886 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2887 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2888 0, 0, 46, 47, 2, 208, 4, 5, 6, 7, 2860 0, 0, 0, 0, 0, 34, 0, 35, 0, 36, 2861 0, 0, 38, 39, 2, 207, 4, 5, 6, 7, 2889 2862 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2890 2863 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 2891 2864 26, 27, 28, 0, 0, 0, 0, 0, 0, 31, 2892 0, 284, 285, 0, 286, 1051, 0, 1052, 0, 0, 2893 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 0, 0, 2894 1549, 1061, 0, 0, 0, 1062, 1063, 34, 33, 35, 2895 287, 36, 0, 0, 38, 39, 1064, 0, 0, 0, 2896 289, 0, 0, 290, 291, 292, 293, 41, 42, 0, 2897 294, 295, 0, 0, 0, 0, 0, 0, 43, 0, 2865 0, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2866 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 2867 0, 26, 27, 28, 485, 486, 487, 34, 0, 35, 2868 31, 36, 0, 0, 208, 39, 0, 0, 0, 0, 2898 2869 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2899 -416, 0, 0, 296, 0, 380, 0, 0, 173, 0, 2900 0, 0, 46, 47, 298, 299, 300, 301, 0, 0, 2901 0, 0, 1066, 0, 284, 285, -130, 286, 1051, 0, 2902 1052, 0, 0, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 2903 1060, 0, 0, 0, 1061, 0, 0, 0, 1062, 1063, 2904 0, 33, 0, 287, 0, 0, 0, 0, 0, 1064, 2905 0, 0, 0, 289, 0, 0, 290, 291, 292, 293, 2906 41, 42, 0, 294, 295, 0, 0, 0, 0, 0, 2907 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 2908 0, 0, 0, 0, 0, 0, 296, 0, 380, 0, 2909 0, 173, 0, 0, 0, 46, 47, 298, 299, 300, 2910 301, 0, 0, 0, 0, 1066, 0, 0, 0, -130, 2911 2, 208, 4, 5, 6, 7, 8, 9, 10, 11, 2912 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2913 22, 23, 24, 25, 0, 0, 26, 27, 28, 0, 2914 0, 0, 0, 0, 0, 31, 0, 284, 285, 0, 2915 286, 1051, 0, 1052, 1419, 1420, 1053, 1054, 1055, 1056, 2916 1057, 1058, 1059, 1060, 0, 0, 1549, 1061, 0, 0, 2917 0, 1062, 1063, 34, 33, 35, 287, 36, 0, 0, 2918 38, 39, 1064, 0, 0, 0, 289, 0, 0, 290, 2919 291, 292, 293, 41, 42, 0, 294, 295, 0, 0, 2920 0, 0, 1327, 0, 43, 0, 0, 0, 0, 0, 2921 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 2922 0, 380, 0, 0, 173, 0, 0, 0, 46, 47, 2923 298, 299, 300, 301, 0, 0, 284, 285, 1066, 286, 2924 1051, 0, 1052, 1419, 1420, 1053, 1054, 1055, 1056, 1057, 2925 1058, 1059, 1060, 0, 0, 0, 1061, 0, 0, 0, 2926 1062, 1063, 0, 33, 0, 287, 0, 0, 0, 0, 2927 0, 1064, 0, 0, 0, 289, 0, 0, 290, 291, 2928 292, 293, 41, 42, 0, 294, 295, 0, 0, 0, 2929 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 2930 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 2931 380, 0, 0, 173, 0, 0, 0, 46, 47, 298, 2932 299, 300, 301, 0, 0, 284, 285, 1066, 286, 1051, 2933 0, 1052, 0, 0, 1053, 1054, 1055, 1056, 1057, 1058, 2934 1059, 1060, 0, 0, 0, 1061, 0, 0, 0, 1062, 2935 1063, 0, 33, 0, 287, 0, 0, 0, 0, 0, 2936 1064, 0, 0, 0, 289, 0, 0, 290, 291, 292, 2937 293, 41, 42, 0, 294, 295, 0, 0, 0, 0, 2938 0, 0, 43, 284, 285, 0, 286, 0, 0, 0, 2939 0, 0, 0, 0, 0, 0, 0, 296, 0, 380, 2940 0, 0, 173, 0, 0, 0, 46, 47, 298, 299, 2941 300, 301, 287, 0, 0, 0, 1066, 0, 641, 0, 2942 141, 142, 289, 0, 0, 290, 642, 292, 293, 41, 2943 42, 0, 294, 295, 0, 0, 0, 0, 0, 0, 2944 43, 284, 285, 0, 286, 0, 0, 0, 0, 0, 2945 0, 0, 0, 0, 0, 296, 0, 643, 0, 644, 2946 381, 0, 0, 0, 46, 47, 298, 299, 300, 301, 2947 287, 0, 0, 0, 0, 0, 288, 0, 0, 0, 2948 289, 0, 0, 290, 291, 292, 293, 41, 42, 0, 2949 294, 295, 0, 0, 0, 0, 0, 0, 43, 284, 2950 285, 0, 286, 0, 0, 0, 0, 0, 0, 0, 2951 0, 0, 0, 296, 0, 380, 0, 0, 284, 285, 2952 0, 286, 710, 47, 298, 299, 300, 301, 287, 0, 2953 0, 0, 0, 0, 641, 0, 0, 0, 289, 0, 2954 0, 290, 291, 292, 293, 41, 42, 287, 294, 295, 2955 0, 0, 0, 288, 0, 0, 43, 289, 0, 0, 2956 290, 291, 292, 293, 41, 42, 0, 294, 295, 0, 2957 0, 296, 0, 765, 0, 43, 284, 285, 0, 286, 2958 46, 47, 298, 299, 300, 301, 0, 0, 0, 0, 2959 296, 0, 380, 0, 0, 284, 285, 0, 286, 345, 2960 47, 298, 299, 300, 301, 287, 0, 0, 0, 0, 2961 0, 288, 0, 0, 0, 289, 0, 0, 290, 291, 2962 292, 293, 41, 42, 287, 294, 295, 0, 0, 0, 2963 288, 0, 0, 43, 289, 0, 0, 290, 291, 292, 2964 293, 41, 42, 0, 294, 295, 0, 0, 512, 0, 2965 0, 0, 43, 0, 0, 0, 0, 46, 47, 298, 2966 299, 300, 301, 0, 0, 0, 0, 515, 0, 0, 2967 0, 0, 0, 0, 0, 0, 46, 47, 298, 299, 2968 300, 301, 2, 208, 4, 5, 6, 7, 8, 9, 2969 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2970 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 2971 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 2972 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2973 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2974 0, 0, 0, 0, 0, 34, 0, 35, 0, 36, 2975 37, 0, 176, 177, 40, 0, 0, 0, 0, 0, 2976 0, 41, 42, 207, 2, 208, 4, 5, 6, 7, 2977 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2978 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 2979 26, 27, 28, 0, 0, 0, 0, 0, 0, 31, 2980 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2981 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2982 0, 0, 0, 0, 0, 0, 0, 34, 0, 35, 2983 0, 36, 0, 0, 209, 39, 468, 2, 208, 4, 2984 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2985 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2986 25, 0, 0, 26, 27, 28, 0, 0, 0, 0, 2987 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 2988 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2989 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2990 34, 0, 35, 0, 36, 0, 0, 38, 39, 2, 2991 208, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2992 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2993 23, 24, 25, 0, 0, 26, 27, 28, 0, 0, 2994 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 2995 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2996 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2997 0, 0, 34, 0, 35, 0, 36, 0, 0, 209, 2998 39 2870 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 2871 0, 0, 0, 0, 0, 38, 39 2999 2872 }; 3000 2873 3001 2874 #define yypact_value_is_default(yystate) \ 3002 ((yystate) == (-1 414))2875 ((yystate) == (-1310)) 3003 2876 3004 2877 #define yytable_value_is_error(yytable_value) \ … … 3007 2880 static const yytype_int16 yycheck[] = 3008 2881 { 3009 0, 1, 44, 187, 187, 535, 187, 0, 44, 753, 3010 187, 44, 206, 241, 648, 187, 522, 753, 188, 881, 3011 1, 753, 107, 221, 118, 187, 187, 514, 621, 170, 3012 171, 350, 32, 0, 986, 760, 0, 189, 603, 32, 3013 350, 601, 601, 493, 44, 188, 281, 497, 44, 993, 3014 50, 39, 1337, 604, 44, 1419, 603, 50, 44, 610, 3015 601, 572, 51, 32, 64, 32, 72, 67, 32, 82, 3016 70, 64, 157, 601, 67, 95, 1050, 70, 39, 346, 3017 419, 44, 45, 267, 267, 1031, 267, 694, 601, 70, 3018 267, 63, 107, 601, 50, 267, 296, 110, 268, 1043, 3019 439, 1062, 1063, 601, 117, 267, 267, 107, 447, 203, 3020 130, 263, 264, 1526, 39, 115, 131, 82, 118, 119, 3021 109, 109, 67, 111, 39, 268, 132, 64, 483, 1493, 3022 72, 1030, 1031, 1546, 39, 44, 45, 39, 365, 84, 3023 1553, 735, 369, 636, 637, 187, 427, 428, 148, 149, 3024 111, 187, 115, 881, 187, 1440, 149, 157, 158, 115, 3025 132, 654, 162, 635, 636, 637, 0, 258, 912, 162, 3026 489, 28, 109, 39, 119, 82, 912, 0, 1, 1140, 3027 912, 112, 654, 689, 109, 116, 111, 187, 188, 72, 3028 132, 187, 148, 110, 109, 188, 111, 187, 32, 116, 3029 0, 187, 82, 203, 109, 114, 111, 720, 82, 32, 3030 117, 211, 720, 411, 495, 96, 483, 162, 211, 712, 3031 82, 78, 720, 223, 0, 267, 58, 427, 428, 109, 3032 223, 267, 32, 514, 267, 118, 110, 407, 115, 116, 3033 712, 241, 123, 109, 67, 111, 85, 70, 109, 111, 3034 111, 109, 67, 253, 131, 211, 32, 342, 818, 818, 3035 253, 261, 109, 1423, 407, 830, 266, 267, 268, 820, 3036 1, 996, 283, 273, 113, 268, 108, 818, 223, 111, 3037 635, 636, 637, 830, 253, 241, 253, 372, 799, 253, 3038 818, 67, 1238, 603, 0, 1, 296, 931, 579, 654, 3039 907, 11, 1254, 397, 119, 818, 1, 507, 308, 116, 3040 818, 481, 512, 109, 807, 515, 261, 273, 491, 50, 3041 818, 266, 1050, 1475, 324, 132, 32, 109, 419, 329, 3042 1304, 425, 44, 45, 230, 807, 329, 431, 481, 112, 3043 80, 112, 342, 116, 683, 1291, 346, 162, 439, 131, 3044 350, 351, 308, 249, 621, 82, 447, 712, 1510, 626, 3045 1512, 1521, 1224, 590, 70, 365, 1526, 116, 568, 369, 3046 697, 111, 372, 113, 96, 940, 107, 117, 110, 939, 3047 939, 110, 109, 132, 115, 117, 1546, 116, 220, 110, 3048 346, 1290, 1291, 1553, 749, 1526, 117, 397, 939, 131, 3049 223, 123, 114, 90, 91, 632, 351, 407, 223, 10, 3050 11, 12, 13, 14, 407, 114, 1009, 148, 116, 253, 3051 94, 0, 1553, 80, 258, 425, 157, 427, 428, 1125, 3052 253, 431, 605, 1129, 434, 109, 609, 111, 39, 126, 3053 127, 526, 274, 116, 118, 119, 261, 223, 129, 281, 3054 131, 266, 807, 253, 111, 455, 113, 630, 258, 132, 3055 117, 634, 116, 1407, 1408, 1059, 67, 1018, 1019, 1415, 3056 976, 427, 428, 473, 3, 112, 207, 253, 132, 116, 3057 211, 481, 749, 483, 116, 485, 697, 432, 481, 489, 3058 1464, 72, 485, 0, 505, 495, 1224, 1471, 948, 734, 3059 132, 116, 83, 84, 991, 1139, 658, 507, 649, 509, 3060 241, 830, 512, 3, 514, 515, 1415, 349, 485, 689, 3061 830, 485, 522, 0, 116, 32, 526, 527, 110, 474, 3062 111, 109, 116, 111, 366, 117, 351, 44, 370, 495, 3063 132, 72, 273, 50, 1109, 276, 689, 253, 132, 94, 3064 1524, 112, 83, 84, 116, 116, 911, 64, 514, 254, 3065 67, 1496, 656, 70, 109, 296, 111, 1502, 116, 109, 3066 132, 571, 572, 118, 119, 351, 1304, 308, 131, 579, 3067 111, 792, 809, 94, 132, 419, 913, 814, 1523, 1095, 3068 590, 591, 683, 1528, 1100, 595, 116, 917, 109, 919, 3069 111, 601, 110, 603, 116, 439, 116, 118, 119, 110, 3070 110, 342, 132, 447, 116, 346, 116, 432, 709, 419, 3071 132, 621, 132, 579, 116, 944, 626, 591, 628, 112, 3072 132, 958, 632, 116, 365, 635, 636, 637, 369, 439, 3073 132, 372, 149, 109, 911, 111, 110, 447, 112, 483, 3074 595, 485, 116, 109, 654, 162, 656, 668, 869, 474, 3075 110, 72, 485, 748, 109, 621, 116, 131, 132, 867, 3076 626, 110, 83, 84, 50, 1030, 903, 116, 623, 852, 3077 187, 188, 72, 628, 109, 485, 686, 109, 110, 689, 3078 888, 120, 121, 83, 84, 110, 427, 428, 474, 71, 3079 111, 116, 913, 75, 211, 109, 78, 111, 80, 485, 3080 1304, 118, 712, 713, 714, 87, 223, 124, 125, 109, 3081 720, 721, 950, 109, 455, 111, 109, 738, 912, 912, 3082 109, 912, 873, 88, 89, 912, 1464, 468, 109, 115, 3083 912, 110, 1009, 1471, 914, 110, 253, 958, 748, 749, 3084 912, 912, 110, 753, 754, 700, 72, 110, 74, 75, 3085 267, 112, 493, 72, 495, 109, 497, 83, 84, 714, 3086 109, 914, 945, 468, 83, 84, 507, 72, 509, 485, 3087 595, 512, 115, 514, 515, 996, 1530, 1381, 83, 84, 3088 622, 1321, 115, 116, 1530, 526, 1524, 110, 1530, 799, 3089 1127, 109, 111, 116, 1159, 132, 638, 807, 623, 809, 3090 110, 811, 64, 628, 814, 815, 116, 110, 818, 514, 3091 109, 653, 329, 116, 507, 910, 509, 110, 1022, 512, 3092 830, 109, 515, 116, 529, 211, 1047, 532, 112, 534, 3093 535, 132, 214, 350, 85, 86, 87, 623, 579, 683, 3094 72, 815, 74, 75, 110, 557, 558, 559, 560, 590, 3095 116, 83, 84, 1190, 1191, 110, 811, 109, 109, 111, 3096 111, 116, 113, 114, 1468, 709, 1470, 114, 110, 114, 3097 110, 881, 132, 683, 116, 700, 116, 110, 583, 111, 3098 621, 109, 1159, 116, 109, 626, 111, 273, 132, 714, 3099 407, 632, 734, 903, 1045, 465, 109, 1134, 111, 709, 3100 910, 911, 912, 110, 914, 749, 1127, 881, 114, 116, 3101 296, 110, 110, 110, 700, 1095, 926, 116, 116, 116, 3102 1100, 1525, 308, 82, 109, 1290, 111, 109, 714, 939, 3103 940, 85, 86, 87, 944, 109, 110, 111, 109, 949, 3104 950, 82, 1095, 92, 93, 686, 112, 1100, 0, 1, 3105 655, 119, 657, 116, 117, 109, 966, 111, 949, 113, 3106 114, 1238, 129, 72, 110, 111, 976, 76, 485, 1190, 3107 1191, 353, 489, 355, 83, 84, 128, 29, 30, 465, 3108 32, 58, 59, 724, 950, 94, 811, 115, 116, 1505, 3109 116, 117, 44, 1203, 1204, 94, 1206, 131, 50, 1009, 3110 109, 111, 707, 1213, 109, 1215, 58, 748, 109, 118, 3111 119, 114, 64, 1117, 112, 67, 116, 117, 70, 112, 3112 1030, 1031, 109, 110, 111, 811, 4, 5, 6, 7, 3113 8, 9, 84, 85, 109, 110, 111, 881, 112, 1555, 3114 1050, 44, 45, 1009, 109, 110, 111, 110, 881, 10, 3115 11, 12, 13, 14, 553, 554, 108, 1012, 109, 111, 3116 30, 443, 110, 110, 1401, 110, 118, 911, 809, 455, 3117 110, 881, 110, 814, 555, 556, 1050, 112, 39, 111, 3118 1090, 131, 1419, 116, 601, 1095, 603, 58, 59, 60, 3119 1100, 69, 114, 71, 114, 881, 109, 149, 112, 1109, 3120 561, 562, 672, 110, 1125, 157, 67, 1117, 1129, 1130, 3121 162, 1263, 1264, 1265, 84, 85, 949, 110, 112, 117, 3122 112, 507, 112, 509, 1134, 1220, 512, 112, 117, 515, 3123 3, 117, 116, 94, 29, 187, 188, 10, 11, 12, 3124 13, 14, 110, 110, 116, 114, 112, 112, 109, 1159, 3125 111, 203, 115, 110, 132, 1492, 1493, 118, 119, 211, 3126 115, 115, 903, 109, 116, 881, 39, 1377, 220, 910, 3127 110, 223, 689, 132, 110, 110, 117, 110, 230, 110, 3128 1401, 110, 116, 110, 110, 926, 672, 1012, 110, 110, 3129 110, 1201, 1202, 245, 67, 110, 110, 249, 1419, 110, 3130 110, 253, 254, 720, 721, 110, 1050, 948, 949, 950, 3131 1220, 1202, 110, 110, 1224, 267, 268, 1050, 110, 72, 3132 29, 115, 274, 76, 131, 795, 1012, 1248, 1238, 281, 3133 83, 84, 1242, 949, 117, 805, 72, 116, 74, 75, 3134 1050, 94, 72, 110, 74, 75, 1201, 83, 84, 819, 3135 1224, 1242, 112, 83, 84, 112, 109, 116, 111, 964, 3136 110, 110, 110, 117, 1050, 118, 119, 112, 1009, 116, 3137 114, 1492, 1493, 109, 116, 245, 110, 329, 114, 109, 3138 1290, 1291, 110, 988, 114, 110, 991, 110, 993, 1299, 3139 112, 110, 116, 1397, 1304, 116, 3, 349, 350, 110, 3140 686, 818, 1540, 10, 11, 12, 13, 14, 112, 795, 3141 109, 109, 109, 830, 366, 1159, 109, 1338, 370, 805, 3142 109, 1342, 117, 115, 112, 132, 110, 1337, 110, 381, 3143 1304, 110, 39, 819, 1050, 115, 1530, 1530, 1043, 1530, 3144 115, 114, 129, 1530, 1299, 397, 1337, 112, 1530, 1090, 3145 110, 1531, 116, 112, 132, 407, 112, 110, 1530, 1530, 3146 67, 4, 5, 6, 7, 8, 9, 116, 1201, 1202, 3147 110, 110, 47, 425, 112, 1555, 1201, 112, 1531, 431, 3148 1224, 433, 112, 110, 112, 132, 112, 1397, 112, 132, 3149 33, 1224, 115, 1134, 1238, 912, 72, 914, 74, 75, 3150 76, 1505, 1555, 132, 110, 1415, 115, 83, 84, 1242, 3151 132, 381, 132, 117, 1224, 1201, 468, 110, 112, 115, 3152 112, 473, 112, 1444, 112, 56, 69, 944, 71, 481, 3153 1440, 112, 112, 485, 112, 112, 110, 489, 1224, 110, 3154 492, 109, 494, 881, 72, 112, 74, 75, 76, 1440, 3155 112, 109, 109, 60, 1464, 83, 84, 1027, 1028, 110, 3156 1304, 1471, 514, 1473, 110, 1475, 1299, 114, 99, 132, 3157 112, 1304, 117, 112, 1299, 110, 112, 529, 1530, 1220, 3158 532, 109, 534, 535, 1530, 110, 1202, 1530, 96, 109, 3159 1464, 96, 109, 115, 1304, 1505, 112, 1471, 132, 110, 3160 1510, 1242, 1512, 116, 1337, 42, 110, 110, 1224, 110, 3161 110, 117, 110, 1299, 1524, 1085, 1086, 132, 1304, 96, 3162 1530, 1531, 492, 132, 494, 3, 1242, 96, 1531, 110, 3163 1540, 583, 10, 11, 12, 13, 14, 132, 590, 132, 3164 926, 1027, 1028, 117, 72, 1555, 110, 0, 76, 601, 3165 1524, 603, 1555, 286, 1396, 83, 84, 132, 1263, 1264, 3166 1265, 39, 110, 110, 195, 115, 94, 112, 112, 132, 3167 622, 109, 132, 115, 1540, 308, 309, 110, 1095, 32, 3168 115, 109, 72, 1100, 74, 75, 638, 218, 1304, 67, 3169 118, 119, 644, 83, 84, 110, 1337, 228, 132, 1085, 3170 1086, 653, 110, 655, 656, 657, 110, 1440, 1066, 565, 3171 563, 1224, 1493, 346, 564, 1053, 1321, 70, 566, 1383, 3172 1464, 1337, 567, 1565, 114, 1314, 1130, 1471, 1342, 1081, 3173 1471, 1464, 686, 686, 919, 1100, 927, 689, 1471, 699, 3174 583, 693, 980, 695, 873, 650, 724, 699, 946, 382, 3175 50, 734, 1242, 485, 1464, 707, -1, 26, 27, 28, 3176 -1, 1471, 571, 571, 64, 296, 1236, 67, 720, 721, 3177 70, 571, -1, -1, 644, -1, -1, -1, 1464, -1, 3178 1524, -1, 734, -1, -1, 1471, 72, -1, 74, 75, 3179 76, 1524, -1, 58, -1, 0, 1, 83, 84, 1440, 3180 -1, 1271, 1407, 1408, 1090, 158, -1, -1, -1, 1279, 3181 1280, 1281, -1, -1, 1524, 4, 5, 6, 7, 8, 3182 9, -1, -1, 693, 1440, 695, -1, 32, -1, 699, 3183 -1, 100, 1473, 102, 1475, -1, -1, -1, 1524, -1, 3184 1445, -1, -1, 108, -1, 50, 111, -1, 1464, 149, 3185 1236, 67, -1, -1, -1, 1471, 191, -1, -1, -1, 3186 -1, 77, 162, 198, -1, 70, 818, -1, -1, 1510, 3187 -1, 1512, -1, -1, -1, 1345, -1, -1, 830, 232, 3188 69, -1, 71, -1, -1, 1271, 1224, -1, 188, -1, 3189 -1, -1, 157, 1279, 1280, 1281, -1, -1, -1, 1540, 3190 253, 1506, 107, 119, -1, 258, -1, -1, 1524, -1, 3191 1515, 211, -1, 444, 183, -1, -1, 550, 551, 552, 3192 -1, 873, -1, 223, 193, 194, -1, -1, 880, 198, 3193 -1, 200, 201, -1, -1, 270, -1, -1, 72, 470, 3194 74, 75, 76, -1, 149, -1, 162, -1, -1, 83, 3195 84, 903, 157, 158, -1, 220, -1, -1, -1, 1345, 3196 912, -1, 914, -1, -1, -1, -1, -1, 72, 921, 3197 74, 75, 76, -1, -1, 109, 507, -1, -1, 83, 3198 84, 512, 1320, 188, 515, -1, -1, -1, -1, 324, 3199 94, -1, 944, -1, -1, -1, -1, 332, 203, 352, 3200 335, 206, 207, 873, -1, 109, 211, 223, -1, 274, 3201 880, -1, 964, -1, 118, 119, 281, -1, -1, -1, 3202 -1, -1, -1, -1, -1, -1, -1, 232, 980, 329, 3203 -1, 236, -1, 238, -1, -1, 988, 1375, -1, 991, 3204 1378, 993, 247, -1, -1, 261, -1, -1, 253, -1, 3205 266, 921, -1, 258, -1, -1, -1, -1, 672, -1, 3206 -1, -1, -1, 268, 399, 281, 419, -1, 403, -1, 3207 -1, 276, -1, -1, 10, 11, 12, 13, 14, -1, 3208 -1, 434, -1, -1, 349, 1423, 439, -1, -1, -1, 3209 1428, 1043, -1, -1, 447, 10, 11, 12, 13, 14, 3210 -1, 366, -1, 39, -1, 370, -1, 407, -1, -1, 3211 980, -1, 465, 1530, -1, -1, -1, -1, -1, -1, 3212 1458, -1, -1, -1, 39, -1, -1, 760, -1, 1081, 3213 483, 67, 485, -1, -1, 351, -1, 342, -1, -1, 3214 671, 346, -1, 1095, -1, 480, -1, 352, 1100, 680, 3215 -1, -1, 67, 684, -1, -1, -1, -1, 94, -1, 3216 365, -1, -1, -1, 369, 1117, -1, 372, 433, -1, 3217 -1, -1, -1, 109, 527, 111, -1, -1, -1, 94, 3218 -1, 795, 118, 119, -1, -1, -1, 1473, -1, 1475, 3219 -1, 805, -1, -1, 109, -1, 111, -1, -1, -1, 3220 -1, -1, -1, 118, 119, 819, 1544, -1, -1, -1, 3221 -1, 1081, 1550, -1, 419, -1, 432, -1, -1, -1, 3222 -1, -1, -1, 1561, 1510, -1, 1512, 1565, 72, 434, 3223 74, 75, 76, 449, 439, -1, 571, 572, 591, 83, 3224 84, -1, 447, -1, 72, 1197, 74, 75, 76, -1, 3225 94, -1, -1, 0, -1, 83, 84, -1, 474, -1, 3226 465, -1, -1, 468, -1, 109, 94, 111, 1220, -1, 3227 -1, -1, -1, 117, 118, 119, -1, -1, 483, -1, 3228 485, 109, 635, 636, 637, 32, -1, -1, 493, -1, 3229 118, 119, 497, -1, -1, -1, -1, -1, -1, -1, 3230 -1, 654, -1, -1, -1, -1, 575, 576, -1, -1, 3231 -1, 1263, 1264, 1265, -1, -1, -1, -1, -1, 672, 3232 -1, 526, 527, 70, 659, 590, -1, 1197, 663, -1, 3233 683, -1, -1, -1, -1, 604, -1, -1, 607, 608, 3234 -1, 610, -1, 612, 613, -1, -1, -1, 617, 618, 3235 -1, -1, -1, -1, -1, -1, 709, 622, -1, 712, 3236 -1, -1, -1, -1, -1, -1, -1, 572, 0, 1321, 3237 -1, -1, -1, 638, 905, -1, 1009, -1, -1, 595, 3238 -1, -1, -1, -1, -1, 590, 591, -1, 653, -1, 3239 -1, -1, -1, 0, 1, -1, 749, -1, 603, -1, 3240 32, -1, -1, -1, -1, -1, -1, 623, -1, -1, 3241 -1, 158, 628, 1027, 1028, -1, 621, 1050, -1, -1, 3242 -1, 626, -1, -1, -1, 32, -1, 632, -1, -1, 3243 635, 636, 637, -1, -1, -1, -1, -1, 70, -1, 3244 -1, -1, 795, -1, 1396, 1397, -1, -1, -1, 654, 3245 -1, -1, 805, -1, 807, 1407, 1408, -1, -1, 812, 3246 67, -1, 815, 70, 799, -1, 819, 672, -1, 734, 3247 -1, 1085, 1086, -1, -1, -1, -1, -1, 683, -1, 3248 -1, -1, -1, -1, 700, -1, -1, -1, -1, 758, 3249 759, -1, -1, 1445, -1, -1, -1, -1, 714, -1, 3250 -1, -1, -1, -1, 709, -1, 253, 712, -1, -1, 3251 -1, 258, -1, -1, -1, -1, 721, -1, 734, 724, 3252 72, -1, 74, 75, 76, -1, 158, -1, 881, -1, 3253 1061, 83, 84, -1, 72, -1, 74, 75, 76, -1, 3254 -1, -1, 94, 748, 749, 83, 84, -1, -1, 754, 3255 -1, 158, -1, 1505, 1506, -1, 94, 109, 911, 111, 3256 -1, -1, -1, 1515, -1, -1, 118, 119, -1, -1, 3257 -1, 109, -1, 111, -1, -1, -1, -1, 1530, 1531, 3258 118, 119, -1, 918, -1, -1, -1, -1, -1, -1, 3259 795, -1, -1, -1, -1, 811, -1, -1, -1, -1, 3260 805, -1, 807, 1555, 809, 352, -1, 812, -1, 814, 3261 815, -1, -1, 966, 819, -1, 223, -1, -1, -1, 3262 -1, 253, -1, -1, 829, -1, 258, 97, 98, 99, 3263 100, 101, 102, 103, 104, 105, 106, -1, 903, -1, 3264 -1, -1, -1, -1, -1, -1, 253, 72, -1, 74, 3265 75, 76, -1, -1, 923, -1, -1, 1271, 83, 84, 3266 -1, 131, -1, 998, -1, 1279, 1280, 1281, -1, 94, 3267 -1, -1, 419, -1, 1027, 1028, 881, 1030, 1031, -1, 3268 1015, -1, -1, -1, 109, -1, 111, 434, -1, -1, 3269 -1, -1, 439, 118, 119, -1, -1, 1050, 903, -1, 3270 447, -1, -1, -1, -1, 910, 911, -1, -1, 914, 3271 -1, 10, 11, 12, 13, 14, -1, -1, 465, -1, 3272 352, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3273 -1, 1345, 1085, 1086, -1, 940, 483, -1, 485, -1, 3274 39, -1, -1, 948, 949, -1, -1, -1, -1, -1, 3275 -1, -1, -1, -1, -1, -1, -1, -1, 1093, -1, 3276 -1, 966, -1, -1, -1, -1, -1, -1, 67, -1, 3277 -1, -1, -1, 72, -1, 74, 75, 76, -1, -1, 3278 527, -1, 1313, -1, 83, 84, -1, 419, -1, -1, 3279 -1, -1, -1, -1, -1, 94, 1012, -1, -1, -1, 3280 1135, -1, 434, -1, 1009, -1, 1159, 439, -1, -1, 3281 109, -1, 111, -1, -1, 447, -1, 1022, 1087, 118, 3282 119, -1, 1027, 1028, -1, 1030, 1031, 434, -1, -1, 3283 -1, -1, -1, 465, -1, -1, -1, -1, -1, -1, 3284 -1, -1, -1, -1, 591, 1050, -1, -1, -1, 1202, 3285 -1, 483, -1, 485, -1, -1, -1, -1, -1, -1, 2882 0, 1, 240, 205, 186, 186, 117, 0, 43, 534, 2883 43, 43, 600, 756, 646, 1, 749, 187, 521, 0, 2884 186, 186, 186, 157, 169, 170, 749, 749, 186, 106, 2885 220, 602, 32, 186, 345, 349, 0, 188, 280, 32, 2886 157, 513, 600, 43, 874, 43, 603, 874, 349, 49, 2887 620, 32, 609, 733, 0, 983, 49, 600, 492, 571, 2888 0, 1, 496, 63, 602, 187, 66, 32, 32, 69, 2889 63, 692, 43, 66, 64, 0, 69, 1040, 39, 156, 2890 1, 600, 57, 69, 266, 266, 32, 43, 51, 1398, 2891 364, 202, 32, 63, 368, 1321, 418, 267, 82, 600, 2892 266, 266, 266, 1052, 1053, 1033, 106, 32, 266, 600, 2893 600, 262, 263, 266, 114, 72, 438, 117, 118, 109, 2894 282, 72, 1402, 96, 446, 39, 66, 695, 39, 69, 2895 28, 109, 107, 39, 39, 110, 95, 39, 82, 128, 2896 39, 66, 131, 1021, 82, 267, 109, 147, 148, 122, 2897 111, 186, 11, 186, 186, 148, 156, 157, 0, 295, 2898 1469, 161, 132, 1020, 1021, 109, 44, 45, 161, 0, 2899 129, 482, 905, 109, 488, 132, 0, 1, 72, 1128, 2900 78, 132, 905, 905, 687, 49, 186, 187, 186, 109, 2901 32, 257, 130, 1419, 187, 109, 109, 111, 109, 718, 2902 111, 32, 202, 109, 109, 111, 111, 109, 32, 111, 2903 210, 131, 43, 1040, 72, 186, 1496, 210, 49, 82, 2904 410, 1501, 222, 117, 812, 83, 84, 718, 718, 222, 2905 186, 266, 63, 266, 266, 66, 406, 115, 69, 1452, 2906 240, 1521, 85, 986, 219, 69, 112, 110, 1528, 82, 2907 114, 109, 252, 824, 812, 116, 107, 814, 114, 252, 2908 260, 44, 45, 3, 341, 265, 266, 267, 490, 812, 2909 113, 252, 272, 1486, 267, 1488, 257, 82, 111, 900, 2910 131, 793, 222, 147, 406, 396, 824, 252, 252, 49, 2911 426, 427, 924, 812, 371, 295, 3, 222, 273, 433, 2912 96, 602, 1501, 116, 109, 280, 252, 307, 0, 620, 2913 480, 812, 252, 424, 625, 589, 433, 148, 110, 430, 2914 112, 812, 812, 323, 116, 1288, 122, 252, 328, 1528, 2915 161, 114, 253, 44, 45, 328, 0, 82, 906, 131, 2916 132, 341, 504, 110, 932, 345, 210, 1225, 482, 349, 2917 350, 109, 418, 111, 114, 186, 187, 631, 480, 681, 2918 109, 116, 933, 130, 364, 110, 90, 91, 368, 1049, 2919 506, 371, 438, 348, 932, 511, 240, 132, 514, 210, 2920 446, 1211, 604, 951, 1211, 130, 608, 426, 427, 932, 2921 365, 222, 526, 72, 369, 112, 396, 1275, 116, 116, 2922 285, 125, 126, 114, 83, 84, 406, 629, 272, 526, 2923 252, 633, 130, 406, 1472, 257, 110, 1274, 1275, 55, 2924 1478, 252, 307, 308, 424, 350, 426, 427, 252, 999, 2925 430, 567, 111, 433, 745, 266, 130, 418, 112, 116, 2926 1498, 110, 116, 307, 111, 1503, 113, 116, 525, 1501, 2927 210, 1008, 1009, 130, 454, 494, 590, 438, 1386, 1387, 2928 345, 1288, 98, 130, 967, 446, 635, 636, 131, 1521, 2929 229, 112, 472, 590, 513, 116, 1528, 116, 1441, 110, 2930 480, 345, 482, 652, 484, 1448, 116, 480, 488, 248, 2931 732, 484, 110, 132, 494, 1127, 381, 328, 116, 116, 2932 130, 482, 647, 484, 666, 656, 506, 941, 508, 981, 2933 824, 511, 272, 513, 514, 132, 1394, 687, 349, 109, 2934 484, 521, 109, 824, 116, 525, 526, 109, 1099, 803, 2935 109, 111, 111, 113, 808, 295, 1499, 1394, 484, 578, 2936 132, 710, 109, 654, 484, 116, 467, 307, 473, 1117, 2937 130, 4, 5, 6, 7, 8, 9, 116, 194, 484, 2938 110, 132, 426, 427, 116, 687, 116, 116, 116, 116, 2939 570, 571, 116, 132, 736, 406, 418, 109, 578, 116, 2940 132, 217, 1085, 132, 132, 132, 109, 1090, 132, 589, 2941 590, 227, 117, 904, 594, 132, 438, 116, 123, 124, 2942 600, 116, 602, 109, 446, 111, 110, 528, 1288, 1177, 2943 1178, 745, 533, 132, 1441, 681, 69, 132, 71, 110, 2944 620, 1448, 896, 937, 846, 625, 72, 627, 74, 75, 2945 494, 631, 801, 110, 634, 635, 636, 83, 84, 72, 2946 110, 707, 484, 112, 590, 110, 621, 116, 112, 513, 2947 83, 84, 652, 484, 654, 109, 910, 488, 912, 295, 2948 484, 582, 637, 109, 549, 550, 551, 744, 114, 112, 2949 109, 861, 1499, 116, 72, 809, 651, 115, 72, 132, 2950 74, 75, 1362, 109, 684, 83, 84, 687, 999, 83, 2951 84, 881, 809, 109, 454, 111, 72, 622, 74, 75, 2952 681, 85, 86, 87, 109, 943, 111, 83, 84, 132, 2953 710, 711, 712, 111, 578, 109, 938, 1115, 718, 719, 2954 114, 1119, 867, 905, 905, 109, 707, 111, 64, 113, 2955 114, 109, 653, 111, 655, 112, 110, 907, 114, 905, 2956 905, 905, 116, 109, 744, 745, 506, 905, 508, 749, 2957 750, 511, 905, 109, 514, 111, 620, 732, 109, 70, 2958 111, 625, 109, 74, 745, 1445, 77, 1447, 79, 600, 2959 904, 602, 1505, 698, 132, 86, 556, 557, 558, 559, 2960 1305, 3, 1505, 1505, 705, 907, 114, 712, 10, 11, 2961 12, 13, 14, 793, 4, 5, 6, 7, 8, 9, 2962 110, 801, 109, 803, 111, 805, 116, 443, 808, 809, 2963 1012, 114, 812, 109, 1382, 111, 72, 39, 74, 75, 2964 1500, 117, 118, 33, 824, 72, 903, 83, 84, 114, 2965 1398, 132, 110, 469, 132, 1146, 83, 84, 116, 681, 2966 10, 11, 12, 13, 14, 67, 72, 110, 1122, 109, 2967 76, 109, 110, 116, 82, 111, 687, 83, 84, 69, 2968 110, 71, 49, 809, 111, 707, 116, 110, 109, 39, 2969 506, 756, 109, 116, 874, 511, 63, 112, 514, 66, 2970 805, 82, 69, 109, 118, 111, 1020, 718, 719, 110, 2971 1035, 117, 118, 874, 127, 116, 896, 67, 88, 89, 2972 1468, 1469, 213, 903, 904, 905, 72, 907, 4, 5, 2973 6, 7, 8, 9, 1225, 1085, 110, 83, 84, 919, 2974 1090, 128, 116, 904, 684, 110, 94, 109, 874, 111, 2975 30, 116, 932, 933, 874, 117, 118, 937, 131, 109, 2976 72, 111, 942, 943, 76, 111, 111, 117, 118, 874, 2977 109, 83, 84, 1115, 110, 109, 942, 1119, 1120, 112, 2978 116, 148, 109, 1085, 111, 0, 1, 967, 1090, 112, 2979 117, 118, 110, 69, 161, 71, 110, 109, 1481, 119, 2980 120, 812, 116, 83, 84, 117, 118, 112, 10, 11, 2981 12, 13, 14, 824, 29, 30, 1107, 32, 110, 999, 2982 187, 110, 942, 110, 116, 92, 93, 72, 43, 74, 2983 75, 76, 1146, 72, 49, 74, 75, 39, 83, 84, 2984 1020, 1021, 57, 210, 83, 84, 110, 1530, 63, 115, 2985 116, 66, 874, 669, 69, 222, 957, 109, 110, 111, 2986 1040, 352, 678, 354, 109, 67, 682, 110, 83, 84, 2987 874, 109, 117, 118, 1190, 1191, 72, 1193, 979, 1040, 2988 76, 110, 983, 110, 1200, 110, 1202, 83, 84, 116, 2989 112, 116, 107, 1235, 905, 110, 907, 1002, 110, 943, 2990 1080, 111, 117, 114, 116, 1085, 110, 109, 116, 111, 2991 1090, 131, 116, 109, 1040, 117, 118, 110, 111, 1099, 2992 1040, 117, 118, 506, 66, 508, 937, 1107, 511, 58, 2993 59, 514, 1033, 148, 999, 1040, 115, 116, 942, 44, 2994 45, 156, 1122, 552, 553, 72, 161, 74, 75, 76, 2995 1207, 442, 109, 110, 111, 999, 83, 84, 560, 561, 2996 1274, 328, 554, 555, 244, 114, 1146, 114, 109, 110, 2997 111, 186, 187, 109, 112, 1040, 118, 110, 110, 919, 2998 1322, 112, 109, 29, 1326, 1146, 112, 202, 112, 3, 2999 117, 118, 109, 110, 111, 210, 10, 11, 12, 13, 3000 14, 58, 59, 60, 219, 112, 116, 222, 1188, 1189, 3001 1248, 1249, 1250, 110, 229, 130, 130, 130, 1040, 161, 3002 110, 112, 114, 1189, 112, 39, 115, 1207, 110, 244, 3003 115, 1211, 115, 248, 109, 116, 1040, 252, 253, 406, 3004 1, 110, 1358, 110, 72, 1225, 74, 75, 76, 1229, 3005 1211, 266, 267, 67, 132, 83, 84, 116, 273, 110, 3006 110, 110, 110, 1229, 1225, 280, 110, 110, 1188, 1189, 3007 110, 116, 110, 110, 1085, 110, 110, 110, 110, 1090, 3008 222, 1423, 898, 1188, 110, 1211, 110, 1378, 49, 110, 3009 110, 1211, 115, 874, 1274, 1275, 29, 1515, 110, 130, 3010 380, 131, 112, 1283, 112, 116, 1211, 110, 1288, 1229, 3011 110, 116, 110, 328, 130, 116, 112, 114, 260, 110, 3012 110, 464, 110, 265, 116, 112, 110, 1288, 110, 110, 3013 116, 116, 112, 348, 349, 10, 11, 12, 13, 14, 3014 1080, 1321, 109, 1505, 1505, 106, 109, 1248, 1249, 1250, 3015 365, 109, 109, 114, 369, 1321, 1506, 109, 130, 1505, 3016 1505, 1505, 1288, 1283, 39, 380, 3, 1505, 1288, 112, 3017 132, 115, 1505, 10, 11, 12, 13, 14, 1283, 110, 3018 1530, 396, 110, 1288, 110, 1189, 147, 128, 115, 1211, 3019 1481, 406, 67, 115, 464, 156, 114, 695, 1378, 112, 3020 132, 1321, 39, 110, 1506, 116, 112, 1211, 350, 424, 3021 112, 491, 110, 493, 1394, 430, 110, 432, 110, 112, 3022 110, 112, 1377, 112, 112, 1229, 112, 112, 1530, 72, 3023 67, 74, 75, 76, 109, 1051, 111, 47, 115, 1419, 3024 83, 84, 117, 118, 72, 206, 74, 75, 76, 210, 3025 132, 132, 467, 1419, 132, 83, 84, 472, 132, 132, 3026 110, 1441, 1043, 115, 130, 480, 1288, 115, 1448, 484, 3027 1450, 110, 1452, 488, 112, 109, 491, 112, 493, 240, 3028 1441, 109, 112, 112, 1288, 1386, 1387, 1448, 786, 431, 3029 1505, 112, 1505, 1505, 112, 110, 110, 60, 109, 1419, 3030 112, 1481, 66, 112, 109, 132, 1486, 110, 1488, 110, 3031 114, 272, 76, 528, 275, 1441, 112, 1321, 533, 1499, 3032 112, 1441, 1448, 1424, 110, 1505, 1506, 670, 1448, 112, 3033 110, 473, 109, 1506, 295, 1515, 1441, 96, 1499, 96, 3034 85, 86, 87, 1448, 109, 132, 307, 115, 110, 72, 3035 1530, 74, 75, 76, 118, 110, 110, 1530, 110, 42, 3036 83, 84, 642, 116, 109, 863, 111, 582, 113, 114, 3037 130, 132, 110, 1499, 589, 110, 132, 96, 96, 1499, 3038 341, 1482, 132, 110, 345, 600, 109, 602, 132, 110, 3039 1491, 132, 112, 110, 1499, 110, 132, 161, 112, 115, 3040 670, 109, 132, 364, 115, 115, 621, 368, 906, 110, 3041 371, 691, 110, 693, 110, 1419, 110, 697, 1056, 1441, 3042 132, 564, 637, 562, 977, 565, 1448, 642, 563, 566, 3043 1211, 1211, 1469, 1364, 1540, 1298, 651, 1441, 653, 654, 3044 655, 1120, 1326, 1448, 1448, 912, 789, 66, 684, 1071, 3045 684, 1090, 594, 951, 920, 697, 799, 582, 222, 971, 3046 867, 648, 722, 1229, 83, 426, 427, 939, 570, 484, 3047 813, 1515, 687, 732, 570, 570, 691, 1499, 693, -1, 3048 622, 1297, 697, -1, -1, 627, -1, -1, 986, -1, 3049 705, -1, -1, 454, 1505, 1499, 260, -1, -1, 118, 3050 -1, 265, -1, 718, 719, -1, 467, -1, -1, -1, 3051 1450, -1, 1452, -1, -1, -1, 280, 732, -1, 789, 3052 -1, -1, -1, 1304, -1, -1, -1, -1, -1, 799, 3053 -1, 492, -1, 494, -1, 496, -1, -1, -1, 1037, 3054 -1, -1, 161, 813, -1, 506, 1486, 508, 1488, -1, 3055 511, -1, 513, 514, -1, -1, 698, 57, -1, 10, 3056 11, 12, 13, 14, 525, -1, -1, -1, -1, 72, 3057 712, 74, 75, 76, -1, 1356, -1, -1, 1359, -1, 3058 83, 84, -1, -1, -1, -1, 350, 867, 39, -1, 3059 -1, -1, -1, 873, -1, -1, -1, 812, -1, -1, 3060 -1, -1, -1, 222, -1, -1, 109, 107, 111, 824, 3061 110, -1, -1, -1, 117, 118, 67, 578, -1, 1117, 3062 -1, 1402, -1, -1, -1, -1, 1407, 130, 589, -1, 3063 -1, -1, -1, 1449, 914, 1451, -1, -1, -1, -1, 3064 -1, 260, -1, -1, -1, -1, 265, -1, -1, -1, 3065 -1, -1, 867, -1, 1435, -1, 156, 670, 873, 620, 3066 -1, -1, -1, 805, 625, -1, -1, 431, -1, 1485, 3067 631, 1487, 0, 1, 1017, 1018, -1, -1, -1, 1177, 3068 1178, 896, -1, -1, 448, -1, -1, -1, -1, -1, 3069 905, 971, 907, -1, -1, -1, -1, -1, -1, 914, 3070 -1, -1, -1, -1, 32, -1, -1, -1, -1, 473, 3071 -1, -1, -1, 1529, -1, 1531, -1, -1, -1, 219, 3072 -1, 49, 937, 684, -1, -1, -1, -1, 1544, 1545, 3073 -1, 350, 1075, 1076, -1, -1, -1, -1, 1519, -1, 3074 -1, 69, 957, -1, 1525, -1, -1, 1017, 1018, -1, 3075 -1, -1, -1, -1, -1, 1536, 971, -1, -1, 1540, 3076 -1, 722, -1, -1, 979, -1, -1, -1, 983, 0, 3077 1, -1, -1, 273, -1, -1, 789, -1, 106, -1, 3078 280, -1, -1, 744, -1, -1, 799, -1, -1, -1, 3079 -1, 1071, -1, -1, -1, 0, -1, -1, -1, -1, 3080 813, 32, -1, -1, -1, 1075, 1076, -1, -1, -1, 3081 -1, -1, 431, -1, -1, -1, -1, -1, 1033, -1, 3082 148, -1, -1, -1, -1, -1, -1, 32, 156, 157, 3083 594, -1, -1, -1, -1, 66, -1, -1, 69, -1, 3084 -1, -1, 803, -1, -1, -1, -1, 808, 348, -1, 3085 -1, -1, -1, -1, 473, -1, 1071, -1, 622, 187, 3086 1002, -1, -1, 627, 69, 365, -1, -1, -1, 369, 3087 1085, -1, -1, -1, 202, 1090, -1, 205, 206, -1, 3088 1223, -1, 210, -1, 1382, -1, -1, -1, -1, -1, 3089 -1, -1, 1107, -1, -1, -1, -1, -1, -1, -1, 3090 1398, -1, -1, 231, 1184, -1, -1, 235, -1, 237, 3091 -1, -1, 1255, -1, -1, -1, -1, -1, 246, -1, 3092 1263, 1264, 1265, -1, 252, -1, 157, -1, -1, 257, 3093 -1, -1, 432, -1, 698, 896, -1, -1, -1, 267, 3094 -1, -1, 903, -1, -1, -1, -1, 275, 712, -1, 3095 -1, 0, 157, 1223, -1, -1, -1, -1, 919, -1, 3096 -1, 72, -1, 74, 75, 76, -1, -1, 732, 1184, 3097 1468, 1469, 83, 84, -1, 594, -1, -1, -1, -1, 3098 941, 942, 943, 32, 1327, 1255, -1, -1, -1, -1, 3099 -1, 222, 1207, 1263, 1264, 1265, -1, -1, 109, -1, 3100 111, -1, -1, 622, 1017, 1018, 117, 118, 627, -1, 3101 -1, -1, -1, 341, -1, -1, -1, 345, -1, -1, 3102 69, 252, -1, 351, -1, -1, 231, -1, -1, -1, 3103 -1, -1, -1, 1248, 1249, 1250, 364, -1, 999, -1, 3104 368, 805, -1, 371, -1, -1, 1188, 252, -1, -1, 3105 -1, -1, 257, -1, -1, -1, -1, 1327, -1, -1, 3106 -1, -1, 1075, 1076, -1, -1, -1, -1, -1, -1, 3107 72, -1, 74, 75, 76, -1, -1, -1, -1, 698, 3108 -1, 83, 84, 72, -1, 74, 75, 76, -1, 589, 3109 418, -1, -1, 712, 83, 84, -1, -1, -1, -1, 3110 -1, -1, -1, -1, -1, 433, -1, 109, 157, 111, 3111 438, -1, -1, -1, -1, 117, 118, -1, 446, 1080, 3112 109, 621, 111, -1, -1, -1, -1, -1, 117, 118, 3113 -1, -1, -1, -1, -1, -1, 464, 637, -1, 467, 3114 -1, 1283, -1, -1, -1, -1, 351, -1, -1, -1, 3115 -1, 651, -1, -1, 482, -1, 484, -1, -1, -1, 3116 -1, 1122, 1377, 1378, 492, -1, -1, -1, 496, -1, 3117 -1, 1386, 1387, 97, 98, 99, 100, 101, 102, 103, 3118 104, 105, 106, -1, -1, -1, 805, -1, -1, -1, 3119 -1, -1, -1, -1, -1, -1, -1, 525, 526, -1, 3120 -1, -1, 433, 252, -1, -1, -1, 131, 257, 1424, 3121 -1, -1, -1, 418, -1, -1, -1, -1, -1, -1, 3122 -1, -1, -1, -1, -1, -1, -1, -1, 433, -1, 3123 -1, -1, 732, 438, -1, -1, -1, -1, 1002, -1, 3124 -1, 446, 1255, 571, -1, -1, 1207, -1, -1, -1, 3125 1263, 1264, 1265, 484, -1, -1, -1, -1, -1, 464, 3126 -1, 589, 590, -1, -1, -1, 1481, 1482, 1229, -1, 3127 -1, -1, -1, -1, 602, -1, 1491, 482, -1, 484, 3128 -1, -1, -1, 37, 38, -1, 40, -1, -1, -1, 3129 1505, 1506, 620, -1, -1, 526, -1, 625, -1, -1, 3130 -1, -1, 351, 631, -1, -1, 634, 635, 636, -1, 3131 -1, -1, 66, -1, 1327, 1530, -1, -1, 72, -1, 3132 -1, 526, 76, -1, 652, 79, 80, 81, 82, 83, 3133 84, -1, 86, 87, -1, -1, -1, -1, -1, -1, 3134 -1, -1, 670, -1, -1, 10, 11, 12, 13, 14, 3135 -1, -1, -1, 681, -1, 109, -1, 111, -1, 590, 3136 1321, -1, -1, 117, 118, 119, 120, 121, 122, 418, 3137 -1, -1, -1, -1, 39, -1, 130, -1, -1, 707, 3138 -1, -1, 710, 1002, 433, 590, -1, -1, -1, 438, 3139 -1, 719, -1, -1, 722, -1, 896, 446, -1, -1, 3140 -1, -1, 67, 634, 635, 636, -1, 72, -1, 74, 3141 75, 76, -1, -1, -1, 464, 744, 745, 83, 84, 3142 -1, 652, 750, -1, 1188, -1, -1, -1, -1, 634, 3143 635, 636, -1, 482, -1, 484, -1, 10, 11, 12, 3144 13, 14, -1, -1, 109, -1, 111, 652, -1, -1, 3145 -1, -1, 117, 118, -1, -1, -1, -1, 1419, -1, 3146 -1, 789, -1, -1, -1, 670, 39, -1, -1, -1, 3147 -1, 799, -1, 801, -1, 803, 681, 526, 806, 710, 3148 808, 809, -1, -1, -1, 813, -1, -1, -1, 1450, 3149 -1, 1452, -1, -1, 67, 823, -1, -1, -1, 72, 3150 -1, -1, 707, 76, -1, 710, -1, -1, -1, -1, 3151 83, 84, -1, -1, -1, -1, -1, -1, -1, 1283, 3152 -1, 0, -1, -1, -1, 1486, -1, 1488, -1, -1, 3153 -1, -1, -1, -1, -1, -1, 109, -1, -1, -1, 3154 745, 590, -1, -1, 117, 118, 874, -1, 0, -1, 3155 190, -1, -1, 32, 1515, -1, -1, 197, -1, -1, 3156 -1, -1, -1, -1, -1, -1, -1, -1, 896, 1188, 3157 801, -1, -1, -1, -1, 903, 904, -1, 809, 907, 3158 32, -1, -1, -1, 789, 634, 635, 636, -1, -1, 3159 69, -1, -1, -1, 799, -1, 801, -1, -1, -1, 3160 -1, 806, -1, 652, 809, 933, -1, -1, 813, -1, 3161 -1, -1, -1, 941, 942, -1, -1, 69, -1, -1, 3162 -1, 670, -1, -1, -1, -1, -1, -1, -1, 269, 3163 -1, -1, 681, -1, -1, -1, -1, -1, -1, -1, 3164 -1, -1, -1, 874, -1, -1, -1, -1, -1, -1, 3165 -1, -1, -1, -1, -1, -1, -1, -1, 707, -1, 3166 -1, 710, -1, -1, 1283, -1, -1, -1, -1, 874, 3167 -1, 999, -1, -1, -1, -1, -1, -1, 157, -1, 3168 -1, -1, -1, 323, 1012, -1, -1, -1, -1, 1017, 3169 1018, 331, 1020, 1021, 334, -1, 745, -1, -1, 904, 3170 -1, -1, -1, -1, -1, 157, -1, 1207, -1, -1, 3171 -1, 942, 1040, -1, -1, 3, 4, 5, 6, 7, 3172 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3173 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3174 789, -1, 30, 31, 32, -1, -1, 1075, 1076, -1, 3175 799, 39, 801, -1, -1, -1, -1, 806, 398, -1, 3176 809, -1, 402, -1, 813, -1, -1, -1, -1, -1, 3177 -1, -1, -1, 252, -1, -1, -1, -1, 257, 67, 3178 -1, 69, -1, 71, 72, -1, 74, 75, 76, 1020, 3179 1021, -1, -1, -1, 1122, 83, 84, -1, -1, -1, 3180 252, -1, -1, -1, -1, 257, -1, -1, -1, 1040, 3181 -1, -1, 1017, 1018, -1, 1020, 1021, -1, 1146, -1, 3182 -1, 109, -1, 111, -1, 874, -1, -1, -1, 117, 3183 118, -1, -1, -1, -1, 1040, -1, -1, -1, 479, 3184 -1, -1, -1, -1, -1, 10, 11, 12, 13, 14, 3185 -1, -1, -1, -1, -1, 904, -1, -1, -1, -1, 3186 -1, 1189, -1, -1, -1, -1, -1, -1, -1, -1, 3187 1075, 1076, 351, -1, 39, -1, -1, 1377, -1, 1207, 3188 -1, -1, -1, 1211, -1, -1, -1, -1, -1, -1, 3189 -1, -1, -1, -1, -1, 1223, -1, 1225, -1, 351, 3190 -1, 1229, 67, -1, -1, -1, -1, 72, -1, 74, 3191 75, 76, -1, -1, -1, 26, 27, 28, 83, 84, 3192 -1, -1, -1, -1, -1, -1, -1, 1255, -1, -1, 3193 570, 571, -1, -1, -1, 1263, 1264, 1265, -1, 418, 3194 -1, 1146, -1, -1, 109, -1, 1274, 1275, -1, -1, 3195 -1, -1, 117, 118, 433, -1, -1, 1188, 1189, 438, 3196 1288, -1, -1, -1, -1, -1, 418, 446, 1017, 1018, 3197 -1, 1020, 1021, -1, -1, -1, -1, -1, -1, -1, 3198 1211, 433, -1, -1, 1189, 464, 438, -1, 99, -1, 3199 101, 1040, -1, 1321, 446, -1, -1, -1, 1229, 1327, 3200 -1, -1, -1, 482, -1, 484, 1211, -1, -1, -1, 3201 -1, -1, 464, -1, -1, 126, -1, 657, 1223, -1, 3202 1225, 661, -1, -1, -1, -1, 1075, 1076, -1, -1, 3203 482, -1, 484, -1, -1, -1, -1, -1, -1, -1, 3204 -1, -1, -1, 1274, 1275, -1, -1, 526, -1, -1, 3205 1255, -1, 1283, -1, -1, -1, -1, 1288, 1263, 1264, 3206 1265, -1, -1, -1, -1, -1, 1394, -1, -1, 1274, 3207 1275, 182, -1, -1, 526, -1, -1, -1, -1, 190, 3208 -1, 192, 193, 1288, -1, -1, 197, -1, 199, 200, 3209 1321, 1419, -1, 53, -1, 55, -1, 1146, 58, 59, 3210 60, -1, 62, -1, -1, -1, -1, -1, -1, -1, 3211 -1, 590, -1, 1441, -1, -1, -1, 77, -1, -1, 3212 1448, -1, 1327, -1, -1, -1, -1, -1, -1, 89, 3213 90, -1, -1, -1, 26, 27, 28, -1, 590, -1, 3214 1189, -1, -1, -1, -1, -1, 10, 11, 12, 13, 3215 14, -1, -1, 793, -1, 634, 635, 636, 269, -1, 3216 -1, -1, 1211, 1394, -1, -1, -1, -1, -1, -1, 3217 -1, 1499, -1, 652, 1223, 39, 1225, -1, 1506, -1, 3218 -1, -1, 634, 635, 636, -1, -1, -1, 1419, 1394, 3219 -1, 670, -1, -1, -1, -1, -1, -1, -1, -1, 3220 652, -1, 681, 67, -1, -1, 1255, 99, 72, 101, 3221 1441, -1, 76, -1, 1263, 1264, 1265, 1448, 670, 83, 3222 84, -1, -1, -1, -1, 1274, 1275, -1, 707, 681, 3223 -1, 710, -1, -1, -1, -1, 1441, -1, -1, 1288, 3224 -1, -1, -1, 1448, -1, 109, -1, -1, -1, -1, 3225 -1, -1, -1, 117, 118, 707, -1, -1, 710, 10, 3226 11, 12, 13, 14, -1, -1, 745, -1, 1499, -1, 3227 -1, 911, -1, -1, -1, -1, -1, -1, 1327, -1, 3228 -1, -1, -1, -1, -1, -1, -1, -1, 39, -1, 3229 182, -1, -1, 745, 1499, -1, -1, -1, -1, -1, 3230 192, 193, -1, -1, -1, 197, -1, 199, 200, -1, 3231 789, -1, -1, -1, -1, -1, 67, -1, -1, -1, 3232 799, 72, 801, 74, 75, 76, -1, 806, -1, -1, 3233 809, -1, 83, 84, 813, -1, -1, 789, -1, 10, 3234 11, 12, 13, 14, -1, 1394, -1, 799, 988, 801, 3235 -1, -1, -1, -1, 806, -1, -1, 809, 109, -1, 3236 111, 813, -1, -1, -1, 1005, 117, 118, 39, -1, 3237 -1, 10, 11, 12, 13, 14, -1, -1, -1, -1, 3238 -1, -1, -1, -1, 344, -1, 346, -1, -1, -1, 3239 -1, -1, 1441, -1, -1, 874, 67, 357, 358, 1448, 3240 39, 72, -1, 74, 75, 76, -1, -1, -1, -1, 3241 -1, -1, 83, 84, -1, -1, -1, -1, -1, -1, 3242 -1, -1, 874, -1, -1, 904, -1, -1, 67, -1, 3243 -1, -1, -1, 72, -1, 74, 75, 76, 109, -1, 3244 111, -1, -1, 1083, 83, 84, 117, 118, -1, -1, 3245 1499, -1, 904, -1, -1, -1, -1, -1, -1, -1, 3246 -1, -1, -1, 574, 575, -1, -1, -1, -1, -1, 3247 109, -1, -1, -1, -1, -1, -1, -1, 117, 118, 3248 -1, -1, -1, 1123, -1, -1, -1, -1, -1, -1, 3249 -1, -1, 603, -1, -1, 606, 607, -1, 609, -1, 3250 611, 612, -1, -1, -1, 616, 617, 3, 4, 5, 3251 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 3252 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3253 26, 27, 28, -1, 30, 31, 32, 33, 1017, 1018, 3254 36, 1020, 1021, 39, -1, -1, -1, -1, -1, -1, 3286 3255 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3287 -1, 1224, -1, -1, -1, -1, -1, -1, 485, -1, 3288 1085, 1086, -1, 1236, -1, 1238, -1, -1, 635, 636, 3289 637, -1, -1, -1, -1, 527, -1, -1, -1, -1, 3290 -1, -1, -1, -1, -1, -1, -1, 654, -1, -1, 3291 -1, -1, -1, -1, -1, -1, -1, -1, 1271, -1, 3292 527, -1, -1, -1, 0, 672, 1279, 1280, 1281, 1134, 3293 -1, -1, -1, -1, -1, -1, 683, 1290, 1291, -1, 3294 -1, 1472, -1, 1474, -1, -1, -1, -1, -1, -1, 3295 1219, 1304, -1, -1, 1159, 1220, 32, -1, -1, 591, 3296 -1, -1, 709, -1, -1, 712, -1, -1, -1, -1, 3297 10, 11, 12, 13, 14, -1, -1, -1, 1509, -1, 3298 1511, -1, -1, -1, 591, 1201, -1, -1, -1, -1, 3299 -1, -1, 1345, -1, 70, -1, -1, 1202, -1, 39, 3300 -1, -1, 749, 635, 636, 637, -1, -1, -1, -1, 3301 -1, -1, -1, -1, -1, 1220, -1, -1, -1, 1224, 3302 -1, -1, 654, 1554, -1, 1556, -1, 67, 635, 636, 3303 637, 1236, 72, 1238, 74, 75, 76, 1242, 1569, 1570, 3304 672, -1, -1, 83, 84, -1, -1, 654, 795, -1, 3305 -1, 683, -1, -1, 94, -1, -1, -1, 805, -1, 3306 807, -1, 1415, -1, -1, 812, 1271, -1, 815, 109, 3307 -1, 111, 819, -1, 1279, 1280, 1281, 709, 118, 119, 3308 712, -1, 158, 1299, -1, 1290, 1291, -1, -1, -1, 3309 -1, -1, -1, -1, 10, 11, 12, 13, 14, 1304, 3310 -1, -1, -1, -1, -1, 712, -1, -1, -1, -1, 3311 -1, 1464, -1, -1, -1, -1, -1, 749, 1471, -1, 3312 -1, -1, -1, 39, -1, -1, -1, -1, -1, -1, 3313 -1, 1396, 1337, -1, 881, -1, -1, -1, -1, -1, 3314 1345, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3315 -1, 67, -1, -1, -1, -1, 72, -1, 74, 75, 3316 76, -1, -1, 795, 911, -1, -1, 83, 84, -1, 3317 -1, 1524, -1, 805, -1, 807, -1, 253, 94, -1, 3318 812, -1, 258, 815, -1, -1, -1, 819, -1, -1, 3319 -1, -1, -1, 109, -1, 111, -1, -1, -1, -1, 3320 807, -1, 118, 119, -1, -1, -1, -1, 815, -1, 3321 1415, -1, -1, -1, -1, -1, -1, -1, -1, 966, 3322 -1, 54, -1, 56, -1, -1, 59, 60, 61, -1, 3323 63, -1, -1, -1, -1, 1440, 10, 11, 12, 13, 3324 14, -1, -1, -1, -1, 78, -1, -1, -1, 881, 3325 -1, -1, -1, -1, -1, -1, -1, 90, 91, 1464, 3326 -1, -1, -1, -1, -1, 39, 1471, 10, 11, 12, 3327 13, 14, -1, -1, 881, -1, 352, -1, -1, 911, 3328 1027, 1028, -1, 1030, 1031, -1, -1, -1, -1, -1, 3329 -1, -1, -1, 67, -1, -1, 39, -1, 72, -1, 3330 74, 75, 76, 1050, -1, -1, -1, -1, -1, 83, 3331 84, -1, -1, -1, -1, -1, -1, -1, -1, 1524, 3332 94, -1, -1, -1, 67, -1, 1531, -1, -1, 72, 3333 -1, 74, 75, 76, 966, 109, -1, -1, 1085, 1086, 3334 83, 84, 949, 419, 118, 119, -1, -1, -1, -1, 3335 -1, 94, -1, 10, 11, 12, 13, 14, 434, 966, 3336 -1, -1, -1, 439, -1, -1, 109, -1, -1, -1, 3337 -1, 447, -1, -1, -1, 118, 119, -1, -1, -1, 3338 -1, -1, 39, -1, 10, 11, 12, 13, 14, 465, 3339 -1, -1, -1, -1, -1, 1027, 1028, -1, 1030, 1031, 3340 -1, -1, -1, -1, -1, -1, -1, 483, -1, 485, 3341 67, -1, 1159, 39, -1, 72, -1, -1, 1050, 76, 3342 -1, -1, -1, 1030, 1031, -1, 83, 84, -1, -1, 3343 -1, -1, -1, -1, -1, -1, -1, 94, -1, -1, 3344 -1, 67, -1, 1050, -1, -1, 72, -1, -1, -1, 3345 76, 527, 109, 1085, 1086, 1202, -1, 83, 84, -1, 3346 -1, 118, 119, -1, -1, -1, -1, -1, 94, -1, 3347 -1, -1, -1, -1, -1, -1, -1, 1224, -1, -1, 3348 -1, -1, -1, 109, -1, -1, -1, -1, -1, 1236, 3349 -1, 1238, 118, 119, 10, 11, 12, 13, 14, 15, 3256 -1, 1040, -1, -1, -1, 1017, 1018, -1, 1020, 1021, 3257 -1, 67, -1, 69, -1, 71, -1, -1, 74, 75, 3258 -1, -1, 78, -1, -1, -1, 7, -1, 1040, 10, 3259 11, 12, 13, 14, -1, -1, 1075, 1076, -1, -1, 3260 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3261 -1, -1, -1, -1, -1, 111, 37, 38, 39, 40, 3262 -1, 117, 118, 1075, 1076, -1, -1, -1, -1, -1, 3263 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3264 -1, -1, -1, 754, 755, 66, 67, -1, -1, -1, 3265 -1, 72, -1, -1, -1, 76, -1, -1, 79, 80, 3266 81, 82, 83, 84, -1, 86, 87, 1146, -1, -1, 3267 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3268 -1, -1, 574, 575, -1, -1, -1, -1, 109, -1, 3269 111, -1, -1, -1, 1146, -1, 117, 118, 119, 120, 3270 121, 122, -1, -1, -1, -1, -1, -1, -1, -1, 3271 1189, 603, -1, -1, 606, 607, -1, 609, -1, 611, 3272 612, -1, -1, -1, 616, 617, -1, -1, -1, -1, 3273 -1, -1, 1211, -1, -1, -1, -1, 1189, -1, 699, 3274 -1, 701, -1, -1, 1223, -1, 1225, -1, 708, 709, 3275 -1, -1, -1, 713, -1, -1, -1, -1, -1, 1211, 3276 -1, -1, -1, -1, -1, 725, -1, -1, -1, -1, 3277 730, 1223, -1, 1225, -1, -1, 1255, -1, -1, -1, 3278 -1, -1, -1, -1, 1263, 1264, 1265, -1, -1, -1, 3279 -1, -1, -1, -1, -1, 1274, 1275, -1, 758, -1, 3280 911, -1, -1, 1255, -1, 916, -1, -1, -1, 1288, 3281 -1, 1263, 1264, 1265, -1, -1, -1, -1, -1, -1, 3282 -1, -1, 1274, 1275, -1, -1, -1, -1, -1, -1, 3283 -1, -1, -1, -1, -1, -1, 1288, -1, -1, -1, 3284 -1, -1, -1, -1, -1, -1, -1, -1, 1327, -1, 3285 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3286 49, -1, 754, 755, -1, -1, -1, -1, -1, -1, 3287 -1, -1, -1, -1, -1, 1327, -1, 66, -1, -1, 3288 7, -1, -1, 10, 11, 12, 13, 14, -1, -1, 3289 -1, -1, -1, -1, -1, -1, -1, 857, 858, 859, 3290 860, -1, 862, -1, -1, -1, -1, -1, -1, -1, 3291 37, 38, 39, 40, -1, 1394, -1, 877, -1, -1, 3292 -1, -1, -1, -1, -1, 114, -1, -1, -1, 118, 3293 -1, 891, -1, -1, -1, -1, -1, -1, -1, 66, 3294 67, -1, 1394, -1, -1, 72, -1, -1, -1, 76, 3295 -1, -1, 79, 80, 81, 82, 83, 84, 147, 86, 3296 87, -1, 1441, -1, -1, -1, 1077, -1, 157, 1448, 3297 -1, 931, 161, -1, -1, -1, -1, -1, -1, -1, 3298 -1, -1, 109, -1, 111, -1, -1, -1, -1, 1441, 3299 117, 118, 119, 120, 121, 122, 1448, 10, 11, 12, 3300 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3301 23, 24, 25, 26, 27, -1, 976, 30, 31, 32, 3302 1499, 210, 982, -1, 916, -1, 39, 987, -1, -1, 3303 -1, -1, 992, 222, 994, -1, -1, -1, 998, -1, 3304 1000, 1001, -1, -1, 1004, -1, -1, 1499, -1, -1, 3305 -1, 240, -1, 1013, 67, -1, -1, -1, -1, -1, 3306 -1, 74, 75, -1, -1, -1, -1, -1, -1, -1, 3307 -1, 1031, 1032, -1, -1, -1, 265, -1, -1, -1, 3308 -1, -1, -1, 272, -1, -1, -1, -1, -1, -1, 3309 -1, -1, -1, -1, -1, 1206, -1, -1, 1058, -1, 3310 -1, 1061, -1, -1, 117, 118, 295, -1, -1, -1, 3311 -1, -1, -1, -1, -1, -1, -1, -1, 307, -1, 3312 -1, -1, -1, -1, 66, -1, -1, -1, -1, -1, 3313 -1, -1, -1, -1, 76, -1, 78, -1, 80, -1, 3314 -1, -1, -1, -1, 1104, 87, -1, -1, -1, -1, 3315 1110, 1111, -1, -1, -1, -1, 345, -1, -1, -1, 3316 -1, 350, -1, -1, -1, -1, -1, -1, -1, -1, 3317 1130, -1, -1, 1133, -1, -1, 118, 1137, 120, 121, 3318 122, -1, -1, -1, -1, 1077, -1, -1, -1, -1, 3319 1150, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3320 -1, -1, -1, 1163, -1, 1165, 1166, 1167, 1168, -1, 3321 -1, -1, -1, -1, -1, -1, -1, -1, -1, 161, 3322 -1, 1181, -1, 1183, -1, -1, -1, 1187, -1, -1, 3323 -1, -1, -1, -1, -1, -1, -1, 426, 427, -1, 3324 -1, -1, -1, -1, 433, -1, -1, -1, -1, -1, 3325 -1, -1, -1, -1, -1, -1, 1216, 1217, -1, -1, 3326 -1, -1, -1, -1, -1, 454, -1, -1, -1, -1, 3327 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3328 222, -1, 224, 225, 226, -1, -1, -1, -1, -1, 3329 -1, -1, -1, 482, -1, -1, -1, -1, -1, -1, 3330 -1, -1, -1, -1, -1, 494, 1266, 1267, -1, -1, 3331 -1, -1, -1, -1, 1206, -1, 1276, 506, 260, 508, 3332 -1, -1, 511, 265, 513, 514, -1, -1, -1, -1, 3333 -1, -1, -1, -1, -1, -1, -1, 526, 280, -1, 3334 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3335 -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, 3350 3336 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3351 26, 27, 345, -1, 347, 591, -1, -1, -1, -1, 3352 -1, -1, -1, 39, 1271, 358, 359, 1159, -1, -1, 3353 -1, -1, 1279, 1280, 1281, -1, -1, -1, -1, -1, 3354 -1, -1, -1, 1290, 1291, -1, -1, -1, -1, -1, 3355 -1, 67, -1, -1, -1, -1, -1, 1304, -1, 635, 3356 636, 637, -1, -1, -1, -1, -1, -1, -1, -1, 3357 1202, -1, -1, -1, -1, -1, -1, -1, 654, -1, 3358 37, 38, -1, 40, -1, -1, -1, -1, -1, -1, 3359 -1, -1, 1224, -1, 1201, 1202, 672, -1, 1345, -1, 3360 -1, -1, -1, -1, 1236, -1, 1238, 683, -1, 66, 3361 -1, -1, -1, -1, -1, 72, -1, 1224, -1, 76, 3362 -1, -1, 79, 80, 81, 82, 83, 84, -1, 86, 3363 87, -1, -1, 709, -1, 1242, 712, 94, -1, 1271, 3364 -1, -1, -1, -1, -1, -1, -1, 1279, 1280, 1281, 3365 -1, -1, 109, -1, 111, -1, -1, 114, 1290, 1291, 3366 -1, 118, 119, 120, 121, 122, 123, -1, 1415, -1, 3367 -1, -1, 1304, 749, -1, -1, -1, -1, -1, -1, 3368 -1, -1, -1, 1290, 1291, -1, -1, -1, -1, -1, 3369 -1, -1, 1299, -1, -1, -1, -1, 1304, -1, -1, 3337 26, 27, 28, -1, 30, 31, 32, 1337, -1, 1339, 3338 1340, 1341, -1, 39, -1, -1, 328, -1, -1, 578, 3339 -1, 1351, -1, -1, -1, -1, -1, -1, -1, -1, 3340 1360, 590, -1, -1, -1, 594, -1, -1, 350, -1, 3341 -1, 67, -1, 355, 356, -1, 72, -1, 74, 75, 3342 76, 363, 78, -1, -1, 1385, -1, 83, 84, -1, 3343 -1, 620, -1, -1, 147, -1, 625, -1, -1, -1, 3344 -1, -1, -1, -1, 157, 634, 635, 636, -1, 44, 3345 -1, -1, -1, 109, -1, 111, 169, 170, -1, -1, 3346 -1, 117, 118, 652, 406, -1, -1, -1, 1428, 1429, 3370 3347 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3371 -1, -1, -1, 1345, -1, -1, -1, 1464, -1, 795, 3372 -1, -1, -1, -1, 1471, -1, -1, -1, -1, 805, 3373 1337, 807, -1, -1, -1, -1, 812, -1, -1, 815, 3374 -1, -1, -1, 819, -1, 10, 11, 12, 13, 14, 3375 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3376 25, 26, 27, 28, -1, 30, 31, 32, -1, -1, 3377 -1, -1, 67, -1, 39, -1, -1, 1524, -1, -1, 3378 -1, -1, 77, 1415, 79, -1, 81, -1, -1, -1, 3379 -1, -1, -1, 88, -1, -1, -1, -1, -1, -1, 3380 -1, -1, 67, -1, -1, 881, -1, 72, 1415, 74, 3381 75, 76, -1, 78, -1, -1, -1, -1, 83, 84, 3382 -1, -1, -1, -1, 119, -1, 121, 122, 123, 94, 3383 -1, -1, 1464, 1440, -1, 911, -1, -1, -1, 1471, 3384 -1, -1, -1, -1, 109, -1, 111, -1, -1, 26, 3385 27, 28, -1, 118, 119, -1, -1, 1464, -1, -1, 3386 -1, -1, 37, 38, 1471, 40, -1, 162, 701, -1, 3387 703, -1, -1, -1, -1, -1, -1, 710, 711, -1, 3388 -1, -1, 715, -1, -1, -1, -1, -1, -1, -1, 3389 966, 66, 1524, 50, 727, -1, -1, 72, -1, 732, 3390 -1, 76, -1, -1, 79, 80, 81, 82, 83, 84, 3391 67, 86, 87, -1, -1, -1, -1, 1524, -1, 94, 3392 -1, -1, -1, 100, -1, 102, -1, -1, 223, 762, 3393 225, 226, 227, -1, 109, -1, 111, -1, -1, -1, 3394 -1, -1, 117, 118, 119, 120, 121, 122, 123, -1, 3395 127, 1027, 1028, -1, 1030, 1031, -1, -1, 115, -1, 3396 -1, -1, 119, -1, -1, -1, 261, -1, -1, -1, 3397 -1, 266, -1, -1, 1050, -1, -1, -1, 284, -1, 3398 286, 287, -1, -1, -1, -1, 281, -1, 294, 295, 3399 -1, 148, -1, -1, -1, -1, -1, -1, -1, -1, 3400 -1, 158, 308, 309, -1, 162, 183, -1, -1, 1085, 3401 1086, -1, -1, -1, 191, -1, 193, 194, -1, -1, 3402 -1, 198, -1, 200, 201, -1, -1, -1, -1, -1, 3403 863, 864, 865, 866, 329, 868, -1, -1, -1, -1, 3404 346, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3405 -1, 884, -1, -1, 211, -1, 351, -1, -1, -1, 3406 -1, 356, 357, -1, -1, 898, 223, -1, -1, 364, 3407 -1, -1, -1, -1, -1, -1, 382, -1, -1, -1, 3408 -1, -1, -1, 1159, 241, -1, -1, -1, -1, -1, 3409 -1, -1, -1, 270, -1, -1, -1, -1, -1, -1, 3410 -1, -1, -1, -1, -1, 938, -1, -1, -1, 266, 3411 -1, -1, 407, -1, -1, -1, 273, -1, -1, -1, 3412 -1, -1, -1, -1, -1, -1, 1202, -1, -1, -1, 3413 425, -1, -1, -1, -1, 430, -1, 432, -1, 296, 3414 -1, -1, -1, -1, -1, -1, -1, -1, 1224, -1, 3415 -1, 308, 985, -1, 449, -1, -1, 452, 453, 992, 3416 1236, -1, 1238, -1, 997, 460, -1, -1, -1, 1002, 3417 -1, 1004, -1, -1, -1, 1008, -1, 1010, 1011, 474, 3418 -1, 1014, -1, -1, -1, -1, 481, -1, -1, 346, 3419 1023, -1, -1, -1, 351, 1271, -1, -1, -1, -1, 3420 -1, -1, -1, 1279, 1280, 1281, -1, -1, 1041, 1042, 3421 -1, -1, -1, -1, 1290, 1291, -1, -1, -1, -1, 3422 -1, -1, -1, -1, -1, -1, -1, -1, 1304, -1, 3423 -1, -1, -1, -1, -1, 1068, -1, -1, 1071, -1, 3424 -1, -1, -1, -1, 550, 551, 552, 553, 554, 555, 3425 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 3426 566, 567, -1, -1, -1, -1, -1, -1, -1, 1345, 3427 427, 428, -1, -1, -1, -1, -1, 434, -1, -1, 3428 -1, 1114, -1, -1, -1, -1, -1, 1120, 1121, -1, 3429 -1, -1, -1, -1, -1, -1, -1, -1, 455, 1132, 3430 595, -1, -1, -1, -1, -1, -1, -1, -1, 1142, 3431 -1, -1, 1145, -1, 1147, -1, -1, 1150, -1, -1, 3432 -1, -1, -1, -1, -1, -1, 483, -1, 623, -1, 3433 1163, -1, -1, 628, -1, -1, -1, -1, 495, 1415, 3434 -1, -1, -1, 1176, -1, 1178, 1179, 1180, 1181, -1, 3435 507, -1, 509, -1, -1, 512, -1, 514, 515, -1, 3436 -1, 1194, -1, 1196, -1, -1, -1, 1200, -1, -1, 3437 527, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3438 -1, -1, -1, -1, -1, -1, -1, -1, 1464, -1, 3439 -1, 697, -1, -1, -1, 1471, 1229, 1230, 575, 576, 3440 -1, -1, -1, -1, -1, 700, -1, -1, -1, -1, 3441 -1, -1, -1, -1, -1, -1, -1, -1, -1, 714, 3442 -1, -1, 579, -1, -1, -1, -1, 604, -1, -1, 3443 607, 608, -1, 610, 591, 612, 613, -1, 595, 734, 3444 617, 618, -1, -1, -1, -1, -1, -1, 1524, 1282, 3445 1283, -1, -1, -1, 760, -1, -1, -1, -1, 1292, 3446 -1, -1, -1, -1, 621, -1, -1, -1, -1, 626, 3447 -1, -1, -1, -1, -1, -1, -1, -1, 635, 636, 3448 637, -1, -1, -1, -1, -1, 792, -1, -1, 7, 3449 -1, -1, 10, 11, 12, 13, 14, 654, -1, -1, 3450 -1, -1, -1, -1, 799, -1, -1, -1, -1, -1, 3451 1343, -1, 45, -1, -1, -1, 811, -1, -1, 37, 3452 38, 39, 40, 1356, -1, 1358, 1359, 1360, -1, 686, 3453 -1, -1, -1, -1, -1, 830, -1, 1370, -1, -1, 3454 -1, -1, -1, -1, -1, -1, 1379, -1, 66, 67, 3455 -1, -1, -1, -1, 72, 712, -1, 714, 76, -1, 3456 93, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3457 103, -1, -1, 1406, -1, -1, 94, -1, -1, -1, 3458 -1, 758, 759, -1, -1, -1, -1, -1, -1, -1, 3459 -1, 109, 749, 111, -1, -1, -1, -1, -1, -1, 3460 118, 119, 120, 121, 122, 123, -1, 913, -1, -1, 3461 -1, -1, -1, -1, -1, -1, -1, -1, 1451, 1452, 3462 -1, -1, -1, -1, -1, -1, 159, -1, -1, -1, 3463 -1, 1464, -1, -1, -1, -1, -1, -1, 1471, -1, 3464 173, -1, -1, -1, -1, -1, -1, -1, -1, 944, 3465 807, -1, 958, -1, 811, -1, -1, -1, 815, -1, 3466 -1, -1, -1, 196, -1, -1, -1, -1, -1, -1, 3467 -1, 1504, -1, -1, -1, 1508, -1, 210, -1, -1, 3468 -1, 976, -1, -1, -1, -1, 219, -1, -1, -1, 3469 996, -1, -1, -1, -1, -1, 229, -1, -1, -1, 3470 -1, -1, -1, 1009, 1537, -1, 1539, -1, -1, -1, 3471 -1, -1, -1, -1, -1, -1, -1, 1012, -1, -1, 3472 -1, 254, -1, -1, -1, -1, 259, -1, 1023, -1, 3473 -1, -1, -1, -1, 1567, 1568, -1, -1, -1, 272, 3474 -1, 918, 1575, 1576, 1050, 278, 923, 280, -1, -1, 3475 -1, -1, -1, -1, 911, -1, -1, -1, -1, -1, 3476 -1, -1, -1, -1, 297, -1, -1, -1, -1, 926, 3348 -1, 1441, 424, -1, -1, -1, -1, 429, 1448, 431, 3349 37, 38, -1, 40, -1, 684, -1, 92, -1, -1, 3350 -1, -1, -1, -1, -1, -1, 448, 102, -1, 451, 3351 452, -1, -1, -1, -1, -1, -1, 459, -1, 66, 3352 1480, 710, -1, 712, 1484, 72, -1, 240, -1, 76, 3353 -1, 473, 79, 80, 81, 82, 83, 84, 480, 86, 3354 87, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3355 -1, 264, 1512, -1, 1514, -1, 745, -1, -1, -1, 3356 -1, -1, 109, 158, 111, -1, -1, 114, -1, -1, 3357 117, 118, 119, 120, 121, 122, -1, 172, -1, -1, 3358 -1, -1, 1542, 1543, -1, -1, -1, -1, -1, -1, 3359 1550, 1551, -1, -1, -1, -1, -1, -1, -1, -1, 3360 195, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3361 -1, -1, 801, -1, 209, -1, 805, -1, -1, -1, 3362 809, -1, -1, 218, -1, -1, -1, -1, -1, -1, 3363 -1, -1, -1, 228, -1, -1, -1, -1, -1, -1, 3364 -1, -1, -1, -1, 37, 38, -1, 40, -1, -1, 3365 -1, -1, 594, -1, -1, -1, -1, -1, 253, -1, 3366 -1, -1, -1, 258, -1, -1, -1, 380, -1, -1, 3367 -1, -1, -1, 66, -1, -1, 271, -1, -1, 72, 3368 622, -1, 277, 76, 279, 627, 79, 80, 81, 82, 3369 83, 84, -1, 86, 87, -1, -1, -1, -1, -1, 3370 -1, 296, -1, -1, -1, -1, -1, -1, -1, -1, 3371 -1, -1, -1, -1, -1, 904, 109, -1, 111, -1, 3372 -1, -1, -1, 116, 117, 118, 119, 120, 121, 122, 3373 919, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3374 -1, -1, -1, 338, -1, -1, -1, -1, 343, -1, 3375 -1, -1, -1, -1, 943, -1, 698, -1, -1, -1, 3376 -1, 474, -1, -1, -1, -1, -1, -1, -1, -1, 3377 712, -1, -1, -1, -1, -1, -1, 372, -1, -1, 3378 -1, 376, 377, -1, 379, -1, -1, -1, -1, -1, 3379 732, 386, 387, -1, 389, 390, -1, 392, -1, 394, 3380 513, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3381 999, -1, -1, 526, -1, -1, 411, -1, 531, -1, 3382 -1, 534, -1, -1, 419, -1, -1, -1, -1, -1, 3383 -1, 1020, 1021, 546, -1, -1, -1, -1, -1, -1, 3384 -1, -1, -1, -1, -1, -1, -1, -1, -1, 444, 3385 -1, 793, -1, -1, -1, 568, -1, -1, -1, -1, 3386 -1, -1, -1, 805, -1, 578, -1, -1, -1, -1, 3387 -1, -1, 585, -1, -1, 470, -1, 590, -1, -1, 3388 -1, 476, 824, -1, -1, -1, 481, -1, -1, -1, 3389 -1, 1080, -1, -1, -1, -1, 3, 4, 5, 6, 3390 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 3391 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3392 27, -1, 517, 30, 31, 32, 639, -1, -1, -1, 3393 -1, -1, 39, -1, 647, -1, -1, 532, -1, -1, 3477 3394 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3478 -1, -1, -1, -1, 37, 38, -1, 40, -1, -1, 3479 -1, -1, -1, 950, -1, -1, -1, -1, -1, -1, 3480 1095, -1, -1, -1, -1, -1, 339, -1, -1, 966, 3481 -1, 344, -1, 66, 1109, -1, -1, -1, -1, 72, 3482 -1, 1127, -1, 76, -1, -1, 79, 80, 81, 82, 3483 83, 84, -1, 86, 87, -1, -1, -1, -1, -1, 3484 373, 94, -1, -1, 377, 378, -1, 380, -1, -1, 3485 -1, -1, 1009, -1, 387, 388, 109, 390, 391, -1, 3486 393, -1, 395, -1, -1, 118, 119, 120, 121, 122, 3487 123, -1, -1, 1030, 1031, -1, -1, -1, -1, 412, 3488 -1, -1, -1, -1, 1190, 1191, -1, 420, -1, -1, 3395 -1, -1, -1, -1, -1, -1, -1, 1146, -1, -1, 3396 67, -1, 69, -1, 71, -1, -1, 74, 75, -1, 3397 -1, -1, -1, 37, 38, 570, 40, -1, -1, -1, 3398 -1, -1, -1, -1, 579, -1, -1, -1, -1, -1, 3399 -1, 586, -1, -1, -1, 937, -1, 592, -1, 1188, 3400 -1, -1, 66, -1, 111, -1, 601, -1, 72, -1, 3401 117, 118, 76, -1, -1, 79, 80, 81, 82, 83, 3402 84, -1, 86, 87, -1, 967, -1, -1, -1, -1, 3403 -1, -1, 745, -1, 747, -1, 1225, -1, -1, 156, 3404 157, -1, -1, -1, 757, 109, 641, 111, -1, -1, 3405 763, -1, -1, 117, 118, 119, 120, 121, 122, -1, 3406 1002, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3407 -1, 1013, -1, 190, -1, -1, -1, -1, -1, -1, 3408 197, -1, 677, -1, -1, 1274, 1275, -1, -1, -1, 3409 685, -1, 805, 806, 1283, -1, 809, -1, -1, -1, 3410 -1, -1, -1, -1, -1, -1, -1, -1, -1, 283, 3411 823, 285, 286, -1, -1, -1, -1, -1, -1, 293, 3412 294, 716, -1, -1, -1, -1, -1, -1, -1, -1, 3413 -1, 726, 727, 307, 308, -1, -1, -1, -1, -1, 3414 -1, -1, -1, 1085, -1, -1, -1, -1, -1, -1, 3415 863, -1, 269, -1, 867, -1, -1, 1099, -1, -1, 3416 -1, -1, -1, -1, 759, -1, -1, -1, -1, 764, 3417 -1, 345, 10, 11, 12, 13, 14, 15, 16, 17, 3418 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3419 -1, 904, 30, 31, 32, -1, -1, -1, -1, -1, 3420 -1, 39, 40, -1, -1, 1394, 323, 381, -1, -1, 3421 -1, -1, -1, -1, 331, 332, -1, 334, 335, -1, 3422 -1, -1, -1, -1, -1, -1, -1, -1, 345, 67, 3423 943, -1, 349, 828, -1, -1, 74, 75, -1, -1, 3424 835, -1, -1, -1, -1, -1, 1188, -1, -1, -1, 3425 -1, 368, -1, 848, 371, 850, -1, -1, 971, -1, 3426 -1, 1450, -1, 1452, 977, -1, -1, -1, 981, 864, 3427 -1, -1, -1, 111, -1, 870, -1, 115, -1, 117, 3428 118, 398, -1, -1, -1, 402, -1, 882, -1, 1002, 3429 885, -1, -1, -1, -1, -1, -1, 1486, -1, 1488, 3430 1013, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3431 -1, -1, -1, -1, -1, -1, 433, -1, -1, -1, 3432 -1, -1, 1035, -1, 1037, -1, 1515, -1, -1, -1, 3433 -1, -1, -1, -1, -1, -1, -1, -1, -1, 1052, 3434 1053, 1283, 10, 11, 12, 13, 14, 15, 16, 17, 3435 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3436 1073, -1, 479, -1, -1, 482, -1, 962, -1, -1, 3437 -1, 39, -1, -1, -1, 549, 550, 551, 552, 553, 3438 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 3439 564, 565, 566, -1, -1, -1, -1, 37, 38, 67, 3440 40, -1, 997, -1, 521, -1, -1, -1, 525, 526, 3441 -1, -1, -1, -1, -1, 1128, -1, -1, -1, -1, 3442 -1, -1, -1, -1, -1, -1, 66, -1, -1, -1, 3443 -1, -1, 72, 1146, -1, -1, 76, -1, -1, 79, 3444 80, 81, 82, 83, 84, -1, 86, 87, 1161, 1162, 3445 -1, -1, -1, 570, 571, -1, -1, -1, -1, -1, 3446 1055, -1, -1, -1, -1, -1, 1061, -1, -1, 109, 3447 -1, 111, 589, 590, 114, -1, -1, 117, 118, 119, 3448 120, 121, 122, 600, -1, 602, 603, -1, -1, -1, 3449 -1, -1, 609, -1, -1, -1, -1, -1, -1, -1, 3450 1095, -1, 619, 620, -1, 1100, -1, -1, 625, -1, 3451 -1, -1, -1, 1108, -1, -1, -1, 634, 635, 636, 3452 -1, 695, -1, -1, -1, -1, -1, -1, -1, -1, 3453 -1, -1, -1, -1, -1, 652, -1, -1, -1, -1, 3454 657, 658, -1, -1, 661, 662, 1141, -1, -1, -1, 3455 -1, 668, -1, -1, -1, -1, -1, -1, 1153, -1, 3456 -1, 1156, -1, 1158, -1, -1, -1, -1, -1, -1, 3457 687, -1, -1, -1, -1, -1, -1, 1172, 1173, -1, 3458 -1, -1, 756, -1, -1, -1, -1, -1, 1530, 1302, 3459 -1, -1, 1305, 710, 711, -1, -1, -1, -1, 1194, 3489 3460 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3490 -1, -1, -1, -1, -1, -1, 1201, -1, -1, -1, 3491 1087, -1, 445, -1, -1, -1, -1, -1, -1, -1, 3461 -1, -1, 786, -1, -1, -1, -1, -1, -1, -1, 3462 -1, -1, -1, -1, -1, -1, -1, 744, 745, -1, 3463 -1, -1, 749, 750, -1, -1, -1, -1, -1, -1, 3464 -1, -1, -1, -1, -1, -1, 1241, -1, -1, -1, 3465 -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3466 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 3467 -1, 30, 31, 32, -1, -1, 793, -1, -1, -1, 3468 39, -1, -1, -1, 801, -1, -1, -1, -1, -1, 3469 -1, 808, 809, -1, -1, 812, -1, 814, -1, -1, 3470 -1, -1, -1, -1, -1, -1, -1, 824, 67, -1, 3471 -1, -1, -1, 72, -1, 74, 75, 76, -1, 78, 3472 -1, 1316, -1, 1318, 83, 84, -1, -1, -1, -1, 3473 -1, -1, 906, -1, -1, 1330, -1, 1332, -1, -1, 3492 3474 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3493 -1, -1, -1, 1090, -1, -1, -1, -1, 471, -1, 3494 -1, -1, -1, -1, 477, -1, -1, 0, -1, 482, 3495 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 3496 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3497 23, 24, 25, 26, 27, -1, -1, 30, 31, 32, 3498 33, -1, -1, 36, -1, 518, 39, 40, -1, -1, 3475 -1, -1, 111, -1, 1349, -1, -1, -1, 117, 118, 3499 3476 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3500 533, -1, 1159, -1, 1299, -1, -1, -1, -1, -1, 3501 -1, 64, -1, -1, 67, -1, 69, -1, 71, 72, 3502 -1, 74, 75, 76, -1, -1, -1, -1, -1, -1, 3503 83, 84, -1, -1, -1, -1, -1, -1, 571, -1, 3504 -1, 94, 1219, -1, 1201, -1, -1, 580, -1, 157, 3505 158, -1, -1, -1, 587, -1, 109, -1, 111, -1, 3506 593, -1, -1, -1, -1, 118, 119, -1, -1, 602, 3477 1365, 1366, -1, -1, -1, -1, -1, 951, -1, 896, 3478 -1, 1376, -1, -1, 1379, -1, 903, 904, 905, -1, 3479 907, -1, -1, -1, 911, -1, -1, -1, -1, -1, 3480 -1, -1, 1515, -1, -1, 1400, -1, -1, -1, -1, 3481 -1, -1, 986, -1, 1409, 932, 933, 1412, -1, 1414, 3482 1415, 1416, -1, -1, -1, 999, 10, 11, 12, 13, 3483 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3484 24, 25, 26, 27, 28, -1, -1, -1, -1, -1, 3485 967, -1, -1, -1, -1, 39, -1, -1, -1, 1454, 3486 -1, 1456, -1, 1458, -1, -1, 1040, -1, -1, -1, 3487 -1, 988, 989, -1, -1, -1, -1, -1, 1473, -1, 3488 -1, -1, 999, 67, -1, -1, -1, -1, 1005, 1006, 3489 -1, 1008, 1009, 1010, 78, -1, -1, -1, -1, -1, 3490 -1, -1, -1, 1020, 1021, -1, -1, -1, -1, -1, 3491 -1, -1, -1, -1, -1, -1, -1, 3, 4, 5, 3492 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 3493 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3494 26, 27, -1, 1117, 30, 31, 32, 33, -1, -1, 3495 36, 37, 38, 39, 40, -1, -1, -1, -1, -1, 3496 -1, -1, -1, -1, -1, -1, 1083, -1, 1085, -1, 3497 -1, -1, -1, 1090, -1, -1, -1, -1, -1, -1, 3498 66, 67, 1099, 69, -1, 71, 72, -1, 74, 75, 3499 76, -1, -1, 79, 80, 81, 82, 83, 84, -1, 3500 86, 87, -1, 1177, 1178, 1122, 1123, 1124, -1, -1, 3507 3501 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3508 -1, 1238, -1, 191, -1, -1, -1, -1, -1, -1, 3509 198, -1, -1, -1, -1, 1401, -1, -1, -1, -1, 3510 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3511 643, -1, -1, 1419, -1, -1, -1, -1, -1, -1, 3512 -1, 37, 38, -1, 40, -1, -1, -1, -1, -1, 3513 -1, -1, -1, 1290, 1291, -1, -1, -1, -1, -1, 3514 -1, -1, 1299, -1, -1, -1, 679, -1, -1, -1, 3515 66, -1, -1, -1, 687, -1, 72, -1, -1, -1, 3516 76, -1, 270, 79, 80, 81, 82, 83, 84, -1, 3517 86, 87, -1, -1, -1, -1, -1, -1, 94, -1, 3518 -1, -1, -1, -1, -1, 718, 1492, 1493, -1, -1, 3519 -1, -1, -1, 109, -1, 728, 729, -1, -1, -1, 3520 -1, -1, 118, 119, 120, 121, 122, 123, -1, 742, 3521 -1, -1, -1, -1, -1, -1, 324, -1, -1, -1, 3522 -1, -1, -1, -1, 332, 333, -1, 335, 336, -1, 3523 763, -1, 765, -1, -1, -1, 769, -1, 346, -1, 3524 -1, -1, 350, -1, -1, -1, -1, -1, -1, -1, 3525 -1, -1, -1, -1, -1, -1, -1, -1, 1415, -1, 3526 1555, 369, -1, -1, 372, 10, 11, 12, 13, 14, 3527 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3528 25, 26, 27, 28, -1, 30, 31, 32, -1, -1, 3529 -1, 399, -1, -1, 39, 403, -1, -1, -1, -1, 3530 -1, 834, -1, -1, -1, -1, -1, -1, 841, -1, 3531 -1, -1, -1, -1, -1, -1, 1473, -1, 1475, -1, 3532 -1, 854, 67, 856, -1, -1, 434, 72, -1, 74, 3533 75, 76, -1, 78, -1, -1, -1, 870, 83, 84, 3534 -1, -1, -1, -1, 877, -1, -1, -1, -1, 94, 3535 -1, -1, -1, 1510, 148, 1512, 889, -1, -1, 892, 3536 -1, -1, -1, -1, 158, -1, 111, -1, -1, -1, 3537 -1, -1, 480, 118, 119, 483, 170, 171, -1, -1, 3538 -1, -1, -1, 1540, 3, 4, 5, 6, 7, 8, 3539 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3540 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, 3541 -1, 30, 31, 32, 522, -1, -1, -1, 526, 527, 3542 39, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3543 -1, -1, -1, -1, -1, -1, -1, -1, 971, -1, 3544 -1, -1, -1, -1, -1, -1, -1, 241, 67, -1, 3545 69, -1, 71, -1, -1, 74, 75, -1, -1, -1, 3546 -1, -1, -1, 571, 572, -1, -1, -1, -1, -1, 3547 -1, 265, -1, -1, 1007, 94, -1, -1, -1, -1, 3548 -1, -1, 590, 591, -1, -1, -1, -1, -1, -1, 3549 -1, -1, 111, 601, -1, 603, 604, -1, -1, 118, 3550 119, -1, 610, -1, -1, -1, -1, -1, -1, -1, 3551 -1, -1, 620, 621, -1, -1, -1, -1, 626, -1, 3552 -1, -1, -1, -1, -1, -1, -1, 635, 636, 637, 3553 -1, -1, 1065, -1, -1, -1, -1, -1, 1071, -1, 3554 -1, -1, -1, -1, -1, -1, 654, -1, -1, -1, 3555 -1, 659, 660, -1, -1, 663, 664, -1, -1, -1, 3556 -1, -1, 670, -1, -1, -1, -1, -1, -1, -1, 3557 -1, -1, 1105, -1, -1, -1, -1, 1110, -1, -1, 3558 -1, 689, -1, -1, -1, 1118, -1, 381, -1, -1, 3559 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3560 -1, -1, -1, -1, 712, 713, -1, -1, -1, -1, 3561 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3562 -1, 1154, -1, -1, -1, -1, -1, -1, -1, -1, 3563 -1, -1, -1, 1166, -1, -1, 1169, -1, 1171, -1, 3564 748, 749, -1, -1, -1, 753, 754, -1, -1, -1, 3565 -1, -1, 1185, 1186, -1, -1, -1, -1, -1, -1, 3566 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3567 -1, -1, -1, -1, 1207, -1, -1, -1, -1, -1, 3568 -1, 475, 37, 38, -1, 40, -1, -1, -1, -1, 3569 -1, 799, -1, -1, -1, -1, -1, -1, -1, 807, 3570 -1, -1, -1, -1, -1, -1, 814, 815, -1, -1, 3571 818, 66, 820, -1, -1, -1, -1, 72, -1, -1, 3572 514, 76, 830, 1256, 79, 80, 81, 82, 83, 84, 3573 -1, 86, 87, 527, -1, -1, -1, -1, 532, 94, 3574 -1, 535, -1, -1, -1, -1, -1, -1, -1, -1, 3575 -1, -1, 546, 547, 109, -1, 111, -1, -1, -1, 3576 -1, 116, -1, 118, 119, 120, 121, 122, 123, -1, 3577 -1, -1, -1, -1, -1, 569, -1, -1, -1, -1, 3578 -1, -1, -1, -1, -1, 579, -1, -1, -1, -1, 3579 -1, -1, 586, -1, -1, 903, -1, 591, -1, 1332, 3580 -1, 1334, 910, 911, 912, -1, 914, -1, -1, -1, 3581 918, -1, -1, -1, -1, 1348, -1, 1350, -1, -1, 3582 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3583 -1, 939, 940, -1, -1, 1368, -1, -1, -1, -1, 3584 -1, -1, -1, -1, -1, -1, 640, -1, -1, -1, 3585 -1, 1384, 1385, -1, -1, 649, -1, -1, 966, -1, 3586 -1, -1, 1395, -1, -1, 1398, -1, -1, 976, 10, 3587 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3588 21, 22, 23, 24, 25, 26, 27, 28, 1421, -1, 3589 998, 999, -1, -1, -1, -1, -1, 1430, 39, -1, 3590 1433, 1009, 1435, 1436, 1437, -1, -1, 1015, 1016, -1, 3591 1018, 1019, 1020, -1, -1, -1, -1, -1, -1, -1, 3592 -1, -1, 1030, 1031, -1, -1, 67, -1, -1, -1, 3593 -1, -1, -1, -1, -1, -1, -1, 78, -1, -1, 3594 -1, -1, -1, -1, 1477, -1, 1479, -1, 1481, -1, 3595 -1, -1, -1, -1, -1, 749, -1, 751, -1, -1, 3596 -1, -1, -1, -1, 1497, -1, -1, 761, -1, -1, 3597 -1, -1, -1, -1, 768, -1, -1, -1, -1, -1, 3598 -1, -1, -1, -1, -1, 1093, -1, 1095, -1, -1, 3599 -1, -1, 1100, -1, -1, -1, -1, -1, -1, -1, 3600 -1, 1109, -1, -1, -1, -1, -1, -1, -1, 7, 3601 -1, -1, 10, 11, 12, 13, 14, 811, 812, -1, 3602 -1, 815, -1, -1, -1, -1, 1134, 1135, 1136, -1, 3603 -1, -1, -1, -1, -1, 829, -1, -1, -1, 37, 3604 38, 39, 40, -1, -1, -1, -1, -1, -1, -1, 3605 -1, 1159, -1, -1, -1, -1, -1, -1, -1, -1, 3606 -1, -1, -1, -1, -1, -1, -1, -1, 66, 67, 3607 -1, -1, -1, -1, 72, 869, -1, -1, 76, 873, 3608 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3609 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, 3610 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3611 -1, 109, 1220, 111, -1, -1, -1, 911, -1, -1, 3612 118, 119, 120, 121, 122, 123, -1, -1, -1, -1, 3613 1238, 4, 5, 6, 7, 8, 9, 10, 11, 12, 3614 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3615 23, 24, 25, 26, 27, -1, 950, 30, 31, 32, 3616 -1, -1, -1, -1, 37, 38, 39, 40, -1, -1, 3617 -1, -1, 966, 967, -1, -1, -1, -1, -1, -1, 3618 -1, -1, 1290, 1291, -1, -1, 980, -1, -1, -1, 3619 -1, -1, 986, 66, 67, 989, 69, 991, 71, 72, 3620 -1, 74, 75, 76, -1, -1, 79, 80, 81, 82, 3621 83, 84, -1, 86, 87, -1, -1, -1, 1012, -1, 3622 -1, 94, -1, -1, -1, -1, -1, -1, -1, 1023, 3623 -1, 37, 38, -1, 40, -1, 109, -1, 111, -1, 3624 -1, -1, -1, 116, -1, 118, 119, 120, 121, 122, 3625 123, 1045, -1, 1047, -1, -1, -1, -1, -1, -1, 3626 66, -1, -1, -1, -1, -1, 72, -1, 1062, 1063, 3627 76, -1, -1, 79, 80, 81, 82, 83, 84, -1, 3628 86, 87, -1, -1, -1, -1, -1, -1, 94, 1083, 3629 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3630 -1, -1, -1, 109, -1, 111, -1, 1415, 114, -1, 3631 -1, -1, 118, 119, 120, 121, 122, 123, -1, -1, 3632 -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 3633 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3634 22, 23, 24, 25, 26, 27, 1140, -1, 30, 31, 3635 32, 33, -1, -1, 36, -1, -1, 39, 40, -1, 3636 -1, -1, -1, -1, -1, 1159, -1, -1, -1, -1, 3637 -1, 37, 38, -1, 40, -1, -1, -1, -1, -1, 3638 1174, 1175, 64, -1, -1, 67, -1, 69, -1, 71, 3639 72, -1, 74, 75, 76, -1, -1, 1505, -1, -1, 3640 66, 83, 84, -1, -1, -1, 72, -1, -1, -1, 3641 76, -1, 94, 79, 80, 81, 82, 83, 84, -1, 3642 86, 87, 1530, 1531, -1, -1, -1, 109, 94, 111, 3643 -1, -1, -1, 115, -1, -1, 118, 119, -1, -1, 3644 -1, -1, -1, 109, -1, 111, -1, 1555, -1, -1, 3645 -1, -1, 118, 119, 120, 121, 122, 123, -1, -1, 3646 1254, -1, 3, 4, 5, 6, 7, 8, 9, 10, 3647 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3648 21, 22, 23, 24, 25, 26, 27, -1, -1, 30, 3649 31, 32, 33, -1, -1, 36, 37, 38, 39, 40, 3650 41, -1, 43, -1, -1, 46, 47, 48, 49, 50, 3651 51, 52, 53, -1, -1, -1, 57, -1, -1, -1, 3652 61, 62, -1, 64, 1318, 66, 67, 1321, 69, -1, 3653 71, 72, -1, 74, 75, 76, -1, -1, 79, 80, 3654 81, 82, 83, 84, -1, 86, 87, -1, -1, -1, 3655 -1, -1, -1, 94, -1, -1, -1, -1, -1, -1, 3656 -1, -1, -1, -1, -1, -1, -1, -1, 109, -1, 3657 111, -1, -1, 114, -1, -1, -1, 118, 119, 120, 3658 121, 122, 123, -1, -1, -1, -1, 128, -1, -1, 3659 -1, 132, -1, -1, -1, -1, -1, -1, -1, -1, 3660 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3661 -1, 1405, -1, -1, -1, -1, -1, -1, 3, 4, 3502 -1, -1, -1, 109, -1, 111, -1, -1, -1, 1146, 3503 -1, 117, 118, 119, 120, 121, 122, -1, -1, -1, 3504 -1, -1, -1, -1, -1, -1, 132, -1, 3, 4, 3662 3505 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3663 3506 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3664 3507 25, 26, 27, -1, -1, 30, 31, 32, 33, -1, 3665 -1, 36, 37, 38, 39, 40, 10, 11, 12, 13, 3508 -1, 36, 37, 38, 39, 40, 41, -1, 43, -1, 3509 1207, 46, 47, 48, 49, 50, 51, 52, 53, -1, 3510 -1, -1, 57, -1, -1, -1, 61, 62, 1225, 64, 3511 -1, 66, 67, -1, 69, -1, 71, 72, -1, 74, 3512 75, 76, -1, -1, 79, 80, 81, 82, 83, 84, 3513 -1, 86, 87, -1, -1, -1, -1, -1, -1, -1, 3514 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3515 -1, -1, -1, -1, 109, -1, 111, 1274, 1275, 114, 3516 -1, -1, 117, 118, 119, 120, 121, 122, -1, -1, 3517 -1, -1, 127, -1, -1, -1, -1, 132, -1, -1, 3518 -1, -1, 3, 4, 5, 6, 7, 8, 9, 10, 3519 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3520 21, 22, 23, 24, 25, 26, 27, -1, 1382, 30, 3521 31, 32, 33, -1, -1, 36, 37, 38, 39, 40, 3522 -1, -1, -1, -1, 1398, -1, -1, -1, -1, -1, 3523 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3524 -1, -1, -1, -1, -1, 66, 67, -1, 69, -1, 3525 71, 72, -1, 74, 75, 76, -1, -1, 79, 80, 3526 81, 82, 83, 84, -1, 86, 87, -1, -1, -1, 3527 -1, -1, -1, -1, -1, -1, -1, 1394, -1, -1, 3528 -1, -1, -1, -1, -1, -1, -1, -1, 109, -1, 3529 111, -1, -1, -1, 1468, 1469, 117, 118, 119, 120, 3530 121, 122, -1, 4, 5, 6, 7, 8, 9, 10, 3531 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3532 21, 22, 23, 24, 25, 26, 27, -1, -1, 30, 3533 31, 32, -1, -1, -1, -1, 37, 38, 39, 40, 3534 -1, -1, -1, 10, 11, 12, 13, 14, 15, 16, 3535 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3536 27, 28, -1, -1, 1481, 66, 67, -1, 69, -1, 3537 71, 72, 39, 74, 75, 76, -1, -1, 79, 80, 3538 81, 82, 83, 84, -1, 86, 87, -1, 1505, 1506, 3539 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3540 67, -1, -1, -1, -1, -1, -1, -1, 109, -1, 3541 111, 78, -1, 1530, -1, 116, 117, 118, 119, 120, 3542 121, 122, 4, 5, 6, 7, 8, 9, 10, 11, 3543 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3544 22, 23, 24, 25, 26, 27, -1, -1, 30, 31, 3545 32, -1, -1, -1, -1, 37, 38, 39, 40, 10, 3546 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3547 21, 22, 23, 24, 25, 26, 27, -1, -1, 30, 3548 31, 32, -1, -1, 66, 67, -1, 69, 39, 71, 3549 72, -1, 74, 75, 76, -1, -1, 79, 80, 81, 3550 82, 83, 84, -1, 86, 87, -1, -1, -1, -1, 3551 -1, -1, -1, -1, -1, -1, 67, -1, -1, -1, 3552 -1, 72, -1, 74, 75, -1, -1, 109, -1, 111, 3553 -1, -1, 83, 84, 116, 117, 118, 119, 120, 121, 3554 122, 4, 5, 6, 7, 8, 9, 10, 11, 12, 3555 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3556 23, 24, 25, 26, 27, -1, -1, 30, 31, 32, 3557 -1, -1, -1, -1, 37, 38, 39, 40, 10, 11, 3558 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3559 22, 23, 24, 25, 26, 27, -1, -1, 30, 31, 3560 32, -1, -1, 66, 67, -1, 69, 39, 71, 72, 3561 -1, 74, 75, 76, -1, -1, 79, 80, 81, 82, 3562 83, 84, -1, 86, 87, -1, -1, -1, -1, -1, 3563 -1, -1, -1, -1, -1, 67, -1, -1, -1, -1, 3564 -1, -1, 74, 75, -1, -1, 109, -1, 111, -1, 3565 -1, -1, -1, 116, 117, 118, 119, 120, 121, 122, 3566 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 3666 3567 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3667 3568 24, 25, 26, 27, -1, -1, 30, 31, 32, -1, 3668 -1, 66, 67, -1, 69, 39, 71, 72, -1, 74, 3669 75, 76, -1, 1487, 79, 80, 81, 82, 83, 84, 3670 -1, 86, 87, -1, -1, -1, -1, -1, -1, 94, 3671 -1, -1, -1, 67, -1, -1, -1, -1, 72, -1, 3672 74, 75, -1, -1, 109, -1, 111, -1, -1, 83, 3673 84, -1, -1, 118, 119, 120, 121, 122, 123, -1, 3674 -1, -1, -1, -1, -1, -1, 1540, 132, 3, 4, 3675 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3676 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3677 25, 26, 27, -1, -1, 30, 31, 32, 33, -1, 3678 -1, 36, 37, 38, 39, 40, -1, -1, -1, 10, 3679 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3680 21, 22, 23, 24, 25, 26, 27, 28, -1, -1, 3681 -1, 66, 67, -1, 69, -1, 71, 72, 39, 74, 3682 75, 76, -1, -1, 79, 80, 81, 82, 83, 84, 3683 -1, 86, 87, -1, -1, -1, -1, -1, -1, 94, 3684 -1, -1, -1, -1, -1, -1, 67, -1, -1, -1, 3685 -1, -1, -1, -1, 109, -1, 111, 78, -1, -1, 3686 -1, -1, -1, 118, 119, 120, 121, 122, 123, 4, 3687 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3688 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3689 25, 26, 27, -1, -1, 30, 31, 32, -1, -1, 3690 -1, -1, 37, 38, 39, 40, 10, 11, 12, 13, 3691 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3692 24, 25, 26, 27, -1, -1, 30, 31, 32, -1, 3693 -1, 66, 67, -1, 69, 39, 71, 72, -1, 74, 3694 75, 76, -1, -1, 79, 80, 81, 82, 83, 84, 3695 -1, 86, 87, -1, -1, -1, -1, -1, -1, 94, 3696 -1, -1, -1, 67, -1, -1, -1, -1, -1, -1, 3697 74, 75, -1, -1, 109, -1, 111, -1, -1, -1, 3698 -1, 116, -1, 118, 119, 120, 121, 122, 123, 4, 3699 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3700 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3701 25, 26, 27, -1, -1, 30, 31, 32, -1, -1, 3702 -1, -1, 37, 38, 39, 40, 10, 11, 12, 13, 3703 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3704 24, 25, 26, 27, -1, -1, 30, 31, 32, -1, 3705 -1, 66, 67, -1, 69, 39, 71, 72, -1, 74, 3706 75, 76, -1, -1, 79, 80, 81, 82, 83, 84, 3707 -1, 86, 87, -1, -1, -1, -1, -1, -1, 94, 3708 -1, -1, -1, 67, -1, -1, -1, -1, -1, -1, 3709 74, 75, -1, -1, 109, -1, 111, -1, -1, -1, 3710 -1, 116, -1, 118, 119, 120, 121, 122, 123, 4, 3569 -1, -1, -1, 37, 38, 39, 40, 10, 11, 12, 3570 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3571 23, 24, 25, 26, 27, -1, -1, 30, 31, 32, 3572 -1, -1, 66, 67, -1, 69, 39, 71, 72, -1, 3573 74, 75, 76, -1, -1, 79, 80, 81, 82, 83, 3574 84, -1, 86, 87, -1, -1, -1, -1, -1, -1, 3575 -1, -1, -1, -1, 67, -1, -1, -1, -1, -1, 3576 -1, 74, 75, -1, -1, 109, -1, 111, -1, -1, 3577 -1, -1, -1, 117, 118, 119, 120, 121, 122, 4, 3711 3578 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3712 3579 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, … … 3717 3584 -1, 66, 67, -1, 69, -1, 71, 72, -1, 74, 3718 3585 75, 76, -1, -1, 79, 80, 81, 82, 83, 84, 3719 -1, 86, 87, -1, -1, -1, -1, -1, -1, 94,3586 -1, 86, 87, -1, -1, -1, -1, -1, -1, -1, 3720 3587 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3721 3588 -1, -1, -1, -1, 109, -1, 111, -1, -1, -1, 3722 -1, -1, -1, 118, 119, 120, 121, 122, 123, 4,3723 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,3724 1 5, 16, 17, 18, 19, 20, 21, 22, 23, 24,3725 2 5, 26, 27, -1, -1, 30, 31, 32, -1, -1,3726 -1, -1, 37, 38, 39, 40, -1, -1, -1, -1,3589 -1, -1, 117, 118, 119, 120, 121, 122, 4, 5, 3590 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 3591 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3592 26, 27, -1, -1, 30, 31, 32, -1, -1, -1, 3593 -1, 37, 38, 39, 40, -1, -1, -1, -1, -1, 3727 3594 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3728 3595 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3729 -1, 66, 67, -1, 69, -1, 71, 72, -1, 74,3730 7 5, 76, -1, -1, 79, 80, 81, 82, 83, 84,3731 -1, 86, 87, -1, -1, -1, -1, -1, -1, 94,3596 66, 67, -1, 69, -1, 71, 72, -1, 74, 75, 3597 76, -1, -1, 79, 80, 81, 82, 83, 84, -1, 3598 86, 87, -1, -1, -1, -1, -1, -1, -1, -1, 3732 3599 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3733 -1, -1, -1, -1, 109, -1, 111, -1, -1, -1,3734 -1, -1, -1, 118, 119, 120, 121, 122, 123, 4,3735 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,3736 1 5, 16, 17, 18, 19, 20, 21, 22, 23, 24,3737 2 5, 26, 27, -1, -1, 30, 31, 32, -1, -1,3738 -1, -1, 37, 38, 39, 40, -1, -1, -1, -1,3600 -1, -1, -1, 109, -1, 111, -1, -1, -1, -1, 3601 -1, 117, 118, 119, 120, 121, 122, 4, 5, 6, 3602 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 3603 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3604 27, -1, -1, 30, 31, 32, -1, -1, -1, -1, 3605 37, 38, 39, 40, -1, -1, -1, -1, -1, -1, 3739 3606 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3607 -1, -1, -1, -1, -1, -1, -1, -1, -1, 66, 3608 67, -1, 69, -1, 71, 72, -1, 74, 75, 76, 3609 -1, -1, 79, 80, 81, 82, 83, 84, -1, 86, 3610 87, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3740 3611 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3741 -1, 66, 67, -1, 69, -1, 71, 72, -1, 74, 3742 75, 76, -1, -1, 79, 80, 81, 82, 83, 84, 3743 -1, 86, 87, -1, -1, -1, -1, -1, -1, 94, 3744 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3745 -1, -1, -1, -1, 109, -1, 111, -1, -1, -1, 3746 -1, -1, -1, 118, 119, 120, 121, 122, 123, 4, 3747 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3748 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3749 25, 26, 27, -1, -1, 30, 31, 32, -1, -1, 3750 -1, -1, 37, 38, 39, 40, -1, -1, -1, -1, 3751 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3752 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3753 -1, 66, 67, -1, 69, -1, 71, 72, -1, 74, 3754 75, 76, -1, -1, 79, 80, 81, 82, 83, 84, 3755 -1, 86, 87, -1, -1, -1, -1, -1, -1, 94, 3756 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3757 -1, -1, -1, -1, 109, -1, 111, -1, -1, -1, 3758 -1, -1, -1, 118, 119, 120, 121, 122, 123, 3, 3612 -1, -1, 109, -1, 111, -1, -1, -1, -1, -1, 3613 117, 118, 119, 120, 121, 122, 0, -1, -1, 3, 3759 3614 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 3760 3615 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, … … 3766 3621 74, 75, 76, -1, -1, -1, -1, -1, -1, 83, 3767 3622 84, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3768 94, -1, -1, -1, -1, -1, -1, -1, -1, -1,3623 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3769 3624 -1, -1, -1, -1, -1, 109, -1, 111, -1, -1, 3770 -1, -1, -1, -1, 118, 119, 3, 4, 5, 6, 3625 -1, -1, -1, 117, 118, 3, 4, 5, 6, 7, 3626 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3627 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3628 -1, -1, 30, 31, 32, 33, -1, -1, 36, -1, 3629 -1, 39, 40, -1, -1, -1, -1, -1, -1, -1, 3630 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3631 -1, -1, -1, -1, -1, -1, 64, -1, -1, 67, 3632 -1, 69, -1, 71, 72, -1, 74, 75, 76, -1, 3633 -1, -1, -1, -1, -1, 83, 84, -1, -1, -1, 3634 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3635 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3636 -1, 109, -1, 111, -1, -1, -1, 115, -1, 117, 3637 118, 3, 4, 5, 6, 7, 8, 9, 10, 11, 3638 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3639 22, 23, 24, 25, 26, 27, -1, -1, 30, 31, 3640 32, 33, -1, -1, 36, -1, -1, 39, 40, -1, 3641 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3642 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3643 -1, -1, 64, -1, -1, 67, -1, 69, -1, 71, 3644 72, -1, 74, 75, 76, -1, -1, -1, -1, -1, 3645 -1, 83, 84, -1, -1, -1, -1, -1, -1, -1, 3646 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3647 -1, -1, -1, -1, -1, -1, -1, 109, -1, 111, 3648 -1, -1, -1, -1, -1, 117, 118, 3, 4, 5, 3649 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 3650 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3651 26, 27, -1, -1, 30, 31, 32, 33, -1, -1, 3652 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, 3653 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3654 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3655 -1, 67, -1, 69, -1, 71, -1, -1, 74, 75, 3656 -1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 3657 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3658 23, 24, 25, 26, 27, -1, -1, 30, 31, 32, 3659 -1, -1, -1, -1, -1, 111, 39, -1, -1, -1, 3660 -1, 117, 118, -1, -1, -1, -1, -1, -1, -1, 3661 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3662 -1, -1, -1, -1, 67, -1, 69, -1, 71, 72, 3663 -1, 74, 75, 76, -1, -1, -1, -1, -1, -1, 3664 83, 84, -1, -1, -1, -1, -1, -1, -1, -1, 3665 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3666 -1, -1, -1, -1, -1, -1, 109, -1, 111, -1, 3667 -1, -1, -1, -1, 117, 118, 4, 5, 6, 7, 3668 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3669 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3670 -1, -1, 30, 31, 32, -1, -1, -1, -1, -1, 3671 -1, 39, -1, -1, -1, -1, 10, 11, 12, 13, 3672 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3673 24, 25, 26, 27, -1, -1, 30, 31, 32, 67, 3674 -1, 69, -1, 71, -1, 39, 74, 75, -1, 4, 3675 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3676 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3677 25, 26, 27, 67, -1, 30, 31, 32, -1, -1, 3678 74, 75, 110, 111, 39, -1, -1, -1, -1, 117, 3679 118, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3680 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3681 -1, -1, 67, -1, 69, 109, 71, 111, -1, 74, 3682 75, -1, -1, 117, 118, -1, -1, -1, -1, -1, 3683 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3684 -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, 3685 -1, -1, -1, -1, -1, -1, 111, -1, -1, -1, 3686 -1, -1, 117, 118, 4, 5, 6, 7, 8, 9, 3687 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3688 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, 3689 30, 31, 32, -1, -1, -1, -1, -1, -1, 39, 3690 -1, -1, -1, 10, 11, 12, 13, 14, 15, 16, 3691 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3692 27, -1, -1, 30, 31, 32, -1, 67, -1, 69, 3693 -1, 71, 39, 40, 74, 75, -1, -1, -1, -1, 3694 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3695 -1, -1, -1, -1, -1, -1, 96, -1, -1, -1, 3696 67, -1, -1, -1, -1, -1, -1, 74, 75, -1, 3697 -1, 111, -1, -1, -1, -1, -1, 117, 118, 4, 3698 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3699 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3700 25, 26, 27, -1, 111, 30, 31, 32, 115, -1, 3701 117, 118, -1, -1, 39, -1, -1, -1, -1, -1, 3702 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3703 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3704 -1, -1, 67, -1, 69, -1, 71, -1, -1, 74, 3705 75, -1, 4, 5, 6, 7, 8, 9, 10, 11, 3706 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3707 22, 23, 24, 25, 26, 27, -1, -1, 30, 31, 3708 32, -1, -1, -1, -1, -1, 111, 39, -1, -1, 3709 -1, -1, 117, 118, -1, -1, -1, -1, -1, -1, 3710 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3711 -1, -1, -1, -1, -1, 67, -1, 69, -1, 71, 3712 -1, -1, 74, 75, -1, 4, 5, 6, 7, 8, 3713 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3714 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, 3715 -1, 30, 31, 32, -1, -1, -1, -1, -1, 111, 3716 39, -1, -1, -1, -1, 117, 118, -1, -1, -1, 3717 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3718 -1, -1, -1, -1, -1, -1, -1, -1, 67, -1, 3719 69, -1, 71, -1, -1, 74, 75, -1, 4, 5, 3720 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 3721 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3722 26, 27, -1, -1, 30, 31, 32, -1, -1, -1, 3723 -1, -1, 111, 39, -1, -1, -1, -1, 117, 118, 3724 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3725 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3726 -1, 67, -1, 69, -1, 71, -1, -1, 74, 75, 3727 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3728 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, 3729 30, 31, 32, -1, -1, -1, -1, 37, 38, 39, 3730 40, -1, -1, -1, -1, 111, -1, -1, -1, -1, 3731 -1, 117, 118, -1, -1, -1, -1, -1, -1, -1, 3732 -1, -1, -1, -1, -1, -1, 66, 67, -1, -1, 3733 -1, -1, 72, -1, 74, 75, 76, -1, -1, 79, 3734 80, 81, 82, 83, 84, -1, 86, 87, -1, -1, 3735 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3736 -1, -1, -1, -1, -1, -1, -1, -1, -1, 109, 3737 -1, 111, -1, -1, 114, -1, -1, 117, 118, 119, 3738 120, 121, 122, 10, 11, 12, 13, 14, 15, 16, 3739 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3740 27, -1, -1, 30, 31, 32, -1, -1, -1, -1, 3741 37, 38, 39, 40, 10, 11, 12, 13, 14, 15, 3742 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3743 26, 27, -1, -1, 30, 31, 32, -1, -1, 66, 3744 67, -1, -1, 39, -1, 72, -1, 74, 75, 76, 3745 -1, -1, 79, 80, 81, 82, 83, 84, -1, 86, 3746 87, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3747 -1, 67, -1, -1, -1, -1, 72, -1, 74, 75, 3748 76, -1, 109, 110, 111, -1, -1, 83, 84, -1, 3749 117, 118, 119, 120, 121, 122, 10, 11, 12, 13, 3750 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3751 24, 25, 26, 27, -1, 111, 30, 31, 32, -1, 3752 -1, 117, 118, 37, 38, 39, 40, 10, 11, 12, 3753 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3754 23, 24, 25, 26, 27, -1, -1, 30, 31, 32, 3755 -1, -1, 66, 67, -1, -1, 39, -1, 72, -1, 3756 74, 75, 76, -1, -1, 79, 80, 81, 82, 83, 3757 84, -1, 86, 87, -1, -1, -1, -1, -1, -1, 3758 -1, -1, -1, -1, 67, -1, -1, -1, -1, 72, 3759 -1, 74, 75, -1, -1, 109, -1, 111, -1, -1, 3760 83, 84, -1, 117, 118, 119, 120, 121, 122, 10, 3761 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3762 21, 22, 23, 24, 25, 26, 27, -1, 111, 30, 3763 31, 32, -1, -1, 117, 118, 37, 38, 39, 40, 3764 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3765 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, 3766 30, 31, 32, -1, -1, 66, 67, -1, -1, 39, 3767 40, 72, -1, 74, 75, 76, -1, -1, 79, 80, 3768 81, 82, 83, 84, -1, 86, 87, -1, -1, -1, 3769 -1, -1, -1, -1, -1, -1, -1, 67, -1, -1, 3770 -1, -1, -1, -1, 74, 75, -1, -1, 109, -1, 3771 111, -1, -1, -1, -1, -1, 117, 118, 119, 120, 3772 121, 122, 10, 11, 12, 13, 14, 15, 16, 17, 3773 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3774 -1, 111, 30, 31, 32, 115, -1, 117, 118, 37, 3775 38, 39, 40, 10, 11, 12, 13, 14, 15, 16, 3776 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3777 27, -1, -1, 30, 31, 32, -1, -1, 66, 67, 3778 -1, -1, 39, -1, 72, -1, 74, 75, 76, -1, 3779 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3780 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3781 67, -1, -1, -1, -1, -1, -1, 74, 75, -1, 3782 -1, 109, -1, 111, -1, -1, -1, -1, -1, 117, 3783 118, 119, 120, 121, 122, 10, 11, 12, 13, 14, 3784 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3785 25, 26, 27, -1, 111, 30, 31, 32, -1, -1, 3786 117, 118, 37, 38, 39, 40, -1, -1, -1, -1, 3787 -1, -1, -1, 10, 11, 12, 13, 14, 15, 16, 3788 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3789 27, 66, 67, 30, 31, 32, -1, 72, -1, 74, 3790 75, 76, 39, -1, 79, 80, 81, 82, 83, 84, 3791 -1, 86, 87, -1, -1, -1, -1, -1, -1, -1, 3792 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3793 67, -1, -1, -1, 109, -1, 111, 74, 75, -1, 3794 -1, -1, 117, 118, 119, 120, 121, 122, 3, 4, 3795 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3796 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3797 25, 26, 27, -1, 111, 30, 31, 32, -1, -1, 3798 117, 118, -1, -1, 39, -1, -1, -1, 10, 11, 3799 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3800 22, 23, 24, 25, 26, 27, -1, -1, 30, 31, 3801 32, -1, 67, -1, 69, -1, 71, 39, -1, 74, 3802 75, -1, -1, -1, -1, -1, 10, 11, 12, 13, 3803 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3804 24, 25, 26, 27, -1, 67, 30, 31, 32, -1, 3805 72, -1, 74, 75, 76, 39, -1, -1, -1, 114, 3806 -1, 83, 84, -1, 10, 11, 12, 13, 14, 15, 3807 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3808 26, 27, -1, 67, 30, 31, 32, 109, 72, 111, 3809 74, 75, 76, 39, -1, 117, 118, -1, -1, 83, 3810 84, -1, 10, 11, 12, 13, 14, 15, 16, 17, 3811 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3812 -1, 67, 30, 31, 32, 109, 72, 111, 74, 75, 3813 76, 39, -1, 117, 118, -1, -1, 83, 84, -1, 3814 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3815 20, 21, 22, 23, 24, 25, 26, 27, 28, 67, 3816 30, 31, 32, 109, 72, 111, 74, 75, 76, 39, 3817 -1, 117, 118, -1, -1, 83, 84, -1, 10, 11, 3818 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3819 22, 23, 24, 25, 26, 27, 28, 67, 30, 31, 3820 32, 109, -1, 111, 74, 75, -1, 39, 78, 117, 3821 118, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3822 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, 3823 -1, 30, 31, 32, -1, 67, -1, -1, -1, 109, 3824 39, 111, 74, 75, -1, -1, 78, 117, 118, 10, 3825 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3826 21, 22, 23, 24, 25, 26, 27, -1, 67, 30, 3827 31, 32, -1, -1, -1, 74, 75, -1, 39, 111, 3828 -1, -1, -1, -1, -1, 117, 118, 10, 11, 12, 3829 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3830 23, 24, 25, 26, 27, -1, 67, 30, 31, 32, 3831 -1, -1, 111, 74, 75, -1, 39, -1, 117, 118, 3832 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3833 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, 3834 30, 31, 32, -1, 67, -1, -1, -1, -1, 39, 3835 111, 74, 75, -1, -1, -1, 117, 118, 10, 11, 3836 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3837 22, 23, 24, 25, 26, 27, -1, 67, 30, 31, 3838 32, -1, -1, -1, 74, 75, -1, 39, 111, -1, 3839 -1, -1, -1, -1, 117, 118, -1, -1, -1, -1, 3840 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3841 -1, -1, -1, -1, -1, 67, -1, -1, -1, -1, 3842 -1, 111, 74, 75, -1, -1, -1, 117, 118, 4, 3843 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3844 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3845 25, 26, 27, -1, -1, 30, 31, 32, -1, 111, 3846 -1, -1, -1, -1, 39, 117, 118, -1, -1, -1, 3847 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3848 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3849 -1, -1, 67, -1, 69, -1, 71, -1, -1, 74, 3850 75, 37, 38, -1, 40, 41, -1, 43, -1, -1, 3851 46, 47, 48, 49, 50, 51, 52, 53, -1, -1, 3852 56, 57, -1, -1, -1, 61, 62, -1, 64, -1, 3853 66, -1, -1, -1, -1, 110, 72, -1, -1, -1, 3854 76, -1, -1, 79, 80, 81, 82, 83, 84, -1, 3855 86, 87, -1, -1, -1, -1, -1, -1, -1, -1, 3856 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3857 -1, -1, -1, 109, -1, 111, -1, -1, 114, -1, 3858 -1, 117, 118, 119, 120, 121, 122, -1, -1, 37, 3859 38, 127, 40, 41, -1, 43, 132, -1, 46, 47, 3860 48, 49, 50, 51, 52, 53, -1, -1, -1, 57, 3861 -1, -1, -1, 61, 62, -1, 64, -1, 66, -1, 3862 -1, -1, -1, -1, 72, -1, -1, -1, 76, -1, 3863 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3864 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3865 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3866 -1, 109, -1, 111, -1, -1, 114, -1, -1, 117, 3867 118, 119, 120, 121, 122, -1, -1, -1, -1, 127, 3868 -1, -1, -1, -1, 132, 4, 5, 6, 7, 8, 3869 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3870 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, 3871 -1, 30, 31, 32, -1, -1, -1, -1, -1, -1, 3872 39, -1, 37, 38, -1, 40, 41, -1, 43, 44, 3873 45, 46, 47, 48, 49, 50, 51, 52, 53, -1, 3874 -1, 56, 57, -1, -1, -1, 61, 62, 67, 64, 3875 69, 66, 71, -1, -1, 74, 75, 72, -1, -1, 3876 -1, 76, -1, -1, 79, 80, 81, 82, 83, 84, 3877 -1, 86, 87, -1, -1, -1, -1, 96, -1, -1, 3878 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3879 -1, -1, -1, -1, 109, -1, 111, -1, -1, 114, 3880 -1, -1, 117, 118, 119, 120, 121, 122, -1, -1, 3881 37, 38, 127, 40, 41, -1, 43, 44, 45, 46, 3882 47, 48, 49, 50, 51, 52, 53, -1, -1, -1, 3883 57, -1, -1, -1, 61, 62, -1, 64, -1, 66, 3884 -1, -1, -1, -1, -1, 72, -1, -1, -1, 76, 3885 -1, -1, 79, 80, 81, 82, 83, 84, -1, 86, 3886 87, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3887 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3888 -1, -1, 109, -1, 111, -1, -1, 114, -1, -1, 3889 117, 118, 119, 120, 121, 122, -1, -1, 37, 38, 3890 127, 40, 41, -1, 43, -1, -1, 46, 47, 48, 3891 49, 50, 51, 52, 53, -1, -1, -1, 57, -1, 3892 -1, -1, 61, 62, -1, 64, -1, 66, -1, -1, 3893 -1, -1, -1, 72, -1, -1, -1, 76, -1, -1, 3894 79, 80, 81, 82, 83, 84, -1, 86, 87, -1, 3895 -1, -1, -1, -1, -1, 37, 38, -1, 40, -1, 3896 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3897 109, -1, 111, -1, -1, 114, -1, -1, 117, 118, 3898 119, 120, 121, 122, 66, -1, -1, -1, 127, -1, 3899 72, -1, 74, 75, 76, -1, -1, 79, 80, 81, 3900 82, 83, 84, -1, 86, 87, -1, -1, -1, -1, 3901 -1, -1, 37, 38, -1, 40, -1, -1, -1, -1, 3902 -1, -1, -1, -1, -1, -1, -1, 109, -1, 111, 3903 -1, 113, 114, -1, -1, 117, 118, 119, 120, 121, 3904 122, 66, -1, -1, -1, -1, -1, 72, -1, -1, 3905 -1, 76, -1, -1, 79, 80, 81, 82, 83, 84, 3906 -1, 86, 87, -1, -1, -1, -1, -1, -1, 37, 3907 38, -1, 40, -1, -1, -1, -1, -1, -1, -1, 3908 -1, -1, -1, -1, 109, -1, 111, -1, 37, 38, 3909 -1, 40, 117, 118, 119, 120, 121, 122, 66, -1, 3910 -1, -1, -1, -1, 72, -1, -1, -1, 76, -1, 3911 -1, 79, 80, 81, 82, 83, 84, 66, 86, 87, 3912 -1, -1, -1, 72, -1, -1, -1, 76, -1, -1, 3913 79, 80, 81, 82, 83, 84, -1, 86, 87, -1, 3914 -1, 109, -1, 111, -1, 37, 38, -1, 40, 117, 3915 118, 119, 120, 121, 122, -1, -1, -1, -1, -1, 3916 109, -1, -1, -1, 37, 38, -1, 40, 117, 118, 3917 119, 120, 121, 122, 66, -1, -1, -1, -1, -1, 3918 72, -1, -1, -1, 76, -1, -1, 79, 80, 81, 3919 82, 83, 84, 66, 86, 87, -1, -1, -1, 72, 3920 -1, -1, -1, 76, -1, -1, 79, 80, 81, 82, 3921 83, 84, -1, 86, 87, -1, -1, 109, -1, -1, 3922 -1, 37, 38, -1, 40, 117, 118, 119, 120, 121, 3923 122, -1, -1, -1, -1, -1, 109, -1, -1, -1, 3924 -1, -1, -1, -1, 117, 118, 119, 120, 121, 122, 3925 66, -1, -1, -1, -1, -1, 72, -1, -1, -1, 3926 76, -1, -1, 79, 80, 81, 82, 83, 84, -1, 3927 86, 87, -1, -1, -1, -1, -1, -1, -1, -1, 3928 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3929 -1, -1, -1, 109, -1, -1, -1, -1, -1, -1, 3930 -1, 117, 118, 119, 120, 121, 122, 4, 5, 6, 3771 3931 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 3772 3932 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3773 27, -1, -1, 30, 31, 32, -1, -1, -1, -1, 3774 -1, -1, 39, -1, 10, 11, 12, 13, 14, 15, 3775 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3776 26, 27, -1, -1, 30, 31, 32, 33, 34, 35, 3777 67, -1, 69, 39, 71, 72, -1, 74, 75, 76, 3778 -1, -1, -1, -1, -1, -1, 83, 84, -1, -1, 3779 -1, -1, -1, -1, -1, -1, -1, 94, -1, -1, 3780 -1, 67, -1, -1, -1, -1, -1, -1, 74, 75, 3781 -1, -1, 109, -1, 111, -1, -1, -1, -1, -1, 3782 -1, 118, 119, 3, 4, 5, 6, 7, 8, 9, 3783 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3784 20, 21, 22, 23, 24, 25, 26, 27, 28, -1, 3785 30, 31, 32, 33, -1, -1, 36, -1, -1, 39, 3786 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3787 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3788 -1, -1, -1, -1, -1, -1, -1, 67, -1, 69, 3789 -1, 71, -1, -1, 74, 75, -1, -1, 78, -1, 3790 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3791 -1, -1, -1, -1, 94, -1, -1, -1, -1, -1, 3792 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3793 -1, 111, -1, -1, -1, -1, -1, -1, 118, 119, 3794 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 3795 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3796 23, 24, 25, 26, 27, -1, -1, 30, 31, 32, 3797 33, -1, -1, 36, -1, -1, 39, -1, -1, -1, 3798 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3799 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3800 -1, -1, -1, -1, 67, -1, 69, -1, 71, -1, 3801 -1, 74, 75, -1, -1, -1, -1, -1, -1, -1, 3802 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3803 -1, 94, -1, -1, -1, -1, -1, -1, -1, -1, 3804 -1, -1, -1, -1, -1, -1, -1, -1, 111, -1, 3805 -1, -1, -1, -1, -1, 118, 119, 4, 5, 6, 3806 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 3807 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3808 27, -1, -1, 30, 31, 32, -1, -1, -1, -1, 3933 27, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3809 3934 -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, 3810 3935 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3811 3936 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3812 3937 67, -1, 69, -1, 71, 72, -1, 74, 75, 76, 3813 -1, -1, -1, -1, -1, -1, 83, 84, -1, -1, 3814 -1, -1, -1, -1, -1, -1, -1, 94, -1, -1, 3815 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3816 -1, -1, 109, -1, 111, -1, -1, -1, -1, -1, 3817 -1, 118, 119, 4, 5, 6, 7, 8, 9, 10, 3818 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3819 21, 22, 23, 24, 25, 26, 27, -1, -1, 30, 3820 31, 32, -1, -1, -1, -1, -1, -1, 39, -1, 3821 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3822 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3823 -1, -1, -1, -1, -1, -1, 67, -1, 69, -1, 3824 71, -1, -1, 74, 75, -1, -1, -1, -1, -1, 3825 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3826 -1, -1, -1, 94, -1, -1, -1, -1, -1, -1, 3827 -1, -1, -1, -1, -1, -1, -1, -1, -1, 110, 3828 111, -1, -1, -1, -1, -1, -1, 118, 119, 4, 3938 -1, -1, -1, -1, -1, -1, 83, 84, 3, 4, 3829 3939 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3830 3940 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, … … 3834 3944 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3835 3945 -1, -1, 67, -1, 69, -1, 71, -1, -1, 74, 3836 75, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3837 -1, -1, -1, -1, -1, -1, -1, -1, -1, 94, 3838 -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, 3839 -1, -1, -1, -1, -1, -1, 111, -1, -1, -1, 3840 -1, -1, -1, 118, 119, 4, 5, 6, 7, 8, 3841 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3842 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, 3843 -1, 30, 31, 32, -1, -1, -1, -1, -1, -1, 3844 39, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3845 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3846 -1, -1, -1, -1, -1, -1, -1, -1, 67, -1, 3847 69, -1, 71, -1, -1, 74, 75, -1, -1, -1, 3848 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3849 -1, -1, -1, -1, -1, 94, -1, 96, -1, -1, 3850 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3851 -1, -1, 111, -1, -1, -1, -1, -1, -1, 118, 3852 119, 4, 5, 6, 7, 8, 9, 10, 11, 12, 3853 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3854 23, 24, 25, 26, 27, -1, -1, 30, 31, 32, 3855 -1, -1, -1, -1, -1, -1, 39, -1, -1, -1, 3946 75, 3, 4, 5, 6, 7, 8, 9, 10, 11, 3947 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3948 22, 23, 24, 25, 26, 27, -1, -1, 30, 31, 3949 32, -1, -1, -1, -1, -1, -1, 39, -1, -1, 3856 3950 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3857 3951 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3858 -1, -1, -1, -1, 67, -1, 69, -1, 71, -1, 3859 -1, 74, 75, -1, -1, -1, -1, -1, -1, -1, 3860 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3861 -1, 94, -1, -1, -1, -1, -1, -1, -1, -1, 3862 -1, -1, -1, -1, -1, -1, -1, -1, 111, -1, 3863 -1, -1, -1, -1, -1, 118, 119, 4, 5, 6, 3864 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 3865 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3866 27, -1, -1, 30, 31, 32, -1, -1, -1, -1, 3867 -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, 3868 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3869 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3870 67, -1, 69, -1, 71, -1, -1, 74, 75, -1, 3871 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3872 -1, -1, -1, -1, -1, -1, -1, 94, -1, -1, 3873 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3874 -1, -1, -1, -1, 111, -1, -1, -1, -1, -1, 3875 -1, 118, 119, 4, 5, 6, 7, 8, 9, 10, 3876 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3877 21, 22, 23, 24, 25, 26, 27, -1, -1, 30, 3878 31, 32, -1, -1, -1, -1, -1, -1, 39, -1, 3879 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3880 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3881 -1, -1, -1, -1, -1, -1, 67, -1, 69, -1, 3882 71, -1, -1, 74, 75, -1, -1, -1, -1, -1, 3883 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3884 -1, -1, -1, 94, -1, -1, -1, -1, -1, -1, 3885 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3886 111, -1, -1, -1, -1, -1, -1, 118, 119, 4, 3887 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3888 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3889 25, 26, 27, -1, -1, 30, 31, 32, -1, -1, 3890 -1, -1, -1, -1, 39, -1, -1, -1, -1, -1, 3891 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3892 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3893 -1, -1, 67, -1, 69, -1, 71, -1, -1, 74, 3894 75, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3895 19, 20, 21, 22, 23, 24, 25, 26, 27, 94, 3896 -1, 30, 31, 32, -1, -1, -1, -1, 37, 38, 3897 39, 40, -1, -1, -1, -1, 111, -1, -1, -1, 3898 -1, -1, -1, 118, 119, -1, -1, -1, -1, -1, 3899 -1, -1, -1, -1, -1, -1, -1, 66, 67, -1, 3900 -1, -1, -1, 72, -1, 74, 75, 76, -1, -1, 3901 79, 80, 81, 82, 83, 84, -1, 86, 87, -1, 3902 -1, -1, -1, -1, -1, 94, -1, -1, -1, -1, 3903 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3904 109, -1, 111, -1, -1, 114, -1, -1, -1, 118, 3905 119, 120, 121, 122, 123, 10, 11, 12, 13, 14, 3906 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3907 25, 26, 27, -1, -1, 30, 31, 32, -1, -1, 3908 -1, -1, 37, 38, 39, 40, -1, -1, -1, -1, 3909 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3910 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3911 -1, 66, 67, -1, -1, -1, -1, 72, -1, 74, 3912 75, 76, -1, -1, 79, 80, 81, 82, 83, 84, 3913 -1, 86, 87, -1, -1, -1, -1, -1, -1, 94, 3914 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3915 -1, -1, -1, -1, 109, 110, 111, -1, -1, -1, 3916 -1, -1, -1, 118, 119, 120, 121, 122, 123, 10, 3917 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3918 21, 22, 23, 24, 25, 26, 27, -1, -1, 30, 3919 31, 32, -1, -1, -1, -1, 37, 38, 39, 40, 3920 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3921 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3922 -1, -1, -1, -1, -1, 66, 67, -1, -1, -1, 3923 -1, 72, -1, 74, 75, 76, -1, -1, 79, 80, 3924 81, 82, 83, 84, -1, 86, 87, -1, -1, -1, 3925 -1, -1, -1, 94, -1, -1, -1, -1, -1, -1, 3926 -1, -1, -1, -1, -1, -1, -1, -1, 109, -1, 3927 111, -1, -1, -1, -1, -1, -1, 118, 119, 120, 3928 121, 122, 123, 10, 11, 12, 13, 14, 15, 16, 3929 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3930 27, -1, -1, 30, 31, 32, -1, -1, -1, -1, 3931 37, 38, 39, 40, -1, -1, -1, -1, -1, -1, 3932 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3933 -1, -1, -1, -1, -1, -1, -1, -1, -1, 66, 3934 67, -1, -1, -1, -1, 72, -1, 74, 75, 76, 3935 -1, -1, 79, 80, 81, 82, 83, 84, -1, 86, 3936 87, -1, -1, -1, -1, -1, -1, 94, -1, -1, 3937 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3938 -1, -1, 109, -1, 111, -1, -1, -1, -1, -1, 3939 -1, 118, 119, 120, 121, 122, 123, 10, 11, 12, 3940 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3941 23, 24, 25, 26, 27, -1, -1, 30, 31, 32, 3942 -1, -1, -1, -1, 37, 38, 39, 40, -1, -1, 3943 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3944 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3945 -1, -1, -1, 66, 67, -1, -1, -1, -1, 72, 3946 -1, 74, 75, 76, -1, -1, 79, 80, 81, 82, 3947 83, 84, -1, 86, 87, -1, -1, -1, -1, -1, 3948 -1, 94, -1, -1, -1, -1, -1, -1, -1, -1, 3949 -1, -1, -1, -1, -1, -1, 109, -1, 111, -1, 3950 -1, -1, -1, -1, -1, 118, 119, 120, 121, 122, 3951 123, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3952 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, 3953 -1, 30, 31, 32, -1, -1, -1, -1, 37, 38, 3954 39, 40, -1, -1, -1, -1, -1, -1, -1, -1, 3955 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3956 -1, -1, -1, -1, -1, -1, -1, 66, 67, -1, 3957 -1, -1, -1, 72, -1, 74, 75, 76, -1, -1, 3958 79, 80, 81, 82, 83, 84, -1, 86, 87, -1, 3959 -1, -1, -1, -1, -1, 94, -1, -1, -1, -1, 3960 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3961 109, -1, 111, -1, -1, -1, -1, -1, -1, 118, 3962 119, 120, 121, 122, 123, 3, 4, 5, 6, 7, 3963 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3964 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3965 -1, -1, 30, 31, 32, -1, -1, -1, -1, -1, 3966 -1, 39, -1, -1, -1, 10, 11, 12, 13, 14, 3967 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3968 25, 26, 27, -1, -1, 30, 31, 32, -1, 67, 3969 -1, 69, -1, 71, 39, -1, 74, 75, -1, -1, 3970 -1, -1, -1, 10, 11, 12, 13, 14, 15, 16, 3971 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3972 27, -1, 67, 30, 31, 32, -1, 72, -1, 74, 3973 75, 76, 39, -1, -1, -1, 114, -1, 83, 84, 3974 -1, -1, -1, -1, -1, -1, -1, -1, -1, 94, 3975 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3976 67, -1, -1, -1, 109, 72, 111, 74, 75, 76, 3977 -1, -1, -1, 118, 119, -1, 83, 84, -1, -1, 3978 -1, -1, -1, -1, -1, -1, -1, 94, -1, -1, 3979 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3980 -1, -1, 109, -1, 111, -1, -1, -1, -1, -1, 3981 -1, 118, 119, 10, 11, 12, 13, 14, 15, 16, 3982 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3983 27, -1, -1, 30, 31, 32, -1, -1, -1, -1, 3984 -1, -1, 39, 10, 11, 12, 13, 14, 15, 16, 3985 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3986 27, -1, -1, 30, 31, 32, -1, -1, -1, -1, 3987 67, -1, 39, -1, -1, 72, -1, 74, 75, 76, 3988 -1, -1, -1, -1, -1, -1, 83, 84, -1, -1, 3989 -1, -1, -1, -1, -1, -1, -1, 94, -1, -1, 3990 67, -1, -1, -1, -1, 72, -1, 74, 75, 76, 3991 -1, -1, 109, -1, 111, -1, 83, 84, -1, -1, 3992 -1, 118, 119, -1, -1, -1, -1, 94, -1, -1, 3993 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3994 -1, -1, 109, -1, 111, -1, -1, -1, -1, -1, 3995 -1, 118, 119, 10, 11, 12, 13, 14, 15, 16, 3996 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3997 27, -1, -1, 30, 31, 32, -1, -1, -1, -1, 3998 -1, -1, 39, 10, 11, 12, 13, 14, 15, 16, 3999 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 4000 27, -1, -1, 30, 31, 32, -1, -1, -1, -1, 4001 67, -1, 39, -1, -1, 72, -1, 74, 75, 76, 4002 -1, -1, -1, -1, -1, -1, 83, 84, -1, -1, 4003 -1, -1, -1, -1, -1, -1, -1, 94, -1, -1, 4004 67, -1, -1, -1, -1, 72, -1, 74, 75, -1, 4005 -1, -1, -1, -1, 111, -1, 83, 84, -1, -1, 4006 -1, 118, 119, -1, -1, -1, -1, 94, -1, -1, 4007 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4008 -1, -1, -1, -1, 111, -1, -1, -1, -1, -1, 4009 -1, 118, 119, 10, 11, 12, 13, 14, 15, 16, 4010 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 4011 27, 28, -1, 30, 31, 32, -1, -1, -1, -1, 4012 -1, -1, 39, 10, 11, 12, 13, 14, 15, 16, 4013 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 4014 27, -1, -1, 30, 31, 32, -1, -1, -1, -1, 4015 67, -1, 39, 40, -1, -1, -1, 74, 75, -1, 4016 -1, 78, -1, -1, -1, -1, -1, -1, -1, -1, 4017 -1, -1, -1, -1, -1, -1, -1, 94, -1, -1, 4018 67, -1, -1, -1, -1, -1, -1, 74, 75, -1, 4019 -1, -1, 109, -1, 111, -1, -1, -1, -1, -1, 4020 -1, 118, 119, -1, -1, -1, -1, 94, -1, -1, 4021 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4022 -1, -1, -1, -1, 111, -1, -1, -1, 115, -1, 4023 -1, 118, 119, 10, 11, 12, 13, 14, 15, 16, 4024 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 4025 27, 28, -1, 30, 31, 32, -1, -1, -1, -1, 4026 -1, -1, 39, 10, 11, 12, 13, 14, 15, 16, 4027 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 4028 27, -1, -1, 30, 31, 32, -1, -1, -1, -1, 4029 67, -1, 39, 40, -1, -1, -1, 74, 75, -1, 4030 -1, 78, -1, -1, -1, -1, -1, -1, -1, -1, 4031 -1, -1, -1, -1, -1, -1, -1, 94, -1, -1, 4032 67, -1, -1, -1, -1, -1, -1, 74, 75, -1, 4033 -1, -1, -1, -1, 111, -1, -1, -1, -1, -1, 4034 -1, 118, 119, -1, -1, -1, -1, 94, -1, -1, 4035 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4036 -1, -1, -1, -1, 111, -1, -1, -1, 115, -1, 4037 -1, 118, 119, 10, 11, 12, 13, 14, 15, 16, 4038 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 4039 27, -1, -1, 30, 31, 32, -1, -1, -1, -1, 4040 -1, -1, 39, 40, 10, 11, 12, 13, 14, 15, 4041 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 4042 26, 27, -1, -1, 30, 31, 32, -1, -1, -1, 4043 67, -1, -1, 39, -1, -1, -1, 74, 75, -1, 4044 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4045 -1, -1, -1, -1, -1, -1, -1, 94, -1, -1, 4046 -1, 67, -1, -1, -1, -1, -1, -1, 74, 75, 4047 -1, -1, -1, -1, 111, -1, -1, -1, 115, -1, 4048 -1, 118, 119, -1, -1, -1, -1, -1, 94, -1, 4049 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4050 -1, -1, -1, 109, -1, 111, -1, -1, -1, -1, 4051 -1, -1, 118, 119, 10, 11, 12, 13, 14, 15, 4052 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 4053 26, 27, -1, -1, 30, 31, 32, -1, -1, -1, 4054 -1, -1, -1, 39, 10, 11, 12, 13, 14, 15, 4055 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 4056 26, 27, -1, -1, 30, 31, 32, -1, -1, -1, 4057 -1, 67, -1, 39, -1, -1, -1, -1, 74, 75, 4058 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4059 -1, -1, -1, -1, -1, -1, -1, -1, 94, -1, 4060 -1, 67, -1, -1, -1, -1, -1, -1, 74, 75, 4061 -1, -1, -1, -1, -1, 111, -1, -1, -1, -1, 4062 -1, -1, 118, 119, -1, -1, -1, -1, 94, -1, 4063 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4064 -1, -1, -1, -1, -1, 111, -1, -1, -1, -1, 4065 -1, -1, 118, 119, 10, 11, 12, 13, 14, 15, 4066 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 4067 26, 27, -1, -1, 30, 31, 32, -1, -1, -1, 4068 -1, -1, -1, 39, 10, 11, 12, 13, 14, 15, 4069 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 4070 26, 27, -1, -1, 30, 31, 32, -1, -1, -1, 4071 -1, 67, -1, 39, -1, -1, -1, -1, 74, 75, 4072 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4073 -1, -1, -1, -1, -1, -1, -1, -1, 94, -1, 4074 -1, 67, -1, -1, -1, -1, -1, -1, 74, 75, 4075 -1, -1, -1, -1, -1, 111, -1, -1, -1, -1, 4076 -1, -1, 118, 119, -1, -1, -1, -1, 94, -1, 4077 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4078 -1, -1, -1, -1, -1, 111, -1, -1, -1, -1, 4079 -1, -1, 118, 119, 10, 11, 12, 13, 14, 15, 4080 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 4081 26, 27, -1, -1, 30, 31, 32, -1, -1, -1, 4082 -1, -1, -1, 39, 10, 11, 12, 13, 14, 15, 4083 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 4084 26, 27, -1, -1, 30, 31, 32, -1, -1, -1, 4085 -1, 67, -1, 39, -1, -1, -1, -1, 74, 75, 4086 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4087 -1, -1, -1, -1, -1, -1, -1, -1, 94, -1, 4088 -1, 67, -1, -1, -1, -1, -1, -1, 74, 75, 4089 -1, -1, -1, -1, -1, 111, -1, -1, -1, -1, 4090 -1, -1, 118, 119, -1, -1, -1, -1, 94, -1, 4091 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4092 -1, -1, -1, -1, -1, 111, -1, -1, -1, -1, 4093 -1, -1, 118, 119, 10, 11, 12, 13, 14, 15, 4094 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 4095 26, 27, -1, -1, 30, 31, 32, -1, -1, -1, 4096 -1, -1, -1, 39, 10, 11, 12, 13, 14, 15, 4097 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 4098 26, 27, -1, -1, 30, 31, 32, -1, -1, -1, 4099 -1, 67, -1, 39, -1, -1, -1, -1, 74, 75, 4100 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4101 -1, -1, -1, -1, -1, -1, -1, -1, 94, -1, 4102 -1, 67, -1, -1, -1, -1, -1, -1, 74, 75, 4103 -1, -1, -1, -1, -1, 111, -1, -1, -1, -1, 4104 -1, -1, 118, 119, -1, -1, -1, -1, 94, -1, 4105 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4106 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4107 -1, -1, 118, 119, 4, 5, 6, 7, 8, 9, 3952 -1, -1, -1, -1, -1, 67, -1, 69, -1, 71, 3953 -1, -1, 74, 75, 4, 5, 6, 7, 8, 9, 4108 3954 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 4109 3955 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, 4110 3956 30, 31, 32, -1, -1, -1, -1, -1, -1, 39, 4111 -1, 37, 38, -1, 40, 41, -1, 43, -1, -1, 4112 46, 47, 48, 49, 50, 51, 52, 53, -1, -1, 4113 56, 57, -1, -1, -1, 61, 62, 67, 64, 69, 4114 66, 71, -1, -1, 74, 75, 72, -1, -1, -1, 4115 76, -1, -1, 79, 80, 81, 82, 83, 84, -1, 4116 86, 87, -1, -1, -1, -1, -1, -1, 94, -1, 3957 -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3958 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, 3959 -1, 30, 31, 32, 33, 34, 35, 67, -1, 69, 3960 39, 71, -1, -1, 74, 75, -1, -1, -1, -1, 4117 3961 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4118 110, -1, -1, 109, -1, 111, -1, -1, 114, -1, 4119 -1, -1, 118, 119, 120, 121, 122, 123, -1, -1, 4120 -1, -1, 128, -1, 37, 38, 132, 40, 41, -1, 4121 43, -1, -1, 46, 47, 48, 49, 50, 51, 52, 4122 53, -1, -1, -1, 57, -1, -1, -1, 61, 62, 4123 -1, 64, -1, 66, -1, -1, -1, -1, -1, 72, 4124 -1, -1, -1, 76, -1, -1, 79, 80, 81, 82, 4125 83, 84, -1, 86, 87, -1, -1, -1, -1, -1, 4126 -1, 94, -1, -1, -1, -1, -1, -1, -1, -1, 4127 -1, -1, -1, -1, -1, -1, 109, -1, 111, -1, 4128 -1, 114, -1, -1, -1, 118, 119, 120, 121, 122, 4129 123, -1, -1, -1, -1, 128, -1, -1, -1, 132, 4130 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 4131 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 4132 24, 25, 26, 27, -1, -1, 30, 31, 32, -1, 4133 -1, -1, -1, -1, -1, 39, -1, 37, 38, -1, 4134 40, 41, -1, 43, 44, 45, 46, 47, 48, 49, 4135 50, 51, 52, 53, -1, -1, 56, 57, -1, -1, 4136 -1, 61, 62, 67, 64, 69, 66, 71, -1, -1, 4137 74, 75, 72, -1, -1, -1, 76, -1, -1, 79, 4138 80, 81, 82, 83, 84, -1, 86, 87, -1, -1, 4139 -1, -1, 96, -1, 94, -1, -1, -1, -1, -1, 4140 -1, -1, -1, -1, -1, -1, -1, -1, -1, 109, 4141 -1, 111, -1, -1, 114, -1, -1, -1, 118, 119, 4142 120, 121, 122, 123, -1, -1, 37, 38, 128, 40, 4143 41, -1, 43, 44, 45, 46, 47, 48, 49, 50, 4144 51, 52, 53, -1, -1, -1, 57, -1, -1, -1, 4145 61, 62, -1, 64, -1, 66, -1, -1, -1, -1, 4146 -1, 72, -1, -1, -1, 76, -1, -1, 79, 80, 4147 81, 82, 83, 84, -1, 86, 87, -1, -1, -1, 4148 -1, -1, -1, 94, -1, -1, -1, -1, -1, -1, 4149 -1, -1, -1, -1, -1, -1, -1, -1, 109, -1, 4150 111, -1, -1, 114, -1, -1, -1, 118, 119, 120, 4151 121, 122, 123, -1, -1, 37, 38, 128, 40, 41, 4152 -1, 43, -1, -1, 46, 47, 48, 49, 50, 51, 4153 52, 53, -1, -1, -1, 57, -1, -1, -1, 61, 4154 62, -1, 64, -1, 66, -1, -1, -1, -1, -1, 4155 72, -1, -1, -1, 76, -1, -1, 79, 80, 81, 4156 82, 83, 84, -1, 86, 87, -1, -1, -1, -1, 4157 -1, -1, 94, 37, 38, -1, 40, -1, -1, -1, 4158 -1, -1, -1, -1, -1, -1, -1, 109, -1, 111, 4159 -1, -1, 114, -1, -1, -1, 118, 119, 120, 121, 4160 122, 123, 66, -1, -1, -1, 128, -1, 72, -1, 4161 74, 75, 76, -1, -1, 79, 80, 81, 82, 83, 4162 84, -1, 86, 87, -1, -1, -1, -1, -1, -1, 4163 94, 37, 38, -1, 40, -1, -1, -1, -1, -1, 4164 -1, -1, -1, -1, -1, 109, -1, 111, -1, 113, 4165 114, -1, -1, -1, 118, 119, 120, 121, 122, 123, 4166 66, -1, -1, -1, -1, -1, 72, -1, -1, -1, 4167 76, -1, -1, 79, 80, 81, 82, 83, 84, -1, 4168 86, 87, -1, -1, -1, -1, -1, -1, 94, 37, 4169 38, -1, 40, -1, -1, -1, -1, -1, -1, -1, 4170 -1, -1, -1, 109, -1, 111, -1, -1, 37, 38, 4171 -1, 40, 118, 119, 120, 121, 122, 123, 66, -1, 4172 -1, -1, -1, -1, 72, -1, -1, -1, 76, -1, 4173 -1, 79, 80, 81, 82, 83, 84, 66, 86, 87, 4174 -1, -1, -1, 72, -1, -1, 94, 76, -1, -1, 4175 79, 80, 81, 82, 83, 84, -1, 86, 87, -1, 4176 -1, 109, -1, 111, -1, 94, 37, 38, -1, 40, 4177 118, 119, 120, 121, 122, 123, -1, -1, -1, -1, 4178 109, -1, 111, -1, -1, 37, 38, -1, 40, 118, 4179 119, 120, 121, 122, 123, 66, -1, -1, -1, -1, 4180 -1, 72, -1, -1, -1, 76, -1, -1, 79, 80, 4181 81, 82, 83, 84, 66, 86, 87, -1, -1, -1, 4182 72, -1, -1, 94, 76, -1, -1, 79, 80, 81, 4183 82, 83, 84, -1, 86, 87, -1, -1, 109, -1, 4184 -1, -1, 94, -1, -1, -1, -1, 118, 119, 120, 4185 121, 122, 123, -1, -1, -1, -1, 109, -1, -1, 4186 -1, -1, -1, -1, -1, -1, 118, 119, 120, 121, 4187 122, 123, 4, 5, 6, 7, 8, 9, 10, 11, 4188 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 4189 22, 23, 24, 25, 26, 27, -1, -1, -1, -1, 4190 -1, -1, -1, -1, -1, -1, -1, 39, -1, -1, 4191 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4192 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4193 -1, -1, -1, -1, -1, 67, -1, 69, -1, 71, 4194 72, -1, 74, 75, 76, -1, -1, -1, -1, -1, 4195 -1, 83, 84, 3, 4, 5, 6, 7, 8, 9, 4196 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 4197 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, 4198 30, 31, 32, -1, -1, -1, -1, -1, -1, 39, 4199 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4200 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4201 -1, -1, -1, -1, -1, -1, -1, 67, -1, 69, 4202 -1, 71, -1, -1, 74, 75, 3, 4, 5, 6, 4203 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 4204 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 4205 27, -1, -1, 30, 31, 32, -1, -1, -1, -1, 4206 -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, 4207 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4208 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4209 67, -1, 69, -1, 71, -1, -1, 74, 75, 4, 4210 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 4211 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 4212 25, 26, 27, -1, -1, 30, 31, 32, -1, -1, 4213 -1, -1, -1, -1, 39, -1, -1, -1, -1, -1, 4214 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4215 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4216 -1, -1, 67, -1, 69, -1, 71, -1, -1, 74, 4217 75 3962 -1, -1, -1, -1, -1, -1, -1, -1, 67, -1, 3963 -1, -1, -1, -1, -1, 74, 75 4218 3964 }; 4219 3965 … … 4226 3972 22, 23, 24, 25, 26, 27, 30, 31, 32, 33, 4227 3973 36, 39, 40, 64, 67, 69, 71, 72, 74, 75, 4228 76, 83, 84, 94, 109, 111, 118, 119, 137, 140, 4229 149, 198, 212, 213, 214, 215, 216, 217, 218, 219, 4230 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 4231 231, 232, 233, 234, 235, 236, 237, 238, 240, 241, 4232 242, 243, 244, 245, 247, 255, 256, 283, 284, 285, 4233 293, 296, 302, 303, 305, 307, 308, 314, 319, 323, 4234 324, 325, 326, 327, 328, 329, 330, 350, 367, 368, 4235 369, 370, 72, 139, 140, 149, 215, 217, 225, 227, 4236 237, 241, 243, 284, 82, 109, 312, 313, 314, 312, 4237 312, 72, 74, 75, 76, 138, 139, 273, 274, 294, 4238 295, 74, 75, 274, 109, 305, 11, 199, 109, 149, 4239 319, 324, 325, 326, 328, 329, 330, 112, 134, 111, 4240 218, 225, 227, 323, 327, 366, 367, 370, 371, 135, 4241 107, 131, 277, 114, 135, 173, 74, 75, 137, 272, 4242 135, 135, 135, 116, 135, 74, 75, 109, 149, 309, 4243 318, 319, 320, 321, 322, 323, 327, 331, 332, 333, 4244 334, 335, 341, 3, 28, 78, 239, 3, 5, 74, 4245 111, 149, 217, 228, 232, 235, 244, 285, 323, 327, 4246 370, 215, 217, 227, 237, 241, 243, 284, 323, 327, 4247 33, 233, 233, 228, 235, 135, 233, 228, 233, 228, 4248 75, 109, 114, 274, 285, 114, 274, 233, 228, 116, 4249 135, 135, 0, 134, 109, 173, 312, 312, 134, 111, 4250 225, 227, 368, 272, 272, 131, 227, 109, 149, 309, 4251 319, 323, 111, 149, 370, 306, 230, 314, 109, 290, 4252 109, 109, 51, 109, 37, 38, 40, 66, 72, 76, 4253 79, 80, 81, 82, 86, 87, 109, 111, 120, 121, 4254 122, 123, 136, 140, 141, 142, 143, 148, 149, 150, 4255 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 4256 161, 162, 164, 166, 225, 276, 292, 366, 371, 227, 4257 110, 110, 110, 110, 110, 110, 110, 74, 75, 111, 4258 225, 272, 350, 368, 111, 118, 149, 164, 217, 218, 4259 224, 227, 231, 232, 237, 240, 241, 243, 262, 263, 4260 267, 268, 269, 270, 284, 350, 362, 363, 364, 365, 4261 370, 371, 112, 109, 323, 327, 370, 109, 116, 132, 4262 111, 114, 149, 164, 278, 278, 115, 134, 116, 132, 4263 109, 116, 132, 116, 132, 116, 132, 312, 132, 319, 4264 320, 321, 322, 332, 333, 334, 335, 227, 318, 331, 4265 64, 311, 111, 312, 349, 350, 312, 312, 173, 134, 4266 109, 312, 349, 312, 312, 227, 309, 109, 109, 226, 4267 227, 225, 227, 112, 134, 225, 366, 371, 173, 134, 4268 272, 277, 217, 232, 323, 327, 173, 134, 294, 227, 4269 237, 132, 227, 227, 292, 248, 246, 258, 274, 257, 4270 227, 294, 132, 132, 305, 134, 139, 271, 3, 135, 4271 207, 208, 222, 224, 227, 134, 311, 109, 311, 164, 4272 319, 227, 109, 134, 272, 114, 33, 34, 35, 225, 4273 286, 287, 289, 134, 129, 131, 291, 134, 228, 234, 4274 235, 272, 315, 316, 317, 109, 141, 109, 148, 109, 4275 148, 151, 109, 148, 109, 109, 148, 148, 111, 164, 4276 169, 173, 225, 275, 366, 370, 112, 134, 82, 85, 4277 86, 87, 109, 111, 113, 114, 97, 98, 99, 100, 4278 101, 102, 103, 104, 105, 106, 131, 168, 151, 151, 4279 118, 124, 125, 120, 121, 88, 89, 90, 91, 126, 4280 127, 92, 93, 119, 128, 129, 94, 95, 130, 131, 4281 373, 109, 149, 345, 346, 347, 348, 349, 110, 116, 4282 109, 349, 350, 109, 349, 350, 134, 109, 225, 368, 4283 112, 134, 135, 111, 225, 227, 361, 362, 370, 371, 4284 135, 109, 111, 149, 319, 336, 337, 338, 339, 340, 4285 341, 342, 343, 344, 350, 351, 352, 353, 354, 355, 4286 356, 149, 370, 227, 135, 135, 149, 225, 227, 363, 4287 272, 225, 350, 363, 272, 109, 134, 134, 134, 112, 4288 134, 72, 80, 111, 113, 140, 274, 278, 279, 280, 4289 281, 282, 134, 134, 134, 134, 134, 134, 309, 110, 4290 110, 110, 110, 110, 110, 110, 318, 331, 109, 277, 4291 112, 207, 134, 309, 169, 276, 169, 276, 309, 111, 4292 207, 311, 173, 134, 207, 110, 40, 111, 115, 225, 4293 249, 250, 251, 366, 114, 116, 372, 131, 259, 114, 4294 227, 264, 265, 266, 269, 270, 110, 116, 173, 134, 4295 118, 164, 134, 224, 227, 263, 362, 370, 303, 304, 4296 109, 149, 336, 110, 116, 373, 274, 286, 109, 114, 4297 274, 276, 286, 110, 116, 109, 141, 110, 117, 275, 4298 275, 275, 111, 139, 145, 164, 276, 275, 112, 134, 4299 110, 116, 110, 109, 149, 349, 357, 358, 359, 360, 4300 110, 116, 164, 111, 139, 111, 144, 145, 134, 111, 4301 139, 144, 164, 164, 151, 151, 151, 152, 152, 153, 4302 153, 154, 154, 154, 154, 155, 155, 156, 157, 158, 4303 159, 160, 117, 169, 164, 134, 346, 347, 348, 227, 4304 345, 312, 312, 164, 276, 134, 271, 134, 225, 350, 4305 363, 227, 231, 112, 112, 134, 370, 112, 109, 134, 4306 319, 337, 338, 339, 342, 352, 353, 354, 112, 134, 4307 227, 336, 340, 351, 109, 312, 355, 373, 312, 312, 4308 373, 109, 312, 355, 312, 312, 312, 312, 350, 225, 4309 361, 371, 272, 112, 116, 112, 116, 373, 225, 363, 4310 373, 260, 261, 262, 263, 260, 260, 272, 164, 134, 4311 111, 274, 117, 116, 372, 278, 80, 111, 117, 282, 4312 29, 209, 210, 272, 260, 139, 309, 139, 311, 109, 4313 349, 350, 109, 349, 350, 141, 350, 173, 264, 110, 4314 110, 110, 110, 112, 173, 207, 173, 114, 250, 251, 4315 112, 134, 109, 117, 149, 252, 254, 318, 319, 331, 4316 357, 116, 132, 116, 132, 274, 248, 274, 115, 162, 4317 163, 258, 135, 135, 139, 222, 135, 135, 260, 109, 4318 149, 370, 135, 115, 227, 287, 288, 135, 134, 134, 4319 109, 135, 110, 316, 169, 170, 117, 132, 111, 141, 4320 200, 201, 202, 110, 116, 110, 134, 117, 110, 110, 4321 110, 111, 164, 358, 359, 360, 227, 357, 312, 312, 4322 114, 151, 166, 164, 165, 167, 116, 135, 134, 134, 4323 110, 116, 164, 134, 115, 162, 117, 264, 110, 110, 4324 110, 345, 264, 110, 260, 225, 363, 111, 118, 149, 3974 76, 83, 84, 109, 111, 117, 118, 137, 140, 149, 3975 198, 212, 213, 214, 215, 216, 217, 218, 219, 220, 3976 221, 222, 223, 224, 225, 226, 227, 228, 229, 231, 3977 232, 233, 234, 235, 236, 237, 238, 240, 241, 242, 3978 243, 244, 245, 247, 255, 256, 283, 284, 285, 293, 3979 296, 302, 303, 305, 307, 308, 314, 319, 323, 324, 3980 325, 326, 327, 328, 329, 330, 350, 367, 368, 369, 3981 370, 72, 139, 140, 149, 215, 217, 225, 227, 237, 3982 241, 243, 284, 82, 109, 312, 313, 314, 312, 312, 3983 72, 74, 75, 76, 138, 139, 273, 274, 294, 295, 3984 74, 75, 274, 109, 305, 11, 199, 109, 149, 319, 3985 324, 325, 326, 328, 329, 330, 112, 134, 111, 218, 3986 225, 227, 323, 327, 366, 367, 370, 371, 135, 107, 3987 131, 277, 114, 135, 173, 74, 75, 137, 272, 135, 3988 135, 135, 116, 135, 74, 75, 109, 149, 309, 318, 3989 319, 320, 321, 322, 323, 327, 331, 332, 333, 334, 3990 335, 341, 3, 28, 78, 239, 3, 5, 74, 111, 3991 149, 217, 228, 232, 235, 244, 285, 323, 327, 370, 3992 215, 217, 227, 237, 241, 243, 284, 323, 327, 33, 3993 233, 233, 228, 235, 135, 233, 228, 233, 228, 75, 3994 109, 114, 274, 285, 114, 274, 233, 228, 116, 135, 3995 135, 0, 134, 109, 173, 312, 312, 134, 111, 225, 3996 227, 368, 272, 272, 131, 227, 109, 149, 309, 319, 3997 323, 111, 149, 370, 306, 230, 314, 109, 290, 109, 3998 109, 51, 109, 37, 38, 40, 66, 72, 76, 79, 3999 80, 81, 82, 86, 87, 109, 111, 119, 120, 121, 4000 122, 136, 140, 141, 142, 143, 148, 149, 150, 151, 4001 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 4002 162, 164, 167, 225, 276, 292, 366, 371, 227, 110, 4003 110, 110, 110, 110, 110, 110, 74, 75, 111, 225, 4004 272, 350, 368, 111, 117, 149, 164, 217, 218, 224, 4005 227, 231, 232, 237, 240, 241, 243, 262, 263, 267, 4006 268, 269, 270, 284, 350, 362, 363, 364, 365, 370, 4007 371, 112, 109, 323, 327, 370, 109, 116, 132, 111, 4008 114, 149, 164, 278, 278, 115, 134, 116, 132, 109, 4009 116, 132, 116, 132, 116, 132, 312, 132, 319, 320, 4010 321, 322, 332, 333, 334, 335, 227, 318, 331, 64, 4011 311, 111, 312, 349, 350, 312, 312, 173, 134, 109, 4012 312, 349, 312, 312, 227, 309, 109, 109, 226, 227, 4013 225, 227, 112, 134, 225, 366, 371, 173, 134, 272, 4014 277, 217, 232, 323, 327, 173, 134, 294, 227, 237, 4015 132, 227, 227, 292, 248, 246, 258, 274, 257, 227, 4016 294, 132, 132, 305, 134, 139, 271, 3, 135, 207, 4017 208, 222, 224, 227, 134, 311, 109, 311, 164, 319, 4018 227, 109, 134, 272, 114, 33, 34, 35, 225, 286, 4019 287, 289, 134, 128, 131, 291, 134, 228, 234, 235, 4020 272, 315, 316, 317, 109, 141, 109, 148, 109, 148, 4021 151, 109, 148, 109, 109, 148, 148, 111, 164, 169, 4022 173, 225, 275, 366, 370, 112, 134, 82, 85, 86, 4023 87, 109, 111, 113, 114, 97, 98, 99, 100, 101, 4024 102, 103, 104, 105, 106, 131, 166, 151, 151, 117, 4025 123, 124, 119, 120, 88, 89, 90, 91, 125, 126, 4026 92, 93, 118, 127, 128, 94, 95, 129, 131, 373, 4027 109, 149, 345, 346, 347, 348, 349, 110, 116, 109, 4028 349, 350, 109, 349, 350, 134, 109, 225, 368, 112, 4029 134, 135, 111, 225, 227, 361, 362, 370, 371, 135, 4030 109, 111, 149, 319, 336, 337, 338, 339, 340, 341, 4031 342, 343, 344, 350, 351, 352, 353, 354, 355, 356, 4032 149, 370, 227, 135, 135, 149, 225, 227, 363, 272, 4033 225, 350, 363, 272, 109, 134, 134, 134, 112, 134, 4034 72, 111, 113, 140, 274, 278, 279, 280, 281, 282, 4035 134, 134, 134, 134, 134, 134, 309, 110, 110, 110, 4036 110, 110, 110, 110, 318, 331, 109, 277, 112, 207, 4037 134, 309, 169, 276, 169, 276, 309, 111, 207, 311, 4038 173, 134, 207, 110, 40, 111, 115, 225, 249, 250, 4039 251, 366, 114, 116, 372, 131, 259, 114, 227, 264, 4040 265, 266, 269, 270, 110, 116, 173, 134, 117, 164, 4041 134, 224, 227, 263, 362, 370, 303, 304, 109, 149, 4042 336, 110, 116, 373, 274, 286, 109, 114, 274, 276, 4043 286, 110, 116, 109, 141, 110, 130, 275, 275, 275, 4044 145, 164, 276, 275, 112, 134, 110, 116, 110, 109, 4045 149, 349, 357, 358, 359, 360, 110, 116, 164, 111, 4046 139, 144, 145, 134, 111, 139, 144, 164, 151, 151, 4047 151, 152, 152, 153, 153, 154, 154, 154, 154, 155, 4048 155, 156, 157, 158, 159, 160, 130, 169, 164, 134, 4049 346, 347, 348, 227, 345, 312, 312, 164, 276, 134, 4050 271, 134, 225, 350, 363, 227, 231, 112, 112, 134, 4051 370, 112, 109, 134, 319, 337, 338, 339, 342, 352, 4052 353, 354, 112, 134, 227, 336, 340, 351, 109, 312, 4053 355, 373, 312, 312, 373, 109, 312, 355, 312, 312, 4054 312, 312, 350, 225, 361, 371, 272, 112, 116, 112, 4055 116, 373, 225, 363, 373, 260, 261, 262, 263, 260, 4056 260, 272, 164, 134, 111, 274, 130, 116, 372, 278, 4057 111, 130, 282, 29, 209, 210, 272, 260, 139, 309, 4058 139, 311, 109, 349, 350, 109, 349, 350, 141, 350, 4059 173, 264, 110, 110, 110, 110, 112, 173, 207, 173, 4060 114, 250, 251, 112, 134, 109, 130, 149, 252, 254, 4061 318, 319, 331, 357, 116, 132, 116, 132, 274, 248, 4062 274, 115, 162, 163, 258, 135, 135, 139, 222, 135, 4063 135, 260, 109, 149, 370, 135, 115, 227, 287, 288, 4064 135, 134, 134, 109, 135, 110, 316, 169, 170, 130, 4065 132, 111, 141, 200, 201, 202, 110, 116, 110, 110, 4066 110, 110, 111, 164, 358, 359, 360, 227, 357, 312, 4067 312, 114, 151, 167, 164, 165, 168, 116, 135, 134, 4068 110, 116, 164, 134, 115, 162, 130, 264, 110, 110, 4069 110, 345, 264, 110, 260, 225, 363, 111, 117, 149, 4325 4070 164, 164, 227, 342, 264, 110, 110, 110, 110, 110, 4326 4071 110, 110, 7, 227, 336, 340, 351, 134, 134, 373, … … 4328 4073 163, 164, 310, 134, 278, 280, 115, 134, 211, 274, 4329 4074 40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 4330 53, 57, 61, 62, 72, 111, 12 8, 170, 171, 172,4075 53, 57, 61, 62, 72, 111, 127, 170, 171, 172, 4331 4076 173, 174, 175, 177, 178, 190, 192, 193, 198, 212, 4332 4077 308, 29, 135, 131, 277, 134, 134, 110, 135, 173, … … 4334 4079 312, 115, 259, 372, 110, 116, 112, 112, 135, 227, 4335 4080 116, 373, 290, 110, 286, 215, 217, 225, 298, 299, 4336 300, 301, 292, 110, 110, 117, 163, 109, 110, 117, 4337 116, 139, 164, 164, 112, 110, 110, 110, 357, 279, 4338 116, 135, 167, 112, 139, 146, 147, 164, 145, 135, 4339 146, 162, 166, 135, 109, 349, 350, 135, 135, 134, 4340 135, 135, 135, 164, 110, 135, 109, 349, 350, 109, 4341 355, 109, 355, 350, 226, 7, 118, 135, 164, 264, 4342 264, 263, 267, 267, 268, 116, 116, 110, 110, 112, 4343 96, 123, 135, 135, 146, 278, 164, 116, 132, 212, 4344 216, 227, 231, 109, 109, 171, 109, 109, 72, 132, 4345 72, 132, 72, 118, 170, 109, 173, 165, 165, 117, 4346 112, 143, 132, 135, 134, 135, 211, 110, 164, 264, 4347 264, 312, 110, 115, 252, 115, 134, 110, 134, 135, 4348 309, 115, 134, 135, 135, 110, 114, 200, 112, 163, 4349 132, 200, 202, 110, 116, 135, 109, 349, 350, 372, 4350 165, 112, 135, 85, 113, 116, 135, 135, 112, 135, 4351 110, 134, 110, 110, 112, 112, 112, 135, 110, 134, 4352 134, 134, 164, 164, 135, 112, 135, 135, 135, 135, 4353 134, 134, 163, 163, 112, 112, 135, 135, 274, 227, 4354 169, 169, 47, 169, 134, 132, 132, 132, 169, 132, 4355 169, 58, 59, 60, 194, 195, 196, 132, 63, 132, 4356 312, 114, 175, 115, 132, 135, 135, 96, 269, 270, 4357 110, 299, 116, 132, 116, 132, 115, 297, 117, 141, 4358 110, 110, 117, 167, 112, 134, 115, 112, 111, 147, 4359 111, 147, 147, 112, 112, 112, 264, 112, 264, 264, 4360 264, 135, 135, 112, 112, 110, 110, 112, 116, 96, 4361 263, 96, 135, 112, 112, 110, 110, 109, 110, 170, 4362 191, 212, 132, 110, 109, 109, 173, 196, 58, 59, 4363 164, 171, 144, 110, 110, 114, 134, 134, 298, 141, 4364 203, 109, 132, 203, 135, 117, 264, 134, 134, 135, 4365 135, 135, 135, 112, 112, 134, 135, 112, 171, 44, 4366 45, 114, 181, 182, 183, 169, 171, 135, 110, 170, 4367 114, 183, 96, 134, 96, 134, 109, 109, 132, 115, 4368 134, 272, 309, 115, 116, 117, 163, 110, 112, 164, 4369 135, 146, 146, 110, 110, 110, 110, 267, 42, 163, 4370 179, 180, 310, 117, 134, 171, 181, 110, 132, 171, 4371 132, 134, 110, 134, 110, 134, 96, 134, 96, 134, 4372 132, 298, 141, 139, 204, 110, 132, 117, 110, 135, 4373 135, 171, 96, 116, 117, 135, 205, 206, 212, 132, 4374 170, 170, 205, 173, 197, 225, 366, 173, 197, 110, 4375 134, 110, 134, 115, 110, 116, 164, 112, 112, 163, 4376 179, 182, 184, 185, 134, 132, 182, 186, 187, 135, 4377 109, 149, 309, 357, 139, 135, 173, 197, 173, 197, 4378 109, 132, 139, 171, 176, 115, 182, 212, 170, 56, 4379 176, 189, 115, 182, 110, 227, 110, 135, 135, 292, 4380 171, 176, 132, 188, 189, 176, 189, 173, 173, 110, 4381 110, 110, 188, 135, 135, 173, 173, 135, 135 4081 300, 301, 292, 110, 110, 130, 163, 109, 110, 130, 4082 116, 139, 112, 110, 110, 110, 357, 279, 116, 135, 4083 168, 112, 139, 146, 147, 145, 135, 146, 162, 167, 4084 135, 109, 349, 350, 135, 135, 134, 135, 135, 135, 4085 164, 110, 135, 109, 349, 350, 109, 355, 109, 355, 4086 350, 226, 7, 117, 135, 164, 264, 264, 263, 267, 4087 267, 268, 116, 116, 110, 110, 112, 96, 122, 135, 4088 135, 146, 278, 164, 116, 132, 212, 216, 227, 231, 4089 109, 109, 171, 109, 109, 72, 132, 72, 132, 72, 4090 117, 170, 109, 173, 165, 165, 130, 112, 143, 132, 4091 135, 134, 135, 211, 110, 164, 264, 264, 312, 110, 4092 115, 252, 115, 134, 110, 134, 135, 309, 115, 134, 4093 135, 135, 110, 114, 200, 112, 163, 132, 200, 202, 4094 110, 109, 349, 350, 372, 165, 112, 135, 85, 113, 4095 116, 135, 112, 135, 110, 134, 110, 110, 112, 112, 4096 112, 135, 110, 134, 134, 134, 164, 164, 135, 112, 4097 135, 135, 135, 135, 134, 134, 163, 163, 112, 112, 4098 135, 135, 274, 227, 169, 169, 47, 169, 134, 132, 4099 132, 132, 169, 132, 169, 58, 59, 60, 194, 195, 4100 196, 132, 63, 132, 312, 114, 175, 115, 132, 135, 4101 135, 96, 269, 270, 110, 299, 116, 132, 116, 132, 4102 115, 297, 130, 141, 110, 110, 130, 134, 115, 112, 4103 111, 147, 111, 147, 147, 112, 112, 264, 112, 264, 4104 264, 264, 135, 135, 112, 112, 110, 110, 112, 116, 4105 96, 263, 96, 135, 112, 112, 110, 110, 109, 110, 4106 170, 191, 212, 132, 110, 109, 109, 173, 196, 58, 4107 59, 164, 171, 144, 110, 110, 114, 134, 134, 298, 4108 141, 203, 109, 132, 203, 264, 134, 134, 135, 135, 4109 135, 135, 112, 112, 134, 135, 112, 171, 44, 45, 4110 114, 181, 182, 183, 169, 171, 135, 110, 170, 114, 4111 183, 96, 134, 96, 134, 109, 109, 132, 115, 134, 4112 272, 309, 115, 116, 130, 163, 110, 135, 146, 146, 4113 110, 110, 110, 110, 267, 42, 163, 179, 180, 310, 4114 130, 134, 171, 181, 110, 132, 171, 132, 134, 110, 4115 134, 110, 134, 96, 134, 96, 134, 132, 298, 141, 4116 139, 204, 110, 132, 110, 135, 135, 171, 96, 116, 4117 130, 135, 205, 206, 212, 132, 170, 170, 205, 173, 4118 197, 225, 366, 173, 197, 110, 134, 110, 134, 115, 4119 110, 116, 112, 112, 163, 179, 182, 184, 185, 134, 4120 132, 182, 186, 187, 135, 109, 149, 309, 357, 139, 4121 135, 173, 197, 173, 197, 109, 132, 139, 171, 176, 4122 115, 182, 212, 170, 56, 176, 189, 115, 182, 110, 4123 227, 110, 135, 135, 292, 171, 176, 132, 188, 189, 4124 176, 189, 173, 173, 110, 110, 110, 188, 135, 135, 4125 173, 173, 135, 135 4382 4126 }; 4383 4127 … … 5216 4960 5217 4961 /* Line 1806 of yacc.c */ 5218 #line 29 0"parser.yy"4962 #line 298 "parser.yy" 5219 4963 { 5220 4964 typedefTable.enterScope(); … … 5225 4969 5226 4970 /* Line 1806 of yacc.c */ 5227 #line 296"parser.yy"4971 #line 304 "parser.yy" 5228 4972 { 5229 4973 typedefTable.leaveScope(); … … 5234 4978 5235 4979 /* Line 1806 of yacc.c */ 5236 #line 3 05"parser.yy"5237 { (yyval. constant) = makeConstant( ConstantNode::Integer, (yyvsp[(1) - (1)].tok) ); }4980 #line 313 "parser.yy" 4981 { (yyval.en) = new ExpressionNode( build_constantInteger( *(yyvsp[(1) - (1)].tok) ) ); } 5238 4982 break; 5239 4983 … … 5241 4985 5242 4986 /* Line 1806 of yacc.c */ 5243 #line 3 06"parser.yy"5244 { (yyval. constant) = makeConstant( ConstantNode::Float, (yyvsp[(1) - (1)].tok) ); }4987 #line 314 "parser.yy" 4988 { (yyval.en) = new ExpressionNode( build_constantFloat( *(yyvsp[(1) - (1)].tok) ) ); } 5245 4989 break; 5246 4990 … … 5248 4992 5249 4993 /* Line 1806 of yacc.c */ 5250 #line 3 07"parser.yy"5251 { (yyval. constant) = makeConstant( ConstantNode::Character, (yyvsp[(1) - (1)].tok) ); }4994 #line 315 "parser.yy" 4995 { (yyval.en) = new ExpressionNode( build_constantChar( *(yyvsp[(1) - (1)].tok) ) ); } 5252 4996 break; 5253 4997 … … 5255 4999 5256 5000 /* Line 1806 of yacc.c */ 5257 #line 3 32"parser.yy"5258 { (yyval.constant) = makeConstantStr( ConstantNode::String,(yyvsp[(1) - (1)].tok) ); }5001 #line 340 "parser.yy" 5002 { (yyval.constant) = build_constantStr( *(yyvsp[(1) - (1)].tok) ); } 5259 5003 break; 5260 5004 … … 5262 5006 5263 5007 /* Line 1806 of yacc.c */ 5264 #line 333 "parser.yy" 5265 { (yyval.constant) = (yyvsp[(1) - (2)].constant)->appendstr( (yyvsp[(2) - (2)].tok) ); } 5008 #line 342 "parser.yy" 5009 { 5010 appendStr( (yyvsp[(1) - (2)].constant)->get_constant()->get_value(), (yyvsp[(2) - (2)].tok) ); 5011 delete (yyvsp[(2) - (2)].tok); // allocated by lexer 5012 (yyval.constant) = (yyvsp[(1) - (2)].constant); 5013 } 5266 5014 break; 5267 5015 … … 5269 5017 5270 5018 /* Line 1806 of yacc.c */ 5271 #line 3 40"parser.yy"5272 { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }5019 #line 353 "parser.yy" 5020 { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); } 5273 5021 break; 5274 5022 … … 5276 5024 5277 5025 /* Line 1806 of yacc.c */ 5278 #line 3 42"parser.yy"5279 { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }5026 #line 355 "parser.yy" 5027 { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); } 5280 5028 break; 5281 5029 … … 5283 5031 5284 5032 /* Line 1806 of yacc.c */ 5285 #line 3 44"parser.yy"5033 #line 357 "parser.yy" 5286 5034 { (yyval.en) = (yyvsp[(2) - (3)].en); } 5287 5035 break; … … 5290 5038 5291 5039 /* Line 1806 of yacc.c */ 5292 #line 3 46"parser.yy"5293 { (yyval.en) = new ValofExprNode( (yyvsp[(2) - (3)].sn) ); }5040 #line 359 "parser.yy" 5041 { (yyval.en) = new ExpressionNode( build_valexpr( (yyvsp[(2) - (3)].sn) ) ); } 5294 5042 break; 5295 5043 … … 5297 5045 5298 5046 /* Line 1806 of yacc.c */ 5299 #line 3 56"parser.yy"5300 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Index ), (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ); }5047 #line 369 "parser.yy" 5048 { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Index, (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ) ); } 5301 5049 break; 5302 5050 … … 5304 5052 5305 5053 /* Line 1806 of yacc.c */ 5306 #line 3 58"parser.yy"5307 { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ); }5054 #line 371 "parser.yy" 5055 { (yyval.en) = new ExpressionNode( build_func( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ) ); } 5308 5056 break; 5309 5057 … … 5311 5059 5312 5060 /* Line 1806 of yacc.c */ 5313 #line 3 62"parser.yy"5314 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }5061 #line 375 "parser.yy" 5062 { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); } 5315 5063 break; 5316 5064 … … 5318 5066 5319 5067 /* Line 1806 of yacc.c */ 5320 #line 3 65"parser.yy"5321 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }5068 #line 378 "parser.yy" 5069 { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); } 5322 5070 break; 5323 5071 … … 5325 5073 5326 5074 /* Line 1806 of yacc.c */ 5327 #line 3 68"parser.yy"5328 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::IncrPost ), (yyvsp[(1) - (2)].en) ); }5075 #line 381 "parser.yy" 5076 { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::IncrPost, (yyvsp[(1) - (2)].en) ) ); } 5329 5077 break; 5330 5078 … … 5332 5080 5333 5081 /* Line 1806 of yacc.c */ 5334 #line 3 70"parser.yy"5335 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), (yyvsp[(1) - (2)].en) ); }5082 #line 383 "parser.yy" 5083 { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::DecrPost, (yyvsp[(1) - (2)].en) ) ); } 5336 5084 break; 5337 5085 … … 5339 5087 5340 5088 /* Line 1806 of yacc.c */ 5341 #line 3 72"parser.yy"5342 { (yyval.en) = new CompoundLiteralNode( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true) ); }5089 #line 385 "parser.yy" 5090 { (yyval.en) = new ExpressionNode( build_compoundLiteral( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ) ); } 5343 5091 break; 5344 5092 … … 5346 5094 5347 5095 /* Line 1806 of yacc.c */ 5348 #line 3 74"parser.yy"5096 #line 387 "parser.yy" 5349 5097 { 5350 Token fn; fn.str = new std::string( "?{}" ); // location undefined 5351 (yyval.en) = new CompositeExprNode( new VarRefNode( fn ), (ExpressionNode *)( (yyvsp[(1) - (4)].en) )->set_link( (yyvsp[(3) - (4)].en) ) ); 5098 Token fn; 5099 fn.str = new std::string( "?{}" ); // location undefined 5100 (yyval.en) = new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( (yyvsp[(1) - (4)].en) )->set_last( (yyvsp[(3) - (4)].en) ) ) ); 5352 5101 } 5353 5102 break; … … 5356 5105 5357 5106 /* Line 1806 of yacc.c */ 5358 #line 3 83"parser.yy"5359 { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_l ink( (yyvsp[(3) - (3)].en) )); }5107 #line 397 "parser.yy" 5108 { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); } 5360 5109 break; 5361 5110 … … 5363 5112 5364 5113 /* Line 1806 of yacc.c */ 5365 #line 388"parser.yy"5114 #line 402 "parser.yy" 5366 5115 { (yyval.en) = 0; } 5367 5116 break; 5368 5117 5369 case 37:5370 5371 /* Line 1806 of yacc.c */5372 #line 391 "parser.yy"5373 { (yyval.en) = (yyvsp[(3) - (3)].en)->set_argName( (yyvsp[(1) - (3)].tok) ); }5374 break;5375 5376 5118 case 38: 5377 5119 5378 5120 /* Line 1806 of yacc.c */ 5379 #line 396"parser.yy"5380 { (yyval.en) = ( yyvsp[(7) - (7)].en)->set_argName( (yyvsp[(3) - (7)].en) ); }5121 #line 408 "parser.yy" 5122 { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); } 5381 5123 break; 5382 5124 … … 5384 5126 5385 5127 /* Line 1806 of yacc.c */ 5386 #line 398 "parser.yy" 5387 { (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) )))); } 5128 #line 413 "parser.yy" 5129 { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); } 5130 break; 5131 5132 case 40: 5133 5134 /* Line 1806 of yacc.c */ 5135 #line 417 "parser.yy" 5136 { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(3) - (3)].en), build_varref( (yyvsp[(1) - (3)].tok) ) ) ); } 5388 5137 break; 5389 5138 … … 5391 5140 5392 5141 /* Line 1806 of yacc.c */ 5393 #line 4 03"parser.yy"5394 { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }5142 #line 419 "parser.yy" 5143 { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(5) - (7)].en), build_varref( (yyvsp[(1) - (7)].tok) ) ) ); } 5395 5144 break; 5396 5145 … … 5398 5147 5399 5148 /* Line 1806 of yacc.c */ 5400 #line 4 08"parser.yy"5401 { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }5149 #line 421 "parser.yy" 5150 { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(3) - (3)].en), build_varref( (yyvsp[(1) - (3)].tok) ) ) ); } 5402 5151 break; 5403 5152 … … 5405 5154 5406 5155 /* Line 1806 of yacc.c */ 5407 #line 412 "parser.yy" 5408 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); } 5409 break; 5410 5411 case 44: 5412 5413 /* Line 1806 of yacc.c */ 5414 #line 414 "parser.yy" 5415 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); } 5156 #line 423 "parser.yy" 5157 { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(5) - (7)].en), build_varref( (yyvsp[(1) - (7)].tok) ) ) ); } 5416 5158 break; 5417 5159 … … 5419 5161 5420 5162 /* Line 1806 of yacc.c */ 5421 #line 4 16"parser.yy"5422 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en)); }5163 #line 431 "parser.yy" 5164 { (yyval.en) = (yyvsp[(1) - (1)].en); } 5423 5165 break; 5424 5166 … … 5426 5168 5427 5169 /* Line 1806 of yacc.c */ 5428 #line 418 "parser.yy" 5429 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); } 5170 #line 433 "parser.yy" 5171 { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); } 5172 break; 5173 5174 case 47: 5175 5176 /* Line 1806 of yacc.c */ 5177 #line 435 "parser.yy" 5178 { (yyval.en) = (yyvsp[(2) - (2)].en)->set_extension( true ); } 5430 5179 break; 5431 5180 … … 5433 5182 5434 5183 /* Line 1806 of yacc.c */ 5435 #line 426 "parser.yy" 5436 { (yyval.en) = (yyvsp[(1) - (1)].constant); } 5184 #line 440 "parser.yy" 5185 { 5186 switch ( (yyvsp[(1) - (2)].op) ) { 5187 case OperKinds::AddressOf: 5188 (yyval.en) = new ExpressionNode( build_addressOf( (yyvsp[(2) - (2)].en) ) ); 5189 break; 5190 case OperKinds::PointTo: 5191 (yyval.en) = new ExpressionNode( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) ); 5192 break; 5193 default: 5194 assert( false ); 5195 } 5196 } 5437 5197 break; 5438 5198 … … 5440 5200 5441 5201 /* Line 1806 of yacc.c */ 5442 #line 4 28"parser.yy"5443 { (yyval.en) = (yyvsp[(1) - (1)].constant); }5202 #line 453 "parser.yy" 5203 { (yyval.en) = new ExpressionNode( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) ); } 5444 5204 break; 5445 5205 … … 5447 5207 5448 5208 /* Line 1806 of yacc.c */ 5449 #line 4 30"parser.yy"5450 { (yyval.en) = (yyvsp[(2) - (2)].en)->set_extension( true); }5209 #line 455 "parser.yy" 5210 { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Incr, (yyvsp[(2) - (2)].en) ) ); } 5451 5211 break; 5452 5212 … … 5454 5214 5455 5215 /* Line 1806 of yacc.c */ 5456 #line 4 32"parser.yy"5457 { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }5216 #line 457 "parser.yy" 5217 { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Decr, (yyvsp[(2) - (2)].en) ) ); } 5458 5218 break; 5459 5219 … … 5461 5221 5462 5222 /* Line 1806 of yacc.c */ 5463 #line 4 37"parser.yy"5464 { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }5223 #line 459 "parser.yy" 5224 { (yyval.en) = new ExpressionNode( build_sizeOfexpr( (yyvsp[(2) - (2)].en) ) ); } 5465 5225 break; 5466 5226 … … 5468 5228 5469 5229 /* Line 1806 of yacc.c */ 5470 #line 4 39"parser.yy"5471 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Incr ), (yyvsp[(2) - (2)].en) ); }5230 #line 461 "parser.yy" 5231 { (yyval.en) = new ExpressionNode( build_sizeOftype( (yyvsp[(3) - (4)].decl) ) ); } 5472 5232 break; 5473 5233 … … 5475 5235 5476 5236 /* Line 1806 of yacc.c */ 5477 #line 4 41"parser.yy"5478 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), (yyvsp[(2) - (2)].en) ); }5237 #line 463 "parser.yy" 5238 { (yyval.en) = new ExpressionNode( build_alignOfexpr( (yyvsp[(2) - (2)].en) ) ); } 5479 5239 break; 5480 5240 … … 5482 5242 5483 5243 /* Line 1806 of yacc.c */ 5484 #line 4 43"parser.yy"5485 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), (yyvsp[(2) - (2)].en) ); }5244 #line 465 "parser.yy" 5245 { (yyval.en) = new ExpressionNode( build_alignOftype( (yyvsp[(3) - (4)].decl) ) ); } 5486 5246 break; 5487 5247 … … 5489 5249 5490 5250 /* Line 1806 of yacc.c */ 5491 #line 4 45"parser.yy"5492 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }5251 #line 467 "parser.yy" 5252 { (yyval.en) = new ExpressionNode( build_offsetOf( (yyvsp[(3) - (6)].decl), build_varref( (yyvsp[(5) - (6)].tok) ) ) ); } 5493 5253 break; 5494 5254 … … 5496 5256 5497 5257 /* Line 1806 of yacc.c */ 5498 #line 4 47"parser.yy"5499 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( (yyvsp[(3) - (6)].decl) ), new VarRefNode( (yyvsp[(5) - (6)].tok) )); }5258 #line 469 "parser.yy" 5259 { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (1)].tok) ), nullptr ) ); } 5500 5260 break; 5501 5261 … … 5503 5263 5504 5264 /* Line 1806 of yacc.c */ 5505 #line 4 49"parser.yy"5506 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (1)].tok) )); }5265 #line 471 "parser.yy" 5266 { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ) ); } 5507 5267 break; 5508 5268 … … 5510 5270 5511 5271 /* Line 1806 of yacc.c */ 5512 #line 4 51"parser.yy"5513 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }5272 #line 473 "parser.yy" 5273 { (yyval.en) = new ExpressionNode( build_attrtype( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].decl) ) ); } 5514 5274 break; 5515 5275 … … 5517 5277 5518 5278 /* Line 1806 of yacc.c */ 5519 #line 4 53"parser.yy"5520 { (yyval. en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ); }5279 #line 479 "parser.yy" 5280 { (yyval.op) = OperKinds::PointTo; } 5521 5281 break; 5522 5282 … … 5524 5284 5525 5285 /* Line 1806 of yacc.c */ 5526 #line 4 55"parser.yy"5527 { (yyval. en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), (yyvsp[(2) - (2)].en) ); }5286 #line 480 "parser.yy" 5287 { (yyval.op) = OperKinds::AddressOf; } 5528 5288 break; 5529 5289 … … 5531 5291 5532 5292 /* Line 1806 of yacc.c */ 5533 #line 4 57"parser.yy"5534 { (yyval. en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ); }5293 #line 486 "parser.yy" 5294 { (yyval.op) = OperKinds::UnPlus; } 5535 5295 break; 5536 5296 … … 5538 5298 5539 5299 /* Line 1806 of yacc.c */ 5540 #line 4 63"parser.yy"5541 { (yyval. en) = new OperatorNode( OperatorNode::PointTo ); }5300 #line 487 "parser.yy" 5301 { (yyval.op) = OperKinds::UnMinus; } 5542 5302 break; 5543 5303 … … 5545 5305 5546 5306 /* Line 1806 of yacc.c */ 5547 #line 4 64"parser.yy"5548 { (yyval. en) = new OperatorNode( OperatorNode::AddressOf ); }5307 #line 488 "parser.yy" 5308 { (yyval.op) = OperKinds::Neg; } 5549 5309 break; 5550 5310 … … 5552 5312 5553 5313 /* Line 1806 of yacc.c */ 5554 #line 466 "parser.yy" 5555 { (yyval.en) = new OperatorNode( OperatorNode::And ); } 5556 break; 5557 5558 case 66: 5559 5560 /* Line 1806 of yacc.c */ 5561 #line 470 "parser.yy" 5562 { (yyval.en) = new OperatorNode( OperatorNode::UnPlus ); } 5314 #line 489 "parser.yy" 5315 { (yyval.op) = OperKinds::BitNeg; } 5563 5316 break; 5564 5317 … … 5566 5319 5567 5320 /* Line 1806 of yacc.c */ 5568 #line 4 71"parser.yy"5569 { (yyval.en) = new OperatorNode( OperatorNode::UnMinus); }5321 #line 495 "parser.yy" 5322 { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[(2) - (4)].decl), (yyvsp[(4) - (4)].en) ) ); } 5570 5323 break; 5571 5324 … … 5573 5326 5574 5327 /* Line 1806 of yacc.c */ 5575 #line 4 72"parser.yy"5576 { (yyval.en) = new OperatorNode( OperatorNode::Neg); }5577 break; 5578 5579 case 69:5580 5581 /* Line 1806 of yacc.c */ 5582 #line 473 "parser.yy"5583 { (yyval.en) = new OperatorNode( OperatorNode::BitNeg); }5328 #line 497 "parser.yy" 5329 { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[(2) - (4)].decl), (yyvsp[(4) - (4)].en) ) ); } 5330 break; 5331 5332 case 70: 5333 5334 /* Line 1806 of yacc.c */ 5335 #line 503 "parser.yy" 5336 { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mul, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); } 5584 5337 break; 5585 5338 … … 5587 5340 5588 5341 /* Line 1806 of yacc.c */ 5589 #line 479"parser.yy"5590 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }5342 #line 505 "parser.yy" 5343 { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Div, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); } 5591 5344 break; 5592 5345 … … 5594 5347 5595 5348 /* Line 1806 of yacc.c */ 5596 #line 481"parser.yy"5597 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }5349 #line 507 "parser.yy" 5350 { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mod, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); } 5598 5351 break; 5599 5352 … … 5601 5354 5602 5355 /* Line 1806 of yacc.c */ 5603 #line 487"parser.yy"5604 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mul ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }5356 #line 513 "parser.yy" 5357 { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Plus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); } 5605 5358 break; 5606 5359 … … 5608 5361 5609 5362 /* Line 1806 of yacc.c */ 5610 #line 489"parser.yy"5611 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Div ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }5612 break; 5613 5614 case 7 6:5615 5616 /* Line 1806 of yacc.c */ 5617 #line 491 "parser.yy"5618 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mod ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }5363 #line 515 "parser.yy" 5364 { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Minus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); } 5365 break; 5366 5367 case 77: 5368 5369 /* Line 1806 of yacc.c */ 5370 #line 521 "parser.yy" 5371 { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); } 5619 5372 break; 5620 5373 … … 5622 5375 5623 5376 /* Line 1806 of yacc.c */ 5624 #line 497"parser.yy"5625 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Plus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }5626 break; 5627 5628 case 79:5629 5630 /* Line 1806 of yacc.c */ 5631 #line 499 "parser.yy"5632 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Minus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }5377 #line 523 "parser.yy" 5378 { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::RShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); } 5379 break; 5380 5381 case 80: 5382 5383 /* Line 1806 of yacc.c */ 5384 #line 529 "parser.yy" 5385 { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); } 5633 5386 break; 5634 5387 … … 5636 5389 5637 5390 /* Line 1806 of yacc.c */ 5638 #line 5 05"parser.yy"5639 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }5391 #line 531 "parser.yy" 5392 { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); } 5640 5393 break; 5641 5394 … … 5643 5396 5644 5397 /* Line 1806 of yacc.c */ 5645 #line 5 07"parser.yy"5646 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::RShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }5647 break; 5648 5649 case 8 4:5650 5651 /* Line 1806 of yacc.c */ 5652 #line 5 13"parser.yy"5653 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }5398 #line 533 "parser.yy" 5399 { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); } 5400 break; 5401 5402 case 83: 5403 5404 /* Line 1806 of yacc.c */ 5405 #line 535 "parser.yy" 5406 { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); } 5654 5407 break; 5655 5408 … … 5657 5410 5658 5411 /* Line 1806 of yacc.c */ 5659 #line 5 15"parser.yy"5660 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }5412 #line 541 "parser.yy" 5413 { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Eq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); } 5661 5414 break; 5662 5415 … … 5664 5417 5665 5418 /* Line 1806 of yacc.c */ 5666 #line 517 "parser.yy" 5667 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5668 break; 5669 5670 case 87: 5671 5672 /* Line 1806 of yacc.c */ 5673 #line 519 "parser.yy" 5674 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5675 break; 5676 5677 case 89: 5678 5679 /* Line 1806 of yacc.c */ 5680 #line 525 "parser.yy" 5681 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Eq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5419 #line 543 "parser.yy" 5420 { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Neq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); } 5421 break; 5422 5423 case 88: 5424 5425 /* Line 1806 of yacc.c */ 5426 #line 549 "parser.yy" 5427 { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitAnd, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); } 5682 5428 break; 5683 5429 … … 5685 5431 5686 5432 /* Line 1806 of yacc.c */ 5687 #line 5 27"parser.yy"5688 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }5433 #line 555 "parser.yy" 5434 { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Xor, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); } 5689 5435 break; 5690 5436 … … 5692 5438 5693 5439 /* Line 1806 of yacc.c */ 5694 #line 5 33"parser.yy"5695 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::BitAnd ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }5440 #line 561 "parser.yy" 5441 { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitOr, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); } 5696 5442 break; 5697 5443 … … 5699 5445 5700 5446 /* Line 1806 of yacc.c */ 5701 #line 5 39"parser.yy"5702 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Xor ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }5447 #line 567 "parser.yy" 5448 { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), true ) ); } 5703 5449 break; 5704 5450 … … 5706 5452 5707 5453 /* Line 1806 of yacc.c */ 5708 #line 5 45"parser.yy"5709 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::BitOr ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }5454 #line 573 "parser.yy" 5455 { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), false ) ); } 5710 5456 break; 5711 5457 … … 5713 5459 5714 5460 /* Line 1806 of yacc.c */ 5715 #line 551 "parser.yy" 5716 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::And ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5461 #line 579 "parser.yy" 5462 { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); } 5463 break; 5464 5465 case 99: 5466 5467 /* Line 1806 of yacc.c */ 5468 #line 582 "parser.yy" 5469 { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (4)].en), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ) ); } 5717 5470 break; 5718 5471 … … 5720 5473 5721 5474 /* Line 1806 of yacc.c */ 5722 #line 557 "parser.yy" 5723 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Or ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5724 break; 5725 5726 case 102: 5727 5728 /* Line 1806 of yacc.c */ 5729 #line 563 "parser.yy" 5730 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); } 5475 #line 584 "parser.yy" 5476 { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); } 5731 5477 break; 5732 5478 … … 5734 5480 5735 5481 /* Line 1806 of yacc.c */ 5736 #line 5 65 "parser.yy"5737 { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ); }5482 #line 595 "parser.yy" 5483 { (yyval.en) = new ExpressionNode( build_binary_ptr( (yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); } 5738 5484 break; 5739 5485 … … 5741 5487 5742 5488 /* Line 1806 of yacc.c */ 5743 #line 567 "parser.yy" 5744 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); } 5489 #line 597 "parser.yy" 5490 { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new ExpressionNode( build_binary_ptr( OperKinds::Assign, (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ) ); } 5491 break; 5492 5493 case 105: 5494 5495 /* Line 1806 of yacc.c */ 5496 #line 602 "parser.yy" 5497 { (yyval.en) = nullptr; } 5745 5498 break; 5746 5499 … … 5748 5501 5749 5502 /* Line 1806 of yacc.c */ 5750 #line 578"parser.yy"5751 { (yyval. en) =new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }5503 #line 607 "parser.yy" 5504 { (yyval.op) = OperKinds::Assign; } 5752 5505 break; 5753 5506 … … 5755 5508 5756 5509 /* Line 1806 of yacc.c */ 5757 #line 580"parser.yy"5758 { (yyval. en) =new CompositeExprNode( (yyvsp[(2) - (3)].en), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }5510 #line 608 "parser.yy" 5511 { (yyval.op) = OperKinds::MulAssn; } 5759 5512 break; 5760 5513 … … 5762 5515 5763 5516 /* Line 1806 of yacc.c */ 5764 #line 582"parser.yy"5765 { (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) ); }5517 #line 609 "parser.yy" 5518 { (yyval.op) = OperKinds::DivAssn; } 5766 5519 break; 5767 5520 … … 5769 5522 5770 5523 /* Line 1806 of yacc.c */ 5771 #line 587 "parser.yy" 5772 { (yyval.en) = new NullExprNode; } 5524 #line 610 "parser.yy" 5525 { (yyval.op) = OperKinds::ModAssn; } 5526 break; 5527 5528 case 111: 5529 5530 /* Line 1806 of yacc.c */ 5531 #line 611 "parser.yy" 5532 { (yyval.op) = OperKinds::PlusAssn; } 5773 5533 break; 5774 5534 … … 5776 5536 5777 5537 /* Line 1806 of yacc.c */ 5778 #line 595"parser.yy"5779 { (yyval. en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ) ); }5538 #line 612 "parser.yy" 5539 { (yyval.op) = OperKinds::MinusAssn; } 5780 5540 break; 5781 5541 … … 5783 5543 5784 5544 /* Line 1806 of yacc.c */ 5785 #line 597"parser.yy"5786 { (yyval. en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (yyvsp[(3) - (5)].en) ); }5545 #line 613 "parser.yy" 5546 { (yyval.op) = OperKinds::LSAssn; } 5787 5547 break; 5788 5548 … … 5790 5550 5791 5551 /* Line 1806 of yacc.c */ 5792 #line 599"parser.yy"5793 { (yyval. en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(new NullExprNode)->set_link( (yyvsp[(4) - (6)].en) ) ); }5552 #line 614 "parser.yy" 5553 { (yyval.op) = OperKinds::RSAssn; } 5794 5554 break; 5795 5555 … … 5797 5557 5798 5558 /* Line 1806 of yacc.c */ 5799 #line 601 "parser.yy" 5800 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( flattenCommas( (yyvsp[(5) - (7)].en) ) ) ); } 5559 #line 615 "parser.yy" 5560 { (yyval.op) = OperKinds::AndAssn; } 5561 break; 5562 5563 case 116: 5564 5565 /* Line 1806 of yacc.c */ 5566 #line 616 "parser.yy" 5567 { (yyval.op) = OperKinds::ERAssn; } 5801 5568 break; 5802 5569 … … 5804 5571 5805 5572 /* Line 1806 of yacc.c */ 5806 #line 6 07 "parser.yy"5807 { (yyval. en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }5573 #line 617 "parser.yy" 5574 { (yyval.op) = OperKinds::OrAssn; } 5808 5575 break; 5809 5576 … … 5811 5578 5812 5579 /* Line 1806 of yacc.c */ 5813 #line 6 11"parser.yy"5814 { (yyval.en) = new OperatorNode( OperatorNode::MulAssn); }5580 #line 624 "parser.yy" 5581 { (yyval.en) = new ExpressionNode( build_tuple() ); } 5815 5582 break; 5816 5583 … … 5818 5585 5819 5586 /* Line 1806 of yacc.c */ 5820 #line 6 12"parser.yy"5821 { (yyval.en) = new OperatorNode( OperatorNode::DivAssn); }5587 #line 626 "parser.yy" 5588 { (yyval.en) = new ExpressionNode( build_tuple( (yyvsp[(3) - (5)].en) ) ); } 5822 5589 break; 5823 5590 … … 5825 5592 5826 5593 /* Line 1806 of yacc.c */ 5827 #line 6 13"parser.yy"5828 { (yyval.en) = new OperatorNode( OperatorNode::ModAssn); }5594 #line 628 "parser.yy" 5595 { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( (yyvsp[(4) - (6)].en) ) ) ); } 5829 5596 break; 5830 5597 … … 5832 5599 5833 5600 /* Line 1806 of yacc.c */ 5834 #line 614 "parser.yy" 5835 { (yyval.en) = new OperatorNode( OperatorNode::PlusAssn ); } 5836 break; 5837 5838 case 122: 5839 5840 /* Line 1806 of yacc.c */ 5841 #line 615 "parser.yy" 5842 { (yyval.en) = new OperatorNode( OperatorNode::MinusAssn ); } 5601 #line 630 "parser.yy" 5602 { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_last( (yyvsp[(5) - (7)].en) ) ) ); } 5843 5603 break; 5844 5604 … … 5846 5606 5847 5607 /* Line 1806 of yacc.c */ 5848 #line 616 "parser.yy" 5849 { (yyval.en) = new OperatorNode( OperatorNode::LSAssn ); } 5850 break; 5851 5852 case 124: 5853 5854 /* Line 1806 of yacc.c */ 5855 #line 617 "parser.yy" 5856 { (yyval.en) = new OperatorNode( OperatorNode::RSAssn ); } 5608 #line 636 "parser.yy" 5609 { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); } 5857 5610 break; 5858 5611 … … 5860 5613 5861 5614 /* Line 1806 of yacc.c */ 5862 #line 6 18"parser.yy"5863 { (yyval.en) = new OperatorNode( OperatorNode::AndAssn); }5615 #line 642 "parser.yy" 5616 { (yyval.en) = new ExpressionNode( build_comma( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); } 5864 5617 break; 5865 5618 … … 5867 5620 5868 5621 /* Line 1806 of yacc.c */ 5869 #line 619 "parser.yy" 5870 { (yyval.en) = new OperatorNode( OperatorNode::ERAssn ); } 5871 break; 5872 5873 case 127: 5874 5875 /* Line 1806 of yacc.c */ 5876 #line 620 "parser.yy" 5877 { (yyval.en) = new OperatorNode( OperatorNode::OrAssn ); } 5878 break; 5879 5880 case 129: 5881 5882 /* Line 1806 of yacc.c */ 5883 #line 626 "parser.yy" 5884 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Comma ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5622 #line 647 "parser.yy" 5623 { (yyval.en) = 0; } 5885 5624 break; 5886 5625 … … 5888 5627 5889 5628 /* Line 1806 of yacc.c */ 5890 #line 631 "parser.yy" 5891 { (yyval.en) = 0; } 5892 break; 5893 5894 case 134: 5895 5896 /* Line 1806 of yacc.c */ 5897 #line 640 "parser.yy" 5629 #line 656 "parser.yy" 5898 5630 { (yyval.sn) = (yyvsp[(1) - (1)].sn); } 5899 5631 break; 5900 5632 5901 case 1 40:5902 5903 /* Line 1806 of yacc.c */ 5904 #line 6 47"parser.yy"5633 case 136: 5634 5635 /* Line 1806 of yacc.c */ 5636 #line 663 "parser.yy" 5905 5637 { 5906 Token fn; fn.str = new std::string( "^?{}" ); // location undefined5907 (yyval.sn) = new StatementNode( StatementNode::Exp, new CompositeExprNode( new VarRefNode( fn ),5908 (ExpressionNode *)( (yyvsp[(2) - (6)].en) )->set_link( (yyvsp[(4) - (6)].en) ) ), 0);5638 Token fn; 5639 fn.str = new std::string( "^?{}" ); // location undefined 5640 (yyval.sn) = new StatementNode( build_expr( new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( (yyvsp[(2) - (6)].en) )->set_last( (yyvsp[(4) - (6)].en) ) ) ) ) ); 5909 5641 } 5910 5642 break; 5911 5643 5912 case 1 41:5913 5914 /* Line 1806 of yacc.c */ 5915 #line 6 57"parser.yy"5644 case 137: 5645 5646 /* Line 1806 of yacc.c */ 5647 #line 673 "parser.yy" 5916 5648 { 5917 5649 (yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) ); … … 5919 5651 break; 5920 5652 5653 case 138: 5654 5655 /* Line 1806 of yacc.c */ 5656 #line 680 "parser.yy" 5657 { (yyval.sn) = new StatementNode( build_compound( (StatementNode *)0 ) ); } 5658 break; 5659 5660 case 139: 5661 5662 /* Line 1806 of yacc.c */ 5663 #line 687 "parser.yy" 5664 { (yyval.sn) = new StatementNode( build_compound( (yyvsp[(5) - (7)].sn) ) ); } 5665 break; 5666 5667 case 141: 5668 5669 /* Line 1806 of yacc.c */ 5670 #line 693 "parser.yy" 5671 { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } } 5672 break; 5673 5921 5674 case 142: 5922 5675 5923 5676 /* Line 1806 of yacc.c */ 5924 #line 6 64"parser.yy"5925 { (yyval.sn) = new CompoundStmtNode( (StatementNode *)0); }5677 #line 698 "parser.yy" 5678 { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); } 5926 5679 break; 5927 5680 … … 5929 5682 5930 5683 /* Line 1806 of yacc.c */ 5931 #line 671 "parser.yy" 5932 { (yyval.sn) = new CompoundStmtNode( (yyvsp[(5) - (7)].sn) ); } 5933 break; 5934 5935 case 145: 5936 5937 /* Line 1806 of yacc.c */ 5938 #line 677 "parser.yy" 5939 { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } } 5940 break; 5941 5942 case 146: 5943 5944 /* Line 1806 of yacc.c */ 5945 #line 682 "parser.yy" 5946 { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); } 5947 break; 5948 5949 case 147: 5950 5951 /* Line 1806 of yacc.c */ 5952 #line 684 "parser.yy" 5684 #line 700 "parser.yy" 5953 5685 { // mark all fields in list 5954 for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_ link() )5686 for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_next() ) 5955 5687 iter->set_extension( true ); 5956 5688 (yyval.sn) = new StatementNode( (yyvsp[(2) - (2)].decl) ); … … 5958 5690 break; 5959 5691 5692 case 144: 5693 5694 /* Line 1806 of yacc.c */ 5695 #line 706 "parser.yy" 5696 { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); } 5697 break; 5698 5699 case 147: 5700 5701 /* Line 1806 of yacc.c */ 5702 #line 713 "parser.yy" 5703 { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_last( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } } 5704 break; 5705 5960 5706 case 148: 5961 5707 5962 5708 /* Line 1806 of yacc.c */ 5963 #line 690 "parser.yy" 5964 { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); } 5709 #line 718 "parser.yy" 5710 { (yyval.sn) = new StatementNode( build_expr( (yyvsp[(1) - (2)].en) ) ); } 5711 break; 5712 5713 case 149: 5714 5715 /* Line 1806 of yacc.c */ 5716 #line 724 "parser.yy" 5717 { (yyval.sn) = new StatementNode( build_if( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn), nullptr ) ); } 5718 break; 5719 5720 case 150: 5721 5722 /* Line 1806 of yacc.c */ 5723 #line 726 "parser.yy" 5724 { (yyval.sn) = new StatementNode( build_if( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].sn), (yyvsp[(7) - (7)].sn) ) ); } 5965 5725 break; 5966 5726 … … 5968 5728 5969 5729 /* Line 1806 of yacc.c */ 5970 #line 697"parser.yy"5971 { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); }}5730 #line 728 "parser.yy" 5731 { (yyval.sn) = new StatementNode( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); } 5972 5732 break; 5973 5733 … … 5975 5735 5976 5736 /* Line 1806 of yacc.c */ 5977 #line 702 "parser.yy" 5978 { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); } 5979 break; 5980 5981 case 153: 5982 5983 /* Line 1806 of yacc.c */ 5984 #line 708 "parser.yy" 5985 { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); } 5986 break; 5987 5988 case 154: 5989 5990 /* Line 1806 of yacc.c */ 5991 #line 710 "parser.yy" 5992 { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); } 5993 break; 5994 5995 case 155: 5996 5997 /* Line 1806 of yacc.c */ 5998 #line 712 "parser.yy" 5999 { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); } 6000 break; 6001 6002 case 156: 6003 6004 /* Line 1806 of yacc.c */ 6005 #line 714 "parser.yy" 5737 #line 730 "parser.yy" 6006 5738 { 6007 StatementNode *sw = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) );5739 StatementNode *sw = new StatementNode( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) ); 6008 5740 // The semantics of the declaration list is changed to include associated initialization, which is performed 6009 5741 // *before* the transfer to the appropriate case clause by hoisting the declarations into a compound 6010 5742 // statement around the switch. Statements after the initial declaration list can never be executed, and 6011 // therefore, are removed from the grammar even though C allows it. Change also applies to choose statement. 6012 (yyval.sn) = (yyvsp[(7) - (9)].decl) != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( (yyvsp[(7) - (9)].decl) ))->set_link( sw )) ) : sw; 5743 // therefore, are removed from the grammar even though C allows it. The change also applies to choose 5744 // statement. 5745 (yyval.sn) = (yyvsp[(7) - (9)].decl) != 0 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( (yyvsp[(7) - (9)].decl) ))->set_last( sw )) ) ) : sw; 6013 5746 } 6014 5747 break; 6015 5748 6016 case 157: 6017 6018 /* Line 1806 of yacc.c */ 6019 #line 723 "parser.yy" 6020 { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); } 5749 case 153: 5750 5751 /* Line 1806 of yacc.c */ 5752 #line 740 "parser.yy" 5753 { (yyval.sn) = new StatementNode( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); } 5754 break; 5755 5756 case 154: 5757 5758 /* Line 1806 of yacc.c */ 5759 #line 742 "parser.yy" 5760 { 5761 StatementNode *sw = new StatementNode( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) ); 5762 (yyval.sn) = (yyvsp[(7) - (9)].decl) != 0 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( (yyvsp[(7) - (9)].decl) ))->set_last( sw )) ) ) : sw; 5763 } 5764 break; 5765 5766 case 155: 5767 5768 /* Line 1806 of yacc.c */ 5769 #line 752 "parser.yy" 5770 { (yyval.en) = (yyvsp[(1) - (1)].en); } 5771 break; 5772 5773 case 156: 5774 5775 /* Line 1806 of yacc.c */ 5776 #line 754 "parser.yy" 5777 { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); } 6021 5778 break; 6022 5779 … … 6024 5781 6025 5782 /* Line 1806 of yacc.c */ 6026 #line 725 "parser.yy" 5783 #line 759 "parser.yy" 5784 { (yyval.sn) = new StatementNode( build_case( (yyvsp[(1) - (1)].en) ) ); } 5785 break; 5786 5787 case 159: 5788 5789 /* Line 1806 of yacc.c */ 5790 #line 761 "parser.yy" 5791 { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_last( new StatementNode( build_case( (yyvsp[(3) - (3)].en) ) ) ) ); } 5792 break; 5793 5794 case 160: 5795 5796 /* Line 1806 of yacc.c */ 5797 #line 765 "parser.yy" 5798 { (yyval.sn) = (yyvsp[(2) - (3)].sn); } 5799 break; 5800 5801 case 161: 5802 5803 /* Line 1806 of yacc.c */ 5804 #line 766 "parser.yy" 5805 { (yyval.sn) = new StatementNode( build_default() ); } 5806 break; 5807 5808 case 163: 5809 5810 /* Line 1806 of yacc.c */ 5811 #line 772 "parser.yy" 5812 { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_last( (yyvsp[(2) - (2)].sn) )); } 5813 break; 5814 5815 case 164: 5816 5817 /* Line 1806 of yacc.c */ 5818 #line 776 "parser.yy" 5819 { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(2) - (2)].sn) ) ) ); } 5820 break; 5821 5822 case 165: 5823 5824 /* Line 1806 of yacc.c */ 5825 #line 781 "parser.yy" 5826 { (yyval.sn) = 0; } 5827 break; 5828 5829 case 167: 5830 5831 /* Line 1806 of yacc.c */ 5832 #line 787 "parser.yy" 5833 { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(2) - (2)].sn) ) ) ); } 5834 break; 5835 5836 case 168: 5837 5838 /* Line 1806 of yacc.c */ 5839 #line 789 "parser.yy" 5840 { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(2) - (3)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(3) - (3)].sn) ) ) ) ) ); } 5841 break; 5842 5843 case 169: 5844 5845 /* Line 1806 of yacc.c */ 5846 #line 794 "parser.yy" 5847 { (yyval.sn) = 0; } 5848 break; 5849 5850 case 171: 5851 5852 /* Line 1806 of yacc.c */ 5853 #line 800 "parser.yy" 5854 { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); } 5855 break; 5856 5857 case 172: 5858 5859 /* Line 1806 of yacc.c */ 5860 #line 802 "parser.yy" 5861 { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new StatementNode( build_compound( (StatementNode *)(yyvsp[(2) - (3)].sn)->set_last( (yyvsp[(3) - (3)].sn) ) ) ) ); } 5862 break; 5863 5864 case 173: 5865 5866 /* Line 1806 of yacc.c */ 5867 #line 804 "parser.yy" 5868 { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); } 5869 break; 5870 5871 case 174: 5872 5873 /* Line 1806 of yacc.c */ 5874 #line 806 "parser.yy" 5875 { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_last( (yyvsp[(2) - (4)].sn)->append_last_case( new StatementNode( build_compound( (StatementNode *)(yyvsp[(3) - (4)].sn)->set_last( (yyvsp[(4) - (4)].sn) ) ) ) ) ) ); } 5876 break; 5877 5878 case 175: 5879 5880 /* Line 1806 of yacc.c */ 5881 #line 811 "parser.yy" 5882 { (yyval.sn) = new StatementNode( build_branch( "", BranchStmt::Break ) ); } 5883 break; 5884 5885 case 177: 5886 5887 /* Line 1806 of yacc.c */ 5888 #line 817 "parser.yy" 5889 { (yyval.sn) = 0; } 5890 break; 5891 5892 case 178: 5893 5894 /* Line 1806 of yacc.c */ 5895 #line 819 "parser.yy" 5896 { (yyval.sn) = 0; } 5897 break; 5898 5899 case 179: 5900 5901 /* Line 1806 of yacc.c */ 5902 #line 824 "parser.yy" 5903 { (yyval.sn) = new StatementNode( build_while( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); } 5904 break; 5905 5906 case 180: 5907 5908 /* Line 1806 of yacc.c */ 5909 #line 826 "parser.yy" 5910 { (yyval.sn) = new StatementNode( build_while( (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ) ); } 5911 break; 5912 5913 case 181: 5914 5915 /* Line 1806 of yacc.c */ 5916 #line 828 "parser.yy" 5917 { (yyval.sn) = new StatementNode( build_for( (yyvsp[(4) - (6)].fctl), (yyvsp[(6) - (6)].sn) ) ); } 5918 break; 5919 5920 case 182: 5921 5922 /* Line 1806 of yacc.c */ 5923 #line 833 "parser.yy" 5924 { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); } 5925 break; 5926 5927 case 183: 5928 5929 /* Line 1806 of yacc.c */ 5930 #line 835 "parser.yy" 5931 { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); } 5932 break; 5933 5934 case 184: 5935 5936 /* Line 1806 of yacc.c */ 5937 #line 840 "parser.yy" 5938 { (yyval.sn) = new StatementNode( build_branch( *(yyvsp[(2) - (3)].tok), BranchStmt::Goto ) ); } 5939 break; 5940 5941 case 185: 5942 5943 /* Line 1806 of yacc.c */ 5944 #line 844 "parser.yy" 5945 { (yyval.sn) = new StatementNode( build_computedgoto( (yyvsp[(3) - (4)].en) ) ); } 5946 break; 5947 5948 case 186: 5949 5950 /* Line 1806 of yacc.c */ 5951 #line 847 "parser.yy" 5952 { (yyval.sn) = new StatementNode( build_branch( "", BranchStmt::Continue ) ); } 5953 break; 5954 5955 case 187: 5956 5957 /* Line 1806 of yacc.c */ 5958 #line 851 "parser.yy" 5959 { (yyval.sn) = new StatementNode( build_branch( *(yyvsp[(2) - (3)].tok), BranchStmt::Continue ) ); delete (yyvsp[(2) - (3)].tok); } 5960 break; 5961 5962 case 188: 5963 5964 /* Line 1806 of yacc.c */ 5965 #line 854 "parser.yy" 5966 { (yyval.sn) = new StatementNode( build_branch( "", BranchStmt::Break ) ); } 5967 break; 5968 5969 case 189: 5970 5971 /* Line 1806 of yacc.c */ 5972 #line 858 "parser.yy" 5973 { (yyval.sn) = new StatementNode( build_branch( *(yyvsp[(2) - (3)].tok), BranchStmt::Break ) ); delete (yyvsp[(2) - (3)].tok); } 5974 break; 5975 5976 case 190: 5977 5978 /* Line 1806 of yacc.c */ 5979 #line 860 "parser.yy" 5980 { (yyval.sn) = new StatementNode( build_return( (yyvsp[(2) - (3)].en) ) ); } 5981 break; 5982 5983 case 191: 5984 5985 /* Line 1806 of yacc.c */ 5986 #line 862 "parser.yy" 5987 { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (3)].en) ) ); } 5988 break; 5989 5990 case 192: 5991 5992 /* Line 1806 of yacc.c */ 5993 #line 864 "parser.yy" 5994 { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (3)].en) ) ); } 5995 break; 5996 5997 case 193: 5998 5999 /* Line 1806 of yacc.c */ 6000 #line 866 "parser.yy" 6001 { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (5)].en) ) ); } 6002 break; 6003 6004 case 194: 6005 6006 /* Line 1806 of yacc.c */ 6007 #line 871 "parser.yy" 6008 { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (3)].sn), (yyvsp[(3) - (3)].sn), 0 ) ); } 6009 break; 6010 6011 case 195: 6012 6013 /* Line 1806 of yacc.c */ 6014 #line 873 "parser.yy" 6015 { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (3)].sn), 0, (yyvsp[(3) - (3)].sn) ) ); } 6016 break; 6017 6018 case 196: 6019 6020 /* Line 1806 of yacc.c */ 6021 #line 875 "parser.yy" 6022 { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (4)].sn), (yyvsp[(3) - (4)].sn), (yyvsp[(4) - (4)].sn) ) ); } 6023 break; 6024 6025 case 198: 6026 6027 /* Line 1806 of yacc.c */ 6028 #line 882 "parser.yy" 6029 { (yyval.sn) = new StatementNode( build_catch( 0, (yyvsp[(5) - (5)].sn), true ) ); } 6030 break; 6031 6032 case 199: 6033 6034 /* Line 1806 of yacc.c */ 6035 #line 884 "parser.yy" 6036 { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (6)].sn)->set_last( new StatementNode( build_catch( 0, (yyvsp[(6) - (6)].sn), true ) ) ); } 6037 break; 6038 6039 case 200: 6040 6041 /* Line 1806 of yacc.c */ 6042 #line 886 "parser.yy" 6043 { (yyval.sn) = new StatementNode( build_catch( 0, (yyvsp[(5) - (5)].sn), true ) ); } 6044 break; 6045 6046 case 201: 6047 6048 /* Line 1806 of yacc.c */ 6049 #line 888 "parser.yy" 6050 { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (6)].sn)->set_last( new StatementNode( build_catch( 0, (yyvsp[(6) - (6)].sn), true ) ) ); } 6051 break; 6052 6053 case 202: 6054 6055 /* Line 1806 of yacc.c */ 6056 #line 893 "parser.yy" 6057 { (yyval.sn) = new StatementNode( build_catch( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ) ); } 6058 break; 6059 6060 case 203: 6061 6062 /* Line 1806 of yacc.c */ 6063 #line 895 "parser.yy" 6064 { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (10)].sn)->set_last( new StatementNode( build_catch( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ) ); } 6065 break; 6066 6067 case 204: 6068 6069 /* Line 1806 of yacc.c */ 6070 #line 897 "parser.yy" 6071 { (yyval.sn) = new StatementNode( build_catch( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ) ); } 6072 break; 6073 6074 case 205: 6075 6076 /* Line 1806 of yacc.c */ 6077 #line 899 "parser.yy" 6078 { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (10)].sn)->set_last( new StatementNode( build_catch( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ) ); } 6079 break; 6080 6081 case 206: 6082 6083 /* Line 1806 of yacc.c */ 6084 #line 904 "parser.yy" 6027 6085 { 6028 StatementNode *sw = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); 6029 (yyval.sn) = (yyvsp[(7) - (9)].decl) != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( (yyvsp[(7) - (9)].decl) ))->set_link( sw )) ) : sw; 6086 (yyval.sn) = new StatementNode( build_finally( (yyvsp[(2) - (2)].sn) ) ); 6030 6087 } 6031 6088 break; 6032 6089 6033 case 159:6034 6035 /* Line 1806 of yacc.c */6036 #line 735 "parser.yy"6037 { (yyval.en) = (yyvsp[(1) - (1)].en); }6038 break;6039 6040 case 160:6041 6042 /* Line 1806 of yacc.c */6043 #line 737 "parser.yy"6044 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }6045 break;6046 6047 case 163:6048 6049 /* Line 1806 of yacc.c */6050 #line 744 "parser.yy"6051 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(tupleContents( (yyvsp[(1) - (3)].en) ))->set_link( (yyvsp[(3) - (3)].en) ) ); }6052 break;6053 6054 case 164:6055 6056 /* Line 1806 of yacc.c */6057 #line 748 "parser.yy"6058 { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(2) - (3)].en), 0 ); }6059 break;6060 6061 case 165:6062 6063 /* Line 1806 of yacc.c */6064 #line 749 "parser.yy"6065 { (yyval.sn) = new StatementNode( StatementNode::Default ); }6066 break;6067 6068 case 167:6069 6070 /* Line 1806 of yacc.c */6071 #line 755 "parser.yy"6072 { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }6073 break;6074 6075 case 168:6076 6077 /* Line 1806 of yacc.c */6078 #line 759 "parser.yy"6079 { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }6080 break;6081 6082 case 169:6083 6084 /* Line 1806 of yacc.c */6085 #line 764 "parser.yy"6086 { (yyval.sn) = 0; }6087 break;6088 6089 case 171:6090 6091 /* Line 1806 of yacc.c */6092 #line 770 "parser.yy"6093 { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }6094 break;6095 6096 case 172:6097 6098 /* Line 1806 of yacc.c */6099 #line 772 "parser.yy"6100 { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(3) - (3)].sn) ) ) ) ); }6101 break;6102 6103 case 173:6104 6105 /* Line 1806 of yacc.c */6106 #line 777 "parser.yy"6107 { (yyval.sn) = 0; }6108 break;6109 6110 case 175:6111 6112 /* Line 1806 of yacc.c */6113 #line 783 "parser.yy"6114 { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }6115 break;6116 6117 case 176:6118 6119 /* Line 1806 of yacc.c */6120 #line 785 "parser.yy"6121 { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(2) - (3)].sn), *(yyvsp[(3) - (3)].sn) ) ) ) ); }6122 break;6123 6124 case 177:6125 6126 /* Line 1806 of yacc.c */6127 #line 787 "parser.yy"6128 { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }6129 break;6130 6131 case 178:6132 6133 /* Line 1806 of yacc.c */6134 #line 789 "parser.yy"6135 { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_link( (yyvsp[(2) - (4)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(3) - (4)].sn), *(yyvsp[(4) - (4)].sn) ) ) ) ) ) ); }6136 break;6137 6138 case 179:6139 6140 /* Line 1806 of yacc.c */6141 #line 794 "parser.yy"6142 { (yyval.sn) = new StatementNode( StatementNode::Break ); }6143 break;6144 6145 case 181:6146 6147 /* Line 1806 of yacc.c */6148 #line 800 "parser.yy"6149 { (yyval.sn) = 0; }6150 break;6151 6152 case 182:6153 6154 /* Line 1806 of yacc.c */6155 #line 802 "parser.yy"6156 { (yyval.sn) = 0; }6157 break;6158 6159 case 183:6160 6161 /* Line 1806 of yacc.c */6162 #line 807 "parser.yy"6163 { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }6164 break;6165 6166 case 184:6167 6168 /* Line 1806 of yacc.c */6169 #line 809 "parser.yy"6170 { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); }6171 break;6172 6173 case 185:6174 6175 /* Line 1806 of yacc.c */6176 #line 811 "parser.yy"6177 { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); }6178 break;6179 6180 case 186:6181 6182 /* Line 1806 of yacc.c */6183 #line 816 "parser.yy"6184 { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }6185 break;6186 6187 case 187:6188 6189 /* Line 1806 of yacc.c */6190 #line 818 "parser.yy"6191 { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }6192 break;6193 6194 case 188:6195 6196 /* Line 1806 of yacc.c */6197 #line 823 "parser.yy"6198 { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); }6199 break;6200 6201 case 189:6202 6203 /* Line 1806 of yacc.c */6204 #line 827 "parser.yy"6205 { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }6206 break;6207 6208 case 190:6209 6210 /* Line 1806 of yacc.c */6211 #line 830 "parser.yy"6212 { (yyval.sn) = new StatementNode( StatementNode::Continue ); }6213 break;6214 6215 case 191:6216 6217 /* Line 1806 of yacc.c */6218 #line 834 "parser.yy"6219 { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); }6220 break;6221 6222 case 192:6223 6224 /* Line 1806 of yacc.c */6225 #line 837 "parser.yy"6226 { (yyval.sn) = new StatementNode( StatementNode::Break ); }6227 break;6228 6229 case 193:6230 6231 /* Line 1806 of yacc.c */6232 #line 841 "parser.yy"6233 { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); }6234 break;6235 6236 case 194:6237 6238 /* Line 1806 of yacc.c */6239 #line 843 "parser.yy"6240 { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }6241 break;6242 6243 case 195:6244 6245 /* Line 1806 of yacc.c */6246 #line 845 "parser.yy"6247 { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }6248 break;6249 6250 case 196:6251 6252 /* Line 1806 of yacc.c */6253 #line 849 "parser.yy"6254 { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }6255 break;6256 6257 case 197:6258 6259 /* Line 1806 of yacc.c */6260 #line 851 "parser.yy"6261 { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (5)].en), 0 ); }6262 break;6263 6264 case 198:6265 6266 /* Line 1806 of yacc.c */6267 #line 858 "parser.yy"6268 { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }6269 break;6270 6271 case 199:6272 6273 /* Line 1806 of yacc.c */6274 #line 860 "parser.yy"6275 { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }6276 break;6277 6278 case 200:6279 6280 /* Line 1806 of yacc.c */6281 #line 862 "parser.yy"6282 {6283 (yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) );6284 (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (4)].sn),*(yyvsp[(3) - (4)].pn) ))));6285 }6286 break;6287 6288 case 202:6289 6290 /* Line 1806 of yacc.c */6291 #line 873 "parser.yy"6292 { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }6293 break;6294 6295 case 203:6296 6297 /* Line 1806 of yacc.c */6298 #line 875 "parser.yy"6299 { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }6300 break;6301 6302 case 204:6303 6304 /* Line 1806 of yacc.c */6305 #line 877 "parser.yy"6306 { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }6307 break;6308 6309 case 205:6310 6311 /* Line 1806 of yacc.c */6312 #line 879 "parser.yy"6313 { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }6314 break;6315 6316 case 206:6317 6318 /* Line 1806 of yacc.c */6319 #line 884 "parser.yy"6320 { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }6321 break;6322 6323 case 207:6324 6325 /* Line 1806 of yacc.c */6326 #line 886 "parser.yy"6327 { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }6328 break;6329 6330 6090 case 208: 6331 6091 6332 6092 /* Line 1806 of yacc.c */ 6333 #line 888 "parser.yy" 6334 { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); } 6335 break; 6336 6337 case 209: 6338 6339 /* Line 1806 of yacc.c */ 6340 #line 890 "parser.yy" 6341 { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); } 6342 break; 6343 6344 case 210: 6345 6346 /* Line 1806 of yacc.c */ 6347 #line 895 "parser.yy" 6348 { 6349 (yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) ); 6350 std::cout << "Just created a finally node" << std::endl; 6351 } 6352 break; 6353 6354 case 212: 6355 6356 /* Line 1806 of yacc.c */ 6357 #line 909 "parser.yy" 6093 #line 917 "parser.yy" 6358 6094 { 6359 6095 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6362 6098 break; 6363 6099 6364 case 2 13:6365 6366 /* Line 1806 of yacc.c */ 6367 #line 9 14"parser.yy"6100 case 209: 6101 6102 /* Line 1806 of yacc.c */ 6103 #line 922 "parser.yy" 6368 6104 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); } 6369 6105 break; 6370 6106 6371 case 21 4:6372 6373 /* Line 1806 of yacc.c */ 6374 #line 9 16"parser.yy"6107 case 210: 6108 6109 /* Line 1806 of yacc.c */ 6110 #line 924 "parser.yy" 6375 6111 { 6376 6112 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6379 6115 break; 6380 6116 6117 case 212: 6118 6119 /* Line 1806 of yacc.c */ 6120 #line 933 "parser.yy" 6121 { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ) ); } 6122 break; 6123 6124 case 213: 6125 6126 /* Line 1806 of yacc.c */ 6127 #line 935 "parser.yy" 6128 { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ) ); } 6129 break; 6130 6131 case 214: 6132 6133 /* Line 1806 of yacc.c */ 6134 #line 937 "parser.yy" 6135 { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ) ); } 6136 break; 6137 6138 case 215: 6139 6140 /* Line 1806 of yacc.c */ 6141 #line 939 "parser.yy" 6142 { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].en) ) ); } 6143 break; 6144 6381 6145 case 216: 6382 6146 6383 6147 /* Line 1806 of yacc.c */ 6384 #line 9 25"parser.yy"6385 { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0); }6148 #line 941 "parser.yy" 6149 { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].en), (yyvsp[(12) - (14)].label) ) ); } 6386 6150 break; 6387 6151 … … 6389 6153 6390 6154 /* Line 1806 of yacc.c */ 6391 #line 9 27"parser.yy"6392 { (yyval. sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }6155 #line 946 "parser.yy" 6156 { (yyval.flag) = false; } 6393 6157 break; 6394 6158 … … 6396 6160 6397 6161 /* Line 1806 of yacc.c */ 6398 #line 9 29"parser.yy"6399 { (yyval. sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ); }6162 #line 948 "parser.yy" 6163 { (yyval.flag) = true; } 6400 6164 break; 6401 6165 … … 6403 6167 6404 6168 /* Line 1806 of yacc.c */ 6405 #line 931 "parser.yy" 6406 { (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) ); } 6407 break; 6408 6409 case 220: 6410 6411 /* Line 1806 of yacc.c */ 6412 #line 933 "parser.yy" 6413 { (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) ); } 6414 break; 6415 6416 case 221: 6417 6418 /* Line 1806 of yacc.c */ 6419 #line 938 "parser.yy" 6420 { (yyval.flag) = false; } 6169 #line 953 "parser.yy" 6170 { (yyval.en) = 0; } 6421 6171 break; 6422 6172 … … 6424 6174 6425 6175 /* Line 1806 of yacc.c */ 6426 #line 9 40 "parser.yy"6427 { (yyval. flag) = true; }6176 #line 960 "parser.yy" 6177 { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); } 6428 6178 break; 6429 6179 … … 6431 6181 6432 6182 /* Line 1806 of yacc.c */ 6433 #line 945 "parser.yy" 6183 #line 965 "parser.yy" 6184 { (yyval.en) = new ExpressionNode( build_asmexpr( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ) ); } 6185 break; 6186 6187 case 224: 6188 6189 /* Line 1806 of yacc.c */ 6190 #line 967 "parser.yy" 6191 { (yyval.en) = new ExpressionNode( build_asmexpr( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ) ); } 6192 break; 6193 6194 case 225: 6195 6196 /* Line 1806 of yacc.c */ 6197 #line 972 "parser.yy" 6434 6198 { (yyval.en) = 0; } 6435 6199 break; … … 6438 6202 6439 6203 /* Line 1806 of yacc.c */ 6440 #line 9 52"parser.yy"6441 { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }6204 #line 974 "parser.yy" 6205 { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); } 6442 6206 break; 6443 6207 … … 6445 6209 6446 6210 /* Line 1806 of yacc.c */ 6447 #line 9 57"parser.yy"6448 { (yyval.en) = new AsmExprNode( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ); }6211 #line 976 "parser.yy" 6212 { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( (yyvsp[(3) - (3)].constant) ) ); } 6449 6213 break; 6450 6214 … … 6452 6216 6453 6217 /* Line 1806 of yacc.c */ 6454 #line 9 59"parser.yy"6455 { (yyval. en) = new AsmExprNode( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ); }6218 #line 981 "parser.yy" 6219 { (yyval.label) = new LabelNode(); (yyval.label)->labels.push_back( *(yyvsp[(1) - (1)].tok) ); } 6456 6220 break; 6457 6221 … … 6459 6223 6460 6224 /* Line 1806 of yacc.c */ 6461 #line 9 64"parser.yy"6462 { (yyval. constant) = 0; }6225 #line 983 "parser.yy" 6226 { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->labels.push_back( *(yyvsp[(3) - (3)].tok) ); } 6463 6227 break; 6464 6228 … … 6466 6230 6467 6231 /* Line 1806 of yacc.c */ 6468 #line 966 "parser.yy" 6469 { (yyval.constant) = (yyvsp[(1) - (1)].constant); } 6470 break; 6471 6472 case 231: 6473 6474 /* Line 1806 of yacc.c */ 6475 #line 968 "parser.yy" 6476 { (yyval.constant) = (ConstantNode *)(yyvsp[(1) - (3)].constant)->set_link( (yyvsp[(3) - (3)].constant) ); } 6477 break; 6478 6479 case 232: 6480 6481 /* Line 1806 of yacc.c */ 6482 #line 973 "parser.yy" 6483 { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); } 6232 #line 990 "parser.yy" 6233 { (yyval.decl) = 0; } 6484 6234 break; 6485 6235 … … 6487 6237 6488 6238 /* Line 1806 of yacc.c */ 6489 #line 9 75"parser.yy"6490 { (yyval. label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); }6239 #line 997 "parser.yy" 6240 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); } 6491 6241 break; 6492 6242 … … 6494 6244 6495 6245 /* Line 1806 of yacc.c */ 6496 #line 982 "parser.yy"6246 #line 1002 "parser.yy" 6497 6247 { (yyval.decl) = 0; } 6498 6248 break; … … 6501 6251 6502 6252 /* Line 1806 of yacc.c */ 6503 #line 989 "parser.yy"6253 #line 1009 "parser.yy" 6504 6254 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); } 6505 6255 break; 6506 6256 6507 case 238: 6508 6509 /* Line 1806 of yacc.c */ 6510 #line 994 "parser.yy" 6511 { (yyval.decl) = 0; } 6512 break; 6513 6514 case 241: 6515 6516 /* Line 1806 of yacc.c */ 6517 #line 1001 "parser.yy" 6518 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); } 6519 break; 6520 6521 case 246: 6522 6523 /* Line 1806 of yacc.c */ 6524 #line 1015 "parser.yy" 6257 case 242: 6258 6259 /* Line 1806 of yacc.c */ 6260 #line 1023 "parser.yy" 6525 6261 {} 6526 6262 break; 6527 6263 6528 case 24 7:6529 6530 /* Line 1806 of yacc.c */ 6531 #line 10 16"parser.yy"6264 case 243: 6265 6266 /* Line 1806 of yacc.c */ 6267 #line 1024 "parser.yy" 6532 6268 {} 6533 6269 break; 6534 6270 6535 case 25 5:6536 6537 /* Line 1806 of yacc.c */ 6538 #line 10 45"parser.yy"6271 case 251: 6272 6273 /* Line 1806 of yacc.c */ 6274 #line 1053 "parser.yy" 6539 6275 { 6540 6276 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6543 6279 break; 6544 6280 6545 case 25 6:6546 6547 /* Line 1806 of yacc.c */ 6548 #line 10 52"parser.yy"6281 case 252: 6282 6283 /* Line 1806 of yacc.c */ 6284 #line 1060 "parser.yy" 6549 6285 { 6550 6286 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6553 6289 break; 6554 6290 6555 case 25 7:6556 6557 /* Line 1806 of yacc.c */ 6558 #line 10 57"parser.yy"6291 case 253: 6292 6293 /* Line 1806 of yacc.c */ 6294 #line 1065 "parser.yy" 6559 6295 { 6560 6296 typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID ); … … 6563 6299 break; 6564 6300 6565 case 25 8:6566 6567 /* Line 1806 of yacc.c */ 6568 #line 10 67"parser.yy"6301 case 254: 6302 6303 /* Line 1806 of yacc.c */ 6304 #line 1075 "parser.yy" 6569 6305 { 6570 6306 typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) ); … … 6573 6309 break; 6574 6310 6575 case 25 9:6576 6577 /* Line 1806 of yacc.c */ 6578 #line 10 72"parser.yy"6311 case 255: 6312 6313 /* Line 1806 of yacc.c */ 6314 #line 1080 "parser.yy" 6579 6315 { 6580 6316 typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) ); … … 6583 6319 break; 6584 6320 6585 case 2 60:6586 6587 /* Line 1806 of yacc.c */ 6588 #line 10 77"parser.yy"6321 case 256: 6322 6323 /* Line 1806 of yacc.c */ 6324 #line 1085 "parser.yy" 6589 6325 { 6590 6326 typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) ); … … 6593 6329 break; 6594 6330 6595 case 2 61:6596 6597 /* Line 1806 of yacc.c */ 6598 #line 10 85"parser.yy"6331 case 257: 6332 6333 /* Line 1806 of yacc.c */ 6334 #line 1093 "parser.yy" 6599 6335 { 6600 6336 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6603 6339 break; 6604 6340 6605 case 2 62:6606 6607 /* Line 1806 of yacc.c */ 6608 #line 109 0"parser.yy"6341 case 258: 6342 6343 /* Line 1806 of yacc.c */ 6344 #line 1098 "parser.yy" 6609 6345 { 6610 6346 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6613 6349 break; 6614 6350 6615 case 2 63:6616 6617 /* Line 1806 of yacc.c */ 6618 #line 1 095"parser.yy"6351 case 259: 6352 6353 /* Line 1806 of yacc.c */ 6354 #line 1103 "parser.yy" 6619 6355 { 6620 6356 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6623 6359 break; 6624 6360 6625 case 26 4:6626 6627 /* Line 1806 of yacc.c */ 6628 #line 110 0"parser.yy"6361 case 260: 6362 6363 /* Line 1806 of yacc.c */ 6364 #line 1108 "parser.yy" 6629 6365 { 6630 6366 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6633 6369 break; 6634 6370 6635 case 26 5:6636 6637 /* Line 1806 of yacc.c */ 6638 #line 11 05"parser.yy"6371 case 261: 6372 6373 /* Line 1806 of yacc.c */ 6374 #line 1113 "parser.yy" 6639 6375 { 6640 6376 typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID ); … … 6643 6379 break; 6644 6380 6645 case 26 6:6646 6647 /* Line 1806 of yacc.c */ 6648 #line 11 13"parser.yy"6381 case 262: 6382 6383 /* Line 1806 of yacc.c */ 6384 #line 1121 "parser.yy" 6649 6385 { 6650 6386 (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true ); … … 6652 6388 break; 6653 6389 6654 case 26 7:6655 6656 /* Line 1806 of yacc.c */ 6657 #line 11 36"parser.yy"6390 case 263: 6391 6392 /* Line 1806 of yacc.c */ 6393 #line 1144 "parser.yy" 6658 6394 { 6659 6395 (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true ); … … 6661 6397 break; 6662 6398 6663 case 26 8:6664 6665 /* Line 1806 of yacc.c */ 6666 #line 114 0"parser.yy"6399 case 264: 6400 6401 /* Line 1806 of yacc.c */ 6402 #line 1148 "parser.yy" 6667 6403 { 6668 6404 (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true ); … … 6670 6406 break; 6671 6407 6672 case 26 9:6673 6674 /* Line 1806 of yacc.c */ 6675 #line 11 47"parser.yy"6408 case 265: 6409 6410 /* Line 1806 of yacc.c */ 6411 #line 1155 "parser.yy" 6676 6412 { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); } 6677 6413 break; 6678 6414 6679 case 2 70:6680 6681 /* Line 1806 of yacc.c */ 6682 #line 115 1"parser.yy"6415 case 266: 6416 6417 /* Line 1806 of yacc.c */ 6418 #line 1159 "parser.yy" 6683 6419 { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); } 6684 6420 break; 6685 6421 6686 case 2 71:6687 6688 /* Line 1806 of yacc.c */ 6689 #line 11 56"parser.yy"6422 case 267: 6423 6424 /* Line 1806 of yacc.c */ 6425 #line 1164 "parser.yy" 6690 6426 { 6691 6427 typedefTable.addToEnclosingScope( TypedefTable::TD ); … … 6694 6430 break; 6695 6431 6696 case 2 72:6697 6698 /* Line 1806 of yacc.c */ 6699 #line 116 1"parser.yy"6432 case 268: 6433 6434 /* Line 1806 of yacc.c */ 6435 #line 1169 "parser.yy" 6700 6436 { 6701 6437 typedefTable.addToEnclosingScope( TypedefTable::TD ); … … 6704 6440 break; 6705 6441 6706 case 2 73:6707 6708 /* Line 1806 of yacc.c */ 6709 #line 11 66"parser.yy"6442 case 269: 6443 6444 /* Line 1806 of yacc.c */ 6445 #line 1174 "parser.yy" 6710 6446 { 6711 6447 typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD ); … … 6714 6450 break; 6715 6451 6716 case 27 4:6717 6718 /* Line 1806 of yacc.c */ 6719 #line 11 77"parser.yy"6452 case 270: 6453 6454 /* Line 1806 of yacc.c */ 6455 #line 1185 "parser.yy" 6720 6456 { 6721 6457 typedefTable.addToEnclosingScope( TypedefTable::TD ); … … 6724 6460 break; 6725 6461 6726 case 27 5:6727 6728 /* Line 1806 of yacc.c */ 6729 #line 11 82"parser.yy"6462 case 271: 6463 6464 /* Line 1806 of yacc.c */ 6465 #line 1190 "parser.yy" 6730 6466 { 6731 6467 typedefTable.addToEnclosingScope( TypedefTable::TD ); … … 6734 6470 break; 6735 6471 6736 case 27 6:6737 6738 /* Line 1806 of yacc.c */ 6739 #line 11 87"parser.yy"6472 case 272: 6473 6474 /* Line 1806 of yacc.c */ 6475 #line 1195 "parser.yy" 6740 6476 { 6741 6477 typedefTable.addToEnclosingScope( TypedefTable::TD ); … … 6744 6480 break; 6745 6481 6746 case 27 7:6747 6748 /* Line 1806 of yacc.c */ 6749 #line 1 192"parser.yy"6482 case 273: 6483 6484 /* Line 1806 of yacc.c */ 6485 #line 1200 "parser.yy" 6750 6486 { 6751 6487 typedefTable.addToEnclosingScope( TypedefTable::TD ); … … 6754 6490 break; 6755 6491 6756 case 27 8:6757 6758 /* Line 1806 of yacc.c */ 6759 #line 1 197"parser.yy"6492 case 274: 6493 6494 /* Line 1806 of yacc.c */ 6495 #line 1205 "parser.yy" 6760 6496 { 6761 6497 typedefTable.addToEnclosingScope( TypedefTable::TD ); … … 6764 6500 break; 6765 6501 6766 case 27 9:6767 6768 /* Line 1806 of yacc.c */ 6769 #line 12 06"parser.yy"6502 case 275: 6503 6504 /* Line 1806 of yacc.c */ 6505 #line 1214 "parser.yy" 6770 6506 { 6771 6507 typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD ); … … 6774 6510 break; 6775 6511 6776 case 2 80:6777 6778 /* Line 1806 of yacc.c */ 6779 #line 121 1"parser.yy"6512 case 276: 6513 6514 /* Line 1806 of yacc.c */ 6515 #line 1219 "parser.yy" 6780 6516 { 6781 6517 typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD ); … … 6784 6520 break; 6785 6521 6786 case 28 5:6787 6788 /* Line 1806 of yacc.c */ 6789 #line 12 28"parser.yy"6522 case 281: 6523 6524 /* Line 1806 of yacc.c */ 6525 #line 1236 "parser.yy" 6790 6526 { 6791 6527 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6794 6530 break; 6795 6531 6796 case 28 6:6797 6798 /* Line 1806 of yacc.c */ 6799 #line 12 33"parser.yy"6532 case 282: 6533 6534 /* Line 1806 of yacc.c */ 6535 #line 1241 "parser.yy" 6800 6536 { 6801 6537 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6804 6540 break; 6805 6541 6806 case 29 5:6807 6808 /* Line 1806 of yacc.c */ 6809 #line 12 55"parser.yy"6542 case 291: 6543 6544 /* Line 1806 of yacc.c */ 6545 #line 1263 "parser.yy" 6810 6546 { (yyval.decl) = 0; } 6811 6547 break; 6812 6548 6549 case 294: 6550 6551 /* Line 1806 of yacc.c */ 6552 #line 1275 "parser.yy" 6553 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6554 break; 6555 6556 case 297: 6557 6558 /* Line 1806 of yacc.c */ 6559 #line 1286 "parser.yy" 6560 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); } 6561 break; 6562 6813 6563 case 298: 6814 6564 6815 6565 /* Line 1806 of yacc.c */ 6816 #line 1267 "parser.yy" 6817 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6566 #line 1288 "parser.yy" 6567 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); } 6568 break; 6569 6570 case 299: 6571 6572 /* Line 1806 of yacc.c */ 6573 #line 1290 "parser.yy" 6574 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); } 6575 break; 6576 6577 case 300: 6578 6579 /* Line 1806 of yacc.c */ 6580 #line 1292 "parser.yy" 6581 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); } 6818 6582 break; 6819 6583 … … 6821 6585 6822 6586 /* Line 1806 of yacc.c */ 6823 #line 12 78"parser.yy"6824 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode:: Const); }6587 #line 1294 "parser.yy" 6588 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); } 6825 6589 break; 6826 6590 … … 6828 6592 6829 6593 /* Line 1806 of yacc.c */ 6830 #line 1280 "parser.yy" 6831 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); } 6832 break; 6833 6834 case 303: 6835 6836 /* Line 1806 of yacc.c */ 6837 #line 1282 "parser.yy" 6838 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); } 6839 break; 6840 6841 case 304: 6842 6843 /* Line 1806 of yacc.c */ 6844 #line 1284 "parser.yy" 6845 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); } 6846 break; 6847 6848 case 305: 6849 6850 /* Line 1806 of yacc.c */ 6851 #line 1286 "parser.yy" 6852 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); } 6853 break; 6854 6855 case 306: 6856 6857 /* Line 1806 of yacc.c */ 6858 #line 1288 "parser.yy" 6594 #line 1296 "parser.yy" 6859 6595 { 6860 6596 typedefTable.enterScope(); … … 6862 6598 break; 6863 6599 6864 case 30 7:6865 6866 /* Line 1806 of yacc.c */ 6867 #line 1 292"parser.yy"6600 case 303: 6601 6602 /* Line 1806 of yacc.c */ 6603 #line 1300 "parser.yy" 6868 6604 { 6869 6605 typedefTable.leaveScope(); … … 6872 6608 break; 6873 6609 6874 case 30 9:6875 6876 /* Line 1806 of yacc.c */ 6877 #line 130 1"parser.yy"6610 case 305: 6611 6612 /* Line 1806 of yacc.c */ 6613 #line 1309 "parser.yy" 6878 6614 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6879 6615 break; 6880 6616 6617 case 306: 6618 6619 /* Line 1806 of yacc.c */ 6620 #line 1311 "parser.yy" 6621 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); } 6622 break; 6623 6624 case 308: 6625 6626 /* Line 1806 of yacc.c */ 6627 #line 1322 "parser.yy" 6628 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6629 break; 6630 6881 6631 case 310: 6882 6632 6883 6633 /* Line 1806 of yacc.c */ 6884 #line 1303 "parser.yy" 6634 #line 1331 "parser.yy" 6635 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); } 6636 break; 6637 6638 case 311: 6639 6640 /* Line 1806 of yacc.c */ 6641 #line 1333 "parser.yy" 6642 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); } 6643 break; 6644 6645 case 312: 6646 6647 /* Line 1806 of yacc.c */ 6648 #line 1335 "parser.yy" 6649 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); } 6650 break; 6651 6652 case 313: 6653 6654 /* Line 1806 of yacc.c */ 6655 #line 1337 "parser.yy" 6656 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); } 6657 break; 6658 6659 case 314: 6660 6661 /* Line 1806 of yacc.c */ 6662 #line 1339 "parser.yy" 6663 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); } 6664 break; 6665 6666 case 315: 6667 6668 /* Line 1806 of yacc.c */ 6669 #line 1341 "parser.yy" 6670 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); } 6671 break; 6672 6673 case 316: 6674 6675 /* Line 1806 of yacc.c */ 6676 #line 1343 "parser.yy" 6677 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); } 6678 break; 6679 6680 case 317: 6681 6682 /* Line 1806 of yacc.c */ 6683 #line 1345 "parser.yy" 6684 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); } 6685 break; 6686 6687 case 318: 6688 6689 /* Line 1806 of yacc.c */ 6690 #line 1350 "parser.yy" 6691 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); } 6692 break; 6693 6694 case 319: 6695 6696 /* Line 1806 of yacc.c */ 6697 #line 1352 "parser.yy" 6698 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); } 6699 break; 6700 6701 case 320: 6702 6703 /* Line 1806 of yacc.c */ 6704 #line 1354 "parser.yy" 6705 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); } 6706 break; 6707 6708 case 321: 6709 6710 /* Line 1806 of yacc.c */ 6711 #line 1356 "parser.yy" 6712 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); } 6713 break; 6714 6715 case 322: 6716 6717 /* Line 1806 of yacc.c */ 6718 #line 1358 "parser.yy" 6719 { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); } 6720 break; 6721 6722 case 323: 6723 6724 /* Line 1806 of yacc.c */ 6725 #line 1360 "parser.yy" 6726 { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); } 6727 break; 6728 6729 case 324: 6730 6731 /* Line 1806 of yacc.c */ 6732 #line 1362 "parser.yy" 6733 { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); } 6734 break; 6735 6736 case 325: 6737 6738 /* Line 1806 of yacc.c */ 6739 #line 1364 "parser.yy" 6740 { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); } 6741 break; 6742 6743 case 326: 6744 6745 /* Line 1806 of yacc.c */ 6746 #line 1366 "parser.yy" 6747 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); } 6748 break; 6749 6750 case 327: 6751 6752 /* Line 1806 of yacc.c */ 6753 #line 1368 "parser.yy" 6754 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); } 6755 break; 6756 6757 case 328: 6758 6759 /* Line 1806 of yacc.c */ 6760 #line 1370 "parser.yy" 6761 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); } 6762 break; 6763 6764 case 329: 6765 6766 /* Line 1806 of yacc.c */ 6767 #line 1372 "parser.yy" 6768 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); } 6769 break; 6770 6771 case 330: 6772 6773 /* Line 1806 of yacc.c */ 6774 #line 1374 "parser.yy" 6775 { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); } 6776 break; 6777 6778 case 332: 6779 6780 /* Line 1806 of yacc.c */ 6781 #line 1381 "parser.yy" 6782 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 6783 break; 6784 6785 case 333: 6786 6787 /* Line 1806 of yacc.c */ 6788 #line 1383 "parser.yy" 6789 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6790 break; 6791 6792 case 334: 6793 6794 /* Line 1806 of yacc.c */ 6795 #line 1385 "parser.yy" 6885 6796 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); } 6886 6797 break; 6887 6798 6888 case 312: 6889 6890 /* Line 1806 of yacc.c */ 6891 #line 1314 "parser.yy" 6799 case 335: 6800 6801 /* Line 1806 of yacc.c */ 6802 #line 1387 "parser.yy" 6803 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); } 6804 break; 6805 6806 case 337: 6807 6808 /* Line 1806 of yacc.c */ 6809 #line 1393 "parser.yy" 6810 { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); } 6811 break; 6812 6813 case 339: 6814 6815 /* Line 1806 of yacc.c */ 6816 #line 1400 "parser.yy" 6817 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 6818 break; 6819 6820 case 340: 6821 6822 /* Line 1806 of yacc.c */ 6823 #line 1402 "parser.yy" 6892 6824 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6893 6825 break; 6894 6826 6895 case 314: 6896 6897 /* Line 1806 of yacc.c */ 6898 #line 1323 "parser.yy" 6899 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); } 6900 break; 6901 6902 case 315: 6903 6904 /* Line 1806 of yacc.c */ 6905 #line 1325 "parser.yy" 6906 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); } 6907 break; 6908 6909 case 316: 6910 6911 /* Line 1806 of yacc.c */ 6912 #line 1327 "parser.yy" 6913 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); } 6914 break; 6915 6916 case 317: 6917 6918 /* Line 1806 of yacc.c */ 6919 #line 1329 "parser.yy" 6920 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); } 6921 break; 6922 6923 case 318: 6924 6925 /* Line 1806 of yacc.c */ 6926 #line 1331 "parser.yy" 6927 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); } 6928 break; 6929 6930 case 319: 6931 6932 /* Line 1806 of yacc.c */ 6933 #line 1333 "parser.yy" 6934 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); } 6935 break; 6936 6937 case 320: 6938 6939 /* Line 1806 of yacc.c */ 6940 #line 1335 "parser.yy" 6941 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); } 6942 break; 6943 6944 case 321: 6945 6946 /* Line 1806 of yacc.c */ 6947 #line 1337 "parser.yy" 6948 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); } 6949 break; 6950 6951 case 322: 6952 6953 /* Line 1806 of yacc.c */ 6954 #line 1342 "parser.yy" 6955 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); } 6956 break; 6957 6958 case 323: 6959 6960 /* Line 1806 of yacc.c */ 6961 #line 1344 "parser.yy" 6962 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); } 6963 break; 6964 6965 case 324: 6966 6967 /* Line 1806 of yacc.c */ 6968 #line 1346 "parser.yy" 6969 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); } 6970 break; 6971 6972 case 325: 6973 6974 /* Line 1806 of yacc.c */ 6975 #line 1348 "parser.yy" 6976 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); } 6977 break; 6978 6979 case 326: 6980 6981 /* Line 1806 of yacc.c */ 6982 #line 1350 "parser.yy" 6983 { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); } 6984 break; 6985 6986 case 327: 6987 6988 /* Line 1806 of yacc.c */ 6989 #line 1352 "parser.yy" 6990 { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); } 6991 break; 6992 6993 case 328: 6994 6995 /* Line 1806 of yacc.c */ 6996 #line 1354 "parser.yy" 6997 { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); } 6998 break; 6999 7000 case 329: 7001 7002 /* Line 1806 of yacc.c */ 7003 #line 1356 "parser.yy" 7004 { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); } 7005 break; 7006 7007 case 330: 7008 7009 /* Line 1806 of yacc.c */ 7010 #line 1358 "parser.yy" 7011 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); } 7012 break; 7013 7014 case 331: 7015 7016 /* Line 1806 of yacc.c */ 7017 #line 1360 "parser.yy" 7018 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); } 7019 break; 7020 7021 case 332: 7022 7023 /* Line 1806 of yacc.c */ 7024 #line 1362 "parser.yy" 7025 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); } 7026 break; 7027 7028 case 333: 7029 7030 /* Line 1806 of yacc.c */ 7031 #line 1364 "parser.yy" 7032 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); } 7033 break; 7034 7035 case 334: 7036 7037 /* Line 1806 of yacc.c */ 7038 #line 1366 "parser.yy" 7039 { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); } 7040 break; 7041 7042 case 336: 7043 7044 /* Line 1806 of yacc.c */ 7045 #line 1373 "parser.yy" 6827 case 341: 6828 6829 /* Line 1806 of yacc.c */ 6830 #line 1404 "parser.yy" 6831 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); } 6832 break; 6833 6834 case 342: 6835 6836 /* Line 1806 of yacc.c */ 6837 #line 1409 "parser.yy" 6838 { (yyval.decl) = (yyvsp[(3) - (4)].decl); } 6839 break; 6840 6841 case 343: 6842 6843 /* Line 1806 of yacc.c */ 6844 #line 1411 "parser.yy" 6845 { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); } 6846 break; 6847 6848 case 344: 6849 6850 /* Line 1806 of yacc.c */ 6851 #line 1413 "parser.yy" 6852 { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); } 6853 break; 6854 6855 case 345: 6856 6857 /* Line 1806 of yacc.c */ 6858 #line 1415 "parser.yy" 6859 { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); } 6860 break; 6861 6862 case 347: 6863 6864 /* Line 1806 of yacc.c */ 6865 #line 1421 "parser.yy" 7046 6866 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 7047 6867 break; 7048 6868 7049 case 3 37:7050 7051 /* Line 1806 of yacc.c */ 7052 #line 1 375"parser.yy"6869 case 348: 6870 6871 /* Line 1806 of yacc.c */ 6872 #line 1423 "parser.yy" 7053 6873 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 7054 6874 break; 7055 6875 7056 case 3 38:7057 7058 /* Line 1806 of yacc.c */ 7059 #line 1 377"parser.yy"6876 case 349: 6877 6878 /* Line 1806 of yacc.c */ 6879 #line 1425 "parser.yy" 7060 6880 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); } 7061 6881 break; 7062 6882 7063 case 339:7064 7065 /* Line 1806 of yacc.c */7066 #line 1379 "parser.yy"7067 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }7068 break;7069 7070 case 341:7071 7072 /* Line 1806 of yacc.c */7073 #line 1385 "parser.yy"7074 { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }7075 break;7076 7077 case 343:7078 7079 /* Line 1806 of yacc.c */7080 #line 1392 "parser.yy"7081 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }7082 break;7083 7084 case 344:7085 7086 /* Line 1806 of yacc.c */7087 #line 1394 "parser.yy"7088 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }7089 break;7090 7091 case 345:7092 7093 /* Line 1806 of yacc.c */7094 #line 1396 "parser.yy"7095 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }7096 break;7097 7098 case 346:7099 7100 /* Line 1806 of yacc.c */7101 #line 1401 "parser.yy"7102 { (yyval.decl) = (yyvsp[(3) - (4)].decl); }7103 break;7104 7105 case 347:7106 7107 /* Line 1806 of yacc.c */7108 #line 1403 "parser.yy"7109 { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }7110 break;7111 7112 case 348:7113 7114 /* Line 1806 of yacc.c */7115 #line 1405 "parser.yy"7116 { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }7117 break;7118 7119 case 349:7120 7121 /* Line 1806 of yacc.c */7122 #line 1407 "parser.yy"7123 { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }7124 break;7125 7126 6883 case 351: 7127 7128 /* Line 1806 of yacc.c */7129 #line 1413 "parser.yy"7130 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }7131 break;7132 7133 case 352:7134 7135 /* Line 1806 of yacc.c */7136 #line 1415 "parser.yy"7137 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }7138 break;7139 7140 case 353:7141 7142 /* Line 1806 of yacc.c */7143 #line 1417 "parser.yy"7144 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }7145 break;7146 7147 case 355:7148 7149 /* Line 1806 of yacc.c */7150 #line 1423 "parser.yy"7151 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }7152 break;7153 7154 case 356:7155 7156 /* Line 1806 of yacc.c */7157 #line 1425 "parser.yy"7158 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }7159 break;7160 7161 case 358:7162 6884 7163 6885 /* Line 1806 of yacc.c */ … … 7166 6888 break; 7167 6889 7168 case 35 9:6890 case 352: 7169 6891 7170 6892 /* Line 1806 of yacc.c */ … … 7173 6895 break; 7174 6896 7175 case 360: 7176 7177 /* Line 1806 of yacc.c */ 7178 #line 1435 "parser.yy" 6897 case 354: 6898 6899 /* Line 1806 of yacc.c */ 6900 #line 1439 "parser.yy" 6901 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 6902 break; 6903 6904 case 355: 6905 6906 /* Line 1806 of yacc.c */ 6907 #line 1441 "parser.yy" 6908 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6909 break; 6910 6911 case 356: 6912 6913 /* Line 1806 of yacc.c */ 6914 #line 1443 "parser.yy" 7179 6915 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); } 7180 6916 break; 7181 6917 7182 case 3 61:7183 7184 /* Line 1806 of yacc.c */ 7185 #line 144 0"parser.yy"6918 case 357: 6919 6920 /* Line 1806 of yacc.c */ 6921 #line 1448 "parser.yy" 7186 6922 { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); } 7187 6923 break; 7188 6924 6925 case 358: 6926 6927 /* Line 1806 of yacc.c */ 6928 #line 1450 "parser.yy" 6929 { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 6930 break; 6931 6932 case 359: 6933 6934 /* Line 1806 of yacc.c */ 6935 #line 1452 "parser.yy" 6936 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6937 break; 6938 7189 6939 case 362: 7190 6940 7191 6941 /* Line 1806 of yacc.c */ 7192 #line 14 42 "parser.yy"7193 { (yyval.decl) = DeclarationNode::new FromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl)); }6942 #line 1462 "parser.yy" 6943 { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl), true ); } 7194 6944 break; 7195 6945 … … 7197 6947 7198 6948 /* Line 1806 of yacc.c */ 7199 #line 1444 "parser.yy" 7200 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 7201 break; 7202 7203 case 366: 7204 7205 /* Line 1806 of yacc.c */ 7206 #line 1454 "parser.yy" 7207 { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl), true ); } 7208 break; 7209 7210 case 367: 7211 7212 /* Line 1806 of yacc.c */ 7213 #line 1456 "parser.yy" 6949 #line 1464 "parser.yy" 7214 6950 { 7215 6951 typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); … … 7218 6954 break; 7219 6955 6956 case 364: 6957 6958 /* Line 1806 of yacc.c */ 6959 #line 1469 "parser.yy" 6960 { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); } 6961 break; 6962 6963 case 365: 6964 6965 /* Line 1806 of yacc.c */ 6966 #line 1471 "parser.yy" 6967 { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl), true ); } 6968 break; 6969 6970 case 366: 6971 6972 /* Line 1806 of yacc.c */ 6973 #line 1473 "parser.yy" 6974 { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl), false ); } 6975 break; 6976 6977 case 367: 6978 6979 /* Line 1806 of yacc.c */ 6980 #line 1475 "parser.yy" 6981 { (yyval.decl) = (yyvsp[(2) - (2)].decl); } 6982 break; 6983 7220 6984 case 368: 7221 6985 7222 6986 /* Line 1806 of yacc.c */ 7223 #line 14 61"parser.yy"7224 { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }6987 #line 1480 "parser.yy" 6988 { (yyval.aggKey) = DeclarationNode::Struct; } 7225 6989 break; 7226 6990 … … 7228 6992 7229 6993 /* Line 1806 of yacc.c */ 7230 #line 14 63"parser.yy"7231 { (yyval. decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl), true ); }6994 #line 1482 "parser.yy" 6995 { (yyval.aggKey) = DeclarationNode::Union; } 7232 6996 break; 7233 6997 … … 7235 6999 7236 7000 /* Line 1806 of yacc.c */ 7237 #line 14 65"parser.yy"7238 { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl), false ); }7001 #line 1487 "parser.yy" 7002 { (yyval.decl) = 0; } 7239 7003 break; 7240 7004 … … 7242 7006 7243 7007 /* Line 1806 of yacc.c */ 7244 #line 1467 "parser.yy" 7245 { (yyval.decl) = (yyvsp[(2) - (2)].decl); } 7246 break; 7247 7248 case 372: 7249 7250 /* Line 1806 of yacc.c */ 7251 #line 1472 "parser.yy" 7252 { (yyval.aggKey) = DeclarationNode::Struct; } 7008 #line 1489 "parser.yy" 7009 { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); } 7253 7010 break; 7254 7011 … … 7256 7013 7257 7014 /* Line 1806 of yacc.c */ 7258 #line 1474 "parser.yy" 7259 { (yyval.aggKey) = DeclarationNode::Union; } 7260 break; 7261 7262 case 374: 7263 7264 /* Line 1806 of yacc.c */ 7265 #line 1479 "parser.yy" 7266 { (yyval.decl) = 0; } 7015 #line 1495 "parser.yy" 7016 { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); } 7267 7017 break; 7268 7018 … … 7270 7020 7271 7021 /* Line 1806 of yacc.c */ 7272 #line 1481 "parser.yy" 7273 { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); } 7274 break; 7275 7276 case 377: 7277 7278 /* Line 1806 of yacc.c */ 7279 #line 1487 "parser.yy" 7280 { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); } 7281 break; 7282 7283 case 379: 7284 7285 /* Line 1806 of yacc.c */ 7286 #line 1490 "parser.yy" 7022 #line 1498 "parser.yy" 7287 7023 { // mark all fields in list 7288 for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_ link() )7024 for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_next() ) 7289 7025 iter->set_extension( true ); 7290 7026 (yyval.decl) = (yyvsp[(2) - (3)].decl); … … 7292 7028 break; 7293 7029 7030 case 377: 7031 7032 /* Line 1806 of yacc.c */ 7033 #line 1508 "parser.yy" 7034 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); } 7035 break; 7036 7037 case 378: 7038 7039 /* Line 1806 of yacc.c */ 7040 #line 1510 "parser.yy" 7041 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); } 7042 break; 7043 7044 case 379: 7045 7046 /* Line 1806 of yacc.c */ 7047 #line 1512 "parser.yy" 7048 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); } 7049 break; 7050 7051 case 380: 7052 7053 /* Line 1806 of yacc.c */ 7054 #line 1517 "parser.yy" 7055 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); } 7056 break; 7057 7294 7058 case 381: 7295 7059 7296 7060 /* Line 1806 of yacc.c */ 7297 #line 15 00"parser.yy"7298 { (yyval.decl) = (yyvsp[(1) - ( 2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }7061 #line 1519 "parser.yy" 7062 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); } 7299 7063 break; 7300 7064 … … 7302 7066 7303 7067 /* Line 1806 of yacc.c */ 7304 #line 15 02"parser.yy"7305 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) );}7068 #line 1524 "parser.yy" 7069 { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ } 7306 7070 break; 7307 7071 … … 7309 7073 7310 7074 /* Line 1806 of yacc.c */ 7311 #line 15 04"parser.yy"7312 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0) ); }7075 #line 1526 "parser.yy" 7076 { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); } 7313 7077 break; 7314 7078 … … 7316 7080 7317 7081 /* Line 1806 of yacc.c */ 7318 #line 15 09 "parser.yy"7319 { (yyval.decl) = (yyvsp[( 2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }7082 #line 1529 "parser.yy" 7083 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); } 7320 7084 break; 7321 7085 … … 7323 7087 7324 7088 /* Line 1806 of yacc.c */ 7325 #line 1511 "parser.yy" 7326 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); } 7327 break; 7328 7329 case 386: 7330 7331 /* Line 1806 of yacc.c */ 7332 #line 1516 "parser.yy" 7333 { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ } 7089 #line 1532 "parser.yy" 7090 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); } 7334 7091 break; 7335 7092 … … 7337 7094 7338 7095 /* Line 1806 of yacc.c */ 7339 #line 15 18 "parser.yy"7340 { (yyval. decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }7096 #line 1538 "parser.yy" 7097 { (yyval.en) = 0; } 7341 7098 break; 7342 7099 … … 7344 7101 7345 7102 /* Line 1806 of yacc.c */ 7346 #line 15 21"parser.yy"7347 { (yyval. decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en)); }7103 #line 1540 "parser.yy" 7104 { (yyval.en) = (yyvsp[(1) - (1)].en); } 7348 7105 break; 7349 7106 … … 7351 7108 7352 7109 /* Line 1806 of yacc.c */ 7353 #line 15 24"parser.yy"7354 { (yyval. decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en)); }7110 #line 1545 "parser.yy" 7111 { (yyval.en) = (yyvsp[(2) - (2)].en); } 7355 7112 break; 7356 7113 … … 7358 7115 7359 7116 /* Line 1806 of yacc.c */ 7360 #line 15 30"parser.yy"7361 { (yyval. en) = 0; }7117 #line 1554 "parser.yy" 7118 { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); } 7362 7119 break; 7363 7120 … … 7365 7122 7366 7123 /* Line 1806 of yacc.c */ 7367 #line 1532 "parser.yy" 7368 { (yyval.en) = (yyvsp[(1) - (1)].en); } 7369 break; 7370 7371 case 393: 7372 7373 /* Line 1806 of yacc.c */ 7374 #line 1537 "parser.yy" 7375 { (yyval.en) = (yyvsp[(2) - (2)].en); } 7376 break; 7377 7378 case 395: 7379 7380 /* Line 1806 of yacc.c */ 7381 #line 1546 "parser.yy" 7382 { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); } 7383 break; 7384 7385 case 396: 7386 7387 /* Line 1806 of yacc.c */ 7388 #line 1548 "parser.yy" 7124 #line 1556 "parser.yy" 7389 7125 { 7390 7126 typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); … … 7393 7129 break; 7394 7130 7131 case 393: 7132 7133 /* Line 1806 of yacc.c */ 7134 #line 1561 "parser.yy" 7135 { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); } 7136 break; 7137 7138 case 394: 7139 7140 /* Line 1806 of yacc.c */ 7141 #line 1563 "parser.yy" 7142 { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); } 7143 break; 7144 7145 case 395: 7146 7147 /* Line 1806 of yacc.c */ 7148 #line 1568 "parser.yy" 7149 { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); } 7150 break; 7151 7152 case 396: 7153 7154 /* Line 1806 of yacc.c */ 7155 #line 1570 "parser.yy" 7156 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); } 7157 break; 7158 7395 7159 case 397: 7396 7160 7397 7161 /* Line 1806 of yacc.c */ 7398 #line 15 53"parser.yy"7399 { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }7162 #line 1575 "parser.yy" 7163 { (yyval.en) = 0; } 7400 7164 break; 7401 7165 … … 7403 7167 7404 7168 /* Line 1806 of yacc.c */ 7405 #line 15 55"parser.yy"7406 { (yyval. decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl)); }7169 #line 1577 "parser.yy" 7170 { (yyval.en) = (yyvsp[(2) - (2)].en); } 7407 7171 break; 7408 7172 … … 7410 7174 7411 7175 /* Line 1806 of yacc.c */ 7412 #line 1560 "parser.yy" 7413 { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); } 7414 break; 7415 7416 case 400: 7417 7418 /* Line 1806 of yacc.c */ 7419 #line 1562 "parser.yy" 7420 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); } 7421 break; 7422 7423 case 401: 7424 7425 /* Line 1806 of yacc.c */ 7426 #line 1567 "parser.yy" 7427 { (yyval.en) = 0; } 7428 break; 7429 7430 case 402: 7431 7432 /* Line 1806 of yacc.c */ 7433 #line 1569 "parser.yy" 7434 { (yyval.en) = (yyvsp[(2) - (2)].en); } 7176 #line 1584 "parser.yy" 7177 { (yyval.decl) = 0; } 7435 7178 break; 7436 7179 … … 7438 7181 7439 7182 /* Line 1806 of yacc.c */ 7440 #line 1576 "parser.yy" 7441 { (yyval.decl) = 0; } 7183 #line 1592 "parser.yy" 7184 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7185 break; 7186 7187 case 404: 7188 7189 /* Line 1806 of yacc.c */ 7190 #line 1594 "parser.yy" 7191 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); } 7192 break; 7193 7194 case 405: 7195 7196 /* Line 1806 of yacc.c */ 7197 #line 1596 "parser.yy" 7198 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); } 7442 7199 break; 7443 7200 … … 7445 7202 7446 7203 /* Line 1806 of yacc.c */ 7447 #line 1 584 "parser.yy"7204 #line 1604 "parser.yy" 7448 7205 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7449 7206 break; 7450 7207 7451 7208 case 408: 7452 7453 /* Line 1806 of yacc.c */7454 #line 1586 "parser.yy"7455 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }7456 break;7457 7458 case 409:7459 7460 /* Line 1806 of yacc.c */7461 #line 1588 "parser.yy"7462 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }7463 break;7464 7465 case 411:7466 7467 /* Line 1806 of yacc.c */7468 #line 1596 "parser.yy"7469 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }7470 break;7471 7472 case 412:7473 7474 /* Line 1806 of yacc.c */7475 #line 1598 "parser.yy"7476 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }7477 break;7478 7479 case 413:7480 7481 /* Line 1806 of yacc.c */7482 #line 1600 "parser.yy"7483 { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }7484 break;7485 7486 case 415:7487 7209 7488 7210 /* Line 1806 of yacc.c */ … … 7491 7213 break; 7492 7214 7493 case 416: 7494 7495 /* Line 1806 of yacc.c */ 7496 #line 1611 "parser.yy" 7215 case 409: 7216 7217 /* Line 1806 of yacc.c */ 7218 #line 1608 "parser.yy" 7219 { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); } 7220 break; 7221 7222 case 411: 7223 7224 /* Line 1806 of yacc.c */ 7225 #line 1614 "parser.yy" 7226 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7227 break; 7228 7229 case 412: 7230 7231 /* Line 1806 of yacc.c */ 7232 #line 1619 "parser.yy" 7497 7233 { (yyval.decl) = 0; } 7498 7234 break; 7499 7235 7236 case 415: 7237 7238 /* Line 1806 of yacc.c */ 7239 #line 1626 "parser.yy" 7240 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); } 7241 break; 7242 7243 case 418: 7244 7245 /* Line 1806 of yacc.c */ 7246 #line 1633 "parser.yy" 7247 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7248 break; 7249 7500 7250 case 419: 7501 7251 7502 7252 /* Line 1806 of yacc.c */ 7503 #line 1618 "parser.yy" 7504 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); } 7253 #line 1635 "parser.yy" 7254 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7255 break; 7256 7257 case 421: 7258 7259 /* Line 1806 of yacc.c */ 7260 #line 1644 "parser.yy" 7261 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); } 7505 7262 break; 7506 7263 … … 7508 7265 7509 7266 /* Line 1806 of yacc.c */ 7510 #line 16 25"parser.yy"7511 { (yyval.decl) = (yyvsp[(1) - ( 5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }7267 #line 1647 "parser.yy" 7268 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); } 7512 7269 break; 7513 7270 … … 7515 7272 7516 7273 /* Line 1806 of yacc.c */ 7517 #line 1627 "parser.yy" 7518 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7519 break; 7520 7521 case 425: 7522 7523 /* Line 1806 of yacc.c */ 7524 #line 1636 "parser.yy" 7525 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); } 7526 break; 7527 7528 case 426: 7529 7530 /* Line 1806 of yacc.c */ 7531 #line 1639 "parser.yy" 7532 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); } 7533 break; 7534 7535 case 427: 7536 7537 /* Line 1806 of yacc.c */ 7538 #line 1641 "parser.yy" 7274 #line 1649 "parser.yy" 7539 7275 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); } 7540 7276 break; 7541 7277 7542 case 4 32:7543 7544 /* Line 1806 of yacc.c */ 7545 #line 165 1"parser.yy"7278 case 428: 7279 7280 /* Line 1806 of yacc.c */ 7281 #line 1659 "parser.yy" 7546 7282 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 7547 7283 break; 7548 7284 7549 case 43 4:7550 7551 /* Line 1806 of yacc.c */ 7552 #line 16 57"parser.yy"7285 case 430: 7286 7287 /* Line 1806 of yacc.c */ 7288 #line 1665 "parser.yy" 7553 7289 { 7554 7290 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7557 7293 break; 7558 7294 7559 case 43 5:7560 7561 /* Line 1806 of yacc.c */ 7562 #line 16 62"parser.yy"7295 case 431: 7296 7297 /* Line 1806 of yacc.c */ 7298 #line 1670 "parser.yy" 7563 7299 { 7564 7300 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7567 7303 break; 7568 7304 7569 case 43 7:7570 7571 /* Line 1806 of yacc.c */ 7572 #line 167 1"parser.yy"7305 case 433: 7306 7307 /* Line 1806 of yacc.c */ 7308 #line 1679 "parser.yy" 7573 7309 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); } 7574 7310 break; 7575 7311 7576 case 43 8:7577 7578 /* Line 1806 of yacc.c */ 7579 #line 168 0"parser.yy"7312 case 434: 7313 7314 /* Line 1806 of yacc.c */ 7315 #line 1688 "parser.yy" 7580 7316 { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); } 7581 7317 break; 7582 7318 7583 case 43 9:7584 7585 /* Line 1806 of yacc.c */ 7586 #line 16 82"parser.yy"7319 case 435: 7320 7321 /* Line 1806 of yacc.c */ 7322 #line 1690 "parser.yy" 7587 7323 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); } 7588 7324 break; 7589 7325 7590 case 451: 7591 7592 /* Line 1806 of yacc.c */ 7593 #line 1707 "parser.yy" 7594 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); } 7595 break; 7596 7597 case 455: 7326 case 447: 7598 7327 7599 7328 /* Line 1806 of yacc.c */ … … 7602 7331 break; 7603 7332 7333 case 451: 7334 7335 /* Line 1806 of yacc.c */ 7336 #line 1723 "parser.yy" 7337 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); } 7338 break; 7339 7340 case 452: 7341 7342 /* Line 1806 of yacc.c */ 7343 #line 1728 "parser.yy" 7344 { (yyval.in) = 0; } 7345 break; 7346 7347 case 453: 7348 7349 /* Line 1806 of yacc.c */ 7350 #line 1730 "parser.yy" 7351 { (yyval.in) = (yyvsp[(2) - (2)].in); } 7352 break; 7353 7354 case 454: 7355 7356 /* Line 1806 of yacc.c */ 7357 #line 1732 "parser.yy" 7358 { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); } 7359 break; 7360 7361 case 455: 7362 7363 /* Line 1806 of yacc.c */ 7364 #line 1736 "parser.yy" 7365 { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); } 7366 break; 7367 7604 7368 case 456: 7605 7369 7606 7370 /* Line 1806 of yacc.c */ 7607 #line 1720 "parser.yy" 7371 #line 1737 "parser.yy" 7372 { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); } 7373 break; 7374 7375 case 457: 7376 7377 /* Line 1806 of yacc.c */ 7378 #line 1742 "parser.yy" 7608 7379 { (yyval.in) = 0; } 7609 7380 break; 7610 7381 7611 case 457:7612 7613 /* Line 1806 of yacc.c */7614 #line 1722 "parser.yy"7615 { (yyval.in) = (yyvsp[(2) - (2)].in); }7616 break;7617 7618 case 458:7619 7620 /* Line 1806 of yacc.c */7621 #line 1724 "parser.yy"7622 { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }7623 break;7624 7625 7382 case 459: 7626 7383 7627 7384 /* Line 1806 of yacc.c */ 7628 #line 17 28"parser.yy"7629 { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }7385 #line 1744 "parser.yy" 7386 { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); } 7630 7387 break; 7631 7388 … … 7633 7390 7634 7391 /* Line 1806 of yacc.c */ 7635 #line 17 29"parser.yy"7636 { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true); }7392 #line 1745 "parser.yy" 7393 { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_last( (yyvsp[(3) - (3)].in) ) ); } 7637 7394 break; 7638 7395 … … 7640 7397 7641 7398 /* Line 1806 of yacc.c */ 7642 #line 17 34"parser.yy"7643 { (yyval.in) = 0; }7399 #line 1747 "parser.yy" 7400 { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_last( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); } 7644 7401 break; 7645 7402 … … 7647 7404 7648 7405 /* Line 1806 of yacc.c */ 7649 #line 1736 "parser.yy" 7650 { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); } 7651 break; 7652 7653 case 464: 7654 7655 /* Line 1806 of yacc.c */ 7656 #line 1737 "parser.yy" 7657 { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); } 7406 #line 1763 "parser.yy" 7407 { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (2)].tok) ) ); } 7658 7408 break; 7659 7409 … … 7661 7411 7662 7412 /* Line 1806 of yacc.c */ 7663 #line 1739 "parser.yy" 7664 { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); } 7413 #line 1769 "parser.yy" 7414 { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_last( (yyvsp[(2) - (2)].en) ) ); } 7415 break; 7416 7417 case 466: 7418 7419 /* Line 1806 of yacc.c */ 7420 #line 1775 "parser.yy" 7421 { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(2) - (2)].tok) ) ); } 7665 7422 break; 7666 7423 … … 7668 7425 7669 7426 /* Line 1806 of yacc.c */ 7670 #line 1755 "parser.yy" 7671 { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); } 7427 #line 1778 "parser.yy" 7428 { (yyval.en) = (yyvsp[(3) - (5)].en); } 7429 break; 7430 7431 case 468: 7432 7433 /* Line 1806 of yacc.c */ 7434 #line 1780 "parser.yy" 7435 { (yyval.en) = (yyvsp[(3) - (5)].en); } 7672 7436 break; 7673 7437 … … 7675 7439 7676 7440 /* Line 1806 of yacc.c */ 7677 #line 17 61"parser.yy"7678 { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }7441 #line 1782 "parser.yy" 7442 { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ) ); } 7679 7443 break; 7680 7444 … … 7682 7446 7683 7447 /* Line 1806 of yacc.c */ 7684 #line 1769 "parser.yy" 7685 { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); } 7686 break; 7687 7688 case 471: 7689 7690 /* Line 1806 of yacc.c */ 7691 #line 1771 "parser.yy" 7692 { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); } 7448 #line 1784 "parser.yy" 7449 { (yyval.en) = (yyvsp[(4) - (6)].en); } 7693 7450 break; 7694 7451 … … 7696 7453 7697 7454 /* Line 1806 of yacc.c */ 7698 #line 1 774"parser.yy"7699 { (yyval. en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true); }7455 #line 1808 "parser.yy" 7456 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 7700 7457 break; 7701 7458 … … 7703 7460 7704 7461 /* Line 1806 of yacc.c */ 7705 #line 1 776"parser.yy"7706 { (yyval. en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true); }7462 #line 1810 "parser.yy" 7463 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 7707 7464 break; 7708 7465 … … 7710 7467 7711 7468 /* Line 1806 of yacc.c */ 7712 #line 1 778"parser.yy"7713 { (yyval. en) = new DesignatorNode( new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ), true); }7714 break; 7715 7716 case 47 5:7717 7718 /* Line 1806 of yacc.c */ 7719 #line 1 780"parser.yy"7720 { (yyval. en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); }7469 #line 1812 "parser.yy" 7470 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); } 7471 break; 7472 7473 case 476: 7474 7475 /* Line 1806 of yacc.c */ 7476 #line 1818 "parser.yy" 7477 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 7721 7478 break; 7722 7479 … … 7724 7481 7725 7482 /* Line 1806 of yacc.c */ 7726 #line 18 04"parser.yy"7727 { (yyval.decl) = (yyvsp[( 2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }7483 #line 1820 "parser.yy" 7484 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 7728 7485 break; 7729 7486 … … 7731 7488 7732 7489 /* Line 1806 of yacc.c */ 7733 #line 18 06"parser.yy"7734 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }7735 break; 7736 7737 case 4 79:7738 7739 /* Line 1806 of yacc.c */ 7740 #line 18 08"parser.yy"7741 { (yyval.decl) = (yyvsp[(1) - ( 3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }7490 #line 1825 "parser.yy" 7491 { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); } 7492 break; 7493 7494 case 480: 7495 7496 /* Line 1806 of yacc.c */ 7497 #line 1831 "parser.yy" 7498 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); } 7742 7499 break; 7743 7500 … … 7745 7502 7746 7503 /* Line 1806 of yacc.c */ 7747 #line 18 14"parser.yy"7748 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl)); }7504 #line 1836 "parser.yy" 7505 { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); } 7749 7506 break; 7750 7507 … … 7752 7509 7753 7510 /* Line 1806 of yacc.c */ 7754 #line 18 16"parser.yy"7755 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }7756 break; 7757 7758 case 48 3:7759 7760 /* Line 1806 of yacc.c */ 7761 #line 18 21"parser.yy"7762 { (yyval. decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }7511 #line 1838 "parser.yy" 7512 { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); } 7513 break; 7514 7515 case 484: 7516 7517 /* Line 1806 of yacc.c */ 7518 #line 1844 "parser.yy" 7519 { (yyval.tclass) = DeclarationNode::Type; } 7763 7520 break; 7764 7521 … … 7766 7523 7767 7524 /* Line 1806 of yacc.c */ 7768 #line 18 27"parser.yy"7769 { (yyval. decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }7525 #line 1846 "parser.yy" 7526 { (yyval.tclass) = DeclarationNode::Ftype; } 7770 7527 break; 7771 7528 … … 7773 7530 7774 7531 /* Line 1806 of yacc.c */ 7775 #line 18 32"parser.yy"7776 { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }7532 #line 1848 "parser.yy" 7533 { (yyval.tclass) = DeclarationNode::Dtype; } 7777 7534 break; 7778 7535 … … 7780 7537 7781 7538 /* Line 1806 of yacc.c */ 7782 #line 1834 "parser.yy" 7783 { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); } 7539 #line 1853 "parser.yy" 7540 { (yyval.decl) = 0; } 7541 break; 7542 7543 case 488: 7544 7545 /* Line 1806 of yacc.c */ 7546 #line 1855 "parser.yy" 7547 { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); } 7784 7548 break; 7785 7549 … … 7787 7551 7788 7552 /* Line 1806 of yacc.c */ 7789 #line 1840 "parser.yy" 7790 { (yyval.tclass) = DeclarationNode::Type; } 7791 break; 7792 7793 case 490: 7794 7795 /* Line 1806 of yacc.c */ 7796 #line 1842 "parser.yy" 7797 { (yyval.tclass) = DeclarationNode::Ftype; } 7798 break; 7799 7800 case 491: 7801 7802 /* Line 1806 of yacc.c */ 7803 #line 1844 "parser.yy" 7804 { (yyval.tclass) = DeclarationNode::Dtype; } 7805 break; 7806 7807 case 492: 7808 7809 /* Line 1806 of yacc.c */ 7810 #line 1849 "parser.yy" 7811 { (yyval.decl) = 0; } 7812 break; 7813 7814 case 493: 7815 7816 /* Line 1806 of yacc.c */ 7817 #line 1851 "parser.yy" 7818 { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); } 7819 break; 7820 7821 case 494: 7822 7823 /* Line 1806 of yacc.c */ 7824 #line 1856 "parser.yy" 7553 #line 1860 "parser.yy" 7825 7554 { 7826 7555 typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) ); … … 7829 7558 break; 7830 7559 7560 case 490: 7561 7562 /* Line 1806 of yacc.c */ 7563 #line 1865 "parser.yy" 7564 { (yyval.decl) = (yyvsp[(4) - (5)].decl); } 7565 break; 7566 7567 case 491: 7568 7569 /* Line 1806 of yacc.c */ 7570 #line 1867 "parser.yy" 7571 { (yyval.decl) = 0; } 7572 break; 7573 7574 case 492: 7575 7576 /* Line 1806 of yacc.c */ 7577 #line 1872 "parser.yy" 7578 { (yyval.en) = new ExpressionNode( build_typevalue( (yyvsp[(1) - (1)].decl) ) ); } 7579 break; 7580 7581 case 494: 7582 7583 /* Line 1806 of yacc.c */ 7584 #line 1875 "parser.yy" 7585 { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( build_typevalue( (yyvsp[(3) - (3)].decl) ) ) ) ); } 7586 break; 7587 7831 7588 case 495: 7832 7589 7833 7590 /* Line 1806 of yacc.c */ 7834 #line 18 61"parser.yy"7835 { (yyval. decl) = (yyvsp[(4) - (5)].decl); }7591 #line 1877 "parser.yy" 7592 { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); } 7836 7593 break; 7837 7594 … … 7839 7596 7840 7597 /* Line 1806 of yacc.c */ 7841 #line 18 63"parser.yy"7842 { (yyval.decl) = 0; }7598 #line 1882 "parser.yy" 7599 { (yyval.decl) = (yyvsp[(2) - (2)].decl); } 7843 7600 break; 7844 7601 … … 7846 7603 7847 7604 /* Line 1806 of yacc.c */ 7848 #line 1868 "parser.yy" 7849 { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); } 7605 #line 1884 "parser.yy" 7606 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); } 7607 break; 7608 7609 case 498: 7610 7611 /* Line 1806 of yacc.c */ 7612 #line 1886 "parser.yy" 7613 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); } 7850 7614 break; 7851 7615 … … 7853 7617 7854 7618 /* Line 1806 of yacc.c */ 7855 #line 18 71 "parser.yy"7856 { (yyval. en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); }7619 #line 1891 "parser.yy" 7620 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); } 7857 7621 break; 7858 7622 … … 7860 7624 7861 7625 /* Line 1806 of yacc.c */ 7862 #line 18 73 "parser.yy"7863 { (yyval. en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }7626 #line 1893 "parser.yy" 7627 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); } 7864 7628 break; 7865 7629 … … 7867 7631 7868 7632 /* Line 1806 of yacc.c */ 7869 #line 1878 "parser.yy" 7870 { (yyval.decl) = (yyvsp[(2) - (2)].decl); } 7871 break; 7872 7873 case 502: 7874 7875 /* Line 1806 of yacc.c */ 7876 #line 1880 "parser.yy" 7877 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); } 7878 break; 7879 7880 case 503: 7881 7882 /* Line 1806 of yacc.c */ 7883 #line 1882 "parser.yy" 7884 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); } 7885 break; 7886 7887 case 504: 7888 7889 /* Line 1806 of yacc.c */ 7890 #line 1887 "parser.yy" 7891 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); } 7892 break; 7893 7894 case 505: 7895 7896 /* Line 1806 of yacc.c */ 7897 #line 1889 "parser.yy" 7898 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); } 7899 break; 7900 7901 case 506: 7902 7903 /* Line 1806 of yacc.c */ 7904 #line 1894 "parser.yy" 7633 #line 1898 "parser.yy" 7905 7634 { 7906 7635 typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD ); … … 7909 7638 break; 7910 7639 7911 case 50 7:7912 7913 /* Line 1806 of yacc.c */ 7914 #line 1 899"parser.yy"7640 case 502: 7641 7642 /* Line 1806 of yacc.c */ 7643 #line 1903 "parser.yy" 7915 7644 { 7916 7645 typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG ); … … 7919 7648 break; 7920 7649 7921 case 50 8:7922 7923 /* Line 1806 of yacc.c */ 7924 #line 19 07"parser.yy"7650 case 503: 7651 7652 /* Line 1806 of yacc.c */ 7653 #line 1911 "parser.yy" 7925 7654 { 7926 7655 typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID ); … … 7929 7658 break; 7930 7659 7931 case 50 9:7932 7933 /* Line 1806 of yacc.c */ 7934 #line 191 2"parser.yy"7660 case 504: 7661 7662 /* Line 1806 of yacc.c */ 7663 #line 1916 "parser.yy" 7935 7664 { 7936 7665 typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) ); … … 7939 7668 break; 7940 7669 7941 case 5 10:7942 7943 /* Line 1806 of yacc.c */ 7944 #line 19 17"parser.yy"7670 case 505: 7671 7672 /* Line 1806 of yacc.c */ 7673 #line 1921 "parser.yy" 7945 7674 { 7946 7675 typedefTable.leaveTrait(); … … 7950 7679 break; 7951 7680 7952 case 5 12:7953 7954 /* Line 1806 of yacc.c */ 7955 #line 19 27"parser.yy"7681 case 507: 7682 7683 /* Line 1806 of yacc.c */ 7684 #line 1931 "parser.yy" 7956 7685 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); } 7957 7686 break; 7958 7687 7959 case 51 5:7960 7961 /* Line 1806 of yacc.c */ 7962 #line 19 37"parser.yy"7688 case 510: 7689 7690 /* Line 1806 of yacc.c */ 7691 #line 1941 "parser.yy" 7963 7692 { 7964 7693 typedefTable.addToEnclosingScope2( TypedefTable::ID ); … … 7967 7696 break; 7968 7697 7969 case 51 6:7970 7971 /* Line 1806 of yacc.c */ 7972 #line 194 2"parser.yy"7698 case 511: 7699 7700 /* Line 1806 of yacc.c */ 7701 #line 1946 "parser.yy" 7973 7702 { 7974 7703 typedefTable.addToEnclosingScope2( TypedefTable::ID ); … … 7977 7706 break; 7978 7707 7979 case 51 7:7980 7981 /* Line 1806 of yacc.c */ 7982 #line 19 47"parser.yy"7708 case 512: 7709 7710 /* Line 1806 of yacc.c */ 7711 #line 1951 "parser.yy" 7983 7712 { 7984 7713 typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID ); … … 7987 7716 break; 7988 7717 7989 case 51 8:7990 7991 /* Line 1806 of yacc.c */ 7992 #line 195 5"parser.yy"7718 case 513: 7719 7720 /* Line 1806 of yacc.c */ 7721 #line 1959 "parser.yy" 7993 7722 { 7994 7723 typedefTable.addToEnclosingScope2( TypedefTable::ID ); … … 7997 7726 break; 7998 7727 7999 case 51 9:8000 8001 /* Line 1806 of yacc.c */ 8002 #line 196 0"parser.yy"7728 case 514: 7729 7730 /* Line 1806 of yacc.c */ 7731 #line 1964 "parser.yy" 8003 7732 { 8004 7733 typedefTable.addToEnclosingScope2( TypedefTable::ID ); … … 8007 7736 break; 8008 7737 8009 case 5 20:8010 8011 /* Line 1806 of yacc.c */ 8012 #line 197 0"parser.yy"7738 case 515: 7739 7740 /* Line 1806 of yacc.c */ 7741 #line 1974 "parser.yy" 8013 7742 {} 8014 7743 break; 8015 7744 8016 case 5 21:8017 8018 /* Line 1806 of yacc.c */ 8019 #line 197 2"parser.yy"7745 case 516: 7746 7747 /* Line 1806 of yacc.c */ 7748 #line 1976 "parser.yy" 8020 7749 { 8021 7750 if ( theTree ) { … … 8027 7756 break; 8028 7757 7758 case 518: 7759 7760 /* Line 1806 of yacc.c */ 7761 #line 1988 "parser.yy" 7762 { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); } 7763 break; 7764 7765 case 519: 7766 7767 /* Line 1806 of yacc.c */ 7768 #line 1993 "parser.yy" 7769 { (yyval.decl) = 0; } 7770 break; 7771 8029 7772 case 523: 8030 7773 8031 7774 /* Line 1806 of yacc.c */ 8032 #line 1984"parser.yy"8033 { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl);}7775 #line 2001 "parser.yy" 7776 {} 8034 7777 break; 8035 7778 … … 8037 7780 8038 7781 /* Line 1806 of yacc.c */ 8039 #line 1989 "parser.yy" 8040 { (yyval.decl) = 0; } 8041 break; 8042 8043 case 528: 8044 8045 /* Line 1806 of yacc.c */ 8046 #line 1997 "parser.yy" 8047 {} 8048 break; 8049 8050 case 529: 8051 8052 /* Line 1806 of yacc.c */ 8053 #line 1999 "parser.yy" 7782 #line 2003 "parser.yy" 8054 7783 { 8055 7784 linkageStack.push( linkage ); … … 8058 7787 break; 8059 7788 8060 case 5 30:8061 8062 /* Line 1806 of yacc.c */ 8063 #line 200 4"parser.yy"7789 case 525: 7790 7791 /* Line 1806 of yacc.c */ 7792 #line 2008 "parser.yy" 8064 7793 { 8065 7794 linkage = linkageStack.top(); … … 8069 7798 break; 8070 7799 8071 case 5 31:8072 8073 /* Line 1806 of yacc.c */ 8074 #line 201 0"parser.yy"7800 case 526: 7801 7802 /* Line 1806 of yacc.c */ 7803 #line 2014 "parser.yy" 8075 7804 { // mark all fields in list 8076 for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_ link() )7805 for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_next() ) 8077 7806 iter->set_extension( true ); 8078 7807 (yyval.decl) = (yyvsp[(2) - (2)].decl); … … 8080 7809 break; 8081 7810 8082 case 5 33:8083 8084 /* Line 1806 of yacc.c */ 8085 #line 202 5"parser.yy"7811 case 528: 7812 7813 /* Line 1806 of yacc.c */ 7814 #line 2029 "parser.yy" 8086 7815 { 8087 7816 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 8091 7820 break; 8092 7821 8093 case 5 34:8094 8095 /* Line 1806 of yacc.c */ 8096 #line 203 1"parser.yy"7822 case 529: 7823 7824 /* Line 1806 of yacc.c */ 7825 #line 2035 "parser.yy" 8097 7826 { 8098 7827 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 8102 7831 break; 8103 7832 8104 case 53 5:8105 8106 /* Line 1806 of yacc.c */ 8107 #line 204 0"parser.yy"7833 case 530: 7834 7835 /* Line 1806 of yacc.c */ 7836 #line 2044 "parser.yy" 8108 7837 { 8109 7838 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 8113 7842 break; 8114 7843 8115 case 53 6:8116 8117 /* Line 1806 of yacc.c */ 8118 #line 20 46"parser.yy"7844 case 531: 7845 7846 /* Line 1806 of yacc.c */ 7847 #line 2050 "parser.yy" 8119 7848 { 8120 7849 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 8124 7853 break; 8125 7854 8126 case 53 7:8127 8128 /* Line 1806 of yacc.c */ 8129 #line 205 2"parser.yy"7855 case 532: 7856 7857 /* Line 1806 of yacc.c */ 7858 #line 2056 "parser.yy" 8130 7859 { 8131 7860 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 8135 7864 break; 8136 7865 8137 case 53 8:8138 8139 /* Line 1806 of yacc.c */ 8140 #line 20 58"parser.yy"7866 case 533: 7867 7868 /* Line 1806 of yacc.c */ 7869 #line 2062 "parser.yy" 8141 7870 { 8142 7871 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 8146 7875 break; 8147 7876 8148 case 53 9:8149 8150 /* Line 1806 of yacc.c */ 8151 #line 206 4"parser.yy"7877 case 534: 7878 7879 /* Line 1806 of yacc.c */ 7880 #line 2068 "parser.yy" 8152 7881 { 8153 7882 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 8157 7886 break; 8158 7887 8159 case 5 40:8160 8161 /* Line 1806 of yacc.c */ 8162 #line 207 2"parser.yy"7888 case 535: 7889 7890 /* Line 1806 of yacc.c */ 7891 #line 2076 "parser.yy" 8163 7892 { 8164 7893 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 8168 7897 break; 8169 7898 8170 case 5 41:8171 8172 /* Line 1806 of yacc.c */ 8173 #line 20 78"parser.yy"7899 case 536: 7900 7901 /* Line 1806 of yacc.c */ 7902 #line 2082 "parser.yy" 8174 7903 { 8175 7904 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 8179 7908 break; 8180 7909 8181 case 5 42:8182 8183 /* Line 1806 of yacc.c */ 8184 #line 20 86"parser.yy"7910 case 537: 7911 7912 /* Line 1806 of yacc.c */ 7913 #line 2090 "parser.yy" 8185 7914 { 8186 7915 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 8190 7919 break; 8191 7920 8192 case 5 43:8193 8194 /* Line 1806 of yacc.c */ 8195 #line 209 2"parser.yy"7921 case 538: 7922 7923 /* Line 1806 of yacc.c */ 7924 #line 2096 "parser.yy" 8196 7925 { 8197 7926 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 8201 7930 break; 8202 7931 8203 case 54 7:8204 8205 /* Line 1806 of yacc.c */ 8206 #line 21 07"parser.yy"8207 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }8208 break; 8209 8210 case 5 50:8211 8212 /* Line 1806 of yacc.c */ 8213 #line 21 17"parser.yy"7932 case 542: 7933 7934 /* Line 1806 of yacc.c */ 7935 #line 2111 "parser.yy" 7936 { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); } 7937 break; 7938 7939 case 545: 7940 7941 /* Line 1806 of yacc.c */ 7942 #line 2121 "parser.yy" 8214 7943 { (yyval.decl) = 0; } 8215 7944 break; 8216 7945 8217 case 5 53:8218 8219 /* Line 1806 of yacc.c */ 8220 #line 212 4"parser.yy"7946 case 548: 7947 7948 /* Line 1806 of yacc.c */ 7949 #line 2128 "parser.yy" 8221 7950 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 8222 7951 break; 8223 7952 8224 case 5 54:8225 8226 /* Line 1806 of yacc.c */ 8227 #line 213 0"parser.yy"7953 case 549: 7954 7955 /* Line 1806 of yacc.c */ 7956 #line 2134 "parser.yy" 8228 7957 { (yyval.decl) = 0; } 8229 7958 break; 8230 7959 8231 case 5 60:8232 8233 /* Line 1806 of yacc.c */ 8234 #line 214 5"parser.yy"7960 case 555: 7961 7962 /* Line 1806 of yacc.c */ 7963 #line 2149 "parser.yy" 8235 7964 {} 8236 7965 break; 8237 7966 7967 case 556: 7968 7969 /* Line 1806 of yacc.c */ 7970 #line 2150 "parser.yy" 7971 {} 7972 break; 7973 7974 case 557: 7975 7976 /* Line 1806 of yacc.c */ 7977 #line 2151 "parser.yy" 7978 {} 7979 break; 7980 7981 case 558: 7982 7983 /* Line 1806 of yacc.c */ 7984 #line 2152 "parser.yy" 7985 {} 7986 break; 7987 7988 case 559: 7989 7990 /* Line 1806 of yacc.c */ 7991 #line 2187 "parser.yy" 7992 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 7993 break; 7994 8238 7995 case 561: 8239 7996 8240 7997 /* Line 1806 of yacc.c */ 8241 #line 21 46"parser.yy"8242 { }7998 #line 2190 "parser.yy" 7999 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8243 8000 break; 8244 8001 … … 8246 8003 8247 8004 /* Line 1806 of yacc.c */ 8248 #line 21 47"parser.yy"8249 { }8005 #line 2192 "parser.yy" 8006 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8250 8007 break; 8251 8008 … … 8253 8010 8254 8011 /* Line 1806 of yacc.c */ 8255 #line 2148 "parser.yy" 8256 {} 8257 break; 8258 8259 case 564: 8260 8261 /* Line 1806 of yacc.c */ 8262 #line 2183 "parser.yy" 8263 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8264 break; 8265 8266 case 566: 8267 8268 /* Line 1806 of yacc.c */ 8269 #line 2186 "parser.yy" 8270 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8271 break; 8272 8273 case 567: 8274 8275 /* Line 1806 of yacc.c */ 8276 #line 2188 "parser.yy" 8277 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8278 break; 8279 8280 case 568: 8281 8282 /* Line 1806 of yacc.c */ 8283 #line 2193 "parser.yy" 8012 #line 2197 "parser.yy" 8284 8013 { 8285 8014 typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) ); … … 8288 8017 break; 8289 8018 8019 case 564: 8020 8021 /* Line 1806 of yacc.c */ 8022 #line 2202 "parser.yy" 8023 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8024 break; 8025 8026 case 565: 8027 8028 /* Line 1806 of yacc.c */ 8029 #line 2207 "parser.yy" 8030 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8031 break; 8032 8033 case 566: 8034 8035 /* Line 1806 of yacc.c */ 8036 #line 2209 "parser.yy" 8037 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8038 break; 8039 8040 case 567: 8041 8042 /* Line 1806 of yacc.c */ 8043 #line 2211 "parser.yy" 8044 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8045 break; 8046 8047 case 568: 8048 8049 /* Line 1806 of yacc.c */ 8050 #line 2216 "parser.yy" 8051 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8052 break; 8053 8290 8054 case 569: 8291 8055 8292 8056 /* Line 1806 of yacc.c */ 8293 #line 2198 "parser.yy" 8057 #line 2218 "parser.yy" 8058 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8059 break; 8060 8061 case 570: 8062 8063 /* Line 1806 of yacc.c */ 8064 #line 2220 "parser.yy" 8065 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8066 break; 8067 8068 case 571: 8069 8070 /* Line 1806 of yacc.c */ 8071 #line 2222 "parser.yy" 8294 8072 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8295 8073 break; 8296 8074 8297 case 570: 8298 8299 /* Line 1806 of yacc.c */ 8300 #line 2203 "parser.yy" 8075 case 572: 8076 8077 /* Line 1806 of yacc.c */ 8078 #line 2227 "parser.yy" 8079 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8080 break; 8081 8082 case 573: 8083 8084 /* Line 1806 of yacc.c */ 8085 #line 2229 "parser.yy" 8086 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8087 break; 8088 8089 case 574: 8090 8091 /* Line 1806 of yacc.c */ 8092 #line 2238 "parser.yy" 8093 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8094 break; 8095 8096 case 576: 8097 8098 /* Line 1806 of yacc.c */ 8099 #line 2241 "parser.yy" 8100 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8101 break; 8102 8103 case 577: 8104 8105 /* Line 1806 of yacc.c */ 8106 #line 2246 "parser.yy" 8107 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); } 8108 break; 8109 8110 case 578: 8111 8112 /* Line 1806 of yacc.c */ 8113 #line 2248 "parser.yy" 8114 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8115 break; 8116 8117 case 579: 8118 8119 /* Line 1806 of yacc.c */ 8120 #line 2250 "parser.yy" 8121 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8122 break; 8123 8124 case 580: 8125 8126 /* Line 1806 of yacc.c */ 8127 #line 2255 "parser.yy" 8301 8128 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8302 8129 break; 8303 8130 8304 case 5 71:8305 8306 /* Line 1806 of yacc.c */ 8307 #line 22 05"parser.yy"8131 case 581: 8132 8133 /* Line 1806 of yacc.c */ 8134 #line 2257 "parser.yy" 8308 8135 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8309 8136 break; 8310 8137 8311 case 5 72:8312 8313 /* Line 1806 of yacc.c */ 8314 #line 22 07"parser.yy"8138 case 582: 8139 8140 /* Line 1806 of yacc.c */ 8141 #line 2259 "parser.yy" 8315 8142 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8316 8143 break; 8317 8144 8318 case 573: 8319 8320 /* Line 1806 of yacc.c */ 8321 #line 2212 "parser.yy" 8145 case 583: 8146 8147 /* Line 1806 of yacc.c */ 8148 #line 2264 "parser.yy" 8149 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8150 break; 8151 8152 case 584: 8153 8154 /* Line 1806 of yacc.c */ 8155 #line 2266 "parser.yy" 8156 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8157 break; 8158 8159 case 585: 8160 8161 /* Line 1806 of yacc.c */ 8162 #line 2268 "parser.yy" 8163 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8164 break; 8165 8166 case 589: 8167 8168 /* Line 1806 of yacc.c */ 8169 #line 2283 "parser.yy" 8170 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); } 8171 break; 8172 8173 case 590: 8174 8175 /* Line 1806 of yacc.c */ 8176 #line 2285 "parser.yy" 8177 { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); } 8178 break; 8179 8180 case 591: 8181 8182 /* Line 1806 of yacc.c */ 8183 #line 2287 "parser.yy" 8184 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8185 break; 8186 8187 case 592: 8188 8189 /* Line 1806 of yacc.c */ 8190 #line 2292 "parser.yy" 8191 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8192 break; 8193 8194 case 593: 8195 8196 /* Line 1806 of yacc.c */ 8197 #line 2294 "parser.yy" 8198 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8199 break; 8200 8201 case 594: 8202 8203 /* Line 1806 of yacc.c */ 8204 #line 2296 "parser.yy" 8205 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8206 break; 8207 8208 case 595: 8209 8210 /* Line 1806 of yacc.c */ 8211 #line 2301 "parser.yy" 8212 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8213 break; 8214 8215 case 596: 8216 8217 /* Line 1806 of yacc.c */ 8218 #line 2303 "parser.yy" 8219 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8220 break; 8221 8222 case 597: 8223 8224 /* Line 1806 of yacc.c */ 8225 #line 2305 "parser.yy" 8226 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8227 break; 8228 8229 case 598: 8230 8231 /* Line 1806 of yacc.c */ 8232 #line 2320 "parser.yy" 8233 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8234 break; 8235 8236 case 600: 8237 8238 /* Line 1806 of yacc.c */ 8239 #line 2323 "parser.yy" 8240 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8241 break; 8242 8243 case 601: 8244 8245 /* Line 1806 of yacc.c */ 8246 #line 2325 "parser.yy" 8247 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8248 break; 8249 8250 case 603: 8251 8252 /* Line 1806 of yacc.c */ 8253 #line 2331 "parser.yy" 8254 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8255 break; 8256 8257 case 604: 8258 8259 /* Line 1806 of yacc.c */ 8260 #line 2336 "parser.yy" 8261 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8262 break; 8263 8264 case 605: 8265 8266 /* Line 1806 of yacc.c */ 8267 #line 2338 "parser.yy" 8268 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8269 break; 8270 8271 case 606: 8272 8273 /* Line 1806 of yacc.c */ 8274 #line 2340 "parser.yy" 8275 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8276 break; 8277 8278 case 607: 8279 8280 /* Line 1806 of yacc.c */ 8281 #line 2345 "parser.yy" 8322 8282 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8323 8283 break; 8324 8284 8325 case 574:8326 8327 /* Line 1806 of yacc.c */ 8328 #line 2 214"parser.yy"8285 case 608: 8286 8287 /* Line 1806 of yacc.c */ 8288 #line 2347 "parser.yy" 8329 8289 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8330 8290 break; 8331 8291 8332 case 575:8333 8334 /* Line 1806 of yacc.c */ 8335 #line 2 216"parser.yy"8292 case 609: 8293 8294 /* Line 1806 of yacc.c */ 8295 #line 2349 "parser.yy" 8336 8296 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8337 8297 break; 8338 8298 8339 case 576:8340 8341 /* Line 1806 of yacc.c */ 8342 #line 2 218"parser.yy"8299 case 610: 8300 8301 /* Line 1806 of yacc.c */ 8302 #line 2351 "parser.yy" 8343 8303 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8344 8304 break; 8345 8305 8346 case 577: 8347 8348 /* Line 1806 of yacc.c */ 8349 #line 2223 "parser.yy" 8306 case 611: 8307 8308 /* Line 1806 of yacc.c */ 8309 #line 2356 "parser.yy" 8310 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); } 8311 break; 8312 8313 case 612: 8314 8315 /* Line 1806 of yacc.c */ 8316 #line 2358 "parser.yy" 8350 8317 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8351 8318 break; 8352 8319 8353 case 578:8354 8355 /* Line 1806 of yacc.c */ 8356 #line 2 225"parser.yy"8320 case 613: 8321 8322 /* Line 1806 of yacc.c */ 8323 #line 2360 "parser.yy" 8357 8324 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8358 8325 break; 8359 8326 8360 case 579:8361 8362 /* Line 1806 of yacc.c */ 8363 #line 2 234"parser.yy"8327 case 614: 8328 8329 /* Line 1806 of yacc.c */ 8330 #line 2370 "parser.yy" 8364 8331 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8365 8332 break; 8366 8333 8367 case 581:8368 8369 /* Line 1806 of yacc.c */ 8370 #line 2 237"parser.yy"8334 case 616: 8335 8336 /* Line 1806 of yacc.c */ 8337 #line 2373 "parser.yy" 8371 8338 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8372 8339 break; 8373 8340 8374 case 582: 8375 8376 /* Line 1806 of yacc.c */ 8377 #line 2242 "parser.yy" 8341 case 617: 8342 8343 /* Line 1806 of yacc.c */ 8344 #line 2375 "parser.yy" 8345 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8346 break; 8347 8348 case 618: 8349 8350 /* Line 1806 of yacc.c */ 8351 #line 2380 "parser.yy" 8352 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8353 break; 8354 8355 case 619: 8356 8357 /* Line 1806 of yacc.c */ 8358 #line 2382 "parser.yy" 8359 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8360 break; 8361 8362 case 620: 8363 8364 /* Line 1806 of yacc.c */ 8365 #line 2384 "parser.yy" 8366 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8367 break; 8368 8369 case 621: 8370 8371 /* Line 1806 of yacc.c */ 8372 #line 2389 "parser.yy" 8373 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8374 break; 8375 8376 case 622: 8377 8378 /* Line 1806 of yacc.c */ 8379 #line 2391 "parser.yy" 8380 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8381 break; 8382 8383 case 623: 8384 8385 /* Line 1806 of yacc.c */ 8386 #line 2393 "parser.yy" 8387 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8388 break; 8389 8390 case 624: 8391 8392 /* Line 1806 of yacc.c */ 8393 #line 2395 "parser.yy" 8394 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8395 break; 8396 8397 case 625: 8398 8399 /* Line 1806 of yacc.c */ 8400 #line 2400 "parser.yy" 8378 8401 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); } 8379 8402 break; 8380 8403 8381 case 583:8382 8383 /* Line 1806 of yacc.c */ 8384 #line 2 244"parser.yy"8404 case 626: 8405 8406 /* Line 1806 of yacc.c */ 8407 #line 2402 "parser.yy" 8385 8408 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8386 8409 break; 8387 8410 8388 case 584:8389 8390 /* Line 1806 of yacc.c */ 8391 #line 2 246"parser.yy"8411 case 627: 8412 8413 /* Line 1806 of yacc.c */ 8414 #line 2404 "parser.yy" 8392 8415 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8393 8416 break; 8394 8417 8395 case 585: 8396 8397 /* Line 1806 of yacc.c */ 8398 #line 2251 "parser.yy" 8399 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8400 break; 8401 8402 case 586: 8403 8404 /* Line 1806 of yacc.c */ 8405 #line 2253 "parser.yy" 8406 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8407 break; 8408 8409 case 587: 8410 8411 /* Line 1806 of yacc.c */ 8412 #line 2255 "parser.yy" 8413 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8414 break; 8415 8416 case 588: 8417 8418 /* Line 1806 of yacc.c */ 8419 #line 2260 "parser.yy" 8420 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8421 break; 8422 8423 case 589: 8424 8425 /* Line 1806 of yacc.c */ 8426 #line 2262 "parser.yy" 8427 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8428 break; 8429 8430 case 590: 8431 8432 /* Line 1806 of yacc.c */ 8433 #line 2264 "parser.yy" 8434 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8435 break; 8436 8437 case 594: 8438 8439 /* Line 1806 of yacc.c */ 8440 #line 2279 "parser.yy" 8441 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); } 8442 break; 8443 8444 case 595: 8445 8446 /* Line 1806 of yacc.c */ 8447 #line 2281 "parser.yy" 8448 { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); } 8449 break; 8450 8451 case 596: 8452 8453 /* Line 1806 of yacc.c */ 8454 #line 2283 "parser.yy" 8455 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8456 break; 8457 8458 case 597: 8459 8460 /* Line 1806 of yacc.c */ 8461 #line 2288 "parser.yy" 8462 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8463 break; 8464 8465 case 598: 8466 8467 /* Line 1806 of yacc.c */ 8468 #line 2290 "parser.yy" 8469 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8470 break; 8471 8472 case 599: 8473 8474 /* Line 1806 of yacc.c */ 8475 #line 2292 "parser.yy" 8476 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8477 break; 8478 8479 case 600: 8480 8481 /* Line 1806 of yacc.c */ 8482 #line 2297 "parser.yy" 8483 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8484 break; 8485 8486 case 601: 8487 8488 /* Line 1806 of yacc.c */ 8489 #line 2299 "parser.yy" 8490 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8491 break; 8492 8493 case 602: 8494 8495 /* Line 1806 of yacc.c */ 8496 #line 2301 "parser.yy" 8497 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8498 break; 8499 8500 case 603: 8501 8502 /* Line 1806 of yacc.c */ 8503 #line 2316 "parser.yy" 8418 case 628: 8419 8420 /* Line 1806 of yacc.c */ 8421 #line 2435 "parser.yy" 8504 8422 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8505 8423 break; 8506 8424 8507 case 6 05:8508 8509 /* Line 1806 of yacc.c */ 8510 #line 2 319"parser.yy"8425 case 630: 8426 8427 /* Line 1806 of yacc.c */ 8428 #line 2438 "parser.yy" 8511 8429 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8512 8430 break; 8513 8431 8514 case 6 06:8515 8516 /* Line 1806 of yacc.c */ 8517 #line 2 321"parser.yy"8432 case 631: 8433 8434 /* Line 1806 of yacc.c */ 8435 #line 2440 "parser.yy" 8518 8436 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8519 8437 break; 8520 8438 8521 case 608:8522 8523 /* Line 1806 of yacc.c */8524 #line 2327 "parser.yy"8525 { (yyval.decl) = (yyvsp[(2) - (3)].decl); }8526 break;8527 8528 case 609:8529 8530 /* Line 1806 of yacc.c */8531 #line 2332 "parser.yy"8532 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }8533 break;8534 8535 case 610:8536 8537 /* Line 1806 of yacc.c */8538 #line 2334 "parser.yy"8539 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }8540 break;8541 8542 case 611:8543 8544 /* Line 1806 of yacc.c */8545 #line 2336 "parser.yy"8546 { (yyval.decl) = (yyvsp[(2) - (3)].decl); }8547 break;8548 8549 case 612:8550 8551 /* Line 1806 of yacc.c */8552 #line 2341 "parser.yy"8553 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }8554 break;8555 8556 case 613:8557 8558 /* Line 1806 of yacc.c */8559 #line 2343 "parser.yy"8560 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }8561 break;8562 8563 case 614:8564 8565 /* Line 1806 of yacc.c */8566 #line 2345 "parser.yy"8567 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }8568 break;8569 8570 case 615:8571 8572 /* Line 1806 of yacc.c */8573 #line 2347 "parser.yy"8574 { (yyval.decl) = (yyvsp[(2) - (3)].decl); }8575 break;8576 8577 case 616:8578 8579 /* Line 1806 of yacc.c */8580 #line 2352 "parser.yy"8581 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }8582 break;8583 8584 case 617:8585 8586 /* Line 1806 of yacc.c */8587 #line 2354 "parser.yy"8588 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }8589 break;8590 8591 case 618:8592 8593 /* Line 1806 of yacc.c */8594 #line 2356 "parser.yy"8595 { (yyval.decl) = (yyvsp[(2) - (3)].decl); }8596 break;8597 8598 case 619:8599 8600 /* Line 1806 of yacc.c */8601 #line 2366 "parser.yy"8602 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }8603 break;8604 8605 case 621:8606 8607 /* Line 1806 of yacc.c */8608 #line 2369 "parser.yy"8609 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }8610 break;8611 8612 case 622:8613 8614 /* Line 1806 of yacc.c */8615 #line 2371 "parser.yy"8616 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }8617 break;8618 8619 case 623:8620 8621 /* Line 1806 of yacc.c */8622 #line 2376 "parser.yy"8623 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }8624 break;8625 8626 case 624:8627 8628 /* Line 1806 of yacc.c */8629 #line 2378 "parser.yy"8630 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }8631 break;8632 8633 case 625:8634 8635 /* Line 1806 of yacc.c */8636 #line 2380 "parser.yy"8637 { (yyval.decl) = (yyvsp[(2) - (3)].decl); }8638 break;8639 8640 case 626:8641 8642 /* Line 1806 of yacc.c */8643 #line 2385 "parser.yy"8644 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }8645 break;8646 8647 case 627:8648 8649 /* Line 1806 of yacc.c */8650 #line 2387 "parser.yy"8651 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }8652 break;8653 8654 case 628:8655 8656 /* Line 1806 of yacc.c */8657 #line 2389 "parser.yy"8658 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }8659 break;8660 8661 case 629:8662 8663 /* Line 1806 of yacc.c */8664 #line 2391 "parser.yy"8665 { (yyval.decl) = (yyvsp[(2) - (3)].decl); }8666 break;8667 8668 case 630:8669 8670 /* Line 1806 of yacc.c */8671 #line 2396 "parser.yy"8672 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }8673 break;8674 8675 case 631:8676 8677 /* Line 1806 of yacc.c */8678 #line 2398 "parser.yy"8679 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }8680 break;8681 8682 8439 case 632: 8683 8440 8684 8441 /* Line 1806 of yacc.c */ 8685 #line 2400 "parser.yy" 8686 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8687 break; 8688 8689 case 633: 8690 8691 /* Line 1806 of yacc.c */ 8692 #line 2431 "parser.yy" 8693 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8694 break; 8695 8696 case 635: 8697 8698 /* Line 1806 of yacc.c */ 8699 #line 2434 "parser.yy" 8700 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8701 break; 8702 8703 case 636: 8704 8705 /* Line 1806 of yacc.c */ 8706 #line 2436 "parser.yy" 8707 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8708 break; 8709 8710 case 637: 8711 8712 /* Line 1806 of yacc.c */ 8713 #line 2441 "parser.yy" 8442 #line 2445 "parser.yy" 8714 8443 { 8715 8444 typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) ); … … 8718 8447 break; 8719 8448 8720 case 63 8:8721 8722 /* Line 1806 of yacc.c */ 8723 #line 24 46"parser.yy"8449 case 633: 8450 8451 /* Line 1806 of yacc.c */ 8452 #line 2450 "parser.yy" 8724 8453 { 8725 8454 typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) ); … … 8728 8457 break; 8729 8458 8459 case 634: 8460 8461 /* Line 1806 of yacc.c */ 8462 #line 2458 "parser.yy" 8463 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8464 break; 8465 8466 case 635: 8467 8468 /* Line 1806 of yacc.c */ 8469 #line 2460 "parser.yy" 8470 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8471 break; 8472 8473 case 636: 8474 8475 /* Line 1806 of yacc.c */ 8476 #line 2462 "parser.yy" 8477 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8478 break; 8479 8480 case 637: 8481 8482 /* Line 1806 of yacc.c */ 8483 #line 2467 "parser.yy" 8484 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8485 break; 8486 8487 case 638: 8488 8489 /* Line 1806 of yacc.c */ 8490 #line 2469 "parser.yy" 8491 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8492 break; 8493 8730 8494 case 639: 8731 8495 8732 8496 /* Line 1806 of yacc.c */ 8733 #line 2454 "parser.yy" 8497 #line 2474 "parser.yy" 8498 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); } 8499 break; 8500 8501 case 640: 8502 8503 /* Line 1806 of yacc.c */ 8504 #line 2476 "parser.yy" 8505 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8506 break; 8507 8508 case 642: 8509 8510 /* Line 1806 of yacc.c */ 8511 #line 2491 "parser.yy" 8512 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8513 break; 8514 8515 case 643: 8516 8517 /* Line 1806 of yacc.c */ 8518 #line 2493 "parser.yy" 8519 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8520 break; 8521 8522 case 644: 8523 8524 /* Line 1806 of yacc.c */ 8525 #line 2498 "parser.yy" 8526 { (yyval.decl) = DeclarationNode::newPointer( 0 ); } 8527 break; 8528 8529 case 645: 8530 8531 /* Line 1806 of yacc.c */ 8532 #line 2500 "parser.yy" 8533 { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); } 8534 break; 8535 8536 case 646: 8537 8538 /* Line 1806 of yacc.c */ 8539 #line 2502 "parser.yy" 8734 8540 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8735 8541 break; 8736 8542 8737 case 64 0:8738 8739 /* Line 1806 of yacc.c */ 8740 #line 2 456"parser.yy"8543 case 647: 8544 8545 /* Line 1806 of yacc.c */ 8546 #line 2504 "parser.yy" 8741 8547 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8742 8548 break; 8743 8549 8744 case 64 1:8745 8746 /* Line 1806 of yacc.c */ 8747 #line 2 458"parser.yy"8550 case 648: 8551 8552 /* Line 1806 of yacc.c */ 8553 #line 2506 "parser.yy" 8748 8554 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8749 8555 break; 8750 8556 8751 case 642: 8752 8753 /* Line 1806 of yacc.c */ 8754 #line 2463 "parser.yy" 8557 case 650: 8558 8559 /* Line 1806 of yacc.c */ 8560 #line 2512 "parser.yy" 8561 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8562 break; 8563 8564 case 651: 8565 8566 /* Line 1806 of yacc.c */ 8567 #line 2514 "parser.yy" 8568 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8569 break; 8570 8571 case 652: 8572 8573 /* Line 1806 of yacc.c */ 8574 #line 2516 "parser.yy" 8575 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8576 break; 8577 8578 case 653: 8579 8580 /* Line 1806 of yacc.c */ 8581 #line 2521 "parser.yy" 8582 { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); } 8583 break; 8584 8585 case 654: 8586 8587 /* Line 1806 of yacc.c */ 8588 #line 2523 "parser.yy" 8589 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8590 break; 8591 8592 case 655: 8593 8594 /* Line 1806 of yacc.c */ 8595 #line 2525 "parser.yy" 8596 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8597 break; 8598 8599 case 656: 8600 8601 /* Line 1806 of yacc.c */ 8602 #line 2531 "parser.yy" 8603 { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); } 8604 break; 8605 8606 case 657: 8607 8608 /* Line 1806 of yacc.c */ 8609 #line 2533 "parser.yy" 8610 { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); } 8611 break; 8612 8613 case 659: 8614 8615 /* Line 1806 of yacc.c */ 8616 #line 2539 "parser.yy" 8617 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); } 8618 break; 8619 8620 case 660: 8621 8622 /* Line 1806 of yacc.c */ 8623 #line 2541 "parser.yy" 8624 { (yyval.decl) = DeclarationNode::newVarArray( 0 ); } 8625 break; 8626 8627 case 661: 8628 8629 /* Line 1806 of yacc.c */ 8630 #line 2543 "parser.yy" 8631 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); } 8632 break; 8633 8634 case 662: 8635 8636 /* Line 1806 of yacc.c */ 8637 #line 2545 "parser.yy" 8638 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); } 8639 break; 8640 8641 case 664: 8642 8643 /* Line 1806 of yacc.c */ 8644 #line 2560 "parser.yy" 8645 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8646 break; 8647 8648 case 665: 8649 8650 /* Line 1806 of yacc.c */ 8651 #line 2562 "parser.yy" 8652 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8653 break; 8654 8655 case 666: 8656 8657 /* Line 1806 of yacc.c */ 8658 #line 2567 "parser.yy" 8659 { (yyval.decl) = DeclarationNode::newPointer( 0 ); } 8660 break; 8661 8662 case 667: 8663 8664 /* Line 1806 of yacc.c */ 8665 #line 2569 "parser.yy" 8666 { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); } 8667 break; 8668 8669 case 668: 8670 8671 /* Line 1806 of yacc.c */ 8672 #line 2571 "parser.yy" 8673 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8674 break; 8675 8676 case 669: 8677 8678 /* Line 1806 of yacc.c */ 8679 #line 2573 "parser.yy" 8680 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8681 break; 8682 8683 case 670: 8684 8685 /* Line 1806 of yacc.c */ 8686 #line 2575 "parser.yy" 8687 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8688 break; 8689 8690 case 672: 8691 8692 /* Line 1806 of yacc.c */ 8693 #line 2581 "parser.yy" 8694 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8695 break; 8696 8697 case 673: 8698 8699 /* Line 1806 of yacc.c */ 8700 #line 2583 "parser.yy" 8701 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8702 break; 8703 8704 case 674: 8705 8706 /* Line 1806 of yacc.c */ 8707 #line 2585 "parser.yy" 8708 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8709 break; 8710 8711 case 675: 8712 8713 /* Line 1806 of yacc.c */ 8714 #line 2590 "parser.yy" 8715 { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); } 8716 break; 8717 8718 case 676: 8719 8720 /* Line 1806 of yacc.c */ 8721 #line 2592 "parser.yy" 8722 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8723 break; 8724 8725 case 677: 8726 8727 /* Line 1806 of yacc.c */ 8728 #line 2594 "parser.yy" 8729 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8730 break; 8731 8732 case 679: 8733 8734 /* Line 1806 of yacc.c */ 8735 #line 2601 "parser.yy" 8755 8736 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8756 8737 break; 8757 8738 8758 case 643: 8759 8760 /* Line 1806 of yacc.c */ 8761 #line 2465 "parser.yy" 8739 case 681: 8740 8741 /* Line 1806 of yacc.c */ 8742 #line 2612 "parser.yy" 8743 { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); } 8744 break; 8745 8746 case 682: 8747 8748 /* Line 1806 of yacc.c */ 8749 #line 2615 "parser.yy" 8750 { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); } 8751 break; 8752 8753 case 683: 8754 8755 /* Line 1806 of yacc.c */ 8756 #line 2617 "parser.yy" 8757 { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); } 8758 break; 8759 8760 case 684: 8761 8762 /* Line 1806 of yacc.c */ 8763 #line 2620 "parser.yy" 8764 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); } 8765 break; 8766 8767 case 685: 8768 8769 /* Line 1806 of yacc.c */ 8770 #line 2622 "parser.yy" 8771 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); } 8772 break; 8773 8774 case 686: 8775 8776 /* Line 1806 of yacc.c */ 8777 #line 2624 "parser.yy" 8778 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); } 8779 break; 8780 8781 case 688: 8782 8783 /* Line 1806 of yacc.c */ 8784 #line 2638 "parser.yy" 8785 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8786 break; 8787 8788 case 689: 8789 8790 /* Line 1806 of yacc.c */ 8791 #line 2640 "parser.yy" 8792 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8793 break; 8794 8795 case 690: 8796 8797 /* Line 1806 of yacc.c */ 8798 #line 2645 "parser.yy" 8799 { (yyval.decl) = DeclarationNode::newPointer( 0 ); } 8800 break; 8801 8802 case 691: 8803 8804 /* Line 1806 of yacc.c */ 8805 #line 2647 "parser.yy" 8806 { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); } 8807 break; 8808 8809 case 692: 8810 8811 /* Line 1806 of yacc.c */ 8812 #line 2649 "parser.yy" 8813 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8814 break; 8815 8816 case 693: 8817 8818 /* Line 1806 of yacc.c */ 8819 #line 2651 "parser.yy" 8820 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8821 break; 8822 8823 case 694: 8824 8825 /* Line 1806 of yacc.c */ 8826 #line 2653 "parser.yy" 8827 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8828 break; 8829 8830 case 696: 8831 8832 /* Line 1806 of yacc.c */ 8833 #line 2659 "parser.yy" 8762 8834 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8763 8835 break; 8764 8836 8765 case 644: 8766 8767 /* Line 1806 of yacc.c */ 8768 #line 2470 "parser.yy" 8769 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); } 8770 break; 8771 8772 case 645: 8773 8774 /* Line 1806 of yacc.c */ 8775 #line 2472 "parser.yy" 8837 case 697: 8838 8839 /* Line 1806 of yacc.c */ 8840 #line 2661 "parser.yy" 8841 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8842 break; 8843 8844 case 698: 8845 8846 /* Line 1806 of yacc.c */ 8847 #line 2663 "parser.yy" 8848 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8849 break; 8850 8851 case 699: 8852 8853 /* Line 1806 of yacc.c */ 8854 #line 2668 "parser.yy" 8776 8855 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8777 8856 break; 8778 8857 8779 case 647: 8780 8781 /* Line 1806 of yacc.c */ 8782 #line 2487 "parser.yy" 8783 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8784 break; 8785 8786 case 648: 8787 8788 /* Line 1806 of yacc.c */ 8789 #line 2489 "parser.yy" 8790 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8791 break; 8792 8793 case 649: 8794 8795 /* Line 1806 of yacc.c */ 8796 #line 2494 "parser.yy" 8797 { (yyval.decl) = DeclarationNode::newPointer( 0 ); } 8798 break; 8799 8800 case 650: 8801 8802 /* Line 1806 of yacc.c */ 8803 #line 2496 "parser.yy" 8804 { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); } 8805 break; 8806 8807 case 651: 8808 8809 /* Line 1806 of yacc.c */ 8810 #line 2498 "parser.yy" 8811 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8812 break; 8813 8814 case 652: 8815 8816 /* Line 1806 of yacc.c */ 8817 #line 2500 "parser.yy" 8818 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8819 break; 8820 8821 case 653: 8822 8823 /* Line 1806 of yacc.c */ 8824 #line 2502 "parser.yy" 8858 case 700: 8859 8860 /* Line 1806 of yacc.c */ 8861 #line 2670 "parser.yy" 8825 8862 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8826 8863 break; 8827 8864 8828 case 655:8829 8830 /* Line 1806 of yacc.c */8831 #line 2508 "parser.yy"8832 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }8833 break;8834 8835 case 656:8836 8837 /* Line 1806 of yacc.c */8838 #line 2510 "parser.yy"8839 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }8840 break;8841 8842 case 657:8843 8844 /* Line 1806 of yacc.c */8845 #line 2512 "parser.yy"8846 { (yyval.decl) = (yyvsp[(2) - (3)].decl); }8847 break;8848 8849 case 658:8850 8851 /* Line 1806 of yacc.c */8852 #line 2517 "parser.yy"8853 { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }8854 break;8855 8856 case 659:8857 8858 /* Line 1806 of yacc.c */8859 #line 2519 "parser.yy"8860 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }8861 break;8862 8863 case 660:8864 8865 /* Line 1806 of yacc.c */8866 #line 2521 "parser.yy"8867 { (yyval.decl) = (yyvsp[(2) - (3)].decl); }8868 break;8869 8870 case 661:8871 8872 /* Line 1806 of yacc.c */8873 #line 2527 "parser.yy"8874 { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }8875 break;8876 8877 case 662:8878 8879 /* Line 1806 of yacc.c */8880 #line 2529 "parser.yy"8881 { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }8882 break;8883 8884 case 664:8885 8886 /* Line 1806 of yacc.c */8887 #line 2535 "parser.yy"8888 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }8889 break;8890 8891 case 665:8892 8893 /* Line 1806 of yacc.c */8894 #line 2537 "parser.yy"8895 { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }8896 break;8897 8898 case 666:8899 8900 /* Line 1806 of yacc.c */8901 #line 2539 "parser.yy"8902 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }8903 break;8904 8905 case 667:8906 8907 /* Line 1806 of yacc.c */8908 #line 2541 "parser.yy"8909 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }8910 break;8911 8912 case 669:8913 8914 /* Line 1806 of yacc.c */8915 #line 2556 "parser.yy"8916 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }8917 break;8918 8919 case 670:8920 8921 /* Line 1806 of yacc.c */8922 #line 2558 "parser.yy"8923 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }8924 break;8925 8926 case 671:8927 8928 /* Line 1806 of yacc.c */8929 #line 2563 "parser.yy"8930 { (yyval.decl) = DeclarationNode::newPointer( 0 ); }8931 break;8932 8933 case 672:8934 8935 /* Line 1806 of yacc.c */8936 #line 2565 "parser.yy"8937 { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }8938 break;8939 8940 case 673:8941 8942 /* Line 1806 of yacc.c */8943 #line 2567 "parser.yy"8944 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }8945 break;8946 8947 case 674:8948 8949 /* Line 1806 of yacc.c */8950 #line 2569 "parser.yy"8951 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }8952 break;8953 8954 case 675:8955 8956 /* Line 1806 of yacc.c */8957 #line 2571 "parser.yy"8958 { (yyval.decl) = (yyvsp[(2) - (3)].decl); }8959 break;8960 8961 case 677:8962 8963 /* Line 1806 of yacc.c */8964 #line 2577 "parser.yy"8965 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }8966 break;8967 8968 case 678:8969 8970 /* Line 1806 of yacc.c */8971 #line 2579 "parser.yy"8972 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }8973 break;8974 8975 case 679:8976 8977 /* Line 1806 of yacc.c */8978 #line 2581 "parser.yy"8979 { (yyval.decl) = (yyvsp[(2) - (3)].decl); }8980 break;8981 8982 case 680:8983 8984 /* Line 1806 of yacc.c */8985 #line 2586 "parser.yy"8986 { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }8987 break;8988 8989 case 681:8990 8991 /* Line 1806 of yacc.c */8992 #line 2588 "parser.yy"8993 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }8994 break;8995 8996 case 682:8997 8998 /* Line 1806 of yacc.c */8999 #line 2590 "parser.yy"9000 { (yyval.decl) = (yyvsp[(2) - (3)].decl); }9001 break;9002 9003 case 684:9004 9005 /* Line 1806 of yacc.c */9006 #line 2597 "parser.yy"9007 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }9008 break;9009 9010 case 686:9011 9012 /* Line 1806 of yacc.c */9013 #line 2608 "parser.yy"9014 { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }9015 break;9016 9017 case 687:9018 9019 /* Line 1806 of yacc.c */9020 #line 2611 "parser.yy"9021 { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }9022 break;9023 9024 case 688:9025 9026 /* Line 1806 of yacc.c */9027 #line 2613 "parser.yy"9028 { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }9029 break;9030 9031 case 689:9032 9033 /* Line 1806 of yacc.c */9034 #line 2616 "parser.yy"9035 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }9036 break;9037 9038 case 690:9039 9040 /* Line 1806 of yacc.c */9041 #line 2618 "parser.yy"9042 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }9043 break;9044 9045 case 691:9046 9047 /* Line 1806 of yacc.c */9048 #line 2620 "parser.yy"9049 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }9050 break;9051 9052 case 693:9053 9054 /* Line 1806 of yacc.c */9055 #line 2634 "parser.yy"9056 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }9057 break;9058 9059 case 694:9060 9061 /* Line 1806 of yacc.c */9062 #line 2636 "parser.yy"9063 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }9064 break;9065 9066 case 695:9067 9068 /* Line 1806 of yacc.c */9069 #line 2641 "parser.yy"9070 { (yyval.decl) = DeclarationNode::newPointer( 0 ); }9071 break;9072 9073 case 696:9074 9075 /* Line 1806 of yacc.c */9076 #line 2643 "parser.yy"9077 { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }9078 break;9079 9080 case 697:9081 9082 /* Line 1806 of yacc.c */9083 #line 2645 "parser.yy"9084 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }9085 break;9086 9087 case 698:9088 9089 /* Line 1806 of yacc.c */9090 #line 2647 "parser.yy"9091 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }9092 break;9093 9094 case 699:9095 9096 /* Line 1806 of yacc.c */9097 #line 2649 "parser.yy"9098 { (yyval.decl) = (yyvsp[(2) - (3)].decl); }9099 break;9100 9101 case 701:9102 9103 /* Line 1806 of yacc.c */9104 #line 2655 "parser.yy"9105 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }9106 break;9107 9108 case 702:9109 9110 /* Line 1806 of yacc.c */9111 #line 2657 "parser.yy"9112 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }9113 break;9114 9115 8865 case 703: 9116 8866 9117 8867 /* Line 1806 of yacc.c */ 9118 #line 2659 "parser.yy" 9119 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 9120 break; 9121 9122 case 704: 9123 9124 /* Line 1806 of yacc.c */ 9125 #line 2664 "parser.yy" 9126 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 9127 break; 9128 9129 case 705: 9130 9131 /* Line 1806 of yacc.c */ 9132 #line 2666 "parser.yy" 9133 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 9134 break; 9135 9136 case 708: 9137 9138 /* Line 1806 of yacc.c */ 9139 #line 2676 "parser.yy" 8868 #line 2680 "parser.yy" 9140 8869 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 9141 8870 break; 9142 8871 9143 case 711: 9144 9145 /* Line 1806 of yacc.c */ 9146 #line 2686 "parser.yy" 9147 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 9148 break; 9149 9150 case 712: 9151 9152 /* Line 1806 of yacc.c */ 9153 #line 2688 "parser.yy" 9154 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); } 9155 break; 9156 9157 case 713: 8872 case 706: 9158 8873 9159 8874 /* Line 1806 of yacc.c */ … … 9162 8877 break; 9163 8878 9164 case 7 14:8879 case 707: 9165 8880 9166 8881 /* Line 1806 of yacc.c */ … … 9169 8884 break; 9170 8885 9171 case 7 15:8886 case 708: 9172 8887 9173 8888 /* Line 1806 of yacc.c */ … … 9176 8891 break; 9177 8892 9178 case 7 16:8893 case 709: 9179 8894 9180 8895 /* Line 1806 of yacc.c */ … … 9183 8898 break; 9184 8899 9185 case 717: 9186 9187 /* Line 1806 of yacc.c */ 9188 #line 2703 "parser.yy" 8900 case 710: 8901 8902 /* Line 1806 of yacc.c */ 8903 #line 2698 "parser.yy" 8904 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 8905 break; 8906 8907 case 711: 8908 8909 /* Line 1806 of yacc.c */ 8910 #line 2700 "parser.yy" 8911 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); } 8912 break; 8913 8914 case 712: 8915 8916 /* Line 1806 of yacc.c */ 8917 #line 2707 "parser.yy" 9189 8918 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 9190 8919 break; 9191 8920 9192 case 71 8:9193 9194 /* Line 1806 of yacc.c */ 9195 #line 270 5"parser.yy"8921 case 713: 8922 8923 /* Line 1806 of yacc.c */ 8924 #line 2709 "parser.yy" 9196 8925 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 9197 8926 break; 9198 8927 9199 case 71 9:9200 9201 /* Line 1806 of yacc.c */ 9202 #line 27 07"parser.yy"8928 case 714: 8929 8930 /* Line 1806 of yacc.c */ 8931 #line 2711 "parser.yy" 9203 8932 { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 9204 8933 break; 9205 8934 9206 case 7 20:9207 9208 /* Line 1806 of yacc.c */ 9209 #line 27 09"parser.yy"8935 case 715: 8936 8937 /* Line 1806 of yacc.c */ 8938 #line 2713 "parser.yy" 9210 8939 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); } 9211 8940 break; 9212 8941 9213 case 721: 9214 9215 /* Line 1806 of yacc.c */ 9216 #line 2711 "parser.yy" 9217 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 9218 break; 9219 9220 case 722: 9221 9222 /* Line 1806 of yacc.c */ 9223 #line 2713 "parser.yy" 9224 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 9225 break; 9226 9227 case 723: 8942 case 716: 9228 8943 9229 8944 /* Line 1806 of yacc.c */ … … 9232 8947 break; 9233 8948 8949 case 717: 8950 8951 /* Line 1806 of yacc.c */ 8952 #line 2717 "parser.yy" 8953 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 8954 break; 8955 8956 case 718: 8957 8958 /* Line 1806 of yacc.c */ 8959 #line 2719 "parser.yy" 8960 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 8961 break; 8962 8963 case 719: 8964 8965 /* Line 1806 of yacc.c */ 8966 #line 2721 "parser.yy" 8967 { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 8968 break; 8969 8970 case 720: 8971 8972 /* Line 1806 of yacc.c */ 8973 #line 2723 "parser.yy" 8974 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); } 8975 break; 8976 8977 case 721: 8978 8979 /* Line 1806 of yacc.c */ 8980 #line 2725 "parser.yy" 8981 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 8982 break; 8983 8984 case 722: 8985 8986 /* Line 1806 of yacc.c */ 8987 #line 2730 "parser.yy" 8988 { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); } 8989 break; 8990 8991 case 723: 8992 8993 /* Line 1806 of yacc.c */ 8994 #line 2732 "parser.yy" 8995 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); } 8996 break; 8997 9234 8998 case 724: 9235 8999 9236 9000 /* Line 1806 of yacc.c */ 9237 #line 27 17 "parser.yy"9238 { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false )); }9001 #line 2737 "parser.yy" 9002 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); } 9239 9003 break; 9240 9004 … … 9242 9006 9243 9007 /* Line 1806 of yacc.c */ 9244 #line 2719 "parser.yy" 9245 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); } 9246 break; 9247 9248 case 726: 9249 9250 /* Line 1806 of yacc.c */ 9251 #line 2721 "parser.yy" 9252 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 9008 #line 2739 "parser.yy" 9009 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); } 9253 9010 break; 9254 9011 … … 9256 9013 9257 9014 /* Line 1806 of yacc.c */ 9258 #line 2726 "parser.yy" 9259 { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); } 9260 break; 9261 9262 case 728: 9263 9264 /* Line 1806 of yacc.c */ 9265 #line 2728 "parser.yy" 9266 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); } 9267 break; 9268 9269 case 729: 9270 9271 /* Line 1806 of yacc.c */ 9272 #line 2733 "parser.yy" 9273 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); } 9274 break; 9275 9276 case 730: 9277 9278 /* Line 1806 of yacc.c */ 9279 #line 2735 "parser.yy" 9280 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); } 9281 break; 9282 9283 case 732: 9284 9285 /* Line 1806 of yacc.c */ 9286 #line 2762 "parser.yy" 9015 #line 2766 "parser.yy" 9287 9016 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 9288 9017 break; 9289 9018 9290 case 736: 9291 9292 /* Line 1806 of yacc.c */ 9293 #line 2773 "parser.yy" 9294 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 9295 break; 9296 9297 case 737: 9298 9299 /* Line 1806 of yacc.c */ 9300 #line 2775 "parser.yy" 9301 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); } 9302 break; 9303 9304 case 738: 9019 case 731: 9305 9020 9306 9021 /* Line 1806 of yacc.c */ … … 9309 9024 break; 9310 9025 9311 case 73 9:9026 case 732: 9312 9027 9313 9028 /* Line 1806 of yacc.c */ … … 9316 9031 break; 9317 9032 9318 case 7 40:9033 case 733: 9319 9034 9320 9035 /* Line 1806 of yacc.c */ … … 9323 9038 break; 9324 9039 9325 case 7 41:9040 case 734: 9326 9041 9327 9042 /* Line 1806 of yacc.c */ … … 9330 9045 break; 9331 9046 9047 case 735: 9048 9049 /* Line 1806 of yacc.c */ 9050 #line 2785 "parser.yy" 9051 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 9052 break; 9053 9054 case 736: 9055 9056 /* Line 1806 of yacc.c */ 9057 #line 2787 "parser.yy" 9058 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); } 9059 break; 9060 9061 case 737: 9062 9063 /* Line 1806 of yacc.c */ 9064 #line 2794 "parser.yy" 9065 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 9066 break; 9067 9068 case 738: 9069 9070 /* Line 1806 of yacc.c */ 9071 #line 2796 "parser.yy" 9072 { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 9073 break; 9074 9075 case 739: 9076 9077 /* Line 1806 of yacc.c */ 9078 #line 2798 "parser.yy" 9079 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 9080 break; 9081 9082 case 740: 9083 9084 /* Line 1806 of yacc.c */ 9085 #line 2800 "parser.yy" 9086 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 9087 break; 9088 9089 case 741: 9090 9091 /* Line 1806 of yacc.c */ 9092 #line 2802 "parser.yy" 9093 { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 9094 break; 9095 9332 9096 case 742: 9333 9097 9334 9098 /* Line 1806 of yacc.c */ 9335 #line 2 790"parser.yy"9336 { (yyval.decl) = (yyvsp[( 3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false) ); }9099 #line 2804 "parser.yy" 9100 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 9337 9101 break; 9338 9102 … … 9340 9104 9341 9105 /* Line 1806 of yacc.c */ 9342 #line 2 792"parser.yy"9343 { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false) ); }9106 #line 2809 "parser.yy" 9107 { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); } 9344 9108 break; 9345 9109 … … 9347 9111 9348 9112 /* Line 1806 of yacc.c */ 9349 #line 2 794 "parser.yy"9350 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl)); }9113 #line 2814 "parser.yy" 9114 { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); } 9351 9115 break; 9352 9116 … … 9354 9118 9355 9119 /* Line 1806 of yacc.c */ 9356 #line 2 796 "parser.yy"9357 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false )); }9120 #line 2816 "parser.yy" 9121 { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); } 9358 9122 break; 9359 9123 … … 9361 9125 9362 9126 /* Line 1806 of yacc.c */ 9363 #line 2798 "parser.yy" 9364 { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 9365 break; 9366 9367 case 747: 9368 9369 /* Line 1806 of yacc.c */ 9370 #line 2800 "parser.yy" 9371 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 9372 break; 9373 9374 case 748: 9375 9376 /* Line 1806 of yacc.c */ 9377 #line 2805 "parser.yy" 9378 { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); } 9127 #line 2818 "parser.yy" 9128 { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); } 9379 9129 break; 9380 9130 … … 9382 9132 9383 9133 /* Line 1806 of yacc.c */ 9384 #line 28 10"parser.yy"9385 { (yyval. decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }9134 #line 2842 "parser.yy" 9135 { (yyval.en) = 0; } 9386 9136 break; 9387 9137 … … 9389 9139 9390 9140 /* Line 1806 of yacc.c */ 9391 #line 2812 "parser.yy" 9392 { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); } 9393 break; 9394 9395 case 751: 9396 9397 /* Line 1806 of yacc.c */ 9398 #line 2814 "parser.yy" 9399 { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); } 9400 break; 9401 9402 case 754: 9403 9404 /* Line 1806 of yacc.c */ 9405 #line 2838 "parser.yy" 9406 { (yyval.en) = 0; } 9407 break; 9408 9409 case 755: 9410 9411 /* Line 1806 of yacc.c */ 9412 #line 2840 "parser.yy" 9141 #line 2844 "parser.yy" 9413 9142 { (yyval.en) = (yyvsp[(2) - (2)].en); } 9414 9143 break; … … 9417 9146 9418 9147 /* Line 1806 of yacc.c */ 9419 #line 9 420"Parser/parser.cc"9148 #line 9149 "Parser/parser.cc" 9420 9149 default: break; 9421 9150 } … … 9648 9377 9649 9378 /* Line 2067 of yacc.c */ 9650 #line 284 3"parser.yy"9379 #line 2847 "parser.yy" 9651 9380 9652 9381 // ----end of grammar---- -
src/Parser/parser.h
r950f7a7 r7527e63 262 262 263 263 /* Line 2068 of yacc.c */ 264 #line 11 0"parser.yy"264 #line 115 "parser.yy" 265 265 266 266 Token tok; … … 271 271 DeclarationNode::TypeClass tclass; 272 272 StatementNode *sn; 273 ConstantNode *constant; 273 ConstantExpr *constant; 274 ForCtl *fctl; 274 275 LabelNode *label; 275 276 InitializerNode *in; 277 OperKinds op; 276 278 bool flag; 277 279 … … 279 281 280 282 /* Line 2068 of yacc.c */ 281 #line 28 2"Parser/parser.h"283 #line 284 "Parser/parser.h" 282 284 } YYSTYPE; 283 285 # define YYSTYPE_IS_TRIVIAL 1 -
src/Parser/parser.yy
r950f7a7 r7527e63 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Jul 12 20:52:53201613 // Update Count : 1 66112 // Last Modified On : Mon Aug 15 15:18:19 2016 13 // Update Count : 1891 14 14 // 15 15 … … 60 60 std::stack< LinkageSpec::Type > linkageStack; 61 61 TypedefTable typedefTable; 62 63 void appendStr( std::string &to, std::string *from ) { 64 // "abc" "def" "ghi" => "abcdefghi", remove new text from quotes and insert before last quote in old string. 65 to.insert( to.length() - 1, from->substr( 1, from->length() - 2 ) ); 66 } // appendStr 62 67 %} 63 68 … … 116 121 DeclarationNode::TypeClass tclass; 117 122 StatementNode *sn; 118 ConstantNode *constant; 123 ConstantExpr *constant; 124 ForCtl *fctl; 119 125 LabelNode *label; 120 126 InitializerNode *in; 127 OperKinds op; 121 128 bool flag; 122 129 } … … 127 134 128 135 // expressions 129 %type< constant> constant136 %type<en> constant 130 137 %type<en> tuple tuple_expression_list 131 %type< en> ptrref_operator unary_operator assignment_operator138 %type<op> ptrref_operator unary_operator assignment_operator 132 139 %type<en> primary_expression postfix_expression unary_expression 133 140 %type<en> cast_expression multiplicative_expression additive_expression shift_expression … … 136 143 %type<en> constant_expression assignment_expression assignment_expression_opt 137 144 %type<en> comma_expression comma_expression_opt 138 %type<en> argument_expression_list argument_expression for_control_expression assignment_opt 145 %type<en> argument_expression_list argument_expression assignment_opt 146 %type<fctl> for_control_expression 139 147 %type<en> subrange 140 148 %type<en> asm_operands_opt asm_operands_list asm_operand 141 149 %type<label> label_list 142 %type< constant> asm_clobbers_list_opt150 %type<en> asm_clobbers_list_opt 143 151 %type<flag> asm_volatile_opt 144 152 … … 150 158 %type<sn> block_item_list block_item 151 159 %type<sn> case_clause 152 %type<en> case_value case_value_list153 %type<sn> case_ label case_label_list160 %type<en> case_value 161 %type<sn> case_value_list case_label case_label_list 154 162 %type<sn> switch_clause_list_opt switch_clause_list choose_clause_list_opt choose_clause_list 155 %type< pn> handler_list handler_clause finally_clause163 %type<sn> handler_list handler_clause finally_clause 156 164 157 165 // declarations … … 303 311 constant: 304 312 // ENUMERATIONconstant is not included here; it is treated as a variable with type "enumeration constant". 305 INTEGERconstant { $$ = makeConstant( ConstantNode::Integer, $1); }306 | FLOATINGconstant { $$ = makeConstant( ConstantNode::Float, $1); }307 | CHARACTERconstant { $$ = makeConstant( ConstantNode::Character, $1); }313 INTEGERconstant { $$ = new ExpressionNode( build_constantInteger( *$1 ) ); } 314 | FLOATINGconstant { $$ = new ExpressionNode( build_constantFloat( *$1 ) ); } 315 | CHARACTERconstant { $$ = new ExpressionNode( build_constantChar( *$1 ) ); } 308 316 ; 309 317 … … 330 338 331 339 string_literal_list: // juxtaposed strings are concatenated 332 STRINGliteral { $$ = makeConstantStr( ConstantNode::String, $1 ); } 333 | string_literal_list STRINGliteral { $$ = $1->appendstr( $2 ); } 340 STRINGliteral { $$ = build_constantStr( *$1 ); } 341 | string_literal_list STRINGliteral 342 { 343 appendStr( $1->get_constant()->get_value(), $2 ); 344 delete $2; // allocated by lexer 345 $$ = $1; 346 } 334 347 ; 335 348 … … 338 351 primary_expression: 339 352 IDENTIFIER // typedef name cannot be used as a variable name 340 { $$ = new VarRefNode( $1); }353 { $$ = new ExpressionNode( build_varref( $1 ) ); } 341 354 | zero_one 342 { $$ = new VarRefNode( $1); }355 { $$ = new ExpressionNode( build_varref( $1 ) ); } 343 356 | '(' comma_expression ')' 344 357 { $$ = $2; } 345 358 | '(' compound_statement ')' // GCC, lambda expression 346 { $$ = new ValofExprNode( $2); }359 { $$ = new ExpressionNode( build_valexpr( $2 ) ); } 347 360 ; 348 361 … … 354 367 // little advantage to this feature and many disadvantages. It is possible to write x[(i,j)] in CFA, which is 355 368 // equivalent to the old x[i,j]. 356 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Index ), $1, $4); }369 { $$ = new ExpressionNode( build_binary_val( OperKinds::Index, $1, $4 ) ); } 357 370 | postfix_expression '(' argument_expression_list ')' 358 { $$ = new CompositeExprNode( $1, $3); }371 { $$ = new ExpressionNode( build_func( $1, $3 ) ); } 359 372 // ambiguity with .0 so space required after field-selection, e.g. 360 373 // struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1; 361 374 | postfix_expression '.' no_attr_identifier 362 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), $1, new VarRefNode( $3 )); }375 { $$ = new ExpressionNode( build_fieldSel( $1, build_varref( $3 ) ) ); } 363 376 | postfix_expression '.' '[' push field_list pop ']' // CFA, tuple field selector 364 377 | postfix_expression ARROW no_attr_identifier 365 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), $1, new VarRefNode( $3 )); }378 { $$ = new ExpressionNode( build_pfieldSel( $1, build_varref( $3 ) ) ); } 366 379 | postfix_expression ARROW '[' push field_list pop ']' // CFA, tuple field selector 367 380 | postfix_expression ICR 368 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::IncrPost ), $1); }381 { $$ = new ExpressionNode( build_unary_ptr( OperKinds::IncrPost, $1 ) ); } 369 382 | postfix_expression DECR 370 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), $1); }383 { $$ = new ExpressionNode( build_unary_ptr( OperKinds::DecrPost, $1 ) ); } 371 384 | '(' type_name_no_function ')' '{' initializer_list comma_opt '}' // C99 372 { $$ = new CompoundLiteralNode( $2, new InitializerNode( $5, true) ); }385 { $$ = new ExpressionNode( build_compoundLiteral( $2, new InitializerNode( $5, true ) ) ); } 373 386 | postfix_expression '{' argument_expression_list '}' // CFA 374 387 { 375 Token fn; fn.str = new std::string( "?{}" ); // location undefined 376 $$ = new CompositeExprNode( new VarRefNode( fn ), (ExpressionNode *)( $1 )->set_link( $3 ) ); 388 Token fn; 389 fn.str = new std::string( "?{}" ); // location undefined 390 $$ = new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $1 )->set_last( $3 ) ) ); 377 391 } 378 392 ; … … 381 395 argument_expression 382 396 | argument_expression_list ',' argument_expression 383 { $$ = (ExpressionNode *)( $1->set_l ink( $3 )); }397 { $$ = (ExpressionNode *)( $1->set_last( $3 )); } 384 398 ; 385 399 … … 388 402 { $$ = 0; } // use default argument 389 403 | assignment_expression 390 | no_attr_identifier ':' assignment_expression391 { $$ = $3->set_argName( $1 ); }392 // Only a list of no_attr_identifier_or_type_name is allowed in this context. However, there is insufficient393 // look ahead to distinguish between this list of parameter names and a tuple, so the tuple form must be used394 // with an appropriate semantic check.395 | '[' push assignment_expression pop ']' ':' assignment_expression396 { $$ = $7->set_argName( $3 ); }397 | '[' push assignment_expression ',' tuple_expression_list pop ']' ':' assignment_expression398 { $$ = $9->set_argName( new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)$3->set_link( flattenCommas( $5 )))); }399 404 ; 400 405 401 406 field_list: // CFA, tuple field selector 402 407 field 403 | field_list ',' field { $$ = (ExpressionNode *)$1->set_l ink( $3 ); }408 | field_list ',' field { $$ = (ExpressionNode *)$1->set_last( $3 ); } 404 409 ; 405 410 406 411 field: // CFA, tuple field selector 407 412 no_attr_identifier 408 { $$ = new VarRefNode( $1); }413 { $$ = new ExpressionNode( build_varref( $1 ) ); } 409 414 // ambiguity with .0 so space required after field-selection, e.g. 410 415 // struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1; 411 416 | no_attr_identifier '.' field 412 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( $1 ), $3); }417 { $$ = new ExpressionNode( build_fieldSel( $3, build_varref( $1 ) ) ); } 413 418 | no_attr_identifier '.' '[' push field_list pop ']' 414 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( $1 ), $5); }419 { $$ = new ExpressionNode( build_fieldSel( $5, build_varref( $1 ) ) ); } 415 420 | no_attr_identifier ARROW field 416 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( $1 ), $3); }421 { $$ = new ExpressionNode( build_pfieldSel( $3, build_varref( $1 ) ) ); } 417 422 | no_attr_identifier ARROW '[' push field_list pop ']' 418 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( $1 ), $5); }423 { $$ = new ExpressionNode( build_pfieldSel( $5, build_varref( $1 ) ) ); } 419 424 ; 420 425 … … 426 431 { $$ = $1; } 427 432 | string_literal_list 428 { $$ = $1; }433 { $$ = new ExpressionNode( $1 ); } 429 434 | EXTENSION cast_expression // GCC 430 435 { $$ = $2->set_extension( true ); } 431 | ptrref_operator cast_expression // CFA432 { $$ = new CompositeExprNode( $1, $2 ); }433 436 // '*' ('&') is separated from unary_operator because of shift/reduce conflict in: 434 437 // { * X; } // dereference X 435 438 // { * int X; } // CFA declaration of pointer to int 439 | ptrref_operator cast_expression // CFA 440 { 441 switch ( $1 ) { 442 case OperKinds::AddressOf: 443 $$ = new ExpressionNode( build_addressOf( $2 ) ); 444 break; 445 case OperKinds::PointTo: 446 $$ = new ExpressionNode( build_unary_val( $1, $2 ) ); 447 break; 448 default: 449 assert( false ); 450 } 451 } 436 452 | unary_operator cast_expression 437 { $$ = new CompositeExprNode( $1, $2); }453 { $$ = new ExpressionNode( build_unary_val( $1, $2 ) ); } 438 454 | ICR unary_expression 439 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Incr ), $2); }455 { $$ = new ExpressionNode( build_unary_ptr( OperKinds::Incr, $2 ) ); } 440 456 | DECR unary_expression 441 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), $2); }457 { $$ = new ExpressionNode( build_unary_ptr( OperKinds::Decr, $2 ) ); } 442 458 | SIZEOF unary_expression 443 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), $2); }459 { $$ = new ExpressionNode( build_sizeOfexpr( $2 ) ); } 444 460 | SIZEOF '(' type_name_no_function ')' 445 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( $3 )); } 461 { $$ = new ExpressionNode( build_sizeOftype( $3 ) ); } 462 | ALIGNOF unary_expression // GCC, variable alignment 463 { $$ = new ExpressionNode( build_alignOfexpr( $2 ) ); } 464 | ALIGNOF '(' type_name_no_function ')' // GCC, type alignment 465 { $$ = new ExpressionNode( build_alignOftype( $3 ) ); } 446 466 | OFFSETOF '(' type_name_no_function ',' no_attr_identifier ')' 447 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( $3 ), new VarRefNode( $5 )); }467 { $$ = new ExpressionNode( build_offsetOf( $3, build_varref( $5 ) ) ); } 448 468 | ATTR_IDENTIFIER 449 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 )); } 469 { $$ = new ExpressionNode( build_attrexpr( build_varref( $1 ), nullptr ) ); } 470 | ATTR_IDENTIFIER '(' argument_expression ')' 471 { $$ = new ExpressionNode( build_attrexpr( build_varref( $1 ), $3 ) ); } 450 472 | ATTR_IDENTIFIER '(' type_name ')' 451 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 ), new TypeValueNode( $3 )); } 452 | ATTR_IDENTIFIER '(' argument_expression ')' 453 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 ), $3 ); } 454 | ALIGNOF unary_expression // GCC, variable alignment 455 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), $2 ); } 456 | ALIGNOF '(' type_name_no_function ')' // GCC, type alignment 457 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( $3 ) ); } 473 { $$ = new ExpressionNode( build_attrtype( build_varref( $1 ), $3 ) ); } 458 474 // | ANDAND IDENTIFIER // GCC, address of label 459 // { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::LabelAddress ), new VarRefNode( $2, true ) ); }475 // { $$ = new ExpressionNode( new OperatorNode( OperKinds::LabelAddress ), new ExpressionNode( build_varref( $2, true ) ); } 460 476 ; 461 477 462 478 ptrref_operator: 463 '*' { $$ = new OperatorNode( OperatorNode::PointTo ); }464 | '&' { $$ = new OperatorNode( OperatorNode::AddressOf ); }479 '*' { $$ = OperKinds::PointTo; } 480 | '&' { $$ = OperKinds::AddressOf; } 465 481 // GCC, address of label must be handled by semantic check for ref,ref,label 466 | ANDAND { $$ = new OperatorNode( OperatorNode::And ); }482 // | ANDAND { $$ = OperKinds::And; } 467 483 ; 468 484 469 485 unary_operator: 470 '+' { $$ = new OperatorNode( OperatorNode::UnPlus ); }471 | '-' { $$ = new OperatorNode( OperatorNode::UnMinus ); }472 | '!' { $$ = new OperatorNode( OperatorNode::Neg ); }473 | '~' { $$ = new OperatorNode( OperatorNode::BitNeg ); }486 '+' { $$ = OperKinds::UnPlus; } 487 | '-' { $$ = OperKinds::UnMinus; } 488 | '!' { $$ = OperKinds::Neg; } 489 | '~' { $$ = OperKinds::BitNeg; } 474 490 ; 475 491 … … 477 493 unary_expression 478 494 | '(' type_name_no_function ')' cast_expression 479 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( $2 ), $4); }495 { $$ = new ExpressionNode( build_cast( $2, $4 ) ); } 480 496 | '(' type_name_no_function ')' tuple 481 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( $2 ), $4); }497 { $$ = new ExpressionNode( build_cast( $2, $4 ) ); } 482 498 ; 483 499 … … 485 501 cast_expression 486 502 | multiplicative_expression '*' cast_expression 487 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Mul ), $1, $3); }503 { $$ = new ExpressionNode( build_binary_val( OperKinds::Mul, $1, $3 ) ); } 488 504 | multiplicative_expression '/' cast_expression 489 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Div ), $1, $3); }505 { $$ = new ExpressionNode( build_binary_val( OperKinds::Div, $1, $3 ) ); } 490 506 | multiplicative_expression '%' cast_expression 491 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Mod ), $1, $3); }507 { $$ = new ExpressionNode( build_binary_val( OperKinds::Mod, $1, $3 ) ); } 492 508 ; 493 509 … … 495 511 multiplicative_expression 496 512 | additive_expression '+' multiplicative_expression 497 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Plus ), $1, $3); }513 { $$ = new ExpressionNode( build_binary_val( OperKinds::Plus, $1, $3 ) ); } 498 514 | additive_expression '-' multiplicative_expression 499 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Minus ), $1, $3); }515 { $$ = new ExpressionNode( build_binary_val( OperKinds::Minus, $1, $3 ) ); } 500 516 ; 501 517 … … 503 519 additive_expression 504 520 | shift_expression LS additive_expression 505 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::LShift ), $1, $3); }521 { $$ = new ExpressionNode( build_binary_val( OperKinds::LShift, $1, $3 ) ); } 506 522 | shift_expression RS additive_expression 507 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::RShift ), $1, $3); }523 { $$ = new ExpressionNode( build_binary_val( OperKinds::RShift, $1, $3 ) ); } 508 524 ; 509 525 … … 511 527 shift_expression 512 528 | relational_expression '<' shift_expression 513 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::LThan ), $1, $3); }529 { $$ = new ExpressionNode( build_binary_val( OperKinds::LThan, $1, $3 ) ); } 514 530 | relational_expression '>' shift_expression 515 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::GThan ), $1, $3); }531 { $$ = new ExpressionNode( build_binary_val( OperKinds::GThan, $1, $3 ) ); } 516 532 | relational_expression LE shift_expression 517 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::LEThan ), $1, $3); }533 { $$ = new ExpressionNode( build_binary_val( OperKinds::LEThan, $1, $3 ) ); } 518 534 | relational_expression GE shift_expression 519 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::GEThan ), $1, $3); }535 { $$ = new ExpressionNode( build_binary_val( OperKinds::GEThan, $1, $3 ) ); } 520 536 ; 521 537 … … 523 539 relational_expression 524 540 | equality_expression EQ relational_expression 525 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Eq ), $1, $3); }541 { $$ = new ExpressionNode( build_binary_val( OperKinds::Eq, $1, $3 ) ); } 526 542 | equality_expression NE relational_expression 527 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Neq ), $1, $3); }543 { $$ = new ExpressionNode( build_binary_val( OperKinds::Neq, $1, $3 ) ); } 528 544 ; 529 545 … … 531 547 equality_expression 532 548 | AND_expression '&' equality_expression 533 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::BitAnd ), $1, $3); }549 { $$ = new ExpressionNode( build_binary_val( OperKinds::BitAnd, $1, $3 ) ); } 534 550 ; 535 551 … … 537 553 AND_expression 538 554 | exclusive_OR_expression '^' AND_expression 539 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Xor ), $1, $3); }555 { $$ = new ExpressionNode( build_binary_val( OperKinds::Xor, $1, $3 ) ); } 540 556 ; 541 557 … … 543 559 exclusive_OR_expression 544 560 | inclusive_OR_expression '|' exclusive_OR_expression 545 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::BitOr ), $1, $3); }561 { $$ = new ExpressionNode( build_binary_val( OperKinds::BitOr, $1, $3 ) ); } 546 562 ; 547 563 … … 549 565 inclusive_OR_expression 550 566 | logical_AND_expression ANDAND inclusive_OR_expression 551 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::And ), $1, $3); }567 { $$ = new ExpressionNode( build_and_or( $1, $3, true ) ); } 552 568 ; 553 569 … … 555 571 logical_AND_expression 556 572 | logical_OR_expression OROR logical_AND_expression 557 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Or ), $1, $3); }573 { $$ = new ExpressionNode( build_and_or( $1, $3, false ) ); } 558 574 ; 559 575 … … 561 577 logical_OR_expression 562 578 | logical_OR_expression '?' comma_expression ':' conditional_expression 563 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*$1, *$3, *$5 ) ) ); } 579 { $$ = new ExpressionNode( build_cond( $1, $3, $5 ) ); } 580 // FIX ME: this hack computes $1 twice 564 581 | logical_OR_expression '?' /* empty */ ':' conditional_expression // GCC, omitted first operand 565 { $$ =new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), $1, $4); }582 { $$ = new ExpressionNode( build_cond( $1, $1, $4 ) ); } 566 583 | logical_OR_expression '?' comma_expression ':' tuple // CFA, tuple expression 567 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*$1, *$3, *$5 )) ); }584 { $$ = new ExpressionNode( build_cond( $1, $3, $5 ) ); } 568 585 ; 569 586 … … 575 592 // CFA, assignment is separated from assignment_operator to ensure no assignment operations for tuples 576 593 conditional_expression 577 | unary_expression '=' assignment_expression578 { $$ =new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), $1, $3 ); }579 594 | unary_expression assignment_operator assignment_expression 580 { $$ = new CompositeExprNode( $2, $1, $3); }595 { $$ = new ExpressionNode( build_binary_ptr( $2, $1, $3 ) ); } 581 596 | tuple assignment_opt // CFA, tuple expression 582 { $$ = ( $2 == 0 ) ? $1 : new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), $1, $2); }597 { $$ = ( $2 == 0 ) ? $1 : new ExpressionNode( build_binary_ptr( OperKinds::Assign, $1, $2 ) ); } 583 598 ; 584 599 585 600 assignment_expression_opt: 586 601 // empty 587 { $$ = n ew NullExprNode; }602 { $$ = nullptr; } 588 603 | assignment_expression 604 ; 605 606 assignment_operator: 607 '=' { $$ = OperKinds::Assign; } 608 | MULTassign { $$ = OperKinds::MulAssn; } 609 | DIVassign { $$ = OperKinds::DivAssn; } 610 | MODassign { $$ = OperKinds::ModAssn; } 611 | PLUSassign { $$ = OperKinds::PlusAssn; } 612 | MINUSassign { $$ = OperKinds::MinusAssn; } 613 | LSassign { $$ = OperKinds::LSAssn; } 614 | RSassign { $$ = OperKinds::RSAssn; } 615 | ANDassign { $$ = OperKinds::AndAssn; } 616 | ERassign { $$ = OperKinds::ERAssn; } 617 | ORassign { $$ = OperKinds::OrAssn; } 589 618 ; 590 619 … … 593 622 // comma_expression in new_identifier_parameter_array and new_abstract_array 594 623 '[' ']' 595 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC) ); }624 { $$ = new ExpressionNode( build_tuple() ); } 596 625 | '[' push assignment_expression pop ']' 597 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), $3); }626 { $$ = new ExpressionNode( build_tuple( $3 ) ); } 598 627 | '[' push ',' tuple_expression_list pop ']' 599 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(new NullExprNode)->set_link( $4) ); }628 { $$ = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( $4 ) ) ); } 600 629 | '[' push assignment_expression ',' tuple_expression_list pop ']' 601 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)$3->set_link( flattenCommas( $5 ) ) ); }630 { $$ = new ExpressionNode( build_tuple( (ExpressionNode *)$3->set_last( $5 ) ) ); } 602 631 ; 603 632 … … 605 634 assignment_expression_opt 606 635 | tuple_expression_list ',' assignment_expression_opt 607 { $$ = (ExpressionNode *)$1->set_link( $3 ); } 608 ; 609 610 assignment_operator: 611 MULTassign { $$ = new OperatorNode( OperatorNode::MulAssn ); } 612 | DIVassign { $$ = new OperatorNode( OperatorNode::DivAssn ); } 613 | MODassign { $$ = new OperatorNode( OperatorNode::ModAssn ); } 614 | PLUSassign { $$ = new OperatorNode( OperatorNode::PlusAssn ); } 615 | MINUSassign { $$ = new OperatorNode( OperatorNode::MinusAssn ); } 616 | LSassign { $$ = new OperatorNode( OperatorNode::LSAssn ); } 617 | RSassign { $$ = new OperatorNode( OperatorNode::RSAssn ); } 618 | ANDassign { $$ = new OperatorNode( OperatorNode::AndAssn ); } 619 | ERassign { $$ = new OperatorNode( OperatorNode::ERAssn ); } 620 | ORassign { $$ = new OperatorNode( OperatorNode::OrAssn ); } 636 { $$ = (ExpressionNode *)$1->set_last( $3 ); } 621 637 ; 622 638 623 639 comma_expression: 624 640 assignment_expression 625 | comma_expression ',' assignment_expression // { $$ = (ExpressionNode *)$1->add_to_list( $3 ); }626 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Comma ), $1, $3); }641 | comma_expression ',' assignment_expression 642 { $$ = new ExpressionNode( build_comma( $1, $3 ) ); } 627 643 ; 628 644 … … 646 662 | '^' postfix_expression '{' argument_expression_list '}' ';' // CFA 647 663 { 648 Token fn; fn.str = new std::string( "^?{}" ); // location undefined649 $$ = new StatementNode( StatementNode::Exp, new CompositeExprNode( new VarRefNode( fn ),650 (ExpressionNode *)( $2 )->set_link( $4 ) ), 0);664 Token fn; 665 fn.str = new std::string( "^?{}" ); // location undefined 666 $$ = new StatementNode( build_expr( new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $2 )->set_last( $4 ) ) ) ) ); 651 667 } 652 668 ; … … 662 678 compound_statement: 663 679 '{' '}' 664 { $$ = new CompoundStmtNode( (StatementNode *)0); }680 { $$ = new StatementNode( build_compound( (StatementNode *)0 ) ); } 665 681 | '{' 666 682 // Two scopes are necessary because the block itself has a scope, but every declaration within the block also … … 669 685 local_label_declaration_opt // GCC, local labels 670 686 block_item_list pop '}' // C99, intermix declarations and statements 671 { $$ = new CompoundStmtNode( $5); }687 { $$ = new StatementNode( build_compound( $5 ) ); } 672 688 ; 673 689 … … 675 691 block_item 676 692 | block_item_list push block_item 677 { if ( $1 != 0 ) { $1->set_l ink( $3 ); $$ = $1; } }693 { if ( $1 != 0 ) { $1->set_last( $3 ); $$ = $1; } } 678 694 ; 679 695 … … 683 699 | EXTENSION declaration // GCC 684 700 { // mark all fields in list 685 for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_ link() )701 for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_next() ) 686 702 iter->set_extension( true ); 687 703 $$ = new StatementNode( $2 ); … … 695 711 statement 696 712 | statement_list statement 697 { if ( $1 != 0 ) { $1->set_l ink( $2 ); $$ = $1; } }713 { if ( $1 != 0 ) { $1->set_last( $2 ); $$ = $1; } } 698 714 ; 699 715 700 716 expression_statement: 701 717 comma_expression_opt ';' 702 { $$ = new StatementNode( StatementNode::Exp, $1, 0); }718 { $$ = new StatementNode( build_expr( $1 ) ); } 703 719 ; 704 720 … … 706 722 IF '(' comma_expression ')' statement %prec THEN 707 723 // explicitly deal with the shift/reduce conflict on if/else 708 { $$ = new StatementNode( StatementNode::If, $3, $5); }724 { $$ = new StatementNode( build_if( $3, $5, nullptr ) ); } 709 725 | IF '(' comma_expression ')' statement ELSE statement 710 { $$ = new StatementNode( StatementNode::If, $3, (StatementNode *)mkList((*$5, *$7 )) ); }726 { $$ = new StatementNode( build_if( $3, $5, $7 ) ); } 711 727 | SWITCH '(' comma_expression ')' case_clause // CFA 712 { $$ = new StatementNode( StatementNode::Switch, $3, $5); }728 { $$ = new StatementNode( build_switch( $3, $5 ) ); } 713 729 | SWITCH '(' comma_expression ')' '{' push declaration_list_opt switch_clause_list_opt '}' // CFA 714 730 { 715 StatementNode *sw = new StatementNode( StatementNode::Switch, $3, $8);731 StatementNode *sw = new StatementNode( build_switch( $3, $8 ) ); 716 732 // The semantics of the declaration list is changed to include associated initialization, which is performed 717 733 // *before* the transfer to the appropriate case clause by hoisting the declarations into a compound 718 734 // statement around the switch. Statements after the initial declaration list can never be executed, and 719 // therefore, are removed from the grammar even though C allows it. Change also applies to choose statement. 720 $$ = $7 != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( $7 ))->set_link( sw )) ) : sw; 735 // therefore, are removed from the grammar even though C allows it. The change also applies to choose 736 // statement. 737 $$ = $7 != 0 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( $7 ))->set_last( sw )) ) ) : sw; 721 738 } 722 739 | CHOOSE '(' comma_expression ')' case_clause // CFA 723 { $$ = new StatementNode( StatementNode::Switch, $3, $5); }740 { $$ = new StatementNode( build_switch( $3, $5 ) ); } 724 741 | CHOOSE '(' comma_expression ')' '{' push declaration_list_opt choose_clause_list_opt '}' // CFA 725 742 { 726 StatementNode *sw = new StatementNode( StatementNode::Switch, $3, $8);727 $$ = $7 != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( $7 ))->set_link( sw )) ) : sw;743 StatementNode *sw = new StatementNode( build_switch( $3, $8 ) ); 744 $$ = $7 != 0 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( $7 ))->set_last( sw )) ) ) : sw; 728 745 } 729 746 ; … … 735 752 constant_expression { $$ = $1; } 736 753 | constant_expression ELLIPSIS constant_expression // GCC, subrange 737 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), $1, $3); }754 { $$ = new ExpressionNode( build_range( $1, $3 ) ); } 738 755 | subrange // CFA, subrange 739 756 ; 740 757 741 758 case_value_list: // CFA 742 case_value 743 | case_value_list ',' case_value744 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(tupleContents( $1 ))->set_link( $3) ); }759 case_value { $$ = new StatementNode( build_case( $1 ) ); } 760 // convert case list, e.g., "case 1, 3, 5:" into "case 1: case 3: case 5" 761 | case_value_list ',' case_value { $$ = (StatementNode *)($1->set_last( new StatementNode( build_case( $3 ) ) ) ); } 745 762 ; 746 763 747 764 case_label: // CFA 748 CASE case_value_list ':' { $$ = new StatementNode( StatementNode::Case, $2, 0 ); }749 | DEFAULT ':' { $$ = new StatementNode( StatementNode::Default); }765 CASE case_value_list ':' { $$ = $2; } 766 | DEFAULT ':' { $$ = new StatementNode( build_default() ); } 750 767 // A semantic check is required to ensure only one default clause per switch/choose statement. 751 768 ; … … 753 770 case_label_list: // CFA 754 771 case_label 755 | case_label_list case_label { $$ = (StatementNode *)( $1->set_l ink( $2 )); }772 | case_label_list case_label { $$ = (StatementNode *)( $1->set_last( $2 )); } 756 773 ; 757 774 758 775 case_clause: // CFA 759 case_label_list statement { $$ = $1->append_last_case( new CompoundStmtNode( $2) ); }776 case_label_list statement { $$ = $1->append_last_case( new StatementNode( build_compound( $2 ) ) ); } 760 777 ; 761 778 … … 768 785 switch_clause_list: // CFA 769 786 case_label_list statement_list 770 { $$ = $1->append_last_case( new CompoundStmtNode( $2) ); }787 { $$ = $1->append_last_case( new StatementNode( build_compound( $2 ) ) ); } 771 788 | switch_clause_list case_label_list statement_list 772 { $$ = (StatementNode *)( $1->set_l ink( $2->append_last_case( new CompoundStmtNode( $3) ) ) ); }789 { $$ = (StatementNode *)( $1->set_last( $2->append_last_case( new StatementNode( build_compound( $3 ) ) ) ) ); } 773 790 ; 774 791 … … 783 800 { $$ = $1->append_last_case( $2 ); } 784 801 | case_label_list statement_list fall_through_opt 785 { $$ = $1->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*$2, *$3 ) ) ) ); }802 { $$ = $1->append_last_case( new StatementNode( build_compound( (StatementNode *)$2->set_last( $3 ) ) ) ); } 786 803 | choose_clause_list case_label_list fall_through 787 { $$ = (StatementNode *)( $1->set_l ink( $2->append_last_case( $3 ))); }804 { $$ = (StatementNode *)( $1->set_last( $2->append_last_case( $3 ))); } 788 805 | choose_clause_list case_label_list statement_list fall_through_opt 789 { $$ = (StatementNode *)( $1->set_l ink( $2->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*$3, *$4 ) ) ) ) ) ); }806 { $$ = (StatementNode *)( $1->set_last( $2->append_last_case( new StatementNode( build_compound( (StatementNode *)$3->set_last( $4 ) ) ) ) ) ); } 790 807 ; 791 808 792 809 fall_through_opt: // CFA 793 810 // empty 794 { $$ = new StatementNode( StatementNode::Break ); }// insert implicit break811 { $$ = new StatementNode( build_branch( "", BranchStmt::Break ) ); } // insert implicit break 795 812 | fall_through 796 813 ; … … 805 822 iteration_statement: 806 823 WHILE '(' comma_expression ')' statement 807 { $$ = new StatementNode( StatementNode::While, $3, $5); }824 { $$ = new StatementNode( build_while( $3, $5 ) ); } 808 825 | DO statement WHILE '(' comma_expression ')' ';' 809 { $$ = new StatementNode( StatementNode::Do, $5, $2); }826 { $$ = new StatementNode( build_while( $5, $2 ) ); } 810 827 | FOR '(' push for_control_expression ')' statement 811 { $$ = new StatementNode( StatementNode::For, $4, $6); }828 { $$ = new StatementNode( build_for( $4, $6 ) ); } 812 829 ; 813 830 814 831 for_control_expression: 815 832 comma_expression_opt pop ';' comma_expression_opt ';' comma_expression_opt 816 { $$ = new ForCtl ExprNode( $1, $4, $6 ); }833 { $$ = new ForCtl( $1, $4, $6 ); } 817 834 | declaration comma_expression_opt ';' comma_expression_opt // C99 818 { $$ = new ForCtl ExprNode( $1, $2, $4 ); }819 ;835 { $$ = new ForCtl( $1, $2, $4 ); } 836 ; 820 837 821 838 jump_statement: 822 839 GOTO IDENTIFIER ';' 823 { $$ = new StatementNode( StatementNode::Goto, $2); }840 { $$ = new StatementNode( build_branch( *$2, BranchStmt::Goto ) ); } 824 841 | GOTO '*' comma_expression ';' // GCC, computed goto 825 842 // The syntax for the GCC computed goto violates normal expression precedence, e.g., goto *i+3; => goto *(i+3); 826 843 // whereas normal operator precedence yields goto (*i)+3; 827 { $$ = new StatementNode( StatementNode::Goto, $3); }844 { $$ = new StatementNode( build_computedgoto( $3 ) ); } 828 845 | CONTINUE ';' 829 846 // A semantic check is required to ensure this statement appears only in the body of an iteration statement. 830 { $$ = new StatementNode( StatementNode::Continue); }847 { $$ = new StatementNode( build_branch( "", BranchStmt::Continue ) ); } 831 848 | CONTINUE IDENTIFIER ';' // CFA, multi-level continue 832 849 // A semantic check is required to ensure this statement appears only in the body of an iteration statement, and 833 850 // the target of the transfer appears only at the start of an iteration statement. 834 { $$ = new StatementNode( StatementNode::Continue, $2 ); }851 { $$ = new StatementNode( build_branch( *$2, BranchStmt::Continue ) ); delete $2; } 835 852 | BREAK ';' 836 853 // A semantic check is required to ensure this statement appears only in the body of an iteration statement. 837 { $$ = new StatementNode( StatementNode::Break); }854 { $$ = new StatementNode( build_branch( "", BranchStmt::Break ) ); } 838 855 | BREAK IDENTIFIER ';' // CFA, multi-level exit 839 856 // A semantic check is required to ensure this statement appears only in the body of an iteration statement, and 840 857 // the target of the transfer appears only at the start of an iteration statement. 841 { $$ = new StatementNode( StatementNode::Break, $2 ); }858 { $$ = new StatementNode( build_branch( *$2, BranchStmt::Break ) ); delete $2; } 842 859 | RETURN comma_expression_opt ';' 843 { $$ = new StatementNode( StatementNode::Return, $2, 0 ); } 844 | THROW assignment_expression_opt ';' 845 { $$ = new StatementNode( StatementNode::Throw, $2, 0 ); } 846 // | THROW ';' 847 // { $$ = new StatementNode( StatementNode::Throw ); } 848 | THROWRESUME assignment_expression_opt ';' 849 { $$ = new StatementNode( StatementNode::Throw, $2, 0 ); } 850 | THROWRESUME assignment_expression_opt AT assignment_expression ';' 851 { $$ = new StatementNode( StatementNode::Throw, $2, 0 ); } 852 // | THROWRESUME ';' 853 // { $$ = new StatementNode( StatementNode::Throw ); } 860 { $$ = new StatementNode( build_return( $2 ) ); } 861 | THROW assignment_expression_opt ';' // handles rethrow 862 { $$ = new StatementNode( build_throw( $2 ) ); } 863 | THROWRESUME assignment_expression_opt ';' // handles reresume 864 { $$ = new StatementNode( build_throw( $2 ) ); } 865 | THROWRESUME assignment_expression_opt AT assignment_expression ';' // handles reresume 866 { $$ = new StatementNode( build_throw( $2 ) ); } 854 867 ; 855 868 856 869 exception_statement: 857 870 TRY compound_statement handler_list 858 { $$ = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*$2,*$3 )))); }871 { $$ = new StatementNode( build_try( $2, $3, 0 ) ); } 859 872 | TRY compound_statement finally_clause 860 { $$ = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*$2,*$3 )))); }873 { $$ = new StatementNode( build_try( $2, 0, $3 ) ); } 861 874 | TRY compound_statement handler_list finally_clause 862 { 863 $3->set_link( $4 ); 864 $$ = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*$2,*$3 )))); 865 } 875 { $$ = new StatementNode( build_try( $2, $3, $4 ) ); } 866 876 ; 867 877 868 878 handler_list: 869 // There must be at least one catch clause870 879 handler_clause 871 880 // ISO/IEC 9899:1999 Section 15.3(6 ) If present, a "..." handler shall be the last handler for its try block. 872 881 | CATCH '(' ELLIPSIS ')' compound_statement 873 { $$ = StatementNode::newCatchStmt( 0, $5, true); }882 { $$ = new StatementNode( build_catch( 0, $5, true ) ); } 874 883 | handler_clause CATCH '(' ELLIPSIS ')' compound_statement 875 { $$ = $1->set_link( StatementNode::newCatchStmt( 0, $6, true) ); }884 { $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( 0, $6, true ) ) ); } 876 885 | CATCHRESUME '(' ELLIPSIS ')' compound_statement 877 { $$ = StatementNode::newCatchStmt( 0, $5, true); }886 { $$ = new StatementNode( build_catch( 0, $5, true ) ); } 878 887 | handler_clause CATCHRESUME '(' ELLIPSIS ')' compound_statement 879 { $$ = $1->set_link( StatementNode::newCatchStmt( 0, $6, true) ); }888 { $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( 0, $6, true ) ) ); } 880 889 ; 881 890 882 891 handler_clause: 883 892 CATCH '(' push push exception_declaration pop ')' compound_statement pop 884 { $$ = StatementNode::newCatchStmt( $5, $8); }893 { $$ = new StatementNode( build_catch( $5, $8 ) ); } 885 894 | handler_clause CATCH '(' push push exception_declaration pop ')' compound_statement pop 886 { $$ = $1->set_link( StatementNode::newCatchStmt( $6, $9) ); }895 { $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( $6, $9 ) ) ); } 887 896 | CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop 888 { $$ = StatementNode::newCatchStmt( $5, $8); }897 { $$ = new StatementNode( build_catch( $5, $8 ) ); } 889 898 | handler_clause CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop 890 { $$ = $1->set_link( StatementNode::newCatchStmt( $6, $9) ); }899 { $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( $6, $9 ) ) ); } 891 900 ; 892 901 … … 894 903 FINALLY compound_statement 895 904 { 896 $$ = new StatementNode( StatementNode::Finally, 0, $2 ); 897 std::cout << "Just created a finally node" << std::endl; 905 $$ = new StatementNode( build_finally( $2 ) ); 898 906 } 899 907 ; … … 923 931 asm_statement: 924 932 ASM asm_volatile_opt '(' string_literal_list ')' ';' 925 { $$ = new AsmStmtNode( StatementNode::Asm, $2, $4, 0); }933 { $$ = new StatementNode( build_asmstmt( $2, $4, 0 ) ); } 926 934 | ASM asm_volatile_opt '(' string_literal_list ':' asm_operands_opt ')' ';' // remaining GCC 927 { $$ = new AsmStmtNode( StatementNode::Asm, $2, $4, $6); }935 { $$ = new StatementNode( build_asmstmt( $2, $4, $6 ) ); } 928 936 | ASM asm_volatile_opt '(' string_literal_list ':' asm_operands_opt ':' asm_operands_opt ')' ';' 929 { $$ = new AsmStmtNode( StatementNode::Asm, $2, $4, $6, $8); }937 { $$ = new StatementNode( build_asmstmt( $2, $4, $6, $8 ) ); } 930 938 | ASM asm_volatile_opt '(' string_literal_list ':' asm_operands_opt ':' asm_operands_opt ':' asm_clobbers_list_opt ')' ';' 931 { $$ = new AsmStmtNode( StatementNode::Asm, $2, $4, $6, $8, $10); }939 { $$ = new StatementNode( build_asmstmt( $2, $4, $6, $8, $10 ) ); } 932 940 | ASM asm_volatile_opt GOTO '(' string_literal_list ':' ':' asm_operands_opt ':' asm_clobbers_list_opt ':' label_list ')' ';' 933 { $$ = new AsmStmtNode( StatementNode::Asm, $2, $5, 0, $8, $10, $12); }941 { $$ = new StatementNode( build_asmstmt( $2, $5, 0, $8, $10, $12 ) ); } 934 942 ; 935 943 … … 950 958 asm_operand 951 959 | asm_operands_list ',' asm_operand 952 { $$ = (ExpressionNode *)$1->set_l ink( $3 ); }960 { $$ = (ExpressionNode *)$1->set_last( $3 ); } 953 961 ; 954 962 955 963 asm_operand: // GCC 956 964 string_literal_list '(' constant_expression ')' 957 { $$ = new AsmExprNode( 0, $1, $3); }965 { $$ = new ExpressionNode( build_asmexpr( 0, $1, $3 ) ); } 958 966 | '[' constant_expression ']' string_literal_list '(' constant_expression ')' 959 { $$ = new AsmExprNode( $2, $4, $6); }967 { $$ = new ExpressionNode( build_asmexpr( $2, $4, $6 ) ); } 960 968 ; 961 969 … … 964 972 { $$ = 0; } // use default argument 965 973 | string_literal_list 966 { $$ = $1; }974 { $$ = new ExpressionNode( $1 ); } 967 975 | asm_clobbers_list_opt ',' string_literal_list 968 { $$ = ( ConstantNode *)$1->set_link( $3); }976 { $$ = (ExpressionNode *)$1->set_last( new ExpressionNode( $3 ) ); } 969 977 ; 970 978 971 979 label_list: 972 980 no_attr_identifier 973 { $$ = new LabelNode(); $$-> append_label($1 ); }981 { $$ = new LabelNode(); $$->labels.push_back( *$1 ); } 974 982 | label_list ',' no_attr_identifier 975 { $$ = $1; $1-> append_label($3 ); }983 { $$ = $1; $1->labels.push_back( *$3 ); } 976 984 ; 977 985 … … 1489 1497 | EXTENSION field_declaring_list ';' // GCC 1490 1498 { // mark all fields in list 1491 for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_ link() )1499 for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_next() ) 1492 1500 iter->set_extension( true ); 1493 1501 $$ = $2; … … 1735 1743 | initializer 1736 1744 | designation initializer { $$ = $2->set_designators( $1 ); } 1737 | initializer_list ',' initializer { $$ = (InitializerNode *)( $1->set_l ink( $3 ) ); }1745 | initializer_list ',' initializer { $$ = (InitializerNode *)( $1->set_last( $3 ) ); } 1738 1746 | initializer_list ',' designation initializer 1739 { $$ = (InitializerNode *)( $1->set_l ink( $4->set_designators( $3 ) ) ); }1747 { $$ = (InitializerNode *)( $1->set_last( $4->set_designators( $3 ) ) ); } 1740 1748 ; 1741 1749 … … 1753 1761 designator_list ':' // C99, CFA uses ":" instead of "=" 1754 1762 | no_attr_identifier_or_type_name ':' // GCC, field name 1755 { $$ = new VarRefNode( $1); }1763 { $$ = new ExpressionNode( build_varref( $1 ) ); } 1756 1764 ; 1757 1765 … … 1759 1767 designator 1760 1768 | designator_list designator 1761 { $$ = (ExpressionNode *)( $1->set_l ink( $2 )); }1762 //| designator_list designator { $$ = new CompositeExprNode( $1, $2 ); }1769 { $$ = (ExpressionNode *)( $1->set_last( $2 ) ); } 1770 //| designator_list designator { $$ = new ExpressionNode( $1, $2 ); } 1763 1771 ; 1764 1772 1765 1773 designator: 1766 // lexer ambiguity: designator ".0" is floating-point constant or designator for name 0 only ".0" and ".1" 1767 // allowed => semantic check 1768 FLOATINGconstant 1769 { $$ = new DesignatorNode( new VarRefNode( $1 ) ); } 1770 | '.' no_attr_identifier_or_type_name // C99, field name 1771 { $$ = new DesignatorNode( new VarRefNode( $2 ) ); } 1774 '.' no_attr_identifier_or_type_name // C99, field name 1775 { $$ = new ExpressionNode( build_varref( $2 ) ); } 1772 1776 | '[' push assignment_expression pop ']' // C99, single array element 1773 1777 // assignment_expression used instead of constant_expression because of shift/reduce conflicts with tuple. 1774 { $$ = new DesignatorNode( $3, true ); }1778 { $$ = $3; } 1775 1779 | '[' push subrange pop ']' // CFA, multiple array elements 1776 { $$ = new DesignatorNode( $3, true ); }1780 { $$ = $3; } 1777 1781 | '[' push constant_expression ELLIPSIS constant_expression pop ']' // GCC, multiple array elements 1778 { $$ = new DesignatorNode( new CompositeExprNode( new OperatorNode( OperatorNode::Range ), $3, $5 ), true); }1782 { $$ = new ExpressionNode( build_range( $3, $5 ) ); } 1779 1783 | '.' '[' push field_list pop ']' // CFA, tuple field selector 1780 { $$ = new DesignatorNode( $4 ); }1784 { $$ = $4; } 1781 1785 ; 1782 1786 … … 1866 1870 type_name_list: // CFA 1867 1871 type_name 1868 { $$ = new TypeValueNode( $1); }1872 { $$ = new ExpressionNode( build_typevalue( $1 ) ); } 1869 1873 | assignment_expression 1870 1874 | type_name_list ',' type_name 1871 { $$ = (ExpressionNode *)( $1->set_l ink( new TypeValueNode( $3 ))); }1875 { $$ = (ExpressionNode *)( $1->set_last( new ExpressionNode( build_typevalue( $3 ) ) ) ); } 1872 1876 | type_name_list ',' assignment_expression 1873 { $$ = (ExpressionNode *)( $1->set_l ink( $3 )); }1877 { $$ = (ExpressionNode *)( $1->set_last( $3 )); } 1874 1878 ; 1875 1879 … … 2009 2013 | EXTENSION external_definition 2010 2014 { // mark all fields in list 2011 for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_ link() )2015 for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_next() ) 2012 2016 iter->set_extension( true ); 2013 2017 $$ = $2; … … 2105 2109 subrange: 2106 2110 constant_expression '~' constant_expression // CFA, integer subrange 2107 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), $1, $3); }2111 { $$ = new ExpressionNode( build_range( $1, $3 ) ); } 2108 2112 ; 2109 2113 -
src/Parser/parseutility.cc
r950f7a7 r7527e63 10 10 // Created On : Sat May 16 15:30:39 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : S at May 16 15:31:33 201513 // Update Count : 212 // Last Modified On : Sun Aug 14 23:45:03 2016 13 // Update Count : 3 14 14 // 15 15 … … 17 17 #include "SynTree/Type.h" 18 18 #include "SynTree/Expression.h" 19 20 // rewrite 21 // if ( x ) ... 22 // as 23 // if ( (int)(x != 0) ) ... 19 24 20 25 Expression *notZeroExpr( Expression *orig ) { -
src/ResolvExpr/Resolver.cc
r950f7a7 r7527e63 24 24 #include "SynTree/Initializer.h" 25 25 #include "SymTab/Indexer.h" 26 #include "SymTab/Autogen.h" 26 27 #include "Common/utility.h" 27 28 #include "InitTweak/InitTweak.h" … … 41 42 42 43 virtual void visit( ArrayType * at ); 44 virtual void visit( PointerType * at ); 43 45 44 46 virtual void visit( ExprStmt *exprStmt ); … … 52 54 virtual void visit( BranchStmt *branchStmt ); 53 55 virtual void visit( ReturnStmt *returnStmt ); 54 virtual void visit( ImplicitCtorDtorStmt * impCtorDtorStmt );55 56 56 57 virtual void visit( SingleInit *singleInit ); … … 59 60 private: 60 61 typedef std::list< Initializer * >::iterator InitIterator; 62 63 template< typename PtrType > 64 void handlePtrType( PtrType * type ); 61 65 62 66 void resolveAggrInit( AggregateDecl *, InitIterator &, InitIterator & ); … … 192 196 } 193 197 198 template< typename PtrType > 199 void Resolver::handlePtrType( PtrType * type ) { 200 if ( type->get_dimension() ) { 201 CastExpr *castExpr = new CastExpr( type->get_dimension(), SymTab::SizeType->clone() ); 202 Expression *newExpr = findSingleExpression( castExpr, *this ); 203 delete type->get_dimension(); 204 type->set_dimension( newExpr ); 205 } 206 } 207 194 208 void Resolver::visit( ArrayType * at ) { 195 if ( at->get_dimension() ) { 196 BasicType arrayLenType = BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ); 197 CastExpr *castExpr = new CastExpr( at->get_dimension(), arrayLenType.clone() ); 198 Expression *newExpr = findSingleExpression( castExpr, *this ); 199 delete at->get_dimension(); 200 at->set_dimension( newExpr ); 201 } 209 handlePtrType( at ); 202 210 Visitor::visit( at ); 211 } 212 213 void Resolver::visit( PointerType * pt ) { 214 handlePtrType( pt ); 215 Visitor::visit( pt ); 203 216 } 204 217 … … 422 435 423 436 void Resolver::visit( ListInit * listInit ) { 424 InitIterator iter = listInit->begin _initializers();425 InitIterator end = listInit->end _initializers();437 InitIterator iter = listInit->begin(); 438 InitIterator end = listInit->end(); 426 439 427 440 if ( ArrayType * at = dynamic_cast< ArrayType * >( initContext ) ) { … … 521 534 // implicitly generated, there's no way for it to have side effects, so get rid of it 522 535 // to clean up generated code. 523 if ( InitTweak::isIn strinsicSingleArgCallStmt( ctorInit->get_ctor() ) ) {536 if ( InitTweak::isIntrinsicSingleArgCallStmt( ctorInit->get_ctor() ) ) { 524 537 delete ctorInit->get_ctor(); 525 538 ctorInit->set_ctor( NULL ); 526 539 } 527 if ( InitTweak::isInstrinsicSingleArgCallStmt( ctorInit->get_ctor() ) ) { 540 541 // xxx - todo 542 // if ( InitTweak::isIntrinsicCallStmt( ctorInit->get_ctor() ) ) { 543 // // can reduce the constructor down to a SingleInit using the 544 // // second argument from the ctor call 545 // } 546 547 if ( InitTweak::isIntrinsicSingleArgCallStmt( ctorInit->get_dtor() ) ) { 528 548 delete ctorInit->get_dtor(); 529 549 ctorInit->set_dtor( NULL ); 530 550 } 531 }532 533 void Resolver::visit( ImplicitCtorDtorStmt * impCtorDtorStmt ) {534 // before resolving ctor/dtor, need to remove type qualifiers from the first argument (the object being constructed).535 // Do this through a cast expression to greatly simplify the code.536 Expression * callExpr = InitTweak::getCtorDtorCall( impCtorDtorStmt );537 assert( callExpr );538 Expression *& constructee = InitTweak::getCallArg( callExpr, 0 );539 Type * type = 0;540 541 // need to find the type of the first argument, which is unfortunately not uniform since array construction542 // includes an untyped '+' expression.543 if ( UntypedExpr * plusExpr = dynamic_cast< UntypedExpr * >( constructee ) ) {544 // constructee is <array>+<index>545 // get Variable <array>, then get the base type of the VariableExpr - this is the type that needs to be fixed546 Expression * arr = InitTweak::getCallArg( plusExpr, 0 );547 assert( dynamic_cast< VariableExpr * >( arr ) || dynamic_cast< MemberExpr *>( arr ) );548 assert( arr && arr->get_results().size() == 1 );549 type = arr->get_results().front()->clone();550 } else {551 // otherwise, constructing a plain object, which means the object's address is being taken.552 // Need to get the type of the VariableExpr object, because the AddressExpr is rebuilt and uses the553 // type of the VariableExpr to do so.554 assert( constructee->get_results().size() == 1 );555 AddressExpr * addrExpr = dynamic_cast< AddressExpr * > ( constructee );556 assert( addrExpr && addrExpr->get_results().size() == 1 );557 type = addrExpr->get_results().front()->clone();558 }559 // cast to T* with qualifiers removed.560 // unfortunately, lvalue is considered a qualifier. For AddressExpr to resolve, its argument561 // must have an lvalue qualified type, so remove all qualifiers except lvalue. If we ever562 // remove lvalue as a qualifier, this can change to563 // type->get_qualifiers() = Type::Qualifiers();564 Type * base = InitTweak::getPointerBase( type );565 assert( base );566 base->get_qualifiers() -= Type::Qualifiers(true, true, true, false, true, true);567 // if pointer has lvalue qualifier, cast won't appear in output568 type->set_isLvalue( false );569 constructee = new CastExpr( constructee, type );570 571 // finally, resolve the ctor/dtor572 impCtorDtorStmt->get_callStmt()->accept( *this );573 551 } 574 552 } // namespace ResolvExpr -
src/SymTab/AddVisit.h
r950f7a7 r7527e63 10 10 // Created On : Sun May 17 16:14:32 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : T ue Jul 12 17:46:33201613 // Update Count : 612 // Last Modified On : Thu Aug 4 11:22:01 2016 13 // Update Count : 9 14 14 // 15 15 … … 33 33 template< typename Visitor > 34 34 inline void addVisit(SwitchStmt *switchStmt, Visitor &visitor) { 35 addVisitStatementList( switchStmt->get_ branches(), visitor );35 addVisitStatementList( switchStmt->get_statements(), visitor ); 36 36 maybeAccept( switchStmt->get_condition(), visitor ); 37 37 } -
src/SymTab/Autogen.cc
r950f7a7 r7527e63 26 26 27 27 namespace SymTab { 28 Type * SizeType = 0; 29 28 30 class AutogenerateRoutines : public Visitor { 29 31 public: … … 59 61 bool isUnnamedBitfield( ObjectDecl * obj ) { 60 62 return obj != NULL && obj->get_name() == "" && obj->get_bitfieldWidth() != NULL; 61 }62 63 template< typename OutputIterator >64 void makeScalarFunction( Expression *src, ObjectDecl *dstParam, DeclarationWithType *member, std::string fname, OutputIterator out ) {65 ObjectDecl *obj = dynamic_cast<ObjectDecl *>( member );66 // unnamed bit fields are not copied as they cannot be accessed67 if ( isUnnamedBitfield( obj ) ) return;68 69 // want to be able to generate assignment, ctor, and dtor generically,70 // so fname is either ?=?, ?{}, or ^?{}71 UntypedExpr *fExpr = new UntypedExpr( new NameExpr( fname ) );72 73 UntypedExpr *derefExpr = new UntypedExpr( new NameExpr( "*?" ) );74 derefExpr->get_args().push_back( new VariableExpr( dstParam ) );75 76 // do something special for unnamed members77 Expression *dstselect = new AddressExpr( new MemberExpr( member, derefExpr ) );78 fExpr->get_args().push_back( dstselect );79 80 if ( src ) {81 fExpr->get_args().push_back( src );82 }83 84 Statement * callStmt = new ExprStmt( noLabels, fExpr );85 if ( (fname == "?{}" || fname == "^?{}") && ( !obj || ( obj && obj->get_bitfieldWidth() == NULL ) ) ) {86 // implicitly generated ctor/dtor calls should be wrapped87 // so that later passes are aware they were generated.88 // xxx - don't mark as an implicit ctor/dtor if obj is a bitfield,89 // because this causes the address to be taken at codegen, which is illegal in C.90 callStmt = new ImplicitCtorDtorStmt( callStmt );91 }92 *out++ = callStmt;93 63 } 94 64 … … 203 173 } 204 174 205 void makeStructMemberOp( ObjectDecl * dstParam, Expression * src, DeclarationWithType * field, FunctionDecl * func, TypeSubstitution & genericSubs, bool isGeneric, bool forward = true ) { 206 if ( isGeneric ) { 207 // rewrite member type in terms of the type variables on this operator 208 field = field->clone(); 209 genericSubs.apply( field ); 210 211 if ( src ) { 212 genericSubs.apply( src ); 213 } 214 } 175 void makeStructMemberOp( ObjectDecl * dstParam, Expression * src, DeclarationWithType * field, FunctionDecl * func, TypeSubstitution & genericSubs, bool isDynamicLayout, bool forward = true ) { 176 // if ( isDynamicLayout && src ) { 177 // genericSubs.apply( src ); 178 // } 215 179 216 180 ObjectDecl * returnVal = NULL; … … 219 183 } 220 184 185 InitTweak::InitExpander srcParam( src ); 186 221 187 // assign to destination (and return value if generic) 222 if ( ArrayType *array = dynamic_cast< ArrayType * >( field->get_type() ) ) { 223 UntypedExpr *derefExpr = new UntypedExpr( new NameExpr( "*?" ) ); 224 derefExpr->get_args().push_back( new VariableExpr( dstParam ) ); 225 Expression *dstselect = new MemberExpr( field, derefExpr ); 226 227 makeArrayFunction( src, dstselect, array, func->get_name(), back_inserter( func->get_statements()->get_kids() ), forward ); 228 if ( isGeneric && returnVal ) { 229 UntypedExpr *derefRet = new UntypedExpr( new NameExpr( "*?" ) ); 230 derefRet->get_args().push_back( new VariableExpr( returnVal ) ); 231 Expression *retselect = new MemberExpr( field, derefRet ); 232 233 makeArrayFunction( src, retselect, array, func->get_name(), back_inserter( func->get_statements()->get_kids() ), forward ); 234 } 235 } else { 236 makeScalarFunction( src, dstParam, field, func->get_name(), back_inserter( func->get_statements()->get_kids() ) ); 237 if ( isGeneric && returnVal ) makeScalarFunction( src, returnVal, field, func->get_name(), back_inserter( func->get_statements()->get_kids() ) ); 188 UntypedExpr *derefExpr = new UntypedExpr( new NameExpr( "*?" ) ); 189 derefExpr->get_args().push_back( new VariableExpr( dstParam ) ); 190 Expression *dstselect = new MemberExpr( field, derefExpr ); 191 genImplicitCall( srcParam, dstselect, func->get_name(), back_inserter( func->get_statements()->get_kids() ), field, forward ); 192 193 if ( isDynamicLayout && returnVal ) { 194 UntypedExpr *derefRet = new UntypedExpr( new NameExpr( "*?" ) ); 195 derefRet->get_args().push_back( new VariableExpr( returnVal ) ); 196 Expression *retselect = new MemberExpr( field, derefRet ); 197 genImplicitCall( srcParam, retselect, func->get_name(), back_inserter( func->get_statements()->get_kids() ), field, forward ); 238 198 } // if 239 199 } 240 200 241 201 template<typename Iterator> 242 void makeStructFunctionBody( Iterator member, Iterator end, FunctionDecl * func, TypeSubstitution & genericSubs, bool is Generic, bool forward = true ) {202 void makeStructFunctionBody( Iterator member, Iterator end, FunctionDecl * func, TypeSubstitution & genericSubs, bool isDynamicLayout, bool forward = true ) { 243 203 for ( ; member != end; ++member ) { 244 204 if ( DeclarationWithType *field = dynamic_cast< DeclarationWithType * >( *member ) ) { // otherwise some form of type declaration, e.g. Aggregate … … 276 236 277 237 Expression *srcselect = srcParam ? new MemberExpr( field, new VariableExpr( srcParam ) ) : NULL; 278 makeStructMemberOp( dstParam, srcselect, field, func, genericSubs, is Generic, forward );238 makeStructMemberOp( dstParam, srcselect, field, func, genericSubs, isDynamicLayout, forward ); 279 239 } // if 280 240 } // for … … 284 244 /// void ?{}(A *, int) and void?{}(A *, int, int) for a struct A which has two int fields. 285 245 template<typename Iterator> 286 void makeStructFieldCtorBody( Iterator member, Iterator end, FunctionDecl * func, TypeSubstitution & genericSubs, bool is Generic) {246 void makeStructFieldCtorBody( Iterator member, Iterator end, FunctionDecl * func, TypeSubstitution & genericSubs, bool isDynamicLayout ) { 287 247 FunctionType * ftype = func->get_functionType(); 288 248 std::list<DeclarationWithType*> & params = ftype->get_parameters(); … … 310 270 // matching parameter, initialize field with copy ctor 311 271 Expression *srcselect = new VariableExpr(*parameter); 312 makeStructMemberOp( dstParam, srcselect, field, func, genericSubs, is Generic);272 makeStructMemberOp( dstParam, srcselect, field, func, genericSubs, isDynamicLayout ); 313 273 ++parameter; 314 274 } else { 315 275 // no matching parameter, initialize field with default ctor 316 makeStructMemberOp( dstParam, NULL, field, func, genericSubs, is Generic);276 makeStructMemberOp( dstParam, NULL, field, func, genericSubs, isDynamicLayout ); 317 277 } 318 278 } … … 324 284 325 285 // Make function polymorphic in same parameters as generic struct, if applicable 326 bool is Generic= false; // NOTE this flag is an incredibly ugly kludge; we should fix the assignment signature instead (ditto for union)286 bool isDynamicLayout = false; // NOTE this flag is an incredibly ugly kludge; we should fix the assignment signature instead (ditto for union) 327 287 std::list< TypeDecl* >& genericParams = aggregateDecl->get_parameters(); 328 288 std::list< Expression* > structParams; // List of matching parameters to put on types 329 289 TypeSubstitution genericSubs; // Substitutions to make to member types of struct 330 290 for ( std::list< TypeDecl* >::const_iterator param = genericParams.begin(); param != genericParams.end(); ++param ) { 331 i sGeneric= true;291 if ( (*param)->get_kind() == TypeDecl::Any ) isDynamicLayout = true; 332 292 TypeDecl *typeParam = cloneAndRename( *param, "_autoassign_" + aggregateDecl->get_name() + "_" + (*param)->get_name() ); 333 293 assignType->get_forall().push_back( typeParam ); … … 389 349 FunctionDecl * ctor = new FunctionDecl( "?{}", functionNesting > 0 ? DeclarationNode::NoStorageClass : DeclarationNode::Static, LinkageSpec::AutoGen, memCtorType->clone(), new CompoundStmt( noLabels ), true, false ); 390 350 ctor->fixUniqueId(); 391 makeStructFieldCtorBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), ctor, genericSubs, is Generic);351 makeStructFieldCtorBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), ctor, genericSubs, isDynamicLayout ); 392 352 memCtors.push_back( ctor ); 393 353 } … … 395 355 396 356 // generate appropriate calls to member ctor, assignment 397 makeStructFunctionBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), assignDecl, genericSubs, is Generic);398 makeStructFunctionBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), ctorDecl, genericSubs, is Generic);399 makeStructFunctionBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), copyCtorDecl, genericSubs, is Generic);357 makeStructFunctionBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), assignDecl, genericSubs, isDynamicLayout ); 358 makeStructFunctionBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), ctorDecl, genericSubs, isDynamicLayout ); 359 makeStructFunctionBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), copyCtorDecl, genericSubs, isDynamicLayout ); 400 360 // needs to do everything in reverse, so pass "forward" as false 401 makeStructFunctionBody( aggregateDecl->get_members().rbegin(), aggregateDecl->get_members().rend(), dtorDecl, genericSubs, is Generic, false );402 403 if ( ! is Generic) assignDecl->get_statements()->get_kids().push_back( new ReturnStmt( noLabels, new VariableExpr( srcParam ) ) );361 makeStructFunctionBody( aggregateDecl->get_members().rbegin(), aggregateDecl->get_members().rend(), dtorDecl, genericSubs, isDynamicLayout, false ); 362 363 if ( ! isDynamicLayout ) assignDecl->get_statements()->get_kids().push_back( new ReturnStmt( noLabels, new VariableExpr( srcParam ) ) ); 404 364 405 365 declsToAdd.push_back( assignDecl ); … … 414 374 415 375 // Make function polymorphic in same parameters as generic union, if applicable 416 bool is Generic = false;// NOTE this flag is an incredibly ugly kludge; we should fix the assignment signature instead (ditto for struct)376 bool isDynamicLayout = false; // NOTE this flag is an incredibly ugly kludge; we should fix the assignment signature instead (ditto for struct) 417 377 std::list< TypeDecl* >& genericParams = aggregateDecl->get_parameters(); 418 378 std::list< Expression* > unionParams; // List of matching parameters to put on types 419 379 for ( std::list< TypeDecl* >::const_iterator param = genericParams.begin(); param != genericParams.end(); ++param ) { 420 i sGeneric= true;380 if ( (*param)->get_kind() == TypeDecl::Any ) isDynamicLayout = true; 421 381 TypeDecl *typeParam = cloneAndRename( *param, "_autoassign_" + aggregateDecl->get_name() + "_" + (*param)->get_name() ); 422 382 assignType->get_forall().push_back( typeParam ); … … 454 414 455 415 makeUnionFieldsAssignment( srcParam, dstParam, cloneWithParams( refType, unionParams ), back_inserter( assignDecl->get_statements()->get_kids() ) ); 456 if ( isGeneric ) makeUnionFieldsAssignment( srcParam, returnVal, cloneWithParams( refType, unionParams ), back_inserter( assignDecl->get_statements()->get_kids() ) ); 457 458 if ( ! isGeneric ) assignDecl->get_statements()->get_kids().push_back( new ReturnStmt( noLabels, new VariableExpr( srcParam ) ) ); 416 if ( isDynamicLayout ) makeUnionFieldsAssignment( srcParam, returnVal, cloneWithParams( refType, unionParams ), back_inserter( assignDecl->get_statements()->get_kids() ) ); 417 else assignDecl->get_statements()->get_kids().push_back( new ReturnStmt( noLabels, new VariableExpr( srcParam ) ) ); 459 418 460 419 // body of assignment and copy ctor is the same -
src/SymTab/Autogen.h
r950f7a7 r7527e63 22 22 #include "SynTree/Declaration.h" 23 23 #include "SynTree/Initializer.h" 24 #include "InitTweak/InitTweak.h" 24 25 25 26 namespace SymTab { 26 27 27 /// Generates assignment operators, constructors, and destructor for aggregate types as required 28 void autogenerateRoutines( std::list< Declaration * > &translationUnit ); 28 29 29 // originally makeArrayAssignment - changed to Function because it is now used for ctors and dtors as well 30 // admittedly not a great name change. This used to live in Validate.cc, but has been moved so it can be reused elsewhere 30 /// returns true if obj's name is the empty string and it has a bitfield width 31 bool isUnnamedBitfield( ObjectDecl * obj ); 31 32 32 /// Store in out a loop which calls fname on each element of the array with srcParam and dstParam as arguments. 33 /// If forward is true, loop goes from 0 to N-1, else N-1 to 0 34 template< typename OutputIterator > 35 void makeArrayFunction( Expression *srcParam, Expression *dstParam, ArrayType *array, std::string fname, OutputIterator out, bool forward = true ) { 36 static UniqueName indexName( "_index" ); 33 /// size_t type - set when size_t typedef is seen. Useful in a few places, 34 /// such as in determining array dimension type 35 extern Type * SizeType; 37 36 38 // for a flexible array member nothing is done -- user must define own assignment 39 if ( ! array->get_dimension() ) return; 37 /// inserts into out a generated call expression to function fname with arguments dstParam and srcParam. Intended to be used with generated ?=?, ?{}, and ^?{} calls. 38 template< typename OutputIterator > 39 Statement * genCall( InitTweak::InitExpander & srcParam, Expression * dstParam, const std::string & fname, OutputIterator out, Type * type, bool addCast = false, bool forward = true ); 40 40 41 Expression * begin, * end, * update, * cmp; 42 if ( forward ) { 43 // generate: for ( int i = 0; i < 0; ++i ) 44 begin = new NameExpr( "0" ); 45 end = array->get_dimension()->clone(); 46 cmp = new NameExpr( "?<?" ); 47 update = new NameExpr( "++?" ); 48 } else { 49 // generate: for ( int i = N-1; i >= 0; --i ) 50 begin = new UntypedExpr( new NameExpr( "?-?" ) ); 51 ((UntypedExpr*)begin)->get_args().push_back( array->get_dimension()->clone() ); 52 ((UntypedExpr*)begin)->get_args().push_back( new NameExpr( "1" ) ); 53 end = new NameExpr( "0" ); 54 cmp = new NameExpr( "?>=?" ); 55 update = new NameExpr( "--?" ); 56 } 41 /// inserts into out a generated call expression to function fname with arguments dstParam and srcParam. Should only be called with non-array types. 42 /// optionally returns a statement which must be inserted prior to the containing loop, if there is one 43 template< typename OutputIterator > 44 Statement * genScalarCall( InitTweak::InitExpander & srcParam, Expression *dstParam, const std::string & fname, OutputIterator out, Type * type, bool addCast = false ) { 45 // want to be able to generate assignment, ctor, and dtor generically, 46 // so fname is either ?=?, ?{}, or ^?{} 47 UntypedExpr *fExpr = new UntypedExpr( new NameExpr( fname ) ); 57 48 58 ObjectDecl *index = new ObjectDecl( indexName.newName(), DeclarationNode::NoStorageClass, LinkageSpec::C, 0, new BasicType( Type::Qualifiers(), BasicType::SignedInt ), NULL ); 49 // do something special for unnamed members 50 dstParam = new AddressExpr( dstParam ); 51 if ( addCast ) { 52 // cast to T* with qualifiers removed, so that qualified objects can be constructed 53 // and destructed with the same functions as non-qualified objects. 54 // unfortunately, lvalue is considered a qualifier. For AddressExpr to resolve, its argument 55 // must have an lvalue qualified type, so remove all qualifiers except lvalue. If we ever 56 // remove lvalue as a qualifier, this can change to 57 // type->get_qualifiers() = Type::Qualifiers(); 58 assert( type ); 59 Type * castType = type->clone(); 60 castType->get_qualifiers() -= Type::Qualifiers(true, true, true, false, true, true); 61 castType->set_isLvalue( true ); // xxx - might not need this 62 dstParam = new CastExpr( dstParam, new PointerType( Type::Qualifiers(), castType ) ); 63 } 64 fExpr->get_args().push_back( dstParam ); 59 65 60 UntypedExpr *init = new UntypedExpr( new NameExpr( "?=?" ) ); 61 init->get_args().push_back( new AddressExpr( new VariableExpr( index ) ) ); 62 init->get_args().push_back( begin ); 63 index->set_init( new SingleInit( init, std::list<Expression*>() ) ); 66 Statement * listInit = srcParam.buildListInit( fExpr ); 64 67 65 UntypedExpr *cond = new UntypedExpr( cmp ); 66 cond->get_args().push_back( new VariableExpr( index ) ); 67 cond->get_args().push_back( end ); 68 std::list< Expression * > args = *++srcParam; 69 fExpr->get_args().splice( fExpr->get_args().end(), args ); 68 70 69 UntypedExpr *inc = new UntypedExpr( update ); 70 inc->get_args().push_back( new AddressExpr( new VariableExpr( index ) ) ); 71 *out++ = new ExprStmt( noLabels, fExpr ); 71 72 72 // want to be able to generate assignment, ctor, and dtor generically, 73 // so fname is either ?=?, ?{}, or ^?{} 74 UntypedExpr *fExpr = new UntypedExpr( new NameExpr( fname ) ); 73 srcParam.clearArrayIndices(); 75 74 76 UntypedExpr *dstIndex = new UntypedExpr( new NameExpr( "?+?" ) ); 77 dstIndex->get_args().push_back( dstParam ); 78 dstIndex->get_args().push_back( new VariableExpr( index ) ); 79 fExpr->get_args().push_back( dstIndex ); 75 return listInit; 76 } 80 77 81 // srcParam is NULL for default ctor/dtor 82 if ( srcParam ) { 83 UntypedExpr *srcIndex = new UntypedExpr( new NameExpr( "?[?]" ) ); 84 srcIndex->get_args().push_back( srcParam ); 85 srcIndex->get_args().push_back( new VariableExpr( index ) ); 86 fExpr->get_args().push_back( srcIndex ); 87 } 78 /// Store in out a loop which calls fname on each element of the array with srcParam and dstParam as arguments. 79 /// If forward is true, loop goes from 0 to N-1, else N-1 to 0 80 template< typename OutputIterator > 81 void genArrayCall( InitTweak::InitExpander & srcParam, Expression *dstParam, const std::string & fname, OutputIterator out, ArrayType *array, bool addCast = false, bool forward = true ) { 82 static UniqueName indexName( "_index" ); 88 83 89 std::list<Statement *> initList; 90 CompoundStmt * block = new CompoundStmt( noLabels ); 91 block->get_kids().push_back( new DeclStmt( noLabels, index ) ); 92 block->get_kids().push_back( new ForStmt( noLabels, initList, cond, inc, new ExprStmt( noLabels, fExpr ) ) ); 84 // for a flexible array member nothing is done -- user must define own assignment 85 if ( ! array->get_dimension() ) return ; 93 86 94 Statement * stmt = block; 95 if ( fname == "?{}" || fname == "^?{}" ) { 96 // implicitly generated ctor/dtor calls should be wrapped 97 // so that later passes are aware they were generated 98 stmt = new ImplicitCtorDtorStmt( stmt ); 99 } 100 *out++ = stmt; 101 } 87 Expression * begin, * end, * update, * cmp; 88 if ( forward ) { 89 // generate: for ( int i = 0; i < 0; ++i ) 90 begin = new NameExpr( "0" ); 91 end = array->get_dimension()->clone(); 92 cmp = new NameExpr( "?<?" ); 93 update = new NameExpr( "++?" ); 94 } else { 95 // generate: for ( int i = N-1; i >= 0; --i ) 96 begin = new UntypedExpr( new NameExpr( "?-?" ) ); 97 ((UntypedExpr*)begin)->get_args().push_back( array->get_dimension()->clone() ); 98 ((UntypedExpr*)begin)->get_args().push_back( new NameExpr( "1" ) ); 99 end = new NameExpr( "0" ); 100 cmp = new NameExpr( "?>=?" ); 101 update = new NameExpr( "--?" ); 102 } 103 104 ObjectDecl *index = new ObjectDecl( indexName.newName(), DeclarationNode::NoStorageClass, LinkageSpec::C, 0, new BasicType( Type::Qualifiers(), BasicType::SignedInt ), NULL ); 105 106 UntypedExpr *init = new UntypedExpr( new NameExpr( "?=?" ) ); 107 init->get_args().push_back( new AddressExpr( new VariableExpr( index ) ) ); 108 init->get_args().push_back( begin ); 109 index->set_init( new SingleInit( init, std::list<Expression*>() ) ); 110 111 UntypedExpr *cond = new UntypedExpr( cmp ); 112 cond->get_args().push_back( new VariableExpr( index ) ); 113 cond->get_args().push_back( end ); 114 115 UntypedExpr *inc = new UntypedExpr( update ); 116 inc->get_args().push_back( new AddressExpr( new VariableExpr( index ) ) ); 117 118 UntypedExpr *dstIndex = new UntypedExpr( new NameExpr( "?[?]" ) ); 119 dstIndex->get_args().push_back( dstParam ); 120 dstIndex->get_args().push_back( new VariableExpr( index ) ); 121 dstParam = dstIndex; 122 123 // srcParam must keep track of the array indices to build the 124 // source parameter and/or array list initializer 125 srcParam.addArrayIndex( new VariableExpr( index ), array->get_dimension()->clone() ); 126 127 // for stmt's body, eventually containing call 128 CompoundStmt * body = new CompoundStmt( noLabels ); 129 Statement * listInit = genCall( srcParam, dstParam, fname, back_inserter( body->get_kids() ), array->get_base(), addCast, forward ); 130 131 // block containing for stmt and index variable 132 std::list<Statement *> initList; 133 CompoundStmt * block = new CompoundStmt( noLabels ); 134 block->get_kids().push_back( new DeclStmt( noLabels, index ) ); 135 if ( listInit ) block->get_kids().push_back( listInit ); 136 block->get_kids().push_back( new ForStmt( noLabels, initList, cond, inc, body ) ); 137 138 *out++ = block; 139 } 140 141 template< typename OutputIterator > 142 Statement * genCall( InitTweak::InitExpander & srcParam, Expression * dstParam, const std::string & fname, OutputIterator out, Type * type, bool addCast, bool forward ) { 143 if ( ArrayType * at = dynamic_cast< ArrayType * >( type ) ) { 144 genArrayCall( srcParam, dstParam, fname, out, at, addCast, forward ); 145 return 0; 146 } else { 147 return genScalarCall( srcParam, dstParam, fname, out, type, addCast ); 148 } 149 } 150 151 /// inserts into out a generated call expression to function fname with arguments dstParam 152 /// and srcParam. Intended to be used with generated ?=?, ?{}, and ^?{} calls. decl is the 153 /// object being constructed. The function wraps constructor and destructor calls in an 154 /// ImplicitCtorDtorStmt node. 155 template< typename OutputIterator > 156 void genImplicitCall( InitTweak::InitExpander & srcParam, Expression * dstParam, const std::string & fname, OutputIterator out, DeclarationWithType * decl, bool forward = true ) { 157 ObjectDecl *obj = dynamic_cast<ObjectDecl *>( decl ); 158 assert( obj ); 159 // unnamed bit fields are not copied as they cannot be accessed 160 if ( isUnnamedBitfield( obj ) ) return; 161 162 bool addCast = (fname == "?{}" || fname == "^?{}") && ( !obj || ( obj && obj->get_bitfieldWidth() == NULL ) ); 163 std::list< Statement * > stmts; 164 genCall( srcParam, dstParam, fname, back_inserter( stmts ), obj->get_type(), addCast, forward ); 165 166 // currently genCall should produce at most one element, but if that changes then the next line needs to be updated to grab the statement which contains the call 167 assert( stmts.size() <= 1 ); 168 if ( stmts.size() == 1 ) { 169 Statement * callStmt = stmts.front(); 170 if ( addCast ) { 171 // implicitly generated ctor/dtor calls should be wrapped 172 // so that later passes are aware they were generated. 173 // xxx - don't mark as an implicit ctor/dtor if obj is a bitfield, 174 // because this causes the address to be taken at codegen, which is illegal in C. 175 callStmt = new ImplicitCtorDtorStmt( callStmt ); 176 } 177 *out++ = callStmt; 178 } 179 } 102 180 } // namespace SymTab 103 181 #endif // AUTOGEN_H -
src/SymTab/FixFunction.cc
r950f7a7 r7527e63 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // FixFunction.cc -- 7 // FixFunction.cc -- 8 8 // 9 9 // Author : Richard C. Bilson … … 44 44 45 45 Type * FixFunction::mutate(ArrayType *arrayType) { 46 PointerType *pointerType = new PointerType( arrayType->get_qualifiers(), maybeClone( arrayType->get_base()->clone() ), maybeClone( arrayType->get_dimension() ), arrayType->get_isVarLen(), arrayType->get_isStatic() ); 46 // need to recursively mutate the base type in order for multi-dimensional arrays to work. 47 PointerType *pointerType = new PointerType( arrayType->get_qualifiers(), arrayType->get_base()->clone()->acceptMutator( *this ), maybeClone( arrayType->get_dimension() ), arrayType->get_isVarLen(), arrayType->get_isStatic() ); 47 48 delete arrayType; 48 49 return pointerType; -
src/SymTab/Validate.cc
r950f7a7 r7527e63 174 174 175 175 virtual void visit( FunctionDecl *funcDecl ); 176 };176 }; 177 177 178 178 class CompoundLiteral : public GenPoly::DeclMutator { … … 191 191 EliminateTypedef::eliminateTypedef( translationUnit ); 192 192 HoistStruct::hoistStruct( translationUnit ); 193 autogenerateRoutines( translationUnit ); // moved up, used to be below compoundLiteral - currently needs Pass1 193 194 acceptAll( translationUnit, pass1 ); 194 195 acceptAll( translationUnit, pass2 ); 195 196 ReturnChecker::checkFunctionReturns( translationUnit ); 196 mutateAll( translationUnit, compoundliteral ); 197 autogenerateRoutines( translationUnit ); 197 compoundliteral.mutateDeclarationList( translationUnit ); 198 198 acceptAll( translationUnit, pass3 ); 199 199 VerifyCtorDtor::verify( translationUnit ); … … 490 490 EliminateTypedef eliminator; 491 491 mutateAll( translationUnit, eliminator ); 492 if ( eliminator.typedefNames.count( "size_t" ) ) { 493 // grab and remember declaration of size_t 494 SizeType = eliminator.typedefNames["size_t"].first->get_base()->clone(); 495 } else { 496 // xxx - missing global typedef for size_t - default to long unsigned int, even though that may be wrong 497 // eventually should have a warning for this case. 498 SizeType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ); 499 } 492 500 filter( translationUnit, isTypedef, true ); 501 493 502 } 494 503 … … 518 527 Declaration *EliminateTypedef::mutate( TypedefDecl * tyDecl ) { 519 528 Declaration *ret = Mutator::mutate( tyDecl ); 529 520 530 if ( typedefNames.count( tyDecl->get_name() ) == 1 && typedefNames[ tyDecl->get_name() ].second == scopeLevel ) { 521 531 // typedef to the same name from the same scope … … 541 551 if ( StructInstType *aggDecl = dynamic_cast< StructInstType * >( tyDecl->get_base() ) ) { 542 552 return new StructDecl( aggDecl->get_name() ); 543 // return aggDecl->get_baseStruct();544 553 } else if ( UnionInstType *aggDecl = dynamic_cast< UnionInstType * >( tyDecl->get_base() ) ) { 545 554 return new UnionDecl( aggDecl->get_name() ); 555 } else if ( EnumInstType *enumDecl = dynamic_cast< EnumInstType * >( tyDecl->get_base() ) ) { 556 return new EnumDecl( enumDecl->get_name() ); 546 557 } else { 547 558 return ret; -
src/SynTree/AddStmtVisitor.cc
r950f7a7 r7527e63 10 10 // Created On : Wed Jun 22 12:11:17 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : T ue Jul 12 17:49:59201613 // Update Count : 1 212 // Last Modified On : Thu Aug 4 11:23:47 2016 13 // Update Count : 16 14 14 // 15 15 … … 71 71 72 72 void AddStmtVisitor::visit(SwitchStmt *switchStmt) { 73 visitStatementList( switchStmt->get_ branches() );73 visitStatementList( switchStmt->get_statements() ); 74 74 maybeAccept( switchStmt->get_condition(), *this ); 75 75 } -
src/SynTree/Declaration.cc
r950f7a7 r7527e63 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // Declaration.cc -- 7 // Declaration.cc -- 8 8 // 9 9 // Author : Richard C. Bilson … … 20 20 #include "Initializer.h" 21 21 #include "Type.h" 22 #include "Attribute.h" 22 23 #include "Common/utility.h" 23 24 -
src/SynTree/Declaration.h
r950f7a7 r7527e63 64 64 class DeclarationWithType : public Declaration { 65 65 public: 66 DeclarationWithType( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage );66 DeclarationWithType( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, const std::list< Attribute * > & attributes ); 67 67 DeclarationWithType( const DeclarationWithType &other ); 68 68 virtual ~DeclarationWithType(); … … 75 75 int get_scopeLevel() const { return scopeLevel; } 76 76 void set_scopeLevel( int newValue ) { scopeLevel = newValue; } 77 78 std::list< Attribute * >& get_attributes() { return attributes; } 79 const std::list< Attribute * >& get_attributes() const { return attributes; } 77 80 78 81 virtual DeclarationWithType *clone() const = 0; … … 87 90 // shadowed identifiers can be accessed 88 91 int scopeLevel = 0; 92 93 std::list< Attribute * > attributes; 89 94 }; 90 95 … … 92 97 typedef DeclarationWithType Parent; 93 98 public: 94 ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, Expression *bitfieldWidth, Type *type, Initializer *init, bool isInline = false, bool isNoreturn = false );99 ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, Expression *bitfieldWidth, Type *type, Initializer *init, const std::list< Attribute * > attributes = std::list< Attribute * >(), bool isInline = false, bool isNoreturn = false ); 95 100 ObjectDecl( const ObjectDecl &other ); 96 101 virtual ~ObjectDecl(); … … 131 136 std::list< std::string >& get_oldIdents() { return oldIdents; } 132 137 std::list< Declaration* >& get_oldDecls() { return oldDecls; } 133 std::list< Attribute * >& get_attributes() { return attributes; }134 138 135 139 virtual FunctionDecl *clone() const { return new FunctionDecl( *this ); } … … 143 147 std::list< std::string > oldIdents; 144 148 std::list< Declaration* > oldDecls; 145 std::list< Attribute * > attributes;146 149 }; 147 150 -
src/SynTree/DeclarationWithType.cc
r950f7a7 r7527e63 16 16 #include "Declaration.h" 17 17 #include "Type.h" 18 #include "Attribute.h" 18 19 #include "Common/utility.h" 19 20 20 DeclarationWithType::DeclarationWithType( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage )21 : Declaration( name, sc, linkage ) {21 DeclarationWithType::DeclarationWithType( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, const std::list< Attribute * > & attributes ) 22 : Declaration( name, sc, linkage ), attributes( attributes ) { 22 23 } 23 24 24 25 DeclarationWithType::DeclarationWithType( const DeclarationWithType &other ) 25 26 : Declaration( other ), mangleName( other.mangleName ), scopeLevel( other.scopeLevel ) { 27 cloneAll( other.attributes, attributes ); 26 28 } 27 29 28 30 DeclarationWithType::~DeclarationWithType() { 31 deleteAll( attributes ); 29 32 } 30 33 -
src/SynTree/Expression.cc
r950f7a7 r7527e63 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Jun 13 16:03:39201613 // Update Count : 4 212 // Last Modified On : Fri Aug 5 14:23:56 2016 13 // Update Count : 49 14 14 // 15 15 … … 344 344 } 345 345 346 //// is this right? It's cloning the member, but the member is a declaration so probably shouldn't be cloned... 346 347 MemberExpr::MemberExpr( const MemberExpr &other ) : 347 Expression( other ), member( maybeClone( other.member )), aggregate( maybeClone( other.aggregate ) ) {348 Expression( other ), member( other.member ), aggregate( maybeClone( other.aggregate ) ) { 348 349 } 349 350 350 351 MemberExpr::~MemberExpr() { 351 delete member;352 // delete member; 352 353 delete aggregate; 353 354 } … … 528 529 } 529 530 531 RangeExpr::RangeExpr( Expression *low, Expression *high ) : low( low ), high( high ) {} 532 RangeExpr::RangeExpr( const RangeExpr &other ) : low( other.low->clone() ), high( other.high->clone() ) {} 533 void RangeExpr::print( std::ostream &os, int indent ) const { 534 os << std::string( indent, ' ' ) << "Range Expression: "; 535 low->print( os, indent ); 536 os << " ... "; 537 high->print( os, indent ); 538 } 530 539 531 540 std::ostream & operator<<( std::ostream & out, Expression * expr ) { -
src/SynTree/Expression.h
r950f7a7 r7527e63 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Jul 4 14:45:32201613 // Update Count : 2312 // Last Modified On : Sat Aug 6 08:52:53 2016 13 // Update Count : 35 14 14 // 15 15 … … 18 18 19 19 #include <map> 20 #include <memory> 20 21 #include "SynTree.h" 21 22 #include "Visitor.h" … … 27 28 class Expression { 28 29 public: 29 Expression( Expression *_aname = 0);30 Expression( Expression *_aname = nullptr ); 30 31 Expression( const Expression &other ); 31 32 virtual ~Expression(); … … 69 70 typedef std::map< UniqueId, ParamEntry > InferredParams; 70 71 71 /// ApplicationExpr represents the application of a function to a set of parameters. This is the 72 /// result of running anUntypedExpr through the expression analyzer.72 /// ApplicationExpr represents the application of a function to a set of parameters. This is the result of running an 73 /// UntypedExpr through the expression analyzer. 73 74 class ApplicationExpr : public Expression { 74 75 public: … … 92 93 }; 93 94 94 /// UntypedExpr represents the application of a function to a set of parameters, but where the 95 /// particular overload for the function name has not yet been determined. Most operators are96 /// converted into functional form automatically, topermit operator overloading.95 /// UntypedExpr represents the application of a function to a set of parameters, but where the particular overload for 96 /// the function name has not yet been determined. Most operators are converted into functional form automatically, to 97 /// permit operator overloading. 97 98 class UntypedExpr : public Expression { 98 99 public: 99 UntypedExpr( Expression *function, Expression *_aname = 0);100 UntypedExpr( Expression *function, Expression *_aname = nullptr ); 100 101 UntypedExpr( const UntypedExpr &other ); 101 UntypedExpr( Expression *function, std::list<Expression *> &args, Expression *_aname = 0);102 UntypedExpr( Expression *function, std::list<Expression *> &args, Expression *_aname = nullptr ); 102 103 virtual ~UntypedExpr(); 103 104 … … 123 124 class NameExpr : public Expression { 124 125 public: 125 NameExpr( std::string name, Expression *_aname = 0);126 NameExpr( std::string name, Expression *_aname = nullptr ); 126 127 NameExpr( const NameExpr &other ); 127 128 virtual ~NameExpr(); … … 144 145 class AddressExpr : public Expression { 145 146 public: 146 AddressExpr( Expression *arg, Expression *_aname = 0);147 AddressExpr( Expression *arg, Expression *_aname = nullptr ); 147 148 AddressExpr( const AddressExpr &other ); 148 149 virtual ~AddressExpr(); … … 180 181 class CastExpr : public Expression { 181 182 public: 182 CastExpr( Expression *arg, Expression *_aname = 0);183 CastExpr( Expression *arg, Type *toType, Expression *_aname = 0);183 CastExpr( Expression *arg, Expression *_aname = nullptr ); 184 CastExpr( Expression *arg, Type *toType, Expression *_aname = nullptr ); 184 185 CastExpr( const CastExpr &other ); 185 186 virtual ~CastExpr(); … … 199 200 class UntypedMemberExpr : public Expression { 200 201 public: 201 UntypedMemberExpr( std::string member, Expression *aggregate, Expression *_aname = 0);202 UntypedMemberExpr( std::string member, Expression *aggregate, Expression *_aname = nullptr ); 202 203 UntypedMemberExpr( const UntypedMemberExpr &other ); 203 204 virtual ~UntypedMemberExpr(); … … 220 221 class MemberExpr : public Expression { 221 222 public: 222 MemberExpr( DeclarationWithType *member, Expression *aggregate, Expression *_aname = 0);223 MemberExpr( DeclarationWithType *member, Expression *aggregate, Expression *_aname = nullptr ); 223 224 MemberExpr( const MemberExpr &other ); 224 225 virtual ~MemberExpr(); … … 241 242 class VariableExpr : public Expression { 242 243 public: 243 VariableExpr( DeclarationWithType *var, Expression *_aname = 0);244 VariableExpr( DeclarationWithType *var, Expression *_aname = nullptr ); 244 245 VariableExpr( const VariableExpr &other ); 245 246 virtual ~VariableExpr(); … … 259 260 class ConstantExpr : public Expression { 260 261 public: 261 ConstantExpr( Constant constant, Expression *_aname = 0);262 ConstantExpr( Constant constant, Expression *_aname = nullptr ); 262 263 ConstantExpr( const ConstantExpr &other ); 263 264 virtual ~ConstantExpr(); … … 277 278 class SizeofExpr : public Expression { 278 279 public: 279 SizeofExpr( Expression *expr, Expression *_aname = 0);280 SizeofExpr( Expression *expr, Expression *_aname = nullptr ); 280 281 SizeofExpr( const SizeofExpr &other ); 281 SizeofExpr( Type *type, Expression *_aname = 0);282 SizeofExpr( Type *type, Expression *_aname = nullptr ); 282 283 virtual ~SizeofExpr(); 283 284 … … 302 303 class AlignofExpr : public Expression { 303 304 public: 304 AlignofExpr( Expression *expr, Expression *_aname = 0);305 AlignofExpr( Expression *expr, Expression *_aname = nullptr ); 305 306 AlignofExpr( const AlignofExpr &other ); 306 AlignofExpr( Type *type, Expression *_aname = 0);307 AlignofExpr( Type *type, Expression *_aname = nullptr ); 307 308 virtual ~AlignofExpr(); 308 309 … … 327 328 class UntypedOffsetofExpr : public Expression { 328 329 public: 329 UntypedOffsetofExpr( Type *type, const std::string &member, Expression *_aname = 0);330 UntypedOffsetofExpr( Type *type, const std::string &member, Expression *_aname = nullptr ); 330 331 UntypedOffsetofExpr( const UntypedOffsetofExpr &other ); 331 332 virtual ~UntypedOffsetofExpr(); … … 348 349 class OffsetofExpr : public Expression { 349 350 public: 350 OffsetofExpr( Type *type, DeclarationWithType *member, Expression *_aname = 0);351 OffsetofExpr( Type *type, DeclarationWithType *member, Expression *_aname = nullptr ); 351 352 OffsetofExpr( const OffsetofExpr &other ); 352 353 virtual ~OffsetofExpr(); … … 389 390 class AttrExpr : public Expression { 390 391 public: 391 AttrExpr(Expression *attr, Expression *expr, Expression *_aname = 0);392 AttrExpr(Expression *attr, Expression *expr, Expression *_aname = nullptr ); 392 393 AttrExpr( const AttrExpr &other ); 393 AttrExpr( Expression *attr, Type *type, Expression *_aname = 0);394 AttrExpr( Expression *attr, Type *type, Expression *_aname = nullptr ); 394 395 virtual ~AttrExpr(); 395 396 … … 417 418 class LogicalExpr : public Expression { 418 419 public: 419 LogicalExpr( Expression *arg1, Expression *arg2, bool andp = true, Expression *_aname = 0);420 LogicalExpr( Expression *arg1, Expression *arg2, bool andp = true, Expression *_aname = nullptr ); 420 421 LogicalExpr( const LogicalExpr &other ); 421 422 virtual ~LogicalExpr(); … … 440 441 class ConditionalExpr : public Expression { 441 442 public: 442 ConditionalExpr( Expression *arg1, Expression *arg2, Expression *arg3, Expression *_aname = 0);443 ConditionalExpr( Expression *arg1, Expression *arg2, Expression *arg3, Expression *_aname = nullptr ); 443 444 ConditionalExpr( const ConditionalExpr &other ); 444 445 virtual ~ConditionalExpr(); … … 464 465 class CommaExpr : public Expression { 465 466 public: 466 CommaExpr( Expression *arg1, Expression *arg2, Expression *_aname = 0);467 CommaExpr( Expression *arg1, Expression *arg2, Expression *_aname = nullptr ); 467 468 CommaExpr( const CommaExpr &other ); 468 469 virtual ~CommaExpr(); … … 485 486 class TupleExpr : public Expression { 486 487 public: 487 TupleExpr( Expression *_aname = 0);488 TupleExpr( Expression *_aname = nullptr ); 488 489 TupleExpr( const TupleExpr &other ); 489 490 virtual ~TupleExpr(); … … 503 504 class SolvedTupleExpr : public Expression { 504 505 public: 505 SolvedTupleExpr( Expression *_aname = 0) : Expression( _aname ) {}506 SolvedTupleExpr( std::list<Expression *> &, Expression *_aname = 0);506 SolvedTupleExpr( Expression *_aname = nullptr ) : Expression( _aname ) {} 507 SolvedTupleExpr( std::list<Expression *> &, Expression *_aname = nullptr ); 507 508 SolvedTupleExpr( const SolvedTupleExpr &other ); 508 509 virtual ~SolvedTupleExpr() {} … … 597 598 class UntypedValofExpr : public Expression { 598 599 public: 599 UntypedValofExpr( Statement *_body, Expression *_aname = 0) : Expression( _aname ), body ( _body ) {}600 UntypedValofExpr( Statement *_body, Expression *_aname = nullptr ) : Expression( _aname ), body ( _body ) {} 600 601 UntypedValofExpr( const UntypedValofExpr & other ); 601 602 virtual ~UntypedValofExpr(); … … 632 633 Type * type; 633 634 Initializer * initializer; 635 }; 636 637 class RangeExpr : public Expression { 638 public: 639 RangeExpr( Expression *low, Expression *high ); 640 RangeExpr( const RangeExpr &other ); 641 642 Expression * get_low() const { return low; } 643 Expression * get_high() const { return high; } 644 RangeExpr * set_low( Expression *low ) { RangeExpr::low = low; return this; } 645 RangeExpr * set_high( Expression *high ) { RangeExpr::high = high; return this; } 646 647 virtual RangeExpr *clone() const { return new RangeExpr( *this ); } 648 virtual void accept( Visitor &v ) { v.visit( this ); } 649 virtual Expression *acceptMutator( Mutator &m ) { return m.mutate( this ); } 650 virtual void print( std::ostream &os, int indent = 0 ) const; 651 private: 652 Expression *low, *high; 634 653 }; 635 654 -
src/SynTree/FunctionDecl.cc
r950f7a7 r7527e63 23 23 24 24 FunctionDecl::FunctionDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, FunctionType *type, CompoundStmt *statements, bool isInline, bool isNoreturn, std::list< Attribute * > attributes ) 25 : Parent( name, sc, linkage ), type( type ), statements( statements ), attributes( attributes ) {25 : Parent( name, sc, linkage, attributes ), type( type ), statements( statements ) { 26 26 set_isInline( isInline ); 27 27 set_isNoreturn( isNoreturn ); … … 34 34 FunctionDecl::FunctionDecl( const FunctionDecl &other ) 35 35 : Parent( other ), type( maybeClone( other.type ) ), statements( maybeClone( other.statements ) ) { 36 cloneAll( other.attributes, attributes );37 36 } 38 37 … … 40 39 delete type; 41 40 delete statements; 42 deleteAll( attributes );43 41 } 44 42 … … 69 67 } // if 70 68 71 printAll( attributes, os, indent );69 printAll( get_attributes(), os, indent ); 72 70 73 71 if ( get_storageClass() != DeclarationNode::NoStorageClass ) { -
src/SynTree/Initializer.h
r950f7a7 r7527e63 93 93 std::list<Initializer*> &get_initializers() { return initializers; } 94 94 95 std::list<Initializer*>::iterator begin_initializers() { return initializers.begin(); } 96 std::list<Initializer*>::iterator end_initializers() { return initializers.end(); } 95 typedef std::list<Initializer*>::iterator iterator; 96 iterator begin() { return initializers.begin(); } 97 iterator end() { return initializers.end(); } 97 98 98 99 virtual ListInit *clone() const { return new ListInit( *this ); } -
src/SynTree/Label.h
r950f7a7 r7527e63 9 9 // Author : Rob Schluntz 10 10 // Created On : Wed Jun 8 12:53:12 2016 11 // Last Modified By : Rob Schluntz12 // Last Modified On : Wed Jun 8 12:53:28201613 // Update Count : 111 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Aug 7 14:44:29 2016 13 // Update Count : 2 14 14 // 15 15 … … 24 24 class Label { 25 25 public: 26 Label( const std::string & name = "", Statement * labelled = 0 ) : name( name ), labelled( labelled) {}26 Label( const std::string & name = "", Statement * labelled = 0, const std::list< Attribute * > & attributes = std::list< Attribute * >() ) : name( name ), labelled( labelled ), attributes( attributes ) {} 27 27 Label( const char * name, Statement * labelled = 0 ) : name( name ), labelled( labelled ) {} 28 28 -
src/SynTree/Mutator.cc
r950f7a7 r7527e63 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : T ue Jul 12 17:51:19201613 // Update Count : 1 712 // Last Modified On : Thu Aug 4 11:23:21 2016 13 // Update Count : 19 14 14 // 15 15 … … 126 126 Statement *Mutator::mutate( SwitchStmt *switchStmt ) { 127 127 switchStmt->set_condition( maybeMutate( switchStmt->get_condition(), *this ) ); 128 mutateAll( switchStmt->get_ branches(), *this );128 mutateAll( switchStmt->get_statements(), *this ); 129 129 return switchStmt; 130 130 } … … 349 349 compLitExpr->set_initializer( maybeMutate( compLitExpr->get_initializer(), *this ) ); 350 350 return compLitExpr; 351 } 352 353 Expression *Mutator::mutate( RangeExpr *rangeExpr ) { 354 rangeExpr->set_low( maybeMutate( rangeExpr->get_low(), *this ) ); 355 rangeExpr->set_high( maybeMutate( rangeExpr->get_high(), *this ) ); 356 return rangeExpr; 351 357 } 352 358 -
src/SynTree/Mutator.h
r950f7a7 r7527e63 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Jul 12 17:51:43201613 // Update Count : 1 112 // Last Modified On : Wed Aug 3 16:59:45 2016 13 // Update Count : 12 14 14 // 15 15 #include <cassert> … … 78 78 virtual Expression* mutate( UntypedValofExpr *valofExpr ); 79 79 virtual Expression* mutate( CompoundLiteralExpr *compLitExpr ); 80 virtual Expression* mutate( RangeExpr *rangeExpr ); 80 81 81 82 virtual Type* mutate( VoidType *basicType ); -
src/SynTree/ObjectDecl.cc
r950f7a7 r7527e63 18 18 #include "Initializer.h" 19 19 #include "Expression.h" 20 #include "Attribute.h" 20 21 #include "Common/utility.h" 21 22 #include "Statement.h" 22 23 23 ObjectDecl::ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, Expression *bitfieldWidth, Type *type, Initializer *init, bool isInline, bool isNoreturn )24 : Parent( name, sc, linkage ), type( type ), init( init ), bitfieldWidth( bitfieldWidth ) {24 ObjectDecl::ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, Expression *bitfieldWidth, Type *type, Initializer *init, const std::list< Attribute * > attributes, bool isInline, bool isNoreturn ) 25 : Parent( name, sc, linkage, attributes ), type( type ), init( init ), bitfieldWidth( bitfieldWidth ) { 25 26 set_isInline( isInline ); 26 27 set_isNoreturn( isNoreturn ); … … 45 46 os << LinkageSpec::toString( get_linkage() ) << " "; 46 47 } // if 48 49 printAll( get_attributes(), os, indent ); 47 50 48 51 if ( get_storageClass() != DeclarationNode::NoStorageClass ) { … … 80 83 } // if 81 84 85 // xxx - should printShort print attributes? 86 82 87 if ( get_storageClass() != DeclarationNode::NoStorageClass ) { 83 88 os << DeclarationNode::storageName[ get_storageClass() ] << ' '; -
src/SynTree/Statement.cc
r950f7a7 r7527e63 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Jul 12 17:52:32201613 // Update Count : 5512 // Last Modified On : Fri Aug 12 13:58:48 2016 13 // Update Count : 62 14 14 // 15 15 … … 143 143 } 144 144 145 SwitchStmt::SwitchStmt( std::list<Label> _labels, Expression * _condition, std::list<Statement *> &_ branches ):146 Statement( _labels ), condition( _condition ), branches( _branches ) {145 SwitchStmt::SwitchStmt( std::list<Label> _labels, Expression * _condition, std::list<Statement *> &_statements ): 146 Statement( _labels ), condition( _condition ), statements( _statements ) { 147 147 } 148 148 149 149 SwitchStmt::SwitchStmt( const SwitchStmt & other ): 150 150 Statement( other ), condition( maybeClone( other.condition ) ) { 151 cloneAll( other. branches, branches );151 cloneAll( other.statements, statements ); 152 152 } 153 153 154 154 SwitchStmt::~SwitchStmt() { 155 155 delete condition; 156 // destroy branches 157 } 158 159 void SwitchStmt::add_case( CaseStmt *c ) {} 156 // destroy statements 157 } 160 158 161 159 void SwitchStmt::print( std::ostream &os, int indent ) const { … … 164 162 os << endl; 165 163 166 // branches164 // statements 167 165 std::list<Statement *>::const_iterator i; 168 for ( i = branches.begin(); i != branches.end(); i++)166 for ( i = statements.begin(); i != statements.end(); i++) 169 167 (*i)->print( os, indent + 4 ); 170 168 171 //for_each( branches.begin(), branches.end(), mem_fun( bind1st(&Statement::print ), os ));169 //for_each( statements.begin(), statements.end(), mem_fun( bind1st(&Statement::print ), os )); 172 170 } 173 171 … … 187 185 } 188 186 189 CaseStmt * CaseStmt::makeDefault( std::list<Label> labels, std::list<Statement *> branches ) {190 return new CaseStmt( labels, 0, branches, true );187 CaseStmt * CaseStmt::makeDefault( std::list<Label> labels, std::list<Statement *> stmts ) { 188 return new CaseStmt( labels, 0, stmts, true ); 191 189 } 192 190 … … 311 309 } 312 310 313 CatchStmt::CatchStmt( std::list<Label> labels, Declaration *_decl, Statement *_body, bool isCatchRest) :314 Statement( labels ), decl ( _decl ), body( _body ), catchRest ( isCatchRest) {311 CatchStmt::CatchStmt( std::list<Label> labels, Declaration *_decl, Statement *_body, bool catchAny ) : 312 Statement( labels ), decl ( _decl ), body( _body ), catchRest ( catchAny ) { 315 313 } 316 314 -
src/SynTree/Statement.h
r950f7a7 r7527e63 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Jul 12 17:53:29201613 // Update Count : 4712 // Last Modified On : Fri Aug 12 13:57:46 2016 13 // Update Count : 65 14 14 // 15 15 … … 129 129 class SwitchStmt : public Statement { 130 130 public: 131 SwitchStmt( std::list<Label> labels, Expression *condition, std::list<Statement *> & branches );131 SwitchStmt( std::list<Label> labels, Expression *condition, std::list<Statement *> &statements ); 132 132 SwitchStmt( const SwitchStmt &other ); 133 133 virtual ~SwitchStmt(); … … 136 136 void set_condition( Expression *newValue ) { condition = newValue; } 137 137 138 std::list<Statement *> & get_branches() { return branches; } 139 void add_case( CaseStmt * ); 138 std::list<Statement *> & get_statements() { return statements; } 140 139 141 140 virtual void accept( Visitor &v ) { v.visit( this ); } … … 146 145 private: 147 146 Expression * condition; 148 std::list<Statement *> branches; // should be list of CaseStmt147 std::list<Statement *> statements; 149 148 }; 150 149 151 150 class CaseStmt : public Statement { 152 151 public: 153 CaseStmt( std::list<Label> labels, Expression *conditions, 154 std::list<Statement *> &stmts, bool isdef = false ) throw(SemanticError); 152 CaseStmt( std::list<Label> labels, Expression *conditions, std::list<Statement *> &stmts, bool isdef = false ) throw(SemanticError); 155 153 CaseStmt( const CaseStmt &other ); 156 154 virtual ~CaseStmt(); 157 155 158 static CaseStmt * makeDefault( std::list<Label> labels = std::list<Label>(), 159 std::list<Statement *> stmts = std::list<Statement *>() ); 156 static CaseStmt * makeDefault( std::list<Label> labels = std::list<Label>(), std::list<Statement *> stmts = std::list<Statement *>() ); 160 157 161 158 bool isDefault() const { return _isDefault; } … … 317 314 class CatchStmt : public Statement { 318 315 public: 319 CatchStmt( std::list<Label> labels, Declaration *decl, Statement *body, bool isCatchRest= false );316 CatchStmt( std::list<Label> labels, Declaration *decl, Statement *body, bool catchAny = false ); 320 317 CatchStmt( const CatchStmt &other ); 321 318 virtual ~CatchStmt(); -
src/SynTree/SynTree.h
r950f7a7 r7527e63 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Jul 12 17:54:02201613 // Update Count : 612 // Last Modified On : Wed Aug 3 17:02:34 2016 13 // Update Count : 7 14 14 // 15 15 … … 83 83 class UntypedValofExpr; 84 84 class CompoundLiteralExpr; 85 class RangeExpr; 85 86 86 87 class Type; -
src/SynTree/Visitor.cc
r950f7a7 r7527e63 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : T ue Jul 12 17:54:39201613 // Update Count : 1912 // Last Modified On : Thu Aug 4 11:24:25 2016 13 // Update Count : 21 14 14 // 15 15 … … 109 109 void Visitor::visit( SwitchStmt *switchStmt ) { 110 110 maybeAccept( switchStmt->get_condition(), *this ); 111 acceptAll( switchStmt->get_ branches(), *this );111 acceptAll( switchStmt->get_statements(), *this ); 112 112 } 113 113 … … 296 296 maybeAccept( compLitExpr->get_type(), *this ); 297 297 maybeAccept( compLitExpr->get_initializer(), *this ); 298 } 299 300 void Visitor::visit( RangeExpr *rangeExpr ) { 301 maybeAccept( rangeExpr->get_low(), *this ); 302 maybeAccept( rangeExpr->get_high(), *this ); 298 303 } 299 304 -
src/SynTree/Visitor.h
r950f7a7 r7527e63 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Jul 12 17:55:09201613 // Update Count : 812 // Last Modified On : Wed Aug 3 17:01:50 2016 13 // Update Count : 9 14 14 // 15 15 … … 78 78 virtual void visit( UntypedValofExpr *valofExpr ); 79 79 virtual void visit( CompoundLiteralExpr *compLitExpr ); 80 virtual void visit( RangeExpr *rangeExpr ); 80 81 81 82 virtual void visit( VoidType *basicType ); -
src/driver/cfa.cc
r950f7a7 r7527e63 10 10 // Created On : Tue Aug 20 13:44:49 2002 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Jul 7 08:56:01201613 // Update Count : 14 412 // Last Modified On : Sat Aug 6 16:14:55 2016 13 // Update Count : 148 14 14 // 15 15 … … 87 87 bool cpp_flag = false; // -E or -M flag, preprocessor only 88 88 bool std_flag = false; // -std= flag 89 bool noincstd_flag = false; // -no-include-stdhdr= flag 89 90 bool debugging __attribute(( unused )) = false; // -g flag 90 91 … … 144 145 } else if ( arg == "-nohelp" ) { 145 146 help = false; // strip the nohelp flag 147 } else if ( arg == "-no-include-stdhdr" ) { 148 noincstd_flag = true; // strip the no-include-stdhdr flag 146 149 } else if ( arg == "-compiler" ) { 147 150 // use the user specified compiler … … 248 251 args[nargs] = "-I" CFA_INCDIR; 249 252 nargs += 1; 250 args[nargs] = "-I" CFA_INCDIR "/stdhdr"; 251 nargs += 1; 253 if ( ! noincstd_flag ) { // do not use during build 254 args[nargs] = "-I" CFA_INCDIR "/stdhdr"; 255 nargs += 1; 256 } // if 252 257 args[nargs] = "-I" CFA_INCDIR "/containers"; 253 258 nargs += 1; -
src/examples/gc_no_raii/bug-repro/return_template.c
r950f7a7 r7527e63 5 5 }; 6 6 7 forall(otype T) void ?{}(wrap(T)* this); 8 forall(otype T) void ?{}(wrap(T)* this, wrap(T)* rhs); 9 forall(otype T) void ^?{}(wrap(T)* this); 10 forall(otype T) void ?=?(wrap(T)* this, wrap(T)* rhs); 11 7 12 forall(otype T) 8 static inlinewrap(T) test()13 wrap(T) test() 9 14 { 10 15 wrap(T) tester; -
src/examples/gc_no_raii/src/gc.h
r950f7a7 r7527e63 7 7 static inline gcpointer(T) gcmalloc() 8 8 { 9 gcpointer(T) test;10 // ctor(&test, gc_allocate(sizeof(T)));11 //gc_conditional_collect();12 return test;9 gcpointer(T) ptr = { gc_allocate(sizeof(T)) }; 10 ptr{}; 11 gc_conditional_collect(); 12 return ptr; 13 13 } 14 15 forall(otype T) 16 static inline void gcmalloc(gcpointer(T)* ptr) 17 { 18 ptr{ gc_allocate(sizeof(T)) }; 19 (*ptr){}; 20 gc_conditional_collect(); 21 } -
src/examples/gc_no_raii/src/gcpointers.c
r950f7a7 r7527e63 1 1 #include "gcpointers.h" 2 2 3 #include "gc.h"3 // #include "gc.h" 4 4 #include "internal/collector.h" 5 5 #include "internal/object_header.h" -
src/examples/gc_no_raii/src/gcpointers.h
r950f7a7 r7527e63 10 10 }; 11 11 12 void gcpointer_ctor(gcpointer_t* this);13 void gcpointer_ctor(gcpointer_t* this, void* address);14 void gcpointer_ctor(gcpointer_t* this, gcpointer_t*other);15 void gcpointer_dtor(gcpointer_t* this);16 gcpointer_t* gcpointer_assign(gcpointer_t* this, gcpointer_t*rhs);12 void ?{}(gcpointer_t* this); 13 void ?{}(gcpointer_t* this, void* address); 14 void ?{}(gcpointer_t* this, gcpointer_t other); 15 void ^?{}(gcpointer_t* this); 16 gcpointer_t* ?=?(gcpointer_t this, gcpointer_t rhs); 17 17 18 18 //Logical operators … … 27 27 }; 28 28 29 forall(otype T) 30 static inline void ctor(gcpointer(T)* this) 31 { 32 gcpointer_ctor(&this->internal); 33 } 29 // 30 forall(otype T) void ?{}(gcpointer(T)* this); 31 forall(otype T) void ?{}(gcpointer(T)* this, void* address); 32 forall(otype T) void ctor(gcpointer(T)* this, void* address); 33 forall(otype T) void ?{}(gcpointer(T)* this, gcpointer(T)* other); 34 forall(otype T) void ^?{}(gcpointer(T)* this); 35 forall(otype T) gcpointer(T) ?=?(gcpointer(T) this, gcpointer(T) rhs); 34 36 35 // forall(otype T)36 // static inline void ctor(gcpointer(T)* this, int null)37 // {38 // gcpointer_ctor(&this->internal, NULL);39 // }40 37 41 forall(otype T) 42 static inline void ctor(gcpointer(T)* this, void* address) 43 { 44 gcpointer_ctor(&this->internal, address); 45 } 46 47 forall(otype T) 48 static inline void ctor(gcpointer(T)* this, gcpointer(T)* other) 49 { 50 gcpointer_ctor(&this->internal, other); 51 } 52 53 forall(otype T) 54 static inline void dtor(gcpointer(T)* this) 55 { 56 gcpointer_dtor(&this->internal); 57 } 58 59 forall(otype T) 60 static inline gcpointer(T)* ?=?(gcpointer(T)* this, gcpointer(T)* rhs) 61 { 62 gcpointer_assign(&this->internal, &rhs->internal); 63 return this; 64 } 65 66 forall(otype T) 67 static inline T *?(gcpointer(T) this) 68 { 69 return *(T*)this.internal.ptr; 70 } 38 forall(otype T) T *?(gcpointer(T) this); 71 39 72 40 //Logical operators 73 forall(otype T) 74 static inline int ?!=?(gcpointer(T) this, gcpointer(T) rhs) 75 { 76 return this.internal.ptr != rhs.internal.ptr; 77 } 78 79 forall(otype T) 80 static inline int ?==?(gcpointer(T) this, gcpointer(T) rhs) 81 { 82 return !(this == rhs); 83 } 84 85 forall(otype T) 86 extern struct gcpointer(T) 0; 41 forall(otype T) int ?!=?(gcpointer(T) this, gcpointer(T) rhs); 42 forall(otype T) int ?==?(gcpointer(T) this, gcpointer(T) rhs); -
src/examples/gc_no_raii/src/internal/memory_pool.h
r950f7a7 r7527e63 3 3 extern "C" { 4 4 #include <stdbool.h> 5 #include <stddef.h> 5 6 #include <stdint.h> 6 7 } -
src/examples/gc_no_raii/src/internal/state.h
r950f7a7 r7527e63 1 1 #pragma once 2 2 3 #ifdef __cforall 4 extern "C" { 5 #endif 3 6 #include <stddef.h> 4 7 #include <stdint.h> 8 #ifdef __cforall 9 } 10 #endif 11 #include <vector> 5 12 6 13 #include "tools.h" 7 #include "vector.h"8 14 9 15 typedef vector(struct gc_memory_pool*, heap_allocator(struct gc_memory_pool*)) pools_table_t; -
src/examples/gc_no_raii/src/tools/worklist.h
r950f7a7 r7527e63 10 10 #endif 11 11 12 #include "vector.h"12 #include <vector> 13 13 14 14 typedef vector(intptr_t*, heap_allocator(intptr_t*)) worklist_t; -
src/examples/gc_no_raii/test/badlll.c
r950f7a7 r7527e63 7 7 }; 8 8 9 void ?{}(List_t* this); 10 List_t* ?=?(List_t* this, List_t* rhs); 11 9 12 typedef gcpointer(List_t) LLL; 10 13 11 14 #define MAX (1024 * 1024) 12 15 13 LLL buildLLL(int sz) 16 // LLL buildLLL(int sz) 17 void bla() 14 18 { 15 19 int i; 16 LLL ll0, lll, llc;17 18 ll0 = gcmalloc();19 ll0->val = 0;20 lll = ll0;21 22 for (i = 1; i < sz; i++)23 {24 llc = gcmalloc();25 llc->val = i;26 lll->next = llc;27 lll = llc;28 }29 30 return ll0;20 // LLL ll0;//, lll, llc; 21 // 22 // ll0 = gcmalloc(); 23 // ll0->val = 0; 24 // lll = ll0; 25 // 26 // for (i = 1; i < sz; i++) 27 // { 28 // llc = gcmalloc(); 29 // llc->val = i; 30 // lll->next = llc; 31 // lll = llc; 32 // } 33 // 34 // return ll0; 31 35 } 32 33 void testLLL(LLL lll)34 {35 unsigned char *counted;36 37 counted = (unsigned char *) calloc(MAX, sizeof(unsigned char));38 while (lll)39 {40 counted[lll->val]++;41 if (counted[lll->val] > 1)42 {43 fprintf(stderr, "ERROR! Encountered %d twice!\n", lll->val);44 exit(1);45 }46 lll = lll->next;47 }48 49 return;50 }36 // 37 // void testLLL(LLL lll) 38 // { 39 // unsigned char *counted; 40 // 41 // counted = (unsigned char *) calloc(MAX, sizeof(unsigned char)); 42 // while (lll) 43 // { 44 // counted[lll->val]++; 45 // if (counted[lll->val] > 1) 46 // { 47 // fprintf(stderr, "ERROR! Encountered %d twice!\n", lll->val); 48 // exit(1); 49 // } 50 // lll = lll->next; 51 // } 52 // 53 // return; 54 // } 51 55 52 56 int main(void) … … 54 58 LLL mylll; 55 59 56 mylll = buildLLL(MAX);57 58 testLLL(mylll);60 // mylll = buildLLL(MAX); 61 // 62 // testLLL(mylll); 59 63 60 64 return 0; -
src/examples/gc_no_raii/test/gctest.c
r950f7a7 r7527e63 7 7 int main() { 8 8 sout | "Bonjour au monde!\n"; 9 10 for(int i = 0; i < 1000000; i++) { 11 gcpointer(int) anInt; 12 gcmalloc(&anInt); 13 } 9 14 } -
src/libcfa/Makefile.am
r950f7a7 r7527e63 11 11 ## Created On : Sun May 31 08:54:01 2015 12 12 ## Last Modified By : Peter A. Buhr 13 ## Last Modified On : Fri Jul 8 23:05:11201614 ## Update Count : 19 213 ## Last Modified On : Thu Aug 11 15:36:32 2016 14 ## Update Count : 198 15 15 ############################################################################### 16 16 … … 26 26 # create extra forward types/declarations to reduce inclusion of library files 27 27 extras.cf : extras.regx extras.c 28 $ (AM_V_GEN)@BACKEND_CC@ @CFA_FLAGS@ -E ${srcdir}/extras.c | grep -f extras.regx > ${srcdir}/extras.cf28 ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -E ${srcdir}/extras.c | grep -f extras.regx > ${srcdir}/extras.cf 29 29 30 30 # create forward declarations for gcc builtins 31 31 builtins.cf : builtins.c 32 $ (AM_V_GEN)if [ -e $< ] ; then \32 ${AM_V_GEN}if [ -e $< ] ; then \ 33 33 @BACKEND_CC@ -E -P $^ | sed -e "/targetm/s/.*//" -e "/_Decimal/s/.*//" -e "s/void (const char \*)0();//" -e "s/\"//g" -e "s/\(__builtin_\) /\1/" > $@ ; \ 34 34 fi 35 35 36 36 builtins.c : builtins.def prototypes.awk 37 $ (AM_V_GEN)if [ -e $< ] ; then \37 ${AM_V_GEN}if [ -e $< ] ; then \ 38 38 @BACKEND_CC@ -E prototypes.c | awk -f prototypes.awk > $@ ; \ 39 39 fi … … 48 48 49 49 libcfa-prelude.c : ${srcdir}/prelude.cf ${srcdir}/extras.cf ${srcdir}/builtins.cf 50 $ (AM_V_GEN)${abs_top_srcdir}/src/driver/cfa-cpp -l ${srcdir}/prelude.cf $@ # use src/cfa-cpp as not in lib until after install50 ${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -l ${srcdir}/prelude.cf $@ # use src/cfa-cpp as not in lib until after install 51 51 52 52 libcfa-prelude.o : libcfa-prelude.c 53 $ (AM_V_GEN)@BACKEND_CC@ @CFA_FLAGS@ -c -o $@ $<53 ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -c -o $@ $< 54 54 55 CFLAGS = -quiet - g -Wall -Wno-unused-function @CFA_FLAGS@ -B${abs_top_srcdir}/src/driver -XCFA -t # TEMPORARY: does not build with -O255 CFLAGS = -quiet -no-include-stdhdr -g -Wall -Wno-unused-function @CFA_FLAGS@ -B${abs_top_srcdir}/src/driver -XCFA -t # TEMPORARY: does not build with -O2 56 56 CC = ${abs_top_srcdir}/src/driver/cfa 57 57 58 headers = limits stdlib math iostream fstream iterator rational containers/vector58 headers = limits stdlib math iostream fstream iterator rational # containers/vector 59 59 libobjs = ${headers:=.o} 60 60 … … 63 63 @true 64 64 65 ${libobjs} : ${abs_top_srcdir}/src/driver/cfa-cpp ${cfalib_DATA} 65 ${libobjs} : ${abs_top_srcdir}/src/driver/cfa-cpp ${cfalib_DATA} # add dependency to cfa-cpp so all libraries are rebuilt with new translator 66 66 67 67 libcfa_a_SOURCES = libcfa-prelude.c ${headers:=.c} -
src/libcfa/Makefile.in
r950f7a7 r7527e63 89 89 libcfa_a_AR = $(AR) $(ARFLAGS) 90 90 libcfa_a_LIBADD = 91 am__dirstamp = $(am__leading_dot)dirstamp92 91 am__objects_1 = limits.$(OBJEXT) stdlib.$(OBJEXT) math.$(OBJEXT) \ 93 92 iostream.$(OBJEXT) fstream.$(OBJEXT) iterator.$(OBJEXT) \ 94 rational.$(OBJEXT) containers/vector.$(OBJEXT)93 rational.$(OBJEXT) 95 94 am_libcfa_a_OBJECTS = libcfa-prelude.$(OBJEXT) $(am__objects_1) 96 95 libcfa_a_OBJECTS = $(am_libcfa_a_OBJECTS) … … 136 135 CFA_LIBDIR = @CFA_LIBDIR@ 137 136 CFA_PREFIX = @CFA_PREFIX@ 138 CFLAGS = -quiet - g -Wall -Wno-unused-function @CFA_FLAGS@ -B${abs_top_srcdir}/src/driver -XCFA -t # TEMPORARY: does not build with -O2137 CFLAGS = -quiet -no-include-stdhdr -g -Wall -Wno-unused-function @CFA_FLAGS@ -B${abs_top_srcdir}/src/driver -XCFA -t # TEMPORARY: does not build with -O2 139 138 CPP = @CPP@ 140 139 CPPFLAGS = @CPPFLAGS@ … … 234 233 cfalib_DATA = builtins.cf extras.cf prelude.cf 235 234 MAINTAINERCLEANFILES = builtins.cf extras.cf ${addprefix ${libdir}/,${cfalib_DATA}} ${addprefix ${libdir}/,${lib_LIBRARIES}} 236 headers = limits stdlib math iostream fstream iterator rational containers/vector235 headers = limits stdlib math iostream fstream iterator rational # containers/vector 237 236 libobjs = ${headers:=.o} 238 237 libcfa_a_SOURCES = libcfa-prelude.c ${headers:=.c} … … 304 303 clean-libLIBRARIES: 305 304 -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES) 306 containers/$(am__dirstamp):307 @$(MKDIR_P) containers308 @: > containers/$(am__dirstamp)309 containers/$(DEPDIR)/$(am__dirstamp):310 @$(MKDIR_P) containers/$(DEPDIR)311 @: > containers/$(DEPDIR)/$(am__dirstamp)312 containers/vector.$(OBJEXT): containers/$(am__dirstamp) \313 containers/$(DEPDIR)/$(am__dirstamp)314 305 libcfa.a: $(libcfa_a_OBJECTS) $(libcfa_a_DEPENDENCIES) $(EXTRA_libcfa_a_DEPENDENCIES) 315 306 $(AM_V_at)-rm -f libcfa.a … … 319 310 mostlyclean-compile: 320 311 -rm -f *.$(OBJEXT) 321 -rm -f containers/vector.$(OBJEXT)322 312 323 313 distclean-compile: … … 332 322 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rational.Po@am__quote@ 333 323 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stdlib.Po@am__quote@ 334 @AMDEP_TRUE@@am__include@ @am__quote@containers/$(DEPDIR)/vector.Po@am__quote@335 324 336 325 .c.o: … … 505 494 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) 506 495 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) 507 -rm -f containers/$(DEPDIR)/$(am__dirstamp)508 -rm -f containers/$(am__dirstamp)509 496 510 497 maintainer-clean-generic: … … 517 504 518 505 distclean: distclean-am 519 -rm -rf ./$(DEPDIR) containers/$(DEPDIR)506 -rm -rf ./$(DEPDIR) 520 507 -rm -f Makefile 521 508 distclean-am: clean-am distclean-compile distclean-generic \ … … 563 550 564 551 maintainer-clean: maintainer-clean-am 565 -rm -rf ./$(DEPDIR) containers/$(DEPDIR)552 -rm -rf ./$(DEPDIR) 566 553 -rm -f Makefile 567 554 maintainer-clean-am: distclean-am maintainer-clean-generic \ … … 603 590 # create extra forward types/declarations to reduce inclusion of library files 604 591 extras.cf : extras.regx extras.c 605 $ (AM_V_GEN)@BACKEND_CC@ @CFA_FLAGS@ -E ${srcdir}/extras.c | grep -f extras.regx > ${srcdir}/extras.cf592 ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -E ${srcdir}/extras.c | grep -f extras.regx > ${srcdir}/extras.cf 606 593 607 594 # create forward declarations for gcc builtins 608 595 builtins.cf : builtins.c 609 $ (AM_V_GEN)if [ -e $< ] ; then \596 ${AM_V_GEN}if [ -e $< ] ; then \ 610 597 @BACKEND_CC@ -E -P $^ | sed -e "/targetm/s/.*//" -e "/_Decimal/s/.*//" -e "s/void (const char \*)0();//" -e "s/\"//g" -e "s/\(__builtin_\) /\1/" > $@ ; \ 611 598 fi 612 599 613 600 builtins.c : builtins.def prototypes.awk 614 $ (AM_V_GEN)if [ -e $< ] ; then \601 ${AM_V_GEN}if [ -e $< ] ; then \ 615 602 @BACKEND_CC@ -E prototypes.c | awk -f prototypes.awk > $@ ; \ 616 603 fi … … 623 610 624 611 libcfa-prelude.c : ${srcdir}/prelude.cf ${srcdir}/extras.cf ${srcdir}/builtins.cf 625 $ (AM_V_GEN)${abs_top_srcdir}/src/driver/cfa-cpp -l ${srcdir}/prelude.cf $@ # use src/cfa-cpp as not in lib until after install612 ${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -l ${srcdir}/prelude.cf $@ # use src/cfa-cpp as not in lib until after install 626 613 627 614 libcfa-prelude.o : libcfa-prelude.c 628 $ (AM_V_GEN)@BACKEND_CC@ @CFA_FLAGS@ -c -o $@ $<615 ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -c -o $@ $< 629 616 630 617 # extensionless header files are overridden by -o flag in default makerule => explicitly override default rule to silently do nothing … … 632 619 @true 633 620 634 ${libobjs} : ${abs_top_srcdir}/src/driver/cfa-cpp ${cfalib_DATA} 621 ${libobjs} : ${abs_top_srcdir}/src/driver/cfa-cpp ${cfalib_DATA} # add dependency to cfa-cpp so all libraries are rebuilt with new translator 635 622 636 623 maintainer-clean-local: -
src/main.cc
r950f7a7 r7527e63 10 10 // Created On : Fri May 15 23:12:02 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Jul 5 15:23:11201613 // Update Count : 2 0912 // Last Modified On : Mon Aug 15 17:58:57 2016 13 // Update Count : 220 14 14 // 15 15 16 16 #include <iostream> 17 17 #include <fstream> 18 #include <cstdlib>19 #include <cstdio>20 18 #include <getopt.h> 21 19 #include "Parser/Parser.h" 22 #include "Parser/ParseNode.h"23 #include "Parser/LinkageSpec.h"24 20 #include "SynTree/Declaration.h" 25 21 #include "SynTree/Visitor.h" … … 28 24 #include "GenPoly/Box.h" 29 25 #include "GenPoly/CopyParams.h" 26 #include "GenPoly/InstantiateGeneric.h" 30 27 #include "CodeGen/Generate.h" 31 28 #include "CodeGen/FixNames.h" … … 42 39 #include "InitTweak/GenInit.h" 43 40 #include "InitTweak/FixInit.h" 44 #include "InitTweak/FixGlobalInit.h"45 //#include "Explain/GenProlog.h"46 //#include "Try/Visit.h"47 41 48 42 #include "Common/SemanticError.h" … … 193 187 input = fopen( argv[ optind ], "r" ); 194 188 if ( ! input ) { 195 std::cout << "Error: can 't open " << argv[ optind ] << std::endl;189 std::cout << "Error: cannot open " << argv[ optind ] << std::endl; 196 190 exit( EXIT_FAILURE ); 197 191 } // if … … 219 213 FILE * builtins = fopen( libcfap | treep ? "builtins.cf" : CFA_LIBDIR "/builtins.cf", "r" ); 220 214 if ( builtins == NULL ) { 221 std::cerr << "Error: can 't open builtins.cf" << std::endl;215 std::cerr << "Error: cannot open builtins.cf" << std::endl; 222 216 exit( EXIT_FAILURE ); 223 217 } // if … … 227 221 FILE * extras = fopen( libcfap | treep ? "extras.cf" : CFA_LIBDIR "/extras.cf", "r" ); 228 222 if ( extras == NULL ) { 229 std::cerr << "Error: can 't open extras.cf" << std::endl;223 std::cerr << "Error: cannot open extras.cf" << std::endl; 230 224 exit( EXIT_FAILURE ); 231 225 } // if … … 236 230 FILE * prelude = fopen( treep ? "prelude.cf" : CFA_LIBDIR "/prelude.cf", "r" ); 237 231 if ( prelude == NULL ) { 238 std::cerr << "Error: can 't open prelude.cf" << std::endl;232 std::cerr << "Error: cannot open prelude.cf" << std::endl; 239 233 exit( EXIT_FAILURE ); 240 234 } // if … … 282 276 OPTPRINT( "fixNames" ) 283 277 CodeGen::fixNames( translationUnit ); 284 OPTPRINT( "fixGlobalInit" );285 InitTweak::fixGlobalInit( translationUnit, filename, libcfap || treep );286 278 OPTPRINT( "tweakInit" ) 287 279 InitTweak::genInit( translationUnit ); … … 304 296 } 305 297 298 // fix ObjectDecl - replaces ConstructorInit nodes 306 299 OPTPRINT( "fixInit" ) 307 // fix ObjectDecl - replaces ConstructorInit nodes 308 InitTweak::fix( translationUnit ); 300 InitTweak::fix( translationUnit, filename, libcfap || treep ); 309 301 if ( ctorinitp ) { 310 302 dump ( translationUnit ); … … 312 304 } 313 305 306 OPTPRINT("instantiateGenerics") 307 GenPoly::instantiateGeneric( translationUnit ); 314 308 OPTPRINT( "copyParams" ); 315 309 GenPoly::copyParams( translationUnit ); … … 384 378 std::list< Declaration * > decls; 385 379 if ( noprotop ) { 386 filter( translationUnit.begin(), translationUnit.end(), 387 std::back_inserter( decls ), notPrelude ); 380 filter( translationUnit.begin(), translationUnit.end(), std::back_inserter( decls ), notPrelude ); 388 381 } else { 389 382 decls = translationUnit; -
src/tests/.expect/32/extension.txt
r950f7a7 r7527e63 100 100 ((void)((__extension__ __a__i_2 , __extension__ __b__i_2) , __extension__ __c__i_2)); 101 101 } 102 __attribute__ ((constructor(),)) static void _init_extension(void){103 int _global_init0;104 ((void)((*((int *)(&__a__i_1)))=_global_init0) /* ?{} */);105 int _global_init1;106 ((void)((*((int *)(&__b__i_1)))=_global_init1) /* ?{} */);107 int _global_init2;108 ((void)((*((int *)(&__c__i_1)))=_global_init2) /* ?{} */);109 }110 __attribute__ ((destructor(),)) static void _destroy_extension(void){111 ((void)((*((int *)(&__c__i_1)))) /* ^?{} */);112 ((void)((*((int *)(&__b__i_1)))) /* ^?{} */);113 ((void)((*((int *)(&__a__i_1)))) /* ^?{} */);114 } -
src/tests/.expect/32/gccExtensions.txt
r950f7a7 r7527e63 5 5 extern void exit(int __status); 6 6 extern int printf(const char *__restrict __format, ...); 7 extern int __x__i_1; 7 8 int main(int __argc__i_1, const char **__argv__PPCc_1){ 8 9 asm ( "nop" : : : ); 9 10 asm ( "nop" : : : ); 10 11 asm ( "nop" : : : ); 12 static int __y__i_2; 13 int __src__i_2; 14 int __dst__i_2; 15 asm volatile ( "mov %1, %0\n\tadd $1, %0" : : : ); 16 asm volatile ( "mov %1, %0\n\tadd $1, %0" : "=r" ( __dst__i_2 ) : : ); 17 asm volatile ( "mov %1, %0\n\tadd $1, %0" : "=r" ( __dst__i_2 ) : "r" ( __src__i_2 ) : ); 18 asm ( "mov %1, %0\n\tadd $1, %0" : "=r" ( __dst__i_2 ), "=r" ( __src__i_2 ) : [ __src__i_2 ] "r" ( __dst__i_2 ) : "r0" ); 11 19 double _Complex __c1__Xd_2; 12 20 double _Complex __c2__Xd_2; … … 151 159 struct s4 __y2__3ss4_2; 152 160 ((void)___constructor__F_P3ss4_autogen___2(((struct s4 *)(&__y2__3ss4_2)))); 153 int __m1__A0i_2[(( longunsigned int )10)];154 int __m2__A0A0i_2[(( long unsigned int )10)][((longunsigned int )10)];155 int __m3__A0A0i_2[(( long unsigned int )10)][((longunsigned int )10)];161 int __m1__A0i_2[((unsigned int )10)]; 162 int __m2__A0A0i_2[((unsigned int )10)][((unsigned int )10)]; 163 int __m3__A0A0i_2[((unsigned int )10)][((unsigned int )10)]; 156 164 int _retVal0 = { 0 }; 157 165 ((void)(_retVal0=0) /* ?{} */); -
src/tests/.expect/64/extension.txt
r950f7a7 r7527e63 100 100 ((void)((__extension__ __a__i_2 , __extension__ __b__i_2) , __extension__ __c__i_2)); 101 101 } 102 __attribute__ ((constructor(),)) static void _init_extension(void){103 int _global_init0;104 ((void)((*((int *)(&__a__i_1)))=_global_init0) /* ?{} */);105 int _global_init1;106 ((void)((*((int *)(&__b__i_1)))=_global_init1) /* ?{} */);107 int _global_init2;108 ((void)((*((int *)(&__c__i_1)))=_global_init2) /* ?{} */);109 }110 __attribute__ ((destructor(),)) static void _destroy_extension(void){111 ((void)((*((int *)(&__c__i_1)))) /* ^?{} */);112 ((void)((*((int *)(&__b__i_1)))) /* ^?{} */);113 ((void)((*((int *)(&__a__i_1)))) /* ^?{} */);114 } -
src/tests/.expect/64/gccExtensions.txt
r950f7a7 r7527e63 5 5 extern void exit(int __status); 6 6 extern int printf(const char *__restrict __format, ...); 7 extern int __x__i_1; 7 8 int main(int __argc__i_1, const char **__argv__PPCc_1){ 8 9 asm ( "nop" : : : ); 9 10 asm ( "nop" : : : ); 10 11 asm ( "nop" : : : ); 12 static int __y__i_2; 13 int __src__i_2; 14 int __dst__i_2; 15 asm volatile ( "mov %1, %0\n\tadd $1, %0" : : : ); 16 asm volatile ( "mov %1, %0\n\tadd $1, %0" : "=r" ( __dst__i_2 ) : : ); 17 asm volatile ( "mov %1, %0\n\tadd $1, %0" : "=r" ( __dst__i_2 ) : "r" ( __src__i_2 ) : ); 18 asm ( "mov %1, %0\n\tadd $1, %0" : "=r" ( __dst__i_2 ), "=r" ( __src__i_2 ) : [ __src__i_2 ] "r" ( __dst__i_2 ) : "r0" ); 19 L2: L1: asm goto ( "frob %%r5, %1; jc %l[L1]; mov (%2), %%r5" : : "r" ( __src__i_2 ), "r" ( (&__dst__i_2) ) : "r5", "memory" : L1, L2 ); 11 20 double _Complex __c1__Xd_2; 12 21 double _Complex __c2__Xd_2; -
src/tests/Makefile.am
r950f7a7 r7527e63 11 11 ## Created On : Sun May 31 09:08:15 2015 12 12 ## Last Modified By : Peter A. Buhr 13 ## Last Modified On : Sat Jul 9 11:23:24 201614 ## Update Count : 3 513 ## Last Modified On : Mon Aug 15 12:24:54 2016 14 ## Update Count : 39 15 15 ############################################################################### 16 16 … … 27 27 28 28 all-local : 29 +python test.py vector_test avl_test operators numericConstants expression enum asmNamearray typeof cast dtor-early-exit init_once29 @+python test.py vector_test avl_test operators numericConstants expression enum array typeof cast dtor-early-exit init_once 30 30 31 31 all-tests : 32 +python test.py --all32 @+python test.py --all # '@' => do not echo command (SILENT), '+' => allows recursive make from within python program 33 33 34 34 clean-local : 35 -rm -f ${EXTRA_PROGRAMS}35 rm -f ${EXTRA_PROGRAMS} 36 36 37 37 list : 38 +python test.py --list38 @+python test.py --list 39 39 40 40 constant0-1DP : constant0-1.c -
src/tests/Makefile.in
r950f7a7 r7527e63 635 635 636 636 all-local : 637 +python test.py vector_test avl_test operators numericConstants expression enum asmNamearray typeof cast dtor-early-exit init_once637 @+python test.py vector_test avl_test operators numericConstants expression enum array typeof cast dtor-early-exit init_once 638 638 639 639 all-tests : 640 +python test.py --all640 @+python test.py --all # '@' => do not echo command (SILENT), '+' => allows recursive make from within python program 641 641 642 642 clean-local : 643 -rm -f ${EXTRA_PROGRAMS}643 rm -f ${EXTRA_PROGRAMS} 644 644 645 645 list : 646 +python test.py --list646 @+python test.py --list 647 647 648 648 constant0-1DP : constant0-1.c -
src/tests/exception.c
r950f7a7 r7527e63 11 11 x/4; 12 12 } catch( int ) { 13 } catch( int x ) {13 } catch( float x ) { 14 14 } catch( struct { int i; } ) { 15 15 } catch( struct { int i; } x ) { … … 21 21 } catch( * struct { int i; } x ) { 22 22 } catch( ... ) { 23 //} finally {23 } finally { 24 24 } // try 25 25 } -
src/tests/gccExtensions.c
r950f7a7 r7527e63 1 // 2 // Cforall Version 1.0.0 Copyright (C) 2015 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 // gccExtensions.c -- 8 // 9 // Author : Peter A. Buhr 10 // Created On : Sun Aug 14 17:28:17 2016 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Aug 15 12:44:35 2016 13 // Update Count : 5 14 // 15 16 extern int x asm( "xx" ); 17 1 18 int main(int argc, char const *argv[]) { 2 19 asm( "nop" ); 3 20 __asm( "nop" ); 4 21 __asm__( "nop" ); 22 23 static int y asm( "yy" ); 24 // static * int z asm( "zz" ); // CFA declaration 25 26 int src; 27 int dst; 28 29 asm volatile ( "mov %1, %0\n\t" 30 "add $1, %0" : : : ); 31 32 asm volatile ( "mov %1, %0\n\t" 33 "add $1, %0" 34 : "=" "r" (dst)); 35 36 asm volatile ( "mov %1, %0\n\t" 37 "add $1, %0" 38 : "=r" (dst) 39 : "r" (src)); 40 41 asm ( "mov %1, %0\n\t" 42 "add $1, %0" 43 : "=r" (dst), "=r" (src) 44 : [src] "r" (dst) 45 : "r0"); 46 47 L1: L2: 48 asm goto ( "frob %%r5, %1; jc %l[L1]; mov (%2), %%r5" 49 : /* No outputs. */ 50 : "r"(src), "r"(&dst) 51 : "r5", "memory" 52 : L1, L2 ); 5 53 6 54 __complex__ c1; … … 57 105 return 0; 58 106 } 107 108 // Local Variables: // 109 // tab-width: 4 // 110 // compile-command: "cfa gccExtensions.c" // 111 // End: // -
src/tests/init_once.c
r950f7a7 r7527e63 92 92 init_once y = x; 93 93 94 void static_variable() { 95 static init_once x; 96 } 97 94 98 int main() { 95 99 // local variables … … 179 183 } 180 184 } 185 186 // function-scoped static variable 187 for (int i = 0; i < 10; i++) { 188 static_variable(); 189 } 181 190 } 182 191 -
src/tests/labelledExit.c
r950f7a7 r7527e63 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 // labelledExit.c -- 8 // 9 // Author : Peter A. Buhr 10 // Created On : Wed Aug 10 07:29:39 2016 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Aug 10 07:30:15 2016 13 // Update Count : 1 14 // 15 1 16 int foo() { 2 17 int i; … … 136 151 else 137 152 i += 1; 138 139 153 } 140 154 141 int main( int argc, char const *argv[]) {155 int main( int argc, char const *argv[] ) { 142 156 /* code */ 143 return 0;144 157 } 145 158 146 159 // Local Variables: // 147 160 // tab-width: 4 // 148 // compile-command: "cfa LabelledExit.c" //161 // compile-command: "cfa labelledExit.c" // 149 162 // End: // -
src/tests/switch.c
r950f7a7 r7527e63 10 10 // Created On : Tue Jul 12 06:50:22 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : T ue Jul 12 18:02:23201613 // Update Count : 2212 // Last Modified On : Thu Aug 4 11:44:29 2016 13 // Update Count : 31 14 14 // 15 15 … … 33 33 } // switch 34 34 35 // switch (3 ) { 36 // int j; 37 // case 3: 38 // break; 39 // case 4: 40 // j = 0; 41 // } 35 switch ( 3 ) { 36 int j; 37 case 3: 38 break; 39 case 4: 40 j = 0; 41 } 42 43 switch ( i ) { 44 case 1, 2, 3: 45 switch ( i ) { 46 case 2, 3, 4: 47 7; 48 } 49 } 42 50 43 51 switch ( i ) { … … 49 57 default: 50 58 i = 3; 51 case 3:59 case 19: 52 60 case 'A' ... 'Z': 53 case 5... 6:54 case 2 , 4:61 case 1 ... 6: 62 case 20, 30: 55 63 j = 3; 56 64 f( 3 ); … … 78 86 struct S { int i; }; 79 87 S s; 80 case 3:88 case 19: 81 89 case 'A' ... 'Z': 82 case 5... 6:83 case 2 , 4, 7:90 case 0 ... 6: 91 case 20, 30, 40: 84 92 i = 3; 85 93 f( 3 ); -
src/tests/test.py
r950f7a7 r7527e63 23 23 # parses the Makefile to find the machine type (32-bit / 64-bit) 24 24 def getMachineType(): 25 with open('Makefile') as file: 26 makefile = file.read() 27 m = re.search("CFA_FLAGS\s*=\s*-m(.*)", makefile) 28 return m.group(1) if m else '64' 25 sh('echo "int main() { return 0; }" > .dummy.c') 26 sh("make .dummy", print2stdout=False) 27 _, out = sh("file .dummy", print2stdout=False) 28 sh("rm -f .dummy.c > /dev/null 2>&1") 29 sh("rm -f .dummy > /dev/null 2>&1") 30 return re.search("ELF\s([0-9]+)-bit", out).group(1) 29 31 30 32 # reads the directory ./.expect and indentifies the tests … … 97 99 return False 98 100 99 # find the test data for a given test name100 def filterTests(testname) :101 found = [test for test in allTests if test.name == testname]102 return (found[0] if len(found) == 1 else Test(testname, testname) )103 104 101 ################################################################################ 105 102 # running test functions … … 139 136 if not dry_run and fileContainsOnly(out_file, "make: *** No rule to make target `%s'. Stop." % test.name) : 140 137 retcode = 1; 141 error = "\t\tNo make target for test %s!" % test 138 error = "\t\tNo make target for test %s!" % test.name 142 139 sh("rm %s" % out_file, False) 143 140 … … 250 247 # already existing tests and create new info for the new tests 251 248 if options.regenerate_expected : 252 tests = map(filterTests, options.tests) 249 for testname in options.tests : 250 if testname.endswith(".c") or testname.endswith(".cc") or testname.endswith(".cpp") : 251 print('ERROR: "%s", tests are not allowed to end with a C/C++/CFA extension, ignoring it' % testname, file=sys.stderr) 252 else : 253 found = [test for test in allTests if test.name == testname] 254 tests.append( found[0] if len(found) == 1 else Test(testname, testname) ) 253 255 254 256 else :
Note:
See TracChangeset
for help on using the changeset viewer.