Changes in / [3bd1eb4:dbfb35d]


Ignore:
Files:
2 added
14 deleted
46 edited

Legend:

Unmodified
Added
Removed
  • Jenkins/FullBuild

    r3bd1eb4 rdbfb35d  
    161161"""
    162162
    163         def email_to = "pabuhr@uwaterloo.ca, rschlunt@uwaterloo.ca, a3moss@uwaterloo.ca, tdelisle@uwaterloo.ca, brice.dobry@huawei.com, ajbeach@edu.uwaterloo.ca"
     163        def email_to = "pabuhr@uwaterloo.ca, rschlunt@uwaterloo.ca, a3moss@uwaterloo.ca, tdelisle@uwaterloo.ca, brice.dobry@huawei.com"
    164164
    165165        //send email notification
  • Jenkinsfile

    r3bd1eb4 rdbfb35d  
    153153        do_sendemail    = ! (pSilent == 'true')
    154154
    155         echo """Compiler              : ${compiler.cc_name} (${compiler.cpp_cc}/${compiler.cfa_cc})
    156 Architecture            : ${arch_name}
    157 Arc Flags               : ${architecture}
    158 Run All Tests           : ${ pRunAllTests.toString() }
    159 Run Benchmark           : ${ pRunBenchmark.toString() }
    160 Build Documentation     : ${ pBuildDocumentation.toString() }
    161 Publish                 : ${ pPublish.toString() }
    162 Silent                  : ${ pSilent.toString() }
     155        echo """Compiler                : ${compiler.cc_name} (${compiler.cpp_cc}/${compiler.cfa_cc})
     156Architecture            : ${arch_name}
     157Arc Flags               : ${architecture}
     158Run All Tests           : ${ pRunAllTests.toString() }
     159Run Benchmark           : ${ pRunBenchmark.toString() }
     160Build Documentation     : ${ pBuildDocumentation.toString() }
     161Publish         : ${ pPublish.toString() }
     162Silent                  : ${ pSilent.toString() }
    163163"""
    164164
  • doc/LaTeXmacros/common.tex

    r3bd1eb4 rdbfb35d  
    1111%% Created On       : Sat Apr  9 10:06:17 2016
    1212%% Last Modified By : Peter A. Buhr
    13 %% Last Modified On : Sun May 14 18:17:09 2017
    14 %% Update Count     : 295
     13%% Last Modified On : Tue Apr 18 17:16:13 2017
     14%% Update Count     : 270
    1515%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1616
     
    3636% Names used in the document.
    3737
    38 \newcommand{\CFA}{C\raisebox{\depth}{\rotatebox{180}{\textscale{1.05}{\textsf{A}}}}\xspace} % Cforall symbolic name
     38\newcommand{\CFA}{C$\mathbf\forall$\xspace} % Cforall symbolic name
    3939\newcommand{\CFL}{Cforall\xspace} % Cforall symbolic name
    40 \newcommand{\Celeven}{C11\xspace} % C11 symbolic name
    4140\newcommand{\CC}{\rm C\kern-.1em\hbox{+\kern-.25em+}\xspace} % C++ symbolic name
    4241\newcommand{\CCeleven}{\rm C\kern-.1em\hbox{+\kern-.25em+}11\xspace} % C++11 symbolic name
     
    4443\newcommand{\CCseventeen}{\rm C\kern-.1em\hbox{+\kern-.25em+}17\xspace} % C++17 symbolic name
    4544\newcommand{\CCtwenty}{\rm C\kern-.1em\hbox{+\kern-.25em+}20\xspace} % C++20 symbolic name
     45\newcommand{\Celeven}{C11\xspace} % C11 symbolic name
    4646\newcommand{\Csharp}{C\raisebox{-0.7ex}{\Large$^\sharp$}\xspace} % C# symbolic name
    4747
     
    6767\usepackage{pslatex}                                    % reduce size of san serif font
    6868\usepackage{relsize}                                    % must be after change to small or selects old size
    69 \usepackage{rotating}
    7069
    7170% reduce size of chapter/section titles
     
    9897\newcommand{\italic}[1]{\emph{\hyperpage{#1}}}
    9998\newcommand{\definition}[1]{\textbf{\hyperpage{#1}}}
    100 \newcommand{\see}[1]{\emph{see}~#1}
     99\newcommand{\see}[1]{\emph{see} #1}
    101100
    102101% Define some commands that produce formatted index entries suitable for cross-references.
     
    222221}%
    223222
    224 \usepackage{lstlang}
     223% Go programming language: https://github.com/julienc91/listings-golang/blob/master/listings-golang.sty
     224\lstdefinelanguage{Golang}{
     225        morekeywords=[1]{package,import,func,type,struct,return,defer,panic,recover,select,var,const,iota,},%
     226        morekeywords=[2]{string,uint,uint8,uint16,uint32,uint64,int,int8,int16,int32,int64,
     227                bool,float32,float64,complex64,complex128,byte,rune,uintptr, error,interface},%
     228        morekeywords=[3]{map,slice,make,new,nil,len,cap,copy,close,true,false,delete,append,real,imag,complex,chan,},%
     229        morekeywords=[4]{for,break,continue,range,goto,switch,case,fallthrough,if,else,default,},%
     230        morekeywords=[5]{Println,Printf,Error,},%
     231        sensitive=true,%
     232        morecomment=[l]{//},%
     233        morecomment=[s]{/*}{*/},%
     234        morestring=[b]',%
     235        morestring=[b]",%
     236        morestring=[s]{`}{`},%
     237}
     238
     239% CFA programming language, based on ANSI C (with some gcc additions)
     240\lstdefinelanguage{Pseudo}{
     241        morekeywords={string,uint,int,bool,float},%
     242        sensitive=true,%
     243        morecomment=[l]{//},%
     244        morecomment=[s]{/*}{*/},%
     245        morestring=[b]',%
     246        morestring=[b]",%
     247        morestring=[s]{`}{`},%
     248}%
     249
     250% CFA programming language, based on ANSI C (with some gcc additions)
     251\lstdefinelanguage{CFA}[ANSI]{C}{
     252        morekeywords={_Alignas,_Alignof,__alignof,__alignof__,asm,__asm,__asm__,_At,_Atomic,__attribute,__attribute__,auto,
     253                _Bool,catch,catchResume,choose,_Complex,__complex,__complex__,__const,__const__,disable,dtype,enable,__extension__,
     254                fallthrough,fallthru,finally,forall,ftype,_Generic,_Imaginary,inline,__label__,lvalue,_Noreturn,one_t,otype,restrict,_Static_assert,
     255                _Thread_local,throw,throwResume,trait,try,ttype,typeof,__typeof,__typeof__,zero_t},
     256}%
    225257
    226258\newcommand{\CFADefaults}{%
     
    260292{}
    261293
     294
    262295% Local Variables: %
    263296% tab-width: 4 %
  • doc/generic_types/generic_types.tex

    r3bd1eb4 rdbfb35d  
    66\usepackage{upquote}                                                                    % switch curled `'" to straight
    77\usepackage{listings}                                                                   % format program code
    8 \usepackage{rotating}
    98\usepackage[usenames]{color}
    109
     
    4948
    5049% Useful macros
    51 \newcommand{\CFA}{C\raisebox{\depth}{\rotatebox{180}{\textsf{A}}}\hspace{-1pt}\xspace} % Cforall symbolic name
    52 %\newcommand{\CFA}{C$\mathbf\forall$\xspace} % Cforall symbolic name
     50\newcommand{\CFA}{C$\mathbf\forall$\xspace} % Cforall symbolic name
    5351\newcommand{\CC}{\rm C\kern-.1em\hbox{+\kern-.25em+}\xspace} % C++ symbolic name
    5452\newcommand{\CCeleven}{\rm C\kern-.1em\hbox{+\kern-.25em+}11\xspace} % C++11 symbolic name
     
    9997\acmJournal{PACMPL}
    10098
    101 \title{Generic and Tuple Types with Efficient Dynamic Layout in \protect\CFA}
     99\title{Generic and Tuple Types with Efficient Dynamic Layout in \CFA}
    102100
    103101\author{Aaron Moss}
     
    199197\label{sec:poly-fns}
    200198
    201 \CFA{}\hspace{1pt}'s polymorphism was originally formalized by \citet{Ditchfield92}, and first implemented by \citet{Bilson03}.
     199\CFA's polymorphism was originally formalized by \citet{Ditchfield92}, and first implemented by \citet{Bilson03}.
    202200The signature feature of \CFA is parametric-polymorphic functions~\citep{forceone:impl,Cormack90,Duggan96} with functions generalized using a @forall@ clause (giving the language its name):
    203201\begin{lstlisting}
     
    952950}
    953951\end{lstlisting}
    954 \caption{\protect\CFA Benchmark Test}
     952\caption{\CFA Benchmark Test}
    955953\label{fig:BenchmarkTest}
    956954\end{figure}
     
    10221020While \CC provides good backwards compatibility with C, it has a steep learning curve for many of its extensions.
    10231021For example, polymorphism is provided via three disjoint mechanisms: overloading, inheritance, and templates.
    1024 The overloading is restricted because resolution does not use the return type, inheritance requires learning object-oriented programming and coping with a restricted nominal-inheritance hierarchy, templates cannot be separately compiled resulting in compilation/code bloat and poor error messages, and determining how these mechanisms interact and which to use is confusing.
     1022The overloading is restricted because resolution does not using the return type, inheritance requires learning object-oriented programming and coping with a restricted nominal-inheritance hierarchy, templates cannot be separately compiled resulting in compilation/code bloat and poor error messages, and determining how these mechanisms interact and which to use is confusing.
    10251023In contrast, \CFA has a single facility for polymorphic code supporting type-safe separate-compilation of polymorphic functions and generic (opaque) types, which uniformly leverage the C procedural paradigm.
    10261024The key mechanism to support separate compilation is \CFA's \emph{explicit} use of assumed properties for a type.
  • doc/rob_thesis/thesis.bib

    • Property mode changed from 100644 to 100755
  • doc/user/Makefile

    r3bd1eb4 rdbfb35d  
    4747
    4848${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex \
    49                 ../LaTeXmacros/common.tex ../LaTeXmacros/lstlang.sty ../LaTeXmacros/indexstyle ../bibliography/cfa.bib
     49                ../LaTeXmacros/common.tex ../LaTeXmacros/indexstyle ../bibliography/cfa.bib
    5050        # Conditionally create an empty *.ind (index) file for inclusion until makeindex is run.
    5151        if [ ! -r ${basename $@}.ind ] ; then touch ${basename $@}.ind ; fi
  • src/CodeGen/CodeGenerator.cc

    r3bd1eb4 rdbfb35d  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Wed May 10 14:45:00 2017
     12// Last Modified On : Tus May  9 16:50:00 2017
    1313// Update Count     : 484
    1414//
     
    4141namespace CodeGen {
    4242        int CodeGenerator::tabsize = 4;
     43
     44        // Pseudo Function: output << lineDirective(currentNode);
     45    struct lineDirective {
     46        CodeLocation const & loc;
     47                lineDirective(CodeLocation const & location) : loc(location) {}
     48                lineDirective(BaseSyntaxNode const * node) : loc(node->location) {}
     49        };
     50        std::ostream & operator<<(std::ostream & out, lineDirective const & ld) {
     51                if (ld.loc.isSet())
     52                        return out << "\n# " << ld.loc.linenumber << " \""
     53                                << ld.loc.filename << "\"\n";
     54                return out << "\n// Unset Location\n";
     55        }
    4356
    4457        // the kinds of statements that would ideally be followed by whitespace
     
    89102        }
    90103
    91         CodeGenerator::LineMarker::LineMarker(
    92                         CodeLocation const & loc, bool toPrint) :
    93                 loc(loc), toPrint(toPrint)
    94         {}
    95 
    96         CodeGenerator::LineMarker CodeGenerator::lineDirective(
    97                         BaseSyntaxNode const * node) {
    98                 return LineMarker(node->location, lineMarks);
    99         }
    100 
    101         std::ostream & operator<<(std::ostream & out,
    102                         CodeGenerator::LineMarker const & marker) {
    103                 if (marker.toPrint && marker.loc.isSet()) {
    104                         return out << "\n# " << marker.loc.linenumber << " \""
    105                                 << marker.loc.filename << "\"\n";
    106                 } else if (marker.toPrint) {
    107                         return out << "\n/* Missing CodeLocation */\n";
    108                 } else {
    109                 return out;
    110                 }
    111         }
    112 
    113         CodeGenerator::CodeGenerator( std::ostream & os, bool pretty, bool genC, bool lineMarks ) : indent( *this), cur_indent( 0 ), insideFunction( false ), output( os ), printLabels( *this ), pretty( pretty ), genC( genC ), lineMarks( lineMarks ) {}
     104        CodeGenerator::CodeGenerator( std::ostream & os, bool pretty, bool genC ) : indent( *this), cur_indent( 0 ), insideFunction( false ), output( os ), printLabels( *this ), pretty( pretty ), genC( genC ) {}
    114105
    115106        CodeGenerator::CodeGenerator( std::ostream & os, std::string init, int indentation, bool infunp )
     
    152143        // *** Declarations
    153144        void CodeGenerator::visit( FunctionDecl * functionDecl ) {
     145                output << lineDirective( functionDecl );
     146
    154147                extension( functionDecl );
    155148                genAttributes( functionDecl->get_attributes() );
     
    175168                }
    176169
     170                output << lineDirective( objectDecl );
     171
    177172                extension( objectDecl );
    178173                genAttributes( objectDecl->get_attributes() );
     
    226221
    227222        void CodeGenerator::visit( StructDecl * structDecl ) {
     223                output << lineDirective( structDecl );
     224
    228225                extension( structDecl );
    229226                handleAggregate( structDecl, "struct " );
     
    231228
    232229        void CodeGenerator::visit( UnionDecl * unionDecl ) {
     230                output << lineDirective( unionDecl );
     231
    233232                extension( unionDecl );
    234233                handleAggregate( unionDecl, "union " );
     
    709708        void CodeGenerator::visit( UntypedTupleExpr * tupleExpr ) {
    710709                assertf( ! genC, "UntypedTupleExpr should not reach code generation." );
    711                 extension( tupleExpr );
    712710                output << "[";
    713711                genCommaList( tupleExpr->get_exprs().begin(), tupleExpr->get_exprs().end() );
     
    717715        void CodeGenerator::visit( TupleExpr * tupleExpr ) {
    718716                assertf( ! genC, "TupleExpr should not reach code generation." );
    719                 extension( tupleExpr );
    720717                output << "[";
    721718                genCommaList( tupleExpr->get_exprs().begin(), tupleExpr->get_exprs().end() );
    722719                output << "]";
    723         }
    724 
    725         void CodeGenerator::visit( TupleIndexExpr * tupleExpr ) {
    726                 assertf( ! genC, "TupleIndexExpr should not reach code generation." );
    727                 extension( tupleExpr );
    728                 tupleExpr->get_tuple()->accept( *this );
    729                 output << "." << tupleExpr->get_index();
    730720        }
    731721
  • src/CodeGen/CodeGenerator.h

    r3bd1eb4 rdbfb35d  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Andrew Beach
    12 // Last Modified On : Wed May 10 10:57:00 2017
    13 // Update Count     : 51
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Mar  1 16:20:04 2017
     13// Update Count     : 50
    1414//
    1515
     
    2525#include "SymTab/Indexer.h"
    2626
    27 #include "Common/utility.h"
    28 
    2927namespace CodeGen {
    3028        class CodeGenerator : public Visitor {
     
    3230                static int tabsize;
    3331
    34                 CodeGenerator( std::ostream &os, bool pretty = false, bool genC = false, bool lineMarks = false );
     32                CodeGenerator( std::ostream &os, bool pretty = false, bool genC = false );
    3533                CodeGenerator( std::ostream &os, std::string, int indent = 0, bool infun = false );
    3634                CodeGenerator( std::ostream &os, char *, int indent = 0, bool infun = false );
     
    7674                virtual void visit( UntypedTupleExpr *tupleExpr );
    7775                virtual void visit( TupleExpr *tupleExpr );
    78                 virtual void visit( TupleIndexExpr * tupleExpr );
    7976                virtual void visit( TypeExpr *typeExpr );
    8077                virtual void visit( AsmExpr * );
     
    113110                };
    114111
    115                 struct LineMarker {
    116                         CodeLocation const & loc;
    117                         bool toPrint;
    118 
    119                         LineMarker(CodeLocation const & loc, bool toPrint);
    120                 };
    121 
    122                 LineMarker lineDirective(BaseSyntaxNode const * node);
    123 
    124112                void asmName( DeclarationWithType *decl );
    125113
     
    134122                bool pretty = false;  // pretty print
    135123                bool genC = false;    // true if output has to be C code
    136                 bool lineMarks = false;
    137124
    138125                void printDesignators( std::list< Expression * > & );
     
    162149        /// returns C-compatible name of declaration
    163150        std::string genName( DeclarationWithType * decl );
    164 
    165         std::ostream & operator<<(std::ostream &,
    166                 CodeGenerator::LineMarker const &);
    167151} // namespace CodeGen
    168152
  • src/CodeGen/GenType.cc

    r3bd1eb4 rdbfb35d  
    2828        class GenType : public Visitor {
    2929          public:
    30                 GenType( const std::string &typeString, bool pretty = false, bool genC = false, bool lineMarks = false );
     30                GenType( const std::string &typeString, bool pretty = false, bool genC = false );
    3131                std::string get_typeString() const { return typeString; }
    3232                void set_typeString( const std::string &newValue ) { typeString = newValue; }
     
    5454                bool pretty = false; // pretty print
    5555                bool genC = false;   // generating C code?
    56                 bool lineMarks = false;
    5756        };
    5857
    59         std::string genType( Type *type, const std::string &baseString, bool pretty, bool genC , bool lineMarks ) {
    60                 GenType gt( baseString, pretty, genC, lineMarks );
     58        std::string genType( Type *type, const std::string &baseString, bool pretty, bool genC ) {
     59                GenType gt( baseString, pretty, genC );
    6160                std::ostringstream os;
    6261
    6362                if ( ! type->get_attributes().empty() ) {
    64                         CodeGenerator cg( os, pretty, genC, lineMarks );
     63                        CodeGenerator cg( os, pretty, genC );
    6564                        cg.genAttributes( type->get_attributes() );
    6665                } // if
     
    7473  }
    7574
    76         GenType::GenType( const std::string &typeString, bool pretty, bool genC, bool lineMarks ) : typeString( typeString ), pretty( pretty ), genC( genC ), lineMarks( lineMarks ) {}
     75        GenType::GenType( const std::string &typeString, bool pretty, bool genC ) : typeString( typeString ), pretty( pretty ), genC( genC ) {}
    7776
    7877        void GenType::visit( VoidType *voidType ) {
     
    115114                } // if
    116115                if ( dimension != 0 ) {
    117                         CodeGenerator cg( os, pretty, genC, lineMarks );
     116                        CodeGenerator cg( os, pretty, genC );
    118117                        dimension->accept( cg );
    119118                } else if ( isVarLen ) {
     
    169168                        } // if
    170169                } else {
    171                         CodeGenerator cg( os, pretty, genC, lineMarks );
     170                        CodeGenerator cg( os, pretty, genC );
    172171                        os << "(" ;
    173172
     
    192191                        // assertf( ! genC, "Aggregate type parameters should not reach code generation." );
    193192                        std::ostringstream os;
    194                         CodeGenerator cg( os, pretty, genC, lineMarks );
     193                        CodeGenerator cg( os, pretty, genC );
    195194                        os << "forall(";
    196195                        cg.genCommaList( funcType->get_forall().begin(), funcType->get_forall().end() );
     
    203202                if ( ! refType->get_parameters().empty() ) {
    204203                        std::ostringstream os;
    205                         CodeGenerator cg( os, pretty, genC, lineMarks );
     204                        CodeGenerator cg( os, pretty, genC );
    206205                        os << "(";
    207206                        cg.genCommaList( refType->get_parameters().begin(), refType->get_parameters().end() );
     
    243242                for ( Type * t : *tupleType ) {
    244243                        i++;
    245                         os << genType( t, "", pretty, genC, lineMarks ) << (i == tupleType->size() ? "" : ", ");
     244                        os << genType( t, "", pretty, genC ) << (i == tupleType->size() ? "" : ", ");
    246245                }
    247246                os << "]";
  • src/CodeGen/GenType.h

    r3bd1eb4 rdbfb35d  
    2121
    2222namespace CodeGen {
    23         std::string genType( Type *type, const std::string &baseString, bool pretty = false, bool genC = false, bool lineMarks = false );
     23        std::string genType( Type *type, const std::string &baseString, bool pretty = false, bool genC = false );
    2424  std::string genPrettyType( Type * type, const std::string & baseString );
    2525} // namespace CodeGen
  • src/CodeGen/Generate.cc

    r3bd1eb4 rdbfb35d  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Andrew Beach
    12 // Last Modified On : Wed May 19 13:05:00 2017
    13 // Update Count     : 6
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Thu Jun  4 14:04:25 2015
     13// Update Count     : 5
    1414//
    1515
     
    3131
    3232namespace CodeGen {
    33         void generate( std::list< Declaration* > translationUnit, std::ostream &os, bool doIntrinsics, bool pretty, bool generateC, bool lineMarks ) {
    34                 CodeGen::CodeGenerator cgv( os, pretty, generateC, lineMarks );
     33        void generate( std::list< Declaration* > translationUnit, std::ostream &os, bool doIntrinsics, bool pretty, bool generateC ) {
     34                CodeGen::CodeGenerator cgv( os, pretty, generateC );
    3535                for ( auto & dcl : translationUnit ) {
    3636                        if ( LinkageSpec::isGeneratable( dcl->get_linkage() ) && (doIntrinsics || ! LinkageSpec::isBuiltin( dcl->get_linkage() ) ) ) {
    37                                 os << cgv.lineDirective(dcl);
    3837                                dcl->accept(cgv);
    3938                                if ( doSemicolon( dcl ) ) {
     
    4948                        os << CodeGen::genPrettyType( type, "" );
    5049                } else {
    51                         CodeGen::CodeGenerator cgv( os, true, false, false );
     50                        CodeGen::CodeGenerator cgv( os, true, false );
    5251                        node->accept( cgv );
    5352                }
  • src/CodeGen/Generate.h

    r3bd1eb4 rdbfb35d  
    2424namespace CodeGen {
    2525        /// Generates code. doIntrinsics determines if intrinsic functions are printed, pretty formats output nicely (e.g., uses unmangled names, etc.), generateC is true when the output must consist only of C code (allows some assertions, etc.)
    26         void generate( std::list< Declaration* > translationUnit, std::ostream &os, bool doIntrinsics, bool pretty, bool generateC = false , bool lineMarks = false );
     26        void generate( std::list< Declaration* > translationUnit, std::ostream &os, bool doIntrinsics, bool pretty, bool generateC = false );
    2727
    2828        /// Generate code for a single node -- helpful for debugging in gdb
  • src/Common/utility.h

    r3bd1eb4 rdbfb35d  
    322322        std::string filename;
    323323
    324         /// Create a new unset CodeLocation.
     324    /// Create a new unset CodeLocation.
    325325        CodeLocation()
    326326                : linenumber( -1 )
     
    328328        {}
    329329
    330         /// Create a new CodeLocation with the given values.
     330    /// Create a new CodeLocation with the given values.
    331331        CodeLocation( const char* filename, int lineno )
    332332                : linenumber( lineno )
     
    334334        {}
    335335
    336         bool isSet () const {
    337                 return -1 != linenumber;
    338         }
    339 
    340         bool isUnset () const {
    341                 return !isSet();
    342         }
     336    bool isSet () const {
     337        return -1 != linenumber;
     338    }
     339
     340    bool isUnset () const {
     341        return !isSet();
     342    }
    343343
    344344        void unset () {
     
    353353        return location.isSet() ? location.filename + ":" + std::to_string(location.linenumber) + " " : "";
    354354}
    355 
    356355#endif // _UTILITY_H
    357356
  • src/GenPoly/Box.cc

    r3bd1eb4 rdbfb35d  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sat May 13 09:26:38 2017
    13 // Update Count     : 341
     12// Last Modified On : Fri Mar 17 09:06:37 2017
     13// Update Count     : 339
    1414//
    1515
     
    706706                                Type *concrete = env->lookup( typeInst->get_name() );
    707707                                if ( concrete == 0 ) {
    708                                         return typeInst;
    709708                                        // xxx - should this be an assertion?
    710 //                                      std::string x = env ? toString( *env ) : "missing env";
    711 //                                      throw SemanticError( x + "\n" + "Unbound type variable " + typeInst->get_name() + " in ", appExpr );
     709                                        std::string x = env ? toString( *env ) : "missing env";
     710                                        throw SemanticError( x + "\n" + "Unbound type variable " + typeInst->get_name() + " in ", appExpr );
    712711                                } // if
    713712                                return concrete;
     
    765764                                        } else {
    766765                                                arg = new AddressExpr( arg );
    767                                         }
    768                                         if ( ! ResolvExpr::typesCompatible( param, arg->get_result(), SymTab::Indexer() ) ) {
    769                                                 // silence warnings by casting boxed parameters when the actual type does not match up with the formal type.
    770                                                 arg = new CastExpr( arg, param->clone() );
    771766                                        }
    772767                                } else {
     
    907902                                } // if
    908903                                UntypedExpr *assign = new UntypedExpr( new NameExpr( "?=?" ) );
    909                                 UntypedExpr *deref = UntypedExpr::createDeref( new CastExpr( new VariableExpr( *param++ ), new PointerType( Type::Qualifiers(), realType->get_returnVals().front()->get_type()->clone() ) ) );
     904                                UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) );
     905                                deref->get_args().push_back( new CastExpr( new VariableExpr( *param++ ), new PointerType( Type::Qualifiers(), realType->get_returnVals().front()->get_type()->clone() ) ) );
    910906                                assign->get_args().push_back( deref );
    911907                                addAdapterParams( adapteeApp, arg, param, adapterType->get_parameters().end(), realParam, tyVars );
     
    12211217
    12221218                Statement * Pass1::mutate( ReturnStmt *returnStmt ) {
     1219                        // maybe need access to the env when mutating the expr
     1220                        if ( Expression * expr = returnStmt->get_expr() ) {
     1221                                if ( expr->get_env() ) {
     1222                                        env = expr->get_env();
     1223                                }
     1224                        }
     1225
    12231226                        if ( retval && returnStmt->get_expr() ) {
    12241227                                assert( returnStmt->get_expr()->has_result() && ! returnStmt->get_expr()->get_result()->isVoid() );
     
    12991302                        FunctionType * ftype = functionDecl->get_functionType();
    13001303                        if ( ! ftype->get_returnVals().empty() && functionDecl->get_statements() ) {
    1301                                 if ( ! isPrefix( functionDecl->get_name(), "_thunk" ) && ! isPrefix( functionDecl->get_name(), "_adapter" ) ) { // xxx - remove check for prefix once thunks properly use ctor/dtors
     1304                                if ( functionDecl->get_name() != "?=?" && ! isPrefix( functionDecl->get_name(), "_thunk" ) && ! isPrefix( functionDecl->get_name(), "_adapter" ) ) { // xxx - remove check for ?=? once reference types are in; remove check for prefix once thunks properly use ctor/dtors
    13021305                                        assert( ftype->get_returnVals().size() == 1 );
    13031306                                        DeclarationWithType * retval = ftype->get_returnVals().front();
     
    15361539                                        Type *declType = objectDecl->get_type();
    15371540                                        std::string bufName = bufNamer.newName();
    1538                                         ObjectDecl *newBuf = new ObjectDecl( bufName, Type::StorageClasses(), LinkageSpec::C, 0,
    1539                                                 new ArrayType( Type::Qualifiers(), new BasicType( Type::Qualifiers(), BasicType::Kind::Char), new NameExpr( sizeofName( mangleType(declType) ) ),
     1541                                        ObjectDecl *newBuf = new ObjectDecl( bufName, Type::StorageClasses(), LinkageSpec::C, 0, 
     1542                                                new ArrayType( Type::Qualifiers(), new BasicType( Type::Qualifiers(), BasicType::Kind::Char), new NameExpr( sizeofName( mangleType(declType) ) ), 
    15401543                                                true, false, std::list<Attribute*>{ new Attribute( std::string{"aligned"}, std::list<Expression*>{ new ConstantExpr( Constant::from_int(8) ) } ) } ), 0 );
    15411544                                        stmtsToAdd.push_back( new DeclStmt( noLabels, newBuf ) );
     
    15751578                }
    15761579
     1580                /// Returns an expression dereferenced n times
     1581                Expression *makeDerefdVar( Expression *derefdVar, long n ) {
     1582                        for ( int i = 1; i < n; ++i ) {
     1583                                UntypedExpr *derefExpr = new UntypedExpr( new NameExpr( "*?" ) );
     1584                                derefExpr->get_args().push_back( derefdVar );
     1585                                // xxx - should set results on derefExpr
     1586                                derefdVar = derefExpr;
     1587                        }
     1588                        return derefdVar;
     1589                }
     1590
    15771591                Expression *PolyGenericCalculator::mutate( MemberExpr *memberExpr ) {
    15781592                        // mutate, exiting early if no longer MemberExpr
     
    15811595                        if ( ! memberExpr ) return expr;
    15821596
     1597                        // get declaration for base struct, exiting early if not found
     1598                        int varDepth;
     1599                        VariableExpr *varExpr = getBaseVar( memberExpr->get_aggregate(), &varDepth );
     1600                        if ( ! varExpr ) return memberExpr;
     1601                        ObjectDecl *objectDecl = dynamic_cast< ObjectDecl* >( varExpr->get_var() );
     1602                        if ( ! objectDecl ) return memberExpr;
     1603
    15831604                        // only mutate member expressions for polymorphic types
    15841605                        int tyDepth;
    1585                         Type *objectType = hasPolyBase( memberExpr->get_aggregate()->get_result(), scopeTyVars, &tyDepth );
     1606                        Type *objectType = hasPolyBase( objectDecl->get_type(), scopeTyVars, &tyDepth );
    15861607                        if ( ! objectType ) return memberExpr;
    15871608                        findGeneric( objectType ); // ensure layout for this type is available
     
    16011622                                fieldLoc->get_args().push_back( aggr );
    16021623                                fieldLoc->get_args().push_back( makeOffsetIndex( objectType, i ) );
    1603                                 fieldLoc->set_result( memberExpr->get_result()->clone() );
    16041624                                newMemberExpr = fieldLoc;
    16051625                        } else if ( dynamic_cast< UnionInstType* >( objectType ) ) {
    1606                                 // union members are all at offset zero, so just use the aggregate expr
    1607                                 Expression * aggr = memberExpr->get_aggregate()->clone();
    1608                                 delete aggr->get_env(); // xxx - there's a problem with keeping the env for some reason, so for now just get rid of it
    1609                                 aggr->set_env( nullptr );
    1610                                 newMemberExpr = aggr;
    1611                                 newMemberExpr->set_result( memberExpr->get_result()->clone() );
     1626                                // union members are all at offset zero, so build appropriately-dereferenced variable
     1627                                newMemberExpr = makeDerefdVar( varExpr->clone(), varDepth );
    16121628                        } else return memberExpr;
    16131629                        assert( newMemberExpr );
     
    16171633                                // Not all members of a polymorphic type are themselves of polymorphic type; in this case the member expression should be wrapped and dereferenced to form an lvalue
    16181634                                CastExpr *ptrCastExpr = new CastExpr( newMemberExpr, new PointerType( Type::Qualifiers(), memberType->clone() ) );
    1619                                 UntypedExpr *derefExpr = UntypedExpr::createDeref( ptrCastExpr );
     1635                                UntypedExpr *derefExpr = new UntypedExpr( new NameExpr( "*?" ) );
     1636                                derefExpr->get_args().push_back( ptrCastExpr );
    16201637                                newMemberExpr = derefExpr;
    16211638                        }
  • src/InitTweak/FixInit.cc

    r3bd1eb4 rdbfb35d  
    361361                                        FunctionType * ftype = dynamic_cast< FunctionType * >( GenPoly::getFunctionType( funcDecl->get_type() ) );
    362362                                        assert( ftype );
    363                                         if ( isConstructor( funcDecl->get_name() ) && ftype->get_parameters().size() == 2 ) {
     363                                        if ( (isConstructor( funcDecl->get_name() ) || funcDecl->get_name() == "?=?") && ftype->get_parameters().size() == 2 ) {
    364364                                                Type * t1 = ftype->get_parameters().front()->get_type();
    365365                                                Type * t2 = ftype->get_parameters().back()->get_type();
     
    367367
    368368                                                if ( ResolvExpr::typesCompatible( ptrType->get_base(), t2, SymTab::Indexer() ) ) {
    369                                                         // optimization: don't need to copy construct in order to call a copy constructor
     369                                                        // optimization: don't need to copy construct in order to call a copy constructor or
     370                                                        // assignment operator
    370371                                                        return appExpr;
    371372                                                } // if
     
    635636                                assert( ! stmtExpr->get_returnDecls().empty() );
    636637                                body->get_kids().push_back( new ExprStmt( noLabels, new VariableExpr( stmtExpr->get_returnDecls().front() ) ) );
    637                                 stmtExpr->get_returnDecls().clear();
    638                                 stmtExpr->get_dtors().clear();
    639                         }
    640                         assert( stmtExpr->get_returnDecls().empty() );
    641                         assert( stmtExpr->get_dtors().empty() );
     638                        }
     639                        stmtExpr->get_returnDecls().clear();
     640                        stmtExpr->get_dtors().clear();
    642641                        return stmtExpr;
    643642                }
     
    656655                                unqExpr->set_result( maybeClone( unqExpr->get_expr()->get_result() ) );
    657656                                if ( unqCount[ unqExpr->get_id() ] == 0 ) {  // insert destructor after the last use of the unique expression
    658                                         stmtsToAddAfter.splice( stmtsToAddAfter.end(), dtors[ unqExpr->get_id() ] );
     657                                        stmtsToAdd.splice( stmtsToAddAfter.end(), dtors[ unqExpr->get_id() ] );
    659658                                }
    660659                                if ( addDeref.count( unqExpr->get_id() ) ) {
     
    668667                        stmtsToAdd.splice( stmtsToAdd.end(), fixer.stmtsToAdd );
    669668                        unqMap[unqExpr->get_id()] = unqExpr;
    670                         if ( unqCount[ unqExpr->get_id() ] == 0 ) {  // insert destructor after the last use of the unique expression
    671                                 stmtsToAddAfter.splice( stmtsToAddAfter.end(), dtors[ unqExpr->get_id() ] );
    672                         } else { // remember dtors for last instance of unique expr
    673                                 dtors[ unqExpr->get_id() ] = fixer.stmtsToAddAfter;
    674                         }
    675669                        if ( UntypedExpr * deref = dynamic_cast< UntypedExpr * >( unqExpr->get_expr() ) ) {
    676670                                // unique expression is now a dereference, because the inner expression is an lvalue returning function call.
     
    681675                                getCallArg( deref, 0 ) = unqExpr;
    682676                                addDeref.insert( unqExpr->get_id() );
     677                                if ( unqCount[ unqExpr->get_id() ] == 0 ) {  // insert destructor after the last use of the unique expression
     678                                        stmtsToAdd.splice( stmtsToAddAfter.end(), dtors[ unqExpr->get_id() ] );
     679                                } else { // remember dtors for last instance of unique expr
     680                                        dtors[ unqExpr->get_id() ] = fixer.stmtsToAddAfter;
     681                                }
    683682                                return deref;
    684683                        }
  • src/InitTweak/GenInit.cc

    r3bd1eb4 rdbfb35d  
    142142                // hands off if the function returns an lvalue - we don't want to allocate a temporary if a variable's address
    143143                // is being returned
    144                 if ( returnStmt->get_expr() && returnVals.size() == 1 && ! returnVals.front()->get_type()->get_lvalue() ) {
     144                // Note: under the assumption that assignments return *this, checking for ?=? here is an optimization, since it shouldn't be necessary to copy construct `this`. This is a temporary optimization until reference types are added, at which point this should be removed, along with the analogous optimization in copy constructor generation.
     145                if ( returnStmt->get_expr() && returnVals.size() == 1 && funcName != "?=?" && ! returnVals.front()->get_type()->get_lvalue() ) {
    145146                        // explicitly construct the return value using the return expression and the retVal object
    146147                        assertf( returnVals.front()->get_name() != "", "Function %s has unnamed return value\n", funcName.c_str() );
  • src/libcfa/Makefile.am

    r3bd1eb4 rdbfb35d  
    1111## Created On       : Sun May 31 08:54:01 2015
    1212## Last Modified By : Peter A. Buhr
    13 ## Last Modified On : Sun May 14 21:04:21 2017
    14 ## Update Count     : 214
     13## Last Modified On : Sat Mar 25 18:00:10 2017
     14## Update Count     : 212
    1515###############################################################################
    1616
     
    7676
    7777cfa_includedir = $(CFA_INCDIR)
    78 nobase_cfa_include_HEADERS = ${headers} ${stdhdr} gmp concurrency/invoke.h
     78nobase_cfa_include_HEADERS = ${headers} ${stdhdr} concurrency/invoke.h
    7979
    8080CLEANFILES = libcfa-prelude.c
  • src/libcfa/Makefile.in

    r3bd1eb4 rdbfb35d  
    183183        containers/vector concurrency/coroutine concurrency/thread \
    184184        concurrency/kernel concurrency/monitor ${shell echo stdhdr/*} \
    185         gmp concurrency/invoke.h
     185        concurrency/invoke.h
    186186HEADERS = $(nobase_cfa_include_HEADERS)
    187187ETAGS = etags
     
    324324stdhdr = ${shell echo stdhdr/*}
    325325cfa_includedir = $(CFA_INCDIR)
    326 nobase_cfa_include_HEADERS = ${headers} ${stdhdr} gmp concurrency/invoke.h
     326nobase_cfa_include_HEADERS = ${headers} ${stdhdr} concurrency/invoke.h
    327327CLEANFILES = libcfa-prelude.c
    328328all: all-am
  • src/libcfa/iostream.c

    r3bd1eb4 rdbfb35d  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon May  8 18:24:23 2017
    13 // Update Count     : 369
     12// Last Modified On : Thu Mar 23 08:20:40 2017
     13// Update Count     : 367
    1414//
    1515
     
    160160                [(unsigned char)'¡'] : Open, [(unsigned char)'¿'] : Open, [(unsigned char)'«'] : Open,
    161161                // closing delimiters, no space before
    162                 [','] : Close, ['.'] : Close, [';'] : Close, ['!'] : Close, ['?'] : Close,
     162                [','] : Close, ['.'] : Close, [':'] : Close, [';'] : Close, ['!'] : Close, ['?'] : Close,
    163163                ['%'] : Close, [(unsigned char)'¢'] : Close, [(unsigned char)'»'] : Close,
    164164                [')'] : Close, [']'] : Close, ['}'] : Close,
    165165                // opening-closing delimiters, no space before or after
    166                 ['\''] : OpenClose, ['`'] : OpenClose, ['"'] : OpenClose, [':'] : OpenClose,
     166                ['\''] : OpenClose, ['`'] : OpenClose, ['"'] : OpenClose,
    167167                [' '] : OpenClose, ['\f'] : OpenClose, ['\n'] : OpenClose, ['\r'] : OpenClose, ['\t'] : OpenClose, ['\v'] : OpenClose, // isspace
    168168        }; // mask
  • src/libcfa/rational

    r3bd1eb4 rdbfb35d  
    1212// Created On       : Wed Apr  6 17:56:25 2016
    1313// Last Modified By : Peter A. Buhr
    14 // Last Modified On : Sun May 14 16:49:13 2017
    15 // Update Count     : 78
     14// Last Modified On : Mon May  1 08:25:06 2017
     15// Update Count     : 33
    1616//
    1717
     
    2121#include "iostream"
    2222
    23 trait scalar( otype T ) {
    24 };
    25 
    26 trait arithmetic( otype T | scalar( T ) ) {
    27         int !?( T );
    28         int ?==?( T, T );
    29         int ?!=?( T, T );
    30         int ?<?( T, T );
    31         int ?<=?( T, T );
    32         int ?>?( T, T );
    33         int ?>=?( T, T );
    34         void ?{}( T *, zero_t );
    35         void ?{}( T *, one_t );
    36         T +?( T );
    37         T -?( T );
    38         T ?+?( T, T );
    39         T ?-?( T, T );
    40         T ?*?( T, T );
    41         T ?/?( T, T );
    42         T ?%?( T, T );
    43         T ?/=?( T *, T );
    44         T abs( T );
    45 };
    46 
    4723// implementation
    48 
    49 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
     24typedef long int RationalImpl;
    5025struct Rational {
    51         RationalImpl numerator, denominator;                            // invariant: denominator > 0
     26        RationalImpl numerator, denominator;                                    // invariant: denominator > 0
    5227}; // Rational
    5328
     29// constants
     30extern struct Rational 0;
     31extern struct Rational 1;
     32
    5433// constructors
    55 
    56 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    57 void ?{}( Rational(RationalImpl) * r );
    58 
    59 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    60 void ?{}( Rational(RationalImpl) * r, RationalImpl n );
    61 
    62 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    63 void ?{}( Rational(RationalImpl) * r, RationalImpl n, RationalImpl d );
    64 
    65 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    66 void ?{}( Rational(RationalImpl) * r, zero_t );
    67 
    68 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    69 void ?{}( Rational(RationalImpl) * r, one_t );
     34void ?{}( Rational * r );
     35void ?{}( Rational * r, RationalImpl n );
     36void ?{}( Rational * r, RationalImpl n, RationalImpl d );
    7037
    7138// getter for numerator/denominator
    72 
    73 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    74 RationalImpl numerator( Rational(RationalImpl) r );
    75 
    76 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    77 RationalImpl denominator( Rational(RationalImpl) r );
    78 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    79 [ RationalImpl, RationalImpl ] ?=?( * [ RationalImpl, RationalImpl ] dest, Rational(RationalImpl) src );
    80 
     39RationalImpl numerator( Rational r );
     40RationalImpl denominator( Rational r );
     41[ RationalImpl, RationalImpl ] ?=?( * [ RationalImpl, RationalImpl ] dest, Rational src );
    8142// setter for numerator/denominator
    82 
    83 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    84 RationalImpl numerator( Rational(RationalImpl) r, RationalImpl n );
    85 
    86 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    87 RationalImpl denominator( Rational(RationalImpl) r, RationalImpl d );
     43RationalImpl numerator( Rational r, RationalImpl n );
     44RationalImpl denominator( Rational r, RationalImpl d );
    8845
    8946// comparison
    90 
    91 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    92 int ?==?( Rational(RationalImpl) l, Rational(RationalImpl) r );
    93 
    94 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    95 int ?!=?( Rational(RationalImpl) l, Rational(RationalImpl) r );
    96 
    97 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    98 int ?<?( Rational(RationalImpl) l, Rational(RationalImpl) r );
    99 
    100 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    101 int ?<=?( Rational(RationalImpl) l, Rational(RationalImpl) r );
    102 
    103 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    104 int ?>?( Rational(RationalImpl) l, Rational(RationalImpl) r );
    105 
    106 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    107 int ?>=?( Rational(RationalImpl) l, Rational(RationalImpl) r );
     47int ?==?( Rational l, Rational r );
     48int ?!=?( Rational l, Rational r );
     49int ?<?( Rational l, Rational r );
     50int ?<=?( Rational l, Rational r );
     51int ?>?( Rational l, Rational r );
     52int ?>=?( Rational l, Rational r );
    10853
    10954// arithmetic
    110 
    111 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    112 Rational(RationalImpl) +?( Rational(RationalImpl) r );
    113 
    114 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    115 Rational(RationalImpl) -?( Rational(RationalImpl) r );
    116 
    117 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    118 Rational(RationalImpl) ?+?( Rational(RationalImpl) l, Rational(RationalImpl) r );
    119 
    120 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    121 Rational(RationalImpl) ?-?( Rational(RationalImpl) l, Rational(RationalImpl) r );
    122 
    123 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    124 Rational(RationalImpl) ?*?( Rational(RationalImpl) l, Rational(RationalImpl) r );
    125 
    126 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    127 Rational(RationalImpl) ?/?( Rational(RationalImpl) l, Rational(RationalImpl) r );
     55Rational -?( Rational r );
     56Rational ?+?( Rational l, Rational r );
     57Rational ?-?( Rational l, Rational r );
     58Rational ?*?( Rational l, Rational r );
     59Rational ?/?( Rational l, Rational r );
    12860
    12961// conversion
    130 // forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    131 // double widen( Rational(RationalImpl) r );
    132 // forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    133 // Rational(RationalImpl) narrow( double f, RationalImpl md );
     62double widen( Rational r );
     63Rational narrow( double f, RationalImpl md );
    13464
    13565// I/O
    136 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    137 forall( dtype istype | istream( istype ) | { istype * ?|?( istype *, RationalImpl * ); } )
    138 istype * ?|?( istype *, Rational(RationalImpl) * );
    139 
    140 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    141 forall( dtype ostype | ostream( ostype ) | { ostype * ?|?( ostype *, RationalImpl ); } )
    142 ostype * ?|?( ostype *, Rational(RationalImpl ) );
     66forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, Rational * );
     67forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, Rational );
    14368
    14469#endif // RATIONAL_H
  • src/libcfa/rational.c

    r3bd1eb4 rdbfb35d  
    1010// Created On       : Wed Apr  6 17:54:28 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun May 14 17:25:19 2017
    13 // Update Count     : 131
     12// Last Modified On : Thu Apr 27 17:05:06 2017
     13// Update Count     : 51
    1414//
    1515
     
    1717#include "fstream"
    1818#include "stdlib"
     19#include "math"                                                                                 // floor
     20
     21
     22// constants
     23
     24struct Rational 0 = {0, 1};
     25struct Rational 1 = {1, 1};
     26
    1927
    2028// helper routines
     
    2230// Calculate greatest common denominator of two numbers, the first of which may be negative. Used to reduce rationals.
    2331// alternative: https://en.wikipedia.org/wiki/Binary_GCD_algorithm
    24 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    2532static RationalImpl gcd( RationalImpl a, RationalImpl b ) {
    2633        for ( ;; ) {                                                                            // Euclid's algorithm
    2734                RationalImpl r = a % b;
    28           if ( r == (RationalImpl){0} ) break;
     35          if ( r == 0 ) break;
    2936                a = b;
    3037                b = r;
     
    3340} // gcd
    3441
    35 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    36 static RationalImpl simplify( RationalImpl * n, RationalImpl * d ) {
    37         if ( *d == (RationalImpl){0} ) {
     42static RationalImpl simplify( RationalImpl *n, RationalImpl *d ) {
     43        if ( *d == 0 ) {
    3844                serr | "Invalid rational number construction: denominator cannot be equal to 0." | endl;
    3945                exit( EXIT_FAILURE );
    4046        } // exit
    41         if ( *d < (RationalImpl){0} ) { *d = -*d; *n = -*n; } // move sign to numerator
     47        if ( *d < 0 ) { *d = -*d; *n = -*n; }                           // move sign to numerator
    4248        return gcd( abs( *n ), *d );                                            // simplify
    4349} // Rationalnumber::simplify
     
    4652// constructors
    4753
    48 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    49 void ?{}( Rational(RationalImpl) * r ) {
    50         r{ (RationalImpl){0}, (RationalImpl){1} };
     54void ?{}( Rational * r ) {
     55        r{ 0, 1 };
    5156} // rational
    5257
    53 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    54 void ?{}( Rational(RationalImpl) * r, RationalImpl n ) {
    55         r{ n, (RationalImpl){1} };
     58void ?{}( Rational * r, RationalImpl n ) {
     59        r{ n, 1 };
    5660} // rational
    5761
    58 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    59 void ?{}( Rational(RationalImpl) * r, RationalImpl n, RationalImpl d ) {
     62void ?{}( Rational * r, RationalImpl n, RationalImpl d ) {
    6063        RationalImpl t = simplify( &n, &d );                            // simplify
    6164        r->numerator = n / t;
     
    6669// getter for numerator/denominator
    6770
    68 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    69 RationalImpl numerator( Rational(RationalImpl) r ) {
     71RationalImpl numerator( Rational r ) {
    7072        return r.numerator;
    7173} // numerator
    7274
    73 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    74 RationalImpl denominator( Rational(RationalImpl) r ) {
     75RationalImpl denominator( Rational r ) {
    7576        return r.denominator;
    7677} // denominator
    7778
    78 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    79 [ RationalImpl, RationalImpl ] ?=?( * [ RationalImpl, RationalImpl ] dest, Rational(RationalImpl) src ) {
     79[ RationalImpl, RationalImpl ] ?=?( * [ RationalImpl, RationalImpl ] dest, Rational src ) {
    8080        return *dest = src.[ numerator, denominator ];
    8181}
     
    8383// setter for numerator/denominator
    8484
    85 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    86 RationalImpl numerator( Rational(RationalImpl) r, RationalImpl n ) {
     85RationalImpl numerator( Rational r, RationalImpl n ) {
    8786        RationalImpl prev = r.numerator;
    8887        RationalImpl t = gcd( abs( n ), r.denominator );                // simplify
     
    9291} // numerator
    9392
    94 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    95 RationalImpl denominator( Rational(RationalImpl) r, RationalImpl d ) {
     93RationalImpl denominator( Rational r, RationalImpl d ) {
    9694        RationalImpl prev = r.denominator;
    9795        RationalImpl t = simplify( &r.numerator, &d );                  // simplify
     
    104102// comparison
    105103
    106 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    107 int ?==?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
     104int ?==?( Rational l, Rational r ) {
    108105        return l.numerator * r.denominator == l.denominator * r.numerator;
    109106} // ?==?
    110107
    111 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    112 int ?!=?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
     108int ?!=?( Rational l, Rational r ) {
    113109        return ! ( l == r );
    114110} // ?!=?
    115111
    116 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    117 int ?<?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
     112int ?<?( Rational l, Rational r ) {
    118113        return l.numerator * r.denominator < l.denominator * r.numerator;
    119114} // ?<?
    120115
    121 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    122 int ?<=?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
    123         return l.numerator * r.denominator <= l.denominator * r.numerator;
     116int ?<=?( Rational l, Rational r ) {
     117        return l < r || l == r;
    124118} // ?<=?
    125119
    126 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    127 int ?>?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
     120int ?>?( Rational l, Rational r ) {
    128121        return ! ( l <= r );
    129122} // ?>?
    130123
    131 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    132 int ?>=?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
     124int ?>=?( Rational l, Rational r ) {
    133125        return ! ( l < r );
    134126} // ?>=?
     
    137129// arithmetic
    138130
    139 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    140 Rational(RationalImpl) +?( Rational(RationalImpl) r ) {
    141         Rational(RationalImpl) t = { r.numerator, r.denominator };
    142         return t;
    143 } // +?
    144 
    145 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    146 Rational(RationalImpl) -?( Rational(RationalImpl) r ) {
    147         Rational(RationalImpl) t = { -r.numerator, r.denominator };
     131Rational -?( Rational r ) {
     132        Rational t = { -r.numerator, r.denominator };
    148133        return t;
    149134} // -?
    150135
    151 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    152 Rational(RationalImpl) ?+?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
     136Rational ?+?( Rational l, Rational r ) {
    153137        if ( l.denominator == r.denominator ) {                         // special case
    154                 Rational(RationalImpl) t = { l.numerator + r.numerator, l.denominator };
     138                Rational t = { l.numerator + r.numerator, l.denominator };
    155139                return t;
    156140        } else {
    157                 Rational(RationalImpl) t = { l.numerator * r.denominator + l.denominator * r.numerator, l.denominator * r.denominator };
     141                Rational t = { l.numerator * r.denominator + l.denominator * r.numerator, l.denominator * r.denominator };
    158142                return t;
    159143        } // if
    160144} // ?+?
    161145
    162 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    163 Rational(RationalImpl) ?-?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
     146Rational ?-?( Rational l, Rational r ) {
    164147        if ( l.denominator == r.denominator ) {                         // special case
    165                 Rational(RationalImpl) t = { l.numerator - r.numerator, l.denominator };
     148                Rational t = { l.numerator - r.numerator, l.denominator };
    166149                return t;
    167150        } else {
    168                 Rational(RationalImpl) t = { l.numerator * r.denominator - l.denominator * r.numerator, l.denominator * r.denominator };
     151                Rational t = { l.numerator * r.denominator - l.denominator * r.numerator, l.denominator * r.denominator };
    169152                return t;
    170153        } // if
    171154} // ?-?
    172155
    173 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    174 Rational(RationalImpl) ?*?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
    175         Rational(RationalImpl) t = { l.numerator * r.numerator, l.denominator * r.denominator };
     156Rational ?*?( Rational l, Rational r ) {
     157        Rational t = { l.numerator * r.numerator, l.denominator * r.denominator };
    176158        return t;
    177159} // ?*?
    178160
    179 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    180 Rational(RationalImpl) ?/?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
    181         if ( r.numerator < (RationalImpl){0} ) {
     161Rational ?/?( Rational l, Rational r ) {
     162        if ( r.numerator < 0 ) {
    182163                r.numerator = -r.numerator;
    183164                r.denominator = -r.denominator;
    184165        } // if
    185         Rational(RationalImpl) t = { l.numerator * r.denominator, l.denominator * r.numerator };
     166        Rational t = { l.numerator * r.denominator, l.denominator * r.numerator };
    186167        return t;
    187168} // ?/?
     
    190171// conversion
    191172
    192 // forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    193 // double widen( Rational(RationalImpl) r ) {
    194 //      return (double)r.numerator / (double)r.denominator;
    195 // } // widen
    196 
    197 // // http://www.ics.uci.edu/~eppstein/numth/frap.c
    198 // forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    199 // Rational(RationalImpl) narrow( double f, RationalImpl md ) {
    200 //      if ( md <= 1 ) {                                                                        // maximum fractional digits too small?
    201 //              return (Rational(RationalImpl)){ f, 1};                 // truncate fraction
    202 //      } // if
    203 
    204 //      // continued fraction coefficients
    205 //      RationalImpl m00 = 1, m11 = 1, m01 = 0, m10 = 0;
    206 //      RationalImpl ai, t;
    207 
    208 //      // find terms until denom gets too big
    209 //      for ( ;; ) {
    210 //              ai = (RationalImpl)f;
    211 //        if ( ! (m10 * ai + m11 <= md) ) break;
    212 //              t = m00 * ai + m01;
    213 //              m01 = m00;
    214 //              m00 = t;
    215 //              t = m10 * ai + m11;
    216 //              m11 = m10;
    217 //              m10 = t;
    218 //              t = (double)ai;
    219 //        if ( f == t ) break;                                                          // prevent division by zero
    220 //        f = 1 / (f - (double)t);
    221 //        if ( f > (double)0x7FFFFFFF ) break;                          // representation failure
    222 //      }
    223 //      return (Rational(RationalImpl)){ m00, m10 };
    224 // } // narrow
     173double widen( Rational r ) {
     174        return (double)r.numerator / (double)r.denominator;
     175} // widen
     176
     177// http://www.ics.uci.edu/~eppstein/numth/frap.c
     178Rational narrow( double f, RationalImpl md ) {
     179        if ( md <= 1 ) {                                                                        // maximum fractional digits too small?
     180                return (Rational){ f, 1};                                               // truncate fraction
     181        } // if
     182
     183        // continued fraction coefficients
     184        RationalImpl m00 = 1, m11 = 1, m01 = 0, m10 = 0;
     185        RationalImpl ai, t;
     186
     187        // find terms until denom gets too big
     188        for ( ;; ) {
     189                ai = (RationalImpl)f;
     190          if ( ! (m10 * ai + m11 <= md) ) break;
     191                t = m00 * ai + m01;
     192                m01 = m00;
     193                m00 = t;
     194                t = m10 * ai + m11;
     195                m11 = m10;
     196                m10 = t;
     197                t = (double)ai;
     198          if ( f == t ) break;                                                          // prevent division by zero
     199                f = 1 / (f - t);
     200          if ( f > (double)0x7FFFFFFF ) break;                          // representation failure
     201        }
     202        return (Rational){ m00, m10 };
     203} // narrow
    225204
    226205
    227206// I/O
    228207
    229 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    230 forall( dtype istype | istream( istype ) | { istype * ?|?( istype *, RationalImpl * ); } )
    231 istype * ?|?( istype * is, Rational(RationalImpl) * r ) {
     208forall( dtype istype | istream( istype ) )
     209istype * ?|?( istype *is, Rational *r ) {
    232210        RationalImpl t;
    233211        is | &(r->numerator) | &(r->denominator);
     
    238216} // ?|?
    239217
    240 forall ( otype RationalImpl | arithmetic( RationalImpl ) )
    241 forall( dtype ostype | ostream( ostype ) | { ostype * ?|?( ostype *, RationalImpl ); } )
    242 ostype * ?|?( ostype * os, Rational(RationalImpl ) r ) {
     218forall( dtype ostype | ostream( ostype ) )
     219ostype * ?|?( ostype *os, Rational r ) {
    243220        return os | r.numerator | '/' | r.denominator;
    244221} // ?|?
  • src/libcfa/stdlib

    r3bd1eb4 rdbfb35d  
    1010// Created On       : Thu Jan 28 17:12:35 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue May  9 08:42:44 2017
    13 // Update Count     : 107
     12// Last Modified On : Sat Apr  1 17:35:24 2017
     13// Update Count     : 104
    1414//
    1515
     
    8484forall( otype T | { int ?<?( T, T ); } )
    8585T * bsearch( T key, const T * arr, size_t dimension );
    86 
    8786forall( otype T | { int ?<?( T, T ); } )
    8887unsigned int bsearch( T key, const T * arr, size_t dimension );
    89 
    9088
    9189forall( otype T | { int ?<?( T, T ); } )
     
    109107double abs( double _Complex );
    110108long double abs( long double _Complex );
    111 forall ( otype T | { void ?{}( T *, zero_t ); int ?<?( T, T ); T -?( T ); } )
    112 T abs( T );
    113109
    114110//---------------------------------------
  • src/libcfa/stdlib.c

    r3bd1eb4 rdbfb35d  
    1010// Created On       : Thu Jan 28 17:10:29 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue May  9 08:43:00 2017
    13 // Update Count     : 191
     12// Last Modified On : Sun Apr 16 10:41:05 2017
     13// Update Count     : 189
    1414//
    1515
     
    2727} // extern "C"
    2828
    29 forall( dtype T | sized(T) ) T * malloc( void ) {               // type-safe
    30     return (T *)(void *)malloc( (size_t)sizeof(T) );
    31 } // malloc
    32 
    33 forall( dtype T | sized(T) ) T * malloc( char fill ) {  // initial with fill value (like calloc)
    34         T * ptr = (T *)(void *)malloc( (size_t)sizeof(T) );
     29forall( dtype T | sized(T) ) T * malloc( void ) {
     30        //printf( "malloc1\n" );
     31    return (T *)(void*)malloc( (size_t)sizeof(T) );
     32} // malloc
     33forall( dtype T | sized(T) ) T * malloc( char fill ) {
     34        //printf( "malloc3\n" );
     35        T * ptr = (T *)(void*)malloc( (size_t)sizeof(T) );
    3536    return memset( ptr, (int)fill, sizeof(T) );
    3637} // malloc
    3738
    38 forall( dtype T | sized(T) ) T * malloc( T * ptr, size_t size ) { // alternative realloc
    39     return (T *)realloc( ptr, size );
    40 } // malloc
    41 
    42 forall( dtype T | sized(T) ) T * malloc( T * ptr, size_t size, unsigned char fill ) { // alternative realloc with fill value
    43     return (T *)realloc( ptr, size, fill );
    44 } // malloc
    45 
    46 
    47 forall( dtype T | sized(T) ) T * calloc( size_t nmemb ) { // type-safe array initialization with fill 0
     39forall( dtype T | sized(T) ) T * calloc( size_t nmemb ) {
     40        //printf( "calloc\n" );
    4841    return (T *)calloc( nmemb, sizeof(T) );
    4942} // calloc
    5043
    51 
    52 forall( dtype T | sized(T) ) T * realloc( T * ptr, size_t size ) { // type-safe
     44forall( dtype T | sized(T) ) T * realloc( T * ptr, size_t size ) {
     45        //printf( "realloc1\n" );
    5346    return (T *)(void *)realloc( (void *)ptr, size );
    5447} // realloc
    55 
    56 forall( dtype T | sized(T) ) T * realloc( T * ptr, size_t size, unsigned char fill ) { // alternative realloc with fill value
     48forall( dtype T | sized(T) ) T * realloc( T * ptr, size_t size, unsigned char fill ) {
     49        //printf( "realloc2\n" );
    5750    char * nptr = (T *)(void *)realloc( (void *)ptr, size );
    5851    size_t unused = malloc_usable_size( nptr );
     
    6154} // realloc
    6255
    63 
    64 forall( dtype T | sized(T) ) T * aligned_alloc( size_t alignment ) { // aligned allocation
     56forall( dtype T | sized(T) ) T * malloc( T * ptr, size_t size ) {
     57        //printf( "malloc4\n" );
     58    return (T *)realloc( ptr, size );
     59} // malloc
     60forall( dtype T | sized(T) ) T * malloc( T * ptr, size_t size, unsigned char fill ) {
     61        //printf( "malloc5\n" );
     62    return (T *)realloc( ptr, size, fill );
     63} // malloc
     64
     65forall( dtype T | sized(T) ) T * aligned_alloc( size_t alignment ) {
     66        //printf( "aligned_alloc\n" );
    6567    return (T *)memalign( alignment, sizeof(T) );
    6668} // aligned_alloc
    6769
    6870forall( dtype T | sized(T) ) T * memalign( size_t alignment ) {
     71        //printf( "memalign\n" );
    6972    return (T *)memalign( alignment, sizeof(T) );
    7073} // memalign
    7174
    7275forall( dtype T | sized(T) ) int posix_memalign( T ** ptr, size_t alignment ) {
     76        //printf( "posix_memalign\n" );
    7377    return posix_memalign( (void **)ptr, alignment, sizeof(T) );
    7478} // posix_memalign
    7579
    76 
    77 forall( dtype T, ttype Params | sized(T) | { void ?{}( T *, Params ); } ) //  new
     80forall( dtype T, ttype Params | sized(T) | { void ?{}( T *, Params ); } )
    7881T * new( Params p ) {
    7982        return ((T *)malloc()){ p };
    80 } // new
    81 
    82 forall( dtype T | { void ^?{}(T *); } )                                 // delete
     83}
     84
     85forall( dtype T | { void ^?{}(T *); } )
    8386void delete( T * ptr ) {
    84         if ( ptr ) {
    85                 ^ptr{};
    86                 free( ptr );
    87         }
    88 } // delete
     87  if ( ptr ) {
     88    ^ptr{};
     89    free( ptr );
     90  }
     91}
    8992
    9093forall( dtype T, ttype Params | { void ^?{}(T *); void delete(Params); } )
     
    9598        }
    9699        delete( rest );
    97 } // delete
     100}
    98101
    99102//---------------------------------------
     
    103106        if ( sscanf( ptr, "%d", &i ) == EOF ) {}
    104107        return i;
    105 } // ato
    106 
     108}
    107109unsigned int ato( const char * ptr ) {
    108110        unsigned int ui;
    109111        if ( sscanf( ptr, "%u", &ui ) == EOF ) {}
    110112        return ui;
    111 } // ato
    112 
     113}
    113114long int ato( const char * ptr ) {
    114115        long int li;
    115116        if ( sscanf( ptr, "%ld", &li ) == EOF ) {}
    116117        return li;
    117 } // ato
    118 
     118}
    119119unsigned long int ato( const char * ptr ) {
    120120        unsigned long int uli;
    121121        if ( sscanf( ptr, "%lu", &uli ) == EOF ) {}
    122122        return uli;
    123 } // ato
    124 
     123}
    125124long long int ato( const char * ptr ) {
    126125        long long int lli;
    127126        if ( sscanf( ptr, "%lld", &lli ) == EOF ) {}
    128127        return lli;
    129 } // ato
    130 
     128}
    131129unsigned long long int ato( const char * ptr ) {
    132130        unsigned long long int ulli;
    133131        if ( sscanf( ptr, "%llu", &ulli ) == EOF ) {}
    134132        return ulli;
    135 } // ato
    136 
     133}
    137134
    138135float ato( const char * ptr ) {
     
    140137        if ( sscanf( ptr, "%f", &f ) == EOF ) {}
    141138        return f;
    142 } // ato
    143 
     139}
    144140double ato( const char * ptr ) {
    145141        double d;
    146142        if ( sscanf( ptr, "%lf", &d ) == EOF ) {}
    147143        return d;
    148 } // ato
    149 
     144}
    150145long double ato( const char * ptr ) {
    151146        long double ld;
    152147        if ( sscanf( ptr, "%Lf", &ld ) == EOF ) {}
    153148        return ld;
    154 } // ato
    155 
     149}
    156150
    157151float _Complex ato( const char * ptr ) {
     
    159153        if ( sscanf( ptr, "%g%gi", &re, &im ) == EOF ) {}
    160154        return re + im * _Complex_I;
    161 } // ato
    162 
     155}
    163156double _Complex ato( const char * ptr ) {
    164157        double re, im;
    165158        if ( sscanf( ptr, "%lf%lfi", &re, &im ) == EOF ) {}
    166159        return re + im * _Complex_I;
    167 } // ato
    168 
     160}
    169161long double _Complex ato( const char * ptr ) {
    170162        long double re, im;
    171163        if ( sscanf( ptr, "%Lf%Lfi", &re, &im ) == EOF ) {}
    172164        return re + im * _Complex_I;
    173 } // ato
    174 
     165}
    175166
    176167int strto( const char * sptr, char ** eptr, int base ) {
    177168        return (int)strtol( sptr, eptr, base );
    178 } // strto
    179 
     169}
    180170unsigned int strto( const char * sptr, char ** eptr, int base ) {
    181171        return (unsigned int)strtoul( sptr, eptr, base );
    182 } // strto
    183 
     172}
    184173long int strto( const char * sptr, char ** eptr, int base ) {
    185174        return strtol( sptr, eptr, base );
    186 } // strto
    187 
     175}
    188176unsigned long int strto( const char * sptr, char ** eptr, int base ) {
    189177        return strtoul( sptr, eptr, base );
    190 } // strto
    191 
     178}
    192179long long int strto( const char * sptr, char ** eptr, int base ) {
    193180        return strtoll( sptr, eptr, base );
    194 } // strto
    195 
     181}
    196182unsigned long long int strto( const char * sptr, char ** eptr, int base ) {
    197183        return strtoull( sptr, eptr, base );
    198 } // strto
    199 
     184}
    200185
    201186float strto( const char * sptr, char ** eptr ) {
    202187        return strtof( sptr, eptr );
    203 } // strto
    204 
     188}
    205189double strto( const char * sptr, char ** eptr ) {
    206190        return strtod( sptr, eptr );
    207 } // strto
    208 
     191}
    209192long double strto( const char * sptr, char ** eptr ) {
    210193        return strtold( sptr, eptr );
    211 } // strto
    212 
     194}
    213195
    214196float _Complex strto( const char * sptr, char ** eptr ) {
     
    219201        if ( sptr == *eptr ) return 0.0;
    220202        return re + im * _Complex_I;
    221 } // strto
    222 
     203}
    223204double _Complex strto( const char * sptr, char ** eptr ) {
    224205        double re, im;
     
    228209        if ( sptr == *eptr ) return 0.0;
    229210        return re + im * _Complex_I;
    230 } // strto
    231 
     211}
    232212long double _Complex strto( const char * sptr, char ** eptr ) {
    233213        long double re, im;
     
    237217        if ( sptr == *eptr ) return 0.0;
    238218        return re + im * _Complex_I;
    239 } // strto
     219}
    240220
    241221//---------------------------------------
  • src/main.cc

    r3bd1eb4 rdbfb35d  
    1 
    21//
    32// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
     
    109// Author           : Richard C. Bilson
    1110// Created On       : Fri May 15 23:12:02 2015
    12 // Last Modified By : Andrew Beach
    13 // Last Modified On : Wed May 10 14:45:00 2017
    14 // Update Count     : 437
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Dec 14 14:35:54 2016
     13// Update Count     : 436
    1514//
    1615
     
    8079        errorp = false,
    8180        codegenp = false,
    82         prettycodegenp = false,
    83         nolinemarks = false;
     81        prettycodegenp = false;
    8482
    8583static void parse_cmdline( int argc, char *argv[], const char *& filename );
     
    312310
    313311                CodeTools::fillLocations( translationUnit );
    314                 CodeGen::generate( translationUnit, *output, ! noprotop, prettycodegenp, true, ! nolinemarks );
     312                CodeGen::generate( translationUnit, *output, ! noprotop, prettycodegenp, true );
    315313
    316314                CodeGen::FixMain::fix( *output, treep ? "../prelude/bootloader.c" : CFA_LIBDIR "/bootloader.c" );
     
    338336        } catch ( CompilerError &e ) {
    339337                cerr << "Compiler Error: " << e.get_what() << endl;
    340                 cerr << "(please report bugs to [REDACTED])" << endl;
     338                cerr << "(please report bugs to " << endl;
    341339                if ( output != &cout ) {
    342340                        delete output;
     
    377375
    378376        int c;
    379         while ( (c = getopt_long( argc, argv, "abBcdefglLmnpqrstTvyzZD:F:", long_opts, &long_index )) != -1 ) {
     377        while ( (c = getopt_long( argc, argv, "abBcdefglmnpqrstTvyzZD:F:", long_opts, &long_index )) != -1 ) {
    380378                switch ( c ) {
    381379                  case Ast:
     
    413411                  case 'l':                                                                             // generate libcfa.c
    414412                        libcfap = true;
    415                         break;
    416                   case 'L':                                                                             // surpress lines marks
    417                         nolinemarks = true;
    418413                        break;
    419414                  case Nopreamble:
  • src/prelude/Makefile.am

    r3bd1eb4 rdbfb35d  
    4242
    4343bootloader.c : bootloader.cf prelude.cf extras.cf builtins.cf ${abs_top_srcdir}/src/driver/cfa-cpp
    44         ${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -tpmL bootloader.cf $@  # use src/cfa-cpp as not in lib until after install
     44        ${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -tpm bootloader.cf $@  # use src/cfa-cpp as not in lib until after install
    4545
    4646MAINTAINERCLEANFILES = builtins.c builtins.cf extras.cf bootloader.c ${addprefix ${libdir}/,${cfalib_DATA}} ${addprefix ${libdir}/,${lib_LIBRARIES}}
  • src/prelude/Makefile.in

    r3bd1eb4 rdbfb35d  
    439439
    440440bootloader.c : bootloader.cf prelude.cf extras.cf builtins.cf ${abs_top_srcdir}/src/driver/cfa-cpp
    441         ${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -tpmL bootloader.cf $@  # use src/cfa-cpp as not in lib until after install
     441        ${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -tpm bootloader.cf $@  # use src/cfa-cpp as not in lib until after install
    442442
    443443# Tell versions [3.59,3.63) of GNU make to not export all variables.
  • src/tests/.expect/32/KRfunctions.txt

    r3bd1eb4 rdbfb35d  
    3131}
    3232static inline struct S ___operator_assign__F2sS_P2sS2sS_autogen___1(struct S *___dst__P2sS_1, struct S ___src__2sS_1){
    33     struct S ___ret__2sS_1;
    3433    ((void)((*___dst__P2sS_1).__i__i_1=___src__2sS_1.__i__i_1));
    35     ((void)___constructor__F_P2sS2sS_autogen___1((&___ret__2sS_1), ___src__2sS_1));
    36     return ((struct S )___ret__2sS_1);
     34    return ((struct S )___src__2sS_1);
    3735}
    3836static inline void ___constructor__F_P2sSi_autogen___1(struct S *___dst__P2sS_1, int __i__i_1){
  • src/tests/.expect/32/attributes.txt

    r3bd1eb4 rdbfb35d  
    2222}
    2323static inline struct __anonymous0 ___operator_assign__F13s__anonymous0_P13s__anonymous013s__anonymous0_autogen___1(struct __anonymous0 *___dst__P13s__anonymous0_1, struct __anonymous0 ___src__13s__anonymous0_1){
    24     struct __anonymous0 ___ret__13s__anonymous0_1;
    25     ((void)___constructor__F_P13s__anonymous013s__anonymous0_autogen___1((&___ret__13s__anonymous0_1), ___src__13s__anonymous0_1));
    26     return ((struct __anonymous0 )___ret__13s__anonymous0_1);
     24    return ((struct __anonymous0 )___src__13s__anonymous0_1);
    2725}
    2826__attribute__ ((unused)) struct Agn1;
     
    4038}
    4139static inline struct Agn2 ___operator_assign__F5sAgn2_P5sAgn25sAgn2_autogen___1(struct Agn2 *___dst__P5sAgn2_1, struct Agn2 ___src__5sAgn2_1){
    42     struct Agn2 ___ret__5sAgn2_1;
    43     ((void)___constructor__F_P5sAgn25sAgn2_autogen___1((&___ret__5sAgn2_1), ___src__5sAgn2_1));
    44     return ((struct Agn2 )___ret__5sAgn2_1);
     40    return ((struct Agn2 )___src__5sAgn2_1);
    4541}
    4642enum __attribute__ ((unused)) __anonymous1 {
     
    10399}
    104100static inline struct Fdl ___operator_assign__F4sFdl_P4sFdl4sFdl_autogen___1(struct Fdl *___dst__P4sFdl_1, struct Fdl ___src__4sFdl_1){
    105     struct Fdl ___ret__4sFdl_1;
    106101    ((void)((*___dst__P4sFdl_1).__f1__i_1=___src__4sFdl_1.__f1__i_1));
    107102    ((void)((*___dst__P4sFdl_1).__f2__i_1=___src__4sFdl_1.__f2__i_1));
     
    113108    ((void)((*___dst__P4sFdl_1).__f8__i_1=___src__4sFdl_1.__f8__i_1));
    114109    ((void)((*___dst__P4sFdl_1).__f9__Pi_1=___src__4sFdl_1.__f9__Pi_1));
    115     ((void)___constructor__F_P4sFdl4sFdl_autogen___1((&___ret__4sFdl_1), ___src__4sFdl_1));
    116     return ((struct Fdl )___ret__4sFdl_1);
     110    return ((struct Fdl )___src__4sFdl_1);
    117111}
    118112static inline void ___constructor__F_P4sFdli_autogen___1(struct Fdl *___dst__P4sFdl_1, int __f1__i_1){
     
    298292    }
    299293    inline struct __anonymous4 ___operator_assign__F13s__anonymous4_P13s__anonymous413s__anonymous4_autogen___2(struct __anonymous4 *___dst__P13s__anonymous4_2, struct __anonymous4 ___src__13s__anonymous4_2){
    300         struct __anonymous4 ___ret__13s__anonymous4_2;
    301294        ((void)((*___dst__P13s__anonymous4_2).__i__i_2=___src__13s__anonymous4_2.__i__i_2));
    302         ((void)___constructor__F_P13s__anonymous413s__anonymous4_autogen___2((&___ret__13s__anonymous4_2), ___src__13s__anonymous4_2));
    303         return ((struct __anonymous4 )___ret__13s__anonymous4_2);
     295        return ((struct __anonymous4 )___src__13s__anonymous4_2);
    304296    }
    305297    inline void ___constructor__F_P13s__anonymous4i_autogen___2(struct __anonymous4 *___dst__P13s__anonymous4_2, int __i__i_2){
     
    318310    }
    319311    inline enum __anonymous5 ___operator_assign__F13e__anonymous5_P13e__anonymous513e__anonymous5_intrinsic___2(enum __anonymous5 *___dst__P13e__anonymous5_2, enum __anonymous5 ___src__13e__anonymous5_2){
    320         enum __anonymous5 ___ret__13e__anonymous5_2;
    321         ((void)(___ret__13e__anonymous5_2=((*___dst__P13e__anonymous5_2)=___src__13e__anonymous5_2)) /* ?{} */);
    322         return ((enum __anonymous5 )___ret__13e__anonymous5_2);
     312        return ((enum __anonymous5 )((*___dst__P13e__anonymous5_2)=___src__13e__anonymous5_2));
    323313    }
    324314    ((void)sizeof(enum __anonymous5 ));
     
    348338}
    349339static inline struct Vad ___operator_assign__F4sVad_P4sVad4sVad_autogen___1(struct Vad *___dst__P4sVad_1, struct Vad ___src__4sVad_1){
    350     struct Vad ___ret__4sVad_1;
    351     ((void)___constructor__F_P4sVad4sVad_autogen___1((&___ret__4sVad_1), ___src__4sVad_1));
    352     return ((struct Vad )___ret__4sVad_1);
    353 }
     340    return ((struct Vad )___src__4sVad_1);
     341}
  • src/tests/.expect/32/declarationSpecifier.txt

    r3bd1eb4 rdbfb35d  
    3030}
    3131static inline struct __anonymous0 ___operator_assign__F13s__anonymous0_P13s__anonymous013s__anonymous0_autogen___1(struct __anonymous0 *___dst__P13s__anonymous0_1, struct __anonymous0 ___src__13s__anonymous0_1){
    32     struct __anonymous0 ___ret__13s__anonymous0_1;
    3332    ((void)((*___dst__P13s__anonymous0_1).__i__i_1=___src__13s__anonymous0_1.__i__i_1));
    34     ((void)___constructor__F_P13s__anonymous013s__anonymous0_autogen___1((&___ret__13s__anonymous0_1), ___src__13s__anonymous0_1));
    35     return ((struct __anonymous0 )___ret__13s__anonymous0_1);
     33    return ((struct __anonymous0 )___src__13s__anonymous0_1);
    3634}
    3735static inline void ___constructor__F_P13s__anonymous0i_autogen___1(struct __anonymous0 *___dst__P13s__anonymous0_1, int __i__i_1){
     
    5654}
    5755static inline struct __anonymous1 ___operator_assign__F13s__anonymous1_P13s__anonymous113s__anonymous1_autogen___1(struct __anonymous1 *___dst__P13s__anonymous1_1, struct __anonymous1 ___src__13s__anonymous1_1){
    58     struct __anonymous1 ___ret__13s__anonymous1_1;
    5956    ((void)((*___dst__P13s__anonymous1_1).__i__i_1=___src__13s__anonymous1_1.__i__i_1));
    60     ((void)___constructor__F_P13s__anonymous113s__anonymous1_autogen___1((&___ret__13s__anonymous1_1), ___src__13s__anonymous1_1));
    61     return ((struct __anonymous1 )___ret__13s__anonymous1_1);
     57    return ((struct __anonymous1 )___src__13s__anonymous1_1);
    6258}
    6359static inline void ___constructor__F_P13s__anonymous1i_autogen___1(struct __anonymous1 *___dst__P13s__anonymous1_1, int __i__i_1){
     
    8278}
    8379static inline struct __anonymous2 ___operator_assign__F13s__anonymous2_P13s__anonymous213s__anonymous2_autogen___1(struct __anonymous2 *___dst__P13s__anonymous2_1, struct __anonymous2 ___src__13s__anonymous2_1){
    84     struct __anonymous2 ___ret__13s__anonymous2_1;
    8580    ((void)((*___dst__P13s__anonymous2_1).__i__i_1=___src__13s__anonymous2_1.__i__i_1));
    86     ((void)___constructor__F_P13s__anonymous213s__anonymous2_autogen___1((&___ret__13s__anonymous2_1), ___src__13s__anonymous2_1));
    87     return ((struct __anonymous2 )___ret__13s__anonymous2_1);
     81    return ((struct __anonymous2 )___src__13s__anonymous2_1);
    8882}
    8983static inline void ___constructor__F_P13s__anonymous2i_autogen___1(struct __anonymous2 *___dst__P13s__anonymous2_1, int __i__i_1){
     
    108102}
    109103static inline struct __anonymous3 ___operator_assign__F13s__anonymous3_P13s__anonymous313s__anonymous3_autogen___1(struct __anonymous3 *___dst__P13s__anonymous3_1, struct __anonymous3 ___src__13s__anonymous3_1){
    110     struct __anonymous3 ___ret__13s__anonymous3_1;
    111104    ((void)((*___dst__P13s__anonymous3_1).__i__i_1=___src__13s__anonymous3_1.__i__i_1));
    112     ((void)___constructor__F_P13s__anonymous313s__anonymous3_autogen___1((&___ret__13s__anonymous3_1), ___src__13s__anonymous3_1));
    113     return ((struct __anonymous3 )___ret__13s__anonymous3_1);
     105    return ((struct __anonymous3 )___src__13s__anonymous3_1);
    114106}
    115107static inline void ___constructor__F_P13s__anonymous3i_autogen___1(struct __anonymous3 *___dst__P13s__anonymous3_1, int __i__i_1){
     
    134126}
    135127static inline struct __anonymous4 ___operator_assign__F13s__anonymous4_P13s__anonymous413s__anonymous4_autogen___1(struct __anonymous4 *___dst__P13s__anonymous4_1, struct __anonymous4 ___src__13s__anonymous4_1){
    136     struct __anonymous4 ___ret__13s__anonymous4_1;
    137128    ((void)((*___dst__P13s__anonymous4_1).__i__i_1=___src__13s__anonymous4_1.__i__i_1));
    138     ((void)___constructor__F_P13s__anonymous413s__anonymous4_autogen___1((&___ret__13s__anonymous4_1), ___src__13s__anonymous4_1));
    139     return ((struct __anonymous4 )___ret__13s__anonymous4_1);
     129    return ((struct __anonymous4 )___src__13s__anonymous4_1);
    140130}
    141131static inline void ___constructor__F_P13s__anonymous4i_autogen___1(struct __anonymous4 *___dst__P13s__anonymous4_1, int __i__i_1){
     
    160150}
    161151static inline struct __anonymous5 ___operator_assign__F13s__anonymous5_P13s__anonymous513s__anonymous5_autogen___1(struct __anonymous5 *___dst__P13s__anonymous5_1, struct __anonymous5 ___src__13s__anonymous5_1){
    162     struct __anonymous5 ___ret__13s__anonymous5_1;
    163152    ((void)((*___dst__P13s__anonymous5_1).__i__i_1=___src__13s__anonymous5_1.__i__i_1));
    164     ((void)___constructor__F_P13s__anonymous513s__anonymous5_autogen___1((&___ret__13s__anonymous5_1), ___src__13s__anonymous5_1));
    165     return ((struct __anonymous5 )___ret__13s__anonymous5_1);
     153    return ((struct __anonymous5 )___src__13s__anonymous5_1);
    166154}
    167155static inline void ___constructor__F_P13s__anonymous5i_autogen___1(struct __anonymous5 *___dst__P13s__anonymous5_1, int __i__i_1){
     
    186174}
    187175static inline struct __anonymous6 ___operator_assign__F13s__anonymous6_P13s__anonymous613s__anonymous6_autogen___1(struct __anonymous6 *___dst__P13s__anonymous6_1, struct __anonymous6 ___src__13s__anonymous6_1){
    188     struct __anonymous6 ___ret__13s__anonymous6_1;
    189176    ((void)((*___dst__P13s__anonymous6_1).__i__i_1=___src__13s__anonymous6_1.__i__i_1));
    190     ((void)___constructor__F_P13s__anonymous613s__anonymous6_autogen___1((&___ret__13s__anonymous6_1), ___src__13s__anonymous6_1));
    191     return ((struct __anonymous6 )___ret__13s__anonymous6_1);
     177    return ((struct __anonymous6 )___src__13s__anonymous6_1);
    192178}
    193179static inline void ___constructor__F_P13s__anonymous6i_autogen___1(struct __anonymous6 *___dst__P13s__anonymous6_1, int __i__i_1){
     
    212198}
    213199static inline struct __anonymous7 ___operator_assign__F13s__anonymous7_P13s__anonymous713s__anonymous7_autogen___1(struct __anonymous7 *___dst__P13s__anonymous7_1, struct __anonymous7 ___src__13s__anonymous7_1){
    214     struct __anonymous7 ___ret__13s__anonymous7_1;
    215200    ((void)((*___dst__P13s__anonymous7_1).__i__i_1=___src__13s__anonymous7_1.__i__i_1));
    216     ((void)___constructor__F_P13s__anonymous713s__anonymous7_autogen___1((&___ret__13s__anonymous7_1), ___src__13s__anonymous7_1));
    217     return ((struct __anonymous7 )___ret__13s__anonymous7_1);
     201    return ((struct __anonymous7 )___src__13s__anonymous7_1);
    218202}
    219203static inline void ___constructor__F_P13s__anonymous7i_autogen___1(struct __anonymous7 *___dst__P13s__anonymous7_1, int __i__i_1){
     
    246230}
    247231static inline struct __anonymous8 ___operator_assign__F13s__anonymous8_P13s__anonymous813s__anonymous8_autogen___1(struct __anonymous8 *___dst__P13s__anonymous8_1, struct __anonymous8 ___src__13s__anonymous8_1){
    248     struct __anonymous8 ___ret__13s__anonymous8_1;
    249232    ((void)((*___dst__P13s__anonymous8_1).__i__s_1=___src__13s__anonymous8_1.__i__s_1));
    250     ((void)___constructor__F_P13s__anonymous813s__anonymous8_autogen___1((&___ret__13s__anonymous8_1), ___src__13s__anonymous8_1));
    251     return ((struct __anonymous8 )___ret__13s__anonymous8_1);
     233    return ((struct __anonymous8 )___src__13s__anonymous8_1);
    252234}
    253235static inline void ___constructor__F_P13s__anonymous8s_autogen___1(struct __anonymous8 *___dst__P13s__anonymous8_1, short __i__s_1){
     
    272254}
    273255static inline struct __anonymous9 ___operator_assign__F13s__anonymous9_P13s__anonymous913s__anonymous9_autogen___1(struct __anonymous9 *___dst__P13s__anonymous9_1, struct __anonymous9 ___src__13s__anonymous9_1){
    274     struct __anonymous9 ___ret__13s__anonymous9_1;
    275256    ((void)((*___dst__P13s__anonymous9_1).__i__s_1=___src__13s__anonymous9_1.__i__s_1));
    276     ((void)___constructor__F_P13s__anonymous913s__anonymous9_autogen___1((&___ret__13s__anonymous9_1), ___src__13s__anonymous9_1));
    277     return ((struct __anonymous9 )___ret__13s__anonymous9_1);
     257    return ((struct __anonymous9 )___src__13s__anonymous9_1);
    278258}
    279259static inline void ___constructor__F_P13s__anonymous9s_autogen___1(struct __anonymous9 *___dst__P13s__anonymous9_1, short __i__s_1){
     
    298278}
    299279static inline struct __anonymous10 ___operator_assign__F14s__anonymous10_P14s__anonymous1014s__anonymous10_autogen___1(struct __anonymous10 *___dst__P14s__anonymous10_1, struct __anonymous10 ___src__14s__anonymous10_1){
    300     struct __anonymous10 ___ret__14s__anonymous10_1;
    301280    ((void)((*___dst__P14s__anonymous10_1).__i__s_1=___src__14s__anonymous10_1.__i__s_1));
    302     ((void)___constructor__F_P14s__anonymous1014s__anonymous10_autogen___1((&___ret__14s__anonymous10_1), ___src__14s__anonymous10_1));
    303     return ((struct __anonymous10 )___ret__14s__anonymous10_1);
     281    return ((struct __anonymous10 )___src__14s__anonymous10_1);
    304282}
    305283static inline void ___constructor__F_P14s__anonymous10s_autogen___1(struct __anonymous10 *___dst__P14s__anonymous10_1, short __i__s_1){
     
    324302}
    325303static inline struct __anonymous11 ___operator_assign__F14s__anonymous11_P14s__anonymous1114s__anonymous11_autogen___1(struct __anonymous11 *___dst__P14s__anonymous11_1, struct __anonymous11 ___src__14s__anonymous11_1){
    326     struct __anonymous11 ___ret__14s__anonymous11_1;
    327304    ((void)((*___dst__P14s__anonymous11_1).__i__s_1=___src__14s__anonymous11_1.__i__s_1));
    328     ((void)___constructor__F_P14s__anonymous1114s__anonymous11_autogen___1((&___ret__14s__anonymous11_1), ___src__14s__anonymous11_1));
    329     return ((struct __anonymous11 )___ret__14s__anonymous11_1);
     305    return ((struct __anonymous11 )___src__14s__anonymous11_1);
    330306}
    331307static inline void ___constructor__F_P14s__anonymous11s_autogen___1(struct __anonymous11 *___dst__P14s__anonymous11_1, short __i__s_1){
     
    350326}
    351327static inline struct __anonymous12 ___operator_assign__F14s__anonymous12_P14s__anonymous1214s__anonymous12_autogen___1(struct __anonymous12 *___dst__P14s__anonymous12_1, struct __anonymous12 ___src__14s__anonymous12_1){
    352     struct __anonymous12 ___ret__14s__anonymous12_1;
    353328    ((void)((*___dst__P14s__anonymous12_1).__i__s_1=___src__14s__anonymous12_1.__i__s_1));
    354     ((void)___constructor__F_P14s__anonymous1214s__anonymous12_autogen___1((&___ret__14s__anonymous12_1), ___src__14s__anonymous12_1));
    355     return ((struct __anonymous12 )___ret__14s__anonymous12_1);
     329    return ((struct __anonymous12 )___src__14s__anonymous12_1);
    356330}
    357331static inline void ___constructor__F_P14s__anonymous12s_autogen___1(struct __anonymous12 *___dst__P14s__anonymous12_1, short __i__s_1){
     
    376350}
    377351static inline struct __anonymous13 ___operator_assign__F14s__anonymous13_P14s__anonymous1314s__anonymous13_autogen___1(struct __anonymous13 *___dst__P14s__anonymous13_1, struct __anonymous13 ___src__14s__anonymous13_1){
    378     struct __anonymous13 ___ret__14s__anonymous13_1;
    379352    ((void)((*___dst__P14s__anonymous13_1).__i__s_1=___src__14s__anonymous13_1.__i__s_1));
    380     ((void)___constructor__F_P14s__anonymous1314s__anonymous13_autogen___1((&___ret__14s__anonymous13_1), ___src__14s__anonymous13_1));
    381     return ((struct __anonymous13 )___ret__14s__anonymous13_1);
     353    return ((struct __anonymous13 )___src__14s__anonymous13_1);
    382354}
    383355static inline void ___constructor__F_P14s__anonymous13s_autogen___1(struct __anonymous13 *___dst__P14s__anonymous13_1, short __i__s_1){
     
    402374}
    403375static inline struct __anonymous14 ___operator_assign__F14s__anonymous14_P14s__anonymous1414s__anonymous14_autogen___1(struct __anonymous14 *___dst__P14s__anonymous14_1, struct __anonymous14 ___src__14s__anonymous14_1){
    404     struct __anonymous14 ___ret__14s__anonymous14_1;
    405376    ((void)((*___dst__P14s__anonymous14_1).__i__s_1=___src__14s__anonymous14_1.__i__s_1));
    406     ((void)___constructor__F_P14s__anonymous1414s__anonymous14_autogen___1((&___ret__14s__anonymous14_1), ___src__14s__anonymous14_1));
    407     return ((struct __anonymous14 )___ret__14s__anonymous14_1);
     377    return ((struct __anonymous14 )___src__14s__anonymous14_1);
    408378}
    409379static inline void ___constructor__F_P14s__anonymous14s_autogen___1(struct __anonymous14 *___dst__P14s__anonymous14_1, short __i__s_1){
     
    428398}
    429399static inline struct __anonymous15 ___operator_assign__F14s__anonymous15_P14s__anonymous1514s__anonymous15_autogen___1(struct __anonymous15 *___dst__P14s__anonymous15_1, struct __anonymous15 ___src__14s__anonymous15_1){
    430     struct __anonymous15 ___ret__14s__anonymous15_1;
    431400    ((void)((*___dst__P14s__anonymous15_1).__i__s_1=___src__14s__anonymous15_1.__i__s_1));
    432     ((void)___constructor__F_P14s__anonymous1514s__anonymous15_autogen___1((&___ret__14s__anonymous15_1), ___src__14s__anonymous15_1));
    433     return ((struct __anonymous15 )___ret__14s__anonymous15_1);
     401    return ((struct __anonymous15 )___src__14s__anonymous15_1);
    434402}
    435403static inline void ___constructor__F_P14s__anonymous15s_autogen___1(struct __anonymous15 *___dst__P14s__anonymous15_1, short __i__s_1){
     
    470438}
    471439static inline struct __anonymous16 ___operator_assign__F14s__anonymous16_P14s__anonymous1614s__anonymous16_autogen___1(struct __anonymous16 *___dst__P14s__anonymous16_1, struct __anonymous16 ___src__14s__anonymous16_1){
    472     struct __anonymous16 ___ret__14s__anonymous16_1;
    473440    ((void)((*___dst__P14s__anonymous16_1).__i__i_1=___src__14s__anonymous16_1.__i__i_1));
    474     ((void)___constructor__F_P14s__anonymous1614s__anonymous16_autogen___1((&___ret__14s__anonymous16_1), ___src__14s__anonymous16_1));
    475     return ((struct __anonymous16 )___ret__14s__anonymous16_1);
     441    return ((struct __anonymous16 )___src__14s__anonymous16_1);
    476442}
    477443static inline void ___constructor__F_P14s__anonymous16i_autogen___1(struct __anonymous16 *___dst__P14s__anonymous16_1, int __i__i_1){
     
    496462}
    497463static inline struct __anonymous17 ___operator_assign__F14s__anonymous17_P14s__anonymous1714s__anonymous17_autogen___1(struct __anonymous17 *___dst__P14s__anonymous17_1, struct __anonymous17 ___src__14s__anonymous17_1){
    498     struct __anonymous17 ___ret__14s__anonymous17_1;
    499464    ((void)((*___dst__P14s__anonymous17_1).__i__i_1=___src__14s__anonymous17_1.__i__i_1));
    500     ((void)___constructor__F_P14s__anonymous1714s__anonymous17_autogen___1((&___ret__14s__anonymous17_1), ___src__14s__anonymous17_1));
    501     return ((struct __anonymous17 )___ret__14s__anonymous17_1);
     465    return ((struct __anonymous17 )___src__14s__anonymous17_1);
    502466}
    503467static inline void ___constructor__F_P14s__anonymous17i_autogen___1(struct __anonymous17 *___dst__P14s__anonymous17_1, int __i__i_1){
     
    522486}
    523487static inline struct __anonymous18 ___operator_assign__F14s__anonymous18_P14s__anonymous1814s__anonymous18_autogen___1(struct __anonymous18 *___dst__P14s__anonymous18_1, struct __anonymous18 ___src__14s__anonymous18_1){
    524     struct __anonymous18 ___ret__14s__anonymous18_1;
    525488    ((void)((*___dst__P14s__anonymous18_1).__i__i_1=___src__14s__anonymous18_1.__i__i_1));
    526     ((void)___constructor__F_P14s__anonymous1814s__anonymous18_autogen___1((&___ret__14s__anonymous18_1), ___src__14s__anonymous18_1));
    527     return ((struct __anonymous18 )___ret__14s__anonymous18_1);
     489    return ((struct __anonymous18 )___src__14s__anonymous18_1);
    528490}
    529491static inline void ___constructor__F_P14s__anonymous18i_autogen___1(struct __anonymous18 *___dst__P14s__anonymous18_1, int __i__i_1){
     
    548510}
    549511static inline struct __anonymous19 ___operator_assign__F14s__anonymous19_P14s__anonymous1914s__anonymous19_autogen___1(struct __anonymous19 *___dst__P14s__anonymous19_1, struct __anonymous19 ___src__14s__anonymous19_1){
    550     struct __anonymous19 ___ret__14s__anonymous19_1;
    551512    ((void)((*___dst__P14s__anonymous19_1).__i__i_1=___src__14s__anonymous19_1.__i__i_1));
    552     ((void)___constructor__F_P14s__anonymous1914s__anonymous19_autogen___1((&___ret__14s__anonymous19_1), ___src__14s__anonymous19_1));
    553     return ((struct __anonymous19 )___ret__14s__anonymous19_1);
     513    return ((struct __anonymous19 )___src__14s__anonymous19_1);
    554514}
    555515static inline void ___constructor__F_P14s__anonymous19i_autogen___1(struct __anonymous19 *___dst__P14s__anonymous19_1, int __i__i_1){
     
    574534}
    575535static inline struct __anonymous20 ___operator_assign__F14s__anonymous20_P14s__anonymous2014s__anonymous20_autogen___1(struct __anonymous20 *___dst__P14s__anonymous20_1, struct __anonymous20 ___src__14s__anonymous20_1){
    576     struct __anonymous20 ___ret__14s__anonymous20_1;
    577536    ((void)((*___dst__P14s__anonymous20_1).__i__i_1=___src__14s__anonymous20_1.__i__i_1));
    578     ((void)___constructor__F_P14s__anonymous2014s__anonymous20_autogen___1((&___ret__14s__anonymous20_1), ___src__14s__anonymous20_1));
    579     return ((struct __anonymous20 )___ret__14s__anonymous20_1);
     537    return ((struct __anonymous20 )___src__14s__anonymous20_1);
    580538}
    581539static inline void ___constructor__F_P14s__anonymous20i_autogen___1(struct __anonymous20 *___dst__P14s__anonymous20_1, int __i__i_1){
     
    600558}
    601559static inline struct __anonymous21 ___operator_assign__F14s__anonymous21_P14s__anonymous2114s__anonymous21_autogen___1(struct __anonymous21 *___dst__P14s__anonymous21_1, struct __anonymous21 ___src__14s__anonymous21_1){
    602     struct __anonymous21 ___ret__14s__anonymous21_1;
    603560    ((void)((*___dst__P14s__anonymous21_1).__i__i_1=___src__14s__anonymous21_1.__i__i_1));
    604     ((void)___constructor__F_P14s__anonymous2114s__anonymous21_autogen___1((&___ret__14s__anonymous21_1), ___src__14s__anonymous21_1));
    605     return ((struct __anonymous21 )___ret__14s__anonymous21_1);
     561    return ((struct __anonymous21 )___src__14s__anonymous21_1);
    606562}
    607563static inline void ___constructor__F_P14s__anonymous21i_autogen___1(struct __anonymous21 *___dst__P14s__anonymous21_1, int __i__i_1){
     
    626582}
    627583static inline struct __anonymous22 ___operator_assign__F14s__anonymous22_P14s__anonymous2214s__anonymous22_autogen___1(struct __anonymous22 *___dst__P14s__anonymous22_1, struct __anonymous22 ___src__14s__anonymous22_1){
    628     struct __anonymous22 ___ret__14s__anonymous22_1;
    629584    ((void)((*___dst__P14s__anonymous22_1).__i__i_1=___src__14s__anonymous22_1.__i__i_1));
    630     ((void)___constructor__F_P14s__anonymous2214s__anonymous22_autogen___1((&___ret__14s__anonymous22_1), ___src__14s__anonymous22_1));
    631     return ((struct __anonymous22 )___ret__14s__anonymous22_1);
     585    return ((struct __anonymous22 )___src__14s__anonymous22_1);
    632586}
    633587static inline void ___constructor__F_P14s__anonymous22i_autogen___1(struct __anonymous22 *___dst__P14s__anonymous22_1, int __i__i_1){
     
    652606}
    653607static inline struct __anonymous23 ___operator_assign__F14s__anonymous23_P14s__anonymous2314s__anonymous23_autogen___1(struct __anonymous23 *___dst__P14s__anonymous23_1, struct __anonymous23 ___src__14s__anonymous23_1){
    654     struct __anonymous23 ___ret__14s__anonymous23_1;
    655608    ((void)((*___dst__P14s__anonymous23_1).__i__i_1=___src__14s__anonymous23_1.__i__i_1));
    656     ((void)___constructor__F_P14s__anonymous2314s__anonymous23_autogen___1((&___ret__14s__anonymous23_1), ___src__14s__anonymous23_1));
    657     return ((struct __anonymous23 )___ret__14s__anonymous23_1);
     609    return ((struct __anonymous23 )___src__14s__anonymous23_1);
    658610}
    659611static inline void ___constructor__F_P14s__anonymous23i_autogen___1(struct __anonymous23 *___dst__P14s__anonymous23_1, int __i__i_1){
  • src/tests/.expect/32/extension.txt

    r3bd1eb4 rdbfb35d  
    3333}
    3434static inline struct S ___operator_assign__F2sS_P2sS2sS_autogen___1(struct S *___dst__P2sS_1, struct S ___src__2sS_1){
    35     struct S ___ret__2sS_1;
    3635    ((void)((*___dst__P2sS_1).__a__i_1=___src__2sS_1.__a__i_1));
    3736    ((void)((*___dst__P2sS_1).__b__i_1=___src__2sS_1.__b__i_1));
    3837    ((void)((*___dst__P2sS_1).__c__i_1=___src__2sS_1.__c__i_1));
    39     ((void)___constructor__F_P2sS2sS_autogen___1((&___ret__2sS_1), ___src__2sS_1));
    40     return ((struct S )___ret__2sS_1);
     38    return ((struct S )___src__2sS_1);
    4139}
    4240static inline void ___constructor__F_P2sSi_autogen___1(struct S *___dst__P2sS_1, int __a__i_1){
     
    6866}
    6967static inline union U ___operator_assign__F2uU_P2uU2uU_autogen___1(union U *___dst__P2uU_1, union U ___src__2uU_1){
    70     union U ___ret__2uU_1;
    7168    ((void)__builtin_memcpy(((void *)___dst__P2uU_1), ((const void *)(&___src__2uU_1)), sizeof(union U )));
    72     ((void)___constructor__F_P2uU2uU_autogen___1((&___ret__2uU_1), ___src__2uU_1));
    73     return ((union U )___ret__2uU_1);
     69    return ((union U )___src__2uU_1);
    7470}
    7571static inline void ___constructor__F_P2uUi_autogen___1(union U *___dst__P2uU_1, int __src__i_1){
  • src/tests/.expect/32/gccExtensions.txt

    r3bd1eb4 rdbfb35d  
    5959    }
    6060    inline struct S ___operator_assign__F2sS_P2sS2sS_autogen___2(struct S *___dst__P2sS_2, struct S ___src__2sS_2){
    61         struct S ___ret__2sS_2;
    6261        ((void)((*___dst__P2sS_2).__a__i_2=___src__2sS_2.__a__i_2));
    6362        ((void)((*___dst__P2sS_2).__b__i_2=___src__2sS_2.__b__i_2));
    6463        ((void)((*___dst__P2sS_2).__c__i_2=___src__2sS_2.__c__i_2));
    65         ((void)___constructor__F_P2sS2sS_autogen___2((&___ret__2sS_2), ___src__2sS_2));
    66         return ((struct S )___ret__2sS_2);
     64        return ((struct S )___src__2sS_2);
    6765    }
    6866    inline void ___constructor__F_P2sSi_autogen___2(struct S *___dst__P2sS_2, int __a__i_2){
     
    111109    }
    112110    inline struct s2 ___operator_assign__F3ss2_P3ss23ss2_autogen___2(struct s2 *___dst__P3ss2_2, struct s2 ___src__3ss2_2){
    113         struct s2 ___ret__3ss2_2;
    114111        ((void)((*___dst__P3ss2_2).__i__i_2=___src__3ss2_2.__i__i_2));
    115         ((void)___constructor__F_P3ss23ss2_autogen___2((&___ret__3ss2_2), ___src__3ss2_2));
    116         return ((struct s2 )___ret__3ss2_2);
     112        return ((struct s2 )___src__3ss2_2);
    117113    }
    118114    inline void ___constructor__F_P3ss2i_autogen___2(struct s2 *___dst__P3ss2_2, int __i__i_2){
     
    132128    }
    133129    inline struct s3 ___operator_assign__F3ss3_P3ss33ss3_autogen___2(struct s3 *___dst__P3ss3_2, struct s3 ___src__3ss3_2){
    134         struct s3 ___ret__3ss3_2;
    135130        ((void)((*___dst__P3ss3_2).__i__i_2=___src__3ss3_2.__i__i_2));
    136         ((void)___constructor__F_P3ss33ss3_autogen___2((&___ret__3ss3_2), ___src__3ss3_2));
    137         return ((struct s3 )___ret__3ss3_2);
     131        return ((struct s3 )___src__3ss3_2);
    138132    }
    139133    inline void ___constructor__F_P3ss3i_autogen___2(struct s3 *___dst__P3ss3_2, int __i__i_2){
     
    155149    }
    156150    inline struct s4 ___operator_assign__F3ss4_P3ss43ss4_autogen___2(struct s4 *___dst__P3ss4_2, struct s4 ___src__3ss4_2){
    157         struct s4 ___ret__3ss4_2;
    158151        ((void)((*___dst__P3ss4_2).__i__i_2=___src__3ss4_2.__i__i_2));
    159         ((void)___constructor__F_P3ss43ss4_autogen___2((&___ret__3ss4_2), ___src__3ss4_2));
    160         return ((struct s4 )___ret__3ss4_2);
     152        return ((struct s4 )___src__3ss4_2);
    161153    }
    162154    inline void ___constructor__F_P3ss4i_autogen___2(struct s4 *___dst__P3ss4_2, int __i__i_2){
  • src/tests/.expect/64/KRfunctions.txt

    r3bd1eb4 rdbfb35d  
    3131}
    3232static inline struct S ___operator_assign__F2sS_P2sS2sS_autogen___1(struct S *___dst__P2sS_1, struct S ___src__2sS_1){
    33     struct S ___ret__2sS_1;
    3433    ((void)((*___dst__P2sS_1).__i__i_1=___src__2sS_1.__i__i_1));
    35     ((void)___constructor__F_P2sS2sS_autogen___1((&___ret__2sS_1), ___src__2sS_1));
    36     return ((struct S )___ret__2sS_1);
     34    return ((struct S )___src__2sS_1);
    3735}
    3836static inline void ___constructor__F_P2sSi_autogen___1(struct S *___dst__P2sS_1, int __i__i_1){
  • src/tests/.expect/64/attributes.txt

    r3bd1eb4 rdbfb35d  
    2222}
    2323static inline struct __anonymous0 ___operator_assign__F13s__anonymous0_P13s__anonymous013s__anonymous0_autogen___1(struct __anonymous0 *___dst__P13s__anonymous0_1, struct __anonymous0 ___src__13s__anonymous0_1){
    24     struct __anonymous0 ___ret__13s__anonymous0_1;
    25     ((void)___constructor__F_P13s__anonymous013s__anonymous0_autogen___1((&___ret__13s__anonymous0_1), ___src__13s__anonymous0_1));
    26     return ((struct __anonymous0 )___ret__13s__anonymous0_1);
     24    return ((struct __anonymous0 )___src__13s__anonymous0_1);
    2725}
    2826__attribute__ ((unused)) struct Agn1;
     
    4038}
    4139static inline struct Agn2 ___operator_assign__F5sAgn2_P5sAgn25sAgn2_autogen___1(struct Agn2 *___dst__P5sAgn2_1, struct Agn2 ___src__5sAgn2_1){
    42     struct Agn2 ___ret__5sAgn2_1;
    43     ((void)___constructor__F_P5sAgn25sAgn2_autogen___1((&___ret__5sAgn2_1), ___src__5sAgn2_1));
    44     return ((struct Agn2 )___ret__5sAgn2_1);
     40    return ((struct Agn2 )___src__5sAgn2_1);
    4541}
    4642enum __attribute__ ((unused)) __anonymous1 {
     
    10399}
    104100static inline struct Fdl ___operator_assign__F4sFdl_P4sFdl4sFdl_autogen___1(struct Fdl *___dst__P4sFdl_1, struct Fdl ___src__4sFdl_1){
    105     struct Fdl ___ret__4sFdl_1;
    106101    ((void)((*___dst__P4sFdl_1).__f1__i_1=___src__4sFdl_1.__f1__i_1));
    107102    ((void)((*___dst__P4sFdl_1).__f2__i_1=___src__4sFdl_1.__f2__i_1));
     
    113108    ((void)((*___dst__P4sFdl_1).__f8__i_1=___src__4sFdl_1.__f8__i_1));
    114109    ((void)((*___dst__P4sFdl_1).__f9__Pi_1=___src__4sFdl_1.__f9__Pi_1));
    115     ((void)___constructor__F_P4sFdl4sFdl_autogen___1((&___ret__4sFdl_1), ___src__4sFdl_1));
    116     return ((struct Fdl )___ret__4sFdl_1);
     110    return ((struct Fdl )___src__4sFdl_1);
    117111}
    118112static inline void ___constructor__F_P4sFdli_autogen___1(struct Fdl *___dst__P4sFdl_1, int __f1__i_1){
     
    298292    }
    299293    inline struct __anonymous4 ___operator_assign__F13s__anonymous4_P13s__anonymous413s__anonymous4_autogen___2(struct __anonymous4 *___dst__P13s__anonymous4_2, struct __anonymous4 ___src__13s__anonymous4_2){
    300         struct __anonymous4 ___ret__13s__anonymous4_2;
    301294        ((void)((*___dst__P13s__anonymous4_2).__i__i_2=___src__13s__anonymous4_2.__i__i_2));
    302         ((void)___constructor__F_P13s__anonymous413s__anonymous4_autogen___2((&___ret__13s__anonymous4_2), ___src__13s__anonymous4_2));
    303         return ((struct __anonymous4 )___ret__13s__anonymous4_2);
     295        return ((struct __anonymous4 )___src__13s__anonymous4_2);
    304296    }
    305297    inline void ___constructor__F_P13s__anonymous4i_autogen___2(struct __anonymous4 *___dst__P13s__anonymous4_2, int __i__i_2){
     
    318310    }
    319311    inline enum __anonymous5 ___operator_assign__F13e__anonymous5_P13e__anonymous513e__anonymous5_intrinsic___2(enum __anonymous5 *___dst__P13e__anonymous5_2, enum __anonymous5 ___src__13e__anonymous5_2){
    320         enum __anonymous5 ___ret__13e__anonymous5_2;
    321         ((void)(___ret__13e__anonymous5_2=((*___dst__P13e__anonymous5_2)=___src__13e__anonymous5_2)) /* ?{} */);
    322         return ((enum __anonymous5 )___ret__13e__anonymous5_2);
     312        return ((enum __anonymous5 )((*___dst__P13e__anonymous5_2)=___src__13e__anonymous5_2));
    323313    }
    324314    ((void)sizeof(enum __anonymous5 ));
     
    348338}
    349339static inline struct Vad ___operator_assign__F4sVad_P4sVad4sVad_autogen___1(struct Vad *___dst__P4sVad_1, struct Vad ___src__4sVad_1){
    350     struct Vad ___ret__4sVad_1;
    351     ((void)___constructor__F_P4sVad4sVad_autogen___1((&___ret__4sVad_1), ___src__4sVad_1));
    352     return ((struct Vad )___ret__4sVad_1);
    353 }
     340    return ((struct Vad )___src__4sVad_1);
     341}
  • src/tests/.expect/64/declarationSpecifier.txt

    r3bd1eb4 rdbfb35d  
    3030}
    3131static inline struct __anonymous0 ___operator_assign__F13s__anonymous0_P13s__anonymous013s__anonymous0_autogen___1(struct __anonymous0 *___dst__P13s__anonymous0_1, struct __anonymous0 ___src__13s__anonymous0_1){
    32     struct __anonymous0 ___ret__13s__anonymous0_1;
    3332    ((void)((*___dst__P13s__anonymous0_1).__i__i_1=___src__13s__anonymous0_1.__i__i_1));
    34     ((void)___constructor__F_P13s__anonymous013s__anonymous0_autogen___1((&___ret__13s__anonymous0_1), ___src__13s__anonymous0_1));
    35     return ((struct __anonymous0 )___ret__13s__anonymous0_1);
     33    return ((struct __anonymous0 )___src__13s__anonymous0_1);
    3634}
    3735static inline void ___constructor__F_P13s__anonymous0i_autogen___1(struct __anonymous0 *___dst__P13s__anonymous0_1, int __i__i_1){
     
    5654}
    5755static inline struct __anonymous1 ___operator_assign__F13s__anonymous1_P13s__anonymous113s__anonymous1_autogen___1(struct __anonymous1 *___dst__P13s__anonymous1_1, struct __anonymous1 ___src__13s__anonymous1_1){
    58     struct __anonymous1 ___ret__13s__anonymous1_1;
    5956    ((void)((*___dst__P13s__anonymous1_1).__i__i_1=___src__13s__anonymous1_1.__i__i_1));
    60     ((void)___constructor__F_P13s__anonymous113s__anonymous1_autogen___1((&___ret__13s__anonymous1_1), ___src__13s__anonymous1_1));
    61     return ((struct __anonymous1 )___ret__13s__anonymous1_1);
     57    return ((struct __anonymous1 )___src__13s__anonymous1_1);
    6258}
    6359static inline void ___constructor__F_P13s__anonymous1i_autogen___1(struct __anonymous1 *___dst__P13s__anonymous1_1, int __i__i_1){
     
    8278}
    8379static inline struct __anonymous2 ___operator_assign__F13s__anonymous2_P13s__anonymous213s__anonymous2_autogen___1(struct __anonymous2 *___dst__P13s__anonymous2_1, struct __anonymous2 ___src__13s__anonymous2_1){
    84     struct __anonymous2 ___ret__13s__anonymous2_1;
    8580    ((void)((*___dst__P13s__anonymous2_1).__i__i_1=___src__13s__anonymous2_1.__i__i_1));
    86     ((void)___constructor__F_P13s__anonymous213s__anonymous2_autogen___1((&___ret__13s__anonymous2_1), ___src__13s__anonymous2_1));
    87     return ((struct __anonymous2 )___ret__13s__anonymous2_1);
     81    return ((struct __anonymous2 )___src__13s__anonymous2_1);
    8882}
    8983static inline void ___constructor__F_P13s__anonymous2i_autogen___1(struct __anonymous2 *___dst__P13s__anonymous2_1, int __i__i_1){
     
    108102}
    109103static inline struct __anonymous3 ___operator_assign__F13s__anonymous3_P13s__anonymous313s__anonymous3_autogen___1(struct __anonymous3 *___dst__P13s__anonymous3_1, struct __anonymous3 ___src__13s__anonymous3_1){
    110     struct __anonymous3 ___ret__13s__anonymous3_1;
    111104    ((void)((*___dst__P13s__anonymous3_1).__i__i_1=___src__13s__anonymous3_1.__i__i_1));
    112     ((void)___constructor__F_P13s__anonymous313s__anonymous3_autogen___1((&___ret__13s__anonymous3_1), ___src__13s__anonymous3_1));
    113     return ((struct __anonymous3 )___ret__13s__anonymous3_1);
     105    return ((struct __anonymous3 )___src__13s__anonymous3_1);
    114106}
    115107static inline void ___constructor__F_P13s__anonymous3i_autogen___1(struct __anonymous3 *___dst__P13s__anonymous3_1, int __i__i_1){
     
    134126}
    135127static inline struct __anonymous4 ___operator_assign__F13s__anonymous4_P13s__anonymous413s__anonymous4_autogen___1(struct __anonymous4 *___dst__P13s__anonymous4_1, struct __anonymous4 ___src__13s__anonymous4_1){
    136     struct __anonymous4 ___ret__13s__anonymous4_1;
    137128    ((void)((*___dst__P13s__anonymous4_1).__i__i_1=___src__13s__anonymous4_1.__i__i_1));
    138     ((void)___constructor__F_P13s__anonymous413s__anonymous4_autogen___1((&___ret__13s__anonymous4_1), ___src__13s__anonymous4_1));
    139     return ((struct __anonymous4 )___ret__13s__anonymous4_1);
     129    return ((struct __anonymous4 )___src__13s__anonymous4_1);
    140130}
    141131static inline void ___constructor__F_P13s__anonymous4i_autogen___1(struct __anonymous4 *___dst__P13s__anonymous4_1, int __i__i_1){
     
    160150}
    161151static inline struct __anonymous5 ___operator_assign__F13s__anonymous5_P13s__anonymous513s__anonymous5_autogen___1(struct __anonymous5 *___dst__P13s__anonymous5_1, struct __anonymous5 ___src__13s__anonymous5_1){
    162     struct __anonymous5 ___ret__13s__anonymous5_1;
    163152    ((void)((*___dst__P13s__anonymous5_1).__i__i_1=___src__13s__anonymous5_1.__i__i_1));
    164     ((void)___constructor__F_P13s__anonymous513s__anonymous5_autogen___1((&___ret__13s__anonymous5_1), ___src__13s__anonymous5_1));
    165     return ((struct __anonymous5 )___ret__13s__anonymous5_1);
     153    return ((struct __anonymous5 )___src__13s__anonymous5_1);
    166154}
    167155static inline void ___constructor__F_P13s__anonymous5i_autogen___1(struct __anonymous5 *___dst__P13s__anonymous5_1, int __i__i_1){
     
    186174}
    187175static inline struct __anonymous6 ___operator_assign__F13s__anonymous6_P13s__anonymous613s__anonymous6_autogen___1(struct __anonymous6 *___dst__P13s__anonymous6_1, struct __anonymous6 ___src__13s__anonymous6_1){
    188     struct __anonymous6 ___ret__13s__anonymous6_1;
    189176    ((void)((*___dst__P13s__anonymous6_1).__i__i_1=___src__13s__anonymous6_1.__i__i_1));
    190     ((void)___constructor__F_P13s__anonymous613s__anonymous6_autogen___1((&___ret__13s__anonymous6_1), ___src__13s__anonymous6_1));
    191     return ((struct __anonymous6 )___ret__13s__anonymous6_1);
     177    return ((struct __anonymous6 )___src__13s__anonymous6_1);
    192178}
    193179static inline void ___constructor__F_P13s__anonymous6i_autogen___1(struct __anonymous6 *___dst__P13s__anonymous6_1, int __i__i_1){
     
    212198}
    213199static inline struct __anonymous7 ___operator_assign__F13s__anonymous7_P13s__anonymous713s__anonymous7_autogen___1(struct __anonymous7 *___dst__P13s__anonymous7_1, struct __anonymous7 ___src__13s__anonymous7_1){
    214     struct __anonymous7 ___ret__13s__anonymous7_1;
    215200    ((void)((*___dst__P13s__anonymous7_1).__i__i_1=___src__13s__anonymous7_1.__i__i_1));
    216     ((void)___constructor__F_P13s__anonymous713s__anonymous7_autogen___1((&___ret__13s__anonymous7_1), ___src__13s__anonymous7_1));
    217     return ((struct __anonymous7 )___ret__13s__anonymous7_1);
     201    return ((struct __anonymous7 )___src__13s__anonymous7_1);
    218202}
    219203static inline void ___constructor__F_P13s__anonymous7i_autogen___1(struct __anonymous7 *___dst__P13s__anonymous7_1, int __i__i_1){
     
    246230}
    247231static inline struct __anonymous8 ___operator_assign__F13s__anonymous8_P13s__anonymous813s__anonymous8_autogen___1(struct __anonymous8 *___dst__P13s__anonymous8_1, struct __anonymous8 ___src__13s__anonymous8_1){
    248     struct __anonymous8 ___ret__13s__anonymous8_1;
    249232    ((void)((*___dst__P13s__anonymous8_1).__i__s_1=___src__13s__anonymous8_1.__i__s_1));
    250     ((void)___constructor__F_P13s__anonymous813s__anonymous8_autogen___1((&___ret__13s__anonymous8_1), ___src__13s__anonymous8_1));
    251     return ((struct __anonymous8 )___ret__13s__anonymous8_1);
     233    return ((struct __anonymous8 )___src__13s__anonymous8_1);
    252234}
    253235static inline void ___constructor__F_P13s__anonymous8s_autogen___1(struct __anonymous8 *___dst__P13s__anonymous8_1, short __i__s_1){
     
    272254}
    273255static inline struct __anonymous9 ___operator_assign__F13s__anonymous9_P13s__anonymous913s__anonymous9_autogen___1(struct __anonymous9 *___dst__P13s__anonymous9_1, struct __anonymous9 ___src__13s__anonymous9_1){
    274     struct __anonymous9 ___ret__13s__anonymous9_1;
    275256    ((void)((*___dst__P13s__anonymous9_1).__i__s_1=___src__13s__anonymous9_1.__i__s_1));
    276     ((void)___constructor__F_P13s__anonymous913s__anonymous9_autogen___1((&___ret__13s__anonymous9_1), ___src__13s__anonymous9_1));
    277     return ((struct __anonymous9 )___ret__13s__anonymous9_1);
     257    return ((struct __anonymous9 )___src__13s__anonymous9_1);
    278258}
    279259static inline void ___constructor__F_P13s__anonymous9s_autogen___1(struct __anonymous9 *___dst__P13s__anonymous9_1, short __i__s_1){
     
    298278}
    299279static inline struct __anonymous10 ___operator_assign__F14s__anonymous10_P14s__anonymous1014s__anonymous10_autogen___1(struct __anonymous10 *___dst__P14s__anonymous10_1, struct __anonymous10 ___src__14s__anonymous10_1){
    300     struct __anonymous10 ___ret__14s__anonymous10_1;
    301280    ((void)((*___dst__P14s__anonymous10_1).__i__s_1=___src__14s__anonymous10_1.__i__s_1));
    302     ((void)___constructor__F_P14s__anonymous1014s__anonymous10_autogen___1((&___ret__14s__anonymous10_1), ___src__14s__anonymous10_1));
    303     return ((struct __anonymous10 )___ret__14s__anonymous10_1);
     281    return ((struct __anonymous10 )___src__14s__anonymous10_1);
    304282}
    305283static inline void ___constructor__F_P14s__anonymous10s_autogen___1(struct __anonymous10 *___dst__P14s__anonymous10_1, short __i__s_1){
     
    324302}
    325303static inline struct __anonymous11 ___operator_assign__F14s__anonymous11_P14s__anonymous1114s__anonymous11_autogen___1(struct __anonymous11 *___dst__P14s__anonymous11_1, struct __anonymous11 ___src__14s__anonymous11_1){
    326     struct __anonymous11 ___ret__14s__anonymous11_1;
    327304    ((void)((*___dst__P14s__anonymous11_1).__i__s_1=___src__14s__anonymous11_1.__i__s_1));
    328     ((void)___constructor__F_P14s__anonymous1114s__anonymous11_autogen___1((&___ret__14s__anonymous11_1), ___src__14s__anonymous11_1));
    329     return ((struct __anonymous11 )___ret__14s__anonymous11_1);
     305    return ((struct __anonymous11 )___src__14s__anonymous11_1);
    330306}
    331307static inline void ___constructor__F_P14s__anonymous11s_autogen___1(struct __anonymous11 *___dst__P14s__anonymous11_1, short __i__s_1){
     
    350326}
    351327static inline struct __anonymous12 ___operator_assign__F14s__anonymous12_P14s__anonymous1214s__anonymous12_autogen___1(struct __anonymous12 *___dst__P14s__anonymous12_1, struct __anonymous12 ___src__14s__anonymous12_1){
    352     struct __anonymous12 ___ret__14s__anonymous12_1;
    353328    ((void)((*___dst__P14s__anonymous12_1).__i__s_1=___src__14s__anonymous12_1.__i__s_1));
    354     ((void)___constructor__F_P14s__anonymous1214s__anonymous12_autogen___1((&___ret__14s__anonymous12_1), ___src__14s__anonymous12_1));
    355     return ((struct __anonymous12 )___ret__14s__anonymous12_1);
     329    return ((struct __anonymous12 )___src__14s__anonymous12_1);
    356330}
    357331static inline void ___constructor__F_P14s__anonymous12s_autogen___1(struct __anonymous12 *___dst__P14s__anonymous12_1, short __i__s_1){
     
    376350}
    377351static inline struct __anonymous13 ___operator_assign__F14s__anonymous13_P14s__anonymous1314s__anonymous13_autogen___1(struct __anonymous13 *___dst__P14s__anonymous13_1, struct __anonymous13 ___src__14s__anonymous13_1){
    378     struct __anonymous13 ___ret__14s__anonymous13_1;
    379352    ((void)((*___dst__P14s__anonymous13_1).__i__s_1=___src__14s__anonymous13_1.__i__s_1));
    380     ((void)___constructor__F_P14s__anonymous1314s__anonymous13_autogen___1((&___ret__14s__anonymous13_1), ___src__14s__anonymous13_1));
    381     return ((struct __anonymous13 )___ret__14s__anonymous13_1);
     353    return ((struct __anonymous13 )___src__14s__anonymous13_1);
    382354}
    383355static inline void ___constructor__F_P14s__anonymous13s_autogen___1(struct __anonymous13 *___dst__P14s__anonymous13_1, short __i__s_1){
     
    402374}
    403375static inline struct __anonymous14 ___operator_assign__F14s__anonymous14_P14s__anonymous1414s__anonymous14_autogen___1(struct __anonymous14 *___dst__P14s__anonymous14_1, struct __anonymous14 ___src__14s__anonymous14_1){
    404     struct __anonymous14 ___ret__14s__anonymous14_1;
    405376    ((void)((*___dst__P14s__anonymous14_1).__i__s_1=___src__14s__anonymous14_1.__i__s_1));
    406     ((void)___constructor__F_P14s__anonymous1414s__anonymous14_autogen___1((&___ret__14s__anonymous14_1), ___src__14s__anonymous14_1));
    407     return ((struct __anonymous14 )___ret__14s__anonymous14_1);
     377    return ((struct __anonymous14 )___src__14s__anonymous14_1);
    408378}
    409379static inline void ___constructor__F_P14s__anonymous14s_autogen___1(struct __anonymous14 *___dst__P14s__anonymous14_1, short __i__s_1){
     
    428398}
    429399static inline struct __anonymous15 ___operator_assign__F14s__anonymous15_P14s__anonymous1514s__anonymous15_autogen___1(struct __anonymous15 *___dst__P14s__anonymous15_1, struct __anonymous15 ___src__14s__anonymous15_1){
    430     struct __anonymous15 ___ret__14s__anonymous15_1;
    431400    ((void)((*___dst__P14s__anonymous15_1).__i__s_1=___src__14s__anonymous15_1.__i__s_1));
    432     ((void)___constructor__F_P14s__anonymous1514s__anonymous15_autogen___1((&___ret__14s__anonymous15_1), ___src__14s__anonymous15_1));
    433     return ((struct __anonymous15 )___ret__14s__anonymous15_1);
     401    return ((struct __anonymous15 )___src__14s__anonymous15_1);
    434402}
    435403static inline void ___constructor__F_P14s__anonymous15s_autogen___1(struct __anonymous15 *___dst__P14s__anonymous15_1, short __i__s_1){
     
    470438}
    471439static inline struct __anonymous16 ___operator_assign__F14s__anonymous16_P14s__anonymous1614s__anonymous16_autogen___1(struct __anonymous16 *___dst__P14s__anonymous16_1, struct __anonymous16 ___src__14s__anonymous16_1){
    472     struct __anonymous16 ___ret__14s__anonymous16_1;
    473440    ((void)((*___dst__P14s__anonymous16_1).__i__i_1=___src__14s__anonymous16_1.__i__i_1));
    474     ((void)___constructor__F_P14s__anonymous1614s__anonymous16_autogen___1((&___ret__14s__anonymous16_1), ___src__14s__anonymous16_1));
    475     return ((struct __anonymous16 )___ret__14s__anonymous16_1);
     441    return ((struct __anonymous16 )___src__14s__anonymous16_1);
    476442}
    477443static inline void ___constructor__F_P14s__anonymous16i_autogen___1(struct __anonymous16 *___dst__P14s__anonymous16_1, int __i__i_1){
     
    496462}
    497463static inline struct __anonymous17 ___operator_assign__F14s__anonymous17_P14s__anonymous1714s__anonymous17_autogen___1(struct __anonymous17 *___dst__P14s__anonymous17_1, struct __anonymous17 ___src__14s__anonymous17_1){
    498     struct __anonymous17 ___ret__14s__anonymous17_1;
    499464    ((void)((*___dst__P14s__anonymous17_1).__i__i_1=___src__14s__anonymous17_1.__i__i_1));
    500     ((void)___constructor__F_P14s__anonymous1714s__anonymous17_autogen___1((&___ret__14s__anonymous17_1), ___src__14s__anonymous17_1));
    501     return ((struct __anonymous17 )___ret__14s__anonymous17_1);
     465    return ((struct __anonymous17 )___src__14s__anonymous17_1);
    502466}
    503467static inline void ___constructor__F_P14s__anonymous17i_autogen___1(struct __anonymous17 *___dst__P14s__anonymous17_1, int __i__i_1){
     
    522486}
    523487static inline struct __anonymous18 ___operator_assign__F14s__anonymous18_P14s__anonymous1814s__anonymous18_autogen___1(struct __anonymous18 *___dst__P14s__anonymous18_1, struct __anonymous18 ___src__14s__anonymous18_1){
    524     struct __anonymous18 ___ret__14s__anonymous18_1;
    525488    ((void)((*___dst__P14s__anonymous18_1).__i__i_1=___src__14s__anonymous18_1.__i__i_1));
    526     ((void)___constructor__F_P14s__anonymous1814s__anonymous18_autogen___1((&___ret__14s__anonymous18_1), ___src__14s__anonymous18_1));
    527     return ((struct __anonymous18 )___ret__14s__anonymous18_1);
     489    return ((struct __anonymous18 )___src__14s__anonymous18_1);
    528490}
    529491static inline void ___constructor__F_P14s__anonymous18i_autogen___1(struct __anonymous18 *___dst__P14s__anonymous18_1, int __i__i_1){
     
    548510}
    549511static inline struct __anonymous19 ___operator_assign__F14s__anonymous19_P14s__anonymous1914s__anonymous19_autogen___1(struct __anonymous19 *___dst__P14s__anonymous19_1, struct __anonymous19 ___src__14s__anonymous19_1){
    550     struct __anonymous19 ___ret__14s__anonymous19_1;
    551512    ((void)((*___dst__P14s__anonymous19_1).__i__i_1=___src__14s__anonymous19_1.__i__i_1));
    552     ((void)___constructor__F_P14s__anonymous1914s__anonymous19_autogen___1((&___ret__14s__anonymous19_1), ___src__14s__anonymous19_1));
    553     return ((struct __anonymous19 )___ret__14s__anonymous19_1);
     513    return ((struct __anonymous19 )___src__14s__anonymous19_1);
    554514}
    555515static inline void ___constructor__F_P14s__anonymous19i_autogen___1(struct __anonymous19 *___dst__P14s__anonymous19_1, int __i__i_1){
     
    574534}
    575535static inline struct __anonymous20 ___operator_assign__F14s__anonymous20_P14s__anonymous2014s__anonymous20_autogen___1(struct __anonymous20 *___dst__P14s__anonymous20_1, struct __anonymous20 ___src__14s__anonymous20_1){
    576     struct __anonymous20 ___ret__14s__anonymous20_1;
    577536    ((void)((*___dst__P14s__anonymous20_1).__i__i_1=___src__14s__anonymous20_1.__i__i_1));
    578     ((void)___constructor__F_P14s__anonymous2014s__anonymous20_autogen___1((&___ret__14s__anonymous20_1), ___src__14s__anonymous20_1));
    579     return ((struct __anonymous20 )___ret__14s__anonymous20_1);
     537    return ((struct __anonymous20 )___src__14s__anonymous20_1);
    580538}
    581539static inline void ___constructor__F_P14s__anonymous20i_autogen___1(struct __anonymous20 *___dst__P14s__anonymous20_1, int __i__i_1){
     
    600558}
    601559static inline struct __anonymous21 ___operator_assign__F14s__anonymous21_P14s__anonymous2114s__anonymous21_autogen___1(struct __anonymous21 *___dst__P14s__anonymous21_1, struct __anonymous21 ___src__14s__anonymous21_1){
    602     struct __anonymous21 ___ret__14s__anonymous21_1;
    603560    ((void)((*___dst__P14s__anonymous21_1).__i__i_1=___src__14s__anonymous21_1.__i__i_1));
    604     ((void)___constructor__F_P14s__anonymous2114s__anonymous21_autogen___1((&___ret__14s__anonymous21_1), ___src__14s__anonymous21_1));
    605     return ((struct __anonymous21 )___ret__14s__anonymous21_1);
     561    return ((struct __anonymous21 )___src__14s__anonymous21_1);
    606562}
    607563static inline void ___constructor__F_P14s__anonymous21i_autogen___1(struct __anonymous21 *___dst__P14s__anonymous21_1, int __i__i_1){
     
    626582}
    627583static inline struct __anonymous22 ___operator_assign__F14s__anonymous22_P14s__anonymous2214s__anonymous22_autogen___1(struct __anonymous22 *___dst__P14s__anonymous22_1, struct __anonymous22 ___src__14s__anonymous22_1){
    628     struct __anonymous22 ___ret__14s__anonymous22_1;
    629584    ((void)((*___dst__P14s__anonymous22_1).__i__i_1=___src__14s__anonymous22_1.__i__i_1));
    630     ((void)___constructor__F_P14s__anonymous2214s__anonymous22_autogen___1((&___ret__14s__anonymous22_1), ___src__14s__anonymous22_1));
    631     return ((struct __anonymous22 )___ret__14s__anonymous22_1);
     585    return ((struct __anonymous22 )___src__14s__anonymous22_1);
    632586}
    633587static inline void ___constructor__F_P14s__anonymous22i_autogen___1(struct __anonymous22 *___dst__P14s__anonymous22_1, int __i__i_1){
     
    652606}
    653607static inline struct __anonymous23 ___operator_assign__F14s__anonymous23_P14s__anonymous2314s__anonymous23_autogen___1(struct __anonymous23 *___dst__P14s__anonymous23_1, struct __anonymous23 ___src__14s__anonymous23_1){
    654     struct __anonymous23 ___ret__14s__anonymous23_1;
    655608    ((void)((*___dst__P14s__anonymous23_1).__i__i_1=___src__14s__anonymous23_1.__i__i_1));
    656     ((void)___constructor__F_P14s__anonymous2314s__anonymous23_autogen___1((&___ret__14s__anonymous23_1), ___src__14s__anonymous23_1));
    657     return ((struct __anonymous23 )___ret__14s__anonymous23_1);
     609    return ((struct __anonymous23 )___src__14s__anonymous23_1);
    658610}
    659611static inline void ___constructor__F_P14s__anonymous23i_autogen___1(struct __anonymous23 *___dst__P14s__anonymous23_1, int __i__i_1){
  • src/tests/.expect/64/extension.txt

    r3bd1eb4 rdbfb35d  
    3333}
    3434static inline struct S ___operator_assign__F2sS_P2sS2sS_autogen___1(struct S *___dst__P2sS_1, struct S ___src__2sS_1){
    35     struct S ___ret__2sS_1;
    3635    ((void)((*___dst__P2sS_1).__a__i_1=___src__2sS_1.__a__i_1));
    3736    ((void)((*___dst__P2sS_1).__b__i_1=___src__2sS_1.__b__i_1));
    3837    ((void)((*___dst__P2sS_1).__c__i_1=___src__2sS_1.__c__i_1));
    39     ((void)___constructor__F_P2sS2sS_autogen___1((&___ret__2sS_1), ___src__2sS_1));
    40     return ((struct S )___ret__2sS_1);
     38    return ((struct S )___src__2sS_1);
    4139}
    4240static inline void ___constructor__F_P2sSi_autogen___1(struct S *___dst__P2sS_1, int __a__i_1){
     
    6866}
    6967static inline union U ___operator_assign__F2uU_P2uU2uU_autogen___1(union U *___dst__P2uU_1, union U ___src__2uU_1){
    70     union U ___ret__2uU_1;
    7168    ((void)__builtin_memcpy(((void *)___dst__P2uU_1), ((const void *)(&___src__2uU_1)), sizeof(union U )));
    72     ((void)___constructor__F_P2uU2uU_autogen___1((&___ret__2uU_1), ___src__2uU_1));
    73     return ((union U )___ret__2uU_1);
     69    return ((union U )___src__2uU_1);
    7470}
    7571static inline void ___constructor__F_P2uUi_autogen___1(union U *___dst__P2uU_1, int __src__i_1){
  • src/tests/.expect/64/gccExtensions.txt

    r3bd1eb4 rdbfb35d  
    5959    }
    6060    inline struct S ___operator_assign__F2sS_P2sS2sS_autogen___2(struct S *___dst__P2sS_2, struct S ___src__2sS_2){
    61         struct S ___ret__2sS_2;
    6261        ((void)((*___dst__P2sS_2).__a__i_2=___src__2sS_2.__a__i_2));
    6362        ((void)((*___dst__P2sS_2).__b__i_2=___src__2sS_2.__b__i_2));
    6463        ((void)((*___dst__P2sS_2).__c__i_2=___src__2sS_2.__c__i_2));
    65         ((void)___constructor__F_P2sS2sS_autogen___2((&___ret__2sS_2), ___src__2sS_2));
    66         return ((struct S )___ret__2sS_2);
     64        return ((struct S )___src__2sS_2);
    6765    }
    6866    inline void ___constructor__F_P2sSi_autogen___2(struct S *___dst__P2sS_2, int __a__i_2){
     
    111109    }
    112110    inline struct s2 ___operator_assign__F3ss2_P3ss23ss2_autogen___2(struct s2 *___dst__P3ss2_2, struct s2 ___src__3ss2_2){
    113         struct s2 ___ret__3ss2_2;
    114111        ((void)((*___dst__P3ss2_2).__i__i_2=___src__3ss2_2.__i__i_2));
    115         ((void)___constructor__F_P3ss23ss2_autogen___2((&___ret__3ss2_2), ___src__3ss2_2));
    116         return ((struct s2 )___ret__3ss2_2);
     112        return ((struct s2 )___src__3ss2_2);
    117113    }
    118114    inline void ___constructor__F_P3ss2i_autogen___2(struct s2 *___dst__P3ss2_2, int __i__i_2){
     
    132128    }
    133129    inline struct s3 ___operator_assign__F3ss3_P3ss33ss3_autogen___2(struct s3 *___dst__P3ss3_2, struct s3 ___src__3ss3_2){
    134         struct s3 ___ret__3ss3_2;
    135130        ((void)((*___dst__P3ss3_2).__i__i_2=___src__3ss3_2.__i__i_2));
    136         ((void)___constructor__F_P3ss33ss3_autogen___2((&___ret__3ss3_2), ___src__3ss3_2));
    137         return ((struct s3 )___ret__3ss3_2);
     131        return ((struct s3 )___src__3ss3_2);
    138132    }
    139133    inline void ___constructor__F_P3ss3i_autogen___2(struct s3 *___dst__P3ss3_2, int __i__i_2){
     
    155149    }
    156150    inline struct s4 ___operator_assign__F3ss4_P3ss43ss4_autogen___2(struct s4 *___dst__P3ss4_2, struct s4 ___src__3ss4_2){
    157         struct s4 ___ret__3ss4_2;
    158151        ((void)((*___dst__P3ss4_2).__i__i_2=___src__3ss4_2.__i__i_2));
    159         ((void)___constructor__F_P3ss43ss4_autogen___2((&___ret__3ss4_2), ___src__3ss4_2));
    160         return ((struct s4 )___ret__3ss4_2);
     152        return ((struct s4 )___src__3ss4_2);
    161153    }
    162154    inline void ___constructor__F_P3ss4i_autogen___2(struct s4 *___dst__P3ss4_2, int __i__i_2){
  • src/tests/.expect/concurrent/sched-int-wait.txt

    r3bd1eb4 rdbfb35d  
    1 Starting
    2 Done
  • src/tests/.expect/memberCtors-ERR1.txt

    r3bd1eb4 rdbfb35d  
    1 memberCtors.c:71 error: in void ?{}(B *b), field a2 used before being constructed
     1memberCtors.c:62 error: in void ?{}(B *b), field a2 used before being constructed
  • src/tests/.expect/memberCtors.txt

    r3bd1eb4 rdbfb35d  
    1616assigning int: 0 0
    1717end construct A
    18 copy constructing int: 0
    19 copy constructing int: 0
    20 begin copy construct A
    21 copy construct this->x
    22 copy constructing int: 1001
    23 assign this->y
    24 copy constructing int: 0
    25 destructing int: 0
    26 destructing int: 0
    27 end copy construct A
    28 begin ?=? A
    29 copy constructing int: 1001
    30 destructing int: 1001
    31 destructing int: 1001
    32 copy constructing int: 0
    33 destructing int: 0
    34 destructing int: 0
    35 copy constructing int: 0
    36 destructing int: 0
    37 destructing int: 0
    38 end ?=? A
    39 copy constructing int: 0
    40 copy constructing int: 0
    41 begin copy construct A
    42 copy construct this->x
    43 copy constructing int: 1001
    44 assign this->y
    45 copy constructing int: 0
    46 destructing int: 0
    47 destructing int: 0
    48 end copy construct A
    49 destructing int: 0
    50 destructing int: 0
    51 destructing int: 1001
    52 destructing int: 0
    53 destructing int: 0
    54 destructing int: 1001
    5518construct b->a1
    5619constructing int
     
    7336copy constructing int: 1000
    7437assign this->y
    75 copy constructing int: 0
    76 destructing int: 0
    77 destructing int: 0
    7838end copy construct A
    7939copy constructing int: 0
     
    8343copy constructing int: 1001
    8444assign this->y
    85 copy constructing int: 0
    86 destructing int: 0
    87 destructing int: 0
    8845end copy construct A
    8946copy constructing int: 0
     
    9350copy constructing int: 0
    9451assign this->y
    95 copy constructing int: 0
    96 destructing int: 0
    97 destructing int: 0
    9852end copy construct A
    9953End of main
     
    10660assigning int: 0 0
    10761end construct A
    108 copy constructing int: 0
    109 copy constructing int: 0
    110 begin copy construct A
    111 copy construct this->x
    112 copy constructing int: 999
    113 assign this->y
    114 copy constructing int: 0
    115 destructing int: 0
    116 destructing int: 0
    117 end copy construct A
    118 begin ?=? A
    119 copy constructing int: 999
    120 destructing int: 999
    121 destructing int: 999
    122 copy constructing int: 0
    123 destructing int: 0
    124 destructing int: 0
    125 copy constructing int: 0
    126 destructing int: 0
    127 destructing int: 0
    128 end ?=? A
    129 copy constructing int: 0
    130 copy constructing int: 0
    131 begin copy construct A
    132 copy construct this->x
    133 copy constructing int: 999
    134 assign this->y
    135 copy constructing int: 0
    136 destructing int: 0
    137 destructing int: 0
    138 end copy construct A
    139 destructing int: 0
    140 destructing int: 0
    141 destructing int: 999
    142 destructing int: 0
    143 destructing int: 0
    144 destructing int: 999
    14562destructing int: 0
    14663destructing int: 0
     
    16380assigning int: 0 0
    16481end construct A
    165 copy constructing int: 0
    166 copy constructing int: 0
    167 begin copy construct A
    168 copy construct this->x
    169 copy constructing int: 999
    170 assign this->y
    171 copy constructing int: 0
    172 destructing int: 0
    173 destructing int: 0
    174 end copy construct A
    175 begin ?=? A
    176 copy constructing int: 999
    177 destructing int: 999
    178 destructing int: 999
    179 copy constructing int: 0
    180 destructing int: 0
    181 destructing int: 0
    182 copy constructing int: 0
    183 destructing int: 0
    184 destructing int: 0
    185 end ?=? A
    186 copy constructing int: 0
    187 copy constructing int: 0
    188 begin copy construct A
    189 copy construct this->x
    190 copy constructing int: 999
    191 assign this->y
    192 copy constructing int: 0
    193 destructing int: 0
    194 destructing int: 0
    195 end copy construct A
    196 destructing int: 0
    197 destructing int: 0
    198 destructing int: 999
    199 destructing int: 0
    200 destructing int: 0
    201 destructing int: 999
    20282destructing int: 0
    20383destructing int: 0
  • src/tests/.expect/rational.txt

    r3bd1eb4 rdbfb35d  
    17173/1
    18184/3
     19conversion
     200.75
     210.142857142857143
     223.14159292035398
     233/4
     241/7
     25355/113
    1926decompose
    2027more tests
  • src/tests/Makefile.am

    r3bd1eb4 rdbfb35d  
    1111## Created On       : Sun May 31 09:08:15 2015
    1212## Last Modified By : Peter A. Buhr
    13 ## Last Modified On : Sun May 14 14:43:48 2017
    14 ## Update Count     : 42
     13## Last Modified On : Thu Feb 16 15:27:50 2017
     14## Update Count     : 41
    1515###############################################################################
    1616
    1717debug=yes
    1818
    19 quick_test=vector_test avl_test operators numericConstants expression enum array typeof cast dtor-early-exit init_once attributes
     19quick_test=vector_test avl_test operators numericConstants expression enum array typeof cast dtor-early-exit init_once
    2020
    2121if BUILD_CONCURRENCY
     
    3030# applies to both programs
    3131EXTRA_FLAGS =
    32 BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ ${EXTRA_FLAGS}
     32BUILD_FLAGS = -g -Wall -Wno-unused-function @CFA_FLAGS@ ${EXTRA_FLAGS}
    3333TEST_FLAGS = $(if $(test), 2> .err/${@}.log, )
    3434CFLAGS = ${TEST_FLAGS} ${BUILD_FLAGS}
     
    7676
    7777declarationSpecifier: declarationSpecifier.c
    78         ${CC} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
     78        ${CC} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
    7979
    8080gccExtensions : gccExtensions.c
    81         ${CC} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
     81        ${CC} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
    8282
    8383extension : extension.c
    84         ${CC} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
     84        ${CC} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
    8585
    8686attributes : attributes.c
    87         ${CC} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
     87        ${CC} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
    8888
    8989KRfunctions : KRfunctions.c
    90         ${CC} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
    91 
    92 gmp : gmp.c
    93         ${CC} ${CFLAGS} -lgmp ${<} -o ${@}
     90        ${CC} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
    9491
    9592memberCtors-ERR1: memberCtors.c
  • src/tests/Makefile.in

    r3bd1eb4 rdbfb35d  
    226226quick_test = vector_test avl_test operators numericConstants \
    227227        expression enum array typeof cast dtor-early-exit init_once \
    228         attributes $(am__append_1)
     228        $(am__append_1)
    229229@BUILD_CONCURRENCY_FALSE@concurrent = no
    230230@BUILD_CONCURRENCY_TRUE@concurrent = yes
     
    234234# applies to both programs
    235235EXTRA_FLAGS =
    236 BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ ${EXTRA_FLAGS}
     236BUILD_FLAGS = -g -Wall -Wno-unused-function @CFA_FLAGS@ ${EXTRA_FLAGS}
    237237TEST_FLAGS = $(if $(test), 2> .err/${@}.log, )
    238238fstream_test_SOURCES = fstream_test.c
     
    695695
    696696declarationSpecifier: declarationSpecifier.c
    697         ${CC} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
     697        ${CC} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
    698698
    699699gccExtensions : gccExtensions.c
    700         ${CC} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
     700        ${CC} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
    701701
    702702extension : extension.c
    703         ${CC} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
     703        ${CC} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
    704704
    705705attributes : attributes.c
    706         ${CC} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
     706        ${CC} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
    707707
    708708KRfunctions : KRfunctions.c
    709         ${CC} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
    710 
    711 gmp : gmp.c
    712         ${CC} ${CFLAGS} -lgmp ${<} -o ${@}
     709        ${CC} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
    713710
    714711memberCtors-ERR1: memberCtors.c
  • src/tests/memberCtors.c

    r3bd1eb4 rdbfb35d  
    5353} // z never constructed - will be automatically copy constructed
    5454
    55 A ?=?(A * this, A other) {
    56   printf("begin ?=? A\n");
    57   this->x = other.x;
    58   this->y = other.y;
    59   this->z = other.z;
    60   printf("end ?=? A\n");
    61   return *this;
    62 }
    63 
    6455struct B {
    6556  A a1, a2, a3;
  • src/tests/rational.c

    r3bd1eb4 rdbfb35d  
    1010// Created On       : Mon Mar 28 08:43:12 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun May 14 18:10:28 2017
    13 // Update Count     : 57
     12// Last Modified On : Tue May  2 22:11:05 2017
     13// Update Count     : 41
    1414//
    1515
     16#include <limits>
    1617#include <rational>
    17 #include <limits>
    18 #include <stdlib>
    1918#include <fstream>
    20 
    21 // UNNECESSARY, FIX ME
    22 void ?{}( int * this ) { *this = 0; }
    23 void ?{}( int * this, zero_t ) { *this = 0; }
    24 void ?{}( int * this, one_t ) { *this = 1; }
    2519
    2620int main() {
    2721        sout | "constructor" | endl;
    28         Rational(int) a = { 3 }, b = { 4 }, c;
     22        Rational a = { 3 }, b = { 4 }, c;
    2923        sout | a | b | c | endl;
    30 
    31         a = (Rational(int)){ 4, 8 };
    32         b = (Rational(int)){ 5, 7 };
     24        a = (Rational){ 4, 8 };
     25        b = (Rational){ 5, 7 };
    3326        sout | a | b | endl;
    34         a = (Rational(int)){ -2, -3 };
    35         b = (Rational(int)){ 3, -2 };
     27        a = (Rational){ -2, -3 };
     28        b = (Rational){ 3, -2 };
    3629        sout | a | b | endl;
    37         a = (Rational(int)){ -2, 3 };
    38         b = (Rational(int)){ 3, 2 };
     30        a = (Rational){ -2, 3 };
     31        b = (Rational){ 3, 2 };
    3932        sout | a | b | endl;
    4033
    4134        sout | "logical" | endl;
    42         a = (Rational(int)){ -2 };
    43         b = (Rational(int)){ -3, 2 };
     35        a = (Rational){ -2 };
     36        b = (Rational){ -3, 2 };
    4437        sout | a | b | endl;
    4538//      sout | a == 1 | endl; // FIX ME
     
    5750        sout | a / b | endl;
    5851
    59 //      sout | "conversion" | endl;
    60 //      a = (Rational(int)){ 3, 4 };
    61 //      sout | widen( a ) | endl;
    62 //      a = (Rational(int)){ 1, 7 };
    63 //      sout | widen( a ) | endl;
    64 //      a = (Rational(int)){ 355, 113 };
    65 //      sout | widen( a ) | endl;
    66 //      sout | narrow( 0.75, 4 ) | endl;
    67 //      sout | narrow( 0.14285714285714, 16 ) | endl;
    68 //      sout | narrow( 3.14159265358979, 256 ) | endl;
     52        sout | "conversion" | endl;
     53        a = (Rational){ 3, 4 };
     54        sout | widen( a ) | endl;
     55        a = (Rational){ 1, 7 };
     56        sout | widen( a ) | endl;
     57        a = (Rational){ 355, 113 };
     58        sout | widen( a ) | endl;
     59        sout | narrow( 0.75, 4 ) | endl;
     60        sout | narrow( 0.14285714285714, 16 ) | endl;
     61        sout | narrow( 3.14159265358979, 256 ) | endl;
    6962
    7063        sout | "decompose" | endl;
    71         int n, d;
     64        RationalImpl n, d;
    7265//      [n, d] = a;
    7366//      sout | a | n | d | endl;
    7467
    7568        sout | "more tests" | endl;
    76         Rational(int) x = { 1, 2 }, y = { 2 };
     69        Rational x = { 1, 2 }, y = { 2 };
    7770        sout | x - y | endl;
    7871        sout | x > y | endl;
     
    8073        sout | y | denominator( y, -2 ) | y | endl;
    8174
    82         Rational(int) z = { 0, 5 };
     75        Rational z = { 0, 5 };
    8376        sout | z | endl;
    8477
    8578        sout | x | numerator( x, 0 ) | x | endl;
    8679
    87         x = (Rational(int)){ 1, MAX } + (Rational(int)){ 1, MAX };
     80        x = (Rational){ 1, MAX } + (Rational){ 1, MAX };
    8881        sout | x | endl;
    89         x = (Rational(int)){ 3, MAX } + (Rational(int)){ 2, MAX };
     82        x = (Rational){ 3, MAX } + (Rational){ 2, MAX };
    9083        sout | x | endl;
    9184
  • src/tests/sched-int-wait.c

    r3bd1eb4 rdbfb35d  
    113113        waiter_left = 4;
    114114        processor p;
    115         sout | "Starting" | endl;
    116115        {
    117116                Signaler  e;
     
    123122                }
    124123        }
    125         sout | "Done" | endl;
    126124}
  • src/tests/test.py

    r3bd1eb4 rdbfb35d  
    2424        self.name, self.path = name, path
    2525
    26 class TestResult:
    27         SUCCESS = 0
    28         FAILURE = 1
    29         TIMEOUT = 124
    30 
    3126# parses the Makefile to find the machine type (32-bit / 64-bit)
    3227def getMachineType():
    3328        sh('echo "void ?{}(int*a,int b){}int main(){return 0;}" > .dummy.c')
    3429        ret, out = sh("make .dummy -s", print2stdout=True)
    35 
     30       
    3631        if ret != 0:
    3732                print("Failed to identify architecture:")
     
    166161
    167162        # build, skipping to next test on error
    168         make_ret, _ = sh("""%s test=yes EXTRA_FLAGS="%s" %s 2> %s 1> /dev/null""" % (make_cmd, options, test.name, out_file), dry_run)
    169 
    170         retcode = 0
    171         error = None
     163        make_ret, _ = sh("""%s test=yes EXTRA_FLAGS="-quiet %s" %s 2> %s 1> /dev/null""" % (make_cmd, options, test.name, out_file), dry_run)
    172164
    173165        # if the make command succeds continue otherwise skip to diff
     
    178170                if fileIsExecutable(test.name) :
    179171                        # run test
    180                         retcode, _ = sh("timeout 60 ./%s %s > %s 2>&1" % (test.name, stdinput, out_file), dry_run)
     172                        sh("./%s %s > %s 2>&1" % (test.name, stdinput, out_file), dry_run)
    181173                else :
    182174                        # simply cat the result into the output
     
    187179                sh("mv %s %s" % (err_file, out_file), dry_run)
    188180
    189         if retcode == 0:
    190                 if generate :
    191                         # if we are ounly generating the output we still need to check that the test actually exists
    192                         if not dry_run and fileContainsOnly(out_file, "make: *** No rule to make target `%s'.  Stop." % test.name) :
    193                                 retcode = 1;
    194                                 error = "\t\tNo make target for test %s!" % test.name
    195                                 sh("rm %s" % out_file, False)
    196                 else :
    197                         # fetch return code and error from the diff command
    198                         retcode, error = diff(".expect/%s.txt" % test.path, ".out/%s.log" % test.name, dry_run)
     181        retcode = 0
     182        error = None
     183
     184        if generate :
     185                # if we are ounly generating the output we still need to check that the test actually exists
     186                if not dry_run and fileContainsOnly(out_file, "make: *** No rule to make target `%s'.  Stop." % test.name) :
     187                        retcode = 1;
     188                        error = "\t\tNo make target for test %s!" % test.name
     189                        sh("rm %s" % out_file, False)
     190
     191        else :
     192                # fetch return code and error from the diff command
     193                retcode, error = diff(".expect/%s.txt" % test.path, ".out/%s.log" % test.name, dry_run)
     194       
    199195        # clean the executable
    200196        sh("rm -f %s > /dev/null 2>&1" % test.name, dry_run)
     
    209205        name_txt = "%20s  " % t.name
    210206
    211         retcode, error = run_single_test(t, generate, dry_run, debug)
     207        #run the test instance and collect the result
     208        test_failed, error = run_single_test(t, generate, dry_run, debug)
    212209
    213210        # update output based on current action
    214211        if generate :
    215                 if   retcode == TestResult.SUCCESS:     result_txt = "Done"
    216                 elif retcode == TestResult.TIMEOUT:     result_txt = "TIMEOUT"
    217                 else :                                          result_txt = "ERROR"
    218         else :
    219                 if   retcode == TestResult.SUCCESS:     result_txt = "PASSED"
    220                 elif retcode == TestResult.TIMEOUT:     result_txt = "TIMEOUT"
    221                 else :                                          result_txt = "FAILED"
     212                failed_txt = "ERROR"
     213                success_txt = "Done"
     214        else :
     215                failed_txt = "FAILED"
     216                success_txt = "PASSED"
    222217
    223218        #print result with error if needed
    224         text = name_txt + result_txt
     219        text = name_txt + (failed_txt if test_failed else success_txt)
    225220        out = sys.stdout
    226221        if error :
     
    228223                out = sys.stderr
    229224
    230         print(text, file = out)
     225        print(text, file = out);
    231226        sys.stdout.flush()
    232227        sys.stderr.flush()
    233228        signal.signal(signal.SIGINT, signal.SIG_IGN)
    234229
    235         return retcode != TestResult.SUCCESS
     230        return test_failed
    236231
    237232# run the given list of tests with the given parameters
     
    274269if __name__ == "__main__":
    275270        #always run from same folder
    276         chdir()
    277 
     271        chdir() 
     272       
    278273        # parse the command line arguments
    279274        options = getOptions()
Note: See TracChangeset for help on using the changeset viewer.