Changes in / [72b0573:56b53b2]


Ignore:
Files:
107 added
109 deleted
15 edited

Legend:

Unmodified
Added
Removed
  • doc/bibliography/pl.bib

    r72b0573 r56b53b2  
    939939    title       = {\textsf{C}$\mathbf{\forall}$ : Adding Modern Programming Language Features to C},
    940940    year        = 2018,
    941     month       = aug,
    942941    journal     = spe,
    943     note        = {http://dx.doi.org/10.1002/spe.2624},
     942    note        = {Accepted, to appear},
    944943}
    945944
     
    963962    comment     = {
    964963        The evidence given is thin.
    965     },
     964        }
    966965}
    967966
     
    15811580
    15821581@mastersthesis{Delisle18,
    1583     author      = {Thierry Delisle},
     1582    author      = {Thierry Delisle },
    15841583    title       = {Concurrency in \textsf{C}$\mathbf{\forall}$},
    15851584    school      = {School of Computer Science, University of Waterloo},
     
    18281827    key         = {Peter Buhr},
    18291828    title       = {CS343},
    1830     year        = 2018,
     1829    year        = 2017,
    18311830    howpublished= {\href{https://www.student.cs.uwaterloo.ca/~cs343}{https://\-www.student.cs.uwaterloo.ca/\-~cs343}},
    18321831}
     
    33633362    author      = {Peter Buhr and David Dice and Wim H. Hesselink},
    33643363    journal     = ccpe,
    3365     volume      = 30,
    3366     number      = 18,
     3364    volumeopt   = 30,
     3365    numberopt   = 4,
    33673366    year        = 2018,
    3368     month       = sep,
     3367    month       = may,
    33693368    publisher   = {John Wiley \& Sons},
    33703369    note        = {\url{https://doi-org.proxy.lib.uwaterloo.ca/10.1002/cpe.4475}}
     
    38503849    keywords    = {concurrency, critical section},
    38513850    contributer = {pabuhr@plg},
    3852     author      = {Dominic Duggan and Gordon V. Cormack and John Ophel},
     3851    author      = {Dominic Duggan and G. V. Cormack and John Ophel},
    38533852    title       = {Kinded Type Inference for Parametric Overloading},
    38543853    journal     = acta,
     
    58565855    keywords    = {Cyclone, existential types, polymorphism, type variables},
    58575856    contributer = {a3moss@plg},
    5858     author      = {Dan Grossman},
     5857    author      = {D. Grossman},
    58595858    title       = {Quantified Types in an Imperative Language},
    58605859    journal     = toplas,
  • doc/user/user.tex

    r72b0573 r56b53b2  
    1111%% Created On       : Wed Apr  6 14:53:29 2016
    1212%% Last Modified By : Peter A. Buhr
    13 %% Last Modified On : Fri Aug 31 07:54:50 2018
    14 %% Update Count     : 3396
     13%% Last Modified On : Thu Jul 26 17:29:05 2018
     14%% Update Count     : 3366
    1515%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1616
     
    210210Even with all its problems, C continues to be popular because it allows writing software at virtually any level in a computer system without restriction.
    211211For system programming, where direct access to hardware, storage management, and real-time issues are a requirement, C is usually the only language of choice.
    212 The TIOBE index~\cite{TIOBE} for July 2018 ranks the top five most \emph{popular} programming languages as \Index*{Java} 16\%, C 14\%, \Index*[C++]{\CC{}} 7.5\%, Python 6\%, Visual Basic 4\% = 47.5\%, where the next 50 languages are less than 4\% each, with a long tail.
     212The TIOBE index~\cite{TIOBE} for July 2018 ranks the top 5 most \emph{popular} programming languages as: \Index*{Java} 16\%, C 14\%, \Index*[C++]{\CC{}} 7.5\%, Python 6\%, Visual Basic 4\% = 47.5\%, where the next 50 languages are less than 4\% each, with a long tail.
    213213The top 3 rankings over the past 30 years are:
    214214\begin{center}
     
    351351The 2011 C standard plus GNU extensions.
    352352\item
    353 \Indexc[deletekeywords=inline]{-fgnu89-inline}\index{compilation option!-fgnu89-inline@{\lstinline[deletekeywords=inline]$-fgnu89-inline$}}
     353\Indexc[deletekeywords=inline]{-fgnu89-inline}\index{compilation option!-fgnu89-inline@{\lstinline[deletekeywords=inline]@-fgnu89-inline@}}
    354354Use the traditional GNU semantics for inline routines in C11 mode, which allows inline routines in header files.
    355355\end{description}
     
    455455#endif
    456456
    457 ®#include_next <bfdlink.h>                      §\C{// must have internal check for multiple expansion}§
     457®#include_next <bfdlink.h>                                      §\C{// must have internal check for multiple expansion}§
    458458®
    459459#if defined( with ) && defined( __CFA_BFD_H__ ) §\C{// reset only if set}§
     
    504504
    505505C, \CC, and Java (and many other programming languages) have no exponentiation operator\index{exponentiation!operator}\index{operator!exponentiation}, \ie $x^y$, and instead use a routine, like \Indexc{pow}, to perform the exponentiation operation.
    506 \CFA extends the basic operators with the exponentiation operator ©?\?©\index{?\\?@©?\?©} and ©?\=?©\index{?\\=?@©\=?©}, as in, ©x \ y© and ©x \= y©, which means $x^y$ and $x \leftarrow x^y$.
     506\CFA extends the basic operators with the exponentiation operator ©?\?©\index{?\\?@\lstinline@?\?@} and ©?\=?©\index{?\\=?@\lstinline@?\=?@}, as in, ©x \ y© and ©x \= y©, which means $x^y$ and $x \leftarrow x^y$.
    507507The priority of the exponentiation operator is between the cast and multiplicative operators, so that ©w * (int)x \ (int)y * z© is parenthesized as ©((w * (((int)x) \ ((int)y))) * z)©.
    508508
     
    516516256 64 -64 0.015625 -0.015625 18.3791736799526 0.264715-1.1922i
    517517\end{cfa}
    518 Parenthesis are necessary for complex constants or the expression is parsed as ©1.0f+®(®2.0fi \ 3.0f®)®+2.0fi©.
     518Parenthesis are necessary for the complex constants or the expression is parsed as ©1.0f+(2.0fi \ 3.0f)+2.0fi©.
    519519The exponentiation operator is available for all the basic types, but for user-defined types, only the integral-computation versions are available.
    520520For returning an integral value, the user type ©T© must define multiplication, ©*©, and one, ©1©;
     
    527527
    528528
    529 %\subsection{\texorpdfstring{\protect\lstinline@if@/\protect\lstinline@while@ Statement}{if Statement}}
    530 \subsection{\texorpdfstring{\LstKeywordStyle{if}/\LstKeywordStyle{while} Statement}{if/while Statement}}
    531 
    532 The ©if©/©while© expression allows declarations, similar to ©for© declaration expression.
    533 (Does not make sense for ©do©-©while©.)
    534 \begin{cfa}
    535 if ( ®int x = f()® ) ...                                        §\C{// x != 0}§
    536 if ( ®int x = f(), y = g()® ) ...                       §\C{// x != 0 \&\& y != 0}§
    537 if ( ®int x = f(), y = g(); x < y® ) ...        §\C{// relational expression}§
    538 if ( ®struct S { int i; } x = { f() }; x.i < 4® ) §\C{// relational expression}§
    539 
    540 while ( ®int x = f()® ) ...                                     §\C{// x != 0}§
    541 while ( ®int x = f(), y = g()® ) ...            §\C{// x != 0 \&\& y != 0}§
    542 while ( ®int x = f(), y = g(); x < y® ) ... §\C{// relational expression}§
    543 while ( ®struct S { int i; } x = { f() }; x.i < 4® ) ... §\C{// relational expression}§
    544 \end{cfa}
    545 Unless a relational expression is specified, each variable is compared not equal to 0, which is the standard semantics for the ©if©/©while© expression, and the results are combined using the logical ©&&© operator.\footnote{\CC only provides a single declaration always compared not equal to 0.}
     529%\subsection{\texorpdfstring{\protect\lstinline@if@ Statement}{if Statement}}
     530\subsection{\texorpdfstring{\LstKeywordStyle{if} Statement}{if Statement}}
     531
     532The ©if© expression allows declarations, similar to ©for© declaration expression:
     533\begin{cfa}
     534if ( int x = f() ) ...                                          §\C{// x != 0}§
     535if ( int x = f(), y = g() ) ...                         §\C{// x != 0 \&\& y != 0}§
     536if ( int x = f(), y = g(); ®x < y® ) ...        §\C{// relational expression}§
     537\end{cfa}
     538Unless a relational expression is specified, each variable is compared not equal to 0, which is the standard semantics for the ©if© expression, and the results are combined using the logical ©&&© operator.\footnote{\CC only provides a single declaration always compared not equal to 0.}
    546539The scope of the declaration(s) is local to the @if@ statement but exist within both the ``then'' and ``else'' clauses.
    547 
    548 
    549 %\subsection{\texorpdfstring{\protect\lstinline@for@ Statement}{for Statement}}
    550 \subsection{\texorpdfstring{\LstKeywordStyle{for} Statement}{for Statement}}
    551 
    552 The ©for©/©while©/©do-while© loop-control allows empty or simplified ranges.
    553 An empty conditional implies ©1©.
    554 The up-to range ©~©\index{~@©~©} means exclusive range [M,N);
    555 the up-to range ©~=©\index{~=@©~=©} means inclusive range [M,N].
    556 The down-to range ©-~©\index{-~@©-~©} means exclusive range [N,M);
    557 the down-to range ©-~=©\index{-~=@©-~=©} means inclusive range [N,M].
    558 ©0© is the implicit start value;
    559 ©1© is the implicit increment value for an up-to range and ©-1© for an implicit down-to range.
    560 The loop index is polymorphic in the type of the start value or comparison value when start is implicitly ©0©.
    561 \begin{cquote}
    562 \begin{tabular}{@{}ll|l@{}}
    563 \multicolumn{2}{c|}{for control} & \multicolumn{1}{c}{output} \\
    564 \hline
    565 \begin{cfa}
    566 while ®()® { sout | "empty"; break; }
    567 do { sout | "empty"; break; } while ®()®;
    568 for ®()® { sout | "empty"; break; }
    569 for ( ®0® ) { sout | "A"; }
    570 for ( ®1® ) { sout | "A"; }
    571 for ( ®10® ) { sout | "A"; }
    572 for ( ®1 ~= 10 ~ 2® ) { sout | "B"; }
    573 for ( ®10 -~= 1 ~ -2® ) { sout | "C"; }
    574 for ( ®0.5 ~ 5.5® ) { sout | "D"; }
    575 for ( ®5.5 -~ 0.5® ) { sout | "E"; }
    576 for ( ®i; 10® ) { sout | i; }
    577 for ( ®i; 1 ~= 10 ~ 2® ) { sout | i; }
    578 for ( ®i; 10 -~= 1 ~ -2® ) { sout | i; }
    579 for ( ®i; 0.5 ~ 5.5® ) { sout | i; }
    580 for ( ®i; 5.5 -~ 0.5® ) { sout | i; }
    581 for ( ®ui; 2u ~= 10u ~ 2u® ) { sout | ui; }
    582 for ( ®ui; 10u -~= 2u ~ -2u® ) { sout | ui; }
    583 int start = 3, comp = 10, inc = 2;
    584 for ( ®i; start ~ comp ~ inc + 1® ) { sout | i; }
    585 \end{cfa}
    586 &
    587 \begin{cfa}
    588 sout | endl;
    589 sout | endl;
    590 sout | endl;
    591 sout | endl;
    592 sout | endl;
    593 sout | endl;
    594 sout | endl;
    595 sout | endl;
    596 sout | endl;
    597 sout | endl;
    598 sout | endl;
    599 sout | endl;
    600 sout | endl;
    601 sout | endl;
    602 sout | endl;
    603 sout | endl;
    604 sout | endl;
    605 
    606 sout | endl;
    607 \end{cfa}
    608 &
    609 \begin{cfa}
    610 empty
    611 empty
    612 empty
    613 
    614 A
    615 A A A A A A A A A A
    616 B B B B B
    617 C C C C C
    618 D D D D D
    619 E E E E E
    620 0 1 2 3 4 5 6 7 8 9
    621 1 3 5 7 9
    622 10 8 6 4 2
    623 0.5 1.5 2.5 3.5 4.5
    624 5.5 4.5 3.5 2.5 1.5
    625 2 4 6 8 10
    626 10 8 6 4 2
    627 
    628 3 6 9
    629 \end{cfa}
    630 \end{tabular}
    631 \end{cquote}
    632540
    633541
     
    892800
    893801
    894 % for ()  => for ( ;; )
    895 % for ( 10 - t ) => for ( typeof(10 - t) ? = 0 ; ? < 10 - t; ? += 1 ) // using 0 and 1
    896 % for ( i ; 10 - t ) => for ( typeof(10 - t) i = 0 ; i < 10 - t; i += 1 ) // using 0 and 1
    897 % for ( T i ; 10 - t ) => for ( T i = 0 ; i < 10 - t; i += 1 ) // using 0 and 1
    898 % for ( 3~9 ) => for ( int ? = 3 ; ? < 9; ? += 1 ) // using 1
    899 % for ( i ; 3~9 ) => for ( int i = 3 ; i < 9; i += 1 ) // using 1
    900 % for ( T i ; 3~9 ) => for ( T i = 3 ; i < 9; i += 1 ) // using 1
    901 
    902 
    903802%\subsection{\texorpdfstring{Labelled \protect\lstinline@continue@ / \protect\lstinline@break@}{Labelled continue / break}}
    904803\subsection{\texorpdfstring{Labelled \LstKeywordStyle{continue} / \LstKeywordStyle{break} Statement}{Labelled continue / break Statement}}
     
    906805While C provides ©continue© and ©break© statements for altering control flow, both are restricted to one level of nesting for a particular control structure.
    907806Unfortunately, this restriction forces programmers to use \Indexc{goto} to achieve the equivalent control-flow for more than one level of nesting.
    908 To prevent having to switch to the ©goto©, \CFA extends the \Indexc{continue}\index{continue@©continue©!labelled}\index{labelled!continue@©continue©} and \Indexc{break}\index{break@©break©!labelled}\index{labelled!break@©break©} with a target label to support static multi-level exit\index{multi-level exit}\index{static multi-level exit}~\cite{Buhr85}, as in Java.
     807To prevent having to switch to the ©goto©, \CFA extends the \Indexc{continue}\index{continue@\lstinline@continue@!labelled}\index{labelled!continue@©continue©} and \Indexc{break}\index{break@\lstinline@break@!labelled}\index{labelled!break@©break©} with a target label to support static multi-level exit\index{multi-level exit}\index{static multi-level exit}~\cite{Buhr85}, as in Java.
    909808For both ©continue© and ©break©, the target label must be directly associated with a ©for©, ©while© or ©do© statement;
    910809for ©break©, the target label can also be associated with a ©switch©, ©if© or compound (©{}©) statement.
     
    991890\end{figure}
    992891
    993 Both labelled ©continue© and ©break© are a ©goto©\index{goto@©goto©!restricted} restricted in the following ways:
     892Both labelled ©continue© and ©break© are a ©goto©\index{goto@\lstinline@goto@!restricted} restricted in the following ways:
    994893\begin{itemize}
    995894\item
  • driver/as.cc

    r72b0573 r56b53b2  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // as.c -- map assembler file, scan for debug information. If found, expand file by one character and insert Cforall
    8 //         language code on the N line from the start of the debug information.
     7// as.c --
    98//
    109// Author           : Peter A. Buhr
    1110// Created On       : Wed Aug  1 10:49:42 2018
    1211// Last Modified By : Peter A. Buhr
    13 // Last Modified On : Sat Sep  8 08:40:16 2018
    14 // Update Count     : 97
     12// Last Modified On : Wed Aug 22 17:30:24 2018
     13// Update Count     : 93
    1514//
    1615
     
    4443        off_t size = mystat.st_size;
    4544
    46         if ( size ) {                                                                           // cannot map 0 sized file
    47                 char * start = (char *)mmap( NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0 );
    48                 if ( start == (void *)-1 ) { perror( "mmap" ); exit( EXIT_FAILURE ); };
     45        char * start = (char *)mmap( NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0 );
     46        if ( start == (void *)-1 ) { perror( "mmap" ); exit( EXIT_FAILURE ); };
    4947
    50                 if ( char * cursor = strstr( start, ".Ldebug_info0:" ) ) { // debug information ?
    51                         // Expand file by one byte to hold 2 character Cforall language code.
    52                         if ( ftruncate( fd, size + 1 ) ) { perror( "ftruncate" ); exit( EXIT_FAILURE ); };
     48        if ( char * cursor = strstr( start, ".Ldebug_info0:" ) ) { // debug information ?
     49                // Expand file by one byte to hold 2 character Cforall language code.
     50                if ( ftruncate( fd, size + 1 ) ) { perror( "ftruncate" ); exit( EXIT_FAILURE ); };
    5351
    54                         for ( int i = 0; i < 8; i += 1 ) {                      // move N (magic) lines forward
    55                                 cursor = strstr( cursor, "\n" ) + 1;
    56                         } // for
     52                for ( int i = 0; i < 8; i += 1 ) {                              // move N (magic) lines forward
     53                        cursor = strstr( cursor, "\n" ) + 1;
     54                } // for
    5755
    58                         cursor -= 2;                                                            // backup over "c\n" language value
    59                         if ( *(cursor - 1) != 'x' ) { fprintf( stderr, "invalid C language code\n" ); exit( EXIT_FAILURE ); };
     56                cursor -= 2;                                                                    // backup over "c\n" language value
     57                if ( *(cursor - 1) != 'x' ) { fprintf( stderr, "invalid C language code\n" ); exit( EXIT_FAILURE ); };
    6058
    61                         memmove( cursor + 2, cursor + 1, start + size - cursor - 1 ); // move remaining text 1 character right
     59                memmove( cursor + 2, cursor + 1, start + size - cursor - 1 ); // move remaining text 1 character right
    6260
    63                         *(cursor) = '2';                                                        // replace C language value with CFA
    64                         *(cursor + 1) = '5';
    65                 } // if
     61                *(cursor) = '2';                                                                // replace C language value with CFA
     62                *(cursor + 1) = '5';
     63        } // if
    6664
    67                 if ( munmap( start, size ) ) { perror( "munmap" ); exit( EXIT_FAILURE ); }; // update on disk
    68         } // if
     65        if ( munmap( start, size ) ) { perror( "munmap" ); exit( EXIT_FAILURE ); }; // update on disk
    6966
    7067        argv[0] = "as";
  • driver/cc1.cc

    r72b0573 r56b53b2  
    1010// Created On       : Fri Aug 26 14:23:51 2005
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Sep  3 16:57:05 2018
    13 // Update Count     : 125
     12// Last Modified On : Thu Aug 23 09:48:40 2018
     13// Update Count     : 122
    1414//
    1515
     
    3232string compiler_name( CFA_BACKEND_CC );                                 // path/name of C compiler
    3333
     34string D__GCC_X__( "-D__GCC_X__=" );
    3435string D__GCC_BPREFIX__( "-D__GCC_BPREFIX__=" );
    3536string D__CFA_FLAGPREFIX__( "-D__CFA_FLAG__=" );
     
    4546enum { NumSuffixes = 2 };
    4647const string suffixes[NumSuffixes] = { "cfa", "hfa", };
     48
    4749
    4850void suffix( string arg, const char * args[], int & nargs ) {
     
    114116void Stage1( const int argc, const char * const argv[] ) {
    115117        int code;
     118        int i;
    116119
    117120        string arg;
     
    136139        cerr << "Stage1" << endl;
    137140        #endif // __DEBUG_H__
     141
     142        // process all the arguments
     143
    138144        checkEnv( args, nargs );                                                        // arguments passed via environment variables
    139         #ifdef __DEBUG_H__
    140         for ( int i = 1; i < argc; i += 1 ) {
     145
     146        for ( i = 1; i < argc; i += 1 ) {
     147                #ifdef __DEBUG_H__
    141148                cerr << "argv[" << i << "]:\"" << argv[i] << "\"" << endl;
    142         } // for
    143         #endif // __DEBUG_H__
    144 
    145         // process all the arguments
    146 
    147         for ( int i = 1; i < argc; i += 1 ) {
     149                #endif // __DEBUG_H__
    148150                arg = argv[i];
     151                #ifdef __DEBUG_H__
     152                cerr << "arg:\"" << arg << "\"" << endl;
     153                #endif // __DEBUG_H__
    149154                if ( prefix( arg, "-" ) ) {
    150155                        // strip g++ flags that are inappropriate or cause duplicates in subsequent passes
     
    180185                                ncargs += 1;
    181186                                i += 1;                                                                 // and the argument
     187                        // } else if ( prefix( arg, D__GCC_X__ ) ) {
     188                        //      args[nargs] = "-x";
     189                        //      nargs += 1;
     190                        //      args[nargs] = ( *new string( arg.substr( D__GCC_X__.size() ) ) ).c_str(); // pass the flag along
     191                        //      nargs += 1;
     192                        // } else if ( arg == "-D" && prefix( argv[i + 1], D__GCC_X__.substr(2) ) ) {
     193                        //      args[nargs] = "-x";
     194                        //      nargs += 1;
     195                        //      args[nargs] = ( *new string( string( argv[i + 1] ).substr( D__GCC_X__.size() - 2 ) ) ).c_str(); // pass the flag along
     196                        //      nargs += 1;
     197                        //      i += 1;                                                                 // and the argument
    182198                        } else if ( prefix( arg, D__GCC_BPREFIX__ ) ) {
    183199                                bprefix = arg.substr( D__GCC_BPREFIX__.size() );
     
    235251        #ifdef __DEBUG_H__
    236252        cerr << "args:";
    237         for ( int i = 1; i < nargs; i += 1 ) {
     253        for ( i = 1; i < nargs; i += 1 ) {
    238254                cerr << " " << args[i];
    239255        } // for
     
    266282                #ifdef __DEBUG_H__
    267283                cerr << "nargs: " << nargs << endl;
    268                 for ( int i = 0; args[i] != NULL; i += 1 ) {
     284                for ( i = 0; args[i] != NULL; i += 1 ) {
    269285                        cerr << args[i] << " ";
    270286                } // for
     
    308324                #ifdef __DEBUG_H__
    309325                cerr << "cpp nargs: " << nargs << endl;
    310                 for ( int i = 0; args[i] != NULL; i += 1 ) {
     326                for ( i = 0; args[i] != NULL; i += 1 ) {
    311327                        cerr << args[i] << " ";
    312328                } // for
     
    361377                #ifdef __DEBUG_H__
    362378                cerr << "cfa-cpp ncargs: " << o_name << " " << CFA_flag << " " << ncargs << endl;
    363                 for ( int i = 0; cargs[i] != NULL; i += 1 ) {
     379                for ( i = 0; cargs[i] != NULL; i += 1 ) {
    364380                        cerr << cargs[i] << " ";
    365381                } // for
     
    391407
    392408void Stage2( const int argc, const char * const * argv ) {
     409        int i;
     410
    393411        string arg;
    394412
     
    401419        cerr << "Stage2" << endl;
    402420        #endif // __DEBUG_H__
     421
     422        // process all the arguments
     423
    403424        checkEnv( args, nargs );                                                        // arguments passed via environment variables
    404         #ifdef __DEBUG_H__
    405         for ( int i = 1; i < argc; i += 1 ) {
     425
     426        for ( i = 1; i < argc; i += 1 ) {
     427                #ifdef __DEBUG_H__
    406428                cerr << "argv[" << i << "]:\"" << argv[i] << "\"" << endl;
    407         } // for
    408         #endif // __DEBUG_H__
    409 
    410         // process all the arguments
    411 
    412         for ( int i = 1; i < argc; i += 1 ) {
     429                #endif // __DEBUG_H__
    413430                arg = argv[i];
     431                #ifdef __DEBUG_H__
     432                cerr << "arg:\"" << arg << "\"" << endl;
     433                #endif // __DEBUG_H__
    414434                if ( prefix( arg, "-" ) ) {
    415435                        // strip inappropriate flags
     
    456476        #ifdef __DEBUG_H__
    457477        cerr << "args:";
    458         for ( int i = 1; i < nargs; i += 1 ) {
     478        for ( i = 1; i < nargs; i += 1 ) {
    459479                cerr << " " << args[i];
    460480        } // for
     
    472492        #ifdef __DEBUG_H__
    473493        cerr << "stage2 nargs: " << nargs << endl;
    474         for ( int i = 0; args[i] != NULL; i += 1 ) {
     494        for ( i = 0; args[i] != NULL; i += 1 ) {
    475495                cerr << args[i] << " ";
    476496        } // for
     
    486506int main( const int argc, const char * const argv[], __attribute__((unused)) const char * const env[] ) {
    487507        #ifdef __DEBUG_H__
    488         for ( int int i = 0; env[i] != NULL; i += 1 ) {
     508        for ( int i = 0; env[i] != NULL; i += 1 ) {
    489509                cerr << env[i] << endl;
    490510        } // for
  • driver/cfa.cc

    r72b0573 r56b53b2  
    1010// Created On       : Tue Aug 20 13:44:49 2002
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Sep  3 16:47:59 2018
    13 // Update Count     : 275
     12// Last Modified On : Thu Aug 23 15:41:55 2018
     13// Update Count     : 270
    1414//
    1515
     
    4343const string suffixes[NumSuffixes] = { "cfa", "hfa", };
    4444
    45 bool suffix( string arg, const char * args[], int & nargs ) {
     45void suffix( string arg, const char * args[], int & nargs ) {
    4646        //std::cerr << arg << std::endl;
    4747        size_t dot = arg.find_last_of( "." );
    4848        //std::cerr << dot << " " << (dot != string::npos ? arg.substr( dot + 1 ) : "fred" ) << std::endl;
    49         if ( dot == string::npos ) return false;
     49        if ( dot == string::npos ) return;
    5050        string sx = arg.substr( dot + 1 );
    5151        for ( int i = 0; i < NumSuffixes; i += 1 ) {
     
    5555                        args[nargs] = "c";
    5656                        nargs += 1;
    57                         return true;
     57                        return;
    5858                } // if
    5959        } // for
    60         return false;
    6160} // suffix
    6261
     
    129128        #ifdef __DEBUG_H__
    130129        cerr << "CFA:" << endl;
     130        #endif // __DEBUG_H__
     131
     132        // process command-line arguments
     133
    131134        for ( int i = 1; i < argc; i += 1 ) {
    132             cerr << "argv[" << i << "]:\"" << argv[i] << "\"" << endl;
    133         } // for
    134         #endif // __DEBUG_H__
    135 
    136         // process command-line arguments
    137 
    138         for ( int i = 1; i < argc; i += 1 ) {
     135                #ifdef __DEBUG_H__
     136                cerr << "argv[" << i << "]:\"" << argv[i] << "\"" << endl;
     137                #endif // __DEBUG_H__
    139138                arg = argv[i];                                                                  // convert to string value
     139                #ifdef __DEBUG_H__
     140                cerr << "arg:\"" << arg << "\"" << endl;
     141                #endif // __DEBUG_H__
    140142                if ( prefix( arg, "-" ) ) {
    141143                        // pass through arguments
     
    200202                                args[nargs] = argv[i];                                  // pass the argument along
    201203                                nargs += 1;
     204                        } else if ( arg == "-x" ) {
     205                                xflag = true;
     206                                args[nargs] = argv[i];                                  // pass the argument along
     207                                nargs += 1;
     208                                i += 1;                                                                 // advance to argument
     209                                args[nargs] = argv[i];                                  // pass the argument along
     210                                nargs += 1;
     211                                // args[nargs] = ( *new string( string("-D__GCC_X__=") + argv[i] ) ).c_str(); // add the argument for -x
     212                                // nargs += 1;
     213                        } else if ( prefix( arg, "-x" ) ) {
     214                                xflag = true;
     215                                args[nargs] = argv[i];                                  // pass the argument along
     216                                nargs += 1;
     217                                // args[nargs] = ( *new string( string("-D__GCC_X__=") + arg.substr(2) ) ).c_str(); // add the argument for -x
     218                                // nargs += 1;
    202219                        } else if ( arg == "-w" ) {
    203220                                args[nargs] = argv[i];                                  // pass the argument along
     
    281298                        } // if
    282299                } else {
    283                         bool cfa = suffix( arg, args, nargs );          // check suffix
    284                         args[nargs] = argv[i];                                          // concatenate file
     300                        bool opt = false;
     301                        if ( ! xflag ) {
     302                                suffix( arg, args, nargs );                             // check suffix
     303                                // args[nargs] = ( *new string( string("-D__GCC_X__=c") ) ).c_str(); // add the argument for -x
     304                                // nargs += 1;
     305                                opt = true;
     306                        } // if
     307                        // concatenate other arguments
     308                        args[nargs] = argv[i];
    285309                        nargs += 1;
    286                         if ( cfa ) {
     310                        if ( opt ) {
    287311                                args[nargs] = "-x";
    288312                                nargs += 1;
    289313                                args[nargs] = "none";
    290314                                nargs += 1;
     315                                // args[nargs] = ( *new string( string("-D__GCC_X__=none") ) ).c_str(); // add the argument for -x
     316                                // nargs += 1;
    291317                        } // if
    292318                        nonoptarg = true;
     
    294320                } // if
    295321        } // for
    296 
    297     args[nargs] = "-x";                                 // turn off language
    298     nargs += 1;
    299     args[nargs] = "none";
    300     nargs += 1;
    301322
    302323        #ifdef __x86_64__
  • libcfa/configure

    r72b0573 r56b53b2  
    19591959
    19601960
    1961 
    19621961am__api_version='1.15'
    19631962
  • libcfa/src/heap.cfa

    r72b0573 r56b53b2  
    1010// Created On       : Tue Dec 19 21:58:35 2017
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Sep  6 09:01:30 2018
    13 // Update Count     : 513
     12// Last Modified On : Thu Aug 23 06:11:44 2018
     13// Update Count     : 511
    1414//
    1515
     
    329329        #endif // __CFA_DEBUG__
    330330
    331         //assert( heapManager.heapBegin != 0 );
    332         //heapManager{};
    333         if ( heapManager.heapBegin == 0 ) heapManager{};
     331        assert( heapManager.heapBegin == 0 );                           // always perform check, done once
     332        heapManager{};
    334333} // memory_startup
    335334
     
    701700
    702701static inline void * mallocNoStats( size_t size ) {             // necessary for malloc statistics
    703         //assert( heapManager.heapBegin != 0 );
    704         if ( unlikely( heapManager.heapBegin == 0 ) ) heapManager{}; // called before memory_startup ?
     702        assert( heapManager.heapBegin != 0 );
    705703        void * area = doMalloc( size );
    706704        if ( unlikely( area == 0 ) ) errno = ENOMEM;            // POSIX
  • src/CodeTools/module.mk

    r72b0573 r56b53b2  
    1616
    1717SRC += CodeTools/DeclStats.cc \
    18         CodeTools/ResolvProtoDump.cc \
    1918        CodeTools/TrackLoc.cc
  • src/CompilationState.cc

    r72b0573 r56b53b2  
    3030        parsep = false,
    3131        resolvep = false,
    32         resolvprotop = false,
    3332        symtabp = false,
    3433        treep = false,
  • src/CompilationState.h

    r72b0573 r56b53b2  
    3131        parsep,
    3232        resolvep,
    33         resolvprotop,
    3433        symtabp,
    3534        treep,
  • src/Makefile.in

    r72b0573 r56b53b2  
    220220        CodeGen/FixNames.$(OBJEXT) CodeGen/FixMain.$(OBJEXT) \
    221221        CodeGen/OperatorTable.$(OBJEXT) CodeTools/DeclStats.$(OBJEXT) \
    222         CodeTools/ResolvProtoDump.$(OBJEXT) \
    223222        CodeTools/TrackLoc.$(OBJEXT) Concurrency/Keywords.$(OBJEXT) \
    224223        Concurrency/Waitfor.$(OBJEXT) Common/SemanticError.$(OBJEXT) \
     
    520519        CodeGen/FixNames.cc CodeGen/FixMain.cc \
    521520        CodeGen/OperatorTable.cc CodeTools/DeclStats.cc \
    522         CodeTools/ResolvProtoDump.cc CodeTools/TrackLoc.cc \
    523         Concurrency/Keywords.cc Concurrency/Waitfor.cc \
    524         Common/SemanticError.cc Common/UniqueName.cc \
    525         Common/DebugMalloc.cc Common/Assert.cc Common/Heap.cc \
    526         Common/Eval.cc ControlStruct/LabelGenerator.cc \
     521        CodeTools/TrackLoc.cc Concurrency/Keywords.cc \
     522        Concurrency/Waitfor.cc Common/SemanticError.cc \
     523        Common/UniqueName.cc Common/DebugMalloc.cc Common/Assert.cc \
     524        Common/Heap.cc Common/Eval.cc ControlStruct/LabelGenerator.cc \
    527525        ControlStruct/LabelFixer.cc ControlStruct/MLEMutator.cc \
    528526        ControlStruct/Mutate.cc ControlStruct/ForExprMutator.cc \
     
    1001999CodeTools/DeclStats.$(OBJEXT): CodeTools/$(am__dirstamp) \
    10021000        CodeTools/$(DEPDIR)/$(am__dirstamp)
    1003 CodeTools/ResolvProtoDump.$(OBJEXT): CodeTools/$(am__dirstamp) \
    1004         CodeTools/$(DEPDIR)/$(am__dirstamp)
    10051001CodeTools/TrackLoc.$(OBJEXT): CodeTools/$(am__dirstamp) \
    10061002        CodeTools/$(DEPDIR)/$(am__dirstamp)
     
    11051101@AMDEP_TRUE@@am__include@ @am__quote@CodeGen/$(DEPDIR)/OperatorTable.Po@am__quote@
    11061102@AMDEP_TRUE@@am__include@ @am__quote@CodeTools/$(DEPDIR)/DeclStats.Po@am__quote@
    1107 @AMDEP_TRUE@@am__include@ @am__quote@CodeTools/$(DEPDIR)/ResolvProtoDump.Po@am__quote@
    11081103@AMDEP_TRUE@@am__include@ @am__quote@CodeTools/$(DEPDIR)/TrackLoc.Po@am__quote@
    11091104@AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/Assert.Po@am__quote@
  • src/Parser/LinkageSpec.cc

    r72b0573 r56b53b2  
    1010// Created On       : Sat May 16 13:22:09 2015
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Thr Spt 12 15:59:00 2018
    13 // Update Count     : 26
     12// Last Modified On : Fri Jul  7 11:11:00 2017
     13// Update Count     : 25
    1414//
    1515
     
    2323
    2424namespace LinkageSpec {
     25
     26Spec linkageCheck( CodeLocation location, const string * spec ) {
     27        assert( spec );
     28        unique_ptr<const string> guard( spec ); // allocated by lexer
     29        if ( *spec == "\"Cforall\"" ) {
     30                return Cforall;
     31        } else if ( *spec == "\"C\"" ) {
     32                return C;
     33        } else if ( *spec == "\"BuiltinC\"" ) {
     34                return BuiltinC;
     35        } else {
     36                SemanticError( location, "Invalid linkage specifier " + *spec );
     37        } // if
     38}
    2539
    2640Spec linkageUpdate( CodeLocation location, Spec old_spec, const string * cmd ) {
  • src/Parser/LinkageSpec.h

    r72b0573 r56b53b2  
    99// Author           : Rodolfo G. Esteves
    1010// Created On       : Sat May 16 13:24:28 2015
    11 // Last Modified By : Andrew Beach
    12 // Last Modified On : Thr Spt 13 15:59:00 2018
    13 // Update Count     : 17
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Mon Jul  2 07:46:49 2018
     13// Update Count     : 16
    1414//
    1515
     
    4141
    4242
     43        Spec linkageCheck( CodeLocation location, const std::string * );
     44        // Returns the Spec with the given name (limited to C, Cforall & BuiltinC)
    4345        Spec linkageUpdate( CodeLocation location, Spec old_spec, const std::string * cmd );
    4446        /* If cmd = "C" returns a Spec that is old_spec with is_mangled = false
  • src/SymTab/Validate.cc

    r72b0573 r56b53b2  
    403403                        assert( aggr ); // TODO: need to handle forward declarations
    404404                        for ( Declaration * member : aggr->members ) {
    405                                 if ( TypeInstType * inst = dynamic_cast< TypeInstType * >( child ) ) {
     405                                if ( StructInstType * inst = dynamic_cast< StructInstType * >( child ) ) {
     406                                        if ( StructDecl * aggr = dynamic_cast< StructDecl * >( member ) ) {
     407                                                if ( aggr->name == inst->name ) {
     408                                                        // TODO: is this case, and other non-TypeInstType cases, necessary?
     409                                                        return new StructInstType( qualType->get_qualifiers(), aggr );
     410                                                }
     411                                        }
     412                                } else if ( UnionInstType * inst = dynamic_cast< UnionInstType * >( child ) ) {
     413                                        if ( UnionDecl * aggr = dynamic_cast< UnionDecl * > ( member ) ) {
     414                                                if ( aggr->name == inst->name ) {
     415                                                        return new UnionInstType( qualType->get_qualifiers(), aggr );
     416                                                }
     417                                        }
     418                                } else if ( EnumInstType * inst = dynamic_cast< EnumInstType * >( child ) ) {
     419                                        if ( EnumDecl * aggr = dynamic_cast< EnumDecl * > ( member ) ) {
     420                                                if ( aggr->name == inst->name ) {
     421                                                        return new EnumInstType( qualType->get_qualifiers(), aggr );
     422                                                }
     423                                        }
     424                                } else if ( TypeInstType * inst = dynamic_cast< TypeInstType * >( child ) ) {
    406425                                        // name on the right is a typedef
    407426                                        if ( NamedTypeDecl * aggr = dynamic_cast< NamedTypeDecl * > ( member ) ) {
     
    410429                                                        Type * ret = aggr->base->clone();
    411430                                                        ret->get_qualifiers() = qualType->get_qualifiers();
    412                                                         TypeSubstitution sub = parent->genericSubstitution();
    413                                                         sub.apply(ret);
    414431                                                        return ret;
    415432                                                }
  • src/main.cc

    r72b0573 r56b53b2  
    3434#include "CodeGen/Generate.h"               // for generate
    3535#include "CodeTools/DeclStats.h"            // for printDeclStats
    36 #include "CodeTools/ResolvProtoDump.h"      // for dumpAsResolvProto
    3736#include "CodeTools/TrackLoc.h"             // for fillLocations
    3837#include "Common/CompilerError.h"           // for CompilerError
     
    272271                CodeTools::fillLocations( translationUnit );
    273272
    274                 if ( resolvprotop ) {
    275                         CodeTools::dumpAsResolvProto( translationUnit );
    276                         return 0;
    277                 }
    278 
    279273                PASS( "resolve", ResolvExpr::resolve( translationUnit ) );
    280274                if ( exprp ) {
     
    382376
    383377void parse_cmdline( int argc, char * argv[], const char *& filename ) {
    384         enum { Ast, Bbox, Bresolver, CtorInitFix, DeclStats, Expr, ExprAlt, Grammar, LibCFA, Linemarks, Nolinemarks, Nopreamble, Parse, PreludeDir, Prototypes, Resolver, ResolvProto, Symbol, Tree, TupleExpansion, Validate, };
     378        enum { Ast, Bbox, Bresolver, CtorInitFix, DeclStats, Expr, ExprAlt, Grammar, LibCFA, Linemarks, Nolinemarks, Nopreamble, Parse, PreludeDir, Prototypes, Resolver, Symbol, Tree, TupleExpansion, Validate, };
    385379
    386380        static struct option long_opts[] = {
     
    401395                { "no-prototypes", no_argument, 0, Prototypes },
    402396                { "resolver", no_argument, 0, Resolver },
    403                 { "resolv-proto", no_argument, 0, ResolvProto },
    404397                { "symbol", no_argument, 0, Symbol },
    405398                { "tree", no_argument, 0, Tree },
     
    414407        bool Wsuppress = false, Werror = false;
    415408        int c;
    416         while ( (c = getopt_long( argc, argv, "abBcCdefgGlLmnNpqrRstTvwW:yzZD:F:", long_opts, &long_index )) != -1 ) {
     409        while ( (c = getopt_long( argc, argv, "abBcCdefgGlLmnNpqrstTvwW:yzZD:F:", long_opts, &long_index )) != -1 ) {
    417410                switch ( c ) {
    418411                  case Ast:
     
    486479                  case 'r':                                                                             // print resolver steps
    487480                        resolvep = true;
    488                         break;
    489                         case 'R':                                                                               // dump resolv-proto instance
    490                         resolvprotop = true;
    491481                        break;
    492482                  case Symbol:
Note: See TracChangeset for help on using the changeset viewer.