Changes in / [0f9e4403:c5833e8]
- Files:
-
- 22 added
- 15 deleted
- 123 edited
-
.gitignore (modified) (1 diff)
-
configure (modified) (1 diff)
-
configure.ac (modified) (1 diff)
-
doc/LaTeXmacros/common.tex (deleted)
-
doc/LaTeXmacros/indexstyle (deleted)
-
doc/bibliography/cfa.bib (deleted)
-
doc/refrat/Makefile (modified) (3 diffs)
-
doc/refrat/indexstyle (added)
-
doc/refrat/refrat.tex (modified) (151 diffs)
-
doc/user/Makefile (deleted)
-
doc/user/user.tex (deleted)
-
src/CodeGen/CodeGenerator.cc (modified) (5 diffs)
-
src/CodeGen/CodeGenerator.h (modified) (4 diffs)
-
src/CodeGen/GenType.cc (modified) (3 diffs)
-
src/GenPoly/Box.cc (modified) (48 diffs)
-
src/GenPoly/DeclMutator.cc (modified) (8 diffs)
-
src/GenPoly/DeclMutator.h (modified) (1 diff)
-
src/GenPoly/ErasableScopedMap.h (deleted)
-
src/GenPoly/FindFunction.cc (modified) (3 diffs)
-
src/GenPoly/GenPoly.cc (modified) (3 diffs)
-
src/GenPoly/GenPoly.h (modified) (3 diffs)
-
src/GenPoly/InstantiateGeneric.cc (added)
-
src/GenPoly/InstantiateGeneric.h (added)
-
src/GenPoly/Lvalue.cc (modified) (3 diffs)
-
src/GenPoly/PolyMutator.cc (modified) (1 diff)
-
src/GenPoly/ScopedMap.h (modified) (12 diffs)
-
src/GenPoly/ScopedSet.h (deleted)
-
src/GenPoly/ScrubTyVars.cc (modified) (2 diffs)
-
src/GenPoly/module.mk (modified) (1 diff)
-
src/InitTweak/InitModel.h (modified) (1 diff)
-
src/Makefile.am (modified) (2 diffs)
-
src/Makefile.in (modified) (25 diffs)
-
src/Parser/DeclarationNode.cc (modified) (21 diffs)
-
src/Parser/ExpressionNode.cc (modified) (4 diffs)
-
src/Parser/ParseNode.h (modified) (12 diffs)
-
src/Parser/Parser.cc (modified) (1 diff)
-
src/Parser/TypeData.cc (modified) (10 diffs)
-
src/Parser/TypeData.h (modified) (4 diffs)
-
src/Parser/TypedefTable.cc (modified) (4 diffs)
-
src/Parser/TypedefTable.h (modified) (5 diffs)
-
src/Parser/lex.cc (modified) (30 diffs)
-
src/Parser/lex.h (modified) (2 diffs)
-
src/Parser/lex.ll (modified) (9 diffs)
-
src/Parser/parser.cc (modified) (203 diffs)
-
src/Parser/parser.h (modified) (4 diffs)
-
src/Parser/parser.yy (modified) (21 diffs)
-
src/ResolvExpr/AdjustExprType.cc (modified) (4 diffs)
-
src/ResolvExpr/AlternativeFinder.cc (modified) (1 diff)
-
src/ResolvExpr/AlternativeFinder.h (modified) (1 diff)
-
src/ResolvExpr/CommonType.cc (modified) (4 diffs)
-
src/ResolvExpr/ConversionCost.cc (modified) (3 diffs)
-
src/ResolvExpr/ConversionCost.h (modified) (2 diffs)
-
src/ResolvExpr/PtrsAssignable.cc (modified) (4 diffs)
-
src/ResolvExpr/PtrsCastable.cc (modified) (5 diffs)
-
src/ResolvExpr/RenameVars.cc (modified) (3 diffs)
-
src/ResolvExpr/RenameVars.h (modified) (2 diffs)
-
src/ResolvExpr/Resolver.cc (modified) (2 diffs)
-
src/ResolvExpr/Unify.cc (modified) (13 diffs)
-
src/SymTab/AddVisit.h (modified) (3 diffs)
-
src/SymTab/AggregateTable.h (added)
-
src/SymTab/FixFunction.cc (modified) (3 diffs)
-
src/SymTab/FixFunction.h (modified) (2 diffs)
-
src/SymTab/IdTable.cc (added)
-
src/SymTab/IdTable.h (added)
-
src/SymTab/ImplementationType.cc (modified) (4 diffs)
-
src/SymTab/Indexer.cc (modified) (17 diffs)
-
src/SymTab/Indexer.h (modified) (7 diffs)
-
src/SymTab/Mangler.cc (modified) (1 diff)
-
src/SymTab/Mangler.h (modified) (1 diff)
-
src/SymTab/StackTable.cc (added)
-
src/SymTab/StackTable.h (added)
-
src/SymTab/TypeEquality.cc (modified) (2 diffs)
-
src/SymTab/TypeTable.h (added)
-
src/SymTab/Validate.cc (modified) (23 diffs)
-
src/SymTab/module.mk (modified) (1 diff)
-
src/SynTree/AggregateDecl.cc (modified) (2 diffs)
-
src/SynTree/CodeGenVisitor.cc (added)
-
src/SynTree/CodeGenVisitor.h (added)
-
src/SynTree/Constant.cc (modified) (2 diffs)
-
src/SynTree/Constant.h (modified) (1 diff)
-
src/SynTree/Declaration.h (modified) (2 diffs)
-
src/SynTree/Expression.cc (modified) (6 diffs)
-
src/SynTree/Expression.h (modified) (7 diffs)
-
src/SynTree/Mutator.cc (modified) (6 diffs)
-
src/SynTree/Mutator.h (modified) (5 diffs)
-
src/SynTree/ReferenceToType.cc (modified) (2 diffs)
-
src/SynTree/Statement.cc (modified) (16 diffs)
-
src/SynTree/Statement.h (modified) (21 diffs)
-
src/SynTree/SynTree.h (modified) (5 diffs)
-
src/SynTree/Type.h (modified) (3 diffs)
-
src/SynTree/TypeSubstitution.cc (modified) (3 diffs)
-
src/SynTree/TypeSubstitution.h (modified) (2 diffs)
-
src/SynTree/VarArgsType.cc (deleted)
-
src/SynTree/Visitor.cc (modified) (6 diffs)
-
src/SynTree/Visitor.h (modified) (5 diffs)
-
src/SynTree/module.mk (modified) (2 diffs)
-
src/Tuples/FlattenTuple.cc (modified) (1 diff)
-
src/Tuples/FlattenTuple.h (modified) (1 diff)
-
src/driver/Makefile.in (modified) (1 diff)
-
src/driver/cfa.cc (modified) (3 diffs)
-
src/examples/Makefile.in (modified) (1 diff)
-
src/examples/abs.c (modified) (2 diffs)
-
src/examples/array.c (modified) (3 diffs)
-
src/examples/array.h (modified) (4 diffs)
-
src/examples/ato.c (modified) (2 diffs)
-
src/examples/constants.c (modified) (3 diffs)
-
src/examples/ctxts.c (modified) (1 diff)
-
src/examples/fstream_test.c (modified) (2 diffs)
-
src/examples/hello.c (modified) (2 diffs)
-
src/examples/huge.c (modified) (1 diff)
-
src/examples/identity.c (modified) (1 diff)
-
src/examples/includes.c (modified) (6 diffs)
-
src/examples/index.h (modified) (1 diff)
-
src/examples/io.c (deleted)
-
src/examples/io.data (deleted)
-
src/examples/it_out.c (modified) (5 diffs)
-
src/examples/limits.c (modified) (1 diff)
-
src/examples/minmax.c (modified) (2 diffs)
-
src/examples/new.c (modified) (1 diff)
-
src/examples/prolog.c (modified) (2 diffs)
-
src/examples/quad.c (modified) (2 diffs)
-
src/examples/random.c (modified) (1 diff)
-
src/examples/rational.c (deleted)
-
src/examples/rational.cc (deleted)
-
src/examples/searchsort.c (modified) (2 diffs)
-
src/examples/simplePoly.c (modified) (1 diff)
-
src/examples/simpler.c (modified) (1 diff)
-
src/examples/specialize.c (modified) (2 diffs)
-
src/examples/square.c (modified) (1 diff)
-
src/examples/sum.c (modified) (8 diffs)
-
src/examples/swap.c (modified) (2 diffs)
-
src/examples/tests/vector_test.out.txt (modified) (1 diff)
-
src/examples/twice.c (modified) (2 diffs)
-
src/libcfa/Makefile.am (modified) (2 diffs)
-
src/libcfa/Makefile.in (modified) (4 diffs)
-
src/libcfa/bfd.h (added)
-
src/libcfa/bfdlink.h (added)
-
src/libcfa/builtins.cf (modified) (4 diffs)
-
src/libcfa/demangle.h (added)
-
src/libcfa/dialog.h (added)
-
src/libcfa/evdns.h (added)
-
src/libcfa/evhttp.h (added)
-
src/libcfa/evrpc.h (added)
-
src/libcfa/fcntl.h (added)
-
src/libcfa/form.h (added)
-
src/libcfa/fstream (modified) (3 diffs)
-
src/libcfa/fstream.c (modified) (8 diffs)
-
src/libcfa/gcrypt.h (added)
-
src/libcfa/iostream (modified) (3 diffs)
-
src/libcfa/iostream.c (modified) (3 diffs)
-
src/libcfa/iterator (modified) (4 diffs)
-
src/libcfa/iterator.c (modified) (2 diffs)
-
src/libcfa/limits (modified) (1 diff)
-
src/libcfa/limits.c (deleted)
-
src/libcfa/math.h (added)
-
src/libcfa/prelude.cf (modified) (6 diffs)
-
src/libcfa/rational (deleted)
-
src/libcfa/rational.c (deleted)
-
src/libcfa/stdlib (modified) (5 diffs)
-
src/libcfa/stdlib.c (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
.gitignore
r0f9e4403 rc5833e8 33 33 34 34 # generated by latex 35 *.aux36 *.bbl37 *.blg38 *.brf39 *.dvi40 *.idx41 *.ilg42 *.ind43 *.log44 *.out45 *.pdf46 *.ps47 *.toc35 doc/refrat/refrat.aux 36 doc/refrat/refrat.bbl 37 doc/refrat/refrat.blg 38 doc/refrat/refrat.brf 39 doc/refrat/refrat.dvi 40 doc/refrat/refrat.idx 41 doc/refrat/refrat.ilg 42 doc/refrat/refrat.ind 43 doc/refrat/refrat.log 44 doc/refrat/refrat.out 45 doc/refrat/refrat.pdf 46 doc/refrat/refrat.ps 47 doc/refrat/refrat.toc -
configure
r0f9e4403 rc5833e8 2409 2409 2410 2410 2411 if test "x${CXXFLAGS}" = "x"; then2412 export CXXFLAGS="-std=c++11 -g -O2 ${CXXFLAGS}"2413 else2414 export CXXFLAGS="-std=c++11 ${CXXFLAGS}"2415 fi2416 2417 2411 am__api_version='1.11' 2418 2412 -
configure.ac
r0f9e4403 rc5833e8 7 7 #AC_CONFIG_SRCDIR([src/main.cc]) 8 8 AC_CONFIG_HEADERS([config.h]) 9 10 if test "x${CXXFLAGS}" = "x"; then11 export CXXFLAGS="-std=c++11 -g -O2 ${CXXFLAGS}"12 else13 export CXXFLAGS="-std=c++11 ${CXXFLAGS}"14 fi15 9 16 10 AM_INIT_AUTOMAKE -
doc/refrat/Makefile
r0f9e4403 rc5833e8 1 1 ## Define the appropriate configuration variables. 2 2 3 TeXLIB = .: ../bibliography/:../LaTeXmacros/:3 TeXLIB = .:: 4 4 LaTeX = TEXINPUTS=${TeXLIB} && export TEXINPUTS && latex 5 BibTeX = B IBINPUTS=${TeXLIB} && export BIBINPUTS && bibtex5 BibTeX = BSTINPUTS=${TeXLIB} && export BSTINPUTS && bibtex 6 6 7 7 ## Define the text source files. … … 43 43 dvips $< -o $@ 44 44 45 ${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex \ 46 ../LaTeXmacros/common.tex ../LaTeXmacros/indexstyle ../bibliography/cfa.bib 45 ${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex ${basename ${DOCUMENT}}.bib 47 46 # Conditionally create an empty *.ind (index) file for inclusion until makeindex is run. 48 47 if [ ! -r ${basename $@}.ind ] ; then touch ${basename $@}.ind ; fi … … 54 53 -${BibTeX} ${basename $@} 55 54 # Make index from *.aux entries and input index at end of document 56 makeindex -s ../LaTeXmacros/indexstyle ${basename $@}.idx55 makeindex -s indexstyle ${basename $@}.idx 57 56 ${LaTeX} ${basename $@}.tex 58 57 # Run again to get index title into table of contents -
doc/refrat/refrat.tex
r0f9e4403 rc5833e8 1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -*- Mode: Latex -*- %%%%%%%%%%%%%%%%%%%%%%%%%%%%2 %%3 %% Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo4 %%5 %% The contents of this file are covered under the licence agreement in the6 %% file "LICENCE" distributed with Cforall.7 %%8 %% refrat.tex --9 %%10 %% Author : Peter A. Buhr11 %% Created On : Wed Apr 6 14:52:25 201612 %% Last Modified By : Peter A. Buhr13 %% Last Modified On : Sat Apr 9 10:19:12 201614 %% Update Count : 815 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%16 17 1 % requires tex packages: texlive-base texlive-latex-base tex-common texlive-humanities texlive-latex-extra texlive-fonts-recommended 18 2 … … 21 5 22 6 % Latex packages used in the document. 7 23 8 \usepackage{fullpage,times} 24 9 \usepackage{xspace} … … 26 11 \usepackage{listings} 27 12 \usepackage{comment} 28 \usepackage{latexsym} % \Box29 \usepackage{mathptmx} % better math font with "times"13 \usepackage{latexsym} % \Box 14 \usepackage{mathptmx} % better math font with "times" 30 15 \usepackage[pagewise]{lineno} 31 16 \renewcommand{\linenumberfont}{\scriptsize\sffamily} 32 17 \usepackage[dvips,plainpages=false,pdfpagelabels,pdfpagemode=UseNone,colorlinks=true,pagebackref=true,linkcolor=blue,citecolor=blue,urlcolor=blue,pagebackref=true,breaklinks=true]{hyperref} 33 18 \usepackage{breakurl} 34 \ renewcommand{\UrlFont}{\small\sf}19 \urlstyle{sf} 35 20 36 21 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 37 22 23 % Names used in the document. 24 25 \newcommand{\CFA}{Cforall\xspace} % set language text name 26 \newcommand{\CFAA}{C$\forall$\xspace} % set language symbolic name 27 \newcommand{\CC}{C\kern-.1em\hbox{+\kern-.25em+}\xspace} % CC symbolic name 28 \def\c11{ISO/IEC C} % C11 name (cannot have numbers in latex command name) 29 30 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 31 38 32 % Bespoke macros used in the document. 39 \input{common} 40 41 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 42 43 \setcounter{secnumdepth}{3} % number subsubsections 44 \setcounter{tocdepth}{3} % subsubsections in table of contents 33 34 \makeatletter 35 % index macros 36 \newcommand{\italic}[1]{\emph{\hyperpage{#1}}} 37 \newcommand{\definition}[1]{\textbf{\hyperpage{#1}}} 38 \newcommand{\see}[1]{\emph{see} #1} 39 40 % Define some commands that produce formatted index entries suitable for cross-references. 41 % ``\spec'' produces entries for specifications of entities. ``\impl'' produces entries for their 42 % implementations, and ``\use'' for their uses. 43 44 % \newcommand{\bold}[1]{{\bf #1}} 45 % \def\spec{\@bsphack\begingroup 46 % \def\protect##1{\string##1\space}\@sanitize 47 % \@wrxref{|bold}} 48 \def\impl{\@bsphack\begingroup 49 \def\protect##1{\string##1\space}\@sanitize 50 \@wrxref{|definition}} 51 \newcommand{\indexcode}[1]{{\lstinline$#1$}} 52 \def\use{\@bsphack\begingroup 53 \def\protect##1{\string##1\space}\@sanitize 54 \@wrxref{|hyperpage}} 55 \def\@wrxref#1#2{\let\thepage\relax 56 \xdef\@gtempa{\write\@indexfile{\string 57 \indexentry{#2@{\lstinline$#2$}#1}{\thepage}}}\endgroup\@gtempa 58 \if@nobreak \ifvmode\nobreak\fi\fi\@esphack} 59 %\newcommand{\use}[1]{\index{#1@{\lstinline$#1$}}} 60 %\newcommand{\impl}[1]{\index{\protect#1@{\lstinline$\protect#1$}|definition}} 61 62 % text inline and lowercase index: \Index{Inline and index text} 63 % text inline and as-in index: \Index{Inline and Index text} 64 % text inline but index with different as-is text: \Index[index text]{inline text} 65 \newcommand{\Index}{\@ifstar\@sIndex\@Index} 66 \newcommand{\@Index}[2][\@empty]{\lowercase{\def\temp{#2}}#2\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi} 67 \newcommand{\@sIndex}[2][\@empty]{#2\ifx#1\@empty\index{#2}\else\index{#1@{\protect#2}}\fi} 68 \makeatother 69 70 % blocks and titles 71 \newcommand{\define}[1]{\emph{#1\/}\index{#1}} 72 \newenvironment{rationale}{% 73 \begin{quotation}\noindent$\Box$\enspace 74 }{% 75 \hfill\enspace$\Box$\end{quotation} 76 }% 77 \newcommand{\rewrite}{\(\Rightarrow\)} 78 \newcommand{\rewriterules}{\paragraph{Rewrite Rules}~\par\noindent} 79 \newcommand{\examples}{\paragraph{Examples}~\par\noindent} 80 \newcommand{\semantics}{\paragraph{Semantics}~\par\noindent} 81 \newcommand{\constraints}{\paragraph{Constraints}~\par\noindent} 82 \newcommand{\predefined}{\paragraph{Predefined Identifiers}~\par\noindent} 83 84 % BNF macros 85 \def\syntax{\paragraph{Syntax}\trivlist\parindent=.5in\item[\hskip.5in]} 86 \let\endsyntax=\endtrivlist 87 \newcommand{\lhs}[1]{\par{\emph{#1:}}\index{#1@{\emph{#1}}|italic}} 88 \newcommand{\rhs}{\hfil\break\hbox{\hskip1in}} 89 \newcommand{\oldlhs}[1]{\emph{#1: \ldots}\index{#1@{\emph{#1}}|italic}} 90 \newcommand{\nonterm}[1]{\emph{#1\/}\index{#1@{\emph{#1}}|italic}} 91 \newcommand{\opt}{$_{opt}$\ } 92 93 % adjust varioref package with default "section" and "page" titles, and optional title with faraway page numbers 94 % \VRef{label} => Section 2.7, \VPageref{label} => page 17 95 % \VRef[Figure]{label} => Figure 3.4, \VPageref{label} => page 17 96 \renewcommand{\reftextfaceafter}{\unskip} 97 \renewcommand{\reftextfacebefore}{\unskip} 98 \renewcommand{\reftextafter}{\unskip} 99 \renewcommand{\reftextbefore}{\unskip} 100 \renewcommand{\reftextfaraway}[1]{\unskip, p.~\pageref{#1}} 101 \renewcommand{\reftextpagerange}[2]{\unskip, pp.~\pageref{#1}--\pageref{#2}} 102 \newcommand{\VRef}[2][Section]{\ifx#1\@empty\else{#1}\nobreakspace\fi\vref{#2}} 103 \newcommand{\VPageref}[2][page]{\ifx#1\@empty\else{#1}\nobreakspace\fi\pageref{#2}} 104 105 % adjust listings macros 106 \lstdefinelanguage{CFA}[ANSI]{C}% 107 {morekeywords={asm,_Alignas,_Alignof,_At,_Atomic,_Bool,catch,catchResume,choose,_Complex,context,disable,dtype,enable, 108 fallthru,finally,forall,ftype,_Generic,_Imaginary,inline,lvalue,_Noreturn,restrict,_Static_assert, 109 _Thread_local,throw,throwResume,try,type,}, 110 }% 111 112 \lstset{ 113 language=CFA, 114 columns=flexible, 115 basicstyle=\sf\small, 116 tabsize=4, 117 xleftmargin=\parindent, 118 escapechar=@, 119 keepspaces=true, 120 %showtabs=true, 121 %tab=\rightarrowfill, 122 }% 123 124 \makeatletter 125 % replace/adjust listings characters that look bad in sanserif 126 \lst@CCPutMacro 127 \lst@ProcessOther{"2D}{\lst@ttfamily{-{}}{{\ttfamily\upshape -}}} % replace minus 128 \lst@ProcessOther{"3C}{\lst@ttfamily{<}{\texttt{<}}} % replace less than 129 \lst@ProcessOther{"3E}{\lst@ttfamily{<}{\texttt{>}}} % replace greater than 130 \lst@ProcessOther{"5E}{\raisebox{0.4ex}{$\scriptstyle\land\,$}} % replace circumflex 131 \lst@ProcessLetter{"5F}{\lst@ttfamily{\char95}{{\makebox[1.2ex][c]{\rule{1ex}{0.1ex}}}}} % replace underscore 132 \lst@ProcessOther{"7E}{\raisebox{0.3ex}{$\scriptstyle\sim\,$}} % replace tilde 133 %\lst@ProcessOther{"7E}{\raisebox{-.4ex}[1ex][0pt]{\textasciitilde}} % lower tilde 134 \@empty\z@\@empty 135 \makeatother 136 137 \setcounter{secnumdepth}{3} % number subsubsections 138 \setcounter{tocdepth}{3} % subsubsections in table of contents 45 139 \makeindex 46 140 … … 49 143 \begin{document} 50 144 \pagestyle{headings} 51 \linenumbers % comment out to turn off line numbering 52 53 \title{\Huge 54 \vspace*{1in} 55 \CFA (\CFL) Reference Manual and Rationale 56 }% title 57 \author{\huge 58 Glen Ditchfield and Peter A. Buhr 59 }% author 60 \date{ 61 DRAFT\\\today 62 }% date 145 \linenumbers % comment out to turn off line numbering 146 147 \title{\CFA (\CFAA) Reference Manual and Rationale} 148 \author{Glen Ditchfield \and Peter A. Buhr} 149 \date{DRAFT\\\today} 63 150 64 151 \pagenumbering{roman} … … 72 159 \copyright\,2015 Glen Ditchfield \\ \\ 73 160 \noindent 74 This work is licensed under the Creative Commons Attribution 4.0 International License. 75 To view acopy of this license, visit {\small\url{http://creativecommons.org/licenses/by/4.0}}.161 This work is licensed under the Creative Commons Attribution 4.0 International License. To view a 162 copy of this license, visit {\small\url{http://creativecommons.org/licenses/by/4.0}}. 76 163 \vspace*{1in} 77 164 … … 86 173 \chapter*{Introduction}\addcontentsline{toc}{chapter}{Introduction} 87 174 88 This document is a reference manual and rationale for \CFA, a polymorphic extension of the C programming language. 89 It makes frequent reference to the {\c11} standard \cite{C11}, and occasionally compares \CFA to {\CC} \cite{C++}. 90 91 The manual deliberately imitates the ordering of the {\c11} standard (although the section numbering differs). 92 Unfortunately, this means the manual contains more ``forward references'' than usual, making it harder to follow if the reader does not have a copy of the {\c11} standard. 93 For a simple introduction to \CFA, see the companion document ``An Overview of \CFA'' 175 This document is a reference manual and rationale for \CFA, a polymorphic extension of the C 176 programming language. It makes frequent reference to the {\c11} standard \cite{ANS:C11}, and 177 occasionally compares \CFA to {\CC} \cite{c++}. 178 179 The manual deliberately imitates the ordering of the {\c11} standard (although the section numbering 180 differs). Unfortunately, this means the manual contains more ``forward references'' than usual, 181 making it harder to follow if the reader does not have a copy of the {\c11} standard. For a simple 182 introduction to \CFA, see the companion document ``An Overview of \CFA'' 94 183 \cite{Ditchfield96:Overview}. 95 184 96 185 \begin{rationale} 97 Commentary (like this) is quoted with quads. 98 Commentary usually deals with subtle points, therationale behind a rule, and design decisions.186 Commentary (like this) is quoted with quads. Commentary usually deals with subtle points, the 187 rationale behind a rule, and design decisions. 99 188 \end{rationale} 100 189 … … 105 194 \chapter{Terms, definitions, and symbols} 106 195 107 Terms from the {\c11} standard used in this document have the same meaning as in the {\c11} standard. 196 Terms from the {\c11} standard used in this document have the same meaning as in the {\c11} 197 standard. 108 198 109 199 % No ``Conformance'' or ``Environment'' chapters yet. … … 115 205 116 206 \section{Notation} 117 The syntax notation used in this document is the same as in the {\c11} standard, with one exception: ellipsis in the definition of a nonterminal, as in ``\emph{declaration:} \ldots'', indicates that these rules extend a previous definition, which occurs in this document or in the {\c11} standard. 207 The syntax notation used in this document is the same as in the {\c11} standard, with one exception: 208 ellipsis in the definition of a nonterminal, as in ``\emph{declaration:} \ldots'', indicates that 209 these rules extend a previous definition, which occurs in this document or in the {\c11} standard. 118 210 119 211 … … 123 215 \subsection{Scopes of identifiers}\index{scopes} 124 216 125 \CFA's scope rules differ from C's in one major respect: a declaration of an identifier may overload\index{overloading} outer declarations of lexically identical identifiers in the same 126 \Index{name space}, instead of hiding them. 127 The outer declaration is hidden if the two declarations have \Index{compatible type}, or if one declares an array type and the other declares a pointer type and the element type and pointed-at type are compatible, or if one has function type and the other is a pointer to a compatible function type, or if one declaration is a \lstinline$type$\use{type} or 217 \CFA's scope rules differ from C's in one major respect: a declaration of an identifier may 218 overload\index{overloading} outer declarations of lexically identical identifiers in the same 219 \Index{name space}, instead of hiding them. The outer declaration is hidden if the two declarations 220 have \Index{compatible type}, or if one declares an array type and the other declares a pointer type 221 and the element type and pointed-at type are compatible, or if one has function type and the other 222 is a pointer to a compatible function type, or if one declaration is a \lstinline$type$\use{type} or 128 223 \lstinline$typedef$\use{typedef} declaration and the other is not. The outer declaration becomes 129 224 \Index{visible} when the scope of the inner declaration terminates. 130 225 \begin{rationale} 131 Hence, a \CFA program can declare an \lstinline$int v$ and a \lstinline$float v$ in the same scope;132 a {\CC} program can not.226 Hence, a \CFA program can declare an \lstinline$int v$ and a \lstinline$float v$ in the same 227 scope; a {\CC} program can not. 133 228 \end{rationale} 134 229 … … 137 232 \index{linkage} 138 233 139 \CFA's linkage rules differ from C's in only one respect: instances of a particular identifier with external or internal linkage do not necessarily denote the same object or function. 140 Instead, in the set of translation units and libraries that constitutes an entire program, any two instances of a particular identifier with \Index{external linkage} denote the same object or function if they have 141 \Index{compatible type}s, or if one declares an array type and the other declares a pointer type and the element type and pointed-at type are compatible, or if one has function type and the other is a pointer to a compatible function type. 142 Within one translation unit, each instance of an identifier with \Index{internal linkage} denotes the same object or function in the same circumstances. 234 \CFA's linkage rules differ from C's in only one respect: instances of a particular identifier with 235 external or internal linkage do not necessarily denote the same object or function. Instead, in the 236 set of translation units and libraries that constitutes an entire program, any two instances of a 237 particular identifier with \Index{external linkage} denote the same object or function if they have 238 \Index{compatible type}s, or if one declares an array type and the other declares a pointer type and 239 the element type and pointed-at type are compatible, or if one has function type and the other is a 240 pointer to a compatible function type. Within one translation unit, each instance of an identifier 241 with \Index{internal linkage} denotes the same object or function in the same circumstances. 143 242 Identifiers with \Index{no linkage} always denote unique entities. 144 243 \begin{rationale} 145 A \CFA program can declare an \lstinline$extern int v$ and an \lstinline$extern float v$; 146 a Cprogram cannot.244 A \CFA program can declare an \lstinline$extern int v$ and an \lstinline$extern float v$; a C 245 program cannot. 147 246 \end{rationale} 148 247 … … 154 253 \subsubsection{Semantics} 155 254 156 \CFA provides a capability for generic types; 157 using this capability a single "generic type generator" can be written that can represent multiple concrete type instantiations by substitution of the "type parameters" of the generic type for concrete types. 158 Syntactically a generic type generator is represented by putting a forall specifier on a struct or union declaration, as defined in \VRef{forall}. 159 An instantiation of the generic type is written by specifying the type parameters in parentheses after the name of the generic type generator: 160 \begin{lstlisting} 161 forall( otype T | sumable( T ) ) struct pair { 255 \CFA provides a capability for generic types; using this capability a single "generic type 256 generator" can be written that can represent multiple concrete type instantiations by substitution 257 of the "type parameters" of the generic type for concrete types. Syntactically a generic type 258 generator is represented by putting a forall specifier on a struct or union declaration, as defined 259 in \VRef{forall}. An instantiation of the generic type is written by specifying the type parameters 260 in parentheses after the name of the generic type generator: 261 \begin{lstlisting} 262 forall( type T | sumable( T ) ) struct pair { 162 263 T x; 163 264 T y; … … 166 267 \end{lstlisting} 167 268 168 The type parameters in an instantiation of a generic type must satisfy any constraints in the forall specifier on the type generator declaration, e.g., \lstinline$sumable$. 169 The instantiation then has the semantics that would result if the type parameters were substituted into the type generator declaration by macro substitution. 170 171 Polymorphic functions may have generic types as parameters, and those generic types may use type parameters of the polymorphic function as type parameters of the generic type: 172 \begin{lstlisting} 173 forall( otype T ) void swap( pair(T) *p ) { 269 The type parameters in an instantiation of a generic type must satisfy any constraints in the forall 270 specifier on the type generator declaration, e.g., \lstinline$sumable$. The instantiation then has 271 the semantics that would result if the type parameters were substituted into the type generator 272 declaration by macro substitution. 273 274 Polymorphic functions may have generic types as parameters, and those generic types may use type 275 parameters of the polymorphic function as type parameters of the generic type: 276 \begin{lstlisting} 277 forall( type T ) void swap( pair(T) *p ) { 174 278 T z = p->x; 175 279 p->x = p->y; … … 181 285 \subsubsection{Constraints} 182 286 183 To avoid unduly constraining implementors, the generic type generator definition must be visible at any point where it is instantiated. 184 Forward declarations of generic type generators are not forbidden, but the definition must be visible to instantiate the generic type. Equivalently, instantiations of generic types are not allowed to be incomplete types. 287 To avoid unduly constraining implementors, the generic type generator definition must be visible at 288 any point where it is instantiated. Forward declarations of generic type generators are not 289 forbidden, but the definition must be visible to instantiate the generic type. Equivalently, 290 instantiations of generic types are not allowed to be incomplete types. 185 291 186 292 \examples 187 293 \begin{lstlisting} 188 forall( otype T ) struct A;189 190 forall( otype T ) struct B {191 A(T) *a; // legal, but cannot instantiate B(T)294 forall( type T ) struct A; 295 296 forall( type T ) struct B { 297 A(T) *a; // legal, but cannot instantiate B(T) 192 298 }; 193 299 194 B(T) x; // illegal, *x.a is of an incomplete generic type195 196 forall( otype T ) struct A {300 B(T) x; // illegal, *x.a is of an incomplete generic type 301 302 forall( type T ) struct A { 197 303 B( T ) *b; 198 304 }; 199 305 200 B( T ) y; // legal, *x.a is now of a complete generic type 306 B( T ) y; // legal, *x.a is now of a complete generic type 307 201 308 202 309 // box.h: 203 forall( otype T ) struct box;204 forall( otype T ) box( T ) *make_box( T );205 forall( otype T ) void use_box( box( T ) *b );310 forall( type T ) struct box; 311 forall( type T ) box( T ) *make_box( T ); 312 forall( type T ) void use_box( box( T ) *b ); 206 313 207 314 // main.c: 208 box( int ) *b = make_box( 42 ); // illegal, def inition of box not visible209 use_box( b ); // illegal315 box( int ) *b = make_box( 42 ); // illegal, def'n of box not visible 316 use_box( b ); // illegal 210 317 \end{lstlisting} 211 318 … … 213 320 \section{Conversions} 214 321 \CFA defines situations where values of one type are automatically converted to another type. 215 These conversions are called \define{implicit conversion}s. 216 The programmer can request 322 These conversions are called \define{implicit conversion}s. The programmer can request 217 323 \define{explicit conversion}s using cast expressions. 218 324 … … 224 330 \subsubsection{Safe arithmetic conversions} 225 331 226 In C, a pattern of conversions known as the \define{usual arithmetic conversion}s is used with most binary arithmetic operators to convert the operands to a common type and determine the type of the operator's result. 227 In \CFA, these conversions play a role in overload resolution, and collectively are called the \define{safe arithmetic conversion}s. 228 229 Let \(int_r\) and \(unsigned_r\) be the signed and unsigned integer types with integer conversion rank\index{integer conversion rank}\index{rank|see{integer conversion rank}} $r$. 230 Let \(unsigned_{mr}\) be the unsigned integer type with maximal rank. 332 In C, a pattern of conversions known as the \define{usual arithmetic conversion}s is used with most 333 binary arithmetic operators to convert the operands to a common type and determine the type of the 334 operator's result. In \CFA, these conversions play a role in overload resolution, and 335 collectively are called the \define{safe arithmetic conversion}s. 336 337 Let \(int_r\) and \(unsigned_r\) be the signed and unsigned integer types with integer conversion 338 rank\index{integer conversion rank}\index{rank|see{integer conversion rank}} $r$. Let 339 \(unsigned_{mr}\) be the unsigned integer type with maximal rank. 231 340 232 341 The following conversions are \emph{direct} safe arithmetic conversions. … … 234 343 \item 235 344 The \Index{integer promotion}s. 236 \item 237 For every rank $r$ greater than or equal to the rank of \lstinline$int$, conversion from \(int_r\) to \(unsigned_r\). 238 \item 239 For every rank $r$ greater than or equal to the rank of \lstinline$int$, where \(int_{r+1}\) exists and can represent all values of \(unsigned_r\), conversion from \(unsigned_r\) to \(int_{r+1}\). 345 346 \item 347 For every rank $r$ greater than or equal to the rank of \lstinline$int$, conversion from \(int_r\) 348 to \(unsigned_r\). 349 350 \item 351 For every rank $r$ greater than or equal to the rank of \lstinline$int$, where \(int_{r+1}\) exists 352 and can represent all values of \(unsigned_r\), conversion from \(unsigned_r\) to \(int_{r+1}\). 353 240 354 \item 241 355 Conversion from \(unsigned_{mr}\) to \lstinline$float$. 356 242 357 \item 243 358 Conversion from an enumerated type to its compatible integer type. 244 \item 245 Conversion from \lstinline$float$ to \lstinline$double$, and from \lstinline$double$ to \lstinline$long double$. 246 \item 247 Conversion from \lstinline$float _Complex$ to \lstinline$double _Complex$, and from \lstinline$double _Complex$ to \lstinline$long double _Complex$. 359 360 \item 361 Conversion from \lstinline$float$ to \lstinline$double$, and from \lstinline$double$ to 362 \lstinline$long double$. 363 364 \item 365 Conversion from \lstinline$float _Complex$ to \lstinline$double _Complex$, 366 and from \lstinline$double _Complex$ to \lstinline$long double _Complex$. 367 248 368 \begin{sloppypar} 249 369 \item 250 Conversion from \lstinline$float _Imaginary$ to \lstinline$double _Imaginary$, and from \lstinline$double _Imaginary$ to \lstinline$long double$ \lstinline$_Imaginary$, if the implementation supports imaginary types. 370 Conversion from \lstinline$float _Imaginary$ to \lstinline$double _Imaginary$, and from 371 \lstinline$double _Imaginary$ to \lstinline$long double$ \lstinline$_Imaginary$, if the 372 implementation supports imaginary types. 251 373 \end{sloppypar} 252 374 \end{itemize} 253 375 254 If type \lstinline$T$ can be converted to type \lstinline$U$ by a safe direct arithmetic conversion and type \lstinline$U$ can be converted to type \lstinline$V$ by a safe arithmetic conversion, then the conversion from \lstinline$T$ to type \lstinline$V$ is an \emph{indirect} safe arithmetic conversion. 255 256 \begin{rationale} 257 Note that {\c11} does not include conversion from \Index{real type}s to \Index{complex type}s in the usual arithmetic conversions, and \CFA does not include them as safe conversions. 376 If type \lstinline$T$ can be converted to type \lstinline$U$ by a safe direct arithmetic conversion 377 and type \lstinline$U$ can be converted to type \lstinline$V$ by a safe arithmetic conversion, then 378 the conversion from \lstinline$T$ to type \lstinline$V$ is an \emph{indirect} safe arithmetic 379 conversion. 380 381 \begin{rationale} 382 Note that {\c11} does not include conversion from \Index{real type}s to \Index{complex type}s in the 383 usual arithmetic conversions, and \CFA does not include them as safe conversions. 258 384 \end{rationale} 259 385 … … 267 393 268 394 If an expression's type is a pointer to a structure or union type that has a member that is an 269 \Index{anonymous structure} or an \Index{anonymous union}, it can be implicitly converted\index{implicit conversion} to a pointer to the anonymous structure's or anonymous union's type. 270 The result of the conversion is a pointer to the member. 395 \Index{anonymous structure} or an \Index{anonymous union}, it can be implicitly 396 converted\index{implicit conversion} to a pointer to the anonymous structure's or anonymous union's 397 type. The result of the conversion is a pointer to the member. 271 398 272 399 \examples … … 275 402 int x, y; 276 403 }; 277 void move_by( struct point * p1, struct point * p2) {@\impl{move_by}@404 void move_by(struct point * p1, struct point * p2) {@\impl{move_by}@ 278 405 p1->x += p2.x; 279 406 p1->y += p2.y; 280 407 } 408 281 409 struct color_point { 282 410 enum { RED, BLUE, GREEN } color; 283 411 struct point; 284 412 } cp1, cp2; 285 move_to( &cp1, &cp2);413 move_to(&cp1, &cp2); 286 414 \end{lstlisting} 287 415 Thanks to implicit conversion, the two arguments that \lstinline$move_by()$ receives are pointers to … … 290 418 291 419 \subsubsection{Specialization} 292 A function or value whose type is polymorphic may be implicitly converted to one whose type is \Index{less polymorphic} by binding values to one or more of its \Index{inferred parameter}. 293 Any value that is legal for the inferred parameter may be used, including other inferred parameters. 294 295 If, after the inferred parameter binding, an \Index{assertion parameter} has no inferred parameters in its type, then an object or function must be visible at the point of the specialization that has the same identifier as the assertion parameter and has a type that is compatible\index{compatible type} with or can be specialized to the type of the assertion parameter. 296 The assertion parameter is bound to that object or function. 297 298 The type of the specialization is the type of the original with the bound inferred parameters and the bound assertion parameters replaced by their bound values. 420 A function or value whose type is polymorphic may be implicitly converted to one whose type is 421 \Index{less polymorphic} by binding values to one or more of its \Index{inferred parameter}. Any 422 value that is legal for the inferred parameter may be used, including other inferred parameters. 423 424 If, after the inferred parameter binding, an \Index{assertion parameter} has no inferred parameters 425 in its type, then an object or function must be visible at the point of the specialization that has 426 the same identifier as the assertion parameter and has a type that is compatible\index{compatible 427 type} with or can be specialized to the type of the assertion parameter. The assertion parameter 428 is bound to that object or function. 429 430 The type of the specialization is the type of the original with the bound inferred parameters and 431 the bound assertion parameters replaced by their bound values. 299 432 300 433 \examples 301 434 The type 302 435 \begin{lstlisting} 303 forall( otype T, otype U ) void (*)( T, U );436 forall( type T, type U ) void (*)( T, U ); 304 437 \end{lstlisting} 305 438 can be specialized to (among other things) 306 439 \begin{lstlisting} 307 forall( otype T ) void (*)( T, T ); // U bound to T308 forall( otype T ) void (*)( T, real ); // U bound to real309 forall( otype U ) void (*)( real, U ); // T bound to real440 forall( type T ) void (*)( T, T ); // U bound to T 441 forall( type T ) void (*)( T, real ); // U bound to real 442 forall( type U ) void (*)( real, U ); // T bound to real 310 443 void f( real, real ); // both bound to real 311 444 \end{lstlisting} … … 313 446 The type 314 447 \begin{lstlisting} 315 forall( otype T | T ?+?( T, T )) T (*)( T );448 forall( type T | T ?+?( T, T )) T (*)( T ); 316 449 \end{lstlisting} 317 450 can be specialized to (among other things) 318 451 \begin{lstlisting} 319 int (*)( int ); // T bound to int, and T ?+?(T, T ) bound to int ?+?( int, int )452 int (*)( int ); // T bound to int, and T ?+?(T, T ) bound to int ?+?( int, int ) 320 453 \end{lstlisting} 321 454 … … 332 465 from a pointer to any non-\lstinline$void$ type to a pointer to \lstinline$void$; 333 466 \item 334 from a pointer to any type to a pointer to a more qualified version of the type\index{qualified type}; 335 \item 336 from a pointer to a structure or union type to a pointer to the type of a member of the structure or union that is an \Index{anonymous structure} or an \Index{anonymous union}; 337 \item 338 within the scope of an initialized \Index{type declaration}, conversions between a type and its implementation or between a pointer to a type and a pointer to its implementation. 467 from a pointer to any type to a pointer to a more qualified version of the type\index{qualified 468 type}; 469 \item 470 from a pointer to a structure or union type to a pointer to the type of a member of the structure or 471 union that is an \Index{anonymous structure} or an \Index{anonymous union}; 472 \item 473 within the scope of an initialized \Index{type declaration}, conversions between a type and its 474 implementation or between a pointer to a type and a pointer to its implementation. 339 475 \end{itemize} 340 476 341 477 Conversions that are not safe conversions are \define{unsafe conversion}s. 342 478 \begin{rationale} 343 As in C, there is an implicit conversion from \lstinline$void *$ to any pointer type. 344 This is clearly dangerous, and {\CC} does not have this implicit conversion. 345 \CFA\index{deficiencies!void * conversion} keeps it, in the interest of remaining as pure a superset of C as possible, but discourages it by making it unsafe. 479 As in C, there is an implicit conversion from \lstinline$void *$ to any pointer type. This is 480 clearly dangerous, and {\CC} does not have this implicit conversion. 481 \CFA\index{deficiencies!void * conversion} keeps it, in the interest of remaining as pure a 482 superset of C as possible, but discourages it by making it unsafe. 346 483 \end{rationale} 347 484 … … 349 486 \subsection{Conversion cost} 350 487 351 The \define{conversion cost} of a safe\index{safe conversion} conversion\footnote{Unsafe\index{unsafe conversion} conversions do not have defined conversion costs.} is a measure of how desirable or undesirable it is. 352 It is defined as follows. 488 The \define{conversion cost} of a safe\index{safe conversion} 489 conversion\footnote{Unsafe\index{unsafe conversion} conversions do not have defined conversion 490 costs.} is a measure of how desirable or undesirable it is. It is defined as follows. 353 491 \begin{itemize} 354 492 \item … … 359 497 360 498 \item 361 The cost of an indirect safe arithmetic conversion is the smallest number of direct conversions needed to make up the conversion. 499 The cost of an indirect safe arithmetic conversion is the smallest number of direct conversions 500 needed to make up the conversion. 362 501 \end{itemize} 363 502 … … 367 506 \begin{itemize} 368 507 \item 369 The cost of an implicit conversion from \lstinline$int$ to \lstinline$long$ is 1. 370 The cost of an implicit conversion from \lstinline$long$ to \lstinline$double$ is 3, because it is defined in terms of conversions from \lstinline$long$ to \lstinline$unsigned long$, then to \lstinline$float$, and then to \lstinline$double$. 371 372 \item 373 If \lstinline$int$ can represent all the values of \lstinline$unsigned short$, then the cost of an implicit conversion from \lstinline$unsigned short$ to \lstinline$unsigned$ is 2: 374 \lstinline$unsigned short$ to \lstinline$int$ to \lstinline$unsigned$. 375 Otherwise, \lstinline$unsigned short$ is converted directly to \lstinline$unsigned$, and the cost is 1. 376 377 \item 378 If \lstinline$long$ can represent all the values of \lstinline$unsigned$, then the conversion cost of \lstinline$unsigned$ to \lstinline$long$ is 1. 379 Otherwise, the conversion is an unsafe conversion, and its conversion cost is undefined. 508 The cost of an implicit conversion from \lstinline$int$ to \lstinline$long$ is 1. The cost of an 509 implicit conversion from \lstinline$long$ to \lstinline$double$ is 3, because it is defined in terms 510 of conversions from \lstinline$long$ to \lstinline$unsigned long$, then to \lstinline$float$, and 511 then to \lstinline$double$. 512 513 \item 514 If \lstinline$int$ can represent all the values of \lstinline$unsigned short$, then the cost of an 515 implicit conversion from \lstinline$unsigned short$ to \lstinline$unsigned$ is 2: 516 \lstinline$unsigned short$ to \lstinline$int$ to \lstinline$unsigned$. Otherwise, 517 \lstinline$unsigned short$ is converted directly to \lstinline$unsigned$, and the cost is 1. 518 519 \item 520 If \lstinline$long$ can represent all the values of \lstinline$unsigned$, then the conversion cost 521 of \lstinline$unsigned$ to \lstinline$long$ is 1. Otherwise, the conversion is an unsafe 522 conversion, and its conversion cost is undefined. 380 523 \end{itemize} 381 524 … … 386 529 \rhs \lstinline$forall$ 387 530 \rhs \lstinline$lvalue$ 388 \rhs \lstinline$ trait$531 \rhs \lstinline$context$ 389 532 \rhs \lstinline$dtype$ 390 533 \rhs \lstinline$ftype$ … … 395 538 \subsection{Identifiers} 396 539 397 \CFA allows operator \Index{overloading} by associating operators with special function identifiers. 398 Furthermore, the constants ``\lstinline$0$'' and ``\lstinline$1$'' have special status for many of C's data types (and for many programmer-defined data types as well), so \CFA treats them as overloadable identifiers. 399 Programmers can use these identifiers to declare functions and objects that implement operators and constants for their own types. 540 \CFA allows operator \Index{overloading} by associating operators with special function 541 identifiers. Furthermore, the constants ``\lstinline$0$'' and ``\lstinline$1$'' have special status 542 for many of C's data types (and for many programmer-defined data types as well), so \CFA treats them 543 as overloadable identifiers. Programmers can use these identifiers to declare functions and objects 544 that implement operators and constants for their own types. 400 545 401 546 … … 409 554 \end{syntax} 410 555 411 \index{constant identifiers}\index{identifiers!for constants} The tokens ``\lstinline$0$''\impl{0} and ``\lstinline$1$''\impl{1} are identifiers. 412 No other tokens defined by the rules for integer constants are considered to be identifiers. 413 \begin{rationale} 414 Why ``\lstinline$0$'' and ``\lstinline$1$''? Those integers have special status in C. 415 All scalar types can be incremented and decremented, which is defined in terms of adding or subtracting 1. 416 The operations ``\lstinline$&&$'', ``\lstinline$||$'', and ``\lstinline$!$'' can be applied to any scalar arguments, and are defined in terms of comparison against 0. 417 A \nonterm{constant-expression} that evaluates to 0 is effectively compatible with every pointer type. 418 419 In C, the integer constants 0 and 1 suffice because the integer promotion rules can convert them to any arithmetic type, and the rules for pointer expressions treat constant expressions evaluating to 0 as a special case. 420 However, user-defined arithmetic types often need the equivalent of a 1 or 0 for their functions or operators, polymorphic functions often need 0 and 1 constants of a type matching their polymorphic parameters, and user-defined pointer-like types may need a null value. 421 Defining special constants for a user-defined type is more efficient than defining a conversion to the type from \lstinline$_Bool$. 422 423 Why \emph{just} ``\lstinline$0$'' and ``\lstinline$1$''? Why not other integers? No other integers have special status in C. 424 A facility that let programmers declare specific constants---``\lstinline$const Rational 12$'', for instance---would not be much of an improvement. 425 Some facility for defining the creation of values of programmer-defined types from arbitrary integer tokens would be needed. 426 The complexity of such a feature doesn't seem worth the gain. 556 \index{constant identifiers}\index{identifiers!for constants} The tokens ``\lstinline$0$''\impl{0} 557 and ``\lstinline$1$''\impl{1} are identifiers. No other tokens defined by the rules for integer 558 constants are considered to be identifiers. 559 \begin{rationale} 560 Why ``\lstinline$0$'' and ``\lstinline$1$''? Those integers have special status in C. All scalar 561 types can be incremented and decremented, which is defined in terms of adding or subtracting 1. The 562 operations ``\lstinline$&&$'', ``\lstinline$||$'', and ``\lstinline$!$'' can be applied to any 563 scalar arguments, and are defined in terms of comparison against 0. A \nonterm{constant-expression} 564 that evaluates to 0 is effectively compatible with every pointer type. 565 566 In C, the integer constants 0 and 1 suffice because the integer promotion rules can convert them to 567 any arithmetic type, and the rules for pointer expressions treat constant expressions evaluating to 568 0 as a special case. However, user-defined arithmetic types often need the equivalent of a 1 or 0 569 for their functions or operators, polymorphic functions often need 0 and 1 constants of a type 570 matching their polymorphic parameters, and user-defined pointer-like types may need a null value. 571 Defining special constants for a user-defined type is more efficient than defining a conversion to 572 the type from \lstinline$_Bool$. 573 574 Why \emph{just} ``\lstinline$0$'' and ``\lstinline$1$''? Why not other integers? No other integers 575 have special status in C. A facility that let programmers declare specific 576 constants---``\lstinline$const Rational 12$'', for instance---would not be much of an improvement. 577 Some facility for defining the creation of values of programmer-defined types from arbitrary integer 578 tokens would be needed. The complexity of such a feature doesn't seem worth the gain. 427 579 \end{rationale} 428 580 … … 430 582 \subsubsection{Operator identifiers} 431 583 432 \index{operator identifiers}\index{identifiers!for operators} Table \ref{opids} lists the programmer-definable operator identifiers and the operations they are associated with. 433 Functions that are declared with (or pointed at by function pointers that are declared with) these identifiers can be called by expressions that use the operator tokens and syntax, or the operator identifiers and ``function call'' syntax. 434 The relationships between operators and function calls are discussed in descriptions of the operators. 584 \index{operator identifiers}\index{identifiers!for operators} Table \ref{opids} lists the 585 programmer-definable operator identifiers and the operations they are associated with. Functions 586 that are declared with (or pointed at by function pointers that are declared with) these identifiers 587 can be called by expressions that use the operator tokens and syntax, or the operator identifiers 588 and ``function call'' syntax. The relationships between operators and function calls are discussed 589 in descriptions of the operators. 435 590 436 591 \begin{table}[hbt] … … 489 644 490 645 \begin{rationale} 491 Operator identifiers are made up of the characters of the operator token, with question marks added to mark the positions of the arguments of operators. 492 The question marks serve as mnemonic devices; 493 programmers can not create new operators by arbitrarily mixing question marks and other non-alphabetic characters. 494 Note that prefix and postfix versions of the increment and decrement operators are distinguished by the position of the question mark. 495 \end{rationale} 496 497 \begin{rationale} 498 The use of ``\lstinline$?$'' in identifiers means that some C programs are not \CFA programs. For instance, the sequence of characters ``\lstinline$(i < 0)?--i:i$'' is legal in a C program, but a 499 \CFA compiler detects a syntax error because it treats ``\lstinline$?--$'' as an identifier, not as the two tokens ``\lstinline$?$'' and ``\lstinline$--$''. 646 Operator identifiers are made up of the characters of the operator token, with question marks added 647 to mark the positions of the arguments of operators. The question marks serve as mnemonic devices; 648 programmers can not create new operators by arbitrarily mixing question marks and other 649 non-alphabetic characters. Note that prefix and postfix versions of the increment and decrement 650 operators are distinguished by the position of the question mark. 651 \end{rationale} 652 653 \begin{rationale} 654 The use of ``\lstinline$?$'' in identifiers means that some C programs are not \CFA programs. For 655 instance, the sequence of characters ``\lstinline$(i < 0)?--i:i$'' is legal in a C program, but a 656 \CFA compiler detects a syntax error because it treats ``\lstinline$?--$'' as an identifier, not 657 as the two tokens ``\lstinline$?$'' and ``\lstinline$--$''. 500 658 \end{rationale} 501 659 … … 505 663 \item 506 664 The logical operators ``\lstinline$&&$'' and ``\lstinline$||$'', and the conditional operator 507 ``\lstinline$?:$''. 508 These operators do not always evaluate their operands, and hence can not be properly defined by functions unless some mechanism like call-by-name is added to the language. 509 Note that the definitions of ``\lstinline$&&$'' and ``\lstinline$||$'' say that they work by checking that their arguments are unequal to 0, so defining ``\lstinline$!=$'' and ``\lstinline$0$'' for user-defined types is enough to allow them to be used in logical expressions. 510 511 \item 512 The comma operator\index{comma expression}. 513 It is a control-flow operator like those above. 665 ``\lstinline$?:$''. These operators do not always evaluate their operands, and hence can not be 666 properly defined by functions unless some mechanism like call-by-name is added to the language. 667 Note that the definitions of ``\lstinline$&&$'' and ``\lstinline$||$'' say that they work by 668 checking that their arguments are unequal to 0, so defining ``\lstinline$!=$'' and ``\lstinline$0$'' 669 for user-defined types is enough to allow them to be used in logical expressions. 670 671 \item 672 The comma operator\index{comma expression}. It is a control-flow operator like those above. 514 673 Changing its meaning seems pointless and confusing. 515 674 516 675 \item 517 The ``address of'' operator. 518 It would seem useful to define a unary ``\lstinline$&$'' operator that returns values of some programmer-defined pointer-like type. 519 The problem lies with the type of the operator. 520 Consider the expression ``\lstinline$p = &x$'', where \lstinline$x$ is of type 521 \lstinline$T$ and \lstinline$p$ has the programmer-defined type \lstinline$T_ptr$. 522 The expression might be treated as a call to the unary function ``\lstinline$&?$''. 523 Now what is the type of the function's parameter? It can not be \lstinline$T$, because then \lstinline$x$ would be passed by value, and there is no way to create a useful pointer-like result from a value. 524 Hence the parameter must have type \lstinline$T *$. 525 But then the expression must be rewritten as ``\lstinline$p = &?( &x )$'' 676 The ``address of'' operator. It would seem useful to define a unary ``\lstinline$&$'' operator that 677 returns values of some programmer-defined pointer-like type. The problem lies with the type of the 678 operator. Consider the expression ``\lstinline$p = &x$'', where \lstinline$x$ is of type 679 \lstinline$T$ and \lstinline$p$ has the programmer-defined type \lstinline$T_ptr$. The expression 680 might be treated as a call to the unary function ``\lstinline$&?$''. Now what is the type of the 681 function's parameter? It can not be \lstinline$T$, because then \lstinline$x$ would be passed by 682 value, and there is no way to create a useful pointer-like result from a value. Hence the parameter 683 must have type \lstinline$T *$. But then the expression must be rewritten as ``\lstinline$p = &?( &x )$'' 526 684 ---which doesn't seem like progress! 527 685 528 The rule for address-of expressions would have to be something like ``keep applying address-of functions until you get one that takes a pointer argument, then use the built-in operator and stop''. 529 It seems simpler to define a conversion function from \lstinline$T *$ to \lstinline$T_ptr$. 530 531 \item 532 The \lstinline$sizeof$ operator. 533 It is already defined for every object type, and intimately tied into the language's storage allocation model. 534 Redefining it seems pointless. 535 536 \item 537 The ``member of'' operators ``\lstinline$.$'' and ``\lstinline$->$''. 538 These are not really infix operators, since their right ``operand'' is not a value or object. 539 540 \item 541 Cast operators\index{cast expression}. 542 Anything that can be done with an explicit cast can be done with a function call. 543 The difference in syntax is small. 686 The rule for address-of expressions would have to be something like ``keep applying address-of 687 functions until you get one that takes a pointer argument, then use the built-in operator and 688 stop''. It seems simpler to define a conversion function from \lstinline$T *$ to \lstinline$T_ptr$. 689 690 \item 691 The \lstinline$sizeof$ operator. It is already defined for every object type, and intimately tied 692 into the language's storage allocation model. Redefining it seems pointless. 693 694 \item 695 The ``member of'' operators ``\lstinline$.$'' and ``\lstinline$->$''. These are not really infix 696 operators, since their right ``operand'' is not a value or object. 697 698 \item 699 Cast operators\index{cast expression}. Anything that can be done with an explicit cast can be done 700 with a function call. The difference in syntax is small. 544 701 \end{itemize} 545 702 \end{rationale} … … 548 705 \section{Expressions} 549 706 550 \CFA allows operators and identifiers to be overloaded. 551 Hence, each expression can have a number of \define{interpretation}s, each of which has a different type. 552 The interpretations that are potentially executable are called \define{valid interpretation}s. 553 The set of interpretations depends on the kind of expression and on the interpretations of the subexpressions that it contains. 554 The rules for determining the valid interpretations of an expression are discussed below for each kind of expression. 555 Eventually the context of the outermost expression chooses one interpretation of that expression. 556 557 An \define{ambiguous interpretation} is an interpretation which does not specify the exact object or function denoted by every identifier in the expression. 558 An expression can have some interpretations that are ambiguous and others that are unambiguous. 559 An expression that is chosen to be executed shall not be ambiguous. 560 561 The \define{best valid interpretations} are the valid interpretations that use the fewest unsafe\index{unsafe conversion} conversions. 562 Of these, the best are those where the functions and objects involved are the least polymorphic\index{less polymorphic}. 563 Of these, the best have the lowest total \Index{conversion cost}, including all implicit conversions in the argument expressions. 564 Of these, the best have the highest total conversion cost for the implicit conversions 565 (if any) applied to the argument expressions. 566 If there is no single best valid interpretation, or if the best valid interpretation is ambiguous, then the resulting interpretation is ambiguous\index{ambiguous interpretation}. 567 568 \begin{rationale} 569 \CFA's rules for selecting the best interpretation are designed to allow overload resolution to mimic C's operator semantics. 570 In C, the ``usual arithmetic conversions'' are applied to the operands of binary operators if necessary to convert the operands to types with a common real type. 571 In \CFA, those conversions are ``safe''. 572 The ``fewest unsafe conversions'' rule ensures that the usual conversions are done, if possible. 573 The ``lowest total expression cost'' rule chooses the proper common type. 574 The odd-looking ``highest argument conversion cost'' rule ensures that, when unary expressions must be converted, conversions of function results are preferred to conversion of function arguments: \lstinline$(double)-i$ will be preferred to \lstinline$-(double)i$. 575 576 The ``least polymorphic'' rule reduces the number of polymorphic function calls, since such functions are presumably more expensive than monomorphic functions and since the more specific function is presumably more appropriate. 577 It also gives preference to monomorphic values (such as the 707 \CFA allows operators and identifiers to be overloaded. Hence, each expression can have a number 708 of \define{interpretation}s, each of which has a different type. The interpretations that are 709 potentially executable are called \define{valid interpretation}s. The set of interpretations 710 depends on the kind of expression and on the interpretations of the subexpressions that it contains. 711 The rules for determining the valid interpretations of an expression are discussed below for each 712 kind of expression. Eventually the context of the outermost expression chooses one interpretation 713 of that expression. 714 715 An \define{ambiguous interpretation} is an interpretation which does not specify the exact object or 716 function denoted by every identifier in the expression. An expression can have some interpretations 717 that are ambiguous and others that are unambiguous. An expression that is chosen to be executed 718 shall not be ambiguous. 719 720 The \define{best valid interpretations} are the valid interpretations that use the fewest 721 unsafe\index{unsafe conversion} conversions. Of these, the best are those where the functions and 722 objects involved are the least polymorphic\index{less polymorphic}. Of these, the best have the 723 lowest total \Index{conversion cost}, including all implicit conversions in the argument 724 expressions. Of these, the best have the highest total conversion cost for the implicit conversions 725 (if any) applied to the argument expressions. If there is no single best valid interpretation, or if 726 the best valid interpretation is ambiguous, then the resulting interpretation is 727 ambiguous\index{ambiguous interpretation}. 728 729 \begin{rationale} 730 \CFA's rules for selecting the best interpretation are designed to allow overload resolution to 731 mimic C's operator semantics. In C, the ``usual arithmetic conversions'' are applied to the 732 operands of binary operators if necessary to convert the operands to types with a common real type. 733 In \CFA, those conversions are ``safe''. The ``fewest unsafe conversions'' rule ensures that the 734 usual conversions are done, if possible. The ``lowest total expression cost'' rule chooses the 735 proper common type. The odd-looking ``highest argument conversion cost'' rule ensures that, when 736 unary expressions must be converted, conversions of function results are preferred to conversion of 737 function arguments: \lstinline$(double)-i$ will be preferred to \lstinline$-(double)i$. 738 739 The ``least polymorphic'' rule reduces the number of polymorphic function calls, since such 740 functions are presumably more expensive than monomorphic functions and since the more specific 741 function is presumably more appropriate. It also gives preference to monomorphic values (such as the 578 742 \lstinline$int$ \lstinline$0$) over polymorphic values (such as the \Index{null pointer} 579 \lstinline$0$\use{0}). 580 However, interpretations that call polymorphic functions are preferred to interpretations that perform unsafe conversions, because those conversions potentially lose accuracy or violate strong typing. 743 \lstinline$0$\use{0}). However, interpretations that call polymorphic functions are preferred to 744 interpretations that perform unsafe conversions, because those conversions potentially lose accuracy 745 or violate strong typing. 581 746 582 747 There are two notable differences between \CFA's overload resolution rules and the rules for 583 {\CC} defined in \cite{C++}. 584 First, the result type of a function plays a role. 585 In {\CC}, a function call must be completely resolved based on the arguments to the call in most circumstances. 586 In \CFA, a function call may have several interpretations, each with a different result type, and the interpretations of the containing context choose among them. 587 Second, safe conversions are used to choose among interpretations of all sorts of functions; 588 in {\CC}, the ``usual arithmetic conversions'' are a separate set of rules that apply only to the built-in operators. 589 \end{rationale} 590 591 Expressions involving certain operators\index{operator identifiers} are considered to be equivalent to function calls. 592 A transformation from ``operator'' syntax to ``function call'' syntax is defined by \define{rewrite rules}. 593 Each operator has a set of predefined functions that overload its identifier. 594 Overload resolution determines which member of the set is executed in a given expression. 595 The functions have \Index{internal linkage} and are implicitly declared with \Index{file scope}. 596 The predefined functions and rewrite rules are discussed below for each of these operators. 597 \begin{rationale} 598 Predefined functions and constants have internal linkage because that simplifies optimization in traditional compile-and-link environments. 599 For instance, ``\lstinline$an_int + an_int$'' is equivalent to ``\lstinline$?+?(an_int, an_int)$''. 600 If integer addition has not been redefined in the current scope, a compiler can generate code to perform the addition directly. 601 If predefined functions had external linkage, this optimization would be difficult. 602 \end{rationale} 603 604 \begin{rationale} 605 Since each subsection describes the interpretations of an expression in terms of the interpretations of its subexpressions, this chapter can be taken as describing an overload resolution algorithm that uses one bottom-up pass over an expression tree. 606 Such an algorithm was first described (for Ada) by Baker~\cite{Bak:overload}. 607 It is extended here to handle polymorphic functions and arithmetic conversions. 608 The overload resolution rules and the predefined functions have been chosen so that, in programs that do not introduce overloaded declarations, expressions will have the same meaning in C and in \CFA. 609 \end{rationale} 610 611 \begin{rationale} 612 Expression syntax is quoted from the {\c11} standard. 613 The syntax itself defines the precedence and associativity of operators. 614 The sections are arranged in decreasing order of precedence, with all operators in a section having the same precedence. 748 {\CC} defined in \cite{c++}. First, the result type of a function plays a role. In {\CC}, a 749 function call must be completely resolved based on the arguments to the call in most circumstances. 750 In \CFA, a function call may have several interpretations, each with a different result type, and 751 the interpretations of the containing context choose among them. Second, safe conversions are used 752 to choose among interpretations of all sorts of functions; in {\CC}, the ``usual arithmetic 753 conversions'' are a separate set of rules that apply only to the built-in operators. 754 \end{rationale} 755 756 Expressions involving certain operators\index{operator identifiers} are considered to be equivalent 757 to function calls. A transformation from ``operator'' syntax to ``function call'' syntax is defined 758 by \define{rewrite rules}. Each operator has a set of predefined functions that overload its 759 identifier. Overload resolution determines which member of the set is executed in a given 760 expression. The functions have \Index{internal linkage} and are implicitly declared with \Index{file 761 scope}. The predefined functions and rewrite rules are discussed below for each of these 762 operators. 763 \begin{rationale} 764 Predefined functions and constants have internal linkage because that simplifies optimization in 765 traditional compile-and-link environments. For instance, ``\lstinline$an_int + an_int$'' is 766 equivalent to ``\lstinline$?+?(an_int, an_int)$''. If integer addition has not been redefined in 767 the current scope, a compiler can generate code to perform the addition directly. If predefined 768 functions had external linkage, this optimization would be difficult. 769 \end{rationale} 770 771 \begin{rationale} 772 Since each subsection describes the interpretations of an expression in terms of the interpretations 773 of its subexpressions, this chapter can be taken as describing an overload resolution algorithm that 774 uses one bottom-up pass over an expression tree. Such an algorithm was first described (for Ada) by 775 Baker~\cite{Bak:overload}. It is extended here to handle polymorphic functions and arithmetic 776 conversions. The overload resolution rules and the predefined functions have been chosen so that, in 777 programs that do not introduce overloaded declarations, expressions will have the same meaning in C 778 and in \CFA. 779 \end{rationale} 780 781 \begin{rationale} 782 Expression syntax is quoted from the {\c11} standard. The syntax itself defines the precedence and 783 associativity of operators. The sections are arranged in decreasing order of precedence, with all 784 operators in a section having the same precedence. 615 785 \end{rationale} 616 786 … … 631 801 const int 1;@\use{1}@ 632 802 const int 0;@\use{0}@ 633 forall( dtype DT ) DT * const 0;634 forall( ftype FT ) FT * const 0;803 forall( dtype DT ) DT *const 0; 804 forall( ftype FT ) FT *const 0; 635 805 \end{lstlisting} 636 806 637 807 \semantics 638 The \Index{valid interpretation} of an \nonterm{identifier} are given by the visible\index{visible} declarations of the identifier. 639 640 A \nonterm{constant} or \nonterm{string-literal} has one valid interpretation, which has the type and value defined by {\c11}. 641 The predefined integer identifiers ``\lstinline$1$'' and ``\lstinline$0$'' have the integer values 1 and 0, respectively. 642 The other two predefined ``\lstinline$0$'' identifiers are bound to polymorphic pointer values that, when specialized\index{specialization} with a data type or function type respectively, produce a null pointer of that type. 808 The \Index{valid interpretation} of an \nonterm{identifier} are given by the visible\index{visible} 809 declarations of the identifier. 810 811 A \nonterm{constant} or \nonterm{string-literal} has one valid interpretation, which has the type 812 and value defined by {\c11}. The predefined integer identifiers ``\lstinline$1$'' and 813 ``\lstinline$0$'' have the integer values 1 and 0, respectively. The other two predefined 814 ``\lstinline$0$'' identifiers are bound to polymorphic pointer values that, when 815 specialized\index{specialization} with a data type or function type respectively, produce a null 816 pointer of that type. 643 817 644 818 A parenthesised expression has the same interpretations as the contained \nonterm{expression}. 645 819 646 820 \examples 647 The expression \lstinline$(void *)0$\use{0} specializes the (polymorphic) null pointer to a null pointer to \lstinline$void$. \lstinline$(const void *)0$ does the same, and also uses a safe conversion from \lstinline$void *$ to \lstinline$const void *$. 648 In each case, the null pointer conversion is better\index{best valid interpretations} than the unsafe conversion of the integer 821 The expression \lstinline$(void *)0$\use{0} specializes the (polymorphic) null pointer to a null 822 pointer to \lstinline$void$. \lstinline$(const void *)0$ does the same, and also uses a safe 823 conversion from \lstinline$void *$ to \lstinline$const void *$. In each case, the null pointer 824 conversion is better\index{best valid interpretations} than the unsafe conversion of the integer 649 825 \lstinline$0$ to a pointer. 650 826 … … 652 828 Note that the predefined identifiers have addresses. 653 829 654 \CFA does not have C's concept of ``null pointer constants'', which are not typed values but special strings of tokens. 655 The C token ``\lstinline$0$'' is an expression of type \lstinline$int$ with the value ``zero'', and it \emph{also} is a null pointer constant. 656 Similarly, 657 ``\lstinline$(void *)0$ is an expression of type \lstinline$(void *)$ whose value is a null pointer, and it also is a null pointer constant. 658 However, in C, ``\lstinline$(void *)(void *)0$'' is 659 \emph{not} a null pointer constant, even though it is null-valued, a pointer, and constant! The semantics of C expressions contain many special cases to deal with subexpressions that are null pointer constants. 660 661 \CFA handles these cases through overload resolution. 662 The declaration 663 \begin{lstlisting} 664 forall( dtype DT ) DT * const 0; 665 \end{lstlisting} means that \lstinline$0$ is a polymorphic object, and contains a value that can have \emph{any} pointer-to-object type or pointer-to-incomplete type. 666 The only such value is the null pointer. 667 Therefore the type \emph{alone} is enough to identify a null pointer. 668 Where C defines an operator with a special case for the null pointer constant, \CFA defines predefined functions with a polymorphic object parameter. 830 \CFA does not have C's concept of ``null pointer constants'', which are not typed values but 831 special strings of tokens. The C token ``\lstinline$0$'' is an expression of type \lstinline$int$ 832 with the value ``zero'', and it \emph{also} is a null pointer constant. Similarly, 833 ``\lstinline$(void *)0$ is an expression of type \lstinline$(void *)$ whose value is a null pointer, 834 and it also is a null pointer constant. However, in C, ``\lstinline$(void *)(void *)0$'' is 835 \emph{not} a null pointer constant, even though it is null-valued, a pointer, and constant! The 836 semantics of C expressions contain many special cases to deal with subexpressions that are null 837 pointer constants. 838 839 \CFA handles these cases through overload resolution. The declaration 840 \begin{lstlisting} 841 forall( dtype DT ) DT *const 0; 842 \end{lstlisting} 843 means that \lstinline$0$ is a polymorphic object, and contains a value that can have \emph{any} 844 pointer-to-object type or pointer-to-incomplete type. The only such value is the null pointer. 845 Therefore the type \emph{alone} is enough to identify a null pointer. Where C defines an operator 846 with a special case for the null pointer constant, \CFA defines predefined functions with a 847 polymorphic object parameter. 669 848 \end{rationale} 670 849 … … 672 851 \subsubsection{Generic selection} 673 852 674 \constraints The best interpretation of the controlling expression shall be unambiguous\index{ambiguous interpretation}, and shall have type compatible with at most one of the types named in its generic association list. 675 If a generic selection has no \lstinline$default$ generic association, the best interpretation of its controlling expression shall have type compatible with exactly one of the types named in its generic association list. 853 \constraints The best interpretation of the controlling expression shall be 854 unambiguous\index{ambiguous interpretation}, and shall have type compatible with at most one of the 855 types named in its generic association list. If a generic selection has no \lstinline$default$ 856 generic association, the best interpretation of its controlling expression shall have type 857 compatible with exactly one of the types named in its generic association list. 676 858 677 859 \semantics … … 701 883 \rewriterules 702 884 \begin{lstlisting} 703 a[b] @\rewrite@ ?[?]( b, a ) // if a has integer type @\use{?[?]}@885 a[b] @\rewrite@ ?[?]( b, a ) // if a has integer type */@\use{?[?]}@ 704 886 a[b] @\rewrite@ ?[?]( a, b ) // otherwise 705 a( @\emph{arguments}@ ) @\rewrite@ ?()( a, @\emph{arguments}@ )@\use{?()}@887 a( ${\em arguments }$ ) @\rewrite@ ?()( a, ${\em arguments} )$@\use{?()}@ 706 888 a++ @\rewrite@ ?++(&( a ))@\use{?++}@ 707 889 a-- @\rewrite@ ?--(&( a ))@\use{?--}@ … … 713 895 \predefined 714 896 \begin{lstlisting} 715 forall( otype T ) lvalue T ?[?]( T *, ptrdiff_t );@\use{ptrdiff_t}@716 forall( otype T ) lvalue _Atomic T ?[?]( _Atomic T *, ptrdiff_t );717 forall( otype T ) lvalue const T ?[?]( const T *, ptrdiff_t );718 forall( otype T ) lvalue restrict T ?[?]( restrict T *, ptrdiff_t );719 forall( otype T ) lvalue volatile T ?[?]( volatile T *, ptrdiff_t );720 forall( otype T ) lvalue _Atomic const T ?[?]( _Atomic const T *, ptrdiff_t );721 forall( otype T ) lvalue _Atomic restrict T ?[?]( _Atomic restrict T *, ptrdiff_t );722 forall( otype T ) lvalue _Atomic volatile T ?[?]( _Atomic volatile T *, ptrdiff_t );723 forall( otype T ) lvalue const restrict T ?[?]( const restrict T *, ptrdiff_t );724 forall( otype T ) lvalue const volatile T ?[?]( const volatile T *, ptrdiff_t );725 forall( otype T ) lvalue restrict volatile T ?[?]( restrict volatile T *, ptrdiff_t );726 forall( otype T ) lvalue _Atomic const restrict T ?[?]( _Atomic const restrict T *, ptrdiff_t );727 forall( otype T ) lvalue _Atomic const volatile T ?[?]( _Atomic const volatile T *, ptrdiff_t );728 forall( otype T ) lvalue _Atomic restrict volatile T ?[?]( _Atomic restrict volatile T *, ptrdiff_t );729 forall( otype T ) lvalue const restrict volatile T ?[?]( const restrict volatile T *, ptrdiff_t );730 forall( otype T ) lvalue _Atomic const restrict volatile T ?[?]( _Atomic const restrict volatile T *, ptrdiff_t );897 forall( type T ) lvalue T ?[?]( T *, ptrdiff_t );@\use{ptrdiff_t}@ 898 forall( type T ) lvalue _Atomic T ?[?]( _Atomic T *, ptrdiff_t ); 899 forall( type T ) lvalue const T ?[?]( const T *, ptrdiff_t ); 900 forall( type T ) lvalue restrict T ?[?]( restrict T *, ptrdiff_t ); 901 forall( type T ) lvalue volatile T ?[?]( volatile T *, ptrdiff_t ); 902 forall( type T ) lvalue _Atomic const T ?[?]( _Atomic const T *, ptrdiff_t ); 903 forall( type T ) lvalue _Atomic restrict T ?[?]( _Atomic restrict T *, ptrdiff_t ); 904 forall( type T ) lvalue _Atomic volatile T ?[?]( _Atomic volatile T *, ptrdiff_t ); 905 forall( type T ) lvalue const restrict T ?[?]( const restrict T *, ptrdiff_t ); 906 forall( type T ) lvalue const volatile T ?[?]( const volatile T *, ptrdiff_t ); 907 forall( type T ) lvalue restrict volatile T ?[?]( restrict volatile T *, ptrdiff_t ); 908 forall( type T ) lvalue _Atomic const restrict T ?[?]( _Atomic const restrict T *, ptrdiff_t ); 909 forall( type T ) lvalue _Atomic const volatile T ?[?]( _Atomic const volatile T *, ptrdiff_t ); 910 forall( type T ) lvalue _Atomic restrict volatile T ?[?]( _Atomic restrict volatile T *, ptrdiff_t ); 911 forall( type T ) lvalue const restrict volatile T ?[?]( const restrict volatile T *, ptrdiff_t ); 912 forall( type T ) lvalue _Atomic const restrict volatile T ?[?]( _Atomic const restrict volatile T *, ptrdiff_t ); 731 913 \end{lstlisting} 732 914 \semantics 733 The interpretations of subscript expressions are the interpretations of the corresponding function call expressions. 915 The interpretations of subscript expressions are the interpretations of the corresponding function 916 call expressions. 734 917 \begin{rationale} 735 918 C defines subscripting as pointer arithmetic in a way that makes \lstinline$a[i]$ and 736 \lstinline$i[a]$ equivalent. \CFA provides the equivalence through a rewrite rule to reduce the number of overloadings of \lstinline$?[?]$. 737 738 Subscript expressions are rewritten as function calls that pass the first parameter by value. 739 This is somewhat unfortunate, since array-like types tend to be large. 740 The alternative is to use the rewrite rule ``\lstinline$a[b]$ \rewrite \lstinline$?[?](&(a), b)$''. 741 However, C semantics forbid this approach: the \lstinline$a$ in ``\lstinline$a[b]$'' can be an arbitrary pointer value, which does not have an address. 919 \lstinline$i[a]$ equivalent. \CFA provides the equivalence through a rewrite rule to reduce the 920 number of overloadings of \lstinline$?[?]$. 921 922 Subscript expressions are rewritten as function calls that pass the first parameter by value. This 923 is somewhat unfortunate, since array-like types tend to be large. The alternative is to use the 924 rewrite rule ``\lstinline$a[b]$ \rewrite \lstinline$?[?](&(a), b)$''. However, C semantics forbid 925 this approach: the \lstinline$a$ in ``\lstinline$a[b]$'' can be an arbitrary pointer value, which 926 does not have an address. 742 927 743 928 The repetitive form of the predefined identifiers shows up a deficiency\index{deficiencies!pointers 744 to qualified types} of \CFA's type system. 745 Type qualifiers are not included in type values, so polymorphic functions that take pointers to arbitrary types often come in one flavor for each possible qualification of the pointed-at type. 929 to qualified types} of \CFA's type system. Type qualifiers are not included in type values, so 930 polymorphic functions that take pointers to arbitrary types often come in one flavor for each 931 possible qualification of the pointed-at type. 746 932 \end{rationale} 747 933 … … 750 936 751 937 \semantics 752 A \define{function designator} is an interpretation of an expression that has function type. 753 The 754 \nonterm{postfix-expression} in a function call may have some interpretations that are function designators and some that are not. 755 756 For those interpretations of the \nonterm{postfix-expression} that are not function designators, the expression is rewritten and becomes a call of a function named ``\lstinline$?()$''. 757 The valid interpretations of the rewritten expression are determined in the manner described below. 758 759 Each combination of function designators and argument interpretations is considered. 760 For those interpretations of the \nonterm{postfix-expression} that are \Index{monomorphic function} designators, the combination has a \Index{valid interpretation} if the function designator accepts the number of arguments given, and each argument interpretation matches the corresponding explicit parameter: 938 A \define{function designator} is an interpretation of an expression that has function type. The 939 \nonterm{postfix-expression} in a function call may have some interpretations that are function 940 designators and some that are not. 941 942 For those interpretations of the \nonterm{postfix-expression} that are not function designators, the 943 expression is rewritten and becomes a call of a function named ``\lstinline$?()$''. The valid 944 interpretations of the rewritten expression are determined in the manner described below. 945 946 Each combination of function designators and argument interpretations is considered. For those 947 interpretations of the \nonterm{postfix-expression} that are \Index{monomorphic function} 948 designators, the combination has a \Index{valid interpretation} if the function designator accepts 949 the number of arguments given, and each argument interpretation matches the corresponding explicit 950 parameter: 761 951 \begin{itemize} 762 \item if the argument corresponds to a parameter in the function designator's prototype, the argument interpretation must have the same type as the corresponding parameter, or be implicitly convertible to the parameter's type 763 \item if the function designator's type does not include a prototype or if the argument corresponds to 952 \item 953 if the argument corresponds to a parameter in the function designator's prototype, the argument 954 interpretation must have the same type as the corresponding parameter, or be implicitly convertible 955 to the parameter's type 956 \item 957 if the function designator's type does not include a prototype or if the argument corresponds to 764 958 ``\lstinline$...$'' in a prototype, a \Index{default argument promotion} is applied to it. 765 959 \end{itemize} … … 767 961 768 962 For those combinations where the interpretation of the \nonterm{postfix-expression} is a 769 \Index{polymorphic function} designator and the function designator accepts the number of arguments given, there shall be at least one set of \define{implicit argument}s for the implicit parameters such that 963 \Index{polymorphic function} designator and the function designator accepts the number of arguments 964 given, there shall be at least one set of \define{implicit argument}s for the implicit parameters 965 such that 770 966 \begin{itemize} 771 967 \item 772 If the declaration of the implicit parameter uses \Index{type-class} \lstinline$type$\use{type}, the implicit argument must be an object type; 773 if it uses \lstinline$dtype$, the implicit argument must be an object type or an incomplete type; 774 and if it uses \lstinline$ftype$, the implicit argument must be a function type. 775 776 \item if an explicit parameter's type uses any implicit parameters, then the corresponding explicit argument must have a type that is (or can be safely converted\index{safe conversion} to) the type produced by substituting the implicit arguments for the implicit parameters in the explicit parameter type. 777 778 \item the remaining explicit arguments must match the remaining explicit parameters, as described for monomorphic function designators. 779 780 \item for each \Index{assertion parameter} in the function designator's type, there must be an object or function with the same identifier that is visible at the call site and whose type is compatible with or can be specialized to the type of the assertion declaration. 968 If the declaration of the implicit parameter uses \Index{type-class} \lstinline$type$\use{type}, the 969 implicit argument must be an object type; if it uses \lstinline$dtype$, the implicit argument must 970 be an object type or an incomplete type; and if it uses \lstinline$ftype$, the implicit argument 971 must be a function type. 972 973 \item 974 if an explicit parameter's type uses any implicit parameters, then the corresponding explicit 975 argument must have a type that is (or can be safely converted\index{safe conversion} to) the type 976 produced by substituting the implicit arguments for the implicit parameters in the explicit 977 parameter type. 978 979 \item 980 the remaining explicit arguments must match the remaining explicit parameters, as described for 981 monomorphic function designators. 982 983 \item 984 for each \Index{assertion parameter} in the function designator's type, there must be an object or 985 function with the same identifier that is visible at the call site and whose type is compatible with 986 or can be specialized to the type of the assertion declaration. 781 987 \end{itemize} 782 There is a valid interpretation for each such set of implicit parameters. 783 The type of each valid interpretation is the return type of the function designator with implicit parameter values substituted for the implicit arguments. 784 785 A valid interpretation is ambiguous\index{ambiguous interpretation} if the function designator or any of the argument interpretations is ambiguous. 786 787 Every valid interpretation whose return type is not compatible with any other valid interpretation's return type is an interpretation of the function call expression. 788 789 Every set of valid interpretations that have mutually compatible\index{compatible type} result types also produces an interpretation of the function call expression. 790 The type of the interpretation is the \Index{composite type} of the types of the valid interpretations, and the value of the interpretation is that of the \Index{best valid interpretation}. 791 \begin{rationale} 792 One desirable property of a polymorphic programming language is \define{generalizability}: the ability to replace an abstraction with a more general but equivalent abstraction without requiring changes in any of the uses of the original\cite{Cormack90}. 793 For instance, it should be possible to replace a function ``\lstinline$int f( int );$'' with ``\lstinline$forall( otype T ) T f( T );$'' without affecting any calls of \lstinline$f$. 988 There is a valid interpretation for each such set of implicit parameters. The type of each valid 989 interpretation is the return type of the function designator with implicit parameter values 990 substituted for the implicit arguments. 991 992 A valid interpretation is ambiguous\index{ambiguous interpretation} if the function designator or 993 any of the argument interpretations is ambiguous. 994 995 Every valid interpretation whose return type is not compatible with any other valid interpretation's 996 return type is an interpretation of the function call expression. 997 998 Every set of valid interpretations that have mutually compatible\index{compatible type} result types 999 also produces an interpretation of the function call expression. The type of the interpretation is 1000 the \Index{composite type} of the types of the valid interpretations, and the value of the 1001 interpretation is that of the \Index{best valid interpretation}. 1002 \begin{rationale} 1003 One desirable property of a polymorphic programming language is \define{generalizability}: the 1004 ability to replace an abstraction with a more general but equivalent abstraction without requiring 1005 changes in any of the uses of the original\cite{Cormack90}. For instance, it should be possible to 1006 replace a function ``\lstinline$int f( int );$'' with ``\lstinline$forall( type T ) T f( T );$'' 1007 without affecting any calls of \lstinline$f$. 794 1008 795 1009 \CFA\index{deficiencies!generalizability} does not fully possess this property, because … … 801 1015 float f; 802 1016 double d; 803 f = g( f, f ); // (1) 804 f = g( i, f ); // (2) (safe conversion to float) 805 f = g( d, f ); // (3) (unsafe conversion to float) 806 \end{lstlisting} 807 If \lstinline$g$ was replaced by ``\lstinline$forall( otype T ) T g( T, T );$'', the first and second calls would be unaffected, but the third would change: \lstinline$f$ would be converted to 1017 f = g( f, f ); // (1) 1018 f = g( i, f ); // (2) (safe conversion to float) 1019 f = g( d, f ); // (3) (unsafe conversion to float) 1020 \end{lstlisting} 1021 If \lstinline$g$ was replaced by ``\lstinline$forall( type T ) T g( T, T );$'', the first and second 1022 calls would be unaffected, but the third would change: \lstinline$f$ would be converted to 808 1023 \lstinline$double$, and the result would be a \lstinline$double$. 809 1024 810 Another example is the function ``\lstinline$void h( int *);$''. 811 This function can be passed a 812 \lstinline$void *$ argument, but the generalization ``\lstinline$forall( otype T ) void h( T *);$'' can not. 813 In this case, \lstinline$void$ is not a valid value for \lstinline$T$ because it is not an object type. 814 If unsafe conversions were allowed, \lstinline$T$ could be inferred to be \emph{any}object type, which is undesirable.1025 Another example is the function ``\lstinline$void h( int *);$''. This function can be passed a 1026 \lstinline$void *$ argument, but the generalization ``\lstinline$forall( type T ) void h( T *);$'' 1027 can not. In this case, \lstinline$void$ is not a valid value for \lstinline$T$ because it is not an 1028 object type. If unsafe conversions were allowed, \lstinline$T$ could be inferred to be \emph{any} 1029 object type, which is undesirable. 815 1030 \end{rationale} 816 1031 … … 818 1033 A function called ``\lstinline$?()$'' might be part of a numerical differentiation package. 819 1034 \begin{lstlisting} 820 extern otype Derivative;1035 extern type Derivative; 821 1036 extern double ?()( Derivative, double ); 822 1037 extern Derivative derivative_of( double (*f)( double ) ); … … 830 1045 For that interpretation, the function call is treated as ``\lstinline$?()( sin_dx, 12.9 )$''. 831 1046 \begin{lstlisting} 832 int f( long ); // (1) 833 int f( int, int ); // (2) 1047 int f( long ); // (1) 1048 int f( int, int ); // (2) 834 1049 int f( int *); // (3) 1050 835 1051 int i = f( 5 ); // calls (1) 836 1052 \end{lstlisting} 837 Function (1) provides a valid interpretation of ``\lstinline$f( 5 )$'', using an implicit \lstinline$int$ to \lstinline$long$ conversion. 838 The other functions do not, since the second requires two arguments, and since there is no implicit conversion from \lstinline$int$ to \lstinline$int *$ that could be used with the third function. 839 840 \begin{lstlisting} 841 forall( otype T ) T h( T ); 1053 Function (1) provides a valid interpretation of ``\lstinline$f( 5 )$'', using an implicit 1054 \lstinline$int$ to \lstinline$long$ conversion. The other functions do not, since the second 1055 requires two arguments, and since there is no implicit conversion from \lstinline$int$ to 1056 \lstinline$int *$ that could be used with the third function. 1057 1058 \begin{lstlisting} 1059 forall( type T ) T h( T ); 842 1060 double d = h( 1.5 ); 843 1061 \end{lstlisting} … … 846 1064 847 1065 \begin{lstlisting} 848 forall( otype T, otype U ) void g( T, U ); // (4)849 forall( otype T ) void g( T, T ); // (5)850 forall( otype T ) void g( T, long ); // (6)851 void g( long, long ); // (7) 1066 forall( type T, type U ) void g( T, U ); // (4) 1067 forall( type T ) void g( T, T ); // (5) 1068 forall( type T ) void g( T, long ); // (6) 1069 void g( long, long ); // (7) 852 1070 double d; 853 1071 int i; 854 1072 int *p; 855 g( d, d ); // calls (5) 856 g( d, i ); // calls (6) 857 g( i, i ); // calls (7) 1073 1074 g( d, d ); // calls (5) 1075 g( d, i ); // calls (6) 1076 g( i, i ); // calls (7) 858 1077 g( i, p ); // calls (4) 859 1078 \end{lstlisting} 860 The first call has valid interpretations for all four versions of \lstinline$g$. (6) and (7) are discarded because they involve unsafe \lstinline$double$-to-\lstinline$long$ conversions. (5) is chosen because it is less polymorphic than (4). 861 862 For the second call, (7) is again discarded. 863 Of the remaining interpretations for (4), (5), and (6) (with \lstinline$i$ converted to \lstinline$long$), (6) is chosen because it is the least polymorphic. 864 865 The third call has valid interpretations for all of the functions; 866 (7) is chosen since it is not polymorphic at all. 867 868 The fourth call has no interpretation for (5), because its arguments must have compatible type. (4) is chosen because it does not involve unsafe conversions. 869 \begin{lstlisting} 870 forall( otype T ) T min( T, T ); 1079 The first call has valid interpretations for all four versions of \lstinline$g$. (6) and (7) are 1080 discarded because they involve unsafe \lstinline$double$-to-\lstinline$long$ conversions. (5) is 1081 chosen because it is less polymorphic than (4). 1082 1083 For the second call, (7) is again discarded. Of the remaining interpretations for (4), (5), and (6) 1084 (with \lstinline$i$ converted to \lstinline$long$), (6) is chosen because it is the least 1085 polymorphic. 1086 1087 The third call has valid interpretations for all of the functions; (7) is chosen since it is not 1088 polymorphic at all. 1089 1090 The fourth call has no interpretation for (5), because its arguments must have compatible type. (4) 1091 is chosen because it does not involve unsafe conversions. 1092 \begin{lstlisting} 1093 forall( type T ) T min( T, T ); 871 1094 double max( double, double ); 872 trait min_max( T ) {@\impl{min_max}@1095 context min_max( T ) {@\impl{min_max}@ 873 1096 T min( T, T ); 874 1097 T max( T, T ); 875 1098 } 876 forall( otype U | min_max( U ) ) void shuffle( U, U ); 877 shuffle( 9, 10 ); 878 \end{lstlisting} 879 The only possibility for \lstinline$U$ is \lstinline$double$, because that is the type used in the only visible \lstinline$max$ function. 9 and 10 must be converted to \lstinline$double$, and 1099 forall( type U | min_max( U ) ) void shuffle( U, U ); 1100 shuffle(9, 10); 1101 \end{lstlisting} 1102 The only possibility for \lstinline$U$ is \lstinline$double$, because that is the type used in the 1103 only visible \lstinline$max$ function. 9 and 10 must be converted to \lstinline$double$, and 880 1104 \lstinline$min$ must be specialized with \lstinline$T$ bound to \lstinline$double$. 881 1105 \begin{lstlisting} 882 extern void q( int ); // (8) 883 extern void q( void * ); // (9) 1106 extern void q( int ); // (8) 1107 extern void q( void * ); // (9) 884 1108 extern void r(); 885 1109 q( 0 ); 886 1110 r( 0 ); 887 1111 \end{lstlisting} 888 The \lstinline$int 0$ could be passed to (8), or the \lstinline$(void *)$ \Index{specialization} of the null pointer\index{null pointer} \lstinline$0$\use{0} could be passed to (9). 889 The former is chosen because the \lstinline$int$ \lstinline$0$ is \Index{less polymorphic}. 890 For the same reason, \lstinline$int$ \lstinline$0$ is passed to \lstinline$r()$, even though it has \emph{no} declared parameter types. 1112 The \lstinline$int 0$ could be passed to (8), or the \lstinline$(void *)$ \Index{specialization} of 1113 the null pointer\index{null pointer} \lstinline$0$\use{0} could be passed to (9). The former is 1114 chosen because the \lstinline$int$ \lstinline$0$ is \Index{less polymorphic}. For 1115 the same reason, \lstinline$int$ \lstinline$0$ is passed to \lstinline$r()$, even though it has 1116 \emph{no} declared parameter types. 891 1117 892 1118 893 1119 \subsubsection{Structure and union members} 894 1120 895 \semantics In the member selection expression ``\lstinline$s$.\lstinline$m$'', there shall be at least one interpretation of \lstinline$s$ whose type is a structure type or union type containing a member named \lstinline$m$. 896 If two or more interpretations of \lstinline$s$ have members named 897 \lstinline$m$ with mutually compatible types, then the expression has an \Index{ambiguous interpretation} whose type is the composite type of the types of the members. 898 If an interpretation of \lstinline$s$ has a member \lstinline$m$ whose type is not compatible with any other 899 \lstinline$s$'s \lstinline$m$, then the expression has an interpretation with the member's type. 900 The expression has no other interpretations. 1121 \semantics In the member selection expression ``\lstinline$s$.\lstinline$m$'', there shall be at 1122 least one interpretation of \lstinline$s$ whose type is a structure type or union type containing a 1123 member named \lstinline$m$. If two or more interpretations of \lstinline$s$ have members named 1124 \lstinline$m$ with mutually compatible types, then the expression has an \Index{ambiguous 1125 interpretation} whose type is the composite type of the types of the members. If an interpretation 1126 of \lstinline$s$ has a member \lstinline$m$ whose type is not compatible with any other 1127 \lstinline$s$'s \lstinline$m$, then the expression has an interpretation with the member's type. The 1128 expression has no other interpretations. 901 1129 902 1130 The expression ``\lstinline$p->m$'' has the same interpretations as the expression … … 908 1136 \predefined 909 1137 \begin{lstlisting} 910 _Bool ?++( volatile _Bool * ), ?++( _Atomic volatile _Bool * ); 911 char ?++( volatile char * ), ?++( _Atomic volatile char * ); 912 signed char ?++( volatile signed char * ), ?++( _Atomic volatile signed char * ); 913 unsigned char ?++( volatile signed char * ), ?++( _Atomic volatile signed char * ); 914 short int ?++( volatile short int * ), ?++( _Atomic volatile short int * ); 915 unsigned short int ?++( volatile unsigned short int * ), ?++( _Atomic volatile unsigned short int * ); 916 int ?++( volatile int * ), ?++( _Atomic volatile int * ); 917 unsigned int ?++( volatile unsigned int * ), ?++( _Atomic volatile unsigned int * ); 918 long int ?++( volatile long int * ), ?++( _Atomic volatile long int * ); 919 long unsigned int ?++( volatile long unsigned int * ), ?++( _Atomic volatile long unsigned int * ); 920 long long int ?++( volatile long long int * ), ?++( _Atomic volatile long long int * ); 921 long long unsigned ?++( volatile long long unsigned int * ), ?++( _Atomic volatile long long unsigned int * ); 922 float ?++( volatile float * ), ?++( _Atomic volatile float * ); 923 double ?++( volatile double * ), ?++( _Atomic volatile double * ); 924 long double ?++( volatile long double * ), ?++( _Atomic volatile long double * ); 925 926 forall( otype T ) T * ?++( T * restrict volatile * ), * ?++( T * _Atomic restrict volatile * ); 927 forall( otype T ) _Atomic T * ?++( _Atomic T * restrict volatile * ), * ?++( _Atomic T * _Atomic restrict volatile * ); 928 forall( otype T ) const T * ?++( const T * restrict volatile * ), * ?++( const T * _Atomic restrict volatile * ); 929 forall( otype T ) volatile T * ?++( volatile T * restrict volatile * ), * ?++( volatile T * _Atomic restrict volatile * ); 930 forall( otype T ) restrict T * ?++( restrict T * restrict volatile * ), * ?++( restrict T * _Atomic restrict volatile * ); 931 forall( otype T ) _Atomic const T * ?++( _Atomic const T * restrict volatile * ), 1138 _Bool ?++( volatile _Bool * ), 1139 ?++( _Atomic volatile _Bool * ); 1140 char ?++( volatile char * ), 1141 ?++( _Atomic volatile char * ); 1142 signed char ?++( volatile signed char * ), 1143 ?++( _Atomic volatile signed char * ); 1144 unsigned char ?++( volatile signed char * ), 1145 ?++( _Atomic volatile signed char * ); 1146 short int ?++( volatile short int * ), 1147 ?++( _Atomic volatile short int * ); 1148 unsigned short int ?++( volatile unsigned short int * ), 1149 ?++( _Atomic volatile unsigned short int * ); 1150 int ?++( volatile int * ), 1151 ?++( _Atomic volatile int * ); 1152 unsigned int ?++( volatile unsigned int * ), 1153 ?++( _Atomic volatile unsigned int * ); 1154 long int ?++( volatile long int * ), 1155 ?++( _Atomic volatile long int * ); 1156 long unsigned int ?++( volatile long unsigned int * ), 1157 ?++( _Atomic volatile long unsigned int * ); 1158 long long int ?++( volatile long long int * ), 1159 ?++( _Atomic volatile long long int * ); 1160 long long unsigned ?++( volatile long long unsigned int * ), 1161 ?++( _Atomic volatile long long unsigned int * ); 1162 float ?++( volatile float * ), 1163 ?++( _Atomic volatile float * ); 1164 double ?++( volatile double * ), 1165 ?++( _Atomic volatile double * ); 1166 long double ?++( volatile long double * ), 1167 ?++( _Atomic volatile long double * ); 1168 1169 forall( type T ) T * ?++( T * restrict volatile * ), 1170 * ?++( T * _Atomic restrict volatile * ); 1171 1172 forall( type T ) _Atomic T * ?++( _Atomic T * restrict volatile * ), 1173 * ?++( _Atomic T * _Atomic restrict volatile * ); 1174 1175 forall( type T ) const T * ?++( const T * restrict volatile * ), 1176 * ?++( const T * _Atomic restrict volatile * ); 1177 1178 forall( type T ) volatile T * ?++( volatile T * restrict volatile * ), 1179 * ?++( volatile T * _Atomic restrict volatile * ); 1180 1181 forall( type T ) restrict T * ?++( restrict T * restrict volatile * ), 1182 * ?++( restrict T * _Atomic restrict volatile * ); 1183 1184 forall( type T ) _Atomic const T * ?++( _Atomic const T * restrict volatile * ), 932 1185 * ?++( _Atomic const T * _Atomic restrict volatile * ); 933 forall( otype T ) _Atomic restrict T * ?++( _Atomic restrict T * restrict volatile * ), 1186 1187 forall( type T ) _Atomic restrict T * ?++( _Atomic restrict T * restrict volatile * ), 934 1188 * ?++( _Atomic restrict T * _Atomic restrict volatile * ); 935 forall( otype T ) _Atomic volatile T * ?++( _Atomic volatile T * restrict volatile * ), 1189 1190 forall( type T ) _Atomic volatile T * ?++( _Atomic volatile T * restrict volatile * ), 936 1191 * ?++( _Atomic volatile T * _Atomic restrict volatile * ); 937 forall( otype T ) const restrict T * ?++( const restrict T * restrict volatile * ), 1192 1193 forall( type T ) const restrict T * ?++( const restrict T * restrict volatile * ), 938 1194 * ?++( const restrict T * _Atomic restrict volatile * ); 939 forall( otype T ) const volatile T * ?++( const volatile T * restrict volatile * ), 1195 1196 forall( type T ) const volatile T * ?++( const volatile T * restrict volatile * ), 940 1197 * ?++( const volatile T * _Atomic restrict volatile * ); 941 forall( otype T ) restrict volatile T * ?++( restrict volatile T * restrict volatile * ), 1198 1199 forall( type T ) restrict volatile T * ?++( restrict volatile T * restrict volatile * ), 942 1200 * ?++( restrict volatile T * _Atomic restrict volatile * ); 943 forall( otype T ) _Atomic const restrict T * ?++( _Atomic const restrict T * restrict volatile * ), 1201 1202 forall( type T ) _Atomic const restrict T * ?++( _Atomic const restrict T * restrict volatile * ), 944 1203 * ?++( _Atomic const restrict T * _Atomic restrict volatile * ); 945 forall( otype T ) _Atomic const volatile T * ?++( _Atomic const volatile T * restrict volatile * ), 1204 1205 forall( type T ) _Atomic const volatile T * ?++( _Atomic const volatile T * restrict volatile * ), 946 1206 * ?++( _Atomic const volatile T * _Atomic restrict volatile * ); 947 forall( otype T ) _Atomic restrict volatile T * ?++( _Atomic restrict volatile T * restrict volatile * ), 1207 1208 forall( type T ) _Atomic restrict volatile T * ?++( _Atomic restrict volatile T * restrict volatile * ), 948 1209 * ?++( _Atomic restrict volatile T * _Atomic restrict volatile * ); 949 forall( otype T ) const restrict volatile T * ?++( const restrict volatile T * restrict volatile * ), 1210 1211 forall( type T ) const restrict volatile T * ?++( const restrict volatile T * restrict volatile * ), 950 1212 * ?++( const restrict volatile T * _Atomic restrict volatile * ); 951 forall( otype T ) _Atomic const restrict volatile T * ?++( _Atomic const restrict volatile T * restrict volatile * ), 1213 1214 forall( type T ) _Atomic const restrict volatile T * ?++( _Atomic const restrict volatile T * restrict volatile * ), 952 1215 * ?++( _Atomic const restrict volatile T * _Atomic restrict volatile * ); 953 1216 954 _Bool ?--( volatile _Bool * ), ?--( _Atomic volatile _Bool * ); 955 char ?--( volatile char * ), ?--( _Atomic volatile char * ); 956 signed char ?--( volatile signed char * ), ?--( _Atomic volatile signed char * ); 957 unsigned char ?--( volatile signed char * ), ?--( _Atomic volatile signed char * ); 958 short int ?--( volatile short int * ), ?--( _Atomic volatile short int * ); 959 unsigned short int ?--( volatile unsigned short int * ), ?--( _Atomic volatile unsigned short int * ); 960 int ?--( volatile int * ), ?--( _Atomic volatile int * ); 961 unsigned int ?--( volatile unsigned int * ), ?--( _Atomic volatile unsigned int * ); 962 long int ?--( volatile long int * ), ?--( _Atomic volatile long int * ); 963 long unsigned int ?--( volatile long unsigned int * ), ?--( _Atomic volatile long unsigned int * ); 964 long long int ?--( volatile long long int * ), ?--( _Atomic volatile long long int * ); 965 long long unsigned ?--( volatile long long unsigned int * ), ?--( _Atomic volatile long long unsigned int * ); 966 float ?--( volatile float * ), ?--( _Atomic volatile float * ); 967 double ?--( volatile double * ), ?--( _Atomic volatile double * ); 968 long double ?--( volatile long double * ), ?--( _Atomic volatile long double * ); 969 970 forall( otype T ) T * ?--( T * restrict volatile * ), * ?--( T * _Atomic restrict volatile * ); 971 forall( otype T ) _Atomic T * ?--( _Atomic T * restrict volatile * ), * ?--( _Atomic T * _Atomic restrict volatile * ); 972 forall( otype T ) const T * ?--( const T * restrict volatile * ), * ?--( const T * _Atomic restrict volatile * ); 973 forall( otype T ) volatile T * ?--( volatile T * restrict volatile * ), * ?--( volatile T * _Atomic restrict volatile * ); 974 forall( otype T ) restrict T * ?--( restrict T * restrict volatile * ), * ?--( restrict T * _Atomic restrict volatile * ); 975 forall( otype T ) _Atomic const T * ?--( _Atomic const T * restrict volatile * ), 1217 _Bool ?--( volatile _Bool * ), 1218 ?--( _Atomic volatile _Bool * ); 1219 char ?--( volatile char * ), 1220 ?--( _Atomic volatile char * ); 1221 signed char ?--( volatile signed char * ), 1222 ?--( _Atomic volatile signed char * ); 1223 unsigned char ?--( volatile signed char * ), 1224 ?--( _Atomic volatile signed char * ); 1225 short int ?--( volatile short int * ), 1226 ?--( _Atomic volatile short int * ); 1227 unsigned short int ?--( volatile unsigned short int * ), 1228 ?--( _Atomic volatile unsigned short int * ); 1229 int ?--( volatile int * ), 1230 ?--( _Atomic volatile int * ); 1231 unsigned int ?--( volatile unsigned int * ), 1232 ?--( _Atomic volatile unsigned int * ); 1233 long int ?--( volatile long int * ), 1234 ?--( _Atomic volatile long int * ); 1235 long unsigned int ?--( volatile long unsigned int * ), 1236 ?--( _Atomic volatile long unsigned int * ); 1237 long long int ?--( volatile long long int * ), 1238 ?--( _Atomic volatile long long int * ); 1239 long long unsigned ?--( volatile long long unsigned int * ), 1240 ?--( _Atomic volatile long long unsigned int * ); 1241 float ?--( volatile float * ), 1242 ?--( _Atomic volatile float * ); 1243 double ?--( volatile double * ), 1244 ?--( _Atomic volatile double * ); 1245 long double ?--( volatile long double * ), 1246 ?--( _Atomic volatile long double * ); 1247 1248 forall( type T ) T * ?--( T * restrict volatile * ), 1249 * ?--( T * _Atomic restrict volatile * ); 1250 1251 forall( type T ) _Atomic T * ?--( _Atomic T * restrict volatile * ), 1252 * ?--( _Atomic T * _Atomic restrict volatile * ); 1253 1254 forall( type T ) const T * ?--( const T * restrict volatile * ), 1255 * ?--( const T * _Atomic restrict volatile * ); 1256 1257 forall( type T ) volatile T * ?--( volatile T * restrict volatile * ), 1258 * ?--( volatile T * _Atomic restrict volatile * ); 1259 1260 forall( type T ) restrict T * ?--( restrict T * restrict volatile * ), 1261 * ?--( restrict T * _Atomic restrict volatile * ); 1262 1263 forall( type T ) _Atomic const T * ?--( _Atomic const T * restrict volatile * ), 976 1264 * ?--( _Atomic const T * _Atomic restrict volatile * ); 977 forall( otype T ) _Atomic restrict T * ?--( _Atomic restrict T * restrict volatile * ), 1265 1266 forall( type T ) _Atomic restrict T * ?--( _Atomic restrict T * restrict volatile * ), 978 1267 * ?--( _Atomic restrict T * _Atomic restrict volatile * ); 979 forall( otype T ) _Atomic volatile T * ?--( _Atomic volatile T * restrict volatile * ), 1268 1269 forall( type T ) _Atomic volatile T * ?--( _Atomic volatile T * restrict volatile * ), 980 1270 * ?--( _Atomic volatile T * _Atomic restrict volatile * ); 981 forall( otype T ) const restrict T * ?--( const restrict T * restrict volatile * ), 1271 1272 forall( type T ) const restrict T * ?--( const restrict T * restrict volatile * ), 982 1273 * ?--( const restrict T * _Atomic restrict volatile * ); 983 forall( otype T ) const volatile T * ?--( const volatile T * restrict volatile * ), 1274 1275 forall( type T ) const volatile T * ?--( const volatile T * restrict volatile * ), 984 1276 * ?--( const volatile T * _Atomic restrict volatile * ); 985 forall( otype T ) restrict volatile T * ?--( restrict volatile T * restrict volatile * ), 1277 1278 forall( type T ) restrict volatile T * ?--( restrict volatile T * restrict volatile * ), 986 1279 * ?--( restrict volatile T * _Atomic restrict volatile * ); 987 forall( otype T ) _Atomic const restrict T * ?--( _Atomic const restrict T * restrict volatile * ), 1280 1281 forall( type T ) _Atomic const restrict T * ?--( _Atomic const restrict T * restrict volatile * ), 988 1282 * ?--( _Atomic const restrict T * _Atomic restrict volatile * ); 989 forall( otype T ) _Atomic const volatile T * ?--( _Atomic const volatile T * restrict volatile * ), 1283 1284 forall( type T ) _Atomic const volatile T * ?--( _Atomic const volatile T * restrict volatile * ), 990 1285 * ?--( _Atomic const volatile T * _Atomic restrict volatile * ); 991 forall( otype T ) _Atomic restrict volatile T * ?--( _Atomic restrict volatile T * restrict volatile * ), 1286 1287 forall( type T ) _Atomic restrict volatile T * ?--( _Atomic restrict volatile T * restrict volatile * ), 992 1288 * ?--( _Atomic restrict volatile T * _Atomic restrict volatile * ); 993 forall( otype T ) const restrict volatile T * ?--( const restrict volatile T * restrict volatile * ), 1289 1290 forall( type T ) const restrict volatile T * ?--( const restrict volatile T * restrict volatile * ), 994 1291 * ?--( const restrict volatile T * _Atomic restrict volatile * ); 995 forall( otype T ) _Atomic const restrict volatile T * ?--( _Atomic const restrict volatile T * restrict volatile * ), 1292 1293 forall( type T ) _Atomic const restrict volatile T * ?--( _Atomic const restrict volatile T * restrict volatile * ), 996 1294 * ?--( _Atomic const restrict volatile T * _Atomic restrict volatile * ); 997 1295 \end{lstlisting} … … 1010 1308 1011 1309 \begin{rationale} 1012 Note that ``\lstinline$++$'' and ``\lstinline$--$'' are rewritten as function calls that are given a pointer to that operand. (This is true of all operators that modify an operand.) As Hamish Macdonald has pointed out, this forces the modified operand of such expressions to be an lvalue. 1013 This partially enforces the C semantic rule that such operands must be \emph{modifiable} lvalues. 1014 \end{rationale} 1015 1016 \begin{rationale} 1017 In C, a semantic rule requires that pointer operands of increment and decrement be pointers to object types. 1018 Hence, \lstinline$void *$ objects cannot be incremented. 1019 In \CFA, the restriction follows from the use of a \lstinline$type$ parameter in the predefined function definitions, as opposed to \lstinline$dtype$, since only object types can be inferred arguments corresponding to the type parameter \lstinline$T$. 1310 Note that ``\lstinline$++$'' and ``\lstinline$--$'' are rewritten as function calls that are given a 1311 pointer to that operand. (This is true of all operators that modify an operand.) As Hamish Macdonald 1312 has pointed out, this forces the modified operand of such expressions to be an lvalue. This 1313 partially enforces the C semantic rule that such operands must be \emph{modifiable} lvalues. 1314 \end{rationale} 1315 1316 \begin{rationale} 1317 In C, a semantic rule requires that pointer operands of increment and decrement be pointers to 1318 object types. Hence, \lstinline$void *$ objects cannot be incremented. In \CFA, the restriction 1319 follows from the use of a \lstinline$type$ parameter in the predefined function definitions, as 1320 opposed to \lstinline$dtype$, since only object types can be inferred arguments corresponding to the 1321 type parameter \lstinline$T$. 1020 1322 \end{rationale} 1021 1323 1022 1324 \semantics 1023 First, each interpretation of the operand of an increment or decrement expression is considered separately. 1024 For each interpretation that is a bit-field or is declared with the 1025 \lstinline$register$\index{register@{\lstinline$register$}} \index{Itorage-class specifier}, the expression has one valid interpretation, with the type of the operand, and the expression is ambiguous if the operand is. 1026 1027 For the remaining interpretations, the expression is rewritten, and the interpretations of the expression are the interpretations of the corresponding function call. 1028 Finally, all interpretations of the expression produced for the different interpretations of the operand are combined to produce the interpretations of the expression as a whole; where interpretations have compatible result types, the best interpretations are selected in the manner described for function call expressions. 1325 First, each interpretation of the operand of an increment or decrement expression is considered 1326 separately. For each interpretation that is a bit-field or is declared with the 1327 \lstinline$register$\index{register@{\lstinline$register$}} \index{Itorage-class specifier}, the 1328 expression has one valid interpretation, with the type of the operand, and the expression is 1329 ambiguous if the operand is. 1330 1331 For the remaining interpretations, the expression is rewritten, and the interpretations of the 1332 expression are the interpretations of the corresponding function call. Finally, all interpretations 1333 of the expression produced for the different interpretations of the operand are combined to produce 1334 the interpretations of the expression as a whole; where interpretations have compatible result 1335 types, the best interpretations are selected in the manner described for function call expressions. 1029 1336 1030 1337 \examples … … 1039 1346 \lstinline$vs++$ calls the \lstinline$?++$ function with the \lstinline$volatile short *$ parameter. 1040 1347 \lstinline$s++$ does the same, applying the safe conversion from \lstinline$short int *$ to 1041 \lstinline$volatile short int *$. 1042 Note that there is no conversion that adds an \lstinline$_Atomic$ qualifier, so the \lstinline$_Atomic volatile short int$ overloading does not provide a valid interpretation. 1348 \lstinline$volatile short int *$. Note that there is no conversion that adds an \lstinline$_Atomic$ 1349 qualifier, so the \lstinline$_Atomic volatile short int$ overloading does not provide a valid 1350 interpretation. 1043 1351 \end{sloppypar} 1044 1352 1045 There is no safe conversion from \lstinline$const short int *$ to \lstinline$volatile short int *$, and no \lstinline$?++$ function that accepts a \lstinline$const *$ parameter, so \lstinline$cs++$ has no valid interpretations. 1046 1047 The best valid interpretation of \lstinline$as++$ calls the \lstinline$short ?++$ function with the \lstinline$_Atomic volatile short int *$ parameter, applying a safe conversion to add the \lstinline$volatile$ qualifier. 1048 \begin{lstlisting} 1049 char * const restrict volatile * restrict volatile pqpc; 1050 pqpc++ 1051 char * * restrict volatile ppc; 1052 ppc++; 1053 \end{lstlisting} 1054 Since \lstinline$&(pqpc)$ has type \lstinline$char * const restrict volatile * restrict volatile *$, the best valid interpretation of \lstinline$pqpc++$ calls the polymorphic \lstinline$?++$ function with the \lstinline$const restrict volatile T * restrict volatile *$ parameter, inferring \lstinline$T$ to be \lstinline$char *$. 1055 1056 \lstinline$ppc++$ calls the same function, again inferring \lstinline$T$ to be \lstinline$char *$, and using the safe conversions from \lstinline$T$ to \lstinline$T const$ \lstinline$restrict volatile$. 1057 1058 \begin{rationale} 1059 Increment and decrement expressions show up a deficiency of \CFA's type system. 1060 There is no such thing as a pointer to a register object or bit-field\index{deficiencies!pointers to bit-fields}. 1061 Therefore, there is no way to define a function that alters them, and hence no way to define increment and decrement functions for them. 1062 As a result, the semantics of increment and decrement expressions must treat them specially. 1063 This holds true for all of the operators that may modify such objects. 1064 \end{rationale} 1065 1066 \begin{rationale} 1067 The polymorphic overloadings for pointer increment and decrement can be understood by considering increasingly complex types. 1353 There is no safe conversion from \lstinline$const short int *$ to \lstinline$volatile short int *$, 1354 and no \lstinline$?++$ function that accepts a \lstinline$const *$ parameter, so \lstinline$cs++$ 1355 has no valid interpretations. 1356 1357 The best valid interpretation of \lstinline$as++$ calls the \lstinline$short ?++$ function with the 1358 \lstinline$_Atomic volatile short int *$ parameter, applying a safe conversion to add the 1359 \lstinline$volatile$ qualifier. 1360 1361 \begin{lstlisting} 1362 char * const restrict volatile * restrict volatile pqpc; pqpc++ 1363 char * * restrict volatile ppc; ppc++; 1364 \end{lstlisting} 1365 Since \lstinline$&(pqpc)$ has type \lstinline$char * const restrict volatile * restrict volatile *$, 1366 the best valid interpretation of \lstinline$pqpc++$ calls the polymorphic \lstinline$?++$ function 1367 with the \lstinline$const restrict volatile T * restrict volatile *$ parameter, inferring 1368 \lstinline$T$ to be \lstinline$char *$. 1369 1370 \begin{sloppypar} 1371 \lstinline$ppc++$ calls the same function, again inferring \lstinline$T$ to be \lstinline$char *$, 1372 and using the safe conversions from \lstinline$T$ to \lstinline$T const restrict volatile$. 1373 \end{sloppypar} 1374 1375 \begin{rationale} 1376 Increment and decrement expressions show up a deficiency of \CFA's type system. There is no such 1377 thing as a pointer to a register object or bit-field\index{deficiencies!pointers to bit-fields}. 1378 Therefore, there is no way to define a function that alters them, and hence no way to define 1379 increment and decrement functions for them. As a result, the semantics of increment and decrement 1380 expressions must treat them specially. This holds true for all of the operators that may modify 1381 such objects. 1382 \end{rationale} 1383 1384 \begin{rationale} 1385 The polymorphic overloadings for pointer increment and decrement can be understood by considering 1386 increasingly complex types. 1068 1387 \begin{enumerate} 1069 1388 \item 1070 ``\lstinline$char * p; p++;$''. 1071 The argument to \lstinline$?++$ has type \lstinline$char * *$, and the result has type \lstinline$char *$. 1072 The expression would be valid if \lstinline$?++$ were declared by 1073 \begin{lstlisting} 1074 forall( otype T ) T * ?++( T * * ); 1075 \end{lstlisting} with \lstinline$T$ inferred to be \lstinline$char$. 1076 1077 \item 1078 ``\lstinline$char *restrict volatile qp; qp++$''. 1079 The result again has type \lstinline$char *$, but the argument now has type \lstinline$char *restrict volatile *$, so it cannot be passed to the hypothetical function declared in point 1. 1080 Hence the actual predefined function is 1081 \begin{lstlisting} 1082 forall( otype T ) T * ?++( T * restrict volatile * ); 1083 \end{lstlisting} which also accepts a \lstinline$char * *$ argument, because of the safe conversions that add 1084 \lstinline$volatile$ and \lstinline$restrict$ qualifiers. (The parameter is not const-qualified, so constant pointers cannot be incremented.) 1085 1086 \item 1087 ``\lstinline$char *_Atomic ap; ap++$''. 1088 The result again has type \lstinline$char *$, but no safe conversion adds an \lstinline$_Atomic$ qualifier, so the function in point 2 is not applicable. 1089 A separate overloading of \lstinline$?++$ is required. 1090 1091 \item 1092 ``\lstinline$char const volatile * pq; pq++$''. 1093 Here the result has type 1389 ``\lstinline$char * p; p++;$''. The argument to \lstinline$?++$ has type \lstinline$char * *$, and 1390 the result has type \lstinline$char *$. The expression would be valid if \lstinline$?++$ were 1391 declared by 1392 \begin{lstlisting} 1393 forall( type T ) T * ?++( T * * ); 1394 \end{lstlisting} 1395 with \lstinline$T$ inferred to be \lstinline$char$. 1396 1397 \item 1398 ``\lstinline$char *restrict volatile qp; qp++$''. The result again has type \lstinline$char *$, but 1399 the argument now has type \lstinline$char *restrict volatile *$, so it cannot be passed to the 1400 hypothetical function declared in point 1. Hence the actual predefined function is 1401 \begin{lstlisting} 1402 forall( type T ) T * ?++( T * restrict volatile * ); 1403 \end{lstlisting} 1404 which also accepts a \lstinline$char * *$ argument, because of the safe conversions that add 1405 \lstinline$volatile$ and \lstinline$restrict$ qualifiers. (The parameter is not const-qualified, so 1406 constant pointers cannot be incremented.) 1407 1408 \item 1409 ``\lstinline$char *_Atomic ap; ap++$''. The result again has type \lstinline$char *$, but no safe 1410 conversion adds an \lstinline$_Atomic$ qualifier, so the function in point 2 is not applicable. A 1411 separate overloading of \lstinline$?++$ is required. 1412 1413 \item 1414 ``\lstinline$char const volatile * pq; pq++$''. Here the result has type 1094 1415 \lstinline$char const volatile *$, so a new overloading is needed: 1095 1416 \begin{lstlisting} 1096 forall( otype T ) T const volatile * ?++( T const volatile *restrict volatile * ); 1097 \end{lstlisting} 1098 One overloading is needed for each combination of qualifiers in the pointed-at type\index{deficiencies!pointers to qualified types}. 1417 forall( type T ) T const volatile * ?++( T const volatile *restrict volatile * ); 1418 \end{lstlisting} 1419 One overloading is needed for each combination of qualifiers in the pointed-at 1420 type\index{deficiencies!pointers to qualified types}. 1099 1421 1100 1422 \item 1101 ``\lstinline$float *restrict * prp; prp++$''. 1102 The \lstinline$restrict$ qualifier is handled just like \lstinline$const$ and \lstinline$volatile$ in the previous case: 1103 \begin{lstlisting} 1104 forall( otype T ) T restrict * ?++( T restrict *restrict volatile * ); 1105 \end{lstlisting} with \lstinline$T$ inferred to be \lstinline$float *$. 1106 This looks odd, because {\c11} contains a constraint that requires restrict-qualified types to be pointer-to-object types, and \lstinline$T$ is not syntactically a pointer type. \CFA loosens the constraint. 1423 ``\lstinline$float *restrict * prp; prp++$''. The \lstinline$restrict$ qualifier is handled just 1424 like \lstinline$const$ and \lstinline$volatile$ in the previous case: 1425 \begin{lstlisting} 1426 forall( type T ) T restrict * ?++( T restrict *restrict volatile * ); 1427 \end{lstlisting} 1428 with \lstinline$T$ inferred to be \lstinline$float *$. This looks odd, because {\c11} contains a 1429 constraint that requires restrict-qualified types to be pointer-to-object types, and \lstinline$T$ 1430 is not syntactically a pointer type. \CFA loosens the constraint. 1107 1431 \end{enumerate} 1108 1432 \end{rationale} … … 1112 1436 1113 1437 \semantics 1114 A compound literal has one interpretation, with the type given by the \nonterm{type-name} of the compound literal. 1438 A compound literal has one interpretation, with the type given by the \nonterm{type-name} of the 1439 compound literal. 1115 1440 1116 1441 … … 1130 1455 \rewriterules 1131 1456 \begin{lstlisting} 1132 *a @\rewrite@ *?( a) @\use{*?}@1133 +a @\rewrite@ +?( a) @\use{+?}@1134 -a @\rewrite@ -?( a) @\use{-?}@1135 ~a @\rewrite@ ~?( a) @\use{~?}@1136 !a @\rewrite@ !?( a) @\use{"!?}@1137 ++a @\rewrite@ ++?(&( a)) @\use{++?}@1138 --a @\rewrite@ --?(&( a)) @\use{--?}@1457 *a @\rewrite@ *?(a) @\use{*?}@ 1458 +a @\rewrite@ +?(a) @\use{+?}@ 1459 -a @\rewrite@ -?(a) @\use{-?}@ 1460 ~a @\rewrite@ ~?(a) @\use{~?}@ 1461 !a @\rewrite@ !?(a) @\use{"!?}@ 1462 ++a @\rewrite@ ++?(&(a)) @\use{++?}@ 1463 --a @\rewrite@ --?(&(a)) @\use{--?}@ 1139 1464 \end{lstlisting} 1140 1465 … … 1144 1469 \predefined 1145 1470 \begin{lstlisting} 1146 _Bool ++?( volatile _Bool * ), ++?( _Atomic volatile _Bool * ); 1147 char ++?( volatile char * ), ++?( _Atomic volatile char * ); 1148 signed char ++?( volatile signed char * ), ++?( _Atomic volatile signed char * ); 1149 unsigned char ++?( volatile signed char * ), ++?( _Atomic volatile signed char * ); 1150 short int ++?( volatile short int * ), ++?( _Atomic volatile short int * ); 1151 unsigned short int ++?( volatile unsigned short int * ), ++?( _Atomic volatile unsigned short int * ); 1152 int ++?( volatile int * ), ++?( _Atomic volatile int * ); 1153 unsigned int ++?( volatile unsigned int * ), ++?( _Atomic volatile unsigned int * ); 1154 long int ++?( volatile long int * ), ++?( _Atomic volatile long int * ); 1155 long unsigned int ++?( volatile long unsigned int * ), ++?( _Atomic volatile long unsigned int * ); 1156 long long int ++?( volatile long long int * ), ++?( _Atomic volatile long long int * ); 1157 long long unsigned ++?( volatile long long unsigned int * ), ++?( _Atomic volatile long long unsigned int * ); 1158 float ++?( volatile float * ), ++?( _Atomic volatile float * ); 1159 double ++?( volatile double * ), ++?( _Atomic volatile double * ); 1160 long double ++?( volatile long double * ), ++?( _Atomic volatile long double * ); 1161 1162 forall( otype T ) T * ++?( T * restrict volatile * ), * ++?( T * _Atomic restrict volatile * ); 1163 forall( otype T ) _Atomic T * ++?( _Atomic T * restrict volatile * ), * ++?( _Atomic T * _Atomic restrict volatile * ); 1164 forall( otype T ) const T * ++?( const T * restrict volatile * ), * ++?( const T * _Atomic restrict volatile * ); 1165 forall( otype T ) volatile T * ++?( volatile T * restrict volatile * ), * ++?( volatile T * _Atomic restrict volatile * ); 1166 forall( otype T ) restrict T * ++?( restrict T * restrict volatile * ), * ++?( restrict T * _Atomic restrict volatile * ); 1167 forall( otype T ) _Atomic const T * ++?( _Atomic const T * restrict volatile * ), 1471 _Bool ++?( volatile _Bool * ), 1472 ++?( _Atomic volatile _Bool * ); 1473 char ++?( volatile char * ), 1474 ++?( _Atomic volatile char * ); 1475 signed char ++?( volatile signed char * ), 1476 ++?( _Atomic volatile signed char * ); 1477 unsigned char ++?( volatile signed char * ), 1478 ++?( _Atomic volatile signed char * ); 1479 short int ++?( volatile short int * ), 1480 ++?( _Atomic volatile short int * ); 1481 unsigned short int ++?( volatile unsigned short int * ), 1482 ++?( _Atomic volatile unsigned short int * ); 1483 int ++?( volatile int * ), 1484 ++?( _Atomic volatile int * ); 1485 unsigned int ++?( volatile unsigned int * ), 1486 ++?( _Atomic volatile unsigned int * ); 1487 long int ++?( volatile long int * ), 1488 ++?( _Atomic volatile long int * ); 1489 long unsigned int ++?( volatile long unsigned int * ), 1490 ++?( _Atomic volatile long unsigned int * ); 1491 long long int ++?( volatile long long int * ), 1492 ++?( _Atomic volatile long long int * ); 1493 long long unsigned ++?( volatile long long unsigned int * ), 1494 ++?( _Atomic volatile long long unsigned int * ); 1495 float ++?( volatile float * ), 1496 ++?( _Atomic volatile float * ); 1497 double ++?( volatile double * ), 1498 ++?( _Atomic volatile double * ); 1499 long double ++?( volatile long double * ), 1500 ++?( _Atomic volatile long double * ); 1501 1502 forall( type T ) T * ++?( T * restrict volatile * ), 1503 * ++?( T * _Atomic restrict volatile * ); 1504 1505 forall( type T ) _Atomic T * ++?( _Atomic T * restrict volatile * ), 1506 * ++?( _Atomic T * _Atomic restrict volatile * ); 1507 1508 forall( type T ) const T * ++?( const T * restrict volatile * ), 1509 * ++?( const T * _Atomic restrict volatile * ); 1510 1511 forall( type T ) volatile T * ++?( volatile T * restrict volatile * ), 1512 * ++?( volatile T * _Atomic restrict volatile * ); 1513 1514 forall( type T ) restrict T * ++?( restrict T * restrict volatile * ), 1515 * ++?( restrict T * _Atomic restrict volatile * ); 1516 1517 forall( type T ) _Atomic const T * ++?( _Atomic const T * restrict volatile * ), 1168 1518 * ++?( _Atomic const T * _Atomic restrict volatile * ); 1169 forall( otype T ) _Atomic volatile T * ++?( _Atomic volatile T * restrict volatile * ), 1519 1520 forall( type T ) _Atomic volatile T * ++?( _Atomic volatile T * restrict volatile * ), 1170 1521 * ++?( _Atomic volatile T * _Atomic restrict volatile * ); 1171 forall( otype T ) _Atomic restrict T * ++?( _Atomic restrict T * restrict volatile * ), 1522 1523 forall( type T ) _Atomic restrict T * ++?( _Atomic restrict T * restrict volatile * ), 1172 1524 * ++?( _Atomic restrict T * _Atomic restrict volatile * ); 1173 forall( otype T ) const volatile T * ++?( const volatile T * restrict volatile * ), 1525 1526 forall( type T ) const volatile T * ++?( const volatile T * restrict volatile * ), 1174 1527 * ++?( const volatile T * _Atomic restrict volatile * ); 1175 forall( otype T ) const restrict T * ++?( const restrict T * restrict volatile * ), 1528 1529 forall( type T ) const restrict T * ++?( const restrict T * restrict volatile * ), 1176 1530 * ++?( const restrict T * _Atomic restrict volatile * ); 1177 forall( otype T ) restrict volatile T * ++?( restrict volatile T * restrict volatile * ), 1531 1532 forall( type T ) restrict volatile T * ++?( restrict volatile T * restrict volatile * ), 1178 1533 * ++?( restrict volatile T * _Atomic restrict volatile * ); 1179 forall( otype T ) _Atomic const volatile T * ++?( _Atomic const volatile T * restrict volatile * ), 1534 1535 forall( type T ) _Atomic const volatile T * ++?( _Atomic const volatile T * restrict volatile * ), 1180 1536 * ++?( _Atomic const volatile T * _Atomic restrict volatile * ); 1181 forall( otype T ) _Atomic const restrict T * ++?( _Atomic const restrict T * restrict volatile * ), 1537 1538 forall( type T ) _Atomic const restrict T * ++?( _Atomic const restrict T * restrict volatile * ), 1182 1539 * ++?( _Atomic const restrict T * _Atomic restrict volatile * ); 1183 forall( otype T ) _Atomic restrict volatile T * ++?( _Atomic restrict volatile T * restrict volatile * ), 1540 1541 forall( type T ) _Atomic restrict volatile T * ++?( _Atomic restrict volatile T * restrict volatile * ), 1184 1542 * ++?( _Atomic restrict volatile T * _Atomic restrict volatile * ); 1185 forall( otype T ) const restrict volatile T * ++?( const restrict volatile T * restrict volatile * ), 1543 1544 forall( type T ) const restrict volatile T * ++?( const restrict volatile T * restrict volatile * ), 1186 1545 * ++?( const restrict volatile T * _Atomic restrict volatile * ); 1187 forall( otype T ) _Atomic const restrict volatile T * ++?( _Atomic const restrict volatile T * restrict volatile * ), 1546 1547 forall( type T ) _Atomic const restrict volatile T * ++?( _Atomic const restrict volatile T * restrict volatile * ), 1188 1548 * ++?( _Atomic const restrict volatile T * _Atomic restrict volatile * ); 1189 1549 1190 _Bool --?( volatile _Bool * ), --?( _Atomic volatile _Bool * ); 1191 char --?( volatile char * ), --?( _Atomic volatile char * ); 1192 signed char --?( volatile signed char * ), --?( _Atomic volatile signed char * ); 1193 unsigned char --?( volatile signed char * ), --?( _Atomic volatile signed char * ); 1194 short int --?( volatile short int * ), --?( _Atomic volatile short int * ); 1195 unsigned short int --?( volatile unsigned short int * ), --?( _Atomic volatile unsigned short int * ); 1196 int --?( volatile int * ), --?( _Atomic volatile int * ); 1197 unsigned int --?( volatile unsigned int * ), --?( _Atomic volatile unsigned int * ); 1198 long int --?( volatile long int * ), --?( _Atomic volatile long int * ); 1199 long unsigned int --?( volatile long unsigned int * ), --?( _Atomic volatile long unsigned int * ); 1200 long long int --?( volatile long long int * ), --?( _Atomic volatile long long int * ); 1201 long long unsigned --?( volatile long long unsigned int * ), --?( _Atomic volatile long long unsigned int * ); 1202 float --?( volatile float * ), --?( _Atomic volatile float * ); 1203 double --?( volatile double * ), --?( _Atomic volatile double * ); 1204 long double --?( volatile long double * ), --?( _Atomic volatile long double * ); 1205 1206 forall( otype T ) T * --?( T * restrict volatile * ), * --?( T * _Atomic restrict volatile * ); 1207 forall( otype T ) _Atomic T * --?( _Atomic T * restrict volatile * ), * --?( _Atomic T * _Atomic restrict volatile * ); 1208 forall( otype T ) const T * --?( const T * restrict volatile * ), * --?( const T * _Atomic restrict volatile * ); 1209 forall( otype T ) volatile T * --?( volatile T * restrict volatile * ), * --?( volatile T * _Atomic restrict volatile * ); 1210 forall( otype T ) restrict T * --?( restrict T * restrict volatile * ), * --?( restrict T * _Atomic restrict volatile * ); 1211 forall( otype T ) _Atomic const T * --?( _Atomic const T * restrict volatile * ), 1550 _Bool --?( volatile _Bool * ), 1551 --?( _Atomic volatile _Bool * ); 1552 char --?( volatile char * ), 1553 --?( _Atomic volatile char * ); 1554 signed char --?( volatile signed char * ), 1555 --?( _Atomic volatile signed char * ); 1556 unsigned char --?( volatile signed char * ), 1557 --?( _Atomic volatile signed char * ); 1558 short int --?( volatile short int * ), 1559 --?( _Atomic volatile short int * ); 1560 unsigned short int --?( volatile unsigned short int * ), 1561 --?( _Atomic volatile unsigned short int * ); 1562 int --?( volatile int * ), 1563 --?( _Atomic volatile int * ); 1564 unsigned int --?( volatile unsigned int * ), 1565 --?( _Atomic volatile unsigned int * ); 1566 long int --?( volatile long int * ), 1567 --?( _Atomic volatile long int * ); 1568 long unsigned int --?( volatile long unsigned int * ), 1569 --?( _Atomic volatile long unsigned int * ); 1570 long long int --?( volatile long long int * ), 1571 --?( _Atomic volatile long long int * ); 1572 long long unsigned --?( volatile long long unsigned int * ), 1573 --?( _Atomic volatile long long unsigned int * ); 1574 float --?( volatile float * ), 1575 --?( _Atomic volatile float * ); 1576 double --?( volatile double * ), 1577 --?( _Atomic volatile double * ); 1578 long double --?( volatile long double * ), 1579 --?( _Atomic volatile long double * ); 1580 1581 forall( type T ) T * --?( T * restrict volatile * ), 1582 * --?( T * _Atomic restrict volatile * ); 1583 1584 forall( type T ) _Atomic T * --?( _Atomic T * restrict volatile * ), 1585 * --?( _Atomic T * _Atomic restrict volatile * ); 1586 1587 forall( type T ) const T * --?( const T * restrict volatile * ), 1588 * --?( const T * _Atomic restrict volatile * ); 1589 1590 forall( type T ) volatile T * --?( volatile T * restrict volatile * ), 1591 * --?( volatile T * _Atomic restrict volatile * ); 1592 1593 forall( type T ) restrict T * --?( restrict T * restrict volatile * ), 1594 * --?( restrict T * _Atomic restrict volatile * ); 1595 1596 forall( type T ) _Atomic const T * --?( _Atomic const T * restrict volatile * ), 1212 1597 * --?( _Atomic const T * _Atomic restrict volatile * ); 1213 forall( otype T ) _Atomic volatile T * --?( _Atomic volatile T * restrict volatile * ), 1598 1599 forall( type T ) _Atomic volatile T * --?( _Atomic volatile T * restrict volatile * ), 1214 1600 * --?( _Atomic volatile T * _Atomic restrict volatile * ); 1215 forall( otype T ) _Atomic restrict T * --?( _Atomic restrict T * restrict volatile * ), 1601 1602 forall( type T ) _Atomic restrict T * --?( _Atomic restrict T * restrict volatile * ), 1216 1603 * --?( _Atomic restrict T * _Atomic restrict volatile * ); 1217 forall( otype T ) const volatile T * --?( const volatile T * restrict volatile * ), 1604 1605 forall( type T ) const volatile T * --?( const volatile T * restrict volatile * ), 1218 1606 * --?( const volatile T * _Atomic restrict volatile * ); 1219 forall( otype T ) const restrict T * --?( const restrict T * restrict volatile * ), 1607 1608 forall( type T ) const restrict T * --?( const restrict T * restrict volatile * ), 1220 1609 * --?( const restrict T * _Atomic restrict volatile * ); 1221 forall( otype T ) restrict volatile T * --?( restrict volatile T * restrict volatile * ), 1610 1611 forall( type T ) restrict volatile T * --?( restrict volatile T * restrict volatile * ), 1222 1612 * --?( restrict volatile T * _Atomic restrict volatile * ); 1223 forall( otype T ) _Atomic const volatile T * --?( _Atomic const volatile T * restrict volatile * ), 1613 1614 forall( type T ) _Atomic const volatile T * --?( _Atomic const volatile T * restrict volatile * ), 1224 1615 * --?( _Atomic const volatile T * _Atomic restrict volatile * ); 1225 forall( otype T ) _Atomic const restrict T * --?( _Atomic const restrict T * restrict volatile * ), 1616 1617 forall( type T ) _Atomic const restrict T * --?( _Atomic const restrict T * restrict volatile * ), 1226 1618 * --?( _Atomic const restrict T * _Atomic restrict volatile * ); 1227 forall( otype T ) _Atomic restrict volatile T * --?( _Atomic restrict volatile T * restrict volatile * ), 1619 1620 forall( type T ) _Atomic restrict volatile T * --?( _Atomic restrict volatile T * restrict volatile * ), 1228 1621 * --?( _Atomic restrict volatile T * _Atomic restrict volatile * ); 1229 forall( otype T ) const restrict volatile T * --?( const restrict volatile T * restrict volatile * ), 1622 1623 forall( type T ) const restrict volatile T * --?( const restrict volatile T * restrict volatile * ), 1230 1624 * --?( const restrict volatile T * _Atomic restrict volatile * ); 1231 forall( otype T ) _Atomic const restrict volatile T * --?( _Atomic const restrict volatile T * restrict volatile * ), 1625 1626 forall( type T ) _Atomic const restrict volatile T * --?( _Atomic const restrict volatile T * restrict volatile * ), 1232 1627 * --?( _Atomic const restrict volatile T * _Atomic restrict volatile * ); 1233 1628 \end{lstlisting} … … 1250 1645 1251 1646 \semantics 1252 The interpretations of prefix increment and decrement expressions are determined in the same way as the interpretations of postfix increment and decrement expressions. 1647 The interpretations of prefix increment and decrement expressions are 1648 determined in the same way as the interpretations of postfix increment and 1649 decrement expressions. 1253 1650 1254 1651 … … 1257 1654 \predefined 1258 1655 \begin{lstlisting} 1259 forall( otype T ) lvalue T *?( T * ); 1260 forall( otype T ) _Atomic lvalue T *?( _Atomic T * ); 1261 forall( otype T ) const lvalue T *?( const T * ); 1262 forall( otype T ) volatile lvalue T *?( volatile T * ); 1263 forall( otype T ) restrict lvalue T *?( restrict T * ); 1264 forall( otype T ) _Atomic const lvalue T *?( _Atomic const T * ); 1265 forall( otype T ) _Atomic volatile lvalue T *?( _Atomic volatile T * ); 1266 forall( otype T ) _Atomic restrict lvalue T *?( _Atomic restrict T * ); 1267 forall( otype T ) const volatile lvalue T *?( const volatile T * ); 1268 forall( otype T ) const restrict lvalue T *?( const restrict T * ); 1269 forall( otype T ) restrict volatile lvalue T *?( restrict volatile T * ); 1270 forall( otype T ) _Atomic const volatile lvalue T *?( _Atomic const volatile T * ); 1271 forall( otype T ) _Atomic const restrict lvalue T *?( _Atomic const restrict T * ); 1272 forall( otype T ) _Atomic restrict volatile lvalue T *?( _Atomic restrict volatile T * ); 1273 forall( otype T ) const restrict volatile lvalue T *?( const restrict volatile T * ); 1274 forall( otype T ) _Atomic const restrict volatile lvalue T *?( _Atomic const restrict volatile T * ); 1656 forall( type T ) lvalue T *?( T * ); 1657 forall( type T ) _Atomic lvalue T *?( _Atomic T * ); 1658 forall( type T ) const lvalue T *?( const T * ); 1659 forall( type T ) volatile lvalue T *?( volatile T * ); 1660 forall( type T ) restrict lvalue T *?( restrict T * ); 1661 forall( type T ) _Atomic const lvalue T *?( _Atomic const T * ); 1662 forall( type T ) _Atomic volatile lvalue T *?( _Atomic volatile T * ); 1663 forall( type T ) _Atomic restrict lvalue T *?( _Atomic restrict T * ); 1664 forall( type T ) const volatile lvalue T *?( const volatile T * ); 1665 forall( type T ) const restrict lvalue T *?( const restrict T * ); 1666 forall( type T ) restrict volatile lvalue T *?( restrict volatile T * ); 1667 forall( type T ) _Atomic const volatile lvalue T *?( _Atomic const volatile T * ); 1668 forall( type T ) _Atomic const restrict lvalue T *?( _Atomic const restrict T * ); 1669 forall( type T ) _Atomic restrict volatile lvalue T *?( _Atomic restrict volatile T * ); 1670 forall( type T ) const restrict volatile lvalue T *?( const restrict volatile T * ); 1671 forall( type T ) _Atomic const restrict volatile lvalue T *?( _Atomic const restrict volatile T * ); 1672 1275 1673 forall( ftype FT ) FT *?( FT * ); 1276 1674 \end{lstlisting} … … 1284 1682 \lstinline$T$ is the type of the operand. 1285 1683 1286 The interpretations of an indirection expression are the interpretations of the corresponding function call. 1684 The interpretations of an indirection expression are the interpretations of the corresponding 1685 function call. 1287 1686 1288 1687 … … 1291 1690 \predefined 1292 1691 \begin{lstlisting} 1293 int +?( int ), -?( int ), ~?( int ); 1294 unsigned int +?( unsigned int ), -?( unsigned int ), ~?( unsigned int ); 1295 long int +?( long int ), -?( long int ), ~?( long int ); 1296 long unsigned int +?( long unsigned int ), -?( long unsigned int ), ~?( long unsigned int ); 1297 long long int +?( long long int ), -?( long long int ), ~?( long long int ); 1298 long long unsigned int +?( long long unsigned int ), -?( long long unsigned int ), ~?( long long unsigned int ); 1299 float +?( float ), -?( float ); 1300 double +?( double ), -?( double ); 1301 long double +?( long double ), -?( long double ); 1302 _Complex float +?( _Complex float ), -?( _Complex float ); 1303 _Complex double +?( _Complex double ), -?( _Complex double ); 1304 _Complex long double +?( _Complex long double ), -?( _Complex long double ); 1305 int !?( int ), !?( unsigned int ), !?( long ), !?( long unsigned int ), 1306 !?( long long int ), !?( long long unsigned int ), 1307 !?( float ), !?( double ), !?( long double ), 1308 !?( _Complex float ), !?( _Complex double ), !?( _Complex long double ); 1692 int 1693 +?( int ), 1694 -?( int ), 1695 ~?( int ); 1696 unsigned int 1697 +?( unsigned int ), 1698 -?( unsigned int ), 1699 ~?( unsigned int ); 1700 long int 1701 +?( long int ), 1702 -?( long int ), 1703 ~?( long int ); 1704 long unsigned int 1705 +?( long unsigned int ), 1706 -?( long unsigned int ), 1707 ~?( long unsigned int ); 1708 long long int 1709 +?( long long int ), 1710 -?( long long int ), 1711 ~?( long long int ); 1712 long long unsigned int 1713 +?( long long unsigned int ), 1714 -?( long long unsigned int ), 1715 ~?( long long unsigned int ); 1716 float 1717 +?( float ), 1718 -?( float ); 1719 double 1720 +?( double ), 1721 -?( double ); 1722 long double 1723 +?( long double ), 1724 -?( long double ); 1725 _Complex float 1726 +?( _Complex float ), 1727 -?( _Complex float ); 1728 _Complex double 1729 +?( _Complex double ), 1730 -?( _Complex double ); 1731 _Complex long double 1732 +?( _Complex long double ), 1733 -?( _Complex long double ); 1734 1735 int !?( int ), 1736 !?( unsigned int ), 1737 !?( long ), 1738 !?( long unsigned int ), 1739 !?( long long int ), 1740 !?( long long unsigned int ), 1741 !?( float ), 1742 !?( double ), 1743 !?( long double ), 1744 !?( _Complex float ), 1745 !?( _Complex double ), 1746 !?( _Complex long double ); 1747 1309 1748 forall( dtype DT ) int !?( const restrict volatile DT * ); 1310 1749 forall( dtype DT ) int !?( _Atomic const restrict volatile DT * ); 1311 1750 forall( ftype FT ) int !?( FT * ); 1312 1751 \end{lstlisting} 1313 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 1752 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the 1753 rank of \lstinline$int$ there exist 1314 1754 % Don't use predefined: keep this out of prelude.cf. 1315 1755 \begin{lstlisting} … … 1319 1759 1320 1760 \semantics 1321 The interpretations of a unary arithmetic expression are the interpretations of the corresponding function call. 1761 The interpretations of a unary arithmetic expression are the interpretations of the corresponding 1762 function call. 1322 1763 1323 1764 \examples … … 1325 1766 long int li; 1326 1767 void eat_double( double );@\use{eat_double}@ 1327 eat_double(-li ); // @\rewrite@ eat_double( -?( li ) ); 1768 1769 eat_double(-li ); // @\rewrite@ eat_double( -?( li ) ); 1328 1770 \end{lstlisting} 1329 1771 The valid interpretations of ``\lstinline$-li$'' (assuming no extended integer types exist) are 1330 1772 \begin{center} 1331 \begin{tabular}{llc} interpretation & result type & expression conversion cost \\ 1773 \begin{tabular}{llc} 1774 interpretation & result type & expression conversion cost \\ 1332 1775 \hline 1333 1776 \lstinline$-?( (int)li )$ & \lstinline$int$ & (unsafe) \\ … … 1345 1788 \end{tabular} 1346 1789 \end{center} 1347 The valid interpretations of the \lstinline$eat_double$ call, with the cost of the argument conversion and the cost of the entire expression, are 1790 The valid interpretations of the \lstinline$eat_double$ call, with the cost of the argument 1791 conversion and the cost of the entire expression, are 1348 1792 \begin{center} 1349 \begin{tabular}{lcc} interpretation & argument cost & expression cost \\ 1793 \begin{tabular}{lcc} 1794 interpretation & argument cost & expression cost \\ 1350 1795 \hline 1351 1796 \lstinline$eat_double( (double)-?( (int)li) )$ & 7 & (unsafe) \\ … … 1363 1808 \end{tabular} 1364 1809 \end{center} 1365 Each has result type \lstinline$void$, so the best must be selected. 1366 The interpretations involving unsafe conversions are discarded. 1367 The remainder have equal expression conversion costs, so the 1810 Each has result type \lstinline$void$, so the best must be selected. The interpretations involving 1811 unsafe conversions are discarded. The remainder have equal expression conversion costs, so the 1368 1812 ``highest argument conversion cost'' rule is invoked, and the chosen interpretation is 1369 1813 \lstinline$eat_double( (double)-?(li) )$. … … 1376 1820 \lstinline$dtype$, or \lstinline$ftype$. 1377 1821 1378 When the \lstinline$sizeof$\use{sizeof} operator is applied to an expression, the expression shall have exactly one \Index{interpretation}\index{ambiguous interpretation}, which shall be unambiguous. \semantics A \lstinline$sizeof$ or \lstinline$_Alignof$ expression has one interpretation, of type \lstinline$size_t$. 1822 When the \lstinline$sizeof$\use{sizeof} operator is applied to an expression, the expression shall 1823 have exactly one \Index{interpretation}\index{ambiguous interpretation}, which shall 1824 be unambiguous. \semantics A \lstinline$sizeof$ or \lstinline$_Alignof$ expression has one 1825 interpretation, of type \lstinline$size_t$. 1379 1826 1380 1827 When \lstinline$sizeof$ is applied to an identifier declared by a \nonterm{type-declaration} or a 1381 \nonterm{type-parameter}, it yields the size in bytes of the type that implements the operand. 1382 When the operand is an opaque type or an inferred type parameter\index{inferred parameter}, the expression is not a constant expression. 1828 \nonterm{type-parameter}, it yields the size in bytes of the type that implements the operand. When 1829 the operand is an opaque type or an inferred type parameter\index{inferred parameter}, the 1830 expression is not a constant expression. 1383 1831 1384 1832 When \lstinline$_Alignof$ is applied to an identifier declared by a \nonterm{type-declaration} or a 1385 \nonterm{type-parameter}, it yields the alignment requirement of the type that implements the operand. 1386 When the operand is an opaque type or an inferred type parameter\index{inferred parameter}, the expression is not a constant expression. 1387 \begin{rationale} 1388 \begin{lstlisting} 1389 otype Pair = struct { int first, second; }; 1833 \nonterm{type-parameter}, it yields the alignment requirement of the type that implements the 1834 operand. When the operand is an opaque type or an inferred type parameter\index{inferred 1835 parameter}, the expression is not a constant expression. 1836 \begin{rationale} 1837 \begin{lstlisting} 1838 type Pair = struct { int first, second; }; 1390 1839 size_t p_size = sizeof(Pair); // constant expression 1391 extern otype Rational;@\use{Rational}@ 1840 1841 extern type Rational;@\use{Rational}@ 1392 1842 size_t c_size = sizeof(Rational); // non-constant expression 1843 1393 1844 forall(type T) T f(T p1, T p2) { 1394 1845 size_t t_size = sizeof(T); // non-constant expression … … 1396 1847 } 1397 1848 \end{lstlisting} 1398 ``\lstinline$sizeof Rational$'', although not statically known, is fixed. 1399 Within \lstinline$f()$, 1849 ``\lstinline$sizeof Rational$'', although not statically known, is fixed. Within \lstinline$f()$, 1400 1850 ``\lstinline$sizeof(T)$'' is fixed for each call of \lstinline$f()$, but may vary from call to call. 1401 1851 \end{rationale} … … 1417 1867 1418 1868 In a \Index{cast expression} ``\lstinline$($\nonterm{type-name}\lstinline$)e$'', if 1419 \nonterm{type-name} is the type of an interpretation of \lstinline$e$, then that interpretation is the only interpretation of the cast expression; 1420 otherwise, \lstinline$e$ shall have some interpretation that can be converted to \nonterm{type-name}, and the interpretation of the cast expression is the cast of the interpretation that can be converted at the lowest cost. 1421 The cast expression's interpretation is ambiguous\index{ambiguous interpretation} if more than one interpretation can be converted at the lowest cost or if the selected interpretation is ambiguous. 1422 1423 \begin{rationale} 1424 Casts can be used to eliminate ambiguity in expressions by selecting interpretations of subexpressions, and to specialize polymorphic functions and values. 1869 \nonterm{type-name} is the type of an interpretation of \lstinline$e$, then that interpretation is 1870 the only interpretation of the cast expression; otherwise, \lstinline$e$ shall have some 1871 interpretation that can be converted to \nonterm{type-name}, and the interpretation of the cast 1872 expression is the cast of the interpretation that can be converted at the lowest cost. The cast 1873 expression's interpretation is ambiguous\index{ambiguous interpretation} if more than one 1874 interpretation can be converted at the lowest cost or if the selected interpretation is ambiguous. 1875 1876 \begin{rationale} 1877 Casts can be used to eliminate ambiguity in expressions by selecting interpretations of 1878 subexpressions, and to specialize polymorphic functions and values. 1425 1879 \end{rationale} 1426 1880 … … 1445 1899 \predefined 1446 1900 \begin{lstlisting} 1447 int?*?( int, int ), ?/?( int, int ), ?%?( int, int ); 1448 unsigned int?*?( unsigned int, unsigned int ), ?/?( unsigned int, unsigned int ), ?%?( unsigned int, unsigned int ); 1449 long int?*?( long int, long int ), ?/?( long, long ), ?%?( long, long ); 1901 int?*?( int, int ), 1902 ?/?( int, int ), 1903 ?%?( int, int ); 1904 unsigned int?*?( unsigned int, unsigned int ), 1905 ?/?( unsigned int, unsigned int ), 1906 ?%?( unsigned int, unsigned int ); 1907 long int?*?( long int, long int ), 1908 ?/?( long, long ), 1909 ?%?( long, long ); 1450 1910 long unsigned int?*?( long unsigned int, long unsigned int ), 1451 ?/?( long unsigned int, long unsigned int ), ?%?( long unsigned int, long unsigned int ); 1452 long long int?*?( long long int, long long int ), ?/?( long long int, long long int ), 1911 ?/?( long unsigned int, long unsigned int ), 1912 ?%?( long unsigned int, long unsigned int ); 1913 long long int?*?( long long int, long long int ), 1914 ?/?( long long int, long long int ), 1453 1915 ?%?( long long int, long long int ); 1454 1916 long long unsigned int ?*?( long long unsigned int, long long unsigned int ), 1455 ?/?( long long unsigned int, long long unsigned int ), ?%?( long long unsigned int, long long unsigned int ); 1456 float?*?( float, float ), ?/?( float, float ); 1457 double?*?( double, double ), ?/?( double, double ); 1458 long double?*?( long double, long double ), ?/?( long double, long double ); 1459 _Complex float?*?( float, _Complex float ), ?/?( float, _Complex float ), 1460 ?*?( _Complex float, float ), ?/?( _Complex float, float ), 1461 ?*?( _Complex float, _Complex float ), ?/?( _Complex float, _Complex float ); 1462 _Complex double?*?( double, _Complex double ), ?/?( double, _Complex double ), 1463 ?*?( _Complex double, double ), ?/?( _Complex double, double ), 1464 ?*?( _Complex double, _Complex double ), ?/?( _Complex double, _Complex double ); 1465 _Complex long double?*?( long double, _Complex long double ), ?/?( long double, _Complex long double ), 1466 ?*?( _Complex long double, long double ), ?/?( _Complex long double, long double ), 1467 ?*?( _Complex long double, _Complex long double ), ?/?( _Complex long double, _Complex long double ); 1468 \end{lstlisting} 1469 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 1917 ?/?( long long unsigned int, long long unsigned int ), 1918 ?%?( long long unsigned int, long long unsigned int ); 1919 float?*?( float, float ), 1920 ?/?( float, float ); 1921 double?*?( double, double ), 1922 ?/?( double, double ); 1923 long double?*?( long double, long double ), 1924 ?/?( long double, long double ); 1925 _Complex float?*?( float, _Complex float ), 1926 ?/?( float, _Complex float ), 1927 ?*?( _Complex float, float ), 1928 ?/?( _Complex float, float ), 1929 ?*?( _Complex float, _Complex float ), 1930 ?/?( _Complex float, _Complex float ); 1931 _Complex double?*?( double, _Complex double ), 1932 ?/?( double, _Complex double ), 1933 ?*?( _Complex double, double ), 1934 ?/?( _Complex double, double ), 1935 ?*?( _Complex double, _Complex double ), 1936 ?/?( _Complex double, _Complex double ); 1937 _Complex long double?*?( long double, _Complex long double ), 1938 ?/?( long double, _Complex long double ), 1939 ?*?( _Complex long double, long double ), 1940 ?/?( _Complex long double, long double ), 1941 ?*?( _Complex long double, _Complex long double ), 1942 ?/?( _Complex long double, _Complex long double ); 1943 \end{lstlisting} 1944 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the 1945 rank of \lstinline$int$ there exist 1470 1946 % Don't use predefined: keep this out of prelude.cf. 1471 1947 \begin{lstlisting} … … 1475 1951 \begin{rationale} 1476 1952 {\c11} does not include conversions from the \Index{real type}s to \Index{complex type}s in the 1477 \Index{usual arithmetic conversion}s. Instead it specifies conversion of the result of binary operations on arguments from mixed type domains. \CFA's predefined operators match that pattern. 1953 \Index{usual arithmetic conversion}s. Instead it specifies conversion of the result of binary 1954 operations on arguments from mixed type domains. \CFA's predefined operators match that pattern. 1478 1955 \end{rationale} 1479 1956 1480 1957 \semantics 1481 The interpretations of multiplicative expressions are the interpretations of the corresponding function call. 1958 The interpretations of multiplicative expressions are the interpretations of the corresponding 1959 function call. 1482 1960 1483 1961 \examples … … 1488 1966 eat_double( li % i ); 1489 1967 \end{lstlisting} 1490 ``\lstinline$li % i$'' is rewritten as ``\lstinline$?%?(li, i )$''. 1491 The valid interpretations of \lstinline$?%?(li, i )$, the cost\index{conversion cost} of converting their arguments, and the cost of converting the result to \lstinline$double$ (assuming no extended integer types are present ) are 1968 ``\lstinline$li % i$'' is rewritten as ``\lstinline$?%?(li, i )$''. The valid interpretations 1969 of \lstinline$?%?(li, i )$, the cost\index{conversion cost} of converting their arguments, and 1970 the cost of converting the result to \lstinline$double$ (assuming no extended integer types are 1971 present ) are 1492 1972 \begin{center} 1493 \begin{tabular}{lcc} interpretation & argument cost & result cost \\ 1973 \begin{tabular}{lcc} 1974 interpretation & argument cost & result cost \\ 1494 1975 \hline 1495 1976 \lstinline$ ?%?( (int)li, i )$ & (unsafe) & 6 \\ 1496 1977 \lstinline$ ?%?( (unsigned)li,(unsigned)i )$ & (unsafe) & 5 \\ 1497 \lstinline$ ?%?( li,(long)i )$ & 1 & 4 \\1978 \lstinline$ ?%?(li,(long)i )$ & 1 & 4 \\ 1498 1979 \lstinline$ ?%?( (long unsigned)li,(long unsigned)i )$ & 3 & 3 \\ 1499 1980 \lstinline$ ?%?( (long long)li,(long long)i )$ & 5 & 2 \\ … … 1502 1983 \end{center} 1503 1984 The best interpretation of \lstinline$eat_double( li, i )$ is 1504 \lstinline$eat_double( (double)?%?(li, (long)i ))$, which has no unsafe conversions and the lowest total cost. 1505 1506 \begin{rationale} 1507 {\c11} defines most arithmetic operations to apply an \Index{integer promotion} to any argument that belongs to a type that has an \Index{integer conversion rank} less than that of \lstinline$int$.If 1985 \lstinline$eat_double( (double)?%?(li, (long)i ))$, which has no unsafe conversions and the 1986 lowest total cost. 1987 1988 \begin{rationale} 1989 {\c11} defines most arithmetic operations to apply an \Index{integer promotion} to any argument that 1990 belongs to a type that has an \Index{integer conversion rank} less than that of \lstinline$int$.If 1508 1991 \lstinline$s$ is a \lstinline$short int$, ``\lstinline$s *s$'' does not have type \lstinline$short int$; 1509 it is treated as ``\lstinline$( (int)s ) * ( (int)s )$'', and has type \lstinline$int$. \CFA matches that pattern; 1510 it does not predefine ``\lstinline$short ?*?( short, short )$''. 1511 1512 These ``missing'' operators limit polymorphism. 1513 Consider 1514 \begin{lstlisting} 1515 forall( otype T | T ?*?( T, T ) ) T square( T ); 1992 it is treated as ``\lstinline$( (int)s ) * ( (int)s )$'', and has type \lstinline$int$. \CFA matches 1993 that pattern; it does not predefine ``\lstinline$short ?*?( short, short )$''. 1994 1995 These ``missing'' operators limit polymorphism. Consider 1996 \begin{lstlisting} 1997 forall( type T | T ?*?( T, T ) ) T square( T ); 1516 1998 short s; 1517 1999 square( s ); … … 1519 2001 Since \CFA does not define a multiplication operator for \lstinline$short int$, 1520 2002 \lstinline$square( s )$ is treated as \lstinline$square( (int)s )$, and the result has type 1521 \lstinline$int$. 1522 This is mildly surprising, but it follows the {\c11} operator pattern. 2003 \lstinline$int$. This is mildly surprising, but it follows the {\c11} operator pattern. 1523 2004 1524 2005 A more troubling example is 1525 2006 \begin{lstlisting} 1526 forall( otype T | ?*?( T, T ) ) T product( T[], int n );2007 forall( type T | ?*?( T, T ) ) T product( T[], int n ); 1527 2008 short sa[5]; 1528 2009 product( sa, 5); 1529 2010 \end{lstlisting} 1530 2011 This has no valid interpretations, because \CFA has no conversion from ``array of 1531 \lstinline$short int$'' to ``array of \lstinline$int$''. 1532 The alternatives in such situationsinclude2012 \lstinline$short int$'' to ``array of \lstinline$int$''. The alternatives in such situations 2013 include 1533 2014 \begin{itemize} 1534 2015 \item … … 1539 2020 \lstinline$product$. 1540 2021 \item 1541 Defining \lstinline$product$ to take as an argument a conversion function from the ``small'' type to the operator's argument type. 2022 Defining \lstinline$product$ to take as an argument a conversion function from the ``small'' type to 2023 the operator's argument type. 1542 2024 \end{itemize} 1543 2025 \end{rationale} … … 1561 2043 \predefined 1562 2044 \begin{lstlisting} 1563 int?+?( int, int ), ?-?( int, int ); 1564 unsigned int?+?( unsigned int, unsigned int ), ?-?( unsigned int, unsigned int ); 1565 long int?+?( long int, long int ), ?-?( long int, long int ); 1566 long unsigned int?+?( long unsigned int, long unsigned int ), ?-?( long unsigned int, long unsigned int ); 1567 long long int?+?( long long int, long long int ), ?-?( long long int, long long int ); 2045 int?+?( int, int ), 2046 ?-?( int, int ); 2047 unsigned int?+?( unsigned int, unsigned int ), 2048 ?-?( unsigned int, unsigned int ); 2049 long int?+?( long int, long int ), 2050 ?-?( long int, long int ); 2051 long unsigned int?+?( long unsigned int, long unsigned int ), 2052 ?-?( long unsigned int, long unsigned int ); 2053 long long int?+?( long long int, long long int ), 2054 ?-?( long long int, long long int ); 1568 2055 long long unsigned int ?+?( long long unsigned int, long long unsigned int ), 1569 2056 ?-?( long long unsigned int, long long unsigned int ); 1570 float?+?( float, float ), ?-?( float, float ); 1571 double?+?( double, double ), ?-?( double, double ); 1572 long double?+?( long double, long double ), ?-?( long double, long double ); 1573 _Complex float?+?( _Complex float, float ), ?-?( _Complex float, float ), 1574 ?+?( float, _Complex float ), ?-?( float, _Complex float ), 1575 ?+?( _Complex float, _Complex float ), ?-?( _Complex float, _Complex float ); 1576 _Complex double?+?( _Complex double, double ), ?-?( _Complex double, double ), 1577 ?+?( double, _Complex double ), ?-?( double, _Complex double ), 1578 ?+?( _Complex double, _Complex double ), ?-?( _Complex double, _Complex double ); 1579 _Complex long double?+?( _Complex long double, long double ), ?-?( _Complex long double, long double ), 1580 ?+?( long double, _Complex long double ), ?-?( long double, _Complex long double ), 1581 ?+?( _Complex long double, _Complex long double ), ?-?( _Complex long double, _Complex long double ); 1582 1583 forall( otype T ) T * ?+?( T *, ptrdiff_t ), * ?+?( ptrdiff_t, T * ), * ?-?( T *, ptrdiff_t ); 1584 forall( otype T ) _Atomic T * ?+?( _Atomic T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic T * ), 2057 float?+?( float, float ), 2058 ?-?( float, float ); 2059 double?+?( double, double ), 2060 ?-?( double, double ); 2061 long double?+?( long double, long double ), 2062 ?-?( long double, long double ); 2063 _Complex float?+?( _Complex float, float ), 2064 ?-?( _Complex float, float ), 2065 ?+?( float, _Complex float ), 2066 ?-?( float, _Complex float ), 2067 ?+?( _Complex float, _Complex float ), 2068 ?-?( _Complex float, _Complex float ); 2069 _Complex double?+?( _Complex double, double ), 2070 ?-?( _Complex double, double ), 2071 ?+?( double, _Complex double ), 2072 ?-?( double, _Complex double ), 2073 ?+?( _Complex double, _Complex double ), 2074 ?-?( _Complex double, _Complex double ); 2075 _Complex long double?+?( _Complex long double, long double ), 2076 ?-?( _Complex long double, long double ), 2077 ?+?( long double, _Complex long double ), 2078 ?-?( long double, _Complex long double ), 2079 ?+?( _Complex long double, _Complex long double ), 2080 ?-?( _Complex long double, _Complex long double ); 2081 2082 forall( type T ) T 2083 * ?+?( T *, ptrdiff_t ), 2084 * ?+?( ptrdiff_t, T * ), 2085 * ?-?( T *, ptrdiff_t ); 2086 2087 forall( type T ) _Atomic T 2088 * ?+?( _Atomic T *, ptrdiff_t ), 2089 * ?+?( ptrdiff_t, _Atomic T * ), 1585 2090 * ?-?( _Atomic T *, ptrdiff_t ); 1586 forall( otype T ) const T * ?+?( const T *, ptrdiff_t ), * ?+?( ptrdiff_t, const T * ), 2091 2092 forall( type T ) const T 2093 * ?+?( const T *, ptrdiff_t ), 2094 * ?+?( ptrdiff_t, const T * ), 1587 2095 * ?-?( const T *, ptrdiff_t ); 1588 forall( otype T ) restrict T * ?+?( restrict T *, ptrdiff_t ), * ?+?( ptrdiff_t, restrict T * ), 2096 2097 forall( type T ) restrict T 2098 * ?+?( restrict T *, ptrdiff_t ), 2099 * ?+?( ptrdiff_t, restrict T * ), 1589 2100 * ?-?( restrict T *, ptrdiff_t ); 1590 forall( otype T ) volatile T * ?+?( volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, volatile T * ), 2101 2102 forall( type T ) volatile T 2103 * ?+?( volatile T *, ptrdiff_t ), 2104 * ?+?( ptrdiff_t, volatile T * ), 1591 2105 * ?-?( volatile T *, ptrdiff_t ); 1592 forall( otype T ) _Atomic const T * ?+?( _Atomic const T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic const T * ), 2106 2107 forall( type T ) _Atomic const T 2108 * ?+?( _Atomic const T *, ptrdiff_t ), 2109 * ?+?( ptrdiff_t, _Atomic const T * ), 1593 2110 * ?-?( _Atomic const T *, ptrdiff_t ); 1594 forall( otype T ) _Atomic restrict T * ?+?( _Atomic restrict T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic restrict T * ), 2111 2112 forall( type T ) _Atomic restrict T 2113 * ?+?( _Atomic restrict T *, ptrdiff_t ), 2114 * ?+?( ptrdiff_t, _Atomic restrict T * ), 1595 2115 * ?-?( _Atomic restrict T *, ptrdiff_t ); 1596 forall( otype T ) _Atomic volatile T * ?+?( _Atomic volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic volatile T * ), 2116 2117 forall( type T ) _Atomic volatile T 2118 * ?+?( _Atomic volatile T *, ptrdiff_t ), 2119 * ?+?( ptrdiff_t, _Atomic volatile T * ), 1597 2120 * ?-?( _Atomic volatile T *, ptrdiff_t ); 1598 forall( otype T ) const restrict T * ?+?( const restrict T *, ptrdiff_t ), * ?+?( ptrdiff_t, const restrict T * ), 2121 2122 forall( type T ) const restrict T 2123 * ?+?( const restrict T *, ptrdiff_t ), 2124 * ?+?( ptrdiff_t, const restrict T * ), 1599 2125 * ?-?( const restrict T *, ptrdiff_t ); 1600 forall( otype T ) const volatile T * ?+?( const volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, const volatile T * ), 2126 2127 forall( type T ) const volatile T 2128 * ?+?( const volatile T *, ptrdiff_t ), 2129 * ?+?( ptrdiff_t, const volatile T * ), 1601 2130 * ?-?( const volatile T *, ptrdiff_t ); 1602 forall( otype T ) restrict volatile T * ?+?( restrict volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, restrict volatile T * ), 2131 2132 forall( type T ) restrict volatile T 2133 * ?+?( restrict volatile T *, ptrdiff_t ), 2134 * ?+?( ptrdiff_t, restrict volatile T * ), 1603 2135 * ?-?( restrict volatile T *, ptrdiff_t ); 1604 forall( otype T ) _Atomic const restrict T * ?+?( _Atomic const restrict T *, ptrdiff_t ), 2136 2137 forall( type T ) _Atomic const restrict T 2138 * ?+?( _Atomic const restrict T *, ptrdiff_t ), 1605 2139 * ?+?( ptrdiff_t, _Atomic const restrict T * ), 1606 2140 * ?-?( _Atomic const restrict T *, ptrdiff_t ); 1607 forall( otype T ) ptrdiff_t 2141 2142 forall( type T ) ptrdiff_t 1608 2143 * ?-?( const restrict volatile T *, const restrict volatile T * ), 1609 2144 * ?-?( _Atomic const restrict volatile T *, _Atomic const restrict volatile T * ); 1610 2145 \end{lstlisting} 1611 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 2146 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the 2147 rank of \lstinline$int$ there exist 1612 2148 % Don't use predefined: keep this out of prelude.cf. 1613 2149 \begin{lstlisting} … … 1616 2152 1617 2153 \semantics 1618 The interpretations of additive expressions are the interpretations of the corresponding function calls. 1619 1620 \begin{rationale} 1621 \lstinline$ptrdiff_t$ is an implementation-defined identifier defined in \lstinline$<stddef.h>$ that is synonymous with a signed integral type that is large enough to hold the difference between two pointers. 1622 It seems reasonable to use it for pointer addition as well. (This is technically a difference between \CFA and C, which only specifies that pointer addition uses an \emph{integral} argument.) Hence it is also used for subscripting, which is defined in terms of pointer addition. 1623 The {\c11} standard uses \lstinline$size_t$ in several cases where a library function takes an argument that is used as a subscript, but \lstinline$size_t$ is unsuitable here because it is an unsigned type. 2154 The interpretations of additive expressions are the interpretations of the corresponding function 2155 calls. 2156 2157 \begin{rationale} 2158 \lstinline$ptrdiff_t$ is an implementation-defined identifier defined in \lstinline$<stddef.h>$ that 2159 is synonymous with a signed integral type that is large enough to hold the difference between two 2160 pointers. It seems reasonable to use it for pointer addition as well. (This is technically a 2161 difference between \CFA and C, which only specifies that pointer addition uses an \emph{integral} 2162 argument.) Hence it is also used for subscripting, which is defined in terms of pointer addition. 2163 The {\c11} standard uses \lstinline$size_t$ in several cases where a library function takes an 2164 argument that is used as a subscript, but \lstinline$size_t$ is unsuitable here because it is an 2165 unsigned type. 1624 2166 \end{rationale} 1625 2167 … … 1642 2184 \predefined 1643 2185 \begin{lstlisting} 1644 int ?<<?( int, int ), ?>>?( int, int ); 1645 unsigned int ?<<?( unsigned int, int ), ?>>?( unsigned int, int ); 1646 long int ?<<?( long int, int ), ?>>?( long int, int ); 1647 long unsigned int ?<<?( long unsigned int, int ), ?>>?( long unsigned int, int ); 1648 long long int ?<<?( long long int, int ), ?>>?( long long int, int ); 1649 long long unsigned int ?<<?( long long unsigned int, int ), ?>>?( long long unsigned int, int); 1650 \end{lstlisting} 1651 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 2186 int ?<<?( int, int ), 2187 ?>>?( int, int ); 2188 unsigned int ?<<?( unsigned int, int ), 2189 ?>>?( unsigned int, int ); 2190 long int ?<<?( long int, int ), 2191 ?>>?( long int, int ); 2192 long unsigned int ?<<?( long unsigned int, int ), 2193 ?>>?( long unsigned int, int ); 2194 long long int ?<<?( long long int, int ), 2195 ?>>?( long long int, int ); 2196 long long unsigned int ?<<?( long long unsigned int, int ), 2197 ?>>?( long long unsigned int, int); 2198 \end{lstlisting} 2199 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the 2200 rank of \lstinline$int$ there exist 1652 2201 % Don't use predefined: keep this out of prelude.cf. 1653 2202 \begin{lstlisting} … … 1656 2205 1657 2206 \begin{rationale} 1658 The bitwise shift operators break the usual pattern: they do not convert both operands to a common type.1659 The right operand only undergoes \Index{integer promotion}.2207 The bitwise shift operators break the usual pattern: they do not convert both operands to a common 2208 type. The right operand only undergoes \Index{integer promotion}. 1660 2209 \end{rationale} 1661 2210 1662 2211 \semantics 1663 The interpretations of a bitwise shift expression are the interpretations of the corresponding function calls. 2212 The interpretations of a bitwise shift expression are the interpretations of the corresponding 2213 function calls. 1664 2214 1665 2215 … … 1685 2235 \predefined 1686 2236 \begin{lstlisting} 1687 int ?<?( int, int ), ?<=?( int, int ), 1688 ?>?( int, int ), ?>=?( int, int ); 1689 int ?<?( unsigned int, unsigned int ), ?<=?( unsigned int, unsigned int ), 1690 ?>?( unsigned int, unsigned int ), ?>=?( unsigned int, unsigned int ); 1691 int ?<?( long int, long int ), ?<=?( long int, long int ), 1692 ?>?( long int, long int ), ?>=?( long int, long int ); 1693 int ?<?( long unsigned int, long unsigned ), ?<=?( long unsigned int, long unsigned ), 1694 ?>?( long unsigned int, long unsigned ), ?>=?( long unsigned int, long unsigned ); 1695 int ?<?( long long int, long long int ), ?<=?( long long int, long long int ), 1696 ?>?( long long int, long long int ), ?>=?( long long int, long long int ); 1697 int ?<?( long long unsigned int, long long unsigned ), ?<=?( long long unsigned int, long long unsigned ), 1698 ?>?( long long unsigned int, long long unsigned ), ?>=?( long long unsigned int, long long unsigned ); 1699 int ?<?( float, float ), ?<=?( float, float ), 1700 ?>?( float, float ), ?>=?( float, float ); 1701 int ?<?( double, double ), ?<=?( double, double ), 1702 ?>?( double, double ), ?>=?( double, double ); 1703 int ?<?( long double, long double ), ?<=?( long double, long double ), 1704 ?>?( long double, long double ), ?>=?( long double, long double ); 1705 forall( dtype DT ) int ?<?( const restrict volatile DT *, const restrict volatile DT * ), 2237 int ?<?( int, int ), 2238 ?<=?( int, int ), 2239 ?>?( int, int ), 2240 ?>=?( int, int ); 2241 int ?<?( unsigned int, unsigned int ), 2242 ?<=?( unsigned int, unsigned int ), 2243 ?>?( unsigned int, unsigned int ), 2244 ?>=?( unsigned int, unsigned int ); 2245 int ?<?( long int, long int ), 2246 ?<=?( long int, long int ), 2247 ?>?( long int, long int ), 2248 ?>=?( long int, long int ); 2249 int ?<?( long unsigned int, long unsigned ), 2250 ?<=?( long unsigned int, long unsigned ), 2251 ?>?( long unsigned int, long unsigned ), 2252 ?>=?( long unsigned int, long unsigned ); 2253 int ?<?( long long int, long long int ), 2254 ?<=?( long long int, long long int ), 2255 ?>?( long long int, long long int ), 2256 ?>=?( long long int, long long int ); 2257 int ?<?( long long unsigned int, long long unsigned ), 2258 ?<=?( long long unsigned int, long long unsigned ), 2259 ?>?( long long unsigned int, long long unsigned ), 2260 ?>=?( long long unsigned int, long long unsigned ); 2261 int ?<?( float, float ), 2262 ?<=?( float, float ), 2263 ?>?( float, float ), 2264 ?>=?( float, float ); 2265 int ?<?( double, double ), 2266 ?<=?( double, double ), 2267 ?>?( double, double ), 2268 ?>=?( double, double ); 2269 int ?<?( long double, long double ), 2270 ?<=?( long double, long double ), 2271 ?>?( long double, long double ), 2272 ?>=?( long double, long double ); 2273 2274 forall( dtype DT ) int 2275 ?<?( const restrict volatile DT *, const restrict volatile DT * ), 1706 2276 ?<?( _Atomic const restrict volatile DT *, _Atomic const restrict volatile DT * ), 1707 2277 ?<=?( const restrict volatile DT *, const restrict volatile DT * ), … … 1712 2282 ?>=?( _Atomic const restrict volatile DT *, _Atomic const restrict volatile DT * ); 1713 2283 \end{lstlisting} 1714 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 2284 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the 2285 rank of \lstinline$int$ there exist 1715 2286 % Don't use predefined: keep this out of prelude.cf. 1716 2287 \begin{lstlisting} … … 1722 2293 1723 2294 \semantics 1724 The interpretations of a relational expression are the interpretations of the corresponding function call. 2295 The interpretations of a relational expression are the interpretations of the corresponding function 2296 call. 1725 2297 1726 2298 … … 1742 2314 \predefined 1743 2315 \begin{lstlisting} 1744 int ?==?( int, int ), ?!=?( int, int ), 1745 ?==?( unsigned int, unsigned int ), ?!=?( unsigned int, unsigned int ), 1746 ?==?( long int, long int ), ?!=?( long int, long int ), 1747 ?==?( long unsigned int, long unsigned int ), ?!=?( long unsigned int, long unsigned int ), 1748 ?==?( long long int, long long int ), ?!=?( long long int, long long int ), 1749 ?==?( long long unsigned int, long long unsigned int ), ?!=?( long long unsigned int, long long unsigned int ), 1750 ?==?( float, float ), ?!=?( float, float ), 1751 ?==?( _Complex float, float ), ?!=?( _Complex float, float ), 1752 ?==?( float, _Complex float ), ?!=?( float, _Complex float ), 1753 ?==?( _Complex float, _Complex float ), ?!=?( _Complex float, _Complex float ), 1754 ?==?( double, double ), ?!=?( double, double ), 1755 ?==?( _Complex double, double ), ?!=?( _Complex double, double ), 1756 ?==?( double, _Complex double ), ?!=?( double, _Complex double ), 1757 ?==?( _Complex double, _Complex double ), ?!=?( _Complex double, _Complex double ), 1758 ?==?( long double, long double ), ?!=?( long double, long double ), 1759 ?==?( _Complex long double, long double ), ?!=?( _Complex long double, long double ), 1760 ?==?( long double, _Complex long double ), ?!=?( long double, _Complex long double ), 1761 ?==?( _Complex long double, _Complex long double ), ?!=?( _Complex long double, _Complex long double ); 2316 int ?==?( int, int ), 2317 ?!=?( int, int ), 2318 ?==?( unsigned int, unsigned int ), 2319 ?!=?( unsigned int, unsigned int ), 2320 ?==?( long int, long int ), 2321 ?!=?( long int, long int ), 2322 ?==?( long unsigned int, long unsigned int ), 2323 ?!=?( long unsigned int, long unsigned int ), 2324 ?==?( long long int, long long int ), 2325 ?!=?( long long int, long long int ), 2326 ?==?( long long unsigned int, long long unsigned int ), 2327 ?!=?( long long unsigned int, long long unsigned int ), 2328 ?==?( float, float ), 2329 ?!=?( float, float ), 2330 ?==?( _Complex float, float ), 2331 ?!=?( _Complex float, float ), 2332 ?==?( float, _Complex float ), 2333 ?!=?( float, _Complex float ), 2334 ?==?( _Complex float, _Complex float ), 2335 ?!=?( _Complex float, _Complex float ), 2336 ?==?( double, double ), 2337 ?!=?( double, double ), 2338 ?==?( _Complex double, double ), 2339 ?!=?( _Complex double, double ), 2340 ?==?( double, _Complex double ), 2341 ?!=?( double, _Complex double ), 2342 ?==?( _Complex double, _Complex double ), 2343 ?!=?( _Complex double, _Complex double ), 2344 ?==?( long double, long double ), 2345 ?!=?( long double, long double ), 2346 ?==?( _Complex long double, long double ), 2347 ?!=?( _Complex long double, long double ), 2348 ?==?( long double, _Complex long double ), 2349 ?!=?( long double, _Complex long double ), 2350 ?==?( _Complex long double, _Complex long double ), 2351 ?!=?( _Complex long double, _Complex long double ); 2352 1762 2353 forall( dtype DT ) int 1763 2354 ?==?( const restrict volatile DT *, const restrict volatile DT * ), … … 1784 2375 ?==?( forall( dtype DT2) const DT2*, _Atomic const restrict volatile DT * ), 1785 2376 ?!=?( forall( dtype DT2) const DT2*, _Atomic const restrict volatile DT * ); 2377 1786 2378 forall( ftype FT ) int 1787 ?==?( FT *, FT * ), ?!=?( FT *, FT * ), 1788 ?==?( FT *, forall( ftype FT2) FT2 * ), ?!=?( FT *, forall( ftype FT2) FT2 * ), 1789 ?==?( forall( ftype FT2) FT2*, FT * ), ?!=?( forall( ftype FT2) FT2*, FT * ), 1790 ?==?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * ), ?!=?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * ); 1791 \end{lstlisting} 1792 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 2379 ?==?( FT *, FT * ), 2380 ?!=?( FT *, FT * ), 2381 ?==?( FT *, forall( ftype FT2) FT2 * ), 2382 ?!=?( FT *, forall( ftype FT2) FT2 * ), 2383 ?==?( forall( ftype FT2) FT2*, FT * ), 2384 ?!=?( forall( ftype FT2) FT2*, FT * ), 2385 ?==?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * ), 2386 ?!=?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * ); 2387 \end{lstlisting} 2388 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the 2389 rank of \lstinline$int$ there exist 1793 2390 % Don't use predefined: keep this out of prelude.cf. 1794 2391 \begin{lstlisting} … … 1798 2395 1799 2396 \begin{rationale} 1800 The polymorphic equality operations come in three styles: comparisons between pointers of compatible types, between pointers to \lstinline$void$ and pointers to object types or incomplete types, and between the \Index{null pointer} constant and pointers to any type. 1801 In the last case, a special constraint rule for null pointer constant operands has been replaced by a consequence of the \CFA type system. 2397 The polymorphic equality operations come in three styles: comparisons between pointers of compatible 2398 types, between pointers to \lstinline$void$ and pointers to object types or incomplete types, and 2399 between the \Index{null pointer} constant and pointers to any type. In the last case, a special 2400 constraint rule for null pointer constant operands has been replaced by a consequence of the \CFA 2401 type system. 1802 2402 \end{rationale} 1803 2403 1804 2404 \semantics 1805 The interpretations of an equality expression are the interpretations of the corresponding function call. 2405 The interpretations of an equality expression are the interpretations of the corresponding function 2406 call. 1806 2407 1807 2408 \begin{sloppypar} 1808 The result of an equality comparison between two pointers to predefined functions or predefined values is implementation-defined. 2409 The result of an equality comparison between two pointers to predefined functions or predefined 2410 values is implementation-defined. 1809 2411 \end{sloppypar} 1810 2412 \begin{rationale} 1811 The implementation-defined status of equality comparisons allows implementations to use one library routine to implement many predefined functions. 1812 These optimization are particularly important when the predefined functions are polymorphic, as is the case for most pointer operations 2413 The implementation-defined status of equality comparisons allows implementations to use one library 2414 routine to implement many predefined functions. These optimization are particularly important when 2415 the predefined functions are polymorphic, as is the case for most pointer operations 1813 2416 \end{rationale} 1814 2417 … … 1836 2439 long long unsigned int ?&?( long long unsigned int, long long unsigned int ); 1837 2440 \end{lstlisting} 1838 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 2441 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the 2442 rank of \lstinline$int$ there exist 1839 2443 % Don't use predefined: keep this out of prelude.cf. 1840 2444 \begin{lstlisting} … … 1843 2447 1844 2448 \semantics 1845 The interpretations of a bitwise AND expression are the interpretations of the corresponding function call. 2449 The interpretations of a bitwise AND expression are the interpretations of the corresponding 2450 function call. 1846 2451 1847 2452 … … 1868 2473 long long unsigned int ?^?( long long unsigned int, long long unsigned int ); 1869 2474 \end{lstlisting} 1870 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 2475 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the 2476 rank of \lstinline$int$ there exist 1871 2477 % Don't use predefined: keep this out of prelude.cf. 1872 2478 \begin{lstlisting} … … 1875 2481 1876 2482 \semantics 1877 The interpretations of a bitwise exclusive OR expression are the interpretations of the corresponding function call. 2483 The interpretations of a bitwise exclusive OR expression are the interpretations of the 2484 corresponding function call. 1878 2485 1879 2486 … … 1900 2507 long long unsigned int ?|?( long long unsigned int, long long unsigned int ); 1901 2508 \end{lstlisting} 1902 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist 2509 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the 2510 rank of \lstinline$int$ there exist 1903 2511 % Don't use predefined: keep this out of prelude.cf. 1904 2512 \begin{lstlisting} … … 1907 2515 1908 2516 \semantics 1909 The interpretations of a bitwise inclusive OR expression are the interpretations of the corresponding function call. 2517 The interpretations of a bitwise inclusive OR expression are the interpretations of the 2518 corresponding function call. 1910 2519 1911 2520 … … 1919 2528 1920 2529 \semantics The operands of the expression ``\lstinline$a && b$'' are treated as 1921 ``\lstinline$(int)((a)!=0)$'' and ``\lstinline$(int)((b)!=0)$'', which shall both be unambiguous. 1922 The expression has only one interpretation, which is of type \lstinline$int$. 1923 \begin{rationale} 1924 When the operands of a logical expression are values of built-in types, and ``\lstinline$!=$'' has not been redefined for those types, the compiler can optimize away the function calls. 2530 ``\lstinline$(int)((a)!=0)$'' and ``\lstinline$(int)((b)!=0)$'', which shall both be 2531 unambiguous. The expression has only one interpretation, which is of type \lstinline$int$. 2532 \begin{rationale} 2533 When the operands of a logical expression are values of built-in types, and ``\lstinline$!=$'' has 2534 not been redefined for those types, the compiler can optimize away the function calls. 1925 2535 1926 2536 A common C idiom omits comparisons to \lstinline$0$ in the controlling expressions of loops and 1927 \lstinline$if$ statements. 1928 For instance, the loop below iterates as long as \lstinline$rp$ pointsat a \lstinline$Rational$ value that is non-zero.1929 1930 \begin{lstlisting} 1931 extern otype Rational;@\use{Rational}@2537 \lstinline$if$ statements. For instance, the loop below iterates as long as \lstinline$rp$ points 2538 at a \lstinline$Rational$ value that is non-zero. 2539 2540 \begin{lstlisting} 2541 extern type Rational;@\use{Rational}@ 1932 2542 extern const Rational 0;@\use{0}@ 1933 2543 extern int ?!=?( Rational, Rational ); 1934 2544 Rational *rp; 2545 1935 2546 while ( rp && *rp ) { ... } 1936 2547 \end{lstlisting} 1937 The logical expression calls the \lstinline$Rational$ inequality operator, passing it \lstinline$*rp$ and the \lstinline$Rational 0$, and getting a 1 or 0 as a result. 1938 In contrast, {\CC} would apply a programmer-defined \lstinline$Rational$-to-\lstinline$int$ conversion to \lstinline$*rp$ in the equivalent situation. 1939 The conversion to \lstinline$int$ would produce a general integer value, which is unfortunate, and possibly dangerous if the conversion was not written with this situation in mind. 2548 The logical expression calls the \lstinline$Rational$ inequality operator, passing 2549 it \lstinline$*rp$ and the \lstinline$Rational 0$, and getting a 1 or 0 as a result. In 2550 contrast, {\CC} would apply a programmer-defined \lstinline$Rational$-to-\lstinline$int$ 2551 conversion to \lstinline$*rp$ in the equivalent situation. The conversion to \lstinline$int$ would 2552 produce a general integer value, which is unfortunate, and possibly dangerous if the conversion was 2553 not written with this situation in mind. 1940 2554 \end{rationale} 1941 2555 … … 1951 2565 \semantics 1952 2566 1953 The operands of the expression ``\lstinline$a || b$'' are treated as ``\lstinline$(int)((a)!=0)$'' and ``\lstinline$(int)((b))!=0)$'', which shall both be unambiguous. 1954 The expression has only one interpretation, which is of type \lstinline$int$. 2567 The operands of the expression ``\lstinline$a || b$'' are treated as ``\lstinline$(int)((a)!=0)$'' 2568 and ``\lstinline$(int)((b))!=0)$'', which shall both be unambiguous. The expression has only one 2569 interpretation, which is of type \lstinline$int$. 1955 2570 1956 2571 … … 1965 2580 1966 2581 \semantics 1967 In the conditional expression\use{?:} ``\lstinline$a?b:c$'', if the second and third operands both have an interpretation with \lstinline$void$ type, then the expression has an interpretation with type \lstinline$void$, equivalent to 2582 In the conditional expression\use{?:} ``\lstinline$a?b:c$'', if the second and 2583 third operands both have an interpretation with \lstinline$void$ type, then the expression has an 2584 interpretation with type \lstinline$void$, equivalent to 1968 2585 \begin{lstlisting} 1969 2586 ( int)(( a)!=0) ? ( void)( b) : ( void)( c) 1970 2587 \end{lstlisting} 1971 2588 1972 If the second and third operands both have interpretations with non-\lstinline$void$ types, the expression is treated as if it were the call ``\lstinline$cond((a)!=0, b, c)$'', with \lstinline$cond$ declared as 1973 \begin{lstlisting} 1974 forall( otype T ) T cond( int, T, T ); 1975 forall( dtype D ) void * cond( int, D *, void * ), * cond( int, void *, D * ); 1976 forall( dtype D ) _atomic void * cond( 1977 int, _Atomic D *, _Atomic void * ), * cond( int, _Atomic void *, _Atomic D * ); 1978 forall( dtype D ) const void * cond( 1979 int, const D *, const void * ), * cond( int, const void *, const D * ); 1980 forall( dtype D ) restrict void * cond( 1981 int, restrict D *, restrict void * ), * cond( int, restrict void *, restrict D * ); 1982 forall( dtype D ) volatile void * cond( 1983 int, volatile D *, volatile void * ), * cond( int, volatile void *, volatile D * ); 1984 forall( dtype D ) _Atomic const void * cond( 1985 int, _Atomic const D *, _Atomic const void * ), * cond( int, _Atomic const void *, _Atomic const D * ); 1986 forall( dtype D ) _Atomic restrict void * cond( 1987 int, _Atomic restrict D *, _Atomic restrict void * ), * cond( int, _Atomic restrict void *, _Atomic restrict D * ); 1988 forall( dtype D ) _Atomic volatile void * cond( 1989 int, _Atomic volatile D *, _Atomic volatile void * ), * cond( int, _Atomic volatile void *, _Atomic volatile D * ); 1990 forall( dtype D ) const restrict void * cond( 1991 int, const restrict D *, const restrict void * ), * cond( int, const restrict void *, const restrict D * ); 1992 forall( dtype D ) const volatile void * cond( 1993 int, const volatile D *, const volatile void * ), * cond( int, const volatile void *, const volatile D * ); 1994 forall( dtype D ) restrict volatile void * cond( 1995 int, restrict volatile D *, restrict volatile void * ), * cond( int, restrict volatile void *, restrict volatile D * ); 1996 forall( dtype D ) _Atomic const restrict void * cond( 1997 int, _Atomic const restrict D *, _Atomic const restrict void * ), 2589 If the second and third operands both have interpretations with non-\lstinline$void$ types, the 2590 expression is treated as if it were the call ``\lstinline$cond((a)!=0, b, c)$'', 2591 with \lstinline$cond$ declared as 2592 \begin{lstlisting} 2593 forall( type T ) T cond( int, T, T ); 2594 2595 forall( dtype D ) void 2596 * cond( int, D *, void * ), 2597 * cond( int, void *, D * ); 2598 2599 forall( dtype D ) _atomic void 2600 * cond( int, _Atomic D *, _Atomic void * ), 2601 * cond( int, _Atomic void *, _Atomic D * ); 2602 2603 forall( dtype D ) const void 2604 * cond( int, const D *, const void * ), 2605 * cond( int, const void *, const D * ); 2606 2607 forall( dtype D ) restrict void 2608 * cond( int, restrict D *, restrict void * ), 2609 * cond( int, restrict void *, restrict D * ); 2610 2611 forall( dtype D ) volatile void 2612 * cond( int, volatile D *, volatile void * ), 2613 * cond( int, volatile void *, volatile D * ); 2614 2615 forall( dtype D ) _Atomic const void 2616 * cond( int, _Atomic const D *, _Atomic const void * ), 2617 * cond( int, _Atomic const void *, _Atomic const D * ); 2618 2619 forall( dtype D ) _Atomic restrict void 2620 * cond( int, _Atomic restrict D *, _Atomic restrict void * ), 2621 * cond( int, _Atomic restrict void *, _Atomic restrict D * ); 2622 2623 forall( dtype D ) _Atomic volatile void 2624 * cond( int, _Atomic volatile D *, _Atomic volatile void * ), 2625 * cond( int, _Atomic volatile void *, _Atomic volatile D * ); 2626 2627 forall( dtype D ) const restrict void 2628 * cond( int, const restrict D *, const restrict void * ), 2629 * cond( int, const restrict void *, const restrict D * ); 2630 2631 forall( dtype D ) const volatile void 2632 * cond( int, const volatile D *, const volatile void * ), 2633 * cond( int, const volatile void *, const volatile D * ); 2634 2635 forall( dtype D ) restrict volatile void 2636 * cond( int, restrict volatile D *, restrict volatile void * ), 2637 * cond( int, restrict volatile void *, restrict volatile D * ); 2638 2639 forall( dtype D ) _Atomic const restrict void 2640 * cond( int, _Atomic const restrict D *, _Atomic const restrict void * ), 1998 2641 * cond( int, _Atomic const restrict void *, _Atomic const restrict D * ); 1999 forall( dtype D ) _Atomic const volatile void * cond( 2000 int, _Atomic const volatile D *, _Atomic const volatile void * ), 2642 2643 forall( dtype D ) _Atomic const volatile void 2644 * cond( int, _Atomic const volatile D *, _Atomic const volatile void * ), 2001 2645 * cond( int, _Atomic const volatile void *, _Atomic const volatile D * ); 2002 forall( dtype D ) _Atomic restrict volatile void * cond( 2003 int, _Atomic restrict volatile D *, _Atomic restrict volatile void * ), 2004 * cond( int, _Atomic restrict volatile void *, _Atomic restrict volatile D * ); 2005 forall( dtype D ) const restrict volatile void * cond( 2006 int, const restrict volatile D *, const restrict volatile void * ), 2007 * cond( int, const restrict volatile void *, const restrict volatile D * ); 2008 forall( dtype D ) _Atomic const restrict volatile void * cond( 2009 int, _Atomic const restrict volatile D *, _Atomic const restrict volatile void * ), 2010 * cond( int, _Atomic const restrict volatile void *, _Atomic const restrict volatile D * ); 2011 \end{lstlisting} 2012 2013 \begin{rationale} 2014 The object of the above is to apply the \Index{usual arithmetic conversion}s when the second and third operands have arithmetic type, and to combine the qualifiers of the second and third operands if they are pointers. 2646 2647 forall( dtype D ) _Atomic restrict volatile void 2648 * cond( int, _Atomic restrict volatile D *, 2649 _Atomic restrict volatile void * ), 2650 * cond( int, _Atomic restrict volatile void *, 2651 _Atomic restrict volatile D * ); 2652 2653 forall( dtype D ) const restrict volatile void 2654 * cond( int, const restrict volatile D *, 2655 const restrict volatile void * ), 2656 * cond( int, const restrict volatile void *, 2657 const restrict volatile D * ); 2658 2659 forall( dtype D ) _Atomic const restrict volatile void 2660 * cond( int, _Atomic const restrict volatile D *, 2661 _Atomic const restrict volatile void * ), 2662 * cond( int, _Atomic const restrict volatile void *, 2663 _Atomic const restrict volatile D * ); 2664 \end{lstlisting} 2665 2666 \begin{rationale} 2667 The object of the above is to apply the \Index{usual arithmetic conversion}s when the second and 2668 third operands have arithmetic type, and to combine the qualifiers of the second and third operands 2669 if they are pointers. 2015 2670 \end{rationale} 2016 2671 … … 2030 2685 rand() ? cip : vip; 2031 2686 \end{lstlisting} 2032 The expression has type \lstinline$const volatile int *$, with safe conversions applied to the second and third operands to add \lstinline$volatile$ and \lstinline$const$ qualifiers, respectively. 2687 The expression has type \lstinline$const volatile int *$, with safe conversions applied to the second 2688 and third operands to add \lstinline$volatile$ and \lstinline$const$ qualifiers, respectively. 2033 2689 2034 2690 \begin{lstlisting} … … 2052 2708 2053 2709 \rewriterules 2054 Let ``\(\leftarrow\)'' be any of the assignment operators. 2055 Then 2710 Let ``\(\leftarrow\)'' be any of the assignment operators. Then 2056 2711 \use{?=?}\use{?*=?}\use{?/=?}\use{?%=?}\use{?+=?}\use{?-=?} 2057 2712 \use{?>>=?}\use{?&=?}\use{?^=?}\use{?"|=?}%use{?<<=?} … … 2061 2716 2062 2717 \semantics 2063 Each interpretation of the left operand of an assignment expression is considered separately. 2064 For each interpretation that is a bit-field or is declared with the \lstinline$register$ storage class specifier, the expression has one valid interpretation, with the type of the left operand. 2065 The right operand is cast to that type, and the assignment expression is ambiguous if either operand is. 2066 For the remaining interpretations, the expression is rewritten, and the interpretations of the assignment expression are the interpretations of the corresponding function call. 2067 Finally, all interpretations of the expression produced for the different interpretations of the left operand are combined to produce the interpretations of the expression as a whole; 2068 where interpretations have compatible result types, the best interpretations are selected in the manner described for function call expressions. 2718 Each interpretation of the left operand of an assignment expression is considered separately. For 2719 each interpretation that is a bit-field or is declared with the \lstinline$register$ storage class 2720 specifier, the expression has one valid interpretation, with the type of the left operand. The 2721 right operand is cast to that type, and the assignment expression is ambiguous if either operand is. 2722 For the remaining interpretations, the expression is rewritten, and the interpretations of the 2723 assignment expression are the interpretations of the corresponding function call. Finally, all 2724 interpretations of the expression produced for the different interpretations of the left operand are 2725 combined to produce the interpretations of the expression as a whole; where interpretations have 2726 compatible result types, the best interpretations are selected in the manner described for function 2727 call expressions. 2069 2728 2070 2729 … … 2131 2790 ?=?( volatile _Complex long double *, _Complex long double ), 2132 2791 ?=?( _Atomic volatile _Complex long double *, _Atomic _Complex long double ); 2792 2133 2793 forall( ftype FT ) FT 2134 2794 * ?=?( FT * volatile *, FT * ), 2135 2795 * ?=?( FT * volatile *, forall( ftype F ) F * ); 2796 2136 2797 forall( ftype FT ) FT const 2137 2798 * ?=?( FT const * volatile *, FT const * ), 2138 2799 * ?=?( FT const * volatile *, forall( ftype F ) F * ); 2800 2139 2801 forall( ftype FT ) FT volatile 2140 2802 * ?=?( FT volatile * volatile *, FT * ), 2141 2803 * ?=?( FT volatile * volatile *, forall( ftype F ) F * ); 2804 2142 2805 forall( ftype FT ) FT const 2143 2806 * ?=?( FT const volatile * volatile *, FT const * ), 2144 2807 * ?=?( FT const volatile * volatile *, forall( ftype F ) F * ); 2808 2145 2809 forall( dtype DT ) DT 2146 2810 * ?=?( DT * restrict volatile *, DT * ), … … 2150 2814 * ?=?( DT * _Atomic restrict volatile *, void * ), 2151 2815 * ?=?( DT * _Atomic restrict volatile *, forall( dtype D ) D * ); 2816 2152 2817 forall( dtype DT ) DT _Atomic 2153 2818 * ?=?( _Atomic DT * restrict volatile *, DT _Atomic * ), … … 2157 2822 * ?=?( _Atomic DT * _Atomic restrict volatile *, void * ), 2158 2823 * ?=?( _Atomic DT * _Atomic restrict volatile *, forall( dtype D ) D * ); 2824 2159 2825 forall( dtype DT ) DT const 2160 2826 * ?=?( DT const * restrict volatile *, DT const * ), … … 2164 2830 * ?=?( DT const * _Atomic restrict volatile *, void const * ), 2165 2831 * ?=?( DT const * _Atomic restrict volatile *, forall( dtype D ) D * ); 2832 2166 2833 forall( dtype DT ) DT restrict 2167 2834 * ?=?( restrict DT * restrict volatile *, DT restrict * ), … … 2171 2838 * ?=?( restrict DT * _Atomic restrict volatile *, void * ), 2172 2839 * ?=?( restrict DT * _Atomic restrict volatile *, forall( dtype D ) D * ); 2840 2173 2841 forall( dtype DT ) DT volatile 2174 2842 * ?=?( DT volatile * restrict volatile *, DT volatile * ), … … 2178 2846 * ?=?( DT volatile * _Atomic restrict volatile *, void volatile * ), 2179 2847 * ?=?( DT volatile * _Atomic restrict volatile *, forall( dtype D ) D * ); 2848 2180 2849 forall( dtype DT ) DT _Atomic const 2181 2850 * ?=?( DT _Atomic const * restrict volatile *, DT _Atomic const * ), … … 2185 2854 * ?=?( DT _Atomic const * _Atomic restrict volatile *, void const * ), 2186 2855 * ?=?( DT _Atomic const * _Atomic restrict volatile *, forall( dtype D ) D * ); 2856 2187 2857 forall( dtype DT ) DT _Atomic restrict 2188 2858 * ?=?( _Atomic restrict DT * restrict volatile *, DT _Atomic restrict * ), … … 2192 2862 * ?=?( _Atomic restrict DT * _Atomic restrict volatile *, void * ), 2193 2863 * ?=?( _Atomic restrict DT * _Atomic restrict volatile *, forall( dtype D ) D * ); 2864 2194 2865 forall( dtype DT ) DT _Atomic volatile 2195 2866 * ?=?( DT _Atomic volatile * restrict volatile *, DT _Atomic volatile * ), … … 2199 2870 * ?=?( DT _Atomic volatile * _Atomic restrict volatile *, void volatile * ), 2200 2871 * ?=?( DT _Atomic volatile * _Atomic restrict volatile *, forall( dtype D ) D * ); 2872 2201 2873 forall( dtype DT ) DT const restrict 2202 2874 * ?=?( DT const restrict * restrict volatile *, DT const restrict * ), … … 2206 2878 * ?=?( DT const restrict * _Atomic restrict volatile *, void const * ), 2207 2879 * ?=?( DT const restrict * _Atomic restrict volatile *, forall( dtype D ) D * ); 2880 2208 2881 forall( dtype DT ) DT const volatile 2209 2882 * ?=?( DT const volatile * restrict volatile *, DT const volatile * ), … … 2213 2886 * ?=?( DT const volatile * _Atomic restrict volatile *, void const volatile * ), 2214 2887 * ?=?( DT const volatile * _Atomic restrict volatile *, forall( dtype D ) D * ); 2888 2215 2889 forall( dtype DT ) DT restrict volatile 2216 2890 * ?=?( DT restrict volatile * restrict volatile *, DT restrict volatile * ), … … 2220 2894 * ?=?( DT restrict volatile * _Atomic restrict volatile *, void volatile * ), 2221 2895 * ?=?( DT restrict volatile * _Atomic restrict volatile *, forall( dtype D ) D * ); 2896 2222 2897 forall( dtype DT ) DT _Atomic const restrict 2223 2898 * ?=?( DT _Atomic const restrict * restrict volatile *, … … 2233 2908 * ?=?( DT _Atomic const restrict * _Atomic restrict volatile *, 2234 2909 forall( dtype D ) D * ); 2910 2235 2911 forall( dtype DT ) DT _Atomic const volatile 2236 2912 * ?=?( DT _Atomic const volatile * restrict volatile *, … … 2246 2922 * ?=?( DT _Atomic const volatile * _Atomic restrict volatile *, 2247 2923 forall( dtype D ) D * ); 2924 2248 2925 forall( dtype DT ) DT _Atomic restrict volatile 2249 2926 * ?=?( DT _Atomic restrict volatile * restrict volatile *, … … 2259 2936 * ?=?( DT _Atomic restrict volatile * _Atomic restrict volatile *, 2260 2937 forall( dtype D ) D * ); 2938 2261 2939 forall( dtype DT ) DT const restrict volatile 2262 2940 * ?=?( DT const restrict volatile * restrict volatile *, … … 2272 2950 * ?=?( DT const restrict volatile * _Atomic restrict volatile *, 2273 2951 forall( dtype D ) D * ); 2952 2274 2953 forall( dtype DT ) DT _Atomic const restrict volatile 2275 2954 * ?=?( DT _Atomic const restrict volatile * restrict volatile *, … … 2285 2964 * ?=?( DT _Atomic const restrict volatile * _Atomic restrict volatile *, 2286 2965 forall( dtype D ) D * ); 2966 2287 2967 forall( dtype DT ) void 2288 2968 * ?=?( void * restrict volatile *, DT * ); 2969 2289 2970 forall( dtype DT ) void const 2290 2971 * ?=?( void const * restrict volatile *, DT const * ); 2972 2291 2973 forall( dtype DT ) void volatile 2292 2974 * ?=?( void volatile * restrict volatile *, DT volatile * ); 2975 2293 2976 forall( dtype DT ) void const volatile 2294 2977 * ?=?( void const volatile * restrict volatile *, DT const volatile * ); 2295 2978 \end{lstlisting} 2296 2979 \begin{rationale} 2297 The pattern of overloadings for simple assignment resembles that of pointer increment and decrement, except that the polymorphic pointer assignment functions declare a \lstinline$dtype$ parameter, instead of a \lstinline$type$ parameter, because the left operand may be a pointer to an incomplete type. 2980 The pattern of overloadings for simple assignment resembles that of pointer increment and decrement, 2981 except that the polymorphic pointer assignment functions declare a \lstinline$dtype$ parameter, 2982 instead of a \lstinline$type$ parameter, because the left operand may be a pointer to an incomplete 2983 type. 2298 2984 \end{rationale} 2299 2985 … … 2320 3006 2321 3007 \semantics 2322 The structure assignment functions provide member-wise assignment; 2323 each non-array member and each element of each array member of the right argument is assigned to the corresponding member or element of the left argument using the assignment function defined for its type. 2324 All other assignment functions have the same effect as the corresponding C assignment expression. 2325 \begin{rationale} 2326 Note that, by default, union assignment\index{deficiencies!union assignment} uses C semantics---that is, bitwise copy---even if some of the union members have programmer-defined assignment functions. 3008 The structure assignment functions provide member-wise assignment; each non-array member and each 3009 element of each array member of the right argument is assigned to the corresponding member or 3010 element of the left argument using the assignment function defined for its type. All other 3011 assignment functions have the same effect as the corresponding C assignment expression. 3012 \begin{rationale} 3013 Note that, by default, union assignment\index{deficiencies!union assignment} uses C semantics---that 3014 is, bitwise copy---even if some of the union members have programmer-defined assignment functions. 2327 3015 \end{rationale} 2328 3016 … … 2332 3020 \predefined 2333 3021 \begin{lstlisting} 2334 forall( otype T ) T3022 forall( type T ) T 2335 3023 * ?+=?( T * restrict volatile *, ptrdiff_t ), 2336 3024 * ?-=?( T * restrict volatile *, ptrdiff_t ), 2337 3025 * ?+=?( T * _Atomic restrict volatile *, ptrdiff_t ), 2338 3026 * ?-=?( T * _Atomic restrict volatile *, ptrdiff_t ); 2339 forall( otype T ) T _Atomic 3027 3028 forall( type T ) T _Atomic 2340 3029 * ?+=?( T _Atomic * restrict volatile *, ptrdiff_t ), 2341 3030 * ?-=?( T _Atomic * restrict volatile *, ptrdiff_t ), 2342 3031 * ?+=?( T _Atomic * _Atomic restrict volatile *, ptrdiff_t ), 2343 3032 * ?-=?( T _Atomic * _Atomic restrict volatile *, ptrdiff_t ); 2344 forall( otype T ) T const 3033 3034 forall( type T ) T const 2345 3035 * ?+=?( T const * restrict volatile *, ptrdiff_t ), 2346 3036 * ?-=?( T const * restrict volatile *, ptrdiff_t ), 2347 3037 * ?+=?( T const * _Atomic restrict volatile *, ptrdiff_t ), 2348 3038 * ?-=?( T const * _Atomic restrict volatile *, ptrdiff_t ); 2349 forall( otype T ) T restrict 3039 3040 forall( type T ) T restrict 2350 3041 * ?+=?( T restrict * restrict volatile *, ptrdiff_t ), 2351 3042 * ?-=?( T restrict * restrict volatile *, ptrdiff_t ), 2352 3043 * ?+=?( T restrict * _Atomic restrict volatile *, ptrdiff_t ), 2353 3044 * ?-=?( T restrict * _Atomic restrict volatile *, ptrdiff_t ); 2354 forall( otype T ) T volatile 3045 3046 forall( type T ) T volatile 2355 3047 * ?+=?( T volatile * restrict volatile *, ptrdiff_t ), 2356 3048 * ?-=?( T volatile * restrict volatile *, ptrdiff_t ), 2357 3049 * ?+=?( T volatile * _Atomic restrict volatile *, ptrdiff_t ), 2358 3050 * ?-=?( T volatile * _Atomic restrict volatile *, ptrdiff_t ); 2359 forall( otype T ) T _Atomic const 3051 3052 forall( type T ) T _Atomic const 2360 3053 * ?+=?( T _Atomic const restrict volatile *, ptrdiff_t ), 2361 3054 * ?-=?( T _Atomic const restrict volatile *, ptrdiff_t ), 2362 3055 * ?+=?( T _Atomic const _Atomic restrict volatile *, ptrdiff_t ), 2363 3056 * ?-=?( T _Atomic const _Atomic restrict volatile *, ptrdiff_t ); 2364 forall( otype T ) T _Atomic restrict 3057 3058 forall( type T ) T _Atomic restrict 2365 3059 * ?+=?( T _Atomic restrict * restrict volatile *, ptrdiff_t ), 2366 3060 * ?-=?( T _Atomic restrict * restrict volatile *, ptrdiff_t ), 2367 3061 * ?+=?( T _Atomic restrict * _Atomic restrict volatile *, ptrdiff_t ), 2368 3062 * ?-=?( T _Atomic restrict * _Atomic restrict volatile *, ptrdiff_t ); 2369 forall( otype T ) T _Atomic volatile 3063 3064 forall( type T ) T _Atomic volatile 2370 3065 * ?+=?( T _Atomic volatile * restrict volatile *, ptrdiff_t ), 2371 3066 * ?-=?( T _Atomic volatile * restrict volatile *, ptrdiff_t ), 2372 3067 * ?+=?( T _Atomic volatile * _Atomic restrict volatile *, ptrdiff_t ), 2373 3068 * ?-=?( T _Atomic volatile * _Atomic restrict volatile *, ptrdiff_t ); 2374 forall( otype T ) T const restrict 3069 3070 forall( type T ) T const restrict 2375 3071 * ?+=?( T const restrict * restrict volatile *, ptrdiff_t ), 2376 3072 * ?-=?( T const restrict * restrict volatile *, ptrdiff_t ), 2377 3073 * ?+=?( T const restrict * _Atomic restrict volatile *, ptrdiff_t ), 2378 3074 * ?-=?( T const restrict * _Atomic restrict volatile *, ptrdiff_t ); 2379 forall( otype T ) T const volatile 3075 3076 forall( type T ) T const volatile 2380 3077 * ?+=?( T const volatile * restrict volatile *, ptrdiff_t ), 2381 3078 * ?-=?( T const volatile * restrict volatile *, ptrdiff_t ), 2382 3079 * ?+=?( T const volatile * _Atomic restrict volatile *, ptrdiff_t ), 2383 3080 * ?-=?( T const volatile * _Atomic restrict volatile *, ptrdiff_t ); 2384 forall( otype T ) T restrict volatile 3081 3082 forall( type T ) T restrict volatile 2385 3083 * ?+=?( T restrict volatile * restrict volatile *, ptrdiff_t ), 2386 3084 * ?-=?( T restrict volatile * restrict volatile *, ptrdiff_t ), 2387 3085 * ?+=?( T restrict volatile * _Atomic restrict volatile *, ptrdiff_t ), 2388 3086 * ?-=?( T restrict volatile * _Atomic restrict volatile *, ptrdiff_t ); 2389 forall( otype T ) T _Atomic const restrict 3087 3088 forall( type T ) T _Atomic const restrict 2390 3089 * ?+=?( T _Atomic const restrict * restrict volatile *, ptrdiff_t ), 2391 3090 * ?-=?( T _Atomic const restrict * restrict volatile *, ptrdiff_t ), 2392 3091 * ?+=?( T _Atomic const restrict * _Atomic restrict volatile *, ptrdiff_t ), 2393 3092 * ?-=?( T _Atomic const restrict * _Atomic restrict volatile *, ptrdiff_t ); 2394 forall( otype T ) T _Atomic const volatile 3093 3094 forall( type T ) T _Atomic const volatile 2395 3095 * ?+=?( T _Atomic const volatile * restrict volatile *, ptrdiff_t ), 2396 3096 * ?-=?( T _Atomic const volatile * restrict volatile *, ptrdiff_t ), 2397 3097 * ?+=?( T _Atomic const volatile * _Atomic restrict volatile *, ptrdiff_t ), 2398 3098 * ?-=?( T _Atomic const volatile * _Atomic restrict volatile *, ptrdiff_t ); 2399 forall( otype T ) T _Atomic restrict volatile 3099 3100 forall( type T ) T _Atomic restrict volatile 2400 3101 * ?+=?( T _Atomic restrict volatile * restrict volatile *, ptrdiff_t ), 2401 3102 * ?-=?( T _Atomic restrict volatile * restrict volatile *, ptrdiff_t ), 2402 3103 * ?+=?( T _Atomic restrict volatile * _Atomic restrict volatile *, ptrdiff_t ), 2403 3104 * ?-=?( T _Atomic restrict volatile * _Atomic restrict volatile *, ptrdiff_t ); 2404 forall( otype T ) T const restrict volatile 3105 3106 forall( type T ) T const restrict volatile 2405 3107 * ?+=?( T const restrict volatile * restrict volatile *, ptrdiff_t ), 2406 3108 * ?-=?( T const restrict volatile * restrict volatile *, ptrdiff_t ), 2407 3109 * ?+=?( T const restrict volatile * _Atomic restrict volatile *, ptrdiff_t ), 2408 3110 * ?-=?( T const restrict volatile * _Atomic restrict volatile *, ptrdiff_t ); 2409 forall( otype T ) T _Atomic const restrict volatile 3111 3112 forall( type T ) T _Atomic const restrict volatile 2410 3113 * ?+=?( T _Atomic const restrict volatile * restrict volatile *, ptrdiff_t ), 2411 3114 * ?-=?( T _Atomic const restrict volatile * restrict volatile *, ptrdiff_t ), … … 2618 3321 \semantics 2619 3322 In the comma expression ``\lstinline$a, b$'', the first operand is interpreted as 2620 ``\lstinline$( void )(a)$'', which shall be unambiguous\index{ambiguous interpretation}. 2621 Theinterpretations of the expression are the interpretations of the second operand.3323 ``\lstinline$( void )(a)$'', which shall be unambiguous\index{ambiguous interpretation}. The 3324 interpretations of the expression are the interpretations of the second operand. 2622 3325 2623 3326 … … 2634 3337 2635 3338 \constraints 2636 If an identifier has \Index{no linkage}, there shall be no more than one declaration of the identifier ( in a declarator or type specifier ) with compatible types in the same scope and in the same name space, except that: 3339 If an identifier has \Index{no linkage}, there shall be no more than one declaration of the 3340 identifier ( in a declarator or type specifier ) with compatible types in the same scope and in the 3341 same name space, except that: 2637 3342 \begin{itemize} 2638 \item a typedef name may be redefined to denote the same type as it currently does, provided that type is not a variably modified type; 2639 \item tags may be redeclared as specified in section 6.7.2.3 of the {\c11} standard. 3343 \item 3344 a typedef name may be redefined to denote the same type as it currently does, provided that type is 3345 not a variably modified type; 3346 \item 3347 tags may be redeclared as specified in section 6.7.2.3 of the {\c11} standard. 2640 3348 \end{itemize} 2641 3349 \begin{rationale} 2642 This constraint adds the phrase ``with compatible types'' to the {\c11} constraint, to allow overloading. 2643 \end{rationale} 2644 2645 An identifier declared by a type declaration shall not be redeclared as a parameter in a function definition whose declarator includes an identifier list. 2646 \begin{rationale} 2647 This restriction echos {\c11}'s ban on the redeclaration of typedef names as parameters. 2648 This avoids an ambiguity between old-style function declarations and new-style function prototypes: 3350 This constraint adds the phrase ``with compatible types'' to the {\c11} constraint, to allow 3351 overloading. 3352 \end{rationale} 3353 3354 An identifier declared by a type declaration shall not be redeclared as a parameter in a function 3355 definition whose declarator includes an identifier list. 3356 \begin{rationale} 3357 This restriction echos {\c11}'s ban on the redeclaration of typedef names as parameters. This 3358 avoids an ambiguity between old-style function declarations and new-style function prototypes: 2649 3359 \begin{lstlisting} 2650 3360 void f( Complex, // ... 3000 characters ... 2651 3361 void g( Complex, // ... 3000 characters ... 2652 int Complex; 2653 { ...}2654 \end{lstlisting} 2655 Without the rule, \lstinline$Complex$ would be a type in the first case, and a parameter name in thesecond.3362 int Complex; { ... } 3363 \end{lstlisting} 3364 Without the rule, \lstinline$Complex$ would be a type in the first case, and a parameter name in the 3365 second. 2656 3366 \end{rationale} 2657 3367 … … 2672 3382 2673 3383 \semantics 2674 \CFA extends the {\c11} definition of \define{anonymous structure} to include structure specifiers with tags, and extends the {\c11} definition of \define{anonymous union} to include union specifiers with tags. 3384 \CFA extends the {\c11} definition of \define{anonymous structure} to include structure 3385 specifiers with tags, and extends the {\c11} definition of \define{anonymous union} to include union 3386 specifiers with tags. 2675 3387 \begin{rationale} 2676 3388 This extension imitates an extension in the Plan 9 C compiler \cite{Thompson90new}. … … 2689 3401 cp.x = 0; 2690 3402 cp.color = RED; 3403 2691 3404 struct literal {@\impl{literal}@ 2692 3405 enum { NUMBER, STRING } tag; 2693 3406 union { 2694 double n;2695 char *s;3407 double n; 3408 char *s; 2696 3409 }; 2697 3410 }; … … 2715 3428 \begin{comment} 2716 3429 \constraints 2717 If the \nonterm{declaration-specifiers} of a declaration that contains a \nonterm{forall-specifier} declares a structure or union tag, the types of the members of the structure or union shall not use any of the type identifiers declared by the \nonterm{type-parameter-list}. 2718 \begin{rationale} 2719 This sort of declaration is illegal because the scope of the type identifiers ends at the end of the declaration, but the scope of the structure tag does not. 2720 \begin{lstlisting} 2721 forall( otype T ) struct Pair { T a, b; 2722 } mkPair( T, T ); // illegal 2723 \end{lstlisting} 2724 If an instance of \lstinline$struct Pair$ was declared later in the current scope, what would the members' type be? 3430 If the \nonterm{declaration-specifiers} of a declaration that contains a \nonterm{forall-specifier} 3431 declares a structure or union tag, the types of the members of the structure or union shall not use 3432 any of the type identifiers declared by the \nonterm{type-parameter-list}. 3433 \begin{rationale} 3434 This sort of declaration is illegal because the scope of the type identifiers ends at the end of the 3435 declaration, but the scope of the structure tag does not. 3436 \begin{lstlisting} 3437 forall( type T ) struct Pair { T a, b; } mkPair( T, T ); // illegal 3438 \end{lstlisting} 3439 If an instance of \lstinline$struct Pair$ was declared later in the current scope, what would the 3440 members' type be? 2725 3441 \end{rationale} 2726 3442 \end{comment} 2727 3443 2728 3444 \semantics 2729 The \nonterm{type-parameter-list}s and assertions of the \nonterm{forall-specifier}s declare type identifiers, function and object identifiers with \Index{no linkage}. 3445 The \nonterm{type-parameter-list}s and assertions of the \nonterm{forall-specifier}s declare type 3446 identifiers, function and object identifiers with \Index{no linkage}. 2730 3447 2731 3448 If, in the declaration ``\lstinline$T D$'', \lstinline$T$ contains \nonterm{forall-specifier}s and … … 2733 3450 \begin{lstlisting} 2734 3451 D( @\normalsize\nonterm{parameter-type-list}@ ) 2735 \end{lstlisting} then a type identifier declared by one of the \nonterm{forall-specifier}s is an \define{inferred parameter} of the function declarator if and only if it is not an inferred parameter of a function declarator in \lstinline$D$, and it is used in the type of a parameter in the following 3452 \end{lstlisting} 3453 then a type identifier declared by one of the \nonterm{forall-specifier}s is an \define{inferred 3454 parameter} of the function declarator if and only if it is not an inferred parameter of a function 3455 declarator in \lstinline$D$, and it is used in the type of a parameter in the following 2736 3456 \nonterm{type-parameter-list} or it and an inferred parameter are used as arguments of a 2737 \Index{specification} in one of the \nonterm{forall-specifier}s. 2738 The identifiers declared by assertions that use an inferred parameter of a function declarator are \Index{assertion parameter}s of that function declarator. 3457 \Index{specification} in one of the \nonterm{forall-specifier}s. The identifiers declared by 3458 assertions that use an inferred parameter of a function declarator are \Index{assertion parameter}s 3459 of that function declarator. 2739 3460 2740 3461 \begin{comment} 2741 3462 \begin{rationale} 2742 Since every inferred parameter is used by some parameter, inference can be understood as a single bottom-up pass over the expression tree, that only needs to apply local reasoning at each node. 3463 Since every inferred parameter is used by some parameter, inference can be understood as a single 3464 bottom-up pass over the expression tree, that only needs to apply local reasoning at each node. 2743 3465 2744 3466 If this restriction were lifted, it would be possible to write 2745 3467 \begin{lstlisting} 2746 forall( otype T ) T * alloc( void );@\use{alloc}@ int *p = alloc(); 3468 forall( type T ) T * alloc( void );@\use{alloc}@ 3469 int *p = alloc(); 2747 3470 \end{lstlisting} 2748 3471 Here \lstinline$alloc()$ would receive \lstinline$int$ as an inferred argument, and return an 2749 \lstinline$int *$. 2750 In general, if a call to \lstinline$alloc()$ is a subexpression of an expression involving polymorphic functions and overloaded identifiers, there could be considerable distance between the call and the subexpression that causes \lstinline$T$ to be bound. 3472 \lstinline$int *$. In general, if a call to \lstinline$alloc()$ is a subexpression of an expression 3473 involving polymorphic functions and overloaded identifiers, there could be considerable distance 3474 between the call and the subexpression that causes \lstinline$T$ to be bound. 2751 3475 2752 3476 With the current restriction, \lstinline$alloc()$ must be given an argument that determines 2753 3477 \lstinline$T$: 2754 3478 \begin{lstlisting} 2755 forall( otype T ) T * alloc( T initial_value );@\use{alloc}@3479 forall( type T ) T * alloc( T initial_value );@\use{alloc}@ 2756 3480 \end{lstlisting} 2757 3481 \end{rationale} 2758 3482 \end{comment} 2759 3483 2760 If a function declarator is part of a function definition, its inferred parameters and assertion parameters have \Index{block scope};2761 otherwise, identifiers declared by assertions have a3484 If a function declarator is part of a function definition, its inferred parameters and assertion 3485 parameters have \Index{block scope}; otherwise, identifiers declared by assertions have a 2762 3486 \define{declaration scope}, which terminates at the end of the \nonterm{declaration}. 2763 3487 2764 3488 A function type that has at least one inferred parameter is a \define{polymorphic function} type. 2765 Function types with no inferred parameters are \define{monomorphic function} types. 2766 One function type is \define{less polymorphic} than another if it has fewer inferred parameters, or if it has the same number of inferred parameters and fewer of its explicit parameters have types that depend on an inferred parameter. 2767 2768 The names of inferred parameters and the order of identifiers in forall specifiers are not relevant to polymorphic function type compatibility. 2769 Let $f$ and $g$ be two polymorphic function types with the same number of inferred parameters, and let $f_i$ and $g_i$ be the inferred parameters of $f$ and $g$ in their order of occurance in the function types' \nonterm{parameter-type-list}s. 2770 Let $f'$ be $f$ with every occurrence of $f_i$ replaced by $g_i$, for all $i$. 2771 Then $f$ and $g$ are 2772 \Index{compatible type}s if $f'$'s and $g$'s return types and parameter lists are compatible, and if for every assertion parameter of $f'$ there is an assertion parameter in $g$ with the same identifier and compatible type, and vice versa. 3489 Function types with no inferred parameters are \define{monomorphic function} types. One function 3490 type is \define{less polymorphic} than another if it has fewer inferred parameters, or if it has the 3491 same number of inferred parameters and fewer of its explicit parameters have types that depend on an 3492 inferred parameter. 3493 3494 The names of inferred parameters and the order of identifiers in forall specifiers are not relevant 3495 to polymorphic function type compatibility. Let $f$ and $g$ be two polymorphic function types with 3496 the same number of inferred parameters, and let $f_i$ and $g_i$ be the inferred parameters of $f$ 3497 and $g$ in their order of occurance in the function types' \nonterm{parameter-type-list}s. Let $f'$ 3498 be $f$ with every occurrence of $f_i$ replaced by $g_i$, for all $i$. Then $f$ and $g$ are 3499 \Index{compatible type}s if $f'$'s and $g$'s return types and parameter lists are compatible, and if 3500 for every assertion parameter of $f'$ there is an assertion parameter in $g$ with the same 3501 identifier and compatible type, and vice versa. 2773 3502 2774 3503 \examples … … 2776 3505 \begin{lstlisting} 2777 3506 int fi( int ); 2778 forall( otype T ) T fT( T );3507 forall( type T ) T fT( T ); 2779 3508 \end{lstlisting} 2780 3509 \lstinline$fi()$ takes an \lstinline$int$ and returns an \lstinline$int$. \lstinline$fT()$ takes a … … 2782 3511 \begin{lstlisting} 2783 3512 int (*pfi )( int ) = fi; 2784 forall( otype T ) T (*pfT )( T ) = fT; 2785 \end{lstlisting} 2786 \lstinline$pfi$ and \lstinline$pfT$ are pointers to functions. \lstinline$pfT$ is not polymorphic, but the function it points at is. 3513 forall( type T ) T (*pfT )( T ) = fT; 3514 \end{lstlisting} 3515 \lstinline$pfi$ and \lstinline$pfT$ are pointers to functions. \lstinline$pfT$ is not 3516 polymorphic, but the function it points at is. 2787 3517 \begin{lstlisting} 2788 3518 int (*fvpfi( void ))( int ) { 2789 3519 return pfi; 2790 3520 } 2791 forall( otype T ) T (*fvpfT( void ))( T ) {3521 forall( type T ) T (*fvpfT( void ))( T ) { 2792 3522 return pfT; 2793 3523 } 2794 3524 \end{lstlisting} 2795 \lstinline$fvpfi()$ and \lstinline$fvpfT()$ are functions taking no arguments and returning pointers to functions. \lstinline$fvpfT()$ is monomorphic, but the function that its return value points at is polymorphic. 2796 \begin{lstlisting} 2797 forall( otype T ) int ( *fTpfi( T ) )( int ); 2798 forall( otype T ) T ( *fTpfT( T ) )( T ); 2799 forall( otype T, otype U ) U ( *fTpfU( T ) )( U ); 2800 \end{lstlisting} 2801 \lstinline$fTpfi()$ is a polymorphic function that returns a pointer to a monomorphic function taking an integer and returning an integer. 2802 It could return \lstinline$pfi$. \lstinline$fTpfT()$ is subtle: it is a polymorphic function returning a \emph{monomorphic} function taking and returning 2803 \lstinline$T$, where \lstinline$T$ is an inferred parameter of \lstinline$fTpfT()$. 2804 For instance, in the expression ``\lstinline$fTpfT(17)$'', \lstinline$T$ is inferred to be \lstinline$int$, and the returned value would have type \lstinline$int ( * )( int )$. ``\lstinline$fTpfT(17)(13)$'' and 3525 \lstinline$fvpfi()$ and \lstinline$fvpfT()$ are functions taking no arguments and returning pointers 3526 to functions. \lstinline$fvpfT()$ is monomorphic, but the function that its return value points 3527 at is polymorphic. 3528 \begin{lstlisting} 3529 forall( type T ) int ( *fTpfi( T ) )( int ); 3530 forall( type T ) T ( *fTpfT( T ) )( T ); 3531 forall( type T, type U ) U ( *fTpfU( T ) )( U ); 3532 \end{lstlisting} 3533 \lstinline$fTpfi()$ is a polymorphic function that returns a pointer to a monomorphic function 3534 taking an integer and returning an integer. It could return \lstinline$pfi$. \lstinline$fTpfT()$ 3535 is subtle: it is a polymorphic function returning a \emph{monomorphic} function taking and returning 3536 \lstinline$T$, where \lstinline$T$ is an inferred parameter of \lstinline$fTpfT()$. For instance, 3537 in the expression ``\lstinline$fTpfT(17)$'', \lstinline$T$ is inferred to be \lstinline$int$, and 3538 the returned value would have type \lstinline$int ( * )( int )$. ``\lstinline$fTpfT(17)(13)$'' and 2805 3539 ``\lstinline$fTpfT("yes")("no")$'' are legal, but ``\lstinline$fTpfT(17)("no")$'' is illegal. 2806 \lstinline$fTpfU()$ is polymorphic ( in type \lstinline$T$), and returns a pointer to a function that is polymorphic ( in type \lstinline$U$). ``\lstinline$f5(17)("no")$'' is a legal expression of type 3540 \lstinline$fTpfU()$ is polymorphic ( in type \lstinline$T$), and returns a pointer to a function that 3541 is polymorphic ( in type \lstinline$U$). ``\lstinline$f5(17)("no")$'' is a legal expression of type 2807 3542 \lstinline$char *$. 2808 3543 \begin{lstlisting} 2809 forall( otype T, otype U, otype V ) U * f( T *, U, V * const ); 2810 forall( otype U, otype V, otype W ) U * g( V *, U, W * const ); 2811 \end{lstlisting} 2812 The functions \lstinline$f()$ and \lstinline$g()$ have compatible types. 2813 Let \(f\) and \(g\) be their types; 2814 then \(f_1\) = \lstinline$T$, \(f_2\) = \lstinline$U$, \(f_3\) = \lstinline$V$, \(g_1\) 2815 = \lstinline$V$, \(g_2\) = \lstinline$U$, and \(g_3\) = \lstinline$W$. 2816 Replacing every \(f_i\) by \(g_i\) in \(f\) gives 2817 \begin{lstlisting} 2818 forall( otype V, otype U, otype W ) U * f( V *, U, W * const ); 2819 \end{lstlisting} which has a return type and parameter list that is compatible with \(g\). 2820 \begin{rationale} 2821 The word ``\lstinline$type$'' in a forall specifier is redundant at the moment, but I want to leave room for inferred parameters of ordinary types in case parameterized types get added one day. 3544 forall( type T, type U, type V ) U * f( T *, U, V * const ); 3545 forall( type U, type V, type W ) U * g( V *, U, W * const ); 3546 \end{lstlisting} 3547 The functions \lstinline$f()$ and \lstinline$g()$ have compatible types. Let \(f\) and \(g\) be 3548 their types; then \(f_1\) = \lstinline$T$, \(f_2\) = \lstinline$U$, \(f_3\) = \lstinline$V$, \(g_1\) 3549 = \lstinline$V$, \(g_2\) = \lstinline$U$, and \(g_3\) = \lstinline$W$. Replacing every \(f_i\) 3550 by \(g_i\) in \(f\) gives 3551 \begin{lstlisting} 3552 forall( type V, type U, type W ) U * f( V *, U, W * const ); 3553 \end{lstlisting} 3554 which has a return type and parameter list that is compatible with \(g\). 3555 \begin{rationale} 3556 The word ``\lstinline$type$'' in a forall specifier is redundant at the moment, but I want to leave 3557 room for inferred parameters of ordinary types in case parameterized types get added one day. 2822 3558 2823 3559 Even without parameterized types, I might try to allow 2824 3560 \begin{lstlisting} 2825 3561 forall( int n ) int sum( int vector[n] ); 2826 \end{lstlisting} but C currently rewrites array parameters as pointer parameters, so the effects of such a change require more thought. 2827 \end{rationale} 2828 2829 \begin{rationale} 2830 A polymorphic declaration must do two things: it must introduce type parameters, and it must apply assertions to those types. 2831 Adding this to existing C declaration syntax and semantics was delicate, and not entirely successful. 2832 2833 C depends on declaration-before-use, so a forall specifier must introduce type names before they can be used in the declaration specifiers. 2834 This could be done by making the forall specifier part of the declaration specifiers, or by making it a new introductory clause of declarations. 2835 2836 Assertions are also part of polymorphic function types, because it must be clear which functions have access to the assertion parameters declared by the assertions. 2837 All attempts to put assertions inside an introductory clause produced complex semantics and confusing code. 2838 Building them into the declaration specifiers could be done by placing them in the function's parameter list, or in a forall specifier that is a declaration specifier. 2839 Assertions are also used with type parameters of specifications, and by type declarations. 2840 For consistency's sake it seems best to attach assertions to the type declarations in forall specifiers, which means that forall specifiers must be declaration specifiers. 3562 \end{lstlisting} 3563 but C currently rewrites array parameters as pointer parameters, so the effects of such a change 3564 require more thought. 3565 \end{rationale} 3566 3567 \begin{rationale} 3568 A polymorphic declaration must do two things: it must introduce type parameters, and it must apply 3569 assertions to those types. Adding this to existing C declaration syntax and semantics was delicate, 3570 and not entirely successful. 3571 3572 C depends on declaration-before-use, so a forall specifier must introduce type names before they can 3573 be used in the declaration specifiers. This could be done by making the forall specifier part of 3574 the declaration specifiers, or by making it a new introductory clause of declarations. 3575 3576 Assertions are also part of polymorphic function types, because it must be clear which functions 3577 have access to the assertion parameters declared by the assertions. All attempts to put assertions 3578 inside an introductory clause produced complex semantics and confusing code. Building them into the 3579 declaration specifiers could be done by placing them in the function's parameter list, or in a 3580 forall specifier that is a declaration specifier. Assertions are also used with type parameters of 3581 specifications, and by type declarations. For consistency's sake it seems best to attach assertions 3582 to the type declarations in forall specifiers, which means that forall specifiers must be 3583 declaration specifiers. 2841 3584 \end{rationale} 2842 3585 %HERE … … 2852 3595 2853 3596 \constraints 2854 \lstinline$restrict$\index{register@{\lstinline$restrict$}} Types other than type parameters and pointer types whose referenced type is an object type shall not be restrict-qualified. 3597 \lstinline$restrict$\index{register@{\lstinline$restrict$}} Types other than type parameters and 3598 pointer types whose referenced type is an object type shall not be restrict-qualified. 2855 3599 2856 3600 \semantics 2857 An object's type may be a restrict-qualified type parameter. \lstinline$restrict$ does not establish any special semantics in that case. 2858 2859 \begin{rationale} 2860 \CFA loosens the constraint on the restrict qualifier so that restrict-qualified pointers may be passed to polymorphic functions. 2861 \end{rationale} 2862 2863 \lstinline$lvalue$ may be used to qualify the return type of a function type. 2864 Let \lstinline$T$ be an unqualified version of a type; 2865 then the result of calling a function with return type 3601 An object's type may be a restrict-qualified type parameter. \lstinline$restrict$ does not 3602 establish any special semantics in that case. 3603 3604 \begin{rationale} 3605 \CFA loosens the constraint on the restrict qualifier so that restrict-qualified pointers may be 3606 passed to polymorphic functions. 3607 \end{rationale} 3608 3609 \lstinline$lvalue$ may be used to qualify the return type of a function type. Let \lstinline$T$ be 3610 an unqualified version of a type; then the result of calling a function with return type 2866 3611 \lstinline$lvalue T$ is a \Index{modifiable lvalue} of type \lstinline$T$. 2867 \lstinline$const$\use{const} and \lstinline$volatile$\use{volatile} qualifiers may also be added to indicate that the function result is a constant or volatile lvalue. 2868 \begin{rationale} 2869 The \lstinline$const$ and \lstinline$volatile$ qualifiers can only be sensibly used to qualify the return type of a function if the \lstinline$lvalue$ qualifier is also used. 2870 \end{rationale} 2871 2872 An {lvalue}-qualified type may be used in a \Index{cast expression} if the operand is an lvalue; 2873 the result of the expression is an lvalue. 2874 2875 \begin{rationale} 2876 \lstinline$lvalue$ provides some of the functionality of {\CC}'s ``\lstinline$T&$'' ( reference to object of type \lstinline$T$) type. 2877 Reference types have four uses in {\CC}. 3612 \lstinline$const$\use{const} and \lstinline$volatile$\use{volatile} qualifiers may also be added to 3613 indicate that the function result is a constant or volatile lvalue. 3614 \begin{rationale} 3615 The \lstinline$const$ and \lstinline$volatile$ qualifiers can only be sensibly used to qualify the 3616 return type of a function if the \lstinline$lvalue$ qualifier is also used. 3617 \end{rationale} 3618 3619 An {lvalue}-qualified type may be used in a \Index{cast expression} if the operand is an lvalue; the 3620 result of the expression is an lvalue. 3621 3622 \begin{rationale} 3623 \lstinline$lvalue$ provides some of the functionality of {\CC}'s ``\lstinline$T&$'' ( reference to 3624 object of type \lstinline$T$) type. Reference types have four uses in {\CC}. 2878 3625 \begin{itemize} 2879 3626 \item … … 2882 3629 2883 3630 \item 2884 A reference can be used to define an alias for a complicated lvalue expression, as a way of getting some of the functionality of the Pascal \lstinline$with$ statement. 2885 The following {\CC} code gives an example. 3631 A reference can be used to define an alias for a complicated lvalue expression, as a way of getting 3632 some of the functionality of the Pascal \lstinline$with$ statement. The following {\CC} code gives 3633 an example. 2886 3634 \begin{lstlisting} 2887 3635 { … … 2893 3641 2894 3642 \item 2895 A reference parameter can be used to allow a function to modify an argument without forcing the caller to pass the address of the argument. 2896 This is most useful for user-defined assignment operators. 2897 In {\CC}, plain assignment is done by a function called ``\lstinline$operator=$'', and the two expressions 3643 A reference parameter can be used to allow a function to modify an argument without forcing the 3644 caller to pass the address of the argument. This is most useful for user-defined assignment 3645 operators. In {\CC}, plain assignment is done by a function called ``\lstinline$operator=$'', and 3646 the two expressions 2898 3647 \begin{lstlisting} 2899 3648 a = b; 2900 3649 operator=( a, b ); 2901 \end{lstlisting} are equivalent.2902 If \lstinline$a$ and \lstinline$b$ are of type \lstinline$T$, then the first parameter of \lstinline$operator=$ must have type ``\lstinline$T&$''. 2903 It cannot have type3650 \end{lstlisting} 3651 are equivalent. If \lstinline$a$ and \lstinline$b$ are of type \lstinline$T$, then the first 3652 parameter of \lstinline$operator=$ must have type ``\lstinline$T&$''. It cannot have type 2904 3653 \lstinline$T$, because then assignment couldn't alter the variable, and it can't have type 2905 3654 ``\lstinline$T *$'', because the assignment would have to be written ``\lstinline$&a = b;$''. 2906 3655 2907 In the case of user-defined operators, this could just as well be handled by using pointer types and by changing the rewrite rules so that ``\lstinline$a = b;$'' is equivalent to 2908 ``\lstinline$operator=(&( a), b )$''. 2909 Reference parameters of ``normal'' functions are Bad Things, because they remove a useful property of C function calls: an argument can only be modified by a function if it is preceded by ``\lstinline$&$''. 3656 In the case of user-defined operators, this could just as well be handled by using pointer types and 3657 by changing the rewrite rules so that ``\lstinline$a = b;$'' is equivalent to 3658 ``\lstinline$operator=(&( a), b )$''. Reference parameters of ``normal'' functions are Bad Things, 3659 because they remove a useful property of C function calls: an argument can only be modified by a 3660 function if it is preceded by ``\lstinline$&$''. 2910 3661 2911 3662 \item … … 2917 3668 void fiddle( const Thing & ); 2918 3669 \end{lstlisting} 2919 If the second form is used, then constructors and destructors are not invoked to create a temporary variable at the call site ( and it is bad style for the caller to make any assumptions about such things), and within \lstinline$fiddle$ the parameter is subject to the usual problems caused by aliases. 2920 The reference form might be chosen for efficiency's sake if \lstinline$Thing$s are too large or their constructors or destructors are too expensive. 2921 An implementation may switch between them without causing trouble for well-behaved clients. 2922 This leaves the implementor to define ``too large'' and ``too expensive''. 3670 If the second form is used, then constructors and destructors are not invoked to create a temporary 3671 variable at the call site ( and it is bad style for the caller to make any assumptions about such 3672 things), and within \lstinline$fiddle$ the parameter is subject to the usual problems caused by 3673 aliases. The reference form might be chosen for efficiency's sake if \lstinline$Thing$s are too 3674 large or their constructors or destructors are too expensive. An implementation may switch between 3675 them without causing trouble for well-behaved clients. This leaves the implementor to define ``too 3676 large'' and ``too expensive''. 2923 3677 2924 3678 I propose to push this job onto the compiler by allowing it to implement 2925 3679 \begin{lstlisting} 2926 3680 void fiddle( const volatile Thing ); 2927 \end{lstlisting} with call-by-reference. 2928 Since it knows all about the size of \lstinline$Thing$s and the parameter passing mechanism, it should be able to come up with a better definition of ``too large'', and may be able to make a good guess at ``too expensive''. 3681 \end{lstlisting} 3682 with call-by-reference. Since it knows all about the size of \lstinline$Thing$s and the parameter 3683 passing mechanism, it should be able to come up with a better definition of ``too large'', and may 3684 be able to make a good guess at ``too expensive''. 2929 3685 \end{itemize} 2930 3686 2931 In summary, since references are only really necessary for returning lvalues, I'll only provide lvalue functions. 3687 In summary, since references are only really necessary for returning lvalues, I'll only provide 3688 lvalue functions. 2932 3689 \end{rationale} 2933 3690 … … 2936 3693 \subsection{Initialization} 2937 3694 2938 An expression that is used as an \nonterm{initializer} is treated as being cast to the type of the object being initialized. 2939 An expression used in an \nonterm{initializer-list} is treated as being cast to the type of the aggregate member that it initializes. 2940 In either case the cast must have a single unambiguous \Index{interpretation}. 3695 An expression that is used as an \nonterm{initializer} is treated as being cast to the type of the 3696 object being initialized. An expression used in an \nonterm{initializer-list} is treated as being 3697 cast to the type of the aggregate member that it initializes. In either case the cast must have a 3698 single unambiguous \Index{interpretation}. 2941 3699 2942 3700 … … 2959 3717 \end{syntax} 2960 3718 \begin{rationale} 2961 The declarations allowed in a specification are much the same as those allowed in a structure, except that bit fields are not allowed, and \Index{incomplete type}s and function types are allowed. 3719 The declarations allowed in a specification are much the same as those allowed in a structure, 3720 except that bit fields are not allowed, and \Index{incomplete type}s and function types are allowed. 2962 3721 \end{rationale} 2963 3722 2964 3723 \semantics 2965 A \define{specification definition} defines a name for a \define{specification}: a parameterized collection of object and function declarations. 3724 A \define{specification definition} defines a name for a \define{specification}: a parameterized 3725 collection of object and function declarations. 2966 3726 2967 3727 The declarations in a specification consist of the declarations in the 2968 3728 \nonterm{spec-declaration-list} and declarations produced by any assertions in the 2969 \nonterm{spec-parameter-list}. 2970 If the collection contains two declarations that declare the same identifier and have compatible types, they are combined into one declaration with the composite type constructed from the two types. 3729 \nonterm{spec-parameter-list}. If the collection contains two declarations that declare the same 3730 identifier and have compatible types, they are combined into one declaration with the composite type 3731 constructed from the two types. 2971 3732 2972 3733 … … 2986 3747 2987 3748 \constraints 2988 The \nonterm{identifier} in an assertion that is not a \nonterm{spec-declaration} shall be the name of a specification. 2989 The \nonterm{type-name-list} shall contain one \nonterm{type-name} argument for each \nonterm{type-parameter} in that specification's \nonterm{spec-parameter-list}. 2990 If the 2991 \nonterm{type-parameter} uses type-class \lstinline$type$\use{type}, the argument shall be the type name of an \Index{object type}; 2992 if it uses \lstinline$dtype$, the argument shall be the type name of an object type or an \Index{incomplete type}; 2993 and if it uses \lstinline$ftype$, the argument shall be the type name of a \Index{function type}. 3749 The \nonterm{identifier} in an assertion that is not a \nonterm{spec-declaration} shall be the name 3750 of a specification. The \nonterm{type-name-list} shall contain one \nonterm{type-name} argument for 3751 each \nonterm{type-parameter} in that specification's \nonterm{spec-parameter-list}. If the 3752 \nonterm{type-parameter} uses type-class \lstinline$type$\use{type}, the argument shall be the type 3753 name of an \Index{object type}; if it uses \lstinline$dtype$, the argument shall be the type name of 3754 an object type or an \Index{incomplete type}; and if it uses \lstinline$ftype$, the argument shall 3755 be the type name of a \Index{function type}. 2994 3756 2995 3757 \semantics … … 2997 3759 \define{assertion parameters}. 2998 3760 2999 The assertion parameters produced by an assertion that applies the name of a specification to type arguments are found by taking the declarations specified in the specification and treating each of the specification's parameters as a synonym for the corresponding \nonterm{type-name} argument. 3000 3001 The collection of assertion parameters produced by the \nonterm{assertion-list} are found by combining the declarations produced by each assertion. 3002 If the collection contains two declarations that declare the same identifier and have compatible types, they are combined into one declaration with the \Index{composite type} constructed from the two types. 3761 The assertion parameters produced by an assertion that applies the name of a specification to type 3762 arguments are found by taking the declarations specified in the specification and treating each of 3763 the specification's parameters as a synonym for the corresponding \nonterm{type-name} argument. 3764 3765 The collection of assertion parameters produced by the \nonterm{assertion-list} are found by 3766 combining the declarations produced by each assertion. If the collection contains two declarations 3767 that declare the same identifier and have compatible types, they are combined into one declaration 3768 with the \Index{composite type} constructed from the two types. 3003 3769 3004 3770 \examples 3005 3771 \begin{lstlisting} 3006 forall( otype T | T ?*?( T, T ))@\use{?*?}@3772 forall( type T | T ?*?( T, T ))@\use{?*?}@ 3007 3773 T square( T val ) {@\impl{square}@ 3008 3774 return val + val; 3009 3775 } 3010 trait summable( otype T ) {@\impl{summable}@ 3776 3777 context summable( type T ) {@\impl{summable}@ 3011 3778 T ?+=?( T *, T );@\use{?+=?}@ 3012 3779 const T 0;@\use{0}@ 3013 3780 }; 3014 trait list_of( otype List, otype Element ) {@\impl{list_of}@3781 context list_of( type List, type Element ) {@\impl{list_of}@ 3015 3782 Element car( List ); 3016 3783 List cdr( List ); … … 3019 3786 int is_nil( List ); 3020 3787 }; 3021 trait sum_list( otype List, otype Element | summable( Element ) | list_of( List, Element ) ) {}; 3022 \end{lstlisting} 3023 \lstinline$sum_list$ contains seven declarations, which describe a list whose elements can be added up. 3024 The assertion ``\lstinline$|sum_list( i_list, int )$''\use{sum_list} produces the assertion parameters 3788 context sum_list( type List, type Element | summable( Element ) | list_of( List, Element ) ) {}; 3789 \end{lstlisting} 3790 \lstinline$sum_list$ contains seven declarations, which describe a list whose elements can be added 3791 up. The assertion ``\lstinline$|sum_list( i_list, int )$''\use{sum_list} produces the assertion 3792 parameters 3025 3793 \begin{lstlisting} 3026 3794 int ?+=?( int *, int ); … … 3057 3825 3058 3826 \constraints 3059 If a type declaration has block scope, and the declared identifier has external or internal linkage, the declaration shall have no initializer for the identifier. 3827 If a type declaration has block scope, and the declared identifier has external or internal linkage, 3828 the declaration shall have no initializer for the identifier. 3060 3829 3061 3830 \semantics 3062 A \nonterm{type-parameter} or a \nonterm{type-declarator} declares an identifier to be a \Index{type name} for a type incompatible with all other types. 3063 3064 An identifier declared by a \nonterm{type-parameter} has \Index{no linkage}. 3065 Identifiers declared with type-class \lstinline$type$\use{type} are \Index{object type}s; 3066 those declared with type-class 3067 \lstinline$dtype$\use{dtype} are \Index{incomplete type}s; 3068 and those declared with type-class 3069 \lstinline$ftype$\use{ftype} are \Index{function type}s. 3070 The identifier has \Index{block scope} that terminates at the end of the \nonterm{spec-declaration-list} or polymorphic function that contains the \nonterm{type-parameter}. 3071 3072 A \nonterm{type-declarator} with an \Index{initializer} is a \define{type definition}. The declared identifier is an \Index{incomplete type} within the initializer, and an \Index{object type} after the end of the initializer. 3073 The type in the initializer is called the \define{implementation 3074 type}. 3075 Within the scope of the declaration, \Index{implicit conversion}s can be performed between the defined type and the implementation type, and between pointers to the defined type and pointers to the implementation type. 3076 3077 A type declaration without an \Index{initializer} and without a \Index{storage-class specifier} or with storage-class specifier \lstinline$static$\use{static} defines an \Index{incomplete type}. 3078 If a 3079 \Index{translation unit} or \Index{block} contains one or more such declarations for an identifier, it must contain exactly one definition of the identifier ( but not in an enclosed block, which would define a new type known only within that block). 3831 A \nonterm{type-parameter} or a \nonterm{type-declarator} declares an identifier to be a \Index{type 3832 name} for a type incompatible with all other types. 3833 3834 An identifier declared by a \nonterm{type-parameter} has \Index{no linkage}. Identifiers declared 3835 with type-class \lstinline$type$\use{type} are \Index{object type}s; those declared with type-class 3836 \lstinline$dtype$\use{dtype} are \Index{incomplete type}s; and those declared with type-class 3837 \lstinline$ftype$\use{ftype} are \Index{function type}s. The identifier has \Index{block scope} that 3838 terminates at the end of the \nonterm{spec-declaration-list} or polymorphic function that contains 3839 the \nonterm{type-parameter}. 3840 3841 A \nonterm{type-declarator} with an \Index{initializer} is a \define{type definition}. The declared 3842 identifier is an \Index{incomplete type} within the initializer, and an \Index{object type} after 3843 the end of the initializer. The type in the initializer is called the \define{implementation 3844 type}. Within the scope of the declaration, \Index{implicit conversion}s can be performed between 3845 the defined type and the implementation type, and between pointers to the defined type and pointers 3846 to the implementation type. 3847 3848 A type declaration without an \Index{initializer} and without a \Index{storage-class specifier} or 3849 with storage-class specifier \lstinline$static$\use{static} defines an \Index{incomplete type}. If a 3850 \Index{translation unit} or \Index{block} contains one or more such declarations for an identifier, 3851 it must contain exactly one definition of the identifier ( but not in an enclosed block, which would 3852 define a new type known only within that block). 3080 3853 \begin{rationale} 3081 3854 Incomplete type declarations allow compact mutually-recursive types. 3082 3855 \begin{lstlisting} 3083 otype t1; // incomplete type declaration 3084 otype t2 = struct { t1 * p; ... }; 3085 otype t1 = struct { t2 * p; ... }; 3086 \end{lstlisting} 3087 Without them, mutual recursion could be handled by declaring mutually recursive structures, then initializing the types to those structures. 3856 type t1; // Incomplete type declaration. 3857 type t2 = struct { t1 * p; ... }; 3858 type t1 = struct { t2 * p; ... }; 3859 \end{lstlisting} 3860 Without them, mutual recursion could be handled by declaring mutually recursive structures, then 3861 initializing the types to those structures. 3088 3862 \begin{lstlisting} 3089 3863 struct s1; 3090 otype t2 = struct s2 { struct s1 * p; ... }; 3091 otype t1 = struct s1 { struct s2 * p; ... }; 3092 \end{lstlisting} 3093 This introduces extra names, and may force the programmer to cast between the types and their implementations. 3864 type t2 = struct s2 { struct s1 * p; ... }; 3865 type t1 = struct s1 { struct s2 * p; ... }; 3866 \end{lstlisting} 3867 This introduces extra names, and may force the programmer to cast between the types and their 3868 implementations. 3094 3869 \end{rationale} 3095 3870 3096 3871 A type declaration without an initializer and with \Index{storage-class specifier} 3097 \lstinline$extern$\use{extern} is an \define{opaque type declaration}. 3098 Opaque types are3099 \Index{object type}s. 3100 An opaque type is not a \nonterm{constant-expression}; 3101 neither is a structure or union that has a member whose type is not a \nonterm{constant-expression}. Every other 3102 \ Index{object type} is a \nonterm{constant-expression}.3103 Objects with static storage duration shall be declared with a type that is a \nonterm{constant-expression}. 3104 \begin{rationale} 3105 Type declarations can declare identifiers with external linkage, whereas typedef declarations declare identifiers that only exist within a translation unit.3106 These opaque types can be used in declarations, but the implementation of the type is not visible. 3107 3108 Static objects can not have opaque types because space for them would have to be allocated at program start-up. 3109 This is a deficiency\index{deficiencies!static opaque objects}, but I don't wantto deal with ``module initialization'' code just now.3110 \end{rationale} 3111 3112 An \Index{incomplete type} which is not a qualified version\index{qualified type} of a type is a value of \Index{type-class} \lstinline$dtype$.3113 An object type\index{object types} which is not a qualified version of a type is a value of type-classes \lstinline$type$ and \lstinline$dtype$. 3114 A3872 \lstinline$extern$\use{extern} is an \define{opaque type declaration}. Opaque types are 3873 \Index{object type}s. An opaque type is not a \nonterm{constant-expression}; neither is a structure 3874 or union that has a member whose type is not a \nonterm{constant-expression}. Every other 3875 \Index{object type} is a \nonterm{constant-expression}. Objects with static storage duration shall 3876 be declared with a type that is a \nonterm{constant-expression}. 3877 \begin{rationale} 3878 Type declarations can declare identifiers with external linkage, whereas typedef declarations 3879 declare identifiers that only exist within a translation unit. These opaque types can be used in 3880 declarations, but the implementation of the type is not visible. 3881 3882 Static objects can not have opaque types because space for them would have to be allocated at 3883 program start-up. This is a deficiency\index{deficiencies!static opaque objects}, but I don't want 3884 to deal with ``module initialization'' code just now. 3885 \end{rationale} 3886 3887 An \Index{incomplete type} which is not a qualified version\index{qualified type} of a type is a 3888 value of \Index{type-class} \lstinline$dtype$. An object type\index{object types} which is not a 3889 qualified version of a type is a value of type-classes \lstinline$type$ and \lstinline$dtype$. A 3115 3890 \Index{function type} is a value of type-class \lstinline$ftype$. 3116 3891 \begin{rationale} 3117 Syntactically, a type value is a \nonterm{type-name}, which is a declaration for an object which omits the identifier being declared. 3118 3119 Object types are precisely the types that can be instantiated. 3120 Type qualifiers are not included in type values because the compiler needs the information they provide at compile time to detect illegal statements or to produce efficient machine instructions. 3121 For instance, the code that a compiler must generate to manipulate an object that has volatile-qualified type may be different from the code to manipulate an ordinary object. 3122 3123 Type qualifiers are a weak point of C's type system. 3124 Consider the standard library function 3125 \lstinline$strchr()$ which, given a string and a character, returns a pointer to the first occurrence of the character in the string. 3892 Syntactically, a type value is a \nonterm{type-name}, which is a declaration for an object which 3893 omits the identifier being declared. 3894 3895 Object types are precisely the types that can be instantiated. Type qualifiers are not included in 3896 type values because the compiler needs the information they provide at compile time to detect 3897 illegal statements or to produce efficient machine instructions. For instance, the code that a 3898 compiler must generate to manipulate an object that has volatile-qualified type may be different 3899 from the code to manipulate an ordinary object. 3900 3901 Type qualifiers are a weak point of C's type system. Consider the standard library function 3902 \lstinline$strchr()$ which, given a string and a character, returns a pointer to the first 3903 occurrence of the character in the string. 3126 3904 \begin{lstlisting} 3127 3905 char *strchr( const char *s, int c ) {@\impl{strchr}@ 3128 3906 char real_c = c; // done because c was declared as int. 3129 3907 for ( ; *s != real_c; s++ ) 3130 if ( *s == '\0' ) return NULL;3908 if ( *s == '\0' ) return NULL; 3131 3909 return ( char * )s; 3132 3910 } 3133 3911 \end{lstlisting} 3134 The parameter \lstinline$s$ must be \lstinline$const char *$, because \lstinline$strchr()$ might be used to search a constant string, but the return type must be \lstinline$char *$, because the result might be used to modify a non-constant string. 3135 Hence the body must perform a cast, and ( even worse) 3136 \lstinline$strchr()$ provides a type-safe way to attempt to modify constant strings. 3137 What is needed is some way to say that \lstinline$s$'s type might contain qualifiers, and the result type has exactly the same qualifiers. 3138 Polymorphic functions do not provide a fix for this deficiency\index{deficiencies!pointers to qualified types}, because type qualifiers are not part of type values. 3139 Instead, overloading can be used to define \lstinline$strchr()$ for each combination of qualifiers. 3140 \end{rationale} 3141 3142 \begin{rationale} 3143 Since \Index{incomplete type}s are not type values, they can not be used as the initializer in a type declaration, or as the type of a structure or union member. 3144 This prevents the declaration of types that contain each other. 3145 \begin{lstlisting} 3146 otype t1; 3147 otype t2 = t1; // illegal: incomplete type t1 3148 otype t1 = t2; 3149 \end{lstlisting} 3150 3151 The initializer in a file-scope declaration must be a constant expression. 3152 This means type declarations can not build on opaque types, which is a deficiency\index{deficiencies!nesting opaque 3912 The parameter \lstinline$s$ must be \lstinline$const char *$, because \lstinline$strchr()$ might be 3913 used to search a constant string, but the return type must be \lstinline$char *$, because the result 3914 might be used to modify a non-constant string. Hence the body must perform a cast, and ( even worse) 3915 \lstinline$strchr()$ provides a type-safe way to attempt to modify constant strings. What is needed 3916 is some way to say that \lstinline$s$'s type might contain qualifiers, and the result type has 3917 exactly the same qualifiers. Polymorphic functions do not provide a fix for this 3918 deficiency\index{deficiencies!pointers to qualified types}, because type qualifiers are not part of 3919 type values. Instead, overloading can be used to define \lstinline$strchr()$ for each combination 3920 of qualifiers. 3921 \end{rationale} 3922 3923 \begin{rationale} 3924 Since \Index{incomplete type}s are not type values, they can not be used as the initializer in a 3925 type declaration, or as the type of a structure or union member. This prevents the declaration of 3926 types that contain each other. 3927 \begin{lstlisting} 3928 type t1; 3929 type t2 = t1; // illegal: incomplete type t1. 3930 type t1 = t2; 3931 \end{lstlisting} 3932 3933 The initializer in a file-scope declaration must be a constant expression. This means type 3934 declarations can not build on opaque types, which is a deficiency\index{deficiencies!nesting opaque 3153 3935 types}. 3154 3936 \begin{lstlisting} 3155 extern otype Huge; // extended-precision integer type3156 otype Rational = struct {3937 extern type Huge; // extended-precision integer type. 3938 type Rational = struct { 3157 3939 Huge numerator, denominator; // illegal 3158 3940 }; … … 3162 3944 \end{lstlisting} 3163 3945 Without this restriction, \CFA might require ``module initialization'' code ( since 3164 \lstinline$Rational$ has external linkage, it must be created before any other translation unit instantiates it), and would force an ordering on the initialization of the translation unit that defines \lstinline$Huge$ and the translation that declares \lstinline$Rational$. 3165 3166 A benefit of the restriction is that it prevents the declaration in separate translation units of types that contain each other, which would be hard to prevent otherwise. 3946 \lstinline$Rational$ has external linkage, it must be created before any other translation unit 3947 instantiates it), and would force an ordering on the initialization of the translation unit that 3948 defines \lstinline$Huge$ and the translation that declares \lstinline$Rational$. 3949 3950 A benefit of the restriction is that it prevents the declaration in separate translation units of 3951 types that contain each other, which would be hard to prevent otherwise. 3167 3952 \begin{lstlisting} 3168 3953 // File a.c: … … 3177 3962 \begin{rationale} 3178 3963 Since a \nonterm{type-declaration} is a \nonterm{declaration} and not a 3179 \nonterm{struct-declaration}, type declarations can not be structure members. 3180 The form of 3964 \nonterm{struct-declaration}, type declarations can not be structure members. The form of 3181 3965 \nonterm{type-declaration} forbids arrays of, pointers to, and functions returning \lstinline$type$. 3182 Hence the syntax of \nonterm{type-specifier} does not have to be extended to allow type-valued expressions. 3183 It also side-steps the problem of type-valued expressions producing different values in different declarations. 3184 3185 Since a type declaration is not a \nonterm{parameter-declaration}, functions can not have explicit type parameters. 3186 This may be too restrictive, but it attempts to make compilation simpler. 3187 Recall that when traditional C scanners read in an identifier, they look it up in the symbol table to determine whether or not it is a typedef name, and return a ``type'' or ``identifier'' token depending on what they find. 3188 A type parameter would add a type name to the current scope. 3189 The scope manipulations involved in parsing the declaration of a function that takes function pointer parameters and returns a function pointer may just be too complicated. 3190 3191 Explicit type parameters don't seem to be very useful, anyway, because their scope would not include the return type of the function. 3192 Consider the following attempt to define a type-safe memory allocation function. 3966 Hence the syntax of \nonterm{type-specifier} does not have to be extended to allow type-valued 3967 expressions. It also side-steps the problem of type-valued expressions producing different values 3968 in different declarations. 3969 3970 Since a type declaration is not a \nonterm{parameter-declaration}, functions can not have explicit 3971 type parameters. This may be too restrictive, but it attempts to make compilation simpler. Recall 3972 that when traditional C scanners read in an identifier, they look it up in the symbol table to 3973 determine whether or not it is a typedef name, and return a ``type'' or ``identifier'' token 3974 depending on what they find. A type parameter would add a type name to the current scope. The 3975 scope manipulations involved in parsing the declaration of a function that takes function pointer 3976 parameters and returns a function pointer may just be too complicated. 3977 3978 Explicit type parameters don't seem to be very useful, anyway, because their scope would not include 3979 the return type of the function. Consider the following attempt to define a type-safe memory 3980 allocation function. 3193 3981 \begin{lstlisting} 3194 3982 #include <stdlib.h> 3195 T * new( otype T ) { return ( T * )malloc( sizeof( T) ); }; 3196 @\ldots@ int * ip = new( int ); 3197 \end{lstlisting} 3198 This looks sensible, but \CFA's declaration-before-use rules mean that ``\lstinline$T$'' in the function body refers to the parameter, but the ``\lstinline$T$'' in the return type refers to the meaning of \lstinline$T$ in the scope that contains \lstinline$new$; 3199 it could be undefined, or a type name, or a function or variable name. 3200 Nothing good can result from such a situation. 3983 T * new( type T ) { return ( T * )malloc( sizeof( T) ); }; 3984 @\ldots@ 3985 int * ip = new( int ); 3986 \end{lstlisting} 3987 This looks sensible, but \CFA's declaration-before-use rules mean that ``\lstinline$T$'' in the 3988 function body refers to the parameter, but the ``\lstinline$T$'' in the return type refers to the 3989 meaning of \lstinline$T$ in the scope that contains \lstinline$new$; it could be undefined, or a 3990 type name, or a function or variable name. Nothing good can result from such a situation. 3201 3991 \end{rationale} 3202 3992 … … 3204 3994 Since type declarations create new types, instances of types are always passed by value. 3205 3995 \begin{lstlisting} 3206 otype A1 = int[2];3996 type A1 = int[2]; 3207 3997 void f1( A1 a ) { a[0] = 0; }; 3208 otypedef int A2[2];3998 typedef int A2[2]; 3209 3999 void f2( A2 a ) { a[0] = 0; }; 3210 4000 A1 v1; … … 3213 4003 f2( v2 ); 3214 4004 \end{lstlisting} 3215 \lstinline$V1$ is passed by value, so \lstinline$f1()$'s assignment to \lstinline$a[0]$ does not modify v1. \lstinline$V2$ is converted to a pointer, so \lstinline$f2()$ modifies \lstinline$v2[0]$. 4005 \lstinline$V1$ is passed by value, so \lstinline$f1()$'s assignment to \lstinline$a[0]$ does not 4006 modify v1. \lstinline$V2$ is converted to a pointer, so \lstinline$f2()$ modifies 4007 \lstinline$v2[0]$. 3216 4008 3217 4009 A translation unit containing the declarations 3218 4010 \begin{lstlisting} 3219 extern type Complex;@\use{Complex}@ // opaque type declaration 4011 extern type Complex;@\use{Complex}@ // opaque type declaration. 3220 4012 extern float abs( Complex );@\use{abs}@ 3221 \end{lstlisting} can contain declarations of complex numbers, which can be passed to \lstinline$abs$. 3222 Some other translation unit must implement \lstinline$Complex$ and \lstinline$abs$. 3223 That unit might contain the declarations 3224 \begin{lstlisting} 3225 otype Complex = struct { float re, im; };@\impl{Complex}@ 4013 \end{lstlisting} 4014 can contain declarations of complex numbers, which can be passed to \lstinline$abs$. Some other 4015 translation unit must implement \lstinline$Complex$ and \lstinline$abs$. That unit might contain 4016 the declarations 4017 \begin{lstlisting} 4018 type Complex = struct { float re, im; };@\impl{Complex}@ 3226 4019 Complex cplx_i = { 0.0, 1.0 };@\impl{cplx_i}@ 3227 4020 float abs( Complex c ) {@\impl{abs( Complex )}@ … … 3229 4022 } 3230 4023 \end{lstlisting} 3231 Note that \lstinline$c$ is implicitly converted to a \lstinline$struct$ so that its components can be retrieved. 3232 3233 \begin{lstlisting} 3234 otype Time_of_day = int;@\impl{Time_of_day}@ // seconds since midnight. 4024 Note that \lstinline$c$ is implicitly converted to a \lstinline$struct$ so that its components can 4025 be retrieved. 4026 4027 \begin{lstlisting} 4028 type Time_of_day = int;@\impl{Time_of_day}@ // seconds since midnight. 3235 4029 Time_of_day ?+?( Time_of_day t1, int seconds ) {@\impl{?+?}@ 3236 4030 return (( int)t1 + seconds ) % 86400; … … 3240 4034 3241 4035 \begin{rationale} 3242 Within the scope of a type definition, an instance of the type can be viewed as having that type or as having the implementation type. 3243 In the \lstinline$Time_of_day$ example, the difference is important. 3244 Different languages have treated the distinction between the abstraction and the implementation in different ways. 4036 Within the scope of a type definition, an instance of the type can be viewed as having that type or 4037 as having the implementation type. In the \lstinline$Time_of_day$ example, the difference is 4038 important. Different languages have treated the distinction between the abstraction and the 4039 implementation in different ways. 3245 4040 \begin{itemize} 3246 4041 \item 3247 Inside a Clu cluster \cite{CLU}, the declaration of an instance states which view applies. 3248 Two primitives called \lstinline$up$ and \lstinline$down$ can be used to convert between the views. 3249 \item 3250 The Simula class \cite{SIMULA87} is essentially a record type. 3251 Since the only operations on a record are member selection and assignment, which can not be overloaded, there is never any ambiguity as to whether the abstraction or the implementation view is being used. 3252 In {\CC} 3253 \cite{C++}, operations on class instances include assignment and ``\lstinline$&$'', which can be overloaded. 3254 A ``scope resolution'' operator can be used inside the class to specify whether the abstract or implementation version of the operation should be used. 3255 \item 3256 An Ada derived type definition \cite{Ada} creates a new type from an old type, and also implicitly declares derived subprograms that correspond to the existing subprograms that use the old type as a parameter type or result type. 3257 The derived subprograms are clones of the existing subprograms with the old type replaced by the derived type. 3258 Literals and aggregates of the old type are also cloned. 4042 Inside a Clu cluster \cite{clu}, the declaration of an instance states which view applies. Two 4043 primitives called \lstinline$up$ and \lstinline$down$ can be used to convert between the views. 4044 \item 4045 The Simula class \cite{Simula87} is essentially a record type. Since the only operations on a 4046 record are member selection and assignment, which can not be overloaded, there is never any 4047 ambiguity as to whether the abstraction or the implementation view is being used. In {\CC} 4048 \cite{c++}, operations on class instances include assignment and ``\lstinline$&$'', which can be 4049 overloaded. A ``scope resolution'' operator can be used inside the class to specify whether the 4050 abstract or implementation version of the operation should be used. 4051 \item 4052 An Ada derived type definition \cite{ada} creates a new type from an old type, and also implicitly 4053 declares derived subprograms that correspond to the existing subprograms that use the old type as a 4054 parameter type or result type. The derived subprograms are clones of the existing subprograms with 4055 the old type replaced by the derived type. Literals and aggregates of the old type are also cloned. 3259 4056 In other words, the abstract view provides exactly the same operations as the implementation view. 3260 4057 This allows the abstract view to be used in all cases. 3261 4058 3262 The derived subprograms can be replaced by programmer-specified subprograms. 3263 This is an exception to the normal scope rules, which forbid duplicate definitions of a subprogram in a scope. 3264 In thiscase, explicit conversions between the derived type and the old type can be used.4059 The derived subprograms can be replaced by programmer-specified subprograms. This is an exception 4060 to the normal scope rules, which forbid duplicate definitions of a subprogram in a scope. In this 4061 case, explicit conversions between the derived type and the old type can be used. 3265 4062 \end{itemize} 3266 \CFA's rules are like Clu's, except that implicit conversions and conversion costs allow it to do away with most uses of \lstinline$up$ and \lstinline$down$. 4063 \CFA's rules are like Clu's, except that implicit conversions and 4064 conversion costs allow it to do away with most uses of \lstinline$up$ and \lstinline$down$. 3267 4065 \end{rationale} 3268 4066 … … 3272 4070 A declaration\index{type declaration} of a type identifier \lstinline$T$ with type-class 3273 4071 \lstinline$type$ implicitly declares a \define{default assignment} function 3274 \lstinline$T ?=?( T *, T )$\use{?=?}, with the same \Index{scope} and \Index{linkage} as the identifier \lstinline$T$. 3275 \begin{rationale} 3276 Assignment is central to C's imperative programming style, and every existing C object type has assignment defined for it ( except for array types, which are treated as pointer types for purposes of assignment). 3277 Without this rule, nearly every inferred type parameter would need an accompanying assignment assertion parameter. 3278 If a type parameter should not have an assignment operation, 3279 \lstinline$dtype$ should be used. 3280 If a type should not have assignment defined, the user can define an assignment function that causes a run-time error, or provide an external declaration but no definition and thus cause a link-time error. 3281 \end{rationale} 3282 3283 A definition\index{type definition} of a type identifier \lstinline$T$ with \Index{implementation type} \lstinline$I$ and type-class \lstinline$type$ implicitly defines a default assignment function. 3284 A definition\index{type definition} of a type identifier \lstinline$T$ with implementation type \lstinline$I$ and an assertion list implicitly defines \define{default function}s and 3285 \define{default object}s as declared by the assertion declarations. 3286 The default objects and functions have the same \Index{scope} and \Index{linkage} as the identifier \lstinline$T$. 3287 Their values are determined as follows: 4072 \lstinline$T ?=?( T *, T )$\use{?=?}, with the same \Index{scope} and \Index{linkage} as the 4073 identifier \lstinline$T$. 4074 \begin{rationale} 4075 Assignment is central to C's imperative programming style, and every existing C object type has 4076 assignment defined for it ( except for array types, which are treated as pointer types for purposes 4077 of assignment). Without this rule, nearly every inferred type parameter would need an accompanying 4078 assignment assertion parameter. If a type parameter should not have an assignment operation, 4079 \lstinline$dtype$ should be used. If a type should not have assignment defined, the user can define 4080 an assignment function that causes a run-time error, or provide an external declaration but no 4081 definition and thus cause a link-time error. 4082 \end{rationale} 4083 4084 A definition\index{type definition} of a type identifier \lstinline$T$ with \Index{implementation 4085 type} \lstinline$I$ and type-class \lstinline$type$ implicitly defines a default assignment 4086 function. A definition\index{type definition} of a type identifier \lstinline$T$ with implementation 4087 type \lstinline$I$ and an assertion list implicitly defines \define{default function}s and 4088 \define{default object}s as declared by the assertion declarations. The default objects and 4089 functions have the same \Index{scope} and \Index{linkage} as the identifier \lstinline$T$. Their 4090 values are determined as follows: 3288 4091 \begin{itemize} 3289 4092 \item 3290 If at the definition of \lstinline$T$ there is visible a declaration of an object with the same name as the default object, and if the type of that object with all occurrence of \lstinline$I$ replaced by \lstinline$T$ is compatible with the type of the default object, then the default object is initialized with that object. 3291 Otherwise the scope of the declaration of \lstinline$T$ must contain a definition of the default object. 4093 If at the definition of \lstinline$T$ there is visible a declaration of an object with the same name 4094 as the default object, and if the type of that object with all occurrence of \lstinline$I$ replaced 4095 by \lstinline$T$ is compatible with the type of the default object, then the default object is 4096 initialized with that object. Otherwise the scope of the declaration of \lstinline$T$ must contain 4097 a definition of the default object. 3292 4098 3293 4099 \item 3294 If at the definition of \lstinline$T$ there is visible a declaration of a function with the same name as the default function, and if the type of that function with all occurrence of \lstinline$I$ replaced by \lstinline$T$ is compatible with the type of the default function, then the default function calls that function after converting its arguments and returns the converted result. 3295 3296 Otherwise, if \lstinline$I$ contains exactly one anonymous member\index{anonymous member} such that at the definition of \lstinline$T$ there is visible a declaration of a function with the same name as the default function, and the type of that function with all occurrences of the anonymous member's type in its parameter list replaced by \lstinline$T$ is compatible with the type of the default function, then the default function calls that function after converting its arguments and returns the result. 3297 3298 Otherwise the scope of the declaration of \lstinline$T$ must contain a definition of the default function. 4100 If at the definition of \lstinline$T$ there is visible a declaration of a function with the same 4101 name as the default function, and if the type of that function with all occurrence of \lstinline$I$ 4102 replaced by \lstinline$T$ is compatible with the type of the default function, then the default 4103 function calls that function after converting its arguments and returns the converted result. 4104 4105 Otherwise, if \lstinline$I$ contains exactly one anonymous member\index{anonymous member} such that 4106 at the definition of \lstinline$T$ there is visible a declaration of a function with the same name 4107 as the default function, and the type of that function with all occurrences of the anonymous 4108 member's type in its parameter list replaced by \lstinline$T$ is compatible with the type of the 4109 default function, then the default function calls that function after converting its arguments and 4110 returns the result. 4111 4112 Otherwise the scope of the declaration of \lstinline$T$ must contain a definition of the default 4113 function. 3299 4114 \end{itemize} 3300 4115 \begin{rationale} 3301 Note that a pointer to a default function will not compare as equal to a pointer to the inherited function. 3302 \end{rationale} 3303 3304 A function or object with the same type and name as a default function or object that is declared within the scope of the definition of \lstinline$T$ replaces the default function or object. 4116 Note that a pointer to a default function will not compare as equal to a pointer to the inherited 4117 function. 4118 \end{rationale} 4119 4120 A function or object with the same type and name as a default function or object that is declared 4121 within the scope of the definition of \lstinline$T$ replaces the default function or object. 3305 4122 3306 4123 \examples 3307 4124 \begin{lstlisting} 3308 trait s( otype T ) {4125 context s( type T ) { 3309 4126 T a, b; 3310 } struct impl { int left, right; } a = { 0, 0 }; 3311 otype Pair | s( Pair ) = struct impl; 4127 } 4128 struct impl { int left, right; } a = { 0, 0 }; 4129 type Pair | s( Pair ) = struct impl; 3312 4130 Pair b = { 1, 1 }; 3313 4131 \end{lstlisting} 3314 4132 The definition of \lstinline$Pair$ implicitly defines two objects \lstinline$a$ and \lstinline$b$. 3315 \lstinline$Pair a$ inherits its value from the \lstinline$struct impl a$. 3316 The definition of 3317 \lstinline$Pair b$ is compulsory because there is no \lstinline$struct impl b$ to construct a valuefrom.3318 \begin{lstlisting} 3319 trait ss( otype T ) {4133 \lstinline$Pair a$ inherits its value from the \lstinline$struct impl a$. The definition of 4134 \lstinline$Pair b$ is compulsory because there is no \lstinline$struct impl b$ to construct a value 4135 from. 4136 \begin{lstlisting} 4137 context ss( type T ) { 3320 4138 T clone( T ); 3321 4139 void munge( T * ); 3322 4140 } 3323 otype Whatsit | ss( Whatsit );@\use{Whatsit}@3324 otype Doodad | ss( Doodad ) = struct doodad {@\use{Doodad}@4141 type Whatsit | ss( Whatsit );@\use{Whatsit}@ 4142 type Doodad | ss( Doodad ) = struct doodad {@\use{Doodad}@ 3325 4143 Whatsit; // anonymous member 3326 4144 int extra; … … 3334 4152 void munge( Doodad * ); 3335 4153 \end{lstlisting} 3336 The assignment function inherits \lstinline$struct doodad$'s assignment function because the types match when \lstinline$struct doodad$ is replaced by \lstinline$Doodad$ throughout. 4154 The assignment function inherits \lstinline$struct doodad$'s assignment function because the types 4155 match when \lstinline$struct doodad$ is replaced by \lstinline$Doodad$ throughout. 3337 4156 \lstinline$munge()$ inherits \lstinline$Whatsit$'s \lstinline$munge()$ because the types match when 3338 \lstinline$Whatsit$ is replaced by \lstinline$Doodad$ in the parameter list. \lstinline$clone()$ does \emph{not} inherit \lstinline$Whatsit$'s \lstinline$clone()$: replacement in the parameter list yields ``\lstinline$Whatsit clone( Doodad )$'', which is not compatible with 3339 \lstinline$Doodad$'s \lstinline$clone()$'s type. 3340 Hence the definition of 4157 \lstinline$Whatsit$ is replaced by \lstinline$Doodad$ in the parameter list. \lstinline$clone()$ 4158 does \emph{not} inherit \lstinline$Whatsit$'s \lstinline$clone()$: replacement in the parameter 4159 list yields ``\lstinline$Whatsit clone( Doodad )$'', which is not compatible with 4160 \lstinline$Doodad$'s \lstinline$clone()$'s type. Hence the definition of 3341 4161 ``\lstinline$Doodad clone( Doodad )$'' is necessary. 3342 4162 3343 4163 Default functions and objects are subject to the normal scope rules. 3344 4164 \begin{lstlisting} 3345 otype T = @\ldots@;4165 type T = @\ldots@; 3346 4166 T a_T = @\ldots@; // Default assignment used. 3347 4167 T ?=?( T *, T ); … … 3353 4173 3354 4174 \begin{rationale} 3355 The \emph{class} construct of object-oriented programming languages performs three independent functions.3356 It \emph{encapsulates} a data structure; 3357 i t defines a \emph{subtype} relationship, whereby instances of one class may be used in contexts that require instances of another;3358 and it allows oneclass to \emph{inherit} the implementation of another.3359 3360 In \CFA, encapsulation is provided by opaque types and the scope rules, and subtyping is provided by specifications and assertions.3361 Inheritance is provided by default functions and objects.4175 The \emph{class} construct of object-oriented programming languages performs three independent 4176 functions. It \emph{encapsulates} a data structure; it defines a \emph{subtype} relationship, whereby 4177 instances of one class may be used in contexts that require instances of another; and it allows one 4178 class to \emph{inherit} the implementation of another. 4179 4180 In \CFA, encapsulation is provided by opaque types and the scope rules, and subtyping is provided 4181 by specifications and assertions. Inheritance is provided by default functions and objects. 3362 4182 \end{rationale} 3363 4183 … … 3370 4190 \end{syntax} 3371 4191 3372 Many statements contain expressions, which may have more than one interpretation. 3373 The following sections describe how the \CFA translator selects an interpretation. 3374 In all cases the result of theselection shall be a single unambiguous \Index{interpretation}.4192 Many statements contain expressions, which may have more than one interpretation. The following 4193 sections describe how the \CFA translator selects an interpretation. In all cases the result of the 4194 selection shall be a single unambiguous \Index{interpretation}. 3375 4195 3376 4196 … … 3419 4239 switch ( E ) ... 3420 4240 choose ( E ) ... 3421 \end{lstlisting} may have more than one interpretation, but it shall have only one interpretation with an integral type. 4241 \end{lstlisting} 4242 may have more than one interpretation, but it shall have only one interpretation with an integral type. 3422 4243 An \Index{integer promotion} is performed on the expression if necessary. 3423 4244 The constant expressions in \lstinline$case$ statements with the switch are converted to the promoted type. … … 3463 4284 while ( E ) ... 3464 4285 do ... while ( E ); 3465 \end{lstlisting} is treated as ``\lstinline$( int )((E)!=0)$''. 4286 \end{lstlisting} 4287 is treated as ``\lstinline$( int )((E)!=0)$''. 3466 4288 3467 4289 The statement 3468 4290 \begin{lstlisting} 3469 4291 for ( a; b; c ) @\ldots@ 3470 \end{lstlisting} is treated as 4292 \end{lstlisting} 4293 is treated as 3471 4294 \begin{lstlisting} 3472 4295 for ( ( void )( a ); ( int )(( b )!=0); ( void )( c ) ) ... … … 3590 4413 3591 4414 The implementation shall define the macro names \lstinline$__LINE__$, \lstinline$__FILE__$, 3592 \lstinline$__DATE__$, and \lstinline$__TIME__$, as in the {\c11} standard. 3593 It shall not define the macro name \lstinline$__STDC__$. 3594 3595 In addition, the implementation shall define the macro name \lstinline$__CFORALL__$ to be the decimal constant 1. 4415 \lstinline$__DATE__$, and \lstinline$__TIME__$, as in the {\c11} standard. It shall not define the 4416 macro name \lstinline$__STDC__$. 4417 4418 In addition, the implementation shall define the macro name \lstinline$__CFORALL__$ to be the 4419 decimal constant 1. 3596 4420 3597 4421 … … 3603 4427 3604 4428 \section{C types} 3605 This section gives example specifications for some groups of types that are important in the C language, in terms of the predefined operations that can be applied to those types. 4429 This section gives example specifications for some groups of types that are important in the C 4430 language, in terms of the predefined operations that can be applied to those types. 3606 4431 3607 4432 3608 4433 \subsection{Scalar, arithmetic, and integral types} 3609 4434 3610 The pointer, integral, and floating-point types are all \define{scalar types}. 3611 All of these types can be logically negated and compared. 3612 The assertion ``\lstinline$scalar( Complex )$'' should be readas ``type \lstinline$Complex$ is scalar''.3613 \begin{lstlisting} 3614 trait scalar( otype T ) {@\impl{scalar}@4435 The pointer, integral, and floating-point types are all \define{scalar types}. All of these types 4436 can be logically negated and compared. The assertion ``\lstinline$scalar( Complex )$'' should be read 4437 as ``type \lstinline$Complex$ is scalar''. 4438 \begin{lstlisting} 4439 context scalar( type T ) {@\impl{scalar}@ 3615 4440 int !?( T ); 3616 4441 int ?<?( T, T ), ?<=?( T, T ), ?==?( T, T ), ?>=?( T, T ), ?>?( T, T ), ?!=?( T, T ); … … 3618 4443 \end{lstlisting} 3619 4444 3620 The integral and floating-point types are \define{arithmetic types}, which support the basic arithmetic operators. 3621 The use of an assertion in the \nonterm{spec-parameter-list} declares that, in order to be arithmetic, a type must also be scalar ( and hence that scalar operations are available ). 3622 This is equivalent to inheritance of specifications. 3623 \begin{lstlisting} 3624 trait arithmetic( otype T | scalar( T ) ) {@\impl{arithmetic}@@\use{scalar}@ 4445 The integral and floating-point types are \define{arithmetic types}, which support the basic 4446 arithmetic operators. The use of an assertion in the \nonterm{spec-parameter-list} declares that, 4447 in order to be arithmetic, a type must also be scalar ( and hence that scalar operations are 4448 available ). This is equivalent to inheritance of specifications. 4449 \begin{lstlisting} 4450 context arithmetic( type T | scalar( T ) ) {@\impl{arithmetic}@@\use{scalar}@ 3625 4451 T +?( T ), -?( T ); 3626 4452 T ?*?( T, T ), ?/?( T, T ), ?+?( T, T ), ?-?( T, T ); … … 3631 4457 \define{integral types}. 3632 4458 \begin{lstlisting} 3633 trait integral( otype T | arithmetic( T ) ) {@\impl{integral}@@\use{arithmetic}@4459 context integral( type T | arithmetic( T ) ) {@\impl{integral}@@\use{arithmetic}@ 3634 4460 T ~?( T ); 3635 4461 T ?&?( T, T ), ?|?( T, T ), ?^?( T, T ); … … 3645 4471 The only operation that can be applied to all modifiable lvalues is simple assignment. 3646 4472 \begin{lstlisting} 3647 trait m_lvalue( otype T ) {@\impl{m_lvalue}@4473 context m_lvalue( type T ) {@\impl{m_lvalue}@ 3648 4474 T ?=?( T *, T ); 3649 4475 }; … … 3651 4477 3652 4478 Modifiable scalar lvalues are scalars and are modifiable lvalues, and assertions in the 3653 \nonterm{spec-parameter-list} reflect those relationships. 3654 This is equivalent to multiple inheritance of specifications. 3655 Scalars can also be incremented and decremented. 3656 \begin{lstlisting} 3657 trait m_l_scalar( otype T | scalar( T ) | m_lvalue( T ) ) {@\impl{m_l_scalar}@ 4479 \nonterm{spec-parameter-list} reflect those relationships. This is equivalent to multiple 4480 inheritance of specifications. Scalars can also be incremented and decremented. 4481 \begin{lstlisting} 4482 context m_l_scalar( type T | scalar( T ) | m_lvalue( T ) ) {@\impl{m_l_scalar}@ 3658 4483 T ?++( T * ), ?--( T * );@\use{scalar}@@\use{m_lvalue}@ 3659 4484 T ++?( T * ), --?( T * ); … … 3661 4486 \end{lstlisting} 3662 4487 3663 Modifiable arithmetic lvalues are both modifiable scalar lvalues and arithmetic. 3664 Note that thisresults in the ``inheritance'' of \lstinline$scalar$ along both paths.3665 \begin{lstlisting} 3666 trait m_l_arithmetic( otype T | m_l_scalar( T ) | arithmetic( T ) ) {@\impl{m_l_arithmetic}@4488 Modifiable arithmetic lvalues are both modifiable scalar lvalues and arithmetic. Note that this 4489 results in the ``inheritance'' of \lstinline$scalar$ along both paths. 4490 \begin{lstlisting} 4491 context m_l_arithmetic( type T | m_l_scalar( T ) | arithmetic( T ) ) {@\impl{m_l_arithmetic}@ 3667 4492 T ?/=?( T *, T ), ?*=?( T *, T );@\use{m_l_scalar}@@\use{arithmetic}@ 3668 4493 T ?+=?( T *, T ), ?-=?( T *, T ); 3669 4494 }; 3670 trait m_l_integral( otype T | m_l_arithmetic( T ) | integral( T ) ) {@\impl{m_l_integral}@ 4495 4496 context m_l_integral( type T | m_l_arithmetic( T ) | integral( T ) ) {@\impl{m_l_integral}@ 3671 4497 T ?&=?( T *, T ), ?|=?( T *, T ), ?^=?( T *, T );@\use{m_l_arithmetic}@ 3672 4498 T ?%=?( T *, T ), ?<<=?( T *, T ), ?>>=?( T *, T );@\use{integral}@ … … 3677 4503 \subsection{Pointer and array types} 3678 4504 3679 Array types can barely be said to exist in {\c11}, since in most cases an array name is treated as a constant pointer to the first element of the array, and the subscript expression 4505 Array types can barely be said to exist in {\c11}, since in most cases an array name is treated as a 4506 constant pointer to the first element of the array, and the subscript expression 3680 4507 ``\lstinline$a[i]$'' is equivalent to the dereferencing expression ``\lstinline$(*( a+( i )))$''. 3681 4508 Technically, pointer arithmetic and pointer comparisons other than ``\lstinline$==$'' and 3682 ``\lstinline$!=$'' are only defined for pointers to array elements, but the type system does not enforce those restrictions.3683 Consequently, there is no need for a separate ``array type'' specification. 3684 3685 Pointer types are scalar types. 3686 Like other scalar types, they have ``\lstinline$+$'' and4509 ``\lstinline$!=$'' are only defined for pointers to array elements, but the type system does not 4510 enforce those restrictions. Consequently, there is no need for a separate ``array type'' 4511 specification. 4512 4513 Pointer types are scalar types. Like other scalar types, they have ``\lstinline$+$'' and 3687 4514 ``\lstinline$-$'' operators, but the types do not match the types of the operations in 3688 4515 \lstinline$arithmetic$, so these operators cannot be consolidated in \lstinline$scalar$. 3689 4516 \begin{lstlisting} 3690 trait pointer( type P | scalar( P ) ) {@\impl{pointer}@@\use{scalar}@4517 context pointer( type P | scalar( P ) ) {@\impl{pointer}@@\use{scalar}@ 3691 4518 P ?+?( P, long int ), ?+?( long int, P ), ?-?( P, long int ); 3692 4519 ptrdiff_t ?-?( P, P ); 3693 4520 }; 3694 trait m_l_pointer( type P | pointer( P ) | m_l_scalar( P ) ) {@\impl{m_l_pointer}@ 4521 4522 context m_l_pointer( type P | pointer( P ) | m_l_scalar( P ) ) {@\impl{m_l_pointer}@ 3695 4523 P ?+=?( P *, long int ), ?-=?( P *, long int ); 3696 4524 P ?=?( P *, void * ); … … 3699 4527 \end{lstlisting} 3700 4528 3701 Specifications that define the dereference operator ( or subscript operator ) require two parameters, one for the pointer type and one for the pointed-at ( or element ) type. 3702 Different specifications are needed for each set of \Index{type qualifier}s, because qualifiers are not included in types. 3703 The assertion ``\lstinline$|ptr_to( Safe_pointer, int )$'' should be read as 4529 Specifications that define the dereference operator ( or subscript operator ) require two 4530 parameters, one for the pointer type and one for the pointed-at ( or element ) type. Different 4531 specifications are needed for each set of \Index{type qualifier}s, because qualifiers are not 4532 included in types. The assertion ``\lstinline$|ptr_to( Safe_pointer, int )$'' should be read as 3704 4533 ``\lstinline$Safe_pointer$ acts like a pointer to \lstinline$int$''. 3705 4534 \begin{lstlisting} 3706 trait ptr_to( otype P | pointer( P ), otype T ) {@\impl{ptr_to}@@\use{pointer}@ 3707 lvalue T *?( P ); 3708 lvalue T ?[?]( P, long int ); 4535 context ptr_to( type P | pointer( P ), type T ) {@\impl{ptr_to}@@\use{pointer}@ 4536 lvalue T *?( P ); lvalue T ?[?]( P, long int ); 3709 4537 }; 3710 trait ptr_to_const( otype P | pointer( P ), otype T ) {@\impl{ptr_to_const}@ 3711 const lvalue T *?( P ); 3712 const lvalue T ?[?]( P, long int );@\use{pointer}@4538 4539 context ptr_to_const( type P | pointer( P ), type T ) {@\impl{ptr_to_const}@ 4540 const lvalue T *?( P ); const lvalue T ?[?]( P, long int );@\use{pointer}@ 3713 4541 }; 3714 trait ptr_to_volatile( otype P | pointer( P ), otype T ) }@\impl{ptr_to_volatile}@ 3715 volatile lvalue T *?( P ); 3716 volatile lvalue T ?[?]( P, long int );@\use{pointer}@4542 4543 context ptr_to_volatile( type P | pointer( P ), type T ) }@\impl{ptr_to_volatile}@ 4544 volatile lvalue T *?( P ); volatile lvalue T ?[?]( P, long int );@\use{pointer}@ 3717 4545 }; 3718 trait ptr_to_const_volatile( otype P | pointer( P ), otype T ) }@\impl{ptr_to_const_volatile}@ 4546 \end{lstlisting} 4547 \begin{lstlisting} 4548 context ptr_to_const_volatile( type P | pointer( P ), type T ) }@\impl{ptr_to_const_volatile}@ 3719 4549 const volatile lvalue T *?( P );@\use{pointer}@ 3720 4550 const volatile lvalue T ?[?]( P, long int ); … … 3722 4552 \end{lstlisting} 3723 4553 3724 Assignment to pointers is more complicated than is the case with other types, because the target's type can have extra type qualifiers in the pointed-at type: a ``\lstinline$T *$'' can be assigned to a ``\lstinline$const T *$'', a ``\lstinline$volatile T *$'', and a ``\lstinline$const volatile T *$''. 4554 Assignment to pointers is more complicated than is the case with other types, because the target's 4555 type can have extra type qualifiers in the pointed-at type: a ``\lstinline$T *$'' can be assigned to 4556 a ``\lstinline$const T *$'', a ``\lstinline$volatile T *$'', and a ``\lstinline$const volatile T *$''. 3725 4557 Again, the pointed-at type is passed in, so that assertions can connect these specifications to the 3726 4558 ``\lstinline$ptr_to$'' specifications. 3727 4559 \begin{lstlisting} 3728 trait m_l_ptr_to( otype P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to}@ otype T | ptr_to( P, T )@\use{ptr_to}@ {4560 context m_l_ptr_to( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to}@ type T | ptr_to( P, T )@\use{ptr_to}@ { 3729 4561 P ?=?( P *, T * ); 3730 4562 T * ?=?( T **, P ); 3731 4563 }; 3732 trait m_l_ptr_to_const( otype P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to_const}@ otype T | ptr_to_const( P, T )@\use{ptr_to_const}@) { 4564 4565 context m_l_ptr_to_const( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to_const}@ type T | ptr_to_const( P, T )@\use{ptr_to_const}@) { 3733 4566 P ?=?( P *, const T * ); 3734 4567 const T * ?=?( const T **, P ); 3735 4568 }; 3736 trait m_l_ptr_to_volatile( otype P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to_volatile}@ otype T | ptr_to_volatile( P, T )) {@\use{ptr_to_volatile}@ 4569 4570 context m_l_ptr_to_volatile( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to_volatile}@ type T | ptr_to_volatile( P, T )) {@\use{ptr_to_volatile}@ 3737 4571 P ?=?( P *, volatile T * ); 3738 4572 volatile T * ?=?( volatile T **, P ); 3739 4573 }; 3740 trait m_l_ptr_to_const_volatile( otype P | ptr_to_const_volatile( P ),@\use{ptr_to_const_volatile}@@\impl{m_l_ptr_to_const_volatile}@ 3741 otype T | m_l_ptr_to_volatile( P, T ) | m_l_ptr_to_const( P )) {@\use{m_l_ptr_to_const}@@\use{m_l_ptr_to_volatile}@ 4574 4575 context m_l_ptr_to_const_volatile( type P | ptr_to_const_volatile( P ),@\use{ptr_to_const_volatile}@@\impl{m_l_ptr_to_const_volatile}@ 4576 type T | m_l_ptr_to_volatile( P, T ) | m_l_ptr_to_const( P )) {@\use{m_l_ptr_to_const}@@\use{m_l_ptr_to_volatile}@ 3742 4577 P ?=?( P *, const volatile T * ); 3743 4578 const volatile T * ?=?( const volatile T **, P ); … … 3745 4580 \end{lstlisting} 3746 4581 3747 Note the regular manner in which type qualifiers appear in those specifications. 3748 An alternative specification can make use of the fact that qualification of the pointed-at type is part of a pointer type to capture that regularity. 3749 \begin{lstlisting} 3750 trait m_l_ptr_like( type MyP | m_l_pointer( MyP ),@\use{m_l_pointer}@@\impl{m_l_ptr_like}@ type CP | m_l_pointer( CP ) ) { 4582 Note the regular manner in which type qualifiers appear in those specifications. An alternative 4583 specification can make use of the fact that qualification of the pointed-at type is part of a 4584 pointer type to capture that regularity. 4585 \begin{lstlisting} 4586 context m_l_ptr_like( type MyP | m_l_pointer( MyP ),@\use{m_l_pointer}@@\impl{m_l_ptr_like}@ type CP | m_l_pointer( CP ) ) { 3751 4587 MyP ?=?( MyP *, CP ); 3752 4588 CP ?=?( CP *, MyP ); … … 3754 4590 \end{lstlisting} 3755 4591 The assertion ``\lstinline$| m_l_ptr_like( Safe_ptr, const int * )$'' should be read as 3756 ``\lstinline$Safe_ptr$ is a pointer type like \lstinline$const int *$''. 3757 This specification has twodefects, compared to the original four: there is no automatic assertion that dereferencing a4592 ``\lstinline$Safe_ptr$ is a pointer type like \lstinline$const int *$''. This specification has two 4593 defects, compared to the original four: there is no automatic assertion that dereferencing a 3758 4594 \lstinline$MyP$ produces an lvalue of the type that \lstinline$CP$ points at, and the 3759 ``\lstinline$|m_l_pointer( CP )$'' assertion provides only a weak assurance that the argument passed to \lstinline$CP$ really is a pointer type. 4595 ``\lstinline$|m_l_pointer( CP )$'' assertion provides only a weak assurance that the argument passed 4596 to \lstinline$CP$ really is a pointer type. 3760 4597 3761 4598 3762 4599 \section{Relationships between operations} 3763 4600 3764 Different operators often have related meanings; 3765 for instance, in C, ``\lstinline$+$'', 4601 Different operators often have related meanings; for instance, in C, ``\lstinline$+$'', 3766 4602 ``\lstinline$+=$'', and the two versions of ``\lstinline$++$'' perform variations of addition. 3767 Languages like {\CC} and Ada allow programmers to define operators for new types, but do not require that these relationships be preserved, or even that all of the operators be implemented. 3768 Completeness and consistency is left to the good taste and discretion of the programmer. 3769 It is possible to encourage these attributes by providing generic operator functions, or member functions of abstract classes, that are defined in terms of other, related operators. 3770 3771 In \CFA, polymorphic functions provide the equivalent of these generic operators, and specifications explicitly define the minimal implementation that a programmer should provide. 3772 This section shows a few examples. 4603 Languages like {\CC} and Ada allow programmers to define operators for new types, but do not 4604 require that these relationships be preserved, or even that all of the operators be implemented. 4605 Completeness and consistency is left to the good taste and discretion of the programmer. It is 4606 possible to encourage these attributes by providing generic operator functions, or member functions 4607 of abstract classes, that are defined in terms of other, related operators. 4608 4609 In \CFA, polymorphic functions provide the equivalent of these generic operators, and 4610 specifications explicitly define the minimal implementation that a programmer should provide. This 4611 section shows a few examples. 3773 4612 3774 4613 3775 4614 \subsection{Relational and equality operators} 3776 4615 3777 The different comparison operators have obvious relationships, but there is no obvious subset of the operations to use in the implementation of the others. 3778 However, it is usually convenient to implement a single comparison function that returns a negative integer, 0, or a positive integer if its first argument is respectively less than, equal to, or greater than its second argument; 3779 the library function \lstinline$strcmp$ is an example. 3780 3781 C and \CFA have an extra, non-obvious comparison operator: ``\lstinline$!$'', logical negation, returns 1 if its operand compares equal to 0, and 0 otherwise. 3782 \begin{lstlisting} 3783 trait comparable( otype T ) { 4616 The different comparison operators have obvious relationships, but there is no obvious subset of the 4617 operations to use in the implementation of the others. However, it is usually convenient to 4618 implement a single comparison function that returns a negative integer, 0, or a positive integer if 4619 its first argument is respectively less than, equal to, or greater than its second argument; the 4620 library function \lstinline$strcmp$ is an example. 4621 4622 C and \CFA have an extra, non-obvious comparison operator: ``\lstinline$!$'', logical negation, 4623 returns 1 if its operand compares equal to 0, and 0 otherwise. 4624 \begin{lstlisting} 4625 context comparable( type T ) { 3784 4626 const T 0; 3785 4627 int compare( T, T ); 3786 4628 } 3787 forall( otype T | comparable( T ) ) int ?<?( T l, T r ) { 4629 4630 forall( type T | comparable( T ) ) int ?<?( T l, T r ) { 3788 4631 return compare( l, r ) < 0; 3789 4632 } 3790 4633 // ... similarly for <=, ==, >=, >, and !=. 3791 forall( otype T | comparable( T ) ) int !?( T operand ) { 4634 4635 forall( type T | comparable( T ) ) int !?( T operand ) { 3792 4636 return !compare( operand, 0 ); 3793 4637 } … … 3797 4641 \subsection{Arithmetic and integer operations} 3798 4642 3799 A complete arithmetic type would provide the arithmetic operators and the corresponding assignment operators. 3800 Of these, the assignment operators are more likely to be implemented directly, because it is usually more efficient to alter the contents of an existing object than to create and return a new one. 3801 Similarly, a complete integral type would provide integral operations based on integral assignment operations. 3802 \begin{lstlisting} 3803 trait arith_base( otype T ) { 4643 A complete arithmetic type would provide the arithmetic operators and the corresponding assignment 4644 operators. Of these, the assignment operators are more likely to be implemented directly, because 4645 it is usually more efficient to alter the contents of an existing object than to create and return a 4646 new one. Similarly, a complete integral type would provide integral operations based on integral 4647 assignment operations. 4648 \begin{lstlisting} 4649 context arith_base( type T ) { 3804 4650 const T 1; 3805 4651 T ?+=?( T *, T ), ?-=?( T *, T ), ?*=?( T *, T ), ?/=?( T *, T ); 3806 4652 } 3807 forall( otype T | arith_base( T ) ) T ?+?( T l, T r ) { 4653 4654 forall( type T | arith_base( T ) ) T ?+?( T l, T r ) { 3808 4655 return l += r; 3809 4656 } 3810 forall( otype T | arith_base( T ) ) T ?++( T * operand ) { 4657 4658 forall( type T | arith_base( T ) ) T ?++( T * operand ) { 3811 4659 T temporary = *operand; 3812 4660 *operand += 1; 3813 4661 return temporary; 3814 4662 } 3815 forall( otype T | arith_base( T ) ) T ++?( T * operand ) { 4663 4664 forall( type T | arith_base( T ) ) T ++?( T * operand ) { 3816 4665 return *operand += 1; 3817 4666 } 3818 4667 // ... similarly for -, --, *, and /. 3819 trait int_base( otype T ) { 4668 4669 context int_base( type T ) { 3820 4670 T ?&=?( T *, T ), ?|=?( T *, T ), ?^=?( T *, T ); 3821 4671 T ?%=?( T *, T ), ?<<=?( T *, T ), ?>>=?( T *, T ); 3822 4672 } 3823 forall( otype T | int_base( T ) ) T ?&?( T l, T r ) { 4673 4674 forall( type T | int_base( T ) ) T ?&?( T l, T r ) { 3824 4675 return l &= r; 3825 4676 } … … 3827 4678 \end{lstlisting} 3828 4679 3829 Note that, although an arithmetic type would certainly provide comparison functions, and an integral type would provide arithmetic operations, there does not have to be any relationship among 3830 \lstinline$int_base$, \lstinline$arith_base$ and \lstinline$comparable$. 3831 Note also that these declarations provide guidance and assistance, but they do not define an absolutely minimal set of requirements. 3832 A truly minimal implementation of an arithmetic type might only provide 4680 Note that, although an arithmetic type would certainly provide comparison functions, and an integral 4681 type would provide arithmetic operations, there does not have to be any relationship among 4682 \lstinline$int_base$, \lstinline$arith_base$ and \lstinline$comparable$. Note also that these 4683 declarations provide guidance and assistance, but they do not define an absolutely minimal set of 4684 requirements. A truly minimal implementation of an arithmetic type might only provide 3833 4685 \lstinline$0$, \lstinline$1$, and \lstinline$?-=?$, which would be used by polymorphic 3834 4686 \lstinline$?+=?$, \lstinline$?*=?$, and \lstinline$?/=?$ functions. … … 3840 4692 Review index entries. 3841 4693 3842 Restrict allowed to qualify anything, or type/dtype parameters, but only affects pointers. 3843 This gets into \lstinline$noalias$ territory. 3844 Qualifying anything (``\lstinline$short restrict rs$'') means pointer parameters of \lstinline$?++$, etc, would need restrict qualifiers. 3845 3846 Enumerated types. 3847 Constants are not ints. 3848 Overloading. 3849 Definition should be ``representable as an integer type'', not ``as an int''. 3850 C11 usual conversions freely convert to and from ordinary integer types via assignment, which works between any integer types. 3851 Does enum Color ?*?( enum 4694 Restrict allowed to qualify anything, or type/dtype parameters, but only affects pointers. This gets 4695 into \lstinline$noalias$ territory. Qualifying anything (``\lstinline$short restrict rs$'') means 4696 pointer parameters of \lstinline$?++$, etc, would need restrict qualifiers. 4697 4698 Enumerated types. Constants are not ints. Overloading. Definition should be ``representable as an 4699 integer type'', not ``as an int''. C11 usual conversions freely convert to and from ordinary 4700 integer types via assignment, which works between any integer types. Does enum Color ?*?( enum 3852 4701 Color, enum Color ) really make sense? ?++ does, but it adds (int)1. 3853 4702 3854 Operators on {,signed,unsigned} char and other small types. ?<? harmless; 3855 ?*? questionable for chars. 3856 Generic selections make these choices visible. 3857 Safe conversion operators? Predefined 4703 Operators on {,signed,unsigned} char and other small types. ?<? harmless; ?*? questionable for 4704 chars. Generic selections make these choices visible. Safe conversion operators? Predefined 3858 4705 ``promotion'' function? 3859 4706 3860 \lstinline$register$ assignment might be handled as assignment to a temporary with copying back and forth, but copying must not be done by assignment. 4707 \lstinline$register$ assignment might be handled as assignment to a temporary with copying back and 4708 forth, but copying must not be done by assignment. 3861 4709 3862 4710 Don't use ptrdiff\_t by name in the predefineds. 3863 4711 3864 Polymorphic objects. 3865 Polymorphic typedefs and type declarations. 4712 Polymorphic objects. Polymorphic typedefs and type declarations. 3866 4713 3867 4714 3868 4715 \bibliographystyle{plain} 3869 \bibliography{ cfa}4716 \bibliography{refrat} 3870 4717 3871 4718 3872 4719 \addcontentsline{toc}{chapter}{\indexname} % add index name to table of contents 3873 4720 \begin{theindex} 3874 Italic page numbers give the location of the main entry for the referenced term. 3875 Plain page numbers denote uses of the indexed term. 3876 Entries for grammar non-terminals are italicized. 3877 A typewriter font is used for grammar terminals and program identifiers. 4721 Italic page numbers give the location of the main entry for the referenced term. Plain page numbers 4722 denote uses of the indexed term. Entries for grammar non-terminals are italicized. A typewriter 4723 font is used for grammar terminals and program identifiers. 3878 4724 \indexspace 3879 4725 \input{refrat.ind} -
src/CodeGen/CodeGenerator.cc
r0f9e4403 rc5833e8 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 17:32:16201613 // Update Count : 24 312 // Last Modified On : Mon Jan 25 21:22:00 2016 13 // Update Count : 242 14 14 // 15 15 … … 21 21 #include "Parser/ParseNode.h" 22 22 23 #include "SynTree/ Declaration.h"23 #include "SynTree/Type.h" 24 24 #include "SynTree/Expression.h" 25 25 #include "SynTree/Initializer.h" 26 26 #include "SynTree/Statement.h" 27 #include "SynTree/Type.h"28 27 29 28 #include "Common/utility.h" … … 171 170 } 172 171 173 void CodeGenerator::visit( TraitDecl *aggregateDecl ) {}172 void CodeGenerator::visit( ContextDecl *aggregateDecl ) {} 174 173 175 174 void CodeGenerator::visit( TypedefDecl *typeDecl ) { … … 455 454 456 455 void CodeGenerator::visit( UntypedOffsetofExpr *offsetofExpr ) { 457 assert( false && "UntypedOffsetofExpr should not reach code generation");456 assert( false ); 458 457 } 459 458 … … 464 463 output << ", " << mangleName( offsetofExpr->get_member() ); 465 464 output << ")"; 466 }467 468 void CodeGenerator::visit( OffsetPackExpr *offsetPackExpr ) {469 assert( false && "OffsetPackExpr should not reach code generation" );470 465 } 471 466 -
src/CodeGen/CodeGenerator.h
r0f9e4403 rc5833e8 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Wed Mar 2 17:32:24 201613 // Update Count : 2 811 // Last Modified By : Rob Schluntz 12 // Last Modified On : Wed Aug 12 14:27:14 2015 13 // Update Count : 27 14 14 // 15 15 … … 19 19 #include <list> 20 20 21 #include "SynTree/Declaration.h"22 21 #include "SynTree/SynTree.h" 23 22 #include "SynTree/Visitor.h" 24 25 23 #include "SymTab/Indexer.h" 26 24 … … 40 38 virtual void visit( UnionDecl *aggregateDecl ); 41 39 virtual void visit( EnumDecl *aggregateDecl ); 42 virtual void visit( TraitDecl *aggregateDecl );40 virtual void visit( ContextDecl *aggregateDecl ); 43 41 virtual void visit( TypedefDecl *typeDecl ); 44 42 virtual void visit( TypeDecl *typeDecl ); … … 65 63 virtual void visit( UntypedOffsetofExpr *offsetofExpr ); 66 64 virtual void visit( OffsetofExpr *offsetofExpr ); 67 virtual void visit( OffsetPackExpr *offsetPackExpr );68 65 virtual void visit( LogicalExpr *logicalExpr ); 69 66 virtual void visit( ConditionalExpr *conditionalExpr ); -
src/CodeGen/GenType.cc
r0f9e4403 rc5833e8 19 19 #include "GenType.h" 20 20 #include "CodeGenerator.h" 21 22 #include "SynTree/ Declaration.h"21 #include "SynTree/Visitor.h" 22 #include "SynTree/Type.h" 23 23 #include "SynTree/Expression.h" 24 #include "SynTree/Type.h"25 #include "SynTree/Visitor.h"26 24 27 25 namespace CodeGen { … … 41 39 virtual void visit( EnumInstType *enumInst ); 42 40 virtual void visit( TypeInstType *typeInst ); 43 virtual void visit( VarArgsType *varArgsType );44 41 45 42 private: … … 194 191 } 195 192 196 void GenType::visit( VarArgsType *varArgsType ) {197 typeString = "__builtin_va_list " + typeString;198 handleQualifiers( varArgsType );199 }200 201 193 void GenType::handleQualifiers( Type *type ) { 202 194 if ( type->get_isConst() ) { -
src/GenPoly/Box.cc
r0f9e4403 rc5833e8 14 14 // 15 15 16 #include <algorithm>17 #include <iterator>18 #include <list>19 #include <map>20 16 #include <set> 21 17 #include <stack> 22 18 #include <string> 23 #include < utility>24 #include < vector>19 #include <iterator> 20 #include <algorithm> 25 21 #include <cassert> 26 22 27 23 #include "Box.h" 28 #include " DeclMutator.h"24 #include "InstantiateGeneric.h" 29 25 #include "PolyMutator.h" 30 26 #include "FindFunction.h" 31 #include "ScopedMap.h"32 #include "ScopedSet.h"33 27 #include "ScrubTyVars.h" 34 28 … … 36 30 37 31 #include "SynTree/Constant.h" 38 #include "SynTree/ Declaration.h"32 #include "SynTree/Type.h" 39 33 #include "SynTree/Expression.h" 40 34 #include "SynTree/Initializer.h" 35 #include "SynTree/Statement.h" 41 36 #include "SynTree/Mutator.h" 42 #include "SynTree/Statement.h"43 #include "SynTree/Type.h"44 #include "SynTree/TypeSubstitution.h"45 37 46 38 #include "ResolvExpr/TypeEnvironment.h" … … 48 40 #include "ResolvExpr/typeops.h" 49 41 50 #include "SymTab/Indexer.h"51 42 #include "SymTab/Mangler.h" 52 43 … … 63 54 FunctionType *makeAdapterType( FunctionType *adaptee, const TyVarMap &tyVars ); 64 55 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 152 /// Adds layout-generation functions to polymorphic types153 class LayoutFunctionBuilder : public DeclMutator {154 unsigned int functionNesting; // current level of nested functions155 public:156 LayoutFunctionBuilder() : functionNesting( 0 ) {}157 158 virtual DeclarationWithType *mutate( FunctionDecl *functionDecl );159 virtual Declaration *mutate( StructDecl *structDecl );160 virtual Declaration *mutate( UnionDecl *unionDecl );161 };162 163 56 /// Replaces polymorphic return types with out-parameters, replaces calls to polymorphic functions with adapter calls as needed, and adds appropriate type variables to the function call 164 57 class Pass1 : public PolyMutator { … … 179 72 virtual void doEndScope(); 180 73 private: 74 /// Makes a new temporary array holding the offsets of the fields of `type`, and returns a new variable expression referencing it 75 Expression *makeOffsetArray( StructInstType *type ); 181 76 /// Pass the extra type parameters from polymorphic generic arguments or return types into a function application 182 77 void passArgTypeVars( ApplicationExpr *appExpr, Type *parmType, Type *argBaseType, std::list< Expression *>::iterator &arg, const TyVarMap &exprTyVars, std::set< std::string > &seenTypes ); … … 205 100 ObjectDecl *makeTemporary( Type *type ); 206 101 207 ScopedMap< std::string, DeclarationWithType *> assignOps; ///< Currently known type variable assignment operators208 ResolvExpr::TypeMap< DeclarationWithType > scopedAssignOps; ///< Currently known assignment operators209 ScopedMap< std::string, DeclarationWithType* > adapters; ///< Set of adapter functions in the current scope210 102 typedef std::map< std::string, DeclarationWithType *> AdapterMap; 103 std::map< std::string, DeclarationWithType *> assignOps; 104 ResolvExpr::TypeMap< DeclarationWithType > scopedAssignOps; 105 std::stack< AdapterMap > adapters; 211 106 DeclarationWithType *retval; 212 107 bool useRetval; … … 214 109 }; 215 110 216 /// * Moves polymorphic returns in function types to pointer-type parameters 217 /// * adds type size and assertion parameters to parameter lists 111 /// Moves polymorphic returns in function types to pointer-type parameters, adds type size and assertion parameters to parameter lists as well 218 112 class Pass2 : public PolyMutator { 219 113 public: … … 226 120 virtual Type *mutate( PointerType *pointerType ); 227 121 virtual Type *mutate( FunctionType *funcType ); 228 229 122 private: 230 123 void addAdapters( FunctionType *functionType ); … … 233 126 }; 234 127 235 /// Mutator pass that replaces concrete instantiations of generic types with actual struct declarations, scoped appropriately 236 class GenericInstantiator : public DeclMutator { 237 /// Map of (generic type, parameter list) pairs to concrete type instantiations 238 InstantiationMap< AggregateDecl, AggregateDecl > instantiations; 239 /// Namer for concrete types 240 UniqueName typeNamer; 241 242 public: 243 GenericInstantiator() : DeclMutator(), instantiations(), typeNamer("_conc_") {} 244 245 virtual Type* mutate( StructInstType *inst ); 246 virtual Type* mutate( UnionInstType *inst ); 247 248 // virtual Expression* mutate( MemberExpr *memberExpr ); 249 250 virtual void doBeginScope(); 251 virtual void doEndScope(); 252 private: 253 /// Wrap instantiation lookup for structs 254 StructDecl* lookup( StructInstType *inst, const std::list< TypeExpr* > &typeSubs ) { return (StructDecl*)instantiations.lookup( inst->get_baseStruct(), typeSubs ); } 255 /// Wrap instantiation lookup for unions 256 UnionDecl* lookup( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs ) { return (UnionDecl*)instantiations.lookup( inst->get_baseUnion(), typeSubs ); } 257 /// Wrap instantiation insertion for structs 258 void insert( StructInstType *inst, const std::list< TypeExpr* > &typeSubs, StructDecl *decl ) { instantiations.insert( inst->get_baseStruct(), typeSubs, decl ); } 259 /// Wrap instantiation insertion for unions 260 void insert( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs, UnionDecl *decl ) { instantiations.insert( inst->get_baseUnion(), typeSubs, decl ); } 261 }; 262 263 /// Replaces member and size/align/offsetof expressions on polymorphic generic types with calculated expressions. 264 /// * Replaces member expressions for polymorphic types with calculated add-field-offset-and-dereference 265 /// * Calculates polymorphic offsetof expressions from offset array 266 /// * Inserts dynamic calculation of polymorphic type layouts where needed 267 class PolyGenericCalculator : public PolyMutator { 268 public: 128 /// Replaces member expressions for polymorphic types with calculated add-field-offset-and-dereference; 129 /// also fixes offsetof expressions. 130 class MemberExprFixer : public PolyMutator { 131 public: 269 132 template< typename DeclClass > 270 133 DeclClass *handleDecl( DeclClass *decl, Type *type ); … … 277 140 virtual Type *mutate( FunctionType *funcType ); 278 141 virtual Expression *mutate( MemberExpr *memberExpr ); 279 virtual Expression *mutate( SizeofExpr *sizeofExpr );280 virtual Expression *mutate( AlignofExpr *alignofExpr );281 142 virtual Expression *mutate( OffsetofExpr *offsetofExpr ); 282 virtual Expression *mutate( OffsetPackExpr *offsetPackExpr );283 284 virtual void doBeginScope();285 virtual void doEndScope();286 287 private:288 /// Makes a new variable in the current scope with the given name, type & optional initializer289 ObjectDecl *makeVar( const std::string &name, Type *type, Initializer *init = 0 );290 /// returns true if the type has a dynamic layout; such a layout will be stored in appropriately-named local variables when the function returns291 bool findGeneric( Type *ty );292 /// adds type parameters to the layout call; will generate the appropriate parameters if needed293 void addOtypeParamsToLayoutCall( UntypedExpr *layoutCall, const std::list< Type* > &otypeParams );294 295 /// Enters a new scope for type-variables, adding the type variables from ty296 void beginTypeScope( Type *ty );297 /// Exits the type-variable scope298 void endTypeScope();299 300 ScopedSet< std::string > knownLayouts; ///< Set of generic type layouts known in the current scope, indexed by sizeofName301 ScopedSet< std::string > knownOffsets; ///< Set of non-generic types for which the offset array exists in the current scope, indexed by offsetofName302 143 }; 303 144 … … 318 159 } // anonymous namespace 319 160 161 void printAllNotBuiltin( const std::list< Declaration *>& translationUnit, std::ostream &os ) { 162 for ( std::list< Declaration *>::const_iterator i = translationUnit.begin(); i != translationUnit.end(); ++i ) { 163 if ( ! LinkageSpec::isBuiltin( (*i)->get_linkage() ) ) { 164 (*i)->print( os ); 165 os << std::endl; 166 } // if 167 } // for 168 } 169 320 170 /// version of mutateAll with special handling for translation unit so you can check the end of the prelude when debugging 321 171 template< typename MutatorType > … … 345 195 346 196 void box( std::list< Declaration *>& translationUnit ) { 347 LayoutFunctionBuilder layoutBuilder;348 197 Pass1 pass1; 349 198 Pass2 pass2; 350 GenericInstantiator instantiator; 351 PolyGenericCalculator polyCalculator; 199 MemberExprFixer memberFixer; 352 200 Pass3 pass3; 353 354 layoutBuilder.mutateDeclarationList( translationUnit );355 201 mutateTranslationUnit/*All*/( translationUnit, pass1 ); 356 202 mutateTranslationUnit/*All*/( translationUnit, pass2 ); 357 instantiat or.mutateDeclarationList( translationUnit );358 mutateTranslationUnit/*All*/( translationUnit, polyCalculator );203 instantiateGeneric( translationUnit ); 204 mutateTranslationUnit/*All*/( translationUnit, memberFixer ); 359 205 mutateTranslationUnit/*All*/( translationUnit, pass3 ); 360 206 } 361 207 362 ////////////////////////////////// LayoutFunctionBuilder ////////////////////////////////////////////363 364 DeclarationWithType *LayoutFunctionBuilder::mutate( FunctionDecl *functionDecl ) {365 functionDecl->set_functionType( maybeMutate( functionDecl->get_functionType(), *this ) );366 mutateAll( functionDecl->get_oldDecls(), *this );367 ++functionNesting;368 functionDecl->set_statements( maybeMutate( functionDecl->get_statements(), *this ) );369 --functionNesting;370 return functionDecl;371 }372 373 /// Get a list of type declarations that will affect a layout function374 std::list< TypeDecl* > takeOtypeOnly( std::list< TypeDecl* > &decls ) {375 std::list< TypeDecl * > otypeDecls;376 377 for ( std::list< TypeDecl* >::const_iterator decl = decls.begin(); decl != decls.end(); ++decl ) {378 if ( (*decl)->get_kind() == TypeDecl::Any ) {379 otypeDecls.push_back( *decl );380 }381 }382 383 return otypeDecls;384 }385 386 /// Adds parameters for otype layout to a function type387 void addOtypeParams( FunctionType *layoutFnType, std::list< TypeDecl* > &otypeParams ) {388 BasicType sizeAlignType( Type::Qualifiers(), BasicType::LongUnsignedInt );389 390 for ( std::list< TypeDecl* >::const_iterator param = otypeParams.begin(); param != otypeParams.end(); ++param ) {391 TypeInstType paramType( Type::Qualifiers(), (*param)->get_name(), *param );392 std::string paramName = mangleType( ¶mType );393 layoutFnType->get_parameters().push_back( new ObjectDecl( sizeofName( paramName ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignType.clone(), 0 ) );394 layoutFnType->get_parameters().push_back( new ObjectDecl( alignofName( paramName ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignType.clone(), 0 ) );395 }396 }397 398 /// Builds a layout function declaration399 FunctionDecl *buildLayoutFunctionDecl( AggregateDecl *typeDecl, unsigned int functionNesting, FunctionType *layoutFnType ) {400 // Routines at global scope marked "static" to prevent multiple definitions is separate translation units401 // because each unit generates copies of the default routines for each aggregate.402 FunctionDecl *layoutDecl = new FunctionDecl(403 layoutofName( typeDecl ), functionNesting > 0 ? DeclarationNode::NoStorageClass : DeclarationNode::Static, LinkageSpec::AutoGen, layoutFnType, new CompoundStmt( noLabels ), true, false );404 layoutDecl->fixUniqueId();405 return layoutDecl;406 }407 408 /// Makes a unary operation409 Expression *makeOp( const std::string &name, Expression *arg ) {410 UntypedExpr *expr = new UntypedExpr( new NameExpr( name ) );411 expr->get_args().push_back( arg );412 return expr;413 }414 415 /// Makes a binary operation416 Expression *makeOp( const std::string &name, Expression *lhs, Expression *rhs ) {417 UntypedExpr *expr = new UntypedExpr( new NameExpr( name ) );418 expr->get_args().push_back( lhs );419 expr->get_args().push_back( rhs );420 return expr;421 }422 423 /// Returns the dereference of a local pointer variable424 Expression *derefVar( ObjectDecl *var ) {425 return makeOp( "*?", new VariableExpr( var ) );426 }427 428 /// makes an if-statement with a single-expression if-block and no then block429 Statement *makeCond( Expression *cond, Expression *ifPart ) {430 return new IfStmt( noLabels, cond, new ExprStmt( noLabels, ifPart ), 0 );431 }432 433 /// makes a statement that assigns rhs to lhs if lhs < rhs434 Statement *makeAssignMax( Expression *lhs, Expression *rhs ) {435 return makeCond( makeOp( "?<?", lhs, rhs ), makeOp( "?=?", lhs->clone(), rhs->clone() ) );436 }437 438 /// makes a statement that aligns lhs to rhs (rhs should be an integer power of two)439 Statement *makeAlignTo( Expression *lhs, Expression *rhs ) {440 // check that the lhs is zeroed out to the level of rhs441 Expression *ifCond = makeOp( "?&?", lhs, makeOp( "?-?", rhs, new ConstantExpr( Constant( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), "1" ) ) ) );442 // if not aligned, increment to alignment443 Expression *ifExpr = makeOp( "?+=?", lhs->clone(), makeOp( "?-?", rhs->clone(), ifCond->clone() ) );444 return makeCond( ifCond, ifExpr );445 }446 447 /// adds an expression to a compound statement448 void addExpr( CompoundStmt *stmts, Expression *expr ) {449 stmts->get_kids().push_back( new ExprStmt( noLabels, expr ) );450 }451 452 /// adds a statement to a compound statement453 void addStmt( CompoundStmt *stmts, Statement *stmt ) {454 stmts->get_kids().push_back( stmt );455 }456 457 Declaration *LayoutFunctionBuilder::mutate( StructDecl *structDecl ) {458 // do not generate layout function for "empty" tag structs459 if ( structDecl->get_members().empty() ) return structDecl;460 461 // get parameters that can change layout, exiting early if none462 std::list< TypeDecl* > otypeParams = takeOtypeOnly( structDecl->get_parameters() );463 if ( otypeParams.empty() ) return structDecl;464 465 // build layout function signature466 FunctionType *layoutFnType = new FunctionType( Type::Qualifiers(), false );467 BasicType *sizeAlignType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt );468 PointerType *sizeAlignOutType = new PointerType( Type::Qualifiers(), sizeAlignType );469 470 ObjectDecl *sizeParam = new ObjectDecl( sizeofName( structDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType, 0 );471 layoutFnType->get_parameters().push_back( sizeParam );472 ObjectDecl *alignParam = new ObjectDecl( alignofName( structDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );473 layoutFnType->get_parameters().push_back( alignParam );474 ObjectDecl *offsetParam = new ObjectDecl( offsetofName( structDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );475 layoutFnType->get_parameters().push_back( offsetParam );476 addOtypeParams( layoutFnType, otypeParams );477 478 // build function decl479 FunctionDecl *layoutDecl = buildLayoutFunctionDecl( structDecl, functionNesting, layoutFnType );480 481 // calculate struct layout in function body482 483 // initialize size and alignment to 0 and 1 (will have at least one member to re-edit size484 addExpr( layoutDecl->get_statements(), makeOp( "?=?", derefVar( sizeParam ), new ConstantExpr( Constant( sizeAlignType->clone(), "0" ) ) ) );485 addExpr( layoutDecl->get_statements(), makeOp( "?=?", derefVar( alignParam ), new ConstantExpr( Constant( sizeAlignType->clone(), "1" ) ) ) );486 unsigned long n_members = 0;487 bool firstMember = true;488 for ( std::list< Declaration* >::const_iterator member = structDecl->get_members().begin(); member != structDecl->get_members().end(); ++member ) {489 DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( *member );490 assert( dwt );491 Type *memberType = dwt->get_type();492 493 if ( firstMember ) {494 firstMember = false;495 } else {496 // make sure all members after the first (automatically aligned at 0) are properly padded for alignment497 addStmt( layoutDecl->get_statements(), makeAlignTo( derefVar( sizeParam ), new AlignofExpr( memberType->clone() ) ) );498 }499 500 // place current size in the current offset index501 addExpr( layoutDecl->get_statements(), makeOp( "?=?", makeOp( "?[?]", new VariableExpr( offsetParam ), new ConstantExpr( Constant::from( n_members ) ) ),502 derefVar( sizeParam ) ) );503 ++n_members;504 505 // add member size to current size506 addExpr( layoutDecl->get_statements(), makeOp( "?+=?", derefVar( sizeParam ), new SizeofExpr( memberType->clone() ) ) );507 508 // take max of member alignment and global alignment509 addStmt( layoutDecl->get_statements(), makeAssignMax( derefVar( alignParam ), new AlignofExpr( memberType->clone() ) ) );510 }511 // make sure the type is end-padded to a multiple of its alignment512 addStmt( layoutDecl->get_statements(), makeAlignTo( derefVar( sizeParam ), derefVar( alignParam ) ) );513 514 addDeclarationAfter( layoutDecl );515 return structDecl;516 }517 518 Declaration *LayoutFunctionBuilder::mutate( UnionDecl *unionDecl ) {519 // do not generate layout function for "empty" tag unions520 if ( unionDecl->get_members().empty() ) return unionDecl;521 522 // get parameters that can change layout, exiting early if none523 std::list< TypeDecl* > otypeParams = takeOtypeOnly( unionDecl->get_parameters() );524 if ( otypeParams.empty() ) return unionDecl;525 526 // build layout function signature527 FunctionType *layoutFnType = new FunctionType( Type::Qualifiers(), false );528 BasicType *sizeAlignType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt );529 PointerType *sizeAlignOutType = new PointerType( Type::Qualifiers(), sizeAlignType );530 531 ObjectDecl *sizeParam = new ObjectDecl( sizeofName( unionDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType, 0 );532 layoutFnType->get_parameters().push_back( sizeParam );533 ObjectDecl *alignParam = new ObjectDecl( alignofName( unionDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );534 layoutFnType->get_parameters().push_back( alignParam );535 addOtypeParams( layoutFnType, otypeParams );536 537 // build function decl538 FunctionDecl *layoutDecl = buildLayoutFunctionDecl( unionDecl, functionNesting, layoutFnType );539 540 // calculate union layout in function body541 addExpr( layoutDecl->get_statements(), makeOp( "?=?", derefVar( sizeParam ), new ConstantExpr( Constant( sizeAlignType->clone(), "1" ) ) ) );542 addExpr( layoutDecl->get_statements(), makeOp( "?=?", derefVar( alignParam ), new ConstantExpr( Constant( sizeAlignType->clone(), "1" ) ) ) );543 for ( std::list< Declaration* >::const_iterator member = unionDecl->get_members().begin(); member != unionDecl->get_members().end(); ++member ) {544 DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( *member );545 assert( dwt );546 Type *memberType = dwt->get_type();547 548 // take max member size and global size549 addStmt( layoutDecl->get_statements(), makeAssignMax( derefVar( sizeParam ), new SizeofExpr( memberType->clone() ) ) );550 551 // take max of member alignment and global alignment552 addStmt( layoutDecl->get_statements(), makeAssignMax( derefVar( alignParam ), new AlignofExpr( memberType->clone() ) ) );553 }554 // make sure the type is end-padded to a multiple of its alignment555 addStmt( layoutDecl->get_statements(), makeAlignTo( derefVar( sizeParam ), derefVar( alignParam ) ) );556 557 addDeclarationAfter( layoutDecl );558 return unionDecl;559 }560 561 208 ////////////////////////////////////////// Pass1 //////////////////////////////////////////////////// 562 209 … … 598 245 } 599 246 600 Pass1::Pass1() : useRetval( false ), tempNamer( "_temp" ) {} 247 Pass1::Pass1() : useRetval( false ), tempNamer( "_temp" ) { 248 adapters.push(AdapterMap()); 249 } 601 250 602 251 /// Returns T if the given declaration is (*?=?)(T *, T) for some TypeInstType T (return not checked, but maybe should be), NULL otherwise … … 660 309 661 310 DeclarationWithType *Pass1::mutate( FunctionDecl *functionDecl ) { 662 // if this is a assignment function, put it in the map for this scope311 // if this is a polymorphic assignment function, put it in the map for this scope 663 312 if ( Type *assignedType = isAssignment( functionDecl ) ) { 664 313 if ( ! dynamic_cast< TypeInstType* >( assignedType ) ) { … … 669 318 if ( functionDecl->get_statements() ) { // empty routine body ? 670 319 doBeginScope(); 671 scopeTyVars.beginScope();672 assignOps.beginScope();320 TyVarMap oldtyVars = scopeTyVars; 321 std::map< std::string, DeclarationWithType *> oldassignOps = assignOps; 673 322 DeclarationWithType *oldRetval = retval; 674 323 bool oldUseRetval = useRetval; … … 701 350 } // for 702 351 352 AdapterMap & adapters = Pass1::adapters.top(); 703 353 for ( std::list< FunctionType *>::iterator funType = functions.begin(); funType != functions.end(); ++funType ) { 704 354 std::string mangleName = mangleAdapterName( *funType, scopeTyVars ); … … 711 361 functionDecl->set_statements( functionDecl->get_statements()->acceptMutator( *this ) ); 712 362 713 scopeTyVars.endScope(); 714 assignOps.endScope(); 363 scopeTyVars = oldtyVars; 364 assignOps = oldassignOps; 365 // std::cerr << "end FunctionDecl: "; 366 // for ( TyVarMap::iterator i = scopeTyVars.begin(); i != scopeTyVars.end(); ++i ) { 367 // std::cerr << i->first << " "; 368 // } 369 // std::cerr << "\n"; 715 370 retval = oldRetval; 716 371 useRetval = oldUseRetval; … … 745 400 } 746 401 402 Expression *Pass1::makeOffsetArray( StructInstType *ty ) { 403 std::list< Declaration* > &baseMembers = ty->get_baseStruct()->get_members(); 404 405 // make a new temporary array 406 Type *offsetType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ); 407 std::stringstream lenGen; 408 lenGen << baseMembers.size(); 409 ConstantExpr *lenExpr = new ConstantExpr( Constant( offsetType->clone(), lenGen.str() ) ); 410 ObjectDecl *arrayTemp = makeTemporary( new ArrayType( Type::Qualifiers(), offsetType, lenExpr, false, false ) ); 411 412 // build initializer list for temporary 413 std::list< Initializer* > inits; 414 for ( std::list< Declaration* >::const_iterator member = baseMembers.begin(); member != baseMembers.end(); ++member ) { 415 DeclarationWithType *memberDecl; 416 if ( DeclarationWithType *origMember = dynamic_cast< DeclarationWithType* >( *member ) ) { 417 memberDecl = origMember->clone(); 418 } else { 419 memberDecl = new ObjectDecl( (*member)->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, offsetType->clone(), 0 ); 420 } 421 inits.push_back( new SingleInit( new OffsetofExpr( ty->clone(), memberDecl ) ) ); 422 } 423 arrayTemp->set_init( new ListInit( inits ) ); 424 425 // return variable pointing to temporary 426 return new VariableExpr( arrayTemp ); 427 } 428 747 429 void Pass1::passArgTypeVars( ApplicationExpr *appExpr, Type *parmType, Type *argBaseType, std::list< Expression *>::iterator &arg, const TyVarMap &exprTyVars, std::set< std::string > &seenTypes ) { 748 Type *poly Type = isPolyType( parmType, exprTyVars );749 if ( poly Type && ! dynamic_cast< TypeInstType* >( polyType ) ) {750 std::string typeName = mangleType( polyType );751 if ( seenTypes.count( typeName ) ) return;430 Type *polyBase = hasPolyBase( parmType, exprTyVars ); 431 if ( polyBase && ! dynamic_cast< TypeInstType* >( polyBase ) ) { 432 std::string sizeName = sizeofName( polyBase ); 433 if ( seenTypes.count( sizeName ) ) return; 752 434 753 435 arg = appExpr->get_args().insert( arg, new SizeofExpr( argBaseType->clone() ) ); … … 755 437 arg = appExpr->get_args().insert( arg, new AlignofExpr( argBaseType->clone() ) ); 756 438 arg++; 757 if ( dynamic_cast< StructInstType* >( poly Type ) ) {439 if ( dynamic_cast< StructInstType* >( polyBase ) ) { 758 440 if ( StructInstType *argBaseStructType = dynamic_cast< StructInstType* >( argBaseType ) ) { 759 // zero-length arrays are forbidden by C, so don't pass offset for empty struct 760 if ( ! argBaseStructType->get_baseStruct()->get_members().empty() ) { 761 arg = appExpr->get_args().insert( arg, new OffsetPackExpr( argBaseStructType->clone() ) ); 762 arg++; 763 } 441 arg = appExpr->get_args().insert( arg, makeOffsetArray( argBaseStructType ) ); 442 arg++; 764 443 } else { 765 444 throw SemanticError( "Cannot pass non-struct type for generic struct" ); … … 767 446 } 768 447 769 seenTypes.insert( typeName );448 seenTypes.insert( sizeName ); 770 449 } 771 450 } … … 909 588 return; 910 589 } else if ( arg->get_results().front()->get_isLvalue() ) { 911 // VariableExpr and MemberExpr are lvalues; need to check this isn't coming from the second arg of a comma expression though (not an lvalue) 912 if ( CommaExpr *commaArg = dynamic_cast< CommaExpr* >( arg ) ) { 913 commaArg->set_arg2( new AddressExpr( commaArg->get_arg2() ) ); 914 } else { 915 arg = new AddressExpr( arg ); 916 } 590 // VariableExpr and MemberExpr are lvalues 591 arg = new AddressExpr( arg ); 917 592 } else { 918 593 // use type computed in unification to declare boxed variables … … 1009 684 } // for 1010 685 } 686 687 1011 688 1012 689 FunctionDecl *Pass1::makeAdapter( FunctionType *adaptee, FunctionType *realType, const std::string &mangleName, const TyVarMap &tyVars ) { … … 1095 772 mangleName += makePolyMonoSuffix( originalFunction, exprTyVars ); 1096 773 1097 typedef ScopedMap< std::string, DeclarationWithType* >::iterator AdapterIter;1098 Adapter Iter adapter = adapters.find( mangleName );774 AdapterMap & adapters = Pass1::adapters.top(); 775 AdapterMap::iterator adapter = adapters.find( mangleName ); 1099 776 if ( adapter == adapters.end() ) { 1100 777 // adapter has not been created yet in the current scope, so define it 1101 778 FunctionDecl *newAdapter = makeAdapter( *funType, realFunction, mangleName, exprTyVars ); 1102 std::pair< AdapterIter, bool > answer = adapters.insert( std::pair< std::string, DeclarationWithType *>( mangleName, newAdapter ) ); 1103 adapter = answer.first; 779 adapter = adapters.insert( adapters.begin(), std::pair< std::string, DeclarationWithType *>( mangleName, newAdapter ) ); 1104 780 stmtsToAdd.push_back( new DeclStmt( noLabels, newAdapter ) ); 1105 781 } // if … … 1125 801 addAssign->get_args().push_back( appExpr->get_args().front() ); 1126 802 } // if 1127 addAssign->get_args().push_back( new NameExpr( sizeofName( mangleType( polyType )) ) );803 addAssign->get_args().push_back( new NameExpr( sizeofName( polyType ) ) ); 1128 804 addAssign->get_results().front() = appExpr->get_results().front()->clone(); 1129 805 if ( appExpr->get_env() ) { … … 1152 828 UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) ); 1153 829 multiply->get_args().push_back( appExpr->get_args().back() ); 1154 multiply->get_args().push_back( new SizeofExpr( baseType1->clone() ) );830 multiply->get_args().push_back( new NameExpr( sizeofName( baseType1 ) ) ); 1155 831 ret->get_args().push_back( appExpr->get_args().front() ); 1156 832 ret->get_args().push_back( multiply ); … … 1158 834 UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) ); 1159 835 multiply->get_args().push_back( appExpr->get_args().front() ); 1160 multiply->get_args().push_back( new SizeofExpr( baseType2->clone() ) );836 multiply->get_args().push_back( new NameExpr( sizeofName( baseType2 ) ) ); 1161 837 ret->get_args().push_back( multiply ); 1162 838 ret->get_args().push_back( appExpr->get_args().back() ); … … 1221 897 UntypedExpr *divide = new UntypedExpr( new NameExpr( "?/?" ) ); 1222 898 divide->get_args().push_back( appExpr ); 1223 divide->get_args().push_back( new SizeofExpr( baseType1->clone() ) );899 divide->get_args().push_back( new NameExpr( sizeofName( baseType1 ) ) ); 1224 900 divide->get_results().push_front( appExpr->get_results().front()->clone() ); 1225 901 if ( appExpr->get_env() ) { … … 1231 907 UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) ); 1232 908 multiply->get_args().push_back( appExpr->get_args().back() ); 1233 multiply->get_args().push_back( new SizeofExpr( baseType1->clone() ) );909 multiply->get_args().push_back( new NameExpr( sizeofName( baseType1 ) ) ); 1234 910 appExpr->get_args().back() = multiply; 1235 911 } else if ( baseType2 ) { 1236 912 UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) ); 1237 913 multiply->get_args().push_back( appExpr->get_args().front() ); 1238 multiply->get_args().push_back( new SizeofExpr( baseType2->clone() ) );914 multiply->get_args().push_back( new NameExpr( sizeofName( baseType2 ) ) ); 1239 915 appExpr->get_args().front() = multiply; 1240 916 } // if … … 1246 922 UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) ); 1247 923 multiply->get_args().push_back( appExpr->get_args().back() ); 1248 multiply->get_args().push_back( new SizeofExpr( baseType->clone() ) );924 multiply->get_args().push_back( new NameExpr( sizeofName( baseType ) ) ); 1249 925 appExpr->get_args().back() = multiply; 1250 926 } // if … … 1283 959 std::list< Expression *>::iterator paramBegin = appExpr->get_args().begin(); 1284 960 1285 TyVarMap exprTyVars ( (TypeDecl::Kind)-1 );961 TyVarMap exprTyVars; 1286 962 makeTyVarMap( function, exprTyVars ); 1287 963 ReferenceToType *polyRetType = isPolyRet( function ); … … 1306 982 1307 983 boxParams( appExpr, function, arg, exprTyVars ); 984 1308 985 passAdapters( appExpr, function, exprTyVars ); 1309 986 … … 1385 1062 if ( TypeInstType *typeInst = dynamic_cast< TypeInstType *>( retval->get_type() ) ) { 1386 1063 // find assignment operator for type variable 1387 ScopedMap< std::string, DeclarationWithType *>::const_iterator assignIter = assignOps.find( typeInst->get_name() );1064 std::map< std::string, DeclarationWithType *>::const_iterator assignIter = assignOps.find( typeInst->get_name() ); 1388 1065 if ( assignIter == assignOps.end() ) { 1389 1066 throw SemanticError( "Attempt to return dtype or ftype object in ", returnStmt->get_expr() ); … … 1407 1084 std::list< TypeDecl* >::const_iterator forallIt = forallParams.begin(); 1408 1085 for ( ; tyIt != tyParams.end() && forallIt != forallParams.end(); ++tyIt, ++forallIt ) { 1409 // Add appropriate mapping to assignment expression environment 1086 if ( (*forallIt)->get_kind() != TypeDecl::Any ) continue; // skip types with no assign op (ftype/dtype) 1087 1088 std::list< DeclarationWithType* > &asserts = (*forallIt)->get_assertions(); 1089 assert( ! asserts.empty() && "Type param needs assignment operator assertion" ); 1090 DeclarationWithType *actualDecl = asserts.front(); 1091 TypeInstType *actualType = isTypeInstAssignment( actualDecl ); 1092 assert( actualType && "First assertion of type with assertions should be assignment operator" ); 1410 1093 TypeExpr *formalTypeExpr = dynamic_cast< TypeExpr* >( *tyIt ); 1411 1094 assert( formalTypeExpr && "type parameters must be type expressions" ); 1412 1095 Type *formalType = formalTypeExpr->get_type(); 1413 assignExpr->get_env()->add( (*forallIt)->get_name(), formalType ); 1414 1415 // skip types with no assign op (ftype/dtype) 1416 if ( (*forallIt)->get_kind() != TypeDecl::Any ) continue; 1417 1418 // find assignment operator for formal type 1096 assignExpr->get_env()->add( actualType->get_name(), formalType ); 1097 1419 1098 DeclarationWithType *assertAssign = 0; 1420 1099 if ( TypeInstType *formalTypeInstType = dynamic_cast< TypeInstType* >( formalType ) ) { 1421 ScopedMap< std::string, DeclarationWithType *>::const_iterator assertAssignIt = assignOps.find( formalTypeInstType->get_name() );1100 std::map< std::string, DeclarationWithType *>::const_iterator assertAssignIt = assignOps.find( formalTypeInstType->get_name() ); 1422 1101 if ( assertAssignIt == assignOps.end() ) { 1423 1102 throw SemanticError( "No assignment operation found for ", formalTypeInstType ); … … 1430 1109 } 1431 1110 } 1432 1433 // add inferred parameter for field assignment operator to assignment expression 1434 std::list< DeclarationWithType* > &asserts = (*forallIt)->get_assertions(); 1435 assert( ! asserts.empty() && "Type param needs assignment operator assertion" ); 1436 DeclarationWithType *actualDecl = asserts.front(); 1111 1112 1437 1113 assignExpr->get_inferParams()[ actualDecl->get_uniqueId() ] 1438 1114 = ParamEntry( assertAssign->get_uniqueId(), assertAssign->get_type()->clone(), actualDecl->get_type()->clone(), wrapFunctionDecl( assertAssign ) ); … … 1460 1136 1461 1137 Type * Pass1::mutate( PointerType *pointerType ) { 1462 scopeTyVars.beginScope();1138 TyVarMap oldtyVars = scopeTyVars; 1463 1139 makeTyVarMap( pointerType, scopeTyVars ); 1464 1140 1465 1141 Type *ret = Mutator::mutate( pointerType ); 1466 1142 1467 scopeTyVars .endScope();1143 scopeTyVars = oldtyVars; 1468 1144 return ret; 1469 1145 } 1470 1146 1471 1147 Type * Pass1::mutate( FunctionType *functionType ) { 1472 scopeTyVars.beginScope();1148 TyVarMap oldtyVars = scopeTyVars; 1473 1149 makeTyVarMap( functionType, scopeTyVars ); 1474 1150 1475 1151 Type *ret = Mutator::mutate( functionType ); 1476 1152 1477 scopeTyVars .endScope();1153 scopeTyVars = oldtyVars; 1478 1154 return ret; 1479 1155 } 1480 1156 1481 1157 void Pass1::doBeginScope() { 1482 adapters.beginScope(); 1158 // push a copy of the current map 1159 adapters.push(adapters.top()); 1483 1160 scopedAssignOps.beginScope(); 1484 1161 } 1485 1162 1486 1163 void Pass1::doEndScope() { 1487 adapters. endScope();1164 adapters.pop(); 1488 1165 scopedAssignOps.endScope(); 1489 1166 } … … 1540 1217 1541 1218 Type * Pass2::mutate( PointerType *pointerType ) { 1542 scopeTyVars.beginScope();1219 TyVarMap oldtyVars = scopeTyVars; 1543 1220 makeTyVarMap( pointerType, scopeTyVars ); 1544 1221 1545 1222 Type *ret = Mutator::mutate( pointerType ); 1546 1223 1547 scopeTyVars .endScope();1224 scopeTyVars = oldtyVars; 1548 1225 return ret; 1549 1226 } 1550 1227 1551 1228 Type *Pass2::mutate( FunctionType *funcType ) { 1552 scopeTyVars.beginScope();1229 TyVarMap oldtyVars = scopeTyVars; 1553 1230 makeTyVarMap( funcType, scopeTyVars ); 1554 1231 … … 1567 1244 ObjectDecl newPtr( "", DeclarationNode::NoStorageClass, LinkageSpec::C, 0, 1568 1245 new PointerType( Type::Qualifiers(), new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ) ), 0 ); 1246 // ObjectDecl *newFunPtr = new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, new PointerType( Type::Qualifiers(), new FunctionType( Type::Qualifiers(), true ) ), 0 ); 1569 1247 for ( std::list< TypeDecl *>::const_iterator tyParm = funcType->get_forall().begin(); tyParm != funcType->get_forall().end(); ++tyParm ) { 1570 1248 ObjectDecl *sizeParm, *alignParm; … … 1572 1250 if ( (*tyParm)->get_kind() == TypeDecl::Any ) { 1573 1251 TypeInstType parmType( Type::Qualifiers(), (*tyParm)->get_name(), *tyParm ); 1574 std::string parmName = mangleType( &parmType );1575 1252 1576 1253 sizeParm = newObj.clone(); 1577 sizeParm->set_name( sizeofName( parmName ) );1254 sizeParm->set_name( sizeofName( &parmType ) ); 1578 1255 last = funcType->get_parameters().insert( last, sizeParm ); 1579 1256 ++last; 1580 1257 1581 1258 alignParm = newObj.clone(); 1582 alignParm->set_name( alignofName( parmName ) );1259 alignParm->set_name( alignofName( &parmType ) ); 1583 1260 last = funcType->get_parameters().insert( last, alignParm ); 1584 1261 ++last; … … 1595 1272 std::set< std::string > seenTypes; // sizeofName for generic types we've seen 1596 1273 for ( std::list< DeclarationWithType* >::const_iterator fnParm = last; fnParm != funcType->get_parameters().end(); ++fnParm ) { 1597 Type *poly Type = isPolyType( (*fnParm)->get_type(), scopeTyVars );1598 if ( poly Type && ! dynamic_cast< TypeInstType* >( polyType ) ) {1599 std::string typeName = mangleType( polyType );1600 if ( seenTypes.count( typeName ) ) continue;1274 Type *polyBase = hasPolyBase( (*fnParm)->get_type(), scopeTyVars ); 1275 if ( polyBase && ! dynamic_cast< TypeInstType* >( polyBase ) ) { 1276 std::string sizeName = sizeofName( polyBase ); 1277 if ( seenTypes.count( sizeName ) ) continue; 1601 1278 1602 1279 ObjectDecl *sizeParm, *alignParm, *offsetParm; 1603 1280 sizeParm = newObj.clone(); 1604 sizeParm->set_name( size ofName( typeName ));1281 sizeParm->set_name( sizeName ); 1605 1282 last = funcType->get_parameters().insert( last, sizeParm ); 1606 1283 ++last; 1607 1284 1608 1285 alignParm = newObj.clone(); 1609 alignParm->set_name( alignofName( typeName ) );1286 alignParm->set_name( alignofName( polyBase ) ); 1610 1287 last = funcType->get_parameters().insert( last, alignParm ); 1611 1288 ++last; 1612 1289 1613 if ( StructInstType *polyBaseStruct = dynamic_cast< StructInstType* >( polyType ) ) { 1614 // NOTE zero-length arrays are illegal in C, so empty structs have no offset array 1615 if ( ! polyBaseStruct->get_baseStruct()->get_members().empty() ) { 1616 offsetParm = newPtr.clone(); 1617 offsetParm->set_name( offsetofName( typeName ) ); 1618 last = funcType->get_parameters().insert( last, offsetParm ); 1619 ++last; 1620 } 1290 if ( dynamic_cast< StructInstType* >( polyBase ) ) { 1291 offsetParm = newPtr.clone(); 1292 offsetParm->set_name( offsetofName( polyBase ) ); 1293 last = funcType->get_parameters().insert( last, offsetParm ); 1294 ++last; 1621 1295 } 1622 1296 1623 seenTypes.insert( typeName );1297 seenTypes.insert( sizeName ); 1624 1298 } 1625 1299 } … … 1631 1305 mutateAll( funcType->get_parameters(), *this ); 1632 1306 1633 scopeTyVars .endScope();1307 scopeTyVars = oldtyVars; 1634 1308 return funcType; 1635 1309 } 1636 1310 1637 //////////////////////////////////////// GenericInstantiator ////////////////////////////////////////////////// 1638 1639 /// Makes substitutions of params into baseParams; returns true if all parameters substituted for a concrete type 1640 bool makeSubstitutions( const std::list< TypeDecl* >& baseParams, const std::list< Expression* >& params, std::list< TypeExpr* >& out ) { 1641 bool allConcrete = true; // will finish the substitution list even if they're not all concrete 1642 1643 // substitute concrete types for given parameters, and incomplete types for placeholders 1644 std::list< TypeDecl* >::const_iterator baseParam = baseParams.begin(); 1645 std::list< Expression* >::const_iterator param = params.begin(); 1646 for ( ; baseParam != baseParams.end() && param != params.end(); ++baseParam, ++param ) { 1647 // switch ( (*baseParam)->get_kind() ) { 1648 // case TypeDecl::Any: { // any type is a valid substitution here; complete types can be used to instantiate generics 1649 TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param ); 1650 assert(paramType && "Aggregate parameters should be type expressions"); 1651 out.push_back( paramType->clone() ); 1652 // check that the substituted type isn't a type variable itself 1653 if ( dynamic_cast< TypeInstType* >( paramType->get_type() ) ) { 1654 allConcrete = false; 1655 } 1656 // break; 1657 // } 1658 // case TypeDecl::Dtype: // dtype can be consistently replaced with void [only pointers, which become void*] 1659 // out.push_back( new TypeExpr( new VoidType( Type::Qualifiers() ) ) ); 1660 // break; 1661 // case TypeDecl::Ftype: // pointer-to-ftype can be consistently replaced with void (*)(void) [similar to dtype] 1662 // out.push_back( new TypeExpr( new FunctionType( Type::Qualifiers(), false ) ) ); 1663 // break; 1664 // } 1665 } 1666 1667 // if any parameters left over, not done 1668 if ( baseParam != baseParams.end() ) return false; 1669 // // if not enough parameters given, substitute remaining incomplete types for placeholders 1670 // for ( ; baseParam != baseParams.end(); ++baseParam ) { 1671 // switch ( (*baseParam)->get_kind() ) { 1672 // case TypeDecl::Any: // no more substitutions here, fail early 1673 // return false; 1674 // case TypeDecl::Dtype: // dtype can be consistently replaced with void [only pointers, which become void*] 1675 // out.push_back( new TypeExpr( new VoidType( Type::Qualifiers() ) ) ); 1676 // break; 1677 // case TypeDecl::Ftype: // pointer-to-ftype can be consistently replaced with void (*)(void) [similar to dtype] 1678 // out.push_back( new TypeExpr( new FunctionType( Type::Qualifiers(), false ) ) ); 1679 // break; 1680 // } 1681 // } 1682 1683 return allConcrete; 1684 } 1685 1686 /// Substitutes types of members of in according to baseParams => typeSubs, appending the result to out 1687 void substituteMembers( const std::list< Declaration* >& in, const std::list< TypeDecl* >& baseParams, const std::list< TypeExpr* >& typeSubs, 1688 std::list< Declaration* >& out ) { 1689 // substitute types into new members 1690 TypeSubstitution subs( baseParams.begin(), baseParams.end(), typeSubs.begin() ); 1691 for ( std::list< Declaration* >::const_iterator member = in.begin(); member != in.end(); ++member ) { 1692 Declaration *newMember = (*member)->clone(); 1693 subs.apply(newMember); 1694 out.push_back( newMember ); 1695 } 1696 } 1697 1698 Type* GenericInstantiator::mutate( StructInstType *inst ) { 1699 // mutate subtypes 1700 Type *mutated = Mutator::mutate( inst ); 1701 inst = dynamic_cast< StructInstType* >( mutated ); 1702 if ( ! inst ) return mutated; 1703 1704 // exit early if no need for further mutation 1705 if ( inst->get_parameters().empty() ) return inst; 1706 assert( inst->get_baseParameters() && "Base struct has parameters" ); 1707 1708 // check if type can be concretely instantiated; put substitutions into typeSubs 1709 std::list< TypeExpr* > typeSubs; 1710 if ( ! makeSubstitutions( *inst->get_baseParameters(), inst->get_parameters(), typeSubs ) ) { 1711 deleteAll( typeSubs ); 1712 return inst; 1713 } 1714 1715 // make concrete instantiation of generic type 1716 StructDecl *concDecl = lookup( inst, typeSubs ); 1717 if ( ! concDecl ) { 1718 // set concDecl to new type, insert type declaration into statements to add 1719 concDecl = new StructDecl( typeNamer.newName( inst->get_name() ) ); 1720 substituteMembers( inst->get_baseStruct()->get_members(), *inst->get_baseParameters(), typeSubs, concDecl->get_members() ); 1721 DeclMutator::addDeclaration( concDecl ); 1722 insert( inst, typeSubs, concDecl ); 1723 } 1724 StructInstType *newInst = new StructInstType( inst->get_qualifiers(), concDecl->get_name() ); 1725 newInst->set_baseStruct( concDecl ); 1726 1727 deleteAll( typeSubs ); 1728 delete inst; 1729 return newInst; 1730 } 1731 1732 Type* GenericInstantiator::mutate( UnionInstType *inst ) { 1733 // mutate subtypes 1734 Type *mutated = Mutator::mutate( inst ); 1735 inst = dynamic_cast< UnionInstType* >( mutated ); 1736 if ( ! inst ) return mutated; 1737 1738 // exit early if no need for further mutation 1739 if ( inst->get_parameters().empty() ) return inst; 1740 assert( inst->get_baseParameters() && "Base union has parameters" ); 1741 1742 // check if type can be concretely instantiated; put substitutions into typeSubs 1743 std::list< TypeExpr* > typeSubs; 1744 if ( ! makeSubstitutions( *inst->get_baseParameters(), inst->get_parameters(), typeSubs ) ) { 1745 deleteAll( typeSubs ); 1746 return inst; 1747 } 1748 1749 // make concrete instantiation of generic type 1750 UnionDecl *concDecl = lookup( inst, typeSubs ); 1751 if ( ! concDecl ) { 1752 // set concDecl to new type, insert type declaration into statements to add 1753 concDecl = new UnionDecl( typeNamer.newName( inst->get_name() ) ); 1754 substituteMembers( inst->get_baseUnion()->get_members(), *inst->get_baseParameters(), typeSubs, concDecl->get_members() ); 1755 DeclMutator::addDeclaration( concDecl ); 1756 insert( inst, typeSubs, concDecl ); 1757 } 1758 UnionInstType *newInst = new UnionInstType( inst->get_qualifiers(), concDecl->get_name() ); 1759 newInst->set_baseUnion( concDecl ); 1760 1761 deleteAll( typeSubs ); 1762 delete inst; 1763 return newInst; 1764 } 1765 1766 // /// Gets the base struct or union declaration for a member expression; NULL if not applicable 1767 // AggregateDecl* getMemberBaseDecl( MemberExpr *memberExpr ) { 1768 // // get variable for member aggregate 1769 // VariableExpr *varExpr = dynamic_cast< VariableExpr* >( memberExpr->get_aggregate() ); 1770 // if ( ! varExpr ) return NULL; 1771 // 1772 // // get object for variable 1773 // ObjectDecl *objectDecl = dynamic_cast< ObjectDecl* >( varExpr->get_var() ); 1774 // if ( ! objectDecl ) return NULL; 1775 // 1776 // // get base declaration from object type 1777 // Type *objectType = objectDecl->get_type(); 1778 // StructInstType *structType = dynamic_cast< StructInstType* >( objectType ); 1779 // if ( structType ) return structType->get_baseStruct(); 1780 // UnionInstType *unionType = dynamic_cast< UnionInstType* >( objectType ); 1781 // if ( unionType ) return unionType->get_baseUnion(); 1782 // 1783 // return NULL; 1784 // } 1785 // 1786 // /// Finds the declaration with the given name, returning decls.end() if none such 1787 // std::list< Declaration* >::const_iterator findDeclNamed( const std::list< Declaration* > &decls, const std::string &name ) { 1788 // for( std::list< Declaration* >::const_iterator decl = decls.begin(); decl != decls.end(); ++decl ) { 1789 // if ( (*decl)->get_name() == name ) return decl; 1790 // } 1791 // return decls.end(); 1792 // } 1793 // 1794 // Expression* Instantiate::mutate( MemberExpr *memberExpr ) { 1795 // // mutate, exiting early if no longer MemberExpr 1796 // Expression *expr = Mutator::mutate( memberExpr ); 1797 // memberExpr = dynamic_cast< MemberExpr* >( expr ); 1798 // if ( ! memberExpr ) return expr; 1799 // 1800 // // get declaration of member and base declaration of member, exiting early if not found 1801 // AggregateDecl *memberBase = getMemberBaseDecl( memberExpr ); 1802 // if ( ! memberBase ) return memberExpr; 1803 // DeclarationWithType *memberDecl = memberExpr->get_member(); 1804 // std::list< Declaration* >::const_iterator baseIt = findDeclNamed( memberBase->get_members(), memberDecl->get_name() ); 1805 // if ( baseIt == memberBase->get_members().end() ) return memberExpr; 1806 // DeclarationWithType *baseDecl = dynamic_cast< DeclarationWithType* >( *baseIt ); 1807 // if ( ! baseDecl ) return memberExpr; 1808 // 1809 // // check if stated type of the member is not the type of the member's declaration; if so, need a cast 1810 // // this *SHOULD* be safe, I don't think anything but the void-replacements I put in for dtypes would make it past the typechecker 1811 // SymTab::Indexer dummy; 1812 // if ( ResolvExpr::typesCompatible( memberDecl->get_type(), baseDecl->get_type(), dummy ) ) return memberExpr; 1813 // else return new CastExpr( memberExpr, memberDecl->get_type() ); 1814 // } 1815 1816 void GenericInstantiator::doBeginScope() { 1817 DeclMutator::doBeginScope(); 1818 instantiations.beginScope(); 1819 } 1820 1821 void GenericInstantiator::doEndScope() { 1822 DeclMutator::doEndScope(); 1823 instantiations.endScope(); 1824 } 1825 1826 ////////////////////////////////////////// PolyGenericCalculator //////////////////////////////////////////////////// 1827 1828 void PolyGenericCalculator::beginTypeScope( Type *ty ) { 1829 scopeTyVars.beginScope(); 1830 makeTyVarMap( ty, scopeTyVars ); 1831 } 1832 1833 void PolyGenericCalculator::endTypeScope() { 1834 scopeTyVars.endScope(); 1835 } 1311 ////////////////////////////////////////// MemberExprFixer //////////////////////////////////////////////////// 1836 1312 1837 1313 template< typename DeclClass > 1838 DeclClass * PolyGenericCalculator::handleDecl( DeclClass *decl, Type *type ) { 1839 beginTypeScope( type ); 1840 knownLayouts.beginScope(); 1841 knownOffsets.beginScope(); 1314 DeclClass * MemberExprFixer::handleDecl( DeclClass *decl, Type *type ) { 1315 TyVarMap oldtyVars = scopeTyVars; 1316 makeTyVarMap( type, scopeTyVars ); 1842 1317 1843 1318 DeclClass *ret = static_cast< DeclClass *>( Mutator::mutate( decl ) ); 1844 1319 1845 knownOffsets.endScope(); 1846 knownLayouts.endScope(); 1847 endTypeScope(); 1320 scopeTyVars = oldtyVars; 1848 1321 return ret; 1849 1322 } 1850 1323 1851 ObjectDecl * PolyGenericCalculator::mutate( ObjectDecl *objectDecl ) {1324 ObjectDecl * MemberExprFixer::mutate( ObjectDecl *objectDecl ) { 1852 1325 return handleDecl( objectDecl, objectDecl->get_type() ); 1853 1326 } 1854 1327 1855 DeclarationWithType * PolyGenericCalculator::mutate( FunctionDecl *functionDecl ) {1328 DeclarationWithType * MemberExprFixer::mutate( FunctionDecl *functionDecl ) { 1856 1329 return handleDecl( functionDecl, functionDecl->get_functionType() ); 1857 1330 } 1858 1331 1859 TypedefDecl * PolyGenericCalculator::mutate( TypedefDecl *typedefDecl ) {1332 TypedefDecl * MemberExprFixer::mutate( TypedefDecl *typedefDecl ) { 1860 1333 return handleDecl( typedefDecl, typedefDecl->get_base() ); 1861 1334 } 1862 1335 1863 TypeDecl * PolyGenericCalculator::mutate( TypeDecl *typeDecl ) {1336 TypeDecl * MemberExprFixer::mutate( TypeDecl *typeDecl ) { 1864 1337 scopeTyVars[ typeDecl->get_name() ] = typeDecl->get_kind(); 1865 1338 return Mutator::mutate( typeDecl ); 1866 1339 } 1867 1340 1868 Type * PolyGenericCalculator::mutate( PointerType *pointerType ) { 1869 beginTypeScope( pointerType ); 1341 Type * MemberExprFixer::mutate( PointerType *pointerType ) { 1342 TyVarMap oldtyVars = scopeTyVars; 1343 makeTyVarMap( pointerType, scopeTyVars ); 1870 1344 1871 1345 Type *ret = Mutator::mutate( pointerType ); 1872 1346 1873 endTypeScope();1347 scopeTyVars = oldtyVars; 1874 1348 return ret; 1875 1349 } 1876 1350 1877 Type * PolyGenericCalculator::mutate( FunctionType *funcType ) { 1878 beginTypeScope( funcType ); 1879 1880 // make sure that any type information passed into the function is accounted for 1881 for ( std::list< DeclarationWithType* >::const_iterator fnParm = funcType->get_parameters().begin(); fnParm != funcType->get_parameters().end(); ++fnParm ) { 1882 // condition here duplicates that in Pass2::mutate( FunctionType* ) 1883 Type *polyType = isPolyType( (*fnParm)->get_type(), scopeTyVars ); 1884 if ( polyType && ! dynamic_cast< TypeInstType* >( polyType ) ) { 1885 knownLayouts.insert( mangleType( polyType ) ); 1886 } 1887 } 1888 1889 Type *ret = Mutator::mutate( funcType ); 1890 1891 endTypeScope(); 1351 Type * MemberExprFixer::mutate( FunctionType *functionType ) { 1352 TyVarMap oldtyVars = scopeTyVars; 1353 makeTyVarMap( functionType, scopeTyVars ); 1354 1355 Type *ret = Mutator::mutate( functionType ); 1356 1357 scopeTyVars = oldtyVars; 1892 1358 return ret; 1893 1359 } 1894 1360 1895 Statement * PolyGenericCalculator::mutate( DeclStmt *declStmt ) {1361 Statement *MemberExprFixer::mutate( DeclStmt *declStmt ) { 1896 1362 if ( ObjectDecl *objectDecl = dynamic_cast< ObjectDecl *>( declStmt->get_decl() ) ) { 1897 if ( findGeneric( objectDecl->get_type()) ) {1363 if ( isPolyType( objectDecl->get_type(), scopeTyVars ) ) { 1898 1364 // change initialization of a polymorphic value object 1899 1365 // to allocate storage with alloca 1900 1366 Type *declType = objectDecl->get_type(); 1901 1367 UntypedExpr *alloc = new UntypedExpr( new NameExpr( "__builtin_alloca" ) ); 1902 alloc->get_args().push_back( new NameExpr( sizeofName( mangleType( declType )) ) );1368 alloc->get_args().push_back( new NameExpr( sizeofName( declType ) ) ); 1903 1369 1904 1370 delete objectDecl->get_init(); … … 1932 1398 ConstantExpr *fieldIndex = new ConstantExpr( Constant( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), offset_namer.str() ) ); 1933 1399 UntypedExpr *fieldOffset = new UntypedExpr( new NameExpr( "?[?]" ) ); 1934 fieldOffset->get_args().push_back( new NameExpr( offsetofName( mangleType( objectType )) ) );1400 fieldOffset->get_args().push_back( new NameExpr( offsetofName( objectType ) ) ); 1935 1401 fieldOffset->get_args().push_back( fieldIndex ); 1936 1402 return fieldOffset; … … 1947 1413 } 1948 1414 1949 Expression * PolyGenericCalculator::mutate( MemberExpr *memberExpr ) {1415 Expression *MemberExprFixer::mutate( MemberExpr *memberExpr ) { 1950 1416 // mutate, exiting early if no longer MemberExpr 1951 1417 Expression *expr = Mutator::mutate( memberExpr ); … … 1964 1430 Type *objectType = hasPolyBase( objectDecl->get_type(), scopeTyVars, &tyDepth ); 1965 1431 if ( ! objectType ) return memberExpr; 1966 findGeneric( objectType ); // ensure layout for this type is available1967 1432 1968 1433 Expression *newMemberExpr = 0; … … 1996 1461 } 1997 1462 1998 ObjectDecl *PolyGenericCalculator::makeVar( const std::string &name, Type *type, Initializer *init ) { 1999 ObjectDecl *newObj = new ObjectDecl( name, DeclarationNode::NoStorageClass, LinkageSpec::C, 0, type, init ); 2000 stmtsToAdd.push_back( new DeclStmt( noLabels, newObj ) ); 2001 return newObj; 2002 } 2003 2004 void PolyGenericCalculator::addOtypeParamsToLayoutCall( UntypedExpr *layoutCall, const std::list< Type* > &otypeParams ) { 2005 for ( std::list< Type* >::const_iterator param = otypeParams.begin(); param != otypeParams.end(); ++param ) { 2006 if ( findGeneric( *param ) ) { 2007 // push size/align vars for a generic parameter back 2008 std::string paramName = mangleType( *param ); 2009 layoutCall->get_args().push_back( new NameExpr( sizeofName( paramName ) ) ); 2010 layoutCall->get_args().push_back( new NameExpr( alignofName( paramName ) ) ); 2011 } else { 2012 layoutCall->get_args().push_back( new SizeofExpr( (*param)->clone() ) ); 2013 layoutCall->get_args().push_back( new AlignofExpr( (*param)->clone() ) ); 2014 } 2015 } 2016 } 2017 2018 /// returns true if any of the otype parameters have a dynamic layout and puts all otype parameters in the output list 2019 bool findGenericParams( std::list< TypeDecl* > &baseParams, std::list< Expression* > &typeParams, std::list< Type* > &out ) { 2020 bool hasDynamicLayout = false; 2021 2022 std::list< TypeDecl* >::const_iterator baseParam = baseParams.begin(); 2023 std::list< Expression* >::const_iterator typeParam = typeParams.begin(); 2024 for ( ; baseParam != baseParams.end() && typeParam != typeParams.end(); ++baseParam, ++typeParam ) { 2025 // skip non-otype parameters 2026 if ( (*baseParam)->get_kind() != TypeDecl::Any ) continue; 2027 TypeExpr *typeExpr = dynamic_cast< TypeExpr* >( *typeParam ); 2028 assert( typeExpr && "all otype parameters should be type expressions" ); 2029 2030 Type *type = typeExpr->get_type(); 2031 out.push_back( type ); 2032 if ( isPolyType( type ) ) hasDynamicLayout = true; 2033 } 2034 assert( baseParam == baseParams.end() && typeParam == typeParams.end() ); 2035 2036 return hasDynamicLayout; 2037 } 2038 2039 bool PolyGenericCalculator::findGeneric( Type *ty ) { 2040 if ( TypeInstType *typeInst = dynamic_cast< TypeInstType* >( ty ) ) { 2041 // duplicate logic from isPolyType() 2042 if ( env ) { 2043 if ( Type *newType = env->lookup( typeInst->get_name() ) ) { 2044 return findGeneric( newType ); 2045 } // if 2046 } // if 2047 if ( scopeTyVars.find( typeInst->get_name() ) != scopeTyVars.end() ) { 2048 // NOTE assumes here that getting put in the scopeTyVars included having the layout variables set 2049 return true; 2050 } 2051 return false; 2052 } else if ( StructInstType *structTy = dynamic_cast< StructInstType* >( ty ) ) { 2053 // check if this type already has a layout generated for it 2054 std::string typeName = mangleType( ty ); 2055 if ( knownLayouts.find( typeName ) != knownLayouts.end() ) return true; 2056 2057 // check if any of the type parameters have dynamic layout; if none do, this type is (or will be) monomorphized 2058 std::list< Type* > otypeParams; 2059 if ( ! findGenericParams( *structTy->get_baseParameters(), structTy->get_parameters(), otypeParams ) ) return false; 2060 2061 // insert local variables for layout and generate call to layout function 2062 knownLayouts.insert( typeName ); // done early so as not to interfere with the later addition of parameters to the layout call 2063 Type *layoutType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ); 2064 2065 int n_members = structTy->get_baseStruct()->get_members().size(); 2066 if ( n_members == 0 ) { 2067 // all empty structs have the same layout - size 1, align 1 2068 makeVar( sizeofName( typeName ), layoutType, new SingleInit( new ConstantExpr( Constant::from( (unsigned long)1 ) ) ) ); 2069 makeVar( alignofName( typeName ), layoutType->clone(), new SingleInit( new ConstantExpr( Constant::from( (unsigned long)1 ) ) ) ); 2070 // NOTE zero-length arrays are forbidden in C, so empty structs have no offsetof array 2071 } else { 2072 ObjectDecl *sizeVar = makeVar( sizeofName( typeName ), layoutType ); 2073 ObjectDecl *alignVar = makeVar( alignofName( typeName ), layoutType->clone() ); 2074 ObjectDecl *offsetVar = makeVar( offsetofName( typeName ), new ArrayType( Type::Qualifiers(), layoutType->clone(), new ConstantExpr( Constant::from( n_members ) ), false, false ) ); 2075 2076 // generate call to layout function 2077 UntypedExpr *layoutCall = new UntypedExpr( new NameExpr( layoutofName( structTy->get_baseStruct() ) ) ); 2078 layoutCall->get_args().push_back( new AddressExpr( new VariableExpr( sizeVar ) ) ); 2079 layoutCall->get_args().push_back( new AddressExpr( new VariableExpr( alignVar ) ) ); 2080 layoutCall->get_args().push_back( new VariableExpr( offsetVar ) ); 2081 addOtypeParamsToLayoutCall( layoutCall, otypeParams ); 2082 2083 stmtsToAdd.push_back( new ExprStmt( noLabels, layoutCall ) ); 2084 } 2085 2086 return true; 2087 } else if ( UnionInstType *unionTy = dynamic_cast< UnionInstType* >( ty ) ) { 2088 // check if this type already has a layout generated for it 2089 std::string typeName = mangleType( ty ); 2090 if ( knownLayouts.find( typeName ) != knownLayouts.end() ) return true; 2091 2092 // check if any of the type parameters have dynamic layout; if none do, this type is (or will be) monomorphized 2093 std::list< Type* > otypeParams; 2094 if ( ! findGenericParams( *unionTy->get_baseParameters(), unionTy->get_parameters(), otypeParams ) ) return false; 2095 2096 // insert local variables for layout and generate call to layout function 2097 knownLayouts.insert( typeName ); // done early so as not to interfere with the later addition of parameters to the layout call 2098 Type *layoutType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ); 2099 2100 ObjectDecl *sizeVar = makeVar( sizeofName( typeName ), layoutType ); 2101 ObjectDecl *alignVar = makeVar( alignofName( typeName ), layoutType->clone() ); 2102 2103 // generate call to layout function 2104 UntypedExpr *layoutCall = new UntypedExpr( new NameExpr( layoutofName( unionTy->get_baseUnion() ) ) ); 2105 layoutCall->get_args().push_back( new AddressExpr( new VariableExpr( sizeVar ) ) ); 2106 layoutCall->get_args().push_back( new AddressExpr( new VariableExpr( alignVar ) ) ); 2107 addOtypeParamsToLayoutCall( layoutCall, otypeParams ); 2108 2109 stmtsToAdd.push_back( new ExprStmt( noLabels, layoutCall ) ); 2110 2111 return true; 2112 } 2113 2114 return false; 2115 } 2116 2117 Expression *PolyGenericCalculator::mutate( SizeofExpr *sizeofExpr ) { 2118 Type *ty = sizeofExpr->get_type(); 2119 if ( findGeneric( ty ) ) { 2120 Expression *ret = new NameExpr( sizeofName( mangleType( ty ) ) ); 2121 delete sizeofExpr; 2122 return ret; 2123 } 2124 return sizeofExpr; 2125 } 2126 2127 Expression *PolyGenericCalculator::mutate( AlignofExpr *alignofExpr ) { 2128 Type *ty = alignofExpr->get_type(); 2129 if ( findGeneric( ty ) ) { 2130 Expression *ret = new NameExpr( alignofName( mangleType( ty ) ) ); 2131 delete alignofExpr; 2132 return ret; 2133 } 2134 return alignofExpr; 2135 } 2136 2137 Expression *PolyGenericCalculator::mutate( OffsetofExpr *offsetofExpr ) { 1463 Expression *MemberExprFixer::mutate( OffsetofExpr *offsetofExpr ) { 2138 1464 // mutate, exiting early if no longer OffsetofExpr 2139 1465 Expression *expr = Mutator::mutate( offsetofExpr ); … … 2142 1468 2143 1469 // only mutate expressions for polymorphic structs/unions 2144 Type *ty = offsetofExpr->get_type();2145 if ( ! findGeneric( ty )) return offsetofExpr;2146 1470 Type *ty = isPolyType( offsetofExpr->get_type(), scopeTyVars ); 1471 if ( ! ty ) return offsetofExpr; 1472 2147 1473 if ( StructInstType *structType = dynamic_cast< StructInstType* >( ty ) ) { 2148 1474 // replace offsetof expression by index into offset array … … 2160 1486 } 2161 1487 2162 Expression *PolyGenericCalculator::mutate( OffsetPackExpr *offsetPackExpr ) {2163 StructInstType *ty = offsetPackExpr->get_type();2164 2165 Expression *ret = 0;2166 if ( findGeneric( ty ) ) {2167 // pull offset back from generated type information2168 ret = new NameExpr( offsetofName( mangleType( ty ) ) );2169 } else {2170 std::string offsetName = offsetofName( mangleType( ty ) );2171 if ( knownOffsets.find( offsetName ) != knownOffsets.end() ) {2172 // use the already-generated offsets for this type2173 ret = new NameExpr( offsetName );2174 } else {2175 knownOffsets.insert( offsetName );2176 2177 std::list< Declaration* > &baseMembers = ty->get_baseStruct()->get_members();2178 Type *offsetType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt );2179 2180 // build initializer list for offset array2181 std::list< Initializer* > inits;2182 for ( std::list< Declaration* >::const_iterator member = baseMembers.begin(); member != baseMembers.end(); ++member ) {2183 DeclarationWithType *memberDecl;2184 if ( DeclarationWithType *origMember = dynamic_cast< DeclarationWithType* >( *member ) ) {2185 memberDecl = origMember->clone();2186 } else {2187 memberDecl = new ObjectDecl( (*member)->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, offsetType->clone(), 0 );2188 }2189 inits.push_back( new SingleInit( new OffsetofExpr( ty->clone(), memberDecl ) ) );2190 }2191 2192 // build the offset array and replace the pack with a reference to it2193 ObjectDecl *offsetArray = makeVar( offsetName, new ArrayType( Type::Qualifiers(), offsetType, new ConstantExpr( Constant::from( baseMembers.size() ) ), false, false ),2194 new ListInit( inits ) );2195 ret = new VariableExpr( offsetArray );2196 }2197 }2198 2199 delete offsetPackExpr;2200 return ret;2201 }2202 2203 void PolyGenericCalculator::doBeginScope() {2204 knownLayouts.beginScope();2205 knownOffsets.beginScope();2206 }2207 2208 void PolyGenericCalculator::doEndScope() {2209 knownLayouts.endScope();2210 knownOffsets.endScope();2211 }2212 2213 1488 ////////////////////////////////////////// Pass3 //////////////////////////////////////////////////// 2214 1489 2215 1490 template< typename DeclClass > 2216 1491 DeclClass * Pass3::handleDecl( DeclClass *decl, Type *type ) { 2217 scopeTyVars.beginScope();1492 TyVarMap oldtyVars = scopeTyVars; 2218 1493 makeTyVarMap( type, scopeTyVars ); 2219 1494 … … 2221 1496 ScrubTyVars::scrub( decl, scopeTyVars ); 2222 1497 2223 scopeTyVars .endScope();1498 scopeTyVars = oldtyVars; 2224 1499 return ret; 2225 1500 } … … 2251 1526 2252 1527 Type * Pass3::mutate( PointerType *pointerType ) { 2253 scopeTyVars.beginScope();1528 TyVarMap oldtyVars = scopeTyVars; 2254 1529 makeTyVarMap( pointerType, scopeTyVars ); 2255 1530 2256 1531 Type *ret = Mutator::mutate( pointerType ); 2257 1532 2258 scopeTyVars .endScope();1533 scopeTyVars = oldtyVars; 2259 1534 return ret; 2260 1535 } 2261 1536 2262 1537 Type * Pass3::mutate( FunctionType *functionType ) { 2263 scopeTyVars.beginScope();1538 TyVarMap oldtyVars = scopeTyVars; 2264 1539 makeTyVarMap( functionType, scopeTyVars ); 2265 1540 2266 1541 Type *ret = Mutator::mutate( functionType ); 2267 1542 2268 scopeTyVars .endScope();1543 scopeTyVars = oldtyVars; 2269 1544 return ret; 2270 1545 } -
src/GenPoly/DeclMutator.cc
r0f9e4403 rc5833e8 24 24 } 25 25 26 DeclMutator::DeclMutator() : Mutator(), declsToAdd(1) , declsToAddAfter(1){}26 DeclMutator::DeclMutator() : Mutator(), declsToAdd(1) {} 27 27 28 28 DeclMutator::~DeclMutator() {} 29 29 30 30 void DeclMutator::mutateDeclarationList( std::list< Declaration* > &decls ) { 31 for ( std::list< Declaration* >::iterator decl = decls.begin(); ; ++decl ) { 32 // splice in new declarations after previous decl 33 decls.splice( decl, declsToAddAfter.back() ); 34 35 if ( decl == decls.end() ) break; 36 31 for ( std::list< Declaration* >::iterator decl = decls.begin(); decl != decls.end(); ++decl ) { 37 32 // run mutator on declaration 38 33 *decl = maybeMutate( *decl, *this ); … … 44 39 45 40 void DeclMutator::doBeginScope() { 46 // add new decl list sfor inside of scope41 // add new decl list for inside of scope 47 42 declsToAdd.resize( declsToAdd.size()+1 ); 48 declsToAddAfter.resize( declsToAddAfter.size()+1 );49 43 } 50 44 … … 55 49 newBack->splice( newBack->end(), *back ); 56 50 declsToAdd.pop_back(); 57 58 back = declsToAddAfter.rbegin();59 newBack = back + 1;60 newBack->splice( newBack->end(), *back );61 declsToAddAfter.pop_back();62 51 } 63 52 … … 72 61 stmt = maybeMutate( stmt, *this ); 73 62 // return if no declarations to add 74 if ( declsToAdd.back().empty() && declsToAddAfter.back().empty() ) { 75 doEndScope(); 76 return stmt; 77 } 63 if ( declsToAdd.back().empty() ) return stmt; 78 64 79 65 // otherwise add declarations to new compound statement … … 85 71 declsToAdd.back().clear(); 86 72 87 // add mutated statement 73 doEndScope(); 74 75 // add mutated statement and return 88 76 compound->get_kids().push_back( stmt ); 89 90 // add declarations after to new compound statement91 for ( std::list< Declaration* >::iterator decl = declsToAddAfter.back().begin(); decl != declsToAddAfter.back().end(); ++decl ) {92 DeclStmt *declStmt = new DeclStmt( noLabels, *decl );93 compound->get_kids().push_back( declStmt );94 }95 declsToAddAfter.back().clear();96 97 doEndScope();98 77 return compound; 99 78 } … … 101 80 void DeclMutator::mutateStatementList( std::list< Statement* > &stmts ) { 102 81 doBeginScope(); 103 104 82 105 for ( std::list< Statement* >::iterator stmt = stmts.begin(); ; ++stmt ) { 106 // add any new declarations after the previous statement 107 for ( std::list< Declaration* >::iterator decl = declsToAddAfter.back().begin(); decl != declsToAddAfter.back().end(); ++decl ) { 108 DeclStmt *declStmt = new DeclStmt( noLabels, *decl ); 109 stmts.insert( stmt, declStmt ); 110 } 111 declsToAddAfter.back().clear(); 112 113 if ( stmt == stmts.end() ) break; 114 83 for ( std::list< Statement* >::iterator stmt = stmts.begin(); stmt != stmts.end(); ++stmt ) { 115 84 // run mutator on statement 116 85 *stmt = maybeMutate( *stmt, *this ); … … 123 92 declsToAdd.back().clear(); 124 93 } 125 94 126 95 doEndScope(); 127 96 } … … 129 98 void DeclMutator::addDeclaration( Declaration *decl ) { 130 99 declsToAdd.back().push_back( decl ); 131 }132 133 void DeclMutator::addDeclarationAfter( Declaration *decl ) {134 declsToAddAfter.back().push_back( decl );135 100 } 136 101 -
src/GenPoly/DeclMutator.h
r0f9e4403 rc5833e8 55 55 /// Add a declaration to the list to be added before the current position 56 56 void addDeclaration( Declaration* decl ); 57 /// Add a declaration to the list to be added after the current position58 void addDeclarationAfter( Declaration* decl );59 57 private: 60 58 /// A stack of declarations to add before the current declaration or statement 61 59 std::vector< std::list< Declaration* > > declsToAdd; 62 /// A stack of declarations to add after the current declaration or statement63 std::vector< std::list< Declaration* > > declsToAddAfter;64 60 }; 65 61 } // namespace -
src/GenPoly/FindFunction.cc
r0f9e4403 rc5833e8 55 55 TyVarMap::iterator var = tyVars.find( (*i)->get_name() ); 56 56 if ( var != tyVars.end() ) { 57 tyVars.erase( var ->first);57 tyVars.erase( var ); 58 58 } // if 59 59 } // for … … 61 61 62 62 Type * FindFunction::mutate( FunctionType *functionType ) { 63 tyVars.beginScope();63 TyVarMap oldTyVars = tyVars; 64 64 handleForall( functionType->get_forall() ); 65 65 mutateAll( functionType->get_returnVals(), *this ); … … 72 72 } // if 73 73 } // if 74 tyVars .endScope();74 tyVars = oldTyVars; 75 75 return ret; 76 76 } 77 77 78 78 Type * FindFunction::mutate( PointerType *pointerType ) { 79 tyVars.beginScope();79 TyVarMap oldTyVars = tyVars; 80 80 handleForall( pointerType->get_forall() ); 81 81 Type *ret = Mutator::mutate( pointerType ); 82 tyVars .endScope();82 tyVars = oldTyVars; 83 83 return ret; 84 84 } -
src/GenPoly/GenPoly.cc
r0f9e4403 rc5833e8 16 16 #include "GenPoly.h" 17 17 18 #include "SymTab/Mangler.h" 18 19 #include "SynTree/Expression.h" 19 20 #include "SynTree/Type.h" … … 37 38 ReferenceToType *isPolyRet( FunctionType *function ) { 38 39 if ( ! function->get_returnVals().empty() ) { 39 TyVarMap forallTypes ( (TypeDecl::Kind)-1 );40 TyVarMap forallTypes; 40 41 makeTyVarMap( function, forallTypes ); 41 42 return (ReferenceToType*)isPolyType( function->get_returnVals().front()->get_type(), forallTypes ); … … 217 218 } 218 219 220 std::string sizeofName( Type *ty ) { 221 return std::string( "_sizeof_" ) + SymTab::Mangler::mangleType( ty ); 222 } 223 224 std::string alignofName( Type *ty ) { 225 return std::string( "_alignof_" ) + SymTab::Mangler::mangleType( ty ); 226 } 227 228 std::string offsetofName( Type* ty ) { 229 return std::string( "_offsetof_" ) + SymTab::Mangler::mangleType( ty ); 230 } 231 219 232 } // namespace GenPoly 220 233 -
src/GenPoly/GenPoly.h
r0f9e4403 rc5833e8 17 17 #define GENPOLY_H 18 18 19 #include <map> 19 20 #include <string> 20 21 #include <iostream> 21 22 #include <utility> 22 23 #include "ErasableScopedMap.h"24 25 #include "SymTab/Mangler.h"26 23 27 24 #include "SynTree/Declaration.h" … … 30 27 31 28 namespace GenPoly { 32 typedef ErasableScopedMap< std::string, TypeDecl::Kind > TyVarMap;29 typedef std::map< std::string, TypeDecl::Kind > TyVarMap; 33 30 34 31 /// A function needs an adapter if it returns a polymorphic value or if any of its … … 72 69 void printTyVarMap( std::ostream &os, const TyVarMap &tyVarMap ); 73 70 74 /// Gets the mangled name of this type; alias for SymTab::Mangler::mangleType(). 75 inline std::string mangleType( Type *ty ) { return SymTab::Mangler::mangleType( ty ); } 76 77 /// Gets the name of the sizeof parameter for the type, given its mangled name 78 inline std::string sizeofName( const std::string &name ) { return std::string( "_sizeof_" ) + name; } 71 /// Gets the name of the sizeof parameter for the type 72 std::string sizeofName( Type *ty ); 79 73 80 /// Gets the name of the alignof parameter for the type , given its mangled name81 inline std::string alignofName( const std::string &name ) { return std::string( "_alignof_" ) + name; }74 /// Gets the name of the alignof parameter for the type 75 std::string alignofName( Type *ty ); 82 76 83 /// Gets the name of the offsetof parameter for the type, given its mangled name 84 inline std::string offsetofName( const std::string &name ) { return std::string( "_offsetof_" ) + name; } 85 86 /// Gets the name of the layout function for a given aggregate type, given its declaration 87 inline std::string layoutofName( AggregateDecl *decl ) { return std::string( "_layoutof_" ) + decl->get_name(); } 88 77 /// Gets the name of the offsetof parameter for the type 78 std::string offsetofName( Type *ty ); 89 79 } // namespace GenPoly 90 80 -
src/GenPoly/Lvalue.cc
r0f9e4403 rc5833e8 17 17 18 18 #include "Lvalue.h" 19 20 #include "GenPoly.h"21 19 22 20 #include "SynTree/Declaration.h" … … 65 63 66 64 namespace { 67 Type* isLvalueRet( FunctionType *function ) { 68 if ( function->get_returnVals().empty() ) return 0; 69 Type *ty = function->get_returnVals().front()->get_type(); 70 return ty->get_isLvalue() ? ty : 0; 65 bool isLvalueRet( FunctionType *function ) { 66 if ( ! function->get_returnVals().empty() ) { 67 return function->get_returnVals().front()->get_type()->get_isLvalue(); 68 } else { 69 return false; 70 } // if 71 71 } 72 72 … … 107 107 assert( function ); 108 108 109 Type *funType = isLvalueRet( function ); 110 if ( funType && ! isIntrinsicApp( appExpr ) ) { 111 Expression *expr = appExpr; 112 Type *appType = appExpr->get_results().front(); 113 if ( isPolyType( funType ) && ! isPolyType( appType ) ) { 114 // make sure cast for polymorphic type is inside dereference 115 expr = new CastExpr( appExpr, new PointerType( Type::Qualifiers(), appType->clone() ) ); 116 } 109 std::string typeName; 110 if ( isLvalueRet( function ) && ! isIntrinsicApp( appExpr ) ) { 117 111 UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) ); 118 deref->get_results().push_back( app Type->clone() );119 appExpr->get_results().front() = new PointerType( Type::Qualifiers(), appType);120 deref->get_args().push_back( expr );112 deref->get_results().push_back( appExpr->get_results().front() ); 113 appExpr->get_results().front() = new PointerType( Type::Qualifiers(), deref->get_results().front()->clone() ); 114 deref->get_args().push_back( appExpr ); 121 115 return deref; 122 116 } else { -
src/GenPoly/PolyMutator.cc
r0f9e4403 rc5833e8 27 27 } 28 28 29 PolyMutator::PolyMutator() : scopeTyVars( (TypeDecl::Kind)-1 ), env( 0 ) {} 29 PolyMutator::PolyMutator() : env( 0 ) { 30 } 30 31 31 32 void PolyMutator::mutateStatementList( std::list< Statement* > &statements ) { -
src/GenPoly/ScopedMap.h
r0f9e4403 rc5833e8 17 17 #define _SCOPEDMAP_H 18 18 19 #include <cassert>20 19 #include <iterator> 21 20 #include <map> … … 51 50 typedef typename scope_list::size_type size_type; 52 51 53 /// Checks if this iterator points to a valid item54 bool is_valid() const {55 return it != (*scopes)[i].end();56 }57 58 /// Increments on invalid59 iterator& next_valid() {60 if ( ! is_valid() ) { ++(*this); }61 return *this;62 }63 64 /// Decrements on invalid65 iterator& prev_valid() {66 if ( ! is_valid() ) { --(*this); }67 return *this;68 }69 70 52 iterator(scope_list const &_scopes, const wrapped_iterator &_it, size_type _i) 71 53 : scopes(&_scopes), it(_it), i(_i) {} … … 85 67 --i; 86 68 it = (*scopes)[i].begin(); 87 } else {88 ++it;89 }90 return next_valid();69 return *this; 70 } 71 ++it; 72 return *this; 91 73 } 92 74 iterator& operator++ (int) { iterator tmp = *this; ++(*this); return tmp; } … … 99 81 } 100 82 --it; 101 return prev_valid();83 return *this; 102 84 } 103 85 iterator& operator-- (int) { iterator tmp = *this; --(*this); return tmp; } … … 122 104 typedef typename scope_list::size_type size_type; 123 105 124 /// Checks if this iterator points to a valid item125 bool is_valid() const {126 return it != (*scopes)[i].end();127 }128 129 /// Increments on invalid130 const_iterator& next_valid() {131 if ( ! is_valid() ) { ++(*this); }132 return *this;133 }134 135 /// Decrements on invalid136 const_iterator& prev_valid() {137 if ( ! is_valid() ) { --(*this); }138 return *this;139 }140 141 106 const_iterator(scope_list const &_scopes, const wrapped_const_iterator &_it, size_type _i) 142 107 : scopes(&_scopes), it(_it), i(_i) {} … … 161 126 --i; 162 127 it = (*scopes)[i].begin(); 163 } else {164 ++it;165 }166 return next_valid();128 return *this; 129 } 130 ++it; 131 return *this; 167 132 } 168 133 const_iterator& operator++ (int) { const_iterator tmp = *this; ++(*this); return tmp; } … … 175 140 } 176 141 --it; 177 return prev_valid();142 return *this; 178 143 } 179 144 const_iterator& operator-- (int) { const_iterator tmp = *this; --(*this); return tmp; } … … 199 164 void endScope() { 200 165 scopes.pop_back(); 201 assert( ! scopes.empty() );202 166 } 203 167 … … 205 169 ScopedMap() { beginScope(); } 206 170 207 iterator begin() { return iterator(scopes, scopes.back().begin(), scopes.size()-1) .next_valid(); }208 const_iterator begin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1) .next_valid(); }209 const_iterator cbegin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1) .next_valid(); }171 iterator begin() { return iterator(scopes, scopes.back().begin(), scopes.size()-1); } 172 const_iterator begin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1); } 173 const_iterator cbegin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1); } 210 174 iterator end() { return iterator(scopes, scopes[0].end(), 0); } 211 175 const_iterator end() const { return const_iterator(scopes, scopes[0].end(), 0); } … … 224 188 return end(); 225 189 } 226 const_iterator find( const Key &key ) const { 227 return const_iterator( const_cast< ScopedMap< Key, Value >* >(this)->find( key ) ); 228 } 190 const_iterator find( const Key &key ) const { return const_iterator( find( key ) ); } 229 191 230 192 /// Finds the given key in the outermost scope inside the given scope where it occurs … … 238 200 return end(); 239 201 } 240 const_iterator findNext( const_iterator &it, const Key &key ) const { 241 return const_iterator( const_cast< ScopedMap< Key, Value >* >(this)->findNext( it, key ) ); 242 } 202 const_iterator findNext( const_iterator &it, const Key &key ) const { return const_iterator( findNext( it, key ) ); } 243 203 244 204 /// Inserts the given key-value pair into the outermost scope … … 248 208 } 249 209 std::pair< iterator, bool > insert( const Key &key, const Value &value ) { return insert( std::make_pair( key, value ) ); } 250 251 Value& operator[] ( const Key &key ) { 252 iterator slot = find( key ); 253 if ( slot != end() ) return slot->second; 254 return insert( key, Value() ).first->second; 255 } 210 256 211 }; 257 212 } // namespace GenPoly -
src/GenPoly/ScrubTyVars.cc
r0f9e4403 rc5833e8 64 64 // sizeof( T ) => _sizeof_T parameter, which is the size of T 65 65 if ( Type *polyType = isPolyType( szeof->get_type() ) ) { 66 Expression *expr = new NameExpr( sizeofName( mangleType( polyType )) );66 Expression *expr = new NameExpr( sizeofName( polyType ) ); 67 67 return expr; 68 68 } else { … … 74 74 // alignof( T ) => _alignof_T parameter, which is the alignment of T 75 75 if ( Type *polyType = isPolyType( algnof->get_type() ) ) { 76 Expression *expr = new NameExpr( alignofName( mangleType( polyType )) );76 Expression *expr = new NameExpr( alignofName( polyType ) ); 77 77 return expr; 78 78 } else { -
src/GenPoly/module.mk
r0f9e4403 rc5833e8 23 23 GenPoly/CopyParams.cc \ 24 24 GenPoly/FindFunction.cc \ 25 GenPoly/InstantiateGeneric.cc \ 25 26 GenPoly/DeclMutator.cc -
src/InitTweak/InitModel.h
r0f9e4403 rc5833e8 75 75 void visit( UntypedOffsetofExpr * ) { throw 0; } 76 76 void visit( OffsetofExpr * ) { throw 0; } 77 void visit( OffsetPackExpr * ) { throw 0; }78 77 void visit( AttrExpr * ) { throw 0; } 79 78 void visit( LogicalExpr * ) { throw 0; } -
src/Makefile.am
r0f9e4403 rc5833e8 11 11 ## Created On : Sun May 31 08:51:46 2015 12 12 ## Last Modified By : Peter A. Buhr 13 ## Last Modified On : Fri Feb 26 17:19:16 201614 ## Update Count : 5 713 ## Last Modified On : Thu Jan 28 16:50:26 2016 14 ## Update Count : 55 15 15 ############################################################################### 16 16 … … 46 46 driver_cfa_cpp_CXXFLAGS = -Wno-deprecated -Wall -DDEBUG_ALL 47 47 48 CXXFLAGS = -g -std=c++11# remove default -O2 to allow better debugging48 CXXFLAGS = -g # remove default -O2 to allow better debugging 49 49 50 50 MAINTAINERCLEANFILES += ${libdir}/${notdir ${cfa_cpplib_PROGRAMS}} -
src/Makefile.in
r0f9e4403 rc5833e8 122 122 GenPoly/driver_cfa_cpp-CopyParams.$(OBJEXT) \ 123 123 GenPoly/driver_cfa_cpp-FindFunction.$(OBJEXT) \ 124 GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT) \ 124 125 GenPoly/driver_cfa_cpp-DeclMutator.$(OBJEXT) \ 125 126 InitTweak/driver_cfa_cpp-RemoveInit.$(OBJEXT) \ … … 153 154 ResolvExpr/driver_cfa_cpp-Occurs.$(OBJEXT) \ 154 155 ResolvExpr/driver_cfa_cpp-TypeEnvironment.$(OBJEXT) \ 156 SymTab/driver_cfa_cpp-IdTable.$(OBJEXT) \ 155 157 SymTab/driver_cfa_cpp-Indexer.$(OBJEXT) \ 156 158 SymTab/driver_cfa_cpp-Mangler.$(OBJEXT) \ … … 169 171 SynTree/driver_cfa_cpp-TypeofType.$(OBJEXT) \ 170 172 SynTree/driver_cfa_cpp-AttrType.$(OBJEXT) \ 171 SynTree/driver_cfa_cpp-VarArgsType.$(OBJEXT) \172 173 SynTree/driver_cfa_cpp-Constant.$(OBJEXT) \ 173 174 SynTree/driver_cfa_cpp-Expression.$(OBJEXT) \ … … 190 191 SynTree/driver_cfa_cpp-Visitor.$(OBJEXT) \ 191 192 SynTree/driver_cfa_cpp-Mutator.$(OBJEXT) \ 193 SynTree/driver_cfa_cpp-CodeGenVisitor.$(OBJEXT) \ 192 194 SynTree/driver_cfa_cpp-TypeSubstitution.$(OBJEXT) \ 193 195 Tuples/driver_cfa_cpp-Mutate.$(OBJEXT) \ … … 245 247 CXX = @CXX@ 246 248 CXXDEPMODE = @CXXDEPMODE@ 247 CXXFLAGS = -g -std=c++11# remove default -O2 to allow better debugging249 CXXFLAGS = -g # remove default -O2 to allow better debugging 248 250 CYGPATH_W = @CYGPATH_W@ 249 251 DEFS = @DEFS@ … … 345 347 GenPoly/ScrubTyVars.cc GenPoly/Lvalue.cc GenPoly/Specialize.cc \ 346 348 GenPoly/CopyParams.cc GenPoly/FindFunction.cc \ 347 GenPoly/DeclMutator.cc InitTweak/RemoveInit.cc \ 348 Parser/parser.yy Parser/lex.ll Parser/TypedefTable.cc \ 349 Parser/ParseNode.cc Parser/DeclarationNode.cc \ 350 Parser/ExpressionNode.cc Parser/StatementNode.cc \ 351 Parser/InitializerNode.cc Parser/TypeData.cc \ 352 Parser/LinkageSpec.cc Parser/parseutility.cc Parser/Parser.cc \ 349 GenPoly/InstantiateGeneric.cc GenPoly/DeclMutator.cc \ 350 InitTweak/RemoveInit.cc Parser/parser.yy Parser/lex.ll \ 351 Parser/TypedefTable.cc Parser/ParseNode.cc \ 352 Parser/DeclarationNode.cc Parser/ExpressionNode.cc \ 353 Parser/StatementNode.cc Parser/InitializerNode.cc \ 354 Parser/TypeData.cc Parser/LinkageSpec.cc \ 355 Parser/parseutility.cc Parser/Parser.cc \ 353 356 ResolvExpr/AlternativeFinder.cc ResolvExpr/Alternative.cc \ 354 357 ResolvExpr/Unify.cc ResolvExpr/PtrsAssignable.cc \ … … 359 362 ResolvExpr/RenameVars.cc ResolvExpr/FindOpenVars.cc \ 360 363 ResolvExpr/PolyCost.cc ResolvExpr/Occurs.cc \ 361 ResolvExpr/TypeEnvironment.cc SymTab/I ndexer.cc \362 SymTab/ Mangler.cc SymTab/Validate.cc SymTab/FixFunction.cc \363 SymTab/ ImplementationType.cc SymTab/TypeEquality.cc \364 Sy nTree/Type.cc SynTree/VoidType.cc SynTree/BasicType.cc \365 SynTree/ PointerType.cc SynTree/ArrayType.cc \366 SynTree/ FunctionType.cc SynTree/ReferenceToType.cc \367 SynTree/ TupleType.cc SynTree/TypeofType.cc SynTree/AttrType.cc \368 SynTree/ VarArgsType.cc SynTree/Constant.cc \364 ResolvExpr/TypeEnvironment.cc SymTab/IdTable.cc \ 365 SymTab/Indexer.cc SymTab/Mangler.cc SymTab/Validate.cc \ 366 SymTab/FixFunction.cc SymTab/ImplementationType.cc \ 367 SymTab/TypeEquality.cc SynTree/Type.cc SynTree/VoidType.cc \ 368 SynTree/BasicType.cc SynTree/PointerType.cc \ 369 SynTree/ArrayType.cc SynTree/FunctionType.cc \ 370 SynTree/ReferenceToType.cc SynTree/TupleType.cc \ 371 SynTree/TypeofType.cc SynTree/AttrType.cc SynTree/Constant.cc \ 369 372 SynTree/Expression.cc SynTree/TupleExpr.cc \ 370 373 SynTree/CommaExpr.cc SynTree/TypeExpr.cc \ … … 376 379 SynTree/NamedTypeDecl.cc SynTree/TypeDecl.cc \ 377 380 SynTree/Initializer.cc SynTree/Visitor.cc SynTree/Mutator.cc \ 378 SynTree/ TypeSubstitution.cc Tuples/Mutate.cc \379 Tuples/ AssignExpand.cc Tuples/FunctionFixer.cc \380 Tuples/ TupleAssignment.cc Tuples/FunctionChecker.cc \381 Tuples/ NameMatcher.cc381 SynTree/CodeGenVisitor.cc SynTree/TypeSubstitution.cc \ 382 Tuples/Mutate.cc Tuples/AssignExpand.cc \ 383 Tuples/FunctionFixer.cc Tuples/TupleAssignment.cc \ 384 Tuples/FunctionChecker.cc Tuples/NameMatcher.cc 382 385 MAINTAINERCLEANFILES = Parser/parser.output ${libdir}/${notdir \ 383 386 ${cfa_cpplib_PROGRAMS}} … … 407 410 esac; \ 408 411 done; \ 409 echo ' cd $(top_srcdir) && $(AUTOMAKE) -- foreignsrc/Makefile'; \412 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ 410 413 $(am__cd) $(top_srcdir) && \ 411 $(AUTOMAKE) -- foreignsrc/Makefile414 $(AUTOMAKE) --gnu src/Makefile 412 415 .PRECIOUS: Makefile 413 416 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status … … 552 555 GenPoly/$(DEPDIR)/$(am__dirstamp) 553 556 GenPoly/driver_cfa_cpp-FindFunction.$(OBJEXT): \ 557 GenPoly/$(am__dirstamp) GenPoly/$(DEPDIR)/$(am__dirstamp) 558 GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT): \ 554 559 GenPoly/$(am__dirstamp) GenPoly/$(DEPDIR)/$(am__dirstamp) 555 560 GenPoly/driver_cfa_cpp-DeclMutator.$(OBJEXT): GenPoly/$(am__dirstamp) \ … … 658 663 @$(MKDIR_P) SymTab/$(DEPDIR) 659 664 @: > SymTab/$(DEPDIR)/$(am__dirstamp) 665 SymTab/driver_cfa_cpp-IdTable.$(OBJEXT): SymTab/$(am__dirstamp) \ 666 SymTab/$(DEPDIR)/$(am__dirstamp) 660 667 SymTab/driver_cfa_cpp-Indexer.$(OBJEXT): SymTab/$(am__dirstamp) \ 661 668 SymTab/$(DEPDIR)/$(am__dirstamp) … … 695 702 SynTree/$(DEPDIR)/$(am__dirstamp) 696 703 SynTree/driver_cfa_cpp-AttrType.$(OBJEXT): SynTree/$(am__dirstamp) \ 697 SynTree/$(DEPDIR)/$(am__dirstamp)698 SynTree/driver_cfa_cpp-VarArgsType.$(OBJEXT): SynTree/$(am__dirstamp) \699 704 SynTree/$(DEPDIR)/$(am__dirstamp) 700 705 SynTree/driver_cfa_cpp-Constant.$(OBJEXT): SynTree/$(am__dirstamp) \ … … 738 743 SynTree/driver_cfa_cpp-Mutator.$(OBJEXT): SynTree/$(am__dirstamp) \ 739 744 SynTree/$(DEPDIR)/$(am__dirstamp) 745 SynTree/driver_cfa_cpp-CodeGenVisitor.$(OBJEXT): \ 746 SynTree/$(am__dirstamp) SynTree/$(DEPDIR)/$(am__dirstamp) 740 747 SynTree/driver_cfa_cpp-TypeSubstitution.$(OBJEXT): \ 741 748 SynTree/$(am__dirstamp) SynTree/$(DEPDIR)/$(am__dirstamp) … … 788 795 -rm -f GenPoly/driver_cfa_cpp-FindFunction.$(OBJEXT) 789 796 -rm -f GenPoly/driver_cfa_cpp-GenPoly.$(OBJEXT) 797 -rm -f GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT) 790 798 -rm -f GenPoly/driver_cfa_cpp-Lvalue.$(OBJEXT) 791 799 -rm -f GenPoly/driver_cfa_cpp-PolyMutator.$(OBJEXT) … … 823 831 -rm -f ResolvExpr/driver_cfa_cpp-Unify.$(OBJEXT) 824 832 -rm -f SymTab/driver_cfa_cpp-FixFunction.$(OBJEXT) 833 -rm -f SymTab/driver_cfa_cpp-IdTable.$(OBJEXT) 825 834 -rm -f SymTab/driver_cfa_cpp-ImplementationType.$(OBJEXT) 826 835 -rm -f SymTab/driver_cfa_cpp-Indexer.$(OBJEXT) … … 834 843 -rm -f SynTree/driver_cfa_cpp-AttrType.$(OBJEXT) 835 844 -rm -f SynTree/driver_cfa_cpp-BasicType.$(OBJEXT) 845 -rm -f SynTree/driver_cfa_cpp-CodeGenVisitor.$(OBJEXT) 836 846 -rm -f SynTree/driver_cfa_cpp-CommaExpr.$(OBJEXT) 837 847 -rm -f SynTree/driver_cfa_cpp-CompoundStmt.$(OBJEXT) … … 857 867 -rm -f SynTree/driver_cfa_cpp-TypeSubstitution.$(OBJEXT) 858 868 -rm -f SynTree/driver_cfa_cpp-TypeofType.$(OBJEXT) 859 -rm -f SynTree/driver_cfa_cpp-VarArgsType.$(OBJEXT)860 869 -rm -f SynTree/driver_cfa_cpp-Visitor.$(OBJEXT) 861 870 -rm -f SynTree/driver_cfa_cpp-VoidType.$(OBJEXT) … … 893 902 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-FindFunction.Po@am__quote@ 894 903 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-GenPoly.Po@am__quote@ 904 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Po@am__quote@ 895 905 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-Lvalue.Po@am__quote@ 896 906 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-PolyMutator.Po@am__quote@ … … 928 938 @AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/driver_cfa_cpp-Unify.Po@am__quote@ 929 939 @AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-FixFunction.Po@am__quote@ 940 @AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Po@am__quote@ 930 941 @AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-ImplementationType.Po@am__quote@ 931 942 @AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-Indexer.Po@am__quote@ … … 939 950 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-AttrType.Po@am__quote@ 940 951 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-BasicType.Po@am__quote@ 952 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Po@am__quote@ 941 953 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-CommaExpr.Po@am__quote@ 942 954 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-CompoundStmt.Po@am__quote@ … … 962 974 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-TypeSubstitution.Po@am__quote@ 963 975 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-TypeofType.Po@am__quote@ 964 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Po@am__quote@965 976 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-Visitor.Po@am__quote@ 966 977 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-VoidType.Po@am__quote@ … … 1352 1363 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-FindFunction.obj `if test -f 'GenPoly/FindFunction.cc'; then $(CYGPATH_W) 'GenPoly/FindFunction.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/FindFunction.cc'; fi` 1353 1364 1365 GenPoly/driver_cfa_cpp-InstantiateGeneric.o: GenPoly/InstantiateGeneric.cc 1366 @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-InstantiateGeneric.o -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.o `test -f 'GenPoly/InstantiateGeneric.cc' || echo '$(srcdir)/'`GenPoly/InstantiateGeneric.cc 1367 @am__fastdepCXX_TRUE@ $(am__mv) GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Po 1368 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='GenPoly/InstantiateGeneric.cc' object='GenPoly/driver_cfa_cpp-InstantiateGeneric.o' libtool=no @AMDEPBACKSLASH@ 1369 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1370 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.o `test -f 'GenPoly/InstantiateGeneric.cc' || echo '$(srcdir)/'`GenPoly/InstantiateGeneric.cc 1371 1372 GenPoly/driver_cfa_cpp-InstantiateGeneric.obj: GenPoly/InstantiateGeneric.cc 1373 @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-InstantiateGeneric.obj -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.obj `if test -f 'GenPoly/InstantiateGeneric.cc'; then $(CYGPATH_W) 'GenPoly/InstantiateGeneric.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/InstantiateGeneric.cc'; fi` 1374 @am__fastdepCXX_TRUE@ $(am__mv) GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Po 1375 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='GenPoly/InstantiateGeneric.cc' object='GenPoly/driver_cfa_cpp-InstantiateGeneric.obj' libtool=no @AMDEPBACKSLASH@ 1376 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1377 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.obj `if test -f 'GenPoly/InstantiateGeneric.cc'; then $(CYGPATH_W) 'GenPoly/InstantiateGeneric.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/InstantiateGeneric.cc'; fi` 1378 1354 1379 GenPoly/driver_cfa_cpp-DeclMutator.o: GenPoly/DeclMutator.cc 1355 1380 @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-DeclMutator.o -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-DeclMutator.Tpo -c -o GenPoly/driver_cfa_cpp-DeclMutator.o `test -f 'GenPoly/DeclMutator.cc' || echo '$(srcdir)/'`GenPoly/DeclMutator.cc … … 1786 1811 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o ResolvExpr/driver_cfa_cpp-TypeEnvironment.obj `if test -f 'ResolvExpr/TypeEnvironment.cc'; then $(CYGPATH_W) 'ResolvExpr/TypeEnvironment.cc'; else $(CYGPATH_W) '$(srcdir)/ResolvExpr/TypeEnvironment.cc'; fi` 1787 1812 1813 SymTab/driver_cfa_cpp-IdTable.o: SymTab/IdTable.cc 1814 @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SymTab/driver_cfa_cpp-IdTable.o -MD -MP -MF SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Tpo -c -o SymTab/driver_cfa_cpp-IdTable.o `test -f 'SymTab/IdTable.cc' || echo '$(srcdir)/'`SymTab/IdTable.cc 1815 @am__fastdepCXX_TRUE@ $(am__mv) SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Tpo SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Po 1816 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='SymTab/IdTable.cc' object='SymTab/driver_cfa_cpp-IdTable.o' libtool=no @AMDEPBACKSLASH@ 1817 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1818 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SymTab/driver_cfa_cpp-IdTable.o `test -f 'SymTab/IdTable.cc' || echo '$(srcdir)/'`SymTab/IdTable.cc 1819 1820 SymTab/driver_cfa_cpp-IdTable.obj: SymTab/IdTable.cc 1821 @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SymTab/driver_cfa_cpp-IdTable.obj -MD -MP -MF SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Tpo -c -o SymTab/driver_cfa_cpp-IdTable.obj `if test -f 'SymTab/IdTable.cc'; then $(CYGPATH_W) 'SymTab/IdTable.cc'; else $(CYGPATH_W) '$(srcdir)/SymTab/IdTable.cc'; fi` 1822 @am__fastdepCXX_TRUE@ $(am__mv) SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Tpo SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Po 1823 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='SymTab/IdTable.cc' object='SymTab/driver_cfa_cpp-IdTable.obj' libtool=no @AMDEPBACKSLASH@ 1824 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1825 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SymTab/driver_cfa_cpp-IdTable.obj `if test -f 'SymTab/IdTable.cc'; then $(CYGPATH_W) 'SymTab/IdTable.cc'; else $(CYGPATH_W) '$(srcdir)/SymTab/IdTable.cc'; fi` 1826 1788 1827 SymTab/driver_cfa_cpp-Indexer.o: SymTab/Indexer.cc 1789 1828 @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SymTab/driver_cfa_cpp-Indexer.o -MD -MP -MF SymTab/$(DEPDIR)/driver_cfa_cpp-Indexer.Tpo -c -o SymTab/driver_cfa_cpp-Indexer.o `test -f 'SymTab/Indexer.cc' || echo '$(srcdir)/'`SymTab/Indexer.cc … … 2010 2049 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-AttrType.obj `if test -f 'SynTree/AttrType.cc'; then $(CYGPATH_W) 'SynTree/AttrType.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/AttrType.cc'; fi` 2011 2050 2012 SynTree/driver_cfa_cpp-VarArgsType.o: SynTree/VarArgsType.cc2013 @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-VarArgsType.o -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Tpo -c -o SynTree/driver_cfa_cpp-VarArgsType.o `test -f 'SynTree/VarArgsType.cc' || echo '$(srcdir)/'`SynTree/VarArgsType.cc2014 @am__fastdepCXX_TRUE@ $(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Po2015 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='SynTree/VarArgsType.cc' object='SynTree/driver_cfa_cpp-VarArgsType.o' libtool=no @AMDEPBACKSLASH@2016 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@2017 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-VarArgsType.o `test -f 'SynTree/VarArgsType.cc' || echo '$(srcdir)/'`SynTree/VarArgsType.cc2018 2019 SynTree/driver_cfa_cpp-VarArgsType.obj: SynTree/VarArgsType.cc2020 @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-VarArgsType.obj -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Tpo -c -o SynTree/driver_cfa_cpp-VarArgsType.obj `if test -f 'SynTree/VarArgsType.cc'; then $(CYGPATH_W) 'SynTree/VarArgsType.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/VarArgsType.cc'; fi`2021 @am__fastdepCXX_TRUE@ $(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Po2022 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='SynTree/VarArgsType.cc' object='SynTree/driver_cfa_cpp-VarArgsType.obj' libtool=no @AMDEPBACKSLASH@2023 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@2024 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-VarArgsType.obj `if test -f 'SynTree/VarArgsType.cc'; then $(CYGPATH_W) 'SynTree/VarArgsType.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/VarArgsType.cc'; fi`2025 2026 2051 SynTree/driver_cfa_cpp-Constant.o: SynTree/Constant.cc 2027 2052 @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-Constant.o -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-Constant.Tpo -c -o SynTree/driver_cfa_cpp-Constant.o `test -f 'SynTree/Constant.cc' || echo '$(srcdir)/'`SynTree/Constant.cc … … 2303 2328 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 2304 2329 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-Mutator.obj `if test -f 'SynTree/Mutator.cc'; then $(CYGPATH_W) 'SynTree/Mutator.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/Mutator.cc'; fi` 2330 2331 SynTree/driver_cfa_cpp-CodeGenVisitor.o: SynTree/CodeGenVisitor.cc 2332 @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-CodeGenVisitor.o -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Tpo -c -o SynTree/driver_cfa_cpp-CodeGenVisitor.o `test -f 'SynTree/CodeGenVisitor.cc' || echo '$(srcdir)/'`SynTree/CodeGenVisitor.cc 2333 @am__fastdepCXX_TRUE@ $(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Po 2334 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='SynTree/CodeGenVisitor.cc' object='SynTree/driver_cfa_cpp-CodeGenVisitor.o' libtool=no @AMDEPBACKSLASH@ 2335 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 2336 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-CodeGenVisitor.o `test -f 'SynTree/CodeGenVisitor.cc' || echo '$(srcdir)/'`SynTree/CodeGenVisitor.cc 2337 2338 SynTree/driver_cfa_cpp-CodeGenVisitor.obj: SynTree/CodeGenVisitor.cc 2339 @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-CodeGenVisitor.obj -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Tpo -c -o SynTree/driver_cfa_cpp-CodeGenVisitor.obj `if test -f 'SynTree/CodeGenVisitor.cc'; then $(CYGPATH_W) 'SynTree/CodeGenVisitor.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/CodeGenVisitor.cc'; fi` 2340 @am__fastdepCXX_TRUE@ $(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Po 2341 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='SynTree/CodeGenVisitor.cc' object='SynTree/driver_cfa_cpp-CodeGenVisitor.obj' libtool=no @AMDEPBACKSLASH@ 2342 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 2343 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-CodeGenVisitor.obj `if test -f 'SynTree/CodeGenVisitor.cc'; then $(CYGPATH_W) 'SynTree/CodeGenVisitor.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/CodeGenVisitor.cc'; fi` 2305 2344 2306 2345 SynTree/driver_cfa_cpp-TypeSubstitution.o: SynTree/TypeSubstitution.cc -
src/Parser/DeclarationNode.cc
r0f9e4403 rc5833e8 10 10 // Created On : Sat May 16 12:34:05 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Apr 13 16:53:17 201613 // Update Count : 1 6112 // Last Modified On : Tue Jul 14 14:46:32 2015 13 // Update Count : 126 14 14 // 15 15 … … 34 34 const char *DeclarationNode::storageName[] = { "extern", "static", "auto", "register", "inline", "fortran", "_Noreturn", "_Thread_local", "" }; 35 35 const char *DeclarationNode::qualifierName[] = { "const", "restrict", "volatile", "lvalue", "_Atomic" }; 36 const char *DeclarationNode::basicTypeName[] = { "char", "int", "float", "double", "void", "_Bool", "_Complex", "_Imaginary" ,};36 const char *DeclarationNode::basicTypeName[] = { "char", "int", "float", "double", "void", "_Bool", "_Complex", "_Imaginary" }; 37 37 const char *DeclarationNode::modifierName[] = { "signed", "unsigned", "short", "long" }; 38 38 const char *DeclarationNode::aggregateName[] = { "struct", "union", "context" }; 39 39 const char *DeclarationNode::typeClassName[] = { "type", "dtype", "ftype" }; 40 const char *DeclarationNode::builtinTypeName[] = { "__builtin_va_list" };41 40 42 41 UniqueName DeclarationNode::anonymous( "__anonymous" ); 43 42 44 extern LinkageSpec::Type linkage; // defined in parser.yy43 extern LinkageSpec::Type linkage; /* defined in cfa.y */ 45 44 46 45 DeclarationNode *DeclarationNode::clone() const { … … 55 54 newnode->linkage = linkage; 56 55 return newnode; 57 } // DeclarationNode::clone56 } 58 57 59 58 DeclarationNode::DeclarationNode() : type( 0 ), bitfieldWidth( 0 ), initializer( 0 ), hasEllipsis( false ), linkage( ::linkage ) { … … 117 116 newnode->type->function->newStyle = newStyle; 118 117 newnode->type->function->body = body; 119 typedefTable.addToEnclosingScope( newnode->name, TypedefTable::ID );120 118 121 119 if ( body ) { … … 130 128 131 129 return newnode; 132 } // DeclarationNode::newFunction130 } 133 131 134 132 DeclarationNode *DeclarationNode::newQualifier( Qualifier q ) { … … 137 135 newnode->type->qualifiers.push_back( q ); 138 136 return newnode; 139 } // DeclarationNode::newQualifier137 } 140 138 141 139 DeclarationNode *DeclarationNode::newStorageClass( DeclarationNode::StorageClass sc ) { … … 143 141 newnode->storageClasses.push_back( sc ); 144 142 return newnode; 145 } // DeclarationNode::newStorageClass143 } 146 144 147 145 DeclarationNode *DeclarationNode::newBasicType( BasicType bt ) { … … 150 148 newnode->type->basic->typeSpec.push_back( bt ); 151 149 return newnode; 152 } // DeclarationNode::newBasicType 153 154 DeclarationNode *DeclarationNode::newBuiltinType( BuiltinType bt ) { 155 DeclarationNode *newnode = new DeclarationNode; 156 newnode->type = new TypeData( TypeData::Builtin ); 157 newnode->type->builtin->type = bt; 158 return newnode; 159 } // DeclarationNode::newBuiltinType 150 } 160 151 161 152 DeclarationNode *DeclarationNode::newModifier( Modifier mod ) { … … 164 155 newnode->type->basic->modifiers.push_back( mod ); 165 156 return newnode; 166 } // DeclarationNode::newModifier157 } 167 158 168 159 DeclarationNode *DeclarationNode::newForall( DeclarationNode *forall ) { … … 171 162 newnode->type->forall = forall; 172 163 return newnode; 173 } // DeclarationNode::newForall164 } 174 165 175 166 DeclarationNode *DeclarationNode::newFromTypedef( std::string *name ) { … … 180 171 newnode->type->symbolic->params = 0; 181 172 return newnode; 182 } // DeclarationNode::newFromTypedef173 } 183 174 184 175 DeclarationNode *DeclarationNode::newAggregate( Aggregate kind, const std::string *name, ExpressionNode *actuals, DeclarationNode *fields ) { … … 188 179 newnode->type->aggregate->name = assign_strptr( name ); 189 180 if ( newnode->type->aggregate->name == "" ) { // anonymous aggregate ? 190 newnode->type->aggregate->name = anonymous.newName(); 181 newnode->type->aggregate->name = DeclarationNode::anonymous.newName(); 182 } else { 183 // SKULLDUGGERY: generate a typedef for the aggregate name so that the aggregate does not have to be qualified 184 // by "struct" 185 typedefTable.addToEnclosingScope( newnode->type->aggregate->name, TypedefTable::TD ); 186 DeclarationNode *typedf = new DeclarationNode; 187 typedf->name = newnode->type->aggregate->name; 188 newnode->appendList( typedf->addType( newnode->clone() )->addTypedef() ); 191 189 } // if 192 190 newnode->type->aggregate->actuals = actuals; 193 191 newnode->type->aggregate->fields = fields; 194 192 return newnode; 195 } // DeclarationNode::newAggregate193 } 196 194 197 195 DeclarationNode *DeclarationNode::newEnum( std::string *name, DeclarationNode *constants ) { … … 202 200 if ( newnode->type->enumeration->name == "" ) { // anonymous enumeration ? 203 201 newnode->type->enumeration->name = DeclarationNode::anonymous.newName(); 202 } else { 203 // SKULLDUGGERY: generate a typedef for the enumeration name so that the enumeration does not have to be 204 // qualified by "enum" 205 typedefTable.addToEnclosingScope( newnode->type->enumeration->name, TypedefTable::TD ); 206 DeclarationNode *typedf = new DeclarationNode; 207 typedf->name = newnode->type->enumeration->name; 208 newnode->appendList( typedf->addType( newnode->clone() )->addTypedef() ); 204 209 } // if 205 210 newnode->type->enumeration->constants = constants; 206 211 return newnode; 207 } // DeclarationNode::newEnum212 } 208 213 209 214 DeclarationNode *DeclarationNode::newEnumConstant( std::string *name, ExpressionNode *constant ) { 210 215 DeclarationNode *newnode = new DeclarationNode; 211 216 newnode->name = assign_strptr( name ); 212 newnode->enumeratorValue = constant; 213 typedefTable.addToEnclosingScope( newnode->name, TypedefTable::ID ); 214 return newnode; 215 } // DeclarationNode::newEnumConstant 217 // do something with the constant 218 return newnode; 219 } 216 220 217 221 DeclarationNode *DeclarationNode::newName( std::string *name ) { … … 219 223 newnode->name = assign_strptr( name ); 220 224 return newnode; 221 } // DeclarationNode::newName225 } 222 226 223 227 DeclarationNode *DeclarationNode::newFromTypeGen( std::string *name, ExpressionNode *params ) { … … 228 232 newnode->type->symbolic->actuals = params; 229 233 return newnode; 230 } // DeclarationNode::newFromTypeGen234 } 231 235 232 236 DeclarationNode *DeclarationNode::newTypeParam( TypeClass tc, std::string *name ) { … … 237 241 newnode->type->variable->name = newnode->name; 238 242 return newnode; 239 } // DeclarationNode::newTypeParam240 241 DeclarationNode *DeclarationNode::new Trait( std::string *name, DeclarationNode *params, DeclarationNode *asserts ) {243 } 244 245 DeclarationNode *DeclarationNode::newContext( std::string *name, DeclarationNode *params, DeclarationNode *asserts ) { 242 246 DeclarationNode *newnode = new DeclarationNode; 243 247 newnode->type = new TypeData( TypeData::Aggregate ); 244 newnode->type->aggregate->kind = Trait;248 newnode->type->aggregate->kind = Context; 245 249 newnode->type->aggregate->params = params; 246 250 newnode->type->aggregate->fields = asserts; 247 251 newnode->type->aggregate->name = assign_strptr( name ); 248 252 return newnode; 249 } // DeclarationNode::newTrait250 251 DeclarationNode *DeclarationNode::new TraitUse( std::string *name, ExpressionNode *params ) {253 } 254 255 DeclarationNode *DeclarationNode::newContextUse( std::string *name, ExpressionNode *params ) { 252 256 DeclarationNode *newnode = new DeclarationNode; 253 257 newnode->type = new TypeData( TypeData::AggregateInst ); 254 258 newnode->type->aggInst->aggregate = new TypeData( TypeData::Aggregate ); 255 newnode->type->aggInst->aggregate->aggregate->kind = Trait;259 newnode->type->aggInst->aggregate->aggregate->kind = Context; 256 260 newnode->type->aggInst->aggregate->aggregate->name = assign_strptr( name ); 257 261 newnode->type->aggInst->params = params; 258 262 return newnode; 259 } // DeclarationNode::newTraitUse263 } 260 264 261 265 DeclarationNode *DeclarationNode::newTypeDecl( std::string *name, DeclarationNode *typeParams ) { … … 267 271 newnode->type->symbolic->name = newnode->name; 268 272 return newnode; 269 } // DeclarationNode::newTypeDecl273 } 270 274 271 275 DeclarationNode *DeclarationNode::newPointer( DeclarationNode *qualifiers ) { … … 273 277 newnode->type = new TypeData( TypeData::Pointer ); 274 278 return newnode->addQualifiers( qualifiers ); 275 } // DeclarationNode::newPointer279 } 276 280 277 281 DeclarationNode *DeclarationNode::newArray( ExpressionNode *size, DeclarationNode *qualifiers, bool isStatic ) { … … 286 290 } // if 287 291 return newnode->addQualifiers( qualifiers ); 288 } // DeclarationNode::newArray292 } 289 293 290 294 DeclarationNode *DeclarationNode::newVarArray( DeclarationNode *qualifiers ) { … … 790 794 errors.append( e ); 791 795 } // try 792 cur = dynamic_cast< DeclarationNode *>( cur->get_link() );796 cur = dynamic_cast< DeclarationNode *>( cur->get_link() ); 793 797 } // while 794 798 if ( ! errors.isEmpty() ) { … … 877 881 ret = new UnionInstType( type->buildQualifiers(), type->aggregate->name ); 878 882 break; 879 case DeclarationNode:: Trait:880 ret = new TraitInstType( type->buildQualifiers(), type->aggregate->name );883 case DeclarationNode::Context: 884 ret = new ContextInstType( type->buildQualifiers(), type->aggregate->name ); 881 885 break; 882 886 default: -
src/Parser/ExpressionNode.cc
r0f9e4403 rc5833e8 10 10 // Created On : Sat May 16 13:17:07 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Apr 8 15:43:05201613 // Update Count : 2 9612 // Last Modified On : Mon Feb 1 13:32:30 2016 13 // Update Count : 271 14 14 // 15 15 … … 22 22 23 23 #include "ParseNode.h" 24 #include "TypeData.h"25 24 #include "SynTree/Constant.h" 26 25 #include "SynTree/Expression.h" 27 #include "SynTree/Declaration.h"28 26 #include "Common/UnimplementedError.h" 29 27 #include "parseutility.h" … … 489 487 args.front() = new AddressExpr( args.front() ); 490 488 break; 491 default: // do nothing 489 default: 490 /* do nothing */ 492 491 ; 493 } // switch492 } 494 493 495 494 switch ( op->get_type() ) { … … 874 873 } 875 874 876 877 CompoundLiteralNode::CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids ) : type( type ), kids( kids ) {}878 CompoundLiteralNode::CompoundLiteralNode( const CompoundLiteralNode &other ) : ExpressionNode( other ), type( other.type ), kids( other.kids ) {}879 880 CompoundLiteralNode::~CompoundLiteralNode() {881 delete kids;882 delete type;883 }884 885 CompoundLiteralNode *CompoundLiteralNode::clone() const {886 return new CompoundLiteralNode( *this );887 }888 889 void CompoundLiteralNode::print( std::ostream &os, int indent ) const {890 os << string( indent,' ' ) << "CompoundLiteralNode:" << endl;891 892 os << string( indent + 2, ' ' ) << "type:" << endl;893 if ( type != 0 )894 type->print( os, indent + 4 );895 896 os << string( indent + 2, ' ' ) << "initialization:" << endl;897 if ( kids != 0 )898 kids->printList( os, indent + 4 );899 }900 901 void CompoundLiteralNode::printOneLine( std::ostream &os, int indent ) const {902 os << "( ";903 if ( type ) type->print( os );904 os << ", ";905 if ( kids ) kids->printOneLine( os );906 os << ") ";907 }908 909 Expression *CompoundLiteralNode::build() const {910 Declaration * newDecl = type->build(); // compound literal type911 if ( DeclarationWithType * newDeclWithType = dynamic_cast< DeclarationWithType * >( newDecl ) ) { // non-sue compound-literal type912 return new CompoundLiteralExpr( newDeclWithType->get_type(), kids->build() );913 // these types do not have associated type information914 } else if ( StructDecl * newDeclStructDecl = dynamic_cast< StructDecl * >( newDecl ) ) {915 return new CompoundLiteralExpr( new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() ), kids->build() );916 } else if ( UnionDecl * newDeclUnionDecl = dynamic_cast< UnionDecl * >( newDecl ) ) {917 return new CompoundLiteralExpr( new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() ), kids->build() );918 } else if ( EnumDecl * newDeclEnumDecl = dynamic_cast< EnumDecl * >( newDecl ) ) {919 return new CompoundLiteralExpr( new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() ), kids->build() );920 } else {921 assert( false );922 } // if923 }924 925 926 875 ExpressionNode *flattenCommas( ExpressionNode *list ) { 927 876 if ( CompositeExprNode *composite = dynamic_cast< CompositeExprNode * >( list ) ) { -
src/Parser/ParseNode.h
r0f9e4403 rc5833e8 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // ParseNode.h -- 7 // ParseNode.h -- 8 8 // 9 9 // Author : Rodolfo G. Esteves 10 10 // Created On : Sat May 16 13:28:16 2015 11 // Last Modified By : Rob Schluntz12 // Last Modified On : Mon Apr 11 11:50:52 201613 // Update Count : 20511 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Feb 1 13:32:32 2016 13 // Update Count : 184 14 14 // 15 15 … … 108 108 109 109 ConstantNode( Type, std::string * ); 110 ConstantNode( const ConstantNode &other ) : type( other.type ), btype( other.btype),value( *new std::string( other.value ) ) {};110 ConstantNode( const ConstantNode &other ) : value( *new std::string( other.value ) ) {}; 111 111 ~ConstantNode() { delete &value; } 112 112 … … 177 177 enum Type { TupleC, Comma, TupleFieldSel, // n-adic 178 178 // triadic 179 Cond, NCond, 179 Cond, NCond, 180 180 // diadic 181 SizeOf, AlignOf, OffsetOf, Attr, CompLit, Plus, Minus, Mul, Div, Mod, Or, And, 182 BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq, 181 SizeOf, AlignOf, OffsetOf, Attr, CompLit, Plus, Minus, Mul, Div, Mod, Or, And, 182 BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq, 183 183 Assign, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn, 184 184 Index, FieldSel, PFieldSel, Range, … … 309 309 ValofExprNode( const ValofExprNode &other ); 310 310 ~ValofExprNode(); 311 311 312 312 virtual ValofExprNode *clone() const { return new ValofExprNode( *this ); } 313 313 … … 329 329 enum BasicType { Char, Int, Float, Double, Void, Bool, Complex, Imaginary }; 330 330 enum Modifier { Signed, Unsigned, Short, Long }; 331 enum Aggregate { Struct, Union, Trait };331 enum Aggregate { Struct, Union, Context }; 332 332 enum TypeClass { Type, Dtype, Ftype }; 333 enum BuiltinType { Valist }; 334 335 static const char *storageName[]; 333 334 static const char *storageName[]; 336 335 static const char *qualifierName[]; 337 336 static const char *basicTypeName[]; … … 339 338 static const char *aggregateName[]; 340 339 static const char *typeClassName[]; 341 static const char *builtinTypeName[];342 340 343 341 static DeclarationNode *newFunction( std::string *name, DeclarationNode *ret, DeclarationNode *param, StatementNode *body, bool newStyle = false ); … … 354 352 static DeclarationNode *newFromTypeGen( std::string *, ExpressionNode *params ); 355 353 static DeclarationNode *newTypeParam( TypeClass, std::string *); 356 static DeclarationNode *new Trait( std::string *name, DeclarationNode *params, DeclarationNode *asserts );357 static DeclarationNode *new TraitUse( std::string *name, ExpressionNode *params );354 static DeclarationNode *newContext( std::string *name, DeclarationNode *params, DeclarationNode *asserts ); 355 static DeclarationNode *newContextUse( std::string *name, ExpressionNode *params ); 358 356 static DeclarationNode *newTypeDecl( std::string *name, DeclarationNode *typeParams ); 359 357 static DeclarationNode *newPointer( DeclarationNode *qualifiers ); … … 365 363 static DeclarationNode *newAttr( std::string *, ExpressionNode *expr ); 366 364 static DeclarationNode *newAttr( std::string *, DeclarationNode *type ); 367 static DeclarationNode *newBuiltinType( BuiltinType );368 365 369 366 DeclarationNode *addQualifiers( DeclarationNode *); … … 404 401 LinkageSpec::Type get_linkage() const { return linkage; } 405 402 DeclarationNode *extractAggregate() const; 406 ExpressionNode *get_enumeratorValue() const { return enumeratorValue; }407 403 408 404 DeclarationNode(); … … 417 413 std::list< std::string > attributes; 418 414 ExpressionNode *bitfieldWidth; 419 ExpressionNode *enumeratorValue;420 415 InitializerNode *initializer; 421 416 bool hasEllipsis; … … 427 422 class StatementNode : public ParseNode { 428 423 public: 429 enum Type { Exp, If, Switch, Case, Default, Choose, Fallthru, 424 enum Type { Exp, If, Switch, Case, Default, Choose, Fallthru, 430 425 While, Do, For, 431 426 Goto, Continue, Break, Return, Throw, … … 535 530 bool aggregate; 536 531 ExpressionNode *designator; // may be list 537 InitializerNode *kids;538 };539 540 class CompoundLiteralNode : public ExpressionNode {541 public:542 CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids );543 CompoundLiteralNode( const CompoundLiteralNode &type );544 ~CompoundLiteralNode();545 546 virtual CompoundLiteralNode *clone() const;547 548 DeclarationNode *get_type() const { return type; }549 CompoundLiteralNode *set_type( DeclarationNode *t ) { type = t; return this; }550 551 InitializerNode *get_initializer() const { return kids; }552 CompoundLiteralNode *set_initializer( InitializerNode *k ) { kids = k; return this; }553 554 void print( std::ostream &, int indent = 0 ) const;555 void printOneLine( std::ostream &, int indent = 0 ) const;556 557 virtual Expression *build() const;558 private:559 DeclarationNode *type;560 532 InitializerNode *kids; 561 533 }; -
src/Parser/Parser.cc
r0f9e4403 rc5833e8 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:47 201613 // Update Count : 512 // Last Modified On : Sun May 31 23:45:19 2015 13 // Update Count : 4 14 14 // 15 15 16 16 #include "Parser.h" 17 #include "TypedefTable.h" 17 18 #include "lex.h" 18 19 #include "parser.h" 19 #include "TypedefTable.h"20 20 21 21 // global variables in cfa.y -
src/Parser/TypeData.cc
r0f9e4403 rc5833e8 10 10 // Created On : Sat May 16 15:12:51 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 17:26:45 201613 // Update Count : 4912 // Last Modified On : Tue Jul 14 14:57:23 2015 13 // Update Count : 32 14 14 // 15 15 … … 23 23 #include "SynTree/Expression.h" 24 24 #include "SynTree/Statement.h" 25 #include "SynTree/Initializer.h"26 25 27 26 TypeData::TypeData( Kind k ) : kind( k ), base( 0 ), forall( 0 ) { … … 85 84 typeexpr->expr = 0; 86 85 break; 87 case Builtin:88 builtin = new Builtin_t;89 break;90 86 case Attr: 91 87 attr = new Attr_t; … … 153 149 delete typeexpr->expr; 154 150 delete typeexpr; 155 break;156 case Builtin:157 delete builtin;158 151 break; 159 152 case Attr: … … 228 221 newtype->typeexpr->expr = maybeClone( typeexpr->expr ); 229 222 break; 230 case Builtin:231 newtype->builtin->type = builtin->type;232 break;233 223 case Attr: 234 224 newtype->attr->expr = maybeClone( attr->expr ); … … 406 396 attr->type->print( os, indent + 2 ); 407 397 } // if 408 break;409 case Builtin:410 os << "gcc builtin type";411 398 break; 412 399 default: … … 519 506 case Typeof: 520 507 return buildTypeof(); 521 case Builtin:522 return new VarArgsType( buildQualifiers() );523 508 case Attr: 524 509 return buildAttr(); … … 820 805 buildForall( aggregate->params, at->get_parameters() ); 821 806 break; 822 case DeclarationNode:: Trait:823 at = new TraitDecl( aggregate->name );807 case DeclarationNode::Context: 808 at = new ContextDecl( aggregate->name ); 824 809 buildList( aggregate->params, at->get_parameters() ); 825 810 break; … … 860 845 ret = new UnionInstType( buildQualifiers(), aggInst->aggregate->aggregate->name ); 861 846 break; 862 case DeclarationNode:: Trait:863 ret = new TraitInstType( buildQualifiers(), aggInst->aggregate->aggregate->name );847 case DeclarationNode::Context: 848 ret = new ContextInstType( buildQualifiers(), aggInst->aggregate->aggregate->name ); 864 849 break; 865 850 default: … … 898 883 EnumDecl *ret = new EnumDecl( enumeration->name ); 899 884 buildList( enumeration->constants, ret->get_members() ); 900 std::list< Declaration * >::iterator members = ret->get_members().begin();901 for ( const DeclarationNode *cur = enumeration->constants; cur != NULL; cur = dynamic_cast<DeclarationNode *>( cur->get_link() ), ++members ) {902 if ( cur->get_enumeratorValue() != NULL ) {903 ObjectDecl *member = dynamic_cast<ObjectDecl *>(*members);904 member->set_init( new SingleInit( maybeBuild< Expression >( cur->get_enumeratorValue() ) ) );905 } // if906 } // for907 885 return ret; 908 886 } -
src/Parser/TypeData.h
r0f9e4403 rc5833e8 10 10 // Created On : Sat May 16 15:18:36 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Feb 26 14:21:38201613 // Update Count : 1 912 // Last Modified On : Thu Jan 14 23:31:15 2016 13 // Update Count : 17 14 14 // 15 15 … … 24 24 struct TypeData { 25 25 enum Kind { Unknown, Basic, Pointer, Array, Function, Aggregate, AggregateInst, 26 Enum, EnumConstant, Symbolic, SymbolicInst, Variable, Tuple, Typeof, Builtin,Attr } kind;26 Enum, EnumConstant, Symbolic, SymbolicInst, Variable, Tuple, Typeof, Attr } kind; 27 27 28 28 TypeData( Kind k = Unknown ); … … 98 98 }; 99 99 100 struct Builtin_t {101 DeclarationNode::BuiltinType type;102 };103 104 100 struct Attr_t { 105 101 std::string name; … … 120 116 Typeof_t * typeexpr; 121 117 Attr_t * attr; 122 Builtin_t * builtin;123 118 }; 124 119 -
src/Parser/TypedefTable.cc
r0f9e4403 rc5833e8 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:30 201613 // Update Count : 2412 // Last Modified On : Fri Jun 26 07:30:16 2015 13 // Update Count : 19 14 14 // 15 15 16 16 #include <map> 17 17 #include <list> 18 #include "TypedefTable.h" 18 19 #include <cassert> 19 #include "TypedefTable.h"20 20 using namespace std; 21 21 … … 29 29 TypedefTable::TypedefTable() : currentScope( 0 ) {} 30 30 31 bool TypedefTable::exists( const string &identifier ) {32 return table.count( identifier ) > 0;33 }34 35 int TypedefTable::isKind( const string &identifier ) const {36 tableType::const_iterator id_pos = table.find( identifier );37 // Name lookup defaults to identifier, and then the identifier's kind is set by the parser.38 if ( id_pos == table.end() ) return IDENTIFIER;39 return id_pos->second.begin()->kind;40 }41 42 31 void TypedefTable::changeKind( const string &identifier, kind_t kind ) { 43 32 tableType::iterator id_pos = table.find( identifier ); 44 if ( id_pos == table.end() ) return; 45 id_pos->second.begin()->kind = kind; 46 } 47 48 // SKULLDUGGERY: Generate a typedef for the aggregate name so the aggregate does not have to be qualified by 49 // "struct". Only generate the typedef, if the name is not in use. The typedef is implicitly (silently) removed 50 // if the name is explicitly used. 51 void TypedefTable::makeTypedef( const string &name ) { 52 if ( ! typedefTable.exists( name ) ) { 53 typedefTable.addToEnclosingScope( name, TypedefTable::TD ); 33 if ( id_pos == table.end() ) { 34 return; 35 } else { 36 (*((*id_pos ).second.begin())).kind = kind; 37 return; 54 38 } // if 55 39 } 56 40 41 bool TypedefTable::isKind( const string &identifier, kind_t kind ) const { 42 tableType::const_iterator id_pos = table.find( identifier ); 43 if ( id_pos == table.end() ) { 44 return true; 45 } else { 46 return (*((*id_pos ).second.begin())).kind == kind; 47 } // if 48 } 49 50 bool TypedefTable::isIdentifier( const string &identifier ) const { 51 return isKind( identifier, ID ); 52 } 53 54 bool TypedefTable::isTypedef( const string &identifier ) const { 55 return isKind( identifier, TD ); 56 } 57 58 bool TypedefTable::isTypegen( const string &identifier ) const { 59 return isKind( identifier, TG ); 60 } 61 57 62 void TypedefTable::addToScope( const std::string &identifier, kind_t kind, int scope ) { 58 if ( current Trait != "" && scope == contextScope ) {63 if ( currentContext != "" && scope == contextScope ) { 59 64 DeferredEntry entry = { identifier, kind }; 60 contexts[current Trait].push_back( entry );65 contexts[currentContext].push_back( entry ); 61 66 } else { 62 67 debugPrint( "Adding " << identifier << " as kind " << kind << " scope " << scope << " from scope " << currentScope << endl ); … … 107 112 } 108 113 109 void TypedefTable::open Trait( const std::string &contextName ) {114 void TypedefTable::openContext( const std::string &contextName ) { 110 115 map< string, deferListType >::iterator i = contexts.find( contextName ); 111 116 if ( i != contexts.end() ) { … … 145 150 } 146 151 147 void TypedefTable::enter Trait( const std::string &contextName ) {148 current Trait = contextName;152 void TypedefTable::enterContext( const std::string &contextName ) { 153 currentContext = contextName; 149 154 contextScope = currentScope; 150 155 } 151 156 152 void TypedefTable::leave Trait() {153 current Trait = "";157 void TypedefTable::leaveContext() { 158 currentContext = ""; 154 159 } 155 160 -
src/Parser/TypedefTable.h
r0f9e4403 rc5833e8 10 10 // Created On : Sat May 16 15:24:36 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Apr 13 16:59:56 201613 // Update Count : 2712 // Last Modified On : Thu Jun 25 22:52:15 2015 13 // Update Count : 11 14 14 // 15 15 … … 22 22 #include <stack> 23 23 24 #include "lex.h"25 #include "parser.h"26 27 24 class TypedefTable { 28 25 public: 29 enum kind_t { ID = IDENTIFIER, TD = TYPEDEFname, TG = TYPEGENname};26 enum kind_t { ID, TD, TG }; 30 27 private: 31 28 struct Entry { … … 43 40 44 41 int currentScope; 45 std::string current Trait;42 std::string currentContext; 46 43 int contextScope; 47 44 … … 52 49 std::stack< std::string > nextIdentifiers; 53 50 51 bool isKind( const std::string &identifier, kind_t kind ) const; 54 52 void addToScope( const std::string &identifier, kind_t kind, int scope ); 55 53 public: 56 54 TypedefTable(); 57 55 58 bool exists( const std::string &identifier ); 59 int isKind( const std::string &identifier ) const; 56 bool isIdentifier( const std::string &identifier ) const; 57 bool isTypedef( const std::string &identifier ) const; 58 bool isTypegen( const std::string &identifier ) const; 59 60 60 void changeKind( const std::string &identifier, kind_t kind ); 61 62 void makeTypedef( const std::string &name ); 63 61 64 62 // "addToCurrentScope" adds the identifier/type pair to the current scope. This does less than you think it does, 65 63 // since each declaration is within its own scope. Mostly useful for type parameters. … … 81 79 82 80 // dump the definitions from a pre-defined context into the current scope 83 void open Trait( const std::string &contextName );81 void openContext( const std::string &contextName ); 84 82 85 83 void enterScope(); 86 84 void leaveScope(); 87 void enter Trait( const std::string &contextName );88 void leave Trait();85 void enterContext( const std::string &contextName ); 86 void leaveContext(); 89 87 90 88 void print() const; -
src/Parser/lex.cc
r0f9e4403 rc5833e8 382 382 (yy_c_buf_p) = yy_cp; 383 383 384 #define YY_NUM_RULES 1 80385 #define YY_END_OF_BUFFER 18 1384 #define YY_NUM_RULES 179 385 #define YY_END_OF_BUFFER 180 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[876] = 394 394 { 0, 395 0, 0, 0, 0, 0, 0, 115, 115, 118, 118, 396 181, 179, 7, 9, 8, 138, 117, 102, 143, 146, 397 114, 125, 126, 141, 139, 129, 140, 132, 142, 107, 398 108, 109, 130, 131, 148, 150, 149, 151, 179, 102, 399 123, 179, 124, 144, 102, 104, 102, 102, 102, 102, 400 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 401 102, 102, 127, 147, 128, 145, 7, 179, 4, 4, 402 180, 105, 180, 106, 115, 116, 122, 118, 119, 7, 403 9, 0, 8, 155, 174, 102, 0, 167, 137, 160, 404 168, 165, 152, 163, 153, 164, 162, 0, 112, 3, 405 406 0, 166, 112, 110, 0, 0, 110, 110, 0, 0, 407 110, 109, 109, 109, 0, 109, 135, 136, 134, 156, 408 158, 154, 159, 157, 0, 0, 0, 0, 0, 0, 409 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 410 173, 0, 117, 114, 102, 0, 0, 170, 0, 102, 411 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 412 102, 102, 102, 102, 102, 102, 38, 102, 102, 102, 413 102, 102, 102, 102, 102, 102, 102, 56, 102, 102, 414 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 415 102, 102, 102, 102, 169, 161, 7, 0, 0, 0, 416 417 2, 0, 5, 105, 0, 0, 0, 115, 0, 121, 418 120, 120, 0, 0, 0, 118, 0, 0, 0, 0, 395 0, 0, 0, 0, 0, 0, 114, 114, 117, 117, 396 180, 178, 7, 9, 8, 137, 116, 101, 142, 145, 397 113, 124, 125, 140, 138, 128, 139, 131, 141, 106, 398 107, 108, 129, 130, 147, 149, 148, 150, 178, 101, 399 122, 178, 123, 143, 101, 103, 101, 101, 101, 101, 400 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 401 101, 126, 146, 127, 144, 7, 178, 4, 4, 179, 402 104, 179, 105, 114, 115, 121, 117, 118, 7, 9, 403 0, 8, 154, 173, 101, 0, 166, 136, 159, 167, 404 164, 151, 162, 152, 163, 161, 0, 111, 3, 0, 405 406 165, 111, 109, 0, 0, 109, 109, 0, 0, 109, 407 108, 108, 108, 0, 108, 134, 135, 133, 155, 157, 408 153, 158, 156, 0, 0, 0, 0, 0, 0, 0, 409 0, 0, 0, 0, 0, 0, 0, 0, 102, 172, 410 0, 116, 113, 101, 0, 0, 169, 0, 101, 101, 411 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 412 101, 101, 101, 101, 101, 39, 101, 101, 101, 101, 413 101, 101, 101, 101, 101, 101, 57, 101, 101, 101, 414 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 415 101, 101, 168, 160, 7, 0, 0, 0, 2, 0, 416 417 5, 104, 0, 0, 0, 114, 0, 120, 119, 119, 418 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 419 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 420 111, 111, 0, 111, 111, 111, 0, 6, 111, 109, 421 0, 0, 0, 111, 0, 109, 109, 109, 109, 0, 422 110, 0, 0, 108, 108, 108, 108, 0, 170, 171, 423 0, 176, 174, 0, 0, 0, 102, 0, 0, 0, 424 0, 0, 0, 0, 0, 101, 17, 101, 101, 101, 425 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 426 101, 101, 101, 101, 101, 14, 101, 101, 101, 101, 427 428 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 429 101, 101, 101, 101, 51, 101, 101, 101, 64, 101, 430 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 431 101, 88, 101, 101, 101, 101, 101, 101, 101, 0, 432 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 433 0, 0, 0, 119, 0, 0, 177, 0, 0, 0, 434 0, 0, 0, 0, 111, 0, 111, 0, 111, 0, 435 0, 111, 111, 109, 109, 0, 0, 110, 110, 0, 436 110, 0, 110, 108, 108, 0, 0, 0, 0, 0, 437 0, 0, 0, 0, 0, 175, 101, 101, 101, 101, 438 439 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 440 101, 101, 101, 101, 101, 101, 101, 101, 101, 21, 441 101, 24, 101, 27, 101, 101, 101, 101, 101, 101, 442 101, 42, 101, 44, 101, 101, 101, 101, 101, 101, 443 101, 56, 101, 67, 101, 101, 101, 101, 101, 101, 444 101, 101, 101, 101, 101, 89, 101, 101, 96, 101, 445 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 447 0, 111, 111, 0, 0, 0, 0, 0, 110, 110, 448 0, 112, 0, 110, 110, 0, 0, 0, 0, 0, 449 450 0, 0, 0, 0, 0, 0, 0, 0, 101, 101, 451 22, 101, 101, 101, 101, 101, 101, 101, 15, 101, 452 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 453 101, 101, 101, 23, 25, 101, 32, 101, 101, 101, 454 101, 101, 41, 101, 101, 101, 101, 49, 101, 101, 455 54, 101, 101, 101, 101, 101, 76, 101, 101, 101, 456 101, 101, 86, 101, 101, 94, 101, 101, 100, 0, 419 457 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 420 0, 133, 112, 112, 0, 112, 112, 0, 0, 6, 421 0, 110, 0, 0, 0, 112, 0, 110, 110, 110, 422 110, 0, 111, 0, 0, 109, 109, 109, 109, 0, 423 171, 172, 0, 177, 175, 0, 0, 0, 103, 0, 424 0, 0, 0, 0, 0, 0, 0, 102, 17, 102, 425 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 426 102, 102, 102, 102, 102, 102, 102, 14, 102, 102, 427 428 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 429 102, 102, 102, 102, 102, 102, 50, 102, 102, 102, 430 63, 102, 102, 102, 102, 102, 102, 102, 102, 102, 431 102, 102, 102, 102, 102, 89, 102, 102, 102, 102, 432 102, 102, 102, 0, 0, 0, 0, 0, 0, 0, 433 0, 120, 0, 0, 0, 0, 0, 120, 0, 0, 434 178, 0, 0, 0, 0, 0, 0, 0, 112, 0, 435 112, 0, 112, 0, 0, 112, 0, 110, 110, 0, 436 0, 111, 111, 0, 111, 0, 111, 109, 109, 0, 437 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 438 439 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 440 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 441 102, 102, 102, 21, 102, 24, 102, 27, 102, 102, 442 102, 102, 102, 102, 102, 41, 102, 43, 102, 102, 443 102, 102, 102, 102, 102, 55, 102, 66, 102, 102, 444 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 445 102, 102, 102, 102, 97, 102, 102, 0, 0, 0, 446 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 447 0, 120, 0, 0, 0, 0, 0, 112, 0, 0, 448 0, 0, 0, 0, 111, 111, 0, 113, 0, 111, 449 450 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 451 0, 0, 0, 0, 102, 102, 22, 102, 102, 102, 452 102, 102, 102, 102, 15, 102, 102, 102, 102, 102, 453 102, 102, 102, 102, 102, 102, 102, 102, 102, 23, 454 25, 102, 32, 102, 102, 102, 102, 40, 102, 102, 455 102, 102, 48, 102, 102, 53, 102, 102, 70, 102, 456 102, 102, 76, 102, 102, 102, 102, 102, 86, 88, 457 102, 102, 94, 102, 102, 101, 0, 0, 0, 0, 458 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459 0, 0, 0, 0, 0, 113, 0, 0, 111, 113, 460 461 113, 113, 113, 0, 111, 0, 0, 0, 0, 0, 462 0, 0, 0, 0, 0, 102, 0, 102, 102, 102, 463 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 464 102, 102, 102, 58, 102, 102, 102, 102, 102, 102, 465 102, 102, 28, 102, 102, 102, 39, 42, 45, 102, 466 102, 51, 102, 60, 67, 102, 102, 75, 77, 80, 467 81, 83, 84, 102, 102, 91, 102, 102, 0, 1, 468 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 469 120, 0, 0, 0, 0, 113, 0, 113, 113, 0, 470 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 471 472 18, 102, 102, 102, 102, 102, 102, 102, 16, 102, 473 102, 102, 33, 102, 102, 102, 102, 102, 102, 102, 474 102, 102, 102, 102, 102, 36, 37, 102, 47, 52, 475 102, 102, 102, 90, 102, 102, 0, 0, 0, 0, 476 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 477 11, 29, 54, 102, 102, 102, 102, 102, 102, 102, 478 102, 102, 102, 102, 59, 61, 64, 102, 102, 78, 479 92, 102, 102, 35, 46, 71, 72, 102, 95, 98, 480 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481 0, 0, 102, 68, 102, 102, 12, 102, 102, 30, 482 483 34, 102, 102, 102, 65, 102, 102, 102, 102, 102, 484 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 485 0, 0, 0, 0, 57, 102, 102, 102, 102, 102, 486 102, 102, 49, 62, 73, 79, 93, 99, 102, 102, 487 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 488 13, 19, 102, 102, 31, 102, 102, 102, 26, 87, 489 0, 0, 102, 102, 102, 102, 102, 102, 74, 100, 490 102, 85, 20, 102, 102, 44, 82, 102, 102, 102, 491 102, 102, 102, 102, 96, 69, 0 458 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 459 0, 110, 112, 112, 112, 112, 112, 110, 0, 0, 460 461 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 462 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 463 101, 101, 101, 101, 101, 101, 59, 101, 101, 101, 464 101, 101, 101, 101, 101, 28, 101, 101, 101, 101, 465 40, 43, 46, 101, 101, 52, 101, 61, 68, 101, 466 101, 75, 77, 80, 81, 83, 84, 101, 101, 91, 467 101, 101, 0, 1, 0, 0, 0, 0, 0, 0, 468 104, 0, 0, 0, 119, 0, 0, 0, 0, 112, 469 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 470 0, 0, 101, 101, 18, 101, 101, 101, 101, 101, 471 472 101, 101, 16, 101, 101, 101, 33, 101, 101, 101, 473 101, 101, 101, 101, 101, 101, 101, 101, 35, 101, 474 37, 38, 101, 48, 53, 101, 101, 101, 90, 101, 475 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476 0, 0, 0, 0, 10, 11, 29, 55, 101, 101, 477 101, 101, 101, 101, 101, 101, 101, 101, 101, 60, 478 62, 65, 101, 101, 78, 92, 101, 101, 36, 47, 479 71, 72, 101, 95, 97, 0, 0, 0, 0, 0, 480 0, 0, 0, 0, 0, 0, 0, 101, 69, 101, 481 101, 12, 101, 101, 30, 34, 101, 101, 101, 66, 482 483 101, 101, 101, 101, 101, 101, 0, 0, 0, 0, 484 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 485 101, 101, 101, 101, 101, 101, 101, 50, 63, 73, 486 79, 93, 98, 101, 101, 0, 0, 0, 0, 0, 487 0, 0, 0, 101, 101, 13, 19, 101, 31, 101, 488 101, 101, 26, 87, 0, 0, 101, 101, 101, 101, 489 101, 74, 99, 101, 85, 20, 101, 45, 82, 101, 490 101, 101, 101, 70, 0 492 491 } ; 493 492 … … 500 499 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 501 500 26, 26, 26, 26, 26, 27, 28, 29, 30, 31, 502 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,503 4 2, 11, 43, 11, 11, 44, 11, 45, 11, 46,504 11, 4 7, 48, 49, 50, 11, 11, 51, 11, 11,505 5 2, 53, 54, 55, 56, 57, 58, 59, 60, 61,506 507 6 2, 63, 64, 65, 66, 11, 67, 68, 69, 70,508 7 1, 72, 11, 73, 74, 75, 76, 77, 78, 79,509 80, 81, 82, 83, 84, 85, 1, 1, 1, 1,501 32, 33, 34, 35, 36, 37, 38, 39, 40, 39, 502 41, 11, 42, 11, 11, 43, 11, 44, 11, 45, 503 11, 46, 47, 48, 49, 11, 11, 50, 11, 11, 504 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 505 506 61, 62, 63, 64, 65, 11, 66, 67, 68, 69, 507 70, 71, 11, 72, 73, 74, 75, 76, 77, 78, 508 79, 80, 81, 82, 83, 84, 1, 1, 1, 1, 510 509 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 511 510 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, … … 524 523 } ; 525 524 526 static yyconst flex_int32_t yy_meta[8 6] =525 static yyconst flex_int32_t yy_meta[85] = 527 526 { 0, 528 527 1, 1, 2, 1, 1, 1, 1, 1, 3, 1, … … 530 529 6, 1, 7, 7, 7, 7, 7, 7, 1, 1, 531 530 1, 8, 1, 1, 1, 9, 9, 9, 9, 9, 532 9, 4, 4, 10, 4, 11, 4, 4, 4, 10,533 4, 1, 12, 1, 1, 13, 1, 9, 9, 9,534 9, 9, 9, 4, 4, 4, 4, 10, 4, 4,535 4, 11, 4, 4, 4, 10, 4, 4, 4, 4,536 4,1, 1, 1, 1531 4, 4, 10, 4, 11, 4, 4, 4, 10, 4, 532 1, 12, 1, 1, 13, 1, 9, 9, 9, 9, 533 9, 9, 4, 4, 4, 4, 10, 4, 4, 4, 534 11, 4, 4, 4, 10, 4, 4, 4, 4, 4, 535 1, 1, 1, 1 537 536 } ; 538 537 539 static yyconst flex_int16_t yy_base[10 62] =538 static yyconst flex_int16_t yy_base[1050] = 540 539 { 0, 541 0, 84, 2272, 2269, 94, 0, 177, 178, 179, 180, 542 2285, 2822, 191, 2822, 197, 55, 2822, 2231, 60, 173, 543 2822, 2822, 2822, 56, 188, 2822, 191, 189, 204, 216, 544 275, 0, 2249, 2822, 216, 2247, 152, 344, 155, 220, 545 2822, 159, 2822, 217, 226, 2822, 185, 154, 212, 251, 546 237, 270, 235, 257, 241, 205, 193, 305, 314, 333, 547 238, 228, 2822, 225, 2822, 2242, 402, 390, 2822, 2253, 548 2822, 2221, 235, 2822, 0, 2822, 426, 0, 2822, 417, 549 2822, 439, 451, 2822, 498, 2219, 264, 2822, 2822, 2822, 550 2822, 2822, 2235, 2822, 2232, 2822, 2822, 2244, 559, 2822, 551 552 2261, 2822, 438, 444, 511, 534, 289, 253, 197, 380, 553 305, 0, 319, 280, 198, 322, 2822, 2822, 2822, 2230, 554 2822, 2822, 2822, 2227, 2224, 218, 255, 2239, 298, 350, 555 368, 312, 440, 398, 405, 2220, 441, 2168, 446, 2196, 556 2822, 335, 2822, 2822, 468, 2190, 2189, 2822, 2162, 439, 557 282, 433, 372, 281, 437, 434, 428, 570, 444, 466, 558 464, 469, 475, 321, 492, 438, 471, 445, 474, 512, 559 489, 503, 496, 521, 276, 515, 516, 2189, 526, 510, 560 519, 525, 543, 522, 560, 553, 523, 561, 551, 544, 561 599, 582, 593, 584, 2822, 2822, 660, 651, 2236, 666, 562 563 2822, 678, 2822, 2183, 607, 2179, 2178, 0, 693, 2822, 564 2822, 684, 2176, 2156, 2154, 0, 2177, 578, 608, 617, 565 654, 679, 650, 683, 684, 687, 2172, 690, 691, 2147, 566 2146, 2822, 0, 683, 710, 686, 700, 2145, 2196, 2822, 567 714, 0, 427, 746, 764, 786, 808, 621, 2822, 2152, 568 2125, 0, 794, 2171, 795, 709, 2822, 2147, 2121, 832, 569 2822, 2822, 2152, 2822, 2822, 711, 714, 2129, 2129, 717, 570 2125, 2123, 2120, 0, 2117, 0, 2088, 694, 679, 712, 571 709, 711, 698, 566, 726, 743, 771, 741, 790, 784, 572 800, 795, 742, 744, 814, 816, 818, 2118, 819, 745, 573 574 820, 821, 822, 823, 824, 746, 825, 748, 659, 831, 575 826, 833, 838, 839, 848, 850, 851, 844, 834, 857, 576 2116, 858, 859, 860, 862, 861, 864, 865, 867, 868, 577 866, 871, 876, 872, 878, 2113, 880, 689, 881, 882, 578 892, 896, 893, 953, 954, 2109, 2108, 2106, 0, 2103, 579 0, 941, 945, 2102, 0, 2101, 0, 2099, 0, 2118, 580 2822, 940, 941, 2094, 2088, 0, 2086, 0, 2822, 953, 581 975, 964, 2822, 981, 997, 1021, 2084, 2822, 2822, 939, 582 940, 1006, 982, 1041, 310, 1039, 1004, 2822, 2822, 2081, 583 2079, 2077, 0, 2074, 0, 2071, 0, 2070, 0, 2822, 584 585 886, 941, 960, 962, 977, 976, 980, 982, 1017, 1010, 586 1002, 998, 1022, 1031, 1028, 1033, 1034, 1037, 1040, 1043, 587 1038, 1041, 1053, 2072, 1055, 2070, 1045, 2067, 1056, 1061, 588 1063, 1065, 1066, 1067, 1070, 2064, 1071, 2063, 1073, 1074, 589 1075, 1078, 1080, 1081, 1085, 2062, 1087, 2060, 1084, 1089, 590 1091, 1097, 1099, 1092, 1102, 1103, 1105, 1106, 1108, 905, 591 1109, 1116, 1110, 1122, 2057, 1120, 1123, 1179, 2051, 0, 592 2050, 0, 2049, 0, 2047, 0, 1166, 2044, 0, 2041, 593 0, 2040, 2039, 2037, 0, 2034, 0, 1173, 2031, 1179, 594 1137, 1195, 1181, 1178, 1176, 2822, 1219, 1231, 1253, 2042, 595 596 2017, 2027, 2024, 0, 2021, 0, 2020, 0, 2019, 0, 597 2017, 0, 2014, 0, 1141, 1172, 2014, 1180, 1155, 1196, 598 1157, 1216, 1207, 1231, 1125, 1210, 1232, 1214, 1187, 1236, 599 1235, 1237, 1238, 1272, 1249, 1252, 1250, 1253, 1254, 2013, 600 1261, 1256, 2012, 1260, 1263, 1264, 1257, 2010, 1271, 1268, 601 1269, 1273, 2007, 1275, 1282, 2006, 1283, 1284, 2005, 1276, 602 1286, 1289, 2003, 1294, 1291, 1296, 1295, 1297, 1310, 2000, 603 1305, 1308, 1999, 1307, 1300, 1998, 2046, 1960, 0, 1958, 604 0, 1957, 0, 1954, 0, 1951, 0, 1950, 0, 1949, 605 0, 1947, 0, 1355, 1361, 1389, 1372, 1944, 2822, 1378, 606 607 1325, 1365, 1379, 1941, 2822, 1940, 0, 1939, 0, 1937, 608 0, 1934, 0, 0, 0, 1936, 0, 1366, 1312, 1311, 609 1341, 1323, 1368, 1369, 1374, 1356, 1383, 1372, 1388, 1390, 610 1393, 1395, 1396, 1398, 1400, 1431, 1406, 1407, 1411, 1408, 611 1413, 1414, 1935, 1409, 1416, 1419, 1933, 1930, 1929, 1422, 612 1424, 1928, 1429, 1926, 1923, 1425, 1430, 1919, 1915, 1911, 613 1895, 1894, 1893, 1436, 1433, 1891, 1439, 1440, 1938, 2822, 614 1884, 0, 1883, 0, 0, 0, 1884, 0, 0, 0, 615 2822, 0, 0, 0, 0, 1486, 1878, 2822, 2822, 1492, 616 1877, 0, 1876, 0, 0, 0, 0, 1874, 1447, 1444, 617 618 1874, 1449, 1471, 1479, 1450, 1480, 1482, 1469, 1873, 1486, 619 1490, 1488, 1502, 1452, 1510, 1504, 1491, 1519, 1506, 1498, 620 1508, 1512, 1513, 1514, 1515, 1872, 1870, 1517, 1867, 1866, 621 1518, 1520, 1523, 1865, 1521, 1525, 0, 0, 0, 1860, 622 1857, 1856, 1575, 0, 1855, 1853, 1850, 1849, 1848, 1849, 623 1846, 1845, 1844, 1531, 1536, 1527, 1528, 1552, 1533, 1537, 624 1539, 1555, 1557, 1569, 1842, 1560, 1839, 1561, 1559, 1568, 625 1572, 1567, 1573, 1838, 1837, 1835, 1828, 1574, 1826, 1825, 626 1819, 1818, 1817, 1815, 1798, 1789, 1788, 1785, 1778, 1775, 627 1768, 1766, 1576, 1768, 1577, 1581, 1580, 1579, 1584, 1585, 628 629 1747, 1586, 1615, 1590, 1746, 1591, 1592, 1602, 1600, 1594, 630 1606, 1742, 1735, 1733, 1732, 1690, 1689, 1686, 1685, 1683, 631 1682, 1678, 1677, 1674, 1676, 1607, 1611, 1614, 1612, 1608, 632 1616, 1620, 1675, 1623, 1624, 1530, 1453, 1630, 1625, 1629, 633 1438, 1354, 1319, 1318, 1267, 1212, 1210, 1208, 1631, 1636, 634 1178, 1639, 1635, 1643, 1177, 1644, 1646, 1650, 1126, 964, 635 937, 903, 1651, 1652, 1654, 1655, 1656, 1658, 788, 752, 636 1660, 607, 487, 1662, 1663, 394, 357, 1664, 1666, 1668, 637 1670, 1669, 1672, 1674, 233, 137, 2822, 1747, 1760, 1773, 638 1783, 1793, 1806, 1816, 1829, 1842, 1855, 1863, 1873, 1880, 639 640 1887, 1894, 1901, 1908, 1915, 1922, 1929, 1936, 1949, 1956, 641 1960, 1968, 1971, 1978, 1985, 1992, 1995, 2002, 2008, 2021, 642 2034, 2041, 2048, 2055, 2062, 2065, 2072, 2075, 2082, 2085, 643 2092, 2095, 2102, 2105, 2112, 2115, 2122, 2125, 2132, 2140, 644 2147, 2154, 2161, 2168, 2171, 2178, 2181, 2188, 2191, 2198, 645 2204, 2217, 2224, 2231, 2234, 2241, 2244, 2251, 2254, 2261, 646 2264, 2271, 2274, 2281, 2284, 2291, 2298, 2301, 2308, 2311, 647 2318, 2325, 2332, 2335, 2342, 2345, 2352, 2355, 2362, 2365, 648 2372, 2375, 2382, 2388, 2401, 2408, 2415, 2418, 2425, 2428, 649 2435, 2438, 2445, 2448, 2455, 2458, 2465, 2468, 2475, 2478, 650 651 2485, 2488, 2495, 2502, 2505, 2512, 2515, 2522, 2525, 2532, 652 2535, 2538, 2544, 2551, 2560, 2567, 2574, 2577, 2584, 2587, 653 2590, 2596, 2603, 2606, 2609, 2612, 2615, 2618, 2621, 2624, 654 2631, 2634, 2641, 2644, 2647, 2650, 2653, 2663, 2670, 2673, 655 2676, 2679, 2686, 2693, 2700, 2703, 2710, 2717, 2724, 2731, 656 2738, 2745, 2752, 2759, 2766, 2773, 2780, 2787, 2794, 2801, 657 2808 540 0, 83, 2238, 2237, 93, 0, 175, 176, 177, 178, 541 2252, 2782, 189, 2782, 195, 54, 2782, 2197, 59, 171, 542 2782, 2782, 2782, 55, 186, 2782, 189, 187, 202, 214, 543 272, 0, 2213, 2782, 214, 2213, 150, 340, 153, 222, 544 2782, 157, 2782, 215, 224, 2782, 207, 181, 221, 249, 545 235, 289, 155, 255, 218, 206, 266, 256, 323, 259, 546 192, 2782, 223, 2782, 2210, 377, 342, 2782, 2220, 2782, 547 2187, 234, 2782, 0, 2782, 421, 0, 2782, 393, 2782, 548 399, 405, 2782, 492, 2184, 241, 2782, 2782, 2782, 2782, 549 2782, 2201, 2782, 2200, 2782, 2782, 2211, 552, 2782, 2226, 550 551 2782, 413, 393, 437, 493, 377, 318, 195, 430, 382, 552 0, 384, 321, 196, 427, 2782, 2782, 2782, 2194, 2782, 553 2782, 2782, 2193, 2192, 252, 302, 2206, 342, 435, 422, 554 381, 455, 400, 494, 2185, 440, 2133, 469, 2163, 2782, 555 276, 2782, 2782, 520, 2159, 2157, 2782, 2128, 414, 463, 556 470, 325, 254, 479, 432, 274, 480, 423, 483, 498, 557 492, 503, 499, 509, 341, 455, 484, 377, 510, 512, 558 517, 518, 529, 530, 531, 537, 2154, 541, 536, 544, 559 557, 546, 566, 569, 538, 552, 548, 554, 588, 571, 560 570, 580, 2782, 2782, 645, 651, 2202, 657, 2782, 663, 561 562 2782, 2152, 593, 2147, 2144, 0, 631, 2782, 2782, 669, 563 2141, 2140, 2139, 0, 2160, 629, 635, 639, 678, 677, 564 666, 670, 671, 674, 2138, 681, 682, 2115, 2114, 2782, 565 0, 597, 702, 678, 676, 2111, 2160, 2782, 693, 0, 566 710, 723, 743, 762, 788, 707, 2782, 2119, 2094, 0, 567 776, 2138, 768, 723, 2782, 2113, 2086, 809, 2782, 2782, 568 2118, 2782, 2782, 705, 710, 2098, 2097, 724, 2091, 2088, 569 2087, 0, 2086, 0, 2056, 709, 682, 707, 712, 710, 570 724, 647, 750, 671, 786, 751, 748, 731, 778, 787, 571 789, 788, 792, 790, 758, 2084, 796, 806, 800, 813, 572 573 798, 810, 802, 816, 822, 819, 815, 826, 830, 829, 574 831, 832, 833, 837, 839, 841, 846, 843, 2081, 848, 575 850, 849, 851, 852, 854, 853, 857, 855, 858, 863, 576 868, 2080, 867, 912, 871, 878, 872, 879, 882, 937, 577 939, 2076, 2074, 2071, 0, 2070, 0, 927, 931, 2069, 578 0, 2067, 0, 2064, 0, 2084, 2782, 913, 926, 2064, 579 2060, 0, 2057, 0, 2782, 942, 960, 953, 2782, 966, 580 981, 1005, 2053, 2782, 2782, 955, 968, 995, 968, 1028, 581 892, 1014, 970, 2782, 2782, 2049, 2047, 2045, 0, 2042, 582 0, 2040, 0, 2038, 0, 2782, 909, 944, 982, 943, 583 584 1006, 911, 1012, 923, 1013, 1019, 1009, 1016, 1023, 1024, 585 1020, 972, 1030, 1028, 989, 1026, 1034, 1027, 1039, 2038, 586 1044, 2035, 1048, 2034, 1049, 1051, 1052, 1053, 1056, 1057, 587 1055, 2033, 1059, 2031, 946, 1063, 1066, 1067, 1068, 1071, 588 1069, 2028, 1075, 2025, 1077, 1080, 1079, 1082, 1084, 1086, 589 1087, 1090, 1097, 1107, 1088, 1108, 1093, 1098, 2024, 1096, 590 1111, 1164, 2020, 0, 2018, 0, 2015, 0, 2012, 0, 591 1151, 2011, 0, 2010, 0, 2008, 2005, 2002, 0, 2001, 592 0, 1156, 2000, 1162, 1148, 1182, 1149, 1126, 1147, 2782, 593 1201, 1215, 1241, 2010, 1983, 1992, 1991, 0, 1990, 0, 594 595 1988, 0, 1985, 0, 1982, 0, 1981, 0, 1161, 1149, 596 1983, 1179, 1140, 1180, 1117, 1182, 1192, 1199, 1181, 1163, 597 1196, 1200, 1201, 1220, 1198, 1221, 1224, 604, 1226, 1227, 598 1231, 1233, 1234, 1981, 1244, 1236, 1978, 1240, 1241, 1246, 599 1247, 1243, 1975, 1250, 1251, 1253, 1254, 1974, 1255, 1267, 600 1973, 1264, 1271, 1256, 1263, 1257, 1971, 1275, 1277, 1279, 601 1260, 1281, 1290, 1285, 1288, 1968, 1289, 1291, 1967, 2015, 602 1961, 0, 1958, 0, 1957, 0, 1956, 0, 1954, 0, 603 1921, 0, 1919, 0, 1918, 0, 1336, 1342, 1369, 1353, 604 1915, 2782, 1359, 1307, 1359, 1309, 1912, 2782, 1911, 0, 605 606 1910, 0, 1908, 0, 1905, 0, 0, 0, 1905, 0, 607 1347, 1295, 1292, 1323, 1337, 1338, 1296, 1349, 1351, 1355, 608 1353, 1348, 1363, 1364, 1371, 1373, 1380, 1375, 1403, 1381, 609 1385, 1389, 1094, 1387, 1390, 1904, 1391, 1393, 1397, 1401, 610 1903, 1901, 1898, 1394, 1400, 1897, 1404, 1896, 1894, 1402, 611 1408, 1891, 1890, 1889, 1887, 1884, 1880, 1417, 1412, 1876, 612 1420, 1418, 1921, 2782, 1853, 0, 1852, 0, 0, 0, 613 1854, 0, 0, 0, 2782, 0, 0, 0, 0, 1463, 614 1849, 2782, 2782, 1469, 1846, 0, 1845, 0, 0, 0, 615 0, 1844, 1407, 1446, 1845, 1406, 1423, 1300, 1431, 1449, 616 617 1455, 1447, 1842, 1457, 1448, 1459, 1464, 1460, 1490, 1474, 618 1470, 1494, 1480, 1475, 1484, 1485, 1486, 1482, 1841, 1487, 619 1840, 1838, 1489, 1835, 1834, 1491, 1493, 1497, 1833, 1498, 620 1500, 0, 0, 0, 1828, 1825, 1824, 1548, 0, 1823, 621 1821, 1818, 1817, 1816, 1817, 1814, 1813, 1812, 1505, 1510, 622 1502, 1501, 1504, 1508, 1513, 1517, 1526, 1528, 1559, 1810, 623 1533, 1807, 1534, 1535, 1544, 1545, 1538, 1539, 1806, 1805, 624 1803, 1800, 1540, 1799, 1798, 1793, 1786, 1784, 1783, 1780, 625 1779, 1778, 1776, 1759, 1750, 1749, 1746, 1546, 1742, 1549, 626 1550, 1552, 1554, 1557, 1558, 1739, 1556, 1589, 1566, 1732, 627 628 1565, 1572, 1577, 1579, 1567, 1578, 1727, 1726, 1705, 1704, 629 1703, 1696, 1694, 1693, 1650, 1649, 1647, 1645, 1644, 1646, 630 1571, 1584, 1582, 1581, 1586, 1593, 1595, 1645, 1644, 1597, 631 1642, 1641, 1598, 1599, 1602, 1636, 1635, 1633, 1422, 1421, 632 1205, 1201, 946, 1605, 1610, 910, 1603, 1607, 768, 1613, 633 1618, 1619, 723, 605, 503, 370, 1609, 1620, 1623, 1624, 634 1625, 338, 337, 1627, 290, 251, 1630, 200, 196, 1631, 635 1632, 1637, 1633, 136, 2782, 1707, 1720, 1733, 1743, 1753, 636 1766, 1776, 1789, 1802, 1815, 1823, 1833, 1840, 1847, 1854, 637 1861, 1868, 1875, 1882, 1889, 1896, 1909, 1916, 1920, 1928, 638 639 1931, 1938, 1945, 1952, 1955, 1962, 1968, 1981, 1994, 2001, 640 2008, 2015, 2022, 2025, 2032, 2035, 2042, 2045, 2052, 2055, 641 2062, 2065, 2072, 2075, 2082, 2085, 2092, 2100, 2107, 2114, 642 2121, 2128, 2131, 2138, 2141, 2148, 2151, 2158, 2164, 2177, 643 2184, 2191, 2194, 2201, 2204, 2211, 2214, 2221, 2224, 2231, 644 2234, 2241, 2244, 2251, 2258, 2261, 2268, 2271, 2278, 2285, 645 2292, 2295, 2302, 2305, 2312, 2315, 2322, 2325, 2332, 2335, 646 2342, 2348, 2361, 2368, 2375, 2378, 2385, 2388, 2395, 2398, 647 2405, 2408, 2415, 2418, 2425, 2428, 2435, 2438, 2445, 2448, 648 2455, 2462, 2465, 2472, 2475, 2482, 2485, 2492, 2495, 2498, 649 650 2504, 2511, 2520, 2527, 2534, 2537, 2544, 2547, 2550, 2556, 651 2563, 2566, 2569, 2572, 2575, 2578, 2581, 2584, 2591, 2594, 652 2601, 2604, 2607, 2610, 2613, 2623, 2630, 2633, 2636, 2639, 653 2646, 2653, 2660, 2663, 2670, 2677, 2684, 2691, 2698, 2705, 654 2712, 2719, 2726, 2733, 2740, 2747, 2754, 2761, 2768 658 655 } ; 659 656 660 static yyconst flex_int16_t yy_def[10 62] =657 static yyconst flex_int16_t yy_def[1050] = 661 658 { 0, 662 887, 1, 888, 888, 887, 5, 889, 889, 890, 890, 663 887, 887, 887, 887, 887, 887, 887, 891, 887, 887, 664 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 665 887, 31, 887, 887, 887, 887, 887, 887, 892, 891, 666 887, 887, 887, 887, 891, 887, 891, 891, 891, 891, 667 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 668 891, 891, 887, 887, 887, 887, 887, 893, 887, 887, 669 887, 894, 887, 887, 895, 887, 887, 896, 887, 887, 670 887, 887, 887, 887, 887, 891, 887, 887, 887, 887, 671 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 672 673 897, 887, 99, 30, 887, 887, 887, 887, 898, 30, 674 887, 31, 887, 887, 31, 887, 887, 887, 887, 887, 675 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 676 887, 887, 887, 887, 887, 887, 887, 887, 887, 899, 677 887, 887, 887, 887, 891, 900, 901, 887, 887, 891, 678 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 679 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 680 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 681 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 682 891, 891, 891, 891, 887, 887, 887, 893, 893, 893, 683 684 887, 893, 887, 894, 887, 902, 903, 895, 887, 887, 685 887, 887, 904, 905, 906, 896, 887, 887, 887, 887, 686 887, 887, 887, 887, 887, 887, 887, 887, 887, 907, 687 908, 887, 99, 887, 887, 887, 887, 99, 909, 887, 688 887, 104, 104, 887, 887, 887, 887, 887, 887, 887, 689 887, 910, 911, 912, 887, 887, 887, 887, 887, 887, 690 887, 887, 887, 887, 887, 887, 887, 887, 899, 887, 691 913, 914, 915, 916, 917, 918, 887, 919, 919, 919, 692 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 693 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 694 695 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 696 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 697 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 698 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 699 919, 919, 919, 920, 921, 922, 923, 924, 925, 926, 700 927, 887, 887, 928, 929, 930, 931, 932, 933, 887, 701 887, 887, 887, 887, 934, 935, 936, 937, 887, 887, 702 887, 887, 887, 887, 887, 371, 376, 887, 887, 938, 703 939, 940, 887, 887, 887, 940, 887, 887, 887, 941, 704 942, 943, 944, 945, 946, 947, 948, 949, 950, 887, 705 706 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 707 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 708 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 709 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 710 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 711 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 712 951, 951, 951, 951, 951, 951, 951, 952, 953, 954, 713 955, 956, 957, 958, 959, 960, 887, 961, 962, 963, 714 964, 965, 965, 966, 967, 968, 969, 887, 488, 887, 715 970, 887, 970, 887, 887, 887, 887, 887, 887, 887, 716 717 887, 971, 972, 973, 974, 975, 976, 977, 978, 979, 718 980, 981, 982, 983, 984, 984, 984, 984, 984, 984, 719 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 720 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 721 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 722 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 723 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 724 984, 984, 984, 984, 984, 984, 985, 986, 987, 988, 725 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 726 999, 1000, 1001, 887, 887, 887, 887, 1002, 887, 596, 727 728 887, 887, 887, 600, 887, 1003, 1004, 1005, 1006, 1007, 729 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1013, 1013, 1013, 730 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 731 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 732 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 733 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 734 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1015, 887, 735 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 736 887, 1026, 1027, 1028, 1029, 887, 686, 887, 887, 887, 737 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1038, 738 739 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 740 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 741 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 742 1038, 1038, 1038, 1038, 1038, 1038, 1039, 1040, 1041, 1042, 743 1043, 1044, 887, 1045, 1030, 1032, 1046, 1047, 1037, 1038, 744 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 745 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 746 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 747 1048, 1049, 1042, 1050, 1043, 1051, 1044, 1052, 1053, 1046, 748 1054, 1047, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 749 750 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 751 1038, 1055, 1048, 1056, 1049, 1057, 1050, 1058, 1051, 1059, 752 1052, 1060, 1053, 1054, 1038, 1038, 1038, 1038, 1038, 1038, 753 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 754 1061, 1055, 1056, 1057, 1058, 1032, 1059, 1060, 1038, 1038, 755 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 756 1061, 1032, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 757 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 758 1038, 1038, 1038, 1038, 1038, 1038, 0, 887, 887, 887, 759 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 760 761 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 762 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 763 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 764 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 765 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 766 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 767 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 768 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 769 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 770 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 771 772 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 773 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 774 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 775 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 776 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 777 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 778 887 659 875, 1, 876, 876, 875, 5, 877, 877, 878, 878, 660 875, 875, 875, 875, 875, 875, 875, 879, 875, 875, 661 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 662 875, 31, 875, 875, 875, 875, 875, 875, 880, 879, 663 875, 875, 875, 875, 879, 875, 879, 879, 879, 879, 664 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 665 879, 875, 875, 875, 875, 875, 881, 875, 875, 875, 666 882, 875, 875, 883, 875, 875, 884, 875, 875, 875, 667 875, 875, 875, 875, 879, 875, 875, 875, 875, 875, 668 875, 875, 875, 875, 875, 875, 875, 875, 875, 885, 669 670 875, 98, 30, 875, 875, 875, 875, 886, 30, 875, 671 31, 875, 875, 31, 875, 875, 875, 875, 875, 875, 672 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 673 875, 875, 875, 875, 875, 875, 875, 875, 887, 875, 674 875, 875, 875, 879, 888, 889, 875, 875, 879, 879, 675 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 676 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 677 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 678 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 679 879, 879, 875, 875, 875, 881, 881, 881, 875, 881, 680 681 875, 882, 875, 890, 891, 883, 875, 875, 875, 875, 682 892, 893, 894, 884, 875, 875, 875, 875, 875, 875, 683 875, 875, 875, 875, 875, 875, 875, 895, 896, 875, 684 98, 875, 875, 875, 875, 98, 897, 875, 875, 103, 685 103, 875, 875, 875, 875, 875, 875, 875, 875, 898, 686 899, 900, 875, 875, 875, 875, 875, 875, 875, 875, 687 875, 875, 875, 875, 875, 875, 887, 875, 901, 902, 688 903, 904, 905, 906, 875, 907, 907, 907, 907, 907, 689 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 690 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 691 692 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 693 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 694 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 695 907, 907, 907, 907, 907, 907, 907, 907, 907, 908, 696 909, 910, 911, 912, 913, 914, 915, 875, 875, 916, 697 917, 918, 919, 920, 921, 875, 875, 875, 875, 875, 698 922, 923, 924, 925, 875, 875, 875, 875, 875, 875, 699 875, 367, 372, 875, 875, 926, 927, 928, 875, 875, 700 875, 928, 875, 875, 875, 929, 930, 931, 932, 933, 701 934, 935, 936, 937, 938, 875, 939, 939, 939, 939, 702 703 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 704 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 705 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 706 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 707 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 708 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 709 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 710 875, 949, 950, 951, 952, 953, 953, 954, 955, 956, 711 957, 875, 482, 875, 958, 875, 958, 875, 875, 875, 712 875, 875, 875, 875, 875, 959, 960, 961, 962, 963, 713 714 964, 965, 966, 967, 968, 969, 970, 971, 972, 972, 715 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 716 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 717 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 718 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 719 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 720 972, 972, 972, 972, 972, 972, 972, 972, 972, 973, 721 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 722 984, 985, 986, 987, 988, 989, 875, 875, 875, 875, 723 990, 875, 589, 875, 875, 875, 593, 875, 991, 992, 724 725 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 726 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 727 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 728 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 729 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 730 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 731 1001, 1001, 1003, 875, 1004, 1005, 1006, 1007, 1008, 1009, 732 1010, 1011, 1012, 1013, 875, 1014, 1015, 1016, 1017, 875, 733 680, 875, 875, 875, 1018, 1019, 1020, 1021, 1022, 1023, 734 1024, 1025, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 735 736 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 737 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 738 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 739 1026, 1027, 1028, 1029, 1030, 1031, 1032, 875, 1033, 1018, 740 1020, 1034, 1035, 1025, 1026, 1026, 1026, 1026, 1026, 1026, 741 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 742 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 743 1026, 1026, 1026, 1026, 1026, 1036, 1037, 1030, 1038, 1031, 744 1039, 1032, 1040, 1041, 1034, 1042, 1035, 1026, 1026, 1026, 745 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 746 747 1026, 1026, 1026, 1026, 1026, 1026, 1043, 1036, 1044, 1037, 748 1045, 1038, 1046, 1039, 1047, 1040, 1048, 1041, 1042, 1026, 749 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 750 1026, 1026, 1026, 1026, 1026, 1049, 1043, 1044, 1045, 1046, 751 1020, 1047, 1048, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 752 1026, 1026, 1026, 1026, 1049, 1020, 1026, 1026, 1026, 1026, 753 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 754 1026, 1026, 1026, 1026, 0, 875, 875, 875, 875, 875, 755 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 756 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 757 758 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 759 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 760 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 761 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 762 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 763 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 764 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 765 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 766 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 767 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 768 769 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 770 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 771 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 772 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 773 875, 875, 875, 875, 875, 875, 875, 875, 875 779 774 } ; 780 775 781 static yyconst flex_int16_t yy_nxt[2 908] =776 static yyconst flex_int16_t yy_nxt[2867] = 782 777 { 0, 783 778 12, 13, 14, 15, 15, 15, 13, 16, 17, 12, … … 785 780 28, 29, 30, 31, 32, 32, 32, 32, 33, 34, 786 781 35, 36, 37, 38, 39, 18, 18, 18, 18, 18, 787 18, 18, 18, 40, 18, 18, 18, 18, 18, 40, 788 18, 41, 42, 43, 44, 45, 46, 47, 48, 49, 789 50, 51, 52, 53, 18, 54, 18, 55, 18, 18, 790 56, 18, 57, 58, 59, 60, 61, 62, 18, 18, 791 18, 63, 64, 65, 66, 67, 84, 92, 85, 85, 792 67, 88, 89, 68, 71, 71, 71, 71, 71, 71, 793 794 71, 71, 71, 71, 72, 71, 71, 71, 71, 71, 782 18, 18, 40, 18, 18, 18, 18, 18, 40, 18, 783 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 784 51, 52, 53, 18, 54, 18, 55, 18, 18, 18, 785 18, 56, 57, 58, 59, 60, 61, 18, 18, 18, 786 62, 63, 64, 65, 66, 83, 91, 84, 84, 66, 787 87, 88, 67, 70, 70, 70, 70, 70, 70, 70, 788 789 70, 70, 70, 71, 70, 70, 70, 70, 70, 70, 790 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 791 70, 70, 70, 70, 70, 70, 70, 70, 71, 71, 795 792 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 796 71, 71, 71, 71, 71, 71, 71, 71, 71, 72, 797 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 798 72, 72, 72, 72, 72, 71, 73, 71, 71, 72, 799 74, 72, 72, 72, 72, 72, 72, 72, 72, 72, 800 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 801 72, 72, 72, 72, 72, 71, 71, 71, 71, 76, 802 76, 79, 79, 123, 124, 90, 141, 79, 79, 87, 803 76, 76, 80, 81, 82, 82, 82, 80, 82, 81, 804 805 83, 83, 83, 82, 91, 93, 87, 142, 146, 98, 806 95, 99, 99, 99, 99, 99, 99, 252, 887, 94, 807 100, 85, 96, 97, 85, 101, 161, 118, 143, 77, 808 77, 77, 77, 144, 147, 102, 103, 87, 104, 104, 809 104, 104, 105, 105, 119, 87, 120, 121, 148, 263, 810 149, 264, 254, 260, 183, 106, 195, 87, 159, 107, 811 160, 150, 151, 152, 87, 108, 109, 153, 154, 162, 812 155, 110, 87, 156, 157, 145, 163, 106, 87, 182, 813 87, 158, 164, 111, 206, 87, 263, 87, 264, 87, 814 87, 108, 194, 87, 109, 103, 250, 112, 112, 112, 815 816 112, 112, 112, 87, 169, 177, 170, 196, 193, 87, 817 207, 180, 165, 230, 106, 171, 166, 181, 113, 178, 818 251, 167, 87, 258, 114, 168, 179, 172, 87, 263, 819 115, 264, 248, 87, 87, 173, 106, 174, 249, 231, 820 175, 143, 116, 263, 176, 264, 144, 259, 317, 283, 821 114, 125, 280, 500, 249, 126, 127, 87, 128, 191, 822 129, 130, 256, 131, 249, 132, 87, 265, 257, 184, 823 185, 257, 248, 87, 133, 134, 135, 501, 188, 186, 824 249, 263, 187, 264, 271, 87, 189, 265, 145, 256, 825 305, 200, 201, 190, 257, 136, 200, 257, 137, 263, 826 827 887, 264, 192, 197, 81, 82, 82, 82, 197, 87, 828 272, 198, 202, 202, 202, 202, 202, 202, 80, 81, 829 82, 82, 82, 80, 87, 138, 139, 209, 210, 263, 830 887, 264, 209, 282, 211, 255, 263, 267, 264, 211, 831 82, 81, 82, 82, 82, 82, 87, 887, 212, 212, 832 212, 212, 82, 81, 83, 83, 83, 82, 887, 211, 833 99, 99, 99, 99, 99, 99, 242, 242, 242, 242, 834 266, 263, 263, 264, 264, 213, 143, 263, 211, 264, 835 87, 144, 375, 211, 211, 87, 87, 211, 211, 87, 836 87, 87, 286, 241, 887, 211, 87, 87, 211, 243, 837 838 211, 214, 211, 281, 215, 217, 278, 284, 285, 218, 839 219, 307, 298, 279, 220, 221, 87, 222, 87, 223, 840 87, 87, 887, 87, 309, 300, 87, 87, 224, 225, 841 226, 103, 303, 105, 105, 105, 105, 105, 105, 87, 842 299, 87, 301, 302, 87, 304, 308, 310, 87, 227, 843 106, 245, 228, 245, 306, 87, 246, 246, 246, 246, 844 246, 246, 87, 313, 87, 315, 244, 87, 87, 311, 845 314, 87, 106, 87, 87, 87, 323, 87, 87, 322, 846 229, 233, 233, 233, 233, 233, 233, 312, 333, 247, 847 319, 316, 328, 320, 318, 87, 87, 234, 235, 236, 848 849 321, 237, 236, 87, 324, 87, 325, 143, 335, 360, 850 331, 361, 87, 87, 238, 337, 326, 327, 87, 236, 851 235, 236, 87, 329, 237, 332, 236, 287, 288, 289, 852 336, 290, 291, 334, 87, 292, 87, 293, 407, 360, 853 330, 361, 294, 295, 296, 87, 297, 339, 360, 343, 854 361, 87, 200, 201, 338, 340, 346, 200, 341, 87, 855 342, 197, 81, 82, 82, 82, 197, 200, 201, 198, 856 378, 361, 200, 202, 202, 202, 202, 202, 202, 344, 857 201, 360, 347, 361, 344, 360, 345, 361, 202, 202, 858 202, 202, 202, 202, 209, 210, 378, 143, 361, 209, 859 860 202, 202, 202, 202, 202, 202, 352, 352, 352, 352, 861 360, 87, 361, 362, 360, 360, 361, 361, 360, 363, 862 361, 360, 360, 361, 361, 369, 369, 370, 369, 370, 863 435, 87, 371, 371, 371, 371, 371, 371, 373, 353, 864 373, 87, 263, 373, 264, 263, 87, 264, 369, 402, 865 87, 369, 234, 235, 236, 406, 237, 236, 388, 401, 866 373, 87, 373, 87, 87, 372, 390, 373, 105, 105, 867 105, 105, 105, 105, 236, 235, 236, 404, 87, 237, 868 405, 236, 403, 408, 388, 106, 246, 246, 246, 246, 869 246, 246, 391, 87, 87, 87, 87, 87, 87, 419, 870 871 87, 255, 425, 432, 87, 420, 434, 106, 376, 376, 872 376, 376, 376, 376, 381, 409, 413, 105, 105, 105, 873 105, 105, 105, 87, 234, 245, 236, 245, 237, 236, 874 246, 246, 246, 246, 246, 246, 87, 383, 410, 384, 875 87, 377, 87, 385, 411, 412, 236, 87, 236, 386, 876 255, 237, 87, 236, 112, 112, 112, 112, 112, 112, 877 414, 387, 415, 417, 418, 384, 87, 416, 87, 385, 878 87, 87, 87, 87, 87, 87, 87, 87, 87, 421, 879 427, 426, 433, 87, 437, 87, 87, 260, 423, 424, 880 87, 87, 436, 429, 428, 422, 87, 430, 431, 439, 881 882 87, 438, 87, 87, 446, 441, 440, 442, 443, 87, 883 87, 87, 87, 87, 87, 445, 87, 87, 87, 87, 884 87, 448, 447, 87, 87, 444, 449, 451, 87, 456, 885 87, 450, 87, 87, 87, 452, 455, 454, 87, 453, 886 457, 462, 460, 461, 87, 87, 458, 464, 87, 515, 887 459, 463, 465, 466, 344, 201, 201, 87, 887, 344, 888 467, 345, 199, 211, 211, 211, 211, 352, 352, 352, 889 352, 360, 360, 361, 361, 371, 371, 371, 371, 371, 890 371, 370, 569, 370, 492, 492, 371, 371, 371, 371, 891 371, 371, 887, 87, 493, 494, 477, 488, 488, 488, 892 893 488, 488, 488, 233, 233, 233, 233, 233, 233, 516, 894 492, 492, 87, 234, 87, 236, 87, 237, 236, 242, 895 242, 242, 242, 105, 105, 495, 381, 517, 87, 87, 896 489, 496, 87, 518, 87, 236, 374, 236, 519, 520, 897 237, 521, 236, 376, 376, 376, 376, 376, 376, 383, 898 87, 384, 375, 496, 87, 385, 522, 496, 497, 887, 899 497, 386, 87, 498, 498, 498, 498, 498, 498, 87, 900 525, 495, 526, 387, 87, 524, 377, 384, 523, 496, 901 87, 385, 383, 87, 384, 87, 87, 527, 385, 87, 902 87, 532, 87, 87, 502, 87, 499, 87, 535, 528, 903 904 529, 537, 530, 531, 533, 87, 387, 87, 87, 541, 905 384, 534, 538, 87, 385, 87, 536, 87, 87, 87, 906 539, 540, 87, 87, 546, 87, 87, 87, 544, 542, 907 87, 548, 87, 87, 547, 543, 87, 87, 549, 87, 908 545, 87, 552, 87, 87, 550, 556, 554, 551, 87, 909 559, 87, 553, 555, 87, 87, 557, 87, 87, 558, 910 87, 87, 87, 564, 560, 567, 563, 568, 87, 561, 911 566, 562, 87, 565, 87, 87, 571, 87, 87, 573, 912 627, 201, 492, 570, 576, 574, 572, 577, 211, 211, 913 211, 211, 493, 87, 575, 488, 488, 488, 488, 488, 914 915 488, 376, 376, 376, 376, 376, 376, 87, 492, 87, 916 618, 234, 595, 236, 595, 237, 236, 596, 596, 596, 917 596, 596, 596, 492, 87, 599, 492, 621, 489, 87, 918 87, 623, 87, 236, 490, 236, 598, 619, 237, 87, 919 236, 498, 498, 498, 498, 498, 498, 620, 87, 492, 920 597, 599, 492, 600, 600, 600, 600, 600, 600, 87, 921 631, 622, 87, 887, 625, 887, 87, 862, 87, 601, 922 497, 602, 497, 603, 602, 498, 498, 498, 498, 498, 923 498, 624, 628, 87, 87, 630, 604, 87, 87, 87, 924 87, 602, 633, 602, 626, 636, 603, 632, 602, 629, 925 926 634, 87, 87, 635, 87, 87, 87, 642, 87, 87, 927 637, 641, 87, 87, 640, 87, 87, 643, 647, 639, 928 87, 87, 887, 87, 87, 87, 638, 87, 87, 644, 929 645, 646, 648, 650, 87, 87, 87, 649, 87, 653, 930 651, 87, 652, 87, 654, 655, 87, 87, 87, 87, 931 656, 657, 87, 660, 659, 661, 664, 87, 658, 87, 932 87, 663, 87, 87, 87, 668, 665, 688, 688, 662, 933 666, 701, 702, 887, 887, 87, 667, 488, 488, 488, 934 488, 488, 488, 596, 596, 596, 596, 596, 596, 595, 935 688, 595, 704, 87, 596, 596, 596, 596, 596, 596, 936 937 600, 600, 600, 600, 600, 600, 703, 688, 87, 887, 938 594, 686, 686, 686, 686, 686, 686, 689, 87, 689, 939 87, 87, 689, 699, 87, 708, 87, 601, 706, 602, 940 688, 603, 602, 604, 707, 87, 700, 710, 709, 689, 941 87, 689, 87, 705, 687, 87, 689, 87, 87, 602, 942 87, 602, 87, 716, 603, 718, 602, 712, 87, 87, 943 87, 87, 711, 87, 714, 87, 87, 713, 87, 717, 944 715, 87, 721, 719, 87, 724, 87, 87, 722, 720, 945 727, 87, 87, 87, 725, 87, 731, 723, 87, 732, 946 726, 87, 87, 861, 728, 734, 87, 733, 730, 87, 947 948 735, 87, 87, 729, 87, 87, 751, 736, 686, 686, 949 686, 686, 686, 686, 600, 600, 600, 600, 600, 600, 950 750, 87, 755, 87, 601, 763, 602, 752, 603, 602, 951 753, 87, 87, 764, 87, 756, 754, 757, 87, 758, 952 87, 687, 87, 87, 759, 767, 602, 690, 602, 761, 953 87, 603, 766, 602, 87, 760, 87, 762, 87, 765, 954 87, 768, 87, 769, 87, 87, 87, 87, 770, 87, 955 87, 87, 87, 87, 771, 87, 774, 87, 772, 87, 956 87, 779, 87, 87, 795, 87, 780, 773, 87, 87, 957 776, 87, 775, 803, 777, 796, 778, 686, 686, 686, 958 959 686, 686, 686, 793, 87, 794, 799, 87, 798, 87, 960 801, 87, 87, 87, 797, 804, 805, 800, 806, 87, 961 87, 87, 802, 807, 87, 87, 87, 808, 87, 87, 962 743, 87, 87, 87, 809, 828, 87, 87, 87, 830, 963 831, 833, 87, 87, 87, 834, 87, 836, 810, 811, 964 826, 827, 87, 829, 87, 825, 832, 837, 87, 87, 965 87, 838, 839, 87, 87, 835, 87, 87, 87, 851, 966 850, 855, 87, 852, 840, 87, 87, 87, 853, 857, 967 849, 87, 87, 87, 854, 858, 859, 87, 87, 856, 968 860, 87, 863, 864, 865, 87, 87, 866, 87, 868, 969 970 867, 869, 87, 87, 87, 870, 87, 87, 87, 873, 971 87, 875, 87, 876, 87, 87, 87, 874, 87, 872, 972 87, 87, 87, 871, 87, 880, 87, 87, 87, 887, 973 879, 881, 887, 848, 877, 878, 886, 887, 847, 884, 974 887, 845, 882, 883, 887, 844, 885, 69, 69, 69, 975 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 976 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 977 75, 75, 75, 78, 78, 78, 78, 78, 78, 78, 978 78, 78, 78, 78, 78, 78, 86, 887, 843, 86, 979 887, 86, 86, 86, 86, 86, 140, 842, 87, 87, 980 981 140, 140, 140, 140, 140, 140, 199, 199, 199, 199, 982 199, 199, 199, 199, 199, 199, 199, 199, 199, 204, 983 87, 887, 204, 824, 204, 204, 204, 204, 204, 208, 984 887, 208, 208, 823, 208, 208, 208, 208, 208, 208, 985 821, 208, 216, 887, 819, 216, 216, 216, 216, 216, 986 216, 216, 216, 887, 216, 239, 239, 239, 239, 239, 987 239, 239, 239, 239, 239, 239, 239, 239, 253, 253, 988 817, 253, 887, 815, 813, 253, 269, 87, 87, 269, 989 87, 269, 269, 269, 269, 269, 273, 87, 273, 87, 990 87, 87, 273, 275, 87, 275, 87, 87, 87, 275, 991 992 348, 87, 348, 887, 792, 790, 348, 350, 887, 350, 993 887, 787, 785, 350, 354, 783, 354, 87, 87, 87, 994 354, 356, 87, 356, 87, 87, 87, 356, 358, 749, 995 358, 746, 745, 743, 358, 365, 205, 365, 739, 738, 996 670, 365, 367, 87, 367, 87, 87, 87, 367, 239, 997 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 998 239, 239, 380, 87, 380, 382, 382, 87, 382, 382, 999 382, 87, 382, 253, 253, 87, 253, 392, 87, 392, 1000 87, 87, 87, 392, 394, 87, 394, 87, 87, 697, 1001 394, 396, 696, 396, 694, 692, 690, 396, 273, 598, 1002 1003 273, 398, 685, 398, 684, 682, 680, 398, 275, 678, 1004 275, 86, 676, 674, 86, 672, 86, 86, 86, 86, 1005 86, 199, 199, 199, 199, 199, 199, 199, 199, 199, 1006 199, 199, 199, 199, 468, 468, 468, 468, 468, 468, 1007 468, 468, 468, 468, 468, 468, 468, 469, 670, 469, 1008 87, 87, 87, 469, 471, 87, 471, 87, 87, 87, 1009 471, 473, 87, 473, 87, 87, 87, 473, 348, 617, 1010 348, 475, 615, 475, 613, 611, 609, 475, 350, 607, 1011 350, 478, 502, 478, 605, 605, 594, 478, 354, 593, 1012 354, 480, 591, 480, 483, 483, 589, 480, 356, 587, 1013 1014 356, 482, 585, 482, 583, 581, 579, 482, 358, 87, 1015 358, 484, 87, 484, 87, 87, 87, 484, 365, 87, 1016 365, 486, 87, 486, 87, 514, 512, 486, 367, 510, 1017 367, 491, 508, 491, 506, 491, 504, 491, 380, 490, 1018 380, 487, 380, 485, 380, 382, 382, 361, 382, 382, 1019 382, 361, 382, 503, 483, 503, 481, 479, 476, 503, 1020 505, 474, 505, 472, 470, 87, 505, 507, 87, 507, 1021 87, 400, 399, 507, 392, 397, 392, 509, 395, 509, 1022 393, 270, 265, 509, 394, 264, 394, 511, 389, 511, 1023 389, 252, 379, 511, 396, 379, 396, 513, 240, 513, 1024 1025 374, 368, 366, 513, 398, 364, 398, 86, 360, 359, 1026 86, 357, 86, 86, 86, 86, 86, 468, 468, 468, 1027 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 1028 578, 355, 578, 351, 349, 205, 578, 469, 201, 469, 1029 580, 87, 580, 277, 276, 274, 580, 471, 270, 471, 1030 582, 265, 582, 268, 265, 263, 582, 473, 262, 473, 1031 584, 261, 584, 240, 232, 85, 584, 475, 85, 475, 1032 586, 87, 586, 205, 203, 85, 586, 478, 122, 478, 1033 588, 117, 588, 87, 887, 70, 588, 480, 70, 480, 1034 482, 887, 482, 887, 887, 887, 482, 590, 887, 590, 1035 1036 887, 887, 887, 590, 484, 887, 484, 592, 887, 592, 1037 887, 887, 887, 592, 486, 887, 486, 491, 887, 491, 1038 887, 491, 887, 491, 382, 887, 382, 887, 887, 887, 1039 382, 606, 887, 606, 887, 887, 887, 606, 503, 887, 1040 503, 608, 887, 608, 887, 887, 887, 608, 505, 887, 1041 505, 610, 887, 610, 887, 887, 887, 610, 507, 887, 1042 507, 612, 887, 612, 887, 887, 887, 612, 509, 887, 1043 509, 614, 887, 614, 887, 887, 887, 614, 511, 887, 1044 511, 616, 887, 616, 887, 887, 887, 616, 513, 887, 1045 513, 86, 887, 887, 86, 887, 86, 86, 86, 86, 1046 1047 86, 669, 669, 669, 669, 669, 669, 669, 669, 669, 1048 669, 669, 669, 669, 671, 887, 671, 887, 887, 887, 1049 671, 578, 887, 578, 673, 887, 673, 887, 887, 887, 1050 673, 580, 887, 580, 675, 887, 675, 887, 887, 887, 1051 675, 582, 887, 582, 677, 887, 677, 887, 887, 887, 1052 677, 584, 887, 584, 679, 887, 679, 887, 887, 887, 1053 679, 586, 887, 586, 681, 887, 681, 887, 887, 887, 1054 681, 588, 887, 588, 683, 887, 683, 887, 887, 887, 1055 683, 590, 887, 590, 86, 887, 86, 887, 887, 887, 1056 86, 592, 887, 592, 491, 887, 491, 887, 887, 887, 1057 1058 491, 691, 887, 691, 887, 887, 887, 691, 606, 887, 1059 606, 693, 887, 693, 887, 887, 887, 693, 608, 887, 1060 608, 695, 887, 695, 887, 887, 887, 695, 610, 887, 1061 610, 140, 887, 140, 887, 887, 887, 140, 612, 887, 1062 612, 698, 887, 698, 614, 887, 614, 86, 887, 887, 1063 86, 887, 86, 86, 86, 86, 86, 616, 887, 616, 1064 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 1065 669, 669, 669, 737, 887, 737, 887, 887, 887, 737, 1066 671, 887, 671, 204, 887, 204, 887, 887, 887, 204, 1067 673, 887, 673, 740, 887, 740, 675, 887, 675, 204, 1068 1069 887, 887, 204, 887, 204, 204, 204, 204, 204, 677, 1070 887, 677, 741, 887, 741, 679, 887, 679, 681, 887, 1071 681, 742, 887, 742, 683, 887, 683, 86, 887, 86, 1072 744, 887, 744, 887, 887, 887, 744, 691, 887, 691, 1073 269, 887, 269, 887, 887, 887, 269, 693, 887, 693, 1074 747, 887, 747, 695, 887, 695, 140, 887, 140, 748, 1075 887, 748, 887, 887, 887, 748, 86, 887, 887, 86, 1076 887, 86, 86, 86, 86, 86, 781, 887, 781, 737, 1077 887, 737, 204, 887, 204, 782, 887, 782, 887, 887, 1078 887, 782, 784, 887, 784, 887, 887, 887, 784, 786, 1079 1080 887, 786, 887, 887, 887, 786, 788, 887, 788, 789, 1081 887, 789, 887, 887, 887, 789, 791, 887, 791, 887, 1082 887, 887, 791, 812, 887, 812, 887, 887, 887, 812, 1083 814, 887, 814, 887, 887, 887, 814, 816, 887, 816, 1084 887, 887, 887, 816, 818, 887, 818, 887, 887, 887, 1085 818, 820, 887, 820, 887, 887, 887, 820, 822, 887, 1086 822, 887, 887, 887, 822, 616, 887, 616, 887, 887, 1087 887, 616, 841, 887, 841, 887, 887, 887, 841, 677, 1088 887, 677, 887, 887, 887, 677, 681, 887, 681, 887, 1089 887, 887, 681, 86, 887, 86, 887, 887, 887, 86, 1090 1091 846, 887, 846, 887, 887, 887, 846, 140, 887, 140, 1092 887, 887, 887, 140, 204, 887, 204, 887, 887, 887, 1093 204, 11, 887, 887, 887, 887, 887, 887, 887, 887, 1094 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1095 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1096 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1097 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1098 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1099 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1100 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1101 1102 887, 887, 887, 887, 887, 887, 887 793 71, 71, 71, 70, 72, 70, 70, 71, 73, 71, 794 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 795 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 796 71, 71, 71, 70, 70, 70, 70, 75, 75, 78, 797 78, 122, 123, 89, 140, 78, 78, 86, 75, 75, 798 79, 80, 81, 81, 81, 79, 81, 80, 82, 82, 799 800 82, 81, 90, 92, 141, 145, 86, 97, 94, 98, 801 98, 98, 98, 98, 98, 250, 875, 93, 99, 84, 802 95, 96, 84, 100, 176, 117, 76, 76, 76, 76, 803 142, 146, 86, 101, 102, 143, 103, 103, 103, 103, 804 104, 104, 118, 86, 119, 120, 147, 86, 148, 252, 805 258, 86, 160, 105, 193, 192, 106, 86, 86, 149, 806 150, 151, 107, 108, 152, 153, 181, 154, 109, 86, 807 155, 156, 86, 86, 105, 86, 144, 161, 157, 158, 808 110, 159, 204, 261, 162, 262, 86, 179, 107, 228, 809 163, 108, 102, 180, 111, 111, 111, 111, 111, 111, 810 811 86, 168, 86, 169, 194, 86, 86, 86, 205, 164, 812 86, 105, 170, 165, 112, 229, 177, 86, 166, 186, 813 113, 281, 167, 178, 269, 86, 114, 187, 191, 182, 814 183, 142, 105, 261, 188, 262, 143, 284, 115, 184, 815 86, 86, 185, 198, 199, 171, 113, 124, 198, 189, 816 270, 125, 126, 172, 127, 173, 128, 129, 174, 130, 817 248, 131, 175, 256, 200, 200, 200, 200, 200, 200, 818 132, 133, 134, 261, 86, 262, 86, 144, 195, 80, 819 81, 81, 81, 195, 249, 280, 196, 257, 86, 86, 820 135, 190, 86, 136, 79, 80, 81, 81, 81, 79, 821 822 81, 80, 81, 81, 81, 81, 81, 80, 82, 82, 823 82, 81, 261, 305, 262, 240, 240, 240, 240, 246, 824 137, 138, 207, 208, 875, 247, 254, 207, 86, 209, 825 247, 261, 255, 262, 209, 98, 98, 98, 98, 98, 826 98, 263, 875, 210, 210, 210, 210, 241, 246, 308, 827 875, 247, 263, 261, 209, 262, 247, 102, 255, 104, 828 104, 104, 104, 104, 104, 86, 261, 239, 262, 211, 829 875, 261, 209, 262, 86, 255, 105, 209, 209, 875, 830 276, 209, 209, 86, 253, 264, 261, 277, 262, 209, 831 296, 242, 209, 254, 209, 212, 209, 105, 213, 215, 832 833 261, 255, 262, 216, 217, 283, 86, 875, 218, 219, 834 243, 220, 243, 221, 86, 244, 244, 244, 244, 244, 835 244, 86, 222, 223, 224, 261, 265, 262, 142, 306, 836 86, 86, 278, 143, 86, 86, 285, 286, 287, 279, 837 288, 289, 225, 86, 290, 226, 291, 245, 282, 86, 838 86, 292, 293, 294, 86, 295, 297, 875, 298, 301, 839 86, 86, 307, 86, 299, 300, 309, 303, 86, 86, 840 304, 86, 302, 227, 231, 231, 231, 231, 231, 231, 841 86, 86, 86, 312, 310, 311, 313, 86, 86, 86, 842 232, 233, 86, 234, 235, 86, 142, 86, 314, 86, 843 844 321, 315, 330, 86, 320, 86, 236, 318, 86, 316, 845 317, 232, 233, 232, 319, 325, 234, 86, 235, 322, 846 86, 86, 86, 331, 333, 328, 332, 629, 326, 323, 847 324, 86, 207, 208, 337, 335, 338, 207, 365, 86, 848 329, 342, 334, 336, 339, 327, 195, 80, 81, 81, 849 81, 195, 198, 199, 196, 86, 86, 198, 198, 199, 850 356, 365, 357, 198, 340, 199, 356, 343, 357, 340, 851 356, 341, 357, 200, 200, 200, 200, 200, 200, 200, 852 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 853 200, 348, 348, 348, 348, 357, 357, 356, 86, 357, 854 855 358, 356, 356, 357, 357, 356, 359, 357, 356, 356, 856 357, 357, 356, 356, 357, 357, 369, 365, 403, 366, 857 369, 366, 86, 349, 367, 367, 367, 367, 367, 367, 858 875, 232, 233, 86, 234, 235, 261, 369, 262, 369, 859 365, 261, 405, 262, 369, 104, 104, 104, 104, 104, 860 104, 398, 232, 233, 232, 374, 368, 234, 86, 235, 861 86, 86, 105, 86, 371, 244, 244, 244, 244, 244, 862 244, 384, 386, 397, 86, 86, 399, 253, 401, 400, 863 402, 374, 86, 105, 372, 372, 372, 372, 372, 372, 864 104, 104, 104, 104, 104, 104, 377, 384, 387, 86, 865 866 232, 86, 86, 234, 235, 243, 404, 243, 411, 86, 867 244, 244, 244, 244, 244, 244, 373, 410, 379, 86, 868 380, 232, 253, 232, 381, 409, 234, 419, 235, 86, 869 382, 111, 111, 111, 111, 111, 111, 86, 86, 86, 870 86, 86, 383, 86, 412, 415, 380, 86, 416, 86, 871 381, 86, 406, 86, 413, 414, 417, 86, 407, 408, 872 422, 86, 421, 258, 86, 420, 86, 86, 418, 424, 873 86, 423, 428, 86, 426, 427, 430, 86, 429, 425, 874 86, 86, 86, 86, 86, 431, 432, 433, 86, 437, 875 86, 435, 86, 438, 86, 439, 434, 86, 436, 86, 876 877 86, 86, 86, 86, 86, 86, 86, 443, 86, 86, 878 444, 441, 440, 446, 86, 442, 445, 451, 86, 86, 879 142, 450, 86, 86, 447, 449, 448, 456, 452, 86, 880 86, 459, 453, 86, 494, 460, 454, 455, 340, 199, 881 457, 199, 458, 340, 356, 341, 357, 197, 461, 209, 882 209, 209, 209, 348, 348, 348, 348, 356, 495, 357, 883 86, 86, 86, 86, 367, 367, 367, 367, 367, 367, 884 366, 509, 366, 514, 86, 367, 367, 367, 367, 367, 885 367, 471, 482, 482, 482, 482, 482, 482, 231, 231, 886 231, 231, 231, 231, 86, 86, 516, 86, 232, 486, 887 888 875, 234, 235, 240, 240, 240, 240, 104, 104, 487, 889 489, 510, 486, 512, 483, 377, 490, 545, 490, 232, 890 370, 232, 488, 86, 234, 486, 235, 372, 372, 372, 891 372, 372, 372, 86, 875, 371, 489, 379, 486, 380, 892 86, 525, 490, 381, 490, 491, 529, 491, 511, 382, 893 492, 492, 492, 492, 492, 492, 379, 86, 380, 373, 894 86, 383, 381, 86, 86, 380, 513, 86, 496, 381, 895 86, 86, 515, 517, 86, 86, 519, 86, 86, 86, 896 383, 86, 493, 518, 380, 86, 526, 521, 381, 520, 897 86, 522, 523, 524, 527, 86, 531, 532, 530, 86, 898 899 86, 528, 86, 86, 86, 533, 86, 86, 86, 534, 900 86, 535, 538, 541, 86, 543, 539, 86, 86, 86, 901 86, 536, 86, 542, 537, 544, 86, 540, 86, 551, 902 86, 86, 547, 86, 549, 86, 546, 86, 86, 86, 903 548, 86, 550, 552, 86, 86, 558, 86, 86, 86, 904 555, 553, 554, 556, 560, 561, 559, 557, 86, 86, 905 567, 566, 86, 716, 563, 562, 199, 564, 86, 568, 906 486, 569, 570, 209, 209, 209, 209, 565, 482, 482, 907 482, 482, 482, 482, 372, 372, 372, 372, 372, 372, 908 616, 86, 486, 486, 232, 592, 486, 234, 235, 588, 909 910 86, 588, 487, 591, 589, 589, 589, 589, 589, 589, 911 483, 614, 86, 612, 86, 232, 484, 232, 486, 486, 912 234, 592, 235, 492, 492, 492, 492, 492, 492, 611, 913 86, 86, 86, 86, 621, 620, 590, 593, 593, 593, 914 593, 593, 593, 86, 615, 613, 617, 86, 618, 86, 915 86, 86, 86, 594, 626, 875, 595, 596, 491, 856, 916 491, 619, 622, 492, 492, 492, 492, 492, 492, 597, 917 623, 86, 86, 624, 594, 86, 594, 86, 86, 595, 918 625, 596, 86, 627, 86, 86, 630, 86, 628, 635, 919 634, 86, 86, 633, 86, 86, 636, 86, 86, 632, 920 921 631, 86, 86, 641, 86, 86, 86, 86, 86, 638, 922 642, 86, 639, 640, 86, 86, 644, 637, 86, 643, 923 645, 646, 86, 647, 648, 652, 86, 651, 86, 650, 924 86, 649, 86, 656, 653, 658, 86, 655, 654, 86, 925 86, 86, 86, 86, 657, 659, 86, 86, 682, 660, 926 682, 86, 696, 695, 700, 662, 749, 661, 482, 482, 927 482, 482, 482, 482, 589, 589, 589, 589, 589, 589, 928 588, 682, 588, 682, 86, 589, 589, 589, 589, 589, 929 589, 593, 593, 593, 593, 593, 593, 697, 86, 86, 930 587, 680, 680, 680, 680, 680, 680, 683, 86, 86, 931 932 86, 683, 86, 693, 86, 698, 86, 594, 701, 703, 933 595, 596, 699, 597, 86, 86, 694, 704, 683, 702, 934 683, 705, 86, 681, 86, 683, 86, 712, 594, 706, 935 594, 86, 86, 595, 710, 596, 86, 707, 86, 708, 936 86, 86, 86, 711, 86, 86, 709, 713, 86, 715, 937 718, 86, 86, 86, 86, 86, 714, 86, 86, 86, 938 717, 722, 726, 86, 719, 723, 727, 720, 86, 86, 939 721, 86, 725, 729, 86, 875, 875, 728, 724, 745, 940 730, 748, 86, 747, 731, 680, 680, 680, 680, 680, 941 680, 593, 593, 593, 593, 593, 593, 86, 86, 86, 942 943 86, 594, 750, 751, 595, 596, 86, 746, 86, 752, 944 86, 86, 755, 759, 754, 86, 753, 681, 757, 756, 945 762, 86, 594, 684, 594, 86, 86, 595, 760, 596, 946 761, 86, 758, 86, 763, 86, 86, 86, 86, 764, 947 86, 86, 86, 765, 86, 86, 766, 769, 86, 86, 948 767, 86, 86, 86, 768, 86, 86, 774, 790, 86, 949 775, 86, 771, 770, 86, 792, 772, 791, 86, 773, 950 680, 680, 680, 680, 680, 680, 788, 86, 789, 86, 951 796, 794, 793, 798, 86, 86, 86, 799, 800, 86, 952 86, 86, 797, 801, 795, 86, 86, 86, 802, 803, 953 954 86, 86, 738, 86, 804, 86, 823, 86, 86, 86, 955 86, 825, 826, 805, 806, 828, 86, 86, 86, 822, 956 829, 821, 86, 86, 820, 827, 831, 824, 86, 86, 957 86, 832, 86, 86, 834, 86, 846, 86, 830, 833, 958 86, 847, 845, 844, 86, 835, 86, 849, 86, 86, 959 86, 851, 852, 86, 86, 848, 86, 859, 86, 853, 960 86, 86, 854, 850, 86, 857, 858, 861, 860, 86, 961 86, 86, 862, 863, 86, 86, 86, 866, 86, 868, 962 864, 86, 86, 86, 86, 867, 865, 875, 86, 875, 963 855, 871, 86, 86, 874, 86, 86, 86, 875, 875, 964 965 869, 843, 870, 875, 842, 872, 873, 68, 68, 68, 966 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 967 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 968 74, 74, 74, 77, 77, 77, 77, 77, 77, 77, 969 77, 77, 77, 77, 77, 77, 85, 875, 840, 85, 970 875, 85, 85, 85, 85, 85, 139, 839, 875, 838, 971 139, 139, 139, 139, 139, 139, 197, 197, 197, 197, 972 197, 197, 197, 197, 197, 197, 197, 197, 197, 202, 973 875, 837, 202, 86, 202, 202, 202, 202, 202, 206, 974 86, 206, 206, 86, 206, 206, 206, 206, 206, 206, 975 976 875, 206, 214, 819, 875, 214, 214, 214, 214, 214, 977 214, 214, 214, 818, 214, 237, 237, 237, 237, 237, 978 237, 237, 237, 237, 237, 237, 237, 237, 251, 251, 979 816, 251, 875, 814, 875, 251, 267, 812, 875, 267, 980 810, 267, 267, 267, 267, 267, 271, 808, 271, 86, 981 86, 86, 271, 273, 86, 273, 86, 86, 86, 273, 982 344, 86, 344, 86, 86, 86, 344, 346, 86, 346, 983 875, 787, 785, 346, 350, 875, 350, 875, 782, 780, 984 350, 352, 778, 352, 86, 86, 86, 352, 354, 86, 985 354, 86, 86, 86, 354, 361, 86, 361, 744, 741, 986 987 740, 361, 363, 738, 363, 203, 734, 733, 363, 237, 988 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 989 237, 237, 376, 664, 376, 378, 378, 86, 378, 378, 990 378, 86, 378, 251, 251, 86, 251, 388, 86, 388, 991 86, 86, 86, 388, 390, 86, 390, 86, 86, 86, 992 390, 392, 86, 392, 86, 86, 86, 392, 271, 691, 993 271, 394, 690, 394, 688, 686, 684, 394, 273, 591, 994 273, 85, 679, 678, 85, 676, 85, 85, 85, 85, 995 85, 197, 197, 197, 197, 197, 197, 197, 197, 197, 996 197, 197, 197, 197, 462, 462, 462, 462, 462, 462, 997 998 462, 462, 462, 462, 462, 462, 462, 463, 674, 463, 999 672, 670, 668, 463, 465, 666, 465, 664, 86, 86, 1000 465, 467, 86, 467, 86, 86, 86, 467, 344, 86, 1001 344, 469, 86, 469, 86, 610, 608, 469, 346, 606, 1002 346, 472, 604, 472, 602, 600, 496, 472, 350, 598, 1003 350, 474, 598, 474, 587, 586, 584, 474, 352, 477, 1004 352, 476, 477, 476, 582, 580, 578, 476, 354, 576, 1005 354, 478, 574, 478, 572, 86, 86, 478, 361, 86, 1006 361, 480, 86, 480, 86, 86, 86, 480, 363, 86, 1007 363, 485, 508, 485, 506, 485, 504, 485, 376, 502, 1008 1009 376, 500, 376, 498, 376, 378, 378, 484, 378, 378, 1010 378, 481, 378, 497, 479, 497, 357, 357, 477, 497, 1011 499, 475, 499, 473, 470, 468, 499, 501, 466, 501, 1012 464, 86, 86, 501, 388, 86, 388, 503, 396, 503, 1013 395, 393, 391, 503, 390, 389, 390, 505, 268, 505, 1014 263, 262, 385, 505, 392, 385, 392, 507, 250, 507, 1015 375, 375, 238, 507, 394, 370, 394, 85, 364, 362, 1016 85, 360, 85, 85, 85, 85, 85, 462, 462, 462, 1017 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 1018 571, 356, 571, 355, 353, 351, 571, 463, 347, 463, 1019 1020 573, 345, 573, 203, 199, 86, 573, 465, 275, 465, 1021 575, 274, 575, 272, 268, 263, 575, 467, 266, 467, 1022 577, 263, 577, 261, 260, 259, 577, 469, 238, 469, 1023 579, 230, 579, 84, 84, 86, 579, 472, 203, 472, 1024 581, 201, 581, 84, 121, 116, 581, 474, 86, 474, 1025 476, 875, 476, 69, 69, 875, 476, 583, 875, 583, 1026 875, 875, 875, 583, 478, 875, 478, 585, 875, 585, 1027 875, 875, 875, 585, 480, 875, 480, 485, 875, 485, 1028 875, 485, 875, 485, 378, 875, 378, 875, 875, 875, 1029 378, 599, 875, 599, 875, 875, 875, 599, 497, 875, 1030 1031 497, 601, 875, 601, 875, 875, 875, 601, 499, 875, 1032 499, 603, 875, 603, 875, 875, 875, 603, 501, 875, 1033 501, 605, 875, 605, 875, 875, 875, 605, 503, 875, 1034 503, 607, 875, 607, 875, 875, 875, 607, 505, 875, 1035 505, 609, 875, 609, 875, 875, 875, 609, 507, 875, 1036 507, 85, 875, 875, 85, 875, 85, 85, 85, 85, 1037 85, 663, 663, 663, 663, 663, 663, 663, 663, 663, 1038 663, 663, 663, 663, 665, 875, 665, 875, 875, 875, 1039 665, 571, 875, 571, 667, 875, 667, 875, 875, 875, 1040 667, 573, 875, 573, 669, 875, 669, 875, 875, 875, 1041 1042 669, 575, 875, 575, 671, 875, 671, 875, 875, 875, 1043 671, 577, 875, 577, 673, 875, 673, 875, 875, 875, 1044 673, 579, 875, 579, 675, 875, 675, 875, 875, 875, 1045 675, 581, 875, 581, 677, 875, 677, 875, 875, 875, 1046 677, 583, 875, 583, 85, 875, 85, 875, 875, 875, 1047 85, 585, 875, 585, 485, 875, 485, 875, 875, 875, 1048 485, 685, 875, 685, 875, 875, 875, 685, 599, 875, 1049 599, 687, 875, 687, 875, 875, 875, 687, 601, 875, 1050 601, 689, 875, 689, 875, 875, 875, 689, 603, 875, 1051 603, 139, 875, 139, 875, 875, 875, 139, 605, 875, 1052 1053 605, 692, 875, 692, 607, 875, 607, 85, 875, 875, 1054 85, 875, 85, 85, 85, 85, 85, 609, 875, 609, 1055 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 1056 663, 663, 663, 732, 875, 732, 875, 875, 875, 732, 1057 665, 875, 665, 202, 875, 202, 875, 875, 875, 202, 1058 667, 875, 667, 735, 875, 735, 669, 875, 669, 202, 1059 875, 875, 202, 875, 202, 202, 202, 202, 202, 671, 1060 875, 671, 736, 875, 736, 673, 875, 673, 675, 875, 1061 675, 737, 875, 737, 677, 875, 677, 85, 875, 85, 1062 739, 875, 739, 875, 875, 875, 739, 685, 875, 685, 1063 1064 267, 875, 267, 875, 875, 875, 267, 687, 875, 687, 1065 742, 875, 742, 689, 875, 689, 139, 875, 139, 743, 1066 875, 743, 875, 875, 875, 743, 85, 875, 875, 85, 1067 875, 85, 85, 85, 85, 85, 776, 875, 776, 732, 1068 875, 732, 202, 875, 202, 777, 875, 777, 875, 875, 1069 875, 777, 779, 875, 779, 875, 875, 875, 779, 781, 1070 875, 781, 875, 875, 875, 781, 783, 875, 783, 784, 1071 875, 784, 875, 875, 875, 784, 786, 875, 786, 875, 1072 875, 875, 786, 807, 875, 807, 875, 875, 875, 807, 1073 809, 875, 809, 875, 875, 875, 809, 811, 875, 811, 1074 1075 875, 875, 875, 811, 813, 875, 813, 875, 875, 875, 1076 813, 815, 875, 815, 875, 875, 875, 815, 817, 875, 1077 817, 875, 875, 875, 817, 609, 875, 609, 875, 875, 1078 875, 609, 836, 875, 836, 875, 875, 875, 836, 671, 1079 875, 671, 875, 875, 875, 671, 675, 875, 675, 875, 1080 875, 875, 675, 85, 875, 85, 875, 875, 875, 85, 1081 841, 875, 841, 875, 875, 875, 841, 139, 875, 139, 1082 875, 875, 875, 139, 202, 875, 202, 875, 875, 875, 1083 202, 11, 875, 875, 875, 875, 875, 875, 875, 875, 1084 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1085 1086 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1087 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1088 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1089 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1090 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1091 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1092 875, 875, 875, 875, 875, 875 1103 1093 } ; 1104 1094 1105 static yyconst flex_int16_t yy_chk[2 908] =1095 static yyconst flex_int16_t yy_chk[2867] = 1106 1096 { 0, 1107 1097 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, … … 1113 1103 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1114 1104 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1115 1, 1, 1, 1, 1, 2, 16, 24, 16, 24,1116 2, 19, 19, 2, 5, 5, 5, 5, 5, 5,1105 1, 1, 1, 1, 2, 16, 24, 16, 24, 2, 1106 19, 19, 2, 5, 5, 5, 5, 5, 5, 5, 1117 1107 1118 1108 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, … … 1123 1113 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1124 1114 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1125 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 1126 8, 9, 10, 37, 37, 20, 39, 9, 10, 886, 1127 7, 8, 13, 13, 13, 13, 13, 13, 15, 15, 1128 1129 15, 15, 15, 15, 20, 25, 48, 39, 42, 28, 1130 27, 28, 28, 28, 28, 28, 28, 109, 115, 25, 1131 29, 25, 27, 27, 27, 29, 48, 35, 40, 7, 1132 8, 9, 10, 40, 42, 29, 30, 47, 30, 30, 1133 30, 30, 30, 30, 35, 57, 35, 35, 44, 126, 1134 44, 126, 109, 115, 57, 30, 64, 56, 47, 30, 1135 47, 45, 45, 45, 49, 30, 30, 45, 45, 49, 1136 45, 30, 40, 45, 45, 40, 49, 30, 45, 56, 1137 62, 45, 49, 30, 73, 885, 127, 53, 127, 51, 1138 61, 30, 62, 55, 30, 31, 108, 31, 31, 31, 1139 1140 31, 31, 31, 50, 51, 53, 51, 64, 61, 54, 1141 73, 55, 50, 87, 31, 51, 50, 55, 31, 54, 1142 108, 50, 52, 114, 31, 50, 54, 52, 175, 129, 1143 31, 129, 107, 154, 151, 52, 31, 52, 107, 87, 1144 52, 60, 31, 132, 52, 132, 60, 114, 175, 154, 1145 31, 38, 151, 385, 111, 38, 38, 58, 38, 60, 1146 38, 38, 113, 38, 107, 38, 59, 130, 113, 58, 1147 58, 116, 111, 164, 38, 38, 38, 385, 59, 58, 1148 111, 130, 58, 130, 142, 60, 59, 131, 60, 116, 1149 164, 68, 68, 59, 113, 38, 68, 116, 38, 131, 1150 1151 110, 131, 60, 67, 67, 67, 67, 67, 67, 877, 1152 142, 67, 68, 68, 68, 68, 68, 68, 80, 80, 1153 80, 80, 80, 80, 153, 38, 38, 77, 77, 134, 1154 110, 134, 77, 153, 77, 110, 135, 135, 135, 77, 1155 82, 82, 82, 82, 82, 82, 876, 243, 77, 77, 1156 77, 77, 83, 83, 83, 83, 83, 83, 110, 77, 1157 103, 103, 103, 103, 103, 103, 104, 104, 104, 104, 1158 133, 133, 137, 133, 137, 77, 145, 139, 77, 139, 1159 157, 145, 243, 77, 77, 152, 156, 77, 77, 155, 1160 166, 150, 157, 103, 104, 77, 159, 168, 77, 104, 1161 1162 77, 77, 77, 152, 77, 85, 150, 155, 156, 85, 1163 85, 166, 159, 150, 85, 85, 161, 85, 160, 85, 1164 145, 162, 104, 167, 168, 161, 169, 163, 85, 85, 1165 85, 105, 163, 105, 105, 105, 105, 105, 105, 873, 1166 160, 171, 162, 162, 165, 163, 167, 169, 173, 85, 1167 105, 106, 85, 106, 165, 172, 106, 106, 106, 106, 1168 106, 106, 180, 171, 170, 173, 105, 176, 177, 170, 1169 172, 181, 105, 174, 184, 187, 181, 182, 179, 180, 1170 85, 99, 99, 99, 99, 99, 99, 170, 187, 106, 1171 177, 174, 184, 179, 176, 183, 190, 99, 99, 99, 1172 1173 179, 99, 99, 189, 182, 186, 183, 191, 189, 218, 1174 186, 218, 185, 188, 99, 190, 183, 183, 284, 99, 1175 99, 99, 158, 185, 99, 186, 99, 158, 158, 158, 1176 189, 158, 158, 188, 192, 158, 194, 158, 284, 219, 1177 185, 219, 158, 158, 158, 193, 158, 192, 220, 194, 1178 220, 191, 198, 198, 191, 192, 205, 198, 193, 872, 1179 193, 197, 197, 197, 197, 197, 197, 200, 200, 197, 1180 248, 221, 200, 198, 198, 198, 198, 198, 198, 202, 1181 202, 223, 205, 223, 202, 221, 202, 221, 200, 200, 1182 200, 200, 200, 200, 209, 209, 248, 338, 222, 209, 1183 1184 202, 202, 202, 202, 202, 202, 212, 212, 212, 212, 1185 222, 309, 222, 224, 224, 225, 224, 225, 226, 226, 1186 226, 228, 229, 228, 229, 234, 234, 235, 236, 235, 1187 309, 279, 235, 235, 235, 235, 235, 235, 237, 212, 1188 237, 338, 266, 237, 266, 267, 278, 267, 234, 279, 1189 283, 236, 241, 241, 241, 283, 241, 241, 256, 278, 1190 237, 281, 237, 282, 280, 235, 270, 237, 244, 244, 1191 244, 244, 244, 244, 241, 241, 241, 281, 285, 241, 1192 282, 241, 280, 285, 256, 244, 245, 245, 245, 245, 1193 245, 245, 270, 288, 293, 286, 294, 300, 306, 293, 1194 1195 308, 244, 300, 306, 870, 294, 308, 244, 246, 246, 1196 246, 246, 246, 246, 253, 286, 288, 255, 255, 255, 1197 255, 255, 255, 287, 246, 247, 246, 247, 246, 246, 1198 247, 247, 247, 247, 247, 247, 290, 253, 287, 253, 1199 869, 246, 289, 253, 287, 287, 246, 292, 246, 253, 1200 255, 246, 291, 246, 260, 260, 260, 260, 260, 260, 1201 289, 253, 290, 292, 292, 253, 295, 291, 296, 253, 1202 297, 299, 301, 302, 303, 304, 305, 307, 311, 295, 1203 302, 301, 307, 310, 311, 312, 319, 260, 297, 299, 1204 313, 314, 310, 304, 303, 296, 318, 305, 305, 313, 1205 1206 315, 312, 316, 317, 319, 315, 314, 316, 317, 320, 1207 322, 323, 324, 326, 325, 318, 327, 328, 331, 329, 1208 330, 322, 320, 332, 334, 317, 323, 325, 333, 330, 1209 335, 324, 337, 339, 340, 326, 329, 328, 401, 327, 1210 331, 337, 334, 335, 341, 343, 332, 340, 342, 401, 1211 333, 339, 341, 342, 344, 344, 345, 460, 862, 344, 1212 343, 344, 345, 352, 352, 352, 352, 353, 353, 353, 1213 353, 362, 363, 362, 363, 370, 370, 370, 370, 370, 1214 370, 372, 460, 372, 380, 381, 372, 372, 372, 372, 1215 372, 372, 861, 402, 380, 381, 352, 371, 371, 371, 1216 1217 371, 371, 371, 374, 374, 374, 374, 374, 374, 402, 1218 380, 381, 403, 371, 404, 371, 860, 371, 371, 375, 1219 375, 375, 375, 375, 375, 383, 382, 403, 406, 405, 1220 371, 383, 407, 404, 408, 371, 374, 371, 405, 406, 1221 371, 407, 371, 376, 376, 376, 376, 376, 376, 382, 1222 412, 382, 375, 387, 411, 382, 408, 383, 384, 386, 1223 384, 382, 410, 384, 384, 384, 384, 384, 384, 409, 1224 411, 387, 412, 382, 413, 410, 376, 382, 409, 387, 1225 415, 382, 386, 414, 386, 416, 417, 413, 386, 418, 1226 421, 417, 419, 422, 386, 420, 384, 427, 419, 414, 1227 1228 414, 421, 415, 416, 418, 423, 386, 425, 429, 427, 1229 386, 418, 422, 430, 386, 431, 420, 432, 433, 434, 1230 423, 425, 435, 437, 433, 439, 440, 441, 431, 429, 1231 442, 435, 443, 444, 434, 430, 449, 445, 437, 447, 1232 432, 450, 441, 451, 454, 439, 445, 443, 440, 452, 1233 450, 453, 442, 444, 455, 456, 447, 457, 458, 449, 1234 459, 461, 463, 455, 451, 458, 454, 459, 462, 452, 1235 457, 453, 466, 456, 464, 467, 462, 525, 859, 463, 1236 525, 468, 491, 461, 467, 464, 462, 468, 477, 477, 1237 477, 477, 491, 515, 466, 488, 488, 488, 488, 488, 1238 1239 488, 490, 490, 490, 490, 490, 490, 519, 491, 521, 1240 515, 488, 492, 488, 492, 488, 488, 492, 492, 492, 1241 492, 492, 492, 494, 516, 495, 493, 519, 488, 855, 1242 851, 521, 518, 488, 490, 488, 493, 516, 488, 529, 1243 488, 497, 497, 497, 497, 497, 497, 518, 520, 494, 1244 492, 495, 493, 498, 498, 498, 498, 498, 498, 523, 1245 529, 520, 526, 848, 523, 847, 528, 846, 522, 498, 1246 499, 498, 499, 498, 498, 499, 499, 499, 499, 499, 1247 499, 522, 526, 524, 527, 528, 498, 531, 530, 532, 1248 533, 498, 531, 498, 524, 534, 498, 530, 498, 527, 1249 1250 532, 535, 537, 533, 536, 538, 539, 541, 542, 547, 1251 535, 539, 544, 541, 538, 545, 546, 542, 547, 537, 1252 550, 551, 845, 549, 534, 552, 536, 554, 560, 544, 1253 545, 546, 549, 551, 555, 557, 558, 550, 561, 555, 1254 552, 562, 554, 565, 557, 558, 564, 567, 566, 568, 1255 560, 561, 575, 565, 564, 566, 569, 571, 562, 574, 1256 572, 568, 569, 620, 619, 575, 571, 601, 601, 567, 1257 572, 619, 620, 844, 843, 622, 574, 594, 594, 594, 1258 594, 594, 594, 595, 595, 595, 595, 595, 595, 597, 1259 601, 597, 622, 621, 597, 597, 597, 597, 597, 597, 1260 1261 600, 600, 600, 600, 600, 600, 621, 602, 626, 842, 1262 594, 596, 596, 596, 596, 596, 596, 603, 618, 603, 1263 623, 624, 603, 618, 628, 626, 625, 596, 624, 596, 1264 602, 596, 596, 600, 625, 627, 618, 628, 627, 603, 1265 629, 603, 630, 623, 596, 631, 603, 632, 633, 596, 1266 634, 596, 635, 634, 596, 636, 596, 630, 637, 638, 1267 640, 644, 629, 639, 632, 641, 642, 631, 645, 635, 1268 633, 646, 639, 637, 650, 642, 651, 656, 640, 638, 1269 646, 653, 657, 636, 644, 665, 656, 641, 664, 657, 1270 645, 667, 668, 841, 650, 665, 700, 664, 653, 699, 1271 1272 667, 702, 705, 651, 714, 837, 700, 668, 686, 686, 1273 686, 686, 686, 686, 690, 690, 690, 690, 690, 690, 1274 699, 708, 705, 703, 686, 714, 686, 702, 686, 686, 1275 703, 704, 706, 715, 707, 706, 704, 707, 710, 708, 1276 712, 686, 711, 717, 710, 718, 686, 690, 686, 712, 1277 720, 686, 717, 686, 713, 711, 716, 713, 719, 716, 1278 721, 719, 715, 720, 722, 723, 724, 725, 721, 728, 1279 731, 718, 732, 735, 722, 733, 725, 736, 723, 756, 1280 757, 735, 836, 754, 756, 759, 736, 724, 755, 760, 1281 731, 761, 728, 764, 732, 757, 733, 743, 743, 743, 1282 1283 743, 743, 743, 754, 758, 755, 760, 762, 759, 763, 1284 762, 769, 766, 768, 758, 766, 768, 761, 769, 772, 1285 770, 764, 763, 770, 771, 773, 778, 771, 793, 795, 1286 743, 798, 797, 796, 772, 797, 799, 800, 802, 799, 1287 800, 803, 804, 806, 807, 804, 810, 807, 773, 778, 1288 795, 796, 809, 798, 808, 793, 802, 808, 811, 826, 1289 830, 809, 810, 827, 829, 806, 828, 803, 831, 828, 1290 827, 831, 832, 829, 811, 834, 835, 839, 830, 835, 1291 826, 840, 838, 849, 830, 838, 839, 853, 850, 832, 1292 840, 852, 849, 850, 852, 854, 856, 853, 857, 856, 1293 1294 854, 857, 858, 863, 864, 858, 865, 866, 867, 865, 1295 868, 867, 871, 868, 874, 875, 878, 866, 879, 864, 1296 880, 882, 881, 863, 883, 878, 884, 833, 825, 824, 1297 875, 879, 823, 822, 871, 874, 884, 821, 820, 882, 1298 819, 818, 880, 881, 817, 816, 883, 888, 888, 888, 1299 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 1300 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 1301 889, 889, 889, 890, 890, 890, 890, 890, 890, 890, 1302 890, 890, 890, 890, 890, 890, 891, 815, 814, 891, 1303 813, 891, 891, 891, 891, 891, 892, 812, 805, 801, 1304 1305 892, 892, 892, 892, 892, 892, 893, 893, 893, 893, 1306 893, 893, 893, 893, 893, 893, 893, 893, 893, 894, 1307 794, 792, 894, 791, 894, 894, 894, 894, 894, 895, 1308 790, 895, 895, 789, 895, 895, 895, 895, 895, 895, 1309 788, 895, 896, 787, 786, 896, 896, 896, 896, 896, 1310 896, 896, 896, 785, 896, 897, 897, 897, 897, 897, 1311 897, 897, 897, 897, 897, 897, 897, 897, 898, 898, 1312 784, 898, 783, 782, 781, 898, 899, 780, 779, 899, 1313 777, 899, 899, 899, 899, 899, 900, 776, 900, 775, 1314 774, 767, 900, 901, 765, 901, 753, 752, 751, 901, 1315 1316 902, 750, 902, 749, 748, 747, 902, 903, 746, 903, 1317 745, 742, 741, 903, 904, 740, 904, 734, 730, 729, 1318 904, 905, 727, 905, 726, 709, 701, 905, 906, 698, 1319 906, 693, 691, 687, 906, 907, 677, 907, 673, 671, 1320 669, 907, 908, 666, 908, 663, 662, 661, 908, 909, 1321 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 1322 909, 909, 910, 660, 910, 911, 911, 659, 911, 911, 1323 911, 658, 911, 912, 912, 655, 912, 913, 654, 913, 1324 652, 649, 648, 913, 914, 647, 914, 643, 616, 612, 1325 914, 915, 610, 915, 608, 606, 604, 915, 916, 598, 1326 1327 916, 917, 592, 917, 590, 588, 586, 917, 918, 584, 1328 918, 919, 582, 580, 919, 578, 919, 919, 919, 919, 1329 919, 920, 920, 920, 920, 920, 920, 920, 920, 920, 1330 920, 920, 920, 920, 921, 921, 921, 921, 921, 921, 1331 921, 921, 921, 921, 921, 921, 921, 922, 577, 922, 1332 576, 573, 570, 922, 923, 563, 923, 559, 556, 553, 1333 923, 924, 548, 924, 543, 540, 517, 924, 925, 513, 1334 925, 926, 511, 926, 509, 507, 505, 926, 927, 503, 1335 927, 928, 502, 928, 501, 500, 489, 928, 929, 486, 1336 929, 930, 484, 930, 483, 482, 480, 930, 931, 478, 1337 1338 931, 932, 475, 932, 473, 471, 469, 932, 933, 465, 1339 933, 934, 448, 934, 446, 438, 436, 934, 935, 428, 1340 935, 936, 426, 936, 424, 398, 396, 936, 937, 394, 1341 937, 938, 392, 938, 391, 938, 390, 938, 939, 377, 1342 939, 367, 939, 365, 939, 940, 940, 364, 940, 940, 1343 940, 360, 940, 941, 358, 941, 356, 354, 350, 941, 1344 942, 348, 942, 347, 346, 336, 942, 943, 321, 943, 1345 298, 277, 275, 943, 944, 273, 944, 945, 272, 945, 1346 271, 269, 268, 945, 946, 263, 946, 947, 259, 947, 1347 258, 254, 251, 947, 948, 250, 948, 949, 239, 949, 1348 1349 238, 231, 230, 949, 950, 227, 950, 951, 217, 215, 1350 951, 214, 951, 951, 951, 951, 951, 952, 952, 952, 1351 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 1352 953, 213, 953, 207, 206, 204, 953, 954, 199, 954, 1353 955, 178, 955, 149, 147, 146, 955, 956, 140, 956, 1354 957, 138, 957, 136, 128, 125, 957, 958, 124, 958, 1355 959, 120, 959, 101, 98, 95, 959, 960, 93, 960, 1356 961, 86, 961, 72, 70, 66, 961, 962, 36, 962, 1357 963, 33, 963, 18, 11, 4, 963, 964, 3, 964, 1358 965, 0, 965, 0, 0, 0, 965, 966, 0, 966, 1359 1360 0, 0, 0, 966, 967, 0, 967, 968, 0, 968, 1361 0, 0, 0, 968, 969, 0, 969, 970, 0, 970, 1362 0, 970, 0, 970, 971, 0, 971, 0, 0, 0, 1363 971, 972, 0, 972, 0, 0, 0, 972, 973, 0, 1364 973, 974, 0, 974, 0, 0, 0, 974, 975, 0, 1365 975, 976, 0, 976, 0, 0, 0, 976, 977, 0, 1366 977, 978, 0, 978, 0, 0, 0, 978, 979, 0, 1367 979, 980, 0, 980, 0, 0, 0, 980, 981, 0, 1368 981, 982, 0, 982, 0, 0, 0, 982, 983, 0, 1369 983, 984, 0, 0, 984, 0, 984, 984, 984, 984, 1370 1371 984, 985, 985, 985, 985, 985, 985, 985, 985, 985, 1372 985, 985, 985, 985, 986, 0, 986, 0, 0, 0, 1115 5, 5, 5, 5, 5, 5, 5, 7, 8, 9, 1116 10, 37, 37, 20, 39, 9, 10, 874, 7, 8, 1117 13, 13, 13, 13, 13, 13, 15, 15, 15, 15, 1118 1119 15, 15, 20, 25, 39, 42, 53, 28, 27, 28, 1120 28, 28, 28, 28, 28, 108, 114, 25, 29, 25, 1121 27, 27, 27, 29, 53, 35, 7, 8, 9, 10, 1122 40, 42, 48, 29, 30, 40, 30, 30, 30, 30, 1123 30, 30, 35, 61, 35, 35, 44, 869, 44, 108, 1124 114, 868, 48, 30, 63, 61, 30, 56, 47, 45, 1125 45, 45, 30, 30, 45, 45, 56, 45, 30, 55, 1126 45, 45, 49, 40, 30, 45, 40, 49, 45, 47, 1127 30, 47, 72, 125, 49, 125, 51, 55, 30, 86, 1128 49, 30, 31, 55, 31, 31, 31, 31, 31, 31, 1129 1130 50, 51, 866, 51, 63, 153, 54, 58, 72, 50, 1131 60, 31, 51, 50, 31, 86, 54, 57, 50, 58, 1132 31, 153, 50, 54, 141, 156, 31, 58, 60, 57, 1133 57, 59, 31, 126, 58, 126, 59, 156, 31, 57, 1134 52, 865, 57, 67, 67, 52, 31, 38, 67, 59, 1135 141, 38, 38, 52, 38, 52, 38, 38, 52, 38, 1136 107, 38, 52, 113, 67, 67, 67, 67, 67, 67, 1137 38, 38, 38, 128, 59, 128, 152, 59, 66, 66, 1138 66, 66, 66, 66, 107, 152, 66, 113, 863, 862, 1139 38, 59, 165, 38, 79, 79, 79, 79, 79, 79, 1140 1141 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 1142 82, 82, 131, 165, 131, 103, 103, 103, 103, 106, 1143 38, 38, 76, 76, 856, 106, 112, 76, 168, 76, 1144 110, 133, 112, 133, 76, 102, 102, 102, 102, 102, 1145 102, 130, 103, 76, 76, 76, 76, 103, 110, 168, 1146 109, 106, 129, 130, 76, 130, 110, 104, 112, 104, 1147 104, 104, 104, 104, 104, 149, 129, 102, 129, 76, 1148 103, 136, 76, 136, 158, 115, 104, 76, 76, 109, 1149 149, 76, 76, 155, 109, 132, 132, 149, 132, 76, 1150 158, 104, 76, 115, 76, 76, 76, 104, 76, 84, 1151 1152 138, 115, 138, 84, 84, 155, 166, 109, 84, 84, 1153 105, 84, 105, 84, 150, 105, 105, 105, 105, 105, 1154 105, 151, 84, 84, 84, 134, 134, 134, 144, 166, 1155 154, 157, 150, 144, 159, 167, 157, 157, 157, 151, 1156 157, 157, 84, 161, 157, 84, 157, 105, 154, 160, 1157 163, 157, 157, 157, 162, 157, 159, 855, 160, 162, 1158 164, 169, 167, 170, 161, 161, 169, 163, 171, 172, 1159 164, 144, 162, 84, 98, 98, 98, 98, 98, 98, 1160 173, 174, 175, 171, 169, 170, 172, 179, 176, 185, 1161 98, 98, 178, 98, 98, 180, 189, 182, 173, 187, 1162 1163 180, 174, 185, 186, 179, 188, 98, 178, 181, 175, 1164 176, 98, 98, 98, 178, 182, 98, 183, 98, 181, 1165 184, 191, 190, 186, 188, 184, 187, 528, 183, 181, 1166 181, 192, 207, 207, 191, 190, 191, 207, 232, 189, 1167 184, 203, 189, 190, 192, 183, 195, 195, 195, 195, 1168 195, 195, 196, 196, 195, 528, 854, 196, 198, 198, 1169 216, 232, 216, 198, 200, 200, 217, 203, 217, 200, 1170 218, 200, 218, 196, 196, 196, 196, 196, 196, 198, 1171 198, 198, 198, 198, 198, 200, 200, 200, 200, 200, 1172 200, 210, 210, 210, 210, 219, 220, 221, 282, 221, 1173 1174 222, 222, 223, 222, 223, 224, 224, 224, 220, 219, 1175 220, 219, 226, 227, 226, 227, 234, 235, 282, 233, 1176 234, 233, 284, 210, 233, 233, 233, 233, 233, 233, 1177 241, 239, 239, 277, 239, 239, 264, 234, 264, 234, 1178 235, 265, 284, 265, 234, 242, 242, 242, 242, 242, 1179 242, 277, 239, 239, 239, 246, 233, 239, 278, 239, 1180 276, 280, 242, 279, 241, 243, 243, 243, 243, 243, 1181 243, 254, 268, 276, 853, 281, 278, 242, 280, 279, 1182 281, 246, 288, 242, 244, 244, 244, 244, 244, 244, 1183 253, 253, 253, 253, 253, 253, 251, 254, 268, 287, 1184 1185 244, 283, 286, 244, 244, 245, 283, 245, 288, 295, 1186 245, 245, 245, 245, 245, 245, 244, 287, 251, 849, 1187 251, 244, 253, 244, 251, 286, 244, 295, 244, 289, 1188 251, 258, 258, 258, 258, 258, 258, 285, 290, 292, 1189 291, 294, 251, 293, 289, 291, 251, 297, 292, 301, 1190 251, 299, 285, 303, 290, 290, 293, 298, 285, 285, 1191 299, 302, 298, 258, 300, 297, 307, 304, 294, 301, 1192 306, 300, 304, 305, 303, 303, 306, 308, 305, 302, 1193 310, 309, 311, 312, 313, 307, 308, 309, 314, 313, 1194 315, 311, 316, 314, 318, 315, 310, 317, 312, 320, 1195 1196 322, 321, 323, 324, 326, 325, 328, 318, 327, 329, 1197 320, 316, 315, 322, 330, 317, 321, 327, 333, 331, 1198 334, 326, 335, 337, 323, 325, 324, 333, 328, 336, 1199 338, 337, 329, 339, 381, 338, 330, 331, 340, 340, 1200 335, 341, 336, 340, 358, 340, 358, 341, 339, 348, 1201 348, 348, 348, 349, 349, 349, 349, 359, 381, 359, 1202 397, 846, 402, 334, 366, 366, 366, 366, 366, 366, 1203 368, 397, 368, 402, 404, 368, 368, 368, 368, 368, 1204 368, 348, 367, 367, 367, 367, 367, 367, 370, 370, 1205 370, 370, 370, 370, 400, 398, 404, 435, 367, 376, 1206 1207 843, 367, 367, 371, 371, 371, 371, 371, 371, 376, 1208 379, 398, 377, 400, 367, 378, 379, 435, 383, 367, 1209 370, 367, 377, 412, 367, 376, 367, 372, 372, 372, 1210 372, 372, 372, 399, 382, 371, 383, 378, 377, 378, 1211 415, 412, 379, 378, 383, 380, 415, 380, 399, 378, 1212 380, 380, 380, 380, 380, 380, 382, 401, 382, 372, 1213 407, 378, 382, 403, 405, 378, 401, 408, 382, 378, 1214 406, 411, 403, 405, 409, 410, 407, 416, 418, 414, 1215 382, 413, 380, 406, 382, 417, 413, 409, 382, 408, 1216 419, 410, 410, 411, 414, 421, 417, 418, 416, 423, 1217 1218 425, 414, 426, 427, 428, 419, 431, 429, 430, 421, 1219 433, 423, 427, 429, 436, 431, 427, 437, 438, 439, 1220 441, 425, 440, 430, 426, 433, 443, 428, 445, 441, 1221 447, 446, 437, 448, 439, 449, 436, 450, 451, 455, 1222 438, 452, 440, 443, 457, 633, 450, 460, 453, 458, 1223 447, 445, 446, 448, 452, 453, 451, 449, 454, 456, 1224 458, 457, 461, 633, 455, 454, 462, 456, 515, 460, 1225 488, 461, 462, 471, 471, 471, 471, 456, 482, 482, 1226 482, 482, 482, 482, 484, 484, 484, 484, 484, 484, 1227 515, 513, 485, 487, 482, 489, 488, 482, 482, 486, 1228 1229 510, 486, 485, 487, 486, 486, 486, 486, 486, 486, 1230 482, 513, 509, 510, 520, 482, 484, 482, 485, 487, 1231 482, 489, 482, 491, 491, 491, 491, 491, 491, 509, 1232 512, 514, 519, 516, 520, 519, 486, 492, 492, 492, 1233 492, 492, 492, 517, 514, 512, 516, 521, 517, 525, 1234 518, 522, 523, 492, 525, 842, 492, 492, 493, 841, 1235 493, 518, 521, 493, 493, 493, 493, 493, 493, 492, 1236 522, 524, 526, 523, 492, 527, 492, 529, 530, 492, 1237 524, 492, 531, 526, 532, 533, 529, 536, 527, 535, 1238 533, 538, 539, 532, 542, 535, 536, 540, 541, 531, 1239 1240 530, 544, 545, 542, 546, 547, 549, 554, 556, 539, 1241 544, 561, 540, 541, 555, 552, 546, 538, 550, 545, 1242 547, 549, 553, 550, 552, 556, 558, 555, 559, 554, 1243 560, 553, 562, 561, 558, 563, 564, 560, 559, 565, 1244 567, 563, 568, 613, 562, 564, 612, 617, 594, 565, 1245 596, 698, 613, 612, 617, 568, 698, 567, 587, 587, 1246 587, 587, 587, 587, 588, 588, 588, 588, 588, 588, 1247 590, 594, 590, 596, 614, 590, 590, 590, 590, 590, 1248 590, 593, 593, 593, 593, 593, 593, 614, 615, 616, 1249 587, 589, 589, 589, 589, 589, 589, 595, 611, 622, 1250 1251 618, 595, 619, 611, 621, 615, 620, 589, 618, 620, 1252 589, 589, 616, 593, 623, 624, 611, 621, 595, 619, 1253 595, 622, 625, 589, 626, 595, 628, 629, 589, 623, 1254 589, 627, 630, 589, 627, 589, 631, 624, 634, 625, 1255 632, 635, 637, 628, 638, 644, 626, 630, 639, 632, 1256 635, 645, 640, 650, 629, 647, 631, 696, 693, 651, 1257 634, 640, 650, 659, 637, 644, 651, 638, 658, 662, 1258 639, 661, 647, 659, 697, 840, 839, 658, 645, 693, 1259 661, 697, 699, 696, 662, 680, 680, 680, 680, 680, 1260 680, 684, 684, 684, 684, 684, 684, 694, 702, 705, 1261 1262 700, 680, 699, 700, 680, 680, 701, 694, 704, 701, 1263 706, 708, 705, 709, 704, 707, 702, 680, 707, 706, 1264 712, 711, 680, 684, 680, 710, 714, 680, 710, 680, 1265 711, 713, 708, 718, 713, 715, 716, 717, 720, 714, 1266 723, 709, 726, 715, 727, 712, 716, 720, 728, 730, 1267 717, 731, 752, 751, 718, 753, 749, 730, 751, 754, 1268 731, 750, 726, 723, 755, 753, 727, 752, 756, 728, 1269 738, 738, 738, 738, 738, 738, 749, 757, 750, 758, 1270 757, 755, 754, 759, 761, 763, 764, 761, 763, 767, 1271 768, 773, 758, 764, 756, 765, 766, 788, 765, 766, 1272 1273 790, 791, 738, 792, 767, 793, 792, 797, 794, 795, 1274 759, 794, 795, 768, 773, 798, 801, 799, 805, 791, 1275 799, 790, 821, 802, 788, 797, 802, 793, 803, 806, 1276 804, 803, 824, 823, 805, 822, 823, 825, 801, 804, 1277 798, 824, 822, 821, 826, 806, 827, 826, 830, 833, 1278 834, 830, 833, 835, 847, 825, 844, 847, 848, 834, 1279 857, 845, 835, 827, 850, 844, 845, 850, 848, 851, 1280 852, 858, 851, 852, 859, 860, 861, 859, 864, 861, 1281 857, 867, 870, 871, 873, 860, 858, 838, 872, 837, 1282 836, 870, 832, 831, 873, 829, 828, 820, 819, 818, 1283 1284 864, 817, 867, 816, 815, 871, 872, 876, 876, 876, 1285 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 1286 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 1287 877, 877, 877, 878, 878, 878, 878, 878, 878, 878, 1288 878, 878, 878, 878, 878, 878, 879, 814, 813, 879, 1289 812, 879, 879, 879, 879, 879, 880, 811, 810, 809, 1290 880, 880, 880, 880, 880, 880, 881, 881, 881, 881, 1291 881, 881, 881, 881, 881, 881, 881, 881, 881, 882, 1292 808, 807, 882, 800, 882, 882, 882, 882, 882, 883, 1293 796, 883, 883, 789, 883, 883, 883, 883, 883, 883, 1294 1295 787, 883, 884, 786, 785, 884, 884, 884, 884, 884, 1296 884, 884, 884, 784, 884, 885, 885, 885, 885, 885, 1297 885, 885, 885, 885, 885, 885, 885, 885, 886, 886, 1298 783, 886, 782, 781, 780, 886, 887, 779, 778, 887, 1299 777, 887, 887, 887, 887, 887, 888, 776, 888, 775, 1300 774, 772, 888, 889, 771, 889, 770, 769, 762, 889, 1301 890, 760, 890, 748, 747, 746, 890, 891, 745, 891, 1302 744, 743, 742, 891, 892, 741, 892, 740, 737, 736, 1303 892, 893, 735, 893, 729, 725, 724, 893, 894, 722, 1304 894, 721, 719, 703, 894, 895, 695, 895, 692, 687, 1305 1306 685, 895, 896, 681, 896, 671, 667, 665, 896, 897, 1307 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 1308 897, 897, 898, 663, 898, 899, 899, 660, 899, 899, 1309 899, 657, 899, 900, 900, 656, 900, 901, 655, 901, 1310 654, 653, 652, 901, 902, 649, 902, 648, 646, 643, 1311 902, 903, 642, 903, 641, 636, 609, 903, 904, 605, 1312 904, 905, 603, 905, 601, 599, 597, 905, 906, 591, 1313 906, 907, 585, 583, 907, 581, 907, 907, 907, 907, 1314 907, 908, 908, 908, 908, 908, 908, 908, 908, 908, 1315 908, 908, 908, 908, 909, 909, 909, 909, 909, 909, 1316 1317 909, 909, 909, 909, 909, 909, 909, 910, 579, 910, 1318 577, 575, 573, 910, 911, 571, 911, 570, 569, 566, 1319 911, 912, 557, 912, 551, 548, 543, 912, 913, 537, 1320 913, 914, 534, 914, 511, 507, 505, 914, 915, 503, 1321 915, 916, 501, 916, 499, 497, 496, 916, 917, 495, 1322 917, 918, 494, 918, 483, 480, 478, 918, 919, 477, 1323 919, 920, 476, 920, 474, 472, 469, 920, 921, 467, 1324 921, 922, 465, 922, 463, 459, 444, 922, 923, 442, 1325 923, 924, 434, 924, 432, 424, 422, 924, 925, 420, 1326 925, 926, 394, 926, 392, 926, 390, 926, 927, 388, 1327 1328 927, 387, 927, 386, 927, 928, 928, 373, 928, 928, 1329 928, 363, 928, 929, 361, 929, 360, 356, 354, 929, 1330 930, 352, 930, 350, 346, 344, 930, 931, 343, 931, 1331 342, 332, 319, 931, 932, 296, 932, 933, 275, 933, 1332 273, 271, 270, 933, 934, 269, 934, 935, 267, 935, 1333 266, 261, 257, 935, 936, 256, 936, 937, 252, 937, 1334 249, 248, 237, 937, 938, 236, 938, 939, 229, 228, 1335 939, 225, 939, 939, 939, 939, 939, 940, 940, 940, 1336 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 1337 941, 215, 941, 213, 212, 211, 941, 942, 205, 942, 1338 1339 943, 204, 943, 202, 197, 177, 943, 944, 148, 944, 1340 945, 146, 945, 145, 139, 137, 945, 946, 135, 946, 1341 947, 127, 947, 124, 123, 119, 947, 948, 100, 948, 1342 949, 97, 949, 94, 92, 85, 949, 950, 71, 950, 1343 951, 69, 951, 65, 36, 33, 951, 952, 18, 952, 1344 953, 11, 953, 4, 3, 0, 953, 954, 0, 954, 1345 0, 0, 0, 954, 955, 0, 955, 956, 0, 956, 1346 0, 0, 0, 956, 957, 0, 957, 958, 0, 958, 1347 0, 958, 0, 958, 959, 0, 959, 0, 0, 0, 1348 959, 960, 0, 960, 0, 0, 0, 960, 961, 0, 1349 1350 961, 962, 0, 962, 0, 0, 0, 962, 963, 0, 1351 963, 964, 0, 964, 0, 0, 0, 964, 965, 0, 1352 965, 966, 0, 966, 0, 0, 0, 966, 967, 0, 1353 967, 968, 0, 968, 0, 0, 0, 968, 969, 0, 1354 969, 970, 0, 970, 0, 0, 0, 970, 971, 0, 1355 971, 972, 0, 0, 972, 0, 972, 972, 972, 972, 1356 972, 973, 973, 973, 973, 973, 973, 973, 973, 973, 1357 973, 973, 973, 973, 974, 0, 974, 0, 0, 0, 1358 974, 975, 0, 975, 976, 0, 976, 0, 0, 0, 1359 976, 977, 0, 977, 978, 0, 978, 0, 0, 0, 1360 1361 978, 979, 0, 979, 980, 0, 980, 0, 0, 0, 1362 980, 981, 0, 981, 982, 0, 982, 0, 0, 0, 1363 982, 983, 0, 983, 984, 0, 984, 0, 0, 0, 1364 984, 985, 0, 985, 986, 0, 986, 0, 0, 0, 1373 1365 986, 987, 0, 987, 988, 0, 988, 0, 0, 0, 1374 1366 988, 989, 0, 989, 990, 0, 990, 0, 0, 0, 1375 990, 991, 0, 991, 992, 0, 992, 0, 0, 0, 1376 992, 993, 0, 993, 994, 0, 994, 0, 0, 0, 1377 994, 995, 0, 995, 996, 0, 996, 0, 0, 0, 1378 996, 997, 0, 997, 998, 0, 998, 0, 0, 0, 1379 998, 999, 0, 999, 1000, 0, 1000, 0, 0, 0, 1380 1000, 1001, 0, 1001, 1002, 0, 1002, 0, 0, 0, 1381 1382 1002, 1003, 0, 1003, 0, 0, 0, 1003, 1004, 0, 1383 1004, 1005, 0, 1005, 0, 0, 0, 1005, 1006, 0, 1384 1006, 1007, 0, 1007, 0, 0, 0, 1007, 1008, 0, 1385 1008, 1009, 0, 1009, 0, 0, 0, 1009, 1010, 0, 1386 1010, 1011, 0, 1011, 1012, 0, 1012, 1013, 0, 0, 1387 1013, 0, 1013, 1013, 1013, 1013, 1013, 1014, 0, 1014, 1388 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1389 1015, 1015, 1015, 1016, 0, 1016, 0, 0, 0, 1016, 1390 1017, 0, 1017, 1018, 0, 1018, 0, 0, 0, 1018, 1391 1019, 0, 1019, 1020, 0, 1020, 1021, 0, 1021, 1022, 1392 1393 0, 0, 1022, 0, 1022, 1022, 1022, 1022, 1022, 1023, 1394 0, 1023, 1024, 0, 1024, 1025, 0, 1025, 1026, 0, 1395 1026, 1027, 0, 1027, 1028, 0, 1028, 1029, 0, 1029, 1396 1030, 0, 1030, 0, 0, 0, 1030, 1031, 0, 1031, 1397 1032, 0, 1032, 0, 0, 0, 1032, 1033, 0, 1033, 1398 1034, 0, 1034, 1035, 0, 1035, 1036, 0, 1036, 1037, 1399 0, 1037, 0, 0, 0, 1037, 1038, 0, 0, 1038, 1400 0, 1038, 1038, 1038, 1038, 1038, 1039, 0, 1039, 1040, 1401 0, 1040, 1041, 0, 1041, 1042, 0, 1042, 0, 0, 1367 990, 991, 0, 991, 0, 0, 0, 991, 992, 0, 1368 992, 993, 0, 993, 0, 0, 0, 993, 994, 0, 1369 994, 995, 0, 995, 0, 0, 0, 995, 996, 0, 1370 996, 997, 0, 997, 0, 0, 0, 997, 998, 0, 1371 1372 998, 999, 0, 999, 1000, 0, 1000, 1001, 0, 0, 1373 1001, 0, 1001, 1001, 1001, 1001, 1001, 1002, 0, 1002, 1374 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1375 1003, 1003, 1003, 1004, 0, 1004, 0, 0, 0, 1004, 1376 1005, 0, 1005, 1006, 0, 1006, 0, 0, 0, 1006, 1377 1007, 0, 1007, 1008, 0, 1008, 1009, 0, 1009, 1010, 1378 0, 0, 1010, 0, 1010, 1010, 1010, 1010, 1010, 1011, 1379 0, 1011, 1012, 0, 1012, 1013, 0, 1013, 1014, 0, 1380 1014, 1015, 0, 1015, 1016, 0, 1016, 1017, 0, 1017, 1381 1018, 0, 1018, 0, 0, 0, 1018, 1019, 0, 1019, 1382 1383 1020, 0, 1020, 0, 0, 0, 1020, 1021, 0, 1021, 1384 1022, 0, 1022, 1023, 0, 1023, 1024, 0, 1024, 1025, 1385 0, 1025, 0, 0, 0, 1025, 1026, 0, 0, 1026, 1386 0, 1026, 1026, 1026, 1026, 1026, 1027, 0, 1027, 1028, 1387 0, 1028, 1029, 0, 1029, 1030, 0, 1030, 0, 0, 1388 0, 1030, 1031, 0, 1031, 0, 0, 0, 1031, 1032, 1389 0, 1032, 0, 0, 0, 1032, 1033, 0, 1033, 1034, 1390 0, 1034, 0, 0, 0, 1034, 1035, 0, 1035, 0, 1391 0, 0, 1035, 1036, 0, 1036, 0, 0, 0, 1036, 1392 1037, 0, 1037, 0, 0, 0, 1037, 1038, 0, 1038, 1393 1394 0, 0, 0, 1038, 1039, 0, 1039, 0, 0, 0, 1395 1039, 1040, 0, 1040, 0, 0, 0, 1040, 1041, 0, 1396 1041, 0, 0, 0, 1041, 1042, 0, 1042, 0, 0, 1402 1397 0, 1042, 1043, 0, 1043, 0, 0, 0, 1043, 1044, 1403 1404 0, 1044, 0, 0, 0, 1044, 1045, 0, 1045, 1046, 1405 0, 1046, 0, 0, 0, 1046, 1047, 0, 1047, 0, 1406 0, 0, 1047, 1048, 0, 1048, 0, 0, 0, 1048, 1407 1049, 0, 1049, 0, 0, 0, 1049, 1050, 0, 1050, 1408 0, 0, 0, 1050, 1051, 0, 1051, 0, 0, 0, 1409 1051, 1052, 0, 1052, 0, 0, 0, 1052, 1053, 0, 1410 1053, 0, 0, 0, 1053, 1054, 0, 1054, 0, 0, 1411 0, 1054, 1055, 0, 1055, 0, 0, 0, 1055, 1056, 1412 0, 1056, 0, 0, 0, 1056, 1057, 0, 1057, 0, 1413 0, 0, 1057, 1058, 0, 1058, 0, 0, 0, 1058, 1414 1415 1059, 0, 1059, 0, 0, 0, 1059, 1060, 0, 1060, 1416 0, 0, 0, 1060, 1061, 0, 1061, 0, 0, 0, 1417 1061, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1418 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1419 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1420 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1421 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1422 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1423 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1424 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 1425 1426 887, 887, 887, 887, 887, 887, 887 1398 0, 1044, 0, 0, 0, 1044, 1045, 0, 1045, 0, 1399 0, 0, 1045, 1046, 0, 1046, 0, 0, 0, 1046, 1400 1047, 0, 1047, 0, 0, 0, 1047, 1048, 0, 1048, 1401 0, 0, 0, 1048, 1049, 0, 1049, 0, 0, 0, 1402 1049, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1403 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1404 1405 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1406 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1407 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1408 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1409 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1410 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 1411 875, 875, 875, 875, 875, 875 1427 1412 } ; 1428 1413 1429 1414 /* Table of booleans, true if rule could match eol. */ 1430 static yyconst flex_int32_t yy_rule_can_match_eol[18 1] =1415 static yyconst flex_int32_t yy_rule_can_match_eol[180] = 1431 1416 { 0, 1432 1417 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, … … 1435 1420 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1436 1421 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1437 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,1438 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1422 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1423 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1439 1424 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1440 1425 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1441 0,};1426 }; 1442 1427 1443 1428 static yy_state_type yy_last_accepting_state; … … 1467 1452 * Created On : Sat Sep 22 08:58:10 2001 1468 1453 * Last Modified By : Peter A. Buhr 1469 * Last Modified On : Mon Mar 21 23:33:4620161470 * Update Count : 4 501454 * Last Modified On : Tue Feb 2 15:06:54 2016 1455 * Update Count : 426 1471 1456 */ 1472 1457 #line 20 "lex.ll" … … 1480 1465 1481 1466 #include "lex.h" 1467 #include "ParseNode.h" 1482 1468 #include "parser.h" // YACC generated definitions based on C++ grammar 1483 #include "ParseNode.h"1484 #include "TypedefTable.h"1485 1469 1486 1470 char *yyfilename; … … 1498 1482 #define NUMERIC_RETURN(x) rm_underscore(); RETURN_VAL( x ) // numeric constant 1499 1483 #define KEYWORD_RETURN(x) RETURN_CHAR( x ) // keyword 1500 #define IDENTIFIER_RETURN() RETURN_VAL( typedefTable.isKind( yytext) )1484 #define IDENTIFIER_RETURN() RETURN_VAL( (typedefTable.isIdentifier( yytext ) ? IDENTIFIER : typedefTable.isTypedef( yytext ) ? TYPEDEFname : TYPEGENname ) ) 1501 1485 #define ATTRIBUTE_RETURN() RETURN_VAL( ATTR_IDENTIFIER ) 1502 1486 … … 1518 1502 // attribute identifier, GCC: $ in identifier 1519 1503 // numeric constants, CFA: '_' in constant 1520 // GCC: D (double), DL (long double) and iI (imaginary) suffixes 1521 //floating_suffix "_"?([fFdD]|[lL]|[D][L])|([iI][lLfFdD])|([lLfFdD][iI])) 1504 // GCC: D (double), LD (long double) and iI (imaginary) suffixes 1522 1505 // character escape sequence, GCC: \e => esc character 1523 1506 // ' stop highlighting … … 1528 1511 1529 1512 1530 #line 15 31"Parser/lex.cc"1513 #line 1514 "Parser/lex.cc" 1531 1514 1532 1515 #define INITIAL 0 … … 1720 1703 register int yy_act; 1721 1704 1722 #line 13 9"lex.ll"1705 #line 137 "lex.ll" 1723 1706 1724 1707 /* line directives */ 1725 #line 17 26"Parser/lex.cc"1708 #line 1709 "Parser/lex.cc" 1726 1709 1727 1710 if ( !(yy_init) ) … … 1777 1760 { 1778 1761 yy_current_state = (int) yy_def[yy_current_state]; 1779 if ( yy_current_state >= 8 88)1762 if ( yy_current_state >= 876 ) 1780 1763 yy_c = yy_meta[(unsigned int) yy_c]; 1781 1764 } … … 1783 1766 ++yy_cp; 1784 1767 } 1785 while ( yy_base[yy_current_state] != 2 822 );1768 while ( yy_base[yy_current_state] != 2782 ); 1786 1769 1787 1770 yy_find_action: … … 1820 1803 /* rule 1 can match eol */ 1821 1804 YY_RULE_SETUP 1822 #line 1 41"lex.ll"1805 #line 139 "lex.ll" 1823 1806 { 1824 1807 /* " stop highlighting */ … … 1847 1830 /* rule 2 can match eol */ 1848 1831 YY_RULE_SETUP 1849 #line 16 4"lex.ll"1832 #line 162 "lex.ll" 1850 1833 ; 1851 1834 YY_BREAK … … 1853 1836 case 3: 1854 1837 YY_RULE_SETUP 1855 #line 16 7"lex.ll"1838 #line 165 "lex.ll" 1856 1839 { BEGIN COMMENT; } 1857 1840 YY_BREAK … … 1859 1842 /* rule 4 can match eol */ 1860 1843 YY_RULE_SETUP 1861 #line 16 8"lex.ll"1844 #line 166 "lex.ll" 1862 1845 ; 1863 1846 YY_BREAK 1864 1847 case 5: 1865 1848 YY_RULE_SETUP 1866 #line 16 9"lex.ll"1849 #line 167 "lex.ll" 1867 1850 { BEGIN 0; } 1868 1851 YY_BREAK … … 1871 1854 /* rule 6 can match eol */ 1872 1855 YY_RULE_SETUP 1873 #line 17 2"lex.ll"1856 #line 170 "lex.ll" 1874 1857 ; 1875 1858 YY_BREAK … … 1877 1860 case 7: 1878 1861 YY_RULE_SETUP 1879 #line 17 5"lex.ll"1862 #line 173 "lex.ll" 1880 1863 { WHITE_RETURN(' '); } 1881 1864 YY_BREAK 1882 1865 case 8: 1883 1866 YY_RULE_SETUP 1884 #line 17 6"lex.ll"1867 #line 174 "lex.ll" 1885 1868 { WHITE_RETURN(' '); } 1886 1869 YY_BREAK … … 1888 1871 /* rule 9 can match eol */ 1889 1872 YY_RULE_SETUP 1890 #line 17 7"lex.ll"1873 #line 175 "lex.ll" 1891 1874 { NEWLINE_RETURN(); } 1892 1875 YY_BREAK … … 1894 1877 case 10: 1895 1878 YY_RULE_SETUP 1879 #line 178 "lex.ll" 1880 { KEYWORD_RETURN(ALIGNAS); } // C11 1881 YY_BREAK 1882 case 11: 1883 YY_RULE_SETUP 1884 #line 179 "lex.ll" 1885 { KEYWORD_RETURN(ALIGNOF); } // C11 1886 YY_BREAK 1887 case 12: 1888 YY_RULE_SETUP 1896 1889 #line 180 "lex.ll" 1897 { KEYWORD_RETURN(ALIGN AS); } // C111898 YY_BREAK 1899 case 1 1:1890 { KEYWORD_RETURN(ALIGNOF); } // GCC 1891 YY_BREAK 1892 case 13: 1900 1893 YY_RULE_SETUP 1901 1894 #line 181 "lex.ll" 1902 { KEYWORD_RETURN(ALIGNOF); } // C111903 YY_BREAK 1904 case 1 2:1895 { KEYWORD_RETURN(ALIGNOF); } // GCC 1896 YY_BREAK 1897 case 14: 1905 1898 YY_RULE_SETUP 1906 1899 #line 182 "lex.ll" 1907 { KEYWORD_RETURN(A LIGNOF); } // GCC1908 YY_BREAK 1909 case 1 3:1900 { KEYWORD_RETURN(ASM); } 1901 YY_BREAK 1902 case 15: 1910 1903 YY_RULE_SETUP 1911 1904 #line 183 "lex.ll" 1912 { KEYWORD_RETURN(A LIGNOF); }// GCC1913 YY_BREAK 1914 case 1 4:1905 { KEYWORD_RETURN(ASM); } // GCC 1906 YY_BREAK 1907 case 16: 1915 1908 YY_RULE_SETUP 1916 1909 #line 184 "lex.ll" 1917 { KEYWORD_RETURN(ASM); } 1918 YY_BREAK 1919 case 1 5:1910 { KEYWORD_RETURN(ASM); } // GCC 1911 YY_BREAK 1912 case 17: 1920 1913 YY_RULE_SETUP 1921 1914 #line 185 "lex.ll" 1922 { KEYWORD_RETURN(A SM); } // GCC1923 YY_BREAK 1924 case 1 6:1915 { KEYWORD_RETURN(AT); } // CFA 1916 YY_BREAK 1917 case 18: 1925 1918 YY_RULE_SETUP 1926 1919 #line 186 "lex.ll" 1927 { KEYWORD_RETURN(A SM); } // GCC1928 YY_BREAK 1929 case 1 7:1920 { KEYWORD_RETURN(ATOMIC); } // C11 1921 YY_BREAK 1922 case 19: 1930 1923 YY_RULE_SETUP 1931 1924 #line 187 "lex.ll" 1932 { KEYWORD_RETURN(AT ); } // CFA1933 YY_BREAK 1934 case 18:1925 { KEYWORD_RETURN(ATTRIBUTE); } // GCC 1926 YY_BREAK 1927 case 20: 1935 1928 YY_RULE_SETUP 1936 1929 #line 188 "lex.ll" 1937 { KEYWORD_RETURN(AT OMIC); } // C111938 YY_BREAK 1939 case 19:1930 { KEYWORD_RETURN(ATTRIBUTE); } // GCC 1931 YY_BREAK 1932 case 21: 1940 1933 YY_RULE_SETUP 1941 1934 #line 189 "lex.ll" 1942 { KEYWORD_RETURN(A TTRIBUTE); } // GCC1943 YY_BREAK 1944 case 2 0:1935 { KEYWORD_RETURN(AUTO); } 1936 YY_BREAK 1937 case 22: 1945 1938 YY_RULE_SETUP 1946 1939 #line 190 "lex.ll" 1947 { KEYWORD_RETURN( ATTRIBUTE); } // GCC1948 YY_BREAK 1949 case 2 1:1940 { KEYWORD_RETURN(BOOL); } // C99 1941 YY_BREAK 1942 case 23: 1950 1943 YY_RULE_SETUP 1951 1944 #line 191 "lex.ll" 1952 { KEYWORD_RETURN( AUTO); }1953 YY_BREAK 1954 case 2 2:1945 { KEYWORD_RETURN(BREAK); } 1946 YY_BREAK 1947 case 24: 1955 1948 YY_RULE_SETUP 1956 1949 #line 192 "lex.ll" 1957 { KEYWORD_RETURN( BOOL); } // C991958 YY_BREAK 1959 case 2 3:1950 { KEYWORD_RETURN(CASE); } 1951 YY_BREAK 1952 case 25: 1960 1953 YY_RULE_SETUP 1961 1954 #line 193 "lex.ll" 1962 { KEYWORD_RETURN( BREAK); }1963 YY_BREAK 1964 case 2 4:1955 { KEYWORD_RETURN(CATCH); } // CFA 1956 YY_BREAK 1957 case 26: 1965 1958 YY_RULE_SETUP 1966 1959 #line 194 "lex.ll" 1967 { KEYWORD_RETURN(CA SE); }1968 YY_BREAK 1969 case 2 5:1960 { KEYWORD_RETURN(CATCHRESUME); } // CFA 1961 YY_BREAK 1962 case 27: 1970 1963 YY_RULE_SETUP 1971 1964 #line 195 "lex.ll" 1972 { KEYWORD_RETURN(C ATCH); } // CFA1973 YY_BREAK 1974 case 2 6:1965 { KEYWORD_RETURN(CHAR); } 1966 YY_BREAK 1967 case 28: 1975 1968 YY_RULE_SETUP 1976 1969 #line 196 "lex.ll" 1977 { KEYWORD_RETURN(C ATCHRESUME); }// CFA1978 YY_BREAK 1979 case 2 7:1970 { KEYWORD_RETURN(CHOOSE); } // CFA 1971 YY_BREAK 1972 case 29: 1980 1973 YY_RULE_SETUP 1981 1974 #line 197 "lex.ll" 1982 { KEYWORD_RETURN(C HAR); }1983 YY_BREAK 1984 case 28:1975 { KEYWORD_RETURN(COMPLEX); } // C99 1976 YY_BREAK 1977 case 30: 1985 1978 YY_RULE_SETUP 1986 1979 #line 198 "lex.ll" 1987 { KEYWORD_RETURN(C HOOSE); } // CFA1988 YY_BREAK 1989 case 29:1980 { KEYWORD_RETURN(COMPLEX); } // GCC 1981 YY_BREAK 1982 case 31: 1990 1983 YY_RULE_SETUP 1991 1984 #line 199 "lex.ll" 1992 { KEYWORD_RETURN(COMPLEX); } // C991993 YY_BREAK 1994 case 3 0:1985 { KEYWORD_RETURN(COMPLEX); } // GCC 1986 YY_BREAK 1987 case 32: 1995 1988 YY_RULE_SETUP 1996 1989 #line 200 "lex.ll" 1997 { KEYWORD_RETURN(CO MPLEX); } // GCC1998 YY_BREAK 1999 case 3 1:1990 { KEYWORD_RETURN(CONST); } 1991 YY_BREAK 1992 case 33: 2000 1993 YY_RULE_SETUP 2001 1994 #line 201 "lex.ll" 2002 { KEYWORD_RETURN(CO MPLEX); }// GCC2003 YY_BREAK 2004 case 3 2:1995 { KEYWORD_RETURN(CONST); } // GCC 1996 YY_BREAK 1997 case 34: 2005 1998 YY_RULE_SETUP 2006 1999 #line 202 "lex.ll" 2007 { KEYWORD_RETURN(CONST); } 2008 YY_BREAK 2009 case 3 3:2000 { KEYWORD_RETURN(CONST); } // GCC 2001 YY_BREAK 2002 case 35: 2010 2003 YY_RULE_SETUP 2011 2004 #line 203 "lex.ll" 2012 { KEYWORD_RETURN(CON ST); } // GCC2013 YY_BREAK 2014 case 3 4:2005 { KEYWORD_RETURN(CONTEXT); } // CFA 2006 YY_BREAK 2007 case 36: 2015 2008 YY_RULE_SETUP 2016 2009 #line 204 "lex.ll" 2017 { KEYWORD_RETURN(CON ST); } // GCC2018 YY_BREAK 2019 case 3 5:2010 { KEYWORD_RETURN(CONTINUE); } 2011 YY_BREAK 2012 case 37: 2020 2013 YY_RULE_SETUP 2021 2014 #line 205 "lex.ll" 2022 { KEYWORD_RETURN( CONTINUE); }2023 YY_BREAK 2024 case 3 6:2015 { KEYWORD_RETURN(DEFAULT); } 2016 YY_BREAK 2017 case 38: 2025 2018 YY_RULE_SETUP 2026 2019 #line 206 "lex.ll" 2027 { KEYWORD_RETURN(D EFAULT); }2028 YY_BREAK 2029 case 3 7:2020 { KEYWORD_RETURN(DISABLE); } // CFA 2021 YY_BREAK 2022 case 39: 2030 2023 YY_RULE_SETUP 2031 2024 #line 207 "lex.ll" 2032 { KEYWORD_RETURN(D ISABLE); } // CFA2033 YY_BREAK 2034 case 38:2025 { KEYWORD_RETURN(DO); } 2026 YY_BREAK 2027 case 40: 2035 2028 YY_RULE_SETUP 2036 2029 #line 208 "lex.ll" 2037 { KEYWORD_RETURN(DO ); }2038 YY_BREAK 2039 case 39:2030 { KEYWORD_RETURN(DOUBLE); } 2031 YY_BREAK 2032 case 41: 2040 2033 YY_RULE_SETUP 2041 2034 #line 209 "lex.ll" 2042 { KEYWORD_RETURN(D OUBLE); }2043 YY_BREAK 2044 case 4 0:2035 { KEYWORD_RETURN(DTYPE); } // CFA 2036 YY_BREAK 2037 case 42: 2045 2038 YY_RULE_SETUP 2046 2039 #line 210 "lex.ll" 2047 { KEYWORD_RETURN( DTYPE); } // CFA2048 YY_BREAK 2049 case 4 1:2040 { KEYWORD_RETURN(ELSE); } 2041 YY_BREAK 2042 case 43: 2050 2043 YY_RULE_SETUP 2051 2044 #line 211 "lex.ll" 2052 { KEYWORD_RETURN(E LSE); }2053 YY_BREAK 2054 case 4 2:2045 { KEYWORD_RETURN(ENABLE); } // CFA 2046 YY_BREAK 2047 case 44: 2055 2048 YY_RULE_SETUP 2056 2049 #line 212 "lex.ll" 2057 { KEYWORD_RETURN(EN ABLE); } // CFA2058 YY_BREAK 2059 case 4 3:2050 { KEYWORD_RETURN(ENUM); } 2051 YY_BREAK 2052 case 45: 2060 2053 YY_RULE_SETUP 2061 2054 #line 213 "lex.ll" 2062 { KEYWORD_RETURN(E NUM); }2063 YY_BREAK 2064 case 4 4:2055 { KEYWORD_RETURN(EXTENSION); } // GCC 2056 YY_BREAK 2057 case 46: 2065 2058 YY_RULE_SETUP 2066 2059 #line 214 "lex.ll" 2067 { KEYWORD_RETURN(EXTE NSION); } // GCC2068 YY_BREAK 2069 case 4 5:2060 { KEYWORD_RETURN(EXTERN); } 2061 YY_BREAK 2062 case 47: 2070 2063 YY_RULE_SETUP 2071 2064 #line 215 "lex.ll" 2072 { KEYWORD_RETURN( EXTERN); }2073 YY_BREAK 2074 case 4 6:2065 { KEYWORD_RETURN(FALLTHRU); } // CFA 2066 YY_BREAK 2067 case 48: 2075 2068 YY_RULE_SETUP 2076 2069 #line 216 "lex.ll" 2077 { KEYWORD_RETURN(F ALLTHRU); } // CFA2078 YY_BREAK 2079 case 4 7:2070 { KEYWORD_RETURN(FINALLY); } // CFA 2071 YY_BREAK 2072 case 49: 2080 2073 YY_RULE_SETUP 2081 2074 #line 217 "lex.ll" 2082 { KEYWORD_RETURN(F INALLY); } // CFA2083 YY_BREAK 2084 case 48:2075 { KEYWORD_RETURN(FLOAT); } 2076 YY_BREAK 2077 case 50: 2085 2078 YY_RULE_SETUP 2086 2079 #line 218 "lex.ll" 2087 { KEYWORD_RETURN(FLOAT); } 2088 YY_BREAK 2089 case 49:2080 { KEYWORD_RETURN(FLOAT); } // GCC 2081 YY_BREAK 2082 case 51: 2090 2083 YY_RULE_SETUP 2091 2084 #line 219 "lex.ll" 2092 { KEYWORD_RETURN(F LOAT); } // GCC2093 YY_BREAK 2094 case 5 0:2085 { KEYWORD_RETURN(FOR); } 2086 YY_BREAK 2087 case 52: 2095 2088 YY_RULE_SETUP 2096 2089 #line 220 "lex.ll" 2097 { KEYWORD_RETURN(FOR ); }2098 YY_BREAK 2099 case 5 1:2090 { KEYWORD_RETURN(FORALL); } // CFA 2091 YY_BREAK 2092 case 53: 2100 2093 YY_RULE_SETUP 2101 2094 #line 221 "lex.ll" 2102 { KEYWORD_RETURN(FOR ALL); } // CFA2103 YY_BREAK 2104 case 5 2:2095 { KEYWORD_RETURN(FORTRAN); } 2096 YY_BREAK 2097 case 54: 2105 2098 YY_RULE_SETUP 2106 2099 #line 222 "lex.ll" 2107 { KEYWORD_RETURN(F ORTRAN); }2108 YY_BREAK 2109 case 5 3:2100 { KEYWORD_RETURN(FTYPE); } // CFA 2101 YY_BREAK 2102 case 55: 2110 2103 YY_RULE_SETUP 2111 2104 #line 223 "lex.ll" 2112 { KEYWORD_RETURN( FTYPE); } // CFA2113 YY_BREAK 2114 case 5 4:2105 { KEYWORD_RETURN(GENERIC); } // C11 2106 YY_BREAK 2107 case 56: 2115 2108 YY_RULE_SETUP 2116 2109 #line 224 "lex.ll" 2117 { KEYWORD_RETURN(G ENERIC); } // C112118 YY_BREAK 2119 case 5 5:2110 { KEYWORD_RETURN(GOTO); } 2111 YY_BREAK 2112 case 57: 2120 2113 YY_RULE_SETUP 2121 2114 #line 225 "lex.ll" 2122 { KEYWORD_RETURN( GOTO); }2123 YY_BREAK 2124 case 5 6:2115 { KEYWORD_RETURN(IF); } 2116 YY_BREAK 2117 case 58: 2125 2118 YY_RULE_SETUP 2126 2119 #line 226 "lex.ll" 2127 { KEYWORD_RETURN(I F); }2128 YY_BREAK 2129 case 5 7:2120 { KEYWORD_RETURN(IMAGINARY); } // C99 2121 YY_BREAK 2122 case 59: 2130 2123 YY_RULE_SETUP 2131 2124 #line 227 "lex.ll" 2132 { KEYWORD_RETURN(IMAGINARY); } // C992133 YY_BREAK 2134 case 58:2125 { KEYWORD_RETURN(IMAGINARY); } // GCC 2126 YY_BREAK 2127 case 60: 2135 2128 YY_RULE_SETUP 2136 2129 #line 228 "lex.ll" 2137 2130 { KEYWORD_RETURN(IMAGINARY); } // GCC 2138 2131 YY_BREAK 2139 case 59:2132 case 61: 2140 2133 YY_RULE_SETUP 2141 2134 #line 229 "lex.ll" 2142 { KEYWORD_RETURN(I MAGINARY); } // GCC2143 YY_BREAK 2144 case 6 0:2135 { KEYWORD_RETURN(INLINE); } // C99 2136 YY_BREAK 2137 case 62: 2145 2138 YY_RULE_SETUP 2146 2139 #line 230 "lex.ll" 2147 { KEYWORD_RETURN(INLINE); } // C992148 YY_BREAK 2149 case 6 1:2140 { KEYWORD_RETURN(INLINE); } // GCC 2141 YY_BREAK 2142 case 63: 2150 2143 YY_RULE_SETUP 2151 2144 #line 231 "lex.ll" 2152 2145 { KEYWORD_RETURN(INLINE); } // GCC 2153 2146 YY_BREAK 2154 case 6 2:2147 case 64: 2155 2148 YY_RULE_SETUP 2156 2149 #line 232 "lex.ll" 2157 { KEYWORD_RETURN(IN LINE); } // GCC2158 YY_BREAK 2159 case 6 3:2150 { KEYWORD_RETURN(INT); } 2151 YY_BREAK 2152 case 65: 2160 2153 YY_RULE_SETUP 2161 2154 #line 233 "lex.ll" 2162 { KEYWORD_RETURN(INT); } 2163 YY_BREAK 2164 case 6 4:2155 { KEYWORD_RETURN(INT); } // GCC 2156 YY_BREAK 2157 case 66: 2165 2158 YY_RULE_SETUP 2166 2159 #line 234 "lex.ll" 2167 { KEYWORD_RETURN( INT); } // GCC2168 YY_BREAK 2169 case 6 5:2160 { KEYWORD_RETURN(LABEL); } // GCC 2161 YY_BREAK 2162 case 67: 2170 2163 YY_RULE_SETUP 2171 2164 #line 235 "lex.ll" 2172 { KEYWORD_RETURN(L ABEL); } // GCC2173 YY_BREAK 2174 case 6 6:2165 { KEYWORD_RETURN(LONG); } 2166 YY_BREAK 2167 case 68: 2175 2168 YY_RULE_SETUP 2176 2169 #line 236 "lex.ll" 2177 { KEYWORD_RETURN(L ONG); }2178 YY_BREAK 2179 case 6 7:2170 { KEYWORD_RETURN(LVALUE); } // CFA 2171 YY_BREAK 2172 case 69: 2180 2173 YY_RULE_SETUP 2181 2174 #line 237 "lex.ll" 2182 { KEYWORD_RETURN( LVALUE); } // CFA2183 YY_BREAK 2184 case 68:2175 { KEYWORD_RETURN(NORETURN); } // C11 2176 YY_BREAK 2177 case 70: 2185 2178 YY_RULE_SETUP 2186 2179 #line 238 "lex.ll" 2187 { KEYWORD_RETURN( NORETURN); } // C112188 YY_BREAK 2189 case 69:2180 { KEYWORD_RETURN(OFFSETOF); } // GCC 2181 YY_BREAK 2182 case 71: 2190 2183 YY_RULE_SETUP 2191 2184 #line 239 "lex.ll" 2192 { KEYWORD_RETURN( OFFSETOF); } // GCC2193 YY_BREAK 2194 case 7 0:2185 { KEYWORD_RETURN(REGISTER); } 2186 YY_BREAK 2187 case 72: 2195 2188 YY_RULE_SETUP 2196 2189 #line 240 "lex.ll" 2197 { KEYWORD_RETURN( OTYPE); } // CFA2198 YY_BREAK 2199 case 7 1:2190 { KEYWORD_RETURN(RESTRICT); } // C99 2191 YY_BREAK 2192 case 73: 2200 2193 YY_RULE_SETUP 2201 2194 #line 241 "lex.ll" 2202 { KEYWORD_RETURN(RE GISTER); }2203 YY_BREAK 2204 case 7 2:2195 { KEYWORD_RETURN(RESTRICT); } // GCC 2196 YY_BREAK 2197 case 74: 2205 2198 YY_RULE_SETUP 2206 2199 #line 242 "lex.ll" 2207 { KEYWORD_RETURN(RESTRICT); } // C992208 YY_BREAK 2209 case 7 3:2200 { KEYWORD_RETURN(RESTRICT); } // GCC 2201 YY_BREAK 2202 case 75: 2210 2203 YY_RULE_SETUP 2211 2204 #line 243 "lex.ll" 2212 { KEYWORD_RETURN(RE STRICT); } // GCC2213 YY_BREAK 2214 case 7 4:2205 { KEYWORD_RETURN(RETURN); } 2206 YY_BREAK 2207 case 76: 2215 2208 YY_RULE_SETUP 2216 2209 #line 244 "lex.ll" 2217 { KEYWORD_RETURN( RESTRICT); } // GCC2218 YY_BREAK 2219 case 7 5:2210 { KEYWORD_RETURN(SHORT); } 2211 YY_BREAK 2212 case 77: 2220 2213 YY_RULE_SETUP 2221 2214 #line 245 "lex.ll" 2222 { KEYWORD_RETURN( RETURN); }2223 YY_BREAK 2224 case 7 6:2215 { KEYWORD_RETURN(SIGNED); } 2216 YY_BREAK 2217 case 78: 2225 2218 YY_RULE_SETUP 2226 2219 #line 246 "lex.ll" 2227 { KEYWORD_RETURN(S HORT); }2228 YY_BREAK 2229 case 7 7:2220 { KEYWORD_RETURN(SIGNED); } // GCC 2221 YY_BREAK 2222 case 79: 2230 2223 YY_RULE_SETUP 2231 2224 #line 247 "lex.ll" 2232 { KEYWORD_RETURN(SIGNED); } 2233 YY_BREAK 2234 case 78:2225 { KEYWORD_RETURN(SIGNED); } // GCC 2226 YY_BREAK 2227 case 80: 2235 2228 YY_RULE_SETUP 2236 2229 #line 248 "lex.ll" 2237 { KEYWORD_RETURN(SI GNED); } // GCC2238 YY_BREAK 2239 case 79:2230 { KEYWORD_RETURN(SIZEOF); } 2231 YY_BREAK 2232 case 81: 2240 2233 YY_RULE_SETUP 2241 2234 #line 249 "lex.ll" 2242 { KEYWORD_RETURN(S IGNED); } // GCC2243 YY_BREAK 2244 case 8 0:2235 { KEYWORD_RETURN(STATIC); } 2236 YY_BREAK 2237 case 82: 2245 2238 YY_RULE_SETUP 2246 2239 #line 250 "lex.ll" 2247 { KEYWORD_RETURN(S IZEOF); }2248 YY_BREAK 2249 case 8 1:2240 { KEYWORD_RETURN(STATICASSERT); } // C11 2241 YY_BREAK 2242 case 83: 2250 2243 YY_RULE_SETUP 2251 2244 #line 251 "lex.ll" 2252 { KEYWORD_RETURN(ST ATIC); }2253 YY_BREAK 2254 case 8 2:2245 { KEYWORD_RETURN(STRUCT); } 2246 YY_BREAK 2247 case 84: 2255 2248 YY_RULE_SETUP 2256 2249 #line 252 "lex.ll" 2257 { KEYWORD_RETURN(S TATICASSERT); } // C112258 YY_BREAK 2259 case 8 3:2250 { KEYWORD_RETURN(SWITCH); } 2251 YY_BREAK 2252 case 85: 2260 2253 YY_RULE_SETUP 2261 2254 #line 253 "lex.ll" 2262 { KEYWORD_RETURN( STRUCT); }2263 YY_BREAK 2264 case 8 4:2255 { KEYWORD_RETURN(THREADLOCAL); } // C11 2256 YY_BREAK 2257 case 86: 2265 2258 YY_RULE_SETUP 2266 2259 #line 254 "lex.ll" 2267 { KEYWORD_RETURN( SWITCH); }2268 YY_BREAK 2269 case 8 5:2260 { KEYWORD_RETURN(THROW); } // CFA 2261 YY_BREAK 2262 case 87: 2270 2263 YY_RULE_SETUP 2271 2264 #line 255 "lex.ll" 2272 { KEYWORD_RETURN(THR EADLOCAL); } // C112273 YY_BREAK 2274 case 8 6:2265 { KEYWORD_RETURN(THROWRESUME); } // CFA 2266 YY_BREAK 2267 case 88: 2275 2268 YY_RULE_SETUP 2276 2269 #line 256 "lex.ll" 2277 { KEYWORD_RETURN(T HROW); } // CFA2278 YY_BREAK 2279 case 8 7:2270 { KEYWORD_RETURN(TRY); } // CFA 2271 YY_BREAK 2272 case 89: 2280 2273 YY_RULE_SETUP 2281 2274 #line 257 "lex.ll" 2282 { KEYWORD_RETURN(T HROWRESUME); }// CFA2283 YY_BREAK 2284 case 88:2275 { KEYWORD_RETURN(TYPE); } // CFA 2276 YY_BREAK 2277 case 90: 2285 2278 YY_RULE_SETUP 2286 2279 #line 258 "lex.ll" 2287 { KEYWORD_RETURN(T RAIT); } // CFA2288 YY_BREAK 2289 case 89:2280 { KEYWORD_RETURN(TYPEDEF); } 2281 YY_BREAK 2282 case 91: 2290 2283 YY_RULE_SETUP 2291 2284 #line 259 "lex.ll" 2292 { KEYWORD_RETURN(T RY); } // CFA2293 YY_BREAK 2294 case 9 0:2285 { KEYWORD_RETURN(TYPEOF); } // GCC 2286 YY_BREAK 2287 case 92: 2295 2288 YY_RULE_SETUP 2296 2289 #line 260 "lex.ll" 2297 { KEYWORD_RETURN(TYPE DEF); }2298 YY_BREAK 2299 case 9 1:2290 { KEYWORD_RETURN(TYPEOF); } // GCC 2291 YY_BREAK 2292 case 93: 2300 2293 YY_RULE_SETUP 2301 2294 #line 261 "lex.ll" 2302 2295 { KEYWORD_RETURN(TYPEOF); } // GCC 2303 2296 YY_BREAK 2304 case 9 2:2297 case 94: 2305 2298 YY_RULE_SETUP 2306 2299 #line 262 "lex.ll" 2307 { KEYWORD_RETURN( TYPEOF); } // GCC2308 YY_BREAK 2309 case 9 3:2300 { KEYWORD_RETURN(UNION); } 2301 YY_BREAK 2302 case 95: 2310 2303 YY_RULE_SETUP 2311 2304 #line 263 "lex.ll" 2312 { KEYWORD_RETURN( TYPEOF); } // GCC2313 YY_BREAK 2314 case 9 4:2305 { KEYWORD_RETURN(UNSIGNED); } 2306 YY_BREAK 2307 case 96: 2315 2308 YY_RULE_SETUP 2316 2309 #line 264 "lex.ll" 2317 { KEYWORD_RETURN( UNION); }2318 YY_BREAK 2319 case 9 5:2310 { KEYWORD_RETURN(VOID); } 2311 YY_BREAK 2312 case 97: 2320 2313 YY_RULE_SETUP 2321 2314 #line 265 "lex.ll" 2322 { KEYWORD_RETURN( UNSIGNED); }2323 YY_BREAK 2324 case 9 6:2315 { KEYWORD_RETURN(VOLATILE); } 2316 YY_BREAK 2317 case 98: 2325 2318 YY_RULE_SETUP 2326 2319 #line 266 "lex.ll" 2327 { KEYWORD_RETURN(V ALIST); } // GCC2328 YY_BREAK 2329 case 9 7:2320 { KEYWORD_RETURN(VOLATILE); } // GCC 2321 YY_BREAK 2322 case 99: 2330 2323 YY_RULE_SETUP 2331 2324 #line 267 "lex.ll" 2332 { KEYWORD_RETURN(VO ID); }2333 YY_BREAK 2334 case 98:2325 { KEYWORD_RETURN(VOLATILE); } // GCC 2326 YY_BREAK 2327 case 100: 2335 2328 YY_RULE_SETUP 2336 2329 #line 268 "lex.ll" 2337 { KEYWORD_RETURN(VOLATILE); } 2338 YY_BREAK 2339 case 99: 2340 YY_RULE_SETUP 2341 #line 269 "lex.ll" 2342 { KEYWORD_RETURN(VOLATILE); } // GCC 2343 YY_BREAK 2344 case 100: 2345 YY_RULE_SETUP 2346 #line 270 "lex.ll" 2347 { KEYWORD_RETURN(VOLATILE); } // GCC 2348 YY_BREAK 2330 { KEYWORD_RETURN(WHILE); } 2331 YY_BREAK 2332 /* identifier */ 2349 2333 case 101: 2350 2334 YY_RULE_SETUP 2351 2335 #line 271 "lex.ll" 2352 { KEYWORD_RETURN(WHILE); } 2353 YY_BREAK 2354 /* identifier */ 2336 { IDENTIFIER_RETURN(); } 2337 YY_BREAK 2355 2338 case 102: 2339 YY_RULE_SETUP 2340 #line 272 "lex.ll" 2341 { ATTRIBUTE_RETURN(); } 2342 YY_BREAK 2343 case 103: 2344 YY_RULE_SETUP 2345 #line 273 "lex.ll" 2346 { BEGIN BKQUOTE; } 2347 YY_BREAK 2348 case 104: 2356 2349 YY_RULE_SETUP 2357 2350 #line 274 "lex.ll" 2358 2351 { IDENTIFIER_RETURN(); } 2359 2352 YY_BREAK 2360 case 10 3:2353 case 105: 2361 2354 YY_RULE_SETUP 2362 2355 #line 275 "lex.ll" 2363 { ATTRIBUTE_RETURN(); } 2364 YY_BREAK 2365 case 104: 2366 YY_RULE_SETUP 2367 #line 276 "lex.ll" 2368 { BEGIN BKQUOTE; } 2369 YY_BREAK 2370 case 105: 2371 YY_RULE_SETUP 2372 #line 277 "lex.ll" 2373 { IDENTIFIER_RETURN(); } 2374 YY_BREAK 2356 { BEGIN 0; } 2357 YY_BREAK 2358 /* numeric constants */ 2375 2359 case 106: 2376 2360 YY_RULE_SETUP 2377 2361 #line 278 "lex.ll" 2378 { BEGIN 0; } 2379 YY_BREAK 2380 /* numeric constants */ 2362 { NUMERIC_RETURN(ZERO); } // CFA 2363 YY_BREAK 2381 2364 case 107: 2382 2365 YY_RULE_SETUP 2366 #line 279 "lex.ll" 2367 { NUMERIC_RETURN(ONE); } // CFA 2368 YY_BREAK 2369 case 108: 2370 YY_RULE_SETUP 2371 #line 280 "lex.ll" 2372 { NUMERIC_RETURN(INTEGERconstant); } 2373 YY_BREAK 2374 case 109: 2375 YY_RULE_SETUP 2383 2376 #line 281 "lex.ll" 2384 { NUMERIC_RETURN( ZERO); } // CFA2385 YY_BREAK 2386 case 1 08:2377 { NUMERIC_RETURN(INTEGERconstant); } 2378 YY_BREAK 2379 case 110: 2387 2380 YY_RULE_SETUP 2388 2381 #line 282 "lex.ll" 2389 { NUMERIC_RETURN( ONE); } // CFA2390 YY_BREAK 2391 case 1 09:2382 { NUMERIC_RETURN(INTEGERconstant); } 2383 YY_BREAK 2384 case 111: 2392 2385 YY_RULE_SETUP 2393 2386 #line 283 "lex.ll" 2394 { NUMERIC_RETURN( INTEGERconstant); }2395 YY_BREAK 2396 case 11 0:2387 { NUMERIC_RETURN(FLOATINGconstant); } 2388 YY_BREAK 2389 case 112: 2397 2390 YY_RULE_SETUP 2398 2391 #line 284 "lex.ll" 2399 { NUMERIC_RETURN(INTEGERconstant); }2400 YY_BREAK2401 case 111:2402 YY_RULE_SETUP2403 #line 285 "lex.ll"2404 { NUMERIC_RETURN(INTEGERconstant); }2405 YY_BREAK2406 case 112:2407 YY_RULE_SETUP2408 #line 286 "lex.ll"2409 2392 { NUMERIC_RETURN(FLOATINGconstant); } 2410 2393 YY_BREAK 2394 /* character constant, allows empty value */ 2411 2395 case 113: 2412 2396 YY_RULE_SETUP 2413 2397 #line 287 "lex.ll" 2414 { NUMERIC_RETURN(FLOATINGconstant); } 2415 YY_BREAK 2416 /* character constant, allows empty value */ 2398 { BEGIN QUOTE; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); } 2399 YY_BREAK 2417 2400 case 114: 2418 2401 YY_RULE_SETUP 2419 #line 2 90"lex.ll"2420 { BEGIN QUOTE; rm_underscore(); strtext = new std::string;*strtext += std::string( yytext ); }2402 #line 288 "lex.ll" 2403 { *strtext += std::string( yytext ); } 2421 2404 YY_BREAK 2422 2405 case 115: 2423 YY_RULE_SETUP 2424 #line 291 "lex.ll" 2425 { *strtext += std::string( yytext ); } 2426 YY_BREAK 2427 case 116: 2428 /* rule 116 can match eol */ 2429 YY_RULE_SETUP 2430 #line 292 "lex.ll" 2406 /* rule 115 can match eol */ 2407 YY_RULE_SETUP 2408 #line 289 "lex.ll" 2431 2409 { BEGIN 0; *strtext += std::string( yytext); RETURN_STR(CHARACTERconstant); } 2432 2410 YY_BREAK 2433 2411 /* ' stop highlighting */ 2434 2412 /* string constant */ 2413 case 116: 2414 YY_RULE_SETUP 2415 #line 293 "lex.ll" 2416 { BEGIN STRING; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); } 2417 YY_BREAK 2435 2418 case 117: 2436 2419 YY_RULE_SETUP 2437 #line 29 6"lex.ll"2438 { BEGIN STRING; rm_underscore(); strtext = new std::string;*strtext += std::string( yytext ); }2420 #line 294 "lex.ll" 2421 { *strtext += std::string( yytext ); } 2439 2422 YY_BREAK 2440 2423 case 118: 2441 YY_RULE_SETUP 2442 #line 297 "lex.ll" 2443 { *strtext += std::string( yytext ); } 2444 YY_BREAK 2445 case 119: 2446 /* rule 119 can match eol */ 2447 YY_RULE_SETUP 2448 #line 298 "lex.ll" 2424 /* rule 118 can match eol */ 2425 YY_RULE_SETUP 2426 #line 295 "lex.ll" 2449 2427 { BEGIN 0; *strtext += std::string( yytext ); RETURN_STR(STRINGliteral); } 2450 2428 YY_BREAK 2451 2429 /* " stop highlighting */ 2452 2430 /* common character/string constant */ 2431 case 119: 2432 YY_RULE_SETUP 2433 #line 299 "lex.ll" 2434 { rm_underscore(); *strtext += std::string( yytext ); } 2435 YY_BREAK 2453 2436 case 120: 2454 YY_RULE_SETUP 2455 #line 302 "lex.ll" 2456 { rm_underscore(); *strtext += std::string( yytext ); } 2437 /* rule 120 can match eol */ 2438 YY_RULE_SETUP 2439 #line 300 "lex.ll" 2440 {} // continuation (ALSO HANDLED BY CPP) 2457 2441 YY_BREAK 2458 2442 case 121: 2459 /* rule 121 can match eol */ 2460 YY_RULE_SETUP 2461 #line 303 "lex.ll" 2462 {} // continuation (ALSO HANDLED BY CPP) 2463 YY_BREAK 2443 YY_RULE_SETUP 2444 #line 301 "lex.ll" 2445 { *strtext += std::string( yytext ); } // unknown escape character 2446 YY_BREAK 2447 /* punctuation */ 2464 2448 case 122: 2465 2449 YY_RULE_SETUP 2466 2450 #line 304 "lex.ll" 2467 { *strtext += std::string( yytext ); } // unknown escape character 2468 YY_BREAK 2469 /* punctuation */ 2451 { ASCIIOP_RETURN(); } 2452 YY_BREAK 2470 2453 case 123: 2454 YY_RULE_SETUP 2455 #line 305 "lex.ll" 2456 { ASCIIOP_RETURN(); } 2457 YY_BREAK 2458 case 124: 2459 YY_RULE_SETUP 2460 #line 306 "lex.ll" 2461 { ASCIIOP_RETURN(); } 2462 YY_BREAK 2463 case 125: 2471 2464 YY_RULE_SETUP 2472 2465 #line 307 "lex.ll" 2473 2466 { ASCIIOP_RETURN(); } 2474 2467 YY_BREAK 2475 case 12 4:2468 case 126: 2476 2469 YY_RULE_SETUP 2477 2470 #line 308 "lex.ll" 2478 2471 { ASCIIOP_RETURN(); } 2479 2472 YY_BREAK 2480 case 12 5:2473 case 127: 2481 2474 YY_RULE_SETUP 2482 2475 #line 309 "lex.ll" 2483 2476 { ASCIIOP_RETURN(); } 2484 2477 YY_BREAK 2485 case 12 6:2478 case 128: 2486 2479 YY_RULE_SETUP 2487 2480 #line 310 "lex.ll" 2488 { ASCIIOP_RETURN(); } 2489 YY_BREAK 2490 case 12 7:2481 { ASCIIOP_RETURN(); } // also operator 2482 YY_BREAK 2483 case 129: 2491 2484 YY_RULE_SETUP 2492 2485 #line 311 "lex.ll" 2493 2486 { ASCIIOP_RETURN(); } 2494 2487 YY_BREAK 2495 case 1 28:2488 case 130: 2496 2489 YY_RULE_SETUP 2497 2490 #line 312 "lex.ll" 2498 2491 { ASCIIOP_RETURN(); } 2499 2492 YY_BREAK 2500 case 1 29:2493 case 131: 2501 2494 YY_RULE_SETUP 2502 2495 #line 313 "lex.ll" 2503 2496 { ASCIIOP_RETURN(); } // also operator 2504 2497 YY_BREAK 2505 case 13 0:2498 case 132: 2506 2499 YY_RULE_SETUP 2507 2500 #line 314 "lex.ll" 2501 { NAMEDOP_RETURN(ELLIPSIS); } 2502 YY_BREAK 2503 /* alternative C99 brackets, "<:" & "<:<:" handled by preprocessor */ 2504 case 133: 2505 YY_RULE_SETUP 2506 #line 317 "lex.ll" 2507 { RETURN_VAL('['); } 2508 YY_BREAK 2509 case 134: 2510 YY_RULE_SETUP 2511 #line 318 "lex.ll" 2512 { RETURN_VAL(']'); } 2513 YY_BREAK 2514 case 135: 2515 YY_RULE_SETUP 2516 #line 319 "lex.ll" 2517 { RETURN_VAL('{'); } 2518 YY_BREAK 2519 case 136: 2520 YY_RULE_SETUP 2521 #line 320 "lex.ll" 2522 { RETURN_VAL('}'); } 2523 YY_BREAK 2524 /* operators */ 2525 case 137: 2526 YY_RULE_SETUP 2527 #line 323 "lex.ll" 2508 2528 { ASCIIOP_RETURN(); } 2509 2529 YY_BREAK 2510 case 13 1:2511 YY_RULE_SETUP 2512 #line 3 15"lex.ll"2530 case 138: 2531 YY_RULE_SETUP 2532 #line 324 "lex.ll" 2513 2533 { ASCIIOP_RETURN(); } 2514 2534 YY_BREAK 2515 case 132: 2516 YY_RULE_SETUP 2517 #line 316 "lex.ll" 2518 { ASCIIOP_RETURN(); } // also operator 2519 YY_BREAK 2520 case 133: 2521 YY_RULE_SETUP 2522 #line 317 "lex.ll" 2523 { NAMEDOP_RETURN(ELLIPSIS); } 2524 YY_BREAK 2525 /* alternative C99 brackets, "<:" & "<:<:" handled by preprocessor */ 2526 case 134: 2527 YY_RULE_SETUP 2528 #line 320 "lex.ll" 2529 { RETURN_VAL('['); } 2530 YY_BREAK 2531 case 135: 2532 YY_RULE_SETUP 2533 #line 321 "lex.ll" 2534 { RETURN_VAL(']'); } 2535 YY_BREAK 2536 case 136: 2537 YY_RULE_SETUP 2538 #line 322 "lex.ll" 2539 { RETURN_VAL('{'); } 2540 YY_BREAK 2541 case 137: 2542 YY_RULE_SETUP 2543 #line 323 "lex.ll" 2544 { RETURN_VAL('}'); } 2545 YY_BREAK 2546 /* operators */ 2547 case 138: 2535 case 139: 2536 YY_RULE_SETUP 2537 #line 325 "lex.ll" 2538 { ASCIIOP_RETURN(); } 2539 YY_BREAK 2540 case 140: 2548 2541 YY_RULE_SETUP 2549 2542 #line 326 "lex.ll" 2550 2543 { ASCIIOP_RETURN(); } 2551 2544 YY_BREAK 2552 case 1 39:2545 case 141: 2553 2546 YY_RULE_SETUP 2554 2547 #line 327 "lex.ll" 2555 2548 { ASCIIOP_RETURN(); } 2556 2549 YY_BREAK 2557 case 14 0:2550 case 142: 2558 2551 YY_RULE_SETUP 2559 2552 #line 328 "lex.ll" 2560 2553 { ASCIIOP_RETURN(); } 2561 2554 YY_BREAK 2562 case 14 1:2555 case 143: 2563 2556 YY_RULE_SETUP 2564 2557 #line 329 "lex.ll" 2565 2558 { ASCIIOP_RETURN(); } 2566 2559 YY_BREAK 2567 case 14 2:2560 case 144: 2568 2561 YY_RULE_SETUP 2569 2562 #line 330 "lex.ll" 2570 2563 { ASCIIOP_RETURN(); } 2571 2564 YY_BREAK 2572 case 14 3:2565 case 145: 2573 2566 YY_RULE_SETUP 2574 2567 #line 331 "lex.ll" 2575 2568 { ASCIIOP_RETURN(); } 2576 2569 YY_BREAK 2577 case 14 4:2570 case 146: 2578 2571 YY_RULE_SETUP 2579 2572 #line 332 "lex.ll" 2580 2573 { ASCIIOP_RETURN(); } 2581 2574 YY_BREAK 2582 case 14 5:2575 case 147: 2583 2576 YY_RULE_SETUP 2584 2577 #line 333 "lex.ll" 2585 2578 { ASCIIOP_RETURN(); } 2586 2579 YY_BREAK 2587 case 14 6:2580 case 148: 2588 2581 YY_RULE_SETUP 2589 2582 #line 334 "lex.ll" 2590 2583 { ASCIIOP_RETURN(); } 2591 2584 YY_BREAK 2592 case 14 7:2585 case 149: 2593 2586 YY_RULE_SETUP 2594 2587 #line 335 "lex.ll" 2595 2588 { ASCIIOP_RETURN(); } 2596 2589 YY_BREAK 2597 case 1 48:2590 case 150: 2598 2591 YY_RULE_SETUP 2599 2592 #line 336 "lex.ll" 2600 2593 { ASCIIOP_RETURN(); } 2601 2594 YY_BREAK 2602 case 149: 2603 YY_RULE_SETUP 2604 #line 337 "lex.ll" 2605 { ASCIIOP_RETURN(); } 2606 YY_BREAK 2607 case 150: 2595 case 151: 2608 2596 YY_RULE_SETUP 2609 2597 #line 338 "lex.ll" 2610 { ASCIIOP_RETURN(); }2611 YY_BREAK 2612 case 15 1:2598 { NAMEDOP_RETURN(ICR); } 2599 YY_BREAK 2600 case 152: 2613 2601 YY_RULE_SETUP 2614 2602 #line 339 "lex.ll" 2615 { ASCIIOP_RETURN(); } 2616 YY_BREAK 2617 case 152: 2603 { NAMEDOP_RETURN(DECR); } 2604 YY_BREAK 2605 case 153: 2606 YY_RULE_SETUP 2607 #line 340 "lex.ll" 2608 { NAMEDOP_RETURN(EQ); } 2609 YY_BREAK 2610 case 154: 2618 2611 YY_RULE_SETUP 2619 2612 #line 341 "lex.ll" 2620 { NAMEDOP_RETURN( ICR); }2621 YY_BREAK 2622 case 15 3:2613 { NAMEDOP_RETURN(NE); } 2614 YY_BREAK 2615 case 155: 2623 2616 YY_RULE_SETUP 2624 2617 #line 342 "lex.ll" 2625 { NAMEDOP_RETURN( DECR); }2626 YY_BREAK 2627 case 15 4:2618 { NAMEDOP_RETURN(LS); } 2619 YY_BREAK 2620 case 156: 2628 2621 YY_RULE_SETUP 2629 2622 #line 343 "lex.ll" 2630 { NAMEDOP_RETURN( EQ); }2631 YY_BREAK 2632 case 15 5:2623 { NAMEDOP_RETURN(RS); } 2624 YY_BREAK 2625 case 157: 2633 2626 YY_RULE_SETUP 2634 2627 #line 344 "lex.ll" 2635 { NAMEDOP_RETURN( NE); }2636 YY_BREAK 2637 case 15 6:2628 { NAMEDOP_RETURN(LE); } 2629 YY_BREAK 2630 case 158: 2638 2631 YY_RULE_SETUP 2639 2632 #line 345 "lex.ll" 2640 { NAMEDOP_RETURN( LS); }2641 YY_BREAK 2642 case 15 7:2633 { NAMEDOP_RETURN(GE); } 2634 YY_BREAK 2635 case 159: 2643 2636 YY_RULE_SETUP 2644 2637 #line 346 "lex.ll" 2645 { NAMEDOP_RETURN( RS); }2646 YY_BREAK 2647 case 1 58:2638 { NAMEDOP_RETURN(ANDAND); } 2639 YY_BREAK 2640 case 160: 2648 2641 YY_RULE_SETUP 2649 2642 #line 347 "lex.ll" 2650 { NAMEDOP_RETURN( LE); }2651 YY_BREAK 2652 case 1 59:2643 { NAMEDOP_RETURN(OROR); } 2644 YY_BREAK 2645 case 161: 2653 2646 YY_RULE_SETUP 2654 2647 #line 348 "lex.ll" 2655 { NAMEDOP_RETURN( GE); }2656 YY_BREAK 2657 case 16 0:2648 { NAMEDOP_RETURN(ARROW); } 2649 YY_BREAK 2650 case 162: 2658 2651 YY_RULE_SETUP 2659 2652 #line 349 "lex.ll" 2660 { NAMEDOP_RETURN( ANDAND); }2661 YY_BREAK 2662 case 16 1:2653 { NAMEDOP_RETURN(PLUSassign); } 2654 YY_BREAK 2655 case 163: 2663 2656 YY_RULE_SETUP 2664 2657 #line 350 "lex.ll" 2665 { NAMEDOP_RETURN( OROR); }2666 YY_BREAK 2667 case 16 2:2658 { NAMEDOP_RETURN(MINUSassign); } 2659 YY_BREAK 2660 case 164: 2668 2661 YY_RULE_SETUP 2669 2662 #line 351 "lex.ll" 2670 { NAMEDOP_RETURN( ARROW); }2671 YY_BREAK 2672 case 16 3:2663 { NAMEDOP_RETURN(MULTassign); } 2664 YY_BREAK 2665 case 165: 2673 2666 YY_RULE_SETUP 2674 2667 #line 352 "lex.ll" 2675 { NAMEDOP_RETURN( PLUSassign); }2676 YY_BREAK 2677 case 16 4:2668 { NAMEDOP_RETURN(DIVassign); } 2669 YY_BREAK 2670 case 166: 2678 2671 YY_RULE_SETUP 2679 2672 #line 353 "lex.ll" 2680 { NAMEDOP_RETURN(M INUSassign); }2681 YY_BREAK 2682 case 16 5:2673 { NAMEDOP_RETURN(MODassign); } 2674 YY_BREAK 2675 case 167: 2683 2676 YY_RULE_SETUP 2684 2677 #line 354 "lex.ll" 2685 { NAMEDOP_RETURN( MULTassign); }2686 YY_BREAK 2687 case 16 6:2678 { NAMEDOP_RETURN(ANDassign); } 2679 YY_BREAK 2680 case 168: 2688 2681 YY_RULE_SETUP 2689 2682 #line 355 "lex.ll" 2690 { NAMEDOP_RETURN( DIVassign); }2691 YY_BREAK 2692 case 16 7:2683 { NAMEDOP_RETURN(ORassign); } 2684 YY_BREAK 2685 case 169: 2693 2686 YY_RULE_SETUP 2694 2687 #line 356 "lex.ll" 2695 { NAMEDOP_RETURN( MODassign); }2696 YY_BREAK 2697 case 1 68:2688 { NAMEDOP_RETURN(ERassign); } 2689 YY_BREAK 2690 case 170: 2698 2691 YY_RULE_SETUP 2699 2692 #line 357 "lex.ll" 2700 { NAMEDOP_RETURN( ANDassign); }2701 YY_BREAK 2702 case 1 69:2693 { NAMEDOP_RETURN(LSassign); } 2694 YY_BREAK 2695 case 171: 2703 2696 YY_RULE_SETUP 2704 2697 #line 358 "lex.ll" 2705 { NAMEDOP_RETURN(ORassign); } 2706 YY_BREAK 2707 case 170: 2708 YY_RULE_SETUP 2709 #line 359 "lex.ll" 2710 { NAMEDOP_RETURN(ERassign); } 2711 YY_BREAK 2712 case 171: 2698 { NAMEDOP_RETURN(RSassign); } 2699 YY_BREAK 2700 case 172: 2713 2701 YY_RULE_SETUP 2714 2702 #line 360 "lex.ll" 2715 { NAMEDOP_RETURN(LSassign); } 2716 YY_BREAK 2717 case 172: 2718 YY_RULE_SETUP 2719 #line 361 "lex.ll" 2720 { NAMEDOP_RETURN(RSassign); } 2721 YY_BREAK 2703 { NAMEDOP_RETURN(ATassign); } 2704 YY_BREAK 2705 /* CFA, operator identifier */ 2722 2706 case 173: 2723 2707 YY_RULE_SETUP 2724 2708 #line 363 "lex.ll" 2725 { NAMEDOP_RETURN(ATassign); } 2726 YY_BREAK 2727 /* CFA, operator identifier */ 2709 { IDENTIFIER_RETURN(); } // unary 2710 YY_BREAK 2728 2711 case 174: 2729 2712 YY_RULE_SETUP 2713 #line 364 "lex.ll" 2714 { IDENTIFIER_RETURN(); } 2715 YY_BREAK 2716 case 175: 2717 YY_RULE_SETUP 2718 #line 365 "lex.ll" 2719 { IDENTIFIER_RETURN(); } 2720 YY_BREAK 2721 case 176: 2722 YY_RULE_SETUP 2730 2723 #line 366 "lex.ll" 2731 { IDENTIFIER_RETURN(); } // unary2732 YY_BREAK2733 case 175:2734 YY_RULE_SETUP2735 #line 367 "lex.ll"2736 { IDENTIFIER_RETURN(); }2737 YY_BREAK2738 case 176:2739 YY_RULE_SETUP2740 #line 368 "lex.ll"2741 { IDENTIFIER_RETURN(); }2742 YY_BREAK2743 case 177:2744 YY_RULE_SETUP2745 #line 369 "lex.ll"2746 2724 { IDENTIFIER_RETURN(); } // binary 2747 2725 YY_BREAK … … 2772 2750 an argument list. 2773 2751 */ 2774 case 17 8:2775 YY_RULE_SETUP 2776 #line 39 6"lex.ll"2752 case 177: 2753 YY_RULE_SETUP 2754 #line 393 "lex.ll" 2777 2755 { 2778 2756 // 1 or 2 character unary operator ? … … 2787 2765 YY_BREAK 2788 2766 /* unknown characters */ 2767 case 178: 2768 YY_RULE_SETUP 2769 #line 405 "lex.ll" 2770 { printf("unknown character(s):\"%s\" on line %d\n", yytext, yylineno); } 2771 YY_BREAK 2789 2772 case 179: 2790 2773 YY_RULE_SETUP 2791 #line 408 "lex.ll" 2792 { printf("unknown character(s):\"%s\" on line %d\n", yytext, yylineno); } 2793 YY_BREAK 2794 case 180: 2795 YY_RULE_SETUP 2796 #line 410 "lex.ll" 2774 #line 407 "lex.ll" 2797 2775 ECHO; 2798 2776 YY_BREAK 2799 #line 2 800"Parser/lex.cc"2777 #line 2778 "Parser/lex.cc" 2800 2778 case YY_STATE_EOF(INITIAL): 2801 2779 case YY_STATE_EOF(COMMENT): … … 3094 3072 { 3095 3073 yy_current_state = (int) yy_def[yy_current_state]; 3096 if ( yy_current_state >= 8 88)3074 if ( yy_current_state >= 876 ) 3097 3075 yy_c = yy_meta[(unsigned int) yy_c]; 3098 3076 } … … 3122 3100 { 3123 3101 yy_current_state = (int) yy_def[yy_current_state]; 3124 if ( yy_current_state >= 8 88)3102 if ( yy_current_state >= 876 ) 3125 3103 yy_c = yy_meta[(unsigned int) yy_c]; 3126 3104 } 3127 3105 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; 3128 yy_is_jam = (yy_current_state == 8 87);3106 yy_is_jam = (yy_current_state == 875); 3129 3107 3130 3108 return yy_is_jam ? 0 : yy_current_state; … … 3772 3750 #define YYTABLES_NAME "yytables" 3773 3751 3774 #line 4 10"lex.ll"3752 #line 407 "lex.ll" 3775 3753 3776 3754 -
src/Parser/lex.h
r0f9e4403 rc5833e8 10 10 // Created On : Sat Sep 22 08:58:10 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Mar 21 18:18:06 201613 // Update Count : 34 612 // Last Modified On : Mon Jun 8 20:28:48 2015 13 // Update Count : 341 14 14 // 15 15 … … 20 20 void yyerror( const char * ); 21 21 22 #include <string>23 #include "ParseNode.h"24 22 // External declarations for information sharing between lexer and scanner 25 class TypedefTable; 23 #include "TypedefTable.h" 26 24 extern TypedefTable typedefTable; 27 25 -
src/Parser/lex.ll
r0f9e4403 rc5833e8 10 10 * Created On : Sat Sep 22 08:58:10 2001 11 11 * Last Modified By : Peter A. Buhr 12 * Last Modified On : Mon Mar 21 23:33:46201613 * Update Count : 4 5012 * Last Modified On : Tue Feb 2 15:06:54 2016 13 * Update Count : 426 14 14 */ 15 15 … … 27 27 28 28 #include "lex.h" 29 #include "ParseNode.h" 29 30 #include "parser.h" // YACC generated definitions based on C++ grammar 30 #include "ParseNode.h"31 #include "TypedefTable.h"32 31 33 32 char *yyfilename; … … 45 44 #define NUMERIC_RETURN(x) rm_underscore(); RETURN_VAL( x ) // numeric constant 46 45 #define KEYWORD_RETURN(x) RETURN_CHAR( x ) // keyword 47 #define IDENTIFIER_RETURN() RETURN_VAL( typedefTable.isKind( yytext) )46 #define IDENTIFIER_RETURN() RETURN_VAL( (typedefTable.isIdentifier( yytext ) ? IDENTIFIER : typedefTable.isTypedef( yytext ) ? TYPEDEFname : TYPEGENname ) ) 48 47 #define ATTRIBUTE_RETURN() RETURN_VAL( ATTR_IDENTIFIER ) 49 48 … … 96 95 fractional_constant ({decimal_digits}?"."{decimal_digits})|({decimal_digits}".") 97 96 exponent "_"?[eE]"_"?[+-]?{decimal_digits} 98 // GCC: D (double), DL (long double) and iI (imaginary) suffixes 99 floating_suffix "_"?([fFdDlL][iI]?|"DL"|[iI][lLfFdD]?) 100 //floating_suffix "_"?([fFdD]|[lL]|[D][L])|([iI][lLfFdD])|([lLfFdD][iI])) 97 // GCC: D (double), LD (long double) and iI (imaginary) suffixes 98 floating_suffix "_"?([fFdD]?|([lL]?)|([iI][lLfFdD]?)|([lLfFdD][iI])) 101 99 floating_constant (({fractional_constant}{exponent}?)|({decimal_digits}{exponent})){floating_suffix}? 102 100 … … 139 137 %% 140 138 /* line directives */ 141 ^{h_white}*"#"{h_white}*[0-9]+{h_white}*["][^"\n]+["] .*"\n" {139 ^{h_white}*"#"{h_white}*[0-9]+{h_white}*["][^"\n]+["][^\n]*"\n" { 142 140 /* " stop highlighting */ 143 141 char *end_num; … … 203 201 __const { KEYWORD_RETURN(CONST); } // GCC 204 202 __const__ { KEYWORD_RETURN(CONST); } // GCC 203 context { KEYWORD_RETURN(CONTEXT); } // CFA 205 204 continue { KEYWORD_RETURN(CONTINUE); } 206 205 default { KEYWORD_RETURN(DEFAULT); } … … 238 237 _Noreturn { KEYWORD_RETURN(NORETURN); } // C11 239 238 __builtin_offsetof { KEYWORD_RETURN(OFFSETOF); } // GCC 240 otype { KEYWORD_RETURN(OTYPE); } // CFA241 239 register { KEYWORD_RETURN(REGISTER); } 242 240 restrict { KEYWORD_RETURN(RESTRICT); } // C99 … … 256 254 throw { KEYWORD_RETURN(THROW); } // CFA 257 255 throwResume { KEYWORD_RETURN(THROWRESUME); } // CFA 258 trait { KEYWORD_RETURN(TRAIT); } // CFA259 256 try { KEYWORD_RETURN(TRY); } // CFA 257 type { KEYWORD_RETURN(TYPE); } // CFA 260 258 typedef { KEYWORD_RETURN(TYPEDEF); } 261 259 typeof { KEYWORD_RETURN(TYPEOF); } // GCC … … 264 262 union { KEYWORD_RETURN(UNION); } 265 263 unsigned { KEYWORD_RETURN(UNSIGNED); } 266 __builtin_va_list { KEYWORD_RETURN(VALIST); } // GCC267 264 void { KEYWORD_RETURN(VOID); } 268 265 volatile { KEYWORD_RETURN(VOLATILE); } -
src/Parser/parser.cc
r0f9e4403 rc5833e8 77 77 #include <cstdio> 78 78 #include <stack> 79 #include "TypedefTable.h" 79 80 #include "lex.h" 80 #include "parser.h"81 81 #include "ParseNode.h" 82 #include "TypedefTable.h"83 82 #include "TypeData.h" 84 83 #include "LinkageSpec.h" … … 91 90 92 91 /* Line 268 of yacc.c */ 93 #line 9 4"Parser/parser.cc"92 #line 93 "Parser/parser.cc" 94 93 95 94 /* Enabling traces. */ … … 139 138 SIGNED = 277, 140 139 UNSIGNED = 278, 141 VALIST = 279, 142 BOOL = 280, 143 COMPLEX = 281, 144 IMAGINARY = 282, 145 TYPEOF = 283, 146 LABEL = 284, 147 ENUM = 285, 148 STRUCT = 286, 149 UNION = 287, 150 OTYPE = 288, 151 FTYPE = 289, 152 DTYPE = 290, 153 TRAIT = 291, 154 SIZEOF = 292, 155 OFFSETOF = 293, 156 ATTRIBUTE = 294, 157 EXTENSION = 295, 158 IF = 296, 159 ELSE = 297, 160 SWITCH = 298, 161 CASE = 299, 162 DEFAULT = 300, 163 DO = 301, 164 WHILE = 302, 165 FOR = 303, 166 BREAK = 304, 167 CONTINUE = 305, 168 GOTO = 306, 169 RETURN = 307, 170 CHOOSE = 308, 171 DISABLE = 309, 172 ENABLE = 310, 173 FALLTHRU = 311, 174 TRY = 312, 175 CATCH = 313, 176 CATCHRESUME = 314, 177 FINALLY = 315, 178 THROW = 316, 179 THROWRESUME = 317, 180 AT = 318, 181 ASM = 319, 182 ALIGNAS = 320, 183 ALIGNOF = 321, 184 ATOMIC = 322, 185 GENERIC = 323, 186 NORETURN = 324, 187 STATICASSERT = 325, 188 THREADLOCAL = 326, 189 IDENTIFIER = 327, 190 QUOTED_IDENTIFIER = 328, 191 TYPEDEFname = 329, 192 TYPEGENname = 330, 193 ATTR_IDENTIFIER = 331, 194 ATTR_TYPEDEFname = 332, 195 ATTR_TYPEGENname = 333, 196 INTEGERconstant = 334, 197 FLOATINGconstant = 335, 198 CHARACTERconstant = 336, 199 STRINGliteral = 337, 200 ZERO = 338, 201 ONE = 339, 202 ARROW = 340, 203 ICR = 341, 204 DECR = 342, 205 LS = 343, 206 RS = 344, 207 LE = 345, 208 GE = 346, 209 EQ = 347, 210 NE = 348, 211 ANDAND = 349, 212 OROR = 350, 213 ELLIPSIS = 351, 214 MULTassign = 352, 215 DIVassign = 353, 216 MODassign = 354, 217 PLUSassign = 355, 218 MINUSassign = 356, 219 LSassign = 357, 220 RSassign = 358, 221 ANDassign = 359, 222 ERassign = 360, 223 ORassign = 361, 224 ATassign = 362, 225 THEN = 363 140 BOOL = 279, 141 COMPLEX = 280, 142 IMAGINARY = 281, 143 TYPEOF = 282, 144 LABEL = 283, 145 ENUM = 284, 146 STRUCT = 285, 147 UNION = 286, 148 TYPE = 287, 149 FTYPE = 288, 150 DTYPE = 289, 151 CONTEXT = 290, 152 SIZEOF = 291, 153 OFFSETOF = 292, 154 ATTRIBUTE = 293, 155 EXTENSION = 294, 156 IF = 295, 157 ELSE = 296, 158 SWITCH = 297, 159 CASE = 298, 160 DEFAULT = 299, 161 DO = 300, 162 WHILE = 301, 163 FOR = 302, 164 BREAK = 303, 165 CONTINUE = 304, 166 GOTO = 305, 167 RETURN = 306, 168 CHOOSE = 307, 169 DISABLE = 308, 170 ENABLE = 309, 171 FALLTHRU = 310, 172 TRY = 311, 173 CATCH = 312, 174 CATCHRESUME = 313, 175 FINALLY = 314, 176 THROW = 315, 177 THROWRESUME = 316, 178 AT = 317, 179 ASM = 318, 180 ALIGNAS = 319, 181 ALIGNOF = 320, 182 ATOMIC = 321, 183 GENERIC = 322, 184 NORETURN = 323, 185 STATICASSERT = 324, 186 THREADLOCAL = 325, 187 IDENTIFIER = 326, 188 QUOTED_IDENTIFIER = 327, 189 TYPEDEFname = 328, 190 TYPEGENname = 329, 191 ATTR_IDENTIFIER = 330, 192 ATTR_TYPEDEFname = 331, 193 ATTR_TYPEGENname = 332, 194 INTEGERconstant = 333, 195 FLOATINGconstant = 334, 196 CHARACTERconstant = 335, 197 STRINGliteral = 336, 198 ZERO = 337, 199 ONE = 338, 200 ARROW = 339, 201 ICR = 340, 202 DECR = 341, 203 LS = 342, 204 RS = 343, 205 LE = 344, 206 GE = 345, 207 EQ = 346, 208 NE = 347, 209 ANDAND = 348, 210 OROR = 349, 211 ELLIPSIS = 350, 212 MULTassign = 351, 213 DIVassign = 352, 214 MODassign = 353, 215 PLUSassign = 354, 216 MINUSassign = 355, 217 LSassign = 356, 218 RSassign = 357, 219 ANDassign = 358, 220 ERassign = 359, 221 ORassign = 360, 222 ATassign = 361, 223 THEN = 362 226 224 }; 227 225 #endif … … 248 246 #define SIGNED 277 249 247 #define UNSIGNED 278 250 #define VALIST 279 251 #define BOOL 280 252 #define COMPLEX 281 253 #define IMAGINARY 282 254 #define TYPEOF 283 255 #define LABEL 284 256 #define ENUM 285 257 #define STRUCT 286 258 #define UNION 287 259 #define OTYPE 288 260 #define FTYPE 289 261 #define DTYPE 290 262 #define TRAIT 291 263 #define SIZEOF 292 264 #define OFFSETOF 293 265 #define ATTRIBUTE 294 266 #define EXTENSION 295 267 #define IF 296 268 #define ELSE 297 269 #define SWITCH 298 270 #define CASE 299 271 #define DEFAULT 300 272 #define DO 301 273 #define WHILE 302 274 #define FOR 303 275 #define BREAK 304 276 #define CONTINUE 305 277 #define GOTO 306 278 #define RETURN 307 279 #define CHOOSE 308 280 #define DISABLE 309 281 #define ENABLE 310 282 #define FALLTHRU 311 283 #define TRY 312 284 #define CATCH 313 285 #define CATCHRESUME 314 286 #define FINALLY 315 287 #define THROW 316 288 #define THROWRESUME 317 289 #define AT 318 290 #define ASM 319 291 #define ALIGNAS 320 292 #define ALIGNOF 321 293 #define ATOMIC 322 294 #define GENERIC 323 295 #define NORETURN 324 296 #define STATICASSERT 325 297 #define THREADLOCAL 326 298 #define IDENTIFIER 327 299 #define QUOTED_IDENTIFIER 328 300 #define TYPEDEFname 329 301 #define TYPEGENname 330 302 #define ATTR_IDENTIFIER 331 303 #define ATTR_TYPEDEFname 332 304 #define ATTR_TYPEGENname 333 305 #define INTEGERconstant 334 306 #define FLOATINGconstant 335 307 #define CHARACTERconstant 336 308 #define STRINGliteral 337 309 #define ZERO 338 310 #define ONE 339 311 #define ARROW 340 312 #define ICR 341 313 #define DECR 342 314 #define LS 343 315 #define RS 344 316 #define LE 345 317 #define GE 346 318 #define EQ 347 319 #define NE 348 320 #define ANDAND 349 321 #define OROR 350 322 #define ELLIPSIS 351 323 #define MULTassign 352 324 #define DIVassign 353 325 #define MODassign 354 326 #define PLUSassign 355 327 #define MINUSassign 356 328 #define LSassign 357 329 #define RSassign 358 330 #define ANDassign 359 331 #define ERassign 360 332 #define ORassign 361 333 #define ATassign 362 334 #define THEN 363 248 #define BOOL 279 249 #define COMPLEX 280 250 #define IMAGINARY 281 251 #define TYPEOF 282 252 #define LABEL 283 253 #define ENUM 284 254 #define STRUCT 285 255 #define UNION 286 256 #define TYPE 287 257 #define FTYPE 288 258 #define DTYPE 289 259 #define CONTEXT 290 260 #define SIZEOF 291 261 #define OFFSETOF 292 262 #define ATTRIBUTE 293 263 #define EXTENSION 294 264 #define IF 295 265 #define ELSE 296 266 #define SWITCH 297 267 #define CASE 298 268 #define DEFAULT 299 269 #define DO 300 270 #define WHILE 301 271 #define FOR 302 272 #define BREAK 303 273 #define CONTINUE 304 274 #define GOTO 305 275 #define RETURN 306 276 #define CHOOSE 307 277 #define DISABLE 308 278 #define ENABLE 309 279 #define FALLTHRU 310 280 #define TRY 311 281 #define CATCH 312 282 #define CATCHRESUME 313 283 #define FINALLY 314 284 #define THROW 315 285 #define THROWRESUME 316 286 #define AT 317 287 #define ASM 318 288 #define ALIGNAS 319 289 #define ALIGNOF 320 290 #define ATOMIC 321 291 #define GENERIC 322 292 #define NORETURN 323 293 #define STATICASSERT 324 294 #define THREADLOCAL 325 295 #define IDENTIFIER 326 296 #define QUOTED_IDENTIFIER 327 297 #define TYPEDEFname 328 298 #define TYPEGENname 329 299 #define ATTR_IDENTIFIER 330 300 #define ATTR_TYPEDEFname 331 301 #define ATTR_TYPEGENname 332 302 #define INTEGERconstant 333 303 #define FLOATINGconstant 334 304 #define CHARACTERconstant 335 305 #define STRINGliteral 336 306 #define ZERO 337 307 #define ONE 338 308 #define ARROW 339 309 #define ICR 340 310 #define DECR 341 311 #define LS 342 312 #define RS 343 313 #define LE 344 314 #define GE 345 315 #define EQ 346 316 #define NE 347 317 #define ANDAND 348 318 #define OROR 349 319 #define ELLIPSIS 350 320 #define MULTassign 351 321 #define DIVassign 352 322 #define MODassign 353 323 #define PLUSassign 354 324 #define MINUSassign 355 325 #define LSassign 356 326 #define RSassign 357 327 #define ANDassign 358 328 #define ERassign 359 329 #define ORassign 360 330 #define ATassign 361 331 #define THEN 362 335 332 336 333 … … 342 339 343 340 /* Line 293 of yacc.c */ 344 #line 11 2"parser.yy"341 #line 110 "parser.yy" 345 342 346 343 Token tok; … … 359 356 360 357 /* Line 293 of yacc.c */ 361 #line 3 62"Parser/parser.cc"358 #line 359 "Parser/parser.cc" 362 359 } YYSTYPE; 363 360 # define YYSTYPE_IS_TRIVIAL 1 … … 371 368 372 369 /* Line 343 of yacc.c */ 373 #line 37 4"Parser/parser.cc"370 #line 371 "Parser/parser.cc" 374 371 375 372 #ifdef short … … 588 585 589 586 /* YYFINAL -- State number of the termination state. */ 590 #define YYFINAL 24 9587 #define YYFINAL 248 591 588 /* YYLAST -- Last index in YYTABLE. */ 592 #define YYLAST 11 449589 #define YYLAST 11042 593 590 594 591 /* YYNTOKENS -- Number of terminals. */ 595 #define YYNTOKENS 13 3592 #define YYNTOKENS 132 596 593 /* YYNNTS -- Number of nonterminals. */ 597 #define YYNNTS 2 40594 #define YYNNTS 238 598 595 /* YYNRULES -- Number of rules. */ 599 #define YYNRULES 75 4596 #define YYNRULES 751 600 597 /* YYNRULES -- Number of states. */ 601 #define YYNSTATES 15 81598 #define YYNSTATES 1578 602 599 603 600 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ 604 601 #define YYUNDEFTOK 2 605 #define YYMAXUTOK 36 3602 #define YYMAXUTOK 362 606 603 607 604 #define YYTRANSLATE(YYX) \ … … 614 611 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 615 612 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 616 2, 2, 2, 11 8, 2, 2, 2, 125, 120, 2,617 10 9, 110, 119, 121, 116, 122, 113, 124, 2, 2,618 2, 2, 2, 2, 2, 2, 2, 2, 11 7, 132,619 12 6, 131, 127, 130, 2, 2, 2, 2, 2, 2,613 2, 2, 2, 117, 2, 2, 2, 124, 119, 2, 614 108, 109, 118, 120, 115, 121, 112, 123, 2, 2, 615 2, 2, 2, 2, 2, 2, 2, 2, 116, 131, 616 125, 130, 126, 129, 2, 2, 2, 2, 2, 2, 620 617 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 621 618 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 622 2, 11 1, 2, 112, 128, 2, 2, 2, 2, 2,619 2, 110, 2, 111, 127, 2, 2, 2, 2, 2, 623 620 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 624 621 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 625 2, 2, 2, 11 4, 129, 115, 123, 2, 2, 2,622 2, 2, 2, 113, 128, 114, 122, 2, 2, 2, 626 623 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 627 624 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, … … 647 644 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 648 645 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 649 105, 106, 107 , 108646 105, 106, 107 650 647 }; 651 648 … … 688 685 1156, 1158, 1161, 1163, 1165, 1167, 1169, 1171, 1173, 1175, 689 686 1177, 1179, 1181, 1183, 1185, 1187, 1189, 1191, 1193, 1195, 690 1197, 1199, 1201, 1203, 1205, 120 7, 1210, 1213, 1217, 1221,691 122 3, 1227, 1229, 1232, 1235, 1238, 1243, 1248, 1253, 1258,692 126 0, 1263, 1266, 1270, 1272, 1275, 1278, 1280, 1283, 1286,693 1290, 129 2, 1295, 1298, 1300, 1302, 1307, 1310, 1311, 1318,694 132 6, 1329, 1332, 1335, 1337, 1340, 1343, 1347, 1350, 1354,695 135 6, 1359, 1363, 1366, 1369, 1374, 1375, 1377, 1380, 1383,696 138 5, 1386, 1388, 1391, 1394, 1400, 1403, 1404, 1412, 1415,697 14 20, 1421, 1424, 1425, 1427, 1429, 1431, 1437, 1443, 1449,698 14 51, 1457, 1463, 1473, 1475, 1481, 1482, 1484, 1486, 1492,699 1 494, 1496, 1502, 1508, 1510, 1514, 1518, 1523, 1525, 1527,700 15 29, 1531, 1534, 1536, 1540, 1544, 1546, 1549, 1551, 1555,701 1557, 1559, 1561, 1563, 1565, 1567, 1569, 1571, 157 3, 1575,702 157 7, 1580, 1582, 1584, 1586, 1589, 1590, 1593, 1596, 1598,703 1603, 160 4, 1606, 1609, 1613, 1618, 1621, 1624, 1626, 1629,704 16 31, 1634, 1640, 1646, 1654, 1661, 1663, 1666, 1669, 1673,705 16 75, 1678, 1681, 1686, 1689, 1694, 1695, 1700, 1703, 1705,706 1707, 17 09, 1710, 1713, 1719, 1725, 1739, 1741, 1743, 1747,707 175 1, 1754, 1758, 1762, 1765, 1770, 1772, 1779, 1789, 1790,708 180 2, 1804, 1808, 1812, 1816, 1818, 1820, 1826, 1829, 1835,709 183 6, 1838, 1840, 1844, 1845, 1847, 1849, 1851, 1853, 1854,710 186 1, 1864, 1866, 1869, 1874, 1877, 1881, 1885, 1889, 1894,711 19 00, 1906, 1912, 1919, 1921, 1923, 1925, 1929, 1930, 1936,712 193 7, 1939, 1941, 1944, 1951, 1953, 1957, 1958, 1960, 1965,713 1967, 19 69, 1971, 1973, 1976, 1978, 1981, 1984, 1986, 1990,714 199 3, 1997, 2001, 2004, 2009, 2014, 2018, 2027, 2031, 2034,715 20 36, 2039, 2046, 2055, 2059, 2062, 2066, 2070, 2075, 2080,716 2084, 208 6, 2088, 2090, 2095, 2102, 2106, 2109, 2113, 2117,717 212 2, 2127, 2131, 2134, 2136, 2139, 2142, 2144, 2148, 2151,718 21 55, 2159, 2162, 2167, 2172, 2176, 2183, 2192, 2196, 2199,719 220 1, 2204, 2207, 2210, 2214, 2218, 2221, 2226, 2231, 2235,720 22 42, 2251, 2255, 2258, 2260, 2263, 2266, 2268, 2270, 2273,721 22 77, 2281, 2284, 2289, 2296, 2305, 2307, 2310, 2313, 2315,722 23 18, 2321, 2325, 2329, 2331, 2336, 2341, 2345, 2351, 2360,723 236 4, 2367, 2371, 2373, 2379, 2385, 2392, 2399, 2401, 2404,724 240 7, 2409, 2412, 2415, 2419, 2423, 2425, 2430, 2435, 2439,725 24 45, 2454, 2458, 2460, 2463, 2465, 2468, 2475, 2481, 2488,726 2 496, 2504, 2506, 2509, 2512, 2514, 2517, 2520, 2524, 2528,727 253 0, 2535, 2540, 2544, 2553, 2557, 2559, 2561, 2564, 2566,728 25 68, 2571, 2575, 2578, 2582, 2585, 2589, 2593, 2596, 2601,729 260 5, 2608, 2612, 2615, 2620, 2624, 2627, 2634, 2641, 2648,730 265 6, 2658, 2661, 2663, 2665, 2667, 2670, 2674, 2677, 2681,731 26 84, 2688, 2692, 2697, 2700, 2704, 2709, 2712, 2718, 2724,732 273 1, 2738, 2739, 2741, 2742687 1197, 1199, 1201, 1203, 1205, 1208, 1211, 1215, 1219, 1221, 688 1225, 1227, 1230, 1233, 1236, 1241, 1246, 1251, 1256, 1258, 689 1261, 1264, 1268, 1270, 1273, 1276, 1278, 1281, 1284, 1288, 690 1290, 1293, 1296, 1298, 1300, 1305, 1308, 1314, 1322, 1325, 691 1328, 1331, 1333, 1336, 1339, 1343, 1346, 1350, 1352, 1355, 692 1359, 1362, 1365, 1370, 1371, 1373, 1376, 1379, 1381, 1382, 693 1384, 1387, 1390, 1396, 1403, 1406, 1409, 1414, 1415, 1418, 694 1419, 1421, 1423, 1425, 1431, 1437, 1443, 1445, 1451, 1457, 695 1467, 1469, 1475, 1476, 1478, 1480, 1486, 1488, 1490, 1496, 696 1502, 1504, 1508, 1512, 1517, 1519, 1521, 1523, 1525, 1528, 697 1530, 1534, 1538, 1540, 1543, 1545, 1549, 1551, 1553, 1555, 698 1557, 1559, 1561, 1563, 1565, 1567, 1569, 1571, 1574, 1576, 699 1578, 1580, 1583, 1584, 1587, 1590, 1592, 1597, 1598, 1600, 700 1603, 1607, 1612, 1615, 1618, 1620, 1623, 1625, 1628, 1634, 701 1640, 1648, 1655, 1657, 1660, 1663, 1667, 1669, 1672, 1675, 702 1680, 1683, 1688, 1689, 1694, 1697, 1699, 1701, 1703, 1704, 703 1707, 1713, 1719, 1733, 1735, 1737, 1741, 1745, 1748, 1752, 704 1756, 1759, 1764, 1766, 1773, 1783, 1784, 1796, 1798, 1802, 705 1806, 1810, 1812, 1814, 1820, 1823, 1829, 1830, 1832, 1834, 706 1838, 1839, 1841, 1843, 1845, 1847, 1848, 1855, 1858, 1860, 707 1863, 1868, 1871, 1875, 1879, 1883, 1888, 1894, 1900, 1906, 708 1913, 1915, 1917, 1919, 1923, 1924, 1930, 1931, 1933, 1935, 709 1938, 1945, 1947, 1951, 1952, 1954, 1959, 1961, 1963, 1965, 710 1967, 1970, 1972, 1975, 1978, 1980, 1984, 1987, 1991, 1995, 711 1998, 2003, 2008, 2012, 2021, 2025, 2028, 2030, 2033, 2040, 712 2049, 2053, 2056, 2060, 2064, 2069, 2074, 2078, 2080, 2082, 713 2084, 2089, 2096, 2100, 2103, 2107, 2111, 2116, 2121, 2125, 714 2128, 2130, 2133, 2136, 2138, 2142, 2145, 2149, 2153, 2156, 715 2161, 2166, 2170, 2177, 2186, 2190, 2193, 2195, 2198, 2201, 716 2204, 2208, 2212, 2215, 2220, 2225, 2229, 2236, 2245, 2249, 717 2252, 2254, 2257, 2260, 2262, 2264, 2267, 2271, 2275, 2278, 718 2283, 2290, 2299, 2301, 2304, 2307, 2309, 2312, 2315, 2319, 719 2323, 2325, 2330, 2335, 2339, 2345, 2354, 2358, 2361, 2365, 720 2367, 2373, 2379, 2386, 2393, 2395, 2398, 2401, 2403, 2406, 721 2409, 2413, 2417, 2419, 2424, 2429, 2433, 2439, 2448, 2452, 722 2454, 2457, 2459, 2462, 2469, 2475, 2482, 2490, 2498, 2500, 723 2503, 2506, 2508, 2511, 2514, 2518, 2522, 2524, 2529, 2534, 724 2538, 2547, 2551, 2553, 2555, 2558, 2560, 2562, 2565, 2569, 725 2572, 2576, 2579, 2583, 2587, 2590, 2595, 2599, 2602, 2606, 726 2609, 2614, 2618, 2621, 2628, 2635, 2642, 2650, 2652, 2655, 727 2657, 2659, 2661, 2664, 2668, 2671, 2675, 2678, 2682, 2686, 728 2691, 2694, 2698, 2703, 2706, 2712, 2718, 2725, 2732, 2733, 729 2735, 2736 733 730 }; 734 731 … … 736 733 static const yytype_int16 yyrhs[] = 737 734 { 738 301, 0, -1, -1, -1, 79, -1, 80, -1, 81,739 -1, 7 2, -1, 76, -1, 140, -1, 72, -1, 76,740 -1, 7 2, -1, 140, -1, 83, -1, 84, -1, 82,741 -1, 14 1, 82, -1, 72, -1, 140, -1, 109, 168,742 1 10, -1, 109, 172, 110, -1, 142, -1, 143, 111,743 13 4, 163, 135, 112, -1, 143, 109, 144, 110, -1,744 14 3, 113, 139, -1, 143, 113, 111, 134, 146, 135,745 11 2, -1, 143, 85, 139, -1, 143, 85, 111, 134,746 14 6, 135, 112, -1, 143, 86, -1, 143, 87, -1,747 10 9, 274, 110, 114, 278, 371, 115, -1, 143, 114,748 14 4, 115, -1, 145, -1, 144, 116, 145, -1, -1,749 16 3, -1, 139, 117, 163, -1, 111, 134, 163, 135,750 11 2, 117, 163, -1, 111, 134, 163, 116, 166, 135,751 11 2, 117, 163, -1, 147, -1, 146, 116, 147, -1,752 13 9, -1, 139, 113, 147, -1, 139, 113, 111, 134,753 14 6, 135, 112, -1, 139, 85, 147, -1, 139, 85,754 11 1, 134, 146, 135, 112, -1, 143, -1, 136, -1,755 14 1, -1, 86, 148, -1, 87, 148, -1, 40, 150,756 -1, 14 9, 150, -1, 118, 150, -1, 119, 150, -1,757 3 7, 148, -1, 37, 109, 274, 110, -1, 38, 109,758 27 4, 116, 139, 110, -1, 76, -1, 76, 109, 275,759 1 10, -1, 76, 109, 145, 110, -1, 66, 148, -1,760 6 6, 109, 274, 110, -1, 94, 139, -1, 120, -1,761 12 1, -1, 122, -1, 123, -1, 148, -1, 109, 274,762 1 10, 150, -1, 109, 274, 110, 165, -1, 150, -1,763 15 1, 119, 150, -1, 151, 124, 150, -1, 151, 125,764 1 50, -1, 151, -1, 152, 121, 151, -1, 152, 122,765 15 1, -1, 152, -1, 153, 88, 152, -1, 153, 89,766 15 2, -1, 153, -1, 154, 126, 153, -1, 154, 127,767 15 3, -1, 154, 90, 153, -1, 154, 91, 153, -1,768 15 4, -1, 155, 92, 154, -1, 155, 93, 154, -1,769 15 5, -1, 156, 120, 155, -1, 156, -1, 157, 128,770 15 6, -1, 157, -1, 158, 129, 157, -1, 158, -1,771 15 9, 94, 158, -1, 159, -1, 160, 95, 159, -1,772 1 60, -1, 160, 130, 168, 117, 161, -1, 160, 130,773 11 7, 161, -1, 160, 130, 168, 117, 165, -1, 161,774 -1, 16 1, -1, 148, 131, 163, -1, 148, 167, 163,775 -1, 16 5, 372, -1, -1, 163, -1, 111, 112, -1,776 11 1, 134, 163, 135, 112, -1, 111, 134, 116, 166,777 13 5, 112, -1, 111, 134, 163, 116, 166, 135, 112,778 -1, 16 4, -1, 166, 116, 164, -1, 97, -1, 98,779 -1, 9 9, -1, 100, -1, 101, -1, 102, -1, 103,780 -1, 10 4, -1, 105, -1, 106, -1, 163, -1, 168,781 11 6, 163, -1, -1, 168, -1, 171, -1, 172, -1,782 17 6, -1, 177, -1, 189, -1, 191, -1, 192, -1,783 19 7, -1, 128, 143, 114, 144, 115, 132, -1, 139,784 11 7, 311, 170, -1, 114, 115, -1, 114, 134, 134,785 20 8, 173, 135, 115, -1, 174, -1, 173, 134, 174,786 -1, 21 1, -1, 40, 211, -1, 307, -1, 170, 135,787 -1, 1 70, -1, 175, 170, -1, 169, 132, -1, 41,788 10 9, 168, 110, 170, -1, 41, 109, 168, 110, 170,789 4 2, 170, -1, 43, 109, 168, 110, 182, -1, 43,790 10 9, 168, 110, 114, 134, 204, 183, 115, -1, 53,791 10 9, 168, 110, 182, -1, 53, 109, 168, 110, 114,792 13 4, 204, 185, 115, -1, 162, -1, 162, 96, 162,793 -1, 30 9, -1, 178, -1, 179, 116, 178, -1, 44,794 17 9, 117, -1, 45, 117, -1, 180, -1, 181, 180,795 -1, 18 1, 170, -1, -1, 184, -1, 181, 175, -1,796 18 4, 181, 175, -1, -1, 186, -1, 181, 188, -1,797 18 1, 175, 187, -1, 186, 181, 188, -1, 186, 181,798 17 5, 187, -1, -1, 188, -1, 56, -1, 56, 132,799 -1, 4 7, 109, 168, 110, 170, -1, 46, 170, 47,800 10 9, 168, 110, 132, -1, 48, 109, 134, 190, 110,801 1 70, -1, 169, 135, 132, 169, 132, 169, -1, 211,802 16 9, 132, 169, -1, 51, 139, 132, -1, 51, 119,803 16 8, 132, -1, 50, 132, -1, 50, 139, 132, -1,804 4 9, 132, -1, 49, 139, 132, -1, 52, 169, 132,805 -1, 6 1, 164, 132, -1, 62, 164, 132, -1, 62,806 16 4, 63, 163, 132, -1, 57, 172, 193, -1, 57,807 17 2, 195, -1, 57, 172, 193, 195, -1, 194, -1,808 5 8, 109, 96, 110, 172, -1, 194, 58, 109, 96,809 1 10, 172, -1, 59, 109, 96, 110, 172, -1, 194,810 5 9, 109, 96, 110, 172, -1, 58, 109, 134, 134,811 19 6, 135, 110, 172, 135, -1, 194, 58, 109, 134,812 13 4, 196, 135, 110, 172, 135, -1, 59, 109, 134,813 13 4, 196, 135, 110, 172, 135, -1, 194, 59, 109,814 13 4, 134, 196, 135, 110, 172, 135, -1, 60, 172,815 -1, 22 4, -1, 224, 308, -1, 224, 356, -1, 365,816 13 9, -1, 365, -1, 64, 198, 109, 141, 110, 132,817 -1, 6 4, 198, 109, 141, 117, 199, 110, 132, -1,818 6 4, 198, 109, 141, 117, 199, 117, 199, 110, 132,819 -1, 6 4, 198, 109, 141, 117, 199, 117, 199, 117,820 20 2, 110, 132, -1, 64, 198, 51, 109, 141, 117,821 11 7, 199, 117, 202, 117, 203, 110, 132, -1, -1,822 11, -1, -1, 200, -1, 201, -1, 200, 116, 201,823 -1, 14 1, 109, 162, 110, -1, 111, 162, 112, 141,824 10 9, 162, 110, -1, -1, 141, -1, 202, 116, 141,825 -1, 13 9, -1, 203, 116, 139, -1, 135, -1, 205,826 -1, 21 1, -1, 205, 134, 211, -1, 135, -1, 207,827 -1, 22 1, -1, 207, 134, 221, -1, -1, 209, -1,828 2 9, 210, 132, -1, 209, 29, 210, 132, -1, 273,829 -1, 2 10, 116, 273, -1, 212, -1, 221, -1, 213,830 13 5, 132, -1, 218, 135, 132, -1, 215, 135, 132,831 -1, 2 92, 135, 132, -1, 295, 135, 132, -1, 214,832 27 6, -1, 230, 214, 276, -1, 213, 135, 116, 134,833 2 71, 276, -1, 366, 271, 310, -1, 369, 271, 310,834 -1, 22 6, 369, 271, 310, -1, 216, -1, 226, 216,835 -1, 2 30, 216, -1, 230, 226, 216, -1, 215, 135,836 11 6, 134, 271, -1, 111, 112, 271, 109, 134, 259,837 13 5, 110, -1, 369, 271, 109, 134, 259, 135, 110,838 -1, 21 7, 271, 109, 134, 259, 135, 110, -1, 111,839 13 4, 261, 135, 112, -1, 111, 134, 261, 135, 116,840 13 4, 262, 135, 112, -1, 3, 214, -1, 3, 216,841 -1, 21 8, 135, 116, 134, 139, -1, 3, 224, 308,842 -1, 21 9, 135, 116, 134, 308, -1, 226, 3, 224,843 30 8, -1, 224, 3, 308, -1, 224, 3, 226, 308,844 -1, 3, 13 9, 131, 163, -1, 220, 135, 116, 134,845 13 9, 131, 163, -1, 222, 135, 132, -1, 219, 135,846 13 2, -1, 220, 135, 132, -1, 239, 135, 132, -1,847 22 3, 308, 310, 276, -1, 222, 116, 311, 308, 310,848 27 6, -1, 235, -1, 239, -1, 241, -1, 282, -1,849 23 6, -1, 240, -1, 242, -1, 283, -1, -1, 226,850 -1, 22 7, -1, 226, 227, -1, 228, -1, 313, -1,851 10, -1, 12, -1, 11, -1, 14, -1, 6 7, -1,852 -1, 13, 10 9, 229, 285, 110, -1, 231, -1, 226,853 23 1, -1, 230, 226, 231, -1, 232, -1, 231, 232,854 -1, 23 3, -1, 5, -1, 7, -1, 4, -1, 6,855 -1, 8, -1, 9, -1, 6 9, -1, 71, -1, 16,735 298, 0, -1, -1, -1, 78, -1, 79, -1, 80, 736 -1, 71, -1, 75, -1, 139, -1, 71, -1, 75, 737 -1, 71, -1, 139, -1, 82, -1, 83, -1, 81, 738 -1, 140, 81, -1, 71, -1, 139, -1, 108, 167, 739 109, -1, 108, 171, 109, -1, 141, -1, 142, 110, 740 133, 162, 134, 111, -1, 142, 108, 143, 109, -1, 741 142, 112, 138, -1, 142, 112, 110, 133, 145, 134, 742 111, -1, 142, 84, 138, -1, 142, 84, 110, 133, 743 145, 134, 111, -1, 142, 85, -1, 142, 86, -1, 744 108, 271, 109, 113, 275, 368, 114, -1, 142, 113, 745 143, 114, -1, 144, -1, 143, 115, 144, -1, -1, 746 162, -1, 138, 116, 162, -1, 110, 133, 162, 134, 747 111, 116, 162, -1, 110, 133, 162, 115, 165, 134, 748 111, 116, 162, -1, 146, -1, 145, 115, 146, -1, 749 138, -1, 138, 112, 146, -1, 138, 112, 110, 133, 750 145, 134, 111, -1, 138, 84, 146, -1, 138, 84, 751 110, 133, 145, 134, 111, -1, 142, -1, 135, -1, 752 140, -1, 85, 147, -1, 86, 147, -1, 39, 149, 753 -1, 148, 149, -1, 117, 149, -1, 118, 149, -1, 754 36, 147, -1, 36, 108, 271, 109, -1, 37, 108, 755 271, 115, 138, 109, -1, 75, -1, 75, 108, 272, 756 109, -1, 75, 108, 144, 109, -1, 65, 147, -1, 757 65, 108, 271, 109, -1, 93, 138, -1, 119, -1, 758 120, -1, 121, -1, 122, -1, 147, -1, 108, 271, 759 109, 149, -1, 108, 271, 109, 164, -1, 149, -1, 760 150, 118, 149, -1, 150, 123, 149, -1, 150, 124, 761 149, -1, 150, -1, 151, 120, 150, -1, 151, 121, 762 150, -1, 151, -1, 152, 87, 151, -1, 152, 88, 763 151, -1, 152, -1, 153, 125, 152, -1, 153, 126, 764 152, -1, 153, 89, 152, -1, 153, 90, 152, -1, 765 153, -1, 154, 91, 153, -1, 154, 92, 153, -1, 766 154, -1, 155, 119, 154, -1, 155, -1, 156, 127, 767 155, -1, 156, -1, 157, 128, 156, -1, 157, -1, 768 158, 93, 157, -1, 158, -1, 159, 94, 158, -1, 769 159, -1, 159, 129, 167, 116, 160, -1, 159, 129, 770 116, 160, -1, 159, 129, 167, 116, 164, -1, 160, 771 -1, 160, -1, 147, 130, 162, -1, 147, 166, 162, 772 -1, 164, 369, -1, -1, 162, -1, 110, 111, -1, 773 110, 133, 162, 134, 111, -1, 110, 133, 115, 165, 774 134, 111, -1, 110, 133, 162, 115, 165, 134, 111, 775 -1, 163, -1, 165, 115, 163, -1, 96, -1, 97, 776 -1, 98, -1, 99, -1, 100, -1, 101, -1, 102, 777 -1, 103, -1, 104, -1, 105, -1, 162, -1, 167, 778 115, 162, -1, -1, 167, -1, 170, -1, 171, -1, 779 175, -1, 176, -1, 188, -1, 190, -1, 191, -1, 780 196, -1, 127, 142, 113, 143, 114, 131, -1, 138, 781 116, 308, 169, -1, 113, 114, -1, 113, 133, 133, 782 207, 172, 134, 114, -1, 173, -1, 172, 133, 173, 783 -1, 210, -1, 39, 210, -1, 304, -1, 169, 134, 784 -1, 169, -1, 174, 169, -1, 168, 131, -1, 40, 785 108, 167, 109, 169, -1, 40, 108, 167, 109, 169, 786 41, 169, -1, 42, 108, 167, 109, 181, -1, 42, 787 108, 167, 109, 113, 133, 203, 182, 114, -1, 52, 788 108, 167, 109, 181, -1, 52, 108, 167, 109, 113, 789 133, 203, 184, 114, -1, 161, -1, 161, 95, 161, 790 -1, 306, -1, 177, -1, 178, 115, 177, -1, 43, 791 178, 116, -1, 44, 116, -1, 179, -1, 180, 179, 792 -1, 180, 169, -1, -1, 183, -1, 180, 174, -1, 793 183, 180, 174, -1, -1, 185, -1, 180, 187, -1, 794 180, 174, 186, -1, 185, 180, 187, -1, 185, 180, 795 174, 186, -1, -1, 187, -1, 55, -1, 55, 131, 796 -1, 46, 108, 167, 109, 169, -1, 45, 169, 46, 797 108, 167, 109, 131, -1, 47, 108, 133, 189, 109, 798 169, -1, 168, 134, 131, 168, 131, 168, -1, 210, 799 168, 131, 168, -1, 50, 138, 131, -1, 50, 118, 800 167, 131, -1, 49, 131, -1, 49, 138, 131, -1, 801 48, 131, -1, 48, 138, 131, -1, 51, 168, 131, 802 -1, 60, 163, 131, -1, 61, 163, 131, -1, 61, 803 163, 62, 162, 131, -1, 56, 171, 192, -1, 56, 804 171, 194, -1, 56, 171, 192, 194, -1, 193, -1, 805 57, 108, 95, 109, 171, -1, 193, 57, 108, 95, 806 109, 171, -1, 58, 108, 95, 109, 171, -1, 193, 807 58, 108, 95, 109, 171, -1, 57, 108, 133, 133, 808 195, 134, 109, 171, 134, -1, 193, 57, 108, 133, 809 133, 195, 134, 109, 171, 134, -1, 58, 108, 133, 810 133, 195, 134, 109, 171, 134, -1, 193, 58, 108, 811 133, 133, 195, 134, 109, 171, 134, -1, 59, 171, 812 -1, 223, -1, 223, 305, -1, 223, 353, -1, 362, 813 138, -1, 362, -1, 63, 197, 108, 140, 109, 131, 814 -1, 63, 197, 108, 140, 116, 198, 109, 131, -1, 815 63, 197, 108, 140, 116, 198, 116, 198, 109, 131, 816 -1, 63, 197, 108, 140, 116, 198, 116, 198, 116, 817 201, 109, 131, -1, 63, 197, 50, 108, 140, 116, 818 116, 198, 116, 201, 116, 202, 109, 131, -1, -1, 819 11, -1, -1, 199, -1, 200, -1, 199, 115, 200, 820 -1, 140, 108, 161, 109, -1, 110, 161, 111, 140, 821 108, 161, 109, -1, -1, 140, -1, 201, 115, 140, 822 -1, 138, -1, 202, 115, 138, -1, 134, -1, 204, 823 -1, 210, -1, 204, 133, 210, -1, 134, -1, 206, 824 -1, 220, -1, 206, 133, 220, -1, -1, 208, -1, 825 28, 209, 131, -1, 208, 28, 209, 131, -1, 270, 826 -1, 209, 115, 270, -1, 211, -1, 220, -1, 212, 827 134, 131, -1, 217, 134, 131, -1, 214, 134, 131, 828 -1, 289, 134, 131, -1, 292, 134, 131, -1, 213, 829 273, -1, 229, 213, 273, -1, 212, 134, 115, 133, 830 268, 273, -1, 363, 268, 307, -1, 366, 268, 307, 831 -1, 225, 366, 268, 307, -1, 215, -1, 225, 215, 832 -1, 229, 215, -1, 229, 225, 215, -1, 214, 134, 833 115, 133, 268, -1, 110, 111, 268, 108, 133, 256, 834 134, 109, -1, 366, 268, 108, 133, 256, 134, 109, 835 -1, 216, 268, 108, 133, 256, 134, 109, -1, 110, 836 133, 258, 134, 111, -1, 110, 133, 258, 134, 115, 837 133, 259, 134, 111, -1, 3, 213, -1, 3, 215, 838 -1, 217, 134, 115, 133, 138, -1, 3, 223, 305, 839 -1, 218, 134, 115, 133, 305, -1, 225, 3, 223, 840 305, -1, 223, 3, 305, -1, 223, 3, 225, 305, 841 -1, 3, 138, 130, 162, -1, 219, 134, 115, 133, 842 138, 130, 162, -1, 221, 134, 131, -1, 218, 134, 843 131, -1, 219, 134, 131, -1, 238, 134, 131, -1, 844 222, 305, 307, 273, -1, 221, 115, 308, 305, 307, 845 273, -1, 234, -1, 238, -1, 240, -1, 279, -1, 846 235, -1, 239, -1, 241, -1, 280, -1, -1, 225, 847 -1, 226, -1, 225, 226, -1, 227, -1, 310, -1, 848 10, -1, 12, -1, 11, -1, 14, -1, 66, -1, 849 -1, 13, 108, 228, 282, 109, -1, 230, -1, 225, 850 230, -1, 229, 225, 230, -1, 231, -1, 230, 231, 851 -1, 232, -1, 5, -1, 7, -1, 4, -1, 6, 852 -1, 8, -1, 9, -1, 68, -1, 70, -1, 16, 856 853 -1, 21, -1, 20, -1, 18, -1, 19, -1, 17, 857 -1, 22, -1, 23, -1, 15, -1, 25, -1, 26, 858 -1, 27, -1, 24, -1, 236, -1, 230, 236, -1, 859 235, 232, -1, 235, 232, 226, -1, 235, 232, 236, 860 -1, 237, -1, 225, 238, 225, -1, 234, -1, 226, 861 234, -1, 237, 227, -1, 237, 234, -1, 28, 109, 862 275, 110, -1, 28, 109, 168, 110, -1, 78, 109, 863 275, 110, -1, 78, 109, 168, 110, -1, 240, -1, 864 230, 240, -1, 239, 232, -1, 239, 232, 226, -1, 865 243, -1, 226, 243, -1, 240, 227, -1, 242, -1, 866 230, 242, -1, 241, 232, -1, 241, 232, 226, -1, 867 74, -1, 226, 74, -1, 242, 227, -1, 244, -1, 868 255, -1, 246, 114, 247, 115, -1, 246, 273, -1, 869 -1, 246, 273, 245, 114, 247, 115, -1, 246, 109, 870 291, 110, 114, 247, 115, -1, 246, 284, -1, 31, 871 311, -1, 32, 311, -1, 248, -1, 247, 248, -1, 872 249, 132, -1, 40, 249, 132, -1, 250, 132, -1, 873 40, 250, 132, -1, 365, -1, 365, 273, -1, 249, 874 116, 273, -1, 249, 116, -1, 224, 251, -1, 250, 875 116, 311, 251, -1, -1, 253, -1, 317, 252, -1, 876 330, 252, -1, 356, -1, -1, 253, -1, 117, 162, 877 -1, 30, 311, -1, 254, 114, 257, 371, 115, -1, 878 254, 273, -1, -1, 254, 273, 256, 114, 257, 371, 879 115, -1, 273, 258, -1, 257, 116, 273, 258, -1, 880 -1, 131, 162, -1, -1, 260, -1, 262, -1, 261, 881 -1, 261, 135, 116, 134, 262, -1, 262, 135, 116, 882 134, 96, -1, 261, 135, 116, 134, 96, -1, 266, 883 -1, 262, 135, 116, 134, 266, -1, 261, 135, 116, 884 134, 266, -1, 261, 135, 116, 134, 262, 135, 116, 885 134, 266, -1, 267, -1, 262, 135, 116, 134, 267, 886 -1, -1, 264, -1, 265, -1, 265, 135, 116, 134, 887 96, -1, 269, -1, 268, -1, 265, 135, 116, 134, 888 269, -1, 265, 135, 116, 134, 268, -1, 268, -1, 889 361, 271, 372, -1, 369, 271, 372, -1, 226, 369, 890 271, 372, -1, 216, -1, 269, -1, 361, -1, 369, 891 -1, 226, 369, -1, 370, -1, 223, 335, 372, -1, 892 223, 339, 372, -1, 223, -1, 223, 350, -1, 139, 893 -1, 270, 116, 139, -1, 137, -1, 74, -1, 75, 894 -1, 138, -1, 74, -1, 75, -1, 139, -1, 74, 895 -1, 75, -1, 365, -1, 224, -1, 224, 356, -1, 896 365, -1, 370, -1, 224, -1, 224, 344, -1, -1, 897 131, 277, -1, 107, 277, -1, 163, -1, 114, 278, 898 371, 115, -1, -1, 277, -1, 279, 277, -1, 278, 899 116, 277, -1, 278, 116, 279, 277, -1, 280, 117, 900 -1, 273, 117, -1, 281, -1, 280, 281, -1, 80, 901 -1, 113, 273, -1, 111, 134, 163, 135, 112, -1, 902 111, 134, 309, 135, 112, -1, 111, 134, 162, 96, 903 162, 135, 112, -1, 113, 111, 134, 146, 135, 112, 904 -1, 283, -1, 230, 283, -1, 282, 232, -1, 282, 905 232, 226, -1, 284, -1, 226, 284, -1, 283, 227, 906 -1, 75, 109, 291, 110, -1, 286, 372, -1, 285, 907 116, 286, 372, -1, -1, 288, 273, 287, 289, -1, 908 224, 335, -1, 33, -1, 35, -1, 34, -1, -1, 909 289, 290, -1, 129, 273, 109, 291, 110, -1, 129, 910 114, 134, 297, 115, -1, 129, 109, 134, 285, 135, 911 110, 114, 134, 297, 115, 109, 291, 110, -1, 275, 912 -1, 163, -1, 291, 116, 275, -1, 291, 116, 163, 913 -1, 33, 293, -1, 231, 33, 293, -1, 292, 116, 914 293, -1, 294, 289, -1, 294, 289, 131, 275, -1, 915 273, -1, 272, 109, 134, 285, 135, 110, -1, 36, 916 273, 109, 134, 285, 135, 110, 114, 115, -1, -1, 917 36, 273, 109, 134, 285, 135, 110, 114, 296, 297, 918 115, -1, 298, -1, 297, 134, 298, -1, 299, 135, 919 132, -1, 300, 135, 132, -1, 214, -1, 216, -1, 920 299, 135, 116, 134, 271, -1, 224, 308, -1, 300, 921 135, 116, 134, 308, -1, -1, 302, -1, 304, -1, 922 302, 134, 304, -1, -1, 302, -1, 211, -1, 306, 923 -1, 197, -1, -1, 5, 82, 305, 114, 303, 115, 924 -1, 40, 304, -1, 307, -1, 322, 172, -1, 326, 925 134, 206, 172, -1, 215, 172, -1, 223, 322, 172, 926 -1, 226, 322, 172, -1, 230, 322, 172, -1, 230, 927 226, 322, 172, -1, 223, 326, 134, 206, 172, -1, 928 226, 326, 134, 206, 172, -1, 230, 326, 134, 206, 929 172, -1, 230, 226, 326, 134, 206, 172, -1, 317, 930 -1, 322, -1, 330, -1, 162, 123, 162, -1, -1, 931 64, 109, 141, 110, 311, -1, -1, 312, -1, 313, 932 -1, 312, 313, -1, 39, 109, 109, 314, 110, 110, 933 -1, 315, -1, 314, 116, 315, -1, -1, 316, -1, 934 316, 109, 169, 110, -1, 271, -1, 233, -1, 234, 935 -1, 227, -1, 318, 311, -1, 319, -1, 320, 311, 936 -1, 321, 311, -1, 137, -1, 109, 318, 110, -1, 937 119, 317, -1, 119, 226, 317, -1, 109, 319, 110, 938 -1, 318, 348, -1, 109, 319, 110, 348, -1, 109, 939 320, 110, 349, -1, 109, 320, 110, -1, 109, 319, 940 110, 109, 134, 263, 135, 110, -1, 109, 321, 110, 941 -1, 323, 311, -1, 324, -1, 325, 311, -1, 318, 942 109, 134, 263, 135, 110, -1, 109, 324, 110, 109, 943 134, 263, 135, 110, -1, 109, 323, 110, -1, 119, 944 322, -1, 119, 226, 322, -1, 109, 324, 110, -1, 945 109, 324, 110, 348, -1, 109, 325, 110, 349, -1, 946 109, 325, 110, -1, 327, -1, 328, -1, 329, -1, 947 318, 109, 270, 110, -1, 109, 328, 110, 109, 270, 948 110, -1, 109, 327, 110, -1, 119, 326, -1, 119, 949 226, 326, -1, 109, 328, 110, -1, 109, 328, 110, 950 348, -1, 109, 329, 110, 349, -1, 109, 329, 110, 951 -1, 331, 311, -1, 332, -1, 333, 311, -1, 334, 952 311, -1, 340, -1, 109, 331, 110, -1, 119, 330, 953 -1, 119, 226, 330, -1, 109, 332, 110, -1, 331, 954 348, -1, 109, 332, 110, 348, -1, 109, 333, 110, 955 349, -1, 109, 333, 110, -1, 331, 109, 134, 263, 956 135, 110, -1, 109, 332, 110, 109, 134, 263, 135, 957 110, -1, 109, 334, 110, -1, 318, 311, -1, 336, 958 -1, 337, 311, -1, 338, 311, -1, 119, 335, -1, 959 119, 226, 335, -1, 109, 336, 110, -1, 318, 354, 960 -1, 109, 336, 110, 348, -1, 109, 337, 110, 349, 961 -1, 109, 337, 110, -1, 318, 109, 134, 263, 135, 962 110, -1, 109, 336, 110, 109, 134, 263, 135, 110, 963 -1, 109, 338, 110, -1, 340, 311, -1, 341, -1, 964 342, 311, -1, 343, 311, -1, 74, -1, 75, -1, 965 119, 339, -1, 119, 226, 339, -1, 109, 341, 110, 966 -1, 340, 354, -1, 109, 341, 110, 354, -1, 340, 967 109, 134, 263, 135, 110, -1, 109, 341, 110, 109, 968 134, 263, 135, 110, -1, 345, -1, 346, 311, -1, 969 347, 311, -1, 119, -1, 119, 226, -1, 119, 344, 970 -1, 119, 226, 344, -1, 109, 345, 110, -1, 348, 971 -1, 109, 345, 110, 348, -1, 109, 346, 110, 349, 972 -1, 109, 346, 110, -1, 109, 134, 263, 135, 110, 973 -1, 109, 345, 110, 109, 134, 263, 135, 110, -1, 974 109, 347, 110, -1, 111, 112, -1, 111, 112, 349, 975 -1, 349, -1, 111, 134, 163, 135, 112, -1, 111, 976 134, 119, 135, 112, -1, 349, 111, 134, 163, 135, 977 112, -1, 349, 111, 134, 119, 135, 112, -1, 351, 978 -1, 352, 311, -1, 353, 311, -1, 119, -1, 119, 979 226, -1, 119, 350, -1, 119, 226, 350, -1, 109, 980 351, 110, -1, 354, -1, 109, 351, 110, 354, -1, 981 109, 352, 110, 349, -1, 109, 352, 110, -1, 109, 982 134, 263, 135, 110, -1, 109, 351, 110, 109, 134, 983 263, 135, 110, -1, 109, 353, 110, -1, 355, -1, 984 355, 349, -1, 349, -1, 111, 112, -1, 111, 134, 985 226, 119, 135, 112, -1, 111, 134, 226, 135, 112, 986 -1, 111, 134, 226, 163, 135, 112, -1, 111, 134, 987 7, 225, 163, 135, 112, -1, 111, 134, 226, 7, 988 163, 135, 112, -1, 357, -1, 358, 311, -1, 359, 989 311, -1, 119, -1, 119, 226, -1, 119, 356, -1, 990 119, 226, 356, -1, 109, 357, 110, -1, 348, -1, 991 109, 357, 110, 348, -1, 109, 358, 110, 349, -1, 992 109, 358, 110, -1, 109, 357, 110, 109, 134, 263, 993 135, 110, -1, 109, 359, 110, -1, 361, -1, 369, 994 -1, 226, 369, -1, 362, -1, 363, -1, 119, 224, 995 -1, 226, 119, 224, -1, 119, 370, -1, 226, 119, 996 370, -1, 119, 360, -1, 226, 119, 360, -1, 111, 997 112, 224, -1, 364, 224, -1, 111, 112, 349, 224, 998 -1, 364, 349, 224, -1, 349, 224, -1, 111, 112, 999 362, -1, 364, 362, -1, 111, 112, 349, 362, -1, 1000 364, 349, 362, -1, 349, 362, -1, 111, 134, 226, 1001 119, 135, 112, -1, 111, 134, 226, 163, 135, 112, 1002 -1, 111, 134, 230, 163, 135, 112, -1, 111, 134, 1003 230, 226, 163, 135, 112, -1, 369, -1, 226, 369, 1004 -1, 366, -1, 367, -1, 368, -1, 119, 224, -1, 1005 226, 119, 224, -1, 119, 370, -1, 226, 119, 370, 1006 -1, 119, 365, -1, 226, 119, 365, -1, 111, 112, 1007 224, -1, 111, 112, 349, 224, -1, 349, 224, -1, 1008 111, 112, 367, -1, 111, 112, 349, 367, -1, 349, 1009 367, -1, 111, 134, 262, 135, 112, -1, 111, 112, 1010 109, 259, 110, -1, 369, 109, 134, 259, 135, 110, 1011 -1, 217, 109, 134, 259, 135, 110, -1, -1, 116, 1012 -1, -1, 131, 163, -1 854 -1, 22, -1, 23, -1, 15, -1, 24, -1, 25, 855 -1, 26, -1, 235, -1, 229, 235, -1, 234, 231, 856 -1, 234, 231, 225, -1, 234, 231, 235, -1, 236, 857 -1, 224, 237, 224, -1, 233, -1, 225, 233, -1, 858 236, 226, -1, 236, 233, -1, 27, 108, 272, 109, 859 -1, 27, 108, 167, 109, -1, 77, 108, 272, 109, 860 -1, 77, 108, 167, 109, -1, 239, -1, 229, 239, 861 -1, 238, 231, -1, 238, 231, 225, -1, 242, -1, 862 225, 242, -1, 239, 226, -1, 241, -1, 229, 241, 863 -1, 240, 231, -1, 240, 231, 225, -1, 73, -1, 864 225, 73, -1, 241, 226, -1, 243, -1, 253, -1, 865 244, 113, 245, 114, -1, 244, 270, -1, 244, 270, 866 113, 245, 114, -1, 244, 108, 288, 109, 113, 245, 867 114, -1, 244, 281, -1, 30, 308, -1, 31, 308, 868 -1, 246, -1, 245, 246, -1, 247, 131, -1, 39, 869 247, 131, -1, 248, 131, -1, 39, 248, 131, -1, 870 362, -1, 362, 270, -1, 247, 115, 270, -1, 247, 871 115, -1, 223, 249, -1, 248, 115, 308, 249, -1, 872 -1, 251, -1, 314, 250, -1, 327, 250, -1, 353, 873 -1, -1, 251, -1, 116, 161, -1, 29, 308, -1, 874 252, 113, 254, 368, 114, -1, 252, 270, 113, 254, 875 368, 114, -1, 252, 270, -1, 270, 255, -1, 254, 876 115, 270, 255, -1, -1, 130, 161, -1, -1, 257, 877 -1, 259, -1, 258, -1, 258, 134, 115, 133, 259, 878 -1, 259, 134, 115, 133, 95, -1, 258, 134, 115, 879 133, 95, -1, 263, -1, 259, 134, 115, 133, 263, 880 -1, 258, 134, 115, 133, 263, -1, 258, 134, 115, 881 133, 259, 134, 115, 133, 263, -1, 264, -1, 259, 882 134, 115, 133, 264, -1, -1, 261, -1, 262, -1, 883 262, 134, 115, 133, 95, -1, 266, -1, 265, -1, 884 262, 134, 115, 133, 266, -1, 262, 134, 115, 133, 885 265, -1, 265, -1, 358, 268, 369, -1, 366, 268, 886 369, -1, 225, 366, 268, 369, -1, 215, -1, 266, 887 -1, 358, -1, 366, -1, 225, 366, -1, 367, -1, 888 222, 332, 369, -1, 222, 336, 369, -1, 222, -1, 889 222, 347, -1, 138, -1, 267, 115, 138, -1, 136, 890 -1, 73, -1, 74, -1, 137, -1, 73, -1, 74, 891 -1, 138, -1, 73, -1, 74, -1, 362, -1, 223, 892 -1, 223, 353, -1, 362, -1, 367, -1, 223, -1, 893 223, 341, -1, -1, 130, 274, -1, 106, 274, -1, 894 162, -1, 113, 275, 368, 114, -1, -1, 274, -1, 895 276, 274, -1, 275, 115, 274, -1, 275, 115, 276, 896 274, -1, 277, 116, -1, 270, 116, -1, 278, -1, 897 277, 278, -1, 79, -1, 112, 270, -1, 110, 133, 898 162, 134, 111, -1, 110, 133, 306, 134, 111, -1, 899 110, 133, 161, 95, 161, 134, 111, -1, 112, 110, 900 133, 145, 134, 111, -1, 280, -1, 229, 280, -1, 901 279, 231, -1, 279, 231, 225, -1, 281, -1, 225, 902 281, -1, 280, 226, -1, 74, 108, 288, 109, -1, 903 283, 369, -1, 282, 115, 283, 369, -1, -1, 285, 904 270, 284, 286, -1, 223, 332, -1, 32, -1, 34, 905 -1, 33, -1, -1, 286, 287, -1, 128, 270, 108, 906 288, 109, -1, 128, 113, 133, 294, 114, -1, 128, 907 108, 133, 282, 134, 109, 113, 133, 294, 114, 108, 908 288, 109, -1, 272, -1, 162, -1, 288, 115, 272, 909 -1, 288, 115, 162, -1, 32, 290, -1, 230, 32, 910 290, -1, 289, 115, 290, -1, 291, 286, -1, 291, 911 286, 130, 272, -1, 270, -1, 269, 108, 133, 282, 912 134, 109, -1, 35, 270, 108, 133, 282, 134, 109, 913 113, 114, -1, -1, 35, 270, 108, 133, 282, 134, 914 109, 113, 293, 294, 114, -1, 295, -1, 294, 133, 915 295, -1, 296, 134, 131, -1, 297, 134, 131, -1, 916 213, -1, 215, -1, 296, 134, 115, 133, 268, -1, 917 223, 305, -1, 297, 134, 115, 133, 305, -1, -1, 918 299, -1, 301, -1, 299, 133, 301, -1, -1, 299, 919 -1, 210, -1, 303, -1, 196, -1, -1, 5, 81, 920 302, 113, 300, 114, -1, 39, 301, -1, 304, -1, 921 319, 171, -1, 323, 133, 205, 171, -1, 214, 171, 922 -1, 222, 319, 171, -1, 225, 319, 171, -1, 229, 923 319, 171, -1, 229, 225, 319, 171, -1, 222, 323, 924 133, 205, 171, -1, 225, 323, 133, 205, 171, -1, 925 229, 323, 133, 205, 171, -1, 229, 225, 323, 133, 926 205, 171, -1, 314, -1, 319, -1, 327, -1, 161, 927 122, 161, -1, -1, 63, 108, 140, 109, 308, -1, 928 -1, 309, -1, 310, -1, 309, 310, -1, 38, 108, 929 108, 311, 109, 109, -1, 312, -1, 311, 115, 312, 930 -1, -1, 313, -1, 313, 108, 168, 109, -1, 268, 931 -1, 232, -1, 233, -1, 226, -1, 315, 308, -1, 932 316, -1, 317, 308, -1, 318, 308, -1, 136, -1, 933 108, 315, 109, -1, 118, 314, -1, 118, 225, 314, 934 -1, 108, 316, 109, -1, 315, 345, -1, 108, 316, 935 109, 345, -1, 108, 317, 109, 346, -1, 108, 317, 936 109, -1, 108, 316, 109, 108, 133, 260, 134, 109, 937 -1, 108, 318, 109, -1, 320, 308, -1, 321, -1, 938 322, 308, -1, 315, 108, 133, 260, 134, 109, -1, 939 108, 321, 109, 108, 133, 260, 134, 109, -1, 108, 940 320, 109, -1, 118, 319, -1, 118, 225, 319, -1, 941 108, 321, 109, -1, 108, 321, 109, 345, -1, 108, 942 322, 109, 346, -1, 108, 322, 109, -1, 324, -1, 943 325, -1, 326, -1, 315, 108, 267, 109, -1, 108, 944 325, 109, 108, 267, 109, -1, 108, 324, 109, -1, 945 118, 323, -1, 118, 225, 323, -1, 108, 325, 109, 946 -1, 108, 325, 109, 345, -1, 108, 326, 109, 346, 947 -1, 108, 326, 109, -1, 328, 308, -1, 329, -1, 948 330, 308, -1, 331, 308, -1, 337, -1, 108, 328, 949 109, -1, 118, 327, -1, 118, 225, 327, -1, 108, 950 329, 109, -1, 328, 345, -1, 108, 329, 109, 345, 951 -1, 108, 330, 109, 346, -1, 108, 330, 109, -1, 952 328, 108, 133, 260, 134, 109, -1, 108, 329, 109, 953 108, 133, 260, 134, 109, -1, 108, 331, 109, -1, 954 315, 308, -1, 333, -1, 334, 308, -1, 335, 308, 955 -1, 118, 332, -1, 118, 225, 332, -1, 108, 333, 956 109, -1, 315, 351, -1, 108, 333, 109, 345, -1, 957 108, 334, 109, 346, -1, 108, 334, 109, -1, 315, 958 108, 133, 260, 134, 109, -1, 108, 333, 109, 108, 959 133, 260, 134, 109, -1, 108, 335, 109, -1, 337, 960 308, -1, 338, -1, 339, 308, -1, 340, 308, -1, 961 73, -1, 74, -1, 118, 336, -1, 118, 225, 336, 962 -1, 108, 338, 109, -1, 337, 351, -1, 108, 338, 963 109, 351, -1, 337, 108, 133, 260, 134, 109, -1, 964 108, 338, 109, 108, 133, 260, 134, 109, -1, 342, 965 -1, 343, 308, -1, 344, 308, -1, 118, -1, 118, 966 225, -1, 118, 341, -1, 118, 225, 341, -1, 108, 967 342, 109, -1, 345, -1, 108, 342, 109, 345, -1, 968 108, 343, 109, 346, -1, 108, 343, 109, -1, 108, 969 133, 260, 134, 109, -1, 108, 342, 109, 108, 133, 970 260, 134, 109, -1, 108, 344, 109, -1, 110, 111, 971 -1, 110, 111, 346, -1, 346, -1, 110, 133, 162, 972 134, 111, -1, 110, 133, 118, 134, 111, -1, 346, 973 110, 133, 162, 134, 111, -1, 346, 110, 133, 118, 974 134, 111, -1, 348, -1, 349, 308, -1, 350, 308, 975 -1, 118, -1, 118, 225, -1, 118, 347, -1, 118, 976 225, 347, -1, 108, 348, 109, -1, 351, -1, 108, 977 348, 109, 351, -1, 108, 349, 109, 346, -1, 108, 978 349, 109, -1, 108, 133, 260, 134, 109, -1, 108, 979 348, 109, 108, 133, 260, 134, 109, -1, 108, 350, 980 109, -1, 352, -1, 352, 346, -1, 346, -1, 110, 981 111, -1, 110, 133, 225, 118, 134, 111, -1, 110, 982 133, 225, 134, 111, -1, 110, 133, 225, 162, 134, 983 111, -1, 110, 133, 7, 224, 162, 134, 111, -1, 984 110, 133, 225, 7, 162, 134, 111, -1, 354, -1, 985 355, 308, -1, 356, 308, -1, 118, -1, 118, 225, 986 -1, 118, 353, -1, 118, 225, 353, -1, 108, 354, 987 109, -1, 345, -1, 108, 354, 109, 345, -1, 108, 988 355, 109, 346, -1, 108, 355, 109, -1, 108, 354, 989 109, 108, 133, 260, 134, 109, -1, 108, 356, 109, 990 -1, 358, -1, 366, -1, 225, 366, -1, 359, -1, 991 360, -1, 118, 223, -1, 225, 118, 223, -1, 118, 992 367, -1, 225, 118, 367, -1, 118, 357, -1, 225, 993 118, 357, -1, 110, 111, 223, -1, 361, 223, -1, 994 110, 111, 346, 223, -1, 361, 346, 223, -1, 346, 995 223, -1, 110, 111, 359, -1, 361, 359, -1, 110, 996 111, 346, 359, -1, 361, 346, 359, -1, 346, 359, 997 -1, 110, 133, 225, 118, 134, 111, -1, 110, 133, 998 225, 162, 134, 111, -1, 110, 133, 229, 162, 134, 999 111, -1, 110, 133, 229, 225, 162, 134, 111, -1, 1000 366, -1, 225, 366, -1, 363, -1, 364, -1, 365, 1001 -1, 118, 223, -1, 225, 118, 223, -1, 118, 367, 1002 -1, 225, 118, 367, -1, 118, 362, -1, 225, 118, 1003 362, -1, 110, 111, 223, -1, 110, 111, 346, 223, 1004 -1, 346, 223, -1, 110, 111, 364, -1, 110, 111, 1005 346, 364, -1, 346, 364, -1, 110, 133, 259, 134, 1006 111, -1, 110, 111, 108, 256, 109, -1, 366, 108, 1007 133, 256, 134, 109, -1, 216, 108, 133, 256, 134, 1008 109, -1, -1, 115, -1, -1, 130, 162, -1 1013 1009 }; 1014 1010 … … 1016 1012 static const yytype_uint16 yyrline[] = 1017 1013 { 1018 0, 29 2, 292, 298, 307, 308, 309, 313, 314, 315,1019 31 9, 320, 324, 325, 329, 330, 334, 335, 341, 343,1020 34 5, 347, 352, 353, 359, 363, 365, 366, 368, 369,1021 3 71, 373, 375, 383, 384, 390, 391, 392, 397, 399,1022 40 4, 405, 409, 413, 415, 417, 419, 424, 427, 429,1023 4 31, 433, 435, 437, 439, 441, 447, 449, 451, 453,1024 45 5, 457, 459, 461, 463, 468, 469, 470, 471, 475,1025 47 6, 478, 483, 484, 486, 488, 493, 494, 496, 501,1026 50 2, 504, 509, 510, 512, 514, 516, 521, 522, 524,1027 52 9, 530, 535, 536, 541, 542, 547, 548, 553, 554,1028 55 9, 560, 562, 564, 569, 574, 575, 577, 579, 585,1029 58 6, 592, 594, 596, 598, 603, 604, 609, 610, 611,1030 61 2, 613, 614, 615, 616, 617, 618, 622, 623, 629,1031 6 30, 636, 637, 638, 639, 640, 641, 642, 643, 644,1032 65 3, 660, 662, 672, 673, 678, 680, 682, 684, 688,1033 68 9, 694, 699, 702, 704, 706, 711, 713, 721, 722,1034 72 4, 728, 729, 734, 735, 740, 741, 745, 750, 751,1035 75 5, 757, 763, 764, 768, 770, 772, 774, 780, 781,1036 78 5, 786, 790, 792, 794, 799, 801, 806, 808, 812,1037 81 5, 819, 822, 826, 828, 832, 834, 841, 843, 845,1038 85 4, 856, 858, 860, 862, 867, 869, 871, 873, 878,1039 8 91, 892, 897, 899, 904, 908, 910, 912, 914, 916,1040 92 2, 923, 929, 930, 934, 935, 940, 942, 948, 949,1041 9 51, 956, 958, 965, 967, 971, 972, 977, 979, 983,1042 98 4, 988, 990, 994, 995, 999, 1000, 1004, 1005, 1020,1043 10 21, 1022, 1023, 1024, 1028, 1033, 1040, 1050, 1055, 1060,1044 106 8, 1073, 1078, 1083, 1088, 1096, 1118, 1123, 1130, 1132,1045 113 9, 1144, 1149, 1160, 1165, 1170, 1175, 1180, 1189, 1194,1046 120 2, 1203, 1204, 1205, 1211, 1216, 1224, 1225, 1226, 1227,1047 12 31, 1232, 1233, 1234, 1239, 1240, 1249, 1250, 1255, 1256,1048 12 61, 1263, 1265, 1267, 1269, 1272, 1271, 1283, 1284, 1286,1049 129 6, 1297, 1302, 1306, 1308, 1310, 1312, 1314, 1316, 1318,1050 13 20, 1325, 1327, 1329, 1331, 1333, 1335, 1337, 1339, 1341,1051 134 3, 1345, 1347, 1349, 1355, 1356, 1358, 1360, 1362, 1367,1052 13 68, 1374, 1375, 1377, 1379, 1384, 1386, 1388, 1390, 1395,1053 139 6, 1398, 1400, 1405, 1406, 1408, 1413, 1414, 1416, 1418,1054 142 3, 1425, 1427, 1432, 1433, 1437, 1439, 1445, 1444, 1448,1055 14 50, 1455, 1457, 1462, 1464, 1469, 1470, 1472, 1473, 1478,1056 147 9, 1481, 1483, 1488, 1490, 1496, 1497, 1499, 1502, 1505,1057 15 10, 1511, 1516, 1521, 1525, 1527, 1533, 1532, 1539, 1541,1058 154 7, 1548, 1556, 1557, 1561, 1562, 1563, 1565, 1567, 1574,1059 157 5, 1577, 1579, 1584, 1585, 1591, 1592, 1596, 1597, 1602,1060 160 3, 1604, 1606, 1614, 1615, 1617, 1620, 1622, 1626, 1627,1061 162 8, 1630, 1632, 1636, 1641, 1649, 1650, 1659, 1661, 1666,1062 16 67, 1668, 1672, 1673, 1674, 1678, 1679, 1680, 1684, 1685,1063 16 86, 1691, 1692, 1693, 1694, 1700, 1701, 1703, 1708, 1709,1064 17 14, 1715, 1716, 1717, 1718, 1733, 1734, 1739, 1740, 1748,1065 17 50, 1752, 1755, 1757, 1759, 1782, 1783, 1785, 1787, 1792,1066 179 3, 1795, 1800, 1805, 1806, 1812, 1811, 1815, 1819, 1821,1067 182 3, 1829, 1830, 1835, 1840, 1842, 1847, 1849, 1850, 1852,1068 185 7, 1859, 1861, 1866, 1868, 1873, 1878, 1886, 1892, 1891,1069 1 905, 1906, 1911, 1912, 1916, 1921, 1926, 1934, 1939, 1950,1070 195 1, 1962, 1963, 1969, 1970, 1974, 1975, 1976, 1979, 1978,1071 19 89, 1994, 1999, 2005, 2014, 2020, 2026, 2032, 2038, 2046,1072 20 52, 2060, 2066, 2075, 2076, 2077, 2081, 2085, 2087, 2092,1073 20 93, 2097, 2098, 2103, 2109, 2110, 2113, 2115, 2116, 2120,1074 21 21, 2122, 2123, 2157, 2159, 2160, 2162, 2167, 2172, 2177,1075 217 9, 2181, 2186, 2188, 2190, 2192, 2197, 2199, 2209, 2211,1076 22 12, 2217, 2219, 2221, 2226, 2228, 2230, 2235, 2237, 2239,1077 224 8, 2249, 2250, 2254, 2256, 2258, 2263, 2265, 2267, 2272,1078 227 4, 2276, 2291, 2293, 2294, 2296, 2301, 2302, 2307, 2309,1079 23 11, 2316, 2318, 2320, 2322, 2327, 2329, 2331, 2341, 2343,1080 23 44, 2346, 2351, 2353, 2355, 2360, 2362, 2364, 2366, 2371,1081 23 73, 2375, 2406, 2408, 2409, 2411, 2416, 2421, 2429, 2431,1082 243 3, 2438, 2440, 2445, 2447, 2461, 2462, 2464, 2469, 2471,1083 24 73, 2475, 2477, 2482, 2483, 2485, 2487, 2492, 2494, 2496,1084 2 502, 2504, 2506, 2510, 2512, 2514, 2516, 2530, 2531, 2533,1085 253 8, 2540, 2542, 2544, 2546, 2551, 2552, 2554, 2556, 2561,1086 25 63, 2565, 2571, 2572, 2574, 2583, 2586, 2588, 2591, 2593,1087 259 5, 2608, 2609, 2611, 2616, 2618, 2620, 2622, 2624, 2629,1088 26 30, 2632, 2634, 2639, 2641, 2649, 2650, 2651, 2656, 2657,1089 26 61, 2663, 2665, 2667, 2669, 2671, 2678, 2680, 2682, 2684,1090 26 86, 2688, 2690, 2692, 2694, 2696, 2701, 2703, 2705, 2710,1091 27 36, 2737, 2739, 2743, 2744, 2748, 2750, 2752, 2754, 2756,1092 275 8, 2765, 2767, 2769, 2771, 2773, 2775, 2780, 2785, 2787,1093 2 789, 2807, 2809, 2814, 28151014 0, 290, 290, 296, 305, 306, 307, 311, 312, 313, 1015 317, 318, 322, 323, 327, 328, 332, 333, 339, 341, 1016 343, 345, 350, 351, 357, 361, 363, 364, 366, 367, 1017 369, 371, 373, 381, 382, 388, 389, 390, 395, 397, 1018 402, 403, 407, 411, 413, 415, 417, 422, 425, 427, 1019 429, 431, 433, 435, 437, 439, 445, 447, 449, 451, 1020 453, 455, 457, 459, 461, 466, 467, 468, 469, 473, 1021 474, 476, 481, 482, 484, 486, 491, 492, 494, 499, 1022 500, 502, 507, 508, 510, 512, 514, 519, 520, 522, 1023 527, 528, 533, 534, 539, 540, 545, 546, 551, 552, 1024 557, 558, 560, 562, 567, 572, 573, 575, 577, 583, 1025 584, 590, 592, 594, 596, 601, 602, 607, 608, 609, 1026 610, 611, 612, 613, 614, 615, 616, 620, 621, 627, 1027 628, 634, 635, 636, 637, 638, 639, 640, 641, 642, 1028 651, 658, 660, 670, 671, 676, 678, 680, 682, 686, 1029 687, 692, 697, 700, 702, 704, 709, 711, 719, 720, 1030 722, 726, 727, 732, 733, 738, 739, 743, 748, 749, 1031 753, 755, 761, 762, 766, 768, 770, 772, 778, 779, 1032 783, 784, 788, 790, 792, 797, 799, 804, 806, 810, 1033 813, 817, 820, 824, 826, 830, 832, 839, 841, 843, 1034 852, 854, 856, 858, 860, 865, 867, 869, 871, 876, 1035 889, 890, 895, 897, 902, 906, 908, 910, 912, 914, 1036 920, 921, 927, 928, 932, 933, 938, 940, 946, 947, 1037 949, 954, 956, 963, 965, 969, 970, 975, 977, 981, 1038 982, 986, 988, 992, 993, 997, 998, 1002, 1003, 1018, 1039 1019, 1020, 1021, 1022, 1026, 1031, 1038, 1048, 1053, 1058, 1040 1066, 1071, 1076, 1081, 1086, 1094, 1116, 1121, 1128, 1130, 1041 1137, 1142, 1147, 1158, 1163, 1168, 1173, 1178, 1187, 1192, 1042 1200, 1201, 1202, 1203, 1209, 1214, 1222, 1223, 1224, 1225, 1043 1229, 1230, 1231, 1232, 1237, 1238, 1247, 1248, 1253, 1254, 1044 1259, 1261, 1263, 1265, 1267, 1270, 1269, 1281, 1282, 1284, 1045 1294, 1295, 1300, 1304, 1306, 1308, 1310, 1312, 1314, 1316, 1046 1318, 1323, 1325, 1327, 1329, 1331, 1333, 1335, 1337, 1339, 1047 1341, 1343, 1345, 1351, 1352, 1354, 1356, 1358, 1363, 1364, 1048 1370, 1371, 1373, 1375, 1380, 1382, 1384, 1386, 1391, 1392, 1049 1394, 1396, 1401, 1402, 1404, 1409, 1410, 1412, 1414, 1419, 1050 1421, 1423, 1428, 1429, 1433, 1435, 1437, 1439, 1441, 1446, 1051 1448, 1453, 1455, 1460, 1461, 1463, 1464, 1469, 1470, 1472, 1052 1474, 1479, 1481, 1487, 1488, 1490, 1493, 1496, 1501, 1502, 1053 1507, 1512, 1516, 1518, 1520, 1525, 1527, 1533, 1534, 1542, 1054 1543, 1547, 1548, 1549, 1551, 1553, 1560, 1561, 1563, 1565, 1055 1570, 1571, 1577, 1578, 1582, 1583, 1588, 1589, 1590, 1592, 1056 1600, 1601, 1603, 1606, 1608, 1612, 1613, 1614, 1616, 1618, 1057 1622, 1627, 1635, 1636, 1645, 1647, 1652, 1653, 1654, 1658, 1058 1659, 1660, 1664, 1665, 1666, 1670, 1671, 1672, 1677, 1678, 1059 1679, 1680, 1686, 1687, 1689, 1694, 1695, 1700, 1701, 1702, 1060 1703, 1704, 1719, 1720, 1725, 1726, 1734, 1736, 1738, 1741, 1061 1743, 1745, 1768, 1769, 1771, 1773, 1778, 1779, 1781, 1786, 1062 1791, 1792, 1798, 1797, 1801, 1805, 1807, 1809, 1815, 1816, 1063 1821, 1826, 1828, 1833, 1835, 1836, 1838, 1843, 1845, 1847, 1064 1852, 1854, 1859, 1864, 1872, 1878, 1877, 1891, 1892, 1897, 1065 1898, 1902, 1907, 1912, 1920, 1925, 1936, 1937, 1948, 1949, 1066 1955, 1956, 1960, 1961, 1962, 1965, 1964, 1975, 1980, 1985, 1067 1991, 2000, 2006, 2012, 2018, 2024, 2032, 2038, 2046, 2052, 1068 2061, 2062, 2063, 2067, 2071, 2073, 2078, 2079, 2083, 2084, 1069 2089, 2095, 2096, 2099, 2101, 2102, 2106, 2107, 2108, 2109, 1070 2143, 2145, 2146, 2148, 2153, 2158, 2163, 2165, 2167, 2172, 1071 2174, 2176, 2178, 2183, 2185, 2195, 2197, 2198, 2203, 2205, 1072 2207, 2212, 2214, 2216, 2221, 2223, 2225, 2234, 2235, 2236, 1073 2240, 2242, 2244, 2249, 2251, 2253, 2258, 2260, 2262, 2277, 1074 2279, 2280, 2282, 2287, 2288, 2293, 2295, 2297, 2302, 2304, 1075 2306, 2308, 2313, 2315, 2317, 2327, 2329, 2330, 2332, 2337, 1076 2339, 2341, 2346, 2348, 2350, 2352, 2357, 2359, 2361, 2392, 1077 2394, 2395, 2397, 2402, 2407, 2415, 2417, 2419, 2424, 2426, 1078 2431, 2433, 2447, 2448, 2450, 2455, 2457, 2459, 2461, 2463, 1079 2468, 2469, 2471, 2473, 2478, 2480, 2482, 2488, 2490, 2492, 1080 2496, 2498, 2500, 2502, 2516, 2517, 2519, 2524, 2526, 2528, 1081 2530, 2532, 2537, 2538, 2540, 2542, 2547, 2549, 2551, 2557, 1082 2558, 2560, 2569, 2572, 2574, 2577, 2579, 2581, 2594, 2595, 1083 2597, 2602, 2604, 2606, 2608, 2610, 2615, 2616, 2618, 2620, 1084 2625, 2627, 2635, 2636, 2637, 2642, 2643, 2647, 2649, 2651, 1085 2653, 2655, 2657, 2664, 2666, 2668, 2670, 2672, 2674, 2676, 1086 2678, 2680, 2682, 2687, 2689, 2691, 2696, 2722, 2723, 2725, 1087 2729, 2730, 2734, 2736, 2738, 2740, 2742, 2744, 2751, 2753, 1088 2755, 2757, 2759, 2761, 2766, 2771, 2773, 2775, 2793, 2795, 1089 2800, 2801 1094 1090 }; 1095 1091 #endif … … 1103 1099 "STATIC", "INLINE", "FORTRAN", "CONST", "VOLATILE", "RESTRICT", "FORALL", 1104 1100 "LVALUE", "VOID", "CHAR", "SHORT", "INT", "LONG", "FLOAT", "DOUBLE", 1105 "SIGNED", "UNSIGNED", " VALIST", "BOOL", "COMPLEX", "IMAGINARY", "TYPEOF",1106 " LABEL", "ENUM", "STRUCT", "UNION", "OTYPE", "FTYPE", "DTYPE", "TRAIT",1107 " SIZEOF", "OFFSETOF", "ATTRIBUTE", "EXTENSION", "IF", "ELSE", "SWITCH",1108 " CASE", "DEFAULT", "DO", "WHILE", "FOR", "BREAK", "CONTINUE", "GOTO",1109 " RETURN", "CHOOSE", "DISABLE", "ENABLE", "FALLTHRU", "TRY", "CATCH",1110 " CATCHRESUME", "FINALLY", "THROW", "THROWRESUME", "AT", "ASM", "ALIGNAS",1111 "A LIGNOF", "ATOMIC", "GENERIC", "NORETURN", "STATICASSERT",1112 " THREADLOCAL", "IDENTIFIER", "QUOTED_IDENTIFIER", "TYPEDEFname",1113 " TYPEGENname", "ATTR_IDENTIFIER", "ATTR_TYPEDEFname", "ATTR_TYPEGENname",1101 "SIGNED", "UNSIGNED", "BOOL", "COMPLEX", "IMAGINARY", "TYPEOF", "LABEL", 1102 "ENUM", "STRUCT", "UNION", "TYPE", "FTYPE", "DTYPE", "CONTEXT", "SIZEOF", 1103 "OFFSETOF", "ATTRIBUTE", "EXTENSION", "IF", "ELSE", "SWITCH", "CASE", 1104 "DEFAULT", "DO", "WHILE", "FOR", "BREAK", "CONTINUE", "GOTO", "RETURN", 1105 "CHOOSE", "DISABLE", "ENABLE", "FALLTHRU", "TRY", "CATCH", "CATCHRESUME", 1106 "FINALLY", "THROW", "THROWRESUME", "AT", "ASM", "ALIGNAS", "ALIGNOF", 1107 "ATOMIC", "GENERIC", "NORETURN", "STATICASSERT", "THREADLOCAL", 1108 "IDENTIFIER", "QUOTED_IDENTIFIER", "TYPEDEFname", "TYPEGENname", 1109 "ATTR_IDENTIFIER", "ATTR_TYPEDEFname", "ATTR_TYPEGENname", 1114 1110 "INTEGERconstant", "FLOATINGconstant", "CHARACTERconstant", 1115 1111 "STRINGliteral", "ZERO", "ONE", "ARROW", "ICR", "DECR", "LS", "RS", "LE", … … 1156 1152 "sue_declaration_specifier", "sue_type_specifier", 1157 1153 "typedef_declaration_specifier", "typedef_type_specifier", 1158 "elaborated_type_name", "aggregate_name", " $@2", "aggregate_key",1154 "elaborated_type_name", "aggregate_name", "aggregate_key", 1159 1155 "field_declaration_list", "field_declaration", 1160 1156 "new_field_declaring_list", "field_declaring_list", "field_declarator", 1161 1157 "bit_subrange_size_opt", "bit_subrange_size", "enum_key", "enum_name", 1162 " $@3", "enumerator_list", "enumerator_value_opt",1163 "new_parameter_type_list _opt", "new_parameter_type_list",1164 "new_ parameter_list", "new_abstract_parameter_list",1165 "parameter_type_list _opt", "parameter_type_list", "parameter_list",1166 "new_ parameter_declaration", "new_abstract_parameter_declaration",1167 " parameter_declaration", "abstract_parameter_declaration",1168 "identifier_ list", "identifier_or_type_name",1169 "no_ 01_identifier_or_type_name", "no_attr_identifier_or_type_name",1170 " type_name_no_function", "type_name", "initializer_opt", "initializer",1171 " initializer_list", "designation", "designator_list", "designator",1172 "typegen_ declaration_specifier", "typegen_type_specifier",1173 "type gen_name", "type_parameter_list", "type_parameter", "$@4",1174 "type_ class", "assertion_list_opt", "assertion", "type_name_list",1175 "type_declar ing_list", "type_declarator", "type_declarator_name",1176 " trait_specifier", "$@5", "trait_declaration_list", "trait_declaration",1177 "new_ trait_declaring_list", "trait_declaring_list", "translation_unit",1178 " external_definition_list", "external_definition_list_opt",1179 "external_definition ", "$@6", "external_function_definition",1180 " function_definition", "declarator", "subrange", "asm_name_opt",1181 " attribute_list_opt", "attribute_list", "attribute",1182 "attribute _parameter_list", "attrib", "any_word", "variable_declarator",1183 " paren_identifier", "variable_ptr", "variable_array",1184 "variable_ function", "function_declarator", "function_no_ptr",1185 "function_ ptr", "function_array", "old_function_declarator",1186 "old_function_ no_ptr", "old_function_ptr", "old_function_array",1187 " type_redeclarator", "paren_type", "type_ptr", "type_array",1188 "type_ function", "identifier_parameter_declarator",1158 "enumerator_list", "enumerator_value_opt", "new_parameter_type_list_opt", 1159 "new_parameter_type_list", "new_parameter_list", 1160 "new_abstract_parameter_list", "parameter_type_list_opt", 1161 "parameter_type_list", "parameter_list", "new_parameter_declaration", 1162 "new_abstract_parameter_declaration", "parameter_declaration", 1163 "abstract_parameter_declaration", "identifier_list", 1164 "identifier_or_type_name", "no_01_identifier_or_type_name", 1165 "no_attr_identifier_or_type_name", "type_name_no_function", "type_name", 1166 "initializer_opt", "initializer", "initializer_list", "designation", 1167 "designator_list", "designator", "typegen_declaration_specifier", 1168 "typegen_type_specifier", "typegen_name", "type_parameter_list", 1169 "type_parameter", "$@2", "type_class", "assertion_list_opt", "assertion", 1170 "type_name_list", "type_declaring_list", "type_declarator", 1171 "type_declarator_name", "context_specifier", "$@3", 1172 "context_declaration_list", "context_declaration", 1173 "new_context_declaring_list", "context_declaring_list", 1174 "translation_unit", "external_definition_list", 1175 "external_definition_list_opt", "external_definition", "$@4", 1176 "external_function_definition", "function_definition", "declarator", 1177 "subrange", "asm_name_opt", "attribute_list_opt", "attribute_list", 1178 "attribute", "attribute_parameter_list", "attrib", "any_word", 1179 "variable_declarator", "paren_identifier", "variable_ptr", 1180 "variable_array", "variable_function", "function_declarator", 1181 "function_no_ptr", "function_ptr", "function_array", 1182 "old_function_declarator", "old_function_no_ptr", "old_function_ptr", 1183 "old_function_array", "type_redeclarator", "paren_type", "type_ptr", 1184 "type_array", "type_function", "identifier_parameter_declarator", 1189 1185 "identifier_parameter_ptr", "identifier_parameter_array", 1190 1186 "identifier_parameter_function", "type_parameter_redeclarator", … … 1223 1219 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 1224 1220 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 1225 355, 356, 357, 358, 359, 360, 361, 362, 363, 40,1226 41, 91, 93, 46, 123, 125, 44, 58, 33, 42,1227 38, 43, 45, 126, 47, 37, 60, 62, 94, 124,1228 6 3, 61, 591221 355, 356, 357, 358, 359, 360, 361, 362, 40, 41, 1222 91, 93, 46, 123, 125, 44, 58, 33, 42, 38, 1223 43, 45, 126, 47, 37, 60, 62, 94, 124, 63, 1224 61, 59 1229 1225 }; 1230 1226 # endif … … 1233 1229 static const yytype_uint16 yyr1[] = 1234 1230 { 1235 0, 13 3, 134, 135, 136, 136, 136, 137, 137, 137,1236 13 8, 138, 139, 139, 140, 140, 141, 141, 142, 142,1237 14 2, 142, 143, 143, 143, 143, 143, 143, 143, 143,1238 14 3, 143, 143, 144, 144, 145, 145, 145, 145, 145,1239 14 6, 146, 147, 147, 147, 147, 147, 148, 148, 148,1240 14 8, 148, 148, 148, 148, 148, 148, 148, 148, 148,1241 14 8, 148, 148, 148, 148, 149, 149, 149, 149, 150,1242 1 50, 150, 151, 151, 151, 151, 152, 152, 152, 153,1243 15 3, 153, 154, 154, 154, 154, 154, 155, 155, 155,1244 15 6, 156, 157, 157, 158, 158, 159, 159, 160, 160,1245 16 1, 161, 161, 161, 162, 163, 163, 163, 163, 164,1246 16 4, 165, 165, 165, 165, 166, 166, 167, 167, 167,1247 16 7, 167, 167, 167, 167, 167, 167, 168, 168, 169,1248 16 9, 170, 170, 170, 170, 170, 170, 170, 170, 170,1249 17 1, 172, 172, 173, 173, 174, 174, 174, 174, 175,1250 17 5, 176, 177, 177, 177, 177, 177, 177, 178, 178,1251 17 8, 179, 179, 180, 180, 181, 181, 182, 183, 183,1252 18 4, 184, 185, 185, 186, 186, 186, 186, 187, 187,1253 18 8, 188, 189, 189, 189, 190, 190, 191, 191, 191,1254 19 1, 191, 191, 191, 191, 191, 191, 192, 192, 192,1255 19 3, 193, 193, 193, 193, 194, 194, 194, 194, 195,1256 19 6, 196, 196, 196, 196, 197, 197, 197, 197, 197,1257 19 8, 198, 199, 199, 200, 200, 201, 201, 202, 202,1258 20 2, 203, 203, 204, 204, 205, 205, 206, 206, 207,1259 20 7, 208, 208, 209, 209, 210, 210, 211, 211, 212,1260 21 2, 212, 212, 212, 213, 213, 213, 214, 214, 214,1261 21 5, 215, 215, 215, 215, 216, 216, 216, 217, 217,1262 21 8, 218, 218, 219, 219, 219, 219, 219, 220, 220,1263 22 1, 221, 221, 221, 222, 222, 223, 223, 223, 223,1264 22 4, 224, 224, 224, 225, 225, 226, 226, 227, 227,1265 22 8, 228, 228, 228, 228, 229, 228, 230, 230, 230,1266 23 1, 231, 232, 233, 233, 233, 233, 233, 233, 233,1267 23 3, 234, 234, 234, 234, 234, 234, 234, 234, 234,1268 23 4, 234, 234, 234, 235, 235, 235, 235, 235, 236,1269 236, 23 7, 237, 237, 237, 238, 238, 238, 238, 239,1270 23 9, 239, 239, 240, 240, 240, 241, 241, 241, 241,1271 24 2, 242, 242, 243, 243, 244, 244, 245, 244, 244,1272 244, 24 6, 246, 247, 247, 248, 248, 248, 248, 249,1273 24 9, 249, 249, 250, 250, 251, 251, 251, 251, 251,1274 25 2, 252, 253, 254, 255, 255, 256, 255, 257, 257,1275 25 8, 258, 259, 259, 260, 260, 260, 260, 260, 261,1276 2 61, 261, 261, 262, 262, 263, 263, 264, 264, 265,1277 26 5, 265, 265, 266, 266, 266, 266, 266, 267, 267,1278 26 7, 267, 267, 268, 268, 269, 269, 270, 270, 271,1279 2 71, 271, 272, 272, 272, 273, 273, 273, 274, 274,1280 27 4, 275, 275, 275, 275, 276, 276, 276, 277, 277,1281 27 8, 278, 278, 278, 278, 279, 279, 280, 280, 281,1282 2 81, 281, 281, 281, 281, 282, 282, 282, 282, 283,1283 28 3, 283, 284, 285, 285, 287, 286, 286, 288, 288,1284 28 8, 289, 289, 290, 290, 290, 291, 291, 291, 291,1285 29 2, 292, 292, 293, 293, 294, 294, 295, 296, 295,1286 29 7, 297, 298, 298, 299, 299, 299, 300, 300, 301,1287 30 1, 302, 302, 303, 303, 304, 304, 304, 305, 304,1288 30 4, 306, 306, 306, 307, 307, 307, 307, 307, 307,1289 30 7, 307, 307, 308, 308, 308, 309, 310, 310, 311,1290 31 1, 312, 312, 313, 314, 314, 315, 315, 315, 316,1291 31 6, 316, 316, 317, 317, 317, 317, 318, 318, 319,1292 31 9, 319, 320, 320, 320, 320, 321, 321, 322, 322,1293 32 2, 323, 323, 323, 324, 324, 324, 325, 325, 325,1294 32 6, 326, 326, 327, 327, 327, 328, 328, 328, 329,1295 32 9, 329, 330, 330, 330, 330, 331, 331, 332, 332,1296 33 2, 333, 333, 333, 333, 334, 334, 334, 335, 335,1297 33 5, 335, 336, 336, 336, 337, 337, 337, 337, 338,1298 33 8, 338, 339, 339, 339, 339, 340, 340, 341, 341,1299 34 1, 342, 342, 343, 343, 344, 344, 344, 345, 345,1300 34 5, 345, 345, 346, 346, 346, 346, 347, 347, 347,1301 34 8, 348, 348, 349, 349, 349, 349, 350, 350, 350,1302 3 51, 351, 351, 351, 351, 352, 352, 352, 352, 353,1303 35 3, 353, 354, 354, 354, 355, 355, 355, 355, 355,1304 35 5, 356, 356, 356, 357, 357, 357, 357, 357, 358,1305 35 8, 358, 358, 359, 359, 360, 360, 360, 361, 361,1306 3 62, 362, 362, 362, 362, 362, 363, 363, 363, 363,1307 36 3, 363, 363, 363, 363, 363, 364, 364, 364, 364,1308 36 5, 365, 365, 366, 366, 367, 367, 367, 367, 367,1309 36 7, 368, 368, 368, 368, 368, 368, 369, 370, 370,1310 3 70, 371, 371, 372, 3721231 0, 132, 133, 134, 135, 135, 135, 136, 136, 136, 1232 137, 137, 138, 138, 139, 139, 140, 140, 141, 141, 1233 141, 141, 142, 142, 142, 142, 142, 142, 142, 142, 1234 142, 142, 142, 143, 143, 144, 144, 144, 144, 144, 1235 145, 145, 146, 146, 146, 146, 146, 147, 147, 147, 1236 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 1237 147, 147, 147, 147, 147, 148, 148, 148, 148, 149, 1238 149, 149, 150, 150, 150, 150, 151, 151, 151, 152, 1239 152, 152, 153, 153, 153, 153, 153, 154, 154, 154, 1240 155, 155, 156, 156, 157, 157, 158, 158, 159, 159, 1241 160, 160, 160, 160, 161, 162, 162, 162, 162, 163, 1242 163, 164, 164, 164, 164, 165, 165, 166, 166, 166, 1243 166, 166, 166, 166, 166, 166, 166, 167, 167, 168, 1244 168, 169, 169, 169, 169, 169, 169, 169, 169, 169, 1245 170, 171, 171, 172, 172, 173, 173, 173, 173, 174, 1246 174, 175, 176, 176, 176, 176, 176, 176, 177, 177, 1247 177, 178, 178, 179, 179, 180, 180, 181, 182, 182, 1248 183, 183, 184, 184, 185, 185, 185, 185, 186, 186, 1249 187, 187, 188, 188, 188, 189, 189, 190, 190, 190, 1250 190, 190, 190, 190, 190, 190, 190, 191, 191, 191, 1251 192, 192, 192, 192, 192, 193, 193, 193, 193, 194, 1252 195, 195, 195, 195, 195, 196, 196, 196, 196, 196, 1253 197, 197, 198, 198, 199, 199, 200, 200, 201, 201, 1254 201, 202, 202, 203, 203, 204, 204, 205, 205, 206, 1255 206, 207, 207, 208, 208, 209, 209, 210, 210, 211, 1256 211, 211, 211, 211, 212, 212, 212, 213, 213, 213, 1257 214, 214, 214, 214, 214, 215, 215, 215, 216, 216, 1258 217, 217, 217, 218, 218, 218, 218, 218, 219, 219, 1259 220, 220, 220, 220, 221, 221, 222, 222, 222, 222, 1260 223, 223, 223, 223, 224, 224, 225, 225, 226, 226, 1261 227, 227, 227, 227, 227, 228, 227, 229, 229, 229, 1262 230, 230, 231, 232, 232, 232, 232, 232, 232, 232, 1263 232, 233, 233, 233, 233, 233, 233, 233, 233, 233, 1264 233, 233, 233, 234, 234, 234, 234, 234, 235, 235, 1265 236, 236, 236, 236, 237, 237, 237, 237, 238, 238, 1266 238, 238, 239, 239, 239, 240, 240, 240, 240, 241, 1267 241, 241, 242, 242, 243, 243, 243, 243, 243, 244, 1268 244, 245, 245, 246, 246, 246, 246, 247, 247, 247, 1269 247, 248, 248, 249, 249, 249, 249, 249, 250, 250, 1270 251, 252, 253, 253, 253, 254, 254, 255, 255, 256, 1271 256, 257, 257, 257, 257, 257, 258, 258, 258, 258, 1272 259, 259, 260, 260, 261, 261, 262, 262, 262, 262, 1273 263, 263, 263, 263, 263, 264, 264, 264, 264, 264, 1274 265, 265, 266, 266, 267, 267, 268, 268, 268, 269, 1275 269, 269, 270, 270, 270, 271, 271, 271, 272, 272, 1276 272, 272, 273, 273, 273, 274, 274, 275, 275, 275, 1277 275, 275, 276, 276, 277, 277, 278, 278, 278, 278, 1278 278, 278, 279, 279, 279, 279, 280, 280, 280, 281, 1279 282, 282, 284, 283, 283, 285, 285, 285, 286, 286, 1280 287, 287, 287, 288, 288, 288, 288, 289, 289, 289, 1281 290, 290, 291, 291, 292, 293, 292, 294, 294, 295, 1282 295, 296, 296, 296, 297, 297, 298, 298, 299, 299, 1283 300, 300, 301, 301, 301, 302, 301, 301, 303, 303, 1284 303, 304, 304, 304, 304, 304, 304, 304, 304, 304, 1285 305, 305, 305, 306, 307, 307, 308, 308, 309, 309, 1286 310, 311, 311, 312, 312, 312, 313, 313, 313, 313, 1287 314, 314, 314, 314, 315, 315, 316, 316, 316, 317, 1288 317, 317, 317, 318, 318, 319, 319, 319, 320, 320, 1289 320, 321, 321, 321, 322, 322, 322, 323, 323, 323, 1290 324, 324, 324, 325, 325, 325, 326, 326, 326, 327, 1291 327, 327, 327, 328, 328, 329, 329, 329, 330, 330, 1292 330, 330, 331, 331, 331, 332, 332, 332, 332, 333, 1293 333, 333, 334, 334, 334, 334, 335, 335, 335, 336, 1294 336, 336, 336, 337, 337, 338, 338, 338, 339, 339, 1295 340, 340, 341, 341, 341, 342, 342, 342, 342, 342, 1296 343, 343, 343, 343, 344, 344, 344, 345, 345, 345, 1297 346, 346, 346, 346, 347, 347, 347, 348, 348, 348, 1298 348, 348, 349, 349, 349, 349, 350, 350, 350, 351, 1299 351, 351, 352, 352, 352, 352, 352, 352, 353, 353, 1300 353, 354, 354, 354, 354, 354, 355, 355, 355, 355, 1301 356, 356, 357, 357, 357, 358, 358, 359, 359, 359, 1302 359, 359, 359, 360, 360, 360, 360, 360, 360, 360, 1303 360, 360, 360, 361, 361, 361, 361, 362, 362, 362, 1304 363, 363, 364, 364, 364, 364, 364, 364, 365, 365, 1305 365, 365, 365, 365, 366, 367, 367, 367, 368, 368, 1306 369, 369 1311 1307 }; 1312 1308 … … 1347 1343 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1348 1344 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1349 1, 1, 1, 1, 1, 2, 2, 3, 3, 1,1350 3, 1, 2, 2, 2, 4, 4, 4, 4, 1,1351 2, 2, 3, 1, 2, 2, 1, 2, 2, 3,1352 1, 2, 2, 1, 1, 4, 2, 0, 6, 7,1353 2, 2, 2, 1, 2, 2, 3, 2, 3, 1,1354 2, 3, 2, 2, 4, 0, 1, 2, 2, 1,1355 0, 1, 2, 2, 5, 2, 0, 7, 2, 4,1356 0, 2, 0, 1, 1, 1, 5, 5, 5, 1,1357 5, 5, 9, 1, 5, 0, 1, 1, 5, 1,1358 1, 5, 5, 1, 3, 3, 4, 1, 1, 1,1359 1, 2, 1, 3, 3, 1, 2, 1, 3, 1,1360 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1361 2, 1, 1, 1, 2, 0, 2, 2, 1, 4,1362 0, 1, 2, 3, 4, 2, 2, 1, 2, 1,1363 2, 5, 5, 7, 6, 1, 2, 2, 3, 1,1364 2, 2, 4, 2, 4, 0, 4, 2, 1, 1,1365 1, 0, 2, 5, 5, 13, 1, 1, 3, 3,1366 2, 3, 3, 2, 4, 1, 6, 9, 0, 11,1367 1, 3, 3, 3, 1, 1, 5, 2, 5, 0,1368 1, 1, 3, 0, 1, 1, 1, 1, 0, 6,1369 2, 1, 2, 4, 2, 3, 3, 3, 4, 5,1370 5, 5, 6, 1, 1, 1, 3, 0, 5, 0,1371 1, 1, 2, 6, 1, 3, 0, 1, 4, 1,1372 1, 1, 1, 2, 1, 2, 2, 1, 3, 2,1373 3, 3, 2, 4, 4, 3, 8, 3, 2, 1,1374 2, 6, 8, 3, 2, 3, 3, 4, 4, 3,1375 1, 1, 1, 4, 6, 3, 2, 3, 3, 4,1376 4, 3, 2, 1, 2, 2, 1, 3, 2, 3,1377 3, 2, 4, 4, 3, 6, 8, 3, 2, 1,1378 2, 2, 2, 3, 3, 2, 4, 4, 3, 6,1379 8, 3, 2, 1, 2, 2, 1, 1, 2, 3,1380 3, 2, 4, 6, 8, 1, 2, 2, 1, 2,1381 2, 3, 3, 1, 4, 4, 3, 5, 8, 3,1382 2, 3, 1, 5, 5, 6, 6, 1, 2, 2,1383 1, 2, 2, 3, 3, 1, 4, 4, 3, 5,1384 8, 3, 1, 2, 1, 2, 6, 5, 6, 7,1385 7, 1, 2, 2, 1, 2, 2, 3, 3, 1,1386 4, 4, 3, 8, 3, 1, 1, 2, 1, 1,1387 2, 3, 2, 3, 2, 3, 3, 2, 4, 3,1388 2, 3, 2, 4, 3, 2, 6, 6, 6, 7,1389 1, 2, 1, 1, 1, 2, 3, 2, 3, 2,1390 3, 3, 4, 2, 3, 4, 2, 5, 5, 6,1391 6, 0, 1,0, 21345 1, 1, 1, 1, 2, 2, 3, 3, 1, 3, 1346 1, 2, 2, 2, 4, 4, 4, 4, 1, 2, 1347 2, 3, 1, 2, 2, 1, 2, 2, 3, 1, 1348 2, 2, 1, 1, 4, 2, 5, 7, 2, 2, 1349 2, 1, 2, 2, 3, 2, 3, 1, 2, 3, 1350 2, 2, 4, 0, 1, 2, 2, 1, 0, 1, 1351 2, 2, 5, 6, 2, 2, 4, 0, 2, 0, 1352 1, 1, 1, 5, 5, 5, 1, 5, 5, 9, 1353 1, 5, 0, 1, 1, 5, 1, 1, 5, 5, 1354 1, 3, 3, 4, 1, 1, 1, 1, 2, 1, 1355 3, 3, 1, 2, 1, 3, 1, 1, 1, 1, 1356 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1357 1, 2, 0, 2, 2, 1, 4, 0, 1, 2, 1358 3, 4, 2, 2, 1, 2, 1, 2, 5, 5, 1359 7, 6, 1, 2, 2, 3, 1, 2, 2, 4, 1360 2, 4, 0, 4, 2, 1, 1, 1, 0, 2, 1361 5, 5, 13, 1, 1, 3, 3, 2, 3, 3, 1362 2, 4, 1, 6, 9, 0, 11, 1, 3, 3, 1363 3, 1, 1, 5, 2, 5, 0, 1, 1, 3, 1364 0, 1, 1, 1, 1, 0, 6, 2, 1, 2, 1365 4, 2, 3, 3, 3, 4, 5, 5, 5, 6, 1366 1, 1, 1, 3, 0, 5, 0, 1, 1, 2, 1367 6, 1, 3, 0, 1, 4, 1, 1, 1, 1, 1368 2, 1, 2, 2, 1, 3, 2, 3, 3, 2, 1369 4, 4, 3, 8, 3, 2, 1, 2, 6, 8, 1370 3, 2, 3, 3, 4, 4, 3, 1, 1, 1, 1371 4, 6, 3, 2, 3, 3, 4, 4, 3, 2, 1372 1, 2, 2, 1, 3, 2, 3, 3, 2, 4, 1373 4, 3, 6, 8, 3, 2, 1, 2, 2, 2, 1374 3, 3, 2, 4, 4, 3, 6, 8, 3, 2, 1375 1, 2, 2, 1, 1, 2, 3, 3, 2, 4, 1376 6, 8, 1, 2, 2, 1, 2, 2, 3, 3, 1377 1, 4, 4, 3, 5, 8, 3, 2, 3, 1, 1378 5, 5, 6, 6, 1, 2, 2, 1, 2, 2, 1379 3, 3, 1, 4, 4, 3, 5, 8, 3, 1, 1380 2, 1, 2, 6, 5, 6, 7, 7, 1, 2, 1381 2, 1, 2, 2, 3, 3, 1, 4, 4, 3, 1382 8, 3, 1, 1, 2, 1, 1, 2, 3, 2, 1383 3, 2, 3, 3, 2, 4, 3, 2, 3, 2, 1384 4, 3, 2, 6, 6, 6, 7, 1, 2, 1, 1385 1, 1, 2, 3, 2, 3, 2, 3, 3, 4, 1386 2, 3, 4, 2, 5, 5, 6, 6, 0, 1, 1387 0, 2 1392 1388 }; 1393 1389 … … 1399 1395 294, 294, 315, 313, 316, 314, 317, 318, 300, 302, 1400 1396 301, 0, 303, 329, 321, 326, 324, 325, 323, 322, 1401 327, 328, 33 3, 330, 331, 332, 549, 549, 549, 0,1402 0, 0, 294, 220, 304, 319, 320, 7, 360, 0,1403 8, 14, 15, 0, 2, 294, 567, 9, 527, 525,1404 247, 3, 455, 3, 260, 0, 3, 3, 3, 248,1405 3, 0, 0, 0, 295, 296, 298, 294, 307, 310,1406 3 12, 341, 286, 334, 339, 287, 349, 288, 356, 353,1407 363, 0, 0, 364, 289, 475, 479, 3, 3, 0,1408 2, 521, 526, 531, 299, 0, 0, 549, 579, 549,1409 2, 590, 591, 592, 294, 0, 733, 734, 0, 12,1410 294, 0, 13, 270, 271, 0, 295, 290, 291, 292,1411 293, 528, 305, 393, 550, 551, 371, 372, 12, 446,1412 447, 11, 442, 445, 0, 505, 500, 491, 446, 447,1413 0, 0, 530, 221, 0, 294, 0, 0, 0, 0,1414 0, 0, 0, 0, 294, 294, 2, 0, 735, 295,1415 5 84, 596, 739, 732, 730, 737, 0, 0, 0, 254,1416 2, 0, 534, 440, 441, 439, 0, 0, 0, 0,1417 549, 0, 636, 637, 0, 0, 547, 543, 549, 564,1418 54 9, 549, 544, 2, 545, 549, 603, 549, 549, 606,1419 0, 0, 0, 294, 294, 313, 361, 2, 294, 261,1420 297, 308, 342, 354, 480, 0, 2, 0, 455, 262,1421 295, 335, 350, 357, 476, 0, 2, 0, 311, 336,1422 343, 344, 0, 351, 355, 358, 362, 447, 294, 294,1423 36 6, 370, 0, 395, 477, 481, 0, 0, 0, 1,1424 294, 2, 532, 578, 580, 294, 2, 743, 295, 746,1425 54 7, 547, 295, 0, 0, 0, 273, 549, 544, 2,1426 294, 0, 0, 294, 552, 2, 503, 2, 556, 0,1427 0, 0, 0, 0, 0, 18, 59, 4, 5,6,1428 16, 0, 0, 0, 294, 2, 0, 294, 65, 66,1429 6 7, 68, 48, 19, 49, 22, 47, 69, 0, 72,1430 7 6, 79, 82, 87, 90, 92, 94, 96, 98, 100,1431 105, 497, 753, 453, 496, 0, 451, 452, 0, 568,1432 583, 586, 5 89, 595, 598, 601, 360, 0, 2, 741,1433 0, 294, 744, 2, 294, 3, 427, 0, 435, 295,1434 294, 307, 334, 287, 349, 356, 3, 3, 409, 413,1435 42 3, 428, 475, 294, 429, 708, 709, 294, 430, 432,1436 294, 2, 585, 597, 731, 2, 2, 249, 2, 460,1437 0, 458, 457, 456, 141, 2, 2, 251, 2, 2,1438 250, 2, 281, 2, 282, 0, 280, 0, 0, 0,1439 0, 0, 0, 0, 0, 0, 569, 608, 0, 455,1440 2, 563, 572, 662, 565, 566, 535, 294, 2, 602,1441 6 11, 604, 605, 0, 276, 294, 294, 340, 295, 0,1442 295, 0, 294, 736, 740, 738, 536, 294, 547, 255,1443 263, 309, 0, 2, 537, 294, 501, 337, 338, 283,1444 35 2, 359, 0, 294, 2, 385, 294, 373, 0, 0,1445 379, 730, 0, 751, 400, 0, 478, 502, 252, 253,1446 522, 294, 437, 0, 294, 237, 0, 2, 239, 0,1447 295, 0, 257, 2, 258, 278, 0, 0, 2, 294,1448 547, 294, 488, 490, 489, 0, 0, 753, 0, 294,1449 0, 294, 492, 294, 562, 560, 561, 559, 0, 554,1450 557, 0, 0, 294, 56, 294, 69, 52, 294, 62,1451 294, 294, 50, 51, 64, 2, 127, 0, 0, 449,1452 0, 448, 111, 294, 54, 55, 17, 0, 29, 30,1453 35, 2, 0, 35, 117, 118, 119, 120, 121, 122,1454 12 3, 124, 125, 126, 0, 0, 53, 0, 0, 0,1397 327, 328, 330, 331, 332, 546, 546, 546, 0, 0, 1398 0, 294, 220, 304, 319, 320, 7, 359, 0, 8, 1399 14, 15, 0, 2, 294, 564, 9, 524, 522, 247, 1400 3, 452, 3, 260, 0, 3, 3, 3, 248, 3, 1401 0, 0, 0, 295, 296, 298, 294, 307, 310, 312, 1402 340, 286, 333, 338, 287, 348, 288, 355, 352, 362, 1403 0, 0, 363, 289, 472, 476, 3, 3, 0, 2, 1404 518, 523, 528, 299, 0, 0, 546, 576, 546, 2, 1405 587, 588, 589, 294, 0, 730, 731, 0, 12, 294, 1406 0, 13, 270, 271, 0, 295, 290, 291, 292, 293, 1407 525, 305, 391, 547, 548, 369, 370, 12, 443, 444, 1408 11, 439, 442, 0, 502, 497, 488, 443, 444, 0, 1409 0, 527, 221, 0, 294, 0, 0, 0, 0, 0, 1410 0, 0, 0, 294, 294, 2, 0, 732, 295, 581, 1411 593, 736, 729, 727, 734, 0, 0, 0, 254, 2, 1412 0, 531, 437, 438, 436, 0, 0, 0, 0, 546, 1413 0, 633, 634, 0, 0, 544, 540, 546, 561, 546, 1414 546, 541, 2, 542, 546, 600, 546, 546, 603, 0, 1415 0, 0, 294, 294, 313, 360, 2, 294, 261, 297, 1416 308, 341, 353, 477, 0, 2, 0, 452, 262, 295, 1417 334, 349, 356, 473, 0, 2, 0, 311, 335, 342, 1418 343, 0, 350, 354, 357, 361, 444, 294, 294, 365, 1419 368, 0, 394, 474, 478, 0, 0, 0, 1, 294, 1420 2, 529, 575, 577, 294, 2, 740, 295, 743, 544, 1421 544, 295, 0, 0, 0, 273, 546, 541, 2, 294, 1422 0, 0, 294, 549, 2, 500, 2, 553, 0, 0, 1423 0, 0, 0, 0, 18, 59, 4, 5, 6, 16, 1424 0, 0, 0, 294, 2, 0, 294, 65, 66, 67, 1425 68, 48, 19, 49, 22, 47, 69, 0, 72, 76, 1426 79, 82, 87, 90, 92, 94, 96, 98, 100, 105, 1427 494, 750, 450, 493, 0, 448, 449, 0, 565, 580, 1428 583, 586, 592, 595, 598, 359, 0, 2, 738, 0, 1429 294, 741, 2, 294, 3, 424, 0, 432, 295, 294, 1430 307, 333, 287, 348, 355, 3, 3, 406, 410, 420, 1431 425, 472, 294, 426, 705, 706, 294, 427, 429, 294, 1432 2, 582, 594, 728, 2, 2, 249, 2, 457, 0, 1433 455, 454, 453, 141, 2, 2, 251, 2, 2, 250, 1434 2, 281, 2, 282, 0, 280, 0, 0, 0, 0, 1435 0, 0, 0, 0, 0, 566, 605, 0, 452, 2, 1436 560, 569, 659, 562, 563, 532, 294, 2, 599, 608, 1437 601, 602, 0, 276, 294, 294, 339, 295, 0, 295, 1438 0, 294, 733, 737, 735, 533, 294, 544, 255, 263, 1439 309, 0, 2, 534, 294, 498, 336, 337, 283, 351, 1440 358, 0, 294, 2, 383, 294, 371, 0, 0, 377, 1441 727, 294, 748, 397, 0, 475, 499, 252, 253, 519, 1442 294, 434, 0, 294, 237, 0, 2, 239, 0, 295, 1443 0, 257, 2, 258, 278, 0, 0, 2, 294, 544, 1444 294, 485, 487, 486, 0, 0, 750, 0, 294, 0, 1445 294, 489, 294, 559, 557, 558, 556, 0, 551, 554, 1446 0, 0, 294, 56, 294, 69, 52, 294, 62, 294, 1447 294, 50, 51, 64, 2, 127, 0, 0, 446, 0, 1448 445, 111, 294, 54, 55, 17, 0, 29, 30, 35, 1449 2, 0, 35, 117, 118, 119, 120, 121, 122, 123, 1450 124, 125, 126, 0, 0, 53, 0, 0, 0, 0, 1455 1451 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1456 0, 0, 0, 0, 0, 0, 0, 108, 2, 648, 1457 454, 645, 549, 549, 653, 482, 294, 2, 587, 588, 1458 0, 599, 600, 0, 2, 742, 745, 111, 294, 2, 1459 294, 0, 710, 295, 714, 705, 706, 712, 0, 2, 1460 2, 670, 549, 753, 619, 549, 549, 753, 549, 633, 1461 549, 549, 684, 436, 667, 549, 549, 675, 682, 294, 1462 431, 295, 0, 0, 294, 720, 295, 725, 753, 717, 1463 294, 722, 753, 294, 294, 294, 0, 111, 0, 18, 1464 5, 2, 0, 19, 0, 461, 751, 0, 0, 467, 1465 241, 0, 294, 0, 0, 0, 547, 571, 575, 577, 1466 607, 610, 614, 617, 570, 609, 0, 284, 660, 0, 1467 294, 277, 0, 0, 0, 0, 275, 2, 0, 259, 1468 538, 294, 0, 0, 0, 0, 294, 294, 0, 0, 1469 694, 383, 386, 390, 549, 390, 699, 389, 691, 549, 1470 549, 365, 374, 382, 375, 549, 377, 380, 294, 752, 1471 0, 0, 398, 0, 295, 3, 416, 3, 420, 419, 1472 593, 0, 533, 294, 3, 3, 294, 435, 295, 3, 1473 429, 430, 2, 0, 0, 0, 487, 306, 294, 483, 1474 485, 3, 2, 2, 0, 504, 3, 0, 556, 129, 1475 0, 0, 222, 0, 0, 0, 2, 0, 0, 36, 1476 0, 0, 111, 294, 20, 0, 21, 0, 694, 450, 1477 0, 109, 3, 2, 27, 2, 0, 33, 0, 2, 1478 25, 0, 106, 107, 73, 74, 75, 77, 78, 80, 1479 81, 85, 86, 83, 84, 88, 89, 91, 93, 95, 1480 97, 99, 0, 0, 754, 294, 0, 0, 0, 649, 1481 650, 646, 647, 499, 498, 294, 0, 3, 294, 716, 1482 294, 721, 295, 294, 294, 294, 664, 707, 663, 2, 1483 294, 0, 0, 0, 0, 0, 0, 0, 0, 685, 1484 0, 671, 622, 638, 672, 2, 618, 625, 433, 620, 1485 621, 434, 2, 632, 641, 634, 635, 668, 669, 683, 1486 711, 715, 713, 753, 268, 2, 747, 2, 424, 719, 1487 724, 425, 0, 403, 3, 3, 3, 3, 455, 3, 1488 0, 2, 470, 466, 752, 0, 462, 469, 2, 465, 1489 468, 0, 294, 242, 264, 3, 272, 274, 0, 455, 1490 2, 573, 574, 2, 612, 613, 0, 661, 539, 3, 1491 346, 345, 348, 347, 294, 540, 0, 541, 294, 376, 1492 378, 2, 0, 0, 0, 0, 104, 392, 695, 696, 1493 387, 391, 388, 692, 693, 381, 385, 294, 400, 394, 1494 401, 751, 0, 0, 438, 240, 0, 0, 3, 2, 1495 670, 431, 0, 529, 0, 753, 491, 0, 294, 294, 1496 294, 0, 553, 555, 130, 0, 0, 215, 0, 0, 1497 0, 223, 224, 57, 0, 63, 294, 0, 61, 60, 1498 0, 128, 695, 460, 70, 71, 110, 115, 3, 109, 1499 0, 0, 0, 24, 35, 3, 0, 32, 102, 0, 1500 3, 652, 656, 659, 651, 3, 594, 3, 718, 723, 1501 2, 294, 3, 3, 295, 0, 3, 624, 628, 631, 1502 640, 674, 678, 681, 294, 3, 623, 639, 673, 294, 1503 294, 426, 294, 294, 748, 0, 0, 0, 0, 256, 1504 0, 104, 0, 3, 3, 0, 463, 0, 459, 0, 1505 0, 245, 294, 0, 0, 129, 0, 0, 0, 0, 1506 0, 129, 0, 0, 109, 109, 2, 0, 0, 0, 1507 3, 131, 132, 2, 143, 133, 134, 135, 136, 137, 1508 138, 145, 147, 0, 0, 0, 285, 294, 294, 549, 1509 0, 542, 294, 111, 698, 702, 704, 697, 384, 368, 1510 399, 0, 581, 2, 666, 665, 0, 671, 2, 484, 1511 486, 506, 3, 514, 515, 0, 2, 510, 3, 3, 1512 0, 0, 558, 222, 0, 0, 0, 222, 0, 0, 1513 3, 37, 751, 109, 0, 3, 663, 42, 3, 40, 1514 3, 34, 0, 3, 101, 103, 0, 2, 654, 655, 1515 0, 0, 294, 0, 0, 0, 3, 640, 0, 2, 1516 626, 627, 2, 642, 2, 676, 677, 0, 0, 3, 1517 0, 3, 3, 3, 3, 411, 410, 414, 2, 2, 1518 750, 749, 112, 0, 0, 0, 0, 3, 464, 3, 1519 0, 243, 146, 3, 295, 294, 0, 0, 0, 0, 1520 2, 191, 0, 189, 0, 0, 0, 0, 0, 0, 1521 0, 0, 111, 0, 549, 151, 148, 294, 0, 0, 1522 267, 279, 3, 3, 548, 615, 369, 2, 700, 701, 1523 397, 294, 266, 294, 0, 517, 494, 294, 0, 0, 1524 493, 508, 0, 0, 0, 216, 0, 225, 58, 109, 1525 0, 0, 116, 113, 0, 0, 0, 0, 0, 0, 1526 23, 0, 657, 294, 582, 265, 726, 727, 728, 0, 1527 679, 294, 294, 294, 3, 3, 0, 687, 0, 0, 1528 0, 0, 294, 294, 3, 546, 471, 472, 0, 0, 1529 246, 295, 0, 0, 0, 0, 294, 192, 190, 0, 1530 187, 193, 0, 0, 0, 0, 197, 200, 198, 194, 1531 0, 195, 35, 129, 144, 142, 244, 0, 0, 294, 1532 418, 422, 421, 0, 511, 2, 512, 2, 513, 507, 1533 294, 228, 0, 226, 0, 228, 3, 663, 31, 114, 1534 2, 45, 2, 43, 41, 28, 112, 26, 3, 729, 1535 3, 3, 3, 0, 0, 686, 688, 629, 643, 269, 1536 2, 408, 3, 407, 0, 474, 471, 129, 0, 0, 1537 129, 3, 0, 129, 188, 0, 2, 2, 209, 199, 1538 0, 0, 0, 0, 140, 576, 616, 3, 2, 0, 1539 0, 2, 229, 0, 0, 217, 0, 0, 0, 0, 1540 0, 0, 0, 0, 0, 689, 690, 294, 0, 473, 1541 152, 0, 0, 2, 165, 129, 154, 0, 182, 0, 1542 129, 0, 2, 156, 0, 2, 0, 2, 2, 2, 1543 196, 32, 0, 294, 516, 518, 509, 0, 0, 0, 1544 0, 114, 38, 3, 3, 658, 630, 644, 680, 412, 1545 129, 158, 161, 0, 160, 164, 3, 167, 166, 0, 1546 129, 184, 129, 3, 0, 294, 0, 294, 0, 2, 1547 0, 2, 139, 703, 2, 230, 231, 0, 227, 218, 1548 0, 0, 0, 153, 0, 0, 163, 233, 168, 2, 1549 235, 183, 0, 186, 172, 201, 3, 210, 214, 203, 1550 3, 0, 294, 0, 294, 0, 0, 0, 39, 46, 1551 44, 159, 162, 129, 0, 169, 294, 129, 129, 0, 1552 173, 0, 0, 694, 211, 212, 213, 0, 202, 3, 1553 204, 3, 294, 219, 232, 149, 170, 155, 129, 236, 1554 185, 180, 178, 174, 157, 129, 0, 695, 0, 0, 1555 0, 0, 150, 171, 181, 175, 179, 178, 176, 3, 1556 3, 0, 0, 495, 177, 205, 207, 3, 3, 206, 1557 208 1452 0, 0, 0, 0, 0, 0, 108, 2, 645, 451, 1453 642, 546, 546, 650, 479, 294, 2, 584, 585, 0, 1454 596, 597, 0, 2, 739, 742, 111, 294, 2, 294, 1455 0, 707, 295, 711, 702, 703, 709, 0, 2, 2, 1456 667, 546, 750, 616, 546, 546, 750, 546, 630, 546, 1457 546, 681, 433, 664, 546, 546, 672, 679, 294, 428, 1458 295, 0, 0, 294, 717, 295, 722, 750, 714, 294, 1459 719, 750, 294, 294, 294, 0, 111, 0, 18, 5, 1460 2, 0, 19, 0, 458, 748, 0, 0, 464, 241, 1461 0, 294, 0, 0, 0, 544, 568, 572, 574, 604, 1462 607, 611, 614, 567, 606, 0, 284, 657, 0, 294, 1463 277, 0, 0, 0, 0, 275, 2, 0, 259, 535, 1464 294, 0, 0, 0, 0, 294, 294, 0, 0, 691, 1465 381, 384, 388, 546, 388, 696, 387, 688, 546, 546, 1466 364, 372, 380, 373, 546, 375, 378, 294, 749, 0, 1467 0, 395, 748, 295, 3, 413, 3, 417, 416, 590, 1468 0, 530, 294, 3, 3, 294, 432, 295, 3, 426, 1469 427, 2, 0, 0, 0, 484, 306, 294, 480, 482, 1470 3, 2, 2, 0, 501, 3, 0, 553, 129, 0, 1471 0, 222, 0, 0, 0, 2, 0, 0, 36, 0, 1472 0, 111, 294, 20, 0, 21, 0, 691, 447, 0, 1473 109, 3, 2, 27, 2, 0, 33, 0, 2, 25, 1474 0, 106, 107, 73, 74, 75, 77, 78, 80, 81, 1475 85, 86, 83, 84, 88, 89, 91, 93, 95, 97, 1476 99, 0, 0, 751, 294, 0, 0, 0, 646, 647, 1477 643, 644, 496, 495, 294, 0, 3, 294, 713, 294, 1478 718, 295, 294, 294, 294, 661, 704, 660, 2, 294, 1479 0, 0, 0, 0, 0, 0, 0, 0, 682, 0, 1480 668, 619, 635, 669, 2, 615, 622, 430, 617, 618, 1481 431, 2, 629, 638, 631, 632, 665, 666, 680, 708, 1482 712, 710, 750, 268, 2, 744, 2, 421, 716, 721, 1483 422, 0, 400, 3, 3, 3, 3, 452, 3, 0, 1484 2, 467, 463, 749, 0, 459, 466, 2, 462, 465, 1485 0, 294, 242, 264, 3, 272, 274, 0, 452, 2, 1486 570, 571, 2, 609, 610, 0, 658, 536, 3, 345, 1487 344, 347, 346, 294, 537, 0, 538, 294, 374, 376, 1488 2, 0, 0, 0, 0, 104, 390, 692, 693, 385, 1489 389, 386, 689, 690, 379, 383, 366, 397, 392, 398, 1490 0, 0, 0, 435, 240, 0, 0, 3, 2, 667, 1491 428, 0, 526, 0, 750, 488, 0, 294, 294, 294, 1492 0, 550, 552, 130, 0, 0, 215, 0, 0, 0, 1493 223, 224, 57, 0, 63, 294, 0, 61, 60, 0, 1494 128, 692, 457, 70, 71, 110, 115, 3, 109, 0, 1495 0, 0, 24, 35, 3, 0, 32, 102, 0, 3, 1496 649, 653, 656, 648, 3, 591, 3, 715, 720, 2, 1497 294, 3, 3, 295, 0, 3, 621, 625, 628, 637, 1498 671, 675, 678, 294, 3, 620, 636, 670, 294, 294, 1499 423, 294, 294, 745, 0, 0, 0, 0, 256, 0, 1500 104, 0, 3, 3, 0, 460, 0, 456, 0, 0, 1501 245, 294, 0, 0, 129, 0, 0, 0, 0, 0, 1502 129, 0, 0, 109, 109, 2, 0, 0, 0, 3, 1503 131, 132, 2, 143, 133, 134, 135, 136, 137, 138, 1504 145, 147, 0, 0, 0, 285, 294, 294, 546, 0, 1505 539, 294, 111, 695, 699, 701, 694, 382, 396, 393, 1506 578, 2, 663, 662, 0, 668, 2, 481, 483, 503, 1507 3, 511, 512, 0, 2, 507, 3, 3, 0, 0, 1508 555, 222, 0, 0, 0, 222, 0, 0, 3, 37, 1509 748, 109, 0, 3, 660, 42, 3, 40, 3, 34, 1510 0, 3, 101, 103, 0, 2, 651, 652, 0, 0, 1511 294, 0, 0, 0, 3, 637, 0, 2, 623, 624, 1512 2, 639, 2, 673, 674, 0, 0, 3, 0, 3, 1513 3, 3, 3, 408, 407, 411, 2, 2, 747, 746, 1514 112, 0, 0, 0, 0, 3, 461, 3, 0, 243, 1515 146, 3, 295, 294, 0, 0, 0, 0, 2, 191, 1516 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 1517 111, 0, 546, 151, 148, 294, 0, 0, 267, 279, 1518 3, 3, 545, 612, 367, 2, 697, 698, 294, 266, 1519 294, 0, 514, 491, 294, 0, 0, 490, 505, 0, 1520 0, 0, 216, 0, 225, 58, 109, 0, 0, 116, 1521 113, 0, 0, 0, 0, 0, 0, 23, 0, 654, 1522 294, 579, 265, 723, 724, 725, 0, 676, 294, 294, 1523 294, 3, 3, 0, 684, 0, 0, 0, 0, 294, 1524 294, 3, 543, 468, 469, 0, 0, 246, 295, 0, 1525 0, 0, 0, 294, 192, 190, 0, 187, 193, 0, 1526 0, 0, 0, 197, 200, 198, 194, 0, 195, 35, 1527 129, 144, 142, 244, 0, 0, 294, 415, 419, 418, 1528 0, 508, 2, 509, 2, 510, 504, 294, 228, 0, 1529 226, 0, 228, 3, 660, 31, 114, 2, 45, 2, 1530 43, 41, 28, 112, 26, 3, 726, 3, 3, 3, 1531 0, 0, 683, 685, 626, 640, 269, 2, 405, 3, 1532 404, 0, 471, 468, 129, 0, 0, 129, 3, 0, 1533 129, 188, 0, 2, 2, 209, 199, 0, 0, 0, 1534 0, 140, 573, 613, 3, 2, 0, 0, 2, 229, 1535 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 1536 0, 0, 686, 687, 294, 0, 470, 152, 0, 0, 1537 2, 165, 129, 154, 0, 182, 0, 129, 0, 2, 1538 156, 0, 2, 0, 2, 2, 2, 196, 32, 0, 1539 294, 513, 515, 506, 0, 0, 0, 0, 114, 38, 1540 3, 3, 655, 627, 641, 677, 409, 129, 158, 161, 1541 0, 160, 164, 3, 167, 166, 0, 129, 184, 129, 1542 3, 0, 294, 0, 294, 0, 2, 0, 2, 139, 1543 700, 2, 230, 231, 0, 227, 218, 0, 0, 0, 1544 153, 0, 0, 163, 233, 168, 2, 235, 183, 0, 1545 186, 172, 201, 3, 210, 214, 203, 3, 0, 294, 1546 0, 294, 0, 0, 0, 39, 46, 44, 159, 162, 1547 129, 0, 169, 294, 129, 129, 0, 173, 0, 0, 1548 691, 211, 212, 213, 0, 202, 3, 204, 3, 294, 1549 219, 232, 149, 170, 155, 129, 236, 185, 180, 178, 1550 174, 157, 129, 0, 692, 0, 0, 0, 0, 150, 1551 171, 181, 175, 179, 178, 176, 3, 3, 0, 0, 1552 492, 177, 205, 207, 3, 3, 206, 208 1558 1553 }; 1559 1554 … … 1561 1556 static const yytype_int16 yydefgoto[] = 1562 1557 { 1563 -1, 8 40, 475, 302, 46, 132, 133, 303, 304, 305,1564 30 6, 786, 787, 1148, 1149, 307, 308, 309, 310, 311,1565 31 2, 313, 314, 315, 316, 317, 318, 319, 320, 1052,1566 52 6, 997, 322, 998, 555, 974, 1079, 1545, 1081, 1082,1567 108 3, 1084, 1546, 1085, 1086, 1462, 1463, 1424, 1425, 1426,1568 152 4, 1525, 1529, 1530, 1565, 1566, 1087, 1382, 1088, 1089,1569 131 6, 1317, 1318, 1506, 1090, 144, 980, 981, 982, 1403,1570 148 7, 1498, 1499, 476, 477, 902, 903, 1060, 49, 50,1571 5 1, 52, 53, 346, 157, 56, 57, 58, 59, 60,1572 34 8, 62, 63, 262, 65, 66, 273, 350, 351, 69,1573 70, 71, 72, 117, 74, 203, 353, 118, 77, 119,1574 7 9, 80, 462, 81, 456, 457, 458, 459, 701, 940,1575 702, 82, 83, 465, 463, 722, 882, 883, 356, 357,1576 72 5, 726, 727, 358, 359, 360, 361, 473, 340, 134,1577 135, 530, 324, 169, 655, 656, 657, 658, 659, 84,1578 120, 86, 496, 497, 966, 498, 276, 502, 325, 87,1579 136, 137, 88, 1340, 1126, 1127, 1128, 1129, 89, 90,1580 743, 91, 272, 92, 93, 186, 1054, 689, 411, 124,1581 94, 508, 509, 510, 187, 267, 189, 190, 191, 268,1582 9 7, 98, 99, 100, 101, 102, 103, 194, 195, 196,1583 197, 198, 852, 614, 615, 616, 617, 199, 619, 620,1584 621, 580, 581, 582, 583, 706, 104, 623, 624, 625,1585 62 6, 627, 628, 939, 708, 709, 710, 604, 364, 365,1586 3 66, 367, 326, 163, 106, 107, 108, 369, 720, 5771558 -1, 839, 474, 301, 45, 131, 132, 302, 303, 304, 1559 305, 785, 786, 1146, 1147, 306, 307, 308, 309, 310, 1560 311, 312, 313, 314, 315, 316, 317, 318, 319, 1051, 1561 525, 996, 321, 997, 554, 973, 1078, 1542, 1080, 1081, 1562 1082, 1083, 1543, 1084, 1085, 1459, 1460, 1421, 1422, 1423, 1563 1521, 1522, 1526, 1527, 1562, 1563, 1086, 1379, 1087, 1088, 1564 1313, 1314, 1315, 1503, 1089, 143, 979, 980, 981, 1400, 1565 1484, 1495, 1496, 475, 476, 901, 902, 1059, 48, 49, 1566 50, 51, 52, 345, 156, 55, 56, 57, 58, 59, 1567 347, 61, 62, 261, 64, 65, 272, 349, 350, 68, 1568 69, 70, 71, 116, 73, 202, 352, 117, 76, 118, 1569 78, 79, 80, 455, 456, 457, 458, 700, 939, 701, 1570 81, 82, 462, 721, 881, 882, 355, 356, 724, 725, 1571 726, 357, 358, 359, 360, 472, 339, 133, 134, 529, 1572 323, 168, 654, 655, 656, 657, 658, 83, 119, 85, 1573 495, 496, 965, 497, 275, 501, 324, 86, 135, 136, 1574 87, 1337, 1124, 1125, 1126, 1127, 88, 89, 742, 90, 1575 271, 91, 92, 185, 1053, 688, 410, 123, 93, 507, 1576 508, 509, 186, 266, 188, 189, 190, 267, 96, 97, 1577 98, 99, 100, 101, 102, 193, 194, 195, 196, 197, 1578 851, 613, 614, 615, 616, 198, 618, 619, 620, 579, 1579 580, 581, 582, 705, 103, 622, 623, 624, 625, 626, 1580 627, 938, 707, 708, 709, 603, 363, 364, 365, 366, 1581 325, 162, 105, 106, 107, 368, 719, 576 1587 1582 }; 1588 1583 1589 1584 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing 1590 1585 STATE-NUM. */ 1591 #define YYPACT_NINF -1 3321586 #define YYPACT_NINF -1281 1592 1587 static const yytype_int16 yypact[] = 1593 1588 { 1594 3506, 8076, -1332, 12, -1332, -1332, -1332, -1332, -1332, -1332, 1595 -1332, 61, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, 1596 -1332, -1332, -1332, -1332, -1332, -1332, 102, 102, 102, 1011, 1597 1062, 86, 5961, 228, -1332, -1332, -1332, -1332, -1332, 138, 1598 -1332, -1332, -1332, 684, 144, 9470, -1332, -1332, -1332, -1332, 1599 -1332, -1332, 190, 182, -1332, 1658, -1332, -1332, -1332, -1332, 1600 201, 1834, 303, 32, 4928, -1332, -1332, 9508, 1650, -1332, 1601 -1332, -1332, 615, 401, 4443, 184, 589, 615, 1225, -1332, 1602 -1332, 848, 938, -1332, 615, 1259, -1332, 301, -1332, 486, 1603 503, -1332, -1332, -1332, -1332, 316, 182, 102, -1332, 102, 1604 -1332, -1332, -1332, -1332, 9240, 1658, -1332, -1332, 1658, -1332, 1605 9354, 391, -1332, -1332, -1332, 1948, 9876, -1332, 810, 810, 1606 810, -1332, -1332, -1332, 102, -1332, -1332, -1332, 426, 447, 1607 456, -1332, -1332, -1332, 477, -1332, -1332, -1332, -1332, -1332, 1608 485, 495, -1332, -1332, 36, 8974, 2459, 272, 545, 579, 1609 623, 632, 671, 733, 8777, 7372, 596, 719, -1332, 9546, 1610 -1332, -1332, -1332, -1332, 739, -1332, 209, 3245, 3245, -1332, 1611 760, 213, -1332, -1332, -1332, -1332, 770, 237, 353, 362, 1612 102, 755, -1332, -1332, 1834, 1803, 846, -1332, 70, -1332, 1613 102, 102, 182, -1332, -1332, 98, -1332, 102, 102, -1332, 1614 2479, 820, 843, 810, 5405, -1332, -1332, 844, 9470, -1332, 1615 -1332, 615, -1332, -1332, -1332, 182, -1332, 1658, 190, -1332, 1616 7926, -1332, 810, 810, 810, 182, -1332, 1011, -1332, 2880, 1617 -1332, -1332, 827, 810, -1332, 810, -1332, 138, 8974, 8891, 1618 857, -1332, 1062, 864, 810, -1332, 1011, 870, 879, -1332, 1619 5961, 735, -1332, -1332, -1332, 9437, -1332, -1332, 3894, -1332, 1620 846, 69, 9876, 6310, 1948, 2479, -1332, 114, -1332, -1332, 1621 9354, 1658, 875, 11374, -1332, -1332, 546, -1332, 11116, 886, 1622 926, 10861, 905, 10919, 10938, -1332, 919, -1332, -1332, -1332, 1623 -1332, 10996, 10996, 735, 8632, 928, 10919, 9088, -1332, -1332, 1624 -1332, -1332, -1332, -1332, 949, -1332, 840, 2531, 10919, -1332, 1625 516, 336, 425, 270, 704, 934, 936, 960, 997, 52, 1626 -1332, -1332, 974, 356, -1332, 290, -1332, -1332, 2459, -1332, 1627 -1332, 600, 996, -1332, 701, 996, 1007, 138, -1332, -1332, 1628 1010, 9240, -1332, 1018, 8746, -1332, -1332, 1849, 1084, 8347, 1629 5405, 615, -1332, 615, 810, 810, -1332, -1332, -1332, -1332, 1630 -1332, -1332, 810, 9914, 1658, -1332, -1332, 9987, 1975, -1332, 1631 9012, -1332, -1332, -1332, -1332, -1332, -1332, -1332, 1030, 3059, 1632 10919, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, 1633 -1332, -1332, -1332, -1332, -1332, 1948, -1332, 773, 1012, 1034, 1634 1040, 889, 1045, 1051, 1053, 1803, -1332, -1332, 1063, 190, 1635 1064, -1332, -1332, 1066, -1332, -1332, -1332, 9437, -1332, -1332, 1636 -1332, -1332, -1332, 2479, -1332, 8974, 8974, -1332, 810, 1948, 1637 6923, 1658, 8420, -1332, -1332, -1332, -1332, 9437, 69, -1332, 1638 -1332, 615, 182, -1332, -1332, 9437, -1332, 3625, -1332, -1332, 1639 810, 810, 464, 10025, 1068, 907, 9695, -1332, 437, 475, 1640 1062, -1332, 1067, 1069, 1047, 1070, 810, -1332, -1332, -1332, 1641 -1332, 10283, -1332, 522, 6793, -1332, 182, 1074, -1332, 1948, 1642 11198, 6368, -1332, -1332, -1332, -1332, 939, 2479, -1332, 8493, 1643 846, 5374, -1332, -1332, -1332, 828, 610, 974, 1062, 11374, 1644 861, 9354, -1332, 11374, -1332, -1332, -1332, -1332, 618, -1332, 1645 1073, 926, 326, 8632, -1332, 10025, -1332, -1332, 8632, -1332, 1646 8860, 8632, -1332, -1332, -1332, 1077, -1332, 619, 1082, 630, 1647 1087, -1332, 5066, 7012, -1332, -1332, -1332, 47, -1332, -1332, 1648 10784, -1332, 474, 10784, -1332, -1332, -1332, -1332, -1332, -1332, 1649 -1332, -1332, -1332, -1332, 6310, 6310, -1332, 10919, 10919, 10919, 1650 10919, 10919, 10919, 10919, 10919, 10919, 10919, 10919, 10919, 10919, 1651 10919, 10919, 10919, 10919, 10919, 4001, 6310, -1332, 356, 777, 1652 -1332, -1332, 102, 102, -1332, -1332, 8974, -1332, -1332, 1066, 1653 735, -1332, 1066, 10842, -1332, -1332, -1332, 6075, 7012, 1086, 1654 9202, 1093, -1332, 10055, -1332, -1332, 739, -1332, 1094, 690, 1655 1096, 1090, 157, 974, -1332, 102, 102, 974, 166, -1332, 1656 102, 102, 1066, -1332, -1332, 102, 102, -1332, 996, 10137, 1657 1658, 11343, 372, 531, 10137, -1332, 6678, -1332, 974, -1332, 1658 9914, -1332, 285, 8042, 8042, 8042, 1658, -1332, 5183, 1085, 1659 453, 1030, 955, 1095, 1097, -1332, 1099, 3245, 590, -1332, 1660 1182, 1658, 8042, 735, 1948, 735, 846, 706, 996, -1332, 1661 -1332, 806, 996, -1332, -1332, -1332, 926, -1332, 996, 182, 1662 10283, -1332, 647, 1107, 688, 1108, -1332, 1109, 182, -1332, 1663 -1332, 9437, 182, 1105, 497, 502, 10167, 7492, 1400, 10919, 1664 1678, -1332, -1332, 1103, 62, 1103, -1332, -1332, -1332, 102, 1665 102, -1332, -1332, 1062, -1332, 102, -1332, -1332, 8891, 1062, 1666 1110, 10919, -1332, 1062, 11343, -1332, -1332, 1113, -1332, -1332, 1667 -1332, 735, -1332, 11271, 10919, -1332, 8042, 718, 8347, -1332, 1668 -1332, 739, 1114, 1115, 828, 2655, -1332, -1332, 11374, -1332, 1669 -1332, 1116, -1332, -1332, 1122, -1332, 1116, 1123, 11116, 6310, 1670 163, 1092, 54, 1131, 1128, 1135, 928, 1130, 1138, -1332, 1671 1140, 1141, 9733, 7132, -1332, 6310, -1332, 630, 1274, -1332, 1672 5523, 6310, 1139, -1332, -1332, 1030, 695, -1332, 6310, -1332, 1673 -1332, 741, -1332, -1332, -1332, -1332, -1332, 516, 516, 336, 1674 336, 425, 425, 425, 425, 270, 270, 704, 934, 936, 1675 960, 997, 10919, 754, -1332, 10283, 1150, 1151, 1153, 777, 1676 -1332, -1332, -1332, -1332, -1332, 10283, 748, 10919, 8042, -1332, 1677 9914, -1332, 7612, 9316, 9126, 7372, -1332, -1332, -1332, 690, 1678 10283, 950, 1164, 1165, 1171, 1172, 1179, 1180, 1181, -1332, 1679 3591, 1090, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, 1680 -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, 1066, 1681 -1332, -1332, -1332, 974, -1332, -1332, -1332, -1332, -1332, -1332, 1682 -1332, -1332, 1183, -1332, 1184, 1187, -1332, -1332, 190, 1139, 1683 5183, -1332, -1332, -1332, 3059, 1185, -1332, -1332, -1332, -1332, 1684 -1332, 1062, 6532, 1270, -1332, -1332, -1332, -1332, 1173, 190, 1685 -1332, -1332, 1066, -1332, -1332, 1066, 152, 1066, -1332, -1332, 1686 -1332, -1332, -1332, -1332, 9584, -1332, 182, -1332, 8891, -1332, 1687 -1332, 1193, 795, 1199, 1200, 1204, -1332, -1332, 1678, -1332, 1688 -1332, -1332, -1332, -1332, -1332, -1332, 907, 9763, 1047, -1332, 1689 -1332, 1069, 1205, 1201, -1332, -1332, 1206, 1207, -1332, 718, 1690 1989, -1332, 634, -1332, 2655, 974, -1332, 1211, 11374, 10205, 1691 8974, 1214, -1332, -1332, 1212, 1217, 1213, -1332, 10919, 229, 1692 205, 1215, -1332, 1202, 735, 1202, 7012, 6310, -1332, -1332, 1693 1202, -1332, 1274, 3059, -1332, -1332, -1332, -1332, 1220, 6310, 1694 1228, 735, 5183, -1332, 10784, -1332, 735, -1332, -1332, 6310, 1695 -1332, 863, 996, -1332, -1332, -1332, -1332, -1332, -1332, -1332, 1696 1030, 8746, -1332, -1332, 7732, 1219, -1332, 876, 996, -1332, 1697 883, 896, 996, -1332, 810, 4775, -1332, -1332, -1332, 10283, 1698 10283, -1332, 8420, 8420, -1332, 1221, 1226, 1233, 1235, -1332, 1699 1234, 643, 137, 1139, -1332, 735, -1332, 3245, -1332, 6310, 1700 517, -1332, 6892, 1245, 1249, 10726, 1253, 1258, 330, 380, 1701 387, 6310, 1265, 182, 6310, 6310, 1256, 294, 1269, 1250, 1702 -1332, -1332, -1332, 1277, -1332, -1332, -1332, -1332, -1332, -1332, 1703 -1332, -1332, -1332, 1062, 1285, 6310, -1332, 10283, 10283, 102, 1704 1287, -1332, 9845, 9622, 932, 996, -1332, -1332, -1332, -1332, 1705 -1332, 1286, -1332, -1332, -1332, -1332, 1293, 1989, -1332, -1332, 1706 1275, -1332, 1116, -1332, -1332, 1948, 1290, -1332, -1332, -1332, 1707 749, 1292, -1332, 54, 1295, 10919, 1279, 54, 54, 1305, 1708 1301, -1332, 1099, 6310, 1308, 1220, 605, 89, 1306, -1332, 1709 1301, -1332, 1312, 1306, -1332, -1332, 1317, -1332, -1332, 1066, 1710 1319, 1322, 7252, 1323, 1325, 1326, -1332, -1332, 1329, -1332, 1711 -1332, 1066, -1332, -1332, -1332, -1332, 1066, 6310, 6310, 10919, 1712 1330, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, 1713 -1332, -1332, -1332, 10919, 10919, 1332, 1335, 1306, -1332, -1332, 1714 1062, -1332, -1332, -1332, 7853, 10205, 6310, 6310, 1394, 6310, 1715 -1332, -1332, 1321, -1332, 1324, 6310, 1327, 1331, 6310, 1013, 1716 1333, 97, 8265, 1262, 102, -1332, -1332, 6532, 1334, 537, 1717 -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, 1066, 1718 -1332, 10544, -1332, 8493, 1345, -1332, -1332, 10205, 562, 563, 1719 -1332, 1343, 1344, 926, 1352, -1332, 450, -1332, -1332, 6310, 1720 1355, 1349, -1332, -1332, 1356, 543, 613, 735, 1357, 1358, 1721 -1332, 1361, -1332, 10283, -1332, -1332, -1332, -1332, -1332, 1365, 1722 -1332, 10283, 10283, 10283, -1332, -1332, 1367, -1332, 1368, 1371, 1723 1372, 668, 8115, 8231, -1332, -1332, 457, -1332, 1376, 1378, 1724 -1332, 8566, 750, 782, 1387, 793, 6762, -1332, -1332, 598, 1725 -1332, -1332, 803, 1388, 1393, 182, 1445, 882, -1332, -1332, 1726 6310, -1332, 10784, 10726, -1332, -1332, -1332, 1396, 1404, 10283, 1727 -1332, -1332, -1332, 1401, -1332, -1332, -1332, -1332, -1332, -1332, 1728 10205, 926, 254, -1332, 1384, 926, 1220, 366, -1332, -1332, 1729 -1332, -1332, -1332, -1332, -1332, -1332, 1405, -1332, -1332, -1332, 1730 -1332, -1332, -1332, 1406, 1409, -1332, -1332, -1332, -1332, -1332, 1731 -1332, -1332, 1414, -1332, 1413, -1332, -1332, 10726, 84, 6310, 1732 10726, -1332, 1417, 6310, -1332, 99, 1433, 1434, -1332, -1332, 1733 1422, 1425, 1408, 852, -1332, -1332, -1332, -1332, -1332, 1658, 1734 1948, 1421, 949, 918, 10919, -1332, 832, 1426, 6310, 735, 1735 735, 1427, 1431, 1440, 1441, -1332, -1332, 8420, 1428, -1332, 1736 1501, 10919, 1437, -1332, -1332, 10637, -1332, 845, -1332, 1424, 1737 10726, 1436, -1332, -1332, 1460, -1332, 1461, -1332, 1476, 1481, 1738 -1332, 1446, 1471, 10205, -1332, -1332, -1332, 926, 735, 1472, 1739 1452, 1468, -1332, 1306, 1306, -1332, -1332, -1332, -1332, -1332, 1740 10726, 295, -1332, 940, -1332, -1332, 5671, -1332, -1332, 1454, 1741 6310, -1332, 6310, 5671, 182, 10025, 182, 10025, 1478, -1332, 1742 1482, -1332, -1332, -1332, 1480, 949, -1332, 850, -1332, -1332, 1743 6310, 1479, 1487, -1332, 10919, 10919, -1332, -1332, 1054, 123, 1744 -1332, -1332, 1465, -1332, 1054, -1332, -1332, 1818, 735, -1332, 1745 -1332, 182, 10025, 182, 10025, 1492, 1474, 735, -1332, -1332, 1746 -1332, -1332, -1332, 10637, 1488, 1054, 6242, 6310, 10548, 1495, 1747 1054, 1502, 1818, 2347, -1332, -1332, -1332, 1505, -1332, -1332, 1748 -1332, -1332, 8974, -1332, -1332, -1332, 10415, -1332, 10637, -1332, 1749 -1332, 1484, 10322, -1332, -1332, 10548, 182, 2347, 182, 1509, 1750 1510, 853, -1332, 10415, -1332, -1332, -1332, 10322, -1332, -1332, 1751 -1332, 182, 182, -1332, -1332, -1332, -1332, -1332, -1332, -1332, 1752 -1332 1589 3705, 8889, -1281, 104, -1281, -1281, -1281, -1281, -1281, -1281, 1590 -1281, 44, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, 1591 -1281, -1281, -1281, -1281, -1281, 155, 155, 155, 1205, 815, 1592 110, 6006, 222, -1281, -1281, -1281, -1281, -1281, 130, -1281, 1593 -1281, -1281, 1267, 189, 3199, -1281, -1281, -1281, -1281, -1281, 1594 -1281, 31, 144, -1281, 1338, -1281, -1281, -1281, -1281, 153, 1595 1410, 279, 82, 7674, -1281, -1281, 8086, 1234, -1281, -1281, 1596 -1281, 981, 359, 7231, 925, 669, 981, 1012, -1281, -1281, 1597 738, 575, -1281, 981, 1119, -1281, 242, -1281, 416, 419, 1598 -1281, -1281, -1281, -1281, 277, 144, 155, -1281, 155, -1281, 1599 -1281, -1281, -1281, 9536, 1338, -1281, -1281, 1338, -1281, 9574, 1600 321, -1281, -1281, -1281, 2195, 9607, -1281, 565, 565, 565, 1601 -1281, -1281, -1281, 155, -1281, -1281, -1281, 280, 366, 418, 1602 -1281, -1281, -1281, 425, -1281, -1281, -1281, -1281, -1281, 443, 1603 475, -1281, -1281, 120, 8972, 3739, 375, 387, 486, 496, 1604 514, 527, 541, 8273, 7081, 550, 568, -1281, 9460, -1281, 1605 -1281, -1281, -1281, 602, -1281, 121, 4456, 4456, -1281, 552, 1606 298, -1281, -1281, -1281, -1281, 634, 302, 306, 327, 155, 1607 590, -1281, -1281, 1410, 2454, 696, -1281, 90, -1281, 155, 1608 155, 144, -1281, -1281, 124, -1281, 155, 155, -1281, 2638, 1609 658, 667, 565, 6993, -1281, -1281, 678, 3199, -1281, -1281, 1610 981, -1281, -1281, -1281, 144, -1281, 1338, 31, -1281, 8010, 1611 -1281, 565, 565, 565, 144, -1281, 1205, -1281, 5198, -1281, 1612 -1281, 673, 565, -1281, 565, -1281, 130, 8972, 9002, 686, 1613 -1281, 815, 694, 565, -1281, 1205, 728, 736, -1281, 6006, 1614 544, -1281, -1281, -1281, 9431, -1281, -1281, 3957, -1281, 696, 1615 79, 9607, 6464, 2195, 2638, -1281, 157, -1281, -1281, 9574, 1616 1338, 717, 7703, -1281, -1281, 699, -1281, 10744, 783, 831, 1617 3925, 787, 6306, 10567, -1281, 827, -1281, -1281, -1281, -1281, 1618 10625, 10625, 544, 8633, 829, 6306, 9085, -1281, -1281, -1281, 1619 -1281, -1281, -1281, 862, -1281, 1121, 2197, 6306, -1281, 599, 1620 388, 472, 354, 593, 830, 867, 873, 970, 245, -1281, 1621 -1281, 874, 650, -1281, 325, -1281, -1281, 3739, -1281, -1281, 1622 585, 901, -1281, 747, 901, 958, 130, -1281, -1281, 962, 1623 9536, -1281, 977, 8746, -1281, -1281, 957, 935, 8355, 6993, 1624 981, -1281, 981, 565, 565, -1281, -1281, -1281, -1281, -1281, 1625 -1281, 565, 9645, 1338, -1281, -1281, 9683, 1067, -1281, 9123, 1626 -1281, -1281, -1281, -1281, -1281, -1281, -1281, 990, 5315, 6306, 1627 -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, 1628 -1281, -1281, -1281, -1281, 2195, -1281, 846, 996, 998, 1002, 1629 864, 1005, 1008, 1026, 2454, -1281, -1281, 1031, 31, 1033, 1630 -1281, -1281, 1061, -1281, -1281, -1281, 9431, -1281, -1281, -1281, 1631 -1281, -1281, 2638, -1281, 8972, 8972, -1281, 565, 2195, 7112, 1632 1338, 8426, -1281, -1281, -1281, -1281, 9431, 79, -1281, -1281, 1633 981, 144, -1281, -1281, 9431, -1281, 6877, -1281, -1281, 565, 1634 565, 376, 9716, 1035, 1868, 2111, -1281, 334, 338, 815, 1635 -1281, 9002, 1059, 1047, 815, 565, -1281, -1281, -1281, -1281, 1636 9940, -1281, 583, 6755, -1281, 144, 1065, -1281, 2195, 10825, 1637 10471, -1281, -1281, -1281, -1281, 889, 2638, -1281, 8497, 696, 1638 7558, -1281, -1281, -1281, 1286, 636, 874, 815, 7703, 868, 1639 9574, -1281, 7703, -1281, -1281, -1281, -1281, 638, -1281, 1073, 1640 831, 207, 8633, -1281, 9716, -1281, -1281, 8633, -1281, 8859, 1641 8633, -1281, -1281, -1281, 1071, -1281, 681, 1077, 668, 1078, 1642 -1281, 4381, 6724, -1281, -1281, -1281, 328, -1281, -1281, 10490, 1643 -1281, 385, 10490, -1281, -1281, -1281, -1281, -1281, -1281, -1281, 1644 -1281, -1281, -1281, 6464, 6464, -1281, 6306, 6306, 6306, 6306, 1645 6306, 6306, 6306, 6306, 6306, 6306, 6306, 6306, 6306, 6306, 1646 6306, 6306, 6306, 6306, 4789, 6464, -1281, 650, 1062, -1281, 1647 -1281, 155, 155, -1281, -1281, 8972, -1281, -1281, 1061, 544, 1648 -1281, 1061, 10548, -1281, -1281, -1281, 5232, 6724, 1079, 9198, 1649 1080, -1281, 9754, -1281, -1281, 602, -1281, 1082, 1185, 1084, 1650 1899, 185, 874, -1281, 155, 155, 874, 233, -1281, 155, 1651 155, 1061, -1281, -1281, 155, 155, -1281, 901, 9792, 1338, 1652 10968, 234, 509, 9792, -1281, 5821, -1281, 874, -1281, 9645, 1653 -1281, 293, 5525, 5525, 5525, 1338, -1281, 5054, 1072, 558, 1654 990, 1016, 1083, 1086, -1281, 1074, 4456, 592, -1281, 1172, 1655 1338, 5525, 544, 2195, 544, 696, 809, 901, -1281, -1281, 1656 814, 901, -1281, -1281, -1281, 831, -1281, 901, 144, 9940, 1657 -1281, 682, 1095, 691, 1099, -1281, 1098, 144, -1281, -1281, 1658 9431, 144, 1103, 362, 407, 9825, 7200, 1999, 6306, 1917, 1659 -1281, -1281, 1101, 94, 1101, -1281, -1281, -1281, 155, 155, 1660 -1281, -1281, 815, -1281, 155, -1281, -1281, 3122, 815, 1107, 1661 6306, -1281, 1059, 10968, -1281, -1281, 1102, -1281, -1281, -1281, 1662 544, -1281, 10897, 6306, -1281, 5525, 675, 8355, -1281, -1281, 1663 602, 1108, 1109, 1286, 3745, -1281, -1281, 7703, -1281, -1281, 1664 1111, -1281, -1281, 1116, -1281, 1111, 1128, 10744, 6464, 146, 1665 1113, 53, 1136, 1115, 1137, 829, 1131, 1139, -1281, 1142, 1666 1143, 1696, 6843, -1281, 6464, -1281, 668, 1691, -1281, 6022, 1667 6464, 1138, -1281, -1281, 990, 708, -1281, 6464, -1281, -1281, 1668 727, -1281, -1281, -1281, -1281, -1281, 599, 599, 388, 388, 1669 472, 472, 472, 472, 354, 354, 593, 830, 867, 873, 1670 970, 6306, 755, -1281, 9940, 1148, 1149, 1152, 1062, -1281, 1671 -1281, -1281, -1281, -1281, 9940, 713, 6306, 5525, -1281, 9645, 1672 -1281, 7319, 9311, 9236, 7081, -1281, -1281, -1281, 1185, 9940, 1673 951, 1160, 1163, 1165, 1166, 1175, 1176, 1182, -1281, 3532, 1674 1899, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, 1675 -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, 1061, -1281, 1676 -1281, -1281, 874, -1281, -1281, -1281, -1281, -1281, -1281, -1281, 1677 -1281, 1183, -1281, 1187, 1189, -1281, -1281, 31, 1138, 5054, 1678 -1281, -1281, -1281, 5315, 1180, -1281, -1281, -1281, -1281, -1281, 1679 815, 6243, 1272, -1281, -1281, -1281, -1281, 1188, 31, -1281, 1680 -1281, 1061, -1281, -1281, 1061, 70, 1061, -1281, -1281, -1281, 1681 -1281, -1281, -1281, 9498, -1281, 144, -1281, 9002, -1281, -1281, 1682 1201, 818, 1208, 1212, 1213, -1281, -1281, 1917, -1281, -1281, 1683 -1281, -1281, -1281, -1281, -1281, 1868, -1281, 1047, -1281, -1281, 1684 1210, 1216, 1211, -1281, -1281, 1218, 1223, -1281, 675, 1777, 1685 -1281, 562, -1281, 3745, 874, -1281, 1226, 7703, 9863, 8972, 1686 1230, -1281, -1281, 1225, 1235, 1238, -1281, 6306, 252, 40, 1687 1231, -1281, 1242, 544, 1242, 6724, 6464, -1281, -1281, 1242, 1688 -1281, 1691, 5315, -1281, -1281, -1281, -1281, 1236, 6464, 1245, 1689 544, 5054, -1281, 10490, -1281, 544, -1281, -1281, 6464, -1281, 1690 850, 901, -1281, -1281, -1281, -1281, -1281, -1281, -1281, 990, 1691 8746, -1281, -1281, 7438, 1249, -1281, 856, 901, -1281, 872, 1692 904, 901, -1281, 565, 4646, -1281, -1281, -1281, 9940, 9940, 1693 -1281, 8426, 8426, -1281, 1252, 1255, 1264, 1271, -1281, 1253, 1694 594, 247, 1138, -1281, 544, -1281, 4456, -1281, 6464, 459, 1695 -1281, 6603, 1274, 1279, 10343, 1281, 1283, 301, 308, 344, 1696 6464, 1285, 144, 6464, 6464, 1284, 498, 1282, 1268, -1281, 1697 -1281, -1281, 1289, -1281, -1281, -1281, -1281, -1281, -1281, -1281, 1698 -1281, -1281, 815, 1296, 6464, -1281, 9940, 9940, 155, 1301, 1699 -1281, 9349, 4935, 934, 901, -1281, -1281, -1281, -1281, -1281, 1700 -1281, -1281, -1281, -1281, 1305, 1777, -1281, -1281, 1290, -1281, 1701 1111, -1281, -1281, 2195, 1309, -1281, -1281, -1281, 734, 1312, 1702 -1281, 53, 1317, 6306, 1303, 53, 53, 1327, 1323, -1281, 1703 1074, 6464, 1328, 1236, 1036, 113, 1326, -1281, 1323, -1281, 1704 1331, 1326, -1281, -1281, 1337, -1281, -1281, 1061, 1340, 1343, 1705 6962, 1342, 1344, 1350, -1281, -1281, 1353, -1281, -1281, 1061, 1706 -1281, -1281, -1281, -1281, 1061, 6464, 6464, 6306, 1355, -1281, 1707 -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, 1708 -1281, 6306, 6306, 1356, 1357, 1326, -1281, -1281, 815, -1281, 1709 -1281, -1281, 7939, 9863, 6464, 6464, 1423, 6464, -1281, -1281, 1710 1341, -1281, 1345, 6464, 1347, 1358, 6464, 1097, 1360, 74, 1711 8776, 1197, 155, -1281, -1281, 6243, 1361, 467, -1281, -1281, 1712 -1281, -1281, -1281, -1281, -1281, -1281, -1281, 1061, 10467, -1281, 1713 8497, 1362, -1281, -1281, 9863, 482, 494, -1281, 1372, 1383, 1714 831, 1394, -1281, 66, -1281, -1281, 6464, 1395, 1393, -1281, 1715 -1281, 1399, 430, 657, 544, 1400, 1401, -1281, 1406, -1281, 1716 9940, -1281, -1281, -1281, -1281, -1281, 1412, -1281, 9940, 9940, 1717 9940, -1281, -1281, 1413, -1281, 1415, 1425, 1427, 623, 8125, 1718 8240, -1281, -1281, 278, -1281, 1426, 1429, -1281, 8568, 745, 1719 759, 1430, 769, 6445, -1281, -1281, 502, -1281, -1281, 770, 1720 1434, 1436, 144, 1487, 911, -1281, -1281, 6464, -1281, 10490, 1721 10343, -1281, -1281, -1281, 1442, 1444, 9940, -1281, -1281, -1281, 1722 1437, -1281, -1281, -1281, -1281, -1281, -1281, 9863, 831, 269, 1723 -1281, 1424, 831, 1236, 373, -1281, -1281, -1281, -1281, -1281, 1724 -1281, -1281, -1281, 1443, -1281, -1281, -1281, -1281, -1281, -1281, 1725 1452, 1454, -1281, -1281, -1281, -1281, -1281, -1281, -1281, 1458, 1726 -1281, 1457, -1281, -1281, 10343, 148, 6464, 10343, -1281, 1462, 1727 6464, -1281, 171, 1484, 1486, -1281, -1281, 1465, 1476, 1455, 1728 905, -1281, -1281, -1281, -1281, -1281, 1338, 2195, 1471, 862, 1729 918, 6306, -1281, 772, 1477, 6464, 544, 544, 1480, 1482, 1730 1483, 1485, -1281, -1281, 8426, 1472, -1281, 1555, 6306, 1493, 1731 -1281, -1281, 10254, -1281, 790, -1281, 1467, 10343, 1468, -1281, 1732 -1281, 1511, -1281, 1513, -1281, 1507, 1529, -1281, 1496, 1519, 1733 9863, -1281, -1281, -1281, 831, 544, 1520, 1499, 1515, -1281, 1734 1326, 1326, -1281, -1281, -1281, -1281, -1281, 10343, 258, -1281, 1735 922, -1281, -1281, 7790, -1281, -1281, 1501, 6464, -1281, 6464, 1736 7790, 144, 9716, 144, 9716, 1528, -1281, 1530, -1281, -1281, 1737 -1281, 1524, 862, -1281, 794, -1281, -1281, 6464, 1540, 1542, 1738 -1281, 6306, 6306, -1281, -1281, 1051, 133, -1281, -1281, 1510, 1739 -1281, 1051, -1281, -1281, 2099, 544, -1281, -1281, 144, 9716, 1740 144, 9716, 1546, 1525, 544, -1281, -1281, -1281, -1281, -1281, 1741 10254, 1541, 1051, 7866, 6464, 10165, 1543, 1051, 1551, 2099, 1742 2338, -1281, -1281, -1281, 1552, -1281, -1281, -1281, -1281, 8972, 1743 -1281, -1281, -1281, 10072, -1281, 10254, -1281, -1281, 1531, 9979, 1744 -1281, -1281, 10165, 144, 2338, 144, 1557, 1559, 795, -1281, 1745 10072, -1281, -1281, -1281, 9979, -1281, -1281, -1281, 144, 144, 1746 -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281 1753 1747 }; 1754 1748 … … 1756 1750 static const yytype_int16 yypgoto[] = 1757 1751 { 1758 -1 332, 4383, 1919, -1332, 1457, -1332, 41, 0, -257, -1332,1759 5 44, -527, -514, -956, -190, 3713, -1332, 1485, 580, 585,1760 5 48, 602, 1055, 1052, 1056, 1059, 1061, -1332, -217, -341,1761 53 50, -699, -697, -922, -1332, -83, -701, -678, -1332, 561,1762 -1 332, 399, -1087, -1332, -1332, 141, -1332, -1329, -838, 252,1763 -1 332, -1332, -1332, -1332, 71, -1078, -1332, -1332, -1332, -1332,1764 -1 332, -1332, 325, -1308, 57, -1332, -297, -1332, 504, 305,1765 -1 332, 173, -1332, -305, -1332, -1332, -1332, 558, -799, -1332,1766 -1 332, 11, -1027, 151, 658, -1332, -1332, -1332, -52, -1332,1767 117, 913, -200, 1494, 4071, -1332, -1332, 19, 107, 365,1768 -2 32, 1565, -1332, 2150, -1332, -1332, 134, 2571, -1332, 3063,1769 1550, -1332, -1332, -1332, -643, -431, 1210, 1216, 707, 947,1770 188, -1332, -1332, -1332, 945, 723, -404, -1332, -520, -362,1771 293, -1332, -1332, -990, -995, 965, 1194, 1083, 304, -1332,1772 150, 317, -75, -197, -129, 679, 781, -1332, 1020, -1332,1773 3338, 1566, -427, 948, -1332, -1332, 710, -1332, -230, -1332,1774 -89, -1332, -1332, -1332, -1266, 433, -1332, -1332, -1332, 1195,1775 -1 332, 22, -1332, -1332, -865, -105, -1331, -98, 1750, -1332,1776 2253, -1332, 929, -1332, -168, 288, -180, -179, -173, 2,1777 - 34, -29, -28, 687, 75, 77, 92, -161, -162, -153,1778 - 151, -148, -320, -530, -516, -495, -552, -307, -529, -1332,1779 -1332, -506, 1106, 1117, 1121, 2218, 5180, -562, -569, -544,1780 -538, -550, -1332, -429, -691, -685, -671, -611, -246, -241,1781 -1332, -1332, 1149, 273, -84, -1332, 3714, 76, -612, -4411752 -1281, 4254, 1590, -1281, 1409, -1281, 52, 0, -229, -1281, 1753 596, -527, -497, -931, -99, 4508, -1281, 358, 609, 563, 1754 518, 591, 1104, 1105, 1110, 1117, 1112, -1281, 613, -339, 1755 5346, -893, -690, -919, -1281, 401, -634, 444, -1281, 753, 1756 -1281, 449, -1224, -1281, -1281, 191, -1281, -1265, -724, 305, 1757 -1281, -1281, -1281, -1281, 129, -1170, -1281, -1281, -1281, -1281, 1758 -1281, -1281, 382, -1175, 71, -1281, -381, -1281, 560, 356, 1759 -1281, 229, -1281, -338, -1281, -1281, -1281, 632, -691, -1281, 1760 -1281, 11, -1000, 10, 2865, -1281, -1281, -1281, -125, -1281, 1761 275, 363, -194, 1416, 4157, -1281, -1281, 24, 25, 374, 1762 -202, 1621, -1281, 2138, -1281, -1281, 112, 2165, -1281, 2832, 1763 139, -1281, -1281, -416, -434, 1276, 1278, 786, 1028, 400, 1764 -1281, -1281, 1269, 793, -513, -1281, -522, -57, -636, -1281, 1765 -1281, -959, -994, 122, 819, 1153, 135, -1281, 1441, 296, 1766 -299, -212, -109, 749, 844, -1281, 1087, -1281, 2859, 1478, 1767 -462, 1000, -1281, -1281, 778, -1281, -233, -1281, -72, -1281, 1768 -1281, -1281, -1232, 504, -1281, -1281, -1281, 1259, -1281, 68, 1769 -1281, -1281, -850, -96, -1280, -93, 1665, -1281, 2401, -1281, 1770 993, -1281, -164, 689, -177, -176, -170, 2, -39, -33, 1771 -28, 1052, 48, 75, 93, -100, -167, -166, -153, -148, 1772 -277, -569, -500, -490, -543, -300, -514, -1281, -1281, -506, 1773 1174, 1177, 1181, 2149, 5126, -572, -549, -544, -523, -484, 1774 -1281, -427, -665, -663, -660, -602, -320, -271, -1281, -1281, 1775 102, 140, -84, -1281, 3728, 128, -603, -447 1782 1776 }; 1783 1777 … … 1785 1779 positive, shift that token. If negative, reduce the rule which 1786 1780 number is the opposite. If YYTABLE_NINF, syntax error. */ 1787 #define YYTABLE_NINF -52 51781 #define YYTABLE_NINF -522 1788 1782 static const yytype_int16 yytable[] = 1789 1783 { 1790 47, 112, 96, 427, 398, 399, 768, 933, 452, 148, 1791 266, 400, 113, 934, 149, 150, 791, 406, 871, 67, 1792 259, 439, 401, 512, 407, 712, 707, 935, 613, 112, 1793 112, 402, 47, 403, 96, 1203, 404, 1092, 382, 383, 1794 846, 618, 111, 47, 895, 47, 505, 160, 1187, 854, 1795 1153, 67, 1185, 1186, 142, 47, 749, 48, 975, 853, 1796 201, 47, 857, 192, 47, 847, 215, 47, 864, 225, 1797 342, 848, 751, 820, 1401, 947, 756, 1145, 218, 842, 1798 845, 112, 112, 995, 398, 399, 933, 279, 409, 48, 1799 1464, 400, 934, 843, 121, 424, 1468, 406, 605, 1197, 1800 779, 31, 401, 1091, 407, 47, 935, 68, 47, 31, 1801 202, 402, 679, 403, 844, 47, 404, 61, 151, 109, 1802 152, 165, 637, 884, 884, 884, 641, 739, 1421, 1422, 1803 41, 42, 688, 408, 75, 153, 290, 31, 446, 68, 1804 692, 31, 884, 1421, 1422, 280, 47, 574, 160, 61, 1805 148, 54, 114, 31, 47, 149, 150, 467, 783, 47, 1806 1320, 372, 482, 484, 1464, 978, 75, -234, -234, 1510, 1807 122, 211, 858, 410, 1265, 746, 861, 1484, 483, 251, 1808 140, 410, 575, 54, 47, 47, 165, 160, 2, 205, 1809 4, 5, 6, 7, 1468, 141, 31, 878, 1423, 1468, 1810 47, 881, 1266, 478, 1539, 31, 1541, 418, 47, 410, 1811 160, 527, 677, 1432, 842, 209, 884, 47, 219, 1468, 1812 47, 327, 442, 488, 1080, 410, 1468, 112, 843, 1321, 1813 148, 240, 243, 1193, 536, 149, 150, 674, -234, 143, 1814 886, 887, 112, 740, 675, 536, 112, 145, 1187, 844, 1815 47, 112, 96, 35, 760, 36, 154, 596, 905, 151, 1816 1194, 152, 1099, 1202, 47, 47, 855, 160, 610, 67, 1817 846, 47, 470, 105, 105, 862, 153, 610, 47, 1203, 1818 976, 885, 885, 885, 435, 1102, 342, 703, 95, 1038, 1819 666, 857, 472, 112, 705, 847, 170, 167, 1187, 1037, 1820 885, 848, 1185, 1186, 618, 105, 200, 48, 884, 842, 1821 1025, 536, 1155, 1014, 327, 1136, -3, 180, 681, 674, 1822 95, 168, 1137, 843, 686, 376, 675, 441, 47, 386, 1823 372, 147, 958, 95, 524, 739, 536, 1346, 1135, 1111, 1824 105, 377, 682, 684, 844, 387, 435, 47, 47, 188, 1825 683, 685, 95, 389, 605, 95, 831, 68, 937, 176, 1826 564, 565, 1092, 1404, 47, 478, 285, 61, 47, 390, 1827 1217, 440, 479, 165, 885, 1220, 1221, 41, 42, 653, 1828 950, 251, 329, 605, 75, 478, 926, 1208, 605, 75, 1829 846, 1494, 464, 478, 483, 47, 566, 567, 854, 880, 1830 585, 54, 109, 521, -290, 47, 586, 372, 536, 260, 1831 871, 739, 261, 41, 42, 847, 576, 246, 1194, 916, 1832 607, 848, 1187, 47, 1017, 251, 755, 1459, 1091, 47, 1833 527, 47, 1041, 228, 95, 527, 761, 229, 527, 1203, 1834 233, 1552, 235, 762, 1262, 770, 1203, 95, 342, 244, 1835 1553, 740, 109, 1453, 1454, 47, 211, 560, 561, 109, 1836 112, 1563, 1211, 41, 42, 578, 885, 410, 1567, 391, 1837 41, 42, 397, 188, 112, 579, -112, 1568, 393, 47, 1838 1173, 1175, 936, 1408, 874, 392, 249, 47, 875, 372, 1839 1151, 47, 813, 96, 394, 47, 95, -112, 112, 1203, 1840 112, 327, 327, -520, 936, 979, 1215, 1383, 95, 1107, 1841 67, 824, 1213, 562, 563, 111, 712, 707, 398, 399, 1842 653, 438, 263, 105, 1119, 400, 505, 740, 896, 654, 1843 1261, 1036, 406, -469, 479, -10, 401, 112, 95, 407, 1844 653, 1122, 112, 653, 618, 402, 109, 403, 48, 1080, 1845 404, 75, 486, 713, 479, 1038, -443, 41, 42, 907, 1846 1344, 767, 479, 1107, -469, -444, -469, 1345, 909, 714, 1847 -469, 75, -112, -112, 693, 490, 228, 327, 784, 75, 1848 586, 767, 507, 790, 767, 789, 275, 211, -112, 1019, 1849 112, 715, -291, 831, 277, 1008, 327, 47, 68, 8, 1850 9, 10, 11, 12, 278, 1381, 737, 716, 61, 47, 1851 717, 47, 342, 713, 172, 109, 95, 833, 715, 2, 1852 205, 4, 5, 6, 7, 75, 41, 42, 31, 929, 1853 47, 472, 730, 1200, 930, 557, 612, 1134, 731, 478, 1854 558, 559, 54, 876, 1036, 1394, 47, 877, 750, 1201, 1855 754, 176, 112, 1200, 1350, 330, 34, 252, 55, 55, 1856 1523, 47, 327, 112, 47, 112, 1528, 1500, 638, 1326, 1857 897, 712, 642, 1051, 1500, 500, 607, 501, 1335, 1337, 1858 1184, 955, 1431, 831, 35, 109, 36, 1548, 342, 331, 1859 55, 1049, 1555, 188, 1336, 1338, 41, 42, 47, 1420, 1860 47, 898, 1428, 652, 906, 872, 908, 899, 370, 587, 1861 607, 410, 1096, 112, 775, -112, 228, -112, 233, 112, 1862 747, -112, 55, 112, 1352, 55, 748, 1549, 757, 774, 1863 1384, 112, 161, 332, 758, 775, -112, -112, 441, 777, 1864 1130, 410, 333, 704, 47, 47, 876, 1467, 193, 778, 1865 1118, 216, 1471, 416, 226, -105, 37, 920, 47, -105, 1866 40, 936, 37, 775, 105, 1056, 40, 41, 42, 1502, 1867 674, 1503, 954, 41, 42, 605, 436, 675, 703, 95, 1868 1369, 334, 1493, 612, 1370, 705, 444, 8, 9, 10, 1869 11, 12, 1154, 43, 1254, 1393, 568, 569, 922, 839, 1870 739, 610, 892, 146, 775, 1003, 228, 109, 479, 611, 1871 590, 1004, 410, 347, 737, 910, 31, 410, 41, 42, 1872 8, 9, 10, 11, 12, 75, 1550, 959, 371, 610, 1873 763, 211, 764, 161, 1177, 765, 1252, 960, 771, 47, 1874 1256, 933, 1051, 335, 34, 211, 373, 934, 375, 31, 1875 479, 47, 1294, 1295, 833, 528, 1007, 1004, 1016, 1250, 1876 1377, 935, 831, 945, 731, 586, 775, 75, 1562, 948, 1877 775, 1009, 161, 464, 1562, 384, 979, 34, 55, 388, 1878 979, 979, 251, 329, 410, 1562, 578, 396, 410, 1562, 1879 737, 941, 1378, 941, 653, 161, 579, 841, 775, 612, 1880 37, 112, 653, 1380, 40, 329, 410, 443, 55, 775, 1881 408, 41, 42, 1385, 115, 913, 740, 410, 936, 775, 1882 109, 67, 138, 237, 47, 537, 538, 539, 1198, 425, 1883 1372, 41, 42, 109, 873, 138, 139, 744, 47, 211, 1884 1390, 1391, 1450, 1078, 41, 42, 47, 745, 1447, 540, 1885 888, 541, 426, 542, 543, 1469, 431, 238, 158, 449, 1886 1516, 775, 239, 1573, 47, 904, 1517, 1441, 1004, 586, 1887 752, -367, 1157, 919, 410, 753, 936, 936, -396, 37, 1888 1123, 182, 183, 40, 112, 1169, 932, 410, 704, 491, 1889 41, 42, 1172, 653, 610, 511, 1342, 740, 418, 670, 1890 410, 112, 468, 690, 653, 1174, 112, 610, 290, 68, 1891 109, 469, 138, 139, 515, 373, 698, 257, 410, 61, 1892 1245, 41, 42, 158, 699, 1139, 700, 109, 520, 138, 1893 139, 536, 841, 612, 1447, 1448, 75, 732, 41, 42, 1894 532, 1237, 1147, 410, 654, 767, 327, 1147, 488, 329, 1895 410, 1061, 242, 54, 570, 112, 1495, 1496, 323, 855, 1896 329, 610, 507, 1449, 571, 653, 891, 339, 112, 112, 1897 112, 1313, 1314, 1315, 528, 1351, 1353, 1354, 1535, 528, 1898 1461, 1205, 528, 128, 1402, 129, 130, 131, 1402, 572, 1899 347, 573, 373, 112, 41, 42, 1147, 872, 1421, 1422, 1900 8, 9, 10, 11, 12, 576, 1078, 338, 1010, 1212, 1901 1214, 1216, 801, 802, 803, 804, -440, 429, 1015, 594, 1902 1124, 433, 667, 1302, 1303, 47, 1305, 841, 1107, 31, 1903 597, 441, 1309, 1026, 109, 1312, 138, 139, 342, 612, 1904 797, 798, 647, 654, 668, 41, 42, 799, 800, 55, 1905 669, 323, 455, 1521, 1461, 671, 37, 34, 182, 183, 1906 40, 672, 37, 673, 182, 183, 40, 41, 42, 68, 1907 805, 806, 676, 41, 42, 105, 678, 256, 721, 479, 1908 696, 718, 759, 433, 723, 719, 495, 936, -238, 772, 1909 1485, 347, 776, 609, 162, 610, 75, 780, 834, 609, 1910 112, 610, -12, 611, 936, 836, 838, 529, 849, 611, 1911 158, 901, -13, 54, 893, 894, 218, 921, 923, 928, 1912 699, 924, 47, -417, 977, 949, 704, 653, -292, -524, 1913 963, 970, 748, 972, 704, 8, 9, 10, 11, 12, 1914 918, 983, 105, 1061, 984, 985, 67, 987, 988, 925, 1915 989, 990, 612, 927, 595, 999, 347, 602, 1123, 162, 1916 1011, 1012, -293, 1013, 31, 112, 112, 112, 1078, 8, 1917 9, 10, 11, 12, 1027, 1028, 635, 936, 936, 737, 1918 639, 1029, 1030, 339, 8, 9, 10, 11, 12, 1031, 1919 1032, 1033, 34, 1044, -405, 1445, 1427, -404, 31, 1093, 1920 1058, 347, 347, 347, 1095, 1103, 1147, 1147, 1147, 1104, 1921 1105, 211, 1561, 31, 1106, 1112, 993, 1113, 1114, 1115, 1922 347, 1121, 653, 653, 1131, 1205, 34, 1132, 775, 1167, 1923 1133, 1138, 1182, 1183, 68, 105, 1143, 1188, 323, 323, 1924 1146, 34, 1189, 1190, 61, 1191, 1192, 537, 538, 539, 1925 1300, 1123, 398, 399, 1206, 209, 219, 434, 1207, 400, 1926 737, 75, 1209, 767, 1078, 406, 455, 1210, 1222, 455, 1927 401, 540, 407, 541, 1218, 542, 1322, 653, 54, 402, 1928 653, 403, 1225, 777, 404, 410, 1224, 115, 460, 674, 1929 1232, 1233, -3, 778, 347, 1230, 675, 1235, 1124, 47, 1930 47, 1240, 1534, 1242, 500, 1246, 1251, 1253, 441, 112, 1931 112, 1255, 495, 68, 323, 1258, 495, 1259, 1078, 434, 1932 1263, 1078, 1267, 479, 1270, 653, 529, 1272, 529, 1274, 1933 653, 529, 1275, 323, 529, 1276, 728, 1277, 1278, 1280, 1934 75, 1304, 1287, 531, 1296, 339, 162, 1297, 112, 1325, 1935 1147, 1147, 440, 1307, 1123, 1333, 1308, 54, 1339, 1310, 1936 653, 1341, 1343, 1311, 1348, 1319, 1078, 1347, 1349, 1355, 1937 1356, 1078, 37, 1357, 182, 183, 40, 1359, 105, 1365, 1938 1366, 1367, 1368, 41, 42, 1205, 347, 1101, 1375, 1486, 1939 1376, 1124, 1205, 347, 64, 116, 1379, 1386, 148, 323, 1940 105, 1078, 1387, 149, 150, 1315, 1395, 47, 112, 698, 1941 829, 410, 175, 602, 1396, 1398, 1405, 112, 1415, 700, 1942 105, 1416, 1408, 653, -406, 1419, 64, 1430, 653, 1434, 1943 1436, 1438, 47, 47, 1439, 160, 1446, 1455, 1451, 159, 1944 1440, 1456, 870, 1460, 1370, 1205, 653, 602, 653, 1536, 1945 1457, 1458, 653, 879, 1465, 653, 1470, 47, 1544, 372, 1946 55, 220, 175, 653, 1078, 175, 1358, 653, 1472, 1078, 1947 1474, 1476, 1478, 68, 1360, 1361, 1362, 1480, 1482, 105, 1948 68, 1483, 1488, 479, 1489, 1490, 1501, 1078, 1511, 1078, 1949 479, 1519, 1513, 1078, 1124, 1515, 1078, 1527, 258, 1520, 1950 75, 1542, 460, 1547, 1078, 460, 1543, 75, 1078, 339, 1951 1554, 175, 1556, 105, 213, 1558, 1564, 54, 327, 1571, 1952 1572, 1223, 1397, 808, 54, 807, 1324, 55, 809, 212, 1953 214, 455, 810, 68, 1219, 811, 1522, 1433, 1574, 231, 1954 328, 1389, 1257, 479, 347, 728, 1504, 241, 258, 349, 1955 1406, 1229, 942, 1108, 2, 205, 4, 5, 6, 7, 1956 75, 495, 531, 694, 531, 729, 213, 531, 951, 695, 1957 531, 1110, 1142, 826, 175, 1057, 1120, 54, 900, 405, 1958 1334, 212, 214, 227, 816, 339, 742, 973, 8, 9, 1959 10, 11, 12, 0, 423, 817, 965, 428, 430, 818, 1960 347, 347, 159, 1444, 0, 0, 0, 0, 0, 213, 1961 0, 0, 0, 0, 0, 0, 105, 31, 0, 35, 1962 55, 36, 0, 447, 212, 214, 0, 450, 175, 451, 1963 37, 0, 173, 174, 40, 175, 0, 0, 466, 105, 1964 0, 41, 42, 1018, 64, 34, 105, 829, 0, 480, 1965 37, 0, 182, 183, 40, 0, 0, 0, 0, 487, 1966 0, 41, 42, 0, 0, 0, 0, 430, 517, 0, 1967 213, 0, 0, 0, 0, 0, 123, 126, 127, 0, 1968 728, 534, 535, 0, 0, 212, 214, 698, 0, 410, 1969 728, 0, 0, 556, 0, 0, 0, 700, 0, 105, 1970 0, 0, 0, 0, 175, 728, 0, 0, 213, 0, 1971 0, 0, 213, 8, 9, 10, 11, 12, 0, 0, 1972 486, 175, 0, 212, 214, 175, 0, 212, 214, 535, 1973 0, 0, 0, 0, 0, 258, 0, 829, 603, 0, 1974 0, 455, 31, 506, 631, 0, 0, 253, 0, 254, 1975 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 1976 455, 636, 55, 55, 258, 535, 0, 460, 0, 0, 1977 34, 0, 0, 0, 729, 37, 1388, 182, 183, 40, 1978 0, 495, 1125, 323, 0, 55, 41, 42, 175, 0, 1979 37, 0, 182, 183, 40, 0, 0, 0, 0, 213, 1980 0, 41, 42, 0, 0, 55, 37, 0, 182, 183, 1981 40, 480, 184, 0, 212, 214, 0, 41, 42, 0, 1982 0, 37, 185, 173, 174, 40, 349, 1532, 0, 410, 1983 395, 480, 41, 42, 870, 0, 0, 1533, 0, 480, 1984 414, 415, 0, 184, 0, 419, 0, 421, 422, 0, 1985 347, 347, 0, 185, 0, 0, 0, 0, 371, 55, 1986 0, 0, 0, 0, 55, 724, 0, 0, 430, 0, 1987 166, 0, 171, 0, 0, 177, 178, 179, 0, 181, 1988 213, 0, 0, 738, 0, 64, 0, 0, 0, 0, 1989 0, 0, 0, 430, 232, 212, 214, 430, 55, 8, 1990 9, 10, 11, 12, 728, 728, 247, 248, 0, 729, 1991 0, 0, 212, 0, 0, 455, 829, 0, 0, 729, 1992 37, 0, 182, 183, 40, 0, 258, 349, 31, 0, 1993 213, 41, 42, 0, 729, 1505, 0, 1509, 0, 0, 1994 0, 0, 794, 795, 796, 212, 214, 37, 0, 173, 1995 174, 40, 0, 0, 175, 0, 34, 264, 41, 42, 1996 0, 0, 728, 728, 0, 0, 0, 265, 0, 0, 1997 0, 0, 1538, 819, 1540, 347, 0, 460, 0, 0, 1998 0, 0, 0, 0, 375, 535, 0, 175, 0, 0, 1999 0, 636, 832, 0, 603, 0, 460, 0, 959, 0, 2000 610, 55, 0, 175, 0, 851, 0, 0, 960, 0, 2001 0, 0, 0, 0, 0, 0, 0, 1569, 175, 1570, 2002 0, 0, 0, 603, 55, 0, 0, 0, 603, 0, 2003 0, 55, 1577, 1578, 636, 339, 0, 349, 349, 349, 1784 46, 111, 95, 147, 451, 438, 397, 398, 426, 148, 1785 53, 113, 112, 399, 149, 790, 400, 401, 265, 258, 1786 405, 711, 767, 604, 66, 67, 870, 706, 111, 111, 1787 402, 46, 932, 95, 933, 403, 750, 934, 853, 841, 1788 755, 53, 46, 918, 46, 717, 159, 617, 1185, 748, 1789 511, 1091, 894, 110, 46, 66, 67, 381, 382, 845, 1790 46, 1201, 191, 46, 846, 214, 46, 852, 224, 341, 1791 612, 47, 819, 208, 1151, 504, 218, 217, 678, 1143, 1792 111, 111, 1183, 1184, 406, 847, 397, 398, 210, 994, 1793 150, 636, 408, 399, 844, 640, 400, 401, 687, 141, 1794 405, 778, 47, 423, 46, 1398, 691, 46, 842, 200, 1795 402, 932, 74, 933, 46, 403, 934, 151, 843, 950, 1796 883, 883, 883, 1195, 974, 682, 684, 856, 30, 477, 1797 885, 886, 30, 863, 289, 152, 1317, 166, 1461, 883, 1798 104, 104, 407, 74, 147, 46, 161, 159, 904, 1134, 1799 148, 535, 121, 46, 445, 149, 1135, 1465, 46, 201, 1800 371, 167, 30, 977, 406, 857, 481, 483, 739, 860, 1801 278, 104, 164, 466, 841, 1341, -234, -234, 1009, 1098, 1802 1218, 1219, 1342, 46, 46, 120, 159, 482, 1014, 175, 1803 877, 1418, 1419, 30, 880, 30, 676, 1262, 250, 46, 1804 409, 754, 212, 1025, 409, 1318, 104, 46, 1481, 159, 1805 1090, 161, 1461, 883, 1418, 1419, 46, 745, 140, 46, 1806 769, 441, 957, 30, 147, 1263, 111, 535, 279, 439, 1807 148, 150, 417, 142, 409, 149, 375, 164, 144, 259, 1808 673, 111, 260, 842, 440, 111, 1185, -234, 1259, 46, 1809 111, 95, 376, 843, 212, 1465, 595, 169, 151, 53, 1810 1465, 1420, 975, 46, 46, 487, 159, 409, 179, 841, 1811 46, 30, 326, 66, 67, 60, 152, 46, 1037, 604, 1812 1465, 759, 199, 711, 1429, 341, 823, 1465, 535, 845, 1813 702, 477, 111, 854, 846, 609, 1185, 212, 665, 1507, 1814 153, 1549, 471, 1201, 674, 883, 60, 1036, 604, 433, 1815 617, 477, 1013, 604, 1016, 847, 760, 469, 1153, 477, 1816 47, 1560, 673, 761, 1024, 830, 680, 46, 1564, 371, 1817 1183, 1184, 685, 535, 1536, 434, 1538, 1343, 842, 573, 1818 459, 861, 1191, 609, 523, 873, 46, 46, 843, 874, 1819 535, 437, 925, 1491, 704, 1550, 856, 245, 212, 936, 1820 1133, 74, -290, 46, 114, 326, 74, 46, 879, 1192, 1821 1200, 433, 108, 210, 574, 1091, 739, 1401, 652, 108, 1822 1192, 949, 1565, 40, 41, 250, 674, 853, -10, 104, 1823 40, 41, -112, -112, 46, 530, 212, 434, 161, 108, 1824 212, 482, 1180, 1181, 46, 489, 371, 157, -112, 845, 1825 40, 41, 506, 385, 846, 108, 248, 388, 870, -517, 1826 1185, 390, 46, 575, 164, 1040, 40, 41, 46, 386, 1827 46, 738, 1209, 389, 584, 847, 1215, 391, 782, 1211, 1828 585, 227, 392, 563, 564, 228, 915, 341, 232, 712, 1829 234, 262, 739, 714, 46, 1456, 108, 243, 393, 111, 1830 1230, 1231, 1213, 1201, 111, 713, 256, 40, 41, 715, 1831 1201, 606, 157, 111, -440, 1450, 1451, 712, 46, 565, 1832 566, 175, -112, 250, 328, 692, 46, 212, 371, 1405, 1833 46, 585, 95, 928, 46, 788, 329, 111, 637, 111, 1834 53, 108, 641, -112, 210, 1120, 1149, 322, 559, 560, 1835 1106, 1101, 40, 41, 66, 67, 338, 1117, 706, 652, 1836 397, 398, 714, 1201, 60, 110, -441, 399, 74, 478, 1837 400, 401, 978, 274, 1090, 405, 111, 1258, 929, 652, 1838 1347, 111, 652, 1037, 402, 1171, 1173, 895, 74, 403, 1839 617, 276, 326, 326, 459, 504, 74, 459, 1018, 561, 1840 562, 47, 830, 459, 1106, 477, 428, 906, 212, 284, 1841 432, 766, 908, 1035, 1198, 8, 9, 10, 11, 12, 1842 40, 41, 1198, 277, 227, 884, 884, 884, 783, 111, 1843 1199, 766, 727, 789, 766, 330, 46, 1332, 1323, 406, 1844 322, 454, 74, 30, 884, 331, 520, 954, 46, 1334, 1845 46, 341, 1380, 1333, 530, 108, 530, 774, 212, 530, 1846 875, 832, 530, 332, 876, 1335, 40, 41, 326, 46, 1847 104, 33, 432, 1381, 1355, 494, 333, -466, 1132, 738, 1848 516, 471, 1357, 1358, 1359, 46, 108, 326, 137, 138, 1849 334, 111, 830, 533, 534, 440, 528, 40, 41, 157, 1850 46, 369, 111, 46, 111, 555, 383, 711, -466, 1378, 1851 -466, 896, -291, 875, -466, 1048, 370, 1116, 884, 8, 1852 9, 10, 11, 12, 567, 568, 1035, 341, 241, 94, 1853 1394, 478, 729, 586, 526, 409, 1095, 46, 730, 46, 1854 604, 534, 897, 594, 651, -105, 601, 30, 898, -105, 1855 374, 478, 111, 326, 905, 738, 907, 556, 111, 478, 1856 94, 395, 557, 558, 227, 634, 232, 606, 108, 638, 1857 111, 146, 338, 94, 1366, 33, 1128, 534, 1367, 40, 1858 41, 212, 387, 46, 46, 746, 1428, 756, 210, 187, 1859 1249, 747, 94, 757, 1253, 94, 871, 46, 577, 407, 1860 409, 606, 210, 736, 872, 60, 424, 1349, 578, 212, 1861 884, 1520, 1497, 673, 212, 425, 776, 1525, 409, 1497, 1862 887, 702, 953, 958, 1055, 609, 777, 322, 322, 430, 1863 773, 919, 1390, 959, 1251, 903, 774, 774, 1545, 461, 1864 921, 727, 74, 1552, 448, 171, 774, 464, 762, 108, 1865 763, 137, 236, 764, 227, 454, 770, 1002, 454, 459, 1866 40, 41, 1015, 1003, 454, 681, 683, 499, 730, 500, 1867 490, 830, 1546, 1499, 94, 1500, 114, 674, 46, 1175, 1868 739, 1006, 1003, 1247, 74, 704, 237, 94, 251, 585, 1869 46, 238, 1291, 1292, 1374, 589, 210, 409, 832, 467, 1870 774, 494, 212, 322, 932, 494, 933, 468, 1375, 934, 1871 774, 1008, 396, 187, 774, 528, 212, 528, 1377, 1382, 1872 528, 1447, 322, 528, 774, 774, 108, 1444, 137, 138, 1873 1547, 510, 506, 652, 338, 514, 94, 40, 41, 1466, 1874 111, 652, 978, 1513, 1570, 774, 978, 978, 94, 1514, 1875 585, 53, 289, 526, 793, 794, 795, 909, 526, 409, 1876 739, 526, 912, 46, 409, 66, 67, 328, 409, 2, 1877 204, 4, 5, 6, 7, 519, 727, 46, 94, 108, 1878 531, 137, 138, 535, 415, 46, 727, 1196, 322, 569, 1879 40, 41, 485, 1077, 250, 328, 409, 534, 1155, 828, 1880 409, 727, 601, 46, 1167, 478, 409, 435, 1387, 1388, 1881 212, 736, 417, 669, 409, 812, 751, 443, 1122, 1121, 1882 1170, 752, 609, 111, 1182, 2, 204, 4, 5, 6, 1883 7, 869, 652, 34, 570, 35, 601, 487, 328, 409, 1884 111, 571, 878, 652, 575, 111, 36, 478, 181, 182, 1885 39, 337, 1172, 74, 609, -292, 94, 40, 41, 1438, 1886 1003, 1339, 8, 9, 10, 11, 12, 1242, 36, 459, 1887 172, 173, 39, 1444, 1445, 1137, 611, 1492, 1493, 40, 1888 41, 104, 1235, 608, 409, 609, 527, 736, 440, 34, 1889 30, 35, 1145, 610, 111, 766, -3, 1145, 338, 854, 1890 328, 609, 1446, 572, 652, 370, -437, 111, 111, 111, 1891 593, 53, 8, 9, 10, 11, 12, 1532, 33, 1458, 1892 454, 800, 801, 802, 803, 1203, 67, 108, 596, 137, 1893 138, 534, 111, 187, 1418, 1419, 160, 326, 40, 41, 1894 30, 646, 940, 738, 940, 666, 1145, 667, 104, 1399, 1895 494, 668, 192, 1399, 670, 215, 1077, 671, 225, 1210, 1896 1212, 1214, -293, 46, 798, 799, 890, 1106, 33, 8, 1897 9, 10, 11, 12, 338, 672, 341, 993, 36, 675, 1898 172, 173, 39, 703, 677, -112, 695, -112, 871, 40, 1899 41, -112, 1518, 1458, 1310, 1311, 1312, 30, 804, 805, 1900 727, 727, 212, 1348, 1350, 1351, -112, -112, 796, 797, 1901 577, 255, 409, 74, 718, 374, 60, 720, -238, 94, 1902 578, 758, 771, 611, 534, 33, 775, 779, -12, 893, 1903 833, 835, 1017, 837, 689, 848, 828, 160, 111, -13, 1904 900, 104, 892, 459, 920, 536, 537, 538, 922, 923, 1905 372, -414, 208, 218, 217, 1482, 927, 698, 727, 727, 1906 46, 948, -521, 962, 969, 652, 747, 210, 731, 539, 1907 983, 540, 1369, 541, 542, 53, 160, 971, 2, 204, 1908 4, 5, 6, 7, 976, 982, 984, 986, 987, 66, 1909 67, 988, 989, 998, 1122, 1121, 36, 1010, 1011, 160, 1910 39, 1012, 111, 111, 111, 527, 226, 40, 41, 1026, 1911 527, 442, 1027, 527, 1028, 1029, 127, 1077, 128, 129, 1912 130, 536, 537, 538, 1030, 1031, 828, 40, 41, 728, 1913 454, 1032, 1043, 838, 1057, 609, -402, 840, -401, 611, 1914 1092, 1442, 34, 610, 35, 539, 1558, 540, 439, 541, 1915 1319, 935, 1102, 53, 1145, 1145, 1145, 1103, 1094, 652, 1916 652, 1104, 1105, 440, 1109, 1110, 1111, 1203, 67, 1112, 1917 494, 1123, 322, 935, 1113, 1119, 478, 74, 36, 1129, 1918 774, 212, 39, 104, 1130, 1079, 1136, 1122, 1121, 40, 1919 41, 1141, 397, 398, 1131, 992, 1144, 36, 1165, 399, 1920 1328, 39, 400, 401, 1190, 104, 405, 1186, 40, 41, 1921 1187, 766, 1077, 1188, 652, 42, 402, 652, 534, 372, 1922 1189, 403, 1204, 869, 104, 145, 931, 1205, 703, 1207, 1923 673, 1208, 727, 1216, 743, 1220, 46, 46, 1222, 1223, 1924 727, 727, 727, -3, 744, 1228, 111, 111, 1531, 36, 1925 1233, 172, 173, 39, 1239, 74, 63, 115, 499, 516, 1926 40, 41, 652, 1243, 1007, 1248, 1077, 652, 1250, 1077, 1927 406, 917, 840, 611, 1252, 736, 1255, 212, 1256, 1260, 1928 924, 1264, 1267, 104, 926, 111, 1269, 63, 727, 1271, 1929 1122, 1121, 1272, 1273, 674, 1274, 372, 652, 1145, 1145, 1930 158, 1275, 1277, 174, 454, 828, 1284, 1293, 1294, 1301, 1931 139, 1330, 1304, 53, 1077, 1322, 1305, 104, 1307, 1077, 1932 53, 36, 219, 181, 182, 39, 1336, 1203, 67, 1308, 1933 147, 1316, 40, 41, 1203, 67, 148, 1483, 728, 1338, 1934 60, 149, 1050, 1340, 46, 111, 1344, 1345, 1206, 1077, 1935 1346, 1352, 1353, 174, 111, 736, 174, 1354, 183, 257, 1936 652, 239, 242, 1356, 1362, 652, 1363, 840, 184, 46, 1937 46, 1441, 159, 53, 1364, 534, 1365, 1372, 1376, 611, 1938 1373, 213, 1383, 652, 1384, 652, 1312, 1203, 67, 652, 1939 1395, 1392, 652, 1393, 46, 1402, 371, 1533, 240, 1405, 1940 652, 327, 174, 1412, 652, 1413, 1541, -403, 1416, 257, 1941 348, 1427, 1077, 1435, 1505, 74, 1505, 1077, 478, 1431, 1942 104, 1433, 74, 338, 1436, 1443, 1437, 1367, 1448, 1452, 1943 935, 1453, 1454, 213, 1455, 1077, 1457, 1077, 1467, 1469, 1944 404, 1077, 1475, 104, 1077, 1299, 1300, 1123, 1302, 1462, 1945 104, 1505, 1077, 1505, 1306, 422, 1077, 1309, 427, 429, 1946 1471, 1152, 1473, 158, 1477, 174, 703, 1479, 1480, 1485, 1947 1486, 1487, 1498, 728, 703, 74, 213, 1508, 1512, 1510, 1948 165, 1524, 170, 728, 446, 176, 177, 178, 449, 180, 1949 450, 1516, 611, 1517, 1539, 1544, 1540, 1551, 728, 465, 1950 1553, 1555, 1561, 104, 231, 63, 1568, 326, 1569, 1079, 1951 479, 1050, 1221, 806, 1321, 807, 246, 247, 1100, 174, 1952 486, 808, 463, 1519, 211, 810, 174, 1430, 429, 809, 1953 122, 125, 126, 1571, 230, 1386, 1254, 213, 1403, 1501, 1954 1123, 8, 9, 10, 11, 12, 8, 9, 10, 11, 1955 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 1956 22, 23, 24, -294, 1227, 25, 26, 27, 693, 30, 1957 694, 1107, 941, 722, 30, 213, 211, 1056, 478, 213, 1958 1108, 1140, 825, 1118, 899, 478, 935, 964, 1331, 741, 1959 972, 815, 0, 0, 816, 174, 257, 33, 817, 602, 1960 0, 252, 33, 253, 1391, 630, 0, 0, 0, 37, 1961 38, 0, 174, -294, 0, 0, 174, 1424, 635, 211, 1962 0, 0, 635, 0, 0, 257, 0, 8, 9, 10, 1963 11, 12, 0, 0, 0, 0, 0, 0, 478, 776, 1964 0, 409, 0, 1123, 935, 935, 337, 0, 0, 777, 1965 0, 0, 0, 0, 109, 30, 0, 0, 1417, 653, 1966 0, 1425, 0, 0, 0, 1217, 213, 0, 0, 0, 1967 0, 0, 479, 0, 0, 1504, 0, 1504, 0, 174, 1968 211, 0, 0, 33, 394, 0, 0, 348, 0, 0, 1969 0, 0, 479, 0, 413, 414, 0, 728, 728, 418, 1970 479, 420, 421, 0, 0, 0, 1464, 0, 0, 0, 1971 0, 1468, 1504, 0, 1504, 0, 0, 0, 211, 0, 1972 0, 0, 211, 0, 0, 958, 723, 609, 0, 429, 1973 0, 0, 0, 0, 0, 959, 0, 0, 505, 0, 1974 716, 1490, 322, 0, 737, 463, 63, 213, 0, 8, 1975 9, 10, 11, 12, 429, 728, 728, 0, 429, 0, 1976 0, 0, 0, 0, 0, 0, 0, 8, 9, 10, 1977 11, 12, 0, 600, 607, 0, 0, 30, 749, 36, 1978 753, 181, 182, 39, 0, 631, 632, 257, 348, 0, 1979 40, 41, 0, 0, 0, 30, 0, 213, 0, 0, 1980 0, 0, 0, 0, 0, 33, 0, 0, 0, 211, 1981 36, 0, 181, 182, 39, 0, 697, 0, 409, 0, 1982 0, 40, 41, 33, 698, 0, 699, 1559, 36, 0, 1983 181, 182, 39, 1559, 818, 0, 0, 0, 0, 40, 1984 41, 0, 0, 0, 1559, 174, 0, 608, 1559, 609, 1985 0, 0, 635, 831, 935, 602, 0, 610, 0, 0, 1986 0, 0, 0, 0, 0, 697, 850, 409, 0, 0, 1987 0, 935, 0, 0, 0, 699, 0, 0, 174, 0, 1988 0, 0, 0, 0, 602, 0, 0, 0, 0, 602, 1989 211, 0, 0, 0, 174, 635, 0, 1329, 348, 348, 1990 348, 0, 0, 0, 0, 1385, 0, 211, 0, 174, 1991 36, 0, 181, 182, 39, 0, 0, 348, 0, 0, 1992 213, 40, 41, 0, 0, 0, 0, 0, 0, 728, 1993 0, 0, 891, 0, 0, 723, 0, 728, 728, 728, 1994 211, 0, 0, 0, 935, 935, 479, 697, 213, 409, 1995 0, 257, 737, 213, 0, 937, 0, 699, 0, 0, 1996 0, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1997 17, 18, 19, 20, 21, 22, 23, 24, 72, 0, 1998 25, 26, 27, 0, 0, 728, 0, 0, 479, 30, 1999 452, 348, 0, 944, 0, 0, 0, 0, 0, 947, 2000 963, 0, 0, 429, 0, 75, 174, 0, 0, 72, 2001 36, 0, 181, 182, 39, 0, 0, 33, 0, 0, 2002 0, 40, 41, 0, 37, 38, 0, 257, 737, 0, 2003 0, 0, 0, 991, 0, 0, 75, 0, 0, 0, 2004 0, 213, 0, 0, 220, 0, 0, 1529, 0, 409, 2005 0, 0, 0, 0, 0, 213, 0, 1530, 485, 0, 2006 0, 453, 0, 211, 1502, 710, 1506, 0, 0, 109, 2007 723, 221, 0, 0, 0, 0, 0, 0, 0, 0, 2008 723, 0, 0, 348, 0, 635, 820, 821, 1023, 635, 2009 831, 211, 0, 0, 0, 723, 211, 0, 0, 0, 2010 0, 1535, 0, 1537, 0, 1034, 36, 0, 181, 182, 2011 39, 0, 0, 0, 0, 0, 855, 40, 41, 858, 2012 859, 0, 862, 0, 864, 865, 0, 0, 0, 866, 2013 867, 0, 351, 543, 544, 545, 546, 547, 548, 549, 2014 550, 551, 552, 263, 0, 0, 1566, 0, 1567, 213, 2015 0, 0, 0, 264, 951, 0, 952, 63, 0, 353, 2016 0, 1574, 1575, 955, 956, 0, 0, 553, 961, 0, 2017 0, 0, 174, 0, 653, 0, 411, 0, 0, 635, 2018 966, 1060, 0, 419, 211, 970, 0, 0, 8, 9, 2019 10, 11, 12, 0, 0, 0, 0, 0, 211, 0, 2020 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 2021 0, 999, 0, 942, 943, 1115, 30, 0, 505, 945, 2022 0, 0, 0, 429, 115, 0, 0, 72, 0, 0, 2023 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 2024 0, 348, 0, 0, 33, 0, 0, 0, 0, 36, 2025 0, 181, 182, 39, 75, 411, 600, 0, 0, 75, 2026 40, 41, 0, 0, 0, 0, 124, 124, 124, 0, 2027 0, 0, 0, 653, 0, 0, 602, 0, 0, 0, 2028 0, 0, 0, 0, 0, 0, 1529, 0, 409, 427, 2029 0, 0, 211, 0, 723, 723, 1530, 348, 348, 0, 2030 0, 0, 0, 0, 8, 9, 10, 11, 12, 0, 2031 0, 583, 0, 1044, 1045, 1046, 1047, 1202, 1049, 587, 2032 0, 0, 590, 0, 0, 0, 0, 220, 0, 0, 2033 0, 0, 30, 0, 1093, 0, 0, 124, 0, 124, 2034 0, 213, 0, 0, 0, 0, 0, 0, 1099, 0, 2035 0, 0, 723, 723, 221, 0, 0, 0, 635, 0, 2036 33, 0, 0, 0, 273, 36, 0, 181, 182, 39, 2037 0, 0, 0, 1060, 0, 0, 40, 41, 0, 0, 2038 0, 0, 0, 0, 0, 411, 0, 1114, 0, 419, 2039 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 2040 0, 0, 183, 0, 0, 0, 0, 0, 0, 351, 2041 0, 0, 184, 0, 72, 0, 737, 0, 0, 0, 2042 124, 75, 72, 0, 0, 0, 0, 1142, 124, 0, 2043 124, 124, 0, 0, 1150, 124, 353, 124, 124, 1154, 2044 0, 75, 0, 0, 1158, 0, 1159, 0, 351, 75, 2045 1161, 1162, 1163, 0, 0, 1166, 0, 0, 0, 1298, 2046 0, 0, 0, 0, 1178, 0, 351, 0, 72, 174, 2047 0, 0, 0, 0, 411, 353, 257, 0, 0, 1297, 2048 0, 63, 1193, 1194, 211, 0, 0, 0, 8, 9, 2049 10, 11, 12, 353, 723, 75, 737, 0, 0, 0, 2050 115, 0, 0, 0, 0, 0, 0, 124, 0, 1224, 2051 351, 0, 1226, 0, 0, 0, 30, 0, 0, 0, 2052 213, 0, 0, 0, 0, 0, 723, 0, 0, 0, 2053 0, 0, 0, 0, 723, 723, 723, 353, 0, 0, 2054 0, 0, 0, 0, 33, 348, 348, 0, 0, 36, 2055 1241, 181, 182, 39, 0, 0, 1245, 1246, 0, 1202, 2056 40, 41, 0, 0, 0, 0, 583, 583, 1257, 0, 2057 0, 0, 0, 1261, 0, 351, 1265, 0, 1266, 0, 2058 0, 1268, 723, 0, 0, 0, 263, 0, 0, 0, 2059 0, 0, 0, 115, 1276, 0, 264, 0, 0, 0, 2060 0, 0, 353, 1232, 0, 0, 0, 1283, 0, 1285, 2061 1286, 1287, 1288, 0, 0, 0, 213, 0, 0, 0, 2062 351, 351, 351, 0, 0, 1295, 0, 1296, 0, 0, 2063 0, 170, 0, 0, 0, 0, 0, 0, 0, 351, 2064 0, 0, 0, 0, 0, 174, 0, 353, 353, 353, 2065 0, 0, 0, 0, 0, 910, 0, 351, 0, 913, 2066 1324, 1325, 0, 211, 0, 0, 353, 0, 72, 0, 2067 348, 0, 77, 0, 351, 0, 0, 0, 0, 0, 2068 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 2069 0, 0, 411, 0, 0, 75, 115, 0, 0, 84, 2070 0, 353, 0, 77, 0, 54, 54, 0, 0, 0, 2071 72, 1360, 1361, 351, 0, 0, 0, 0, 0, 1202, 2072 0, 1371, 0, 0, 0, 0, 1202, 1320, 0, 0, 2073 84, 0, 0, 0, 0, 0, 54, 75, 222, 0, 2074 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2075 351, 0, 0, 0, 0, 0, 0, 0, 0, 211, 2076 0, 0, 0, 0, 0, 223, 0, 0, 54, 0, 2077 0, 54, 0, 1404, 0, 0, 0, 353, 0, 1202, 2078 0, 0, 0, 0, 0, 1408, 1554, 1409, 1410, 1411, 2079 0, 0, 351, 0, 0, 0, 0, 0, 0, 1415, 2080 0, 0, 351, 0, 0, 351, 0, 583, 1426, 0, 2081 220, 0, 351, 0, 0, 0, 0, 351, 0, 353, 2082 0, 0, 124, 124, 1439, 0, 354, 0, 0, 353, 2083 0, 0, 353, 0, 0, 0, 0, 221, 0, 353, 2084 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 2085 0, 0, 124, 361, 0, 124, 124, 0, 124, 346, 2086 124, 124, 0, 0, 0, 124, 124, 0, 0, 0, 2087 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 2088 1488, 1489, 0, 0, 0, 0, 0, 0, 0, 0, 2089 0, 0, 0, 1494, 0, 0, 0, 0, 0, 0, 2090 1494, 0, 0, 0, 0, 0, 75, 0, 0, 0, 2004 2091 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2005 73, 0, 0, 213, 0, 0, 349, 0, 0, 0, 2006 1125, 0, 0, 0, 0, 0, 0, 0, 212, 214, 2007 0, 0, 0, 0, 724, 0, 0, 0, 0, 0, 2008 0, 213, 73, 0, 55, 480, 213, 0, 0, 0, 2009 258, 738, 0, 0, 938, 0, 212, 214, 0, 0, 2010 0, 212, 214, 0, 0, 0, 1331, 0, 0, 0, 2011 0, 0, 0, 0, 0, 175, 0, 221, 0, 535, 2012 0, 0, 0, 0, 0, 0, 0, 480, 0, 0, 2013 349, 0, 0, 729, 729, 0, 0, 0, 728, 964, 2014 0, 0, 430, 0, 0, 0, 728, 728, 728, 0, 2015 0, 460, 0, 1125, 0, 0, 0, 0, 0, 0, 2016 0, 0, 0, 601, 608, 994, 258, 738, 0, 0, 2017 0, 0, 992, 0, 213, 632, 633, 0, 0, 125, 2018 125, 125, 0, 0, 0, 0, 0, 0, 213, 212, 2019 214, 729, 729, 0, 728, 0, 0, 0, 0, 0, 2020 0, 0, 0, 212, 214, 352, 0, 0, 0, 724, 2021 0, 0, 535, 0, 0, 0, 0, 0, 0, 724, 2022 0, 0, 349, 506, 636, 0, 0, 1024, 636, 832, 2023 0, 0, 821, 822, 724, 0, 0, 0, 0, 0, 2024 0, 0, 0, 0, 1035, 0, 0, 0, 0, 0, 2025 125, 0, 125, 0, 0, 0, 1125, 8, 9, 10, 2026 11, 12, 856, 0, 0, 859, 860, 0, 863, 0, 2027 865, 866, 0, 0, 0, 867, 868, 274, 0, 448, 2028 0, 175, 213, 0, 0, 0, 31, 0, 1507, 0, 2029 1507, 0, 0, 0, 0, 0, 64, 212, 214, 0, 2030 73, 0, 0, 0, 0, 73, 412, 0, 0, 0, 2031 0, 0, 0, 420, 34, 0, 0, 0, 636, 37, 2032 0, 182, 183, 40, 0, 1507, 0, 1507, 0, 0, 2033 41, 42, 0, 125, 0, 1332, 0, 0, 0, 0, 2034 0, 125, 0, 125, 125, 0, 0, 0, 125, 0, 2035 125, 125, 0, 0, 1117, 323, 1532, 0, 410, 943, 2036 944, 0, 430, 116, 0, 946, 1533, 729, 0, 8, 2037 9, 10, 11, 12, 0, 729, 729, 729, 0, 0, 2038 349, 0, 0, 0, 0, 412, 0, 0, 0, 8, 2039 9, 10, 11, 12, 0, 0, 0, 0, 31, 0, 2040 221, 0, 0, 0, 0, 0, 535, 0, 0, 0, 2041 0, 0, 0, 0, 0, 603, 0, 0, 31, 0, 2042 125, 0, 0, 729, 0, 0, 34, 0, 428, 0, 2043 0, 37, 0, 724, 724, 40, 349, 349, 0, 0, 2044 0, 584, 41, 42, 0, 0, 34, 517, 0, 588, 2045 0, 37, 591, 182, 183, 40, 1204, 0, 0, 0, 2046 0, 0, 41, 42, 0, 0, 0, 73, 43, 0, 2047 0, 76, 0, 0, 213, 0, 0, 0, 146, 0, 2048 0, 0, 352, 0, 0, 0, 0, 73, 264, 212, 2049 214, 724, 724, 0, 0, 73, 0, 636, 265, 0, 2050 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 2051 0, 0, 0, 0, 0, 412, 0, 0, 0, 420, 2052 0, 352, 0, 0, 1508, 0, 1508, 0, 544, 545, 2053 546, 547, 548, 549, 550, 551, 552, 553, 222, 352, 2054 0, 73, 0, 0, 952, 0, 953, 0, 0, 0, 2055 0, 0, 0, 956, 957, 0, 738, 0, 962, 0, 2056 0, 1508, 554, 1508, 535, 8, 9, 10, 11, 12, 2057 967, 0, 0, 0, 0, 971, 0, 0, 0, 175, 2058 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 2059 0, 0, 0, 0, 31, 0, 0, 0, 0, 1301, 2060 0, 1000, 0, 0, 412, 0, 0, 0, 0, 0, 2061 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 2062 0, 64, 34, 0, 0, 0, 354, 37, 0, 0, 2063 0, 40, 0, 0, 0, 724, 0, 738, 41, 42, 2064 0, 116, 0, 0, 0, 0, 601, 0, 352, 0, 2065 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 2066 0, 0, 0, 0, 744, 0, 0, 724, 0, 212, 2067 214, 0, 0, 0, 745, 724, 724, 724, 0, 0, 2068 0, 0, 0, 0, 0, 0, 349, 349, 0, 0, 2069 0, 0, 0, 352, 352, 352, 584, 584, 0, 0, 2070 1204, 0, 0, 1045, 1046, 1047, 1048, 0, 1050, 0, 2071 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 2072 0, 76, 0, 724, 1094, 0, 76, 0, 0, 0, 2073 352, 0, 0, 0, 116, 125, 125, 0, 1100, 0, 2074 0, 73, 0, 0, 0, 0, 0, 352, 0, 1234, 2075 0, 213, 0, 0, 0, 0, 175, 0, 0, 0, 2076 0, 0, 0, 0, 0, 125, 212, 214, 125, 125, 2077 0, 125, 0, 125, 125, 0, 0, 1116, 125, 125, 2078 0, 0, 0, 73, 0, 911, 352, 0, 0, 914, 2079 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2080 18, 19, 20, 21, 22, 23, 24, 25, -294, 0, 2081 0, 349, 0, 0, 0, 0, 0, 1144, 0, 31, 2082 0, 222, 412, 352, 1152, 0, 0, 0, 0, 1156, 2083 0, 0, 0, 0, 1160, 0, 1161, 116, 0, 0, 2084 1163, 1164, 1165, 0, 0, 1168, 0, 34, 0, 0, 2085 0, 0, 0, 0, 1180, 0, 0, 125, -294, 0, 2086 1204, 0, 125, 125, 0, 352, 0, 1204, 125, 0, 2087 0, 0, 1195, 1196, 1323, 352, 0, 0, 352, 0, 2088 0, 0, 0, 221, 0, 352, 0, 0, 76, 0, 2089 352, 0, 0, 0, 0, 0, 0, 0, 0, 1226, 2090 0, 0, 1228, 354, 0, 0, 0, 0, 76, 0, 2091 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 2092 1204, 0, 0, 0, 0, 0, 0, 1557, 0, 0, 2093 0, 0, 0, 0, 0, 0, 0, 584, 0, 0, 2094 0, 1244, 354, 0, 0, 0, 0, 1248, 1249, 0, 2095 0, 0, 73, 0, 0, 0, 0, 0, 0, 1260, 2096 354, 0, 76, 78, 1264, 0, 0, 1268, 0, 1269, 2097 0, 0, 1271, 0, 0, 0, 0, 0, 0, 0, 2098 0, 0, 0, 0, 0, 1279, 0, 0, 0, 0, 2099 0, 0, 0, 0, 0, 78, 281, 282, 1286, 283, 2100 1288, 1289, 1290, 1291, 354, 0, 0, 0, 0, 0, 2101 0, 0, 0, 0, 0, 0, 1298, 0, 1299, 0, 2102 0, 0, 171, 0, 0, 284, 0, 0, 0, 0, 2103 223, 649, 0, 138, 139, 286, 352, 0, 287, 650, 2104 289, 290, 41, 42, 0, 291, 292, 0, 0, 0, 2105 412, 1327, 1328, 293, 0, 0, 0, 0, 0, 0, 2106 0, 0, 0, 0, 0, 0, 0, 0, 294, 354, 2107 651, 0, 652, 379, 0, 0, 0, 296, 380, 298, 2108 299, 300, 301, 0, 0, 0, 0, 0, 0, 352, 2109 352, 0, 352, 352, 0, 0, 0, 0, 0, 0, 2110 0, 0, 0, 1363, 1364, 0, 0, 0, 0, 0, 2111 0, 0, 73, 1374, 354, 354, 354, 0, 355, 0, 2112 0, 0, 0, 0, 0, 0, 0, 0, 0, 1158, 2113 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 2114 0, 0, 0, 0, 0, 1170, 0, 352, 352, 0, 2092 411, 77, 0, 0, 54, 0, 77, 0, 0, 0, 2093 0, 0, 0, 1528, 0, 0, 0, 1534, 0, 0, 2094 0, 0, 0, 0, 124, 0, 0, 0, 84, 124, 2095 124, 0, 0, 84, 54, 124, 0, 0, 0, 0, 2096 0, 0, 0, 351, 0, 0, 1556, 0, 1557, 0, 2097 0, 0, 8, 9, 10, 11, 12, 13, 14, 15, 2098 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 2099 353, 25, 26, 27, 0, 0, 1572, 1573, 0, 1156, 2100 30, 452, 0, 0, 1576, 1577, 0, 0, 0, 0, 2101 0, 0, 0, 0, 0, 1168, 351, 351, 0, 351, 2102 351, 222, 0, 0, 0, 0, 0, 0, 33, 0, 2103 0, 0, 0, 0, 0, 37, 38, 0, 0, 72, 2104 0, 0, 0, 353, 353, 0, 353, 353, 223, 8, 2105 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2106 19, 20, 21, 22, 23, 24, 75, 0, 25, 26, 2107 27, 0, 453, 0, 351, 351, 946, 30, 0, 0, 2108 109, 0, 0, 0, 0, 0, 0, 0, 77, 0, 2109 0, 0, 1236, 0, 0, 0, 0, 0, 0, 0, 2110 0, 353, 353, 354, 0, 33, 0, 0, 77, 0, 2111 36, 0, 37, 38, 39, 84, 77, 0, 0, 0, 2112 0, 40, 41, 0, 0, 0, 0, 0, 0, 0, 2113 361, 0, 0, 0, 0, 84, 346, 0, 351, 0, 2114 0, 0, 354, 84, 0, 0, 0, 42, 0, 155, 2115 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 2116 354, 0, 77, 0, 0, 353, 0, 0, 0, 361, 2117 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2118 0, 220, 0, 0, 0, 0, 0, 361, 0, 84, 2119 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 2120 0, 0, 0, 72, 354, 0, 0, 0, 221, 0, 2121 0, 0, 0, 0, 0, 0, 351, 0, 351, 0, 2122 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2123 75, 361, 0, 0, 0, 0, 0, 346, 0, 0, 2124 0, 0, 0, 353, 0, 353, 0, 0, 351, 0, 2125 0, 0, 0, 0, 0, 0, 351, 351, 351, 0, 2126 0, 0, 0, 0, 0, 0, 0, 351, 351, 354, 2127 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 2128 0, 72, 0, 353, 353, 353, 0, 0, 0, 0, 2129 0, 0, 0, 0, 353, 353, 361, 0, 0, 0, 2130 0, 0, 346, 0, 351, 0, 0, 0, 75, 0, 2131 0, 0, 0, 0, 354, 354, 354, 0, 0, 0, 2132 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2133 0, 353, 0, 354, 0, 0, 0, 0, 0, 124, 2134 0, 361, 361, 361, 0, 0, 0, 346, 346, 346, 2115 2135 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 2116 0, 0, 76, 0, 0, 1407, 0, 0, 354, 0, 2117 0, 0, 0, 0, 0, 0, 0, 1411, 0, 1412, 2118 1413, 1414, 281, 282, 0, 283, 0, 0, 0, 0, 2119 0, 1418, 0, 0, 0, 0, 0, 0, 0, 0, 2120 1429, 0, 0, 0, 76, 0, 0, 354, 0, 0, 2121 0, 284, 352, 78, 0, 0, 1442, 285, 78, 0, 2122 0, 286, 1238, 0, 287, 288, 289, 290, 41, 42, 2123 0, 291, 292, 0, 0, 0, 0, 0, 85, 293, 2124 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 2125 0, 0, 125, 0, 294, 221, 378, 0, 0, 379, 2126 0, 0, 0, 296, 380, 298, 299, 300, 301, 0, 2127 85, 0, 1491, 1492, 0, 0, 0, 73, 0, 0, 2128 0, 0, 0, 0, 0, 1497, 354, 0, 0, 0, 2129 0, 352, 1497, 352, 0, 0, 354, 0, 0, 354, 2130 0, 0, 0, 0, 222, 224, 354, 0, 0, 0, 2131 0, 354, 0, 223, 0, 0, 0, 0, 0, 0, 2132 0, 0, 0, 352, 0, 1531, 0, 0, 0, 1537, 2133 0, 352, 352, 352, 0, 0, 0, 0, 0, 0, 2134 0, 0, 352, 352, 0, 0, 0, 0, 0, 0, 2135 0, 0, 0, 0, 0, 0, 73, 0, 1559, 0, 2136 1560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2137 0, 0, 0, 76, 0, 0, 0, 125, 0, 352, 2138 78, 0, 0, 0, 0, 0, 0, 0, 1575, 1576, 2139 0, 0, 0, 362, 0, 355, 1579, 1580, 0, 0, 2140 78, 0, 0, 0, 0, 0, -519, 0, 78, 1, 2136 361, 0, 77, 0, 0, 0, 346, 0, 354, 0, 2137 0, 0, 0, 0, 0, 0, 0, 0, 361, 1033, 2138 0, 0, 8, 9, 10, 11, 12, 0, 0, 84, 2139 0, 0, 351, 0, 0, 361, 0, 0, 0, 0, 2140 0, 0, 0, 0, 77, 0, 0, 354, 280, 281, 2141 30, 282, 0, 0, 0, 0, 0, 0, 0, 353, 2142 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2143 0, 84, 0, 0, 361, 0, 0, 283, 33, 0, 2144 346, 72, 0, 284, 354, 0, 0, 285, 72, 0, 2145 286, 287, 288, 289, 40, 41, 0, 290, 291, 0, 2146 0, 0, 0, 124, 0, 292, 0, 0, 75, 0, 2147 0, 361, 0, 0, 0, 75, 0, 0, 0, 0, 2148 293, 0, 377, 0, 0, 0, 354, 0, 0, 295, 2149 826, 297, 298, 299, 300, 0, 354, 0, 0, 354, 2150 0, 72, 0, 0, 222, 0, 354, 0, 0, 0, 2151 0, 354, 0, 361, 0, 0, 0, 0, 0, 0, 2152 0, 0, 0, 361, 0, 0, 361, 0, 75, 0, 2153 0, 223, 346, 361, 0, 0, 0, 0, 361, 346, 2154 0, 0, 0, 0, 0, -516, 0, 0, 1, 2, 2155 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2156 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2157 23, 24, 0, 77, 25, 26, 27, 28, 0, 0, 2158 29, 0, 0, 30, 31, 0, 0, 0, 0, 8, 2159 9, 10, 11, 12, 0, 8, 9, 10, 11, 12, 2160 84, 0, 0, 0, 0, 0, 54, 0, 32, 0, 2161 0, 33, 163, 34, 0, 35, 36, 30, 37, 38, 2162 39, 0, 0, 30, 0, 0, 0, 40, 41, 0, 2163 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 2164 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 2165 36, 33, 0, 42, 39, 43, 36, 354, 0, 0, 2166 39, 40, 41, 44, 0, 0, 0, 40, 41, 0, 2167 0, 0, 0, 54, 0, 0, 0, 163, 0, 0, 2168 0, 0, 0, 270, 361, 0, 0, 42, 0, 0, 2169 346, 0, 0, 743, 0, 0, 0, 145, 0, 0, 2170 0, 0, 0, 744, 0, 0, 0, 0, 0, 0, 2171 354, 354, 163, 354, 354, 0, 0, 0, 0, 0, 2172 0, 0, 367, 0, 0, 0, 373, 0, 0, 0, 2173 0, 0, 0, 77, 0, 0, 0, 361, 361, 0, 2174 361, 361, 0, 0, 0, 0, 346, 346, 0, 0, 2175 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2176 84, 0, 0, 0, 0, 0, 54, 0, 354, 354, 2177 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 2178 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 2179 0, 0, 0, 0, 0, 361, 361, 0, 0, 0, 2180 0, 280, 281, 0, 282, 163, 460, 8, 9, 10, 2181 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2182 21, 22, 23, 24, 0, 0, 25, 26, 27, 373, 2183 283, 0, 354, 0, 0, 30, 284, 163, 0, 0, 2184 285, 0, 0, 286, 287, 288, 289, 40, 41, 0, 2185 290, 291, 0, 0, 0, 0, 0, 0, 292, 361, 2186 0, 460, 0, 33, 163, 0, 0, 0, 0, 0, 2187 205, 38, 0, 512, 0, 222, 0, 0, 0, 0, 2188 0, 0, 295, 379, 297, 298, 299, 300, 0, 0, 2189 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 2190 0, 0, 223, 0, 0, 0, 0, 54, 54, 0, 2191 354, 605, 354, 0, 0, 269, 629, 0, 0, 0, 2192 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 2193 54, 0, 0, 0, 0, 0, 0, 361, 0, 361, 2194 0, 0, 354, 0, 0, 0, 0, 0, 0, 54, 2195 354, 354, 354, 0, 0, 0, 0, 0, 0, 0, 2196 0, 354, 354, 0, 0, 0, 0, 0, 0, 361, 2197 0, 0, 0, 0, 0, 77, 0, 361, 361, 361, 2198 0, 0, 0, 0, 0, 0, 0, 0, 361, 361, 2199 0, 0, 163, 163, 346, 346, 0, 0, 354, 367, 2200 0, 0, 84, 54, 0, 0, 0, 0, 54, 0, 2201 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2202 460, 0, 0, 460, 0, 361, 0, 0, 0, 460, 2203 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2204 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 2205 0, 0, 0, 0, 0, 0, 740, 0, 0, 0, 2206 209, 0, 0, 0, 0, 0, 0, 0, 163, 0, 2207 229, 0, 233, 0, 235, 0, 0, 0, 0, 0, 2208 460, 244, 460, 0, 0, 460, 354, 163, 460, 0, 2209 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2210 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2211 0, 0, 209, 361, 233, 235, 244, 0, 0, 346, 2212 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2213 0, 0, 0, 0, 0, 77, 0, 154, 0, 0, 2214 0, 0, 77, 0, 0, 54, 0, 0, 0, 0, 2215 0, 0, 0, 163, 0, 209, 0, 0, 0, 0, 2216 0, 0, 84, 0, 0, 367, 0, 605, 54, 84, 2217 836, 0, 0, 0, 0, 54, 0, 0, 0, 0, 2218 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 2219 0, 0, 0, 254, 0, 77, 605, 0, 0, 0, 2220 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, 2221 367, 367, 367, 0, 0, 0, 209, 0, 233, 235, 2222 244, 0, 84, 0, 0, 0, 0, 0, 54, 367, 2223 0, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2224 17, 18, 19, 20, 21, 22, 23, 24, -294, 154, 2225 25, 26, 27, 0, 209, 0, 0, 0, 209, 30, 2226 0, 0, 0, 384, 740, 0, 0, 0, 0, 0, 2227 0, 0, 0, 0, 503, 0, 0, 0, 0, 0, 2228 0, 0, 0, 0, 0, 460, 416, 33, 0, 0, 2229 0, 0, 0, 0, 37, 38, 0, 0, -294, 0, 2230 431, 0, 0, 367, 0, 960, 0, 0, 0, 436, 2231 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 2232 0, 0, 0, 0, 209, 0, 0, 0, 0, 642, 2233 0, 337, 280, 281, 0, 282, 0, 0, 0, 109, 2234 740, 0, 0, 0, 470, 209, 0, 0, 0, 480, 2235 233, 235, 0, 0, 0, 0, 0, 0, 244, 0, 2236 0, 283, 488, 0, 0, 0, 0, 284, 498, 0, 2237 502, 285, 0, 0, 286, 287, 288, 289, 40, 41, 2238 0, 290, 291, 0, 0, 0, 0, 0, 532, 292, 2239 0, 0, 0, 0, 0, 367, 0, 0, 0, 629, 2240 0, 209, 367, 0, 293, 0, 377, 0, 0, 378, 2241 0, 0, 0, 295, 379, 297, 298, 299, 300, 209, 2242 0, 0, 0, 0, 209, 0, 209, 0, 0, 0, 2243 0, 592, 0, 0, 0, 0, 597, 0, 0, 0, 2244 0, 0, 0, 209, 0, 0, 209, 209, 0, 0, 2245 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2246 0, 0, 209, 0, 643, 0, 0, 0, 644, 645, 2247 0, 647, 0, 0, 0, 0, 209, 0, 659, 660, 2248 0, 661, 662, 209, 663, 0, 664, 0, 0, 0, 2249 0, 0, 0, 1176, 0, 460, 8, 9, 10, 11, 2250 12, 0, 0, 592, 0, 0, 0, 0, 0, 0, 2251 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 2252 0, 0, 280, 281, 30, 282, 0, 0, 0, 0, 2253 0, 0, 0, 0, 0, 0, 690, 163, 0, 0, 2254 0, 0, 0, 0, 0, 0, 0, 696, 0, 0, 2255 0, 283, 33, 367, 0, 0, 0, 284, 0, 0, 2256 0, 285, 0, 0, 286, 287, 288, 289, 40, 41, 2257 732, 290, 291, 0, 0, 0, 735, 0, 0, 292, 2258 0, 470, 0, 0, 0, 0, 0, 0, 605, 0, 2259 0, 0, 0, 0, 293, 0, 377, 0, 0, 209, 2260 0, 0, 0, 295, 1177, 297, 298, 299, 300, 367, 2261 367, 0, 0, 0, 0, 0, 0, 0, 772, 0, 2262 0, 0, 0, 0, 0, 0, 0, 209, 513, 0, 2263 515, 518, 209, 0, 787, 0, 0, 0, 521, 522, 2264 0, 0, 0, 515, 515, 0, 0, 0, 0, 0, 2265 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 2266 0, 0, 0, 0, 0, 280, 281, 0, 282, 460, 2267 0, 814, 0, 0, 0, 0, 0, 0, 0, 0, 2268 824, 0, 0, 0, 0, 0, 0, 827, 0, 0, 2269 0, 515, 834, 0, 283, 0, 0, 0, 0, 0, 2270 284, 0, 0, 849, 285, 0, 0, 286, 287, 288, 2271 289, 40, 41, 0, 290, 291, 0, 0, 0, 0, 2272 209, 0, 292, 0, 0, 0, 0, 515, 740, 0, 2273 0, 0, 0, 0, 209, 0, 0, 293, 0, 377, 2274 0, 0, 0, 0, 889, 811, 295, 379, 297, 298, 2275 299, 300, 0, 0, 503, 0, 0, 0, 0, 0, 2276 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2277 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2278 834, 0, 0, 0, 0, 8, 9, 10, 11, 12, 2279 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2280 23, 24, -294, 0, 25, 26, 27, 0, 740, 0, 2281 0, 0, 0, 30, 0, 209, 0, 0, 0, 0, 2282 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 2283 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 2284 0, 33, 0, 0, 0, 967, 968, 209, 37, 38, 2285 0, 0, -294, 0, 0, 0, 0, 367, 367, 985, 2286 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 2287 0, 0, 0, 0, 0, 0, 1000, 0, 1001, 0, 2288 0, 0, 1005, 642, 0, 337, 0, 0, 0, 0, 2289 0, 0, 0, 633, 0, 0, 0, 0, 0, 0, 2290 0, 0, 0, 0, 515, 515, 515, 515, 515, 515, 2291 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 2292 515, 515, 0, 0, 0, 0, 0, 0, 0, 0, 2293 280, 281, 0, 282, 209, 0, 0, 0, 0, 0, 2294 0, 0, 0, 0, 0, 0, 0, 515, 1038, 0, 2295 0, 0, 0, 0, 0, 1039, 0, 0, 0, 283, 2296 209, 0, 0, 0, 0, 284, 0, 0, 1041, 285, 2297 1042, 0, 286, 287, 288, 289, 40, 41, 0, 290, 2298 291, 0, 367, 0, 1054, 0, 0, 292, 209, 0, 2299 0, 1058, 0, 0, 0, 0, 0, 0, 0, 0, 2300 0, 0, 293, 1096, 377, 0, 1097, 0, 0, 780, 2301 0, 295, 379, 297, 298, 299, 300, 0, 0, 0, 2302 209, 0, 0, 0, 597, 0, 0, 0, 0, 0, 2303 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 2304 460, 0, 460, 0, 0, 0, 515, 0, 8, 9, 2305 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2306 20, 21, 22, 23, 24, -294, 0, 0, 515, 0, 2307 0, 0, 0, 0, 0, 0, 30, 460, 0, 460, 2308 0, 515, 8, 9, 10, 11, 12, 13, 14, 15, 2309 16, 17, 18, 19, 20, 21, 22, 23, 24, -294, 2310 0, 25, 26, 27, 33, 0, 0, 163, 0, 0, 2311 30, 0, 209, 1160, 0, -294, 0, 0, 0, 340, 2312 362, 0, 0, 0, 0, 0, 0, 515, 0, 0, 2313 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 2314 0, 0, 0, 36, 0, 335, 336, 39, 0, -294, 2315 0, 0, 0, 412, 40, 41, 0, 0, 0, 515, 2316 412, 0, 0, 0, 0, 0, 0, 0, 0, 532, 2317 0, 0, 0, 0, 515, 0, 1225, 0, 0, 0, 2318 642, 0, 337, 0, 0, 0, 0, 0, 0, 0, 2319 633, 280, 281, 0, 282, 0, 0, 0, 0, 209, 2320 0, 0, 0, 0, 0, 1238, 0, 0, 0, 0, 2321 1240, 0, 0, 0, 0, 0, 0, 0, 1244, 0, 2322 283, 0, 0, 0, 0, 0, 648, 0, 137, 138, 2323 285, 0, 412, 286, 649, 288, 289, 40, 41, 0, 2324 290, 291, 0, 0, 0, 0, 0, 0, 292, 1270, 2325 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2326 0, 1278, 0, 293, 1279, 650, 1280, 651, 378, 0, 2327 0, 0, 295, 379, 297, 298, 299, 300, 0, 0, 2328 1289, 1290, 0, 0, 0, 0, 0, 0, 412, 0, 2329 0, 0, 0, 0, 0, 209, 412, 588, 0, 412, 2330 591, 0, 1303, 0, 0, 0, 0, 0, 0, 362, 2331 0, 0, 0, 621, 0, 0, 0, 0, 0, 0, 2332 0, 0, 0, 0, 0, 515, 0, 0, 0, 1326, 2333 320, 0, 639, 0, 0, 340, 0, 0, 0, 0, 2334 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2335 0, 0, 380, 380, 0, 0, 515, 0, 0, 0, 2336 0, 0, 412, 0, 0, 0, 412, 0, 515, 2, 2337 204, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2338 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2339 23, 24, 0, 0, 25, 26, 27, 362, 0, 0, 2340 0, 0, 0, 30, 0, 0, 0, 0, 0, 515, 2341 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2342 412, 0, 0, 320, 0, 0, 1396, 0, 1397, 0, 2343 0, 33, 0, 34, 0, 35, 0, 0, 37, 38, 2344 0, 1406, 0, 1407, 0, 0, 0, 0, 484, 0, 2345 0, 412, 0, 0, 362, 0, 0, 0, 0, 0, 2346 0, 1414, 0, 0, 0, 0, 0, 0, 0, 0, 2347 0, 0, 0, 0, -399, 686, 0, 1432, 1434, 0, 2348 0, 515, 0, 633, 0, 0, 0, 0, 0, 1440, 2349 0, 0, 1244, 0, 412, 0, 0, 340, 362, 0, 2350 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2351 0, 0, 0, 0, 1463, 0, 0, 0, 0, 0, 2352 0, 0, 0, 1470, 0, 515, 1472, 0, 1474, 1476, 2353 1478, 0, 0, 0, 0, 0, 0, 0, 0, 515, 2354 515, 0, 0, 412, 412, 0, 0, 0, 0, 0, 2355 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 2356 0, 0, 829, 362, 380, 362, 0, 0, 0, 0, 2357 1509, 0, 1511, 0, 621, 1244, 621, 621, 0, 0, 2358 0, 0, 0, 621, 0, 0, 0, 0, 0, 0, 2359 1523, 0, 0, 868, 362, 0, 0, 0, 0, 362, 2360 0, 0, 0, 0, 0, 0, 0, 0, 362, 362, 2361 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2362 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 2363 0, 0, 412, 911, 0, 0, 412, 914, 0, 0, 2364 0, 0, 0, 916, 0, 0, 0, 0, 0, 0, 2365 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2366 0, 340, 362, 412, 0, 412, 734, 0, 0, 412, 2367 0, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2368 17, 18, 19, 20, 21, 22, 23, 24, 0, 0, 2369 25, 26, 27, 0, 0, 0, 0, 0, 0, 30, 2370 0, 362, 621, 0, 0, 768, 0, 0, 0, 0, 2371 0, 0, 0, 0, 0, 0, 0, 0, 781, 0, 2372 0, 0, 0, 0, 0, 768, 0, 33, 768, 0, 2373 0, 0, 0, 0, 205, 38, 0, 340, 362, 791, 2374 792, 0, 412, 412, 0, 0, 0, 0, 0, 515, 2375 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2376 0, 813, 0, 0, 0, 0, 515, 0, 0, 0, 2377 0, 822, 0, 0, 0, 0, 0, 0, 344, 628, 2378 0, 0, 0, 781, 412, 0, 0, 0, 0, 0, 2379 0, 0, 0, 362, 0, 0, 0, 0, 0, 829, 2380 362, 0, 0, 0, 621, 0, 621, 0, 0, 0, 2381 0, 0, 0, 0, 0, 0, 621, 0, 0, 0, 2382 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2383 0, 0, 0, 888, 0, 0, 0, 0, 0, 515, 2384 515, 0, 380, 0, 0, 0, 0, 0, 0, 1, 2141 2385 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 2142 2386 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2143 22, 23, 24, 25, 355, 0, 26, 27, 28, 29, 2144 0, 0, 30, 0, 0, 31, 32, 0, 0, 0, 2145 0, 0, 355, 0, 78, 0, 0, 354, 0, 0, 2146 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 2147 33, 0, 0, 34, 0, 35, 0, 36, 37, 0, 2148 38, 39, 40, 0, 0, 0, 0, 0, 85, 41, 2149 42, 0, 0, 85, 0, 0, 355, 0, 1034, 0, 2150 0, 8, 9, 10, 11, 12, 0, 0, 0, 0, 2151 354, 354, 0, 354, 354, 43, 73, 44, 0, 0, 2152 0, 0, 0, 73, 0, 45, 0, 0, 281, 282, 2153 31, 283, 0, 76, 0, 8, 9, 10, 11, 12, 2154 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2155 23, 24, 25, -295, 0, 0, 0, 284, 34, 0, 2156 0, 355, 0, 285, 31, 0, 0, 286, 354, 354, 2157 287, 288, 289, 290, 41, 42, 73, 291, 292, 0, 2158 0, 0, 0, 0, 0, 293, 0, 0, 224, 0, 2159 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 2160 294, 0, 378, -295, 0, 0, 355, 355, 355, 296, 2161 827, 298, 299, 300, 301, 0, 0, 0, 0, 0, 2162 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, 2163 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 2164 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 2165 0, 0, 0, 0, 78, 85, 0, 0, 0, 164, 2166 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2167 362, 0, 0, 0, 0, 85, 222, 0, 217, 0, 2168 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 2169 0, 0, 0, 0, 0, 0, 78, 0, 76, 355, 2170 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 2171 0, 0, 354, 0, 354, 0, 0, 0, 0, 0, 2172 0, 0, 0, 0, 164, 0, 0, 362, 0, 85, 2173 271, 0, 0, 0, 0, 0, 355, 0, 0, 0, 2174 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 2175 0, 0, 354, 354, 354, 0, 0, 0, 0, 164, 2176 0, 0, 0, 354, 354, 0, 0, 0, 0, 368, 2177 0, 362, 0, 374, 0, 0, 0, 76, 355, 0, 2178 0, 0, 0, 0, 0, 0, 0, 0, 355, 0, 2179 0, 355, 0, 0, 0, 0, 223, 0, 355, 0, 2180 354, 0, 0, 355, 8, 9, 10, 11, 12, 13, 2181 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2182 24, 25, 164, 0, 26, 27, 28, 0, 0, 0, 2183 0, 0, 0, 31, 217, 0, 362, 0, 0, 0, 2184 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2185 0, 0, 164, 461, 0, 0, 0, 0, 0, 0, 2186 0, 34, 0, 0, 0, 78, 0, 0, 206, 39, 2187 0, 0, 0, 0, 0, 0, 374, 0, 0, 0, 2188 0, 362, 362, 362, 164, 0, 0, 0, 354, 0, 2189 0, 0, 0, 0, 514, 0, 516, 519, 0, 0, 2190 362, 0, 0, 0, 522, 523, 0, 0, 461, 516, 2191 516, 164, 0, 270, 0, 0, 0, 0, 362, 0, 2192 0, 516, 0, 0, 0, 0, 0, 0, 0, 85, 2193 0, 0, 0, 0, 0, 362, 0, 76, 281, 282, 2194 0, 283, 0, 0, 76, 0, 0, 0, 0, 355, 2195 0, 0, 0, 0, 0, 0, 0, 516, 606, 0, 2196 0, 0, 0, 630, 0, 0, 0, 284, 0, 0, 2197 0, 85, 0, 285, 362, 0, 0, 286, 0, 0, 2198 287, 288, 289, 290, 41, 42, 0, 291, 292, 0, 2199 0, 0, 0, 516, 0, 293, 0, 76, 0, 0, 2200 0, 0, 355, 355, 0, 355, 355, 0, 0, 0, 2201 294, 362, 378, 0, 0, 0, 0, 0, 812, 296, 2202 380, 298, 299, 300, 301, 78, 0, 0, 0, 0, 2203 0, 0, 0, 0, 0, 210, 0, 0, 0, 164, 2204 164, 0, 0, 0, 0, 230, 368, 234, 0, 236, 2205 0, 0, 0, 362, 0, 0, 245, 0, 0, 0, 2206 355, 355, 0, 362, 0, 0, 362, 461, 0, 0, 2207 461, 224, 0, 362, 0, 0, 0, 0, 362, 0, 2208 0, 0, 0, 0, 0, 0, 0, 210, 0, 234, 2209 236, 245, 0, 0, 0, 0, 0, 0, 0, 0, 2210 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, 2211 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, 2212 0, 0, 0, 0, 0, 355, 0, 461, 0, 461, 2213 210, 0, 461, 0, 164, 461, 0, 0, 0, 0, 2214 85, 0, 0, 0, 0, 0, 0, 368, 0, 0, 2215 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2216 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 2217 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 2218 516, 516, 516, 516, 516, 516, 516, 516, 0, 0, 2219 78, 210, 0, 234, 236, 245, 0, 0, 0, 0, 2220 164, 0, 0, 0, 355, 0, 355, 0, 0, 0, 2221 0, 0, 368, 516, 606, 0, 0, 837, 0, 0, 2222 0, 0, 0, 0, 362, 0, 0, 0, 0, 210, 2223 0, 0, 0, 210, 0, 0, 355, 0, 0, 0, 2224 0, 0, 0, 606, 355, 355, 355, 0, 606, 504, 2225 0, 0, 0, 0, 0, 355, 355, 368, 368, 368, 2226 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 2227 0, 0, 0, 0, 0, 0, 368, 362, 362, 0, 2228 362, 362, 0, 0, 0, 0, 0, 0, 0, 0, 2229 0, 0, 355, 0, 0, 0, 0, 0, 0, 210, 2230 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2231 0, 741, 516, 0, 0, 0, 0, 0, 0, 0, 2232 210, 0, 0, 0, 0, 234, 236, 155, 0, 0, 2233 0, 0, 461, 245, 516, 362, 362, 0, 0, 0, 2234 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 2235 368, 0, 961, 8, 9, 10, 11, 12, 13, 14, 2236 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2237 25, 0, 0, 250, 0, 0, 210, 0, 0, 0, 2238 355, 0, 31, 255, 0, 0, 0, 741, 0, 0, 2239 0, 0, 0, 516, 210, 0, 0, 0, 0, 210, 2240 362, 210, 0, 0, 0, 0, 0, 0, 0, 0, 2241 34, 0, 0, 0, 0, 0, 0, 0, 210, 0, 2242 0, 210, 210, 0, 0, 516, 0, 0, 0, 78, 2243 0, 0, 0, 0, 0, 0, 78, 210, 0, 155, 2244 516, 0, 368, 224, 0, 0, 630, 0, 0, 368, 2245 0, 210, 0, 385, 0, 0, 0, 0, 210, 0, 2246 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 2247 0, 0, 0, 0, 0, 0, 417, 0, 0, 362, 2248 0, 362, 0, 0, 0, 0, 0, 0, 0, 78, 2249 432, 0, 0, 0, 0, 0, 0, 0, 0, 437, 2250 0, 0, 0, 0, 0, 0, 0, 0, 0, 445, 2251 0, 362, 0, 0, 0, 0, 0, 0, 0, 362, 2252 362, 362, 0, 0, 0, 0, 0, 0, 0, 0, 2253 362, 362, 0, 0, 471, 0, 0, 0, 0, 481, 2254 0, 0, 461, 0, 85, 0, 0, 0, 0, 0, 2255 0, 0, 489, 0, 0, 0, 0, 0, 499, 0, 2256 503, 461, 0, 0, 0, 0, 0, 362, 0, 0, 2257 0, 0, 0, 0, 210, 0, 0, 0, 533, 0, 2258 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 2259 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 2260 368, 0, 210, 0, 0, 0, 0, 210, 0, 0, 2261 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2262 0, 593, 516, 0, 0, 0, 598, 0, 0, 0, 2263 0, 0, 0, 0, 516, 606, 0, 0, 0, 0, 2264 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2265 0, 0, 0, 0, 644, 362, 368, 368, 645, 646, 2266 0, 648, 0, 0, 0, 0, 0, 0, 660, 661, 2267 0, 662, 663, 0, 664, 516, 665, 0, 0, 0, 2268 0, 0, 1178, 0, 0, 8, 9, 10, 11, 12, 2269 0, 0, 0, 593, 0, 210, 0, 0, 0, 0, 2270 0, 680, 0, 0, 85, 0, 0, 0, 0, 210, 2271 0, 85, 281, 282, 31, 283, 461, 0, 0, 0, 2272 0, 0, 0, 0, 0, 0, 691, 0, 0, 504, 2273 0, 0, 0, 0, 0, 0, 0, 697, 0, 0, 2274 0, 284, 34, 0, 0, 0, 0, 285, 516, 0, 2275 0, 286, 0, 0, 287, 288, 289, 290, 41, 42, 2276 733, 291, 292, 0, 85, 0, 736, 0, 0, 293, 2277 0, 471, 0, 0, 0, 0, 741, 0, 0, 0, 2278 0, 0, 0, 0, 294, 0, 378, 0, 0, 0, 2279 210, 0, 516, 296, 1179, 298, 299, 300, 301, 0, 2280 0, 0, 0, 210, 0, 0, 516, 516, 773, 0, 2281 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, 2282 0, 0, 210, 0, 788, 0, 0, 0, 0, 0, 2283 0, 204, 2, 205, 4, 5, 6, 7, 8, 9, 2284 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2285 20, 21, 22, 23, 24, 25, 0, 741, 26, 27, 2286 28, 815, 0, 0, 0, 0, 0, 31, 0, 0, 2287 825, 0, 0, 0, 0, 0, 0, 828, 0, 0, 2288 0, 0, 835, 0, 0, 0, 0, 0, 0, 0, 2289 0, 0, 0, 850, 0, 34, 0, 35, 0, 36, 2290 37, 0, 206, 39, 40, 0, 368, 368, 0, 210, 2291 0, 41, 42, 0, 0, 217, 0, 0, 0, 0, 2292 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2293 0, 0, 0, 0, 890, 210, 0, 43, 0, 207, 2294 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 2295 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2296 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 2297 835, 0, 0, 0, 0, 0, 8, 9, 10, 11, 2298 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2299 22, 23, 24, 25, -294, 210, 26, 27, 28, 0, 2300 0, 0, 0, 0, 0, 31, 210, 0, 0, 0, 2301 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 2302 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 2303 0, 368, 0, 34, 516, 968, 969, 0, 0, 0, 2304 38, 39, 0, 0, -294, 0, 0, 0, 0, 986, 2305 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2306 0, 0, 0, 0, 0, 0, 1001, 0, 1002, 0, 2307 0, 0, 1006, 0, 0, 643, 0, 338, 0, 0, 2308 0, 0, 0, 0, 0, 110, 0, 0, 210, 461, 2309 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 2310 0, 0, 0, 0, 0, 0, 0, 516, 516, 0, 2311 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2312 281, 282, 0, 283, 0, 0, 461, 0, 461, 0, 2313 0, 0, 0, 0, 0, 0, 0, 0, 1039, 0, 2314 0, 0, 0, 0, 0, 1040, 0, 0, 0, 284, 2315 0, 0, 0, 0, 0, 285, 164, 0, 1042, 286, 2316 1043, 0, 287, 288, 289, 290, 41, 42, 0, 291, 2317 292, 0, 0, 0, 1055, 210, 0, 293, 0, 0, 2318 0, 1059, 0, 0, 0, 0, 0, 0, 0, 0, 2319 0, 0, 294, 1097, 378, 0, 1098, 0, 0, 781, 2320 0, 296, 380, 298, 299, 300, 301, 0, 0, 0, 2321 0, 0, 0, 0, 598, 0, 0, 0, 0, 0, 2322 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2323 0, 0, 0, 0, 341, 363, 0, 0, 0, 0, 2387 22, 23, 24, 0, 0, 25, 26, 27, 28, 0, 2388 0, 29, 344, 0, 30, 31, 0, 0, 0, 829, 2389 0, 0, 0, 0, 0, 0, 0, 412, 280, 281, 2390 0, 282, 0, 412, 0, 0, 0, 0, 0, 32, 2391 0, 412, 33, 0, 34, 0, 35, 36, 0, 37, 2392 38, 39, 0, 0, 621, 621, 0, 283, 40, 41, 2393 0, 0, 0, 284, 0, 0, 0, 285, 0, 0, 2394 286, 287, 288, 289, 40, 41, 0, 290, 291, 0, 2395 0, 362, 0, 0, 42, 292, 43, 412, 781, 0, 2396 990, 0, 0, 0, 44, 0, 995, 0, 0, 0, 2397 293, 0, 377, 1004, 0, 992, 412, 1157, 0, 295, 2398 379, 297, 298, 299, 300, 0, 362, 0, 0, 0, 2399 0, 0, 412, 1169, 0, 621, 621, 1174, 0, 0, 2400 0, 0, 0, 0, 0, 0, 0, 362, 362, 0, 2401 0, 0, 0, 0, 0, 0, 0, 1021, 1022, 0, 2402 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2403 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 2324 2404 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2325 2405 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2326 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, 2327 0, 0, 210, 0, 0, 413, 0, 1, 2, 3, 2406 0, 0, 0, 0, 0, 0, 0, 0, 829, 412, 2407 1237, 0, 0, 0, 0, 1052, 0, 0, 0, 380, 2408 0, 621, 0, 0, 0, 0, 1, 2, 204, 4, 2409 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2410 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2411 0, 0, 25, 26, 27, 28, 0, 0, 29, 280, 2412 281, 30, 1061, 1062, 0, 1063, 362, 0, 1064, 1065, 2413 1066, 1067, 1068, 1069, 1070, 1071, 0, 0, 0, 1072, 2414 0, 0, 0, 1073, 1074, 0, 32, 0, 283, 33, 2415 0, 34, 0, 35, 648, 320, 37, 38, 285, 0, 2416 0, 286, 287, 288, 289, 40, 41, 0, 290, 291, 2417 0, 1138, 1139, 0, 0, 0, 292, 0, 380, 0, 2418 0, 0, 280, 281, 995, 282, 340, 1148, 0, 768, 2419 0, 293, 0, 1075, 0, 0, 169, 0, 0, 0, 2420 295, 296, 297, 298, 299, 300, 362, 0, 0, 1164, 2421 1076, 283, 0, 0, -129, 0, 0, 284, 0, 0, 2422 1179, 285, 0, 0, 286, 287, 288, 289, 40, 41, 2423 0, 290, 291, 0, 0, 0, 0, 0, 0, 292, 2424 0, 0, 380, 0, 1197, 0, 0, 0, 0, 0, 2425 0, 0, 0, 0, 293, 362, 362, 0, 0, 995, 2426 995, 0, 0, 295, 379, 297, 298, 299, 300, 0, 2427 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2428 1229, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2429 204, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2430 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2431 23, 24, 0, 0, 25, 26, 27, 28, 0, 0, 2432 29, 280, 281, 30, 282, 0, 0, 995, 0, 0, 2433 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2434 280, 281, 0, 282, 0, 0, 888, 0, 0, 0, 2435 283, 33, 0, 34, 0, 35, 284, 0, 37, 38, 2436 285, 1281, 1282, 286, 287, 288, 289, 40, 41, 283, 2437 290, 291, 0, 0, 0, 284, 0, 0, 292, 285, 2438 362, 0, 286, 287, 288, 289, 40, 41, 0, 290, 2439 291, 0, 0, 293, 0, 1075, 0, 292, 0, 0, 2440 0, 0, 295, 296, 297, 298, 299, 300, 0, 0, 2441 0, 0, 293, 0, 377, 0, -129, 0, 0, 0, 2442 0, 295, 379, 297, 298, 299, 300, 0, 0, 0, 2443 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2444 0, 0, 995, 0, 0, 0, 1, 2, 204, 4, 2445 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2446 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2447 412, 0, 25, 26, 27, 28, 0, 0, 29, 280, 2448 281, 30, 282, 0, 0, 0, 0, 0, 0, 0, 2449 0, 0, 0, 0, 0, 412, 412, 0, 0, 0, 2450 0, 0, 0, 1389, 0, 768, 0, 0, 283, 33, 2451 0, 34, 0, 35, 284, 0, 37, 38, 285, 0, 2452 412, 286, 287, 288, 289, 40, 41, 0, 290, 291, 2453 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 2454 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2455 0, 293, 0, 43, 0, 0, 0, 0, 0, 0, 2456 295, 296, 297, 298, 299, 300, 0, 0, 2, 204, 2328 2457 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 2329 2458 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2330 24, 25, 0, 1162, 26, 27, 28, 29, 0, 0,2331 30, 0, 0, 31, 32, 8, 9, 10, 11, 12,2459 24, 1449, 0, 25, 26, 27, 0, 0, 0, 0, 2460 280, 281, 30, 282, 0, 8, 9, 10, 11, 12, 2332 2461 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2333 23, 24, 25, 0, 0, 26, 27, 28, 33, 0, 2334 0, 34, 0, 35, 31, 36, 37, 413, 38, 39, 2335 40, 0, 0, 0, 0, 0, 0, 41, 42, 533, 2336 0, 0, 0, 0, 0, 0, 1227, 0, 0, 0, 2337 0, 0, 34, 0, 0, 0, 0, 0, 0, 38, 2338 39, 0, 0, 43, 0, 44, 0, 0, 0, -523, 2339 0, 0, 0, 45, 0, 321, 1241, 0, 0, 0, 2340 0, 1243, 0, 413, 0, 345, 0, 0, 0, 1247, 2341 0, 413, 589, 0, 413, 592, 0, 381, 381, 0, 2342 0, 0, 0, 0, 363, 0, 0, 0, 622, 0, 2343 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2344 1273, 0, 0, 0, 0, 0, 0, 640, 0, 0, 2345 341, 0, 1281, 0, 0, 1282, 0, 1283, 0, 0, 2346 281, 282, 0, 283, 0, 0, 0, 0, 0, 0, 2347 0, 1292, 1293, 0, 0, 0, 0, 413, 0, 0, 2348 0, 413, 0, 0, 0, 0, 0, 0, 321, 284, 2349 0, 0, 0, 1306, 0, 285, 0, 0, 0, 286, 2350 0, 0, 287, 288, 289, 290, 41, 42, 0, 291, 2351 292, 0, 363, 485, 0, 0, 0, 293, 0, 0, 2352 1329, 0, 0, 0, 0, 0, 0, 0, 210, 0, 2353 0, 0, 294, 0, 378, 413, 0, 993, 0, 0, 2354 0, 296, 380, 298, 299, 300, 301, 0, 0, 0, 2355 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2356 0, 0, 0, 0, 0, 0, 413, 0, 0, 363, 2357 0, 0, 0, 0, 1, 2, 205, 4, 5, 6, 2462 23, 24, 0, 0, 25, 26, 27, 0, 0, 283, 2463 33, 0, 34, 30, 35, 284, 0, 37, 38, 285, 2464 0, 0, 286, 287, 288, 289, 40, 41, 0, 290, 2465 291, 0, 0, 0, 0, 0, 0, 292, 0, 0, 2466 0, 33, 0, 0, 0, 0, 108, 0, 37, 38, 2467 0, 0, 293, 1515, 342, 0, 0, 40, 41, 780, 2468 0, 295, 343, 297, 298, 299, 300, 2, 204, 4, 2469 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2470 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2471 0, 0, 25, 26, 27, 0, 0, 0, 0, 280, 2472 281, 30, 282, 0, 0, 320, 0, 8, 9, 10, 2473 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2474 21, 22, 23, 24, -295, 0, 0, 0, 283, 33, 2475 0, 34, 0, 35, 284, 30, 37, 38, 285, 0, 2476 0, 286, 287, 288, 289, 40, 41, 0, 290, 291, 2477 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 2478 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 2479 0, 293, 0, 930, -295, 0, 0, 0, 780, 0, 2480 295, 343, 297, 298, 299, 300, 2, 204, 4, 5, 2481 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2482 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 2483 0, 25, 26, 27, 0, 0, 0, 0, 280, 281, 2484 30, 282, 0, 8, 9, 10, 11, 12, 13, 14, 2485 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2486 0, 0, 25, 26, 27, 0, 0, 283, 33, 0, 2487 34, 30, 35, 284, 0, 37, 38, 285, 0, 0, 2488 286, 287, 288, 289, 40, 41, 0, 290, 291, 0, 2489 0, 0, 0, 0, 0, 292, 0, 0, 0, 33, 2490 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 2491 293, 0, 930, 0, 0, 0, 0, 780, 0, 295, 2492 599, 297, 298, 299, 300, 2, 204, 4, 5, 6, 2358 2493 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2359 17, 18, 19, 20, 21, 22, 23, 24, 25, -294, 2360 0, 26, 27, 28, 29, 0, 0, 30, 0, 413, 2361 31, 0, 341, 363, 0, 0, 0, 0, 1399, 0, 2362 1400, 0, 0, 0, 0, 0, 0, 0, 0, 381, 2363 0, 0, 0, 1409, 0, 1410, 0, 0, 34, 0, 2364 35, 0, 36, 0, 0, 38, 39, 0, 0, -294, 2365 0, 0, 0, 1417, 0, 0, 0, 0, 413, 413, 2366 0, 0, 0, 0, 0, 0, 0, 0, 0, 1435, 2367 1437, 0, 0, 0, 0, 0, 0, 830, 363, 0, 2368 363, 1443, 44, 0, 1247, 0, 0, 0, 0, 622, 2369 110, 622, 622, 0, 0, 0, 0, 0, 622, 0, 2370 0, 0, 0, 0, 0, 0, 1466, 0, 869, 363, 2371 0, 0, 0, 0, 363, 1473, 0, 0, 1475, 0, 2372 1477, 1479, 1481, 363, 363, 363, 0, 0, 0, 0, 2373 0, 735, 0, 0, 0, 0, 0, 0, 0, 0, 2374 0, 0, 363, 0, 0, 0, 0, 413, 912, 0, 2375 0, 413, 915, 0, 0, 0, 0, 0, 917, 0, 2376 0, 0, 1512, 0, 1514, 0, 0, 1247, 0, 0, 2377 769, 0, 0, 0, 0, 0, 341, 363, 413, 0, 2378 413, 0, 1526, 782, 413, 0, 0, 0, 0, 0, 2379 769, 0, 0, 769, 0, 0, 0, 0, 0, 0, 2380 0, 0, 0, 0, 792, 793, 0, 0, 0, 0, 2381 0, 0, 0, 0, 0, 0, 363, 622, 0, 0, 2382 0, 0, 0, 0, 0, 0, 814, 0, 0, 0, 2383 0, 0, 0, 0, 0, 0, 823, 0, 0, 0, 2384 0, 0, 0, 345, 0, 0, 0, 0, 782, 0, 2385 0, 0, 341, 363, 0, 0, 0, 413, 413, 0, 2386 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 2387 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2388 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 2389 0, 26, 27, 28, 29, 0, 0, 30, 889, 413, 2390 31, 32, 0, 0, 0, 0, 0, 381, 363, 0, 2391 0, 0, 0, 0, 830, 363, 0, 0, 0, 622, 2392 0, 622, 0, 0, 0, 33, 0, 0, 34, 0, 2393 35, 622, 36, 37, 0, 38, 39, 40, 0, 0, 2394 0, 0, 0, 0, 41, 42, 0, 345, 0, 0, 2494 17, 18, 19, 20, 21, 22, 23, 24, 0, 0, 2495 25, 26, 27, 0, 0, 0, 0, 280, 281, 30, 2496 282, 0, 8, 9, 10, 11, 12, 13, 14, 15, 2497 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 2498 0, 25, 26, 27, 0, 0, 283, 33, 0, 34, 2499 30, 35, 284, 0, 37, 38, 285, 0, 0, 286, 2500 287, 288, 289, 40, 41, 0, 290, 291, 0, 0, 2501 0, 0, 0, 0, 292, 0, 0, 0, 33, 0, 2502 0, 0, 0, 0, 0, 205, 38, 0, 0, 293, 2503 0, 342, 0, 0, 0, 0, 0, 0, 295, 343, 2504 297, 298, 299, 300, 2, 204, 4, 5, 6, 7, 2505 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2506 18, 19, 20, 21, 22, 23, 24, 0, 0, 25, 2507 26, 27, 0, 0, 0, 0, 280, 281, 30, 282, 2508 0, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2509 17, 18, 19, 20, 21, 22, 23, 24, 0, 0, 2510 0, 0, 0, 0, 0, 283, 33, 0, 34, 30, 2511 35, 284, 0, 37, 38, 285, 0, 0, 286, 287, 2512 288, 289, 40, 41, 0, 290, 291, 0, 0, 0, 2513 0, 0, 0, 292, 0, 0, 0, 33, 0, 0, 2514 0, 0, 0, 0, 0, 0, 0, 0, 293, 0, 2515 930, 0, 0, 0, 0, 0, 0, 295, 343, 297, 2516 298, 299, 300, 2, 204, 4, 5, 6, 7, 8, 2517 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2518 19, 20, 21, 22, 23, 24, 0, 0, 25, 26, 2519 27, 0, 0, 0, 0, 280, 281, 30, 282, 0, 2395 2520 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2396 2521 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2397 43, 0, 44, 0, 0, 0, 0, 0, 0, 0, 2398 45, 0, 0, 0, 0, 8, 9, 10, 11, 12, 2522 0, 0, 0, 0, 283, 33, 0, 34, 0, 35, 2523 284, 0, 205, 38, 285, 0, 0, 286, 287, 288, 2524 289, 40, 41, 0, 290, 291, 0, 0, 0, 0, 2525 0, 0, 292, 0, 0, 0, 0, 0, 0, 0, 2526 0, 0, 0, 0, 0, 0, 0, 293, 0, 1019, 2527 0, 0, 0, 0, 0, 0, 295, 1020, 297, 298, 2528 299, 300, 2, 204, 4, 5, 6, 7, 8, 9, 2529 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2530 20, 21, 22, 23, 24, 0, 0, 25, 26, 27, 2531 0, 0, 0, 0, 280, 281, 30, 282, 0, 0, 2532 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2533 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2534 0, 0, 0, 283, 33, 0, 34, 0, 35, 284, 2535 0, 205, 38, 285, 0, 0, 286, 287, 288, 289, 2536 40, 41, 0, 290, 291, 0, 0, 0, 0, 0, 2537 0, 292, 0, 0, 0, 0, 0, 0, 0, 0, 2538 0, 0, 0, 0, 0, 0, 293, 0, 377, 0, 2539 0, 0, 0, 0, 0, 295, 379, 297, 298, 299, 2540 300, 1, 2, 3, 4, 5, 6, 7, 8, 9, 2541 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2542 20, 21, 22, 23, 24, 0, 0, 25, 26, 27, 2543 28, 0, 0, 29, 0, 0, 30, 31, 0, 0, 2544 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2545 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2546 0, 32, 0, 0, 33, 0, 34, 0, 35, 36, 2547 0, 37, 38, 39, 0, 0, 0, 0, 0, 0, 2548 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, 2549 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2550 0, 0, 0, 0, 0, 0, 42, 0, 43, 0, 2551 0, 0, -520, 0, 0, 0, 44, 203, 2, 204, 2552 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 2553 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2554 24, 0, 0, 25, 26, 27, 0, 0, 0, 0, 2555 0, 0, 30, 8, 9, 10, 11, 12, 13, 14, 2556 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2557 0, 0, 25, 26, 27, 491, 492, 493, 0, 0, 2558 33, 30, 34, 0, 35, 36, 0, 205, 38, 39, 2559 0, 0, 0, 0, 0, 0, 40, 41, 0, 0, 2560 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 2561 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 2562 0, 0, 42, 0, 206, 0, 0, 0, 0, 0, 2563 0, 0, 207, 1, 2, 204, 4, 5, 6, 7, 2564 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2565 18, 19, 20, 21, 22, 23, 24, -294, 0, 25, 2566 26, 27, 28, 0, 0, 29, 0, 0, 30, 0, 2567 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2568 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2569 0, 0, 0, 0, 0, 0, 33, 0, 34, 0, 2570 35, 0, 0, 37, 38, 0, 0, -294, 0, 1, 2571 2, 204, 4, 5, 6, 7, 8, 9, 10, 11, 2572 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2573 22, 23, 24, 0, 0, 25, 26, 27, 28, 0, 2574 43, 29, 0, 0, 30, 0, 0, 0, 109, 0, 2575 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2576 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2577 0, 0, 33, 0, 34, 0, 35, 0, 0, 37, 2578 38, 0, 203, 2, 204, 4, 5, 6, 7, 8, 2579 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2580 19, 20, 21, 22, 23, 24, 0, 0, 25, 26, 2581 27, 0, 0, 0, 0, 0, 43, 30, 0, 0, 2582 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 2583 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2584 0, 0, 0, 0, 0, 33, 0, 34, 0, 35, 2585 0, 0, 205, 38, 2, 204, 4, 5, 6, 7, 2586 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2587 18, 19, 20, 21, 22, 23, 24, 0, 0, 25, 2588 26, 27, 0, 0, 0, 0, 0, 0, 30, 206, 2589 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 2590 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2591 0, 0, 0, 0, 0, 0, 33, 0, 34, 0, 2592 35, 36, 0, 205, 38, 39, 0, 0, 0, 0, 2593 0, 0, 40, 41, 0, 0, 8, 9, 10, 11, 2594 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2595 22, 23, 24, 0, 0, 25, 26, 27, 42, 0, 2596 206, 0, 0, 0, 30, 0, 0, 0, 207, 2, 2597 204, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2399 2598 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2400 23, 24, 25, -294, 830, 26, 27, 28, 0, 0, 2401 0, 0, 413, 0, 31, 0, 0, 0, 413, 0, 2402 0, 0, 0, 782, 0, 991, 413, 0, 0, 0, 2403 0, 996, 0, 0, 0, 0, 0, 0, 1005, 622, 2404 622, 0, 34, 0, 0, 0, 0, 37, 0, 336, 2405 337, 40, 0, -294, 0, 0, 0, 0, 41, 42, 2406 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 2407 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 2408 0, 0, 1022, 1023, 643, 345, 338, 0, 0, 0, 2409 0, 413, 1159, 0, 634, 0, 0, 0, 0, 0, 2410 345, 363, 0, 0, 0, 0, 0, 413, 1171, 0, 2411 622, 622, 1176, 0, 0, 0, 0, 0, 0, 0, 2412 0, 0, 363, 363, 0, 0, 0, 0, 0, 0, 2599 23, 24, 33, 0, 25, 26, 27, 36, 0, 37, 2600 38, 39, 0, 30, 0, 0, 0, 0, 40, 41, 2413 2601 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2414 1053, 0, 0, 0, 381, 1, 2, 205, 4, 5, 2602 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2603 0, 33, 0, 34, 42, 35, 43, 0, 37, 38, 2604 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 2605 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2606 1368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2607 0, 0, 0, 0, 0, 686, 0, 0, 0, 0, 2608 0, 0, 0, 633, 2, 204, 4, 5, 6, 7, 2609 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2610 18, 19, 20, 21, 22, 23, 24, 0, 0, 25, 2611 26, 27, 0, 0, 0, 0, 0, 0, 30, 0, 2612 0, 0, 0, 8, 9, 10, 11, 12, 13, 14, 2613 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2614 0, 0, 25, 26, 27, 0, 33, 0, 34, 0, 2615 35, 30, 0, 37, 38, 0, 0, 0, 0, 0, 2616 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2617 0, 0, 0, 0, 0, 1370, 0, 0, 0, 33, 2618 0, 0, 0, 0, 36, 0, 335, 336, 39, 0, 2619 686, 0, 0, 0, 0, 40, 41, 0, 633, 2, 2620 204, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2621 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2622 23, 24, 0, 337, 25, 26, 27, 0, 0, 0, 2623 0, 109, 0, 30, 0, 0, 0, 0, 0, 0, 2624 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2625 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2626 0, 33, 0, 34, 0, 35, 0, 0, 205, 38, 2627 2, 204, 4, 5, 6, 7, 8, 9, 10, 11, 2628 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2629 22, 23, 24, 0, 0, 25, 26, 27, 0, 0, 2630 0, 0, 0, 0, 30, 268, 0, 0, 0, 0, 2631 0, 0, 0, 628, 0, 0, 0, 0, 0, 0, 2632 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2633 0, 0, 33, 0, 34, 0, 35, 0, 0, 37, 2634 38, 2, 204, 4, 5, 6, 7, 8, 9, 10, 2635 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2636 21, 22, 23, 24, 0, 0, 25, 26, 27, 0, 2637 0, 0, 0, 0, 0, 30, 686, 0, 0, 0, 2638 0, 0, 0, 0, 633, 0, 0, 0, 0, 0, 2639 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2640 0, 0, 0, 33, 0, 34, 0, 35, 0, 0, 2641 37, 38, 2, 204, 4, 5, 6, 7, 8, 9, 2642 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2643 20, 21, 22, 23, 24, 0, 0, 25, 26, 27, 2644 0, 0, 0, 0, 0, 0, 30, 598, 0, 0, 2645 0, 0, 0, 0, 0, 633, 0, 0, 0, 0, 2646 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2647 0, 0, 0, 0, 33, 0, 34, 0, 35, 0, 2648 0, 205, 38, 8, 9, 10, 11, 12, 13, 14, 2649 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2650 0, 0, 25, 26, 27, 0, 0, 0, 0, 280, 2651 281, 30, 282, 0, 0, 0, 0, 0, 206, 0, 2652 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 2653 0, 0, 0, 0, 0, 0, 0, 0, 283, 33, 2654 0, 0, 0, 0, 284, 0, 37, 38, 285, 0, 2655 0, 286, 287, 288, 289, 40, 41, 0, 290, 291, 2656 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 2657 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2658 0, 293, 0, 524, 0, 0, 169, 0, 0, 0, 2659 295, 296, 297, 298, 299, 300, 8, 9, 10, 11, 2660 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2661 22, 23, 24, 0, 0, 25, 26, 27, 0, 0, 2662 0, 0, 280, 281, 30, 282, 8, 9, 10, 11, 2663 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2664 22, 23, 24, -294, 0, 25, 26, 27, 0, 0, 2665 0, 283, 33, 0, 30, 0, 0, 284, 0, 37, 2666 38, 285, 0, 0, 286, 287, 288, 289, 40, 41, 2667 0, 290, 291, 0, 0, 0, 0, 0, 0, 292, 2668 0, 0, 33, 0, 0, 0, 0, 36, 0, 335, 2669 336, 39, 0, -294, 293, 0, 598, -3, 40, 41, 2670 0, 0, 0, 295, 599, 297, 298, 299, 300, 8, 2671 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2672 19, 20, 21, 22, 23, 24, 337, 0, 25, 26, 2673 27, 0, 0, 0, 109, 280, 281, 30, 282, 8, 2674 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2675 19, 20, 21, 22, 23, 24, 0, 0, 25, 26, 2676 27, 0, 0, 0, 283, 33, 0, 30, 0, 0, 2677 648, 0, 37, 38, 285, 0, 0, 286, 287, 288, 2678 289, 40, 41, 0, 290, 291, 0, 0, 0, 0, 2679 0, 0, 292, 0, 0, 33, 0, 0, 0, 0, 2680 108, 0, 37, 38, 0, 0, 0, 293, -35, 765, 2681 0, 40, 41, 0, 0, 0, 295, 296, 297, 298, 2682 299, 300, 8, 9, 10, 11, 12, 13, 14, 15, 2683 16, 17, 18, 19, 20, 21, 22, 23, 24, 43, 2684 0, 25, 26, 27, 0, 0, 0, 109, 280, 281, 2685 30, 282, 8, 9, 10, 11, 12, 13, 14, 15, 2686 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 2687 0, 25, 26, 27, 0, 0, 0, 283, 33, 0, 2688 30, 452, 0, 284, 0, 37, 38, 285, 0, 0, 2689 286, 287, 288, 289, 40, 41, 0, 290, 291, 0, 2690 0, 0, 0, 0, 0, 292, 0, 0, 33, 0, 2691 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 2692 293, 0, 294, 0, 0, 0, 0, 0, 0, 295, 2693 296, 297, 298, 299, 300, 8, 9, 10, 11, 12, 2694 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2695 23, 24, 453, 0, 25, 26, 27, 0, 0, 0, 2696 109, 280, 281, 30, 282, 0, 0, 0, 0, 0, 2697 0, 0, 0, 8, 9, 10, 11, 12, 13, 14, 2698 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2699 283, 33, 25, 26, 27, 0, 284, 0, 37, 38, 2700 285, 30, 0, 286, 287, 288, 289, 40, 41, 0, 2701 290, 291, 0, 0, 0, 0, 0, 0, 292, 0, 2702 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 2703 0, 0, 0, 293, 0, 155, 37, 38, 0, 0, 2704 0, 0, 295, 296, 297, 298, 299, 300, 8, 9, 2705 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2706 20, 21, 22, 23, 24, 0, 0, 25, 26, 27, 2707 0, 642, 0, 337, 280, 281, 30, 282, 0, 0, 2708 0, 109, 0, 0, 0, 0, 8, 9, 10, 11, 2709 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2710 22, 23, 24, 283, 33, 25, 26, 27, 0, 284, 2711 0, 37, 38, 285, 30, 0, 286, 287, 288, 289, 2712 40, 41, 0, 290, 291, 0, 0, 0, 0, 0, 2713 0, 292, 0, 0, 0, 0, 0, 0, 0, 0, 2714 0, 0, 33, 0, 0, 0, 293, 0, 598, 37, 2715 38, 0, 0, 0, 0, 295, 599, 297, 298, 299, 2716 300, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2717 17, 18, 19, 20, 21, 22, 23, 24, 0, 0, 2718 25, 26, 27, 0, 642, 0, 337, 280, 281, 30, 2719 282, 0, 0, 0, 633, 0, 0, 0, 0, 8, 2720 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2721 19, 20, 21, 22, 23, 24, 283, 33, 25, 26, 2722 27, 0, 284, 0, 37, 38, 285, 30, 452, 286, 2723 287, 288, 289, 40, 41, 0, 290, 291, 0, 0, 2724 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 2725 0, 0, 0, 0, 0, 33, 0, 0, 0, 293, 2726 0, 377, 37, 38, 0, 0, 0, 0, 295, 379, 2727 297, 298, 299, 300, 473, 2, 204, 4, 5, 6, 2728 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2729 17, 18, 19, 20, 21, 22, 23, 24, 0, 453, 2730 25, 26, 27, 1234, 0, 0, 0, 109, 0, 30, 2731 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2732 18, 19, 20, 21, 22, 23, 24, 0, 0, 25, 2733 26, 27, 0, 0, 0, 0, 0, 33, 30, 34, 2734 0, 35, 0, 0, 37, 38, 0, 0, 8, 9, 2735 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2736 20, 21, 22, 23, 24, 0, 33, 25, 26, 27, 2737 0, 36, 0, 205, 38, 39, 30, 0, 0, 0, 2738 0, 0, 40, 41, -3, 0, 8, 9, 10, 11, 2739 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2740 22, 23, 24, 0, 33, 25, 26, 27, 42, 36, 2741 268, 335, 336, 39, 30, 0, 0, 0, 207, 0, 2742 40, 41, 0, 0, 8, 9, 10, 11, 12, 13, 2743 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2744 24, 0, 33, 25, 26, 27, 642, 0, 337, 37, 2745 38, 0, 30, 0, 0, 0, 633, 8, 9, 10, 2746 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2747 21, 22, 23, 24, 0, 0, 25, 26, 27, 0, 2748 33, 0, 0, 0, 0, 30, 255, 37, 38, 0, 2749 0, 0, 0, 0, 109, 8, 9, 10, 11, 12, 2750 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2751 23, 24, 0, 33, 25, 26, 27, 0, 0, 0, 2752 205, 38, 0, 30, 155, 0, 0, 0, 0, 0, 2753 0, 0, 109, 8, 9, 10, 11, 12, 13, 14, 2754 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2755 0, 33, 25, 26, 27, 0, 0, 268, 37, 38, 2756 0, 30, 0, 0, 0, 269, 8, 9, 10, 11, 2757 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2758 22, 23, 24, 0, 0, 25, 26, 27, 0, 33, 2759 0, 0, 0, 0, 30, 255, 37, 38, 0, 0, 2760 0, 0, 0, 633, 8, 9, 10, 11, 12, 13, 2761 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2762 24, 0, 33, 25, 26, 27, 0, 0, 0, 37, 2763 38, 0, 30, 337, 0, 0, 0, 0, 0, 0, 2764 0, 633, 8, 9, 10, 11, 12, 13, 14, 15, 2765 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 2766 33, 25, 26, 27, 0, 0, 453, 205, 38, 0, 2767 30, 0, 0, 0, 109, 8, 9, 10, 11, 12, 2768 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2769 23, 24, 0, 0, 25, 26, 27, 0, 33, 0, 2770 0, 0, 0, 30, 268, 37, 38, 0, 0, 0, 2771 0, 0, 628, 8, 9, 10, 11, 12, 13, 14, 2772 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2773 0, 33, 25, 26, 27, 0, 0, 0, 37, 38, 2774 0, 30, 598, 0, 0, 0, 0, 0, 0, 0, 2775 633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2776 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 2777 0, 0, 0, 0, 0, 337, 37, 38, 0, 0, 2778 0, 0, 0, 109, 2, 204, 4, 5, 6, 7, 2779 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2780 18, 19, 20, 21, 22, 23, 24, 0, 0, 25, 2781 26, 27, 0, 43, 0, 0, 0, 0, 30, 0, 2782 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 2783 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2784 0, 0, 0, 0, 0, 0, 33, 0, 34, 0, 2785 35, 0, 0, 37, 38, 280, 281, 0, 282, 1062, 2786 0, 1063, 0, 0, 1064, 1065, 1066, 1067, 1068, 1069, 2787 1070, 1071, 0, 0, 1548, 1072, 0, 0, 0, 1073, 2788 1074, 0, 32, 0, 283, 0, 0, 0, 0, -412, 2789 648, 0, 0, 0, 285, 0, 0, 286, 287, 288, 2790 289, 40, 41, 0, 290, 291, 0, 0, 0, 0, 2791 0, 0, 292, 0, 0, 0, 0, 0, 0, 0, 2792 0, 0, 0, 0, 0, 0, 0, 293, 0, 377, 2793 0, 0, 169, 0, 0, 0, 295, 379, 297, 298, 2794 299, 300, 0, 0, 0, 0, 1076, 0, 280, 281, 2795 -129, 282, 1062, 0, 1063, 0, 0, 1064, 1065, 1066, 2796 1067, 1068, 1069, 1070, 1071, 0, 0, 0, 1072, 0, 2797 0, 0, 1073, 1074, 0, 32, 0, 283, 0, 0, 2798 0, 0, 0, 648, 0, 0, 0, 285, 0, 0, 2799 286, 287, 288, 289, 40, 41, 0, 290, 291, 0, 2800 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 2801 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2802 293, 0, 377, 0, 0, 169, 0, 0, 0, 295, 2803 379, 297, 298, 299, 300, 0, 0, 0, 0, 1076, 2804 0, 280, 281, -129, 282, 1062, 0, 1063, 1418, 1419, 2805 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 0, 0, 2806 1548, 1072, 0, 0, 0, 1073, 1074, 0, 32, 0, 2807 283, 0, 0, 0, 0, 0, 648, 0, 0, 0, 2808 285, 0, 0, 286, 287, 288, 289, 40, 41, 0, 2809 290, 291, 0, 0, 0, 0, 0, 0, 292, 0, 2810 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2811 0, 0, 0, 293, 0, 377, 0, 0, 169, 0, 2812 0, 0, 295, 379, 297, 298, 299, 300, 0, 0, 2813 280, 281, 1076, 282, 1062, 0, 1063, 1418, 1419, 1064, 2814 1065, 1066, 1067, 1068, 1069, 1070, 1071, 0, 0, 0, 2815 1072, 0, 0, 0, 1073, 1074, 0, 32, 0, 283, 2816 0, 0, 0, 0, 0, 648, 0, 0, 0, 285, 2817 0, 0, 286, 287, 288, 289, 40, 41, 0, 290, 2818 291, 0, 0, 0, 0, 0, 0, 292, 0, 0, 2819 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2820 0, 0, 293, 0, 377, 0, 0, 169, 0, 0, 2821 0, 295, 379, 297, 298, 299, 300, 0, 0, 280, 2822 281, 1076, 282, 1062, 0, 1063, 0, 0, 1064, 1065, 2823 1066, 1067, 1068, 1069, 1070, 1071, 0, 0, 0, 1072, 2824 0, 0, 0, 1073, 1074, 0, 32, 0, 283, 0, 2825 0, 0, 0, 0, 648, 0, 0, 0, 285, 0, 2826 0, 286, 287, 288, 289, 40, 41, 0, 290, 291, 2827 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 2828 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2829 0, 293, 0, 377, 0, 0, 169, 0, 0, 0, 2830 295, 379, 297, 298, 299, 300, 0, 0, 0, 0, 2831 1076, 2, 204, 4, 5, 6, 7, 8, 9, 10, 2832 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2833 21, 22, 23, 24, 0, 0, 25, 26, 27, 0, 2834 0, 0, 0, 0, 0, 30, 0, 280, 281, 0, 2835 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2836 0, 0, 0, 0, 0, 0, 280, 281, 0, 282, 2837 0, 0, 0, 33, 0, 34, 283, 35, 0, 0, 2838 37, 38, 284, 0, 0, 0, 285, 0, 0, 286, 2839 287, 288, 289, 40, 41, 283, 290, 291, 0, 0, 2840 0, 648, 1327, 0, 292, 285, 0, 0, 286, 287, 2841 288, 289, 40, 41, 0, 290, 291, 0, 0, 293, 2842 0, 377, 0, 292, 280, 281, 0, 282, 295, 733, 2843 297, 298, 299, 300, 0, 0, 0, 0, 293, 0, 2844 784, 0, 0, 280, 281, 0, 282, 295, 379, 297, 2845 298, 299, 300, 283, 0, 0, 0, 0, 0, 284, 2846 0, 0, 0, 285, 0, 0, 286, 287, 288, 289, 2847 40, 41, 283, 290, 291, 0, 0, 0, 284, 0, 2848 0, 292, 285, 0, 0, 286, 287, 288, 289, 40, 2849 41, 0, 290, 291, 0, 0, 293, 0, 377, 0, 2850 292, 280, 281, 0, 282, 295, 826, 297, 298, 299, 2851 300, 0, 0, 0, 0, 517, 0, 0, 0, 0, 2852 0, 0, 0, 0, 295, 379, 297, 298, 299, 300, 2853 283, 0, 0, 0, 0, 0, 284, 0, 0, 0, 2854 285, 0, 0, 286, 287, 288, 289, 40, 41, 0, 2855 290, 291, 0, 0, 0, 0, 0, 0, 292, 0, 2856 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2857 0, 0, 0, 520, 0, 0, 0, 0, 0, 0, 2858 0, 0, 295, 379, 297, 298, 299, 300, 2, 204, 2859 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 2860 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2861 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2862 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 2863 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2864 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2865 33, 0, 34, 0, 35, 36, 0, 172, 173, 39, 2866 0, 0, 0, 0, 0, 0, 40, 41, 203, 2, 2867 204, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2868 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2869 23, 24, 0, 0, 25, 26, 27, 0, 0, 0, 2870 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 2871 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2872 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2873 0, 33, 0, 34, 0, 35, 0, 0, 205, 38, 2874 473, 2, 204, 4, 5, 6, 7, 8, 9, 10, 2875 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2876 21, 22, 23, 24, 0, 0, 25, 26, 27, 0, 2877 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 2878 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2879 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2880 0, 0, 0, 33, 0, 34, 0, 35, 0, 0, 2881 37, 38, 2, 204, 4, 5, 6, 7, 8, 9, 2882 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2883 20, 21, 22, 23, 24, 0, 0, 25, 26, 27, 2884 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 2885 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2886 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2887 0, 0, 0, 0, 33, 0, 34, 0, 35, 0, 2888 0, 205, 38 2889 }; 2890 2891 #define yypact_value_is_default(yystate) \ 2892 ((yystate) == (-1281)) 2893 2894 #define yytable_value_is_error(yytable_value) \ 2895 YYID (0) 2896 2897 static const yytype_int16 yycheck[] = 2898 { 2899 0, 1, 0, 42, 237, 217, 183, 183, 202, 42, 2900 0, 1, 1, 183, 42, 542, 183, 183, 114, 103, 2901 184, 455, 519, 343, 0, 0, 628, 454, 28, 29, 2902 183, 31, 697, 31, 697, 183, 498, 697, 610, 608, 2903 502, 31, 42, 679, 44, 461, 44, 347, 1042, 496, 2904 279, 901, 655, 1, 54, 31, 31, 166, 167, 608, 2905 60, 1061, 60, 63, 608, 63, 66, 610, 66, 153, 2906 347, 0, 578, 63, 1005, 277, 66, 66, 416, 998, 2907 80, 81, 1041, 1042, 184, 608, 263, 263, 63, 779, 2908 42, 362, 185, 263, 608, 366, 263, 263, 436, 31, 2909 264, 528, 31, 199, 104, 1337, 444, 107, 608, 27, 2910 263, 776, 0, 776, 114, 263, 776, 42, 608, 722, 2911 642, 643, 644, 1054, 758, 424, 425, 611, 38, 254, 2912 643, 644, 38, 617, 81, 42, 62, 106, 1418, 661, 2913 0, 1, 63, 31, 183, 145, 44, 145, 661, 109, 2914 183, 81, 108, 153, 226, 183, 116, 1422, 158, 77, 2915 158, 130, 38, 110, 264, 612, 259, 260, 488, 616, 2916 50, 31, 44, 245, 743, 109, 43, 44, 814, 109, 2917 1073, 1074, 116, 183, 184, 81, 184, 108, 824, 54, 2918 637, 43, 44, 38, 641, 38, 408, 84, 108, 199, 2919 110, 500, 63, 839, 110, 131, 66, 207, 1440, 207, 2920 901, 109, 1492, 735, 43, 44, 216, 494, 108, 219, 2921 519, 219, 735, 38, 263, 112, 226, 81, 108, 219, 2922 263, 183, 108, 11, 110, 263, 115, 109, 108, 104, 2923 404, 241, 107, 743, 219, 245, 1240, 114, 1141, 249, 2924 250, 249, 131, 743, 115, 1520, 340, 113, 183, 249, 2925 1525, 113, 116, 263, 264, 108, 264, 110, 115, 838, 2926 270, 38, 144, 249, 249, 0, 183, 277, 850, 599, 2927 1545, 510, 3, 717, 113, 369, 585, 1552, 81, 838, 2928 454, 416, 292, 108, 838, 110, 1290, 158, 394, 1474, 2929 111, 1525, 250, 1303, 404, 827, 31, 850, 628, 207, 2930 610, 436, 818, 633, 827, 838, 109, 249, 1008, 444, 2931 249, 1545, 486, 116, 838, 596, 422, 327, 1552, 327, 2932 1289, 1290, 428, 81, 1509, 207, 1511, 1256, 838, 94, 2933 238, 108, 95, 110, 292, 111, 346, 347, 838, 115, 2934 81, 216, 690, 95, 454, 1525, 840, 115, 219, 698, 2935 108, 249, 3, 363, 1, 237, 254, 367, 639, 122, 2936 1061, 269, 71, 348, 129, 1225, 696, 108, 378, 71, 2937 122, 720, 1552, 82, 83, 108, 486, 959, 108, 249, 2938 82, 83, 114, 115, 394, 293, 257, 269, 296, 71, 2939 261, 108, 1038, 1039, 404, 270, 404, 44, 130, 958, 2940 82, 83, 277, 115, 958, 71, 0, 115, 1020, 0, 2941 1414, 115, 422, 130, 296, 872, 82, 83, 428, 131, 2942 430, 488, 131, 131, 109, 958, 1070, 131, 110, 131, 2943 115, 67, 115, 89, 90, 71, 675, 531, 74, 115, 2944 76, 130, 772, 115, 454, 1414, 71, 83, 131, 459, 2945 1096, 1097, 118, 1463, 464, 131, 103, 82, 83, 131, 2946 1470, 343, 109, 473, 108, 1406, 1407, 115, 478, 125, 2947 126, 346, 109, 108, 109, 109, 486, 348, 486, 116, 2948 490, 115, 490, 131, 494, 110, 109, 497, 363, 499, 2949 490, 71, 367, 130, 479, 967, 1003, 144, 120, 121, 2950 937, 927, 82, 83, 490, 490, 153, 964, 945, 519, 2951 697, 697, 115, 1523, 249, 473, 108, 697, 416, 254, 2952 697, 697, 761, 108, 1225, 699, 536, 1140, 131, 539, 2953 110, 541, 542, 1115, 697, 1029, 1030, 656, 436, 697, 2954 850, 108, 424, 425, 452, 757, 444, 455, 829, 87, 2955 88, 490, 833, 461, 991, 690, 203, 663, 429, 71, 2956 207, 519, 665, 850, 115, 10, 11, 12, 13, 14, 2957 82, 83, 115, 108, 210, 642, 643, 644, 536, 589, 2958 131, 539, 470, 541, 542, 109, 596, 115, 131, 699, 2959 237, 238, 490, 38, 661, 109, 108, 732, 608, 115, 2960 610, 695, 1303, 131, 512, 71, 514, 115, 479, 517, 2961 111, 597, 520, 109, 115, 131, 82, 83, 500, 629, 2962 490, 66, 269, 131, 1270, 272, 109, 79, 977, 696, 2963 282, 589, 1278, 1279, 1280, 645, 71, 519, 73, 74, 2964 109, 651, 923, 295, 296, 630, 293, 82, 83, 296, 2965 660, 111, 662, 663, 664, 307, 114, 1101, 110, 1303, 2966 112, 79, 3, 111, 116, 887, 108, 115, 735, 10, 2967 11, 12, 13, 14, 91, 92, 963, 771, 113, 0, 2968 1326, 416, 109, 108, 293, 110, 908, 697, 115, 699, 2969 1020, 343, 110, 340, 112, 111, 343, 38, 116, 115, 2970 108, 436, 712, 585, 662, 772, 664, 118, 718, 444, 2971 31, 131, 123, 124, 350, 362, 352, 599, 71, 366, 2972 730, 42, 369, 44, 111, 66, 969, 379, 115, 82, 2973 83, 602, 108, 743, 744, 109, 1380, 109, 723, 60, 2974 1131, 115, 63, 115, 1135, 66, 628, 757, 108, 63, 2975 110, 633, 737, 488, 629, 490, 108, 110, 118, 630, 2976 827, 1495, 1463, 937, 635, 108, 108, 1501, 110, 1470, 2977 645, 945, 730, 108, 893, 110, 118, 424, 425, 111, 2978 109, 109, 1319, 118, 1133, 660, 115, 115, 1522, 113, 2979 109, 679, 690, 1527, 131, 52, 115, 113, 512, 71, 2980 514, 73, 74, 517, 440, 452, 520, 109, 455, 717, 2981 82, 83, 109, 115, 461, 424, 425, 128, 115, 130, 2982 113, 1102, 1523, 1467, 145, 1469, 473, 937, 838, 1033, 2983 1160, 114, 115, 109, 732, 945, 108, 158, 95, 115, 2984 850, 113, 1191, 1192, 109, 108, 831, 110, 834, 131, 2985 115, 498, 723, 500, 1529, 502, 1529, 131, 109, 1529, 2986 115, 116, 183, 184, 115, 512, 737, 514, 109, 109, 2987 517, 109, 519, 520, 115, 115, 71, 115, 73, 74, 2988 1524, 108, 757, 893, 531, 108, 207, 82, 83, 109, 2989 900, 901, 1131, 109, 109, 115, 1135, 1136, 219, 115, 2990 115, 901, 81, 512, 556, 557, 558, 108, 517, 110, 2991 1240, 520, 108, 923, 110, 901, 901, 109, 110, 4, 2992 5, 6, 7, 8, 9, 108, 814, 937, 249, 71, 2993 111, 73, 74, 81, 191, 945, 824, 1056, 585, 119, 2994 82, 83, 263, 901, 108, 109, 110, 599, 108, 596, 2995 110, 839, 599, 963, 108, 690, 110, 214, 57, 58, 2996 831, 696, 108, 109, 110, 574, 108, 224, 968, 968, 2997 108, 113, 110, 983, 1041, 4, 5, 6, 7, 8, 2998 9, 628, 992, 68, 127, 70, 633, 108, 109, 110, 2999 1000, 128, 639, 1003, 130, 1005, 71, 732, 73, 74, 3000 75, 110, 108, 901, 110, 3, 327, 82, 83, 114, 3001 115, 1250, 10, 11, 12, 13, 14, 1123, 71, 927, 3002 73, 74, 75, 115, 116, 983, 347, 115, 116, 82, 3003 83, 901, 108, 108, 110, 110, 293, 772, 1023, 68, 3004 38, 70, 1000, 118, 1054, 1003, 131, 1005, 695, 108, 3005 109, 110, 1401, 93, 1064, 108, 108, 1067, 1068, 1069, 3006 108, 1061, 10, 11, 12, 13, 14, 1504, 66, 1418, 3007 717, 563, 564, 565, 566, 1061, 1061, 71, 111, 73, 3008 74, 733, 1092, 404, 43, 44, 44, 969, 82, 83, 3009 38, 111, 702, 1160, 704, 109, 1054, 109, 968, 1338, 3010 747, 109, 60, 1342, 109, 63, 1064, 109, 66, 1067, 3011 1068, 1069, 3, 1123, 561, 562, 110, 1554, 66, 10, 3012 11, 12, 13, 14, 771, 109, 1220, 779, 71, 108, 3013 73, 74, 75, 454, 111, 109, 111, 111, 1020, 82, 3014 83, 115, 1491, 1492, 57, 58, 59, 38, 567, 568, 3015 1038, 1039, 1023, 1262, 1263, 1264, 130, 131, 559, 560, 3016 108, 110, 110, 1061, 115, 108, 901, 130, 113, 490, 3017 118, 108, 111, 494, 826, 66, 109, 109, 116, 115, 3018 111, 111, 829, 111, 441, 111, 833, 145, 1198, 116, 3019 28, 1061, 116, 1101, 109, 84, 85, 86, 109, 111, 3020 158, 109, 1202, 1203, 1203, 1444, 113, 116, 1096, 1097, 3021 1220, 114, 114, 114, 108, 1225, 115, 1202, 475, 108, 3022 115, 110, 1289, 112, 113, 1225, 184, 109, 4, 5, 3023 6, 7, 8, 9, 131, 109, 109, 116, 109, 1225, 3024 1225, 109, 109, 115, 1244, 1244, 71, 109, 109, 207, 3025 75, 109, 1262, 1263, 1264, 512, 32, 82, 83, 109, 3026 517, 219, 109, 520, 109, 109, 71, 1225, 73, 74, 3027 75, 84, 85, 86, 109, 109, 923, 82, 83, 470, 3028 927, 109, 109, 108, 114, 110, 109, 608, 109, 610, 3029 28, 1397, 68, 118, 70, 108, 1539, 110, 1298, 112, 3030 113, 698, 111, 1303, 1262, 1263, 1264, 109, 130, 1319, 3031 1320, 109, 109, 1298, 114, 109, 115, 1303, 1303, 111, 3032 967, 968, 969, 720, 111, 109, 1061, 1225, 71, 109, 3033 115, 1202, 75, 1203, 109, 901, 115, 1337, 1337, 82, 3034 83, 115, 1529, 1529, 116, 113, 111, 71, 109, 1529, 3035 1238, 75, 1529, 1529, 111, 1225, 1530, 115, 82, 83, 3036 115, 1319, 1320, 109, 1374, 108, 1529, 1377, 1020, 327, 3037 109, 1529, 108, 1020, 1244, 118, 697, 108, 699, 108, 3038 1554, 108, 1270, 108, 108, 111, 1396, 1397, 116, 131, 3039 1278, 1279, 1280, 114, 118, 109, 1406, 1407, 1504, 71, 3040 109, 73, 74, 75, 109, 1303, 0, 1, 128, 1061, 3041 82, 83, 1422, 114, 811, 113, 1374, 1427, 111, 1377, 3042 1530, 678, 743, 744, 131, 1160, 109, 1298, 115, 111, 3043 687, 115, 111, 1303, 691, 1445, 109, 31, 1326, 109, 3044 1440, 1440, 109, 111, 1554, 111, 404, 1457, 1406, 1407, 3045 44, 111, 109, 54, 1101, 1102, 111, 111, 111, 46, 3046 29, 109, 131, 1463, 1422, 114, 131, 1337, 131, 1427, 3047 1470, 71, 66, 73, 74, 75, 114, 1463, 1463, 131, 3048 1529, 131, 82, 83, 1470, 1470, 1529, 1445, 679, 116, 3049 1225, 1529, 889, 109, 1504, 1505, 111, 114, 1064, 1457, 3050 111, 111, 111, 104, 1514, 1240, 107, 111, 108, 103, 3051 1520, 80, 81, 111, 111, 1525, 111, 838, 118, 1529, 3052 1530, 1396, 1530, 1523, 109, 1177, 109, 111, 108, 850, 3053 111, 63, 108, 1543, 108, 1545, 59, 1523, 1523, 1549, 3054 113, 109, 1552, 109, 1554, 131, 1554, 1505, 80, 116, 3055 1560, 145, 153, 111, 1564, 111, 1514, 109, 111, 153, 3056 154, 109, 1520, 108, 1472, 1463, 1474, 1525, 1303, 95, 3057 1440, 95, 1470, 1220, 108, 114, 131, 115, 111, 109, 3058 977, 109, 109, 115, 109, 1543, 41, 1545, 131, 131, 3059 184, 1549, 95, 1463, 1552, 1204, 1205, 1244, 1207, 116, 3060 1470, 1509, 1560, 1511, 1213, 199, 1564, 1216, 202, 203, 3061 109, 1008, 109, 207, 95, 216, 937, 131, 109, 109, 3062 131, 116, 131, 814, 945, 1523, 158, 109, 114, 109, 3063 50, 131, 52, 824, 228, 55, 56, 57, 232, 59, 3064 234, 111, 963, 111, 108, 114, 131, 114, 839, 243, 3065 109, 109, 131, 1523, 74, 249, 109, 1539, 109, 1225, 3066 254, 1058, 1076, 569, 1225, 570, 86, 87, 925, 270, 3067 264, 571, 241, 1492, 63, 573, 277, 1382, 272, 572, 3068 25, 26, 27, 1564, 73, 1313, 1136, 219, 1342, 1470, 3069 1337, 10, 11, 12, 13, 14, 10, 11, 12, 13, 3070 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3071 24, 25, 26, 27, 1092, 29, 30, 31, 452, 38, 3072 452, 945, 704, 464, 38, 257, 115, 893, 1463, 261, 3073 947, 992, 589, 965, 657, 1470, 1133, 747, 1244, 490, 3074 757, 577, -1, -1, 577, 346, 340, 66, 577, 343, 3075 -1, 96, 66, 98, 1320, 349, -1, -1, -1, 73, 3076 74, -1, 363, 77, -1, -1, 367, 1376, 362, 158, 3077 -1, -1, 366, -1, -1, 369, -1, 10, 11, 12, 3078 13, 14, -1, -1, -1, -1, -1, -1, 1523, 108, 3079 -1, 110, -1, 1440, 1191, 1192, 110, -1, -1, 118, 3080 -1, -1, -1, -1, 118, 38, -1, -1, 1374, 378, 3081 -1, 1377, -1, -1, -1, 1072, 348, -1, -1, -1, 3082 -1, -1, 416, -1, -1, 1472, -1, 1474, -1, 430, 3083 219, -1, -1, 66, 179, -1, -1, 431, -1, -1, 3084 -1, -1, 436, -1, 189, 190, -1, 1038, 1039, 194, 3085 444, 196, 197, -1, -1, -1, 1422, -1, -1, -1, 3086 -1, 1427, 1509, -1, 1511, -1, -1, -1, 257, -1, 3087 -1, -1, 261, -1, -1, 108, 470, 110, -1, 473, 3088 -1, -1, -1, -1, -1, 118, -1, -1, 277, -1, 3089 459, 1457, 1539, -1, 488, 464, 490, 429, -1, 10, 3090 11, 12, 13, 14, 498, 1096, 1097, -1, 502, -1, 3091 -1, -1, -1, -1, -1, -1, -1, 10, 11, 12, 3092 13, 14, -1, 343, 344, -1, -1, 38, 497, 71, 3093 499, 73, 74, 75, -1, 355, 356, 531, 532, -1, 3094 82, 83, -1, -1, -1, 38, -1, 479, -1, -1, 3095 -1, -1, -1, -1, -1, 66, -1, -1, -1, 348, 3096 71, -1, 73, 74, 75, -1, 108, -1, 110, -1, 3097 -1, 82, 83, 66, 116, -1, 118, 1543, 71, -1, 3098 73, 74, 75, 1549, 578, -1, -1, -1, -1, 82, 3099 83, -1, -1, -1, 1560, 596, -1, 108, 1564, 110, 3100 -1, -1, 596, 597, 1401, 599, -1, 118, -1, -1, 3101 -1, -1, -1, -1, -1, 108, 610, 110, -1, -1, 3102 -1, 1418, -1, -1, -1, 118, -1, -1, 629, -1, 3103 -1, -1, -1, -1, 628, -1, -1, -1, -1, 633, 3104 429, -1, -1, -1, 645, 639, -1, 1238, 642, 643, 3105 644, -1, -1, -1, -1, 1312, -1, 446, -1, 660, 3106 71, -1, 73, 74, 75, -1, -1, 661, -1, -1, 3107 602, 82, 83, -1, -1, -1, -1, -1, -1, 1270, 3108 -1, -1, 651, -1, -1, 679, -1, 1278, 1279, 1280, 3109 479, -1, -1, -1, 1491, 1492, 690, 108, 630, 110, 3110 -1, 695, 696, 635, -1, 699, -1, 118, -1, -1, 3111 -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3112 19, 20, 21, 22, 23, 24, 25, 26, 0, -1, 3113 29, 30, 31, -1, -1, 1326, -1, -1, 732, 38, 3114 39, 735, -1, 712, -1, -1, -1, -1, -1, 718, 3115 744, -1, -1, 747, -1, 0, 757, -1, -1, 31, 3116 71, -1, 73, 74, 75, -1, -1, 66, -1, -1, 3117 -1, 82, 83, -1, 73, 74, -1, 771, 772, -1, 3118 -1, -1, -1, 777, -1, -1, 31, -1, -1, -1, 3119 -1, 723, -1, -1, 66, -1, -1, 108, -1, 110, 3120 -1, -1, -1, -1, -1, 737, -1, 118, 1529, -1, 3121 -1, 110, -1, 602, 1471, 114, 1473, -1, -1, 118, 3122 814, 66, -1, -1, -1, -1, -1, -1, -1, -1, 3123 824, -1, -1, 827, -1, 829, 581, 582, 832, 833, 3124 834, 630, -1, -1, -1, 839, 635, -1, -1, -1, 3125 -1, 1508, -1, 1510, -1, 849, 71, -1, 73, 74, 3126 75, -1, -1, -1, -1, -1, 611, 82, 83, 614, 3127 615, -1, 617, -1, 619, 620, -1, -1, -1, 624, 3128 625, -1, 154, 96, 97, 98, 99, 100, 101, 102, 3129 103, 104, 105, 108, -1, -1, 1553, -1, 1555, 831, 3130 -1, -1, -1, 118, 724, -1, 726, 901, -1, 154, 3131 -1, 1568, 1569, 733, 734, -1, -1, 130, 738, -1, 3132 -1, -1, 923, -1, 893, -1, 187, -1, -1, 923, 3133 750, 900, -1, 194, 723, 755, -1, -1, 10, 11, 3134 12, 13, 14, -1, -1, -1, -1, -1, 737, -1, 3135 -1, -1, -1, -1, -1, -1, 228, -1, -1, -1, 3136 -1, 781, -1, 708, 709, 959, 38, -1, 757, 714, 3137 -1, -1, -1, 967, 968, -1, -1, 249, -1, -1, 3138 -1, -1, 254, -1, -1, -1, -1, -1, -1, -1, 3139 -1, 985, -1, -1, 66, -1, -1, -1, -1, 71, 3140 -1, 73, 74, 75, 249, 266, 826, -1, -1, 254, 3141 82, 83, -1, -1, -1, -1, 25, 26, 27, -1, 3142 -1, -1, -1, 992, -1, -1, 1020, -1, -1, -1, 3143 -1, -1, -1, -1, -1, -1, 108, -1, 110, 1033, 3144 -1, -1, 831, -1, 1038, 1039, 118, 1041, 1042, -1, 3145 -1, -1, -1, -1, 10, 11, 12, 13, 14, -1, 3146 -1, 322, -1, 883, 884, 885, 886, 1061, 888, 330, 3147 -1, -1, 333, -1, -1, -1, -1, 349, -1, -1, 3148 -1, -1, 38, -1, 904, -1, -1, 96, -1, 98, 3149 -1, 1023, -1, -1, -1, -1, -1, -1, 918, -1, 3150 -1, -1, 1096, 1097, 349, -1, -1, -1, 1102, -1, 3151 66, -1, -1, -1, 123, 71, -1, 73, 74, 75, 3152 -1, -1, -1, 1092, -1, -1, 82, 83, -1, -1, 3153 -1, -1, -1, -1, -1, 396, -1, 957, -1, 400, 3154 -1, -1, -1, -1, 416, -1, -1, -1, -1, -1, 3155 -1, -1, 108, -1, -1, -1, -1, -1, -1, 431, 3156 -1, -1, 118, -1, 436, -1, 1160, -1, -1, -1, 3157 179, 416, 444, -1, -1, -1, -1, 997, 187, -1, 3158 189, 190, -1, -1, 1004, 194, 431, 196, 197, 1009, 3159 -1, 436, -1, -1, 1014, -1, 1016, -1, 470, 444, 3160 1020, 1021, 1022, -1, -1, 1025, -1, -1, -1, 1203, 3161 -1, -1, -1, -1, 1034, -1, 488, -1, 490, 1220, 3162 -1, -1, -1, -1, 485, 470, 1220, -1, -1, 1198, 3163 -1, 1225, 1052, 1053, 1023, -1, -1, -1, 10, 11, 3164 12, 13, 14, 488, 1238, 490, 1240, -1, -1, -1, 3165 1244, -1, -1, -1, -1, -1, -1, 266, -1, 1079, 3166 532, -1, 1082, -1, -1, -1, 38, -1, -1, -1, 3167 1202, -1, -1, -1, -1, -1, 1270, -1, -1, -1, 3168 -1, -1, -1, -1, 1278, 1279, 1280, 532, -1, -1, 3169 -1, -1, -1, -1, 66, 1289, 1290, -1, -1, 71, 3170 1120, 73, 74, 75, -1, -1, 1126, 1127, -1, 1303, 3171 82, 83, -1, -1, -1, -1, 577, 578, 1138, -1, 3172 -1, -1, -1, 1143, -1, 597, 1146, -1, 1148, -1, 3173 -1, 1151, 1326, -1, -1, -1, 108, -1, -1, -1, 3174 -1, -1, -1, 1337, 1164, -1, 118, -1, -1, -1, 3175 -1, -1, 597, 1098, -1, -1, -1, 1177, -1, 1179, 3176 1180, 1181, 1182, -1, -1, -1, 1298, -1, -1, -1, 3177 642, 643, 644, -1, -1, 1195, -1, 1197, -1, -1, 3178 -1, 1201, -1, -1, -1, -1, -1, -1, -1, 661, 3179 -1, -1, -1, -1, -1, 1396, -1, 642, 643, 644, 3180 -1, -1, -1, -1, -1, 666, -1, 679, -1, 670, 3181 1230, 1231, -1, 1202, -1, -1, 661, -1, 690, -1, 3182 1414, -1, 0, -1, 696, -1, -1, -1, -1, -1, 3183 -1, -1, -1, -1, 679, -1, -1, -1, -1, -1, 3184 -1, -1, 703, -1, -1, 690, 1440, -1, -1, 0, 3185 -1, 696, -1, 31, -1, 0, 1, -1, -1, -1, 3186 732, 1281, 1282, 735, -1, -1, -1, -1, -1, 1463, 3187 -1, 1291, -1, -1, -1, -1, 1470, 1222, -1, -1, 3188 31, -1, -1, -1, -1, -1, 31, 732, 66, -1, 3189 735, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3190 772, -1, -1, -1, -1, -1, -1, -1, -1, 1298, 3191 -1, -1, -1, -1, -1, 66, -1, -1, 63, -1, 3192 -1, 66, -1, 1343, -1, -1, -1, 772, -1, 1523, 3193 -1, -1, -1, -1, -1, 1355, 1530, 1357, 1358, 1359, 3194 -1, -1, 814, -1, -1, -1, -1, -1, -1, 1369, 3195 -1, -1, 824, -1, -1, 827, -1, 818, 1378, -1, 3196 832, -1, 834, -1, -1, -1, -1, 839, -1, 814, 3197 -1, -1, 581, 582, 1394, -1, 154, -1, -1, 824, 3198 -1, -1, 827, -1, -1, -1, -1, 832, -1, 834, 3199 -1, -1, -1, -1, 839, -1, -1, -1, -1, -1, 3200 -1, -1, 611, 154, -1, 614, 615, -1, 617, 154, 3201 619, 620, -1, -1, -1, 624, 625, -1, -1, -1, 3202 -1, -1, -1, -1, -1, -1, -1, -1, -1, 901, 3203 1450, 1451, -1, -1, -1, -1, -1, -1, -1, -1, 3204 -1, -1, -1, 1463, -1, -1, -1, -1, -1, -1, 3205 1470, -1, -1, -1, -1, -1, 901, -1, -1, -1, 3206 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3207 931, 249, -1, -1, 219, -1, 254, -1, -1, -1, 3208 -1, -1, -1, 1503, -1, -1, -1, 1507, -1, -1, 3209 -1, -1, -1, -1, 703, -1, -1, -1, 249, 708, 3210 709, -1, -1, 254, 249, 714, -1, -1, -1, -1, 3211 -1, -1, -1, 985, -1, -1, 1536, -1, 1538, -1, 3212 -1, -1, 10, 11, 12, 13, 14, 15, 16, 17, 3213 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, 3214 985, 29, 30, 31, -1, -1, 1566, 1567, -1, 1010, 3215 38, 39, -1, -1, 1574, 1575, -1, -1, -1, -1, 3216 -1, -1, -1, -1, -1, 1026, 1038, 1039, -1, 1041, 3217 1042, 349, -1, -1, -1, -1, -1, -1, 66, -1, 3218 -1, -1, -1, -1, -1, 73, 74, -1, -1, 1061, 3219 -1, -1, -1, 1038, 1039, -1, 1041, 1042, 349, 10, 3220 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3221 21, 22, 23, 24, 25, 26, 1061, -1, 29, 30, 3222 31, -1, 110, -1, 1096, 1097, 114, 38, -1, -1, 3223 118, -1, -1, -1, -1, -1, -1, -1, 416, -1, 3224 -1, -1, 1103, -1, -1, -1, -1, -1, -1, -1, 3225 -1, 1096, 1097, 431, -1, 66, -1, -1, 436, -1, 3226 71, -1, 73, 74, 75, 416, 444, -1, -1, -1, 3227 -1, 82, 83, -1, -1, -1, -1, -1, -1, -1, 3228 431, -1, -1, -1, -1, 436, 431, -1, 1160, -1, 3229 -1, -1, 470, 444, -1, -1, -1, 108, -1, 110, 3230 -1, -1, -1, -1, -1, -1, -1, 118, -1, -1, 3231 488, -1, 490, -1, -1, 1160, -1, -1, -1, 470, 3232 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3233 -1, 1203, -1, -1, -1, -1, -1, 488, -1, 490, 3234 -1, -1, -1, -1, -1, 490, -1, -1, -1, -1, 3235 -1, -1, -1, 1225, 532, -1, -1, -1, 1203, -1, 3236 -1, -1, -1, -1, -1, -1, 1238, -1, 1240, -1, 3237 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3238 1225, 532, -1, -1, -1, -1, -1, 532, -1, -1, 3239 -1, -1, -1, 1238, -1, 1240, -1, -1, 1270, -1, 3240 -1, -1, -1, -1, -1, -1, 1278, 1279, 1280, -1, 3241 -1, -1, -1, -1, -1, -1, -1, 1289, 1290, 597, 3242 -1, -1, -1, -1, -1, 1270, -1, -1, -1, -1, 3243 -1, 1303, -1, 1278, 1279, 1280, -1, -1, -1, -1, 3244 -1, -1, -1, -1, 1289, 1290, 597, -1, -1, -1, 3245 -1, -1, 597, -1, 1326, -1, -1, -1, 1303, -1, 3246 -1, -1, -1, -1, 642, 643, 644, -1, -1, -1, 3247 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3248 -1, 1326, -1, 661, -1, -1, -1, -1, -1, 1098, 3249 -1, 642, 643, 644, -1, -1, -1, 642, 643, 644, 3250 -1, 679, -1, -1, -1, -1, -1, -1, -1, -1, 3251 661, -1, 690, -1, -1, -1, 661, -1, 696, -1, 3252 -1, -1, -1, -1, -1, -1, -1, -1, 679, 7, 3253 -1, -1, 10, 11, 12, 13, 14, -1, -1, 690, 3254 -1, -1, 1414, -1, -1, 696, -1, -1, -1, -1, 3255 -1, -1, -1, -1, 732, -1, -1, 735, 36, 37, 3256 38, 39, -1, -1, -1, -1, -1, -1, -1, 1414, 3257 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3258 -1, 732, -1, -1, 735, -1, -1, 65, 66, -1, 3259 735, 1463, -1, 71, 772, -1, -1, 75, 1470, -1, 3260 78, 79, 80, 81, 82, 83, -1, 85, 86, -1, 3261 -1, -1, -1, 1222, -1, 93, -1, -1, 1463, -1, 3262 -1, 772, -1, -1, -1, 1470, -1, -1, -1, -1, 3263 108, -1, 110, -1, -1, -1, 814, -1, -1, 117, 3264 118, 119, 120, 121, 122, -1, 824, -1, -1, 827, 3265 -1, 1523, -1, -1, 832, -1, 834, -1, -1, -1, 3266 -1, 839, -1, 814, -1, -1, -1, -1, -1, -1, 3267 -1, -1, -1, 824, -1, -1, 827, -1, 1523, -1, 3268 -1, 832, 827, 834, -1, -1, -1, -1, 839, 834, 3269 -1, -1, -1, -1, -1, 0, -1, -1, 3, 4, 3270 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3271 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3272 25, 26, -1, 901, 29, 30, 31, 32, -1, -1, 3273 35, -1, -1, 38, 39, -1, -1, -1, -1, 10, 3274 11, 12, 13, 14, -1, 10, 11, 12, 13, 14, 3275 901, -1, -1, -1, -1, -1, 901, -1, 63, -1, 3276 -1, 66, 44, 68, -1, 70, 71, 38, 73, 74, 3277 75, -1, -1, 38, -1, -1, -1, 82, 83, -1, 3278 -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, 3279 -1, -1, -1, -1, -1, 66, -1, -1, -1, -1, 3280 71, 66, -1, 108, 75, 110, 71, 985, -1, -1, 3281 75, 82, 83, 118, -1, -1, -1, 82, 83, -1, 3282 -1, -1, -1, 968, -1, -1, -1, 109, -1, -1, 3283 -1, -1, -1, 115, 985, -1, -1, 108, -1, -1, 3284 985, -1, -1, 108, -1, -1, -1, 118, -1, -1, 3285 -1, -1, -1, 118, -1, -1, -1, -1, -1, -1, 3286 1038, 1039, 144, 1041, 1042, -1, -1, -1, -1, -1, 3287 -1, -1, 154, -1, -1, -1, 158, -1, -1, -1, 3288 -1, -1, -1, 1061, -1, -1, -1, 1038, 1039, -1, 3289 1041, 1042, -1, -1, -1, -1, 1041, 1042, -1, -1, 3290 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3291 1061, -1, -1, -1, -1, -1, 1061, -1, 1096, 1097, 3292 -1, -1, -1, -1, -1, 207, -1, -1, -1, -1, 3293 -1, -1, -1, -1, -1, -1, -1, 219, -1, -1, 3294 -1, -1, -1, -1, -1, 1096, 1097, -1, -1, -1, 3295 -1, 36, 37, -1, 39, 237, 238, 10, 11, 12, 3296 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3297 23, 24, 25, 26, -1, -1, 29, 30, 31, 261, 3298 65, -1, 1160, -1, -1, 38, 71, 269, -1, -1, 3299 75, -1, -1, 78, 79, 80, 81, 82, 83, -1, 3300 85, 86, -1, -1, -1, -1, -1, -1, 93, 1160, 3301 -1, 293, -1, 66, 296, -1, -1, -1, -1, -1, 3302 73, 74, -1, 108, -1, 1203, -1, -1, -1, -1, 3303 -1, -1, 117, 118, 119, 120, 121, 122, -1, -1, 3304 -1, -1, -1, -1, -1, -1, -1, 1225, -1, -1, 3305 -1, -1, 1203, -1, -1, -1, -1, 1202, 1203, -1, 3306 1238, 343, 1240, -1, -1, 118, 348, -1, -1, -1, 3307 -1, -1, -1, -1, 1225, -1, -1, -1, -1, -1, 3308 1225, -1, -1, -1, -1, -1, -1, 1238, -1, 1240, 3309 -1, -1, 1270, -1, -1, -1, -1, -1, -1, 1244, 3310 1278, 1279, 1280, -1, -1, -1, -1, -1, -1, -1, 3311 -1, 1289, 1290, -1, -1, -1, -1, -1, -1, 1270, 3312 -1, -1, -1, -1, -1, 1303, -1, 1278, 1279, 1280, 3313 -1, -1, -1, -1, -1, -1, -1, -1, 1289, 1290, 3314 -1, -1, 424, 425, 1289, 1290, -1, -1, 1326, 431, 3315 -1, -1, 1303, 1298, -1, -1, -1, -1, 1303, -1, 3316 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3317 452, -1, -1, 455, -1, 1326, -1, -1, -1, 461, 3318 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3319 -1, -1, 1337, -1, -1, -1, -1, -1, -1, -1, 3320 -1, -1, -1, -1, -1, -1, 488, -1, -1, -1, 3321 63, -1, -1, -1, -1, -1, -1, -1, 500, -1, 3322 73, -1, 75, -1, 77, -1, -1, -1, -1, -1, 3323 512, 84, 514, -1, -1, 517, 1414, 519, 520, -1, 3324 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3325 532, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3326 -1, -1, 115, 1414, 117, 118, 119, -1, -1, 1414, 3327 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3328 -1, -1, -1, -1, -1, 1463, -1, 43, -1, -1, 3329 -1, -1, 1470, -1, -1, 1440, -1, -1, -1, -1, 3330 -1, -1, -1, 585, -1, 158, -1, -1, -1, -1, 3331 -1, -1, 1463, -1, -1, 597, -1, 599, 1463, 1470, 3332 602, -1, -1, -1, -1, 1470, -1, -1, -1, -1, 3333 -1, -1, -1, 89, -1, -1, -1, -1, -1, -1, 3334 -1, -1, -1, 99, -1, 1523, 628, -1, -1, -1, 3335 -1, 633, -1, -1, -1, -1, -1, -1, -1, -1, 3336 642, 643, 644, -1, -1, -1, 219, -1, 221, 222, 3337 223, -1, 1523, -1, -1, -1, -1, -1, 1523, 661, 3338 -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3339 19, 20, 21, 22, 23, 24, 25, 26, 27, 155, 3340 29, 30, 31, -1, 257, -1, -1, -1, 261, 38, 3341 -1, -1, -1, 169, 696, -1, -1, -1, -1, -1, 3342 -1, -1, -1, -1, 277, -1, -1, -1, -1, -1, 3343 -1, -1, -1, -1, -1, 717, 192, 66, -1, -1, 3344 -1, -1, -1, -1, 73, 74, -1, -1, 77, -1, 3345 206, -1, -1, 735, -1, 737, -1, -1, -1, 215, 3346 -1, -1, -1, -1, -1, -1, -1, -1, -1, 225, 3347 -1, -1, -1, -1, 327, -1, -1, -1, -1, 108, 3348 -1, 110, 36, 37, -1, 39, -1, -1, -1, 118, 3349 772, -1, -1, -1, 250, 348, -1, -1, -1, 255, 3350 353, 354, -1, -1, -1, -1, -1, -1, 361, -1, 3351 -1, 65, 268, -1, -1, -1, -1, 71, 274, -1, 3352 276, 75, -1, -1, 78, 79, 80, 81, 82, 83, 3353 -1, 85, 86, -1, -1, -1, -1, -1, 294, 93, 3354 -1, -1, -1, -1, -1, 827, -1, -1, -1, 831, 3355 -1, 404, 834, -1, 108, -1, 110, -1, -1, 113, 3356 -1, -1, -1, 117, 118, 119, 120, 121, 122, 422, 3357 -1, -1, -1, -1, 427, -1, 429, -1, -1, -1, 3358 -1, 337, -1, -1, -1, -1, 342, -1, -1, -1, 3359 -1, -1, -1, 446, -1, -1, 449, 450, -1, -1, 3360 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3361 -1, -1, 465, -1, 370, -1, -1, -1, 374, 375, 3362 -1, 377, -1, -1, -1, -1, 479, -1, 384, 385, 3363 -1, 387, 388, 486, 390, -1, 392, -1, -1, -1, 3364 -1, -1, -1, 7, -1, 927, 10, 11, 12, 13, 3365 14, -1, -1, 409, -1, -1, -1, -1, -1, -1, 3366 -1, 417, -1, -1, -1, -1, -1, -1, -1, -1, 3367 -1, -1, 36, 37, 38, 39, -1, -1, -1, -1, 3368 -1, -1, -1, -1, -1, -1, 442, 969, -1, -1, 3369 -1, -1, -1, -1, -1, -1, -1, 453, -1, -1, 3370 -1, 65, 66, 985, -1, -1, -1, 71, -1, -1, 3371 -1, 75, -1, -1, 78, 79, 80, 81, 82, 83, 3372 476, 85, 86, -1, -1, -1, 482, -1, -1, 93, 3373 -1, 487, -1, -1, -1, -1, -1, -1, 1020, -1, 3374 -1, -1, -1, -1, 108, -1, 110, -1, -1, 602, 3375 -1, -1, -1, 117, 118, 119, 120, 121, 122, 1041, 3376 1042, -1, -1, -1, -1, -1, -1, -1, 524, -1, 3377 -1, -1, -1, -1, -1, -1, -1, 630, 280, -1, 3378 282, 283, 635, -1, 540, -1, -1, -1, 290, 291, 3379 -1, -1, -1, 295, 296, -1, -1, -1, -1, -1, 3380 -1, -1, -1, -1, -1, 307, -1, -1, -1, -1, 3381 -1, -1, -1, -1, -1, 36, 37, -1, 39, 1101, 3382 -1, 577, -1, -1, -1, -1, -1, -1, -1, -1, 3383 586, -1, -1, -1, -1, -1, -1, 593, -1, -1, 3384 -1, 343, 598, -1, 65, -1, -1, -1, -1, -1, 3385 71, -1, -1, 609, 75, -1, -1, 78, 79, 80, 3386 81, 82, 83, -1, 85, 86, -1, -1, -1, -1, 3387 723, -1, 93, -1, -1, -1, -1, 379, 1160, -1, 3388 -1, -1, -1, -1, 737, -1, -1, 108, -1, 110, 3389 -1, -1, -1, -1, 650, 116, 117, 118, 119, 120, 3390 121, 122, -1, -1, 757, -1, -1, -1, -1, -1, 3391 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3392 1202, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3393 686, -1, -1, -1, -1, 10, 11, 12, 13, 14, 3394 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3395 25, 26, 27, -1, 29, 30, 31, -1, 1240, -1, 3396 -1, -1, -1, 38, -1, 818, -1, -1, -1, -1, 3397 -1, -1, -1, -1, -1, -1, -1, -1, 831, -1, 3398 -1, -1, -1, -1, -1, 741, -1, -1, -1, -1, 3399 -1, 66, -1, -1, -1, 751, 752, 850, 73, 74, 3400 -1, -1, 77, -1, -1, -1, -1, 1289, 1290, 765, 3401 -1, -1, -1, -1, -1, -1, 1298, -1, -1, -1, 3402 -1, -1, -1, -1, -1, -1, 782, -1, 784, -1, 3403 -1, -1, 788, 108, -1, 110, -1, -1, -1, -1, 3404 -1, -1, -1, 118, -1, -1, -1, -1, -1, -1, 3405 -1, -1, -1, -1, 556, 557, 558, 559, 560, 561, 3406 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 3407 572, 573, -1, -1, -1, -1, -1, -1, -1, -1, 3408 36, 37, -1, 39, 937, -1, -1, -1, -1, -1, 3409 -1, -1, -1, -1, -1, -1, -1, 599, 854, -1, 3410 -1, -1, -1, -1, -1, 861, -1, -1, -1, 65, 3411 963, -1, -1, -1, -1, 71, -1, -1, 874, 75, 3412 876, -1, 78, 79, 80, 81, 82, 83, -1, 85, 3413 86, -1, 1414, -1, 890, -1, -1, 93, 991, -1, 3414 -1, 897, -1, -1, -1, -1, -1, -1, -1, -1, 3415 -1, -1, 108, 909, 110, -1, 912, -1, -1, 115, 3416 -1, 117, 118, 119, 120, 121, 122, -1, -1, -1, 3417 1023, -1, -1, -1, 930, -1, -1, -1, -1, -1, 3418 -1, 1034, -1, -1, -1, -1, -1, -1, -1, -1, 3419 1472, -1, 1474, -1, -1, -1, 698, -1, 10, 11, 3420 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3421 22, 23, 24, 25, 26, 27, -1, -1, 720, -1, 3422 -1, -1, -1, -1, -1, -1, 38, 1509, -1, 1511, 3423 -1, 733, 10, 11, 12, 13, 14, 15, 16, 17, 3424 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3425 -1, 29, 30, 31, 66, -1, -1, 1539, -1, -1, 3426 38, -1, 1115, 1019, -1, 77, -1, -1, -1, 153, 3427 154, -1, -1, -1, -1, -1, -1, 779, -1, -1, 3428 -1, -1, -1, -1, -1, -1, -1, -1, 66, -1, 3429 -1, -1, -1, 71, -1, 73, 74, 75, -1, 77, 3430 -1, -1, -1, 187, 82, 83, -1, -1, -1, 811, 3431 194, -1, -1, -1, -1, -1, -1, -1, -1, 1075, 3432 -1, -1, -1, -1, 826, -1, 1082, -1, -1, -1, 3433 108, -1, 110, -1, -1, -1, -1, -1, -1, -1, 3434 118, 36, 37, -1, 39, -1, -1, -1, -1, 1202, 3435 -1, -1, -1, -1, -1, 1111, -1, -1, -1, -1, 3436 1116, -1, -1, -1, -1, -1, -1, -1, 1124, -1, 3437 65, -1, -1, -1, -1, -1, 71, -1, 73, 74, 3438 75, -1, 266, 78, 79, 80, 81, 82, 83, -1, 3439 85, 86, -1, -1, -1, -1, -1, -1, 93, 1155, 3440 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3441 -1, 1167, -1, 108, 1170, 110, 1172, 112, 113, -1, 3442 -1, -1, 117, 118, 119, 120, 121, 122, -1, -1, 3443 1186, 1187, -1, -1, -1, -1, -1, -1, 322, -1, 3444 -1, -1, -1, -1, -1, 1298, 330, 331, -1, 333, 3445 334, -1, 1208, -1, -1, -1, -1, -1, -1, 343, 3446 -1, -1, -1, 347, -1, -1, -1, -1, -1, -1, 3447 -1, -1, -1, -1, -1, 977, -1, -1, -1, 1235, 3448 144, -1, 366, -1, -1, 369, -1, -1, -1, -1, 3449 154, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3450 -1, -1, 166, 167, -1, -1, 1008, -1, -1, -1, 3451 -1, -1, 396, -1, -1, -1, 400, -1, 1020, 4, 3452 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3453 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3454 25, 26, -1, -1, 29, 30, 31, 431, -1, -1, 3455 -1, -1, -1, 38, -1, -1, -1, -1, -1, 1061, 3456 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3457 454, -1, -1, 237, -1, -1, 1332, -1, 1334, -1, 3458 -1, 66, -1, 68, -1, 70, -1, -1, 73, 74, 3459 -1, 1347, -1, 1349, -1, -1, -1, -1, 262, -1, 3460 -1, 485, -1, -1, 488, -1, -1, -1, -1, -1, 3461 -1, 1367, -1, -1, -1, -1, -1, -1, -1, -1, 3462 -1, -1, -1, -1, 109, 110, -1, 1383, 1384, -1, 3463 -1, 1133, -1, 118, -1, -1, -1, -1, -1, 1395, 3464 -1, -1, 1398, -1, 528, -1, -1, 531, 532, -1, 3465 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3466 -1, -1, -1, -1, 1420, -1, -1, -1, -1, -1, 3467 -1, -1, -1, 1429, -1, 1177, 1432, -1, 1434, 1435, 3468 1436, -1, -1, -1, -1, -1, -1, -1, -1, 1191, 3469 1192, -1, -1, 577, 578, -1, -1, -1, -1, -1, 3470 -1, 1554, -1, -1, -1, -1, -1, -1, -1, -1, 3471 -1, -1, 596, 597, 378, 599, -1, -1, -1, -1, 3472 1476, -1, 1478, -1, 608, 1481, 610, 611, -1, -1, 3473 -1, -1, -1, 617, -1, -1, -1, -1, -1, -1, 3474 1496, -1, -1, 627, 628, -1, -1, -1, -1, 633, 3475 -1, -1, -1, -1, -1, -1, -1, -1, 642, 643, 3476 644, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3477 -1, -1, -1, -1, -1, -1, -1, 661, -1, -1, 3478 -1, -1, 666, 667, -1, -1, 670, 671, -1, -1, 3479 -1, -1, -1, 677, -1, -1, -1, -1, -1, -1, 3480 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3481 -1, 695, 696, 697, -1, 699, 480, -1, -1, 703, 3482 -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3483 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, 3484 29, 30, 31, -1, -1, -1, -1, -1, -1, 38, 3485 -1, 735, 736, -1, -1, 519, -1, -1, -1, -1, 3486 -1, -1, -1, -1, -1, -1, -1, -1, 532, -1, 3487 -1, -1, -1, -1, -1, 539, -1, 66, 542, -1, 3488 -1, -1, -1, -1, 73, 74, -1, 771, 772, 553, 3489 554, -1, 776, 777, -1, -1, -1, -1, -1, 1401, 3490 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3491 -1, 575, -1, -1, -1, -1, 1418, -1, -1, -1, 3492 -1, 585, -1, -1, -1, -1, -1, -1, 592, 118, 3493 -1, -1, -1, 597, 818, -1, -1, -1, -1, -1, 3494 -1, -1, -1, 827, -1, -1, -1, -1, -1, 833, 3495 834, -1, -1, -1, 838, -1, 840, -1, -1, -1, 3496 -1, -1, -1, -1, -1, -1, 850, -1, -1, -1, 3497 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3498 -1, -1, -1, 647, -1, -1, -1, -1, -1, 1491, 3499 1492, -1, 656, -1, -1, -1, -1, -1, -1, 3, 3500 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 3501 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3502 24, 25, 26, -1, -1, 29, 30, 31, 32, -1, 3503 -1, 35, 696, -1, 38, 39, -1, -1, -1, 923, 3504 -1, -1, -1, -1, -1, -1, -1, 931, 36, 37, 3505 -1, 39, -1, 937, -1, -1, -1, -1, -1, 63, 3506 -1, 945, 66, -1, 68, -1, 70, 71, -1, 73, 3507 74, 75, -1, -1, 958, 959, -1, 65, 82, 83, 3508 -1, -1, -1, 71, -1, -1, -1, 75, -1, -1, 3509 78, 79, 80, 81, 82, 83, -1, 85, 86, -1, 3510 -1, 985, -1, -1, 108, 93, 110, 991, 772, -1, 3511 774, -1, -1, -1, 118, -1, 780, -1, -1, -1, 3512 108, -1, 110, 787, -1, 113, 1010, 1011, -1, 117, 3513 118, 119, 120, 121, 122, -1, 1020, -1, -1, -1, 3514 -1, -1, 1026, 1027, -1, 1029, 1030, 1031, -1, -1, 3515 -1, -1, -1, -1, -1, -1, -1, 1041, 1042, -1, 3516 -1, -1, -1, -1, -1, -1, -1, 831, 832, -1, 3517 834, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3518 -1, -1, -1, -1, -1, 849, -1, -1, -1, -1, 3519 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3520 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3521 -1, -1, -1, -1, -1, -1, -1, -1, 1102, 1103, 3522 1104, -1, -1, -1, -1, 889, -1, -1, -1, 893, 3523 -1, 1115, -1, -1, -1, -1, 3, 4, 5, 6, 3524 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 3525 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3526 -1, -1, 29, 30, 31, 32, -1, -1, 35, 36, 3527 37, 38, 39, 40, -1, 42, 1160, -1, 45, 46, 3528 47, 48, 49, 50, 51, 52, -1, -1, -1, 56, 3529 -1, -1, -1, 60, 61, -1, 63, -1, 65, 66, 3530 -1, 68, -1, 70, 71, 969, 73, 74, 75, -1, 3531 -1, 78, 79, 80, 81, 82, 83, -1, 85, 86, 3532 -1, 985, 986, -1, -1, -1, 93, -1, 992, -1, 3533 -1, -1, 36, 37, 998, 39, 1220, 1001, -1, 1003, 3534 -1, 108, -1, 110, -1, -1, 113, -1, -1, -1, 3535 117, 118, 119, 120, 121, 122, 1240, -1, -1, 1023, 3536 127, 65, -1, -1, 131, -1, -1, 71, -1, -1, 3537 1034, 75, -1, -1, 78, 79, 80, 81, 82, 83, 3538 -1, 85, 86, -1, -1, -1, -1, -1, -1, 93, 3539 -1, -1, 1056, -1, 1058, -1, -1, -1, -1, -1, 3540 -1, -1, -1, -1, 108, 1289, 1290, -1, -1, 1073, 3541 1074, -1, -1, 117, 118, 119, 120, 121, 122, -1, 3542 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3543 1094, -1, -1, -1, -1, -1, -1, -1, 3, 4, 3544 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3545 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3546 25, 26, -1, -1, 29, 30, 31, 32, -1, -1, 3547 35, 36, 37, 38, 39, -1, -1, 1141, -1, -1, 3548 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3549 36, 37, -1, 39, -1, -1, 1160, -1, -1, -1, 3550 65, 66, -1, 68, -1, 70, 71, -1, 73, 74, 3551 75, 1175, 1176, 78, 79, 80, 81, 82, 83, 65, 3552 85, 86, -1, -1, -1, 71, -1, -1, 93, 75, 3553 1414, -1, 78, 79, 80, 81, 82, 83, -1, 85, 3554 86, -1, -1, 108, -1, 110, -1, 93, -1, -1, 3555 -1, -1, 117, 118, 119, 120, 121, 122, -1, -1, 3556 -1, -1, 108, -1, 110, -1, 131, -1, -1, -1, 3557 -1, 117, 118, 119, 120, 121, 122, -1, -1, -1, 3558 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3559 -1, -1, 1256, -1, -1, -1, 3, 4, 5, 6, 3560 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 3561 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3562 1504, -1, 29, 30, 31, 32, -1, -1, 35, 36, 3563 37, 38, 39, -1, -1, -1, -1, -1, -1, -1, 3564 -1, -1, -1, -1, -1, 1529, 1530, -1, -1, -1, 3565 -1, -1, -1, 1317, -1, 1319, -1, -1, 65, 66, 3566 -1, 68, -1, 70, 71, -1, 73, 74, 75, -1, 3567 1554, 78, 79, 80, 81, 82, 83, -1, 85, 86, 3568 -1, -1, -1, -1, -1, -1, 93, -1, -1, -1, 3569 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3570 -1, 108, -1, 110, -1, -1, -1, -1, -1, -1, 3571 117, 118, 119, 120, 121, 122, -1, -1, 4, 5, 2415 3572 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2416 3573 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2417 0, 0, 26, 27, 28, 29, 0, 0, 30, 0, 2418 0, 31, 0, 830, 413, 1239, 0, 0, 0, 0, 2419 0, 0, 0, 0, 0, 0, 0, 622, 0, 0, 2420 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 2421 0, 35, 0, 36, 0, 0, 38, 39, 0, 0, 2422 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2423 0, 0, 0, 0, 0, 0, 1140, 1141, 0, 0, 2424 0, 0, 363, 381, 0, 0, 0, 281, 282, 996, 2425 283, 0, 1150, 44, 769, 0, 0, 0, 0, 0, 2426 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 2427 0, 0, 0, 0, 1166, 0, 284, 0, 0, 0, 2428 0, 0, 285, 0, 0, 1181, 286, 0, 0, 287, 2429 288, 289, 290, 41, 42, 0, 291, 292, 0, 0, 2430 0, 0, 341, 0, 293, 281, 282, 381, 283, 1199, 2431 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 2432 0, 378, 0, 363, 996, 996, 0, 0, 296, 380, 2433 298, 299, 300, 301, 284, 0, 0, 0, 0, 0, 2434 285, 0, 0, 0, 286, 1231, 0, 287, 288, 289, 2435 290, 41, 42, 0, 291, 292, 0, 0, 0, 0, 2436 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 2437 0, 0, 363, 363, 0, 0, 0, 294, 0, 378, 2438 0, 0, 0, 0, 0, 0, 296, 734, 298, 299, 2439 300, 301, 0, 996, 0, 0, 0, 0, 0, 0, 2440 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2441 0, 0, 889, 0, 0, 0, 0, 0, 0, 0, 2442 0, 0, 0, 0, 0, 0, 0, 1284, 1285, 0, 2443 0, 0, 0, 0, 0, 1, 2, 205, 4, 5, 3574 26, 1405, -1, 29, 30, 31, -1, -1, -1, -1, 3575 36, 37, 38, 39, -1, 10, 11, 12, 13, 14, 3576 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3577 25, 26, -1, -1, 29, 30, 31, -1, -1, 65, 3578 66, -1, 68, 38, 70, 71, -1, 73, 74, 75, 3579 -1, -1, 78, 79, 80, 81, 82, 83, -1, 85, 3580 86, -1, -1, -1, -1, -1, -1, 93, -1, -1, 3581 -1, 66, -1, -1, -1, -1, 71, -1, 73, 74, 3582 -1, -1, 108, 1487, 110, -1, -1, 82, 83, 115, 3583 -1, 117, 118, 119, 120, 121, 122, 4, 5, 6, 3584 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 3585 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3586 -1, -1, 29, 30, 31, -1, -1, -1, -1, 36, 3587 37, 38, 39, -1, -1, 1539, -1, 10, 11, 12, 3588 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3589 23, 24, 25, 26, 27, -1, -1, -1, 65, 66, 3590 -1, 68, -1, 70, 71, 38, 73, 74, 75, -1, 3591 -1, 78, 79, 80, 81, 82, 83, -1, 85, 86, 3592 -1, -1, -1, -1, -1, -1, 93, -1, -1, -1, 3593 -1, -1, -1, 66, -1, -1, -1, -1, -1, -1, 3594 -1, 108, -1, 110, 77, -1, -1, -1, 115, -1, 3595 117, 118, 119, 120, 121, 122, 4, 5, 6, 7, 3596 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3597 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, 3598 -1, 29, 30, 31, -1, -1, -1, -1, 36, 37, 3599 38, 39, -1, 10, 11, 12, 13, 14, 15, 16, 3600 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3601 -1, -1, 29, 30, 31, -1, -1, 65, 66, -1, 3602 68, 38, 70, 71, -1, 73, 74, 75, -1, -1, 3603 78, 79, 80, 81, 82, 83, -1, 85, 86, -1, 3604 -1, -1, -1, -1, -1, 93, -1, -1, -1, 66, 3605 -1, -1, -1, -1, -1, -1, 73, 74, -1, -1, 3606 108, -1, 110, -1, -1, -1, -1, 115, -1, 117, 3607 118, 119, 120, 121, 122, 4, 5, 6, 7, 8, 3608 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3609 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, 3610 29, 30, 31, -1, -1, -1, -1, 36, 37, 38, 3611 39, -1, 10, 11, 12, 13, 14, 15, 16, 17, 3612 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, 3613 -1, 29, 30, 31, -1, -1, 65, 66, -1, 68, 3614 38, 70, 71, -1, 73, 74, 75, -1, -1, 78, 3615 79, 80, 81, 82, 83, -1, 85, 86, -1, -1, 3616 -1, -1, -1, -1, 93, -1, -1, -1, 66, -1, 3617 -1, -1, -1, -1, -1, 73, 74, -1, -1, 108, 3618 -1, 110, -1, -1, -1, -1, -1, -1, 117, 118, 3619 119, 120, 121, 122, 4, 5, 6, 7, 8, 9, 3620 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3621 20, 21, 22, 23, 24, 25, 26, -1, -1, 29, 3622 30, 31, -1, -1, -1, -1, 36, 37, 38, 39, 3623 -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3624 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, 3625 -1, -1, -1, -1, -1, 65, 66, -1, 68, 38, 3626 70, 71, -1, 73, 74, 75, -1, -1, 78, 79, 3627 80, 81, 82, 83, -1, 85, 86, -1, -1, -1, 3628 -1, -1, -1, 93, -1, -1, -1, 66, -1, -1, 3629 -1, -1, -1, -1, -1, -1, -1, -1, 108, -1, 3630 110, -1, -1, -1, -1, -1, -1, 117, 118, 119, 3631 120, 121, 122, 4, 5, 6, 7, 8, 9, 10, 3632 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3633 21, 22, 23, 24, 25, 26, -1, -1, 29, 30, 3634 31, -1, -1, -1, -1, 36, 37, 38, 39, -1, 3635 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3636 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3637 -1, -1, -1, -1, 65, 66, -1, 68, -1, 70, 3638 71, -1, 73, 74, 75, -1, -1, 78, 79, 80, 3639 81, 82, 83, -1, 85, 86, -1, -1, -1, -1, 3640 -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, 3641 -1, -1, -1, -1, -1, -1, -1, 108, -1, 110, 3642 -1, -1, -1, -1, -1, -1, 117, 118, 119, 120, 3643 121, 122, 4, 5, 6, 7, 8, 9, 10, 11, 3644 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3645 22, 23, 24, 25, 26, -1, -1, 29, 30, 31, 3646 -1, -1, -1, -1, 36, 37, 38, 39, -1, -1, 3647 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3648 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3649 -1, -1, -1, 65, 66, -1, 68, -1, 70, 71, 3650 -1, 73, 74, 75, -1, -1, 78, 79, 80, 81, 3651 82, 83, -1, 85, 86, -1, -1, -1, -1, -1, 3652 -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, 3653 -1, -1, -1, -1, -1, -1, 108, -1, 110, -1, 3654 -1, -1, -1, -1, -1, 117, 118, 119, 120, 121, 3655 122, 3, 4, 5, 6, 7, 8, 9, 10, 11, 3656 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3657 22, 23, 24, 25, 26, -1, -1, 29, 30, 31, 3658 32, -1, -1, 35, -1, -1, 38, 39, -1, -1, 3659 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3660 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3661 -1, 63, -1, -1, 66, -1, 68, -1, 70, 71, 3662 -1, 73, 74, 75, -1, -1, -1, -1, -1, -1, 3663 82, 83, -1, -1, -1, -1, -1, -1, -1, -1, 3664 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3665 -1, -1, -1, -1, -1, -1, 108, -1, 110, -1, 3666 -1, -1, 114, -1, -1, -1, 118, 3, 4, 5, 2444 3667 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2445 3668 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2446 0, 0, 26, 27, 28, 29, 0, 0, 30, 281, 2447 282, 31, 1062, 1063, 0, 1064, 0, 0, 1065, 1066, 2448 1067, 1068, 1069, 1070, 1071, 1072, 0, 0, 0, 1073, 2449 0, 0, 0, 1074, 1075, 0, 33, 363, 284, 34, 2450 0, 35, 0, 36, 649, 0, 38, 39, 286, 996, 2451 0, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2452 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 2453 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2454 0, 294, 0, 1076, 0, 0, 170, 0, 0, 0, 2455 296, 297, 298, 299, 300, 301, 0, 0, 0, 0, 2456 1077, 0, 0, 0, -129, 0, 0, 0, 0, 0, 2457 1392, 0, 769, 0, 0, 0, 0, 0, 0, 0, 2458 0, 0, 0, 0, 0, 0, 0, 413, 8, 9, 3669 26, -1, -1, 29, 30, 31, -1, -1, -1, -1, 3670 -1, -1, 38, 10, 11, 12, 13, 14, 15, 16, 3671 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3672 -1, -1, 29, 30, 31, 32, 33, 34, -1, -1, 3673 66, 38, 68, -1, 70, 71, -1, 73, 74, 75, 3674 -1, -1, -1, -1, -1, -1, 82, 83, -1, -1, 3675 -1, -1, -1, -1, -1, -1, -1, -1, -1, 66, 3676 -1, -1, -1, -1, -1, -1, 73, 74, -1, -1, 3677 -1, -1, 108, -1, 110, -1, -1, -1, -1, -1, 3678 -1, -1, 118, 3, 4, 5, 6, 7, 8, 9, 2459 3679 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2460 20, 21, 22, 23, 24, 25, 0, 0, 26, 27, 2461 28, 0, 413, 413, 0, 0, 0, 31, 0, 0, 2462 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2463 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, 2464 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 2465 0, 0, 206, 39, 0, 0, 0, 0, 1452, 0, 2466 0, 0, 0, 0, 0, 1, 2, 205, 4, 5, 3680 20, 21, 22, 23, 24, 25, 26, 27, -1, 29, 3681 30, 31, 32, -1, -1, 35, -1, -1, 38, -1, 3682 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3683 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3684 -1, -1, -1, -1, -1, -1, 66, -1, 68, -1, 3685 70, -1, -1, 73, 74, -1, -1, 77, -1, 3, 3686 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 3687 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3688 24, 25, 26, -1, -1, 29, 30, 31, 32, -1, 3689 110, 35, -1, -1, 38, -1, -1, -1, 118, -1, 3690 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3691 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3692 -1, -1, 66, -1, 68, -1, 70, -1, -1, 73, 3693 74, -1, 3, 4, 5, 6, 7, 8, 9, 10, 3694 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3695 21, 22, 23, 24, 25, 26, -1, -1, 29, 30, 3696 31, -1, -1, -1, -1, -1, 110, 38, -1, -1, 3697 -1, -1, -1, -1, 118, -1, -1, -1, -1, -1, 3698 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3699 -1, -1, -1, -1, -1, 66, -1, 68, -1, 70, 3700 -1, -1, 73, 74, 4, 5, 6, 7, 8, 9, 3701 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3702 20, 21, 22, 23, 24, 25, 26, -1, -1, 29, 3703 30, 31, -1, -1, -1, -1, -1, -1, 38, 110, 3704 -1, -1, -1, -1, -1, -1, -1, 118, -1, -1, 3705 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3706 -1, -1, -1, -1, -1, -1, 66, -1, 68, -1, 3707 70, 71, -1, 73, 74, 75, -1, -1, -1, -1, 3708 -1, -1, 82, 83, -1, -1, 10, 11, 12, 13, 3709 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3710 24, 25, 26, -1, -1, 29, 30, 31, 108, -1, 3711 110, -1, -1, -1, 38, -1, -1, -1, 118, 4, 3712 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3713 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3714 25, 26, 66, -1, 29, 30, 31, 71, -1, 73, 3715 74, 75, -1, 38, -1, -1, -1, -1, 82, 83, 3716 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3717 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3718 -1, 66, -1, 68, 108, 70, 110, -1, 73, 74, 3719 -1, -1, -1, -1, 118, -1, -1, -1, -1, -1, 3720 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3721 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3722 -1, -1, -1, -1, -1, 110, -1, -1, -1, -1, 3723 -1, -1, -1, 118, 4, 5, 6, 7, 8, 9, 3724 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3725 20, 21, 22, 23, 24, 25, 26, -1, -1, 29, 3726 30, 31, -1, -1, -1, -1, -1, -1, 38, -1, 3727 -1, -1, -1, 10, 11, 12, 13, 14, 15, 16, 3728 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3729 -1, -1, 29, 30, 31, -1, 66, -1, 68, -1, 3730 70, 38, -1, 73, 74, -1, -1, -1, -1, -1, 3731 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3732 -1, -1, -1, -1, -1, 95, -1, -1, -1, 66, 3733 -1, -1, -1, -1, 71, -1, 73, 74, 75, -1, 3734 110, -1, -1, -1, -1, 82, 83, -1, 118, 4, 3735 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3736 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3737 25, 26, -1, 110, 29, 30, 31, -1, -1, -1, 3738 -1, 118, -1, 38, -1, -1, -1, -1, -1, -1, 3739 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3740 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3741 -1, 66, -1, 68, -1, 70, -1, -1, 73, 74, 3742 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 3743 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3744 24, 25, 26, -1, -1, 29, 30, 31, -1, -1, 3745 -1, -1, -1, -1, 38, 110, -1, -1, -1, -1, 3746 -1, -1, -1, 118, -1, -1, -1, -1, -1, -1, 3747 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3748 -1, -1, 66, -1, 68, -1, 70, -1, -1, 73, 3749 74, 4, 5, 6, 7, 8, 9, 10, 11, 12, 3750 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3751 23, 24, 25, 26, -1, -1, 29, 30, 31, -1, 3752 -1, -1, -1, -1, -1, 38, 110, -1, -1, -1, 3753 -1, -1, -1, -1, 118, -1, -1, -1, -1, -1, 3754 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3755 -1, -1, -1, 66, -1, 68, -1, 70, -1, -1, 3756 73, 74, 4, 5, 6, 7, 8, 9, 10, 11, 3757 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3758 22, 23, 24, 25, 26, -1, -1, 29, 30, 31, 3759 -1, -1, -1, -1, -1, -1, 38, 110, -1, -1, 3760 -1, -1, -1, -1, -1, 118, -1, -1, -1, -1, 3761 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3762 -1, -1, -1, -1, 66, -1, 68, -1, 70, -1, 3763 -1, 73, 74, 10, 11, 12, 13, 14, 15, 16, 3764 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3765 -1, -1, 29, 30, 31, -1, -1, -1, -1, 36, 3766 37, 38, 39, -1, -1, -1, -1, -1, 110, -1, 3767 -1, -1, -1, -1, -1, -1, 118, -1, -1, -1, 3768 -1, -1, -1, -1, -1, -1, -1, -1, 65, 66, 3769 -1, -1, -1, -1, 71, -1, 73, 74, 75, -1, 3770 -1, 78, 79, 80, 81, 82, 83, -1, 85, 86, 3771 -1, -1, -1, -1, -1, -1, 93, -1, -1, -1, 3772 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3773 -1, 108, -1, 110, -1, -1, 113, -1, -1, -1, 3774 117, 118, 119, 120, 121, 122, 10, 11, 12, 13, 3775 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3776 24, 25, 26, -1, -1, 29, 30, 31, -1, -1, 3777 -1, -1, 36, 37, 38, 39, 10, 11, 12, 13, 3778 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3779 24, 25, 26, 27, -1, 29, 30, 31, -1, -1, 3780 -1, 65, 66, -1, 38, -1, -1, 71, -1, 73, 3781 74, 75, -1, -1, 78, 79, 80, 81, 82, 83, 3782 -1, 85, 86, -1, -1, -1, -1, -1, -1, 93, 3783 -1, -1, 66, -1, -1, -1, -1, 71, -1, 73, 3784 74, 75, -1, 77, 108, -1, 110, 111, 82, 83, 3785 -1, -1, -1, 117, 118, 119, 120, 121, 122, 10, 3786 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3787 21, 22, 23, 24, 25, 26, 110, -1, 29, 30, 3788 31, -1, -1, -1, 118, 36, 37, 38, 39, 10, 3789 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3790 21, 22, 23, 24, 25, 26, -1, -1, 29, 30, 3791 31, -1, -1, -1, 65, 66, -1, 38, -1, -1, 3792 71, -1, 73, 74, 75, -1, -1, 78, 79, 80, 3793 81, 82, 83, -1, 85, 86, -1, -1, -1, -1, 3794 -1, -1, 93, -1, -1, 66, -1, -1, -1, -1, 3795 71, -1, 73, 74, -1, -1, -1, 108, 109, 110, 3796 -1, 82, 83, -1, -1, -1, 117, 118, 119, 120, 3797 121, 122, 10, 11, 12, 13, 14, 15, 16, 17, 3798 18, 19, 20, 21, 22, 23, 24, 25, 26, 110, 3799 -1, 29, 30, 31, -1, -1, -1, 118, 36, 37, 3800 38, 39, 10, 11, 12, 13, 14, 15, 16, 17, 3801 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, 3802 -1, 29, 30, 31, -1, -1, -1, 65, 66, -1, 3803 38, 39, -1, 71, -1, 73, 74, 75, -1, -1, 3804 78, 79, 80, 81, 82, 83, -1, 85, 86, -1, 3805 -1, -1, -1, -1, -1, 93, -1, -1, 66, -1, 3806 -1, -1, -1, -1, -1, 73, 74, -1, -1, -1, 3807 108, -1, 110, -1, -1, -1, -1, -1, -1, 117, 3808 118, 119, 120, 121, 122, 10, 11, 12, 13, 14, 3809 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3810 25, 26, 110, -1, 29, 30, 31, -1, -1, -1, 3811 118, 36, 37, 38, 39, -1, -1, -1, -1, -1, 3812 -1, -1, -1, 10, 11, 12, 13, 14, 15, 16, 3813 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3814 65, 66, 29, 30, 31, -1, 71, -1, 73, 74, 3815 75, 38, -1, 78, 79, 80, 81, 82, 83, -1, 3816 85, 86, -1, -1, -1, -1, -1, -1, 93, -1, 3817 -1, -1, -1, -1, -1, -1, -1, -1, -1, 66, 3818 -1, -1, -1, 108, -1, 110, 73, 74, -1, -1, 3819 -1, -1, 117, 118, 119, 120, 121, 122, 10, 11, 3820 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3821 22, 23, 24, 25, 26, -1, -1, 29, 30, 31, 3822 -1, 108, -1, 110, 36, 37, 38, 39, -1, -1, 3823 -1, 118, -1, -1, -1, -1, 10, 11, 12, 13, 3824 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3825 24, 25, 26, 65, 66, 29, 30, 31, -1, 71, 3826 -1, 73, 74, 75, 38, -1, 78, 79, 80, 81, 3827 82, 83, -1, 85, 86, -1, -1, -1, -1, -1, 3828 -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, 3829 -1, -1, 66, -1, -1, -1, 108, -1, 110, 73, 3830 74, -1, -1, -1, -1, 117, 118, 119, 120, 121, 3831 122, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3832 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, 3833 29, 30, 31, -1, 108, -1, 110, 36, 37, 38, 3834 39, -1, -1, -1, 118, -1, -1, -1, -1, 10, 3835 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 3836 21, 22, 23, 24, 25, 26, 65, 66, 29, 30, 3837 31, -1, 71, -1, 73, 74, 75, 38, 39, 78, 3838 79, 80, 81, 82, 83, -1, 85, 86, -1, -1, 3839 -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, 3840 -1, -1, -1, -1, -1, 66, -1, -1, -1, 108, 3841 -1, 110, 73, 74, -1, -1, -1, -1, 117, 118, 3842 119, 120, 121, 122, 3, 4, 5, 6, 7, 8, 3843 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3844 19, 20, 21, 22, 23, 24, 25, 26, -1, 110, 3845 29, 30, 31, 114, -1, -1, -1, 118, -1, 38, 3846 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3847 20, 21, 22, 23, 24, 25, 26, -1, -1, 29, 3848 30, 31, -1, -1, -1, -1, -1, 66, 38, 68, 3849 -1, 70, -1, -1, 73, 74, -1, -1, 10, 11, 3850 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3851 22, 23, 24, 25, 26, -1, 66, 29, 30, 31, 3852 -1, 71, -1, 73, 74, 75, 38, -1, -1, -1, 3853 -1, -1, 82, 83, 113, -1, 10, 11, 12, 13, 3854 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3855 24, 25, 26, -1, 66, 29, 30, 31, 108, 71, 3856 110, 73, 74, 75, 38, -1, -1, -1, 118, -1, 3857 82, 83, -1, -1, 10, 11, 12, 13, 14, 15, 3858 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3859 26, -1, 66, 29, 30, 31, 108, -1, 110, 73, 3860 74, -1, 38, -1, -1, -1, 118, 10, 11, 12, 3861 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3862 23, 24, 25, 26, -1, -1, 29, 30, 31, -1, 3863 66, -1, -1, -1, -1, 38, 110, 73, 74, -1, 3864 -1, -1, -1, -1, 118, 10, 11, 12, 13, 14, 3865 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3866 25, 26, -1, 66, 29, 30, 31, -1, -1, -1, 3867 73, 74, -1, 38, 110, -1, -1, -1, -1, -1, 3868 -1, -1, 118, 10, 11, 12, 13, 14, 15, 16, 3869 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3870 -1, 66, 29, 30, 31, -1, -1, 110, 73, 74, 3871 -1, 38, -1, -1, -1, 118, 10, 11, 12, 13, 3872 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3873 24, 25, 26, -1, -1, 29, 30, 31, -1, 66, 3874 -1, -1, -1, -1, 38, 110, 73, 74, -1, -1, 3875 -1, -1, -1, 118, 10, 11, 12, 13, 14, 15, 3876 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3877 26, -1, 66, 29, 30, 31, -1, -1, -1, 73, 3878 74, -1, 38, 110, -1, -1, -1, -1, -1, -1, 3879 -1, 118, 10, 11, 12, 13, 14, 15, 16, 17, 3880 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, 3881 66, 29, 30, 31, -1, -1, 110, 73, 74, -1, 3882 38, -1, -1, -1, 118, 10, 11, 12, 13, 14, 3883 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3884 25, 26, -1, -1, 29, 30, 31, -1, 66, -1, 3885 -1, -1, -1, 38, 110, 73, 74, -1, -1, -1, 3886 -1, -1, 118, 10, 11, 12, 13, 14, 15, 16, 3887 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3888 -1, 66, 29, 30, 31, -1, -1, -1, 73, 74, 3889 -1, 38, 110, -1, -1, -1, -1, -1, -1, -1, 3890 118, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3891 -1, -1, -1, -1, -1, -1, -1, -1, -1, 66, 3892 -1, -1, -1, -1, -1, 110, 73, 74, -1, -1, 3893 -1, -1, -1, 118, 4, 5, 6, 7, 8, 9, 3894 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3895 20, 21, 22, 23, 24, 25, 26, -1, -1, 29, 3896 30, 31, -1, 110, -1, -1, -1, -1, 38, -1, 3897 -1, 118, -1, -1, -1, -1, -1, -1, -1, -1, 3898 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3899 -1, -1, -1, -1, -1, -1, 66, -1, 68, -1, 3900 70, -1, -1, 73, 74, 36, 37, -1, 39, 40, 3901 -1, 42, -1, -1, 45, 46, 47, 48, 49, 50, 3902 51, 52, -1, -1, 55, 56, -1, -1, -1, 60, 3903 61, -1, 63, -1, 65, -1, -1, -1, -1, 109, 3904 71, -1, -1, -1, 75, -1, -1, 78, 79, 80, 3905 81, 82, 83, -1, 85, 86, -1, -1, -1, -1, 3906 -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, 3907 -1, -1, -1, -1, -1, -1, -1, 108, -1, 110, 3908 -1, -1, 113, -1, -1, -1, 117, 118, 119, 120, 3909 121, 122, -1, -1, -1, -1, 127, -1, 36, 37, 3910 131, 39, 40, -1, 42, -1, -1, 45, 46, 47, 3911 48, 49, 50, 51, 52, -1, -1, -1, 56, -1, 3912 -1, -1, 60, 61, -1, 63, -1, 65, -1, -1, 3913 -1, -1, -1, 71, -1, -1, -1, 75, -1, -1, 3914 78, 79, 80, 81, 82, 83, -1, 85, 86, -1, 3915 -1, -1, -1, -1, -1, 93, -1, -1, -1, -1, 3916 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3917 108, -1, 110, -1, -1, 113, -1, -1, -1, 117, 3918 118, 119, 120, 121, 122, -1, -1, -1, -1, 127, 3919 -1, 36, 37, 131, 39, 40, -1, 42, 43, 44, 3920 45, 46, 47, 48, 49, 50, 51, 52, -1, -1, 3921 55, 56, -1, -1, -1, 60, 61, -1, 63, -1, 3922 65, -1, -1, -1, -1, -1, 71, -1, -1, -1, 3923 75, -1, -1, 78, 79, 80, 81, 82, 83, -1, 3924 85, 86, -1, -1, -1, -1, -1, -1, 93, -1, 3925 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3926 -1, -1, -1, 108, -1, 110, -1, -1, 113, -1, 3927 -1, -1, 117, 118, 119, 120, 121, 122, -1, -1, 3928 36, 37, 127, 39, 40, -1, 42, 43, 44, 45, 3929 46, 47, 48, 49, 50, 51, 52, -1, -1, -1, 3930 56, -1, -1, -1, 60, 61, -1, 63, -1, 65, 3931 -1, -1, -1, -1, -1, 71, -1, -1, -1, 75, 3932 -1, -1, 78, 79, 80, 81, 82, 83, -1, 85, 3933 86, -1, -1, -1, -1, -1, -1, 93, -1, -1, 3934 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3935 -1, -1, 108, -1, 110, -1, -1, 113, -1, -1, 3936 -1, 117, 118, 119, 120, 121, 122, -1, -1, 36, 3937 37, 127, 39, 40, -1, 42, -1, -1, 45, 46, 3938 47, 48, 49, 50, 51, 52, -1, -1, -1, 56, 3939 -1, -1, -1, 60, 61, -1, 63, -1, 65, -1, 3940 -1, -1, -1, -1, 71, -1, -1, -1, 75, -1, 3941 -1, 78, 79, 80, 81, 82, 83, -1, 85, 86, 3942 -1, -1, -1, -1, -1, -1, 93, -1, -1, -1, 3943 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3944 -1, 108, -1, 110, -1, -1, 113, -1, -1, -1, 3945 117, 118, 119, 120, 121, 122, -1, -1, -1, -1, 3946 127, 4, 5, 6, 7, 8, 9, 10, 11, 12, 3947 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3948 23, 24, 25, 26, -1, -1, 29, 30, 31, -1, 3949 -1, -1, -1, -1, -1, 38, -1, 36, 37, -1, 3950 39, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3951 -1, -1, -1, -1, -1, -1, 36, 37, -1, 39, 3952 -1, -1, -1, 66, -1, 68, 65, 70, -1, -1, 3953 73, 74, 71, -1, -1, -1, 75, -1, -1, 78, 3954 79, 80, 81, 82, 83, 65, 85, 86, -1, -1, 3955 -1, 71, 95, -1, 93, 75, -1, -1, 78, 79, 3956 80, 81, 82, 83, -1, 85, 86, -1, -1, 108, 3957 -1, 110, -1, 93, 36, 37, -1, 39, 117, 118, 3958 119, 120, 121, 122, -1, -1, -1, -1, 108, -1, 3959 110, -1, -1, 36, 37, -1, 39, 117, 118, 119, 3960 120, 121, 122, 65, -1, -1, -1, -1, -1, 71, 3961 -1, -1, -1, 75, -1, -1, 78, 79, 80, 81, 3962 82, 83, 65, 85, 86, -1, -1, -1, 71, -1, 3963 -1, 93, 75, -1, -1, 78, 79, 80, 81, 82, 3964 83, -1, 85, 86, -1, -1, 108, -1, 110, -1, 3965 93, 36, 37, -1, 39, 117, 118, 119, 120, 121, 3966 122, -1, -1, -1, -1, 108, -1, -1, -1, -1, 3967 -1, -1, -1, -1, 117, 118, 119, 120, 121, 122, 3968 65, -1, -1, -1, -1, -1, 71, -1, -1, -1, 3969 75, -1, -1, 78, 79, 80, 81, 82, 83, -1, 3970 85, 86, -1, -1, -1, -1, -1, -1, 93, -1, 3971 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3972 -1, -1, -1, 108, -1, -1, -1, -1, -1, -1, 3973 -1, -1, 117, 118, 119, 120, 121, 122, 4, 5, 2467 3974 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2468 3975 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2469 0, 0, 26, 27, 28, 29, 0, 629, 30, 281, 2470 282, 31, 283, 8, 9, 10, 11, 12, 13, 14, 2471 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2472 25, 0, 0, 26, 27, 28, 0, 0, 284, 34, 2473 0, 35, 31, 36, 285, 0, 38, 39, 286, 0, 2474 1518, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2475 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 2476 34, 0, 0, 0, 0, 109, 0, 38, 39, 0, 2477 0, 294, 0, 1076, 0, 0, 41, 42, 0, 0, 2478 296, 297, 298, 299, 300, 301, 0, 0, 0, 0, 2479 0, 0, 321, 0, -129, 1, 2, 205, 4, 5, 2480 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2481 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2482 0, 0, 26, 27, 28, 29, 0, 0, 30, 281, 2483 282, 31, 283, 8, 9, 10, 11, 12, 13, 14, 2484 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2485 25, 0, 0, 26, 27, 28, 0, 0, 284, 34, 2486 0, 35, 31, 36, 285, 0, 38, 39, 286, 0, 2487 0, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2488 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 2489 34, 0, 0, 0, 0, 0, 0, 206, 39, 0, 2490 0, 294, 0, 44, 0, 0, 0, 0, 0, 0, 2491 296, 297, 298, 299, 300, 301, 2, 205, 4, 5, 2492 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2493 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2494 0, 0, 26, 27, 28, 0, 0, 0, 0, 281, 2495 282, 31, 283, 0, 0, 0, 0, 0, 0, 0, 2496 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2497 0, 0, 0, 0, 0, 0, 0, 0, 284, 34, 2498 0, 35, 0, 36, 285, 0, 38, 39, 286, 0, 2499 0, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2500 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 2501 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2502 0, 294, 0, 343, 0, 0, 0, 0, 781, 0, 2503 296, 344, 298, 299, 300, 301, 2, 205, 4, 5, 2504 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2505 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2506 0, 0, 26, 27, 28, 0, 0, 0, 0, 281, 2507 282, 31, 283, 0, 0, 0, 0, 0, 0, 0, 2508 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2509 0, 0, 0, 0, 0, 0, 0, 0, 284, 34, 2510 0, 35, 0, 36, 285, 0, 38, 39, 286, 0, 2511 0, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2512 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 2513 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2514 0, 294, 0, 931, 0, 0, 0, 0, 781, 0, 2515 296, 344, 298, 299, 300, 301, 2, 205, 4, 5, 2516 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2517 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2518 0, 0, 26, 27, 28, 0, 0, 0, 0, 281, 2519 282, 31, 283, 0, 0, 0, 0, 0, 0, 0, 2520 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2521 0, 0, 0, 0, 0, 0, 0, 0, 284, 34, 2522 0, 35, 0, 36, 285, 0, 38, 39, 286, 0, 2523 0, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2524 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 2525 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2526 0, 294, 0, 931, 0, 0, 0, 0, 781, 0, 2527 296, 600, 298, 299, 300, 301, 2, 205, 4, 5, 2528 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2529 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2530 0, 0, 26, 27, 28, 0, 0, 0, 0, 281, 2531 282, 31, 283, 0, 0, 0, 0, 0, 0, 0, 2532 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2533 0, 0, 0, 0, 0, 0, 0, 0, 284, 34, 2534 0, 35, 0, 36, 285, 0, 38, 39, 286, 0, 2535 0, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2536 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 2537 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2538 0, 294, 0, 343, 0, 0, 0, 0, 0, 0, 2539 296, 344, 298, 299, 300, 301, 2, 205, 4, 5, 2540 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2541 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2542 0, 0, 26, 27, 28, 0, 0, 0, 0, 281, 2543 282, 31, 283, 0, 0, 0, 0, 0, 0, 0, 2544 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2545 0, 0, 0, 0, 0, 0, 0, 0, 284, 34, 2546 0, 35, 0, 36, 285, 0, 38, 39, 286, 0, 2547 0, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2548 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 2549 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2550 0, 294, 0, 931, 0, 0, 0, 0, 0, 0, 2551 296, 344, 298, 299, 300, 301, 2, 205, 4, 5, 2552 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2553 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2554 0, 0, 26, 27, 28, 0, 0, 0, 0, 281, 2555 282, 31, 283, 0, 0, 0, 0, 0, 0, 0, 2556 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2557 0, 0, 0, 0, 0, 0, 0, 0, 284, 34, 2558 0, 35, 0, 36, 285, 0, 206, 39, 286, 0, 2559 0, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2560 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 2561 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2562 0, 294, 0, 1020, 0, 0, 0, 0, 0, 0, 2563 296, 1021, 298, 299, 300, 301, 2, 205, 4, 5, 2564 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2565 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2566 0, 0, 26, 27, 28, 0, 0, 0, 0, 281, 2567 282, 31, 283, 0, 0, 0, 0, 0, 0, 0, 2568 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2569 0, 0, 0, 0, 0, 0, 0, 0, 284, 34, 2570 0, 35, 0, 36, 285, 0, 206, 39, 286, 0, 2571 0, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2572 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 2573 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2574 0, 294, 0, 378, 0, 0, 0, 0, 0, 0, 2575 296, 380, 298, 299, 300, 301, 204, 2, 205, 4, 3976 26, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3977 -1, -1, 38, -1, -1, -1, -1, -1, -1, -1, 3978 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3979 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3980 66, -1, 68, -1, 70, 71, -1, 73, 74, 75, 3981 -1, -1, -1, -1, -1, -1, 82, 83, 3, 4, 2576 3982 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2577 3983 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2578 25, 0, 0, 26, 27, 28, 0, 0, 0, 0, 2579 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 2580 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2581 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2582 34, 0, 35, 0, 36, 0, 0, 206, 39, 0, 2583 2, 205, 4, 5, 6, 7, 8, 9, 10, 11, 2584 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2585 22, 23, 24, 25, 0, 0, 26, 27, 28, 0, 2586 0, 0, 0, 0, 207, 31, 0, 0, 0, 0, 2587 0, 0, 270, 0, 0, 0, 0, 0, 0, 0, 2588 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2589 0, 0, 0, 34, 0, 35, 0, 36, 37, 0, 2590 206, 39, 40, 0, 0, 0, 0, 0, 0, 41, 2591 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2592 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2593 0, 0, 0, 0, 0, 43, 0, 207, 0, 0, 2594 0, 0, 0, 0, 0, 208, 2, 205, 4, 5, 2595 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2596 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2597 0, 0, 26, 27, 28, 0, 0, 0, 0, 0, 2598 0, 31, 0, 0, 0, 0, 8, 9, 10, 11, 2599 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2600 22, 23, 24, 25, 0, 0, 26, 27, 28, 34, 2601 0, 35, 0, 36, 0, 31, 38, 39, 0, 2, 2602 205, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2603 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2604 23, 24, 25, 34, 0, 26, 27, 28, 109, 0, 2605 38, 39, -402, 687, 31, 0, 0, 0, 0, 41, 2606 42, 634, 0, 0, 0, 0, 0, 0, 0, 0, 2607 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2608 0, 0, 34, 0, 35, 0, 36, 44, 0, 38, 2609 39, 0, 0, 0, 0, 110, 0, 0, 0, 0, 2610 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2611 0, 1371, 0, 0, 0, 0, 0, 0, 0, 0, 2612 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, 2613 0, 0, 0, 0, 634, 2, 205, 4, 5, 6, 2614 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2615 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 2616 0, 26, 27, 28, 0, 0, 0, 0, 0, 0, 2617 31, 0, 0, 0, 0, 8, 9, 10, 11, 12, 2618 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2619 23, 24, 25, -294, 0, 26, 27, 28, 34, 0, 2620 35, 0, 36, 0, 31, 38, 39, 0, 0, 0, 2621 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2622 0, 0, 0, 0, 0, 0, 0, 1373, 0, 0, 2623 0, 0, 34, 0, 0, 0, 0, 37, 0, 336, 2624 337, 40, 687, -294, 0, 0, 0, 0, 41, 42, 2625 634, 2, 205, 4, 5, 6, 7, 8, 9, 10, 2626 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2627 21, 22, 23, 24, 25, 0, 338, 26, 27, 28, 2628 0, 0, 0, 0, 110, 0, 31, 0, 0, 0, 2629 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2630 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2631 0, 0, 0, 0, 34, 0, 35, 0, 36, 0, 2632 0, 206, 39, 0, 2, 205, 4, 5, 6, 7, 2633 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2634 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 2635 26, 27, 28, 0, 0, 0, 0, 0, 269, 31, 2636 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 2637 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2638 0, 0, 0, 0, 0, 0, 0, 34, 0, 35, 2639 0, 36, 0, 0, 38, 39, 0, 2, 205, 4, 2640 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2641 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2642 25, 0, 0, 26, 27, 28, 0, 0, 0, 0, 2643 0, 687, 31, 0, 0, 0, 0, 0, 0, 634, 2644 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2645 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2646 34, 0, 35, 0, 36, 0, 0, 38, 39, 0, 2647 2, 205, 4, 5, 6, 7, 8, 9, 10, 11, 2648 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2649 22, 23, 24, 25, 0, 0, 26, 27, 28, 0, 2650 0, 0, 0, 0, 599, 31, 0, 0, 0, 0, 2651 0, 0, 634, 0, 0, 0, 0, 0, 0, 0, 2652 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2653 0, 0, 0, 34, 0, 35, 0, 36, 0, 0, 2654 206, 39, 8, 9, 10, 11, 12, 13, 14, 15, 2655 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2656 0, 0, 26, 27, 28, 0, 0, 0, 0, 281, 2657 282, 31, 283, 0, 0, 0, 0, 207, 0, 0, 2658 0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 2659 0, 0, 0, 0, 0, 0, 0, 0, 284, 34, 2660 0, 0, 0, 0, 285, 0, 38, 39, 286, 0, 2661 0, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2662 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 2663 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2664 0, 294, 0, 525, 0, 0, 170, 0, 0, 0, 2665 296, 297, 298, 299, 300, 301, 8, 9, 10, 11, 2666 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2667 22, 23, 24, 25, 0, 0, 26, 27, 28, 0, 2668 0, 0, 0, 281, 282, 31, 283, 8, 9, 10, 2669 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2670 21, 22, 23, 24, 25, 0, 0, 26, 27, 28, 2671 0, 0, 284, 34, 0, 0, 31, 0, 285, 0, 2672 38, 39, 286, 0, 0, 287, 288, 289, 290, 41, 2673 42, 0, 291, 292, 0, 0, 0, 0, 0, 0, 2674 293, 0, 0, 0, 34, 0, 0, 0, 0, 37, 2675 0, 336, 337, 40, 0, 294, 0, 599, -3, 0, 2676 41, 42, 0, 0, 296, 600, 298, 299, 300, 301, 2677 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2678 18, 19, 20, 21, 22, 23, 24, 25, 338, 0, 2679 26, 27, 28, 0, 0, 0, 110, 281, 282, 31, 2680 283, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2681 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 2682 0, 26, 27, 28, 0, 0, 284, 34, 0, 0, 2683 31, 453, 649, 0, 38, 39, 286, 0, 0, 287, 2684 288, 289, 290, 41, 42, 0, 291, 292, 0, 0, 2685 0, 0, 0, 0, 293, 0, 0, 0, 34, 0, 2686 0, 0, 0, 0, 0, 38, 39, 0, 0, 294, 2687 -35, 766, 0, 0, 0, 0, 0, 0, 296, 297, 2688 298, 299, 300, 301, 8, 9, 10, 11, 12, 13, 2689 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2690 24, 25, 454, 0, 26, 27, 28, 0, 0, 0, 2691 110, 281, 282, 31, 283, 0, 0, 0, 0, 0, 2692 0, 0, 8, 9, 10, 11, 12, 13, 14, 15, 2693 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2694 284, 34, 26, 27, 28, 0, 285, 0, 38, 39, 2695 286, 31, 0, 287, 288, 289, 290, 41, 42, 0, 2696 291, 292, 0, 0, 0, 0, 0, 0, 293, 0, 2697 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 2698 0, 0, 0, 294, 0, 295, 38, 39, 0, 0, 2699 0, 0, 296, 297, 298, 299, 300, 301, 8, 9, 2700 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2701 20, 21, 22, 23, 24, 25, 0, 0, 26, 27, 2702 28, 643, 0, 338, 0, 281, 282, 31, 283, 0, 2703 0, 110, 0, 0, 0, 0, 8, 9, 10, 11, 2704 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2705 22, 23, 24, 25, 284, 34, 26, 27, 28, 0, 2706 285, 0, 38, 39, 286, 31, 0, 287, 288, 289, 2707 290, 41, 42, 0, 291, 292, 0, 0, 0, 0, 2708 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 2709 0, 0, 0, 34, 0, 0, 0, 294, 0, 156, 2710 38, 39, 0, 0, 0, 0, 296, 297, 298, 299, 2711 300, 301, 8, 9, 10, 11, 12, 13, 14, 15, 2712 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2713 0, 0, 26, 27, 28, 643, 0, 338, 0, 281, 2714 282, 31, 283, 0, 0, 634, 0, 0, 0, 0, 2715 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2716 18, 19, 20, 21, 22, 23, 24, 25, 284, 34, 2717 26, 27, 28, 0, 285, 0, 38, 39, 286, 31, 2718 0, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2719 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 2720 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 2721 0, 294, 0, 599, 38, 39, 0, 0, 0, 0, 2722 296, 600, 298, 299, 300, 301, 8, 9, 10, 11, 2723 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2724 22, 23, 24, 25, 0, 0, 26, 27, 28, 0, 2725 0, 256, 0, 281, 282, 31, 283, 0, 0, 110, 2726 0, 0, 0, 0, 8, 9, 10, 11, 12, 13, 2727 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2728 24, 25, 284, 34, 26, 27, 28, 0, 285, 0, 2729 38, 39, 286, 31, 0, 287, 288, 289, 290, 41, 2730 42, 0, 291, 292, 0, 0, 0, 0, 0, 0, 2731 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2732 0, 34, 0, 0, 0, 294, 0, 378, 38, 39, 2733 0, 0, 0, 0, 296, 380, 298, 299, 300, 301, 2734 474, 2, 205, 4, 5, 6, 7, 8, 9, 10, 2735 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2736 21, 22, 23, 24, 25, 156, 0, 26, 27, 28, 2737 0, 0, 0, 110, 0, 0, 31, 0, 0, 0, 2738 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2739 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 2740 26, 27, 28, 0, 34, 0, 35, 0, 36, 31, 2741 0, 38, 39, 0, 0, 0, 0, 0, 8, 9, 2742 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2743 20, 21, 22, 23, 24, 25, 0, 34, 26, 27, 2744 28, 0, 37, 0, 38, 39, 40, 31, 0, 0, 2745 0, -3, 0, 41, 42, 0, 8, 9, 10, 11, 2746 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2747 22, 23, 24, 25, 0, 34, 26, 27, 28, 43, 2748 37, 156, 38, 39, 40, 31, 0, 0, 0, 45, 2749 0, 41, 42, 0, 8, 9, 10, 11, 12, 13, 2750 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2751 24, 25, 0, 34, 26, 27, 28, 43, 37, 44, 2752 206, 39, 40, 31, 0, 0, 0, 45, 0, 41, 2753 42, 0, 8, 9, 10, 11, 12, 13, 14, 15, 2754 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2755 -294, 34, 26, 27, 28, 43, 37, 269, 336, 337, 2756 40, 31, 0, 0, 0, 208, 0, 41, 42, 0, 2757 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2758 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 2759 0, 0, 0, 643, 0, 338, 38, 39, 0, 0, 2760 -294, 0, 0, 634, 0, 8, 9, 10, 11, 12, 2761 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2762 23, 24, 25, 0, 0, 26, 27, 28, 0, 0, 2763 0, 643, 0, 338, 31, 453, 0, 0, 0, 0, 2764 0, 634, 0, 8, 9, 10, 11, 12, 13, 14, 2765 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2766 25, -294, 34, 26, 27, 28, 0, 0, 0, 38, 2767 39, 0, 31, 8, 9, 10, 11, 12, 13, 14, 2768 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2769 25, 0, 0, 26, 27, 28, 0, 0, 0, 0, 2770 34, 0, 31, 453, 0, 0, 454, 38, 39, 0, 2771 711, -294, 0, 0, 110, 0, 0, 0, 0, 0, 2772 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2773 34, 0, 0, 0, 0, 0, 0, 38, 39, 0, 2774 0, 0, 0, 0, 338, 0, 0, 0, 0, 0, 2775 0, 0, 110, 0, 0, 8, 9, 10, 11, 12, 2776 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2777 23, 24, 25, 0, 454, 26, 27, 28, 1109, 0, 2778 0, 0, 110, 0, 31, 453, 8, 9, 10, 11, 2779 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2780 22, 23, 24, 25, 0, 0, 26, 27, 28, 0, 2781 0, 0, 34, 0, 0, 31, 0, 0, 0, 38, 2782 39, 0, 0, 0, 8, 9, 10, 11, 12, 13, 2783 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2784 24, 25, 0, 34, 26, 27, 28, 0, 0, 0, 2785 206, 39, 0, 31, 0, 0, 454, 0, 0, 0, 2786 1236, 0, 0, 0, 110, 0, 0, 0, 0, 0, 2787 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2788 0, 34, 0, 0, 0, 0, 0, 269, 38, 39, 2789 0, 0, 0, 0, 0, 270, 0, 8, 9, 10, 2790 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2791 21, 22, 23, 24, 25, 0, 0, 26, 27, 28, 2792 0, 0, 0, 0, 0, 256, 31, 0, 0, 0, 2793 0, 0, 0, 634, 0, 8, 9, 10, 11, 12, 2794 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2795 23, 24, 25, 0, 34, 26, 27, 28, 0, 0, 2796 0, 38, 39, 0, 31, 8, 9, 10, 11, 12, 2797 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2798 23, 24, 25, 0, 0, 26, 27, 28, 0, 0, 2799 0, 0, 34, 0, 31, 0, 0, 0, 338, 38, 2800 39, 0, 0, 0, 0, 0, 634, 0, 0, 0, 2801 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2802 0, 0, 34, 0, 0, 0, 0, 0, 0, 206, 2803 39, 0, 0, 0, 0, 0, 454, 0, 0, 0, 2804 0, 0, 0, 0, 110, 0, 0, 8, 9, 10, 2805 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2806 21, 22, 23, 24, 25, 0, 269, 26, 27, 28, 2807 0, 0, 0, 0, 629, 0, 31, 8, 9, 10, 2808 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2809 21, 22, 23, 24, 25, 0, 0, 26, 27, 28, 2810 0, 0, 0, 0, 34, 0, 31, 0, 0, 0, 2811 0, 38, 39, 0, 0, 8, 9, 10, 11, 12, 2812 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2813 23, 24, 25, 0, 34, 26, 27, 28, 0, 0, 2814 0, 38, 39, 0, 31, 0, 0, 0, 599, 0, 2815 0, 0, 0, 0, 0, 0, 634, 0, 0, 0, 2816 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2817 0, 0, 34, 0, 0, 0, 0, 0, 338, 38, 2818 39, 0, 0, 0, 0, 0, 110, 2, 205, 4, 2819 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2820 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2821 25, 0, 0, 26, 27, 28, 44, 0, 0, 0, 2822 0, 0, 31, 0, 110, 0, 0, 0, 0, 0, 2823 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2824 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2825 34, 0, 35, 0, 36, 0, 0, 38, 39, 281, 2826 282, 0, 283, 1063, 0, 1064, 0, 0, 1065, 1066, 2827 1067, 1068, 1069, 1070, 1071, 1072, 0, 0, 1551, 1073, 2828 0, 0, 0, 1074, 1075, 0, 33, 0, 284, 0, 2829 0, 0, 0, -415, 649, 0, 0, 0, 286, 0, 2830 0, 287, 288, 289, 290, 41, 42, 0, 291, 292, 2831 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 2832 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2833 0, 294, 0, 378, 0, 0, 170, 0, 0, 0, 2834 296, 380, 298, 299, 300, 301, 0, 0, 0, 0, 2835 1077, 0, 281, 282, -129, 283, 1063, 0, 1064, 0, 2836 0, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 0, 2837 0, 0, 1073, 0, 0, 0, 1074, 1075, 0, 33, 2838 0, 284, 0, 0, 0, 0, 0, 649, 0, 0, 2839 0, 286, 0, 0, 287, 288, 289, 290, 41, 42, 2840 0, 291, 292, 0, 0, 0, 0, 0, 0, 293, 2841 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2842 0, 0, 0, 0, 294, 0, 378, 0, 0, 170, 2843 0, 0, 0, 296, 380, 298, 299, 300, 301, 0, 2844 0, 0, 0, 1077, 0, 0, 0, -129, 2, 205, 2845 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 2846 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2847 24, 25, 0, 0, 26, 27, 28, 0, 0, 0, 2848 0, 0, 0, 31, 0, 281, 282, 0, 283, 1063, 2849 0, 1064, 1421, 1422, 1065, 1066, 1067, 1068, 1069, 1070, 2850 1071, 1072, 0, 0, 1551, 1073, 0, 0, 0, 1074, 2851 1075, 34, 33, 35, 284, 36, 0, 0, 38, 39, 2852 649, 0, 0, 0, 286, 0, 0, 287, 288, 289, 2853 290, 41, 42, 0, 291, 292, 0, 0, 0, 0, 2854 1330, 0, 293, 0, 0, 0, 0, 0, 0, 0, 2855 0, 0, 0, 0, 0, 0, 0, 294, 0, 378, 2856 0, 0, 170, 0, 0, 0, 296, 380, 298, 299, 2857 300, 301, 0, 0, 281, 282, 1077, 283, 1063, 0, 2858 1064, 1421, 1422, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 2859 1072, 0, 0, 0, 1073, 0, 0, 0, 1074, 1075, 2860 0, 33, 0, 284, 0, 0, 0, 0, 0, 649, 2861 0, 0, 0, 286, 0, 0, 287, 288, 289, 290, 2862 41, 42, 0, 291, 292, 0, 0, 0, 0, 0, 2863 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 2864 0, 0, 0, 0, 0, 0, 294, 0, 378, 0, 2865 0, 170, 0, 0, 0, 296, 380, 298, 299, 300, 2866 301, 0, 0, 281, 282, 1077, 283, 1063, 0, 1064, 2867 0, 0, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 2868 0, 0, 0, 1073, 0, 0, 0, 1074, 1075, 0, 2869 33, 0, 284, 0, 0, 0, 0, 0, 649, 0, 2870 0, 0, 286, 0, 0, 287, 288, 289, 290, 41, 2871 42, 0, 291, 292, 0, 0, 0, 0, 0, 0, 2872 293, 281, 282, 0, 283, 0, 0, 0, 0, 0, 2873 0, 0, 0, 0, 0, 294, 0, 378, 0, 0, 2874 170, 0, 0, 0, 296, 380, 298, 299, 300, 301, 2875 284, 0, 0, 0, 1077, 0, 649, 0, 0, 0, 2876 286, 0, 0, 287, 288, 289, 290, 41, 42, 0, 2877 291, 292, 0, 0, 0, 0, 0, 0, 293, 281, 2878 282, 0, 283, 0, 0, 0, 0, 0, 0, 0, 2879 0, 0, 0, 294, 0, 785, 0, 0, 281, 282, 2880 0, 283, 296, 380, 298, 299, 300, 301, 284, 0, 2881 0, 0, 0, 0, 285, 0, 0, 0, 286, 0, 2882 0, 287, 288, 289, 290, 41, 42, 284, 291, 292, 2883 0, 0, 0, 285, 0, 0, 293, 286, 0, 0, 2884 287, 288, 289, 290, 41, 42, 0, 291, 292, 0, 2885 0, 294, 0, 378, 0, 293, 281, 282, 0, 283, 2886 296, 827, 298, 299, 300, 301, 0, 0, 0, 0, 2887 513, 0, 0, 0, 0, 281, 282, 0, 283, 296, 2888 380, 298, 299, 300, 301, 284, 0, 0, 0, 0, 2889 0, 285, 0, 0, 0, 286, 0, 0, 287, 288, 2890 289, 290, 41, 42, 284, 291, 292, 0, 0, 0, 2891 285, 0, 0, 293, 286, 0, 0, 287, 288, 289, 2892 290, 41, 42, 0, 291, 292, 0, 0, 294, 0, 2893 0, 0, 293, 281, 282, 0, 283, 296, 380, 298, 2894 299, 300, 301, 0, 0, 0, 0, 518, 0, 0, 2895 0, 0, 0, 0, 0, 0, 296, 380, 298, 299, 2896 300, 301, 284, 0, 0, 0, 0, 0, 285, 0, 2897 0, 0, 286, 0, 0, 287, 288, 289, 290, 41, 2898 42, 0, 291, 292, 0, 0, 0, 0, 0, 0, 2899 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2900 0, 0, 0, 0, 0, 521, 0, 0, 0, 0, 2901 0, 0, 0, 0, 296, 380, 298, 299, 300, 301, 2902 2, 205, 4, 5, 6, 7, 8, 9, 10, 11, 2903 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2904 22, 23, 24, 25, 0, 0, 0, 0, 0, 0, 2905 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 2906 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2907 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2908 0, 0, 0, 34, 0, 35, 0, 36, 37, 0, 2909 173, 174, 40, 0, 0, 0, 0, 0, 0, 41, 2910 42, 204, 2, 205, 4, 5, 6, 7, 8, 9, 2911 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2912 20, 21, 22, 23, 24, 25, 0, 0, 26, 27, 2913 28, 0, 0, 0, 0, 0, 0, 31, 0, 0, 2914 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2915 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2916 0, 0, 0, 0, 0, 34, 0, 35, 0, 36, 2917 0, 0, 206, 39, 474, 2, 205, 4, 5, 6, 2918 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2919 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 2920 0, 26, 27, 28, 0, 0, 0, 0, 0, 0, 2921 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2922 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2923 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 2924 35, 0, 36, 0, 0, 38, 39, 2, 205, 4, 2925 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2926 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2927 25, 0, 0, 26, 27, 28, 0, 0, 0, 0, 2928 0, 0, 31, 0, 8, 9, 10, 11, 12, 13, 2929 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 2930 24, 25, 0, 0, 26, 27, 28, 492, 493, 494, 2931 34, 0, 35, 31, 36, 0, 0, 206, 39, 0, 2932 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2933 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2934 0, 34, 0, 0, 0, 0, 0, 0, 38, 39 2935 }; 2936 2937 #define yypact_value_is_default(yystate) \ 2938 ((yystate) == (-1332)) 2939 2940 #define yytable_value_is_error(yytable_value) \ 2941 YYID (0) 2942 2943 static const yytype_int16 yycheck[] = 2944 { 2945 0, 1, 0, 203, 184, 184, 520, 698, 238, 43, 2946 115, 184, 1, 698, 43, 43, 543, 185, 629, 0, 2947 104, 218, 184, 280, 185, 456, 455, 698, 348, 29, 2948 30, 184, 32, 184, 32, 1062, 184, 902, 167, 168, 2949 609, 348, 1, 43, 656, 45, 278, 45, 1043, 611, 2950 1006, 32, 1042, 1043, 32, 55, 497, 0, 759, 611, 2951 28, 61, 612, 61, 64, 609, 64, 67, 618, 67, 2952 154, 609, 499, 579, 1340, 718, 503, 999, 67, 609, 2953 609, 81, 82, 780, 264, 264, 777, 51, 186, 32, 2954 1421, 264, 777, 609, 82, 200, 1425, 265, 344, 1055, 2955 529, 39, 264, 902, 265, 105, 777, 0, 108, 39, 2956 78, 264, 417, 264, 609, 115, 264, 0, 43, 72, 2957 43, 45, 363, 643, 644, 645, 367, 489, 44, 45, 2958 83, 84, 437, 64, 0, 43, 82, 39, 227, 32, 2959 445, 39, 662, 44, 45, 109, 146, 95, 146, 32, 2960 184, 0, 1, 39, 154, 184, 184, 246, 111, 159, 2961 63, 159, 260, 261, 1495, 111, 32, 44, 45, 1477, 2962 109, 64, 613, 111, 85, 495, 617, 1443, 109, 109, 2963 30, 111, 130, 32, 184, 185, 110, 185, 4, 5, 2964 6, 7, 8, 9, 1523, 109, 39, 638, 114, 1528, 2965 200, 642, 113, 255, 1512, 39, 1514, 109, 208, 111, 2966 208, 294, 409, 114, 744, 64, 736, 217, 67, 1548, 2967 220, 145, 220, 109, 902, 111, 1555, 227, 744, 132, 2968 264, 81, 82, 96, 82, 264, 264, 405, 115, 11, 2969 644, 645, 242, 489, 405, 82, 246, 109, 1243, 744, 2970 250, 251, 250, 69, 511, 71, 112, 341, 662, 184, 2971 123, 184, 110, 1062, 264, 265, 109, 265, 111, 250, 2972 839, 271, 250, 0, 1, 109, 184, 111, 278, 1306, 2973 117, 643, 644, 645, 208, 928, 370, 455, 0, 851, 2974 395, 841, 251, 293, 455, 839, 114, 107, 1293, 851, 2975 662, 839, 1292, 1293, 611, 32, 3, 250, 828, 839, 2976 839, 82, 1009, 819, 238, 110, 132, 116, 423, 487, 2977 32, 131, 117, 839, 429, 116, 487, 220, 328, 116, 2978 328, 43, 736, 45, 293, 697, 82, 1259, 109, 951, 2979 67, 132, 425, 426, 839, 132, 270, 347, 348, 61, 2980 425, 426, 64, 116, 600, 67, 597, 250, 699, 55, 2981 90, 91, 1227, 109, 364, 417, 72, 250, 368, 132, 2982 1071, 220, 255, 297, 736, 1074, 1075, 83, 84, 379, 2983 721, 109, 110, 629, 250, 437, 691, 1065, 634, 255, 2984 959, 96, 242, 445, 109, 395, 126, 127, 960, 640, 2985 110, 250, 72, 109, 3, 405, 116, 405, 82, 105, 2986 1021, 773, 108, 83, 84, 959, 131, 116, 123, 676, 2987 344, 959, 1417, 423, 828, 109, 501, 1417, 1227, 429, 2988 513, 431, 873, 68, 146, 518, 110, 72, 521, 1466, 2989 75, 1528, 77, 117, 1143, 520, 1473, 159, 532, 84, 2990 1528, 697, 72, 1409, 1410, 455, 349, 121, 122, 72, 2991 460, 1548, 132, 83, 84, 109, 828, 111, 1555, 116, 2992 83, 84, 184, 185, 474, 119, 110, 1555, 116, 479, 2993 1030, 1031, 699, 117, 112, 132, 0, 487, 116, 487, 2994 1004, 491, 575, 491, 132, 495, 208, 131, 498, 1526, 2995 500, 425, 426, 0, 721, 762, 119, 1306, 220, 938, 2996 491, 586, 132, 88, 89, 474, 947, 946, 698, 698, 2997 520, 217, 131, 250, 965, 698, 758, 773, 657, 379, 2998 1142, 851, 700, 80, 417, 109, 698, 537, 250, 700, 2999 540, 968, 542, 543, 851, 698, 72, 698, 491, 1227, 3000 698, 417, 264, 116, 437, 1117, 109, 83, 84, 664, 3001 110, 520, 445, 992, 111, 109, 113, 117, 666, 132, 3002 117, 437, 115, 116, 110, 271, 211, 501, 537, 445, 3003 116, 540, 278, 542, 543, 111, 109, 480, 131, 830, 3004 590, 116, 3, 834, 109, 812, 520, 597, 491, 10, 3005 11, 12, 13, 14, 109, 1306, 489, 132, 491, 609, 3006 460, 611, 696, 116, 53, 72, 328, 598, 116, 4, 3007 5, 6, 7, 8, 9, 491, 83, 84, 39, 132, 3008 630, 590, 110, 116, 132, 119, 348, 978, 116, 691, 3009 124, 125, 491, 112, 964, 1323, 646, 116, 498, 132, 3010 500, 347, 652, 116, 111, 110, 67, 96, 0, 1, 3011 1498, 661, 586, 663, 664, 665, 1504, 1466, 364, 132, 3012 80, 1102, 368, 890, 1473, 129, 600, 131, 116, 116, 3013 1042, 733, 1383, 924, 69, 72, 71, 1525, 772, 110, 3014 32, 888, 1530, 405, 132, 132, 83, 84, 698, 1377, 3015 700, 111, 1380, 113, 663, 629, 665, 117, 112, 109, 3016 634, 111, 909, 713, 116, 110, 351, 112, 353, 719, 3017 110, 116, 64, 723, 111, 67, 116, 1526, 110, 110, 3018 132, 731, 45, 110, 116, 116, 131, 132, 631, 109, 3019 970, 111, 110, 455, 744, 745, 112, 1425, 61, 119, 3020 116, 64, 1430, 192, 67, 112, 72, 110, 758, 116, 3021 76, 978, 72, 116, 491, 894, 76, 83, 84, 1470, 3022 938, 1472, 731, 83, 84, 1021, 215, 938, 946, 491, 3023 112, 110, 1460, 495, 116, 946, 225, 10, 11, 12, 3024 13, 14, 1009, 109, 1135, 1322, 92, 93, 110, 109, 3025 1162, 111, 652, 119, 116, 110, 441, 72, 691, 119, 3026 109, 116, 111, 155, 697, 109, 39, 111, 83, 84, 3027 10, 11, 12, 13, 14, 691, 1527, 109, 109, 111, 3028 513, 724, 515, 146, 1034, 518, 1133, 119, 521, 839, 3029 1137, 1532, 1059, 110, 67, 738, 159, 1532, 109, 39, 3030 733, 851, 1193, 1194, 835, 294, 115, 116, 110, 110, 3031 110, 1532, 1103, 713, 116, 116, 116, 733, 1546, 719, 3032 116, 117, 185, 723, 1552, 115, 1133, 67, 220, 109, 3033 1137, 1138, 109, 110, 111, 1563, 109, 132, 111, 1567, 3034 773, 703, 110, 705, 894, 208, 119, 609, 116, 611, 3035 72, 901, 902, 110, 76, 110, 111, 220, 250, 116, 3036 64, 83, 84, 110, 1, 109, 1162, 111, 1135, 116, 3037 72, 902, 74, 75, 924, 85, 86, 87, 1057, 109, 3038 1292, 83, 84, 72, 630, 74, 75, 109, 938, 832, 3039 58, 59, 110, 902, 83, 84, 946, 119, 116, 109, 3040 646, 111, 109, 113, 114, 110, 112, 109, 45, 132, 3041 110, 116, 114, 110, 964, 661, 116, 115, 116, 116, 3042 109, 114, 109, 680, 111, 114, 1193, 1194, 114, 72, 3043 969, 74, 75, 76, 984, 109, 698, 111, 700, 114, 3044 83, 84, 109, 993, 111, 109, 1253, 1243, 109, 110, 3045 111, 1001, 132, 442, 1004, 109, 1006, 111, 82, 902, 3046 72, 132, 74, 75, 109, 328, 109, 104, 111, 902, 3047 1125, 83, 84, 110, 117, 984, 119, 72, 109, 74, 3048 75, 82, 744, 745, 116, 117, 902, 476, 83, 84, 3049 112, 109, 1001, 111, 894, 1004, 970, 1006, 109, 110, 3050 111, 901, 114, 902, 120, 1055, 116, 117, 145, 109, 3051 110, 111, 758, 1404, 128, 1065, 111, 154, 1068, 1069, 3052 1070, 58, 59, 60, 513, 1265, 1266, 1267, 1507, 518, 3053 1421, 1062, 521, 72, 1341, 74, 75, 76, 1345, 129, 3054 432, 94, 405, 1093, 83, 84, 1055, 1021, 44, 45, 3055 10, 11, 12, 13, 14, 131, 1065, 111, 815, 1068, 3056 1069, 1070, 564, 565, 566, 567, 109, 204, 825, 109, 3057 969, 208, 110, 1206, 1207, 1125, 1209, 839, 1557, 39, 3058 112, 1024, 1215, 840, 72, 1218, 74, 75, 1222, 851, 3059 560, 561, 112, 993, 110, 83, 84, 562, 563, 491, 3060 110, 238, 239, 1494, 1495, 110, 72, 67, 74, 75, 3061 76, 110, 72, 110, 74, 75, 76, 83, 84, 1062, 3062 568, 569, 109, 83, 84, 902, 112, 111, 131, 1062, 3063 112, 114, 109, 270, 114, 116, 273, 1404, 114, 112, 3064 1447, 533, 110, 109, 45, 111, 1062, 110, 112, 109, 3065 1200, 111, 117, 119, 1421, 112, 112, 294, 112, 119, 3066 297, 29, 117, 1062, 117, 116, 1205, 110, 110, 114, 3067 117, 112, 1222, 110, 132, 115, 938, 1227, 3, 115, 3068 115, 109, 116, 110, 946, 10, 11, 12, 13, 14, 3069 679, 110, 969, 1093, 116, 110, 1227, 117, 110, 688, 3070 110, 110, 964, 692, 341, 116, 598, 344, 1247, 110, 3071 110, 110, 3, 110, 39, 1265, 1266, 1267, 1227, 10, 3072 11, 12, 13, 14, 110, 110, 363, 1494, 1495, 1162, 3073 367, 110, 110, 370, 10, 11, 12, 13, 14, 110, 3074 110, 110, 67, 110, 110, 1400, 1379, 110, 39, 29, 3075 115, 643, 644, 645, 131, 112, 1265, 1266, 1267, 110, 3076 110, 1204, 1542, 39, 110, 110, 114, 116, 112, 112, 3077 662, 110, 1322, 1323, 110, 1306, 67, 110, 116, 110, 3078 117, 116, 1039, 1040, 1227, 1062, 116, 116, 425, 426, 3079 112, 67, 116, 110, 1227, 110, 112, 85, 86, 87, 3080 1200, 1340, 1532, 1532, 109, 1204, 1205, 208, 109, 1532, 3081 1243, 1227, 109, 1322, 1323, 1533, 453, 109, 112, 456, 3082 1532, 109, 1533, 111, 109, 113, 114, 1377, 1227, 1532, 3083 1380, 1532, 132, 109, 1532, 111, 117, 474, 239, 1557, 3084 1097, 1098, 115, 119, 736, 110, 1557, 110, 1247, 1399, 3085 1400, 115, 1507, 110, 129, 115, 114, 112, 1301, 1409, 3086 1410, 132, 499, 1306, 501, 110, 503, 116, 1377, 270, 3087 112, 1380, 116, 1306, 112, 1425, 513, 110, 515, 110, 3088 1430, 518, 110, 520, 521, 112, 471, 112, 112, 110, 3089 1306, 47, 112, 294, 112, 532, 297, 112, 1448, 115, 3090 1409, 1410, 1301, 132, 1443, 110, 132, 1306, 115, 132, 3091 1460, 117, 110, 132, 115, 132, 1425, 112, 112, 112, 3092 112, 1430, 72, 112, 74, 75, 76, 112, 1205, 112, 3093 112, 110, 110, 83, 84, 1466, 828, 926, 112, 1448, 3094 112, 1340, 1473, 835, 0, 1, 109, 109, 1532, 586, 3095 1227, 1460, 109, 1532, 1532, 60, 110, 1507, 1508, 109, 3096 597, 111, 55, 600, 110, 114, 132, 1517, 112, 119, 3097 1247, 112, 117, 1523, 110, 112, 32, 110, 1528, 96, 3098 96, 109, 1532, 1533, 109, 1533, 115, 110, 112, 45, 3099 132, 110, 629, 42, 116, 1526, 1546, 634, 1548, 1508, 3100 110, 110, 1552, 640, 117, 1555, 132, 1557, 1517, 1557, 3101 902, 67, 105, 1563, 1523, 108, 1273, 1567, 132, 1528, 3102 110, 110, 96, 1466, 1281, 1282, 1283, 96, 132, 1306, 3103 1473, 110, 110, 1466, 132, 117, 132, 1546, 110, 1548, 3104 1473, 112, 110, 1552, 1443, 115, 1555, 132, 104, 112, 3105 1466, 109, 453, 115, 1563, 456, 132, 1473, 1567, 696, 3106 115, 154, 110, 1340, 64, 110, 132, 1466, 1542, 110, 3107 110, 1077, 1329, 571, 1473, 570, 1227, 969, 572, 64, 3108 64, 718, 573, 1526, 1073, 574, 1495, 1385, 1567, 74, 3109 146, 1316, 1138, 1526, 986, 680, 1473, 81, 154, 155, 3110 1345, 1093, 705, 946, 4, 5, 6, 7, 8, 9, 3111 1526, 748, 513, 453, 515, 471, 116, 518, 723, 453, 3112 521, 948, 993, 590, 217, 894, 966, 1526, 658, 185, 3113 1247, 116, 116, 33, 578, 772, 491, 758, 10, 11, 3114 12, 13, 14, -1, 200, 578, 748, 203, 204, 578, 3115 1042, 1043, 208, 1399, -1, -1, -1, -1, -1, 159, 3116 -1, -1, -1, -1, -1, -1, 1443, 39, -1, 69, 3117 1062, 71, -1, 229, 159, 159, -1, 233, 271, 235, 3118 72, -1, 74, 75, 76, 278, -1, -1, 244, 1466, 3119 -1, 83, 84, 830, 250, 67, 1473, 834, -1, 255, 3120 72, -1, 74, 75, 76, -1, -1, -1, -1, 265, 3121 -1, 83, 84, -1, -1, -1, -1, 273, 283, -1, 3122 220, -1, -1, -1, -1, -1, 26, 27, 28, -1, 3123 815, 296, 297, -1, -1, 220, 220, 109, -1, 111, 3124 825, -1, -1, 308, -1, -1, -1, 119, -1, 1526, 3125 -1, -1, -1, -1, 347, 840, -1, -1, 258, -1, 3126 -1, -1, 262, 10, 11, 12, 13, 14, -1, -1, 3127 1532, 364, -1, 258, 258, 368, -1, 262, 262, 344, 3128 -1, -1, -1, -1, -1, 341, -1, 924, 344, -1, 3129 -1, 928, 39, 278, 350, -1, -1, 97, -1, 99, 3130 -1, -1, -1, -1, -1, -1, -1, 363, -1, -1, 3131 947, 367, 1204, 1205, 370, 380, -1, 718, -1, -1, 3132 67, -1, -1, -1, 680, 72, 1315, 74, 75, 76, 3133 -1, 968, 969, 970, -1, 1227, 83, 84, 431, -1, 3134 72, -1, 74, 75, 76, -1, -1, -1, -1, 349, 3135 -1, 83, 84, -1, -1, 1247, 72, -1, 74, 75, 3136 76, 417, 109, -1, 349, 349, -1, 83, 84, -1, 3137 -1, 72, 119, 74, 75, 76, 432, 109, -1, 111, 3138 180, 437, 83, 84, 1021, -1, -1, 119, -1, 445, 3139 190, 191, -1, 109, -1, 195, -1, 197, 198, -1, 3140 1292, 1293, -1, 119, -1, -1, -1, -1, 109, 1301, 3141 -1, -1, -1, -1, 1306, 471, -1, -1, 474, -1, 3142 51, -1, 53, -1, -1, 56, 57, 58, -1, 60, 3143 430, -1, -1, 489, -1, 491, -1, -1, -1, -1, 3144 -1, -1, -1, 499, 75, 430, 430, 503, 1340, 10, 3145 11, 12, 13, 14, 1039, 1040, 87, 88, -1, 815, 3146 -1, -1, 447, -1, -1, 1102, 1103, -1, -1, 825, 3147 72, -1, 74, 75, 76, -1, 532, 533, 39, -1, 3148 480, 83, 84, -1, 840, 1474, -1, 1476, -1, -1, 3149 -1, -1, 557, 558, 559, 480, 480, 72, -1, 74, 3150 75, 76, -1, -1, 597, -1, 67, 109, 83, 84, 3151 -1, -1, 1097, 1098, -1, -1, -1, 119, -1, -1, 3152 -1, -1, 1511, 579, 1513, 1417, -1, 928, -1, -1, 3153 -1, -1, -1, -1, 109, 600, -1, 630, -1, -1, 3154 -1, 597, 598, -1, 600, -1, 947, -1, 109, -1, 3155 111, 1443, -1, 646, -1, 611, -1, -1, 119, -1, 3156 -1, -1, -1, -1, -1, -1, -1, 1556, 661, 1558, 3157 -1, -1, -1, 629, 1466, -1, -1, -1, 634, -1, 3158 -1, 1473, 1571, 1572, 640, 1222, -1, 643, 644, 645, 3159 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3160 0, -1, -1, 603, -1, -1, 662, -1, -1, -1, 3161 1247, -1, -1, -1, -1, -1, -1, -1, 603, 603, 3162 -1, -1, -1, -1, 680, -1, -1, -1, -1, -1, 3163 -1, 631, 32, -1, 1526, 691, 636, -1, -1, -1, 3164 696, 697, -1, -1, 700, -1, 631, 631, -1, -1, 3165 -1, 636, 636, -1, -1, -1, 1241, -1, -1, -1, 3166 -1, -1, -1, -1, -1, 758, -1, 67, -1, 734, 3167 -1, -1, -1, -1, -1, -1, -1, 733, -1, -1, 3168 736, -1, -1, 1039, 1040, -1, -1, -1, 1273, 745, 3169 -1, -1, 748, -1, -1, -1, 1281, 1282, 1283, -1, 3170 -1, 1102, -1, 1340, -1, -1, -1, -1, -1, -1, 3171 -1, -1, -1, 344, 345, 780, 772, 773, -1, -1, 3172 -1, -1, 778, -1, 724, 356, 357, -1, -1, 26, 3173 27, 28, -1, -1, -1, -1, -1, -1, 738, 724, 3174 724, 1097, 1098, -1, 1329, -1, -1, -1, -1, -1, 3175 -1, -1, -1, 738, 738, 155, -1, -1, -1, 815, 3176 -1, -1, 827, -1, -1, -1, -1, -1, -1, 825, 3177 -1, -1, 828, 758, 830, -1, -1, 833, 834, 835, 3178 -1, -1, 582, 583, 840, -1, -1, -1, -1, -1, 3179 -1, -1, -1, -1, 850, -1, -1, -1, -1, -1, 3180 97, -1, 99, -1, -1, -1, 1443, 10, 11, 12, 3181 13, 14, 612, -1, -1, 615, 616, -1, 618, -1, 3182 620, 621, -1, -1, -1, 625, 626, 124, -1, 229, 3183 -1, 924, 832, -1, -1, -1, 39, -1, 1475, -1, 3184 1477, -1, -1, -1, -1, -1, 902, 832, 832, -1, 3185 250, -1, -1, -1, -1, 255, 188, -1, -1, -1, 3186 -1, -1, -1, 195, 67, -1, -1, -1, 924, 72, 3187 -1, 74, 75, 76, -1, 1512, -1, 1514, -1, -1, 3188 83, 84, -1, 180, -1, 1241, -1, -1, -1, -1, 3189 -1, 188, -1, 190, 191, -1, -1, -1, 195, -1, 3190 197, 198, -1, -1, 960, 1542, 109, -1, 111, 709, 3191 710, -1, 968, 969, -1, 715, 119, 1273, -1, 10, 3192 11, 12, 13, 14, -1, 1281, 1282, 1283, -1, -1, 3193 986, -1, -1, -1, -1, 267, -1, -1, -1, 10, 3194 11, 12, 13, 14, -1, -1, -1, -1, 39, -1, 3195 350, -1, -1, -1, -1, -1, 1021, -1, -1, -1, 3196 -1, -1, -1, -1, -1, 1021, -1, -1, 39, -1, 3197 267, -1, -1, 1329, -1, -1, 67, -1, 1034, -1, 3198 -1, 72, -1, 1039, 1040, 76, 1042, 1043, -1, -1, 3199 -1, 323, 83, 84, -1, -1, 67, 1062, -1, 331, 3200 -1, 72, 334, 74, 75, 76, 1062, -1, -1, -1, 3201 -1, -1, 83, 84, -1, -1, -1, 417, 109, -1, 3202 -1, 0, -1, -1, 1024, -1, -1, -1, 119, -1, 3203 -1, -1, 432, -1, -1, -1, -1, 437, 109, 1024, 3204 1024, 1097, 1098, -1, -1, 445, -1, 1103, 119, -1, 3205 -1, -1, -1, 32, -1, -1, -1, -1, -1, -1, 3206 -1, -1, -1, -1, -1, 397, -1, -1, -1, 401, 3207 -1, 471, -1, -1, 1475, -1, 1477, -1, 97, 98, 3208 99, 100, 101, 102, 103, 104, 105, 106, 67, 489, 3209 -1, 491, -1, -1, 725, -1, 727, -1, -1, -1, 3210 -1, -1, -1, 734, 735, -1, 1162, -1, 739, -1, 3211 -1, 1512, 131, 1514, 1179, 10, 11, 12, 13, 14, 3212 751, -1, -1, -1, -1, 756, -1, -1, -1, 1222, 3213 -1, -1, -1, 533, -1, -1, -1, -1, -1, -1, 3214 -1, -1, -1, -1, 39, -1, -1, -1, -1, 1205, 3215 -1, 782, -1, -1, 486, -1, -1, -1, -1, -1, 3216 -1, -1, -1, -1, -1, -1, 1222, -1, -1, -1, 3217 -1, 1227, 67, -1, -1, -1, 155, 72, -1, -1, 3218 -1, 76, -1, -1, -1, 1241, -1, 1243, 83, 84, 3219 -1, 1247, -1, -1, -1, -1, 827, -1, 598, -1, 3220 -1, -1, -1, -1, 1204, -1, -1, -1, -1, -1, 3221 -1, -1, -1, -1, 109, -1, -1, 1273, -1, 1204, 3222 1204, -1, -1, -1, 119, 1281, 1282, 1283, -1, -1, 3223 -1, -1, -1, -1, -1, -1, 1292, 1293, -1, -1, 3224 -1, -1, -1, 643, 644, 645, 578, 579, -1, -1, 3225 1306, -1, -1, 884, 885, 886, 887, -1, 889, -1, 3226 -1, -1, 662, -1, -1, -1, -1, -1, -1, -1, 3227 -1, 250, -1, 1329, 905, -1, 255, -1, -1, -1, 3228 680, -1, -1, -1, 1340, 582, 583, -1, 919, -1, 3229 -1, 691, -1, -1, -1, -1, -1, 697, -1, 1099, 3230 -1, 1301, -1, -1, -1, -1, 1399, -1, -1, -1, 3231 -1, -1, -1, -1, -1, 612, 1301, 1301, 615, 616, 3232 -1, 618, -1, 620, 621, -1, -1, 958, 625, 626, 3233 -1, -1, -1, 733, -1, 667, 736, -1, -1, 671, 3234 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3235 20, 21, 22, 23, 24, 25, 26, 27, 28, -1, 3236 -1, 1417, -1, -1, -1, -1, -1, 998, -1, 39, 3237 -1, 350, 704, 773, 1005, -1, -1, -1, -1, 1010, 3238 -1, -1, -1, -1, 1015, -1, 1017, 1443, -1, -1, 3239 1021, 1022, 1023, -1, -1, 1026, -1, 67, -1, -1, 3240 -1, -1, -1, -1, 1035, -1, -1, 704, 78, -1, 3241 1466, -1, 709, 710, -1, 815, -1, 1473, 715, -1, 3242 -1, -1, 1053, 1054, 1224, 825, -1, -1, 828, -1, 3243 -1, -1, -1, 833, -1, 835, -1, -1, 417, -1, 3244 840, -1, -1, -1, -1, -1, -1, -1, -1, 1080, 3245 -1, -1, 1083, 432, -1, -1, -1, -1, 437, -1, 3246 -1, -1, -1, -1, -1, -1, 445, -1, -1, -1, 3247 1526, -1, -1, -1, -1, -1, -1, 1533, -1, -1, 3248 -1, -1, -1, -1, -1, -1, -1, 819, -1, -1, 3249 -1, 1122, 471, -1, -1, -1, -1, 1128, 1129, -1, 3250 -1, -1, 902, -1, -1, -1, -1, -1, -1, 1140, 3251 489, -1, 491, 0, 1145, -1, -1, 1148, -1, 1150, 3252 -1, -1, 1153, -1, -1, -1, -1, -1, -1, -1, 3253 -1, -1, -1, -1, -1, 1166, -1, -1, -1, -1, 3254 -1, -1, -1, -1, -1, 32, 37, 38, 1179, 40, 3255 1181, 1182, 1183, 1184, 533, -1, -1, -1, -1, -1, 3256 -1, -1, -1, -1, -1, -1, 1197, -1, 1199, -1, 3257 -1, -1, 1203, -1, -1, 66, -1, -1, -1, -1, 3258 67, 72, -1, 74, 75, 76, 986, -1, 79, 80, 3259 81, 82, 83, 84, -1, 86, 87, -1, -1, -1, 3260 932, 1232, 1233, 94, -1, -1, -1, -1, -1, -1, 3261 -1, -1, -1, -1, -1, -1, -1, -1, 109, 598, 3262 111, -1, 113, 114, -1, -1, -1, 118, 119, 120, 3263 121, 122, 123, -1, -1, -1, -1, -1, -1, 1039, 3264 1040, -1, 1042, 1043, -1, -1, -1, -1, -1, -1, 3265 -1, -1, -1, 1284, 1285, -1, -1, -1, -1, -1, 3266 -1, -1, 1062, 1294, 643, 644, 645, -1, 155, -1, 3267 -1, -1, -1, -1, -1, -1, -1, -1, -1, 1011, 3268 -1, -1, -1, 662, -1, -1, -1, -1, -1, -1, 3269 -1, -1, -1, -1, -1, 1027, -1, 1097, 1098, -1, 3270 -1, 680, -1, -1, -1, -1, -1, -1, -1, -1, 3271 -1, -1, 691, -1, -1, 1346, -1, -1, 697, -1, 3272 -1, -1, -1, -1, -1, -1, -1, 1358, -1, 1360, 3273 1361, 1362, 37, 38, -1, 40, -1, -1, -1, -1, 3274 -1, 1372, -1, -1, -1, -1, -1, -1, -1, -1, 3275 1381, -1, -1, -1, 733, -1, -1, 736, -1, -1, 3276 -1, 66, 1162, 250, -1, -1, 1397, 72, 255, -1, 3277 -1, 76, 1104, -1, 79, 80, 81, 82, 83, 84, 3278 -1, 86, 87, -1, -1, -1, -1, -1, 0, 94, 3279 -1, -1, -1, -1, 773, -1, -1, -1, -1, -1, 3280 -1, -1, 1099, -1, 109, 1205, 111, -1, -1, 114, 3281 -1, -1, -1, 118, 119, 120, 121, 122, 123, -1, 3282 32, -1, 1453, 1454, -1, -1, -1, 1227, -1, -1, 3283 -1, -1, -1, -1, -1, 1466, 815, -1, -1, -1, 3284 -1, 1241, 1473, 1243, -1, -1, 825, -1, -1, 828, 3285 -1, -1, -1, -1, 833, 67, 835, -1, -1, -1, 3286 -1, 840, -1, 350, -1, -1, -1, -1, -1, -1, 3287 -1, -1, -1, 1273, -1, 1506, -1, -1, -1, 1510, 3288 -1, 1281, 1282, 1283, -1, -1, -1, -1, -1, -1, 3289 -1, -1, 1292, 1293, -1, -1, -1, -1, -1, -1, 3290 -1, -1, -1, -1, -1, -1, 1306, -1, 1539, -1, 3291 1541, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3292 -1, -1, -1, 902, -1, -1, -1, 1224, -1, 1329, 3293 417, -1, -1, -1, -1, -1, -1, -1, 1569, 1570, 3294 -1, -1, -1, 155, -1, 432, 1577, 1578, -1, -1, 3295 437, -1, -1, -1, -1, -1, 0, -1, 445, 3, 3296 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 3297 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3298 24, 25, 26, 27, 471, -1, 30, 31, 32, 33, 3299 -1, -1, 36, -1, -1, 39, 40, -1, -1, -1, 3300 -1, -1, 489, -1, 491, -1, -1, 986, -1, -1, 3301 -1, -1, -1, -1, -1, -1, -1, 1417, -1, -1, 3302 64, -1, -1, 67, -1, 69, -1, 71, 72, -1, 3303 74, 75, 76, -1, -1, -1, -1, -1, 250, 83, 3304 84, -1, -1, 255, -1, -1, 533, -1, 7, -1, 3305 -1, 10, 11, 12, 13, 14, -1, -1, -1, -1, 3306 1039, 1040, -1, 1042, 1043, 109, 1466, 111, -1, -1, 3307 -1, -1, -1, 1473, -1, 119, -1, -1, 37, 38, 3308 39, 40, -1, 1062, -1, 10, 11, 12, 13, 14, 3309 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3310 25, 26, 27, 28, -1, -1, -1, 66, 67, -1, 3311 -1, 598, -1, 72, 39, -1, -1, 76, 1097, 1098, 3312 79, 80, 81, 82, 83, 84, 1526, 86, 87, -1, 3313 -1, -1, -1, -1, -1, 94, -1, -1, 350, -1, 3314 -1, -1, 67, -1, -1, -1, -1, -1, -1, -1, 3315 109, -1, 111, 78, -1, -1, 643, 644, 645, 118, 3316 119, 120, 121, 122, 123, -1, -1, -1, -1, -1, 3317 -1, -1, -1, -1, -1, 662, -1, -1, -1, -1, 3318 -1, -1, -1, 1162, -1, -1, -1, -1, -1, -1, 3319 -1, -1, -1, 680, -1, -1, -1, -1, -1, -1, 3320 -1, -1, -1, -1, 691, 417, -1, -1, -1, 45, 3321 697, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3322 432, -1, -1, -1, -1, 437, 1205, -1, 64, -1, 3323 -1, -1, -1, 445, -1, -1, -1, -1, -1, -1, 3324 -1, -1, -1, -1, -1, -1, 733, -1, 1227, 736, 3325 -1, -1, -1, -1, -1, -1, -1, -1, -1, 471, 3326 -1, -1, 1241, -1, 1243, -1, -1, -1, -1, -1, 3327 -1, -1, -1, -1, 110, -1, -1, 489, -1, 491, 3328 116, -1, -1, -1, -1, -1, 773, -1, -1, -1, 3329 -1, -1, -1, -1, 1273, -1, -1, -1, -1, -1, 3330 -1, -1, 1281, 1282, 1283, -1, -1, -1, -1, 145, 3331 -1, -1, -1, 1292, 1293, -1, -1, -1, -1, 155, 3332 -1, 533, -1, 159, -1, -1, -1, 1306, 815, -1, 3333 -1, -1, -1, -1, -1, -1, -1, -1, 825, -1, 3334 -1, 828, -1, -1, -1, -1, 833, -1, 835, -1, 3335 1329, -1, -1, 840, 10, 11, 12, 13, 14, 15, 3336 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3337 26, 27, 208, -1, 30, 31, 32, -1, -1, -1, 3338 -1, -1, -1, 39, 220, -1, 598, -1, -1, -1, 3339 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3340 -1, -1, 238, 239, -1, -1, -1, -1, -1, -1, 3341 -1, 67, -1, -1, -1, 902, -1, -1, 74, 75, 3342 -1, -1, -1, -1, -1, -1, 262, -1, -1, -1, 3343 -1, 643, 644, 645, 270, -1, -1, -1, 1417, -1, 3344 -1, -1, -1, -1, 281, -1, 283, 284, -1, -1, 3345 662, -1, -1, -1, 291, 292, -1, -1, 294, 296, 3346 297, 297, -1, 119, -1, -1, -1, -1, 680, -1, 3347 -1, 308, -1, -1, -1, -1, -1, -1, -1, 691, 3348 -1, -1, -1, -1, -1, 697, -1, 1466, 37, 38, 3349 -1, 40, -1, -1, 1473, -1, -1, -1, -1, 986, 3350 -1, -1, -1, -1, -1, -1, -1, 344, 344, -1, 3351 -1, -1, -1, 349, -1, -1, -1, 66, -1, -1, 3352 -1, 733, -1, 72, 736, -1, -1, 76, -1, -1, 3353 79, 80, 81, 82, 83, 84, -1, 86, 87, -1, 3354 -1, -1, -1, 380, -1, 94, -1, 1526, -1, -1, 3355 -1, -1, 1039, 1040, -1, 1042, 1043, -1, -1, -1, 3356 109, 773, 111, -1, -1, -1, -1, -1, 117, 118, 3357 119, 120, 121, 122, 123, 1062, -1, -1, -1, -1, 3358 -1, -1, -1, -1, -1, 64, -1, -1, -1, 425, 3359 426, -1, -1, -1, -1, 74, 432, 76, -1, 78, 3360 -1, -1, -1, 815, -1, -1, 85, -1, -1, -1, 3361 1097, 1098, -1, 825, -1, -1, 828, 453, -1, -1, 3362 456, 833, -1, 835, -1, -1, -1, -1, 840, -1, 3363 -1, -1, -1, -1, -1, -1, -1, 116, -1, 118, 3364 119, 120, -1, -1, -1, -1, -1, -1, -1, -1, 3365 -1, -1, -1, 489, -1, -1, -1, -1, -1, -1, 3366 -1, -1, -1, -1, -1, 501, -1, -1, -1, -1, 3367 -1, -1, -1, -1, -1, 1162, -1, 513, -1, 515, 3368 159, -1, 518, -1, 520, 521, -1, -1, -1, -1, 3369 902, -1, -1, -1, -1, -1, -1, 533, -1, -1, 3370 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3371 -1, -1, -1, -1, -1, -1, -1, -1, 1205, -1, 3372 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 3373 567, 568, 569, 570, 571, 572, 573, 574, -1, -1, 3374 1227, 220, -1, 222, 223, 224, -1, -1, -1, -1, 3375 586, -1, -1, -1, 1241, -1, 1243, -1, -1, -1, 3376 -1, -1, 598, 600, 600, -1, -1, 603, -1, -1, 3377 -1, -1, -1, -1, 986, -1, -1, -1, -1, 258, 3378 -1, -1, -1, 262, -1, -1, 1273, -1, -1, -1, 3379 -1, -1, -1, 629, 1281, 1282, 1283, -1, 634, 278, 3380 -1, -1, -1, -1, -1, 1292, 1293, 643, 644, 645, 3381 -1, -1, -1, -1, -1, -1, -1, -1, -1, 1306, 3382 -1, -1, -1, -1, -1, -1, 662, 1039, 1040, -1, 3383 1042, 1043, -1, -1, -1, -1, -1, -1, -1, -1, 3384 -1, -1, 1329, -1, -1, -1, -1, -1, -1, 328, 3385 1062, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3386 -1, 697, 699, -1, -1, -1, -1, -1, -1, -1, 3387 349, -1, -1, -1, -1, 354, 355, 44, -1, -1, 3388 -1, -1, 718, 362, 721, 1097, 1098, -1, -1, -1, 3389 -1, -1, -1, -1, -1, -1, -1, 734, -1, -1, 3390 736, -1, 738, 10, 11, 12, 13, 14, 15, 16, 3391 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3392 27, -1, -1, 90, -1, -1, 405, -1, -1, -1, 3393 1417, -1, 39, 100, -1, -1, -1, 773, -1, -1, 3394 -1, -1, -1, 780, 423, -1, -1, -1, -1, 428, 3395 1162, 430, -1, -1, -1, -1, -1, -1, -1, -1, 3396 67, -1, -1, -1, -1, -1, -1, -1, 447, -1, 3397 -1, 450, 451, -1, -1, 812, -1, -1, -1, 1466, 3398 -1, -1, -1, -1, -1, -1, 1473, 466, -1, 156, 3399 827, -1, 828, 1205, -1, -1, 832, -1, -1, 835, 3400 -1, 480, -1, 170, -1, -1, -1, -1, 487, -1, 3401 -1, -1, -1, -1, -1, 1227, -1, -1, -1, -1, 3402 -1, -1, -1, -1, -1, -1, 193, -1, -1, 1241, 3403 -1, 1243, -1, -1, -1, -1, -1, -1, -1, 1526, 3404 207, -1, -1, -1, -1, -1, -1, -1, -1, 216, 3405 -1, -1, -1, -1, -1, -1, -1, -1, -1, 226, 3406 -1, 1273, -1, -1, -1, -1, -1, -1, -1, 1281, 3407 1282, 1283, -1, -1, -1, -1, -1, -1, -1, -1, 3408 1292, 1293, -1, -1, 251, -1, -1, -1, -1, 256, 3409 -1, -1, 928, -1, 1306, -1, -1, -1, -1, -1, 3410 -1, -1, 269, -1, -1, -1, -1, -1, 275, -1, 3411 277, 947, -1, -1, -1, -1, -1, 1329, -1, -1, 3412 -1, -1, -1, -1, 603, -1, -1, -1, 295, -1, 3413 -1, -1, -1, -1, 970, -1, -1, -1, -1, -1, 3414 -1, 978, -1, -1, -1, -1, -1, -1, -1, -1, 3415 986, -1, 631, -1, -1, -1, -1, 636, -1, -1, 3416 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3417 -1, 338, 1009, -1, -1, -1, 343, -1, -1, -1, 3418 -1, -1, -1, -1, 1021, 1021, -1, -1, -1, -1, 3419 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3420 -1, -1, -1, -1, 371, 1417, 1042, 1043, 375, 376, 3421 -1, 378, -1, -1, -1, -1, -1, -1, 385, 386, 3422 -1, 388, 389, -1, 391, 1062, 393, -1, -1, -1, 3423 -1, -1, 7, -1, -1, 10, 11, 12, 13, 14, 3424 -1, -1, -1, 410, -1, 724, -1, -1, -1, -1, 3425 -1, 418, -1, -1, 1466, -1, -1, -1, -1, 738, 3426 -1, 1473, 37, 38, 39, 40, 1102, -1, -1, -1, 3427 -1, -1, -1, -1, -1, -1, 443, -1, -1, 758, 3428 -1, -1, -1, -1, -1, -1, -1, 454, -1, -1, 3429 -1, 66, 67, -1, -1, -1, -1, 72, 1135, -1, 3430 -1, 76, -1, -1, 79, 80, 81, 82, 83, 84, 3431 477, 86, 87, -1, 1526, -1, 483, -1, -1, 94, 3432 -1, 488, -1, -1, -1, -1, 1162, -1, -1, -1, 3433 -1, -1, -1, -1, 109, -1, 111, -1, -1, -1, 3434 819, -1, 1179, 118, 119, 120, 121, 122, 123, -1, 3435 -1, -1, -1, 832, -1, -1, 1193, 1194, 525, -1, 3436 -1, -1, -1, -1, -1, -1, -1, -1, 1204, -1, 3437 -1, -1, 851, -1, 541, -1, -1, -1, -1, -1, 3438 -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 3439 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3440 22, 23, 24, 25, 26, 27, -1, 1243, 30, 31, 3441 32, 578, -1, -1, -1, -1, -1, 39, -1, -1, 3442 587, -1, -1, -1, -1, -1, -1, 594, -1, -1, 3443 -1, -1, 599, -1, -1, -1, -1, -1, -1, -1, 3444 -1, -1, -1, 610, -1, 67, -1, 69, -1, 71, 3445 72, -1, 74, 75, 76, -1, 1292, 1293, -1, 938, 3446 -1, 83, 84, -1, -1, 1301, -1, -1, -1, -1, 3447 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3448 -1, -1, -1, -1, 651, 964, -1, 109, -1, 111, 3449 -1, -1, -1, -1, -1, -1, -1, 119, -1, -1, 3450 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3451 -1, -1, -1, 992, -1, -1, -1, -1, -1, -1, 3452 687, -1, -1, -1, -1, -1, 10, 11, 12, 13, 3453 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3454 24, 25, 26, 27, 28, 1024, 30, 31, 32, -1, 3455 -1, -1, -1, -1, -1, 39, 1035, -1, -1, -1, 3456 -1, -1, -1, -1, -1, -1, -1, 1404, -1, -1, 3457 -1, -1, -1, -1, -1, 742, -1, -1, -1, -1, 3458 -1, 1417, -1, 67, 1421, 752, 753, -1, -1, -1, 3459 74, 75, -1, -1, 78, -1, -1, -1, -1, 766, 3460 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3461 -1, -1, -1, -1, -1, -1, 783, -1, 785, -1, 3462 -1, -1, 789, -1, -1, 109, -1, 111, -1, -1, 3463 -1, -1, -1, -1, -1, 119, -1, -1, 1117, 1475, 3464 -1, 1477, -1, -1, -1, -1, -1, -1, -1, -1, 3465 -1, -1, -1, -1, -1, -1, -1, 1494, 1495, -1, 3466 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3467 37, 38, -1, 40, -1, -1, 1512, -1, 1514, -1, 3468 -1, -1, -1, -1, -1, -1, -1, -1, 855, -1, 3469 -1, -1, -1, -1, -1, 862, -1, -1, -1, 66, 3470 -1, -1, -1, -1, -1, 72, 1542, -1, 875, 76, 3471 877, -1, 79, 80, 81, 82, 83, 84, -1, 86, 3472 87, -1, -1, -1, 891, 1204, -1, 94, -1, -1, 3473 -1, 898, -1, -1, -1, -1, -1, -1, -1, -1, 3474 -1, -1, 109, 910, 111, -1, 913, -1, -1, 116, 3475 -1, 118, 119, 120, 121, 122, 123, -1, -1, -1, 3476 -1, -1, -1, -1, 931, -1, -1, -1, -1, -1, 3477 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3478 -1, -1, -1, -1, 154, 155, -1, -1, -1, -1, 3984 25, 26, -1, -1, 29, 30, 31, -1, -1, -1, 3985 -1, -1, -1, 38, -1, -1, -1, -1, -1, -1, 3479 3986 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3480 3987 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3481 -1, -1, -1, -1, -1, -1, -1, -1, 188, -1, 3482 -1, -1, 1301, -1, -1, 195, -1, 3, 4, 5, 3483 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 3484 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3485 26, 27, -1, 1020, 30, 31, 32, 33, -1, -1, 3486 36, -1, -1, 39, 40, 10, 11, 12, 13, 14, 3487 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3488 25, 26, 27, -1, -1, 30, 31, 32, 64, -1, 3489 -1, 67, -1, 69, 39, 71, 72, 267, 74, 75, 3490 76, -1, -1, -1, -1, -1, -1, 83, 84, 1076, 3491 -1, -1, -1, -1, -1, -1, 1083, -1, -1, -1, 3492 -1, -1, 67, -1, -1, -1, -1, -1, -1, 74, 3493 75, -1, -1, 109, -1, 111, -1, -1, -1, 115, 3494 -1, -1, -1, 119, -1, 145, 1113, -1, -1, -1, 3495 -1, 1118, -1, 323, -1, 155, -1, -1, -1, 1126, 3496 -1, 331, 332, -1, 334, 335, -1, 167, 168, -1, 3497 -1, -1, -1, -1, 344, -1, -1, -1, 348, -1, 3498 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3499 1157, -1, -1, -1, -1, -1, -1, 367, -1, -1, 3500 370, -1, 1169, -1, -1, 1172, -1, 1174, -1, -1, 3501 37, 38, -1, 40, -1, -1, -1, -1, -1, -1, 3502 -1, 1188, 1189, -1, -1, -1, -1, 397, -1, -1, 3503 -1, 401, -1, -1, -1, -1, -1, -1, 238, 66, 3504 -1, -1, -1, 1210, -1, 72, -1, -1, -1, 76, 3505 -1, -1, 79, 80, 81, 82, 83, 84, -1, 86, 3506 87, -1, 432, 263, -1, -1, -1, 94, -1, -1, 3507 1237, -1, -1, -1, -1, -1, -1, -1, 1557, -1, 3508 -1, -1, 109, -1, 111, 455, -1, 114, -1, -1, 3509 -1, 118, 119, 120, 121, 122, 123, -1, -1, -1, 3510 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3511 -1, -1, -1, -1, -1, -1, 486, -1, -1, 489, 3512 -1, -1, -1, -1, 3, 4, 5, 6, 7, 8, 3513 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3514 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 3515 -1, 30, 31, 32, 33, -1, -1, 36, -1, 529, 3516 39, -1, 532, 533, -1, -1, -1, -1, 1335, -1, 3517 1337, -1, -1, -1, -1, -1, -1, -1, -1, 379, 3518 -1, -1, -1, 1350, -1, 1352, -1, -1, 67, -1, 3519 69, -1, 71, -1, -1, 74, 75, -1, -1, 78, 3520 -1, -1, -1, 1370, -1, -1, -1, -1, 578, 579, 3521 -1, -1, -1, -1, -1, -1, -1, -1, -1, 1386, 3522 1387, -1, -1, -1, -1, -1, -1, 597, 598, -1, 3523 600, 1398, 111, -1, 1401, -1, -1, -1, -1, 609, 3524 119, 611, 612, -1, -1, -1, -1, -1, 618, -1, 3525 -1, -1, -1, -1, -1, -1, 1423, -1, 628, 629, 3526 -1, -1, -1, -1, 634, 1432, -1, -1, 1435, -1, 3527 1437, 1438, 1439, 643, 644, 645, -1, -1, -1, -1, 3528 -1, 481, -1, -1, -1, -1, -1, -1, -1, -1, 3529 -1, -1, 662, -1, -1, -1, -1, 667, 668, -1, 3530 -1, 671, 672, -1, -1, -1, -1, -1, 678, -1, 3531 -1, -1, 1479, -1, 1481, -1, -1, 1484, -1, -1, 3532 520, -1, -1, -1, -1, -1, 696, 697, 698, -1, 3533 700, -1, 1499, 533, 704, -1, -1, -1, -1, -1, 3534 540, -1, -1, 543, -1, -1, -1, -1, -1, -1, 3535 -1, -1, -1, -1, 554, 555, -1, -1, -1, -1, 3536 -1, -1, -1, -1, -1, -1, 736, 737, -1, -1, 3537 -1, -1, -1, -1, -1, -1, 576, -1, -1, -1, 3538 -1, -1, -1, -1, -1, -1, 586, -1, -1, -1, 3539 -1, -1, -1, 593, -1, -1, -1, -1, 598, -1, 3540 -1, -1, 772, 773, -1, -1, -1, 777, 778, -1, 3541 -1, -1, -1, -1, 3, 4, 5, 6, 7, 8, 3542 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3543 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, 3544 -1, 30, 31, 32, 33, -1, -1, 36, 648, 819, 3545 39, 40, -1, -1, -1, -1, -1, 657, 828, -1, 3546 -1, -1, -1, -1, 834, 835, -1, -1, -1, 839, 3547 -1, 841, -1, -1, -1, 64, -1, -1, 67, -1, 3548 69, 851, 71, 72, -1, 74, 75, 76, -1, -1, 3549 -1, -1, -1, -1, 83, 84, -1, 697, -1, -1, 3988 -1, 66, -1, 68, -1, 70, -1, -1, 73, 74, 3989 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 3990 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3991 23, 24, 25, 26, -1, -1, 29, 30, 31, -1, 3992 -1, -1, -1, -1, -1, 38, -1, -1, -1, -1, 3550 3993 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3551 3994 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3552 109, -1, 111, -1, -1, -1, -1, -1, -1, -1, 3553 119, -1, -1, -1, -1, 10, 11, 12, 13, 14, 3554 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3555 25, 26, 27, 28, 924, 30, 31, 32, -1, -1, 3556 -1, -1, 932, -1, 39, -1, -1, -1, 938, -1, 3557 -1, -1, -1, 773, -1, 775, 946, -1, -1, -1, 3558 -1, 781, -1, -1, -1, -1, -1, -1, 788, 959, 3559 960, -1, 67, -1, -1, -1, -1, 72, -1, 74, 3560 75, 76, -1, 78, -1, -1, -1, -1, 83, 84, 3561 -1, -1, -1, -1, -1, -1, 986, -1, -1, -1, 3562 -1, -1, 992, -1, -1, -1, -1, -1, -1, -1, 3563 -1, -1, 832, 833, 109, 835, 111, -1, -1, -1, 3564 -1, 1011, 1012, -1, 119, -1, -1, -1, -1, -1, 3565 850, 1021, -1, -1, -1, -1, -1, 1027, 1028, -1, 3566 1030, 1031, 1032, -1, -1, -1, -1, -1, -1, -1, 3567 -1, -1, 1042, 1043, -1, -1, -1, -1, -1, -1, 3568 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3569 890, -1, -1, -1, 894, 3, 4, 5, 6, 7, 3570 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3571 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3572 -1, -1, 30, 31, 32, 33, -1, -1, 36, -1, 3573 -1, 39, -1, 1103, 1104, 1105, -1, -1, -1, -1, 3574 -1, -1, -1, -1, -1, -1, -1, 1117, -1, -1, 3575 -1, -1, -1, -1, -1, -1, -1, -1, -1, 67, 3576 -1, 69, -1, 71, -1, -1, 74, 75, -1, -1, 3577 970, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3578 -1, -1, -1, -1, -1, -1, 986, 987, -1, -1, 3579 -1, -1, 1162, 993, -1, -1, -1, 37, 38, 999, 3580 40, -1, 1002, 111, 1004, -1, -1, -1, -1, -1, 3581 -1, 119, -1, -1, -1, -1, -1, -1, -1, -1, 3582 -1, -1, -1, -1, 1024, -1, 66, -1, -1, -1, 3583 -1, -1, 72, -1, -1, 1035, 76, -1, -1, 79, 3584 80, 81, 82, 83, 84, -1, 86, 87, -1, -1, 3585 -1, -1, 1222, -1, 94, 37, 38, 1057, 40, 1059, 3586 -1, -1, -1, -1, -1, -1, -1, -1, -1, 109, 3587 -1, 111, -1, 1243, 1074, 1075, -1, -1, 118, 119, 3588 120, 121, 122, 123, 66, -1, -1, -1, -1, -1, 3589 72, -1, -1, -1, 76, 1095, -1, 79, 80, 81, 3590 82, 83, 84, -1, 86, 87, -1, -1, -1, -1, 3591 -1, -1, 94, -1, -1, -1, -1, -1, -1, -1, 3592 -1, -1, 1292, 1293, -1, -1, -1, 109, -1, 111, 3593 -1, -1, -1, -1, -1, -1, 118, 119, 120, 121, 3594 122, 123, -1, 1143, -1, -1, -1, -1, -1, -1, 3595 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3596 -1, -1, 1162, -1, -1, -1, -1, -1, -1, -1, 3597 -1, -1, -1, -1, -1, -1, -1, 1177, 1178, -1, 3598 -1, -1, -1, -1, -1, 3, 4, 5, 6, 7, 3599 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3600 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3601 -1, -1, 30, 31, 32, 33, -1, -1, 36, 37, 3602 38, 39, 40, 41, -1, 43, -1, -1, 46, 47, 3603 48, 49, 50, 51, 52, 53, -1, -1, -1, 57, 3604 -1, -1, -1, 61, 62, -1, 64, 1417, 66, 67, 3605 -1, 69, -1, 71, 72, -1, 74, 75, 76, 1259, 3606 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3607 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, 3608 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3609 -1, 109, -1, 111, -1, -1, 114, -1, -1, -1, 3610 118, 119, 120, 121, 122, 123, -1, -1, -1, -1, 3611 128, -1, -1, -1, 132, -1, -1, -1, -1, -1, 3612 1320, -1, 1322, -1, -1, -1, -1, -1, -1, -1, 3613 -1, -1, -1, -1, -1, -1, -1, 1507, 10, 11, 3995 -1, -1, -1, 66, -1, 68, -1, 70, -1, -1, 3996 73, 74, 4, 5, 6, 7, 8, 9, 10, 11, 3614 3997 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3615 22, 23, 24, 25, 26, 27, -1, -1, 30, 31, 3616 32, -1, 1532, 1533, -1, -1, -1, 39, -1, -1, 3617 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3618 -1, -1, -1, -1, -1, -1, -1, 1557, -1, -1, 3619 -1, -1, -1, -1, -1, 67, -1, -1, -1, -1, 3620 -1, -1, 74, 75, -1, -1, -1, -1, 1408, -1, 3621 -1, -1, -1, -1, -1, 3, 4, 5, 6, 7, 3622 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3623 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3624 -1, -1, 30, 31, 32, 33, -1, 119, 36, 37, 3625 38, 39, 40, 10, 11, 12, 13, 14, 15, 16, 3626 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3627 27, -1, -1, 30, 31, 32, -1, -1, 66, 67, 3628 -1, 69, 39, 71, 72, -1, 74, 75, 76, -1, 3629 1490, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3630 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, 3631 67, -1, -1, -1, -1, 72, -1, 74, 75, -1, 3632 -1, 109, -1, 111, -1, -1, 83, 84, -1, -1, 3633 118, 119, 120, 121, 122, 123, -1, -1, -1, -1, 3634 -1, -1, 1542, -1, 132, 3, 4, 5, 6, 7, 3635 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3636 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3637 -1, -1, 30, 31, 32, 33, -1, -1, 36, 37, 3638 38, 39, 40, 10, 11, 12, 13, 14, 15, 16, 3639 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3640 27, -1, -1, 30, 31, 32, -1, -1, 66, 67, 3641 -1, 69, 39, 71, 72, -1, 74, 75, 76, -1, 3642 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3643 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, 3644 67, -1, -1, -1, -1, -1, -1, 74, 75, -1, 3645 -1, 109, -1, 111, -1, -1, -1, -1, -1, -1, 3646 118, 119, 120, 121, 122, 123, 4, 5, 6, 7, 3647 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3648 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3649 -1, -1, 30, 31, 32, -1, -1, -1, -1, 37, 3650 38, 39, 40, -1, -1, -1, -1, -1, -1, -1, 3651 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3652 -1, -1, -1, -1, -1, -1, -1, -1, 66, 67, 3653 -1, 69, -1, 71, 72, -1, 74, 75, 76, -1, 3654 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3655 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, 3656 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3657 -1, 109, -1, 111, -1, -1, -1, -1, 116, -1, 3658 118, 119, 120, 121, 122, 123, 4, 5, 6, 7, 3659 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3660 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3661 -1, -1, 30, 31, 32, -1, -1, -1, -1, 37, 3662 38, 39, 40, -1, -1, -1, -1, -1, -1, -1, 3663 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3664 -1, -1, -1, -1, -1, -1, -1, -1, 66, 67, 3665 -1, 69, -1, 71, 72, -1, 74, 75, 76, -1, 3666 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3667 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, 3668 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3669 -1, 109, -1, 111, -1, -1, -1, -1, 116, -1, 3670 118, 119, 120, 121, 122, 123, 4, 5, 6, 7, 3671 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3672 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3673 -1, -1, 30, 31, 32, -1, -1, -1, -1, 37, 3674 38, 39, 40, -1, -1, -1, -1, -1, -1, -1, 3675 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3676 -1, -1, -1, -1, -1, -1, -1, -1, 66, 67, 3677 -1, 69, -1, 71, 72, -1, 74, 75, 76, -1, 3678 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3679 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, 3680 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3681 -1, 109, -1, 111, -1, -1, -1, -1, 116, -1, 3682 118, 119, 120, 121, 122, 123, 4, 5, 6, 7, 3683 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3684 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3685 -1, -1, 30, 31, 32, -1, -1, -1, -1, 37, 3686 38, 39, 40, -1, -1, -1, -1, -1, -1, -1, 3687 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3688 -1, -1, -1, -1, -1, -1, -1, -1, 66, 67, 3689 -1, 69, -1, 71, 72, -1, 74, 75, 76, -1, 3690 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3691 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, 3692 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3693 -1, 109, -1, 111, -1, -1, -1, -1, -1, -1, 3694 118, 119, 120, 121, 122, 123, 4, 5, 6, 7, 3695 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3696 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3697 -1, -1, 30, 31, 32, -1, -1, -1, -1, 37, 3698 38, 39, 40, -1, -1, -1, -1, -1, -1, -1, 3699 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3700 -1, -1, -1, -1, -1, -1, -1, -1, 66, 67, 3701 -1, 69, -1, 71, 72, -1, 74, 75, 76, -1, 3702 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3703 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, 3704 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3705 -1, 109, -1, 111, -1, -1, -1, -1, -1, -1, 3706 118, 119, 120, 121, 122, 123, 4, 5, 6, 7, 3707 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3708 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3709 -1, -1, 30, 31, 32, -1, -1, -1, -1, 37, 3710 38, 39, 40, -1, -1, -1, -1, -1, -1, -1, 3711 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3712 -1, -1, -1, -1, -1, -1, -1, -1, 66, 67, 3713 -1, 69, -1, 71, 72, -1, 74, 75, 76, -1, 3714 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3715 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, 3716 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3717 -1, 109, -1, 111, -1, -1, -1, -1, -1, -1, 3718 118, 119, 120, 121, 122, 123, 4, 5, 6, 7, 3719 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3720 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3721 -1, -1, 30, 31, 32, -1, -1, -1, -1, 37, 3722 38, 39, 40, -1, -1, -1, -1, -1, -1, -1, 3723 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3724 -1, -1, -1, -1, -1, -1, -1, -1, 66, 67, 3725 -1, 69, -1, 71, 72, -1, 74, 75, 76, -1, 3726 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3727 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, 3728 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3729 -1, 109, -1, 111, -1, -1, -1, -1, -1, -1, 3730 118, 119, 120, 121, 122, 123, 3, 4, 5, 6, 3731 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 3732 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3733 27, -1, -1, 30, 31, 32, -1, -1, -1, -1, 3734 -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, 3998 22, 23, 24, 25, 26, -1, -1, 29, 30, 31, 3999 -1, -1, -1, -1, -1, -1, 38, -1, -1, -1, 3735 4000 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3736 4001 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3737 67, -1, 69, -1, 71, -1, -1, 74, 75, -1, 3738 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 3739 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3740 24, 25, 26, 27, -1, -1, 30, 31, 32, -1, 3741 -1, -1, -1, -1, 111, 39, -1, -1, -1, -1, 3742 -1, -1, 119, -1, -1, -1, -1, -1, -1, -1, 3743 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3744 -1, -1, -1, 67, -1, 69, -1, 71, 72, -1, 3745 74, 75, 76, -1, -1, -1, -1, -1, -1, 83, 3746 84, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3747 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3748 -1, -1, -1, -1, -1, 109, -1, 111, -1, -1, 3749 -1, -1, -1, -1, -1, 119, 4, 5, 6, 7, 3750 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3751 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3752 -1, -1, 30, 31, 32, -1, -1, -1, -1, -1, 3753 -1, 39, -1, -1, -1, -1, 10, 11, 12, 13, 3754 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3755 24, 25, 26, 27, -1, -1, 30, 31, 32, 67, 3756 -1, 69, -1, 71, -1, 39, 74, 75, -1, 4, 3757 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3758 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3759 25, 26, 27, 67, -1, 30, 31, 32, 72, -1, 3760 74, 75, 110, 111, 39, -1, -1, -1, -1, 83, 3761 84, 119, -1, -1, -1, -1, -1, -1, -1, -1, 3762 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3763 -1, -1, 67, -1, 69, -1, 71, 111, -1, 74, 3764 75, -1, -1, -1, -1, 119, -1, -1, -1, -1, 3765 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3766 -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, 3767 -1, -1, -1, -1, -1, -1, 111, -1, -1, -1, 3768 -1, -1, -1, -1, 119, 4, 5, 6, 7, 8, 3769 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3770 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, 3771 -1, 30, 31, 32, -1, -1, -1, -1, -1, -1, 3772 39, -1, -1, -1, -1, 10, 11, 12, 13, 14, 3773 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3774 25, 26, 27, 28, -1, 30, 31, 32, 67, -1, 3775 69, -1, 71, -1, 39, 74, 75, -1, -1, -1, 3776 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3777 -1, -1, -1, -1, -1, -1, -1, 96, -1, -1, 3778 -1, -1, 67, -1, -1, -1, -1, 72, -1, 74, 3779 75, 76, 111, 78, -1, -1, -1, -1, 83, 84, 3780 119, 4, 5, 6, 7, 8, 9, 10, 11, 12, 3781 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3782 23, 24, 25, 26, 27, -1, 111, 30, 31, 32, 3783 -1, -1, -1, -1, 119, -1, 39, -1, -1, -1, 3784 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3785 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3786 -1, -1, -1, -1, 67, -1, 69, -1, 71, -1, 3787 -1, 74, 75, -1, 4, 5, 6, 7, 8, 9, 3788 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3789 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, 3790 30, 31, 32, -1, -1, -1, -1, -1, 111, 39, 3791 -1, -1, -1, -1, -1, -1, 119, -1, -1, -1, 3792 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3793 -1, -1, -1, -1, -1, -1, -1, 67, -1, 69, 3794 -1, 71, -1, -1, 74, 75, -1, 4, 5, 6, 3795 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 3796 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3797 27, -1, -1, 30, 31, 32, -1, -1, -1, -1, 3798 -1, 111, 39, -1, -1, -1, -1, -1, -1, 119, 3799 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3800 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3801 67, -1, 69, -1, 71, -1, -1, 74, 75, -1, 3802 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 3803 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3804 24, 25, 26, 27, -1, -1, 30, 31, 32, -1, 3805 -1, -1, -1, -1, 111, 39, -1, -1, -1, -1, 3806 -1, -1, 119, -1, -1, -1, -1, -1, -1, -1, 3807 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3808 -1, -1, -1, 67, -1, 69, -1, 71, -1, -1, 3809 74, 75, 10, 11, 12, 13, 14, 15, 16, 17, 3810 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3811 -1, -1, 30, 31, 32, -1, -1, -1, -1, 37, 3812 38, 39, 40, -1, -1, -1, -1, 111, -1, -1, 3813 -1, -1, -1, -1, -1, 119, -1, -1, -1, -1, 3814 -1, -1, -1, -1, -1, -1, -1, -1, 66, 67, 3815 -1, -1, -1, -1, 72, -1, 74, 75, 76, -1, 3816 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3817 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, 3818 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3819 -1, 109, -1, 111, -1, -1, 114, -1, -1, -1, 3820 118, 119, 120, 121, 122, 123, 10, 11, 12, 13, 3821 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3822 24, 25, 26, 27, -1, -1, 30, 31, 32, -1, 3823 -1, -1, -1, 37, 38, 39, 40, 10, 11, 12, 3824 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3825 23, 24, 25, 26, 27, -1, -1, 30, 31, 32, 3826 -1, -1, 66, 67, -1, -1, 39, -1, 72, -1, 3827 74, 75, 76, -1, -1, 79, 80, 81, 82, 83, 3828 84, -1, 86, 87, -1, -1, -1, -1, -1, -1, 3829 94, -1, -1, -1, 67, -1, -1, -1, -1, 72, 3830 -1, 74, 75, 76, -1, 109, -1, 111, 112, -1, 3831 83, 84, -1, -1, 118, 119, 120, 121, 122, 123, 3832 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3833 20, 21, 22, 23, 24, 25, 26, 27, 111, -1, 3834 30, 31, 32, -1, -1, -1, 119, 37, 38, 39, 3835 40, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3836 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, 3837 -1, 30, 31, 32, -1, -1, 66, 67, -1, -1, 3838 39, 40, 72, -1, 74, 75, 76, -1, -1, 79, 3839 80, 81, 82, 83, 84, -1, 86, 87, -1, -1, 3840 -1, -1, -1, -1, 94, -1, -1, -1, 67, -1, 3841 -1, -1, -1, -1, -1, 74, 75, -1, -1, 109, 3842 110, 111, -1, -1, -1, -1, -1, -1, 118, 119, 3843 120, 121, 122, 123, 10, 11, 12, 13, 14, 15, 3844 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3845 26, 27, 111, -1, 30, 31, 32, -1, -1, -1, 3846 119, 37, 38, 39, 40, -1, -1, -1, -1, -1, 3847 -1, -1, 10, 11, 12, 13, 14, 15, 16, 17, 3848 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3849 66, 67, 30, 31, 32, -1, 72, -1, 74, 75, 3850 76, 39, -1, 79, 80, 81, 82, 83, 84, -1, 3851 86, 87, -1, -1, -1, -1, -1, -1, 94, -1, 3852 -1, -1, -1, -1, -1, -1, -1, -1, -1, 67, 3853 -1, -1, -1, 109, -1, 111, 74, 75, -1, -1, 3854 -1, -1, 118, 119, 120, 121, 122, 123, 10, 11, 3855 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3856 22, 23, 24, 25, 26, 27, -1, -1, 30, 31, 3857 32, 109, -1, 111, -1, 37, 38, 39, 40, -1, 3858 -1, 119, -1, -1, -1, -1, 10, 11, 12, 13, 3859 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3860 24, 25, 26, 27, 66, 67, 30, 31, 32, -1, 3861 72, -1, 74, 75, 76, 39, -1, 79, 80, 81, 3862 82, 83, 84, -1, 86, 87, -1, -1, -1, -1, 3863 -1, -1, 94, -1, -1, -1, -1, -1, -1, -1, 3864 -1, -1, -1, 67, -1, -1, -1, 109, -1, 111, 3865 74, 75, -1, -1, -1, -1, 118, 119, 120, 121, 3866 122, 123, 10, 11, 12, 13, 14, 15, 16, 17, 3867 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3868 -1, -1, 30, 31, 32, 109, -1, 111, -1, 37, 3869 38, 39, 40, -1, -1, 119, -1, -1, -1, -1, 3870 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3871 20, 21, 22, 23, 24, 25, 26, 27, 66, 67, 3872 30, 31, 32, -1, 72, -1, 74, 75, 76, 39, 3873 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3874 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, 3875 -1, -1, -1, -1, -1, -1, -1, 67, -1, -1, 3876 -1, 109, -1, 111, 74, 75, -1, -1, -1, -1, 3877 118, 119, 120, 121, 122, 123, 10, 11, 12, 13, 3878 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3879 24, 25, 26, 27, -1, -1, 30, 31, 32, -1, 3880 -1, 111, -1, 37, 38, 39, 40, -1, -1, 119, 3881 -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, 3882 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3883 26, 27, 66, 67, 30, 31, 32, -1, 72, -1, 3884 74, 75, 76, 39, -1, 79, 80, 81, 82, 83, 3885 84, -1, 86, 87, -1, -1, -1, -1, -1, -1, 3886 94, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3887 -1, 67, -1, -1, -1, 109, -1, 111, 74, 75, 3888 -1, -1, -1, -1, 118, 119, 120, 121, 122, 123, 3889 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 3890 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3891 23, 24, 25, 26, 27, 111, -1, 30, 31, 32, 3892 -1, -1, -1, 119, -1, -1, 39, -1, -1, -1, 3893 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3894 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, 3895 30, 31, 32, -1, 67, -1, 69, -1, 71, 39, 3896 -1, 74, 75, -1, -1, -1, -1, -1, 10, 11, 3897 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 3898 22, 23, 24, 25, 26, 27, -1, 67, 30, 31, 3899 32, -1, 72, -1, 74, 75, 76, 39, -1, -1, 3900 -1, 114, -1, 83, 84, -1, 10, 11, 12, 13, 3901 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3902 24, 25, 26, 27, -1, 67, 30, 31, 32, 109, 3903 72, 111, 74, 75, 76, 39, -1, -1, -1, 119, 3904 -1, 83, 84, -1, 10, 11, 12, 13, 14, 15, 3905 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3906 26, 27, -1, 67, 30, 31, 32, 109, 72, 111, 3907 74, 75, 76, 39, -1, -1, -1, 119, -1, 83, 3908 84, -1, 10, 11, 12, 13, 14, 15, 16, 17, 3909 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3910 28, 67, 30, 31, 32, 109, 72, 111, 74, 75, 3911 76, 39, -1, -1, -1, 119, -1, 83, 84, -1, 3912 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3913 -1, -1, -1, -1, -1, -1, -1, -1, -1, 67, 3914 -1, -1, -1, 109, -1, 111, 74, 75, -1, -1, 3915 78, -1, -1, 119, -1, 10, 11, 12, 13, 14, 3916 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3917 25, 26, 27, -1, -1, 30, 31, 32, -1, -1, 3918 -1, 109, -1, 111, 39, 40, -1, -1, -1, -1, 3919 -1, 119, -1, 10, 11, 12, 13, 14, 15, 16, 3920 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3921 27, 28, 67, 30, 31, 32, -1, -1, -1, 74, 3922 75, -1, 39, 10, 11, 12, 13, 14, 15, 16, 3923 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3924 27, -1, -1, 30, 31, 32, -1, -1, -1, -1, 3925 67, -1, 39, 40, -1, -1, 111, 74, 75, -1, 3926 115, 78, -1, -1, 119, -1, -1, -1, -1, -1, 3927 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3928 67, -1, -1, -1, -1, -1, -1, 74, 75, -1, 3929 -1, -1, -1, -1, 111, -1, -1, -1, -1, -1, 3930 -1, -1, 119, -1, -1, 10, 11, 12, 13, 14, 3931 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3932 25, 26, 27, -1, 111, 30, 31, 32, 115, -1, 3933 -1, -1, 119, -1, 39, 40, 10, 11, 12, 13, 3934 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 3935 24, 25, 26, 27, -1, -1, 30, 31, 32, -1, 3936 -1, -1, 67, -1, -1, 39, -1, -1, -1, 74, 3937 75, -1, -1, -1, 10, 11, 12, 13, 14, 15, 3938 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 3939 26, 27, -1, 67, 30, 31, 32, -1, -1, -1, 3940 74, 75, -1, 39, -1, -1, 111, -1, -1, -1, 3941 115, -1, -1, -1, 119, -1, -1, -1, -1, -1, 3942 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3943 -1, 67, -1, -1, -1, -1, -1, 111, 74, 75, 3944 -1, -1, -1, -1, -1, 119, -1, 10, 11, 12, 3945 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3946 23, 24, 25, 26, 27, -1, -1, 30, 31, 32, 3947 -1, -1, -1, -1, -1, 111, 39, -1, -1, -1, 3948 -1, -1, -1, 119, -1, 10, 11, 12, 13, 14, 3949 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3950 25, 26, 27, -1, 67, 30, 31, 32, -1, -1, 3951 -1, 74, 75, -1, 39, 10, 11, 12, 13, 14, 3952 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3953 25, 26, 27, -1, -1, 30, 31, 32, -1, -1, 3954 -1, -1, 67, -1, 39, -1, -1, -1, 111, 74, 3955 75, -1, -1, -1, -1, -1, 119, -1, -1, -1, 3956 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3957 -1, -1, 67, -1, -1, -1, -1, -1, -1, 74, 3958 75, -1, -1, -1, -1, -1, 111, -1, -1, -1, 3959 -1, -1, -1, -1, 119, -1, -1, 10, 11, 12, 3960 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3961 23, 24, 25, 26, 27, -1, 111, 30, 31, 32, 3962 -1, -1, -1, -1, 119, -1, 39, 10, 11, 12, 3963 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 3964 23, 24, 25, 26, 27, -1, -1, 30, 31, 32, 3965 -1, -1, -1, -1, 67, -1, 39, -1, -1, -1, 3966 -1, 74, 75, -1, -1, 10, 11, 12, 13, 14, 3967 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 3968 25, 26, 27, -1, 67, 30, 31, 32, -1, -1, 3969 -1, 74, 75, -1, 39, -1, -1, -1, 111, -1, 3970 -1, -1, -1, -1, -1, -1, 119, -1, -1, -1, 3971 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3972 -1, -1, 67, -1, -1, -1, -1, -1, 111, 74, 3973 75, -1, -1, -1, -1, -1, 119, 4, 5, 6, 3974 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 3975 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 3976 27, -1, -1, 30, 31, 32, 111, -1, -1, -1, 3977 -1, -1, 39, -1, 119, -1, -1, -1, -1, -1, 3978 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3979 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3980 67, -1, 69, -1, 71, -1, -1, 74, 75, 37, 3981 38, -1, 40, 41, -1, 43, -1, -1, 46, 47, 3982 48, 49, 50, 51, 52, 53, -1, -1, 56, 57, 3983 -1, -1, -1, 61, 62, -1, 64, -1, 66, -1, 3984 -1, -1, -1, 110, 72, -1, -1, -1, 76, -1, 3985 -1, 79, 80, 81, 82, 83, 84, -1, 86, 87, 3986 -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, 3987 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3988 -1, 109, -1, 111, -1, -1, 114, -1, -1, -1, 3989 118, 119, 120, 121, 122, 123, -1, -1, -1, -1, 3990 128, -1, 37, 38, 132, 40, 41, -1, 43, -1, 3991 -1, 46, 47, 48, 49, 50, 51, 52, 53, -1, 3992 -1, -1, 57, -1, -1, -1, 61, 62, -1, 64, 3993 -1, 66, -1, -1, -1, -1, -1, 72, -1, -1, 3994 -1, 76, -1, -1, 79, 80, 81, 82, 83, 84, 3995 -1, 86, 87, -1, -1, -1, -1, -1, -1, 94, 3996 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3997 -1, -1, -1, -1, 109, -1, 111, -1, -1, 114, 3998 -1, -1, -1, 118, 119, 120, 121, 122, 123, -1, 3999 -1, -1, -1, 128, -1, -1, -1, 132, 4, 5, 4000 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 4001 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 4002 26, 27, -1, -1, 30, 31, 32, -1, -1, -1, 4003 -1, -1, -1, 39, -1, 37, 38, -1, 40, 41, 4004 -1, 43, 44, 45, 46, 47, 48, 49, 50, 51, 4005 52, 53, -1, -1, 56, 57, -1, -1, -1, 61, 4006 62, 67, 64, 69, 66, 71, -1, -1, 74, 75, 4007 72, -1, -1, -1, 76, -1, -1, 79, 80, 81, 4008 82, 83, 84, -1, 86, 87, -1, -1, -1, -1, 4009 96, -1, 94, -1, -1, -1, -1, -1, -1, -1, 4010 -1, -1, -1, -1, -1, -1, -1, 109, -1, 111, 4011 -1, -1, 114, -1, -1, -1, 118, 119, 120, 121, 4012 122, 123, -1, -1, 37, 38, 128, 40, 41, -1, 4013 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 4014 53, -1, -1, -1, 57, -1, -1, -1, 61, 62, 4015 -1, 64, -1, 66, -1, -1, -1, -1, -1, 72, 4016 -1, -1, -1, 76, -1, -1, 79, 80, 81, 82, 4017 83, 84, -1, 86, 87, -1, -1, -1, -1, -1, 4018 -1, 94, -1, -1, -1, -1, -1, -1, -1, -1, 4019 -1, -1, -1, -1, -1, -1, 109, -1, 111, -1, 4020 -1, 114, -1, -1, -1, 118, 119, 120, 121, 122, 4021 123, -1, -1, 37, 38, 128, 40, 41, -1, 43, 4022 -1, -1, 46, 47, 48, 49, 50, 51, 52, 53, 4023 -1, -1, -1, 57, -1, -1, -1, 61, 62, -1, 4024 64, -1, 66, -1, -1, -1, -1, -1, 72, -1, 4025 -1, -1, 76, -1, -1, 79, 80, 81, 82, 83, 4026 84, -1, 86, 87, -1, -1, -1, -1, -1, -1, 4027 94, 37, 38, -1, 40, -1, -1, -1, -1, -1, 4028 -1, -1, -1, -1, -1, 109, -1, 111, -1, -1, 4029 114, -1, -1, -1, 118, 119, 120, 121, 122, 123, 4030 66, -1, -1, -1, 128, -1, 72, -1, -1, -1, 4031 76, -1, -1, 79, 80, 81, 82, 83, 84, -1, 4032 86, 87, -1, -1, -1, -1, -1, -1, 94, 37, 4033 38, -1, 40, -1, -1, -1, -1, -1, -1, -1, 4034 -1, -1, -1, 109, -1, 111, -1, -1, 37, 38, 4035 -1, 40, 118, 119, 120, 121, 122, 123, 66, -1, 4036 -1, -1, -1, -1, 72, -1, -1, -1, 76, -1, 4037 -1, 79, 80, 81, 82, 83, 84, 66, 86, 87, 4038 -1, -1, -1, 72, -1, -1, 94, 76, -1, -1, 4039 79, 80, 81, 82, 83, 84, -1, 86, 87, -1, 4040 -1, 109, -1, 111, -1, 94, 37, 38, -1, 40, 4041 118, 119, 120, 121, 122, 123, -1, -1, -1, -1, 4042 109, -1, -1, -1, -1, 37, 38, -1, 40, 118, 4043 119, 120, 121, 122, 123, 66, -1, -1, -1, -1, 4044 -1, 72, -1, -1, -1, 76, -1, -1, 79, 80, 4045 81, 82, 83, 84, 66, 86, 87, -1, -1, -1, 4046 72, -1, -1, 94, 76, -1, -1, 79, 80, 81, 4047 82, 83, 84, -1, 86, 87, -1, -1, 109, -1, 4048 -1, -1, 94, 37, 38, -1, 40, 118, 119, 120, 4049 121, 122, 123, -1, -1, -1, -1, 109, -1, -1, 4050 -1, -1, -1, -1, -1, -1, 118, 119, 120, 121, 4051 122, 123, 66, -1, -1, -1, -1, -1, 72, -1, 4052 -1, -1, 76, -1, -1, 79, 80, 81, 82, 83, 4053 84, -1, 86, 87, -1, -1, -1, -1, -1, -1, 4054 94, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4055 -1, -1, -1, -1, -1, 109, -1, -1, -1, -1, 4056 -1, -1, -1, -1, 118, 119, 120, 121, 122, 123, 4057 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 4058 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 4059 24, 25, 26, 27, -1, -1, -1, -1, -1, -1, 4060 -1, -1, -1, -1, -1, 39, -1, -1, -1, -1, 4061 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4062 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4063 -1, -1, -1, 67, -1, 69, -1, 71, 72, -1, 4064 74, 75, 76, -1, -1, -1, -1, -1, -1, 83, 4065 84, 3, 4, 5, 6, 7, 8, 9, 10, 11, 4066 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 4067 22, 23, 24, 25, 26, 27, -1, -1, 30, 31, 4068 32, -1, -1, -1, -1, -1, -1, 39, -1, -1, 4069 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4070 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4071 -1, -1, -1, -1, -1, 67, -1, 69, -1, 71, 4072 -1, -1, 74, 75, 3, 4, 5, 6, 7, 8, 4073 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 4074 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, 4075 -1, 30, 31, 32, -1, -1, -1, -1, -1, -1, 4076 39, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4077 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4078 -1, -1, -1, -1, -1, -1, -1, -1, 67, -1, 4079 69, -1, 71, -1, -1, 74, 75, 4, 5, 6, 4080 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 4081 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 4082 27, -1, -1, 30, 31, 32, -1, -1, -1, -1, 4083 -1, -1, 39, -1, 10, 11, 12, 13, 14, 15, 4084 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 4085 26, 27, -1, -1, 30, 31, 32, 33, 34, 35, 4086 67, -1, 69, 39, 71, -1, -1, 74, 75, -1, 4087 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4088 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4089 -1, 67, -1, -1, -1, -1, -1, -1, 74, 75 4002 -1, -1, -1, -1, 66, -1, 68, -1, 70, -1, 4003 -1, 73, 74 4090 4004 }; 4091 4005 … … 4096 4010 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 4097 4011 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 4098 22, 23, 24, 25, 26, 2 7, 30, 31, 32, 33,4099 3 6, 39, 40, 64, 67, 69, 71, 72, 74, 75,4100 76, 83, 84, 109, 111, 119, 137, 140, 197, 211,4012 22, 23, 24, 25, 26, 29, 30, 31, 32, 35, 4013 38, 39, 63, 66, 68, 70, 71, 73, 74, 75, 4014 82, 83, 108, 110, 118, 136, 139, 196, 210, 211, 4101 4015 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 4102 222, 223, 224, 225, 226, 227, 22 8, 230, 231, 232,4103 233, 234, 235, 236, 23 7, 239, 240, 241, 242, 243,4104 244, 2 46, 254, 255, 282, 283, 284, 292, 295, 301,4105 30 2, 304, 306, 307, 313, 318, 322, 323, 324, 325,4106 32 6, 327, 328, 329, 349, 366, 367, 368, 369, 72,4107 1 19, 139, 140, 214, 216, 224, 226, 236, 240, 242,4108 283, 82, 109, 311, 312, 313, 311, 311, 72, 74,4109 75, 76, 138, 139, 272, 273, 293, 294, 74, 75,4110 273, 109, 304, 11, 198, 109, 119, 318, 323, 324,4111 32 5, 327, 328, 329, 112, 134, 111, 217, 224, 226,4112 32 2, 326, 365, 366, 369, 370, 135, 107, 131, 276,4113 1 14, 135, 172, 74, 75, 137, 271, 135, 135, 135,4114 1 16, 135, 74, 75, 109, 119, 308, 317, 318, 319,4115 3 20, 321, 322, 326, 330, 331, 332, 333, 334, 340,4116 3, 28, 78, 238, 3, 5, 74, 111, 119, 216,4117 2 27, 231, 234, 243, 284, 322, 326, 369, 214, 216,4118 2 26, 236, 240, 242, 283, 322, 326, 33, 232, 232,4119 2 27, 234, 135, 232, 227, 232, 227, 75, 109, 114,4120 2 73, 284, 114, 273, 232, 227, 116, 135, 135, 0,4121 1 34, 109, 172, 311, 311, 134, 111, 224, 226, 367,4122 2 71, 271, 226, 131, 109, 119, 308, 318, 322, 111,4123 119, 369, 305, 229, 313, 109, 289, 109, 109, 51,4124 109, 37, 38, 40, 66, 72, 76, 79, 80, 81,4125 8 2, 86, 87, 94, 109, 111, 118, 119, 120, 121,4126 122, 1 23, 136, 140, 141, 142, 143, 148, 149, 150,4016 222, 223, 224, 225, 226, 227, 229, 230, 231, 232, 4017 233, 234, 235, 236, 238, 239, 240, 241, 242, 243, 4018 244, 252, 253, 279, 280, 281, 289, 292, 298, 299, 4019 301, 303, 304, 310, 315, 319, 320, 321, 322, 323, 4020 324, 325, 326, 346, 363, 364, 365, 366, 71, 118, 4021 138, 139, 213, 215, 223, 225, 235, 239, 241, 280, 4022 81, 108, 308, 309, 310, 308, 308, 71, 73, 74, 4023 75, 137, 138, 269, 270, 290, 291, 73, 74, 270, 4024 108, 301, 11, 197, 108, 118, 315, 320, 321, 322, 4025 324, 325, 326, 111, 133, 110, 216, 223, 225, 319, 4026 323, 362, 363, 366, 367, 134, 106, 130, 273, 113, 4027 134, 171, 73, 74, 136, 268, 134, 134, 134, 115, 4028 134, 73, 74, 108, 118, 305, 314, 315, 316, 317, 4029 318, 319, 323, 327, 328, 329, 330, 331, 337, 3, 4030 27, 77, 237, 3, 5, 73, 110, 118, 215, 226, 4031 230, 233, 242, 281, 319, 323, 366, 213, 215, 225, 4032 235, 239, 241, 280, 319, 323, 32, 231, 231, 226, 4033 233, 134, 231, 226, 231, 226, 74, 108, 113, 270, 4034 281, 113, 270, 231, 226, 115, 134, 134, 0, 133, 4035 108, 171, 308, 308, 133, 110, 223, 225, 364, 268, 4036 268, 225, 130, 108, 118, 305, 315, 319, 110, 118, 4037 366, 302, 228, 310, 108, 286, 108, 108, 50, 108, 4038 36, 37, 39, 65, 71, 75, 78, 79, 80, 81, 4039 85, 86, 93, 108, 110, 117, 118, 119, 120, 121, 4040 122, 135, 139, 140, 141, 142, 147, 148, 149, 150, 4127 4041 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 4128 161, 163, 165, 224, 275, 291, 365, 370, 226, 110, 4129 110, 110, 110, 110, 110, 110, 74, 75, 111, 224, 4130 271, 349, 367, 111, 119, 163, 216, 217, 223, 226, 4131 230, 231, 236, 239, 240, 242, 261, 262, 266, 267, 4132 268, 269, 283, 349, 361, 362, 363, 364, 369, 370, 4133 112, 109, 322, 326, 369, 109, 116, 132, 111, 114, 4134 119, 163, 277, 277, 115, 134, 116, 132, 109, 116, 4135 132, 116, 132, 116, 132, 311, 132, 318, 319, 320, 4136 321, 331, 332, 333, 334, 226, 317, 330, 64, 310, 4137 111, 311, 348, 349, 311, 311, 172, 134, 109, 311, 4138 348, 311, 311, 226, 308, 109, 109, 225, 226, 224, 4139 226, 112, 134, 224, 365, 370, 172, 134, 271, 276, 4140 216, 231, 322, 326, 172, 134, 293, 226, 236, 132, 4141 226, 226, 291, 40, 111, 224, 247, 248, 249, 250, 4142 365, 369, 245, 257, 273, 256, 226, 293, 132, 132, 4143 304, 134, 139, 270, 3, 135, 206, 207, 221, 223, 4144 226, 134, 310, 109, 310, 163, 318, 226, 109, 134, 4145 271, 114, 33, 34, 35, 224, 285, 286, 288, 134, 4146 129, 131, 290, 134, 227, 233, 234, 271, 314, 315, 4147 316, 109, 141, 109, 148, 109, 148, 150, 109, 148, 4148 109, 109, 148, 148, 139, 111, 163, 168, 172, 224, 4149 274, 365, 112, 134, 150, 150, 82, 85, 86, 87, 4150 109, 111, 113, 114, 97, 98, 99, 100, 101, 102, 4151 103, 104, 105, 106, 131, 167, 150, 119, 124, 125, 4152 121, 122, 88, 89, 90, 91, 126, 127, 92, 93, 4153 120, 128, 129, 94, 95, 130, 131, 372, 109, 119, 4154 344, 345, 346, 347, 348, 110, 116, 109, 348, 349, 4155 109, 348, 349, 134, 109, 224, 367, 112, 134, 111, 4156 119, 135, 224, 226, 360, 361, 369, 370, 135, 109, 4157 111, 119, 318, 335, 336, 337, 338, 339, 340, 341, 4158 342, 343, 349, 350, 351, 352, 353, 354, 355, 119, 4159 369, 226, 135, 135, 119, 224, 226, 362, 271, 224, 4160 349, 362, 271, 109, 134, 134, 134, 112, 134, 72, 4161 80, 111, 113, 140, 273, 277, 278, 279, 280, 281, 4162 134, 134, 134, 134, 134, 134, 308, 110, 110, 110, 4163 110, 110, 110, 110, 317, 330, 109, 276, 112, 206, 4164 134, 308, 168, 275, 168, 275, 308, 111, 206, 310, 4165 172, 134, 206, 110, 249, 250, 112, 134, 109, 117, 4166 119, 251, 253, 317, 318, 330, 348, 356, 357, 358, 4167 359, 115, 248, 116, 132, 116, 132, 273, 114, 116, 4168 371, 131, 258, 114, 226, 263, 264, 265, 268, 269, 4169 110, 116, 172, 134, 119, 163, 134, 223, 226, 262, 4170 361, 369, 302, 303, 109, 119, 335, 110, 116, 372, 4171 273, 285, 109, 114, 273, 275, 285, 110, 116, 109, 4172 141, 110, 117, 274, 274, 274, 111, 139, 145, 163, 4173 275, 274, 112, 134, 110, 116, 110, 109, 119, 356, 4174 110, 116, 163, 111, 139, 111, 144, 145, 134, 111, 4175 139, 144, 163, 163, 150, 150, 150, 151, 151, 152, 4176 152, 153, 153, 153, 153, 154, 154, 155, 156, 157, 4177 158, 159, 117, 168, 163, 134, 345, 346, 347, 226, 4178 344, 311, 311, 163, 275, 134, 270, 119, 134, 224, 4179 349, 362, 226, 230, 112, 134, 112, 369, 112, 109, 4180 134, 318, 336, 337, 338, 341, 351, 352, 353, 112, 4181 134, 226, 335, 339, 350, 109, 311, 354, 372, 311, 4182 311, 372, 109, 311, 354, 311, 311, 311, 311, 349, 4183 224, 360, 370, 271, 112, 116, 112, 116, 372, 224, 4184 362, 372, 259, 260, 261, 262, 259, 259, 271, 163, 4185 134, 111, 273, 117, 116, 371, 277, 80, 111, 117, 4186 281, 29, 208, 209, 271, 259, 139, 308, 139, 310, 4187 109, 348, 349, 109, 348, 349, 141, 349, 172, 263, 4188 110, 110, 110, 110, 112, 172, 206, 172, 114, 132, 4189 132, 111, 318, 357, 358, 359, 161, 162, 226, 356, 4190 252, 253, 252, 311, 311, 273, 311, 247, 273, 115, 4191 162, 257, 135, 135, 139, 221, 135, 135, 259, 109, 4192 119, 369, 135, 115, 226, 286, 287, 135, 134, 134, 4193 109, 135, 110, 315, 168, 169, 117, 132, 111, 141, 4194 199, 200, 201, 110, 116, 110, 134, 117, 110, 110, 4195 110, 163, 226, 114, 150, 165, 163, 164, 166, 116, 4196 135, 134, 134, 110, 116, 163, 134, 115, 161, 117, 4197 263, 110, 110, 110, 344, 263, 110, 259, 224, 362, 4198 111, 119, 163, 163, 226, 341, 263, 110, 110, 110, 4199 110, 110, 110, 110, 7, 226, 335, 339, 350, 134, 4200 134, 372, 134, 134, 110, 135, 135, 135, 135, 276, 4201 135, 161, 162, 163, 309, 134, 277, 279, 115, 134, 4202 210, 273, 40, 41, 43, 46, 47, 48, 49, 50, 4203 51, 52, 53, 57, 61, 62, 111, 128, 139, 169, 4204 170, 171, 172, 173, 174, 176, 177, 189, 191, 192, 4205 197, 211, 307, 29, 135, 131, 276, 134, 134, 110, 4206 135, 172, 247, 112, 110, 110, 110, 356, 251, 115, 4207 258, 371, 110, 116, 112, 112, 135, 226, 116, 372, 4208 289, 110, 285, 214, 216, 224, 297, 298, 299, 300, 4209 291, 110, 110, 117, 162, 109, 110, 117, 116, 139, 4210 163, 163, 278, 116, 135, 166, 112, 139, 146, 147, 4211 163, 145, 135, 146, 161, 165, 135, 109, 348, 349, 4212 135, 135, 134, 135, 135, 135, 163, 110, 135, 109, 4213 348, 349, 109, 354, 109, 354, 349, 225, 7, 119, 4214 135, 163, 263, 263, 262, 266, 266, 267, 116, 116, 4215 110, 110, 112, 96, 123, 135, 135, 146, 277, 163, 4216 116, 132, 211, 215, 226, 230, 109, 109, 170, 109, 4217 109, 132, 139, 132, 139, 119, 139, 169, 109, 172, 4218 164, 164, 112, 143, 117, 132, 135, 134, 135, 210, 4219 110, 163, 263, 263, 311, 110, 115, 109, 348, 349, 4220 115, 134, 110, 134, 135, 308, 115, 134, 135, 135, 4221 110, 114, 199, 112, 162, 132, 199, 201, 110, 116, 4222 135, 371, 164, 112, 135, 85, 113, 116, 135, 135, 4223 112, 135, 110, 134, 110, 110, 112, 112, 112, 135, 4224 110, 134, 134, 134, 163, 163, 135, 112, 135, 135, 4225 135, 135, 134, 134, 162, 162, 112, 112, 135, 135, 4226 273, 226, 168, 168, 47, 168, 134, 132, 132, 168, 4227 132, 132, 168, 58, 59, 60, 193, 194, 195, 132, 4228 63, 132, 114, 311, 174, 115, 132, 135, 135, 134, 4229 96, 268, 269, 110, 298, 116, 132, 116, 132, 115, 4230 296, 117, 141, 110, 110, 117, 166, 112, 115, 112, 4231 111, 147, 111, 147, 147, 112, 112, 112, 263, 112, 4232 263, 263, 263, 135, 135, 112, 112, 110, 110, 112, 4233 116, 96, 262, 96, 135, 112, 112, 110, 110, 109, 4234 110, 169, 190, 211, 132, 110, 109, 109, 172, 195, 4235 58, 59, 163, 144, 170, 110, 110, 263, 114, 134, 4236 134, 297, 141, 202, 109, 132, 202, 135, 117, 134, 4237 134, 135, 135, 135, 135, 112, 112, 134, 135, 112, 4238 170, 44, 45, 114, 180, 181, 182, 168, 170, 135, 4239 110, 169, 114, 182, 96, 134, 96, 134, 109, 109, 4240 132, 115, 135, 134, 271, 308, 115, 116, 117, 162, 4241 110, 112, 163, 146, 146, 110, 110, 110, 110, 266, 4242 42, 162, 178, 179, 309, 117, 134, 170, 180, 110, 4243 132, 170, 132, 134, 110, 134, 110, 134, 96, 134, 4244 96, 134, 132, 110, 297, 141, 139, 203, 110, 132, 4245 117, 135, 135, 170, 96, 116, 117, 135, 204, 205, 4246 211, 132, 169, 169, 204, 172, 196, 224, 365, 172, 4247 196, 110, 134, 110, 134, 115, 110, 116, 163, 112, 4248 112, 162, 178, 181, 183, 184, 134, 132, 181, 185, 4249 186, 135, 109, 119, 308, 356, 139, 135, 172, 196, 4250 172, 196, 109, 132, 139, 170, 175, 115, 181, 211, 4251 169, 56, 175, 188, 115, 181, 110, 226, 110, 135, 4252 135, 291, 170, 175, 132, 187, 188, 175, 188, 172, 4253 172, 110, 110, 110, 187, 135, 135, 172, 172, 135, 4254 135 4042 162, 164, 223, 272, 288, 362, 367, 225, 109, 109, 4043 109, 109, 109, 109, 109, 73, 74, 110, 223, 268, 4044 346, 364, 110, 118, 162, 215, 216, 222, 225, 229, 4045 230, 235, 238, 239, 241, 258, 259, 263, 264, 265, 4046 266, 280, 346, 358, 359, 360, 361, 366, 367, 111, 4047 108, 319, 323, 366, 108, 115, 131, 110, 113, 118, 4048 162, 274, 274, 114, 133, 115, 131, 108, 115, 131, 4049 115, 131, 115, 131, 308, 131, 315, 316, 317, 318, 4050 328, 329, 330, 331, 225, 314, 327, 63, 307, 110, 4051 308, 345, 346, 308, 308, 171, 133, 108, 308, 345, 4052 308, 308, 225, 305, 108, 108, 224, 225, 223, 225, 4053 111, 133, 223, 362, 367, 171, 133, 268, 273, 215, 4054 230, 319, 323, 171, 133, 290, 225, 235, 131, 225, 4055 225, 288, 39, 110, 223, 245, 246, 247, 248, 362, 4056 366, 113, 254, 270, 113, 225, 290, 131, 131, 301, 4057 133, 138, 267, 3, 134, 205, 206, 220, 222, 225, 4058 133, 307, 108, 307, 162, 315, 225, 108, 133, 268, 4059 113, 32, 33, 34, 223, 282, 283, 285, 133, 128, 4060 130, 287, 133, 226, 232, 233, 268, 311, 312, 313, 4061 108, 140, 108, 147, 108, 147, 149, 108, 147, 108, 4062 108, 147, 147, 138, 110, 162, 167, 171, 223, 271, 4063 362, 111, 133, 149, 149, 81, 84, 85, 86, 108, 4064 110, 112, 113, 96, 97, 98, 99, 100, 101, 102, 4065 103, 104, 105, 130, 166, 149, 118, 123, 124, 120, 4066 121, 87, 88, 89, 90, 125, 126, 91, 92, 119, 4067 127, 128, 93, 94, 129, 130, 369, 108, 118, 341, 4068 342, 343, 344, 345, 109, 115, 108, 345, 346, 108, 4069 345, 346, 133, 108, 223, 364, 111, 133, 110, 118, 4070 134, 223, 225, 357, 358, 366, 367, 134, 108, 110, 4071 118, 315, 332, 333, 334, 335, 336, 337, 338, 339, 4072 340, 346, 347, 348, 349, 350, 351, 352, 118, 366, 4073 225, 134, 134, 118, 223, 225, 359, 268, 223, 346, 4074 359, 268, 108, 133, 133, 133, 111, 133, 71, 79, 4075 110, 112, 139, 270, 274, 275, 276, 277, 278, 133, 4076 133, 133, 133, 133, 133, 305, 109, 109, 109, 109, 4077 109, 109, 109, 314, 327, 108, 273, 111, 205, 133, 4078 305, 167, 272, 167, 272, 305, 110, 205, 307, 171, 4079 133, 205, 109, 247, 248, 111, 133, 108, 116, 118, 4080 249, 251, 314, 315, 327, 345, 353, 354, 355, 356, 4081 114, 246, 115, 131, 115, 131, 270, 245, 115, 368, 4082 130, 255, 254, 225, 260, 261, 262, 265, 266, 109, 4083 115, 171, 133, 118, 162, 133, 222, 225, 259, 358, 4084 366, 299, 300, 108, 118, 332, 109, 115, 369, 270, 4085 282, 108, 113, 270, 272, 282, 109, 115, 108, 140, 4086 109, 116, 271, 271, 271, 110, 138, 144, 162, 272, 4087 271, 111, 133, 109, 115, 109, 108, 118, 353, 109, 4088 115, 162, 110, 138, 110, 143, 144, 133, 110, 138, 4089 143, 162, 162, 149, 149, 149, 150, 150, 151, 151, 4090 152, 152, 152, 152, 153, 153, 154, 155, 156, 157, 4091 158, 116, 167, 162, 133, 342, 343, 344, 225, 341, 4092 308, 308, 162, 272, 133, 267, 118, 133, 223, 346, 4093 359, 225, 229, 111, 133, 111, 366, 111, 108, 133, 4094 315, 333, 334, 335, 338, 348, 349, 350, 111, 133, 4095 225, 332, 336, 347, 108, 308, 351, 369, 308, 308, 4096 369, 108, 308, 351, 308, 308, 308, 308, 346, 223, 4097 357, 367, 268, 111, 115, 111, 115, 369, 223, 359, 4098 369, 256, 257, 258, 259, 256, 256, 268, 162, 133, 4099 110, 270, 116, 115, 368, 274, 79, 110, 116, 278, 4100 28, 207, 208, 268, 256, 138, 305, 138, 307, 108, 4101 345, 346, 108, 345, 346, 140, 346, 171, 260, 109, 4102 109, 109, 109, 111, 171, 205, 171, 113, 131, 131, 4103 110, 315, 354, 355, 356, 160, 161, 225, 353, 250, 4104 251, 250, 308, 308, 270, 308, 114, 270, 114, 161, 4105 368, 134, 134, 138, 220, 134, 134, 256, 108, 118, 4106 366, 134, 114, 225, 283, 284, 134, 133, 133, 108, 4107 134, 109, 312, 167, 168, 116, 131, 110, 140, 198, 4108 199, 200, 109, 115, 109, 133, 116, 109, 109, 109, 4109 162, 225, 113, 149, 164, 162, 163, 165, 115, 134, 4110 133, 133, 109, 115, 162, 133, 114, 160, 116, 260, 4111 109, 109, 109, 341, 260, 109, 256, 223, 359, 110, 4112 118, 162, 162, 225, 338, 260, 109, 109, 109, 109, 4113 109, 109, 109, 7, 225, 332, 336, 347, 133, 133, 4114 369, 133, 133, 109, 134, 134, 134, 134, 273, 134, 4115 160, 161, 162, 306, 133, 274, 276, 114, 133, 209, 4116 270, 39, 40, 42, 45, 46, 47, 48, 49, 50, 4117 51, 52, 56, 60, 61, 110, 127, 138, 168, 169, 4118 170, 171, 172, 173, 175, 176, 188, 190, 191, 196, 4119 210, 304, 28, 134, 130, 273, 133, 133, 109, 134, 4120 171, 245, 111, 109, 109, 109, 353, 249, 255, 114, 4121 109, 115, 111, 111, 134, 225, 115, 369, 286, 109, 4122 282, 213, 215, 223, 294, 295, 296, 297, 288, 109, 4123 109, 116, 161, 108, 109, 116, 115, 138, 162, 162, 4124 275, 115, 134, 165, 111, 138, 145, 146, 162, 144, 4125 134, 145, 160, 164, 134, 108, 345, 346, 134, 134, 4126 133, 134, 134, 134, 162, 109, 134, 108, 345, 346, 4127 108, 351, 108, 351, 346, 224, 7, 118, 134, 162, 4128 260, 260, 259, 263, 263, 264, 115, 115, 109, 109, 4129 111, 95, 122, 134, 134, 145, 274, 162, 115, 131, 4130 210, 214, 225, 229, 108, 108, 169, 108, 108, 131, 4131 138, 131, 138, 118, 138, 168, 108, 171, 163, 163, 4132 111, 142, 116, 131, 134, 133, 134, 209, 109, 162, 4133 260, 260, 308, 109, 114, 108, 345, 346, 133, 109, 4134 133, 134, 305, 114, 133, 134, 134, 109, 113, 198, 4135 111, 161, 131, 198, 200, 109, 115, 134, 368, 163, 4136 111, 134, 84, 112, 115, 134, 134, 111, 134, 109, 4137 133, 109, 109, 111, 111, 111, 134, 109, 133, 133, 4138 133, 162, 162, 134, 111, 134, 134, 134, 134, 133, 4139 133, 161, 161, 111, 111, 134, 134, 270, 225, 167, 4140 167, 46, 167, 133, 131, 131, 167, 131, 131, 167, 4141 57, 58, 59, 192, 193, 194, 131, 62, 131, 113, 4142 308, 173, 114, 131, 134, 134, 133, 95, 265, 266, 4143 109, 295, 115, 131, 115, 131, 114, 293, 116, 140, 4144 109, 109, 116, 165, 111, 114, 111, 110, 146, 110, 4145 146, 146, 111, 111, 111, 260, 111, 260, 260, 260, 4146 134, 134, 111, 111, 109, 109, 111, 115, 95, 259, 4147 95, 134, 111, 111, 109, 109, 108, 109, 168, 189, 4148 210, 131, 109, 108, 108, 171, 194, 57, 58, 162, 4149 143, 169, 109, 109, 260, 113, 133, 133, 294, 140, 4150 201, 108, 131, 201, 134, 116, 133, 133, 134, 134, 4151 134, 134, 111, 111, 133, 134, 111, 169, 43, 44, 4152 113, 179, 180, 181, 167, 169, 134, 109, 168, 113, 4153 181, 95, 133, 95, 133, 108, 108, 131, 114, 134, 4154 133, 268, 305, 114, 115, 116, 161, 109, 111, 162, 4155 145, 145, 109, 109, 109, 109, 263, 41, 161, 177, 4156 178, 306, 116, 133, 169, 179, 109, 131, 169, 131, 4157 133, 109, 133, 109, 133, 95, 133, 95, 133, 131, 4158 109, 294, 140, 138, 202, 109, 131, 116, 134, 134, 4159 169, 95, 115, 116, 134, 203, 204, 210, 131, 168, 4160 168, 203, 171, 195, 223, 362, 171, 195, 109, 133, 4161 109, 133, 114, 109, 115, 162, 111, 111, 161, 177, 4162 180, 182, 183, 133, 131, 180, 184, 185, 134, 108, 4163 118, 305, 353, 138, 134, 171, 195, 171, 195, 108, 4164 131, 138, 169, 174, 114, 180, 210, 168, 55, 174, 4165 187, 114, 180, 109, 225, 109, 134, 134, 288, 169, 4166 174, 131, 186, 187, 174, 187, 171, 171, 109, 109, 4167 109, 186, 134, 134, 171, 171, 134, 134 4255 4168 }; 4256 4169 … … 5089 5002 5090 5003 /* Line 1806 of yacc.c */ 5091 #line 29 2"parser.yy"5004 #line 290 "parser.yy" 5092 5005 { 5093 5006 typedefTable.enterScope(); … … 5098 5011 5099 5012 /* Line 1806 of yacc.c */ 5100 #line 29 8"parser.yy"5013 #line 296 "parser.yy" 5101 5014 { 5102 5015 typedefTable.leaveScope(); … … 5107 5020 5108 5021 /* Line 1806 of yacc.c */ 5022 #line 305 "parser.yy" 5023 { (yyval.constant) = new ConstantNode( ConstantNode::Integer, (yyvsp[(1) - (1)].tok) ); } 5024 break; 5025 5026 case 5: 5027 5028 /* Line 1806 of yacc.c */ 5029 #line 306 "parser.yy" 5030 { (yyval.constant) = new ConstantNode( ConstantNode::Float, (yyvsp[(1) - (1)].tok) ); } 5031 break; 5032 5033 case 6: 5034 5035 /* Line 1806 of yacc.c */ 5109 5036 #line 307 "parser.yy" 5110 { (yyval.constant) = new ConstantNode( ConstantNode::Integer, (yyvsp[(1) - (1)].tok) ); }5111 break;5112 5113 case 5:5114 5115 /* Line 1806 of yacc.c */5116 #line 308 "parser.yy"5117 { (yyval.constant) = new ConstantNode( ConstantNode::Float, (yyvsp[(1) - (1)].tok) ); }5118 break;5119 5120 case 6:5121 5122 /* Line 1806 of yacc.c */5123 #line 309 "parser.yy"5124 5037 { (yyval.constant) = new ConstantNode( ConstantNode::Character, (yyvsp[(1) - (1)].tok) ); } 5125 5038 break; … … 5128 5041 5129 5042 /* Line 1806 of yacc.c */ 5130 #line 33 4"parser.yy"5043 #line 332 "parser.yy" 5131 5044 { (yyval.constant) = new ConstantNode( ConstantNode::String, (yyvsp[(1) - (1)].tok) ); } 5132 5045 break; … … 5135 5048 5136 5049 /* Line 1806 of yacc.c */ 5137 #line 33 5"parser.yy"5050 #line 333 "parser.yy" 5138 5051 { (yyval.constant) = (yyvsp[(1) - (2)].constant)->appendstr( (yyvsp[(2) - (2)].tok) ); } 5139 5052 break; 5140 5053 5141 5054 case 18: 5055 5056 /* Line 1806 of yacc.c */ 5057 #line 340 "parser.yy" 5058 { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); } 5059 break; 5060 5061 case 19: 5142 5062 5143 5063 /* Line 1806 of yacc.c */ … … 5146 5066 break; 5147 5067 5148 case 19:5068 case 20: 5149 5069 5150 5070 /* Line 1806 of yacc.c */ 5151 5071 #line 344 "parser.yy" 5152 { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok)); }5153 break; 5154 5155 case 2 0:5072 { (yyval.en) = (yyvsp[(2) - (3)].en); } 5073 break; 5074 5075 case 21: 5156 5076 5157 5077 /* Line 1806 of yacc.c */ 5158 5078 #line 346 "parser.yy" 5159 { (yyval.en) = (yyvsp[(2) - (3)].en); }5160 break;5161 5162 case 21:5163 5164 /* Line 1806 of yacc.c */5165 #line 348 "parser.yy"5166 5079 { (yyval.en) = new ValofExprNode( (yyvsp[(2) - (3)].sn) ); } 5167 5080 break; … … 5170 5083 5171 5084 /* Line 1806 of yacc.c */ 5085 #line 356 "parser.yy" 5086 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Index ), (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ); } 5087 break; 5088 5089 case 24: 5090 5091 /* Line 1806 of yacc.c */ 5172 5092 #line 358 "parser.yy" 5173 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Index ), (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ); }5174 break;5175 5176 case 24:5177 5178 /* Line 1806 of yacc.c */5179 #line 360 "parser.yy"5180 5093 { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ); } 5181 5094 break; … … 5184 5097 5185 5098 /* Line 1806 of yacc.c */ 5186 #line 36 4"parser.yy"5099 #line 362 "parser.yy" 5187 5100 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); } 5188 5101 break; … … 5191 5104 5192 5105 /* Line 1806 of yacc.c */ 5193 #line 36 7"parser.yy"5106 #line 365 "parser.yy" 5194 5107 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); } 5195 5108 break; … … 5198 5111 5199 5112 /* Line 1806 of yacc.c */ 5113 #line 368 "parser.yy" 5114 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::IncrPost ), (yyvsp[(1) - (2)].en) ); } 5115 break; 5116 5117 case 30: 5118 5119 /* Line 1806 of yacc.c */ 5200 5120 #line 370 "parser.yy" 5201 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode:: IncrPost ), (yyvsp[(1) - (2)].en) ); }5202 break; 5203 5204 case 3 0:5121 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), (yyvsp[(1) - (2)].en) ); } 5122 break; 5123 5124 case 31: 5205 5125 5206 5126 /* Line 1806 of yacc.c */ 5207 5127 #line 372 "parser.yy" 5208 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), (yyvsp[(1) - (2)].en) ); }5209 break; 5210 5211 case 3 1:5128 { (yyval.en) = 0; } 5129 break; 5130 5131 case 32: 5212 5132 5213 5133 /* Line 1806 of yacc.c */ 5214 5134 #line 374 "parser.yy" 5215 { (yyval.en) = new CompoundLiteralNode( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ); }5216 break;5217 5218 case 32:5219 5220 /* Line 1806 of yacc.c */5221 #line 376 "parser.yy"5222 5135 { 5223 5136 Token fn; fn.str = new std::string( "?{}" ); // location undefined … … 5229 5142 5230 5143 /* Line 1806 of yacc.c */ 5231 #line 38 5"parser.yy"5144 #line 383 "parser.yy" 5232 5145 { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); } 5233 5146 break; … … 5236 5149 5237 5150 /* Line 1806 of yacc.c */ 5238 #line 3 90"parser.yy"5151 #line 388 "parser.yy" 5239 5152 { (yyval.en) = 0; } 5240 5153 break; … … 5243 5156 5244 5157 /* Line 1806 of yacc.c */ 5245 #line 39 3"parser.yy"5158 #line 391 "parser.yy" 5246 5159 { (yyval.en) = (yyvsp[(3) - (3)].en)->set_argName( (yyvsp[(1) - (3)].tok) ); } 5247 5160 break; … … 5250 5163 5251 5164 /* Line 1806 of yacc.c */ 5165 #line 396 "parser.yy" 5166 { (yyval.en) = (yyvsp[(7) - (7)].en)->set_argName( (yyvsp[(3) - (7)].en) ); } 5167 break; 5168 5169 case 39: 5170 5171 /* Line 1806 of yacc.c */ 5252 5172 #line 398 "parser.yy" 5253 { (yyval.en) = (yyvsp[(7) - (7)].en)->set_argName( (yyvsp[(3) - (7)].en) ); }5254 break;5255 5256 case 39:5257 5258 /* Line 1806 of yacc.c */5259 #line 400 "parser.yy"5260 5173 { (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) )))); } 5261 5174 break; … … 5264 5177 5265 5178 /* Line 1806 of yacc.c */ 5266 #line 40 5"parser.yy"5179 #line 403 "parser.yy" 5267 5180 { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); } 5268 5181 break; … … 5271 5184 5272 5185 /* Line 1806 of yacc.c */ 5273 #line 4 10"parser.yy"5186 #line 408 "parser.yy" 5274 5187 { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); } 5275 5188 break; … … 5278 5191 5279 5192 /* Line 1806 of yacc.c */ 5193 #line 412 "parser.yy" 5194 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); } 5195 break; 5196 5197 case 44: 5198 5199 /* Line 1806 of yacc.c */ 5280 5200 #line 414 "parser.yy" 5281 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - ( 3)].tok) ), (yyvsp[(3) - (3)].en) ); }5282 break; 5283 5284 case 4 4:5201 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); } 5202 break; 5203 5204 case 45: 5285 5205 5286 5206 /* Line 1806 of yacc.c */ 5287 5207 #line 416 "parser.yy" 5288 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode:: FieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }5289 break; 5290 5291 case 4 5:5208 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); } 5209 break; 5210 5211 case 46: 5292 5212 5293 5213 /* Line 1806 of yacc.c */ 5294 5214 #line 418 "parser.yy" 5295 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }5296 break;5297 5298 case 46:5299 5300 /* Line 1806 of yacc.c */5301 #line 420 "parser.yy"5302 5215 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); } 5303 5216 break; 5304 5217 5305 5218 case 48: 5219 5220 /* Line 1806 of yacc.c */ 5221 #line 426 "parser.yy" 5222 { (yyval.en) = (yyvsp[(1) - (1)].constant); } 5223 break; 5224 5225 case 49: 5306 5226 5307 5227 /* Line 1806 of yacc.c */ … … 5310 5230 break; 5311 5231 5312 case 49:5232 case 50: 5313 5233 5314 5234 /* Line 1806 of yacc.c */ 5315 5235 #line 430 "parser.yy" 5316 { (yyval.en) = (yyvsp[(1) - (1)].constant); }5317 break; 5318 5319 case 5 0:5236 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Incr ), (yyvsp[(2) - (2)].en) ); } 5237 break; 5238 5239 case 51: 5320 5240 5321 5241 /* Line 1806 of yacc.c */ 5322 5242 #line 432 "parser.yy" 5323 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode:: Incr ), (yyvsp[(2) - (2)].en) ); }5324 break; 5325 5326 case 5 1:5243 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), (yyvsp[(2) - (2)].en) ); } 5244 break; 5245 5246 case 52: 5327 5247 5328 5248 /* Line 1806 of yacc.c */ 5329 5249 #line 434 "parser.yy" 5330 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), (yyvsp[(2) - (2)].en)); }5331 break; 5332 5333 case 5 2:5250 { (yyval.en) = (yyvsp[(2) - (2)].en); } 5251 break; 5252 5253 case 53: 5334 5254 5335 5255 /* Line 1806 of yacc.c */ 5336 5256 #line 436 "parser.yy" 5337 { (yyval.en) = (yyvsp[(2) - (2)].en); }5338 break; 5339 5340 case 5 3:5257 { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); } 5258 break; 5259 5260 case 54: 5341 5261 5342 5262 /* Line 1806 of yacc.c */ 5343 5263 #line 438 "parser.yy" 5344 { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }5345 break; 5346 5347 case 5 4:5264 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neg ), (yyvsp[(2) - (2)].en) ); } 5265 break; 5266 5267 case 55: 5348 5268 5349 5269 /* Line 1806 of yacc.c */ 5350 5270 #line 440 "parser.yy" 5351 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neg ), (yyvsp[(2) - (2)].en) ); }5352 break;5353 5354 case 55:5355 5356 /* Line 1806 of yacc.c */5357 #line 442 "parser.yy"5358 5271 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PointTo ), (yyvsp[(2) - (2)].en) ); } 5359 5272 break; … … 5362 5275 5363 5276 /* Line 1806 of yacc.c */ 5277 #line 446 "parser.yy" 5278 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), (yyvsp[(2) - (2)].en) ); } 5279 break; 5280 5281 case 57: 5282 5283 /* Line 1806 of yacc.c */ 5364 5284 #line 448 "parser.yy" 5365 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), (yyvsp[(2) - (2)].en)); }5366 break; 5367 5368 case 5 7:5285 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); } 5286 break; 5287 5288 case 58: 5369 5289 5370 5290 /* Line 1806 of yacc.c */ 5371 5291 #line 450 "parser.yy" 5372 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode:: SizeOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }5373 break; 5374 5375 case 5 8:5292 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( (yyvsp[(3) - (6)].decl) ), new VarRefNode( (yyvsp[(5) - (6)].tok) )); } 5293 break; 5294 5295 case 59: 5376 5296 5377 5297 /* Line 1806 of yacc.c */ 5378 5298 #line 452 "parser.yy" 5379 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode:: OffsetOf ), new TypeValueNode( (yyvsp[(3) - (6)].decl) ), new VarRefNode( (yyvsp[(5) - (6)].tok) )); }5380 break; 5381 5382 case 59:5299 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (1)].tok) )); } 5300 break; 5301 5302 case 60: 5383 5303 5384 5304 /* Line 1806 of yacc.c */ 5385 5305 #line 454 "parser.yy" 5386 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - ( 1)].tok) )); }5387 break; 5388 5389 case 6 0:5306 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); } 5307 break; 5308 5309 case 61: 5390 5310 5391 5311 /* Line 1806 of yacc.c */ 5392 5312 #line 456 "parser.yy" 5393 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }5394 break; 5395 5396 case 6 1:5313 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ); } 5314 break; 5315 5316 case 62: 5397 5317 5398 5318 /* Line 1806 of yacc.c */ 5399 5319 #line 458 "parser.yy" 5400 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::A ttr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ); }5401 break; 5402 5403 case 6 2:5320 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), (yyvsp[(2) - (2)].en) ); } 5321 break; 5322 5323 case 63: 5404 5324 5405 5325 /* Line 1806 of yacc.c */ 5406 5326 #line 460 "parser.yy" 5407 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), (yyvsp[(2) - (2)].en) ); }5408 break; 5409 5410 case 6 3:5327 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ); } 5328 break; 5329 5330 case 64: 5411 5331 5412 5332 /* Line 1806 of yacc.c */ 5413 5333 #line 462 "parser.yy" 5414 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ); }5415 break;5416 5417 case 64:5418 5419 /* Line 1806 of yacc.c */5420 #line 464 "parser.yy"5421 5334 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LabelAddress ), new VarRefNode( (yyvsp[(2) - (2)].tok), true ) ); } 5422 5335 break; … … 5425 5338 5426 5339 /* Line 1806 of yacc.c */ 5340 #line 466 "parser.yy" 5341 { (yyval.en) = new OperatorNode( OperatorNode::AddressOf ); } 5342 break; 5343 5344 case 66: 5345 5346 /* Line 1806 of yacc.c */ 5347 #line 467 "parser.yy" 5348 { (yyval.en) = new OperatorNode( OperatorNode::UnPlus ); } 5349 break; 5350 5351 case 67: 5352 5353 /* Line 1806 of yacc.c */ 5427 5354 #line 468 "parser.yy" 5428 { (yyval.en) = new OperatorNode( OperatorNode:: AddressOf); }5429 break; 5430 5431 case 6 6:5355 { (yyval.en) = new OperatorNode( OperatorNode::UnMinus ); } 5356 break; 5357 5358 case 68: 5432 5359 5433 5360 /* Line 1806 of yacc.c */ 5434 5361 #line 469 "parser.yy" 5435 { (yyval.en) = new OperatorNode( OperatorNode::UnPlus ); }5436 break;5437 5438 case 67:5439 5440 /* Line 1806 of yacc.c */5441 #line 470 "parser.yy"5442 { (yyval.en) = new OperatorNode( OperatorNode::UnMinus ); }5443 break;5444 5445 case 68:5446 5447 /* Line 1806 of yacc.c */5448 #line 471 "parser.yy"5449 5362 { (yyval.en) = new OperatorNode( OperatorNode::BitNeg ); } 5450 5363 break; 5451 5364 5452 5365 case 70: 5366 5367 /* Line 1806 of yacc.c */ 5368 #line 475 "parser.yy" 5369 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); } 5370 break; 5371 5372 case 71: 5453 5373 5454 5374 /* Line 1806 of yacc.c */ … … 5457 5377 break; 5458 5378 5459 case 71:5460 5461 /* Line 1806 of yacc.c */5462 #line 479 "parser.yy"5463 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }5464 break;5465 5466 5379 case 73: 5467 5380 5468 5381 /* Line 1806 of yacc.c */ 5382 #line 483 "parser.yy" 5383 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mul ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5384 break; 5385 5386 case 74: 5387 5388 /* Line 1806 of yacc.c */ 5469 5389 #line 485 "parser.yy" 5470 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode:: Mul), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }5471 break; 5472 5473 case 7 4:5390 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Div ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5391 break; 5392 5393 case 75: 5474 5394 5475 5395 /* Line 1806 of yacc.c */ 5476 5396 #line 487 "parser.yy" 5477 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Div ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }5478 break;5479 5480 case 75:5481 5482 /* Line 1806 of yacc.c */5483 #line 489 "parser.yy"5484 5397 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mod ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5485 5398 break; … … 5488 5401 5489 5402 /* Line 1806 of yacc.c */ 5403 #line 493 "parser.yy" 5404 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Plus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5405 break; 5406 5407 case 78: 5408 5409 /* Line 1806 of yacc.c */ 5490 5410 #line 495 "parser.yy" 5491 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Plus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }5492 break;5493 5494 case 78:5495 5496 /* Line 1806 of yacc.c */5497 #line 497 "parser.yy"5498 5411 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Minus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5499 5412 break; … … 5502 5415 5503 5416 /* Line 1806 of yacc.c */ 5417 #line 501 "parser.yy" 5418 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5419 break; 5420 5421 case 81: 5422 5423 /* Line 1806 of yacc.c */ 5504 5424 #line 503 "parser.yy" 5505 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }5506 break;5507 5508 case 81:5509 5510 /* Line 1806 of yacc.c */5511 #line 505 "parser.yy"5512 5425 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::RShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5513 5426 break; … … 5516 5429 5517 5430 /* Line 1806 of yacc.c */ 5431 #line 509 "parser.yy" 5432 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5433 break; 5434 5435 case 84: 5436 5437 /* Line 1806 of yacc.c */ 5518 5438 #line 511 "parser.yy" 5519 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode:: LThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }5520 break; 5521 5522 case 8 4:5439 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5440 break; 5441 5442 case 85: 5523 5443 5524 5444 /* Line 1806 of yacc.c */ 5525 5445 #line 513 "parser.yy" 5526 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode:: GThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }5527 break; 5528 5529 case 8 5:5446 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5447 break; 5448 5449 case 86: 5530 5450 5531 5451 /* Line 1806 of yacc.c */ 5532 5452 #line 515 "parser.yy" 5533 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }5534 break;5535 5536 case 86:5537 5538 /* Line 1806 of yacc.c */5539 #line 517 "parser.yy"5540 5453 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5541 5454 break; … … 5544 5457 5545 5458 /* Line 1806 of yacc.c */ 5459 #line 521 "parser.yy" 5460 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Eq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5461 break; 5462 5463 case 89: 5464 5465 /* Line 1806 of yacc.c */ 5546 5466 #line 523 "parser.yy" 5547 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Eq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }5548 break;5549 5550 case 89:5551 5552 /* Line 1806 of yacc.c */5553 #line 525 "parser.yy"5554 5467 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5555 5468 break; … … 5558 5471 5559 5472 /* Line 1806 of yacc.c */ 5560 #line 5 31"parser.yy"5473 #line 529 "parser.yy" 5561 5474 { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::BitAnd ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5562 5475 break; … … 5565 5478 5566 5479 /* Line 1806 of yacc.c */ 5567 #line 53 7"parser.yy"5480 #line 535 "parser.yy" 5568 5481 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Xor ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5569 5482 break; … … 5572 5485 5573 5486 /* Line 1806 of yacc.c */ 5574 #line 54 3"parser.yy"5487 #line 541 "parser.yy" 5575 5488 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::BitOr ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5576 5489 break; … … 5579 5492 5580 5493 /* Line 1806 of yacc.c */ 5581 #line 54 9"parser.yy"5494 #line 547 "parser.yy" 5582 5495 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::And ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5583 5496 break; … … 5586 5499 5587 5500 /* Line 1806 of yacc.c */ 5588 #line 55 5"parser.yy"5501 #line 553 "parser.yy" 5589 5502 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Or ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5590 5503 break; … … 5593 5506 5594 5507 /* Line 1806 of yacc.c */ 5508 #line 559 "parser.yy" 5509 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); } 5510 break; 5511 5512 case 102: 5513 5514 /* Line 1806 of yacc.c */ 5595 5515 #line 561 "parser.yy" 5516 { (yyval.en)=new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ); } 5517 break; 5518 5519 case 103: 5520 5521 /* Line 1806 of yacc.c */ 5522 #line 563 "parser.yy" 5596 5523 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); } 5597 5524 break; 5598 5525 5599 case 102:5600 5601 /* Line 1806 of yacc.c */5602 #line 563 "parser.yy"5603 { (yyval.en)=new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ); }5604 break;5605 5606 case 103:5607 5608 /* Line 1806 of yacc.c */5609 #line 565 "parser.yy"5610 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }5611 break;5612 5613 5526 case 106: 5614 5527 5615 5528 /* Line 1806 of yacc.c */ 5529 #line 574 "parser.yy" 5530 { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5531 break; 5532 5533 case 107: 5534 5535 /* Line 1806 of yacc.c */ 5616 5536 #line 576 "parser.yy" 5617 { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::Assign), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }5618 break; 5619 5620 case 10 7:5537 { (yyval.en) =new CompositeExprNode( (yyvsp[(2) - (3)].en), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5538 break; 5539 5540 case 108: 5621 5541 5622 5542 /* Line 1806 of yacc.c */ 5623 5543 #line 578 "parser.yy" 5624 { (yyval.en) =new CompositeExprNode( (yyvsp[(2) - (3)].en), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }5625 break;5626 5627 case 108:5628 5629 /* Line 1806 of yacc.c */5630 #line 580 "parser.yy"5631 5544 { (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) ); } 5632 5545 break; … … 5635 5548 5636 5549 /* Line 1806 of yacc.c */ 5637 #line 58 5"parser.yy"5550 #line 583 "parser.yy" 5638 5551 { (yyval.en) = new NullExprNode; } 5639 5552 break; … … 5642 5555 5643 5556 /* Line 1806 of yacc.c */ 5557 #line 591 "parser.yy" 5558 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ) ); } 5559 break; 5560 5561 case 112: 5562 5563 /* Line 1806 of yacc.c */ 5644 5564 #line 593 "parser.yy" 5645 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ) ); }5646 break; 5647 5648 case 11 2:5565 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (yyvsp[(3) - (5)].en) ); } 5566 break; 5567 5568 case 113: 5649 5569 5650 5570 /* Line 1806 of yacc.c */ 5651 5571 #line 595 "parser.yy" 5652 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), ( yyvsp[(3) - (5)].en) ); }5653 break; 5654 5655 case 11 3:5572 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(new NullExprNode)->set_link( (yyvsp[(4) - (6)].en) ) ); } 5573 break; 5574 5575 case 114: 5656 5576 5657 5577 /* Line 1806 of yacc.c */ 5658 5578 #line 597 "parser.yy" 5659 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(new NullExprNode)->set_link( (yyvsp[(4) - (6)].en) ) ); }5660 break;5661 5662 case 114:5663 5664 /* Line 1806 of yacc.c */5665 #line 599 "parser.yy"5666 5579 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( flattenCommas( (yyvsp[(5) - (7)].en) ) ) ); } 5667 5580 break; … … 5670 5583 5671 5584 /* Line 1806 of yacc.c */ 5672 #line 60 5"parser.yy"5585 #line 603 "parser.yy" 5673 5586 { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); } 5674 5587 break; … … 5677 5590 5678 5591 /* Line 1806 of yacc.c */ 5592 #line 607 "parser.yy" 5593 { (yyval.en) = new OperatorNode( OperatorNode::MulAssn ); } 5594 break; 5595 5596 case 118: 5597 5598 /* Line 1806 of yacc.c */ 5599 #line 608 "parser.yy" 5600 { (yyval.en) = new OperatorNode( OperatorNode::DivAssn ); } 5601 break; 5602 5603 case 119: 5604 5605 /* Line 1806 of yacc.c */ 5679 5606 #line 609 "parser.yy" 5680 { (yyval.en) = new OperatorNode( OperatorNode::M ulAssn ); }5681 break; 5682 5683 case 1 18:5607 { (yyval.en) = new OperatorNode( OperatorNode::ModAssn ); } 5608 break; 5609 5610 case 120: 5684 5611 5685 5612 /* Line 1806 of yacc.c */ 5686 5613 #line 610 "parser.yy" 5687 { (yyval.en) = new OperatorNode( OperatorNode:: DivAssn ); }5688 break; 5689 5690 case 1 19:5614 { (yyval.en) = new OperatorNode( OperatorNode::PlusAssn ); } 5615 break; 5616 5617 case 121: 5691 5618 5692 5619 /* Line 1806 of yacc.c */ 5693 5620 #line 611 "parser.yy" 5694 { (yyval.en) = new OperatorNode( OperatorNode::M odAssn ); }5695 break; 5696 5697 case 12 0:5621 { (yyval.en) = new OperatorNode( OperatorNode::MinusAssn ); } 5622 break; 5623 5624 case 122: 5698 5625 5699 5626 /* Line 1806 of yacc.c */ 5700 5627 #line 612 "parser.yy" 5701 { (yyval.en) = new OperatorNode( OperatorNode:: PlusAssn ); }5702 break; 5703 5704 case 12 1:5628 { (yyval.en) = new OperatorNode( OperatorNode::LSAssn ); } 5629 break; 5630 5631 case 123: 5705 5632 5706 5633 /* Line 1806 of yacc.c */ 5707 5634 #line 613 "parser.yy" 5708 { (yyval.en) = new OperatorNode( OperatorNode:: MinusAssn ); }5709 break; 5710 5711 case 12 2:5635 { (yyval.en) = new OperatorNode( OperatorNode::RSAssn ); } 5636 break; 5637 5638 case 124: 5712 5639 5713 5640 /* Line 1806 of yacc.c */ 5714 5641 #line 614 "parser.yy" 5715 { (yyval.en) = new OperatorNode( OperatorNode:: LSAssn ); }5716 break; 5717 5718 case 12 3:5642 { (yyval.en) = new OperatorNode( OperatorNode::AndAssn ); } 5643 break; 5644 5645 case 125: 5719 5646 5720 5647 /* Line 1806 of yacc.c */ 5721 5648 #line 615 "parser.yy" 5722 { (yyval.en) = new OperatorNode( OperatorNode:: RSAssn ); }5723 break; 5724 5725 case 12 4:5649 { (yyval.en) = new OperatorNode( OperatorNode::ERAssn ); } 5650 break; 5651 5652 case 126: 5726 5653 5727 5654 /* Line 1806 of yacc.c */ 5728 5655 #line 616 "parser.yy" 5729 { (yyval.en) = new OperatorNode( OperatorNode::AndAssn ); }5730 break;5731 5732 case 125:5733 5734 /* Line 1806 of yacc.c */5735 #line 617 "parser.yy"5736 { (yyval.en) = new OperatorNode( OperatorNode::ERAssn ); }5737 break;5738 5739 case 126:5740 5741 /* Line 1806 of yacc.c */5742 #line 618 "parser.yy"5743 5656 { (yyval.en) = new OperatorNode( OperatorNode::OrAssn ); } 5744 5657 break; … … 5747 5660 5748 5661 /* Line 1806 of yacc.c */ 5749 #line 62 4"parser.yy"5662 #line 622 "parser.yy" 5750 5663 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Comma ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5751 5664 break; … … 5754 5667 5755 5668 /* Line 1806 of yacc.c */ 5756 #line 62 9"parser.yy"5669 #line 627 "parser.yy" 5757 5670 { (yyval.en) = 0; } 5758 5671 break; … … 5761 5674 5762 5675 /* Line 1806 of yacc.c */ 5763 #line 63 8"parser.yy"5676 #line 636 "parser.yy" 5764 5677 { (yyval.sn) = (yyvsp[(1) - (1)].sn); } 5765 5678 break; … … 5768 5681 5769 5682 /* Line 1806 of yacc.c */ 5770 #line 64 5"parser.yy"5683 #line 643 "parser.yy" 5771 5684 { 5772 5685 Token fn; fn.str = new std::string( "^?{}" ); // location undefined … … 5779 5692 5780 5693 /* Line 1806 of yacc.c */ 5781 #line 65 4"parser.yy"5694 #line 652 "parser.yy" 5782 5695 { 5783 5696 (yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) ); … … 5788 5701 5789 5702 /* Line 1806 of yacc.c */ 5790 #line 6 61"parser.yy"5703 #line 659 "parser.yy" 5791 5704 { (yyval.sn) = new CompoundStmtNode( (StatementNode *)0 ); } 5792 5705 break; … … 5795 5708 5796 5709 /* Line 1806 of yacc.c */ 5797 #line 66 8"parser.yy"5710 #line 666 "parser.yy" 5798 5711 { (yyval.sn) = new CompoundStmtNode( (yyvsp[(5) - (7)].sn) ); } 5799 5712 break; … … 5802 5715 5803 5716 /* Line 1806 of yacc.c */ 5804 #line 67 4"parser.yy"5717 #line 672 "parser.yy" 5805 5718 { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } } 5806 5719 break; … … 5809 5722 5810 5723 /* Line 1806 of yacc.c */ 5724 #line 677 "parser.yy" 5725 { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); } 5726 break; 5727 5728 case 146: 5729 5730 /* Line 1806 of yacc.c */ 5811 5731 #line 679 "parser.yy" 5732 { (yyval.sn) = new StatementNode( (yyvsp[(2) - (2)].decl) ); } 5733 break; 5734 5735 case 147: 5736 5737 /* Line 1806 of yacc.c */ 5738 #line 681 "parser.yy" 5812 5739 { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); } 5813 5740 break; 5814 5741 5815 case 146:5816 5817 /* Line 1806 of yacc.c */5818 #line 681 "parser.yy"5819 { (yyval.sn) = new StatementNode( (yyvsp[(2) - (2)].decl) ); }5820 break;5821 5822 case 147:5823 5824 /* Line 1806 of yacc.c */5825 #line 683 "parser.yy"5826 { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }5827 break;5828 5829 5742 case 150: 5830 5743 5831 5744 /* Line 1806 of yacc.c */ 5832 #line 6 90"parser.yy"5745 #line 688 "parser.yy" 5833 5746 { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } } 5834 5747 break; … … 5837 5750 5838 5751 /* Line 1806 of yacc.c */ 5839 #line 69 5"parser.yy"5752 #line 693 "parser.yy" 5840 5753 { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); } 5841 5754 break; … … 5844 5757 5845 5758 /* Line 1806 of yacc.c */ 5759 #line 699 "parser.yy" 5760 { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); } 5761 break; 5762 5763 case 153: 5764 5765 /* Line 1806 of yacc.c */ 5846 5766 #line 701 "parser.yy" 5847 { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - ( 5)].en), (yyvsp[(5) - (5)].sn) ); }5848 break; 5849 5850 case 15 3:5767 { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); } 5768 break; 5769 5770 case 154: 5851 5771 5852 5772 /* Line 1806 of yacc.c */ 5853 5773 #line 703 "parser.yy" 5854 { (yyval.sn) = new StatementNode( StatementNode:: If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); }5855 break; 5856 5857 case 15 4:5774 { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); } 5775 break; 5776 5777 case 155: 5858 5778 5859 5779 /* Line 1806 of yacc.c */ 5860 5780 #line 705 "parser.yy" 5861 { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }5862 break;5863 5864 case 155:5865 5866 /* Line 1806 of yacc.c */5867 #line 707 "parser.yy"5868 5781 { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); /* xxx */ } 5869 5782 break; … … 5872 5785 5873 5786 /* Line 1806 of yacc.c */ 5787 #line 710 "parser.yy" 5788 { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); } 5789 break; 5790 5791 case 157: 5792 5793 /* Line 1806 of yacc.c */ 5874 5794 #line 712 "parser.yy" 5875 { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }5876 break;5877 5878 case 157:5879 5880 /* Line 1806 of yacc.c */5881 #line 714 "parser.yy"5882 5795 { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); } 5883 5796 break; … … 5886 5799 5887 5800 /* Line 1806 of yacc.c */ 5801 #line 719 "parser.yy" 5802 { (yyval.en) = (yyvsp[(1) - (1)].en); } 5803 break; 5804 5805 case 159: 5806 5807 /* Line 1806 of yacc.c */ 5888 5808 #line 721 "parser.yy" 5889 { (yyval.en) = (yyvsp[(1) - (1)].en); }5890 break;5891 5892 case 159:5893 5894 /* Line 1806 of yacc.c */5895 #line 723 "parser.yy"5896 5809 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 5897 5810 break; … … 5900 5813 5901 5814 /* Line 1806 of yacc.c */ 5902 #line 7 30"parser.yy"5815 #line 728 "parser.yy" 5903 5816 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(tupleContents( (yyvsp[(1) - (3)].en) ))->set_link( (yyvsp[(3) - (3)].en) ) ); } 5904 5817 break; … … 5907 5820 5908 5821 /* Line 1806 of yacc.c */ 5909 #line 73 4"parser.yy"5822 #line 732 "parser.yy" 5910 5823 { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(2) - (3)].en), 0 ); } 5911 5824 break; … … 5914 5827 5915 5828 /* Line 1806 of yacc.c */ 5916 #line 73 5"parser.yy"5829 #line 733 "parser.yy" 5917 5830 { (yyval.sn) = new StatementNode( StatementNode::Default ); } 5918 5831 break; … … 5921 5834 5922 5835 /* Line 1806 of yacc.c */ 5923 #line 7 41"parser.yy"5836 #line 739 "parser.yy" 5924 5837 { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); } 5925 5838 break; … … 5928 5841 5929 5842 /* Line 1806 of yacc.c */ 5930 #line 74 5"parser.yy"5843 #line 743 "parser.yy" 5931 5844 { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); } 5932 5845 break; … … 5935 5848 5936 5849 /* Line 1806 of yacc.c */ 5937 #line 7 50"parser.yy"5850 #line 748 "parser.yy" 5938 5851 { (yyval.sn) = 0; } 5939 5852 break; … … 5942 5855 5943 5856 /* Line 1806 of yacc.c */ 5857 #line 754 "parser.yy" 5858 { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); } 5859 break; 5860 5861 case 171: 5862 5863 /* Line 1806 of yacc.c */ 5944 5864 #line 756 "parser.yy" 5865 { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); } 5866 break; 5867 5868 case 172: 5869 5870 /* Line 1806 of yacc.c */ 5871 #line 761 "parser.yy" 5872 { (yyval.sn) = 0; } 5873 break; 5874 5875 case 174: 5876 5877 /* Line 1806 of yacc.c */ 5878 #line 767 "parser.yy" 5945 5879 { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); } 5946 5880 break; 5947 5881 5948 case 171: 5949 5950 /* Line 1806 of yacc.c */ 5951 #line 758 "parser.yy" 5882 case 175: 5883 5884 /* Line 1806 of yacc.c */ 5885 #line 769 "parser.yy" 5886 { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].sn) ))); } 5887 break; 5888 5889 case 176: 5890 5891 /* Line 1806 of yacc.c */ 5892 #line 771 "parser.yy" 5952 5893 { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); } 5953 5894 break; 5954 5895 5955 case 172: 5956 5957 /* Line 1806 of yacc.c */ 5958 #line 763 "parser.yy" 5896 case 177: 5897 5898 /* Line 1806 of yacc.c */ 5899 #line 773 "parser.yy" 5900 { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_link( (yyvsp[(2) - (4)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(3) - (4)].sn),*(yyvsp[(4) - (4)].sn) ))))); } 5901 break; 5902 5903 case 178: 5904 5905 /* Line 1806 of yacc.c */ 5906 #line 778 "parser.yy" 5959 5907 { (yyval.sn) = 0; } 5960 5908 break; 5961 5909 5962 case 174:5963 5964 /* Line 1806 of yacc.c */5965 #line 769 "parser.yy"5966 { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }5967 break;5968 5969 case 175:5970 5971 /* Line 1806 of yacc.c */5972 #line 771 "parser.yy"5973 { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].sn) ))); }5974 break;5975 5976 case 176:5977 5978 /* Line 1806 of yacc.c */5979 #line 773 "parser.yy"5980 { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }5981 break;5982 5983 case 177:5984 5985 /* Line 1806 of yacc.c */5986 #line 775 "parser.yy"5987 { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_link( (yyvsp[(2) - (4)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(3) - (4)].sn),*(yyvsp[(4) - (4)].sn) ))))); }5988 break;5989 5990 case 178:5991 5992 /* Line 1806 of yacc.c */5993 #line 780 "parser.yy"5994 { (yyval.sn) = 0; }5995 break;5996 5997 5910 case 180: 5998 5911 5999 5912 /* Line 1806 of yacc.c */ 6000 #line 78 5"parser.yy"5913 #line 783 "parser.yy" 6001 5914 { (yyval.sn) = new StatementNode( StatementNode::Fallthru ); } 6002 5915 break; … … 6005 5918 6006 5919 /* Line 1806 of yacc.c */ 6007 #line 78 6"parser.yy"5920 #line 784 "parser.yy" 6008 5921 { (yyval.sn) = new StatementNode( StatementNode::Fallthru ); } 6009 5922 break; … … 6012 5925 6013 5926 /* Line 1806 of yacc.c */ 5927 #line 789 "parser.yy" 5928 { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); } 5929 break; 5930 5931 case 183: 5932 5933 /* Line 1806 of yacc.c */ 6014 5934 #line 791 "parser.yy" 6015 { (yyval.sn) = new StatementNode( StatementNode:: While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }6016 break; 6017 6018 case 18 3:5935 { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); } 5936 break; 5937 5938 case 184: 6019 5939 6020 5940 /* Line 1806 of yacc.c */ 6021 5941 #line 793 "parser.yy" 6022 { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); }6023 break;6024 6025 case 184:6026 6027 /* Line 1806 of yacc.c */6028 #line 795 "parser.yy"6029 5942 { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); } 6030 5943 break; … … 6033 5946 6034 5947 /* Line 1806 of yacc.c */ 5948 #line 798 "parser.yy" 5949 { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); } 5950 break; 5951 5952 case 186: 5953 5954 /* Line 1806 of yacc.c */ 6035 5955 #line 800 "parser.yy" 6036 { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }6037 break;6038 6039 case 186:6040 6041 /* Line 1806 of yacc.c */6042 #line 802 "parser.yy"6043 5956 { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); } 6044 5957 break; … … 6047 5960 6048 5961 /* Line 1806 of yacc.c */ 6049 #line 80 7"parser.yy"5962 #line 805 "parser.yy" 6050 5963 { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); } 6051 5964 break; … … 6054 5967 6055 5968 /* Line 1806 of yacc.c */ 6056 #line 8 11"parser.yy"5969 #line 809 "parser.yy" 6057 5970 { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); } 6058 5971 break; … … 6061 5974 6062 5975 /* Line 1806 of yacc.c */ 6063 #line 81 4"parser.yy"5976 #line 812 "parser.yy" 6064 5977 { (yyval.sn) = new StatementNode( StatementNode::Continue ); } 6065 5978 break; … … 6068 5981 6069 5982 /* Line 1806 of yacc.c */ 6070 #line 81 8"parser.yy"5983 #line 816 "parser.yy" 6071 5984 { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); } 6072 5985 break; … … 6075 5988 6076 5989 /* Line 1806 of yacc.c */ 6077 #line 8 21"parser.yy"5990 #line 819 "parser.yy" 6078 5991 { (yyval.sn) = new StatementNode( StatementNode::Break ); } 6079 5992 break; … … 6082 5995 6083 5996 /* Line 1806 of yacc.c */ 5997 #line 823 "parser.yy" 5998 { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); } 5999 break; 6000 6001 case 193: 6002 6003 /* Line 1806 of yacc.c */ 6084 6004 #line 825 "parser.yy" 6085 { (yyval.sn) = new StatementNode( StatementNode:: Break, (yyvsp[(2) - (3)].tok)); }6086 break; 6087 6088 case 19 3:6005 { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); } 6006 break; 6007 6008 case 194: 6089 6009 6090 6010 /* Line 1806 of yacc.c */ 6091 6011 #line 827 "parser.yy" 6092 { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }6093 break;6094 6095 case 194:6096 6097 /* Line 1806 of yacc.c */6098 #line 829 "parser.yy"6099 6012 { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); } 6100 6013 break; … … 6103 6016 6104 6017 /* Line 1806 of yacc.c */ 6018 #line 831 "parser.yy" 6019 { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); } 6020 break; 6021 6022 case 196: 6023 6024 /* Line 1806 of yacc.c */ 6105 6025 #line 833 "parser.yy" 6106 { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }6107 break;6108 6109 case 196:6110 6111 /* Line 1806 of yacc.c */6112 #line 835 "parser.yy"6113 6026 { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (5)].en), 0 ); } 6114 6027 break; 6115 6028 6116 6029 case 197: 6030 6031 /* Line 1806 of yacc.c */ 6032 #line 840 "parser.yy" 6033 { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); } 6034 break; 6035 6036 case 198: 6117 6037 6118 6038 /* Line 1806 of yacc.c */ … … 6121 6041 break; 6122 6042 6123 case 19 8:6043 case 199: 6124 6044 6125 6045 /* Line 1806 of yacc.c */ 6126 6046 #line 844 "parser.yy" 6127 { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }6128 break;6129 6130 case 199:6131 6132 /* Line 1806 of yacc.c */6133 #line 846 "parser.yy"6134 6047 { 6135 6048 (yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) ); … … 6141 6054 6142 6055 /* Line 1806 of yacc.c */ 6056 #line 855 "parser.yy" 6057 { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); } 6058 break; 6059 6060 case 202: 6061 6062 /* Line 1806 of yacc.c */ 6143 6063 #line 857 "parser.yy" 6064 { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); } 6065 break; 6066 6067 case 203: 6068 6069 /* Line 1806 of yacc.c */ 6070 #line 859 "parser.yy" 6144 6071 { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); } 6145 6072 break; 6146 6073 6147 case 20 2:6148 6149 /* Line 1806 of yacc.c */ 6150 #line 8 59"parser.yy"6074 case 204: 6075 6076 /* Line 1806 of yacc.c */ 6077 #line 861 "parser.yy" 6151 6078 { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); } 6152 6079 break; 6153 6080 6154 case 203:6155 6156 /* Line 1806 of yacc.c */6157 #line 861 "parser.yy"6158 { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }6159 break;6160 6161 case 204:6162 6163 /* Line 1806 of yacc.c */6164 #line 863 "parser.yy"6165 { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }6166 break;6167 6168 6081 case 205: 6169 6082 6170 6083 /* Line 1806 of yacc.c */ 6084 #line 866 "parser.yy" 6085 { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); } 6086 break; 6087 6088 case 206: 6089 6090 /* Line 1806 of yacc.c */ 6171 6091 #line 868 "parser.yy" 6092 { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); } 6093 break; 6094 6095 case 207: 6096 6097 /* Line 1806 of yacc.c */ 6098 #line 870 "parser.yy" 6172 6099 { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); } 6173 6100 break; 6174 6101 6175 case 20 6:6176 6177 /* Line 1806 of yacc.c */ 6178 #line 87 0"parser.yy"6102 case 208: 6103 6104 /* Line 1806 of yacc.c */ 6105 #line 872 "parser.yy" 6179 6106 { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); } 6180 6107 break; 6181 6108 6182 case 207:6183 6184 /* Line 1806 of yacc.c */6185 #line 872 "parser.yy"6186 { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }6187 break;6188 6189 case 208:6190 6191 /* Line 1806 of yacc.c */6192 #line 874 "parser.yy"6193 { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }6194 break;6195 6196 6109 case 209: 6197 6110 6198 6111 /* Line 1806 of yacc.c */ 6199 #line 87 9"parser.yy"6112 #line 877 "parser.yy" 6200 6113 { 6201 6114 (yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) ); … … 6207 6120 6208 6121 /* Line 1806 of yacc.c */ 6209 #line 89 3"parser.yy"6122 #line 891 "parser.yy" 6210 6123 { 6211 6124 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6217 6130 6218 6131 /* Line 1806 of yacc.c */ 6132 #line 896 "parser.yy" 6133 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); } 6134 break; 6135 6136 case 213: 6137 6138 /* Line 1806 of yacc.c */ 6219 6139 #line 898 "parser.yy" 6220 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }6221 break;6222 6223 case 213:6224 6225 /* Line 1806 of yacc.c */6226 #line 900 "parser.yy"6227 6140 { 6228 6141 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6234 6147 6235 6148 /* Line 1806 of yacc.c */ 6149 #line 907 "parser.yy" 6150 { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); } 6151 break; 6152 6153 case 216: 6154 6155 /* Line 1806 of yacc.c */ 6236 6156 #line 909 "parser.yy" 6237 { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - ( 6)].flag), (yyvsp[(4) - (6)].constant), 0); }6238 break; 6239 6240 case 21 6:6157 { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); } 6158 break; 6159 6160 case 217: 6241 6161 6242 6162 /* Line 1806 of yacc.c */ 6243 6163 #line 911 "parser.yy" 6244 { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - ( 8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }6245 break; 6246 6247 case 21 7:6164 { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ); } 6165 break; 6166 6167 case 218: 6248 6168 6249 6169 /* Line 1806 of yacc.c */ 6250 6170 #line 913 "parser.yy" 6251 { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (1 0)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ); }6252 break; 6253 6254 case 21 8:6171 { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].constant) ); } 6172 break; 6173 6174 case 219: 6255 6175 6256 6176 /* Line 1806 of yacc.c */ 6257 6177 #line 915 "parser.yy" 6258 { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].constant) ); }6259 break;6260 6261 case 219:6262 6263 /* Line 1806 of yacc.c */6264 #line 917 "parser.yy"6265 6178 { (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) ); } 6266 6179 break; … … 6269 6182 6270 6183 /* Line 1806 of yacc.c */ 6184 #line 920 "parser.yy" 6185 { (yyval.flag) = false; } 6186 break; 6187 6188 case 221: 6189 6190 /* Line 1806 of yacc.c */ 6271 6191 #line 922 "parser.yy" 6272 { (yyval.flag) = false; }6273 break;6274 6275 case 221:6276 6277 /* Line 1806 of yacc.c */6278 #line 924 "parser.yy"6279 6192 { (yyval.flag) = true; } 6280 6193 break; … … 6283 6196 6284 6197 /* Line 1806 of yacc.c */ 6285 #line 92 9"parser.yy"6198 #line 927 "parser.yy" 6286 6199 { (yyval.en) = 0; } 6287 6200 break; … … 6290 6203 6291 6204 /* Line 1806 of yacc.c */ 6292 #line 93 6"parser.yy"6205 #line 934 "parser.yy" 6293 6206 { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); } 6294 6207 break; … … 6297 6210 6298 6211 /* Line 1806 of yacc.c */ 6212 #line 939 "parser.yy" 6213 { (yyval.en) = new AsmExprNode( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ); } 6214 break; 6215 6216 case 227: 6217 6218 /* Line 1806 of yacc.c */ 6299 6219 #line 941 "parser.yy" 6300 { (yyval.en) = new AsmExprNode( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ); }6301 break;6302 6303 case 227:6304 6305 /* Line 1806 of yacc.c */6306 #line 943 "parser.yy"6307 6220 { (yyval.en) = new AsmExprNode( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ); } 6308 6221 break; … … 6311 6224 6312 6225 /* Line 1806 of yacc.c */ 6226 #line 946 "parser.yy" 6227 { (yyval.constant) = 0; } 6228 break; 6229 6230 case 229: 6231 6232 /* Line 1806 of yacc.c */ 6313 6233 #line 948 "parser.yy" 6314 { (yyval.constant) = 0; }6315 break; 6316 6317 case 2 29:6234 { (yyval.constant) = (yyvsp[(1) - (1)].constant); } 6235 break; 6236 6237 case 230: 6318 6238 6319 6239 /* Line 1806 of yacc.c */ 6320 6240 #line 950 "parser.yy" 6321 { (yyval.constant) = (yyvsp[(1) - (1)].constant); }6322 break;6323 6324 case 230:6325 6326 /* Line 1806 of yacc.c */6327 #line 952 "parser.yy"6328 6241 { (yyval.constant) = (ConstantNode *)(yyvsp[(1) - (3)].constant)->set_link( (yyvsp[(3) - (3)].constant) ); } 6329 6242 break; … … 6332 6245 6333 6246 /* Line 1806 of yacc.c */ 6247 #line 955 "parser.yy" 6248 { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); } 6249 break; 6250 6251 case 232: 6252 6253 /* Line 1806 of yacc.c */ 6334 6254 #line 957 "parser.yy" 6335 { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); }6336 break;6337 6338 case 232:6339 6340 /* Line 1806 of yacc.c */6341 #line 959 "parser.yy"6342 6255 { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); } 6343 6256 break; … … 6346 6259 6347 6260 /* Line 1806 of yacc.c */ 6348 #line 96 6"parser.yy"6261 #line 964 "parser.yy" 6349 6262 { (yyval.decl) = 0; } 6350 6263 break; … … 6353 6266 6354 6267 /* Line 1806 of yacc.c */ 6355 #line 97 3"parser.yy"6268 #line 971 "parser.yy" 6356 6269 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); } 6357 6270 break; … … 6360 6273 6361 6274 /* Line 1806 of yacc.c */ 6362 #line 97 8"parser.yy"6275 #line 976 "parser.yy" 6363 6276 { (yyval.decl) = 0; } 6364 6277 break; … … 6367 6280 6368 6281 /* Line 1806 of yacc.c */ 6369 #line 98 5"parser.yy"6282 #line 983 "parser.yy" 6370 6283 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); } 6371 6284 break; … … 6374 6287 6375 6288 /* Line 1806 of yacc.c */ 6376 #line 99 9"parser.yy"6289 #line 997 "parser.yy" 6377 6290 {} 6378 6291 break; … … 6381 6294 6382 6295 /* Line 1806 of yacc.c */ 6383 #line 1000"parser.yy"6296 #line 998 "parser.yy" 6384 6297 {} 6385 6298 break; … … 6388 6301 6389 6302 /* Line 1806 of yacc.c */ 6390 #line 102 9"parser.yy"6303 #line 1027 "parser.yy" 6391 6304 { 6392 6305 typedefTable.addToEnclosingScope( TypedefTable::ID ); 6393 (yyval.decl) = (yyvsp[(1) - (2)].decl) ->addInitializer( (yyvsp[(2) - (2)].in) );6306 (yyval.decl) = (yyvsp[(1) - (2)].decl); 6394 6307 } 6395 6308 break; … … 6398 6311 6399 6312 /* Line 1806 of yacc.c */ 6400 #line 103 6"parser.yy"6313 #line 1034 "parser.yy" 6401 6314 { 6402 6315 typedefTable.addToEnclosingScope( TypedefTable::ID ); 6403 (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ) ->addInitializer( (yyvsp[(3) - (3)].in) );;6316 (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); 6404 6317 } 6405 6318 break; … … 6408 6321 6409 6322 /* Line 1806 of yacc.c */ 6410 #line 10 41"parser.yy"6323 #line 1039 "parser.yy" 6411 6324 { 6412 6325 typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID ); 6413 (yyval.decl) = (yyvsp[(1) - (6)].decl)->appendList( (yyvsp[(1) - (6)].decl)->cloneType( (yyvsp[(5) - (6)].tok) ) ->addInitializer( (yyvsp[(6) - (6)].in) ));6326 (yyval.decl) = (yyvsp[(1) - (6)].decl)->appendList( (yyvsp[(1) - (6)].decl)->cloneType( (yyvsp[(5) - (6)].tok) ) ); 6414 6327 } 6415 6328 break; … … 6418 6331 6419 6332 /* Line 1806 of yacc.c */ 6420 #line 10 51"parser.yy"6333 #line 1049 "parser.yy" 6421 6334 { 6422 6335 typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) ); … … 6428 6341 6429 6342 /* Line 1806 of yacc.c */ 6430 #line 105 6"parser.yy"6343 #line 1054 "parser.yy" 6431 6344 { 6432 6345 typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) ); … … 6438 6351 6439 6352 /* Line 1806 of yacc.c */ 6440 #line 10 61"parser.yy"6353 #line 1059 "parser.yy" 6441 6354 { 6442 6355 typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) ); … … 6448 6361 6449 6362 /* Line 1806 of yacc.c */ 6450 #line 106 9"parser.yy"6363 #line 1067 "parser.yy" 6451 6364 { 6452 6365 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6458 6371 6459 6372 /* Line 1806 of yacc.c */ 6460 #line 107 4"parser.yy"6373 #line 1072 "parser.yy" 6461 6374 { 6462 6375 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6468 6381 6469 6382 /* Line 1806 of yacc.c */ 6470 #line 107 9"parser.yy"6383 #line 1077 "parser.yy" 6471 6384 { 6472 6385 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6478 6391 6479 6392 /* Line 1806 of yacc.c */ 6480 #line 108 4"parser.yy"6393 #line 1082 "parser.yy" 6481 6394 { 6482 6395 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6488 6401 6489 6402 /* Line 1806 of yacc.c */ 6490 #line 108 9"parser.yy"6403 #line 1087 "parser.yy" 6491 6404 { 6492 6405 typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID ); … … 6498 6411 6499 6412 /* Line 1806 of yacc.c */ 6500 #line 109 7"parser.yy"6413 #line 1095 "parser.yy" 6501 6414 { 6502 6415 (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true ); … … 6507 6420 6508 6421 /* Line 1806 of yacc.c */ 6509 #line 11 20"parser.yy"6422 #line 1118 "parser.yy" 6510 6423 { 6511 6424 (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true ); … … 6516 6429 6517 6430 /* Line 1806 of yacc.c */ 6518 #line 112 4"parser.yy"6431 #line 1122 "parser.yy" 6519 6432 { 6520 6433 (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true ); … … 6525 6438 6526 6439 /* Line 1806 of yacc.c */ 6527 #line 11 31"parser.yy"6440 #line 1129 "parser.yy" 6528 6441 { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); } 6529 6442 break; … … 6532 6445 6533 6446 /* Line 1806 of yacc.c */ 6534 #line 113 5"parser.yy"6447 #line 1133 "parser.yy" 6535 6448 { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); } 6536 6449 break; … … 6539 6452 6540 6453 /* Line 1806 of yacc.c */ 6541 #line 11 40"parser.yy"6454 #line 1138 "parser.yy" 6542 6455 { 6543 6456 typedefTable.addToEnclosingScope( TypedefTable::TD ); … … 6549 6462 6550 6463 /* Line 1806 of yacc.c */ 6551 #line 114 5"parser.yy"6464 #line 1143 "parser.yy" 6552 6465 { 6553 6466 typedefTable.addToEnclosingScope( TypedefTable::TD ); … … 6559 6472 6560 6473 /* Line 1806 of yacc.c */ 6561 #line 11 50"parser.yy"6474 #line 1148 "parser.yy" 6562 6475 { 6563 6476 typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD ); … … 6569 6482 6570 6483 /* Line 1806 of yacc.c */ 6571 #line 11 61"parser.yy"6484 #line 1159 "parser.yy" 6572 6485 { 6573 6486 typedefTable.addToEnclosingScope( TypedefTable::TD ); … … 6579 6492 6580 6493 /* Line 1806 of yacc.c */ 6581 #line 116 6"parser.yy"6494 #line 1164 "parser.yy" 6582 6495 { 6583 6496 typedefTable.addToEnclosingScope( TypedefTable::TD ); … … 6589 6502 6590 6503 /* Line 1806 of yacc.c */ 6591 #line 11 71"parser.yy"6504 #line 1169 "parser.yy" 6592 6505 { 6593 6506 typedefTable.addToEnclosingScope( TypedefTable::TD ); … … 6599 6512 6600 6513 /* Line 1806 of yacc.c */ 6601 #line 117 6"parser.yy"6514 #line 1174 "parser.yy" 6602 6515 { 6603 6516 typedefTable.addToEnclosingScope( TypedefTable::TD ); … … 6609 6522 6610 6523 /* Line 1806 of yacc.c */ 6611 #line 11 81"parser.yy"6524 #line 1179 "parser.yy" 6612 6525 { 6613 6526 typedefTable.addToEnclosingScope( TypedefTable::TD ); … … 6619 6532 6620 6533 /* Line 1806 of yacc.c */ 6621 #line 11 90"parser.yy"6534 #line 1188 "parser.yy" 6622 6535 { 6623 6536 typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD ); … … 6629 6542 6630 6543 /* Line 1806 of yacc.c */ 6631 #line 119 5"parser.yy"6544 #line 1193 "parser.yy" 6632 6545 { 6633 6546 typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD ); … … 6639 6552 6640 6553 /* Line 1806 of yacc.c */ 6641 #line 121 2"parser.yy"6554 #line 1210 "parser.yy" 6642 6555 { 6643 6556 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6649 6562 6650 6563 /* Line 1806 of yacc.c */ 6651 #line 121 7"parser.yy"6564 #line 1215 "parser.yy" 6652 6565 { 6653 6566 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 6659 6572 6660 6573 /* Line 1806 of yacc.c */ 6661 #line 123 9"parser.yy"6574 #line 1237 "parser.yy" 6662 6575 { (yyval.decl) = 0; } 6663 6576 break; … … 6666 6579 6667 6580 /* Line 1806 of yacc.c */ 6668 #line 12 51"parser.yy"6581 #line 1249 "parser.yy" 6669 6582 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6670 6583 break; … … 6673 6586 6674 6587 /* Line 1806 of yacc.c */ 6588 #line 1260 "parser.yy" 6589 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); } 6590 break; 6591 6592 case 301: 6593 6594 /* Line 1806 of yacc.c */ 6675 6595 #line 1262 "parser.yy" 6676 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode:: Const ); }6677 break; 6678 6679 case 30 1:6596 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); } 6597 break; 6598 6599 case 302: 6680 6600 6681 6601 /* Line 1806 of yacc.c */ 6682 6602 #line 1264 "parser.yy" 6683 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode:: Restrict); }6684 break; 6685 6686 case 30 2:6603 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); } 6604 break; 6605 6606 case 303: 6687 6607 6688 6608 /* Line 1806 of yacc.c */ 6689 6609 #line 1266 "parser.yy" 6690 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode:: Volatile ); }6691 break; 6692 6693 case 30 3:6610 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); } 6611 break; 6612 6613 case 304: 6694 6614 6695 6615 /* Line 1806 of yacc.c */ 6696 6616 #line 1268 "parser.yy" 6697 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode:: Lvalue); }6698 break; 6699 6700 case 30 4:6617 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); } 6618 break; 6619 6620 case 305: 6701 6621 6702 6622 /* Line 1806 of yacc.c */ 6703 6623 #line 1270 "parser.yy" 6704 { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }6705 break;6706 6707 case 305:6708 6709 /* Line 1806 of yacc.c */6710 #line 1272 "parser.yy"6711 6624 { 6712 6625 typedefTable.enterScope(); … … 6717 6630 6718 6631 /* Line 1806 of yacc.c */ 6719 #line 127 6"parser.yy"6632 #line 1274 "parser.yy" 6720 6633 { 6721 6634 typedefTable.leaveScope(); … … 6727 6640 6728 6641 /* Line 1806 of yacc.c */ 6642 #line 1283 "parser.yy" 6643 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6644 break; 6645 6646 case 309: 6647 6648 /* Line 1806 of yacc.c */ 6729 6649 #line 1285 "parser.yy" 6650 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); } 6651 break; 6652 6653 case 311: 6654 6655 /* Line 1806 of yacc.c */ 6656 #line 1296 "parser.yy" 6730 6657 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6731 6658 break; 6732 6659 6733 case 309: 6734 6735 /* Line 1806 of yacc.c */ 6736 #line 1287 "parser.yy" 6660 case 313: 6661 6662 /* Line 1806 of yacc.c */ 6663 #line 1305 "parser.yy" 6664 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); } 6665 break; 6666 6667 case 314: 6668 6669 /* Line 1806 of yacc.c */ 6670 #line 1307 "parser.yy" 6671 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); } 6672 break; 6673 6674 case 315: 6675 6676 /* Line 1806 of yacc.c */ 6677 #line 1309 "parser.yy" 6678 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); } 6679 break; 6680 6681 case 316: 6682 6683 /* Line 1806 of yacc.c */ 6684 #line 1311 "parser.yy" 6685 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); } 6686 break; 6687 6688 case 317: 6689 6690 /* Line 1806 of yacc.c */ 6691 #line 1313 "parser.yy" 6692 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); } 6693 break; 6694 6695 case 318: 6696 6697 /* Line 1806 of yacc.c */ 6698 #line 1315 "parser.yy" 6699 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); } 6700 break; 6701 6702 case 319: 6703 6704 /* Line 1806 of yacc.c */ 6705 #line 1317 "parser.yy" 6706 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); } 6707 break; 6708 6709 case 320: 6710 6711 /* Line 1806 of yacc.c */ 6712 #line 1319 "parser.yy" 6713 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); } 6714 break; 6715 6716 case 321: 6717 6718 /* Line 1806 of yacc.c */ 6719 #line 1324 "parser.yy" 6720 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); } 6721 break; 6722 6723 case 322: 6724 6725 /* Line 1806 of yacc.c */ 6726 #line 1326 "parser.yy" 6727 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); } 6728 break; 6729 6730 case 323: 6731 6732 /* Line 1806 of yacc.c */ 6733 #line 1328 "parser.yy" 6734 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); } 6735 break; 6736 6737 case 324: 6738 6739 /* Line 1806 of yacc.c */ 6740 #line 1330 "parser.yy" 6741 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); } 6742 break; 6743 6744 case 325: 6745 6746 /* Line 1806 of yacc.c */ 6747 #line 1332 "parser.yy" 6748 { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); } 6749 break; 6750 6751 case 326: 6752 6753 /* Line 1806 of yacc.c */ 6754 #line 1334 "parser.yy" 6755 { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); } 6756 break; 6757 6758 case 327: 6759 6760 /* Line 1806 of yacc.c */ 6761 #line 1336 "parser.yy" 6762 { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); } 6763 break; 6764 6765 case 328: 6766 6767 /* Line 1806 of yacc.c */ 6768 #line 1338 "parser.yy" 6769 { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); } 6770 break; 6771 6772 case 329: 6773 6774 /* Line 1806 of yacc.c */ 6775 #line 1340 "parser.yy" 6776 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); } 6777 break; 6778 6779 case 330: 6780 6781 /* Line 1806 of yacc.c */ 6782 #line 1342 "parser.yy" 6783 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); } 6784 break; 6785 6786 case 331: 6787 6788 /* Line 1806 of yacc.c */ 6789 #line 1344 "parser.yy" 6790 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); } 6791 break; 6792 6793 case 332: 6794 6795 /* Line 1806 of yacc.c */ 6796 #line 1346 "parser.yy" 6797 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); } 6798 break; 6799 6800 case 334: 6801 6802 /* Line 1806 of yacc.c */ 6803 #line 1353 "parser.yy" 6804 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 6805 break; 6806 6807 case 335: 6808 6809 /* Line 1806 of yacc.c */ 6810 #line 1355 "parser.yy" 6811 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6812 break; 6813 6814 case 336: 6815 6816 /* Line 1806 of yacc.c */ 6817 #line 1357 "parser.yy" 6737 6818 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); } 6738 6819 break; 6739 6820 6740 case 311: 6741 6742 /* Line 1806 of yacc.c */ 6743 #line 1298 "parser.yy" 6821 case 337: 6822 6823 /* Line 1806 of yacc.c */ 6824 #line 1359 "parser.yy" 6825 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); } 6826 break; 6827 6828 case 339: 6829 6830 /* Line 1806 of yacc.c */ 6831 #line 1365 "parser.yy" 6832 { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); } 6833 break; 6834 6835 case 341: 6836 6837 /* Line 1806 of yacc.c */ 6838 #line 1372 "parser.yy" 6839 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 6840 break; 6841 6842 case 342: 6843 6844 /* Line 1806 of yacc.c */ 6845 #line 1374 "parser.yy" 6744 6846 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6745 6847 break; 6746 6848 6747 case 313: 6748 6749 /* Line 1806 of yacc.c */ 6750 #line 1307 "parser.yy" 6751 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); } 6752 break; 6753 6754 case 314: 6755 6756 /* Line 1806 of yacc.c */ 6757 #line 1309 "parser.yy" 6758 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); } 6759 break; 6760 6761 case 315: 6762 6763 /* Line 1806 of yacc.c */ 6764 #line 1311 "parser.yy" 6765 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); } 6766 break; 6767 6768 case 316: 6769 6770 /* Line 1806 of yacc.c */ 6771 #line 1313 "parser.yy" 6772 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); } 6773 break; 6774 6775 case 317: 6776 6777 /* Line 1806 of yacc.c */ 6778 #line 1315 "parser.yy" 6779 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); } 6780 break; 6781 6782 case 318: 6783 6784 /* Line 1806 of yacc.c */ 6785 #line 1317 "parser.yy" 6786 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); } 6787 break; 6788 6789 case 319: 6790 6791 /* Line 1806 of yacc.c */ 6792 #line 1319 "parser.yy" 6793 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); } 6794 break; 6795 6796 case 320: 6797 6798 /* Line 1806 of yacc.c */ 6799 #line 1321 "parser.yy" 6800 { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); } 6801 break; 6802 6803 case 321: 6804 6805 /* Line 1806 of yacc.c */ 6806 #line 1326 "parser.yy" 6807 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); } 6808 break; 6809 6810 case 322: 6811 6812 /* Line 1806 of yacc.c */ 6813 #line 1328 "parser.yy" 6814 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); } 6815 break; 6816 6817 case 323: 6818 6819 /* Line 1806 of yacc.c */ 6820 #line 1330 "parser.yy" 6821 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); } 6822 break; 6823 6824 case 324: 6825 6826 /* Line 1806 of yacc.c */ 6827 #line 1332 "parser.yy" 6828 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); } 6829 break; 6830 6831 case 325: 6832 6833 /* Line 1806 of yacc.c */ 6834 #line 1334 "parser.yy" 6835 { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); } 6836 break; 6837 6838 case 326: 6839 6840 /* Line 1806 of yacc.c */ 6841 #line 1336 "parser.yy" 6842 { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); } 6843 break; 6844 6845 case 327: 6846 6847 /* Line 1806 of yacc.c */ 6848 #line 1338 "parser.yy" 6849 { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); } 6850 break; 6851 6852 case 328: 6853 6854 /* Line 1806 of yacc.c */ 6855 #line 1340 "parser.yy" 6856 { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); } 6857 break; 6858 6859 case 329: 6860 6861 /* Line 1806 of yacc.c */ 6862 #line 1342 "parser.yy" 6863 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); } 6864 break; 6865 6866 case 330: 6867 6868 /* Line 1806 of yacc.c */ 6869 #line 1344 "parser.yy" 6870 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); } 6871 break; 6872 6873 case 331: 6874 6875 /* Line 1806 of yacc.c */ 6876 #line 1346 "parser.yy" 6877 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); } 6878 break; 6879 6880 case 332: 6881 6882 /* Line 1806 of yacc.c */ 6883 #line 1348 "parser.yy" 6884 { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); } 6885 break; 6886 6887 case 333: 6888 6889 /* Line 1806 of yacc.c */ 6890 #line 1350 "parser.yy" 6891 { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); } 6892 break; 6893 6894 case 335: 6895 6896 /* Line 1806 of yacc.c */ 6897 #line 1357 "parser.yy" 6849 case 343: 6850 6851 /* Line 1806 of yacc.c */ 6852 #line 1376 "parser.yy" 6853 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); } 6854 break; 6855 6856 case 344: 6857 6858 /* Line 1806 of yacc.c */ 6859 #line 1381 "parser.yy" 6860 { (yyval.decl) = (yyvsp[(3) - (4)].decl); } 6861 break; 6862 6863 case 345: 6864 6865 /* Line 1806 of yacc.c */ 6866 #line 1383 "parser.yy" 6867 { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); } 6868 break; 6869 6870 case 346: 6871 6872 /* Line 1806 of yacc.c */ 6873 #line 1385 "parser.yy" 6874 { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); } 6875 break; 6876 6877 case 347: 6878 6879 /* Line 1806 of yacc.c */ 6880 #line 1387 "parser.yy" 6881 { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); } 6882 break; 6883 6884 case 349: 6885 6886 /* Line 1806 of yacc.c */ 6887 #line 1393 "parser.yy" 6898 6888 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 6899 6889 break; 6900 6890 6901 case 3 36:6902 6903 /* Line 1806 of yacc.c */ 6904 #line 13 59"parser.yy"6891 case 350: 6892 6893 /* Line 1806 of yacc.c */ 6894 #line 1395 "parser.yy" 6905 6895 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6906 6896 break; 6907 6897 6908 case 3 37:6909 6910 /* Line 1806 of yacc.c */ 6911 #line 13 61"parser.yy"6898 case 351: 6899 6900 /* Line 1806 of yacc.c */ 6901 #line 1397 "parser.yy" 6912 6902 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); } 6913 6903 break; 6914 6904 6915 case 338: 6916 6917 /* Line 1806 of yacc.c */ 6918 #line 1363 "parser.yy" 6919 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); } 6920 break; 6921 6922 case 340: 6923 6924 /* Line 1806 of yacc.c */ 6925 #line 1369 "parser.yy" 6926 { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); } 6927 break; 6928 6929 case 342: 6930 6931 /* Line 1806 of yacc.c */ 6932 #line 1376 "parser.yy" 6905 case 353: 6906 6907 /* Line 1806 of yacc.c */ 6908 #line 1403 "parser.yy" 6933 6909 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 6934 6910 break; 6935 6911 6936 case 3 43:6937 6938 /* Line 1806 of yacc.c */ 6939 #line 1 378"parser.yy"6912 case 354: 6913 6914 /* Line 1806 of yacc.c */ 6915 #line 1405 "parser.yy" 6940 6916 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6941 6917 break; 6942 6918 6943 case 344: 6944 6945 /* Line 1806 of yacc.c */ 6946 #line 1380 "parser.yy" 6947 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); } 6948 break; 6949 6950 case 345: 6951 6952 /* Line 1806 of yacc.c */ 6953 #line 1385 "parser.yy" 6954 { (yyval.decl) = (yyvsp[(3) - (4)].decl); } 6955 break; 6956 6957 case 346: 6958 6959 /* Line 1806 of yacc.c */ 6960 #line 1387 "parser.yy" 6961 { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); } 6962 break; 6963 6964 case 347: 6965 6966 /* Line 1806 of yacc.c */ 6967 #line 1389 "parser.yy" 6968 { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); } 6969 break; 6970 6971 case 348: 6972 6973 /* Line 1806 of yacc.c */ 6974 #line 1391 "parser.yy" 6975 { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); } 6976 break; 6977 6978 case 350: 6979 6980 /* Line 1806 of yacc.c */ 6981 #line 1397 "parser.yy" 6919 case 356: 6920 6921 /* Line 1806 of yacc.c */ 6922 #line 1411 "parser.yy" 6982 6923 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 6983 6924 break; 6984 6925 6985 case 35 1:6986 6987 /* Line 1806 of yacc.c */ 6988 #line 1 399"parser.yy"6926 case 357: 6927 6928 /* Line 1806 of yacc.c */ 6929 #line 1413 "parser.yy" 6989 6930 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6990 6931 break; 6991 6932 6992 case 35 2:6993 6994 /* Line 1806 of yacc.c */ 6995 #line 14 01"parser.yy"6933 case 358: 6934 6935 /* Line 1806 of yacc.c */ 6936 #line 1415 "parser.yy" 6996 6937 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); } 6997 6938 break; 6998 6939 6999 case 354: 7000 7001 /* Line 1806 of yacc.c */ 7002 #line 1407 "parser.yy" 7003 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 7004 break; 7005 7006 case 355: 7007 7008 /* Line 1806 of yacc.c */ 7009 #line 1409 "parser.yy" 6940 case 359: 6941 6942 /* Line 1806 of yacc.c */ 6943 #line 1420 "parser.yy" 6944 { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); } 6945 break; 6946 6947 case 360: 6948 6949 /* Line 1806 of yacc.c */ 6950 #line 1422 "parser.yy" 6951 { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 6952 break; 6953 6954 case 361: 6955 6956 /* Line 1806 of yacc.c */ 6957 #line 1424 "parser.yy" 7010 6958 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 7011 6959 break; 7012 6960 7013 case 357: 7014 7015 /* Line 1806 of yacc.c */ 7016 #line 1415 "parser.yy" 7017 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 7018 break; 7019 7020 case 358: 7021 7022 /* Line 1806 of yacc.c */ 7023 #line 1417 "parser.yy" 7024 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 7025 break; 7026 7027 case 359: 7028 7029 /* Line 1806 of yacc.c */ 7030 #line 1419 "parser.yy" 7031 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); } 7032 break; 7033 7034 case 360: 7035 7036 /* Line 1806 of yacc.c */ 7037 #line 1424 "parser.yy" 7038 { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); } 7039 break; 7040 7041 case 361: 7042 7043 /* Line 1806 of yacc.c */ 7044 #line 1426 "parser.yy" 7045 { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 7046 break; 7047 7048 case 362: 7049 7050 /* Line 1806 of yacc.c */ 7051 #line 1428 "parser.yy" 7052 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 6961 case 364: 6962 6963 /* Line 1806 of yacc.c */ 6964 #line 1434 "parser.yy" 6965 { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl) ); } 7053 6966 break; 7054 6967 … … 7056 6969 7057 6970 /* Line 1806 of yacc.c */ 6971 #line 1436 "parser.yy" 6972 { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (2)].aggKey), (yyvsp[(2) - (2)].tok), 0, 0 ); } 6973 break; 6974 6975 case 366: 6976 6977 /* Line 1806 of yacc.c */ 7058 6978 #line 1438 "parser.yy" 7059 { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - ( 4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl) ); }7060 break; 7061 7062 case 36 6:6979 { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (5)].aggKey), (yyvsp[(2) - (5)].tok), 0, (yyvsp[(4) - (5)].decl) ); } 6980 break; 6981 6982 case 367: 7063 6983 7064 6984 /* Line 1806 of yacc.c */ 7065 6985 #line 1440 "parser.yy" 7066 { 7067 typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); 7068 (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (2)].aggKey), (yyvsp[(2) - (2)].tok), 0, 0 ); 7069 } 7070 break; 7071 7072 case 367: 7073 7074 /* Line 1806 of yacc.c */ 7075 #line 1445 "parser.yy" 7076 { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); } 6986 { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl) ); } 7077 6987 break; 7078 6988 … … 7080 6990 7081 6991 /* Line 1806 of yacc.c */ 6992 #line 1442 "parser.yy" 6993 { (yyval.decl) = (yyvsp[(2) - (2)].decl); } 6994 break; 6995 6996 case 369: 6997 6998 /* Line 1806 of yacc.c */ 7082 6999 #line 1447 "parser.yy" 7083 { (yyval. decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl)); }7084 break; 7085 7086 case 3 69:7000 { (yyval.aggKey) = DeclarationNode::Struct; } 7001 break; 7002 7003 case 370: 7087 7004 7088 7005 /* Line 1806 of yacc.c */ 7089 7006 #line 1449 "parser.yy" 7090 { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl) ); } 7091 break; 7092 7093 case 370: 7094 7095 /* Line 1806 of yacc.c */ 7096 #line 1451 "parser.yy" 7097 { (yyval.decl) = (yyvsp[(2) - (2)].decl); } 7007 { (yyval.aggKey) = DeclarationNode::Union; } 7098 7008 break; 7099 7009 … … 7101 7011 7102 7012 /* Line 1806 of yacc.c */ 7013 #line 1454 "parser.yy" 7014 { (yyval.decl) = (yyvsp[(1) - (1)].decl); } 7015 break; 7016 7017 case 372: 7018 7019 /* Line 1806 of yacc.c */ 7103 7020 #line 1456 "parser.yy" 7104 { (yyval.aggKey) = DeclarationNode::Struct; } 7105 break; 7106 7107 case 372: 7108 7109 /* Line 1806 of yacc.c */ 7110 #line 1458 "parser.yy" 7111 { (yyval.aggKey) = DeclarationNode::Union; } 7112 break; 7113 7114 case 373: 7115 7116 /* Line 1806 of yacc.c */ 7117 #line 1463 "parser.yy" 7118 { (yyval.decl) = (yyvsp[(1) - (1)].decl); } 7021 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); } 7119 7022 break; 7120 7023 … … 7122 7025 7123 7026 /* Line 1806 of yacc.c */ 7027 #line 1462 "parser.yy" 7028 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 7029 break; 7030 7031 case 376: 7032 7033 /* Line 1806 of yacc.c */ 7124 7034 #line 1465 "parser.yy" 7125 { (yyval.decl) = (yyvsp[( 1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl)); }7126 break; 7127 7128 case 37 6:7035 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 7036 break; 7037 7038 case 378: 7129 7039 7130 7040 /* Line 1806 of yacc.c */ 7131 7041 #line 1471 "parser.yy" 7132 { (yyval.decl) = (yyvsp[( 2) - (3)].decl); }7133 break; 7134 7135 case 37 8:7136 7137 /* Line 1806 of yacc.c */ 7138 #line 147 4"parser.yy"7139 { (yyval.decl) = (yyvsp[( 2) - (3)].decl); }7042 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); } 7043 break; 7044 7045 case 379: 7046 7047 /* Line 1806 of yacc.c */ 7048 #line 1473 "parser.yy" 7049 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); } 7140 7050 break; 7141 7051 … … 7143 7053 7144 7054 /* Line 1806 of yacc.c */ 7055 #line 1475 "parser.yy" 7056 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); } 7057 break; 7058 7059 case 381: 7060 7061 /* Line 1806 of yacc.c */ 7145 7062 #line 1480 "parser.yy" 7146 { (yyval.decl) = (yyvsp[( 1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }7147 break; 7148 7149 case 38 1:7063 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); } 7064 break; 7065 7066 case 382: 7150 7067 7151 7068 /* Line 1806 of yacc.c */ 7152 7069 #line 1482 "parser.yy" 7153 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); } 7154 break; 7155 7156 case 382: 7157 7158 /* Line 1806 of yacc.c */ 7159 #line 1484 "parser.yy" 7160 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); } 7070 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); } 7161 7071 break; 7162 7072 … … 7164 7074 7165 7075 /* Line 1806 of yacc.c */ 7076 #line 1487 "parser.yy" 7077 { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ } 7078 break; 7079 7080 case 384: 7081 7082 /* Line 1806 of yacc.c */ 7166 7083 #line 1489 "parser.yy" 7167 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); } 7168 break; 7169 7170 case 384: 7171 7172 /* Line 1806 of yacc.c */ 7173 #line 1491 "parser.yy" 7174 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); } 7084 { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); } 7175 7085 break; 7176 7086 … … 7178 7088 7179 7089 /* Line 1806 of yacc.c */ 7180 #line 149 6"parser.yy"7181 { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */}7090 #line 1492 "parser.yy" 7091 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); } 7182 7092 break; 7183 7093 … … 7185 7095 7186 7096 /* Line 1806 of yacc.c */ 7187 #line 149 8"parser.yy"7188 { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }7189 break; 7190 7191 case 38 7:7097 #line 1495 "parser.yy" 7098 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); } 7099 break; 7100 7101 case 388: 7192 7102 7193 7103 /* Line 1806 of yacc.c */ 7194 7104 #line 1501 "parser.yy" 7195 { (yyval. decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }7196 break; 7197 7198 case 38 8:7199 7200 /* Line 1806 of yacc.c */ 7201 #line 150 4"parser.yy"7202 { (yyval. decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en)); }7105 { (yyval.en) = 0; } 7106 break; 7107 7108 case 389: 7109 7110 /* Line 1806 of yacc.c */ 7111 #line 1503 "parser.yy" 7112 { (yyval.en) = (yyvsp[(1) - (1)].en); } 7203 7113 break; 7204 7114 … … 7206 7116 7207 7117 /* Line 1806 of yacc.c */ 7208 #line 1510 "parser.yy" 7118 #line 1508 "parser.yy" 7119 { (yyval.en) = (yyvsp[(2) - (2)].en); } 7120 break; 7121 7122 case 392: 7123 7124 /* Line 1806 of yacc.c */ 7125 #line 1517 "parser.yy" 7126 { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); } 7127 break; 7128 7129 case 393: 7130 7131 /* Line 1806 of yacc.c */ 7132 #line 1519 "parser.yy" 7133 { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (6)].tok), (yyvsp[(4) - (6)].decl) ); } 7134 break; 7135 7136 case 394: 7137 7138 /* Line 1806 of yacc.c */ 7139 #line 1521 "parser.yy" 7140 { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (2)].tok), 0 ); } 7141 break; 7142 7143 case 395: 7144 7145 /* Line 1806 of yacc.c */ 7146 #line 1526 "parser.yy" 7147 { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); } 7148 break; 7149 7150 case 396: 7151 7152 /* Line 1806 of yacc.c */ 7153 #line 1528 "parser.yy" 7154 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); } 7155 break; 7156 7157 case 397: 7158 7159 /* Line 1806 of yacc.c */ 7160 #line 1533 "parser.yy" 7209 7161 { (yyval.en) = 0; } 7210 7162 break; 7211 7163 7212 case 391: 7213 7214 /* Line 1806 of yacc.c */ 7215 #line 1512 "parser.yy" 7216 { (yyval.en) = (yyvsp[(1) - (1)].en); } 7217 break; 7218 7219 case 392: 7220 7221 /* Line 1806 of yacc.c */ 7222 #line 1517 "parser.yy" 7164 case 398: 7165 7166 /* Line 1806 of yacc.c */ 7167 #line 1535 "parser.yy" 7223 7168 { (yyval.en) = (yyvsp[(2) - (2)].en); } 7224 7169 break; 7225 7170 7226 case 394:7227 7228 /* Line 1806 of yacc.c */7229 #line 1526 "parser.yy"7230 { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }7231 break;7232 7233 case 395:7234 7235 /* Line 1806 of yacc.c */7236 #line 1528 "parser.yy"7237 {7238 typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );7239 (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (2)].tok), 0 );7240 }7241 break;7242 7243 case 396:7244 7245 /* Line 1806 of yacc.c */7246 #line 1533 "parser.yy"7247 { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }7248 break;7249 7250 case 397:7251 7252 /* Line 1806 of yacc.c */7253 #line 1535 "parser.yy"7254 { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }7255 break;7256 7257 case 398:7258 7259 /* Line 1806 of yacc.c */7260 #line 1540 "parser.yy"7261 { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }7262 break;7263 7264 7171 case 399: 7265 7172 7266 7173 /* Line 1806 of yacc.c */ 7267 7174 #line 1542 "parser.yy" 7268 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }7269 break;7270 7271 case 400:7272 7273 /* Line 1806 of yacc.c */7274 #line 1547 "parser.yy"7275 { (yyval.en) = 0; }7276 break;7277 7278 case 401:7279 7280 /* Line 1806 of yacc.c */7281 #line 1549 "parser.yy"7282 { (yyval.en) = (yyvsp[(2) - (2)].en); }7283 break;7284 7285 case 402:7286 7287 /* Line 1806 of yacc.c */7288 #line 1556 "parser.yy"7289 7175 { (yyval.decl) = 0; } 7290 7176 break; 7291 7177 7292 case 406: 7178 case 403: 7179 7180 /* Line 1806 of yacc.c */ 7181 #line 1550 "parser.yy" 7182 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7183 break; 7184 7185 case 404: 7186 7187 /* Line 1806 of yacc.c */ 7188 #line 1552 "parser.yy" 7189 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); } 7190 break; 7191 7192 case 405: 7193 7194 /* Line 1806 of yacc.c */ 7195 #line 1554 "parser.yy" 7196 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); } 7197 break; 7198 7199 case 407: 7200 7201 /* Line 1806 of yacc.c */ 7202 #line 1562 "parser.yy" 7203 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7204 break; 7205 7206 case 408: 7293 7207 7294 7208 /* Line 1806 of yacc.c */ … … 7297 7211 break; 7298 7212 7299 case 40 7:7213 case 409: 7300 7214 7301 7215 /* Line 1806 of yacc.c */ 7302 7216 #line 1566 "parser.yy" 7217 { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); } 7218 break; 7219 7220 case 411: 7221 7222 /* Line 1806 of yacc.c */ 7223 #line 1572 "parser.yy" 7224 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7225 break; 7226 7227 case 412: 7228 7229 /* Line 1806 of yacc.c */ 7230 #line 1577 "parser.yy" 7231 { (yyval.decl) = 0; } 7232 break; 7233 7234 case 415: 7235 7236 /* Line 1806 of yacc.c */ 7237 #line 1584 "parser.yy" 7303 7238 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); } 7304 7239 break; 7305 7240 7306 case 408: 7307 7308 /* Line 1806 of yacc.c */ 7309 #line 1568 "parser.yy" 7310 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); } 7311 break; 7312 7313 case 410: 7314 7315 /* Line 1806 of yacc.c */ 7316 #line 1576 "parser.yy" 7241 case 418: 7242 7243 /* Line 1806 of yacc.c */ 7244 #line 1591 "parser.yy" 7317 7245 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7318 7246 break; 7319 7247 7320 case 41 1:7321 7322 /* Line 1806 of yacc.c */ 7323 #line 15 78"parser.yy"7248 case 419: 7249 7250 /* Line 1806 of yacc.c */ 7251 #line 1593 "parser.yy" 7324 7252 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); } 7325 7253 break; 7326 7254 7327 case 412:7328 7329 /* Line 1806 of yacc.c */7330 #line 1580 "parser.yy"7331 { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }7332 break;7333 7334 case 414:7335 7336 /* Line 1806 of yacc.c */7337 #line 1586 "parser.yy"7338 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }7339 break;7340 7341 case 415:7342 7343 /* Line 1806 of yacc.c */7344 #line 1591 "parser.yy"7345 { (yyval.decl) = 0; }7346 break;7347 7348 case 418:7349 7350 /* Line 1806 of yacc.c */7351 #line 1598 "parser.yy"7352 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }7353 break;7354 7355 7255 case 421: 7356 7256 7357 7257 /* Line 1806 of yacc.c */ 7258 #line 1602 "parser.yy" 7259 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); } 7260 break; 7261 7262 case 422: 7263 7264 /* Line 1806 of yacc.c */ 7358 7265 #line 1605 "parser.yy" 7359 { (yyval.decl) = (yyvsp[(1) - ( 5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }7360 break; 7361 7362 case 42 2:7266 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); } 7267 break; 7268 7269 case 423: 7363 7270 7364 7271 /* Line 1806 of yacc.c */ 7365 7272 #line 1607 "parser.yy" 7366 { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }7367 break;7368 7369 case 424:7370 7371 /* Line 1806 of yacc.c */7372 #line 1616 "parser.yy"7373 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }7374 break;7375 7376 case 425:7377 7378 /* Line 1806 of yacc.c */7379 #line 1619 "parser.yy"7380 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }7381 break;7382 7383 case 426:7384 7385 /* Line 1806 of yacc.c */7386 #line 1621 "parser.yy"7387 7273 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); } 7388 7274 break; 7389 7275 7390 case 4 31:7391 7392 /* Line 1806 of yacc.c */ 7393 #line 16 31"parser.yy"7276 case 428: 7277 7278 /* Line 1806 of yacc.c */ 7279 #line 1617 "parser.yy" 7394 7280 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 7395 7281 break; 7396 7282 7397 case 43 3:7398 7399 /* Line 1806 of yacc.c */ 7400 #line 16 37"parser.yy"7283 case 430: 7284 7285 /* Line 1806 of yacc.c */ 7286 #line 1623 "parser.yy" 7401 7287 { 7402 7288 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7405 7291 break; 7406 7292 7407 case 43 4:7408 7409 /* Line 1806 of yacc.c */ 7410 #line 16 42"parser.yy"7293 case 431: 7294 7295 /* Line 1806 of yacc.c */ 7296 #line 1628 "parser.yy" 7411 7297 { 7412 7298 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7415 7301 break; 7416 7302 7417 case 43 6:7418 7419 /* Line 1806 of yacc.c */ 7420 #line 16 51"parser.yy"7303 case 433: 7304 7305 /* Line 1806 of yacc.c */ 7306 #line 1637 "parser.yy" 7421 7307 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); } 7422 7308 break; 7423 7309 7424 case 43 7:7425 7426 /* Line 1806 of yacc.c */ 7427 #line 16 60"parser.yy"7310 case 434: 7311 7312 /* Line 1806 of yacc.c */ 7313 #line 1646 "parser.yy" 7428 7314 { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); } 7429 7315 break; 7430 7316 7431 case 43 8:7432 7433 /* Line 1806 of yacc.c */ 7434 #line 16 62"parser.yy"7317 case 435: 7318 7319 /* Line 1806 of yacc.c */ 7320 #line 1648 "parser.yy" 7435 7321 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); } 7436 7322 break; 7437 7323 7438 case 4 50:7439 7440 /* Line 1806 of yacc.c */ 7441 #line 16 87"parser.yy"7324 case 447: 7325 7326 /* Line 1806 of yacc.c */ 7327 #line 1673 "parser.yy" 7442 7328 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); } 7443 7329 break; 7444 7330 7331 case 451: 7332 7333 /* Line 1806 of yacc.c */ 7334 #line 1681 "parser.yy" 7335 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); } 7336 break; 7337 7338 case 452: 7339 7340 /* Line 1806 of yacc.c */ 7341 #line 1686 "parser.yy" 7342 { (yyval.in) = 0; } 7343 break; 7344 7345 case 453: 7346 7347 /* Line 1806 of yacc.c */ 7348 #line 1688 "parser.yy" 7349 { (yyval.in) = (yyvsp[(2) - (2)].in); } 7350 break; 7351 7445 7352 case 454: 7446 7353 7447 7354 /* Line 1806 of yacc.c */ 7355 #line 1690 "parser.yy" 7356 { (yyval.in) = (yyvsp[(2) - (2)].in); } 7357 break; 7358 7359 case 455: 7360 7361 /* Line 1806 of yacc.c */ 7362 #line 1694 "parser.yy" 7363 { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); } 7364 break; 7365 7366 case 456: 7367 7368 /* Line 1806 of yacc.c */ 7448 7369 #line 1695 "parser.yy" 7449 { (yyval. decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl)); }7450 break; 7451 7452 case 45 5:7370 { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); } 7371 break; 7372 7373 case 457: 7453 7374 7454 7375 /* Line 1806 of yacc.c */ … … 7457 7378 break; 7458 7379 7459 case 45 6:7380 case 459: 7460 7381 7461 7382 /* Line 1806 of yacc.c */ 7462 7383 #line 1702 "parser.yy" 7463 { (yyval.in) = (yyvsp[(2) - (2)].in); } 7464 break; 7465 7466 case 457: 7467 7468 /* Line 1806 of yacc.c */ 7469 #line 1704 "parser.yy" 7470 { (yyval.in) = (yyvsp[(2) - (2)].in); } 7471 break; 7472 7473 case 458: 7474 7475 /* Line 1806 of yacc.c */ 7476 #line 1708 "parser.yy" 7477 { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); } 7478 break; 7479 7480 case 459: 7481 7482 /* Line 1806 of yacc.c */ 7483 #line 1709 "parser.yy" 7484 { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); } 7384 { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); } 7485 7385 break; 7486 7386 … … 7488 7388 7489 7389 /* Line 1806 of yacc.c */ 7490 #line 17 14"parser.yy"7491 { (yyval.in) = 0; }7492 break; 7493 7494 case 46 2:7495 7496 /* Line 1806 of yacc.c */ 7497 #line 17 16"parser.yy"7498 { (yyval.in) = ( yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }7390 #line 1703 "parser.yy" 7391 { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); } 7392 break; 7393 7394 case 461: 7395 7396 /* Line 1806 of yacc.c */ 7397 #line 1705 "parser.yy" 7398 { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); } 7499 7399 break; 7500 7400 … … 7502 7402 7503 7403 /* Line 1806 of yacc.c */ 7504 #line 17 17"parser.yy"7505 { (yyval. in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in)) ); }7506 break; 7507 7508 case 46 4:7509 7510 /* Line 1806 of yacc.c */ 7511 #line 17 19"parser.yy"7512 { (yyval. in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) )); }7404 #line 1721 "parser.yy" 7405 { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); } 7406 break; 7407 7408 case 465: 7409 7410 /* Line 1806 of yacc.c */ 7411 #line 1727 "parser.yy" 7412 { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); } 7513 7413 break; 7514 7414 … … 7517 7417 /* Line 1806 of yacc.c */ 7518 7418 #line 1735 "parser.yy" 7519 { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); } 7419 { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); } 7420 break; 7421 7422 case 467: 7423 7424 /* Line 1806 of yacc.c */ 7425 #line 1737 "parser.yy" 7426 { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); } 7520 7427 break; 7521 7428 … … 7523 7430 7524 7431 /* Line 1806 of yacc.c */ 7525 #line 174 1"parser.yy"7526 { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }7432 #line 1740 "parser.yy" 7433 { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); } 7527 7434 break; 7528 7435 … … 7530 7437 7531 7438 /* Line 1806 of yacc.c */ 7532 #line 174 9"parser.yy"7533 { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) )); }7439 #line 1742 "parser.yy" 7440 { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); } 7534 7441 break; 7535 7442 … … 7537 7444 7538 7445 /* Line 1806 of yacc.c */ 7539 #line 17 51"parser.yy"7540 { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) )); }7446 #line 1744 "parser.yy" 7447 { (yyval.en) = new DesignatorNode( new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ), true ); } 7541 7448 break; 7542 7449 … … 7544 7451 7545 7452 /* Line 1806 of yacc.c */ 7546 #line 1754 "parser.yy" 7547 { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); } 7548 break; 7549 7550 case 472: 7551 7552 /* Line 1806 of yacc.c */ 7553 #line 1756 "parser.yy" 7554 { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); } 7453 #line 1746 "parser.yy" 7454 { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); } 7555 7455 break; 7556 7456 … … 7558 7458 7559 7459 /* Line 1806 of yacc.c */ 7560 #line 17 58"parser.yy"7561 { (yyval. en) = new DesignatorNode( new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ), true); }7460 #line 1770 "parser.yy" 7461 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 7562 7462 break; 7563 7463 … … 7565 7465 7566 7466 /* Line 1806 of yacc.c */ 7567 #line 1760 "parser.yy" 7568 { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); } 7569 break; 7570 7571 case 476: 7572 7573 /* Line 1806 of yacc.c */ 7574 #line 1784 "parser.yy" 7467 #line 1772 "parser.yy" 7468 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 7469 break; 7470 7471 case 475: 7472 7473 /* Line 1806 of yacc.c */ 7474 #line 1774 "parser.yy" 7475 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); } 7476 break; 7477 7478 case 477: 7479 7480 /* Line 1806 of yacc.c */ 7481 #line 1780 "parser.yy" 7575 7482 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 7576 7483 break; 7577 7484 7578 case 47 7:7579 7580 /* Line 1806 of yacc.c */ 7581 #line 178 6"parser.yy"7485 case 478: 7486 7487 /* Line 1806 of yacc.c */ 7488 #line 1782 "parser.yy" 7582 7489 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 7583 7490 break; 7584 7491 7585 case 478: 7586 7587 /* Line 1806 of yacc.c */ 7588 #line 1788 "parser.yy" 7589 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); } 7590 break; 7591 7592 case 480: 7593 7594 /* Line 1806 of yacc.c */ 7595 #line 1794 "parser.yy" 7596 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 7492 case 479: 7493 7494 /* Line 1806 of yacc.c */ 7495 #line 1787 "parser.yy" 7496 { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); } 7597 7497 break; 7598 7498 … … 7600 7500 7601 7501 /* Line 1806 of yacc.c */ 7602 #line 179 6"parser.yy"7603 { (yyval.decl) = (yyvsp[(1) - ( 2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }7502 #line 1793 "parser.yy" 7503 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); } 7604 7504 break; 7605 7505 … … 7607 7507 7608 7508 /* Line 1806 of yacc.c */ 7609 #line 1 801"parser.yy"7610 { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en)); }7611 break; 7612 7613 case 48 4:7614 7615 /* Line 1806 of yacc.c */ 7616 #line 180 7"parser.yy"7617 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }7509 #line 1798 "parser.yy" 7510 { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); } 7511 break; 7512 7513 case 483: 7514 7515 /* Line 1806 of yacc.c */ 7516 #line 1800 "parser.yy" 7517 { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); } 7618 7518 break; 7619 7519 … … 7621 7521 7622 7522 /* Line 1806 of yacc.c */ 7623 #line 18 12"parser.yy"7624 { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }7523 #line 1806 "parser.yy" 7524 { (yyval.tclass) = DeclarationNode::Type; } 7625 7525 break; 7626 7526 … … 7628 7528 7629 7529 /* Line 1806 of yacc.c */ 7630 #line 1814 "parser.yy" 7631 { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); } 7530 #line 1808 "parser.yy" 7531 { (yyval.tclass) = DeclarationNode::Ftype; } 7532 break; 7533 7534 case 487: 7535 7536 /* Line 1806 of yacc.c */ 7537 #line 1810 "parser.yy" 7538 { (yyval.tclass) = DeclarationNode::Dtype; } 7632 7539 break; 7633 7540 … … 7635 7542 7636 7543 /* Line 1806 of yacc.c */ 7637 #line 18 20"parser.yy"7638 { (yyval. tclass) = DeclarationNode::Type; }7544 #line 1815 "parser.yy" 7545 { (yyval.decl) = 0; } 7639 7546 break; 7640 7547 … … 7642 7549 7643 7550 /* Line 1806 of yacc.c */ 7551 #line 1817 "parser.yy" 7552 { (yyval.decl) = (yyvsp[(1) - (2)].decl) == 0 ? (yyvsp[(2) - (2)].decl) : (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); } 7553 break; 7554 7555 case 490: 7556 7557 /* Line 1806 of yacc.c */ 7644 7558 #line 1822 "parser.yy" 7645 { (yyval.tclass) = DeclarationNode::Ftype; } 7646 break; 7647 7648 case 490: 7649 7650 /* Line 1806 of yacc.c */ 7651 #line 1824 "parser.yy" 7652 { (yyval.tclass) = DeclarationNode::Dtype; } 7559 { 7560 typedefTable.openContext( *(yyvsp[(2) - (5)].tok) ); 7561 (yyval.decl) = DeclarationNode::newContextUse( (yyvsp[(2) - (5)].tok), (yyvsp[(4) - (5)].en) ); 7562 } 7653 7563 break; 7654 7564 7655 7565 case 491: 7566 7567 /* Line 1806 of yacc.c */ 7568 #line 1827 "parser.yy" 7569 { (yyval.decl) = (yyvsp[(4) - (5)].decl); } 7570 break; 7571 7572 case 492: 7656 7573 7657 7574 /* Line 1806 of yacc.c */ … … 7660 7577 break; 7661 7578 7662 case 492:7663 7664 /* Line 1806 of yacc.c */7665 #line 1831 "parser.yy"7666 { (yyval.decl) = (yyvsp[(1) - (2)].decl) == 0 ? (yyvsp[(2) - (2)].decl) : (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }7667 break;7668 7669 7579 case 493: 7670 7580 7671 7581 /* Line 1806 of yacc.c */ 7672 #line 1836 "parser.yy" 7673 { 7674 typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) ); 7675 (yyval.decl) = DeclarationNode::newTraitUse( (yyvsp[(2) - (5)].tok), (yyvsp[(4) - (5)].en) ); 7676 } 7677 break; 7678 7679 case 494: 7680 7681 /* Line 1806 of yacc.c */ 7682 #line 1841 "parser.yy" 7683 { (yyval.decl) = (yyvsp[(4) - (5)].decl); } 7582 #line 1834 "parser.yy" 7583 { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); } 7684 7584 break; 7685 7585 … … 7687 7587 7688 7588 /* Line 1806 of yacc.c */ 7689 #line 18 43"parser.yy"7690 { (yyval. decl) = 0; }7589 #line 1837 "parser.yy" 7590 { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); } 7691 7591 break; 7692 7592 … … 7694 7594 7695 7595 /* Line 1806 of yacc.c */ 7596 #line 1839 "parser.yy" 7597 { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); } 7598 break; 7599 7600 case 497: 7601 7602 /* Line 1806 of yacc.c */ 7603 #line 1844 "parser.yy" 7604 { (yyval.decl) = (yyvsp[(2) - (2)].decl); } 7605 break; 7606 7607 case 498: 7608 7609 /* Line 1806 of yacc.c */ 7610 #line 1846 "parser.yy" 7611 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); } 7612 break; 7613 7614 case 499: 7615 7616 /* Line 1806 of yacc.c */ 7696 7617 #line 1848 "parser.yy" 7697 { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); } 7698 break; 7699 7700 case 498: 7701 7702 /* Line 1806 of yacc.c */ 7703 #line 1851 "parser.yy" 7704 { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); } 7705 break; 7706 7707 case 499: 7618 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); } 7619 break; 7620 7621 case 500: 7708 7622 7709 7623 /* Line 1806 of yacc.c */ 7710 7624 #line 1853 "parser.yy" 7711 { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); } 7712 break; 7713 7714 case 500: 7715 7716 /* Line 1806 of yacc.c */ 7717 #line 1858 "parser.yy" 7718 { (yyval.decl) = (yyvsp[(2) - (2)].decl); } 7625 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); } 7719 7626 break; 7720 7627 … … 7722 7629 7723 7630 /* Line 1806 of yacc.c */ 7631 #line 1855 "parser.yy" 7632 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); } 7633 break; 7634 7635 case 502: 7636 7637 /* Line 1806 of yacc.c */ 7724 7638 #line 1860 "parser.yy" 7725 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }7726 break;7727 7728 case 502:7729 7730 /* Line 1806 of yacc.c */7731 #line 1862 "parser.yy"7732 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }7733 break;7734 7735 case 503:7736 7737 /* Line 1806 of yacc.c */7738 #line 1867 "parser.yy"7739 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }7740 break;7741 7742 case 504:7743 7744 /* Line 1806 of yacc.c */7745 #line 1869 "parser.yy"7746 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }7747 break;7748 7749 case 505:7750 7751 /* Line 1806 of yacc.c */7752 #line 1874 "parser.yy"7753 7639 { 7754 7640 typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD ); … … 7757 7643 break; 7758 7644 7759 case 50 6:7760 7761 /* Line 1806 of yacc.c */ 7762 #line 18 79"parser.yy"7645 case 503: 7646 7647 /* Line 1806 of yacc.c */ 7648 #line 1865 "parser.yy" 7763 7649 { 7764 7650 typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG ); … … 7767 7653 break; 7768 7654 7769 case 50 7:7770 7771 /* Line 1806 of yacc.c */ 7772 #line 18 87"parser.yy"7655 case 504: 7656 7657 /* Line 1806 of yacc.c */ 7658 #line 1873 "parser.yy" 7773 7659 { 7774 7660 typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID ); 7775 (yyval.decl) = DeclarationNode::new Trait( (yyvsp[(2) - (9)].tok), (yyvsp[(5) - (9)].decl), 0 );7661 (yyval.decl) = DeclarationNode::newContext( (yyvsp[(2) - (9)].tok), (yyvsp[(5) - (9)].decl), 0 ); 7776 7662 } 7777 7663 break; 7778 7664 7779 case 50 8:7780 7781 /* Line 1806 of yacc.c */ 7782 #line 18 92"parser.yy"7665 case 505: 7666 7667 /* Line 1806 of yacc.c */ 7668 #line 1878 "parser.yy" 7783 7669 { 7784 typedefTable.enter Trait( *(yyvsp[(2) - (8)].tok) );7670 typedefTable.enterContext( *(yyvsp[(2) - (8)].tok) ); 7785 7671 typedefTable.enterScope(); 7786 7672 } 7787 7673 break; 7788 7674 7789 case 50 9:7790 7791 /* Line 1806 of yacc.c */ 7792 #line 18 97"parser.yy"7675 case 506: 7676 7677 /* Line 1806 of yacc.c */ 7678 #line 1883 "parser.yy" 7793 7679 { 7794 typedefTable.leave Trait();7680 typedefTable.leaveContext(); 7795 7681 typedefTable.addToEnclosingScope( *(yyvsp[(2) - (11)].tok), TypedefTable::ID ); 7796 (yyval.decl) = DeclarationNode::new Trait( (yyvsp[(2) - (11)].tok), (yyvsp[(5) - (11)].decl), (yyvsp[(10) - (11)].decl) );7682 (yyval.decl) = DeclarationNode::newContext( (yyvsp[(2) - (11)].tok), (yyvsp[(5) - (11)].decl), (yyvsp[(10) - (11)].decl) ); 7797 7683 } 7798 7684 break; 7799 7685 7686 case 508: 7687 7688 /* Line 1806 of yacc.c */ 7689 #line 1893 "parser.yy" 7690 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); } 7691 break; 7692 7800 7693 case 511: 7801 7694 7802 7695 /* Line 1806 of yacc.c */ 7803 #line 1907 "parser.yy" 7804 { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); } 7805 break; 7806 7807 case 514: 7808 7809 /* Line 1806 of yacc.c */ 7810 #line 1917 "parser.yy" 7696 #line 1903 "parser.yy" 7811 7697 { 7812 7698 typedefTable.addToEnclosingScope2( TypedefTable::ID ); … … 7815 7701 break; 7816 7702 7817 case 51 5:7818 7819 /* Line 1806 of yacc.c */ 7820 #line 19 22"parser.yy"7703 case 512: 7704 7705 /* Line 1806 of yacc.c */ 7706 #line 1908 "parser.yy" 7821 7707 { 7822 7708 typedefTable.addToEnclosingScope2( TypedefTable::ID ); … … 7825 7711 break; 7826 7712 7827 case 51 6:7828 7829 /* Line 1806 of yacc.c */ 7830 #line 19 27"parser.yy"7713 case 513: 7714 7715 /* Line 1806 of yacc.c */ 7716 #line 1913 "parser.yy" 7831 7717 { 7832 7718 typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID ); … … 7835 7721 break; 7836 7722 7837 case 51 7:7838 7839 /* Line 1806 of yacc.c */ 7840 #line 19 35"parser.yy"7723 case 514: 7724 7725 /* Line 1806 of yacc.c */ 7726 #line 1921 "parser.yy" 7841 7727 { 7842 7728 typedefTable.addToEnclosingScope2( TypedefTable::ID ); … … 7845 7731 break; 7846 7732 7847 case 51 8:7848 7849 /* Line 1806 of yacc.c */ 7850 #line 19 40"parser.yy"7733 case 515: 7734 7735 /* Line 1806 of yacc.c */ 7736 #line 1926 "parser.yy" 7851 7737 { 7852 7738 typedefTable.addToEnclosingScope2( TypedefTable::ID ); … … 7855 7741 break; 7856 7742 7857 case 51 9:7858 7859 /* Line 1806 of yacc.c */ 7860 #line 19 50"parser.yy"7743 case 516: 7744 7745 /* Line 1806 of yacc.c */ 7746 #line 1936 "parser.yy" 7861 7747 {} 7862 7748 break; 7863 7749 7864 case 5 20:7865 7866 /* Line 1806 of yacc.c */ 7867 #line 19 52"parser.yy"7750 case 517: 7751 7752 /* Line 1806 of yacc.c */ 7753 #line 1938 "parser.yy" 7868 7754 { 7869 7755 if ( theTree ) { … … 7875 7761 break; 7876 7762 7877 case 5 22:7878 7879 /* Line 1806 of yacc.c */ 7880 #line 19 64"parser.yy"7763 case 519: 7764 7765 /* Line 1806 of yacc.c */ 7766 #line 1950 "parser.yy" 7881 7767 { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); } 7882 7768 break; 7883 7769 7884 case 52 3:7885 7886 /* Line 1806 of yacc.c */ 7887 #line 19 69"parser.yy"7770 case 520: 7771 7772 /* Line 1806 of yacc.c */ 7773 #line 1955 "parser.yy" 7888 7774 { (yyval.decl) = 0; } 7889 7775 break; 7890 7776 7891 case 52 7:7892 7893 /* Line 1806 of yacc.c */ 7894 #line 19 77"parser.yy"7777 case 524: 7778 7779 /* Line 1806 of yacc.c */ 7780 #line 1963 "parser.yy" 7895 7781 {} 7896 7782 break; 7897 7783 7898 case 52 8:7899 7900 /* Line 1806 of yacc.c */ 7901 #line 19 79"parser.yy"7784 case 525: 7785 7786 /* Line 1806 of yacc.c */ 7787 #line 1965 "parser.yy" 7902 7788 { 7903 7789 linkageStack.push( linkage ); … … 7906 7792 break; 7907 7793 7908 case 52 9:7909 7910 /* Line 1806 of yacc.c */ 7911 #line 19 84"parser.yy"7794 case 526: 7795 7796 /* Line 1806 of yacc.c */ 7797 #line 1970 "parser.yy" 7912 7798 { 7913 7799 linkage = linkageStack.top(); … … 7917 7803 break; 7918 7804 7919 case 5 30:7920 7921 /* Line 1806 of yacc.c */ 7922 #line 19 90"parser.yy"7805 case 527: 7806 7807 /* Line 1806 of yacc.c */ 7808 #line 1976 "parser.yy" 7923 7809 { (yyval.decl) = (yyvsp[(2) - (2)].decl); } 7924 7810 break; 7925 7811 7926 case 5 32:7927 7928 /* Line 1806 of yacc.c */ 7929 #line 2000"parser.yy"7812 case 529: 7813 7814 /* Line 1806 of yacc.c */ 7815 #line 1986 "parser.yy" 7930 7816 { 7931 7817 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7935 7821 break; 7936 7822 7937 case 53 3:7938 7939 /* Line 1806 of yacc.c */ 7940 #line 2006"parser.yy"7823 case 530: 7824 7825 /* Line 1806 of yacc.c */ 7826 #line 1992 "parser.yy" 7941 7827 { 7942 7828 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7946 7832 break; 7947 7833 7948 case 53 4:7949 7950 /* Line 1806 of yacc.c */ 7951 #line 20 15"parser.yy"7834 case 531: 7835 7836 /* Line 1806 of yacc.c */ 7837 #line 2001 "parser.yy" 7952 7838 { 7953 7839 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7957 7843 break; 7958 7844 7959 case 53 5:7960 7961 /* Line 1806 of yacc.c */ 7962 #line 20 21"parser.yy"7845 case 532: 7846 7847 /* Line 1806 of yacc.c */ 7848 #line 2007 "parser.yy" 7963 7849 { 7964 7850 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7968 7854 break; 7969 7855 7970 case 53 6:7971 7972 /* Line 1806 of yacc.c */ 7973 #line 20 27"parser.yy"7856 case 533: 7857 7858 /* Line 1806 of yacc.c */ 7859 #line 2013 "parser.yy" 7974 7860 { 7975 7861 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7979 7865 break; 7980 7866 7981 case 53 7:7982 7983 /* Line 1806 of yacc.c */ 7984 #line 20 33"parser.yy"7867 case 534: 7868 7869 /* Line 1806 of yacc.c */ 7870 #line 2019 "parser.yy" 7985 7871 { 7986 7872 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 7990 7876 break; 7991 7877 7992 case 53 8:7993 7994 /* Line 1806 of yacc.c */ 7995 #line 20 39"parser.yy"7878 case 535: 7879 7880 /* Line 1806 of yacc.c */ 7881 #line 2025 "parser.yy" 7996 7882 { 7997 7883 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 8001 7887 break; 8002 7888 8003 case 53 9:8004 8005 /* Line 1806 of yacc.c */ 8006 #line 20 47"parser.yy"7889 case 536: 7890 7891 /* Line 1806 of yacc.c */ 7892 #line 2033 "parser.yy" 8007 7893 { 8008 7894 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 8012 7898 break; 8013 7899 8014 case 5 40:8015 8016 /* Line 1806 of yacc.c */ 8017 #line 20 53"parser.yy"7900 case 537: 7901 7902 /* Line 1806 of yacc.c */ 7903 #line 2039 "parser.yy" 8018 7904 { 8019 7905 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 8023 7909 break; 8024 7910 8025 case 5 41:8026 8027 /* Line 1806 of yacc.c */ 8028 #line 20 61"parser.yy"7911 case 538: 7912 7913 /* Line 1806 of yacc.c */ 7914 #line 2047 "parser.yy" 8029 7915 { 8030 7916 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 8034 7920 break; 8035 7921 8036 case 5 42:8037 8038 /* Line 1806 of yacc.c */ 8039 #line 20 67"parser.yy"7922 case 539: 7923 7924 /* Line 1806 of yacc.c */ 7925 #line 2053 "parser.yy" 8040 7926 { 8041 7927 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 8045 7931 break; 8046 7932 7933 case 543: 7934 7935 /* Line 1806 of yacc.c */ 7936 #line 2068 "parser.yy" 7937 { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); } 7938 break; 7939 8047 7940 case 546: 8048 7941 8049 7942 /* Line 1806 of yacc.c */ 8050 #line 20 82"parser.yy"8051 { (yyval. en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }7943 #line 2078 "parser.yy" 7944 { (yyval.decl) = 0; } 8052 7945 break; 8053 7946 … … 8055 7948 8056 7949 /* Line 1806 of yacc.c */ 8057 #line 2092 "parser.yy" 7950 #line 2085 "parser.yy" 7951 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 7952 break; 7953 7954 case 550: 7955 7956 /* Line 1806 of yacc.c */ 7957 #line 2091 "parser.yy" 8058 7958 { (yyval.decl) = 0; } 8059 7959 break; 8060 7960 8061 case 552: 8062 8063 /* Line 1806 of yacc.c */ 8064 #line 2099 "parser.yy" 8065 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 8066 break; 8067 8068 case 553: 8069 8070 /* Line 1806 of yacc.c */ 8071 #line 2105 "parser.yy" 8072 { (yyval.decl) = 0; } 7961 case 556: 7962 7963 /* Line 1806 of yacc.c */ 7964 #line 2106 "parser.yy" 7965 {} 7966 break; 7967 7968 case 557: 7969 7970 /* Line 1806 of yacc.c */ 7971 #line 2107 "parser.yy" 7972 {} 7973 break; 7974 7975 case 558: 7976 7977 /* Line 1806 of yacc.c */ 7978 #line 2108 "parser.yy" 7979 {} 8073 7980 break; 8074 7981 … … 8076 7983 8077 7984 /* Line 1806 of yacc.c */ 8078 #line 21 20"parser.yy"7985 #line 2109 "parser.yy" 8079 7986 {} 8080 7987 break; … … 8083 7990 8084 7991 /* Line 1806 of yacc.c */ 8085 #line 2121 "parser.yy" 8086 {} 8087 break; 8088 8089 case 561: 8090 8091 /* Line 1806 of yacc.c */ 8092 #line 2122 "parser.yy" 8093 {} 7992 #line 2144 "parser.yy" 7993 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8094 7994 break; 8095 7995 … … 8097 7997 8098 7998 /* Line 1806 of yacc.c */ 8099 #line 21 23"parser.yy"8100 { }7999 #line 2147 "parser.yy" 8000 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8101 8001 break; 8102 8002 … … 8104 8004 8105 8005 /* Line 1806 of yacc.c */ 8106 #line 21 58"parser.yy"8006 #line 2149 "parser.yy" 8107 8007 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8108 8008 break; 8109 8009 8110 case 565: 8111 8112 /* Line 1806 of yacc.c */ 8113 #line 2161 "parser.yy" 8114 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8115 break; 8116 8117 case 566: 8118 8119 /* Line 1806 of yacc.c */ 8120 #line 2163 "parser.yy" 8121 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8122 break; 8123 8124 case 567: 8125 8126 /* Line 1806 of yacc.c */ 8127 #line 2168 "parser.yy" 8010 case 564: 8011 8012 /* Line 1806 of yacc.c */ 8013 #line 2154 "parser.yy" 8128 8014 { 8129 8015 typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) ); … … 8132 8018 break; 8133 8019 8020 case 565: 8021 8022 /* Line 1806 of yacc.c */ 8023 #line 2159 "parser.yy" 8024 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8025 break; 8026 8027 case 566: 8028 8029 /* Line 1806 of yacc.c */ 8030 #line 2164 "parser.yy" 8031 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8032 break; 8033 8034 case 567: 8035 8036 /* Line 1806 of yacc.c */ 8037 #line 2166 "parser.yy" 8038 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8039 break; 8040 8134 8041 case 568: 8135 8042 8136 8043 /* Line 1806 of yacc.c */ 8044 #line 2168 "parser.yy" 8045 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8046 break; 8047 8048 case 569: 8049 8050 /* Line 1806 of yacc.c */ 8137 8051 #line 2173 "parser.yy" 8052 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8053 break; 8054 8055 case 570: 8056 8057 /* Line 1806 of yacc.c */ 8058 #line 2175 "parser.yy" 8059 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8060 break; 8061 8062 case 571: 8063 8064 /* Line 1806 of yacc.c */ 8065 #line 2177 "parser.yy" 8066 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8067 break; 8068 8069 case 572: 8070 8071 /* Line 1806 of yacc.c */ 8072 #line 2179 "parser.yy" 8138 8073 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8139 8074 break; 8140 8075 8141 case 569: 8142 8143 /* Line 1806 of yacc.c */ 8144 #line 2178 "parser.yy" 8076 case 573: 8077 8078 /* Line 1806 of yacc.c */ 8079 #line 2184 "parser.yy" 8080 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8081 break; 8082 8083 case 574: 8084 8085 /* Line 1806 of yacc.c */ 8086 #line 2186 "parser.yy" 8087 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8088 break; 8089 8090 case 575: 8091 8092 /* Line 1806 of yacc.c */ 8093 #line 2196 "parser.yy" 8094 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8095 break; 8096 8097 case 577: 8098 8099 /* Line 1806 of yacc.c */ 8100 #line 2199 "parser.yy" 8101 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8102 break; 8103 8104 case 578: 8105 8106 /* Line 1806 of yacc.c */ 8107 #line 2204 "parser.yy" 8108 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); } 8109 break; 8110 8111 case 579: 8112 8113 /* Line 1806 of yacc.c */ 8114 #line 2206 "parser.yy" 8115 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8116 break; 8117 8118 case 580: 8119 8120 /* Line 1806 of yacc.c */ 8121 #line 2208 "parser.yy" 8122 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8123 break; 8124 8125 case 581: 8126 8127 /* Line 1806 of yacc.c */ 8128 #line 2213 "parser.yy" 8145 8129 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8146 8130 break; 8147 8131 8148 case 5 70:8149 8150 /* Line 1806 of yacc.c */ 8151 #line 2 180"parser.yy"8132 case 582: 8133 8134 /* Line 1806 of yacc.c */ 8135 #line 2215 "parser.yy" 8152 8136 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8153 8137 break; 8154 8138 8155 case 5 71:8156 8157 /* Line 1806 of yacc.c */ 8158 #line 2 182"parser.yy"8139 case 583: 8140 8141 /* Line 1806 of yacc.c */ 8142 #line 2217 "parser.yy" 8159 8143 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8160 8144 break; 8161 8145 8162 case 572: 8163 8164 /* Line 1806 of yacc.c */ 8165 #line 2187 "parser.yy" 8146 case 584: 8147 8148 /* Line 1806 of yacc.c */ 8149 #line 2222 "parser.yy" 8150 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8151 break; 8152 8153 case 585: 8154 8155 /* Line 1806 of yacc.c */ 8156 #line 2224 "parser.yy" 8157 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8158 break; 8159 8160 case 586: 8161 8162 /* Line 1806 of yacc.c */ 8163 #line 2226 "parser.yy" 8164 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8165 break; 8166 8167 case 590: 8168 8169 /* Line 1806 of yacc.c */ 8170 #line 2241 "parser.yy" 8171 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); } 8172 break; 8173 8174 case 591: 8175 8176 /* Line 1806 of yacc.c */ 8177 #line 2243 "parser.yy" 8178 { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); } 8179 break; 8180 8181 case 592: 8182 8183 /* Line 1806 of yacc.c */ 8184 #line 2245 "parser.yy" 8185 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8186 break; 8187 8188 case 593: 8189 8190 /* Line 1806 of yacc.c */ 8191 #line 2250 "parser.yy" 8192 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8193 break; 8194 8195 case 594: 8196 8197 /* Line 1806 of yacc.c */ 8198 #line 2252 "parser.yy" 8199 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8200 break; 8201 8202 case 595: 8203 8204 /* Line 1806 of yacc.c */ 8205 #line 2254 "parser.yy" 8206 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8207 break; 8208 8209 case 596: 8210 8211 /* Line 1806 of yacc.c */ 8212 #line 2259 "parser.yy" 8213 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8214 break; 8215 8216 case 597: 8217 8218 /* Line 1806 of yacc.c */ 8219 #line 2261 "parser.yy" 8220 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8221 break; 8222 8223 case 598: 8224 8225 /* Line 1806 of yacc.c */ 8226 #line 2263 "parser.yy" 8227 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8228 break; 8229 8230 case 599: 8231 8232 /* Line 1806 of yacc.c */ 8233 #line 2278 "parser.yy" 8234 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8235 break; 8236 8237 case 601: 8238 8239 /* Line 1806 of yacc.c */ 8240 #line 2281 "parser.yy" 8241 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8242 break; 8243 8244 case 602: 8245 8246 /* Line 1806 of yacc.c */ 8247 #line 2283 "parser.yy" 8248 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8249 break; 8250 8251 case 604: 8252 8253 /* Line 1806 of yacc.c */ 8254 #line 2289 "parser.yy" 8255 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8256 break; 8257 8258 case 605: 8259 8260 /* Line 1806 of yacc.c */ 8261 #line 2294 "parser.yy" 8262 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8263 break; 8264 8265 case 606: 8266 8267 /* Line 1806 of yacc.c */ 8268 #line 2296 "parser.yy" 8269 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8270 break; 8271 8272 case 607: 8273 8274 /* Line 1806 of yacc.c */ 8275 #line 2298 "parser.yy" 8276 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8277 break; 8278 8279 case 608: 8280 8281 /* Line 1806 of yacc.c */ 8282 #line 2303 "parser.yy" 8166 8283 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8167 8284 break; 8168 8285 8169 case 573:8170 8171 /* Line 1806 of yacc.c */ 8172 #line 2 189"parser.yy"8286 case 609: 8287 8288 /* Line 1806 of yacc.c */ 8289 #line 2305 "parser.yy" 8173 8290 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8174 8291 break; 8175 8292 8176 case 574:8177 8178 /* Line 1806 of yacc.c */ 8179 #line 2 191"parser.yy"8293 case 610: 8294 8295 /* Line 1806 of yacc.c */ 8296 #line 2307 "parser.yy" 8180 8297 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8181 8298 break; 8182 8299 8183 case 575:8184 8185 /* Line 1806 of yacc.c */ 8186 #line 2 193"parser.yy"8300 case 611: 8301 8302 /* Line 1806 of yacc.c */ 8303 #line 2309 "parser.yy" 8187 8304 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8188 8305 break; 8189 8306 8190 case 576: 8191 8192 /* Line 1806 of yacc.c */ 8193 #line 2198 "parser.yy" 8307 case 612: 8308 8309 /* Line 1806 of yacc.c */ 8310 #line 2314 "parser.yy" 8311 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); } 8312 break; 8313 8314 case 613: 8315 8316 /* Line 1806 of yacc.c */ 8317 #line 2316 "parser.yy" 8194 8318 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8195 8319 break; 8196 8320 8197 case 577:8198 8199 /* Line 1806 of yacc.c */ 8200 #line 2 200"parser.yy"8321 case 614: 8322 8323 /* Line 1806 of yacc.c */ 8324 #line 2318 "parser.yy" 8201 8325 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8202 8326 break; 8203 8327 8204 case 578:8205 8206 /* Line 1806 of yacc.c */ 8207 #line 2 210"parser.yy"8328 case 615: 8329 8330 /* Line 1806 of yacc.c */ 8331 #line 2328 "parser.yy" 8208 8332 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8209 8333 break; 8210 8334 8211 case 580:8212 8213 /* Line 1806 of yacc.c */ 8214 #line 2 213"parser.yy"8335 case 617: 8336 8337 /* Line 1806 of yacc.c */ 8338 #line 2331 "parser.yy" 8215 8339 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8216 8340 break; 8217 8341 8218 case 581: 8219 8220 /* Line 1806 of yacc.c */ 8221 #line 2218 "parser.yy" 8342 case 618: 8343 8344 /* Line 1806 of yacc.c */ 8345 #line 2333 "parser.yy" 8346 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8347 break; 8348 8349 case 619: 8350 8351 /* Line 1806 of yacc.c */ 8352 #line 2338 "parser.yy" 8353 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8354 break; 8355 8356 case 620: 8357 8358 /* Line 1806 of yacc.c */ 8359 #line 2340 "parser.yy" 8360 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8361 break; 8362 8363 case 621: 8364 8365 /* Line 1806 of yacc.c */ 8366 #line 2342 "parser.yy" 8367 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8368 break; 8369 8370 case 622: 8371 8372 /* Line 1806 of yacc.c */ 8373 #line 2347 "parser.yy" 8374 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8375 break; 8376 8377 case 623: 8378 8379 /* Line 1806 of yacc.c */ 8380 #line 2349 "parser.yy" 8381 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8382 break; 8383 8384 case 624: 8385 8386 /* Line 1806 of yacc.c */ 8387 #line 2351 "parser.yy" 8388 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8389 break; 8390 8391 case 625: 8392 8393 /* Line 1806 of yacc.c */ 8394 #line 2353 "parser.yy" 8395 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8396 break; 8397 8398 case 626: 8399 8400 /* Line 1806 of yacc.c */ 8401 #line 2358 "parser.yy" 8222 8402 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); } 8223 8403 break; 8224 8404 8225 case 582:8226 8227 /* Line 1806 of yacc.c */ 8228 #line 2 220 "parser.yy"8405 case 627: 8406 8407 /* Line 1806 of yacc.c */ 8408 #line 2360 "parser.yy" 8229 8409 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8230 8410 break; 8231 8411 8232 case 583:8233 8234 /* Line 1806 of yacc.c */ 8235 #line 2 222 "parser.yy"8412 case 628: 8413 8414 /* Line 1806 of yacc.c */ 8415 #line 2362 "parser.yy" 8236 8416 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8237 8417 break; 8238 8418 8239 case 584: 8240 8241 /* Line 1806 of yacc.c */ 8242 #line 2227 "parser.yy" 8243 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8244 break; 8245 8246 case 585: 8247 8248 /* Line 1806 of yacc.c */ 8249 #line 2229 "parser.yy" 8250 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8251 break; 8252 8253 case 586: 8254 8255 /* Line 1806 of yacc.c */ 8256 #line 2231 "parser.yy" 8257 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8258 break; 8259 8260 case 587: 8261 8262 /* Line 1806 of yacc.c */ 8263 #line 2236 "parser.yy" 8264 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8265 break; 8266 8267 case 588: 8268 8269 /* Line 1806 of yacc.c */ 8270 #line 2238 "parser.yy" 8271 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8272 break; 8273 8274 case 589: 8275 8276 /* Line 1806 of yacc.c */ 8277 #line 2240 "parser.yy" 8278 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8279 break; 8280 8281 case 593: 8282 8283 /* Line 1806 of yacc.c */ 8284 #line 2255 "parser.yy" 8285 { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); } 8286 break; 8287 8288 case 594: 8289 8290 /* Line 1806 of yacc.c */ 8291 #line 2257 "parser.yy" 8292 { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); } 8293 break; 8294 8295 case 595: 8296 8297 /* Line 1806 of yacc.c */ 8298 #line 2259 "parser.yy" 8299 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8300 break; 8301 8302 case 596: 8303 8304 /* Line 1806 of yacc.c */ 8305 #line 2264 "parser.yy" 8306 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8307 break; 8308 8309 case 597: 8310 8311 /* Line 1806 of yacc.c */ 8312 #line 2266 "parser.yy" 8313 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8314 break; 8315 8316 case 598: 8317 8318 /* Line 1806 of yacc.c */ 8319 #line 2268 "parser.yy" 8320 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8321 break; 8322 8323 case 599: 8324 8325 /* Line 1806 of yacc.c */ 8326 #line 2273 "parser.yy" 8327 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8328 break; 8329 8330 case 600: 8331 8332 /* Line 1806 of yacc.c */ 8333 #line 2275 "parser.yy" 8334 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8335 break; 8336 8337 case 601: 8338 8339 /* Line 1806 of yacc.c */ 8340 #line 2277 "parser.yy" 8341 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8342 break; 8343 8344 case 602: 8345 8346 /* Line 1806 of yacc.c */ 8347 #line 2292 "parser.yy" 8419 case 629: 8420 8421 /* Line 1806 of yacc.c */ 8422 #line 2393 "parser.yy" 8348 8423 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8349 8424 break; 8350 8425 8351 case 6 04:8352 8353 /* Line 1806 of yacc.c */ 8354 #line 2 295"parser.yy"8426 case 631: 8427 8428 /* Line 1806 of yacc.c */ 8429 #line 2396 "parser.yy" 8355 8430 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8356 8431 break; 8357 8432 8358 case 6 05:8359 8360 /* Line 1806 of yacc.c */ 8361 #line 2 297"parser.yy"8433 case 632: 8434 8435 /* Line 1806 of yacc.c */ 8436 #line 2398 "parser.yy" 8362 8437 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8363 8438 break; 8364 8439 8365 case 607: 8366 8367 /* Line 1806 of yacc.c */ 8368 #line 2303 "parser.yy" 8369 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8370 break; 8371 8372 case 608: 8373 8374 /* Line 1806 of yacc.c */ 8375 #line 2308 "parser.yy" 8376 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8377 break; 8378 8379 case 609: 8380 8381 /* Line 1806 of yacc.c */ 8382 #line 2310 "parser.yy" 8383 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8384 break; 8385 8386 case 610: 8387 8388 /* Line 1806 of yacc.c */ 8389 #line 2312 "parser.yy" 8390 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8391 break; 8392 8393 case 611: 8394 8395 /* Line 1806 of yacc.c */ 8396 #line 2317 "parser.yy" 8397 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8398 break; 8399 8400 case 612: 8401 8402 /* Line 1806 of yacc.c */ 8403 #line 2319 "parser.yy" 8404 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8405 break; 8406 8407 case 613: 8408 8409 /* Line 1806 of yacc.c */ 8410 #line 2321 "parser.yy" 8411 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8412 break; 8413 8414 case 614: 8415 8416 /* Line 1806 of yacc.c */ 8417 #line 2323 "parser.yy" 8418 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8419 break; 8420 8421 case 615: 8422 8423 /* Line 1806 of yacc.c */ 8424 #line 2328 "parser.yy" 8425 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); } 8426 break; 8427 8428 case 616: 8429 8430 /* Line 1806 of yacc.c */ 8431 #line 2330 "parser.yy" 8432 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8433 break; 8434 8435 case 617: 8436 8437 /* Line 1806 of yacc.c */ 8438 #line 2332 "parser.yy" 8439 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8440 break; 8441 8442 case 618: 8443 8444 /* Line 1806 of yacc.c */ 8445 #line 2342 "parser.yy" 8446 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8447 break; 8448 8449 case 620: 8450 8451 /* Line 1806 of yacc.c */ 8452 #line 2345 "parser.yy" 8453 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8454 break; 8455 8456 case 621: 8457 8458 /* Line 1806 of yacc.c */ 8459 #line 2347 "parser.yy" 8460 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8461 break; 8462 8463 case 622: 8464 8465 /* Line 1806 of yacc.c */ 8466 #line 2352 "parser.yy" 8467 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8468 break; 8469 8470 case 623: 8471 8472 /* Line 1806 of yacc.c */ 8473 #line 2354 "parser.yy" 8474 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8475 break; 8476 8477 case 624: 8478 8479 /* Line 1806 of yacc.c */ 8480 #line 2356 "parser.yy" 8481 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8482 break; 8483 8484 case 625: 8485 8486 /* Line 1806 of yacc.c */ 8487 #line 2361 "parser.yy" 8488 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8489 break; 8490 8491 case 626: 8492 8493 /* Line 1806 of yacc.c */ 8494 #line 2363 "parser.yy" 8495 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8496 break; 8497 8498 case 627: 8499 8500 /* Line 1806 of yacc.c */ 8501 #line 2365 "parser.yy" 8502 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8503 break; 8504 8505 case 628: 8506 8507 /* Line 1806 of yacc.c */ 8508 #line 2367 "parser.yy" 8509 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8510 break; 8511 8512 case 629: 8513 8514 /* Line 1806 of yacc.c */ 8515 #line 2372 "parser.yy" 8516 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); } 8517 break; 8518 8519 case 630: 8520 8521 /* Line 1806 of yacc.c */ 8522 #line 2374 "parser.yy" 8523 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8524 break; 8525 8526 case 631: 8527 8528 /* Line 1806 of yacc.c */ 8529 #line 2376 "parser.yy" 8530 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8531 break; 8532 8533 case 632: 8534 8535 /* Line 1806 of yacc.c */ 8536 #line 2407 "parser.yy" 8537 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8538 break; 8539 8540 case 634: 8541 8542 /* Line 1806 of yacc.c */ 8543 #line 2410 "parser.yy" 8544 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8545 break; 8546 8547 case 635: 8548 8549 /* Line 1806 of yacc.c */ 8550 #line 2412 "parser.yy" 8551 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8552 break; 8553 8554 case 636: 8555 8556 /* Line 1806 of yacc.c */ 8557 #line 2417 "parser.yy" 8440 case 633: 8441 8442 /* Line 1806 of yacc.c */ 8443 #line 2403 "parser.yy" 8558 8444 { 8559 8445 typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) ); … … 8562 8448 break; 8563 8449 8564 case 63 7:8565 8566 /* Line 1806 of yacc.c */ 8567 #line 24 22"parser.yy"8450 case 634: 8451 8452 /* Line 1806 of yacc.c */ 8453 #line 2408 "parser.yy" 8568 8454 { 8569 8455 typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) ); … … 8572 8458 break; 8573 8459 8460 case 635: 8461 8462 /* Line 1806 of yacc.c */ 8463 #line 2416 "parser.yy" 8464 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8465 break; 8466 8467 case 636: 8468 8469 /* Line 1806 of yacc.c */ 8470 #line 2418 "parser.yy" 8471 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8472 break; 8473 8474 case 637: 8475 8476 /* Line 1806 of yacc.c */ 8477 #line 2420 "parser.yy" 8478 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8479 break; 8480 8574 8481 case 638: 8575 8482 8576 8483 /* Line 1806 of yacc.c */ 8577 #line 2430 "parser.yy" 8484 #line 2425 "parser.yy" 8485 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8486 break; 8487 8488 case 639: 8489 8490 /* Line 1806 of yacc.c */ 8491 #line 2427 "parser.yy" 8492 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8493 break; 8494 8495 case 640: 8496 8497 /* Line 1806 of yacc.c */ 8498 #line 2432 "parser.yy" 8499 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); } 8500 break; 8501 8502 case 641: 8503 8504 /* Line 1806 of yacc.c */ 8505 #line 2434 "parser.yy" 8506 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8507 break; 8508 8509 case 643: 8510 8511 /* Line 1806 of yacc.c */ 8512 #line 2449 "parser.yy" 8513 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8514 break; 8515 8516 case 644: 8517 8518 /* Line 1806 of yacc.c */ 8519 #line 2451 "parser.yy" 8520 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8521 break; 8522 8523 case 645: 8524 8525 /* Line 1806 of yacc.c */ 8526 #line 2456 "parser.yy" 8527 { (yyval.decl) = DeclarationNode::newPointer( 0 ); } 8528 break; 8529 8530 case 646: 8531 8532 /* Line 1806 of yacc.c */ 8533 #line 2458 "parser.yy" 8534 { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); } 8535 break; 8536 8537 case 647: 8538 8539 /* Line 1806 of yacc.c */ 8540 #line 2460 "parser.yy" 8578 8541 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8579 8542 break; 8580 8543 8581 case 6 39:8582 8583 /* Line 1806 of yacc.c */ 8584 #line 24 32 "parser.yy"8544 case 648: 8545 8546 /* Line 1806 of yacc.c */ 8547 #line 2462 "parser.yy" 8585 8548 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8586 8549 break; 8587 8550 8588 case 64 0:8589 8590 /* Line 1806 of yacc.c */ 8591 #line 24 34 "parser.yy"8551 case 649: 8552 8553 /* Line 1806 of yacc.c */ 8554 #line 2464 "parser.yy" 8592 8555 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8593 8556 break; 8594 8557 8595 case 641: 8596 8597 /* Line 1806 of yacc.c */ 8598 #line 2439 "parser.yy" 8558 case 651: 8559 8560 /* Line 1806 of yacc.c */ 8561 #line 2470 "parser.yy" 8562 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8563 break; 8564 8565 case 652: 8566 8567 /* Line 1806 of yacc.c */ 8568 #line 2472 "parser.yy" 8569 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8570 break; 8571 8572 case 653: 8573 8574 /* Line 1806 of yacc.c */ 8575 #line 2474 "parser.yy" 8576 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8577 break; 8578 8579 case 654: 8580 8581 /* Line 1806 of yacc.c */ 8582 #line 2479 "parser.yy" 8583 { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); } 8584 break; 8585 8586 case 655: 8587 8588 /* Line 1806 of yacc.c */ 8589 #line 2481 "parser.yy" 8590 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8591 break; 8592 8593 case 656: 8594 8595 /* Line 1806 of yacc.c */ 8596 #line 2483 "parser.yy" 8597 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8598 break; 8599 8600 case 657: 8601 8602 /* Line 1806 of yacc.c */ 8603 #line 2489 "parser.yy" 8604 { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); } 8605 break; 8606 8607 case 658: 8608 8609 /* Line 1806 of yacc.c */ 8610 #line 2491 "parser.yy" 8611 { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); } 8612 break; 8613 8614 case 660: 8615 8616 /* Line 1806 of yacc.c */ 8617 #line 2497 "parser.yy" 8618 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); } 8619 break; 8620 8621 case 661: 8622 8623 /* Line 1806 of yacc.c */ 8624 #line 2499 "parser.yy" 8625 { (yyval.decl) = DeclarationNode::newVarArray( 0 ); } 8626 break; 8627 8628 case 662: 8629 8630 /* Line 1806 of yacc.c */ 8631 #line 2501 "parser.yy" 8632 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); } 8633 break; 8634 8635 case 663: 8636 8637 /* Line 1806 of yacc.c */ 8638 #line 2503 "parser.yy" 8639 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); } 8640 break; 8641 8642 case 665: 8643 8644 /* Line 1806 of yacc.c */ 8645 #line 2518 "parser.yy" 8646 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8647 break; 8648 8649 case 666: 8650 8651 /* Line 1806 of yacc.c */ 8652 #line 2520 "parser.yy" 8653 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8654 break; 8655 8656 case 667: 8657 8658 /* Line 1806 of yacc.c */ 8659 #line 2525 "parser.yy" 8660 { (yyval.decl) = DeclarationNode::newPointer( 0 ); } 8661 break; 8662 8663 case 668: 8664 8665 /* Line 1806 of yacc.c */ 8666 #line 2527 "parser.yy" 8667 { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); } 8668 break; 8669 8670 case 669: 8671 8672 /* Line 1806 of yacc.c */ 8673 #line 2529 "parser.yy" 8674 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8675 break; 8676 8677 case 670: 8678 8679 /* Line 1806 of yacc.c */ 8680 #line 2531 "parser.yy" 8681 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8682 break; 8683 8684 case 671: 8685 8686 /* Line 1806 of yacc.c */ 8687 #line 2533 "parser.yy" 8688 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8689 break; 8690 8691 case 673: 8692 8693 /* Line 1806 of yacc.c */ 8694 #line 2539 "parser.yy" 8695 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8696 break; 8697 8698 case 674: 8699 8700 /* Line 1806 of yacc.c */ 8701 #line 2541 "parser.yy" 8702 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8703 break; 8704 8705 case 675: 8706 8707 /* Line 1806 of yacc.c */ 8708 #line 2543 "parser.yy" 8709 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8710 break; 8711 8712 case 676: 8713 8714 /* Line 1806 of yacc.c */ 8715 #line 2548 "parser.yy" 8716 { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); } 8717 break; 8718 8719 case 677: 8720 8721 /* Line 1806 of yacc.c */ 8722 #line 2550 "parser.yy" 8723 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8724 break; 8725 8726 case 678: 8727 8728 /* Line 1806 of yacc.c */ 8729 #line 2552 "parser.yy" 8730 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8731 break; 8732 8733 case 680: 8734 8735 /* Line 1806 of yacc.c */ 8736 #line 2559 "parser.yy" 8599 8737 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8600 8738 break; 8601 8739 8602 case 642: 8603 8604 /* Line 1806 of yacc.c */ 8605 #line 2441 "parser.yy" 8740 case 682: 8741 8742 /* Line 1806 of yacc.c */ 8743 #line 2570 "parser.yy" 8744 { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); } 8745 break; 8746 8747 case 683: 8748 8749 /* Line 1806 of yacc.c */ 8750 #line 2573 "parser.yy" 8751 { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); } 8752 break; 8753 8754 case 684: 8755 8756 /* Line 1806 of yacc.c */ 8757 #line 2575 "parser.yy" 8758 { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); } 8759 break; 8760 8761 case 685: 8762 8763 /* Line 1806 of yacc.c */ 8764 #line 2578 "parser.yy" 8765 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); } 8766 break; 8767 8768 case 686: 8769 8770 /* Line 1806 of yacc.c */ 8771 #line 2580 "parser.yy" 8772 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); } 8773 break; 8774 8775 case 687: 8776 8777 /* Line 1806 of yacc.c */ 8778 #line 2582 "parser.yy" 8779 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); } 8780 break; 8781 8782 case 689: 8783 8784 /* Line 1806 of yacc.c */ 8785 #line 2596 "parser.yy" 8786 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8787 break; 8788 8789 case 690: 8790 8791 /* Line 1806 of yacc.c */ 8792 #line 2598 "parser.yy" 8793 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8794 break; 8795 8796 case 691: 8797 8798 /* Line 1806 of yacc.c */ 8799 #line 2603 "parser.yy" 8800 { (yyval.decl) = DeclarationNode::newPointer( 0 ); } 8801 break; 8802 8803 case 692: 8804 8805 /* Line 1806 of yacc.c */ 8806 #line 2605 "parser.yy" 8807 { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); } 8808 break; 8809 8810 case 693: 8811 8812 /* Line 1806 of yacc.c */ 8813 #line 2607 "parser.yy" 8814 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8815 break; 8816 8817 case 694: 8818 8819 /* Line 1806 of yacc.c */ 8820 #line 2609 "parser.yy" 8821 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8822 break; 8823 8824 case 695: 8825 8826 /* Line 1806 of yacc.c */ 8827 #line 2611 "parser.yy" 8828 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8829 break; 8830 8831 case 697: 8832 8833 /* Line 1806 of yacc.c */ 8834 #line 2617 "parser.yy" 8606 8835 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8607 8836 break; 8608 8837 8609 case 643: 8610 8611 /* Line 1806 of yacc.c */ 8612 #line 2446 "parser.yy" 8613 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); } 8614 break; 8615 8616 case 644: 8617 8618 /* Line 1806 of yacc.c */ 8619 #line 2448 "parser.yy" 8838 case 698: 8839 8840 /* Line 1806 of yacc.c */ 8841 #line 2619 "parser.yy" 8842 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8843 break; 8844 8845 case 699: 8846 8847 /* Line 1806 of yacc.c */ 8848 #line 2621 "parser.yy" 8849 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8850 break; 8851 8852 case 700: 8853 8854 /* Line 1806 of yacc.c */ 8855 #line 2626 "parser.yy" 8620 8856 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8621 8857 break; 8622 8858 8623 case 646: 8624 8625 /* Line 1806 of yacc.c */ 8626 #line 2463 "parser.yy" 8627 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8628 break; 8629 8630 case 647: 8631 8632 /* Line 1806 of yacc.c */ 8633 #line 2465 "parser.yy" 8634 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8635 break; 8636 8637 case 648: 8638 8639 /* Line 1806 of yacc.c */ 8640 #line 2470 "parser.yy" 8641 { (yyval.decl) = DeclarationNode::newPointer( 0 ); } 8642 break; 8643 8644 case 649: 8645 8646 /* Line 1806 of yacc.c */ 8647 #line 2472 "parser.yy" 8648 { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); } 8649 break; 8650 8651 case 650: 8652 8653 /* Line 1806 of yacc.c */ 8654 #line 2474 "parser.yy" 8655 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8656 break; 8657 8658 case 651: 8659 8660 /* Line 1806 of yacc.c */ 8661 #line 2476 "parser.yy" 8662 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8663 break; 8664 8665 case 652: 8666 8667 /* Line 1806 of yacc.c */ 8668 #line 2478 "parser.yy" 8859 case 701: 8860 8861 /* Line 1806 of yacc.c */ 8862 #line 2628 "parser.yy" 8669 8863 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8670 8864 break; 8671 8865 8672 case 654: 8673 8674 /* Line 1806 of yacc.c */ 8675 #line 2484 "parser.yy" 8676 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8677 break; 8678 8679 case 655: 8680 8681 /* Line 1806 of yacc.c */ 8682 #line 2486 "parser.yy" 8683 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8684 break; 8685 8686 case 656: 8687 8688 /* Line 1806 of yacc.c */ 8689 #line 2488 "parser.yy" 8690 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8691 break; 8692 8693 case 657: 8694 8695 /* Line 1806 of yacc.c */ 8696 #line 2493 "parser.yy" 8697 { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); } 8698 break; 8699 8700 case 658: 8701 8702 /* Line 1806 of yacc.c */ 8703 #line 2495 "parser.yy" 8704 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8705 break; 8706 8707 case 659: 8708 8709 /* Line 1806 of yacc.c */ 8710 #line 2497 "parser.yy" 8711 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8712 break; 8713 8714 case 660: 8715 8716 /* Line 1806 of yacc.c */ 8717 #line 2503 "parser.yy" 8718 { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); } 8719 break; 8720 8721 case 661: 8722 8723 /* Line 1806 of yacc.c */ 8724 #line 2505 "parser.yy" 8725 { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); } 8726 break; 8727 8728 case 663: 8729 8730 /* Line 1806 of yacc.c */ 8731 #line 2511 "parser.yy" 8732 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); } 8733 break; 8734 8735 case 664: 8736 8737 /* Line 1806 of yacc.c */ 8738 #line 2513 "parser.yy" 8739 { (yyval.decl) = DeclarationNode::newVarArray( 0 ); } 8740 break; 8741 8742 case 665: 8743 8744 /* Line 1806 of yacc.c */ 8745 #line 2515 "parser.yy" 8746 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); } 8747 break; 8748 8749 case 666: 8750 8751 /* Line 1806 of yacc.c */ 8752 #line 2517 "parser.yy" 8753 { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); } 8754 break; 8755 8756 case 668: 8757 8758 /* Line 1806 of yacc.c */ 8759 #line 2532 "parser.yy" 8760 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8761 break; 8762 8763 case 669: 8764 8765 /* Line 1806 of yacc.c */ 8766 #line 2534 "parser.yy" 8767 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8768 break; 8769 8770 case 670: 8771 8772 /* Line 1806 of yacc.c */ 8773 #line 2539 "parser.yy" 8774 { (yyval.decl) = DeclarationNode::newPointer( 0 ); } 8775 break; 8776 8777 case 671: 8778 8779 /* Line 1806 of yacc.c */ 8780 #line 2541 "parser.yy" 8781 { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); } 8782 break; 8783 8784 case 672: 8785 8786 /* Line 1806 of yacc.c */ 8787 #line 2543 "parser.yy" 8788 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8789 break; 8790 8791 case 673: 8792 8793 /* Line 1806 of yacc.c */ 8794 #line 2545 "parser.yy" 8795 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8796 break; 8797 8798 case 674: 8799 8800 /* Line 1806 of yacc.c */ 8801 #line 2547 "parser.yy" 8802 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8803 break; 8804 8805 case 676: 8806 8807 /* Line 1806 of yacc.c */ 8808 #line 2553 "parser.yy" 8809 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8810 break; 8811 8812 case 677: 8813 8814 /* Line 1806 of yacc.c */ 8815 #line 2555 "parser.yy" 8816 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8817 break; 8818 8819 case 678: 8820 8821 /* Line 1806 of yacc.c */ 8822 #line 2557 "parser.yy" 8823 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8824 break; 8825 8826 case 679: 8827 8828 /* Line 1806 of yacc.c */ 8829 #line 2562 "parser.yy" 8830 { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); } 8831 break; 8832 8833 case 680: 8834 8835 /* Line 1806 of yacc.c */ 8836 #line 2564 "parser.yy" 8837 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8838 break; 8839 8840 case 681: 8841 8842 /* Line 1806 of yacc.c */ 8843 #line 2566 "parser.yy" 8844 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8845 break; 8846 8847 case 683: 8848 8849 /* Line 1806 of yacc.c */ 8850 #line 2573 "parser.yy" 8851 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); } 8852 break; 8853 8854 case 685: 8855 8856 /* Line 1806 of yacc.c */ 8857 #line 2584 "parser.yy" 8858 { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); } 8859 break; 8860 8861 case 686: 8862 8863 /* Line 1806 of yacc.c */ 8864 #line 2587 "parser.yy" 8866 case 704: 8867 8868 /* Line 1806 of yacc.c */ 8869 #line 2638 "parser.yy" 8870 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 8871 break; 8872 8873 case 707: 8874 8875 /* Line 1806 of yacc.c */ 8876 #line 2648 "parser.yy" 8877 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 8878 break; 8879 8880 case 708: 8881 8882 /* Line 1806 of yacc.c */ 8883 #line 2650 "parser.yy" 8884 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); } 8885 break; 8886 8887 case 709: 8888 8889 /* Line 1806 of yacc.c */ 8890 #line 2652 "parser.yy" 8891 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 8892 break; 8893 8894 case 710: 8895 8896 /* Line 1806 of yacc.c */ 8897 #line 2654 "parser.yy" 8898 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); } 8899 break; 8900 8901 case 711: 8902 8903 /* Line 1806 of yacc.c */ 8904 #line 2656 "parser.yy" 8905 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 8906 break; 8907 8908 case 712: 8909 8910 /* Line 1806 of yacc.c */ 8911 #line 2658 "parser.yy" 8912 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); } 8913 break; 8914 8915 case 713: 8916 8917 /* Line 1806 of yacc.c */ 8918 #line 2665 "parser.yy" 8919 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 8920 break; 8921 8922 case 714: 8923 8924 /* Line 1806 of yacc.c */ 8925 #line 2667 "parser.yy" 8926 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 8927 break; 8928 8929 case 715: 8930 8931 /* Line 1806 of yacc.c */ 8932 #line 2669 "parser.yy" 8933 { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 8934 break; 8935 8936 case 716: 8937 8938 /* Line 1806 of yacc.c */ 8939 #line 2671 "parser.yy" 8940 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); } 8941 break; 8942 8943 case 717: 8944 8945 /* Line 1806 of yacc.c */ 8946 #line 2673 "parser.yy" 8947 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 8948 break; 8949 8950 case 718: 8951 8952 /* Line 1806 of yacc.c */ 8953 #line 2675 "parser.yy" 8954 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 8955 break; 8956 8957 case 719: 8958 8959 /* Line 1806 of yacc.c */ 8960 #line 2677 "parser.yy" 8961 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 8962 break; 8963 8964 case 720: 8965 8966 /* Line 1806 of yacc.c */ 8967 #line 2679 "parser.yy" 8968 { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 8969 break; 8970 8971 case 721: 8972 8973 /* Line 1806 of yacc.c */ 8974 #line 2681 "parser.yy" 8975 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); } 8976 break; 8977 8978 case 722: 8979 8980 /* Line 1806 of yacc.c */ 8981 #line 2683 "parser.yy" 8982 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 8983 break; 8984 8985 case 723: 8986 8987 /* Line 1806 of yacc.c */ 8988 #line 2688 "parser.yy" 8865 8989 { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); } 8866 8990 break; 8867 8991 8868 case 687: 8869 8870 /* Line 1806 of yacc.c */ 8871 #line 2589 "parser.yy" 8872 { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); } 8873 break; 8874 8875 case 688: 8876 8877 /* Line 1806 of yacc.c */ 8878 #line 2592 "parser.yy" 8992 case 724: 8993 8994 /* Line 1806 of yacc.c */ 8995 #line 2690 "parser.yy" 8879 8996 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); } 8880 8997 break; 8881 8998 8882 case 689: 8883 8884 /* Line 1806 of yacc.c */ 8885 #line 2594 "parser.yy" 8886 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); } 8887 break; 8888 8889 case 690: 8890 8891 /* Line 1806 of yacc.c */ 8892 #line 2596 "parser.yy" 8893 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); } 8894 break; 8895 8896 case 692: 8897 8898 /* Line 1806 of yacc.c */ 8899 #line 2610 "parser.yy" 8900 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8901 break; 8902 8903 case 693: 8904 8905 /* Line 1806 of yacc.c */ 8906 #line 2612 "parser.yy" 8907 { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); } 8908 break; 8909 8910 case 694: 8911 8912 /* Line 1806 of yacc.c */ 8913 #line 2617 "parser.yy" 8914 { (yyval.decl) = DeclarationNode::newPointer( 0 ); } 8915 break; 8916 8917 case 695: 8918 8919 /* Line 1806 of yacc.c */ 8920 #line 2619 "parser.yy" 8921 { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); } 8922 break; 8923 8924 case 696: 8925 8926 /* Line 1806 of yacc.c */ 8927 #line 2621 "parser.yy" 8928 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); } 8929 break; 8930 8931 case 697: 8932 8933 /* Line 1806 of yacc.c */ 8934 #line 2623 "parser.yy" 8935 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); } 8936 break; 8937 8938 case 698: 8939 8940 /* Line 1806 of yacc.c */ 8941 #line 2625 "parser.yy" 8942 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8943 break; 8944 8945 case 700: 8946 8947 /* Line 1806 of yacc.c */ 8948 #line 2631 "parser.yy" 8949 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8950 break; 8951 8952 case 701: 8953 8954 /* Line 1806 of yacc.c */ 8955 #line 2633 "parser.yy" 8956 { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); } 8957 break; 8958 8959 case 702: 8960 8961 /* Line 1806 of yacc.c */ 8962 #line 2635 "parser.yy" 8963 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8964 break; 8965 8966 case 703: 8967 8968 /* Line 1806 of yacc.c */ 8969 #line 2640 "parser.yy" 8970 { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); } 8971 break; 8972 8973 case 704: 8974 8975 /* Line 1806 of yacc.c */ 8976 #line 2642 "parser.yy" 8977 { (yyval.decl) = (yyvsp[(2) - (3)].decl); } 8978 break; 8979 8980 case 707: 8981 8982 /* Line 1806 of yacc.c */ 8983 #line 2652 "parser.yy" 8999 case 725: 9000 9001 /* Line 1806 of yacc.c */ 9002 #line 2695 "parser.yy" 9003 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); } 9004 break; 9005 9006 case 726: 9007 9008 /* Line 1806 of yacc.c */ 9009 #line 2697 "parser.yy" 9010 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); } 9011 break; 9012 9013 case 728: 9014 9015 /* Line 1806 of yacc.c */ 9016 #line 2724 "parser.yy" 8984 9017 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); } 8985 9018 break; 8986 9019 8987 case 7 10:8988 8989 /* Line 1806 of yacc.c */ 8990 #line 2 662"parser.yy"9020 case 732: 9021 9022 /* Line 1806 of yacc.c */ 9023 #line 2735 "parser.yy" 8991 9024 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 8992 9025 break; 8993 9026 8994 case 7 11:8995 8996 /* Line 1806 of yacc.c */ 8997 #line 2 664"parser.yy"9027 case 733: 9028 9029 /* Line 1806 of yacc.c */ 9030 #line 2737 "parser.yy" 8998 9031 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); } 8999 9032 break; 9000 9033 9001 case 7 12:9002 9003 /* Line 1806 of yacc.c */ 9004 #line 2 666"parser.yy"9034 case 734: 9035 9036 /* Line 1806 of yacc.c */ 9037 #line 2739 "parser.yy" 9005 9038 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 9006 9039 break; 9007 9040 9008 case 7 13:9009 9010 /* Line 1806 of yacc.c */ 9011 #line 2 668"parser.yy"9041 case 735: 9042 9043 /* Line 1806 of yacc.c */ 9044 #line 2741 "parser.yy" 9012 9045 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); } 9013 9046 break; 9014 9047 9015 case 7 14:9016 9017 /* Line 1806 of yacc.c */ 9018 #line 2 670"parser.yy"9048 case 736: 9049 9050 /* Line 1806 of yacc.c */ 9051 #line 2743 "parser.yy" 9019 9052 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 9020 9053 break; 9021 9054 9022 case 7 15:9023 9024 /* Line 1806 of yacc.c */ 9025 #line 2 672"parser.yy"9055 case 737: 9056 9057 /* Line 1806 of yacc.c */ 9058 #line 2745 "parser.yy" 9026 9059 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); } 9027 9060 break; 9028 9061 9029 case 7 16:9030 9031 /* Line 1806 of yacc.c */ 9032 #line 2 679"parser.yy"9062 case 738: 9063 9064 /* Line 1806 of yacc.c */ 9065 #line 2752 "parser.yy" 9033 9066 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 9034 9067 break; 9035 9068 9036 case 717: 9037 9038 /* Line 1806 of yacc.c */ 9039 #line 2681 "parser.yy" 9069 case 739: 9070 9071 /* Line 1806 of yacc.c */ 9072 #line 2754 "parser.yy" 9073 { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 9074 break; 9075 9076 case 740: 9077 9078 /* Line 1806 of yacc.c */ 9079 #line 2756 "parser.yy" 9040 9080 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 9041 9081 break; 9042 9082 9043 case 718: 9044 9045 /* Line 1806 of yacc.c */ 9046 #line 2683 "parser.yy" 9083 case 741: 9084 9085 /* Line 1806 of yacc.c */ 9086 #line 2758 "parser.yy" 9087 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 9088 break; 9089 9090 case 742: 9091 9092 /* Line 1806 of yacc.c */ 9093 #line 2760 "parser.yy" 9047 9094 { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 9048 9095 break; 9049 9096 9050 case 719: 9051 9052 /* Line 1806 of yacc.c */ 9053 #line 2685 "parser.yy" 9054 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); } 9055 break; 9056 9057 case 720: 9058 9059 /* Line 1806 of yacc.c */ 9060 #line 2687 "parser.yy" 9097 case 743: 9098 9099 /* Line 1806 of yacc.c */ 9100 #line 2762 "parser.yy" 9061 9101 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); } 9062 9102 break; 9063 9103 9064 case 721:9065 9066 /* Line 1806 of yacc.c */9067 #line 2689 "parser.yy"9068 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }9069 break;9070 9071 case 722:9072 9073 /* Line 1806 of yacc.c */9074 #line 2691 "parser.yy"9075 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }9076 break;9077 9078 case 723:9079 9080 /* Line 1806 of yacc.c */9081 #line 2693 "parser.yy"9082 { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }9083 break;9084 9085 case 724:9086 9087 /* Line 1806 of yacc.c */9088 #line 2695 "parser.yy"9089 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }9090 break;9091 9092 case 725:9093 9094 /* Line 1806 of yacc.c */9095 #line 2697 "parser.yy"9096 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }9097 break;9098 9099 case 726:9100 9101 /* Line 1806 of yacc.c */9102 #line 2702 "parser.yy"9103 { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }9104 break;9105 9106 case 727:9107 9108 /* Line 1806 of yacc.c */9109 #line 2704 "parser.yy"9110 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }9111 break;9112 9113 case 728:9114 9115 /* Line 1806 of yacc.c */9116 #line 2709 "parser.yy"9117 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }9118 break;9119 9120 case 729:9121 9122 /* Line 1806 of yacc.c */9123 #line 2711 "parser.yy"9124 { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }9125 break;9126 9127 case 731:9128 9129 /* Line 1806 of yacc.c */9130 #line 2738 "parser.yy"9131 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }9132 break;9133 9134 case 735:9135 9136 /* Line 1806 of yacc.c */9137 #line 2749 "parser.yy"9138 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }9139 break;9140 9141 case 736:9142 9143 /* Line 1806 of yacc.c */9144 #line 2751 "parser.yy"9145 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }9146 break;9147 9148 case 737:9149 9150 /* Line 1806 of yacc.c */9151 #line 2753 "parser.yy"9152 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }9153 break;9154 9155 case 738:9156 9157 /* Line 1806 of yacc.c */9158 #line 2755 "parser.yy"9159 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }9160 break;9161 9162 case 739:9163 9164 /* Line 1806 of yacc.c */9165 #line 2757 "parser.yy"9166 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }9167 break;9168 9169 case 740:9170 9171 /* Line 1806 of yacc.c */9172 #line 2759 "parser.yy"9173 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }9174 break;9175 9176 case 741:9177 9178 /* Line 1806 of yacc.c */9179 #line 2766 "parser.yy"9180 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }9181 break;9182 9183 case 742:9184 9185 /* Line 1806 of yacc.c */9186 #line 2768 "parser.yy"9187 { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }9188 break;9189 9190 case 743:9191 9192 /* Line 1806 of yacc.c */9193 #line 2770 "parser.yy"9194 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }9195 break;9196 9197 9104 case 744: 9198 9105 9199 9106 /* Line 1806 of yacc.c */ 9107 #line 2767 "parser.yy" 9108 { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); } 9109 break; 9110 9111 case 745: 9112 9113 /* Line 1806 of yacc.c */ 9200 9114 #line 2772 "parser.yy" 9201 { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false )); }9202 break; 9203 9204 case 74 5:9115 { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); } 9116 break; 9117 9118 case 746: 9205 9119 9206 9120 /* Line 1806 of yacc.c */ 9207 9121 #line 2774 "parser.yy" 9208 { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false )); }9209 break; 9210 9211 case 74 6:9122 { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); } 9123 break; 9124 9125 case 747: 9212 9126 9213 9127 /* Line 1806 of yacc.c */ 9214 9128 #line 2776 "parser.yy" 9215 { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }9216 break;9217 9218 case 747:9219 9220 /* Line 1806 of yacc.c */9221 #line 2781 "parser.yy"9222 { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }9223 break;9224 9225 case 748:9226 9227 /* Line 1806 of yacc.c */9228 #line 2786 "parser.yy"9229 { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }9230 break;9231 9232 case 749:9233 9234 /* Line 1806 of yacc.c */9235 #line 2788 "parser.yy"9236 9129 { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); } 9237 9130 break; … … 9240 9133 9241 9134 /* Line 1806 of yacc.c */ 9242 #line 2790 "parser.yy" 9243 { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); } 9244 break; 9245 9246 case 753: 9247 9248 /* Line 1806 of yacc.c */ 9249 #line 2814 "parser.yy" 9135 #line 2800 "parser.yy" 9250 9136 { (yyval.en) = 0; } 9251 9137 break; 9252 9138 9253 case 75 4:9254 9255 /* Line 1806 of yacc.c */ 9256 #line 28 16"parser.yy"9139 case 751: 9140 9141 /* Line 1806 of yacc.c */ 9142 #line 2802 "parser.yy" 9257 9143 { (yyval.en) = (yyvsp[(2) - (2)].en); } 9258 9144 break; … … 9261 9147 9262 9148 /* Line 1806 of yacc.c */ 9263 #line 9 264"Parser/parser.cc"9149 #line 9150 "Parser/parser.cc" 9264 9150 default: break; 9265 9151 } … … 9492 9378 9493 9379 /* Line 2067 of yacc.c */ 9494 #line 28 19"parser.yy"9380 #line 2805 "parser.yy" 9495 9381 9496 9382 // ----end of grammar---- … … 9499 9385 std::cout << "Error "; 9500 9386 if ( yyfilename ) { 9501 std::cout << "in file " << yyfilename << " ";9387 std::cout << "in file " << yyfilename << " "; 9502 9388 } // if 9503 9389 std::cout << "at line " << yylineno << " reading token \"" << (yytext[0] == '\0' ? "EOF" : yytext) << "\"" << std::endl; -
src/Parser/parser.h
r0f9e4403 rc5833e8 59 59 SIGNED = 277, 60 60 UNSIGNED = 278, 61 VALIST = 279, 62 BOOL = 280, 63 COMPLEX = 281, 64 IMAGINARY = 282, 65 TYPEOF = 283, 66 LABEL = 284, 67 ENUM = 285, 68 STRUCT = 286, 69 UNION = 287, 70 OTYPE = 288, 71 FTYPE = 289, 72 DTYPE = 290, 73 TRAIT = 291, 74 SIZEOF = 292, 75 OFFSETOF = 293, 76 ATTRIBUTE = 294, 77 EXTENSION = 295, 78 IF = 296, 79 ELSE = 297, 80 SWITCH = 298, 81 CASE = 299, 82 DEFAULT = 300, 83 DO = 301, 84 WHILE = 302, 85 FOR = 303, 86 BREAK = 304, 87 CONTINUE = 305, 88 GOTO = 306, 89 RETURN = 307, 90 CHOOSE = 308, 91 DISABLE = 309, 92 ENABLE = 310, 93 FALLTHRU = 311, 94 TRY = 312, 95 CATCH = 313, 96 CATCHRESUME = 314, 97 FINALLY = 315, 98 THROW = 316, 99 THROWRESUME = 317, 100 AT = 318, 101 ASM = 319, 102 ALIGNAS = 320, 103 ALIGNOF = 321, 104 ATOMIC = 322, 105 GENERIC = 323, 106 NORETURN = 324, 107 STATICASSERT = 325, 108 THREADLOCAL = 326, 109 IDENTIFIER = 327, 110 QUOTED_IDENTIFIER = 328, 111 TYPEDEFname = 329, 112 TYPEGENname = 330, 113 ATTR_IDENTIFIER = 331, 114 ATTR_TYPEDEFname = 332, 115 ATTR_TYPEGENname = 333, 116 INTEGERconstant = 334, 117 FLOATINGconstant = 335, 118 CHARACTERconstant = 336, 119 STRINGliteral = 337, 120 ZERO = 338, 121 ONE = 339, 122 ARROW = 340, 123 ICR = 341, 124 DECR = 342, 125 LS = 343, 126 RS = 344, 127 LE = 345, 128 GE = 346, 129 EQ = 347, 130 NE = 348, 131 ANDAND = 349, 132 OROR = 350, 133 ELLIPSIS = 351, 134 MULTassign = 352, 135 DIVassign = 353, 136 MODassign = 354, 137 PLUSassign = 355, 138 MINUSassign = 356, 139 LSassign = 357, 140 RSassign = 358, 141 ANDassign = 359, 142 ERassign = 360, 143 ORassign = 361, 144 ATassign = 362, 145 THEN = 363 61 BOOL = 279, 62 COMPLEX = 280, 63 IMAGINARY = 281, 64 TYPEOF = 282, 65 LABEL = 283, 66 ENUM = 284, 67 STRUCT = 285, 68 UNION = 286, 69 TYPE = 287, 70 FTYPE = 288, 71 DTYPE = 289, 72 CONTEXT = 290, 73 SIZEOF = 291, 74 OFFSETOF = 292, 75 ATTRIBUTE = 293, 76 EXTENSION = 294, 77 IF = 295, 78 ELSE = 296, 79 SWITCH = 297, 80 CASE = 298, 81 DEFAULT = 299, 82 DO = 300, 83 WHILE = 301, 84 FOR = 302, 85 BREAK = 303, 86 CONTINUE = 304, 87 GOTO = 305, 88 RETURN = 306, 89 CHOOSE = 307, 90 DISABLE = 308, 91 ENABLE = 309, 92 FALLTHRU = 310, 93 TRY = 311, 94 CATCH = 312, 95 CATCHRESUME = 313, 96 FINALLY = 314, 97 THROW = 315, 98 THROWRESUME = 316, 99 AT = 317, 100 ASM = 318, 101 ALIGNAS = 319, 102 ALIGNOF = 320, 103 ATOMIC = 321, 104 GENERIC = 322, 105 NORETURN = 323, 106 STATICASSERT = 324, 107 THREADLOCAL = 325, 108 IDENTIFIER = 326, 109 QUOTED_IDENTIFIER = 327, 110 TYPEDEFname = 328, 111 TYPEGENname = 329, 112 ATTR_IDENTIFIER = 330, 113 ATTR_TYPEDEFname = 331, 114 ATTR_TYPEGENname = 332, 115 INTEGERconstant = 333, 116 FLOATINGconstant = 334, 117 CHARACTERconstant = 335, 118 STRINGliteral = 336, 119 ZERO = 337, 120 ONE = 338, 121 ARROW = 339, 122 ICR = 340, 123 DECR = 341, 124 LS = 342, 125 RS = 343, 126 LE = 344, 127 GE = 345, 128 EQ = 346, 129 NE = 347, 130 ANDAND = 348, 131 OROR = 349, 132 ELLIPSIS = 350, 133 MULTassign = 351, 134 DIVassign = 352, 135 MODassign = 353, 136 PLUSassign = 354, 137 MINUSassign = 355, 138 LSassign = 356, 139 RSassign = 357, 140 ANDassign = 358, 141 ERassign = 359, 142 ORassign = 360, 143 ATassign = 361, 144 THEN = 362 146 145 }; 147 146 #endif … … 168 167 #define SIGNED 277 169 168 #define UNSIGNED 278 170 #define VALIST 279 171 #define BOOL 280 172 #define COMPLEX 281 173 #define IMAGINARY 282 174 #define TYPEOF 283 175 #define LABEL 284 176 #define ENUM 285 177 #define STRUCT 286 178 #define UNION 287 179 #define OTYPE 288 180 #define FTYPE 289 181 #define DTYPE 290 182 #define TRAIT 291 183 #define SIZEOF 292 184 #define OFFSETOF 293 185 #define ATTRIBUTE 294 186 #define EXTENSION 295 187 #define IF 296 188 #define ELSE 297 189 #define SWITCH 298 190 #define CASE 299 191 #define DEFAULT 300 192 #define DO 301 193 #define WHILE 302 194 #define FOR 303 195 #define BREAK 304 196 #define CONTINUE 305 197 #define GOTO 306 198 #define RETURN 307 199 #define CHOOSE 308 200 #define DISABLE 309 201 #define ENABLE 310 202 #define FALLTHRU 311 203 #define TRY 312 204 #define CATCH 313 205 #define CATCHRESUME 314 206 #define FINALLY 315 207 #define THROW 316 208 #define THROWRESUME 317 209 #define AT 318 210 #define ASM 319 211 #define ALIGNAS 320 212 #define ALIGNOF 321 213 #define ATOMIC 322 214 #define GENERIC 323 215 #define NORETURN 324 216 #define STATICASSERT 325 217 #define THREADLOCAL 326 218 #define IDENTIFIER 327 219 #define QUOTED_IDENTIFIER 328 220 #define TYPEDEFname 329 221 #define TYPEGENname 330 222 #define ATTR_IDENTIFIER 331 223 #define ATTR_TYPEDEFname 332 224 #define ATTR_TYPEGENname 333 225 #define INTEGERconstant 334 226 #define FLOATINGconstant 335 227 #define CHARACTERconstant 336 228 #define STRINGliteral 337 229 #define ZERO 338 230 #define ONE 339 231 #define ARROW 340 232 #define ICR 341 233 #define DECR 342 234 #define LS 343 235 #define RS 344 236 #define LE 345 237 #define GE 346 238 #define EQ 347 239 #define NE 348 240 #define ANDAND 349 241 #define OROR 350 242 #define ELLIPSIS 351 243 #define MULTassign 352 244 #define DIVassign 353 245 #define MODassign 354 246 #define PLUSassign 355 247 #define MINUSassign 356 248 #define LSassign 357 249 #define RSassign 358 250 #define ANDassign 359 251 #define ERassign 360 252 #define ORassign 361 253 #define ATassign 362 254 #define THEN 363 169 #define BOOL 279 170 #define COMPLEX 280 171 #define IMAGINARY 281 172 #define TYPEOF 282 173 #define LABEL 283 174 #define ENUM 284 175 #define STRUCT 285 176 #define UNION 286 177 #define TYPE 287 178 #define FTYPE 288 179 #define DTYPE 289 180 #define CONTEXT 290 181 #define SIZEOF 291 182 #define OFFSETOF 292 183 #define ATTRIBUTE 293 184 #define EXTENSION 294 185 #define IF 295 186 #define ELSE 296 187 #define SWITCH 297 188 #define CASE 298 189 #define DEFAULT 299 190 #define DO 300 191 #define WHILE 301 192 #define FOR 302 193 #define BREAK 303 194 #define CONTINUE 304 195 #define GOTO 305 196 #define RETURN 306 197 #define CHOOSE 307 198 #define DISABLE 308 199 #define ENABLE 309 200 #define FALLTHRU 310 201 #define TRY 311 202 #define CATCH 312 203 #define CATCHRESUME 313 204 #define FINALLY 314 205 #define THROW 315 206 #define THROWRESUME 316 207 #define AT 317 208 #define ASM 318 209 #define ALIGNAS 319 210 #define ALIGNOF 320 211 #define ATOMIC 321 212 #define GENERIC 322 213 #define NORETURN 323 214 #define STATICASSERT 324 215 #define THREADLOCAL 325 216 #define IDENTIFIER 326 217 #define QUOTED_IDENTIFIER 327 218 #define TYPEDEFname 328 219 #define TYPEGENname 329 220 #define ATTR_IDENTIFIER 330 221 #define ATTR_TYPEDEFname 331 222 #define ATTR_TYPEGENname 332 223 #define INTEGERconstant 333 224 #define FLOATINGconstant 334 225 #define CHARACTERconstant 335 226 #define STRINGliteral 336 227 #define ZERO 337 228 #define ONE 338 229 #define ARROW 339 230 #define ICR 340 231 #define DECR 341 232 #define LS 342 233 #define RS 343 234 #define LE 344 235 #define GE 345 236 #define EQ 346 237 #define NE 347 238 #define ANDAND 348 239 #define OROR 349 240 #define ELLIPSIS 350 241 #define MULTassign 351 242 #define DIVassign 352 243 #define MODassign 353 244 #define PLUSassign 354 245 #define MINUSassign 355 246 #define LSassign 356 247 #define RSassign 357 248 #define ANDassign 358 249 #define ERassign 359 250 #define ORassign 360 251 #define ATassign 361 252 #define THEN 362 255 253 256 254 … … 262 260 263 261 /* Line 2068 of yacc.c */ 264 #line 11 2"parser.yy"262 #line 110 "parser.yy" 265 263 266 264 Token tok; … … 279 277 280 278 /* Line 2068 of yacc.c */ 281 #line 28 2"Parser/parser.h"279 #line 280 "Parser/parser.h" 282 280 } YYSTYPE; 283 281 # define YYSTYPE_IS_TRIVIAL 1 -
src/Parser/parser.yy
r0f9e4403 rc5833e8 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Apr 13 16:58:43201613 // Update Count : 1 51912 // Last Modified On : Mon Feb 1 18:22:42 2016 13 // Update Count : 1483 14 14 // 15 15 … … 51 51 #include <cstdio> 52 52 #include <stack> 53 #include "TypedefTable.h" 53 54 #include "lex.h" 54 #include "parser.h"55 55 #include "ParseNode.h" 56 #include "TypedefTable.h"57 56 #include "TypeData.h" 58 57 #include "LinkageSpec.h" … … 75 74 %token FORALL LVALUE // CFA 76 75 %token VOID CHAR SHORT INT LONG FLOAT DOUBLE SIGNED UNSIGNED 77 %token VALIST // GCC78 76 %token BOOL COMPLEX IMAGINARY // C99 79 77 %token TYPEOF LABEL // GCC 80 78 %token ENUM STRUCT UNION 81 %token OTYPE FTYPE DTYPE TRAIT// CFA79 %token TYPE FTYPE DTYPE CONTEXT // CFA 82 80 %token SIZEOF OFFSETOF 83 81 %token ATTRIBUTE EXTENSION // GCC … … 173 171 %type<decl> basic_declaration_specifier basic_type_name basic_type_specifier direct_type_name indirect_type_name 174 172 175 %type<decl> trait_declaration trait_declaration_list trait_declaring_list trait_specifier173 %type<decl> context_declaration context_declaration_list context_declaring_list context_specifier 176 174 177 175 %type<decl> declaration declaration_list declaration_list_opt declaration_qualifier_list … … 199 197 %type<decl> new_array_parameter_1st_dimension 200 198 201 %type<decl> new_ trait_declaring_list new_declaration new_field_declaring_list199 %type<decl> new_context_declaring_list new_declaration new_field_declaring_list 202 200 %type<decl> new_function_declaration new_function_return new_function_specifier 203 201 … … 372 370 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), $1 ); } 373 371 | '(' type_name_no_function ')' '{' initializer_list comma_opt '}' // C99 374 { $$ = new CompoundLiteralNode( $2, new InitializerNode( $5, true ) ); }372 { $$ = 0; } 375 373 | postfix_expression '{' argument_expression_list '}' // CFA 376 374 { … … 450 448 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( $3 )); } 451 449 | OFFSETOF '(' type_name_no_function ',' no_attr_identifier ')' 452 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( $3 ), new VarRefNode( $5 )); }450 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( $3 ), new VarRefNode( $5 )); } 453 451 | ATTR_IDENTIFIER 454 452 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 )); } … … 1022 1020 | new_function_declaration pop ';' 1023 1021 | type_declaring_list pop ';' 1024 | trait_specifier pop ';'1022 | context_specifier pop ';' 1025 1023 ; 1026 1024 … … 1029 1027 { 1030 1028 typedefTable.addToEnclosingScope( TypedefTable::ID ); 1031 $$ = $1 ->addInitializer( $2 );1029 $$ = $1; 1032 1030 } 1033 1031 | declaration_qualifier_list new_variable_specifier initializer_opt … … 1036 1034 { 1037 1035 typedefTable.addToEnclosingScope( TypedefTable::ID ); 1038 $$ = $2->addQualifiers( $1 ) ->addInitializer( $3 );;1036 $$ = $2->addQualifiers( $1 ); 1039 1037 } 1040 1038 | new_variable_declaration pop ',' push identifier_or_type_name initializer_opt 1041 1039 { 1042 1040 typedefTable.addToEnclosingScope( *$5, TypedefTable::ID ); 1043 $$ = $1->appendList( $1->cloneType( $5 ) ->addInitializer( $6 ));1041 $$ = $1->appendList( $1->cloneType( $5 ) ); 1044 1042 } 1045 1043 ; … … 1347 1345 | IMAGINARY // C99 1348 1346 { $$ = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); } 1349 | VALIST // GCC, __builtin_va_list1350 { $$ = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }1351 1347 ; 1352 1348 … … 1438 1434 { $$ = DeclarationNode::newAggregate( $1, 0, 0, $3 ); } 1439 1435 | aggregate_key no_attr_identifier_or_type_name 1440 { 1441 typedefTable.makeTypedef( *$2 ); 1442 $$ = DeclarationNode::newAggregate( $1, $2, 0, 0 ); 1443 } 1444 | aggregate_key no_attr_identifier_or_type_name 1445 { typedefTable.makeTypedef( *$2 ); } 1446 '{' field_declaration_list '}' 1447 { $$ = DeclarationNode::newAggregate( $1, $2, 0, $5); } 1436 { $$ = DeclarationNode::newAggregate( $1, $2, 0, 0 ); } 1437 | aggregate_key no_attr_identifier_or_type_name '{' field_declaration_list '}' 1438 { $$ = DeclarationNode::newAggregate( $1, $2, 0, $4 ); } 1448 1439 | aggregate_key '(' type_name_list ')' '{' field_declaration_list '}' // CFA 1449 { $$ = DeclarationNode::newAggregate( $1, 0, $3, $6 ); }1440 { $$ = DeclarationNode::newAggregate( $1, 0, $3, $6 ); } 1450 1441 | aggregate_key typegen_name // CFA, S/R conflict 1451 1442 { $$ = $2; } … … 1525 1516 enum_key '{' enumerator_list comma_opt '}' 1526 1517 { $$ = DeclarationNode::newEnum( 0, $3 ); } 1518 | enum_key no_attr_identifier_or_type_name '{' enumerator_list comma_opt '}' 1519 { $$ = DeclarationNode::newEnum( $2, $4 ); } 1527 1520 | enum_key no_attr_identifier_or_type_name 1528 { 1529 typedefTable.makeTypedef( *$2 ); 1530 $$ = DeclarationNode::newEnum( $2, 0 ); 1531 } 1532 | enum_key no_attr_identifier_or_type_name 1533 { typedefTable.makeTypedef( *$2 ); } 1534 '{' enumerator_list comma_opt '}' 1535 { $$ = DeclarationNode::newEnum( $2, $5 ); } 1521 { $$ = DeclarationNode::newEnum( $2, 0 ); } 1536 1522 ; 1537 1523 … … 1817 1803 1818 1804 type_class: // CFA 1819 OTYPE1805 TYPE 1820 1806 { $$ = DeclarationNode::Type; } 1821 1807 | DTYPE … … 1835 1821 '|' no_attr_identifier_or_type_name '(' type_name_list ')' 1836 1822 { 1837 typedefTable.open Trait( *$2 );1838 $$ = DeclarationNode::new TraitUse( $2, $4 );1839 } 1840 | '|' '{' push trait_declaration_list '}'1823 typedefTable.openContext( *$2 ); 1824 $$ = DeclarationNode::newContextUse( $2, $4 ); 1825 } 1826 | '|' '{' push context_declaration_list '}' 1841 1827 { $$ = $4; } 1842 | '|' '(' push type_parameter_list pop ')' '{' push trait_declaration_list '}' '(' type_name_list ')'1828 | '|' '(' push type_parameter_list pop ')' '{' push context_declaration_list '}' '(' type_name_list ')' 1843 1829 { $$ = 0; } 1844 1830 ; … … 1855 1841 1856 1842 type_declaring_list: // CFA 1857 OTYPE type_declarator1858 { $$ = $2; } 1859 | storage_class_list OTYPE type_declarator1843 TYPE type_declarator 1844 { $$ = $2; } 1845 | storage_class_list TYPE type_declarator 1860 1846 { $$ = $3->addQualifiers( $1 ); } 1861 1847 | type_declaring_list ',' type_declarator … … 1883 1869 ; 1884 1870 1885 trait_specifier: // CFA1886 TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' '}'1871 context_specifier: // CFA 1872 CONTEXT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' '}' 1887 1873 { 1888 1874 typedefTable.addToEnclosingScope( *$2, TypedefTable::ID ); 1889 $$ = DeclarationNode::new Trait( $2, $5, 0 );1890 } 1891 | TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{'1892 { 1893 typedefTable.enter Trait( *$2 );1875 $$ = DeclarationNode::newContext( $2, $5, 0 ); 1876 } 1877 | CONTEXT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' 1878 { 1879 typedefTable.enterContext( *$2 ); 1894 1880 typedefTable.enterScope(); 1895 1881 } 1896 trait_declaration_list '}'1897 { 1898 typedefTable.leave Trait();1882 context_declaration_list '}' 1883 { 1884 typedefTable.leaveContext(); 1899 1885 typedefTable.addToEnclosingScope( *$2, TypedefTable::ID ); 1900 $$ = DeclarationNode::new Trait( $2, $5, $10 );1901 } 1902 ; 1903 1904 trait_declaration_list: // CFA1905 trait_declaration1906 | trait_declaration_list push trait_declaration1886 $$ = DeclarationNode::newContext( $2, $5, $10 ); 1887 } 1888 ; 1889 1890 context_declaration_list: // CFA 1891 context_declaration 1892 | context_declaration_list push context_declaration 1907 1893 { $$ = $1->appendList( $3 ); } 1908 1894 ; 1909 1895 1910 trait_declaration: // CFA1911 new_ trait_declaring_list pop ';'1912 | trait_declaring_list pop ';'1913 ; 1914 1915 new_ trait_declaring_list: // CFA1896 context_declaration: // CFA 1897 new_context_declaring_list pop ';' 1898 | context_declaring_list pop ';' 1899 ; 1900 1901 new_context_declaring_list: // CFA 1916 1902 new_variable_specifier 1917 1903 { … … 1924 1910 $$ = $1; 1925 1911 } 1926 | new_ trait_declaring_list pop ',' push identifier_or_type_name1912 | new_context_declaring_list pop ',' push identifier_or_type_name 1927 1913 { 1928 1914 typedefTable.addToEnclosingScope2( *$5, TypedefTable::ID ); … … 1931 1917 ; 1932 1918 1933 trait_declaring_list: // CFA1919 context_declaring_list: // CFA 1934 1920 type_specifier declarator 1935 1921 { … … 1937 1923 $$ = $2->addType( $1 ); 1938 1924 } 1939 | trait_declaring_list pop ',' push declarator1925 | context_declaring_list pop ',' push declarator 1940 1926 { 1941 1927 typedefTable.addToEnclosingScope2( TypedefTable::ID ); … … 2823 2809 std::cout << "Error "; 2824 2810 if ( yyfilename ) { 2825 std::cout << "in file " << yyfilename << " ";2811 std::cout << "in file " << yyfilename << " "; 2826 2812 } // if 2827 2813 std::cout << "at line " << yylineno << " reading token \"" << (yytext[0] == '\0' ? "EOF" : yytext) << "\"" << std::endl; -
src/ResolvExpr/AdjustExprType.cc
r0f9e4403 rc5833e8 10 10 // Created On : Sat May 16 23:41:42 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 17:34:53 201613 // Update Count : 412 // Last Modified On : Sat May 16 23:54:02 2015 13 // Update Count : 3 14 14 // 15 15 … … 33 33 virtual Type* mutate( UnionInstType *aggregateUseType ); 34 34 virtual Type* mutate( EnumInstType *aggregateUseType ); 35 virtual Type* mutate( TraitInstType *aggregateUseType );35 virtual Type* mutate( ContextInstType *aggregateUseType ); 36 36 virtual Type* mutate( TypeInstType *aggregateUseType ); 37 37 virtual Type* mutate( TupleType *tupleType ); 38 virtual Type* mutate( VarArgsType *varArgsType );39 38 40 39 const TypeEnvironment &env; … … 87 86 } 88 87 89 Type *AdjustExprType::mutate( TraitInstType *aggregateUseType ) {88 Type *AdjustExprType::mutate( ContextInstType *aggregateUseType ) { 90 89 return aggregateUseType; 91 90 } … … 112 111 return tupleType; 113 112 } 114 115 Type *AdjustExprType::mutate( VarArgsType *varArgsType ) {116 return varArgsType;117 }118 113 } // namespace ResolvExpr 119 114 -
src/ResolvExpr/AlternativeFinder.cc
r0f9e4403 rc5833e8 848 848 } 849 849 850 void AlternativeFinder::visit( OffsetPackExpr *offsetPackExpr ) {851 alternatives.push_back( Alternative( offsetPackExpr->clone(), env, Cost::zero ) );852 }853 854 850 void AlternativeFinder::resolveAttr( DeclarationWithType *funcDecl, FunctionType *function, Type *argType, const TypeEnvironment &env ) { 855 851 // assume no polymorphism -
src/ResolvExpr/AlternativeFinder.h
r0f9e4403 rc5833e8 59 59 virtual void visit( UntypedOffsetofExpr *offsetofExpr ); 60 60 virtual void visit( OffsetofExpr *offsetofExpr ); 61 virtual void visit( OffsetPackExpr *offsetPackExpr );62 61 virtual void visit( AttrExpr *attrExpr ); 63 62 virtual void visit( LogicalExpr *logicalExpr ); -
src/ResolvExpr/CommonType.cc
r0f9e4403 rc5833e8 10 10 // Created On : Sun May 17 06:59:27 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 17:35:34 201613 // Update Count : 312 // Last Modified On : Sun May 17 07:04:50 2015 13 // Update Count : 2 14 14 // 15 15 … … 35 35 virtual void visit( UnionInstType *aggregateUseType ); 36 36 virtual void visit( EnumInstType *aggregateUseType ); 37 virtual void visit( TraitInstType *aggregateUseType );37 virtual void visit( ContextInstType *aggregateUseType ); 38 38 virtual void visit( TypeInstType *aggregateUseType ); 39 39 virtual void visit( TupleType *tupleType ); 40 virtual void visit( VarArgsType *varArgsType );41 40 42 41 template< typename RefType > void handleRefType( RefType *inst, Type *other ); … … 186 185 } 187 186 188 void CommonType::visit( TraitInstType *aggregateUseType ) {187 void CommonType::visit( ContextInstType *aggregateUseType ) { 189 188 } 190 189 … … 214 213 void CommonType::visit( TupleType *tupleType ) { 215 214 } 216 217 void CommonType::visit( VarArgsType *varArgsType ) {218 }219 215 } // namespace ResolvExpr 220 216 -
src/ResolvExpr/ConversionCost.cc
r0f9e4403 rc5833e8 10 10 // Created On : Sun May 17 07:06:19 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 17:35:46 201613 // Update Count : 612 // Last Modified On : Sun May 17 07:22:19 2015 13 // Update Count : 4 14 14 // 15 15 … … 206 206 } 207 207 208 void ConversionCost::visit( TraitInstType *inst) {208 void ConversionCost::visit(ContextInstType *inst) { 209 209 } 210 210 … … 247 247 } // if 248 248 } 249 250 void ConversionCost::visit(VarArgsType *varArgsType) {251 if ( dynamic_cast< VarArgsType* >( dest ) ) {252 cost = Cost::zero;253 }254 }255 249 } // namespace ResolvExpr 256 250 -
src/ResolvExpr/ConversionCost.h
r0f9e4403 rc5833e8 10 10 // Created On : Sun May 17 09:37:28 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 17:35:56 201613 // Update Count : 312 // Last Modified On : Sun May 17 09:39:23 2015 13 // Update Count : 2 14 14 // 15 15 … … 37 37 virtual void visit(UnionInstType *aggregateUseType); 38 38 virtual void visit(EnumInstType *aggregateUseType); 39 virtual void visit( TraitInstType *aggregateUseType);39 virtual void visit(ContextInstType *aggregateUseType); 40 40 virtual void visit(TypeInstType *aggregateUseType); 41 41 virtual void visit(TupleType *tupleType); 42 virtual void visit(VarArgsType *varArgsType);43 42 protected: 44 43 Type *dest; -
src/ResolvExpr/PtrsAssignable.cc
r0f9e4403 rc5833e8 9 9 // Author : Richard C. Bilson 10 10 // Created On : Sun May 17 11:44:11 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Wed Mar 2 17:36:05 201613 // Update Count : 811 // Last Modified By : Rob Schluntz 12 // Last Modified On : Mon Sep 21 14:34:58 2015 13 // Update Count : 7 14 14 // 15 15 … … 35 35 virtual void visit( UnionInstType *inst ); 36 36 virtual void visit( EnumInstType *inst ); 37 virtual void visit( TraitInstType *inst );37 virtual void visit( ContextInstType *inst ); 38 38 virtual void visit( TypeInstType *inst ); 39 39 virtual void visit( TupleType *tupleType ); 40 virtual void visit( VarArgsType *varArgsType );41 40 private: 42 41 Type *dest; … … 101 100 } 102 101 103 void PtrsAssignable::visit( TraitInstType *inst ) {102 void PtrsAssignable::visit( ContextInstType *inst ) { 104 103 // I definitely don't think we should be doing anything here 105 104 } … … 138 137 /// } 139 138 } 140 141 void PtrsAssignable::visit( VarArgsType *varArgsType ) {142 }143 139 } // namespace ResolvExpr 144 140 -
src/ResolvExpr/PtrsCastable.cc
r0f9e4403 rc5833e8 9 9 // Author : Richard C. Bilson 10 10 // Created On : Sun May 17 11:48:00 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Wed Mar 2 17:36:18 201613 // Update Count : 811 // Last Modified By : Rob Schluntz 12 // Last Modified On : Mon Oct 05 14:49:12 2015 13 // Update Count : 7 14 14 // 15 15 … … 36 36 virtual void visit(UnionInstType *inst); 37 37 virtual void visit(EnumInstType *inst); 38 virtual void visit( TraitInstType *inst);38 virtual void visit(ContextInstType *inst); 39 39 virtual void visit(TypeInstType *inst); 40 40 virtual void visit(TupleType *tupleType); 41 virtual void visit(VarArgsType *varArgsType);42 41 private: 43 42 Type *dest; … … 116 115 117 116 void PtrsCastable::visit(EnumInstType *inst) { 118 if ( dynamic_cast< EnumInstType* >( dest ) ) {117 if ( dynamic_cast< EnumInstType* >( inst ) ) { 119 118 result = 1; 120 } else if ( BasicType *bt = dynamic_cast< BasicType* >( dest ) ) {119 } else if ( BasicType *bt = dynamic_cast< BasicType* >( inst ) ) { 121 120 if ( bt->get_kind() == BasicType::SignedInt ) { 122 121 result = 0; … … 129 128 } 130 129 131 void PtrsCastable::visit( TraitInstType *inst) {130 void PtrsCastable::visit(ContextInstType *inst) { 132 131 // I definitely don't think we should be doing anything here 133 132 } … … 140 139 result = objectCast( dest, env, indexer ); 141 140 } 142 143 void PtrsCastable::visit(VarArgsType *varArgsType) {144 result = objectCast( dest, env, indexer );145 }146 141 } // namespace ResolvExpr 147 142 -
src/ResolvExpr/RenameVars.cc
r0f9e4403 rc5833e8 10 10 // Created On : Sun May 17 12:05:18 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 17:36:32 201613 // Update Count : 512 // Last Modified On : Mon Jun 8 14:51:35 2015 13 // Update Count : 4 14 14 // 15 15 … … 86 86 } 87 87 88 void RenameVars::visit( TraitInstType *aggregateUseType ) {88 void RenameVars::visit( ContextInstType *aggregateUseType ) { 89 89 typeBefore( aggregateUseType ); 90 90 acceptAll( aggregateUseType->get_parameters(), *this ); … … 111 111 acceptAll( tupleType->get_types(), *this ); 112 112 typeAfter( tupleType ); 113 }114 115 void RenameVars::visit( VarArgsType *varArgsType ) {116 typeBefore( varArgsType );117 typeAfter( varArgsType );118 113 } 119 114 -
src/ResolvExpr/RenameVars.h
r0f9e4403 rc5833e8 10 10 // Created On : Sun May 17 12:10:28 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 17:36:39 201613 // Update Count : 312 // Last Modified On : Sun May 17 12:11:53 2015 13 // Update Count : 2 14 14 // 15 15 … … 40 40 virtual void visit( UnionInstType *aggregateUseType ); 41 41 virtual void visit( EnumInstType *aggregateUseType ); 42 virtual void visit( TraitInstType *aggregateUseType );42 virtual void visit( ContextInstType *aggregateUseType ); 43 43 virtual void visit( TypeInstType *aggregateUseType ); 44 44 virtual void visit( TupleType *tupleType ); 45 virtual void visit( VarArgsType *varArgsType );46 45 47 46 void typeBefore( Type *type ); -
src/ResolvExpr/Resolver.cc
r0f9e4403 rc5833e8 10 10 // Created On : Sun May 17 12:17:01 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : T hu Mar 24 16:43:11201613 // Update Count : 1 8112 // Last Modified On : Tue Feb 9 21:57:52 2016 13 // Update Count : 179 14 14 // 15 15 … … 165 165 Type *new_type = resolveTypeof( objectDecl->get_type(), *this ); 166 166 objectDecl->set_type( new_type ); 167 // To handle initialization of routine pointers, e.g., int (*fp)(int) = foo(), means that class-variable168 // initContext is changed multiple time because the LHS is analysed twice. The second analysis changes169 // initContext because of a function type can contain object declarations in the return and parameter types. So170 // each value of initContext is retained, so the type on the first analysis is preserved and used for selecting171 // the RHS.172 Type *temp = initContext;173 167 initContext = new_type; 174 168 SymTab::Indexer::visit( objectDecl ); 175 initContext = temp;176 169 } 177 170 -
src/ResolvExpr/Unify.cc
r0f9e4403 rc5833e8 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // Unify.cc -- 7 // Unify.cc -- 8 8 // 9 9 // Author : Richard C. Bilson 10 10 // Created On : Sun May 17 12:27:10 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Wed Mar 2 17:37:05 201613 // Update Count : 3 711 // Last Modified By : Rob Schluntz 12 // Last Modified On : Wed Sep 02 14:43:22 2015 13 // Update Count : 36 14 14 // 15 15 … … 38 38 WidenMode operator&( const WidenMode &other ) { WidenMode newWM( *this ); newWM &= other; return newWM; } 39 39 operator bool() { return widenFirst && widenSecond; } 40 40 41 41 bool widenFirst : 1, widenSecond : 1; 42 42 }; … … 45 45 public: 46 46 Unify( Type *type2, TypeEnvironment &env, AssertionSet &needAssertions, AssertionSet &haveAssertions, const OpenVarSet &openVars, WidenMode widenMode, const SymTab::Indexer &indexer ); 47 47 48 48 bool get_result() const { return result; } 49 49 private: … … 56 56 virtual void visit(UnionInstType *aggregateUseType); 57 57 virtual void visit(EnumInstType *aggregateUseType); 58 virtual void visit( TraitInstType *aggregateUseType);58 virtual void visit(ContextInstType *aggregateUseType); 59 59 virtual void visit(TypeInstType *aggregateUseType); 60 60 virtual void visit(TupleType *tupleType); 61 virtual void visit(VarArgsType *varArgsType);62 61 63 62 template< typename RefType > void handleRefType( RefType *inst, Type *other ); … … 79 78 bool unifyInexact( Type *type1, Type *type2, TypeEnvironment &env, AssertionSet &needAssertions, AssertionSet &haveAssertions, const OpenVarSet &openVars, WidenMode widenMode, const SymTab::Indexer &indexer, Type *&common ); 80 79 bool unifyExact( Type *type1, Type *type2, TypeEnvironment &env, AssertionSet &needAssertions, AssertionSet &haveAssertions, const OpenVarSet &openVars, WidenMode widenMode, const SymTab::Indexer &indexer ); 81 80 82 81 bool typesCompatible( Type *first, Type *second, const SymTab::Indexer &indexer, const TypeEnvironment &env ) { 83 82 TypeEnvironment newEnv; … … 137 136 case TypeDecl::Dtype: 138 137 return ! isFtype( type, indexer ); 139 138 140 139 case TypeDecl::Ftype: 141 140 return isFtype( type, indexer ); … … 196 195 bool widen1 = false, widen2 = false; 197 196 Type *type1 = 0, *type2 = 0; 198 197 199 198 if ( env.lookup( var1->get_name(), class1 ) ) { 200 199 hasClass1 = true; … … 217 216 widen2 = widenMode.widenSecond && class2.allowWidening; 218 217 } // if 219 218 220 219 if ( type1 && type2 ) { 221 220 // std::cout << "has type1 && type2" << std::endl; … … 436 435 // to unify, array types must both be VLA or both not VLA 437 436 // and must both have a dimension expression or not have a dimension 438 if ( otherArray && arrayType->get_isVarLen() == otherArray->get_isVarLen() ) { 437 if ( otherArray && arrayType->get_isVarLen() == otherArray->get_isVarLen() 438 && ((arrayType->get_dimension() != 0 && otherArray->get_dimension() != 0) 439 || (arrayType->get_dimension() == 0 && otherArray->get_dimension() == 0))) { 439 440 440 441 // not positive this is correct in all cases, but it's needed for typedefs … … 447 448 ConstantExpr * ce1 = dynamic_cast< ConstantExpr * >( arrayType->get_dimension() ); 448 449 ConstantExpr * ce2 = dynamic_cast< ConstantExpr * >( otherArray->get_dimension() ); 449 // see C11 Reference Manual 6.7.6.2.6 450 // two array types with size specifiers that are integer constant expressions are 451 // compatible if both size specifiers have the same constant value 452 if ( ce1 && ce2 ) { 453 Constant * c1 = ce1->get_constant(); 454 Constant * c2 = ce2->get_constant(); 455 456 if ( c1->get_value() != c2->get_value() ) { 457 // does not unify if the dimension is different 458 return; 459 } 450 assert(ce1 && ce2); 451 452 Constant * c1 = ce1->get_constant(); 453 Constant * c2 = ce2->get_constant(); 454 455 if ( c1->get_value() != c2->get_value() ) { 456 // does not unify if the dimension is different 457 return; 460 458 } 461 459 } … … 486 484 487 485 if ( unifyDeclList( functionType->get_parameters().begin(), functionType->get_parameters().end(), otherFunction->get_parameters().begin(), otherFunction->get_parameters().end(), env, needAssertions, haveAssertions, openVars, indexer ) ) { 488 486 489 487 if ( unifyDeclList( functionType->get_returnVals().begin(), functionType->get_returnVals().end(), otherFunction->get_returnVals().begin(), otherFunction->get_returnVals().end(), env, needAssertions, haveAssertions, openVars, indexer ) ) { 490 488 … … 541 539 } 542 540 543 void Unify::visit( TraitInstType *contextInst) {541 void Unify::visit(ContextInstType *contextInst) { 544 542 handleRefType( contextInst, type2 ); 545 543 } … … 584 582 } 585 583 586 void Unify::visit(VarArgsType *varArgsType) {587 result = dynamic_cast< VarArgsType* >( type2 );588 }589 590 584 } // namespace ResolvExpr 591 585 -
src/SymTab/AddVisit.h
r0f9e4403 rc5833e8 9 9 // Author : Richard C. Bilson 10 10 // Created On : Sun May 17 16:14:32 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : T hu Apr 7 14:42:21 201613 // Update Count : 511 // Last Modified By : Rob Schluntz 12 // Last Modified On : Tue Jul 14 12:26:17 2015 13 // Update Count : 4 14 14 // 15 15 … … 27 27 28 28 template< typename Visitor > 29 inline void addVisitStatement( Statement *stmt, Visitor &visitor ) { 30 maybeAccept( stmt, visitor ); 31 /// if ( ! declsToAdd.empty() ) { 32 /// CompoundStmt *compound = new CompoundStmt( noLabels ); 33 /// compound->get_kids().push_back( stmt ); 34 /// addDecls( declsToAdd, compound->get_kids(), compound->get_kids().end() ); 35 /// } 36 } 37 38 template< typename Visitor > 29 39 inline void addVisit(CompoundStmt *compoundStmt, Visitor &visitor) { 30 40 addVisitStatementList( compoundStmt->get_kids(), visitor ); 41 } 42 43 template< typename Visitor > 44 inline void addVisit(IfStmt *ifStmt, Visitor &visitor) { 45 addVisitStatement( ifStmt->get_thenPart(), visitor ); 46 addVisitStatement( ifStmt->get_elsePart(), visitor ); 47 maybeAccept( ifStmt->get_condition(), visitor ); 48 } 49 50 template< typename Visitor > 51 inline void addVisit(WhileStmt *whileStmt, Visitor &visitor) { 52 addVisitStatement( whileStmt->get_body(), visitor ); 53 maybeAccept( whileStmt->get_condition(), visitor ); 54 } 55 56 template< typename Visitor > 57 inline void addVisit(ForStmt *forStmt, Visitor &visitor) { 58 addVisitStatement( forStmt->get_body(), visitor ); 59 acceptAll( forStmt->get_initialization(), visitor ); 60 maybeAccept( forStmt->get_condition(), visitor ); 61 maybeAccept( forStmt->get_increment(), visitor ); 31 62 } 32 63 … … 43 74 } 44 75 45 // template< typename Visitor > 46 // inline void addVisit(CaseStmt *caseStmt, Visitor &visitor) { 47 // addVisitStatementList( caseStmt->get_statements(), visitor ); 48 // maybeAccept( caseStmt->get_condition(), visitor ); 49 // } 76 template< typename Visitor > 77 inline void addVisit(CaseStmt *caseStmt, Visitor &visitor) { 78 addVisitStatementList( caseStmt->get_statements(), visitor ); 79 maybeAccept( caseStmt->get_condition(), visitor ); 80 } 81 82 template< typename Visitor > 83 inline void addVisit(CatchStmt *cathStmt, Visitor &visitor) { 84 addVisitStatement( cathStmt->get_body(), visitor ); 85 maybeAccept( cathStmt->get_decl(), visitor ); 86 } 50 87 } // namespace SymTab 51 88 -
src/SymTab/FixFunction.cc
r0f9e4403 rc5833e8 10 10 // Created On : Sun May 17 16:19:49 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 17:31:10 201613 // Update Count : 312 // Last Modified On : Sun May 17 16:22:54 2015 13 // Update Count : 2 14 14 // 15 15 … … 61 61 } 62 62 63 Type * FixFunction::mutate( TraitInstType *aggregateUseType) {63 Type * FixFunction::mutate(ContextInstType *aggregateUseType) { 64 64 return aggregateUseType; 65 65 } … … 72 72 return tupleType; 73 73 } 74 75 Type * FixFunction::mutate(VarArgsType *varArgsType) {76 return varArgsType;77 }78 74 } // namespace SymTab 79 75 -
src/SymTab/FixFunction.h
r0f9e4403 rc5833e8 10 10 // Created On : Sun May 17 17:02:08 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 17:34:06 201613 // Update Count : 312 // Last Modified On : Sun May 17 17:03:43 2015 13 // Update Count : 2 14 14 // 15 15 … … 38 38 virtual Type* mutate(UnionInstType *aggregateUseType); 39 39 virtual Type* mutate(EnumInstType *aggregateUseType); 40 virtual Type* mutate( TraitInstType *aggregateUseType);40 virtual Type* mutate(ContextInstType *aggregateUseType); 41 41 virtual Type* mutate(TypeInstType *aggregateUseType); 42 42 virtual Type* mutate(TupleType *tupleType); 43 virtual Type* mutate(VarArgsType *varArgsType);44 43 45 44 bool isVoid; -
src/SymTab/ImplementationType.cc
r0f9e4403 rc5833e8 10 10 // Created On : Sun May 17 21:32:01 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 17:31:20 201613 // Update Count : 312 // Last Modified On : Sun May 17 21:34:40 2015 13 // Update Count : 2 14 14 // 15 15 … … 37 37 virtual void visit(UnionInstType *aggregateUseType); 38 38 virtual void visit(EnumInstType *aggregateUseType); 39 virtual void visit( TraitInstType *aggregateUseType);39 virtual void visit(ContextInstType *aggregateUseType); 40 40 virtual void visit(TypeInstType *aggregateUseType); 41 41 virtual void visit(TupleType *tupleType); 42 virtual void visit(VarArgsType *varArgsType);43 42 44 43 Type *result; // synthesized … … 96 95 } 97 96 98 void ImplementationType::visit( TraitInstType *aggregateUseType) {97 void ImplementationType::visit(ContextInstType *aggregateUseType) { 99 98 } 100 99 … … 117 116 result = newType; 118 117 } 119 120 void ImplementationType::visit(VarArgsType *varArgsType) {121 }122 118 } // namespace SymTab 123 119 -
src/SymTab/Indexer.cc
r0f9e4403 rc5833e8 9 9 // Author : Richard C. Bilson 10 10 // Created On : Sun May 17 21:37:33 2015 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 17:31:29 2016 13 // Update Count : 11 14 // 15 16 #include "Indexer.h" 17 18 #include <string> 19 #include <typeinfo> 20 #include <unordered_map> 21 #include <unordered_set> 22 #include <utility> 23 24 #include "Mangler.h" 25 26 #include "Common/utility.h" 27 28 #include "ResolvExpr/typeops.h" 11 // Last Modified By : Rob Schluntz 12 // Last Modified On : Wed Aug 05 13:52:42 2015 13 // Update Count : 10 14 // 29 15 30 16 #include "SynTree/Declaration.h" … … 33 19 #include "SynTree/Initializer.h" 34 20 #include "SynTree/Statement.h" 21 #include "Indexer.h" 22 #include <typeinfo> 23 #include "Common/utility.h" 35 24 36 25 #define debugPrint(x) if ( doDebug ) { std::cout << x; } … … 44 33 } 45 34 46 typedef std::unordered_map< std::string, DeclarationWithType* > MangleTable; 47 typedef std::unordered_map< std::string, MangleTable > IdTable; 48 typedef std::unordered_map< std::string, NamedTypeDecl* > TypeTable; 49 typedef std::unordered_map< std::string, StructDecl* > StructTable; 50 typedef std::unordered_map< std::string, EnumDecl* > EnumTable; 51 typedef std::unordered_map< std::string, UnionDecl* > UnionTable; 52 typedef std::unordered_map< std::string, TraitDecl* > TraitTable; 53 54 void dump( const IdTable &table, std::ostream &os ) { 55 for ( IdTable::const_iterator id = table.begin(); id != table.end(); ++id ) { 56 for ( MangleTable::const_iterator mangle = id->second.begin(); mangle != id->second.end(); ++mangle ) { 57 os << mangle->second << std::endl; 58 } 59 } 60 } 61 62 template< typename Decl > 63 void dump( const std::unordered_map< std::string, Decl* > &table, std::ostream &os ) { 64 for ( typename std::unordered_map< std::string, Decl* >::const_iterator it = table.begin(); it != table.end(); ++it ) { 65 os << it->second << std::endl; 66 } // for 67 } 68 69 struct Indexer::Impl { 70 Impl( unsigned long _scope ) : refCount(1), scope( _scope ), size( 0 ), base(), 71 idTable(), typeTable(), structTable(), enumTable(), unionTable(), traitTable() {} 72 Impl( unsigned long _scope, Indexer &&_base ) : refCount(1), scope( _scope ), size( 0 ), base( _base ), 73 idTable(), typeTable(), structTable(), enumTable(), unionTable(), traitTable() {} 74 unsigned long refCount; ///< Number of references to these tables 75 unsigned long scope; ///< Scope these tables are associated with 76 unsigned long size; ///< Number of elements stored in this table 77 const Indexer base; ///< Base indexer this extends 78 79 IdTable idTable; ///< Identifier namespace 80 TypeTable typeTable; ///< Type namespace 81 StructTable structTable; ///< Struct namespace 82 EnumTable enumTable; ///< Enum namespace 83 UnionTable unionTable; ///< Union namespace 84 TraitTable traitTable; ///< Trait namespace 85 }; 86 87 Indexer::Impl *Indexer::newRef( Indexer::Impl *toClone ) { 88 if ( ! toClone ) return 0; 89 90 // shorten the search chain by skipping empty links 91 Indexer::Impl *ret = toClone->size == 0 ? toClone->base.tables : toClone; 92 if ( ret ) { ++ret->refCount; } 93 94 return ret; 95 } 96 97 void Indexer::deleteRef( Indexer::Impl *toFree ) { 98 if ( ! toFree ) return; 99 100 if ( --toFree->refCount == 0 ) delete toFree; 101 } 102 103 void Indexer::makeWritable() { 104 if ( ! tables ) { 105 // create indexer if not yet set 106 tables = new Indexer::Impl( scope ); 107 } else if ( tables->refCount > 1 || tables->scope != scope ) { 108 // make this indexer the base of a fresh indexer at the current scope 109 tables = new Indexer::Impl( scope, std::move( *this ) ); 110 } 111 } 112 113 Indexer::Indexer( bool _doDebug ) : tables( 0 ), scope( 0 ), doDebug( _doDebug ) {} 114 115 Indexer::Indexer( const Indexer &that ) : tables( newRef( that.tables ) ), scope( that.scope ), doDebug( that.doDebug ) {} 116 117 Indexer::Indexer( Indexer &&that ) : tables( that.tables ), scope( that.scope ), doDebug( that.doDebug ) { 118 that.tables = 0; 119 } 120 121 Indexer::~Indexer() { 122 deleteRef( tables ); 123 } 124 125 Indexer& Indexer::operator= ( const Indexer &that ) { 126 deleteRef( tables ); 127 128 tables = newRef( that.tables ); 129 scope = that.scope; 130 doDebug = that.doDebug; 131 132 return *this; 133 } 134 135 Indexer& Indexer::operator= ( Indexer &&that ) { 136 deleteRef( tables ); 137 138 tables = that.tables; 139 scope = that.scope; 140 doDebug = that.doDebug; 141 142 that.tables = 0; 143 144 return *this; 145 } 35 Indexer::Indexer( bool useDebug ) : doDebug( useDebug ) {} 36 37 Indexer::~Indexer() {} 146 38 147 39 void Indexer::visit( ObjectDecl *objectDecl ) { … … 153 45 if ( objectDecl->get_name() != "" ) { 154 46 debugPrint( "Adding object " << objectDecl->get_name() << std::endl ); 155 addId( objectDecl );47 idTable.addDecl( objectDecl ); 156 48 } // if 157 49 } … … 160 52 if ( functionDecl->get_name() == "" ) return; 161 53 debugPrint( "Adding function " << functionDecl->get_name() << std::endl ); 162 addId( functionDecl );54 idTable.addDecl( functionDecl ); 163 55 enterScope(); 164 56 maybeAccept( functionDecl->get_functionType(), *this ); … … 198 90 leaveScope(); 199 91 debugPrint( "Adding type " << typeDecl->get_name() << std::endl ); 200 addType( typeDecl );92 typeTable.add( typeDecl ); 201 93 acceptAll( typeDecl->get_assertions(), *this ); 202 94 } … … 208 100 leaveScope(); 209 101 debugPrint( "Adding typedef " << typeDecl->get_name() << std::endl ); 210 addType( typeDecl );102 typeTable.add( typeDecl ); 211 103 } 212 104 … … 216 108 cloneAll( aggregateDecl->get_parameters(), fwdDecl.get_parameters() ); 217 109 debugPrint( "Adding fwd decl for struct " << fwdDecl.get_name() << std::endl ); 218 addStruct( &fwdDecl );110 structTable.add( &fwdDecl ); 219 111 220 112 enterScope(); … … 225 117 debugPrint( "Adding struct " << aggregateDecl->get_name() << std::endl ); 226 118 // this addition replaces the forward declaration 227 addStruct( aggregateDecl );119 structTable.add( aggregateDecl ); 228 120 } 229 121 … … 233 125 cloneAll( aggregateDecl->get_parameters(), fwdDecl.get_parameters() ); 234 126 debugPrint( "Adding fwd decl for union " << fwdDecl.get_name() << std::endl ); 235 addUnion( &fwdDecl );127 unionTable.add( &fwdDecl ); 236 128 237 129 enterScope(); … … 241 133 242 134 debugPrint( "Adding union " << aggregateDecl->get_name() << std::endl ); 243 addUnion( aggregateDecl );135 unionTable.add( aggregateDecl ); 244 136 } 245 137 246 138 void Indexer::visit( EnumDecl *aggregateDecl ) { 247 139 debugPrint( "Adding enum " << aggregateDecl->get_name() << std::endl ); 248 addEnum( aggregateDecl );140 enumTable.add( aggregateDecl ); 249 141 // unlike structs, contexts, and unions, enums inject their members into the global scope 250 142 acceptAll( aggregateDecl->get_members(), *this ); 251 143 } 252 144 253 void Indexer::visit( TraitDecl *aggregateDecl ) {145 void Indexer::visit( ContextDecl *aggregateDecl ) { 254 146 enterScope(); 255 147 acceptAll( aggregateDecl->get_parameters(), *this ); … … 258 150 259 151 debugPrint( "Adding context " << aggregateDecl->get_name() << std::endl ); 260 addTrait( aggregateDecl );152 contextTable.add( aggregateDecl ); 261 153 } 262 154 … … 346 238 } 347 239 348 void Indexer::visit( OffsetPackExpr *offsetPackExpr ) {349 acceptAllNewScope( offsetPackExpr->get_results(), *this );350 maybeAccept( offsetPackExpr->get_type(), *this );351 }352 353 240 void Indexer::visit( AttrExpr *attrExpr ) { 354 241 acceptAllNewScope( attrExpr->get_results(), *this ); … … 406 293 407 294 408 void Indexer::visit( TraitInstType *contextInst ) {295 void Indexer::visit( ContextInstType *contextInst ) { 409 296 acceptAll( contextInst->get_parameters(), *this ); 410 297 acceptAll( contextInst->get_members(), *this ); … … 412 299 413 300 void Indexer::visit( StructInstType *structInst ) { 414 if ( ! lookupStruct( structInst->get_name() ) ) {301 if ( ! structTable.lookup( structInst->get_name() ) ) { 415 302 debugPrint( "Adding struct " << structInst->get_name() << " from implicit forward declaration" << std::endl ); 416 addStruct( structInst->get_name() );303 structTable.add( structInst->get_name() ); 417 304 } 418 305 enterScope(); … … 422 309 423 310 void Indexer::visit( UnionInstType *unionInst ) { 424 if ( ! lookupUnion( unionInst->get_name() ) ) {311 if ( ! unionTable.lookup( unionInst->get_name() ) ) { 425 312 debugPrint( "Adding union " << unionInst->get_name() << " from implicit forward declaration" << std::endl ); 426 addUnion( unionInst->get_name() );313 unionTable.add( unionInst->get_name() ); 427 314 } 428 315 enterScope(); … … 438 325 } 439 326 440 441 442 void Indexer::lookupId( const std::string &id, std::list< DeclarationWithType* > &out ) const { 443 std::unordered_set< std::string > foundMangleNames; 444 445 Indexer::Impl *searchTables = tables; 446 while ( searchTables ) { 447 448 IdTable::const_iterator decls = searchTables->idTable.find( id ); 449 if ( decls != searchTables->idTable.end() ) { 450 const MangleTable &mangleTable = decls->second; 451 for ( MangleTable::const_iterator decl = mangleTable.begin(); decl != mangleTable.end(); ++decl ) { 452 // mark the mangled name as found, skipping this insertion if a declaration for that name has already been found 453 if ( foundMangleNames.insert( decl->first ).second == false ) continue; 454 455 out.push_back( decl->second ); 456 } 457 } 458 459 // get declarations from base indexers 460 searchTables = searchTables->base.tables; 461 } 327 328 void Indexer::lookupId( const std::string &id, std::list< DeclarationWithType* > &list ) const { 329 idTable.lookupId( id, list ); 330 } 331 332 DeclarationWithType* Indexer::lookupId( const std::string &id) const { 333 return idTable.lookupId(id); 462 334 } 463 335 464 336 NamedTypeDecl *Indexer::lookupType( const std::string &id ) const { 465 if ( ! tables ) return 0; 466 467 TypeTable::const_iterator ret = tables->typeTable.find( id ); 468 return ret != tables->typeTable.end() ? ret->second : tables->base.lookupType( id ); 337 return typeTable.lookup( id ); 469 338 } 470 339 471 340 StructDecl *Indexer::lookupStruct( const std::string &id ) const { 472 if ( ! tables ) return 0; 473 474 StructTable::const_iterator ret = tables->structTable.find( id ); 475 return ret != tables->structTable.end() ? ret->second : tables->base.lookupStruct( id ); 341 return structTable.lookup( id ); 476 342 } 477 343 478 344 EnumDecl *Indexer::lookupEnum( const std::string &id ) const { 479 if ( ! tables ) return 0; 480 481 EnumTable::const_iterator ret = tables->enumTable.find( id ); 482 return ret != tables->enumTable.end() ? ret->second : tables->base.lookupEnum( id ); 345 return enumTable.lookup( id ); 483 346 } 484 347 485 348 UnionDecl *Indexer::lookupUnion( const std::string &id ) const { 486 if ( ! tables ) return 0; 487 488 UnionTable::const_iterator ret = tables->unionTable.find( id ); 489 return ret != tables->unionTable.end() ? ret->second : tables->base.lookupUnion( id ); 490 } 491 492 TraitDecl *Indexer::lookupTrait( const std::string &id ) const { 493 if ( ! tables ) return 0; 494 495 TraitTable::const_iterator ret = tables->traitTable.find( id ); 496 return ret != tables->traitTable.end() ? ret->second : tables->base.lookupTrait( id ); 497 } 498 499 DeclarationWithType *Indexer::lookupIdAtScope( const std::string &id, const std::string &mangleName, unsigned long scope ) const { 500 if ( ! tables ) return 0; 501 if ( tables->scope < scope ) return 0; 502 503 IdTable::const_iterator decls = tables->idTable.find( id ); 504 if ( decls != tables->idTable.end() ) { 505 const MangleTable &mangleTable = decls->second; 506 MangleTable::const_iterator decl = mangleTable.find( mangleName ); 507 if ( decl != mangleTable.end() ) return decl->second; 508 } 509 510 return tables->base.lookupIdAtScope( id, mangleName, scope ); 511 } 512 513 bool Indexer::hasIncompatibleCDecl( const std::string &id, const std::string &mangleName ) const { 514 if ( ! tables ) return false; 515 516 IdTable::const_iterator decls = tables->idTable.find( id ); 517 if ( decls != tables->idTable.end() ) { 518 const MangleTable &mangleTable = decls->second; 519 for ( MangleTable::const_iterator decl = mangleTable.begin(); decl != mangleTable.end(); ++decl ) { 520 // check for C decls with the same name, skipping 521 // those with a compatible type (by mangleName) 522 if ( decl->second->get_linkage() == LinkageSpec::C && decl->first != mangleName ) return true; 523 } 524 } 525 526 return tables->base.hasIncompatibleCDecl( id, mangleName ); 527 } 528 529 NamedTypeDecl *Indexer::lookupTypeAtScope( const std::string &id, unsigned long scope ) const { 530 if ( ! tables ) return 0; 531 if ( tables->scope < scope ) return 0; 532 533 TypeTable::const_iterator ret = tables->typeTable.find( id ); 534 return ret != tables->typeTable.end() ? ret->second : tables->base.lookupTypeAtScope( id, scope ); 535 } 536 537 StructDecl *Indexer::lookupStructAtScope( const std::string &id, unsigned long scope ) const { 538 if ( ! tables ) return 0; 539 if ( tables->scope < scope ) return 0; 540 541 StructTable::const_iterator ret = tables->structTable.find( id ); 542 return ret != tables->structTable.end() ? ret->second : tables->base.lookupStructAtScope( id, scope ); 543 } 544 545 EnumDecl *Indexer::lookupEnumAtScope( const std::string &id, unsigned long scope ) const { 546 if ( ! tables ) return 0; 547 if ( tables->scope < scope ) return 0; 548 549 EnumTable::const_iterator ret = tables->enumTable.find( id ); 550 return ret != tables->enumTable.end() ? ret->second : tables->base.lookupEnumAtScope( id, scope ); 551 } 552 553 UnionDecl *Indexer::lookupUnionAtScope( const std::string &id, unsigned long scope ) const { 554 if ( ! tables ) return 0; 555 if ( tables->scope < scope ) return 0; 556 557 UnionTable::const_iterator ret = tables->unionTable.find( id ); 558 return ret != tables->unionTable.end() ? ret->second : tables->base.lookupUnionAtScope( id, scope ); 559 } 560 561 TraitDecl *Indexer::lookupTraitAtScope( const std::string &id, unsigned long scope ) const { 562 if ( ! tables ) return 0; 563 if ( tables->scope < scope ) return 0; 564 565 TraitTable::const_iterator ret = tables->traitTable.find( id ); 566 return ret != tables->traitTable.end() ? ret->second : tables->base.lookupTraitAtScope( id, scope ); 567 } 568 569 bool addedIdConflicts( DeclarationWithType *existing, DeclarationWithType *added ) { 570 // if we're giving the same name mangling to things of different types then there is something wrong 571 assert( (dynamic_cast<ObjectDecl*>( added ) && dynamic_cast<ObjectDecl*>( existing ) ) 572 || (dynamic_cast<FunctionDecl*>( added ) && dynamic_cast<FunctionDecl*>( existing ) ) ); 573 574 if ( LinkageSpec::isOverridable( existing->get_linkage() ) ) { 575 // new definition shadows the autogenerated one, even at the same scope 576 return false; 577 } else if ( added->get_linkage() != LinkageSpec::C || ResolvExpr::typesCompatible( added->get_type(), existing->get_type(), Indexer() ) ) { 578 // typesCompatible doesn't really do the right thing here. When checking compatibility of function types, 579 // we should ignore outermost pointer qualifiers, except _Atomic? 580 FunctionDecl *newentry = dynamic_cast< FunctionDecl* >( added ); 581 FunctionDecl *oldentry = dynamic_cast< FunctionDecl* >( existing ); 582 if ( newentry && oldentry ) { 583 if ( newentry->get_statements() && oldentry->get_statements() ) { 584 throw SemanticError( "duplicate function definition for ", added ); 585 } // if 586 } else { 587 // two objects with the same mangled name defined in the same scope. 588 // both objects must be marked extern or both must be intrinsic for this to be okay 589 // xxx - perhaps it's actually if either is intrinsic then this is okay? 590 // might also need to be same storage class? 591 ObjectDecl *newobj = dynamic_cast< ObjectDecl* >( added ); 592 ObjectDecl *oldobj = dynamic_cast< ObjectDecl* >( existing ); 593 if ( newobj->get_storageClass() != DeclarationNode::Extern && oldobj->get_storageClass() != DeclarationNode::Extern ) { 594 throw SemanticError( "duplicate object definition for ", added ); 595 } // if 596 } // if 597 } else { 598 throw SemanticError( "duplicate definition for ", added ); 599 } // if 600 601 return true; 602 } 603 604 void Indexer::addId( DeclarationWithType *decl ) { 605 makeWritable(); 606 607 const std::string &name = decl->get_name(); 608 std::string mangleName; 609 if ( LinkageSpec::isOverridable( decl->get_linkage() ) ) { 610 // mangle the name without including the appropriate suffix, so overridable routines are placed into the 611 // same "bucket" as their user defined versions. 612 mangleName = Mangler::mangle( decl, false ); 613 } else { 614 mangleName = Mangler::mangle( decl ); 615 } // if 616 617 DeclarationWithType *existing = lookupIdAtScope( name, mangleName, scope ); 618 if ( ! existing || ! addedIdConflicts( existing, decl ) ) { 619 // this ensures that no two declarations with the same unmangled name both have C linkage 620 if ( decl->get_linkage() == LinkageSpec::C && hasIncompatibleCDecl( name, mangleName ) ) { 621 throw SemanticError( "invalid overload of C function ", decl ); 622 } // NOTE this is broken in Richard's original code in such a way that it never triggers (it 623 // doesn't check decls that have the same manglename, and all C-linkage decls are defined to 624 // have their name as their manglename, hence the error can never trigger). 625 // The code here is closer to correct, but name mangling would have to be completely 626 // isomorphic to C type-compatibility, which it may not be. 627 628 tables->idTable[ name ][ mangleName ] = decl; 629 ++tables->size; 630 } 631 } 632 633 bool addedTypeConflicts( NamedTypeDecl *existing, NamedTypeDecl *added ) { 634 if ( existing->get_base() == 0 ) { 635 return false; 636 } else if ( added->get_base() == 0 ) { 637 return true; 638 } else { 639 throw SemanticError( "redeclaration of ", added ); 640 } 641 } 642 643 void Indexer::addType( NamedTypeDecl *decl ) { 644 makeWritable(); 645 646 const std::string &id = decl->get_name(); 647 TypeTable::iterator existing = tables->typeTable.find( id ); 648 if ( existing == tables->typeTable.end() ) { 649 NamedTypeDecl *parent = tables->base.lookupTypeAtScope( id, scope ); 650 if ( ! parent || ! addedTypeConflicts( parent, decl ) ) { 651 tables->typeTable.insert( existing, std::make_pair( id, decl ) ); 652 ++tables->size; 653 } 654 } else { 655 if ( ! addedTypeConflicts( existing->second, decl ) ) { 656 existing->second = decl; 657 } 658 } 659 } 660 661 bool addedDeclConflicts( AggregateDecl *existing, AggregateDecl *added ) { 662 if ( existing->get_members().empty() ) { 663 return false; 664 } else if ( ! added->get_members().empty() ) { 665 throw SemanticError( "redeclaration of ", added ); 666 } // if 667 return true; 668 } 669 670 void Indexer::addStruct( const std::string &id ) { 671 addStruct( new StructDecl( id ) ); 672 } 673 674 void Indexer::addStruct( StructDecl *decl ) { 675 makeWritable(); 676 677 const std::string &id = decl->get_name(); 678 StructTable::iterator existing = tables->structTable.find( id ); 679 if ( existing == tables->structTable.end() ) { 680 StructDecl *parent = tables->base.lookupStructAtScope( id, scope ); 681 if ( ! parent || ! addedDeclConflicts( parent, decl ) ) { 682 tables->structTable.insert( existing, std::make_pair( id, decl ) ); 683 ++tables->size; 684 } 685 } else { 686 if ( ! addedDeclConflicts( existing->second, decl ) ) { 687 existing->second = decl; 688 } 689 } 690 } 691 692 void Indexer::addEnum( EnumDecl *decl ) { 693 makeWritable(); 694 695 const std::string &id = decl->get_name(); 696 EnumTable::iterator existing = tables->enumTable.find( id ); 697 if ( existing == tables->enumTable.end() ) { 698 EnumDecl *parent = tables->base.lookupEnumAtScope( id, scope ); 699 if ( ! parent || ! addedDeclConflicts( parent, decl ) ) { 700 tables->enumTable.insert( existing, std::make_pair( id, decl ) ); 701 ++tables->size; 702 } 703 } else { 704 if ( ! addedDeclConflicts( existing->second, decl ) ) { 705 existing->second = decl; 706 } 707 } 708 } 709 710 void Indexer::addUnion( const std::string &id ) { 711 addUnion( new UnionDecl( id ) ); 712 } 713 714 void Indexer::addUnion( UnionDecl *decl ) { 715 makeWritable(); 716 717 const std::string &id = decl->get_name(); 718 UnionTable::iterator existing = tables->unionTable.find( id ); 719 if ( existing == tables->unionTable.end() ) { 720 UnionDecl *parent = tables->base.lookupUnionAtScope( id, scope ); 721 if ( ! parent || ! addedDeclConflicts( parent, decl ) ) { 722 tables->unionTable.insert( existing, std::make_pair( id, decl ) ); 723 ++tables->size; 724 } 725 } else { 726 if ( ! addedDeclConflicts( existing->second, decl ) ) { 727 existing->second = decl; 728 } 729 } 730 } 731 732 void Indexer::addTrait( TraitDecl *decl ) { 733 makeWritable(); 734 735 const std::string &id = decl->get_name(); 736 TraitTable::iterator existing = tables->traitTable.find( id ); 737 if ( existing == tables->traitTable.end() ) { 738 TraitDecl *parent = tables->base.lookupTraitAtScope( id, scope ); 739 if ( ! parent || ! addedDeclConflicts( parent, decl ) ) { 740 tables->traitTable.insert( existing, std::make_pair( id, decl ) ); 741 ++tables->size; 742 } 743 } else { 744 if ( ! addedDeclConflicts( existing->second, decl ) ) { 745 existing->second = decl; 746 } 747 } 349 return unionTable.lookup( id ); 350 } 351 352 ContextDecl * Indexer::lookupContext( const std::string &id ) const { 353 return contextTable.lookup( id ); 748 354 } 749 355 750 356 void Indexer::enterScope() { 751 ++scope;752 753 357 if ( doDebug ) { 754 std::cout << "--- Entering scope " << scope << std::endl; 755 } 358 std::cout << "--- Entering scope" << std::endl; 359 } 360 idTable.enterScope(); 361 typeTable.enterScope(); 362 structTable.enterScope(); 363 enumTable.enterScope(); 364 unionTable.enterScope(); 365 contextTable.enterScope(); 756 366 } 757 367 758 368 void Indexer::leaveScope() { 759 369 using std::cout; 760 761 assert( scope > 0 && "cannot leave initial scope" ); 762 --scope; 763 764 while ( tables && tables->scope > scope ) { 765 if ( doDebug ) { 766 cout << "--- Leaving scope " << tables->scope << " containing" << std::endl; 767 dump( tables->idTable, cout ); 768 dump( tables->typeTable, cout ); 769 dump( tables->structTable, cout ); 770 dump( tables->enumTable, cout ); 771 dump( tables->unionTable, cout ); 772 dump( tables->traitTable, cout ); 773 } 774 775 // swap tables for base table until we find one at an appropriate scope 776 Indexer::Impl *base = newRef( tables->base.tables ); 777 deleteRef( tables ); 778 tables = base; 779 } 370 using std::endl; 371 372 if ( doDebug ) { 373 cout << "--- Leaving scope containing" << endl; 374 idTable.dump( cout ); 375 typeTable.dump( cout ); 376 structTable.dump( cout ); 377 enumTable.dump( cout ); 378 unionTable.dump( cout ); 379 contextTable.dump( cout ); 380 } 381 idTable.leaveScope(); 382 typeTable.leaveScope(); 383 structTable.leaveScope(); 384 enumTable.leaveScope(); 385 unionTable.leaveScope(); 386 contextTable.leaveScope(); 780 387 } 781 388 782 389 void Indexer::print( std::ostream &os, int indent ) const { 783 390 using std::cerr; 784 785 cerr << "===idTable===" << std::endl; 786 if ( tables ) dump( tables->idTable, os ); 787 cerr << "===typeTable===" << std::endl; 788 if ( tables ) dump( tables->typeTable, os ); 789 cerr << "===structTable===" << std::endl; 790 if ( tables ) dump( tables->structTable, os ); 791 cerr << "===enumTable===" << std::endl; 792 if ( tables ) dump( tables->enumTable, os ); 793 cerr << "===unionTable===" << std::endl; 794 if ( tables ) dump( tables->unionTable, os ); 795 cerr << "===contextTable===" << std::endl; 796 if ( tables ) dump( tables->traitTable, os ); 391 using std::endl; 392 393 cerr << "===idTable===" << endl; 394 idTable.dump( os ); 395 cerr << "===typeTable===" << endl; 396 typeTable.dump( os ); 397 cerr << "===structTable===" << endl; 398 structTable.dump( os ); 399 cerr << "===enumTable===" << endl; 400 enumTable.dump( os ); 401 cerr << "===unionTable===" << endl; 402 unionTable.dump( os ); 403 cerr << "===contextTable===" << endl; 404 contextTable.dump( os ); 405 #if 0 406 idTable.dump( os ); 407 typeTable.dump( os ); 408 structTable.dump( os ); 409 enumTable.dump( os ); 410 unionTable.dump( os ); 411 contextTable.dump( os ); 412 #endif 797 413 } 798 414 } // namespace SymTab -
src/SymTab/Indexer.h
r0f9e4403 rc5833e8 9 9 // Author : Richard C. Bilson 10 10 // Created On : Sun May 17 21:38:55 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Wed Mar 2 17:34:14 201613 // Update Count : 611 // Last Modified By : Rob Schluntz 12 // Last Modified On : Thu Sep 17 16:05:38 2015 13 // Update Count : 5 14 14 // 15 15 … … 21 21 22 22 #include "SynTree/Visitor.h" 23 #include "IdTable.h" 24 #include "AggregateTable.h" 25 #include "TypeTable.h" 23 26 24 27 namespace SymTab { … … 26 29 public: 27 30 Indexer( bool useDebug = false ); 28 29 Indexer( const Indexer &that );30 Indexer( Indexer &&that );31 31 virtual ~Indexer(); 32 Indexer& operator= ( const Indexer &that );33 Indexer& operator= ( Indexer &&that );34 32 35 33 //using Visitor::visit; … … 41 39 virtual void visit( UnionDecl *aggregateDecl ); 42 40 virtual void visit( EnumDecl *aggregateDecl ); 43 virtual void visit( TraitDecl *aggregateDecl );41 virtual void visit( ContextDecl *aggregateDecl ); 44 42 45 43 virtual void visit( CompoundStmt *compoundStmt ); … … 59 57 virtual void visit( UntypedOffsetofExpr *offsetofExpr ); 60 58 virtual void visit( OffsetofExpr *offsetofExpr ); 61 virtual void visit( OffsetPackExpr *offsetPackExpr );62 59 virtual void visit( AttrExpr *attrExpr ); 63 60 virtual void visit( LogicalExpr *logicalExpr ); … … 70 67 virtual void visit( UntypedValofExpr *valofExpr ); 71 68 72 virtual void visit( TraitInstType *contextInst );69 virtual void visit( ContextInstType *contextInst ); 73 70 virtual void visit( StructInstType *contextInst ); 74 71 virtual void visit( UnionInstType *contextInst ); … … 81 78 void leaveScope(); 82 79 83 /// Gets all declarations with the given ID 84 void lookupId( const std::string &id, std::list< DeclarationWithType* > &out ) const; 85 /// Gets the top-most type declaration with the given ID 80 void lookupId( const std::string &id, std::list< DeclarationWithType* >& ) const; 81 DeclarationWithType* lookupId( const std::string &id) const; 86 82 NamedTypeDecl *lookupType( const std::string &id ) const; 87 /// Gets the top-most struct declaration with the given ID88 83 StructDecl *lookupStruct( const std::string &id ) const; 89 /// Gets the top-most enum declaration with the given ID90 84 EnumDecl *lookupEnum( const std::string &id ) const; 91 /// Gets the top-most union declaration with the given ID92 85 UnionDecl *lookupUnion( const std::string &id ) const; 93 /// Gets the top-most trait declaration with the given ID 94 TraitDecl *lookupTrait( const std::string &id ) const; 86 ContextDecl *lookupContext( const std::string &id ) const; 95 87 96 88 void print( std::ostream &os, int indent = 0 ) const; 97 89 private: 98 /// looks up a specific mangled ID at the given scope 99 DeclarationWithType *lookupIdAtScope( const std::string &id, const std::string &mangleName, unsigned long scope ) const; 100 /// returns true if there exists a declaration with C linkage and the given name with a different mangled name 101 bool hasIncompatibleCDecl( const std::string &id, const std::string &mangleName ) const; 102 // equivalents to lookup functions that only look at tables at scope `scope` (which should be >= tables->scope) 103 NamedTypeDecl *lookupTypeAtScope( const std::string &id, unsigned long scope ) const; 104 StructDecl *lookupStructAtScope( const std::string &id, unsigned long scope ) const; 105 EnumDecl *lookupEnumAtScope( const std::string &id, unsigned long scope ) const; 106 UnionDecl *lookupUnionAtScope( const std::string &id, unsigned long scope ) const; 107 TraitDecl *lookupTraitAtScope( const std::string &id, unsigned long scope ) const; 108 109 void addId( DeclarationWithType *decl ); 110 void addType( NamedTypeDecl *decl ); 111 void addStruct( const std::string &id ); 112 void addStruct( StructDecl *decl ); 113 void addEnum( EnumDecl *decl ); 114 void addUnion( const std::string &id ); 115 void addUnion( UnionDecl *decl ); 116 void addTrait( TraitDecl *decl ); 117 118 struct Impl; 119 Impl *tables; ///< Copy-on-write instance of table data structure 120 unsigned long scope; ///< Scope index of this pointer 121 bool doDebug; ///< Display debugging trace? 122 123 /// Takes a new ref to a table (returns null if null) 124 static Impl *newRef( Impl *toClone ); 125 /// Clears a ref to a table (does nothing if null) 126 static void deleteRef( Impl *toFree ); 127 128 /// Ensures that tables variable is writable (i.e. allocated, uniquely owned by this Indexer, and at the current scope) 129 void makeWritable(); 90 IdTable idTable; 91 TypeTable typeTable; 92 StructTable structTable; 93 EnumTable enumTable; 94 UnionTable unionTable; 95 ContextTable contextTable; 96 97 bool doDebug; // display debugging trace 130 98 }; 131 99 } // namespace SymTab -
src/SymTab/Mangler.cc
r0f9e4403 rc5833e8 224 224 acceptAll( tupleType->get_types(), *this ); 225 225 mangleName << "_"; 226 }227 228 void Mangler::visit( VarArgsType *varArgsType ) {229 printQualifiers( varArgsType );230 mangleName << "VARGS";231 226 } 232 227 -
src/SymTab/Mangler.h
r0f9e4403 rc5833e8 45 45 virtual void visit( TypeInstType *aggregateUseType ); 46 46 virtual void visit( TupleType *tupleType ); 47 virtual void visit( VarArgsType *varArgsType );48 47 49 48 std::string get_mangleName() { return mangleName.str(); } -
src/SymTab/TypeEquality.cc
r0f9e4403 rc5833e8 41 41 virtual void visit( EnumInstType *enumInst ); 42 42 virtual void visit( TypeInstType *typeInst ); 43 virtual void visit( VarArgsType *varArgsType );44 43 45 44 void handleQualifiers( Type * t ); … … 192 191 } 193 192 } 194 195 void TypeEquality::visit( VarArgsType *varArgsType ) {196 handleQualifiers( varArgsType );197 if ( ! dynamic_cast< VarArgsType * >( other ) ) {198 result = false;199 }200 }201 193 } // namespace SymTab -
src/SymTab/Validate.cc
r0f9e4403 rc5833e8 10 10 // Created On : Sun May 17 21:50:04 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Apr 13 16:39:30201613 // Update Count : 2 5112 // Last Modified On : Wed Jan 27 22:03:12 2016 13 // Update Count : 225 14 14 // 15 15 … … 40 40 #include <list> 41 41 #include <iterator> 42 #include "Common/utility.h"43 #include "Common/UniqueName.h"44 42 #include "Validate.h" 45 43 #include "SynTree/Visitor.h" 46 44 #include "SynTree/Mutator.h" 47 45 #include "SynTree/Type.h" 48 #include "SynTree/Expression.h"49 46 #include "SynTree/Statement.h" 50 47 #include "SynTree/TypeSubstitution.h" … … 52 49 #include "FixFunction.h" 53 50 // #include "ImplementationType.h" 54 #include "GenPoly/DeclMutator.h" 51 #include "Common/utility.h" 52 #include "Common/UniqueName.h" 55 53 #include "AddVisit.h" 56 54 #include "MakeLibCfa.h" … … 72 70 73 71 virtual void visit( CompoundStmt *compoundStmt ); 72 virtual void visit( IfStmt *ifStmt ); 73 virtual void visit( WhileStmt *whileStmt ); 74 virtual void visit( ForStmt *forStmt ); 74 75 virtual void visit( SwitchStmt *switchStmt ); 75 76 virtual void visit( ChooseStmt *chooseStmt ); 76 // virtual void visit( CaseStmt *caseStmt ); 77 virtual void visit( CaseStmt *caseStmt ); 78 virtual void visit( CatchStmt *catchStmt ); 77 79 private: 78 80 HoistStruct(); … … 99 101 virtual void visit( StructInstType *structInst ); 100 102 virtual void visit( UnionInstType *unionInst ); 101 virtual void visit( TraitInstType *contextInst );103 virtual void visit( ContextInstType *contextInst ); 102 104 virtual void visit( StructDecl *structDecl ); 103 105 virtual void visit( UnionDecl *unionDecl ); … … 135 137 virtual void visit( UnionDecl *structDecl ); 136 138 virtual void visit( TypeDecl *typeDecl ); 137 virtual void visit( TraitDecl *ctxDecl );139 virtual void visit( ContextDecl *ctxDecl ); 138 140 virtual void visit( FunctionDecl *functionDecl ); 139 141 … … 142 144 143 145 virtual void visit( CompoundStmt *compoundStmt ); 146 virtual void visit( IfStmt *ifStmt ); 147 virtual void visit( WhileStmt *whileStmt ); 148 virtual void visit( ForStmt *forStmt ); 144 149 virtual void visit( SwitchStmt *switchStmt ); 145 150 virtual void visit( ChooseStmt *chooseStmt ); 146 // virtual void visit( CaseStmt *caseStmt ); 151 virtual void visit( CaseStmt *caseStmt ); 152 virtual void visit( CatchStmt *catchStmt ); 147 153 148 154 AutogenerateRoutines() : functionNesting( 0 ) {} … … 160 166 /// and return something if the return type is non-void. 161 167 static void checkFunctionReturns( std::list< Declaration * > & translationUnit ); 168 162 169 private: 163 170 virtual void visit( FunctionDecl * functionDecl ); … … 185 192 virtual Declaration *mutate( UnionDecl * unionDecl ); 186 193 virtual Declaration *mutate( EnumDecl * enumDecl ); 187 virtual Declaration *mutate( TraitDecl * contextDecl );194 virtual Declaration *mutate( ContextDecl * contextDecl ); 188 195 189 196 template<typename AggDecl> 190 197 AggDecl *handleAggregate( AggDecl * aggDecl ); 191 198 192 template<typename AggDecl>193 void addImplicitTypedef( AggDecl * aggDecl );194 195 199 typedef std::map< std::string, std::pair< TypedefDecl *, int > > TypedefMap; 196 200 TypedefMap typedefNames; … … 198 202 }; 199 203 200 class CompoundLiteral : public GenPoly::DeclMutator {201 DeclarationNode::StorageClass storageclass = DeclarationNode::NoStorageClass;202 203 virtual DeclarationWithType * mutate( ObjectDecl *objectDecl );204 virtual Expression *mutate( CompoundLiteralExpr *compLitExpr );205 };206 207 204 void validate( std::list< Declaration * > &translationUnit, bool doDebug ) { 208 205 Pass1 pass1; 209 206 Pass2 pass2( doDebug, 0 ); 210 207 Pass3 pass3( 0 ); 211 CompoundLiteral compoundliteral;212 213 208 EliminateTypedef::eliminateTypedef( translationUnit ); 214 209 HoistStruct::hoistStruct( translationUnit ); … … 216 211 acceptAll( translationUnit, pass2 ); 217 212 ReturnChecker::checkFunctionReturns( translationUnit ); 218 mutateAll( translationUnit, compoundliteral );219 213 AutogenerateRoutines::autogenerateRoutines( translationUnit ); 220 214 acceptAll( translationUnit, pass3 ); … … 298 292 } 299 293 294 void HoistStruct::visit( IfStmt *ifStmt ) { 295 addVisit( ifStmt, *this ); 296 } 297 298 void HoistStruct::visit( WhileStmt *whileStmt ) { 299 addVisit( whileStmt, *this ); 300 } 301 302 void HoistStruct::visit( ForStmt *forStmt ) { 303 addVisit( forStmt, *this ); 304 } 305 300 306 void HoistStruct::visit( SwitchStmt *switchStmt ) { 301 307 addVisit( switchStmt, *this ); … … 306 312 } 307 313 308 // void HoistStruct::visit( CaseStmt *caseStmt ) { 309 // addVisit( caseStmt, *this ); 310 // } 314 void HoistStruct::visit( CaseStmt *caseStmt ) { 315 addVisit( caseStmt, *this ); 316 } 317 318 void HoistStruct::visit( CatchStmt *cathStmt ) { 319 addVisit( cathStmt, *this ); 320 } 311 321 312 322 void Pass1::visit( EnumDecl *enumDecl ) { … … 394 404 } 395 405 396 void Pass2::visit( TraitInstType *contextInst ) {406 void Pass2::visit( ContextInstType *contextInst ) { 397 407 Parent::visit( contextInst ); 398 TraitDecl *ctx = indexer->lookupTrait( contextInst->get_name() );408 ContextDecl *ctx = indexer->lookupContext( contextInst->get_name() ); 399 409 if ( ! ctx ) { 400 410 throw SemanticError( "use of undeclared context " + contextInst->get_name() ); … … 402 412 for ( std::list< TypeDecl * >::const_iterator i = ctx->get_parameters().begin(); i != ctx->get_parameters().end(); ++i ) { 403 413 for ( std::list< DeclarationWithType * >::const_iterator assert = (*i )->get_assertions().begin(); assert != (*i )->get_assertions().end(); ++assert ) { 404 if ( TraitInstType *otherCtx = dynamic_cast< TraitInstType * >(*assert ) ) {414 if ( ContextInstType *otherCtx = dynamic_cast< ContextInstType * >(*assert ) ) { 405 415 cloneAll( otherCtx->get_members(), contextInst->get_members() ); 406 416 } else { … … 466 476 while ( ! toBeDone.empty() ) { 467 477 for ( std::list< DeclarationWithType * >::iterator assertion = toBeDone.begin(); assertion != toBeDone.end(); ++assertion ) { 468 if ( TraitInstType *ctx = dynamic_cast< TraitInstType * >( (*assertion )->get_type() ) ) {478 if ( ContextInstType *ctx = dynamic_cast< ContextInstType * >( (*assertion )->get_type() ) ) { 469 479 for ( std::list< Declaration * >::const_iterator i = ctx->get_members().begin(); i != ctx->get_members().end(); ++i ) { 470 480 DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( *i ); … … 841 851 } 842 852 843 void AutogenerateRoutines::visit( TraitDecl *) {853 void AutogenerateRoutines::visit( ContextDecl *) { 844 854 // ensure that we don't add assignment ops for types defined as part of the context 845 855 } … … 864 874 } 865 875 876 void AutogenerateRoutines::visit( IfStmt *ifStmt ) { 877 visitStatement( ifStmt ); 878 } 879 880 void AutogenerateRoutines::visit( WhileStmt *whileStmt ) { 881 visitStatement( whileStmt ); 882 } 883 884 void AutogenerateRoutines::visit( ForStmt *forStmt ) { 885 visitStatement( forStmt ); 886 } 887 866 888 void AutogenerateRoutines::visit( SwitchStmt *switchStmt ) { 867 889 visitStatement( switchStmt ); … … 872 894 } 873 895 874 // void AutogenerateRoutines::visit( CaseStmt *caseStmt ) { 875 // visitStatement( caseStmt ); 876 // } 896 void AutogenerateRoutines::visit( CaseStmt *caseStmt ) { 897 visitStatement( caseStmt ); 898 } 899 900 void AutogenerateRoutines::visit( CatchStmt *cathStmt ) { 901 visitStatement( cathStmt ); 902 } 877 903 878 904 void ReturnChecker::checkFunctionReturns( std::list< Declaration * > & translationUnit ) { … … 1017 1043 } 1018 1044 1019 // there may be typedefs nested within aggregates in order for everything to work properly, these should be removed 1020 // as well 1045 // there may be typedefs nested within aggregates 1046 // in order for everything to work properly, these 1047 // should be removed as well 1021 1048 template<typename AggDecl> 1022 1049 AggDecl *EliminateTypedef::handleAggregate( AggDecl * aggDecl ) { … … 1032 1059 return aggDecl; 1033 1060 } 1034 1035 template<typename AggDecl> 1036 void EliminateTypedef::addImplicitTypedef( AggDecl * aggDecl ) { 1037 if ( typedefNames.count( aggDecl->get_name() ) == 0 ) { 1038 Type *type; 1039 if ( StructDecl * newDeclStructDecl = dynamic_cast< StructDecl * >( aggDecl ) ) { 1040 type = new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() ); 1041 } else if ( UnionDecl * newDeclUnionDecl = dynamic_cast< UnionDecl * >( aggDecl ) ) { 1042 type = new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() ); 1043 } else if ( EnumDecl * newDeclEnumDecl = dynamic_cast< EnumDecl * >( aggDecl ) ) { 1044 type = new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() ); 1045 } // if 1046 TypedefDecl * tyDecl = new TypedefDecl( aggDecl->get_name(), DeclarationNode::NoStorageClass, type ); 1047 typedefNames[ aggDecl->get_name() ] = std::make_pair( tyDecl, scopeLevel ); 1048 } // if 1049 } 1061 1050 1062 Declaration *EliminateTypedef::mutate( StructDecl * structDecl ) { 1051 addImplicitTypedef( structDecl );1052 1063 Mutator::mutate( structDecl ); 1053 1064 return handleAggregate( structDecl ); … … 1055 1066 1056 1067 Declaration *EliminateTypedef::mutate( UnionDecl * unionDecl ) { 1057 addImplicitTypedef( unionDecl );1058 1068 Mutator::mutate( unionDecl ); 1059 1069 return handleAggregate( unionDecl ); … … 1061 1071 1062 1072 Declaration *EliminateTypedef::mutate( EnumDecl * enumDecl ) { 1063 addImplicitTypedef( enumDecl );1064 1073 Mutator::mutate( enumDecl ); 1065 1074 return handleAggregate( enumDecl ); 1066 1075 } 1067 1076 1068 Declaration *EliminateTypedef::mutate( TraitDecl * contextDecl ) {1077 Declaration *EliminateTypedef::mutate( ContextDecl * contextDecl ) { 1069 1078 Mutator::mutate( contextDecl ); 1070 1079 return handleAggregate( contextDecl ); 1071 1080 } 1072 1081 1073 DeclarationWithType * CompoundLiteral::mutate( ObjectDecl *objectDecl ) {1074 storageclass = objectDecl->get_storageClass();1075 DeclarationWithType * temp = Mutator::mutate( objectDecl );1076 storageclass = DeclarationNode::NoStorageClass;1077 return temp;1078 }1079 1080 Expression *CompoundLiteral::mutate( CompoundLiteralExpr *compLitExpr ) {1081 // transform [storage_class] ... (struct S){ 3, ... };1082 // into [storage_class] struct S temp = { 3, ... };1083 static UniqueName indexName( "_compLit" );1084 1085 ObjectDecl *tempvar = new ObjectDecl( indexName.newName(), storageclass, LinkageSpec::C, 0, compLitExpr->get_type(), compLitExpr->get_initializer() );1086 compLitExpr->set_type( 0 );1087 compLitExpr->set_initializer( 0 );1088 delete compLitExpr;1089 DeclarationWithType * newtempvar = mutate( tempvar );1090 addDeclaration( newtempvar ); // add modified temporary to current block1091 return new VariableExpr( newtempvar );1092 }1093 1082 } // namespace SymTab 1094 1083 -
src/SymTab/module.mk
r0f9e4403 rc5833e8 15 15 ############################################################################### 16 16 17 SRC += SymTab/Indexer.cc \ 17 SRC += SymTab/IdTable.cc \ 18 SymTab/Indexer.cc \ 18 19 SymTab/Mangler.cc \ 19 20 SymTab/Validate.cc \ -
src/SynTree/AggregateDecl.cc
r0f9e4403 rc5833e8 10 10 // Created On : Sun May 17 23:56:39 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 17:28:00 201613 // Update Count : 712 // Last Modified On : Sat Jun 13 08:12:49 2015 13 // Update Count : 6 14 14 // 15 15 … … 64 64 std::string EnumDecl::typeString() const { return "enum"; } 65 65 66 std::string TraitDecl::typeString() const { return "context"; }66 std::string ContextDecl::typeString() const { return "context"; } 67 67 68 68 // Local Variables: // -
src/SynTree/Constant.cc
r0f9e4403 rc5833e8 16 16 #include <iostream> 17 17 #include <list> 18 #include <string>19 18 20 19 #include "Constant.h" … … 29 28 30 29 Constant::~Constant() { delete type; } 31 32 Constant Constant::from( int i ) {33 return Constant( new BasicType( Type::Qualifiers(), BasicType::SignedInt ), std::to_string( i ) );34 }35 36 Constant Constant::from( unsigned long i ) {37 return Constant( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), std::to_string( i ) );38 }39 40 Constant Constant::from( double d ) {41 return Constant( new BasicType( Type::Qualifiers(), BasicType::Double ), std::to_string( d ) );42 }43 30 44 31 Constant *Constant::clone() const { assert( false ); return 0; } -
src/SynTree/Constant.h
r0f9e4403 rc5833e8 32 32 void set_value( std::string newValue ) { value = newValue; } 33 33 34 /// generates an integer constant of the given int35 static Constant from( int i );36 /// generates an integer constant of the given unsigned long int37 static Constant from( unsigned long i );38 /// generates a floating point constant of the given double39 static Constant from( double d );40 41 34 virtual Constant *clone() const; 42 35 virtual void accept( Visitor &v ) { v.visit( this ); } -
src/SynTree/Declaration.h
r0f9e4403 rc5833e8 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Wed Mar 2 17:28:11 201613 // Update Count : 3 311 // Last Modified By : Rob Schluntz 12 // Last Modified On : Wed Dec 09 14:08:22 2015 13 // Update Count : 32 14 14 // 15 15 … … 246 246 }; 247 247 248 class TraitDecl : public AggregateDecl {249 typedef AggregateDecl Parent; 250 public: 251 TraitDecl( const std::string &name ) : Parent( name ) {}252 TraitDecl( const TraitDecl &other ) : Parent( other ) {}253 254 virtual TraitDecl *clone() const { return new TraitDecl( *this ); }248 class ContextDecl : public AggregateDecl { 249 typedef AggregateDecl Parent; 250 public: 251 ContextDecl( const std::string &name ) : Parent( name ) {} 252 ContextDecl( const ContextDecl &other ) : Parent( other ) {} 253 254 virtual ContextDecl *clone() const { return new ContextDecl( *this ); } 255 255 virtual void accept( Visitor &v ) { v.visit( this ); } 256 256 virtual Declaration *acceptMutator( Mutator &m ) { return m.mutate( this ); } -
src/SynTree/Expression.cc
r0f9e4403 rc5833e8 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // Expression.cc -- 7 // Expression.cc -- 8 8 // 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Fri Apr 8 17:16:23 201613 // Update Count : 4011 // Last Modified By : Rob Schluntz 12 // Last Modified On : Wed Dec 09 14:10:29 2015 13 // Update Count : 34 14 14 // 15 15 … … 22 22 23 23 #include "Type.h" 24 #include "Initializer.h"25 24 #include "Expression.h" 26 25 #include "Declaration.h" … … 212 211 213 212 os << " of "; 214 215 if ( type ) {216 type->print(os, indent + 2);217 } else {218 os << "<NULL>";219 }220 221 os << std::endl;222 Expression::print( os, indent );223 }224 225 OffsetPackExpr::OffsetPackExpr( StructInstType *type_, Expression *aname_ ) : Expression( aname_ ), type( type_ ) {226 add_result( new ArrayType( Type::Qualifiers(), new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), 0, false, false ) );227 }228 229 OffsetPackExpr::OffsetPackExpr( const OffsetPackExpr &other ) : Expression( other ), type( maybeClone( other.type ) ) {}230 231 OffsetPackExpr::~OffsetPackExpr() { delete type; }232 233 void OffsetPackExpr::print( std::ostream &os, int indent ) const {234 os << std::string( indent, ' ' ) << "Offset pack expression on ";235 213 236 214 if ( type ) { … … 444 422 } 445 423 446 AsmExpr::AsmExpr( const AsmExpr & other ) : inout( maybeClone( other.inout ) ), constraint( maybeClone( other.constraint ) ), operand( maybeClone( other.operand ) ) {}447 448 449 424 void AsmExpr::print( std::ostream &os, int indent ) const { 450 425 os << "Asm Expression: " << std::endl; … … 454 429 } 455 430 456 UntypedValofExpr::UntypedValofExpr( const UntypedValofExpr & other ) : Expression( other ), body ( maybeClone( other.body ) ) {}457 458 UntypedValofExpr::~UntypedValofExpr() { delete body; }459 460 431 void UntypedValofExpr::print( std::ostream &os, int indent ) const { 461 432 os << std::string( indent, ' ' ) << "Valof Expression: " << std::endl; … … 463 434 get_body()->print( os, indent + 2 ); 464 435 } 465 466 467 CompoundLiteralExpr::CompoundLiteralExpr( Type * type, Initializer * initializer ) : type( type ), initializer( initializer ) {468 add_result( type->clone() );469 }470 471 CompoundLiteralExpr::CompoundLiteralExpr( const CompoundLiteralExpr &other ) : Expression( other ), type( maybeClone( other.type ) ), initializer( maybeClone( other.initializer ) ) {}472 473 CompoundLiteralExpr::~CompoundLiteralExpr() {474 delete initializer;475 delete type;476 }477 478 void CompoundLiteralExpr::print( std::ostream &os, int indent ) const {479 os << "Compound Literal Expression: " << std::endl;480 if ( type ) type->print( os, indent + 2 );481 if ( initializer ) initializer->print( os, indent + 2 );482 }483 484 436 485 437 std::ostream & operator<<( std::ostream & out, Expression * expr ) { -
src/SynTree/Expression.h
r0f9e4403 rc5833e8 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // Expression.h -- 7 // Expression.h -- 8 8 // 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Fri Apr 8 17:18:06 201613 // Update Count : 2111 // Last Modified By : Rob Schluntz 12 // Last Modified On : Wed Dec 09 14:10:21 2015 13 // Update Count : 19 14 14 // 15 15 … … 155 155 }; 156 156 157 // xxx - this doesn't appear to actually be hooked in anywhere. We should use this instead of the "&&"" UntypedExpr hack158 157 class LabelAddressExpr : public Expression { 159 158 public: 160 159 LabelAddressExpr( Expression *arg ); 161 LabelAddressExpr( const LabelAddressExpr &other );160 LabelAddressExpr( const AddressExpr &other ); 162 161 virtual ~LabelAddressExpr(); 163 162 … … 252 251 }; 253 252 254 /// ConstantExpr represents an expression that simply refers to the value of a constant 253 /// ConstantExpr represents an expression that simply refers to the value of a constant 255 254 class ConstantExpr : public Expression { 256 255 public: … … 360 359 Type *type; 361 360 DeclarationWithType *member; 362 };363 364 /// Expression representing a pack of field-offsets for a generic type365 class OffsetPackExpr : public Expression {366 public:367 OffsetPackExpr( StructInstType *type_, Expression *aname_ = 0 );368 OffsetPackExpr( const OffsetPackExpr &other );369 virtual ~OffsetPackExpr();370 371 StructInstType *get_type() const { return type; }372 void set_type( StructInstType *newValue ) { type = newValue; }373 374 virtual OffsetPackExpr *clone() const { return new OffsetPackExpr( *this ); }375 virtual void accept( Visitor &v ) { v.visit( this ); }376 virtual Expression *acceptMutator( Mutator &m ) { return m.mutate( this ); }377 378 virtual void print( std::ostream &os, int indent = 0 ) const;379 380 private:381 StructInstType *type;382 361 }; 383 362 … … 536 515 public: 537 516 AsmExpr( Expression *inout, ConstantExpr *constraint, Expression *operand ) : inout( inout ), constraint( constraint ), operand( operand ) {} 538 AsmExpr( const AsmExpr & other );539 517 virtual ~AsmExpr() { delete inout; delete constraint; delete operand; }; 540 518 … … 563 541 public: 564 542 UntypedValofExpr( Statement *_body, Expression *_aname = 0 ) : Expression( _aname ), body ( _body ) {} 565 UntypedValofExpr( const UntypedValofExpr & other ); 566 virtual ~UntypedValofExpr(); 543 virtual ~UntypedValofExpr() {} 567 544 568 545 Expression *get_value(); … … 575 552 private: 576 553 Statement *body; 577 };578 579 /// CompoundLiteralExpr represents a C99 'compound literal'580 class CompoundLiteralExpr : public Expression {581 public:582 CompoundLiteralExpr( Type * type, Initializer * initializer );583 CompoundLiteralExpr( const CompoundLiteralExpr &other );584 ~CompoundLiteralExpr();585 586 Type * get_type() const { return type; }587 void set_type( Type * t ) { type = t; }588 589 Initializer * get_initializer() const { return initializer; }590 void set_initializer( Initializer * i ) { initializer = i; }591 592 virtual CompoundLiteralExpr *clone() const { return new CompoundLiteralExpr( *this ); }593 virtual void accept( Visitor &v ) { v.visit( this ); }594 virtual Expression *acceptMutator( Mutator &m ) { return m.mutate( this ); }595 virtual void print( std::ostream &os, int indent = 0 ) const;596 private:597 Type * type;598 Initializer * initializer;599 554 }; 600 555 -
src/SynTree/Mutator.cc
r0f9e4403 rc5833e8 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Apr 1 18:05:16 201613 // Update Count : 1 612 // Last Modified On : Sat Jul 25 19:21:33 2015 13 // Update Count : 11 14 14 // 15 15 … … 63 63 } 64 64 65 Declaration *Mutator::mutate( TraitDecl *aggregateDecl ) {65 Declaration *Mutator::mutate( ContextDecl *aggregateDecl ) { 66 66 handleAggregateDecl( aggregateDecl ); 67 67 return aggregateDecl; … … 274 274 } 275 275 276 Expression *Mutator::mutate( OffsetPackExpr *offsetPackExpr ) {277 mutateAll( offsetPackExpr->get_results(), *this );278 offsetPackExpr->set_type( maybeMutate( offsetPackExpr->get_type(), *this ) );279 return offsetPackExpr;280 }281 282 276 Expression *Mutator::mutate( AttrExpr *attrExpr ) { 283 277 mutateAll( attrExpr->get_results(), *this ); … … 342 336 } 343 337 344 Expression *Mutator::mutate( CompoundLiteralExpr *compLitExpr ) {345 mutateAll( compLitExpr->get_results(), *this );346 compLitExpr->set_type( maybeMutate( compLitExpr->get_type(), *this ) );347 compLitExpr->set_initializer( maybeMutate( compLitExpr->get_initializer(), *this ) );348 return compLitExpr;349 }350 351 338 Type *Mutator::mutate( VoidType *voidType ) { 352 339 mutateAll( voidType->get_forall(), *this ); … … 400 387 } 401 388 402 Type *Mutator::mutate( TraitInstType *aggregateUseType ) {389 Type *Mutator::mutate( ContextInstType *aggregateUseType ) { 403 390 handleReferenceToType( aggregateUseType ); 404 391 mutateAll( aggregateUseType->get_members(), *this ); … … 434 421 } 435 422 436 Type *Mutator::mutate( VarArgsType *varArgsType ) {437 mutateAll( varArgsType->get_forall(), *this );438 return varArgsType;439 }440 441 423 Initializer *Mutator::mutate( SingleInit *singleInit ) { 442 424 singleInit->set_value( singleInit->get_value()->acceptMutator( *this ) ); -
src/SynTree/Mutator.h
r0f9e4403 rc5833e8 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Apr 1 17:26:56 201613 // Update Count : 1012 // Last Modified On : Thu Nov 19 22:26:16 2015 13 // Update Count : 8 14 14 // 15 15 #include <cassert> … … 31 31 virtual Declaration* mutate( UnionDecl *aggregateDecl ); 32 32 virtual Declaration* mutate( EnumDecl *aggregateDecl ); 33 virtual Declaration* mutate( TraitDecl *aggregateDecl );33 virtual Declaration* mutate( ContextDecl *aggregateDecl ); 34 34 virtual TypeDecl* mutate( TypeDecl *typeDecl ); 35 35 virtual Declaration* mutate( TypedefDecl *typeDecl ); … … 67 67 virtual Expression* mutate( UntypedOffsetofExpr *offsetofExpr ); 68 68 virtual Expression* mutate( OffsetofExpr *offsetofExpr ); 69 virtual Expression* mutate( OffsetPackExpr *offsetPackExpr );70 69 virtual Expression* mutate( AttrExpr *attrExpr ); 71 70 virtual Expression* mutate( LogicalExpr *logicalExpr ); … … 77 76 virtual Expression* mutate( AsmExpr *asmExpr ); 78 77 virtual Expression* mutate( UntypedValofExpr *valofExpr ); 79 virtual Expression* mutate( CompoundLiteralExpr *compLitExpr );80 78 81 79 virtual Type* mutate( VoidType *basicType ); … … 87 85 virtual Type* mutate( UnionInstType *aggregateUseType ); 88 86 virtual Type* mutate( EnumInstType *aggregateUseType ); 89 virtual Type* mutate( TraitInstType *aggregateUseType );87 virtual Type* mutate( ContextInstType *aggregateUseType ); 90 88 virtual Type* mutate( TypeInstType *aggregateUseType ); 91 89 virtual Type* mutate( TupleType *tupleType ); 92 90 virtual Type* mutate( TypeofType *typeofType ); 93 91 virtual Type* mutate( AttrType *attrType ); 94 virtual Type* mutate( VarArgsType *varArgsType );95 92 96 93 virtual Initializer* mutate( SingleInit *singleInit ); -
src/SynTree/ReferenceToType.cc
r0f9e4403 rc5833e8 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 17:28:51 201613 // Update Count : 512 // Last Modified On : Sun Jun 7 08:31:48 2015 13 // Update Count : 4 14 14 // 15 15 … … 83 83 std::string EnumInstType::typeString() const { return "enum"; } 84 84 85 std::string TraitInstType::typeString() const { return "context"; }85 std::string ContextInstType::typeString() const { return "context"; } 86 86 87 TraitInstType::TraitInstType( const TraitInstType &other ) : Parent( other ) {87 ContextInstType::ContextInstType( const ContextInstType &other ) : Parent( other ) { 88 88 cloneAll( other.members, members ); 89 89 } 90 90 91 TraitInstType::~TraitInstType() {91 ContextInstType::~ContextInstType() { 92 92 deleteAll( members ); 93 93 } -
src/SynTree/Statement.cc
r0f9e4403 rc5833e8 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // Statement.cc -- 7 // Statement.cc -- 8 8 // 9 9 // Author : Richard C. Bilson … … 36 36 ExprStmt::ExprStmt( std::list<Label> _labels, Expression *_expr ) : Statement( _labels ), expr( _expr ) {} 37 37 38 ExprStmt::ExprStmt( const ExprStmt &other ) : Statement( other ), expr( maybeClone( other.expr ) ) {} 39 40 ExprStmt::~ExprStmt() { 41 delete expr; 42 } 38 ExprStmt::~ExprStmt() {} 43 39 44 40 void ExprStmt::print( std::ostream &os, int indent ) const { 45 41 os << string( indent, ' ' ) << "Expression Statement:" << endl; 46 42 expr->print( os, indent + 2 ); 47 } 43 } 48 44 49 45 50 46 AsmStmt::AsmStmt( std::list<Label> labels, bool voltile, ConstantExpr *instruction, std::list<Expression *> output, std::list<Expression *> input, std::list<ConstantExpr *> clobber, std::list<Label> gotolabels ) : Statement( labels ), voltile( voltile ), instruction( instruction ), output( output ), input( input ), clobber( clobber ), gotolabels( gotolabels ) {} 51 52 AsmStmt::AsmStmt( const AsmStmt & other ) : Statement( other ), voltile( other.voltile ), instruction( maybeClone( other.instruction ) ), gotolabels( other.gotolabels ) {53 cloneAll( other.output, output );54 cloneAll( other.input, input );55 cloneAll( other.clobber, clobber );56 }57 47 58 48 AsmStmt::~AsmStmt() { … … 70 60 os << endl << std::string( indent, ' ' ) << "output: " << endl; 71 61 printAll( output, os, indent + 2 ); 72 } // if 62 } // if 73 63 if ( ! input.empty() ) { 74 64 os << std::string( indent, ' ' ) << "input: " << endl << std::string( indent, ' ' ); … … 79 69 printAll( clobber, os, indent + 2 ); 80 70 } // if 81 } 71 } 82 72 83 73 … … 103 93 ReturnStmt::ReturnStmt( std::list<Label> labels, Expression *_expr, bool throwP ) : Statement( labels ), expr( _expr ), isThrow( throwP ) {} 104 94 105 ReturnStmt::ReturnStmt( const ReturnStmt & other ) : Statement( other ), expr( maybeClone( other.expr ) ), isThrow( other.isThrow ) {}106 107 95 ReturnStmt::~ReturnStmt() { 108 96 delete expr; … … 118 106 Statement( _labels ), condition( _condition ), thenPart( _thenPart ), elsePart( _elsePart ) {} 119 107 120 IfStmt::IfStmt( const IfStmt & other ) :121 Statement( other ), condition( maybeClone( other.condition ) ), thenPart( maybeClone( other.thenPart ) ), elsePart( maybeClone( other.elsePart ) ) {}122 123 108 IfStmt::~IfStmt() {} 124 109 … … 138 123 SwitchStmt::SwitchStmt( std::list<Label> _labels, Expression * _condition, std::list<Statement *> &_branches ): 139 124 Statement( _labels ), condition( _condition ), branches( _branches ) { 140 }141 142 SwitchStmt::SwitchStmt( const SwitchStmt & other ):143 Statement( other ), condition( maybeClone( other.condition ) ) {144 cloneAll( other.branches, branches );145 125 } 146 126 … … 165 145 } 166 146 167 CaseStmt::CaseStmt( std::list<Label> _labels, Expression *_condition, std::list<Statement *> &_statements, bool deflt ) throw ( SemanticError ) : 147 CaseStmt::CaseStmt( std::list<Label> _labels, Expression *_condition, std::list<Statement *> &_statements, bool deflt ) throw ( SemanticError ) : 168 148 Statement( _labels ), condition( _condition ), stmts( _statements ), _isDefault( deflt ) { 169 149 if ( isDefault() && condition != 0 ) 170 150 throw SemanticError("default with conditions"); 171 }172 173 CaseStmt::CaseStmt( const CaseStmt & other ) :174 Statement( other ), condition( maybeClone(other.condition ) ), _isDefault( other._isDefault ) {175 cloneAll( other.stmts, stmts );176 151 } 177 152 … … 206 181 } 207 182 208 ChooseStmt::ChooseStmt( const ChooseStmt & other ):209 Statement( other ), condition( maybeClone( other.condition ) ) {210 cloneAll( other.branches, branches );211 }212 213 183 ChooseStmt::~ChooseStmt() { 214 184 delete condition; … … 238 208 } 239 209 240 WhileStmt::WhileStmt( const WhileStmt & other ):241 Statement( other ), condition( maybeClone( other.condition ) ), body( maybeClone( other.body ) ), isDoWhile( other.isDoWhile ) {242 }243 244 210 WhileStmt::~WhileStmt() { 245 211 delete body; … … 257 223 ForStmt::ForStmt( std::list<Label> labels, std::list<Statement *> initialization_, Expression *condition_, Expression *increment_, Statement *body_ ): 258 224 Statement( labels ), initialization( initialization_ ), condition( condition_ ), increment( increment_ ), body( body_ ) { 259 }260 261 ForStmt::ForStmt( const ForStmt & other ):262 Statement( other ), condition( maybeClone( other.condition ) ), increment( maybeClone( other.increment ) ), body( maybeClone( other.body ) ) {263 cloneAll( other.initialization, initialization );264 265 225 } 266 226 … … 281 241 os << string( indent, ' ' ) << "For Statement" << endl ; 282 242 283 os << string( indent + 2, ' ' ) << "initialization: \n"; 243 os << string( indent + 2, ' ' ) << "initialization: \n"; 284 244 for ( std::list<Statement *>::const_iterator it = initialization.begin(); it != initialization.end(); ++it ) { 285 245 (*it)->print( os, indent + 4 ); 286 246 } 287 247 288 os << "\n" << string( indent + 2, ' ' ) << "condition: \n"; 248 os << "\n" << string( indent + 2, ' ' ) << "condition: \n"; 289 249 if ( condition != 0 ) 290 250 condition->print( os, indent + 4 ); 291 251 292 os << "\n" << string( indent + 2, ' ' ) << "increment: \n"; 252 os << "\n" << string( indent + 2, ' ' ) << "increment: \n"; 293 253 if ( increment != 0 ) 294 254 increment->print( os, indent + 4 ); 295 255 296 os << "\n" << string( indent + 2, ' ' ) << "statement block: \n"; 256 os << "\n" << string( indent + 2, ' ' ) << "statement block: \n"; 297 257 if ( body != 0 ) 298 258 body->print( os, indent + 4 ); … … 305 265 } 306 266 307 TryStmt::TryStmt( const TryStmt &other ) : Statement( other ), block( maybeClone( other.block ) ), finallyBlock( maybeClone( other.finallyBlock ) ) { 308 cloneAll( other.handlers, handlers ); 267 TryStmt::TryStmt( const TryStmt &other ) : Statement( other.labels ) { 268 block = other.block; 269 std::copy( other.handlers.begin(), other.handlers.end(), back_inserter( handlers ) ); 270 finallyBlock = other.finallyBlock; 309 271 } 310 272 … … 332 294 CatchStmt::CatchStmt( std::list<Label> labels, Declaration *_decl, Statement *_body, bool isCatchRest ) : 333 295 Statement( labels ), decl ( _decl ), body( _body ), catchRest ( isCatchRest ) { 334 }335 336 CatchStmt::CatchStmt( const CatchStmt & other ) :337 Statement( other ), decl ( maybeClone( other.decl ) ), body( maybeClone( other.body ) ), catchRest ( other.catchRest ) {338 296 } 339 297 … … 361 319 } 362 320 363 FinallyStmt::FinallyStmt( const FinallyStmt & other ) : Statement( other ), block( maybeClone( other.block ) ) {364 }365 366 321 FinallyStmt::~FinallyStmt() { 367 322 delete block; … … 376 331 NullStmt::NullStmt( std::list<Label> labels ) : CompoundStmt( labels ) {} 377 332 NullStmt::NullStmt() : CompoundStmt( std::list<Label>() ) {} 333 NullStmt::~NullStmt() {} 378 334 379 335 void NullStmt::print( std::ostream &os, int indent ) const { -
src/SynTree/Statement.h
r0f9e4403 rc5833e8 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // Statement.h -- 7 // Statement.h -- 8 8 // 9 9 // Author : Richard C. Bilson … … 57 57 public: 58 58 ExprStmt( std::list<Label> labels, Expression *expr ); 59 ExprStmt( const ExprStmt &other );60 59 virtual ~ExprStmt(); 61 60 … … 74 73 public: 75 74 AsmStmt( std::list<Label> labels, bool voltile, ConstantExpr *instruction, std::list<Expression *> input, std::list<Expression *> output, std::list<ConstantExpr *> clobber, std::list<Label> gotolabels ); 76 AsmStmt( const AsmStmt &other );77 75 virtual ~AsmStmt(); 78 76 … … 105 103 public: 106 104 IfStmt( std::list<Label> labels, Expression *condition, Statement *thenPart, Statement *elsePart ); 107 IfStmt( const IfStmt &other );108 105 virtual ~IfStmt(); 109 106 … … 114 111 Statement *get_elsePart() { return elsePart; } 115 112 void set_elsePart( Statement *newValue ) { elsePart = newValue; } 116 113 117 114 virtual IfStmt *clone() const { return new IfStmt( *this ); } 118 115 virtual void accept( Visitor &v ) { v.visit( this ); } … … 128 125 public: 129 126 SwitchStmt( std::list<Label> labels, Expression *condition, std::list<Statement *> &branches ); 130 SwitchStmt( const SwitchStmt &other );131 127 virtual ~SwitchStmt(); 132 128 … … 150 146 public: 151 147 ChooseStmt( std::list<Label> labels, Expression *condition, std::list<Statement *> &branches ); 152 ChooseStmt( const ChooseStmt &other );153 148 virtual ~ChooseStmt(); 154 149 … … 182 177 class CaseStmt : public Statement { 183 178 public: 184 CaseStmt( std::list<Label> labels, Expression *conditions, 179 CaseStmt( std::list<Label> labels, Expression *conditions, 185 180 std::list<Statement *> &stmts, bool isdef = false ) throw(SemanticError); 186 CaseStmt( const CaseStmt &other );187 181 virtual ~CaseStmt(); 188 182 … … 198 192 std::list<Statement *> &get_statements() { return stmts; } 199 193 void set_statements( std::list<Statement *> &newValue ) { stmts = newValue; } 200 194 201 195 virtual void accept( Visitor &v ) { v.visit( this ); } 202 196 virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); } … … 214 208 WhileStmt( std::list<Label> labels, Expression *condition, 215 209 Statement *body, bool isDoWhile = false ); 216 WhileStmt( const WhileStmt &other );217 210 virtual ~WhileStmt(); 218 211 … … 223 216 bool get_isDoWhile() { return isDoWhile; } 224 217 void set_isDoWhile( bool newValue ) { isDoWhile = newValue; } 225 218 226 219 virtual WhileStmt *clone() const { return new WhileStmt( *this ); } 227 220 virtual void accept( Visitor &v ) { v.visit( this ); } … … 238 231 ForStmt( std::list<Label> labels, std::list<Statement *> initialization, 239 232 Expression *condition = 0, Expression *increment = 0, Statement *body = 0 ); 240 ForStmt( const ForStmt &other );241 233 virtual ~ForStmt(); 242 234 … … 249 241 Statement *get_body() { return body; } 250 242 void set_body( Statement *newValue ) { body = newValue; } 251 243 252 244 virtual ForStmt *clone() const { return new ForStmt( *this ); } 253 245 virtual void accept( Visitor &v ) { v.visit( this ); } … … 267 259 BranchStmt( std::list<Label> labels, Label target, Type ) throw (SemanticError); 268 260 BranchStmt( std::list<Label> labels, Expression *computedTarget, Type ) throw (SemanticError); 261 virtual ~BranchStmt() {} 269 262 270 263 Label get_originalTarget() { return originalTarget; } 271 264 Label get_target() { return target; } 272 265 void set_target( Label newValue ) { target = newValue; } 273 266 274 267 Expression *get_computedTarget() { return computedTarget; } 275 268 void set_target( Expression * newValue ) { computedTarget = newValue; } … … 293 286 public: 294 287 ReturnStmt( std::list<Label> labels, Expression *expr, bool throwP = false ); 295 ReturnStmt( const ReturnStmt &other );296 288 virtual ~ReturnStmt(); 297 289 298 290 Expression *get_expr() { return expr; } 299 291 void set_expr( Expression *newValue ) { expr = newValue; } 300 292 301 293 virtual ReturnStmt *clone() const { return new ReturnStmt( *this ); } 302 294 virtual void accept( Visitor &v ) { v.visit( this ); } … … 313 305 NullStmt(); 314 306 NullStmt( std::list<Label> labels ); 307 virtual ~NullStmt(); 315 308 316 309 virtual NullStmt *clone() const { return new NullStmt( *this ); } … … 318 311 virtual NullStmt *acceptMutator( Mutator &m ) { return m.mutate( this ); } 319 312 virtual void print( std::ostream &os, int indent = 0 ) const; 320 321 private: 322 }; 323 324 class TryStmt : public Statement { 313 314 private: 315 }; 316 317 class TryStmt : public Statement { 325 318 public: 326 319 TryStmt( std::list<Label> labels, CompoundStmt *tryBlock, std::list<Statement *> &handlers, FinallyStmt *finallyBlock = 0 ); … … 339 332 virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); } 340 333 virtual void print( std::ostream &os, int indent = 0 ) const; 341 334 342 335 private: 343 336 CompoundStmt *block; 344 337 std::list<Statement *> handlers; 345 338 FinallyStmt *finallyBlock; 346 }; 339 }; 347 340 348 341 class CatchStmt : public Statement { 349 342 public: 350 343 CatchStmt( std::list<Label> labels, Declaration *decl, Statement *body, bool isCatchRest = false ); 351 CatchStmt( const CatchStmt &other );352 344 virtual ~CatchStmt(); 353 345 … … 357 349 Statement *get_body() { return body; } 358 350 void set_body( Statement *newValue ) { body = newValue; } 359 351 360 352 virtual CatchStmt *clone() const { return new CatchStmt( *this ); } 361 353 virtual void accept( Visitor &v ) { v.visit( this ); } 362 354 virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); } 363 355 virtual void print( std::ostream &os, int indent = 0 ) const; 364 356 365 357 private: 366 358 Declaration *decl; … … 369 361 }; 370 362 371 class FinallyStmt : public Statement { 363 class FinallyStmt : public Statement { 372 364 public: 373 365 FinallyStmt( std::list<Label> labels, CompoundStmt *block ); 374 FinallyStmt( const FinallyStmt &other );375 366 virtual ~FinallyStmt(); 376 367 377 368 CompoundStmt *get_block() const { return block; } 378 369 void set_block( CompoundStmt *newValue ) { block = newValue; } 379 370 380 371 virtual FinallyStmt *clone() const { return new FinallyStmt( *this ); } 381 372 virtual void accept( Visitor &v ) { v.visit( this ); } … … 384 375 private: 385 376 CompoundStmt *block; 386 }; 377 }; 387 378 388 379 -
src/SynTree/SynTree.h
r0f9e4403 rc5833e8 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Apr 1 16:47:44 201613 // Update Count : 512 // Last Modified On : Thu Jul 23 23:25:04 2015 13 // Update Count : 3 14 14 // 15 15 … … 30 30 class UnionDecl; 31 31 class EnumDecl; 32 class TraitDecl;32 class ContextDecl; 33 33 class NamedTypeDecl; 34 34 class TypeDecl; … … 72 72 class UntypedOffsetofExpr; 73 73 class OffsetofExpr; 74 class OffsetPackExpr;75 74 class AttrExpr; 76 75 class LogicalExpr; … … 82 81 class AsmExpr; 83 82 class UntypedValofExpr; 84 class CompoundLiteralExpr;85 83 86 84 class Type; … … 94 92 class UnionInstType; 95 93 class EnumInstType; 96 class TraitInstType;94 class ContextInstType; 97 95 class TypeInstType; 98 96 class TupleType; 99 97 class TypeofType; 100 98 class AttrType; 101 class VarArgsType;102 99 103 100 class Initializer; -
src/SynTree/Type.h
r0f9e4403 rc5833e8 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Wed Mar 2 17:29:08 201613 // Update Count : 2111 // Last Modified By : Rob Schluntz 12 // Last Modified On : Fri Dec 18 14:46:18 2015 13 // Update Count : 18 14 14 // 15 15 … … 296 296 }; 297 297 298 class TraitInstType : public ReferenceToType {298 class ContextInstType : public ReferenceToType { 299 299 typedef ReferenceToType Parent; 300 300 public: 301 TraitInstType( const Type::Qualifiers &tq, const std::string &name ) : Parent( tq, name ) {}302 TraitInstType( const TraitInstType &other );303 ~ TraitInstType();301 ContextInstType( const Type::Qualifiers &tq, const std::string &name ) : Parent( tq, name ) {} 302 ContextInstType( const ContextInstType &other ); 303 ~ContextInstType(); 304 304 305 305 std::list< Declaration* >& get_members() { return members; } 306 306 307 virtual TraitInstType *clone() const { return new TraitInstType( *this ); }307 virtual ContextInstType *clone() const { return new ContextInstType( *this ); } 308 308 virtual void accept( Visitor &v ) { v.visit( this ); } 309 309 virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); } … … 400 400 }; 401 401 402 /// Represents the GCC built-in varargs type403 class VarArgsType : public Type {404 public:405 VarArgsType();406 VarArgsType( Type::Qualifiers tq );407 408 virtual VarArgsType *clone() const { return new VarArgsType( *this ); }409 virtual void accept( Visitor &v ) { v.visit( this ); }410 virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); }411 virtual void print( std::ostream &os, int indent = 0 ) const;412 };413 414 402 inline Type::Qualifiers &Type::Qualifiers::operator+=( const Type::Qualifiers &other ) { 415 403 isConst |= other.isConst; -
src/SynTree/TypeSubstitution.cc
r0f9e4403 rc5833e8 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 17:29:15 201613 // Update Count : 312 // Last Modified On : Mon May 18 11:10:04 2015 13 // Update Count : 2 14 14 // 15 15 … … 190 190 } 191 191 192 Type * TypeSubstitution::mutate( TraitInstType *aggregateUseType ) {192 Type * TypeSubstitution::mutate( ContextInstType *aggregateUseType ) { 193 193 return handleType( aggregateUseType ); 194 194 } … … 196 196 Type * TypeSubstitution::mutate( TupleType *tupleType ) { 197 197 return handleType( tupleType ); 198 }199 200 Type * TypeSubstitution::mutate( VarArgsType *varArgsType ) {201 return handleType( varArgsType );202 198 } 203 199 -
src/SynTree/TypeSubstitution.h
r0f9e4403 rc5833e8 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 17:33:19 201613 // Update Count : 212 // Last Modified On : Mon May 18 11:12:30 2015 13 // Update Count : 1 14 14 // 15 15 … … 72 72 virtual Type* mutate(UnionInstType *aggregateUseType); 73 73 virtual Type* mutate(EnumInstType *aggregateUseType); 74 virtual Type* mutate( TraitInstType *aggregateUseType);74 virtual Type* mutate(ContextInstType *aggregateUseType); 75 75 virtual Type* mutate(TupleType *tupleType); 76 virtual Type* mutate(VarArgsType *varArgsType);77 76 78 77 // TODO: worry about traversing into a forall-qualified function type or type decl with assertions -
src/SynTree/Visitor.cc
r0f9e4403 rc5833e8 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Apr 1 18:05:13 201613 // Update Count : 1 812 // Last Modified On : Fri Jul 24 16:11:05 2015 13 // Update Count : 15 14 14 // 15 15 … … 56 56 } 57 57 58 void Visitor::visit( TraitDecl *aggregateDecl ) {58 void Visitor::visit( ContextDecl *aggregateDecl ) { 59 59 visit( static_cast< AggregateDecl* >( aggregateDecl ) ); 60 60 } … … 230 230 } 231 231 232 void Visitor::visit( OffsetPackExpr *offsetPackExpr ) {233 acceptAll( offsetPackExpr->get_results(), *this );234 maybeAccept( offsetPackExpr->get_type(), *this );235 }236 237 232 void Visitor::visit( AttrExpr *attrExpr ) { 238 233 acceptAll( attrExpr->get_results(), *this ); … … 289 284 } 290 285 291 void Visitor::visit( CompoundLiteralExpr *compLitExpr ) {292 acceptAll( compLitExpr->get_results(), *this );293 maybeAccept( compLitExpr->get_type(), *this );294 maybeAccept( compLitExpr->get_initializer(), *this );295 }296 297 286 void Visitor::visit( VoidType *voidType ) { 298 287 acceptAll( voidType->get_forall(), *this ); … … 337 326 } 338 327 339 void Visitor::visit( TraitInstType *aggregateUseType ) {328 void Visitor::visit( ContextInstType *aggregateUseType ) { 340 329 visit( static_cast< ReferenceToType * >( aggregateUseType ) ); 341 330 acceptAll( aggregateUseType->get_members(), *this ); … … 366 355 } 367 356 368 void Visitor::visit( VarArgsType *varArgsType ) {369 acceptAll( varArgsType->get_forall(), *this );370 }371 372 357 void Visitor::visit( SingleInit *singleInit ) { 373 358 singleInit->get_value()->accept( *this ); -
src/SynTree/Visitor.h
r0f9e4403 rc5833e8 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Apr 1 17:26:55201613 // Update Count : 712 // Last Modified On : Mon Jan 25 21:20:44 2016 13 // Update Count : 5 14 14 // 15 15 … … 31 31 virtual void visit( UnionDecl *aggregateDecl ); 32 32 virtual void visit( EnumDecl *aggregateDecl ); 33 virtual void visit( TraitDecl *aggregateDecl );33 virtual void visit( ContextDecl *aggregateDecl ); 34 34 virtual void visit( TypeDecl *typeDecl ); 35 35 virtual void visit( TypedefDecl *typeDecl ); … … 67 67 virtual void visit( UntypedOffsetofExpr *offsetofExpr ); 68 68 virtual void visit( OffsetofExpr *offsetofExpr ); 69 virtual void visit( OffsetPackExpr *offsetPackExpr );70 69 virtual void visit( AttrExpr *attrExpr ); 71 70 virtual void visit( LogicalExpr *logicalExpr ); … … 77 76 virtual void visit( AsmExpr *asmExpr ); 78 77 virtual void visit( UntypedValofExpr *valofExpr ); 79 virtual void visit( CompoundLiteralExpr *compLitExpr );80 78 81 79 virtual void visit( VoidType *basicType ); … … 87 85 virtual void visit( UnionInstType *aggregateUseType ); 88 86 virtual void visit( EnumInstType *aggregateUseType ); 89 virtual void visit( TraitInstType *aggregateUseType );87 virtual void visit( ContextInstType *aggregateUseType ); 90 88 virtual void visit( TypeInstType *aggregateUseType ); 91 89 virtual void visit( TupleType *tupleType ); 92 90 virtual void visit( TypeofType *typeofType ); 93 91 virtual void visit( AttrType *attrType ); 94 virtual void visit( VarArgsType *varArgsType );95 92 96 93 virtual void visit( SingleInit *singleInit ); -
src/SynTree/module.mk
r0f9e4403 rc5833e8 25 25 SynTree/TypeofType.cc \ 26 26 SynTree/AttrType.cc \ 27 SynTree/VarArgsType.cc \28 27 SynTree/Constant.cc \ 29 28 SynTree/Expression.cc \ … … 46 45 SynTree/Visitor.cc \ 47 46 SynTree/Mutator.cc \ 47 SynTree/CodeGenVisitor.cc \ 48 48 SynTree/TypeSubstitution.cc 49 49 -
src/Tuples/FlattenTuple.cc
r0f9e4403 rc5833e8 49 49 void FlattenTuple::CollectArgs::visit( UntypedOffsetofExpr *expr ) { currentArgs.insert( currentArgs.end(), expr ); } 50 50 void FlattenTuple::CollectArgs::visit( OffsetofExpr *expr ) { currentArgs.insert( currentArgs.end(), expr ); } 51 void FlattenTuple::CollectArgs::visit( OffsetPackExpr *expr ) { currentArgs.insert( currentArgs.end(), expr ); }52 51 void FlattenTuple::CollectArgs::visit( AttrExpr *expr ) { currentArgs.insert( currentArgs.end(), expr ); } 53 52 void FlattenTuple::CollectArgs::visit( LogicalExpr *expr ) { currentArgs.insert( currentArgs.end(), expr ); } -
src/Tuples/FlattenTuple.h
r0f9e4403 rc5833e8 45 45 virtual void visit( UntypedOffsetofExpr * ); 46 46 virtual void visit( OffsetofExpr * ); 47 virtual void visit( OffsetPackExpr * );48 47 virtual void visit( AttrExpr * ); 49 48 virtual void visit( LogicalExpr * ); -
src/driver/Makefile.in
r0f9e4403 rc5833e8 196 196 esac; \ 197 197 done; \ 198 echo ' cd $(top_srcdir) && $(AUTOMAKE) -- foreignsrc/driver/Makefile'; \198 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/driver/Makefile'; \ 199 199 $(am__cd) $(top_srcdir) && \ 200 $(AUTOMAKE) -- foreignsrc/driver/Makefile200 $(AUTOMAKE) --gnu src/driver/Makefile 201 201 .PRECIOUS: Makefile 202 202 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status -
src/driver/cfa.cc
r0f9e4403 rc5833e8 10 10 // Created On : Tue Aug 20 13:44:49 2002 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Apr 6 14:04:22201613 // Update Count : 1 3212 // Last Modified On : Thu Jan 28 18:24:06 2016 13 // Update Count : 127 14 14 // 15 15 … … 165 165 nargs += 1; 166 166 } else if ( prefix( arg, "-std=" ) ) { 167 std_flag = true; // -std=XX provided167 std_flag = true; // std=XX provided 168 168 args[nargs] = argv[i]; // pass the argument along 169 169 nargs += 1; … … 307 307 nargs += 1; 308 308 if ( ! std_flag ) { // default c99, if none specified 309 args[nargs] = "-std= gnu99";309 args[nargs] = "-std=c99"; 310 310 nargs += 1; 311 311 } // if -
src/examples/Makefile.in
r0f9e4403 rc5833e8 189 189 esac; \ 190 190 done; \ 191 echo ' cd $(top_srcdir) && $(AUTOMAKE) -- foreignsrc/examples/Makefile'; \191 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/examples/Makefile'; \ 192 192 $(am__cd) $(top_srcdir) && \ 193 $(AUTOMAKE) -- foreignsrc/examples/Makefile193 $(AUTOMAKE) --gnu src/examples/Makefile 194 194 .PRECIOUS: Makefile 195 195 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status -
src/examples/abs.c
r0f9e4403 rc5833e8 10 10 // Created On : Thu Jan 28 18:26:16 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 15:07:26201613 // Update Count : 5112 // Last Modified On : Wed Feb 17 09:32:04 2016 13 // Update Count : 44 14 14 // 15 15 … … 20 20 char ch = -65; 21 21 sout | "char\t\t\t" | ch | "\tabs " | abs( ch ) | endl; 22 sout | "signed int\t\t" | -65 | "\tabs " | abs( -65 ) | endl;23 sout | "signed long int\t\t" | -65l | "\tabs " | abs( -65l ) | endl;24 sout | "signed long long int\t" | -65ll | "\tabs " | abs( -65ll ) | endl;25 sout | "float\t\t\t" | -65.0f | "\tabs " | abs( -65.0f ) | endl;26 sout | "double\t\t\t" | -65.0 | "\tabs " | abs( -65.0 ) | endl;27 sout | "long double\t\t" | -65.0l | "\tabs " | abs( -65.0l ) | endl;28 sout | "float _Complex\t\t" | -65.0F-2.0iF | "\tabs " | abs( -65.0F-2.0iF ) | endl;29 sout | "double _Complex\t\t" | -65.0D-2.0iD | "\tabs " | abs( -65.0D-2.0iD ) | endl;30 sout | "long double _Complex\t" | -65.0L-2.0iL | "\tabs " | abs( -65.0L-2.0iL ) | endl;22 sout | "signed int\t\t" | -65 | "\tabs " | abs( -65 ) | endl; 23 sout | "signed long int\t\t" | -65l | "\tabs " | abs( -65l ) | endl; 24 sout | "signed long long int\t" | -65ll | "\tabs " | abs( -65ll ) | endl; 25 sout | "float\t\t\t" | -65.0f | "\tabs " | abs( -65.0f ) | endl; 26 sout | "double\t\t\t" | -65.0 | "\tabs " | abs( -65.0 ) | endl; 27 sout | "long double\t\t" | -65.0l | "\tabs " | abs( -65.0l ) | endl; 28 sout | "float _Complex\t\t" | -65.0F-2.0iF | "\tabs " | abs( -65.0F-2.0iF ) | endl; 29 sout | "double _Complex\t\t" | -65.0D-2.0iD | "\tabs " | abs( -65.0D-2.0iD ) | endl; 30 sout | "long double _Complex\t" | -65.0L-2.0iL | "\tabs " | abs( -65.0L-2.0iL ) | endl; 31 31 } // main 32 32 -
src/examples/array.c
r0f9e4403 rc5833e8 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Ma r 2 18:13:52 201613 // Update Count : 312 // Last Modified On : Wed May 27 18:10:13 2015 13 // Update Count : 2 14 14 // 15 15 16 16 #include "array.h" 17 17 18 /// forall( otype array_type, elt_type | bounded_array( array_type, elt_type ) )18 /// forall( type array_type, elt_type | bounded_array( array_type, elt_type ) ) 19 19 /// [ array_iterator begin, array_iterator end ] 20 20 /// get_iterators( array_type array ) … … 25 25 26 26 // The first element is always at index 0. 27 forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) )27 forall( type array_type, type elt_type | bounded_array( array_type, elt_type ) ) 28 28 elt_type * begin( array_type array ) { 29 29 return &array[ 0 ]; … … 31 31 32 32 // The end iterator should point one past the last element. 33 forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) )33 forall( type array_type, type elt_type | bounded_array( array_type, elt_type ) ) 34 34 elt_type * end( array_type array ) { 35 35 return &array[ last( array ) ] + 1; -
src/examples/array.h
r0f9e4403 rc5833e8 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 18:13:35201613 // Update Count : 512 // Last Modified On : Tue Jan 26 17:09:29 2016 13 // Update Count : 3 14 14 // 15 15 … … 21 21 // An array has contiguous elements accessible in any order using integer indicies. The first 22 22 // element has index 0. 23 trait array( otype array_type, otype elt_type ) {23 context array( type array_type, type elt_type ) { 24 24 lvalue elt_type ?[?]( array_type, int ); 25 25 }; 26 26 27 27 // A bounded array is an array that carries its maximum index with it. 28 trait bounded_array( otype array_type, otype elt_type | array( array_type, elt_type ) ) {28 context bounded_array( type array_type, type elt_type | array( array_type, elt_type ) ) { 29 29 int last( array_type ); 30 30 }; … … 34 34 typedef int array_iterator; 35 35 36 /// forall( otype array_type, elt_type | bounded_array( array_type, elt_type ) )36 /// forall( type array_type, elt_type | bounded_array( array_type, elt_type ) ) 37 37 /// [ array_iterator begin, array_iterator end ] get_iterators( array_type ); 38 38 … … 40 40 // A bounded array can be iterated over by using a pointer to the element type. These functions 41 41 // return iterators corresponding to the first element and the one-past-the-end element, STL-style. 42 forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) )42 forall( type array_type, type elt_type | bounded_array( array_type, elt_type ) ) 43 43 elt_type *begin( array_type ); 44 44 45 forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) )45 forall( type array_type, type elt_type | bounded_array( array_type, elt_type ) ) 46 46 elt_type *end( array_type ); 47 47 -
src/examples/ato.c
r0f9e4403 rc5833e8 11 11 // Created On : Thu Feb 4 08:10:57 2016 12 12 // Last Modified By : Peter A. Buhr 13 // Last Modified On : Mon Feb 29 17:57:35201614 // Update Count : 4 413 // Last Modified On : Wed Feb 17 11:44:03 2016 14 // Update Count : 42 15 15 // 16 16 … … 24 24 int main( void ) { 25 25 int i = ato( "-123" ); 26 sout | i | "-123" | endl;26 sout | i | ' ' | "-123" | endl; 27 27 unsigned int ui = ato( "123" ); 28 sout | ui | "123" | endl;28 sout | ui | ' ' | "123" | endl; 29 29 long int li = ato( "-123" ); 30 sout | li | "-123" | endl;30 sout | li | ' ' | "-123" | endl; 31 31 unsigned long int uli = ato( "123" ); 32 sout | uli | "123" | endl;32 sout | uli | ' ' | "123" | endl; 33 33 long long int lli = ato( "-123" ); 34 sout | lli | "-123" | endl;34 sout | lli | ' ' | "-123" | endl; 35 35 unsigned long long int ulli = ato( "123" ); 36 sout | ulli | "123" | endl;36 sout | ulli | ' ' | "123" | endl; 37 37 float f = ato( "-123.456" ); 38 sout | f | "-123.456" | endl;38 sout | f | ' ' | "-123.456" | endl; 39 39 double d = ato( "-123.4567890123456" ); 40 sout | d | "-123.4567890123456" | endl;40 sout | d | ' ' | "-123.4567890123456" | endl; 41 41 long double ld = ato( "-123.45678901234567890123456789" ); 42 sout | ld | "-123.45678901234567890123456789" | endl;42 sout | ld | ' ' | "-123.45678901234567890123456789" | endl; 43 43 float _Complex fc = ato( "-123.456-123.456i" ); 44 sout | fc | "-123.456-123.456i" | endl;44 sout | fc | ' ' | "-123.456-123.456i" | endl; 45 45 double _Complex dc = ato( "-123.4567890123456+123.4567890123456i" ); 46 sout | dc | "-123.4567890123456+123.4567890123456i" | endl;46 sout | dc | ' ' | "-123.4567890123456+123.4567890123456i" | endl; 47 47 long double _Complex ldc = ato( "123.45678901234567890123456789-123.45678901234567890123456789i" ); 48 sout | ldc | "123.45678901234567890123456789-123.45678901234567890123456789i" | endl;48 sout | ldc | ' ' | "123.45678901234567890123456789-123.45678901234567890123456789i" | endl; 49 49 long double _Complex ldc2 = ato( "123.45678901234-123.4567890i" ); 50 sout | ldc2 | "123.45678901234-123.4567890i" | endl;50 sout | ldc2 | ' ' | "123.45678901234567890123456789-123.45678901234567890123456789i" | endl; 51 51 } // main 52 52 -
src/examples/constants.c
r0f9e4403 rc5833e8 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Mar 11 16:27:38201613 // Update Count : 8112 // Last Modified On : Mon Jan 25 23:44:12 2016 13 // Update Count : 76 14 14 // 15 15 … … 44 44 0x_ff_FF_ff_FF_ff_FF_ff_FF; 45 45 9_223_372_036_854_775_807; 46 18_446_744_073_709_551_615 UL;46 18_446_744_073_709_551_615; 47 47 3.141_59f; 48 48 3.14159; … … 53 53 L'\x_ff_ee'; 54 54 L_"\x_ff_ee"; 55 L"a_b\r\ vyc\u_00_40 x_y_z\xff_AA";56 L_"a_b\r\ vyc\u_00_40\55 L"a_b\r\Qyc\u_00_40 x_y_z\xff_AA"; 56 L_"a_b\r\Qyc\u_00_40\ 57 57 x_y_z\xff_AA"; 58 58 "abc" "def" "ghi"; -
src/examples/ctxts.c
r0f9e4403 rc5833e8 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Ma r 2 18:10:21 201613 // Update Count : 312 // Last Modified On : Wed May 27 18:11:19 2015 13 // Update Count : 2 14 14 // 15 15 16 trait has_f( type T ) {16 context has_f( type T ) { 17 17 T f( T ); 18 18 }; 19 19 20 trait has_g( type U | has_f( U ) ) {20 context has_g( type U | has_f( U ) ) { 21 21 U g( U ); 22 22 }; -
src/examples/fstream_test.c
r0f9e4403 rc5833e8 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Mar 6 20:58:29201613 // Update Count : 5412 // Last Modified On : Wed Feb 17 11:45:43 2016 13 // Update Count : 43 14 14 // 15 15 … … 18 18 int main( void ) { 19 19 int nombre; 20 sout | "Entrez un nombre, s'il vous plaît: " | endl;20 sout | "Entrez un nombre, s'il vous plaît:\n"; 21 21 sin | &nombre; 22 sout | "Vous avez entré" | nombre | "stocké à l'adresse" | &nombre | endl; 23 sout | "nombre" | nombre | "est" 24 | (nombre > 0 ? "plus grand que" : nombre == 0 ? "égal à" : "moins de") 25 | "zéro" | endl; 22 sout | "Vous avez entré " | nombre | " stocké à l'adresse " | &nombre | endl; 23 sout | "nombre " | nombre | " est " 24 | (nombre > 0 ? "plus grand que" : 25 nombre == 0 ? "égal à" : "moins de") 26 | " zéro" | endl; 26 27 27 sout | "Entrez trois nombres, s'il vous plaît: " | endl;28 sout | "Entrez trois nombres, s'il vous plaît:\n"; 28 29 int i, j, k; 29 30 sin | &i | &j | &k; 30 sout | "Vous avez entré" | "i:" | "" | i | "j:" | "" | j | "k:" | "" | k | endl; 31 sout | "Vous avez entré " | "i:" | i | " j:" | j | " k:" | k | endl; 32 33 sout | 3 | ' ' | 3.5 | ' ' | 'a' | ' ' | "abc" | endl; 31 34 } 32 35 -
src/examples/hello.c
r0f9e4403 rc5833e8 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Feb 29 18:06:17201613 // Update Count : 1012 // Last Modified On : Wed Feb 17 12:11:45 2016 13 // Update Count : 8 14 14 // 15 15 … … 17 17 18 18 int main() { 19 sout | "Bonjour au monde! " | endl;19 sout | "Bonjour au monde!\n"; 20 20 } 21 21 -
src/examples/huge.c
r0f9e4403 rc5833e8 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Mar 8 22:16:32 201613 // Update Count : 212 // Last Modified On : Wed May 27 18:15:34 2015 13 // Update Count : 1 14 14 // 15 15 16 int huge( int n, forall( otype T ) T (*f)( T ) ) {16 int huge( int n, forall( type T ) T (*f)( T ) ) { 17 17 if ( n <= 0 ) 18 18 return f( 0 ); -
src/examples/identity.c
r0f9e4403 rc5833e8 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Mar 8 22:15:08201613 // Update Count : 1 312 // Last Modified On : Wed Feb 17 12:17:32 2016 13 // Update Count : 10 14 14 // 15 15 16 16 #include <fstream> 17 17 18 forall( otype T )18 forall( type T ) 19 19 T identity( T t ) { 20 20 return t; -
src/examples/includes.c
r0f9e4403 rc5833e8 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 23:28:02 201613 // Update Count : 32 812 // Last Modified On : Mon Dec 21 13:54:09 2015 13 // Update Count : 322 14 14 // 15 15 … … 43 43 #include <ctype.h> 44 44 #include <curses.h> 45 #include <demangle.h> 46 #include <dialog.h> 45 #include <demangle.h> // enum / contains "type" 46 #include <dialog.h> // enum / contains "type" 47 47 #include <dirent.h> 48 48 #include <dis-asm.h> … … 56 56 #include <err.h> 57 57 #include <errno.h> 58 #include <error.h> 58 59 #if 0 59 #include <error.h>60 #endif61 60 #include <eti.h> 62 #include <evdns.h> 61 #include <evdns.h> // subdirectory event2 contains "type" 63 62 #include <event.h> 64 #include <evhttp.h> 65 #if 0 63 #include <evhttp.h> // enum / subdirectory event2 contains "type" 66 64 #include <evrpc.h> 67 65 #include <evutil.h> 68 66 #include <execinfo.h> 69 #include <expat.h> 67 #include <expat.h> // enum / contains "type" and "context" 70 68 #include <expat_config.h> 71 69 #include <expat_external.h> … … 76 74 #include <fmtmsg.h> 77 75 #include <fnmatch.h> 78 #include <form.h> 76 #include <form.h> // contains "type" 79 77 #include <fpu_control.h> 80 78 #include <fstab.h> … … 83 81 #include <ftw.h> 84 82 #include <gconv.h> 85 //#include <gcrypt.h> 83 //#include <gcrypt.h> // enum / contains "type" 86 84 //#include <gcrypt-module.h> 87 85 #include <getopt.h> … … 109 107 #include <limits.h> 110 108 #include <locale.h> 111 #include <math.h> 109 #include <math.h> // contains "type" 112 110 #include <ncurses.h> 113 111 #include <setjmp.h> -
src/examples/index.h
r0f9e4403 rc5833e8 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Ma r 2 18:10:46 201613 // Update Count : 212 // Last Modified On : Wed May 27 18:17:31 2015 13 // Update Count : 1 14 14 // 15 15 16 trait index( type T ) {16 context index( type T ) { 17 17 T ?+?( T, T ); 18 18 T ?-?( T, T ); -
src/examples/it_out.c
r0f9e4403 rc5833e8 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Mar 8 22:14:39 201613 // Update Count : 812 // Last Modified On : Wed May 27 18:41:23 2015 13 // Update Count : 4 14 14 // 15 15 16 16 typedef unsigned long streamsize_type; 17 17 18 trait ostream( dtype os_type ) {18 context ostream( dtype os_type ) { 19 19 os_type *write( os_type *, const char *, streamsize_type ); 20 20 int fail( os_type * ); 21 21 }; 22 22 23 trait writeable( otype T ) {23 context writeable( type T ) { 24 24 forall( dtype os_type | ostream( os_type ) ) os_type * ?<<?( os_type *, T ); 25 25 }; … … 29 29 forall( dtype os_type | ostream( os_type ) ) os_type * ?<<?( os_type *, const char * ); 30 30 31 trait istream( dtype is_type ) {31 context istream( dtype is_type ) { 32 32 is_type *read( is_type *, char *, streamsize_type ); 33 33 is_type *unread( is_type *, char ); … … 36 36 }; 37 37 38 trait readable( otype T ) {38 context readable( type T ) { 39 39 forall( dtype is_type | istream( is_type ) ) is_type * ?<<?( is_type *, T ); 40 40 }; … … 43 43 forall( dtype is_type | istream( is_type ) ) is_type * ?>>?( is_type *, int* ); 44 44 45 trait iterator( otype iterator_type, otype elt_type ) {45 context iterator( type iterator_type, type elt_type ) { 46 46 iterator_type ?++( iterator_type* ); 47 47 iterator_type ++?( iterator_type* ); … … 52 52 }; 53 53 54 forall( otype elt_type | writeable( elt_type ),55 otype iterator_type | iterator( iterator_type, elt_type ),54 forall( type elt_type | writeable( elt_type ), 55 type iterator_type | iterator( iterator_type, elt_type ), 56 56 dtype os_type | ostream( os_type ) ) 57 57 void write_all( iterator_type begin, iterator_type end, os_type *os ); 58 58 59 forall( otype elt_type | writeable( elt_type ),60 otype iterator_type | iterator( iterator_type, elt_type ),59 forall( type elt_type | writeable( elt_type ), 60 type iterator_type | iterator( iterator_type, elt_type ), 61 61 dtype os_type | ostream( os_type ) ) 62 62 void write_all( elt_type begin, iterator_type end, os_type *os ) { -
src/examples/limits.c
r0f9e4403 rc5833e8 98 98 // Local Variables: // 99 99 // tab-width: 4 // 100 // compile-command: "cfa limits.c" //100 // compile-command: "cfa min.c" // 101 101 // End: // -
src/examples/minmax.c
r0f9e4403 rc5833e8 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Feb 29 23:45:16201613 // Update Count : 4 912 // Last Modified On : Wed Feb 17 12:17:53 2016 13 // Update Count : 47 14 14 // 15 15 … … 23 23 24 24 sout | "char\t\t\t" | 'z' | ' ' | 'a' | "\tmin " | min( 'z', 'a' ) | endl; 25 sout | "signed int\t\t" | 4 | 3 | "\tmin" | min( 4, 3 ) | endl;26 sout | "unsigned int\t\t" | 4u | 3u | "\tmin" | min( 4u, 3u ) | endl;27 sout | "signed long int\t\t" | 4l | 3l | "\tmin" | min( 4l, 3l ) | endl;28 sout | "unsigned long int\t" | 4ul | 3ul | "\tmin" | min( 4ul, 3ul ) | endl;29 sout | "signed long long int\t" | 4ll | 3ll | "\tmin" | min( 4ll, 3ll ) | endl;30 sout | "unsigned long long int\t" | 4ull | 3ull | "\tmin" | min( 4ull, 3ull ) | endl;31 sout | "float\t\t\t" | 4.0f | 3.1f | "\tmin" | min( 4.0f, 3.1f ) | endl;32 sout | "double\t\t\t" | 4.0 | 3.1 | "\tmin" | min( 4.0, 3.1 ) | endl;33 sout | "long double\t\t" | 4.0l | 3.1l | "\tmin" | min( 4.0l, 3.1l ) | endl;25 sout | "signed int\t\t" | 4 | ' ' | 3 | "\tmin " | min( 4, 3 ) | endl; 26 sout | "unsigned int\t\t" | 4u | ' ' | 3u | "\tmin " | min( 4u, 3u ) | endl; 27 sout | "signed long int\t\t" | 4l | ' ' | 3l | "\tmin " | min( 4l, 3l ) | endl; 28 sout | "unsigned long int\t" | 4ul | ' ' | 3ul | "\tmin " | min( 4ul, 3ul ) | endl; 29 sout | "signed long long int\t" | 4ll | ' ' | 3ll | "\tmin " | min( 4ll, 3ll ) | endl; 30 sout | "unsigned long long int\t" | 4ull | ' ' | 3ull | "\tmin " | min( 4ull, 3ull ) | endl; 31 sout | "float\t\t\t" | 4.0f | ' ' | 3.1f | "\tmin " | min( 4.0f, 3.1f ) | endl; 32 sout | "double\t\t\t" | 4.0 | ' ' | 3.1 | "\tmin " | min( 4.0, 3.1 ) | endl; 33 sout | "long double\t\t" | 4.0l | ' ' | 3.1l | "\tmin " | min( 4.0l, 3.1l ) | endl; 34 34 35 35 sout | endl; 36 36 37 37 sout | "char\t\t\t" | 'z' | ' ' | 'a' | "\tmax " | max( 'z', 'a' ) | endl; 38 sout | "signed int\t\t" | 4 | 3 | "\tmax" | max( 4, 3 ) | endl;39 sout | "unsigned int\t\t" | 4u | 3u | "\tmax" | max( 4u, 3u ) | endl;40 sout | "signed long int\t\t" | 4l | 3l | "\tmax" | max( 4l, 3l ) | endl;41 sout | "unsigned long int\t" | 4ul | 3ul | "\tmax" | max( 4ul, 3ul ) | endl;42 sout | "signed long long int\t" | 4ll | 3ll | "\tmax" | max( 4ll, 3ll ) | endl;43 sout | "unsigned long long int\t" | 4ull | 3ull | "\tmax" | max( 4ull, 3ull ) | endl;44 sout | "float\t\t\t" | 4.0f | 3.1f | "\tmax" | max( 4.0f, 3.1f ) | endl;45 sout | "double\t\t\t" | 4.0 | 3.1 | "\tmax" | max( 4.0, 3.1 ) | endl;46 sout | "long double\t\t" | 4.0l | 3.1l | "\tmax" | max( 4.0l, 3.1l ) | endl;38 sout | "signed int\t\t" | 4 | ' ' | 3 | "\tmax " | max( 4, 3 ) | endl; 39 sout | "unsigned int\t\t" | 4u | ' ' | 3u | "\tmax " | max( 4u, 3u ) | endl; 40 sout | "signed long int\t\t" | 4l | ' ' | 3l | "\tmax " | max( 4l, 3l ) | endl; 41 sout | "unsigned long int\t" | 4ul | ' ' | 3ul | "\tmax " | max( 4ul, 3ul ) | endl; 42 sout | "signed long long int\t" | 4ll | ' ' | 3ll | "\tmax " | max( 4ll, 3ll ) | endl; 43 sout | "unsigned long long int\t" | 4ull | ' ' | 3ull | "\tmax " | max( 4ull, 3ull ) | endl; 44 sout | "float\t\t\t" | 4.0f | ' ' | 3.1f | "\tmax " | max( 4.0f, 3.1f ) | endl; 45 sout | "double\t\t\t" | 4.0 | ' ' | 3.1 | "\tmax " | max( 4.0, 3.1 ) | endl; 46 sout | "long double\t\t" | 4.0l | ' ' | 3.1l | "\tmax " | max( 4.0l, 3.1l ) | endl; 47 47 } // main 48 48 -
src/examples/new.c
r0f9e4403 rc5833e8 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Mar 8 22:13:20201613 // Update Count : 412 // Last Modified On : Mon Jan 25 23:33:55 2016 13 // Update Count : 2 14 14 // 15 15 16 forall( otype T )16 forall( type T ) 17 17 void f( T *t ) { 18 18 t--; -
src/examples/prolog.c
r0f9e4403 rc5833e8 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Mar 8 22:09:39 201613 // Update Count : 512 // Last Modified On : Wed May 27 18:25:52 2015 13 // Update Count : 1 14 14 // 15 15 16 #include <fstream> 16 extern "C" { extern int printf( const char *fmt, ... ); } 17 17 18 void printResult( int x ) { sout | "int" | endl; }19 void printResult( double x ) { sout | "double" | endl; }20 void printResult( char * x ) { sout | "char*" | endl; }18 void printResult( int x ) { printf( "int\n" ); } 19 void printResult( double x ) { printf( "double\n" ); } 20 void printResult( char * x ) { printf( "char*\n" ); } 21 21 22 22 void is_arithmetic( int x ) {} … … 25 25 void is_integer( int x ) {} 26 26 27 trait ArithmeticType( otype T ) {27 context ArithmeticType( type T ) { 28 28 void is_arithmetic( T ); 29 29 }; 30 30 31 trait IntegralType( otype T | ArithmeticType( T ) ) {31 context IntegralType( type T | ArithmeticType( T ) ) { 32 32 void is_integer( T ); 33 33 }; 34 34 35 forall( otype T | IntegralType( T ) | { void printResult( T ); } )35 forall( type T | IntegralType( T ) | { void printResult( T ); } ) 36 36 void hornclause( T param ) { 37 37 printResult( param ); -
src/examples/quad.c
r0f9e4403 rc5833e8 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Mar 8 22:07:02201613 // Update Count : 812 // Last Modified On : Wed Feb 17 12:19:24 2016 13 // Update Count : 6 14 14 // 15 15 16 16 #include <fstream> 17 17 18 forall( otype T | { T ?*?( T, T ); } )18 forall( type T | { T ?*?( T, T ); } ) 19 19 T square( T t ) { 20 20 return t * t; 21 21 } 22 22 23 forall( otype U | { U square( U ); } )23 forall( type U | { U square( U ); } ) 24 24 U quad( U u ) { 25 25 return square( square( u ) ); … … 28 28 int main() { 29 29 int N = 2; 30 sout | "result of quad of " | N | "is" | quad( N ) | endl;30 sout | "result of quad of " | N | " is " | quad( N ) | endl; 31 31 } 32 32 -
src/examples/random.c
r0f9e4403 rc5833e8 7 7 8 8 int main() { 9 rand 48seed( getpid() ); // set random seed9 randseed( getpid() ); // set random seed 10 10 11 11 // test polymorphic calls to random and stream 12 char c = rand 48();12 char c = random(); 13 13 sout | c | endl; 14 int i = rand 48();14 int i = random(); 15 15 sout | i | endl; 16 unsigned int ui = rand 48();16 unsigned int ui = random(); 17 17 sout | ui | endl; 18 long int li = rand 48();18 long int li = random(); 19 19 sout | li | endl; 20 unsigned long int uli = rand 48();20 unsigned long int uli = random(); 21 21 sout | uli | endl; 22 float f = rand 48();22 float f = random(); 23 23 sout | f | endl; 24 double d = rand 48();24 double d = random(); 25 25 sout | d | endl; 26 float _Complex fc = rand 48();26 float _Complex fc = random(); 27 27 sout | fc | endl; 28 double _Complex dc = rand 48();28 double _Complex dc = random(); 29 29 sout | dc | endl; 30 long double _Complex ldc = rand 48();30 long double _Complex ldc = random(); 31 31 sout | ldc | endl; 32 32 } // main -
src/examples/searchsort.c
r0f9e4403 rc5833e8 11 11 // Created On : Thu Feb 4 18:17:50 2016 12 12 // Last Modified By : Peter A. Buhr 13 // Last Modified On : Tue Mar 22 22:16:46201614 // Update Count : 5513 // Last Modified On : Wed Feb 17 12:21:04 2016 14 // Update Count : 46 15 15 // 16 16 … … 36 36 sout | *v | ", "; 37 37 } // for 38 sout | endl | endl;39 40 // descending sort/search by changing < to >41 for ( unsigned int i = 0; i < size; i += 1 ) {42 iarr[i] = i + 1;43 sout | iarr[i] | ", ";44 } // for45 sout | endl;46 {47 int ?<?( int x, int y ) { return x > y; }48 qsort( iarr, size );49 for ( unsigned int i = 0; i < size; i += 1 ) {50 sout | iarr[i] | ", ";51 } // for52 sout | endl;53 for ( unsigned int i = 0; i < size; i += 1 ) {54 int *v = bsearch( size - i, iarr, size );55 sout | *v | ", ";56 } // for57 }58 38 sout | endl | endl; 59 39 -
src/examples/simplePoly.c
r0f9e4403 rc5833e8 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Mar 8 22:06:41 201613 // Update Count : 312 // Last Modified On : Wed May 27 18:31:17 2015 13 // Update Count : 2 14 14 // 15 15 16 forall( otype T, otype U | { T f( T, U ); } )16 forall( type T, type U | { T f( T, U ); } ) 17 17 T q( T t, U u ) { 18 18 return f( t, u ); -
src/examples/simpler.c
r0f9e4403 rc5833e8 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Mar 8 22:06:30 201613 // Update Count : 212 // Last Modified On : Wed May 27 18:31:48 2015 13 // Update Count : 1 14 14 // 15 15 16 forall( otype T ) T id( T, T );16 forall( type T ) T id( T, T ); 17 17 18 18 int main() { -
src/examples/specialize.c
r0f9e4403 rc5833e8 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Mar 8 22:06:17 201613 // Update Count : 312 // Last Modified On : Wed May 27 18:32:26 2015 13 // Update Count : 2 14 14 // 15 15 … … 39 39 } 40 40 41 forall( otype T ) T f( T t )41 forall( type T ) T f( T t ) 42 42 { 43 43 printf( "in f; sizeof T is %d\n", sizeof( T ) ); -
src/examples/square.c
r0f9e4403 rc5833e8 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Mar 8 22:05:48 201613 // Update Count : 2 712 // Last Modified On : Wed Feb 17 12:21:58 2016 13 // Update Count : 26 14 14 // 15 15 16 16 #include <fstream> 17 17 18 forall( otype T | { T ?*?( T, T ); } )18 forall( type T | { T ?*?( T, T ); } ) 19 19 T square( T t ) { 20 20 return t * t; -
src/examples/sum.c
r0f9e4403 rc5833e8 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Mar 4 15:06:47201613 // Update Count : 1 9612 // Last Modified On : Tue Feb 16 23:49:31 2016 13 // Update Count : 189 14 14 // 15 15 16 16 #include <fstream> 17 17 18 trait sumable( otype T ) {18 context sumable( type T ) { 19 19 const T 0; 20 20 T ?+?( T, T ); … … 24 24 }; // sumable 25 25 26 forall( otype T | sumable( T ) )26 forall( type T | sumable( T ) ) 27 27 T sum( unsigned int n, T a[] ) { 28 28 T total = 0; // instantiate T, select 0 … … 47 47 a[i] = v; 48 48 } // for 49 sout | "sum from " | low | "to" | High | "is"50 | (int)sum( size, a ) | " " | ", check" | (int)s | endl;49 sout | "sum from " | low | " to " | High | " is " 50 | (int)sum( size, a ) | ", check " | (int)s | endl; 51 51 52 52 int s = 0, a[size], v = low; … … 55 55 a[i] = (int)v; 56 56 } // for 57 sout | "sum from " | low | "to" | High | "is"58 | sum( size, (int *)a ) | " " | ", check" | (int)s | endl;57 sout | "sum from " | low | " to " | High | " is " 58 | sum( size, (int *)a ) | ", check " | (int)s | endl; 59 59 60 60 float s = 0.0, a[size], v = low / 10.0; … … 63 63 a[i] = (float)v; 64 64 } // for 65 sout | "sum from " | low / 10.0 | "to" | High / 10.0 | "is"66 | sum( size, (float *)a ) | " " | ", check" | (float)s | endl;65 sout | "sum from " | low / 10.0 | " to " | High / 10.0 | " is " 66 | sum( size, (float *)a ) | ", check " | (float)s | endl; 67 67 68 68 double s = 0, a[size], v = low / 10.0; … … 71 71 a[i] = (double)v; 72 72 } // for 73 sout | "sum from " | low / 10.0 | "to" | High / 10.0 | "is"74 | sum( size, (double *)a ) | " " | ", check" | (double)s | endl;73 sout | "sum from " | low / 10.0 | " to " | High / 10.0 | " is " 74 | sum( size, (double *)a ) | ", check " | (double)s | endl; 75 75 76 76 struct S { int i, j; } 0 = { 0, 0 }, 1 = { 1, 1 }; … … 79 79 S ++?( S *t ) { *t += 1; return *t; } 80 80 S ?++( S *t ) { S temp = *t; *t += 1; return temp; } 81 ofstream * ?|?( ofstream * os, S v ) { return os | v.i | v.j; }81 ofstream * ?|?( ofstream * os, S v ) { return os | v.i | ' ' | v.j; } 82 82 83 83 S s = 0, a[size], v = { low, low }; … … 86 86 a[i] = (S)v; 87 87 } // for 88 sout | "sum from " | low | "to" | High | "is"89 | sum( size, (S *)a ) | " " | ", check" | (S)s | endl;88 sout | "sum from " | low | " to " | High | " is " 89 | sum( size, (S *)a ) | ", check " | (S)s | endl; 90 90 } // main 91 91 -
src/examples/swap.c
r0f9e4403 rc5833e8 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 16:15:11201613 // Update Count : 6 512 // Last Modified On : Wed Feb 17 12:22:12 2016 13 // Update Count : 64 14 14 // 15 15 … … 54 54 55 55 float f1 = 1.5, f2 = 2.5; 56 sout | "float\t\t\t" | f1 | ' ' | f2 | "\t\t swap ";56 sout | "float\t\t\t" | f1 | ' ' | f2 | "\t\t\tswap "; 57 57 swap( &f1, &f2 ); 58 58 sout | '\t' | f1 | ' ' | f2 | endl; 59 59 60 60 double d1 = 1.5, d2 = 2.5; 61 sout | "double\t\t\t" | d1 | ' ' | d2 | "\t\t swap ";61 sout | "double\t\t\t" | d1 | ' ' | d2 | "\t\t\tswap "; 62 62 swap( &d1, &d2 ); 63 63 sout | '\t' | d1 | ' ' | d2 | endl; 64 64 65 65 long double ld1 = 1.5, ld2 = 2.5; 66 sout | "long double\t\t" | ld1 | ' ' | ld2 | "\t\t swap ";66 sout | "long double\t\t" | ld1 | ' ' | ld2 | "\t\t\tswap "; 67 67 swap( &ld1, &ld2 ); 68 68 sout | '\t' | ld1 | ' ' | ld2 | endl; -
src/examples/tests/vector_test.out.txt
r0f9e4403 rc5833e8 1 1 enter N elements and C-d on a separate line: 2 2 Array elements: 3 1 2 3 4 5 3 1 2 3 4 5 4 4 Array elements reversed: 5 5 4 3 2 1 5 5 4 3 2 1 -
src/examples/twice.c
r0f9e4403 rc5833e8 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Mar 8 22:04:58201613 // Update Count : 1 612 // Last Modified On : Wed Feb 17 12:23:25 2016 13 // Update Count : 13 14 14 // 15 15 16 16 #include <fstream> 17 17 18 forall( otype T | { T ?+?( T, T ); T ?++( T * ); [T] ?+=?( T *, T ); } )18 forall( type T | { T ?+?( T, T ); T ?++( T * ); [T] ?+=?( T *, T ); } ) 19 19 T twice( const T t ) { 20 20 return t + t; … … 27 27 char ?++( char *op ) { char temp = *op; *op += 1; return temp; } 28 28 29 sout | twice( 'a' ) | ' ' | twice( 1 ) | twice( 3.2 ) | endl;29 sout | twice( 'a' ) | ' ' | twice( 1 ) | ' ' | twice( 3.2 ) | endl; 30 30 } 31 31 -
src/libcfa/Makefile.am
r0f9e4403 rc5833e8 11 11 ## Created On : Sun May 31 08:54:01 2015 12 12 ## Last Modified By : Peter A. Buhr 13 ## Last Modified On : Wed Apr 6 21:10:44201614 ## Update Count : 1 2313 ## Last Modified On : Wed Feb 3 11:19:35 2016 14 ## Update Count : 117 15 15 ############################################################################### 16 16 … … 60 60 ${CC} ${CFLAGS} -c -o $@ $< 61 61 62 libs = limits stdlib iostream fstream iterator rational62 libs = stdlib iostream fstream iterator 63 63 libcfa_a_SOURCES = libcfa-prelude.c ${libs:=.c} 64 64 65 cheaders = # expat66 cfaheaders = #limits65 cheaders = bfd bfdlink demangle dialog evdns evhttp evrpc expat fcntl form gcrypt math 66 cfaheaders = limits 67 67 include_HEADERS = ${cheaders:=.h} ${libs} ${cfaheaders} 68 68 -
src/libcfa/Makefile.in
r0f9e4403 rc5833e8 83 83 libcfa_a_AR = $(AR) $(ARFLAGS) 84 84 libcfa_a_LIBADD = 85 am__objects_1 = limits.$(OBJEXT) stdlib.$(OBJEXT) iostream.$(OBJEXT) \86 fstream.$(OBJEXT) iterator.$(OBJEXT) rational.$(OBJEXT)85 am__objects_1 = stdlib.$(OBJEXT) iostream.$(OBJEXT) fstream.$(OBJEXT) \ 86 iterator.$(OBJEXT) 87 87 am_libcfa_a_OBJECTS = libcfa-prelude.$(OBJEXT) $(am__objects_1) 88 88 libcfa_a_OBJECTS = $(am_libcfa_a_OBJECTS) … … 213 213 MAINTAINERCLEANFILES = ${addprefix ${libdir}/,${cfalib_DATA}} \ 214 214 ${addprefix ${libdir}/,${lib_LIBRARIES}} ${includedir}/* 215 libs = limits stdlib iostream fstream iterator rational215 libs = stdlib iostream fstream iterator 216 216 libcfa_a_SOURCES = libcfa-prelude.c ${libs:=.c} 217 cheaders = # expat218 cfaheaders = #limits217 cheaders = bfd bfdlink demangle dialog evdns evhttp evrpc expat fcntl form gcrypt math 218 cfaheaders = limits 219 219 include_HEADERS = ${cheaders:=.h} ${libs} ${cfaheaders} 220 220 all: all-am … … 231 231 esac; \ 232 232 done; \ 233 echo ' cd $(top_srcdir) && $(AUTOMAKE) -- foreignsrc/libcfa/Makefile'; \233 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libcfa/Makefile'; \ 234 234 $(am__cd) $(top_srcdir) && \ 235 $(AUTOMAKE) -- foreignsrc/libcfa/Makefile235 $(AUTOMAKE) --gnu src/libcfa/Makefile 236 236 .PRECIOUS: Makefile 237 237 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status … … 297 297 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iterator.Po@am__quote@ 298 298 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa-prelude.Po@am__quote@ 299 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/limits.Po@am__quote@300 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rational.Po@am__quote@301 299 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stdlib.Po@am__quote@ 302 300 -
src/libcfa/builtins.cf
r0f9e4403 rc5833e8 390 390 int __builtin_sprintf(char *, const char *, ...); 391 391 int __builtin_sscanf(const char *, const char *, ...); 392 int __builtin_vfprintf(struct _IO_FILE *, const char *, __builtin_va_list);393 int __builtin_vfscanf(struct _IO_FILE *, const char *, __builtin_va_list);394 int __builtin_vprintf(const char *, __builtin_va_list);395 int __builtin_vscanf(const char *, __builtin_va_list);396 int __builtin_vsnprintf(char *, unsigned long, const char *, __builtin_va_list);397 int __builtin_vsprintf(char *, const char *, __builtin_va_list);398 int __builtin_vsscanf(const char *, const char *, __builtin_va_list);392 int __builtin_vfprintf(struct _IO_FILE *, const char *, void **); 393 int __builtin_vfscanf(struct _IO_FILE *, const char *, void **); 394 int __builtin_vprintf(const char *, void **); 395 int __builtin_vscanf(const char *, void **); 396 int __builtin_vsnprintf(char *, unsigned long, const char *, void **); 397 int __builtin_vsprintf(char *, const char *, void **); 398 int __builtin_vsscanf(const char *, const char *, void **); 399 399 int __builtin_isalnum(int); 400 400 int __builtin_isalpha(int); … … 534 534 void __builtin_unwind_init(); 535 535 void __builtin_update_setjmp_buf(void *, int); 536 void __builtin_va_copy( __builtin_va_list, __builtin_va_list);537 void __builtin_va_end( __builtin_va_list);538 void __builtin_va_start( __builtin_va_list, ...);536 void __builtin_va_copy(void **, void **); 537 void __builtin_va_end(void **); 538 void __builtin_va_start(void **, ...); 539 539 int __builtin_va_arg_pack(); 540 540 int __builtin_va_arg_pack_len(); … … 563 563 int __builtin___snprintf_chk(char *, unsigned long, int, unsigned long, const char *, ...); 564 564 int __builtin___sprintf_chk(char *, int, unsigned long, const char *, ...); 565 int __builtin___vsnprintf_chk(char *, unsigned long, int, unsigned long, const char *, __builtin_va_list);566 int __builtin___vsprintf_chk(char *, int, unsigned long, const char *, __builtin_va_list);565 int __builtin___vsnprintf_chk(char *, unsigned long, int, unsigned long, const char *, void **); 566 int __builtin___vsprintf_chk(char *, int, unsigned long, const char *, void **); 567 567 int __builtin___fprintf_chk(struct _IO_FILE *, int, const char *, ...); 568 568 int __builtin___printf_chk(int, const char *, ...); 569 int __builtin___vfprintf_chk(struct _IO_FILE *, int, const char *, __builtin_va_list);570 int __builtin___vprintf_chk(int, const char *, __builtin_va_list);569 int __builtin___vfprintf_chk(struct _IO_FILE *, int, const char *, void **); 570 int __builtin___vprintf_chk(int, const char *, void **); 571 571 void __cyg_profile_func_enter(void *, void *); 572 572 void __cyg_profile_func_exit(void *, void *); … … 583 583 const char * __builtin_FUNCTION(); 584 584 int __builtin_LINE(); 585 typedef void ** __builtin_va_list; 585 586 extern const char *__PRETTY_FUNCTION__; 587 typedef int wchar_t; -
src/libcfa/fstream
r0f9e4403 rc5833e8 7 7 // fstream -- 8 8 // 9 // Author : Peter A. Buhr9 // Author : Richard C. Bilson 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Apr 5 22:37:12201613 // Update Count : 8212 // Last Modified On : Wed Feb 17 14:02:01 2016 13 // Update Count : 22 14 14 // 15 15 … … 19 19 #include "iostream" 20 20 21 enum { separateSize = 16 }; 22 struct ofstream { 23 void *file; 24 _Bool sepDefault; 25 _Bool sepOnOff; 26 char separator[separateSize]; 27 }; // ofstream 21 // implement context ostream 22 struct ofstream; 28 23 29 _Bool sepPrt( ofstream * ); 30 void sepOn( ofstream * ); 31 void sepOff( ofstream * ); 32 void sepReset( ofstream * ); 33 void sepReset( ofstream *, _Bool ); 34 void sepSet( ofstream *, const char * ); 35 const char * sepGet( ofstream * ); 36 _Bool sepDisable( ofstream * ); 37 _Bool sepEnable( ofstream * ); 38 int fail( ofstream * ); 39 int flush( ofstream * ); 40 void open( ofstream *, const char * name, const char * mode ); 41 void close( ofstream * ); 42 ofstream * write( ofstream *, const char * data, unsigned long int size ); 43 int prtfmt( ofstream *, const char fmt[], ... ); 24 int fail( ofstream * os ); 25 int flush( ofstream * os ); 26 void open( ofstream ** os, const char * name, const char * mode ); 27 void close( ofstream * os ); 28 ofstream * write( ofstream * os, const char * data, streamsize_type size ); 44 29 45 30 extern ofstream * sout, * serr; 46 31 47 32 // implement context istream 48 struct ifstream { 49 void *file; 50 }; // ifstream 33 struct ifstream; 51 34 52 35 int fail( ifstream * is ); 53 36 int eof( ifstream * is ); 54 void open( ifstream * is, const char * name, const char * mode );37 void open( ifstream ** is, const char * name, const char * mode ); 55 38 void close( ifstream * is ); 56 ifstream * read( ifstream * is, char * data, unsigned long int size ); 39 ifstream * get( ifstream * is, int * data ); 40 ifstream * read( ifstream * is, char * data, streamsize_type size ); 57 41 ifstream * ungetc( ifstream * is, char c ); 58 int scanfmt( ifstream *, const char fmt[], ... );59 42 60 43 extern ifstream *sin; … … 66 49 // tab-width: 4 // 67 50 // End: // 68 -
src/libcfa/fstream.c
r0f9e4403 rc5833e8 7 7 // fstream.c -- 8 8 // 9 // Author : Peter A. Buhr9 // Author : Richard C. Bilson 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Apr 6 17:55:27201613 // Update Count : 17612 // Last Modified On : Wed Feb 17 14:03:05 2016 13 // Update Count : 76 14 14 // 15 15 … … 17 17 18 18 extern "C" { 19 #include <stdio.h> // vfprintf, vfscanf 20 #include <stdlib.h> // exit 21 #include <stdarg.h> // varargs 22 #include <string.h> // strlen 23 #include <float.h> // DBL_DIG, LDBL_DIG 24 #include <complex.h> // creal, cimag 19 #include <stdio.h> 20 #include <stdlib.h> 25 21 } 26 22 27 #define IO_MSG "I/O error: " 23 struct ofstream { 24 FILE *file; 25 }; 28 26 29 _Bool sepPrt( ofstream * os ) { return os->sepOnOff; } 30 void sepOn( ofstream * os ) { os->sepOnOff = 1; } 31 void sepOff( ofstream * os ) { os->sepOnOff = 0; } 32 void sepReset( ofstream * os ) { os->sepOnOff = os->sepDefault; } 33 void sepReset( ofstream * os, _Bool reset ) { os->sepDefault = reset; os->sepOnOff = os->sepDefault; } 34 void sepSet( ofstream * os, const char * s ) { 35 strncpy( &(os->separator[0]), s, separateSize - 1 ); 36 os->separator[separateSize - 1] = '\0'; 37 } // sepSet 38 const char * sepGet( ofstream * os ) { return &(os->separator[0]); } 39 _Bool sepDisable( ofstream *os ) { 40 _Bool temp = os->sepDefault; 41 os->sepDefault = 0; 42 sepReset( os ); 43 return temp; 44 } // sepDisable 45 _Bool sepEnable( ofstream *os ) { 46 _Bool temp = os->sepDefault; 47 os->sepDefault = 1; 48 sepReset( os ); 49 return temp; 50 } // sepEnable 27 #define IO_MSG "I/O error " 51 28 52 29 int fail( ofstream * os ) { 53 return ferror( (FILE *)(os->file));30 return ferror( os->file ); 54 31 } // fail 55 32 56 33 int flush( ofstream * os ) { 57 return fflush( (FILE *)(os->file));34 return fflush( os->file ); 58 35 } // flush 59 36 60 void open( ofstream * os, const char * name, const char * mode ) { 61 FILE *file = fopen( name, mode ); 62 if ( file == 0 ) { // do not change unless successful 63 fprintf( stderr, IO_MSG "open output file \"%s\", ", name ); 64 perror( 0 ); 37 void open( ofstream ** os, const char * name, const char * mode ) { 38 FILE *t = fopen( name, mode ); 39 if ( t == 0 ) { // do not change unless successful 40 perror( IO_MSG "open output" ); 65 41 exit( EXIT_FAILURE ); 66 42 } // if 67 os->file = file; 68 sepOff( os ); 69 sepSet( os, " " ); 43 (*os)->file = t; 70 44 } // open 71 45 72 46 void close( ofstream * os ) { 73 if ( (FILE *)(os->file) == stdout || (FILE *)(os->file)== stderr ) return;47 if ( os->file == stdout || os->file == stderr ) return; 74 48 75 if ( fclose( (FILE *)(os->file)) == EOF ) {49 if ( fclose( os->file ) == EOF ) { 76 50 perror( IO_MSG "close output" ); 77 51 } // if 78 52 } // close 79 53 80 ofstream * write( ofstream * os, const char * data, unsigned long intsize ) {54 ofstream * write( ofstream * os, const char * data, streamsize_type size ) { 81 55 if ( fail( os ) ) { 82 56 fprintf( stderr, "attempt write I/O on failed stream\n" ); … … 84 58 } // if 85 59 86 if ( fwrite( data, 1, size, (FILE *)(os->file)) != size ) {60 if ( fwrite( data, 1, size, os->file ) != size ) { 87 61 perror( IO_MSG "write" ); 88 62 exit( EXIT_FAILURE ); … … 91 65 } // write 92 66 93 int prtfmt( ofstream * os, const char fmt[], ... ) { 94 va_list args; 67 static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_) }; 68 ofstream *sout = &soutFile; 69 static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_) }; 70 ofstream *serr = &serrFile; 95 71 96 va_start( args, fmt ); 97 int len = vfprintf( (FILE *)(os->file), fmt, args ); 98 if ( len == EOF ) { 99 if ( ferror( (FILE *)(os->file) ) ) { 100 fprintf( stderr, "invalid write\n" ); 72 //--------------------------------------- 73 74 struct ifstream { 75 FILE *file; 76 }; 77 78 int fail( ifstream * is ) { 79 return ferror( is->file ); 80 } // fail 81 82 int eof( ifstream * is ) { 83 return feof( is->file ); 84 } // eof 85 86 ifstream * get( ifstream * is, int * data ) { 87 if ( fscanf( is->file, "%d", data ) == EOF ) { 88 if ( ferror( is->file ) ) { 89 fprintf( stderr, "invalid int read\n" ); 101 90 exit( EXIT_FAILURE ); 102 91 } // if 103 92 } // if 104 va_end( args ); 105 return len; 106 } // prtfmt 93 return is; 94 } // read 107 95 108 109 static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_), 1, 0, { ' ', '\0' } }; 110 ofstream *sout = &soutFile; 111 static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_), 1, 0, { ' ', '\0' } }; 112 ofstream *serr = &serrFile; 113 114 115 //--------------------------------------- 116 117 118 int fail( ifstream * is ) { 119 return ferror( (FILE *)(is->file) ); 120 } // fail 121 122 int eof( ifstream * is ) { 123 return feof( (FILE *)(is->file) ); 124 } // eof 125 126 void open( ifstream * is, const char * name, const char * mode ) { 127 FILE *t = fopen( name, mode ); 128 if ( t == 0 ) { // do not change unless successful 129 fprintf( stderr, IO_MSG "open input file \"%s\", ", name ); 130 perror( 0 ); 131 exit( EXIT_FAILURE ); 132 } // if 133 is->file = t; 134 } // open 135 136 void close( ifstream * is ) { 137 if ( (FILE *)(is->file) == stdin ) return; 138 139 if ( fclose( (FILE *)(is->file) ) == EOF ) { 140 perror( IO_MSG "close input" ); 141 } // if 142 } // close 143 144 ifstream * read( ifstream * is, char * data, unsigned long int size ) { 96 ifstream * read( ifstream * is, char * data, streamsize_type size ) { 145 97 if ( fail( is ) ) { 146 98 fprintf( stderr, "attempt read I/O on failed stream\n" ); … … 148 100 } // if 149 101 150 if ( fread( data, size, 1, (FILE *)(is->file)) == 0 ) {102 if ( fread( data, size, 1, is->file ) == 0 ) { 151 103 perror( IO_MSG "read" ); 152 104 exit( EXIT_FAILURE ); … … 161 113 } // if 162 114 163 if ( ungetc( c, (FILE *)(is->file)) == EOF ) {115 if ( ungetc( c, is->file ) == EOF ) { 164 116 perror( IO_MSG "ungetc" ); 165 117 exit( EXIT_FAILURE ); … … 168 120 } // ungetc 169 121 170 int scanfmt( ifstream * is, const char fmt[], ... ) { 171 va_list args; 122 void open( ifstream ** is, const char * name, const char * mode ) { 123 FILE *t = fopen( name, mode ); 124 if ( t == 0 ) { // do not change unless successful 125 perror( IO_MSG "open input" ); 126 exit( EXIT_FAILURE ); 127 } // if 128 (*is)->file = t; 129 } // open 172 130 173 va_start( args, fmt ); 174 int len = vfscanf( (FILE *)(is->file), fmt, args ); 175 if ( len == EOF ) { 176 if ( ferror( (FILE *)(is->file) ) ) { 177 fprintf( stderr, "invalid read\n" ); 178 exit( EXIT_FAILURE ); 179 } // if 180 } // if 181 va_end( args ); 182 return len; 183 } // prtfmt 131 void close( ifstream * is ) { 132 if ( is->file == stdin ) return; 184 133 134 if ( fclose( is->file ) == EOF ) { 135 perror( IO_MSG "close input" ); 136 } // if 137 } // close 185 138 186 139 static ifstream sinFile = { (FILE *)(&_IO_2_1_stdin_) }; … … 189 142 // Local Variables: // 190 143 // tab-width: 4 // 144 // compile-command: "cfa fstream.c" // 191 145 // End: // -
src/libcfa/iostream
r0f9e4403 rc5833e8 7 7 // iostream -- 8 8 // 9 // Author : Peter A. Buhr9 // Author : Richard C. Bilson 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Apr 10 23:00:12201613 // Update Count : 9212 // Last Modified On : Wed Feb 17 14:04:24 2016 13 // Update Count : 32 14 14 // 15 15 16 #ifndef __IOSTREAM_H__17 #define __IOSTREAM_H__16 #ifndef IOSTREAM_H 17 #define IOSTREAM_H 18 18 19 19 #include "iterator" 20 20 21 trait ostream( dtype ostype ) { 22 _Bool sepPrt( ostype * ); // return separator state (on/off) 23 void sepOn( ostype * ); // turn separator state on 24 void sepOff( ostype * ); // turn separator state off 25 void sepReset( ostype * ); // set separator state to default state 26 void sepReset( ostype *, _Bool ); // set separator and default state 27 void sepSet( ostype *, const char * ); // set separator to string (15 character maximum) 28 const char * sepGet( ostype * ); // get separator string 29 _Bool sepDisable( ostype * ); // set default state to off, and return previous state 30 _Bool sepEnable( ostype * ); // set default state to on, and return previous state 21 typedef unsigned long streamsize_type; 31 22 23 context ostream( dtype ostype ) { 32 24 int fail( ostype * ); 33 25 int flush( ostype * ); 34 void open( ostype * os, const char * name, const char * mode ); 35 void close( ostype * os ); 36 ostype * write( ostype *, const char *, unsigned long int ); 37 int prtfmt( ostype *, const char fmt[], ... ); 26 ostype * write( ostype *, const char *, streamsize_type ); 38 27 }; 39 40 trait writeable( otype T ) { 28 context writeable( type T ) { 41 29 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, T ); 42 30 }; … … 45 33 46 34 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, char ); 47 48 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, short int );49 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned short int );50 35 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, int ); 51 36 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned int ); … … 54 39 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned long int ); 55 40 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned long long int ); 56 57 41 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, float ); // FIX ME: should not be required 58 42 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, double ); 59 43 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, long double ); 60 61 44 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, float _Complex ); 62 45 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, double _Complex ); 63 46 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, long double _Complex ); 64 65 47 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const char * ); 66 48 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const void * ); 67 49 68 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, ostype * (*)( ostype *) );50 forall( dtype ostype, dtype retostype | ostream( ostype ) | ostream( retostype ) ) retostype * ?|?( ostype *os, retostype * (* manip)(ostype*) ); 69 51 forall( dtype ostype | ostream( ostype ) ) ostype * endl( ostype * ); 70 forall( dtype ostype | ostream( ostype ) ) ostype * sepOn( ostype * );71 forall( dtype ostype | ostream( ostype ) ) ostype * sepOff( ostype * );72 forall( dtype ostype | ostream( ostype ) ) ostype * sepDisable( ostype * );73 forall( dtype ostype | ostream( ostype ) ) ostype * sepEnable( ostype * );74 52 75 53 // writes the range [begin, end) to the given stream 76 forall( otype elt_type | writeable( elt_type ), otype iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )54 forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) ) 77 55 void write( iterator_type begin, iterator_type end, os_type *os ); 78 56 79 forall( otype elt_type | writeable( elt_type ), otype iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )57 forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) ) 80 58 void write_reverse( iterator_type begin, iterator_type end, os_type *os ); 81 59 82 60 //--------------------------------------- 83 61 84 trait istream( dtype istype ) {62 context istream( dtype istype ) { 85 63 int fail( istype * ); 86 64 int eof( istype * ); 87 void open( istype * is, const char * name, const char * mode ); 88 void close( istype * is ); 89 istype * read( istype *, char *, unsigned long int ); 65 istype * get( istype *, int * ); 66 istype * read( istype *, char *, streamsize_type ); 90 67 istype * ungetc( istype *, char ); 91 int scanfmt( istype *, const char fmt[], ... );92 68 }; 93 69 94 trait readable( otype T ) {70 context readable( type T ) { 95 71 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, T ); 96 72 }; 97 73 98 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, char * ); 74 forall( dtype istype | istream( istype ) ) 75 istype * ?|?( istype *, char * ); 99 76 100 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, short int * ); 101 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned short int * ); 102 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, int * ); 103 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned int * ); 104 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long int * ); 105 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long long int * ); 106 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned long int * ); 107 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned long long int * ); 77 forall( dtype istype | istream( istype ) ) 78 istype * ?|?( istype *, int * ); 108 79 109 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, float * ); 110 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, double * ); 111 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long double * ); 112 113 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, float _Complex * ); 114 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, double _Complex * ); 115 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long double _Complex * ); 116 117 struct _Istream_cstrUC { char * s; }; 118 _Istream_cstrUC cstr( char * ); 119 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_cstrUC ); 120 121 struct _Istream_cstrC { char * s; int size; }; 122 _Istream_cstrC cstr( char *, int size ); 123 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_cstrC ); 124 125 #endif // __IOSTREAM_H__ 80 #endif // IOSTREAM_H 126 81 127 82 // Local Variables: // -
src/libcfa/iostream.c
r0f9e4403 rc5833e8 7 7 // iostream.c -- 8 8 // 9 // Author : Peter A. Buhr9 // Author : Richard C. Bilson 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Apr 6 16:13:29201613 // Update Count : 27812 // Last Modified On : Wed Feb 17 14:19:56 2016 13 // Update Count : 76 14 14 // 15 15 … … 21 21 #include <float.h> // DBL_DIG, LDBL_DIG 22 22 #include <complex.h> // creal, cimag 23 #include <ctype.h> // isspace, ispunct24 23 } 25 24 26 25 forall( dtype ostype | ostream( ostype ) ) 27 26 ostype * ?|?( ostype *os, char c ) { 28 prtfmt( os, "%c", c ); 29 sepOff( os ); 30 return os; 31 } // ?|? 32 33 forall( dtype ostype | ostream( ostype ) ) 34 ostype * ?|?( ostype *os, short int si ) { 35 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 36 sepReset( os ); 37 prtfmt( os, "%hd", si ); 38 return os; 39 } // ?|? 40 41 forall( dtype ostype | ostream( ostype ) ) 42 ostype * ?|?( ostype *os, unsigned short int usi ) { 43 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 44 sepReset( os ); 45 prtfmt( os, "%hu", usi ); 46 return os; 27 return write( os, &c, 1 ); 47 28 } // ?|? 48 29 49 30 forall( dtype ostype | ostream( ostype ) ) 50 31 ostype * ?|?( ostype *os, int i ) { 51 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 52 sepReset( os ); 53 prtfmt( os, "%d", i ); 54 return os; 32 char buffer[32]; 33 return write( os, buffer, sprintf( buffer, "%d", i ) ); 55 34 } // ?|? 56 35 57 36 forall( dtype ostype | ostream( ostype ) ) 58 ostype * ?|?( ostype *os, unsigned int ui ) { 59 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 60 sepReset( os ); 61 prtfmt( os, "%u", ui ); 62 return os; 37 ostype * ?|?( ostype *os, unsigned int i ) { 38 char buffer[32]; 39 return write( os, buffer, sprintf( buffer, "%u", i ) ); 63 40 } // ?|? 64 41 65 42 forall( dtype ostype | ostream( ostype ) ) 66 ostype * ?|?( ostype *os, long int li ) { 67 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 68 sepReset( os ); 69 prtfmt( os, "%ld", li ); 70 return os; 43 ostype * ?|?( ostype *os, long int i ) { 44 char buffer[32]; 45 return write( os, buffer, sprintf( buffer, "%ld", i ) ); 71 46 } // ?|? 72 47 73 48 forall( dtype ostype | ostream( ostype ) ) 74 ostype * ?|?( ostype *os, unsigned long int uli ) { 75 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 76 sepReset( os ); 77 prtfmt( os, "%lu", uli ); 78 return os; 49 ostype * ?|?( ostype *os, long long int i ) { 50 char buffer[32]; 51 return write( os, buffer, sprintf( buffer, "%lld", i ) ); 79 52 } // ?|? 80 53 81 54 forall( dtype ostype | ostream( ostype ) ) 82 ostype * ?|?( ostype *os, long long int lli ) { 83 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 84 sepReset( os ); 85 prtfmt( os, "%lld", lli ); 86 return os; 55 ostype * ?|?( ostype *os, unsigned long int i ) { 56 char buffer[32]; 57 return write( os, buffer, sprintf( buffer, "%lu", i ) ); 87 58 } // ?|? 88 59 89 60 forall( dtype ostype | ostream( ostype ) ) 90 ostype * ?|?( ostype *os, unsigned long long int ulli ) { 91 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 92 sepReset( os ); 93 prtfmt( os, "%llu", ulli ); 94 return os; 61 ostype * ?|?( ostype *os, unsigned long long int i ) { 62 char buffer[32]; 63 return write( os, buffer, sprintf( buffer, "%llu", i ) ); 95 64 } // ?|? 96 65 97 66 forall( dtype ostype | ostream( ostype ) ) 98 67 ostype * ?|?( ostype *os, float f ) { 99 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 100 sepReset( os ); 101 prtfmt( os, "%g", f ); 102 return os; 68 char buffer[32]; 69 return write( os, buffer, sprintf( buffer, "%g", f ) ); 103 70 } // ?|? 104 71 105 72 forall( dtype ostype | ostream( ostype ) ) 106 73 ostype * ?|?( ostype *os, double d ) { 107 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 108 sepReset( os ); 109 prtfmt( os, "%.*lg", DBL_DIG, d ); 110 return os; 74 char buffer[32]; 75 return write( os, buffer, sprintf( buffer, "%.*lg", DBL_DIG, d ) ); 111 76 } // ?|? 112 77 113 78 forall( dtype ostype | ostream( ostype ) ) 114 ostype * ?|?( ostype *os, long double ld ) { 115 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 116 sepReset( os ); 117 prtfmt( os, "%.*Lg", LDBL_DIG, ld ); 118 return os; 79 ostype * ?|?( ostype *os, long double d ) { 80 char buffer[32]; 81 return write( os, buffer, sprintf( buffer, "%.*Lg", LDBL_DIG, d ) ); 119 82 } // ?|? 120 83 121 84 forall( dtype ostype | ostream( ostype ) ) 122 ostype * ?|?( ostype *os, float _Complex fc ) { 123 os | crealf( fc ); 124 _Bool temp = sepDisable( os ); // disable separators within complex value 125 if ( cimagf( fc ) >= 0 ) os | '+'; // negative value prints '-' 126 os | cimagf( fc ) | 'i'; 127 sepReset( os, temp ); // reset separator 128 return os; 85 ostype * ?|?( ostype *os, float _Complex c ) { 86 return os | crealf( c ) | (cimagf( c ) < 0 ? "" : "+") | cimagf( c ) | 'i'; 129 87 } // ?|? 130 88 131 89 forall( dtype ostype | ostream( ostype ) ) 132 ostype * ?|?( ostype *os, double _Complex dc ) { 133 os | creal( dc ); 134 _Bool temp = sepDisable( os ); // disable separators within complex value 135 if ( cimag( dc ) >= 0 ) os | '+'; // negative value prints '-' 136 os | cimag( dc ) | 'i'; 137 sepReset( os, temp ); // reset separator 138 return os; 90 ostype * ?|?( ostype *os, double _Complex c ) { 91 return os | creal( c ) | (cimag( c ) < 0 ? "" : "+") | cimag( c ) | 'i'; 139 92 } // ?|? 140 93 141 94 forall( dtype ostype | ostream( ostype ) ) 142 ostype * ?|?( ostype *os, long double _Complex ldc ) { 143 os | creall( ldc ); 144 _Bool temp = sepDisable( os ); // disable separators within complex value 145 if ( cimagl( ldc ) >= 0 ) os | '+'; // negative value prints '-' 146 os | cimagl( ldc ) | 'i'; 147 sepReset( os, temp ); // reset separator 148 return os; 95 ostype * ?|?( ostype *os, long double _Complex c ) { 96 return os | creall( c ) | (cimagl( c ) < 0 ? "" : "+") | cimagl( c ) | 'i'; 97 } // ?|? 98 99 forall( dtype ostype | ostream( ostype ) ) 100 ostype * ?|?( ostype *os, const void *p ) { 101 char buffer[32]; 102 return write( os, buffer, sprintf( buffer, "%p", p ) ); 149 103 } // ?|? 150 104 151 105 forall( dtype ostype | ostream( ostype ) ) 152 106 ostype * ?|?( ostype *os, const char *cp ) { 153 enum { Open = 1, Close, OpenClose }; 154 static const unsigned char mask[256] = { 155 // opening delimiters 156 ['('] : Open, ['['] : Open, ['{'] : Open, 157 ['$'] : Open, [(unsigned char)'£'] : Open, [(unsigned char)'¥'] : Open, [(unsigned char)'¿'] : Open, [(unsigned char)'«'] : Open, 158 // closing delimiters 159 [','] : Close, ['.'] : Close, [':'] : Close, [';'] : Close, ['!'] : Close, ['?'] : Close, 160 [')'] : Close, [']'] : Close, ['}'] : Close, 161 ['%'] : Close, [(unsigned char)'¢'] : Close, [(unsigned char)'»'] : Close, 162 // opening-closing delimiters 163 ['\''] : OpenClose, ['`'] : OpenClose, ['"'] : OpenClose, 164 ['\f'] : OpenClose, ['\n'] : OpenClose, ['\r'] : OpenClose, ['\t'] : OpenClose, ['\v'] : OpenClose, // isspace 165 }; // mask 166 167 int len = strlen( cp ); 168 // null string => no separator 169 if ( len == 0 ) { sepOff( os ); return os; } 170 // first character IS NOT spacing or closing punctuation => add left separator 171 unsigned char ch = cp[0]; // must make unsigned 172 if ( sepPrt( os ) && mask[ ch ] != Close && mask[ ch ] != OpenClose ) { 173 prtfmt( os, "%s", sepGet( os ) ); 174 } // if 175 // last character IS spacing or opening punctuation => turn off separator for next item 176 unsigned int posn = len - 1; 177 ch = cp[posn]; // must make unsigned 178 if ( mask[ ch ] == Open || mask[ ch ] == OpenClose ) { 179 sepOff( os ); 180 } else { 181 sepOn( os ); 182 } // if 183 return write( os, cp, len ); 184 } // ?|? 185 186 forall( dtype ostype | ostream( ostype ) ) 187 ostype * ?|?( ostype *os, const void *p ) { 188 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); 189 sepReset( os ); 190 prtfmt( os, "%p", p ); 191 return os; 107 return write( os, cp, strlen( cp ) ); 192 108 } // ?|? 193 109 194 110 195 forall( dtype ostype | ostream(ostype ) )196 ostype * ?|?( ostype *os, ostype * (* manip)( ostype *) ) {197 return manip( os );198 } // ?|?111 forall( dtype ostype, dtype retostype | ostream( ostype ) | ostream( retostype ) ) 112 retostype * ?|?( ostype *os, retostype * (*manip)(ostype*) ) { 113 return manip( os ); 114 } 199 115 200 116 forall( dtype ostype | ostream( ostype ) ) 201 117 ostype * endl( ostype * os ) { 202 os | '\n';118 os | "\n"; 203 119 flush( os ); 204 sepOff( os );205 120 return os; 206 121 } // endl 207 122 208 forall( dtype ostype | ostream( ostype ) )209 ostype * sepOn( ostype * os ) {210 sepOn( os );211 return os;212 } // sepOn213 214 forall( dtype ostype | ostream( ostype ) )215 ostype * sepOff( ostype * os ) {216 sepOff( os );217 return os;218 } // sepOff219 220 forall( dtype ostype | ostream( ostype ) )221 ostype * sepEnable( ostype * os ) {222 sepEnable( os );223 return os;224 } // sepEnable225 226 forall( dtype ostype | ostream( ostype ) )227 ostype * sepDisable( ostype * os ) {228 sepDisable( os );229 return os;230 } // sepDisable231 232 123 //--------------------------------------- 233 124 234 forall( otype elttype | writeable( elttype ), otype iteratortype | iterator( iteratortype, elttype ), dtype ostype | ostream( ostype ) ) 235 void write( iteratortype begin, iteratortype end, ostype *os ) { 236 void print( elttype i ) { os | i; } 125 forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ), 126 dtype os_type | ostream( os_type ) ) 127 void write( iterator_type begin, iterator_type end, os_type *os ) { 128 void print( elt_type i ) { os | i | ' '; } 237 129 for_each( begin, end, print ); 238 130 } // ?|? 239 131 240 forall( otype elttype | writeable( elttype ), otype iteratortype | iterator( iteratortype, elttype ), dtype ostype | ostream( ostype ) ) 241 void write_reverse( iteratortype begin, iteratortype end, ostype *os ) { 242 void print( elttype i ) { os | i; } 132 forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ), 133 dtype os_type | ostream( os_type ) ) 134 void write_reverse( iterator_type begin, iterator_type end, os_type *os ) { 135 void print( elt_type i ) { os | i | ' '; } 243 136 for_each_reverse( begin, end, print ); 244 137 } // ?|? … … 247 140 248 141 forall( dtype istype | istream( istype ) ) 249 istype * ?|?( istype * is, char * c ) { 250 scanfmt( is, "%c", c ); 251 return is; 142 istype * ?|?( istype *is, char *cp ) { 143 return read( is, cp, 1 ); 252 144 } // ?|? 253 145 254 146 forall( dtype istype | istream( istype ) ) 255 istype * ?|?( istype * is, short int * si ) { 256 scanfmt( is, "%hd", si ); 257 return is; 147 istype * ?|?( istype *is, int *ip ) { 148 return get( is, ip ); 258 149 } // ?|? 259 260 forall( dtype istype | istream( istype ) )261 istype * ?|?( istype * is, unsigned short int * usi ) {262 scanfmt( is, "%hu", usi );263 return is;264 } // ?|?265 266 forall( dtype istype | istream( istype ) )267 istype * ?|?( istype * is, int * i ) {268 scanfmt( is, "%d", i );269 return is;270 } // ?|?271 272 forall( dtype istype | istream( istype ) )273 istype * ?|?( istype * is, unsigned int * ui ) {274 scanfmt( is, "%u", ui );275 return is;276 } // ?|?277 278 forall( dtype istype | istream( istype ) )279 istype * ?|?( istype * is, long int * li ) {280 scanfmt( is, "%ld", li );281 return is;282 } // ?|?283 284 forall( dtype istype | istream( istype ) )285 istype * ?|?( istype * is, unsigned long int * ulli ) {286 scanfmt( is, "%lu", ulli );287 return is;288 } // ?|?289 290 forall( dtype istype | istream( istype ) )291 istype * ?|?( istype * is, long long int * lli ) {292 scanfmt( is, "%lld", lli );293 return is;294 } // ?|?295 296 forall( dtype istype | istream( istype ) )297 istype * ?|?( istype * is, unsigned long long int * ulli ) {298 scanfmt( is, "%llu", ulli );299 return is;300 } // ?|?301 302 303 forall( dtype istype | istream( istype ) )304 istype * ?|?( istype * is, float * f ) {305 scanfmt( is, "%f", f );306 return is;307 } // ?|?308 309 forall( dtype istype | istream( istype ) )310 istype * ?|?( istype * is, double * d ) {311 scanfmt( is, "%lf", d );312 return is;313 } // ?|?314 315 forall( dtype istype | istream( istype ) )316 istype * ?|?( istype * is, long double * ld ) {317 scanfmt( is, "%Lf", ld );318 return is;319 } // ?|?320 321 322 forall( dtype istype | istream( istype ) )323 istype * ?|?( istype * is, float _Complex * fc ) {324 float re, im;325 scanfmt( is, "%g%gi", &re, &im );326 *fc = re + im * _Complex_I;327 return is;328 } // ?|?329 330 forall( dtype istype | istream( istype ) )331 istype * ?|?( istype * is, double _Complex * dc ) {332 double re, im;333 scanfmt( is, "%lf%lfi", &re, &im );334 *dc = re + im * _Complex_I;335 return is;336 } // ?|?337 338 forall( dtype istype | istream( istype ) )339 istype * ?|?( istype * is, long double _Complex * ldc ) {340 long double re, im;341 scanfmt( is, "%Lf%Lfi", &re, &im );342 *ldc = re + im * _Complex_I;343 return is;344 } // ?|?345 346 _Istream_cstrUC cstr( char * s ) { _Istream_cstrUC s = { s }; return s; }347 forall( dtype istype | istream( istype ) )348 istype * ?|?( istype * is, _Istream_cstrUC cstr ) {349 scanfmt( is, "%s", cstr.s );350 return is;351 } // cstr352 353 _Istream_cstrC cstr( char * s, int size ) { _Istream_cstrC s = { s, size }; return s; }354 forall( dtype istype | istream( istype ) )355 istype * ?|?( istype * is, _Istream_cstrC cstr ) {356 char buf[16];357 sprintf( buf, "%%%ds", cstr.size );358 scanfmt( is, buf, cstr.s );359 return is;360 } // cstr361 150 362 151 // Local Variables: // -
src/libcfa/iterator
r0f9e4403 rc5833e8 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 18:06:05201613 // Update Count : 912 // Last Modified On : Wed Jan 27 23:49:13 2016 13 // Update Count : 7 14 14 // 15 15 … … 18 18 19 19 // An iterator can be used to traverse a data structure. 20 trait iterator( otype iterator_type, otype elt_type ) {20 context iterator( type iterator_type, type elt_type ) { 21 21 // point to the next element 22 22 // iterator_type ?++( iterator_type * ); … … 32 32 }; 33 33 34 trait iterator_for( otype iterator_type, otype collection_type, otype elt_type | iterator( iterator_type, elt_type ) ) {34 context iterator_for( type iterator_type, type collection_type, type elt_type | iterator( iterator_type, elt_type ) ) { 35 35 // [ iterator_type begin, iterator_type end ] get_iterators( collection_type ); 36 36 iterator_type begin( collection_type ); … … 38 38 }; 39 39 40 forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )40 forall( type iterator_type, type elt_type | iterator( iterator_type, elt_type ) ) 41 41 void for_each( iterator_type begin, iterator_type end, void (*func)( elt_type ) ); 42 42 43 forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )43 forall( type iterator_type, type elt_type | iterator( iterator_type, elt_type ) ) 44 44 void for_each_reverse( iterator_type begin, iterator_type end, void (*func)( elt_type ) ); 45 45 -
src/libcfa/iterator.c
r0f9e4403 rc5833e8 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 18:08:11201613 // Update Count : 2 712 // Last Modified On : Tue Jan 26 17:16:07 2016 13 // Update Count : 26 14 14 // 15 15 16 16 #include "iterator" 17 17 18 forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )18 forall( type iterator_type, type elt_type | iterator( iterator_type, elt_type ) ) 19 19 void for_each( iterator_type begin, iterator_type end, void (*func)( elt_type ) ) { 20 20 for ( iterator_type i = begin; i != end; ++i ) { … … 23 23 } 24 24 25 forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )25 forall( type iterator_type, type elt_type | iterator( iterator_type, elt_type ) ) 26 26 void for_each_reverse( iterator_type begin, iterator_type end, void (*func)( elt_type ) ) { 27 27 for ( iterator_type i = end; i != begin; ) { -
src/libcfa/limits
r0f9e4403 rc5833e8 1 //2 // Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo3 //4 // The contents of this file are covered under the licence agreement in the5 // file "LICENCE" distributed with Cforall.6 //7 // limits --8 //9 // Author : Peter A. Buhr10 // Created On : Wed Apr 6 18:06:52 201611 // Last Modified By : Peter A. Buhr12 // Last Modified On : Wed Apr 6 21:08:16 201613 // Update Count : 614 //15 16 1 // Integral Constants 17 2 18 extern const short int MIN;19 extern const int MIN;20 extern const long int MIN;21 extern const long long int MIN;3 const short int MIN = -32768; 4 const int MIN = -2147483648; 5 const long int MIN = -9223372036854775807L - 1L; 6 const long long int MIN = -9223372036854775807LL - 1LL; 22 7 23 extern const short int MAX;24 extern const unsigned short int MAX;25 extern const int MAX;26 extern const unsigned int MAX;27 extern const long int MAX;28 extern const unsigned long int MAX;29 extern const long long int MAX;30 extern const unsigned long long int MAX;8 const short int MAX = 32767; 9 const unsigned short int MAX = 65535; 10 const int MAX = 2147483647; 11 const unsigned int MAX = 4294967295_U; 12 const long int MAX = 9223372036854775807_L; 13 const unsigned long int MAX = 4294967295_U; 14 const long long int MAX = 9223372036854775807_LL; 15 const unsigned long long int MAX = 18446744073709551615_ULL; 31 16 32 17 // Floating-Point Constants 33 18 34 extern const float PI;// pi35 extern const float PI_2;// pi / 236 extern const float PI_4;// pi / 437 extern const float _1_PI;// 1 / pi38 extern const float _2_PI;// 2 / pi39 extern const float _2_SQRT_PI;// 2 / sqrt(pi)19 const float PI = 3.141592_F; // pi 20 const float PI_2 = 1.570796_F; // pi / 2 21 const float PI_4 = 0.7853981_F; // pi / 4 22 const float _1_PI = 0.3183098_F; // 1 / pi 23 const float _2_PI = 0.6366197_F; // 2 / pi 24 const float _2_SQRT_PI = 1.128379_F; // 2 / sqrt(pi) 40 25 41 extern const double PI;// pi42 extern const double PI_2;// pi / 243 extern const double PI_4;// pi / 444 extern const double _1_PI;// 1 / pi45 extern const double _2_PI;// 2 / pi46 extern const double _2_SQRT_PI;// 2 / sqrt(pi)26 const double PI = 3.14159265358979323846_D; // pi 27 const double PI_2 = 1.57079632679489661923_D; // pi / 2 28 const double PI_4 = 0.78539816339744830962_D; // pi / 4 29 const double _1_PI = 0.31830988618379067154_D; // 1 / pi 30 const double _2_PI = 0.63661977236758134308_D; // 2 / pi 31 const double _2_SQRT_PI = 1.12837916709551257390_D; // 2 / sqrt(pi) 47 32 48 extern const long double PI;// pi49 extern const long double PI_2;// pi / 250 extern const long double PI_4;// pi / 451 extern const long double _1_PI;// 1 / pi52 extern const long double _2_PI;// 2 / pi53 extern const long double _2_SQRT_PI;// 2 / sqrt(pi)33 const long double PI = 3.1415926535897932384626433832795029_DL; // pi 34 const long double PI_2 = 1.5707963267948966192313216916397514_DL; // pi / 2 35 const long double PI_4 = 0.7853981633974483096156608458198757_DL; // pi / 4 36 const long double _1_PI = 0.3183098861837906715377675267450287_DL; // 1 / pi 37 const long double _2_PI = 0.6366197723675813430755350534900574_DL; // 2 / pi 38 const long double _2_SQRT_PI = 1.1283791670955125738961589031215452_DL; // 2 / sqrt(pi) 54 39 55 extern const _Complex PI;// pi56 extern const _Complex PI_2;// pi / 257 extern const _Complex PI_4;// pi / 458 extern const _Complex _1_PI;// 1 / pi59 extern const _Complex _2_PI;// 2 / pi60 extern const _Complex _2_SQRT_PI;// 2 / sqrt(pi)40 const _Complex PI = 3.14159265358979323846_D+0.0_iD; // pi 41 const _Complex PI_2 = 1.57079632679489661923_D+0.0_iD; // pi / 2 42 const _Complex PI_4 = 0.78539816339744830962_D+0.0_iD; // pi / 4 43 const _Complex _1_PI = 0.31830988618379067154_D+0.0_iD; // 1 / pi 44 const _Complex _2_PI = 0.63661977236758134308_D+0.0_iD; // 2 / pi 45 const _Complex _2_SQRT_PI = 1.12837916709551257390_D+0.0_iD; // 2 / sqrt(pi) 61 46 62 extern const long _Complex PI;// pi63 extern const long _Complex PI_2;// pi / 264 extern const long _Complex PI_4;// pi / 465 extern const long _Complex _1_PI;// 1 / pi66 extern const long _Complex _2_PI;// 2 / pi67 extern const long _Complex _2_SQRT_PI;// 2 / sqrt(pi)47 const long _Complex PI = 3.1415926535897932384626433832795029_L+0.0iL; // pi 48 const long _Complex PI_2 = 1.5707963267948966192313216916397514_L+0.0iL; // pi / 2 49 const long _Complex PI_4 = 0.7853981633974483096156608458198757_L+0.0iL; // pi / 4 50 const long _Complex _1_PI = 0.3183098861837906715377675267450287_L+0.0iL; // 1 / pi 51 const long _Complex _2_PI = 0.6366197723675813430755350534900574_L+0.0iL; // 2 / pi 52 const long _Complex _2_SQRT_PI = 1.1283791670955125738961589031215452_L+0.0iL; // 2 / sqrt(pi) 68 53 69 extern const float E;// e70 extern const float LOG2_E;// log_2(e)71 extern const float LOG10_E;// log_10(e)72 extern const float LN_2;// log_e(2)73 extern const float LN_10;// log_e(10)74 extern const float SQRT_2;// sqrt(2)75 extern const float _1_SQRT_2;// 1 / sqrt(2)54 const float E = 2.718281; // e 55 const float LOG2_E = 1.442695; // log_2(e) 56 const float LOG10_E = 0.4342944; // log_10(e) 57 const float LN_2 = 0.6931471; // log_e(2) 58 const float LN_10 = 2.302585; // log_e(10) 59 const float SQRT_2 = 1.414213; // sqrt(2) 60 const float _1_SQRT_2 = 0.7071067; // 1 / sqrt(2) 76 61 77 extern const double E;// e78 extern const double LOG2_E;// log_2(e)79 extern const double LOG10_E;// log_10(e)80 extern const double LN_2;// log_e(2)81 extern const double LN_10;// log_e(10)82 extern const double SQRT_2;// sqrt(2)83 extern const double _1_SQRT_2;// 1 / sqrt(2)62 const double E = 2.7182818284590452354_D; // e 63 const double LOG2_E = 1.4426950408889634074_D; // log_2(e) 64 const double LOG10_E = 0.43429448190325182765_D; // log_10(e) 65 const double LN_2 = 0.69314718055994530942_D; // log_e(2) 66 const double LN_10 = 2.30258509299404568402_D; // log_e(10) 67 const double SQRT_2 = 1.41421356237309504880_D; // sqrt(2) 68 const double _1_SQRT_2 = 0.70710678118654752440_D; // 1 / sqrt(2) 84 69 85 extern const long double E;// e86 extern const long double LOG2_E;// log_2(e)87 extern const long double LOG10_E;// log_10(e)88 extern const long double LN_2;// log_e(2)89 extern const long double LN_10;// log_e(10)90 extern const long double SQRT_2;// sqrt(2)91 extern const long double _1_SQRT_2;// 1/sqrt(2)70 const long double E = 2.7182818284590452353602874713526625_DL; // e 71 const long double LOG2_E = 1.4426950408889634073599246810018921_DL; // log_2(e) 72 const long double LOG10_E = 0.4342944819032518276511289189166051_DL; // log_10(e) 73 const long double LN_2 = 0.6931471805599453094172321214581766_DL; // log_e(2) 74 const long double LN_10 = 2.3025850929940456840179914546843642_DL; // log_e(10) 75 const long double SQRT_2 = 1.4142135623730950488016887242096981_DL; // sqrt(2) 76 const long double _1_SQRT_2 = 0.7071067811865475244008443621048490_DL; // 1/sqrt(2) 92 77 93 extern const _Complex E;// e94 extern const _Complex LOG2_E;// log_2(e)95 extern const _Complex LOG10_E;// log_10(e)96 extern const _Complex LN_2;// log_e(2)97 extern const _Complex LN_10;// log_e(10)98 extern const _Complex SQRT_2;// sqrt(2)99 extern const _Complex _1_SQRT_2;// 1 / sqrt(2)78 const _Complex E = 2.7182818284590452354_D+0.0_iD; // e 79 const _Complex LOG2_E = 1.4426950408889634074_D+0.0_iD; // log_2(e) 80 const _Complex LOG10_E = 0.43429448190325182765_D+0.0_iD; // log_10(e) 81 const _Complex LN_2 = 0.69314718055994530942_D+0.0_iD; // log_e(2) 82 const _Complex LN_10 = 2.30258509299404568402_D+0.0_iD; // log_e(10) 83 const _Complex SQRT_2 = 1.41421356237309504880_D+0.0_iD; // sqrt(2) 84 const _Complex _1_SQRT_2 = 0.70710678118654752440_D+0.0_iD; // 1 / sqrt(2) 100 85 101 extern const long _Complex E; // e 102 extern const long _Complex LOG2_E; // log_2(e) 103 extern const long _Complex LOG10_E; // log_10(e) 104 extern const long _Complex LN_2; // log_e(2) 105 extern const long _Complex LN_10; // log_e(10) 106 extern const long _Complex SQRT_2; // sqrt(2) 107 extern const long _Complex _1_SQRT_2; // 1 / sqrt(2) 108 109 // Local Variables: // 110 // mode: c // 111 // tab-width: 4 // 112 // End: // 86 const long _Complex E = 2.7182818284590452353602874713526625_L+0.0_iL; // e 87 const long _Complex LOG2_E = 1.4426950408889634073599246810018921_L+0.0_iL; // log_2(e) 88 const long _Complex LOG10_E = 0.4342944819032518276511289189166051_L+0.0_iL; // log_10(e) 89 const long _Complex LN_2 = 0.6931471805599453094172321214581766_L+0.0_iL; // log_e(2) 90 const long _Complex LN_10 = 2.3025850929940456840179914546843642_L+0.0_iL; // log_e(10) 91 const long _Complex SQRT_2 = 1.4142135623730950488016887242096981_L+0.0_iL; // sqrt(2) 92 const long _Complex _1_SQRT_2 = 0.7071067811865475244008443621048490_L+0.0_iL; // 1 / sqrt(2) -
src/libcfa/prelude.cf
r0f9e4403 rc5833e8 1 # 2 "prelude.cf" // needed for error messages from this file2 1 // -*- Mode: C -*- 3 2 // … … 9 8 // Created On : Sat Nov 29 07:23:41 2014 10 9 // Last Modified By : Peter A. Buhr 11 // Last Modified On : Wed Mar 2 18:03:41201612 // Update Count : 8 910 // Last Modified On : Mon Jan 4 11:13:26 2016 11 // Update Count : 81 13 12 // 14 13 … … 64 63 long double _Complex ?--( long double _Complex * ), ?--( volatile long double _Complex * ); 65 64 66 forall( otype T ) T * ?++( T ** );67 forall( otype T ) const T * ?++( const T ** );68 forall( otype T ) volatile T * ?++( volatile T ** );69 forall( otype T ) const volatile T * ?++( const volatile T ** );70 forall( otype T ) T * ?--( T ** );71 forall( otype T ) const T * ?--( const T ** );72 forall( otype T ) volatile T * ?--( volatile T ** );73 forall( otype T ) const volatile T * ?--( const volatile T ** );74 75 forall( otype T ) lvalue T ?[?]( T *, ptrdiff_t );76 forall( otype T ) const lvalue T?[?]( const T *, ptrdiff_t );77 forall( otype T ) volatile lvalue T ?[?]( volatile T *, ptrdiff_t );78 forall( otype T ) const volatile lvalue T ?[?]( const volatile T *, ptrdiff_t );79 forall( otype T ) lvalue T ?[?]( ptrdiff_t, T * );80 forall( otype T ) const lvalue T?[?]( ptrdiff_t, const T * );81 forall( otype T ) volatile lvalue T ?[?]( ptrdiff_t, volatile T * );82 forall( otype T ) const volatile lvalue T ?[?]( ptrdiff_t, const volatile T * );65 forall( type T ) T * ?++( T ** ); 66 forall( type T ) const T * ?++( const T ** ); 67 forall( type T ) volatile T * ?++( volatile T ** ); 68 forall( type T ) const volatile T * ?++( const volatile T ** ); 69 forall( type T ) T * ?--( T ** ); 70 forall( type T ) const T * ?--( const T ** ); 71 forall( type T ) volatile T * ?--( volatile T ** ); 72 forall( type T ) const volatile T * ?--( const volatile T ** ); 73 74 forall( type T ) lvalue T ?[?]( T *, ptrdiff_t ); 75 forall( type T ) const lvalue T ?[?]( const T *, ptrdiff_t ); 76 forall( type T ) volatile lvalue T ?[?]( volatile T *, ptrdiff_t ); 77 forall( type T ) const volatile lvalue T ?[?]( const volatile T *, ptrdiff_t ); 78 forall( type T ) lvalue T ?[?]( ptrdiff_t, T * ); 79 forall( type T ) const lvalue T ?[?]( ptrdiff_t, const T * ); 80 forall( type T ) volatile lvalue T ?[?]( ptrdiff_t, volatile T * ); 81 forall( type T ) const volatile lvalue T ?[?]( ptrdiff_t, const volatile T * ); 83 82 84 83 // ------------------------------------------------------------ … … 102 101 long double _Complex ++?( long double _Complex * ), --?( long double _Complex * ); 103 102 104 forall( otype T ) T * ++?( T ** );105 forall( otype T ) const T * ++?( const T ** );106 forall( otype T ) volatile T * ++?( volatile T ** );107 forall( otype T ) const volatile T * ++?( const volatile T ** );108 forall( otype T ) T * --?( T ** );109 forall( otype T ) const T * --?( const T ** );110 forall( otype T ) volatile T * --?( volatile T ** );111 forall( otype T ) const volatile T * --?( const volatile T ** );112 113 forall( otype T ) lvalue T *?( T * );114 forall( otype T ) const lvalue T *?( const T * );115 forall( otype T ) volatile lvalue T *?( volatile T * );116 forall( otype T ) const volatile lvalue T *?( const volatile T * );103 forall( type T ) T * ++?( T ** ); 104 forall( type T ) const T * ++?( const T ** ); 105 forall( type T ) volatile T * ++?( volatile T ** ); 106 forall( type T ) const volatile T * ++?( const volatile T ** ); 107 forall( type T ) T * --?( T ** ); 108 forall( type T ) const T * --?( const T ** ); 109 forall( type T ) volatile T * --?( volatile T ** ); 110 forall( type T ) const volatile T * --?( const volatile T ** ); 111 112 forall( type T ) lvalue T *?( T * ); 113 forall( type T ) const lvalue T *?( const T * ); 114 forall( type T ) volatile lvalue T *?( volatile T * ); 115 forall( type T ) const volatile lvalue T *?( const volatile T * ); 117 116 forall( ftype FT ) lvalue FT *?( FT * ); 118 117 … … 184 183 long double _Complex ?+?( long double _Complex, long double _Complex ), ?-?( long double _Complex, long double _Complex ); 185 184 186 forall( otype T ) T * ?+?( T *, ptrdiff_t );187 forall( otype T ) T * ?+?( ptrdiff_t, T * );188 forall( otype T ) const T * ?+?( const T *, ptrdiff_t );189 forall( otype T ) const T * ?+?( ptrdiff_t, const T * );190 forall( otype T ) volatile T * ?+?( volatile T *, ptrdiff_t );191 forall( otype T ) volatile T * ?+?( ptrdiff_t, volatile T * );192 forall( otype T ) const volatile T * ?+?( const volatile T *, ptrdiff_t );193 forall( otype T ) const volatile T * ?+?( ptrdiff_t, const volatile T * );194 forall( otype T ) T * ?-?( T *, ptrdiff_t );195 forall( otype T ) const T * ?-?( const T *, ptrdiff_t );196 forall( otype T ) volatile T * ?-?( volatile T *, ptrdiff_t );197 forall( otype T ) const volatile T * ?-?( const volatile T *, ptrdiff_t );198 forall( otype T ) ptrdiff_t ?-?( const volatile T *, const volatile T * );185 forall( type T ) T * ?+?( T *, ptrdiff_t ); 186 forall( type T ) T * ?+?( ptrdiff_t, T * ); 187 forall( type T ) const T * ?+?( const T *, ptrdiff_t ); 188 forall( type T ) const T * ?+?( ptrdiff_t, const T * ); 189 forall( type T ) volatile T * ?+?( volatile T *, ptrdiff_t ); 190 forall( type T ) volatile T * ?+?( ptrdiff_t, volatile T * ); 191 forall( type T ) const volatile T * ?+?( const volatile T *, ptrdiff_t ); 192 forall( type T ) const volatile T * ?+?( ptrdiff_t, const volatile T * ); 193 forall( type T ) T * ?-?( T *, ptrdiff_t ); 194 forall( type T ) const T * ?-?( const T *, ptrdiff_t ); 195 forall( type T ) volatile T * ?-?( volatile T *, ptrdiff_t ); 196 forall( type T ) const volatile T * ?-?( const volatile T *, ptrdiff_t ); 197 forall( type T ) ptrdiff_t ?-?( const volatile T *, const volatile T * ); 199 198 200 199 // ------------------------------------------------------------ … … 432 431 forall( ftype FT ) FT * ?=?( FT * volatile *, forall( ftype FT2 ) FT2 * ); 433 432 434 forall( otype T ) T * ?+=?( T * *, ptrdiff_t );435 forall( otype T ) T * ?+=?( T * volatile *, ptrdiff_t );436 forall( otype T ) const T * ?+=?( const T * *, ptrdiff_t );437 forall( otype T ) const T * ?+=?( const T * volatile *, ptrdiff_t );438 forall( otype T ) volatile T * ?+=?( volatile T * *, ptrdiff_t );439 forall( otype T ) volatile T * ?+=?( volatile T * volatile *, ptrdiff_t );440 forall( otype T ) const volatile T * ?+=?( const volatile T * *, ptrdiff_t );441 forall( otype T ) const volatile T * ?+=?( const volatile T * volatile *, ptrdiff_t );442 forall( otype T ) T * ?-=?( T * *, ptrdiff_t );443 forall( otype T ) T * ?-=?( T * volatile *, ptrdiff_t );444 forall( otype T ) const T * ?-=?( const T * *, ptrdiff_t );445 forall( otype T ) const T * ?-=?( const T * volatile *, ptrdiff_t );446 forall( otype T ) volatile T * ?-=?( volatile T * *, ptrdiff_t );447 forall( otype T ) volatile T * ?-=?( volatile T * volatile *, ptrdiff_t );448 forall( otype T ) const volatile T * ?-=?( const volatile T * *, ptrdiff_t );449 forall( otype T ) const volatile T * ?-=?( const volatile T * volatile *, ptrdiff_t );433 forall( type T ) T * ?+=?( T * *, ptrdiff_t ); 434 forall( type T ) T * ?+=?( T * volatile *, ptrdiff_t ); 435 forall( type T ) const T * ?+=?( const T * *, ptrdiff_t ); 436 forall( type T ) const T * ?+=?( const T * volatile *, ptrdiff_t ); 437 forall( type T ) volatile T * ?+=?( volatile T * *, ptrdiff_t ); 438 forall( type T ) volatile T * ?+=?( volatile T * volatile *, ptrdiff_t ); 439 forall( type T ) const volatile T * ?+=?( const volatile T * *, ptrdiff_t ); 440 forall( type T ) const volatile T * ?+=?( const volatile T * volatile *, ptrdiff_t ); 441 forall( type T ) T * ?-=?( T * *, ptrdiff_t ); 442 forall( type T ) T * ?-=?( T * volatile *, ptrdiff_t ); 443 forall( type T ) const T * ?-=?( const T * *, ptrdiff_t ); 444 forall( type T ) const T * ?-=?( const T * volatile *, ptrdiff_t ); 445 forall( type T ) volatile T * ?-=?( volatile T * *, ptrdiff_t ); 446 forall( type T ) volatile T * ?-=?( volatile T * volatile *, ptrdiff_t ); 447 forall( type T ) const volatile T * ?-=?( const volatile T * *, ptrdiff_t ); 448 forall( type T ) const volatile T * ?-=?( const volatile T * volatile *, ptrdiff_t ); 450 449 451 450 _Bool ?=?( _Bool *, _Bool ), ?=?( volatile _Bool *, _Bool ); -
src/libcfa/stdlib
r0f9e4403 rc5833e8 10 10 // Created On : Thu Jan 28 17:12:35 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Apr 13 14:45:53201613 // Update Count : 8512 // Last Modified On : Fri Feb 5 15:21:18 2016 13 // Update Count : 61 14 14 // 15 15 … … 20 20 } // extern "C" 21 21 22 //--------------------------------------- 22 forall( type T ) T * memset( T * ptr, unsigned char fill ); // use default value '\0' for fill 23 forall( type T ) T * memset( T * ptr ); // remove when default value available 23 24 24 extern "C" { 25 #ifndef EXIT_FAILURE 26 #define EXIT_FAILURE 1 // failing exit status 27 #define EXIT_SUCCESS 0 // successful exit status 28 #endif // ! EXIT_FAILURE 29 void exit( int rc ); 30 } // extern "C" 25 forall( type T ) T * malloc( void ); 26 forall( type T ) T * malloc( char fill ); 27 forall( type T ) T * malloc( size_t size ); 28 forall( type T ) T * malloc( T * ptr, size_t size ); 29 forall( type T ) T * malloc( T * ptr, size_t size, unsigned char fill ); 30 forall( type T ) T * calloc( size_t size ); 31 forall( type T ) T * realloc( T * ptr, size_t size ); 32 forall( type T ) T * realloc( T * ptr, size_t size, unsigned char fill ); 31 33 32 //--------------------------------------- 33 34 extern "C" { 35 void * malloc( size_t ); // use default C routine for void * 36 } // extern "C" 37 forall( otype T ) T * malloc( void ); 38 forall( otype T ) T * malloc( char fill ); 39 forall( otype T ) T * malloc( T * ptr, size_t size ); 40 forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill ); 41 extern "C" { 42 void * calloc( size_t nmemb, size_t size ); // use default C routine for void * 43 } // extern "C" 44 forall( otype T ) T * calloc( size_t nmemb ); 45 extern "C" { 46 void * realloc( void * ptr, size_t size ); // use default C routine for void * 47 } // extern "C" 48 forall( otype T ) T * realloc( T * ptr, size_t size ); 49 forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill ); 50 51 forall( otype T ) T * aligned_alloc( size_t alignment ); 52 forall( otype T ) T * memalign( size_t alignment ); // deprecated 53 forall( otype T ) int posix_memalign( T ** ptr, size_t alignment ); 54 55 forall( otype T ) T * memset( T * ptr, unsigned char fill ); // use default value '\0' for fill 56 forall( otype T ) T * memset( T * ptr ); // remove when default value available 34 forall( type T ) T * aligned_alloc( size_t alignment ); 35 forall( type T ) T * memalign( size_t alignment ); // deprecated 36 forall( type T ) int posix_memalign( T ** ptr, size_t alignment ); 57 37 58 38 //--------------------------------------- … … 86 66 //--------------------------------------- 87 67 88 forall( otype T | { int ?<?( T, T ); } )68 forall( type T | { int ?<?( T, T ); } ) 89 69 T * bsearch( const T key, const T * arr, size_t dimension ); 90 70 91 forall( otype T | { int ?<?( T, T ); } )71 forall( type T | { int ?<?( T, T ); } ) 92 72 void qsort( const T * arr, size_t dimension ); 93 73 94 74 //--------------------------------------- 95 75 96 forall( otype T | { T ?/?( T, T ); T ?%?( T, T ); } )76 forall( type T | { T ?/?( T, T ); T ?%?( T, T ); } ) 97 77 [ T, T ] div( T t1, T t2 ); 98 78 … … 101 81 char abs( char ); 102 82 extern "C" { 103 int abs( int ); // use default C routine for int104 } // extern "C"83 int abs( int ); // use default C routine for int 84 } // extern 105 85 long int abs( long int ); 106 86 long long int abs( long long int ); … … 114 94 //--------------------------------------- 115 95 116 float floor( float);117 extern "C" { 118 double floor( double ); // use C routine for double 119 } // extern "C" 120 long double floor( long double);121 122 float ceil( float);123 extern "C" { 124 double ceil( double ); // use C routine for double 125 } // extern "C" 126 long double ceil( long double);96 void randseed( long int s ); 97 char random(); 98 int random(); 99 unsigned int random(); 100 long int random(); 101 unsigned long int random(); 102 float random(); 103 double random(); 104 float _Complex random(); 105 double _Complex random(); 106 long double _Complex random(); 127 107 128 108 //--------------------------------------- 129 109 130 void rand48seed( long int s ); 131 char rand48(); 132 int rand48(); 133 unsigned int rand48(); 134 long int rand48(); 135 unsigned long int rand48(); 136 float rand48(); 137 double rand48(); 138 float _Complex rand48(); 139 double _Complex rand48(); 140 long double _Complex rand48(); 141 142 //--------------------------------------- 143 144 forall( otype T | { int ?<?( T, T ); } ) 110 forall( type T | { int ?<?( T, T ); } ) 145 111 T min( const T t1, const T t2 ); 146 112 147 forall( otype T | { int ?>?( T, T ); } )113 forall( type T | { int ?>?( T, T ); } ) 148 114 T max( const T t1, const T t2 ); 149 115 150 forall( otype T )116 forall( type T ) 151 117 void swap( T * t1, T * t2 ); 152 118 -
src/libcfa/stdlib.c
r0f9e4403 rc5833e8 10 10 // Created On : Thu Jan 28 17:10:29 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Apr 13 14:49:58201613 // Update Count : 1 5512 // Last Modified On : Wed Feb 10 15:45:56 2016 13 // Update Count : 140 14 14 // 15 15 … … 27 27 } // extern "C" 28 28 29 forall( otype T ) T * malloc( void ) { 30 //printf( "malloc1\n" ); 29 forall( type T ) T * memset( T * ptr, unsigned char fill ) { // use default value '\0' for fill 30 printf( "memset1\n" ); 31 return (T *)memset( ptr, (int)fill, malloc_usable_size( ptr ) ); 32 } // memset 33 forall( type T ) T * memset( T * ptr ) { // remove when default value available 34 printf( "memset2\n" ); 35 return (T *)memset( ptr, 0, malloc_usable_size( ptr ) ); 36 } // memset 37 38 forall( type T ) T * malloc( void ) { 39 printf( "malloc1\n" ); 31 40 return (T *)malloc( sizeof(T) ); 32 41 } // malloc 33 forall( otype T ) T * malloc( char fill ) { 34 //printf( "malloc3\n" ); 42 forall( type T ) T * malloc( size_t size ) { 43 printf( "malloc2\n" ); 44 return (T *)(void *)malloc( size ); 45 } // malloc 46 forall( type T ) T * malloc( char fill ) { 47 printf( "malloc3\n" ); 35 48 T * ptr = (T *)malloc( sizeof(T) ); 36 49 return memset( ptr ); 37 50 } // malloc 38 51 39 forall( otype T ) T * calloc( size_t nmemb) {40 //printf( "calloc\n" );41 return (T *)calloc( nmemb, sizeof(T) );52 forall( type T ) T * calloc( size_t size ) { 53 printf( "calloc\n" ); 54 return (T *)calloc( size, sizeof(T) ); 42 55 } // calloc 43 56 44 forall( otype T ) T * realloc( T * ptr, size_t size ) {45 //printf( "realloc1\n" );57 forall( type T ) T * realloc( T * ptr, size_t size ) { 58 printf( "realloc1\n" ); 46 59 return (T *)(void *)realloc( (void *)ptr, size ); 47 60 } // realloc 48 forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill ) {49 //printf( "realloc2\n" );61 forall( type T ) T * realloc( T * ptr, size_t size, unsigned char fill ) { 62 printf( "realloc2\n" ); 50 63 char * nptr = (T *)(void *)realloc( (void *)ptr, size ); 51 64 size_t unused = malloc_usable_size( nptr ); … … 54 67 } // realloc 55 68 56 forall( otype T ) T * malloc( T * ptr, size_t size ) {57 //printf( "malloc4\n" );69 forall( type T ) T * malloc( T * ptr, size_t size ) { 70 printf( "malloc4\n" ); 58 71 return (T *)realloc( ptr, size ); 59 72 } // malloc 60 forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill ) {61 //printf( "malloc5\n" );73 forall( type T ) T * malloc( T * ptr, size_t size, unsigned char fill ) { 74 printf( "malloc5\n" ); 62 75 return (T *)realloc( ptr, size, fill ); 63 76 } // malloc 64 77 65 forall( otype T ) T * aligned_alloc( size_t alignment ) {66 //printf( "aligned_alloc\n" );78 forall( type T ) T * aligned_alloc( size_t alignment ) { 79 printf( "aligned_alloc\n" ); 67 80 return (T *)memalign( alignment, sizeof(T) ); 68 81 } // aligned_alloc 69 82 70 forall( otype T ) T * memalign( size_t alignment ) {71 //printf( "memalign\n" );83 forall( type T ) T * memalign( size_t alignment ) { 84 printf( "memalign\n" ); 72 85 return (T *)memalign( alignment, sizeof(T) ); 73 86 } // memalign 74 87 75 forall( otype T ) int posix_memalign( T ** ptr, size_t alignment ) {76 //printf( "posix_memalign\n" );88 forall( type T ) int posix_memalign( T ** ptr, size_t alignment ) { 89 printf( "posix_memalign\n" ); 77 90 return posix_memalign( (void **)ptr, alignment, sizeof(T) ); 78 91 } // posix_memalign 79 80 forall( otype T ) T * memset( T * ptr, unsigned char fill ) { // use default value '\0' for fill81 //printf( "memset1\n" );82 return (T *)memset( ptr, (int)fill, malloc_usable_size( ptr ) );83 } // memset84 forall( otype T ) T * memset( T * ptr ) { // remove when default value available85 //printf( "memset2\n" );86 return (T *)memset( ptr, 0, malloc_usable_size( ptr ) );87 } // memset88 92 89 93 //--------------------------------------- … … 119 123 return ulli; 120 124 } 121 122 125 float ato( const char * ptr ) { 123 126 float f; … … 135 138 return ld; 136 139 } 137 138 140 float _Complex ato( const char * ptr ) { 139 141 float re, im; … … 170 172 return strtoull( sptr, eptr, base ); 171 173 } 172 173 174 float strto( const char * sptr, char ** eptr ) { 174 175 return strtof( sptr, eptr ); … … 180 181 return strtold( sptr, eptr ); 181 182 } 182 183 183 float _Complex strto( const char * sptr, char ** eptr ) { 184 184 float re, im; … … 208 208 //--------------------------------------- 209 209 210 forall( otype T | { int ?<?( T, T ); } )210 forall( type T | { int ?<?( T, T ); } ) 211 211 T * bsearch( const T key, const T * arr, size_t dimension ) { 212 212 int comp( const void * t1, const void * t2 ) { return *(T *)t1 < *(T *)t2 ? -1 : *(T *)t2 < *(T *)t1 ? 1 : 0; } … … 214 214 } // bsearch 215 215 216 forall( otype T | { int ?<?( T, T ); } )216 forall( type T | { int ?<?( T, T ); } ) 217 217 void qsort( const T * arr, size_t dimension ) { 218 218 int comp( const void * t1, const void * t2 ) { return *(T *)t1 < *(T *)t2 ? -1 : *(T *)t2 < *(T *)t1 ? 1 : 0; } … … 222 222 //--------------------------------------- 223 223 224 forall( otype T | { T ?/?( T, T ); T ?%?( T, T ); } )224 forall( type T | { T ?/?( T, T ); T ?%?( T, T ); } ) 225 225 [ T, T ] div( T t1, T t2 ) { /* return [ t1 / t2, t1 % t2 ]; */ } 226 226 … … 239 239 //--------------------------------------- 240 240 241 float floor( float v ) { return floorf( v ); } 242 long double floor( long double v ) { return floorl( v ); } 243 244 float ceil( float v ) { return ceilf( v ); } 245 long double ceil( long double v ) { return ceill( v ); } 246 247 //--------------------------------------- 248 249 void rand48seed( long int s ) { srand48( s ); } 250 char rand48() { return mrand48(); } 251 int rand48() { return mrand48(); } 252 unsigned int rand48() { return lrand48(); } 253 long int rand48() { return mrand48(); } 254 unsigned long int rand48() { return lrand48(); } 255 float rand48() { return (float)drand48(); } // otherwise float uses lrand48 256 double rand48() { return drand48(); } 257 float _Complex rand48() { return (float)drand48() + (float _Complex)(drand48() * _Complex_I); } 258 double _Complex rand48() { return drand48() + (double _Complex)(drand48() * _Complex_I); } 259 long double _Complex rand48() { return (long double)drand48() + (long double _Complex)(drand48() * _Complex_I); } 260 261 //--------------------------------------- 262 263 forall( otype T | { int ?<?( T, T ); } ) 241 void randseed( long int s ) { srand48( s ); } 242 char random() { return lrand48(); } 243 int random() { return mrand48(); } 244 unsigned int random() { return lrand48(); } 245 long int random() { return mrand48(); } 246 unsigned long int random() { return lrand48(); } 247 float random() { return (float)drand48(); } // otherwise float uses lrand48 248 double random() { return drand48(); } 249 float _Complex random() { return (float)drand48() + (float _Complex)(drand48() * _Complex_I); } 250 double _Complex random() { return drand48() + (double _Complex)(drand48() * _Complex_I); } 251 long double _Complex random() { return (long double)drand48() + (long double _Complex)(drand48() * _Complex_I); } 252 253 //--------------------------------------- 254 255 forall( type T | { int ?<?( T, T ); } ) 264 256 T min( const T t1, const T t2 ) { 265 257 return t1 < t2 ? t1 : t2; 266 258 } // min 267 259 268 forall( otype T | { int ?>?( T, T ); } )260 forall( type T | { int ?>?( T, T ); } ) 269 261 T max( const T t1, const T t2 ) { 270 262 return t1 > t2 ? t1 : t2; 271 263 } // max 272 264 273 forall( otype T )265 forall( type T ) 274 266 void swap( T * t1, T * t2 ) { 275 267 T temp = *t1;
Note:
See TracChangeset
for help on using the changeset viewer.