Changes in / [b762122:24e7b47]


Ignore:
Files:
1 deleted
5 edited

Legend:

Unmodified
Added
Removed
  • doc/refrat/Makefile

    rb762122 r24e7b47  
    77## Define the text source files.
    88
    9 SOURCE = ${addsuffix .tex, \
     9SOURCES = ${addsuffix .tex, \
    1010refrat \
    1111}
     
    3232
    3333clean :
    34         rm -f *.bbl *.aux *.dvi *.idx *.ilg *.ind *.brf *.out *.log *.toc *.blg *.pstex_t ${FIGURES} ${PICTURES} ${PROGRAMS} ${GRAPHS} ${basename ${DOCUMENT}}.ps ${DOCUMENT}
     34        rm -f *.bbl *.aux *.dvi *.idx *.ilg *.ind *.brf *.out *.log *.toc *.blg *.pstex_t \
     35                ${FIGURES} ${PICTURES} ${PROGRAMS} ${GRAPHS} ${basename ${DOCUMENT}}.ps ${DOCUMENT}
    3536
    3637# File Dependencies #
     
    4243        dvips $< -o $@
    4344
    44 ${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCE} ${basename ${DOCUMENT}}.bbl
     45${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex ${basename ${DOCUMENT}}.bib
     46        # Conditionally create an empty *.ind (index) file for inclusion until makeindex is run.
     47        if [ ! -r ${basename $@}.ind ] ; then touch ${basename $@}.ind ; fi
     48        # Must have *.aux file containing citations for bibtex
     49        if [ ! -r ${basename $@}.aux ] ; then ${LaTeX} ${basename $@}.tex ; fi
     50        -${BibTeX} ${basename $@}
     51        # Some citations reference others so run steps again to resolve these citations
    4552        ${LaTeX} ${basename $@}.tex
    46         if fgrep -s "Label(s) may have changed" ${basename $@}.log ; then ${LaTeX} ${basename $@}.tex ; fi
     53        -${BibTeX} ${basename $@}
     54        # Make index from *.aux entries and input index at end of document
    4755        makeindex -s indexstyle ${basename $@}.idx
    4856        ${LaTeX} ${basename $@}.tex
    49         ${LaTeX} ${basename $@}.tex             % to get index title in toc
    50 
    51 ${basename ${DOCUMENT}}.bbl : ${basename ${DOCUMENT}}.tex ${basename ${DOCUMENT}}.bib
    52         if [ ! -r ${basename $@}.ind ] ; then touch ${basename $@}.ind ; fi
    53         if [ ! -r ${basename $@}.aux ] ; then ${LaTeX} ${basename $@}.tex ; fi
    54         -${BibTeX} ${basename $@}
     57        # Run again to get index title into table of contents
    5558        ${LaTeX} ${basename $@}.tex
    56         -${BibTeX} ${basename $@}
    5759
    5860## Define the default recipes.
  • doc/refrat/refrat.tex

    rb762122 r24e7b47  
    22
    33\documentclass[openright,twoside]{report}
     4%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     5
     6% Latex packages used in the document.
     7
    48\usepackage{fullpage,times}
    59\usepackage{xspace}
     
    1418\urlstyle{sf}
    1519
    16 %\input code.sty
    17 \input xref.tex
     20%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     21
     22% Names used in the document.
     23
     24\newcommand{\CFA}{Cforall\xspace}               % set language text name
     25\newcommand{\CFAA}{C$\forall$\xspace}   % set language symbolic name
     26\newcommand{\CC}{C\kern-.1em\hbox{+\kern-.25em+}\xspace} % CC symbolic name
     27\def\c11{ISO/IEC C} % C11 name (cannot have numbers in latex command name)
     28
     29%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     30
     31% Specialized macros used in the document.
     32
     33\newcommand{\italic}[1]{\emph{\hyperpage{#1}}}
     34\newcommand{\definition}[1]{\textbf{\hyperpage{#1}}}
     35\newcommand{\see}[1]{\emph{see} #1}
     36
     37\makeatletter
     38% Define some commands that produce formatted index entries suitable for cross-references.
     39% ``\spec'' produces entries for specifications of entities.  ``\impl'' produces entries for their
     40% implementations, and ``\use'' for their uses.
     41
     42%  \newcommand{\bold}[1]{{\bf #1}}
     43%  \def\spec{\@bsphack\begingroup
     44%             \def\protect##1{\string##1\space}\@sanitize
     45%             \@wrxref{|bold}}
     46\def\impl{\@bsphack\begingroup
     47          \def\protect##1{\string##1\space}\@sanitize
     48          \@wrxref{|definition}}
     49\newcommand{\indexcode}[1]{{\lstinline$#1$}}
     50\def\use{\@bsphack\begingroup
     51         \def\protect##1{\string##1\space}\@sanitize
     52         \@wrxref{|hyperpage}}
     53\def\@wrxref#1#2{\let\thepage\relax
     54    \xdef\@gtempa{\write\@indexfile{\string
     55    \indexentry{#2@{\lstinline$#2$}#1}{\thepage}}}\endgroup\@gtempa
     56    \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
     57\makeatother
     58%\newcommand{\use}[1]{\index{#1@{\lstinline$#1$}}}
     59%\newcommand{\impl}[1]{\index{\protect#1@{\lstinline$\protect#1$}|definition}}
    1860
    1961\newcommand{\define}[1]{\emph{#1\/}\index{#1}}
     
    3779\def\syntax{\paragraph{Syntax}\trivlist\parindent=.5in\item[\hskip.5in]}
    3880\let\endsyntax=\endtrivlist
    39 \newcommand{\lhs}[1]{\par{\it #1:}\index{#1@{\it #1}|italic}}
     81\newcommand{\lhs}[1]{\par{\emph{#1:}}\index{#1@{\emph{#1}}|italic}}
    4082\newcommand{\rhs}{\hfil\break\hbox{\hskip1in}}
    41 \newcommand{\oldlhs}[1]{{\it #1: \ldots}\index{#1@{\it #1}|italic}}
    42 \newcommand{\nonterm}[1]{{\it #1\/}\index{#1@{\it #1}|italic}}
     83\newcommand{\oldlhs}[1]{\emph{#1: \ldots}\index{#1@{\emph{#1}}|italic}}
     84\newcommand{\nonterm}[1]{\emph{#1\/}\index{#1@{\emph{#1}}|italic}}
    4385\newcommand{\opt}{$_{opt}$\ }
    4486
     
    5294\newcommand{\VPageref}[2][page]{\ifx#1\@empty\else{#1}\nobreakspace\fi\pageref{#2}}
    5395
    54 \newcommand{\CFA}{Cforall\xspace}
    55 \newcommand{\CFAA}{C$\forall$\xspace}
    56 \newcommand{\CC}{C\kern-.1em\hbox{+\kern-.25em+}\xspace}
    57 \def\c11{ISO/IEC C}% cannot have numbers in latex command name
    58 
    5996% replace/adjust characters that look bad in sanserif
    6097\makeatletter
     
    63100\lst@ProcessOther{"3C}{\lst@ttfamily{<}{\texttt{<}}} % replace less than
    64101\lst@ProcessOther{"3E}{\lst@ttfamily{<}{\texttt{>}}} % replace greater than
    65 \lst@ProcessOther{"5E}{$\sim$} % circumflex
     102\lst@ProcessOther{"5E}{\raisebox{0.4ex}{$\scriptstyle\land\,$}} % circumflex
    66103\lst@ProcessLetter{"5F}{\lst@ttfamily{\char95}{{\makebox[1.2ex][c]{\rule{1ex}{0.1ex}}}}} % replace underscore
    67 \lst@ProcessOther{"7E}{\raisebox{-.4ex}[1ex][0pt]{\textasciitilde}} % lower tilde
     104%\lst@ProcessOther{"7E}{\raisebox{-.4ex}[1ex][0pt]{\textasciitilde}} % lower tilde
     105\lst@ProcessOther{"7E}{\raisebox{0.3ex}{$\scriptstyle\sim\,$}} % lower tilde
    68106\@empty\z@\@empty
    69107
     
    74112
    75113\lstdefinelanguage{CFA}[ANSI]{C}%
    76   {morekeywords={asm,_Atomic,catch,choose,_Complex,context,dtype,fallthru,forall,ftype,_Imaginary,lvalue,restrict,throw,try,type,},
     114  {morekeywords={asm,_Atomic,catch,catchResume,choose,_Complex,context,disable,dtype,enable,
     115        fallthru,finally,forall,ftype,_Imaginary,lvalue,restrict,throw,throwResume,try,type,},
    77116}
    78117
     
    84123xleftmargin=\parindent,
    85124escapechar=@,
     125%fancyvrb=true,
    86126%showtabs=true,
    87 %tab=\rightarrowfill,
     127keepspaces=true,
     128showtabs=true,
     129tab=,
    88130}
    89131
     
    91133\setcounter{tocdepth}{3}                % subsubsections in table of contents
    92134\makeindex
     135
     136%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    93137
    94138\begin{document}
     
    691735
    692736\examples
    693 The expression \lstinline$(void *)0}$\use{0} specializes the (polymorphic) null pointer to a null
     737The expression \lstinline$(void *)0$\use{0} specializes the (polymorphic) null pointer to a null
    694738pointer to \lstinline$void$. \lstinline$(const void *)0$ does the same, and also uses a safe
    695739conversion from \lstinline$void *$ to \lstinline$const void *$. In each case, the null pointer
     
    24252469
    24262470The operands of the expression ``\lstinline$a || b$'' are treated as ``\lstinline$(int)((a)!=0)$''
    2427 and ``\lstinline$(int)((b})!=0)$'', which shall both be unambiguous. The expression has only one
     2471and ``\lstinline$(int)((b))!=0)$'', which shall both be unambiguous. The expression has only one
    24282472interpretation, which is of type \lstinline$int$.
    24292473
     
    40364080\section{Statements and blocks}
    40374081
     4082\begin{syntax}
     4083\oldlhs{statement}
     4084\rhs \nonterm{exception-statement}
     4085\end{syntax}
     4086
    40384087Many statements contain expressions, which may have more than one interpretation. The following
    40394088sections describe how the \CFA translator selects an interpretation. In all cases the result of the
     
    40414090
    40424091
    4043 \setcounter{subsection}{2}
     4092\subsection{Labeled statements}
     4093
     4094\begin{syntax}
     4095\oldlhs{labeled-statement}
     4096\rhs \lstinline$case$ \nonterm{case-value-list} : \nonterm{statement}
     4097\lhs{case-value-list}
     4098\rhs \nonterm{case-value}
     4099\rhs \nonterm{case-value-list} \lstinline$,$ \nonterm{case-value}
     4100\lhs{case-value}
     4101\rhs \nonterm{constant-expression}
     4102\rhs \nonterm{subrange}
     4103\lhs{subrange}
     4104\rhs \nonterm{constant-expression} \lstinline$~$ \nonterm{constant-expression}
     4105\end{syntax}
     4106
     4107The following have identical meaning:
     4108\begin{lstlisting}
     4109case 1:  case 2:  case 3:  case 4:  case 5:
     4110case 1, 2, 3, 4, 5:
     4111case 1~5:
     4112\end{lstlisting}
     4113Multiple subranges are allowed:
     4114\begin{lstlisting}
     4115case 1~4, 9~14, 27~32:
     4116\end{lstlisting}
     4117The \lstinline$case$ and \lstinline$default$ clauses are restricted within the \lstinline$switch$ and \lstinline$choose$ statements, precluding Duff's device.
     4118
     4119
    40444120\subsection{Expression and null statements}
    40454121
     
    40494125\subsection{Selection statements}
    40504126
    4051 The controlling expression \lstinline$E$ in the switch statement
     4127\begin{syntax}
     4128\oldlhs{selection-statement}
     4129\rhs \lstinline$choose$ \lstinline$($ \nonterm{expression} \lstinline$)$ \nonterm{statement}
     4130\end{syntax}
     4131
     4132The controlling expression \lstinline$E$ in the \lstinline$switch$ and \lstinline$choose$ statement:
    40524133\begin{lstlisting}
    40534134switch ( E ) ...
    4054 \end{lstlisting}
    4055 may have more than one interpretation, but it shall have only one interpretation with an integral
    4056 type. An \Index{integer promotion} is performed on the expression if necessary.  The constant
    4057 expressions in \lstinline$case$ statements with the switch are converted to the promoted type.
     4135choose ( E ) ...
     4136\end{lstlisting}
     4137may have more than one interpretation, but it shall have only one interpretation with an integral type.
     4138An \Index{integer promotion} is performed on the expression if necessary.
     4139The constant expressions in \lstinline$case$ statements with the switch are converted to the promoted type.
     4140
     4141
     4142\setcounter{subsubsection}{3}
     4143\subsubsection{The \lstinline$choose$ statement}
     4144
     4145The \lstinline$choose$ statement is the same as the \lstinline$switch$ statement except control transfers to the end of the \lstinline$choose$ statement at a \lstinline$case$ or \lstinline$default$ labeled statement.
     4146The \lstinline$fallthru$ statement is used to fall through to the next \lstinline$case$ or \lstinline$default$ labeled statement.
     4147The following have identical meaning:
     4148\begin{flushleft}
     4149\begin{tabular}{@{\hspace{2em}}l@{\hspace{2em}}l@{}}
     4150\begin{lstlisting}
     4151switch (...) {
     4152  case 1: ... ; break;
     4153  case 2: ... ; break;
     4154  case 3: ... ; // fall through
     4155  case 4: ... ; // fall through
     4156  default: ... break;
     4157}
     4158\end{lstlisting}
     4159&
     4160\begin{lstlisting}
     4161choose (...) {
     4162  case 1: ... ; // exit
     4163  case 2: ... ; // exit
     4164  case 3: ... ; fallthru;
     4165  case 4: ... ; fallthru;
     4166  default: ... ; // exit
     4167}
     4168\end{lstlisting}
     4169\end{tabular}
     4170\end{flushleft}
     4171The \lstinline$choose$ statement addresses the problem of accidental fall-through associated with the \lstinline$switch$ statement.
    40584172
    40594173
     
    40744188is treated as
    40754189\begin{lstlisting}
    4076 for ( ( void )( a ); ( int )(( b )!=0); ( void )( c ) ) @\ldots@
     4190for ( ( void )( a ); ( int )(( b )!=0); ( void )( c ) ) ...
    40774191\end{lstlisting}
    40784192
     
    40804194\subsection{Jump statements}
    40814195
    4082 An expression in a \lstinline$return$ statement is treated as being
    4083 cast to the result type of the function.
     4196\begin{syntax}
     4197\oldlhs{jump-statement}
     4198\rhs \lstinline$continue$ \nonterm{identifier}\opt
     4199\rhs \lstinline$break$ \nonterm{identifier}\opt
     4200\rhs \ldots
     4201\rhs \lstinline$throw$ \nonterm{assignment-expression}\opt
     4202\rhs \lstinline$throwResume$ \nonterm{assignment-expression}\opt \nonterm{at-expression}\opt
     4203\lhs{at-expression} \lstinline$_At$ \nonterm{assignment-expression}
     4204\end{syntax}
     4205
     4206Labeled \lstinline$continue$ and \lstinline$break$ allow useful but restricted control-flow that reduces the need for the \lstinline$goto$ statement for exiting multiple nested control-structures.
     4207\begin{lstlisting}
     4208L1: {                                                   // compound
     4209  L2: switch ( ... ) {                  // switch
     4210          case ...:
     4211          L3: for ( ;; ) {                      // outer for
     4212                L4: for ( ;; ) {                // inner for
     4213                                continue L1;    // error: not enclosing iteration
     4214                                continue L2;    // error: not enclosing iteration
     4215                                continue L3;    // next iteration of outer for
     4216                                continue L4;    // next iteration of inner for
     4217                                break L1;               // exit compound
     4218                                break L2;               // exit switch
     4219                                break L3;               // exit outer for
     4220                                break L4;               // exit inner for
     4221                        } // for
     4222                } // for
     4223                break;                                  // exit switch
     4224          default:
     4225                break L1;                               // exit compound
     4226        } // switch
     4227        ...
     4228} // compound
     4229\end{lstlisting}
     4230
     4231
     4232\setcounter{subsubsection}{1}
     4233\subsubsection{The \lstinline$continue$ statement}
     4234
     4235The identifier in a \lstinline$continue$ statement shall name a label located on an enclosing iteration statement.
     4236
     4237
     4238\subsubsection{The \lstinline$break$ statement}
     4239
     4240The identifier in a \lstinline$break$ statement shall name a label located on an enclosing compound, selection or iteration statement.
     4241
     4242
     4243\subsubsection{The \lstinline$return$ statement}
     4244
     4245An expression in a \lstinline$return$ statement is treated as being cast to the result type of the function.
     4246
     4247
     4248\subsubsection{The \lstinline$throw$ statement}
     4249
     4250When an exception is raised, \Index{propagation} directs control from a raise in the source execution to a handler in the faulting execution.
     4251
     4252
     4253\subsubsection{The \lstinline$throwResume$ statement}
     4254
     4255
     4256\subsection{Exception statements}
     4257
     4258\begin{syntax}
     4259\lhs{exception-statement}
     4260\rhs \lstinline$try$ \nonterm{compound-statement} \nonterm{handler-list}
     4261\rhs \lstinline$try$ \nonterm{compound-statement} \nonterm{finally-clause}
     4262\rhs \lstinline$try$ \nonterm{compound-statement} \nonterm{handler-list} \nonterm{finally-clause}
     4263\lhs{handler-list}
     4264\rhs \nonterm{handler-clause}
     4265\rhs \lstinline$catch$ \lstinline$($ \ldots \lstinline$)$ \nonterm{compound-statement}
     4266\rhs \nonterm{handler-clause} \lstinline$catch$ \lstinline$($ \ldots \lstinline$)$ \nonterm{compound-statement}
     4267\rhs \lstinline$catchResume$ \lstinline$($ \ldots \lstinline$)$ \nonterm{compound-statement}
     4268\rhs \nonterm{handler-clause} \lstinline$catchResume$ \lstinline$($ \ldots \lstinline$)$ \nonterm{compound-statement}
     4269\lhs{handler-clause}
     4270\rhs \lstinline$catch$ \lstinline$($ \nonterm{exception-declaration} \lstinline$)$ \nonterm{compound-statement}
     4271\rhs \nonterm{handler-clause} \lstinline$catch$ \lstinline$($ \nonterm{exception-declaration} \lstinline$)$ \nonterm{compound-statement}
     4272\rhs \lstinline$catchResume$ \lstinline$($ \nonterm{exception-declaration} \lstinline$)$ \nonterm{compound-statement}
     4273\rhs \nonterm{handler-clause} \lstinline$catchResume$ \lstinline$($ \nonterm{exception-declaration} \lstinline$)$ \nonterm{compound-statement}
     4274\lhs{finally-clause}
     4275\rhs \lstinline$finally$ \nonterm{compound-statement}
     4276\lhs{exception-declaration}
     4277\rhs \nonterm{type-specifier}
     4278\rhs \nonterm{type-specifier} \nonterm{declarator}
     4279\rhs \nonterm{type-specifier} \nonterm{abstract-declarator}
     4280\rhs \nonterm{new-abstract-declarator-tuple} \nonterm{identifier}
     4281\rhs \nonterm{new-abstract-declarator-tuple}
     4282\lhs{asynchronous-statement}
     4283\rhs \lstinline$enable$ \nonterm{identifier-list} \nonterm{compound-statement}
     4284\rhs \lstinline$disable$ \nonterm{identifier-list} \nonterm{compound-statement}
     4285\end{syntax}
     4286
     4287\Index{Exception statement}s allow a dynamic call to a handler for \Index{recovery} (\Index{termination}) or \Index{correction} (\Index{resumption}) of an \Index{abnormal event}.
     4288
     4289
     4290\subsubsection{The \lstinline$try$ statement}
     4291
     4292The \lstinline$try$ statement is a block with associated handlers, called a \Index{guarded block};
     4293all other blocks are \Index{unguarded block}s.
     4294A \lstinline$goto$, \lstinline$break$, \lstinline$return$, or \lstinline$continue$ statement can be used to transfer control out of a try block or handler, but not into one.
     4295
     4296
     4297\subsubsection{The \lstinline$enable$/\lstinline$disable$ statements}
     4298
     4299The \lstinline$enable$/\lstinline$disable$ statements toggle delivery of \Index{asynchronous exception}s.
    40844300
    40854301
  • src/GenPoly/Specialize.cc

    rb762122 r24e7b47  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sat Jun 13 15:54:07 2015
    13 // Update Count     : 6
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Tue Sep 22 14:04:13 2015
     13// Update Count     : 15
    1414//
    1515
     
    8686
    8787        Expression * Specialize::doSpecialization( Type *formalType, Expression *actual, InferredParams *inferParams ) {
     88                assert( ! actual->get_results().empty() );
    8889                if ( needsSpecialization( formalType, actual->get_results().front(), env ) ) {
    8990                        PointerType *ptrType;
     
    167168        Expression * Specialize::mutate( AddressExpr *addrExpr ) {
    168169                addrExpr->get_arg()->acceptMutator( *this );
     170                assert( ! addrExpr->get_results().empty() );
    169171                addrExpr->set_arg( doSpecialization( addrExpr->get_results().front(), addrExpr->get_arg() ) );
    170172                return addrExpr;
     
    173175        Expression * Specialize::mutate( CastExpr *castExpr ) {
    174176                castExpr->get_arg()->acceptMutator( *this );
    175                 castExpr->set_arg( doSpecialization( castExpr->get_results().front(), castExpr->get_arg() ) );
     177                if ( ! castExpr->get_results().empty() ) {
     178                        // this may not be the correct condition, but previously the next statement
     179                        // was happening unchecked, causing a crash on a cast to void
     180                        castExpr->set_arg( doSpecialization( castExpr->get_results().front(), castExpr->get_arg() ) );         
     181                }
    176182                return castExpr;
    177183        }
  • src/SymTab/Indexer.h

    rb762122 r24e7b47  
    1010// Created On       : Sun May 17 21:38:55 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Aug 05 13:51:39 2015
    13 // Update Count     : 4
     12// Last Modified On : Thu Sep 17 16:05:38 2015
     13// Update Count     : 5
    1414//
    1515
     
    1919#include <list>
    2020#include <string>
    21 #include <map>
    2221
    2322#include "SynTree/Visitor.h"
  • src/SynTree/Expression.cc

    rb762122 r24e7b47  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Aug 12 14:02:45 2015
    13 // Update Count     : 30
     12// Last Modified On : Wed Sep 02 12:07:10 2015
     13// Update Count     : 33
    1414//
    1515
     
    3131Expression::Expression( Expression *_aname ) : env( 0 ), argName( _aname ) {}
    3232
    33 Expression::Expression( const Expression &other ) : env( maybeClone( other.env ) ) {
     33Expression::Expression( const Expression &other ) : env( maybeClone( other.env ) ), argName( maybeClone( other.get_argName() ) ) {
    3434        cloneAll( other.results, results );
    35         argName = other.get_argName();
    3635}
    3736
Note: See TracChangeset for help on using the changeset viewer.