Changeset 73bf8cf


Ignore:
Timestamp:
Aug 3, 2016, 11:22:09 AM (5 years ago)
Author:
Rob Schluntz <rschlunt@…>
Branches:
aaron-thesis, arm-eh, cleanup-dtors, ctor, deferred_resn, demangler, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, resolv-new, with_gc
Children:
f9cebb5
Parents:
8a443f4 (diff), aea7168 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' into ctor

Files:
6 edited

Legend:

Unmodified
Added
Removed
  • doc/LaTeXmacros/common.tex

    r8a443f4 r73bf8cf  
    1111%% Created On       : Sat Apr  9 10:06:17 2016
    1212%% Last Modified By : Peter A. Buhr
    13 %% Last Modified On : Mon Aug  1 09:11:20 2016
    14 %% Update Count     : 225
     13%% Last Modified On : Tue Aug  2 17:02:02 2016
     14%% Update Count     : 228
    1515%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1616
     
    4040\newcommand{\CC}{\rm C\kern-.1em\hbox{+\kern-.25em+}\xspace} % CC symbolic name
    4141\newcommand{\CCeleven}{\rm C\kern-.1em\hbox{+\kern-.25em+}11\xspace} % C++11 symbolic name
    42 \def\c11{ISO/IEC C}                                             % C11 name (cannot have numbers in latex command name)
     42\newcommand{\Celeven}{C11\xspace}               % C11 symbolic name
    4343
    4444%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  • doc/user/user.tex

    r8a443f4 r73bf8cf  
    1111%% Created On       : Wed Apr  6 14:53:29 2016
    1212%% Last Modified By : Peter A. Buhr
    13 %% Last Modified On : Mon Aug  1 09:11:24 2016
    14 %% Update Count     : 1271
     13%% Last Modified On : Tue Aug  2 17:39:02 2016
     14%% Update Count     : 1286
    1515%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1616
     
    226226
    227227\section{Interoperability}
     228\label{s:Interoperability}
    228229
    229230\CFA is designed to integrate well with existing C programs and libraries.
     
    314315The \CFA compilation message is printed at the beginning of a compilation.
    315316\textbf{This option is the default.}
     317
     318\item
     319\Indexc{-no-include-std}\index{compilation option!-no-include-std@©-no-include-std©}
     320Do not supply ©extern "C"© wrappers for \Celeven standard include files (see~\VRef{s:StandardHeaders}).
     321\textbf{This option is \emph{not} the default.}
    316322\end{description}
    317323
     
    43634369
    43644370
    4365 \section{New Keywowrds}
    4366 
    4367 ©catch©, ©catchResume©, ©choose©, \quad ©disable©, ©dtype©, \quad ©enable©, \quad ©fallthrough©, ©fallthru©, ©finally©, ©forall©, ©ftype©, \quad ©lvalue©, \quad ©otype©, \quad ©throw©, ©throwResume©, ©trait©, ©try©
     4371\section{New Keywords}
     4372\label{s:NewKeywords}
     4373
     4374\begin{quote2}
     4375\begin{tabular}{ll}
     4376©catch©                 & ©lvalue©              \\
     4377©catchResume©   &                               \\
     4378©choose©                & ©otype©               \\
     4379                                &                               \\
     4380©disable©               & ©throw©               \\
     4381©dtype©                 & ©throwResume© \\
     4382                                & ©trait©               \\
     4383©enable©                & ©try©                 \\
     4384                                &                               \\
     4385©fallthrough©                                   \\
     4386©fallthru©                                              \\
     4387©finally©                                               \\
     4388©forall©                                                \\
     4389©ftype©                                                 \\
     4390\end{tabular}
     4391\end{quote2}
     4392
     4393
     4394\section{Standard Headers}
     4395\label{s:StandardHeaders}
     4396
     4397C prescribes the following standard header-files:
     4398\begin{quote2}
     4399\begin{minipage}{\linewidth}
     4400\begin{tabular}{lll}
     4401assert.h        & math.h                & stdlib.h              \\
     4402complex.h       & setjmp.h              & stdnoreturn.h \\
     4403ctype.h         & signal.h              & string.h              \\
     4404errno.h         & stdalign.h    & tgmath.h              \\
     4405fenv.h          & stdarg.h              & threads.h             \\
     4406float.h         & stdatomic.h   & time.h                \\
     4407inttypes.h      & stdbool.h             & uchar.h               \\
     4408iso646.h        & stddef.h              & wchar.h               \\
     4409limits.h        & stdint.h              & wctype.h              \\
     4410locale.h        & stdio.h               & unistd.h\footnote{\CFA extension}
     4411\end{tabular}
     4412\end{minipage}
     4413\end{quote2}
     4414For the prescribed head-files, \CFA implicit wraps their includes in an ©extern "C"©;
     4415hence, names in these include files are not mangled\index{mangling!name} (see~\VRef{s:Interoperability}).
     4416All other C header files must be explicitly wrapped in ©extern "C"© to prevent name mangling.
    43684417
    43694418
     
    43754424\item
    43764425\begin{description}
    4377 \item[Change:] add new keywords \\
     4426\item[Change:] add new keywords (see~\VRef{s:NewKeywords}) \\
    43784427New keywords are added to \CFA.
    43794428\item[Rationale:] keywords added to implement new semantics of \CFA.
     
    44734522\begin{description}
    44744523\item[Change:] have ©struct© introduce a scope for nested types
    4475 In C, the name of the nested types belongs to the same scope as the name of the outermost enclosing 
     4524In C, the name of the nested types belongs to the same scope as the name of the outermost enclosing
    44764525Example:
    44774526\begin{lstlisting}
     
    45964645%$
    45974646\begin{lstlisting}[mathescape=off]
    4598 sout | "x (" | 1 | "x [" | 2 | "x {" | 3 | "x $" | 4 | "x £" | 5 | "x ¥" | 6 | "x ¡" | 7 | "x ¿" | 8 | "x «" | 9 | endl;
     4647sout | "x (" | 1 | "x [" | 2 | "x {" | 3 | "x $" | 4 | "x £" | 5 | "x ¥" | 6 | "x ¡" | 7
     4648         | "x ¿" | 8 | "x «" | 9 | endl;
    45994649\end{lstlisting}
    46004650%$
     
    46064656A seperator does not appear after a C string ending with the (extended) \Index{ASCII}\index{ASCII!extended} characters: ©,.:;!?)]}%¢»©
    46074657\begin{lstlisting}[belowskip=0pt]
    4608 sout | 1 | ", x" | 2 | ". x" | 3 | ": x" | 4 | "; x" | 5 | "! x" | 6 | "? x" | 7 | ") x" | 8 | "] x" | 9 | "} x"
    4609          | 10 | "% x" | 11 | "¢ x" | 12 | "» x" | endl;
     4658sout | 1 | ", x" | 2 | ". x" | 3 | ": x" | 4 | "; x" | 5 | "! x" | 6 | "? x" | 7
     4659         | ") x" | 8 | "] x" | 9 | "} x" | 10 | "% x" | 11 | "¢ x" | 12 | "» x" | endl;
    46104660\end{lstlisting}
    46114661\begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
     
    46234673The following \CC-style \Index{manipulator}s allow further control over implicit seperation.
    46244674\begin{lstlisting}[mathescape=off,belowskip=0pt]
    4625 sout | sepOn | 1 | 2 | 3 | sepOn | endl;        // separator at start of line
     4675sout | sepOn | 1 | 2 | 3 | sepOn | endl;        §\C{// separator at start of line}§
    46264676\end{lstlisting}
    46274677\begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
     
    46294679\end{lstlisting}
    46304680\begin{lstlisting}[mathescape=off,aboveskip=0pt,belowskip=0pt]
    4631 sout | 1 | sepOff | 2 | 3 | endl;                       // turn off implicit separator temporarily
     4681sout | 1 | sepOff | 2 | 3 | endl;                       §\C{// turn off implicit separator temporarily}§
    46324682\end{lstlisting}
    46334683\begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
     
    46354685\end{lstlisting}
    46364686\begin{lstlisting}[mathescape=off,aboveskip=0pt,belowskip=0pt]
    4637 sout | sepDisable | 1 | 2 | 3 | endl;           // turn off implicit separation, affects all subsequent prints
     4687sout | sepDisable | 1 | 2 | 3 | endl;           §\C{// turn off implicit separation, affects all subsequent prints}§
    46384688\end{lstlisting}
    46394689\begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
     
    46414691\end{lstlisting}
    46424692\begin{lstlisting}[mathescape=off,aboveskip=0pt,belowskip=0pt]
    4643 sout | 1 | sepOn | 2 | 3 | endl;                        // turn on implicit separator temporarily
     4693sout | 1 | sepOn | 2 | 3 | endl;                        §\C{// turn on implicit separator temporarily}§
    46444694\end{lstlisting}
    46454695\begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
     
    46474697\end{lstlisting}
    46484698\begin{lstlisting}[mathescape=off,aboveskip=0pt,belowskip=0pt]
    4649 sout | sepEnable | 1 | 2 | 3 | endl;            // turn on implicit separation, affects all subsequent prints
     4699sout | sepEnable | 1 | 2 | 3 | endl;            §\C{// turn on implicit separation, affects all subsequent prints}§
    46504700\end{lstlisting}
    46514701\begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
     
    46534703\end{lstlisting}
    46544704\begin{lstlisting}[mathescape=off,aboveskip=0pt,aboveskip=0pt,belowskip=0pt]
    4655 sepSet( sout, ", $" );                                          // change separator from " " to ", $"
     4705sepSet( sout, ", $" );                                          §\C{// change separator from " " to ", \$"}§
    46564706sout | 1 | 2 | 3 | endl;
    46574707\end{lstlisting}
  • src/GenPoly/Box.cc

    r8a443f4 r73bf8cf  
    619619                        return 0;
    620620                }
    621                
     621
    622622                /// Returns T if the given declaration is a function with parameters (T*, T) for some TypeInstType T, NULL otherwise
    623623                TypeInstType *isTypeInstPtrValFn( DeclarationWithType *decl ) {
     
    637637                        return 0;
    638638                }
    639                
     639
    640640                /// Returns T if the given declaration is (*?=?)(T *, T) for some TypeInstType T (return not checked, but maybe should be), NULL otherwise
    641641                TypeInstType *isTypeInstAssignment( DeclarationWithType *decl ) {
     
    677677                        return 0;
    678678                }
    679                
     679
    680680                /// Returns T if the given declaration is a function with parameters (T*, T) for some type T, where neither parameter is cv-qualified,
    681681                /// NULL otherwise
     
    772772                                copyOps.beginScope();
    773773                                dtorOps.beginScope();
    774                                
     774
    775775                                DeclarationWithType *oldRetval = retval;
    776776                                bool oldUseRetval = useRetval;
     
    14711471                VariableExpr *wrapFunctionDecl( DeclarationWithType *functionDecl ) {
    14721472                        // line below cloned from FixFunction.cc
     1473                        // xxx - functionObj is never added to a list of declarations...
    14731474                        ObjectDecl *functionObj = new ObjectDecl( functionDecl->get_name(), functionDecl->get_storageClass(), functionDecl->get_linkage(), 0,
    14741475                                                                  new PointerType( Type::Qualifiers(), functionDecl->get_type()->clone() ), 0 );
    14751476                        functionObj->set_mangleName( functionDecl->get_mangleName() );
     1477                        functionObj->set_scopeLevel( functionDecl->get_scopeLevel() );
    14761478                        return new VariableExpr( functionObj );
    14771479                }
     
    14921494                                        = ParamEntry( assertOp->get_uniqueId(), assertOp->get_type()->clone(), actualDecl->get_type()->clone(), wrapFunctionDecl( assertOp ) );
    14931495                }
    1494                
     1496
    14951497                Statement * Pass1::mutate( ReturnStmt *returnStmt ) {
    14961498                        if ( retval && returnStmt->get_expr() ) {
     
    15541556                                                DeclarationWithType *assertDtor = findOpForType( formalType, dtorOps, scopedDtorOps );
    15551557                                                if ( ! assertDtor ) throw SemanticError( "No destructor found for ", formalType );
    1556                                                
     1558
    15571559                                                // add inferred parameters for otype operators to assignment expression
    15581560                                                // NOTE: Code here assumes that first four assertions are assign op, ctor, copy ctor, dtor, in that order
     
    15681570                                                ++actualIt;
    15691571                                                addAssertionFor( assignExpr, *actualIt, assertDtor );
    1570                                                
    1571                                                 //DeclarationWithType *actualDecl = asserts.front();
    1572                                                 //assignExpr->get_inferParams()[ actualDecl->get_uniqueId() ]
    1573                                                 //      = ParamEntry( assertAssign->get_uniqueId(), assertAssign->get_type()->clone(), actualDecl->get_type()->clone(), wrapFunctionDecl( assertAssign ) );
     1572
    15741573                                        }
    15751574                                }
     
    21812180                bool PolyGenericCalculator::findGeneric( Type *ty ) {
    21822181                        ty = replaceTypeInst( ty, env );
    2183                        
     2182
    21842183                        if ( TypeInstType *typeInst = dynamic_cast< TypeInstType* >( ty ) ) {
    21852184                                if ( scopeTyVars.find( typeInst->get_name() ) != scopeTyVars.end() ) {
  • src/driver/cfa.cc

    r8a443f4 r73bf8cf  
    1010// Created On       : Tue Aug 20 13:44:49 2002
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jul  7 08:56:01 2016
    13 // Update Count     : 144
     12// Last Modified On : Tue Aug  2 12:23:11 2016
     13// Update Count     : 147
    1414//
    1515
     
    8787        bool cpp_flag = false;                                                          // -E or -M flag, preprocessor only
    8888        bool std_flag = false;                                                          // -std= flag
     89        bool noincstd_flag = false;                                                     // -no-include-std= flag
    8990        bool debugging __attribute(( unused )) = false;         // -g flag
    9091
     
    144145                        } else if ( arg == "-nohelp" ) {
    145146                                help = false;                                                   // strip the nohelp flag
     147                        } else if ( arg == "-no-include-std" ) {
     148                                noincstd_flag = true;                                   // strip the no-include-std flag
    146149                        } else if ( arg == "-compiler" ) {
    147150                                // use the user specified compiler
     
    248251        args[nargs] = "-I" CFA_INCDIR;
    249252        nargs += 1;
    250         args[nargs] = "-I" CFA_INCDIR "/stdhdr";
    251         nargs += 1;
     253        if ( ! noincstd_flag ) {                                                        // do not use during build
     254                args[nargs] = "-I" CFA_INCDIR "/stdhdr";
     255                nargs += 1;
     256        } // if
    252257        args[nargs] = "-I" CFA_INCDIR "/containers";
    253258        nargs += 1;
  • src/libcfa/Makefile.am

    r8a443f4 r73bf8cf  
    1111## Created On       : Sun May 31 08:54:01 2015
    1212## Last Modified By : Peter A. Buhr
    13 ## Last Modified On : Fri Jul  8 23:05:11 2016
    14 ## Update Count     : 192
     13## Last Modified On : Tue Aug  2 12:17:23 2016
     14## Update Count     : 196
    1515###############################################################################
    1616
     
    2626# create extra forward types/declarations to reduce inclusion of library files
    2727extras.cf : extras.regx extras.c
    28         $(AM_V_GEN)@BACKEND_CC@ @CFA_FLAGS@ -E ${srcdir}/extras.c | grep -f extras.regx > ${srcdir}/extras.cf
     28        ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -E ${srcdir}/extras.c | grep -f extras.regx > ${srcdir}/extras.cf
    2929
    3030# create forward declarations for gcc builtins
    3131builtins.cf : builtins.c
    32         $(AM_V_GEN)if [ -e $< ] ; then \
     32        ${AM_V_GEN}if [ -e $< ] ; then \
    3333                @BACKEND_CC@ -E -P $^ | sed -e "/targetm/s/.*//" -e "/_Decimal/s/.*//" -e "s/void (const char \*)0();//" -e "s/\"//g" -e "s/\(__builtin_\) /\1/" > $@ ; \
    3434        fi
    3535
    3636builtins.c : builtins.def prototypes.awk
    37         $(AM_V_GEN)if [ -e $< ] ; then \
     37        ${AM_V_GEN}if [ -e $< ] ; then \
    3838                @BACKEND_CC@ -E prototypes.c | awk -f prototypes.awk > $@ ; \
    3939        fi
     
    4848
    4949libcfa-prelude.c : ${srcdir}/prelude.cf ${srcdir}/extras.cf ${srcdir}/builtins.cf
    50         $(AM_V_GEN)${abs_top_srcdir}/src/driver/cfa-cpp -l ${srcdir}/prelude.cf $@  # use src/cfa-cpp as not in lib until after install
     50        ${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -l ${srcdir}/prelude.cf $@  # use src/cfa-cpp as not in lib until after install
    5151
    5252libcfa-prelude.o : libcfa-prelude.c
    53          $(AM_V_GEN)@BACKEND_CC@ @CFA_FLAGS@ -c -o $@ $<
     53         ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -c -o $@ $<
    5454
    55 CFLAGS = -quiet -g -Wall -Wno-unused-function @CFA_FLAGS@ -B${abs_top_srcdir}/src/driver -XCFA -t # TEMPORARY: does not build with -O2
     55CFLAGS = -quiet -no-include-std -g -Wall -Wno-unused-function @CFA_FLAGS@ -B${abs_top_srcdir}/src/driver -XCFA -t # TEMPORARY: does not build with -O2
    5656CC = ${abs_top_srcdir}/src/driver/cfa
    5757
     
    6363        @true
    6464
    65 ${libobjs} : ${abs_top_srcdir}/src/driver/cfa-cpp ${cfalib_DATA}        # add dependency to cfa-cpp so all libraries are rebuilt with new translator
     65${libobjs} : ${abs_top_srcdir}/src/driver/cfa-cpp ${cfalib_DATA} # add dependency to cfa-cpp so all libraries are rebuilt with new translator
    6666
    6767libcfa_a_SOURCES = libcfa-prelude.c ${headers:=.c}
  • src/libcfa/Makefile.in

    r8a443f4 r73bf8cf  
    136136CFA_LIBDIR = @CFA_LIBDIR@
    137137CFA_PREFIX = @CFA_PREFIX@
    138 CFLAGS = -quiet -g -Wall -Wno-unused-function @CFA_FLAGS@ -B${abs_top_srcdir}/src/driver -XCFA -t # TEMPORARY: does not build with -O2
     138CFLAGS = -quiet -no-include-std -g -Wall -Wno-unused-function @CFA_FLAGS@ -B${abs_top_srcdir}/src/driver -XCFA -t # TEMPORARY: does not build with -O2
    139139CPP = @CPP@
    140140CPPFLAGS = @CPPFLAGS@
     
    603603# create extra forward types/declarations to reduce inclusion of library files
    604604extras.cf : extras.regx extras.c
    605         $(AM_V_GEN)@BACKEND_CC@ @CFA_FLAGS@ -E ${srcdir}/extras.c | grep -f extras.regx > ${srcdir}/extras.cf
     605        ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -E ${srcdir}/extras.c | grep -f extras.regx > ${srcdir}/extras.cf
    606606
    607607# create forward declarations for gcc builtins
    608608builtins.cf : builtins.c
    609         $(AM_V_GEN)if [ -e $< ] ; then \
     609        ${AM_V_GEN}if [ -e $< ] ; then \
    610610                @BACKEND_CC@ -E -P $^ | sed -e "/targetm/s/.*//" -e "/_Decimal/s/.*//" -e "s/void (const char \*)0();//" -e "s/\"//g" -e "s/\(__builtin_\) /\1/" > $@ ; \
    611611        fi
    612612
    613613builtins.c : builtins.def prototypes.awk
    614         $(AM_V_GEN)if [ -e $< ] ; then \
     614        ${AM_V_GEN}if [ -e $< ] ; then \
    615615                @BACKEND_CC@ -E prototypes.c | awk -f prototypes.awk > $@ ; \
    616616        fi
     
    623623
    624624libcfa-prelude.c : ${srcdir}/prelude.cf ${srcdir}/extras.cf ${srcdir}/builtins.cf
    625         $(AM_V_GEN)${abs_top_srcdir}/src/driver/cfa-cpp -l ${srcdir}/prelude.cf $@  # use src/cfa-cpp as not in lib until after install
     625        ${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -l ${srcdir}/prelude.cf $@  # use src/cfa-cpp as not in lib until after install
    626626
    627627libcfa-prelude.o : libcfa-prelude.c
    628          $(AM_V_GEN)@BACKEND_CC@ @CFA_FLAGS@ -c -o $@ $<
     628         ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -c -o $@ $<
    629629
    630630# extensionless header files are overridden by -o flag in default makerule => explicitly override default rule to silently do nothing
     
    632632        @true
    633633
    634 ${libobjs} : ${abs_top_srcdir}/src/driver/cfa-cpp ${cfalib_DATA}        # add dependency to cfa-cpp so all libraries are rebuilt with new translator
     634${libobjs} : ${abs_top_srcdir}/src/driver/cfa-cpp ${cfalib_DATA} # add dependency to cfa-cpp so all libraries are rebuilt with new translator
    635635
    636636maintainer-clean-local:
Note: See TracChangeset for help on using the changeset viewer.