Changeset 9e2c1f0 for src


Ignore:
Timestamp:
May 6, 2016, 4:28:50 PM (9 years ago)
Author:
Rob Schluntz <rschlunt@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, gc_noraii, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
ec79847
Parents:
99ee64d (diff), 03e5d14 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'global-init' into ctor and add global destroy function to call destructors on global objects

Conflicts:

src/CodeGen/CodeGenerator.cc
src/InitTweak/module.mk
src/Makefile.in
src/SynTree/Declaration.h
src/SynTree/FunctionDecl.cc
src/main.cc

Location:
src
Files:
2 added
12 edited

Legend:

Unmodified
Added
Removed
  • src/CodeGen/CodeGenerator.cc

    r99ee64d r9e2c1f0  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Apr 27 11:59:36 2016
     12// Last Modified On : Fri May 06 16:01:00 2016
    1313// Update Count     : 255
    1414//
     
    7676        //*** Declarations
    7777        void CodeGenerator::visit( FunctionDecl *functionDecl ) {
     78                // generalize this
     79                FunctionDecl::Attribute attr = functionDecl->get_attribute();
     80                switch ( attr.type ) {
     81                        case FunctionDecl::Attribute::Constructor:
     82                                output << "__attribute__ ((constructor";
     83                                if ( attr.priority != FunctionDecl::Attribute::Default ) {
     84                                        output << "(" << attr.priority << ")";
     85                                }
     86                                output << ")) ";
     87                                break;
     88                        case FunctionDecl::Attribute::Destructor:
     89                                output << "__attribute__ ((destructor";
     90                                if ( attr.priority != FunctionDecl::Attribute::Default ) {
     91                                        output << "(" << attr.priority << ")";
     92                                }
     93                                output << ")) ";
     94                                break;
     95                        default:
     96                                break;
     97                }
    7898                handleStorageClass( functionDecl );
    7999                if ( functionDecl->get_isInline() ) {
  • src/InitTweak/GenInit.cc

    r99ee64d r9e2c1f0  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Thu Apr 28 12:26:47 2016
     12// Last Modified On : Fri May 06 16:11:15 2016
    1313// Update Count     : 166
    1414//
     
    129129        }
    130130
     131        bool tryConstruct( ObjectDecl * objDecl ) {
     132                // xxx - handle designations
     133                return ! LinkageSpec::isBuiltin( objDecl->get_linkage() ) &&
     134                        (objDecl->get_init() == NULL ||
     135                        ( objDecl->get_init() != NULL && objDecl->get_init()->get_maybeConstructed() ));
     136        }
    131137        namespace {
    132                 bool tryConstruct( ObjectDecl * objDecl ) {
    133                         // xxx - handle designations
    134                         return ! LinkageSpec::isBuiltin( objDecl->get_linkage() ) &&
    135                                 (objDecl->get_init() == NULL ||
    136                                 ( objDecl->get_init() != NULL && objDecl->get_init()->get_maybeConstructed() ));
    137                 }
    138138
    139139                Expression * makeCtorDtorExpr( std::string name, ObjectDecl * objDecl, std::list< Expression * > args ) {
     
    209209                                        objDecl->set_init( new ConstructorInit( ctorStmt, dtorStmt, objDecl->get_init() ) );
    210210                                }
    211                         } else {
    212                                 // xxx - find a way to construct/destruct globals
    213                                 // hack: implicit "static" initialization routine for each struct type? or something similar?
    214                                 // --ties into module system
    215                                 // this can be done by mangling main and replacing it with our own main which calls each
    216                                 // module initialization routine in some decided order (order given in link command?)
    217                                 // and finally calls mangled main
    218211                        }
    219212                }
  • src/InitTweak/GenInit.h

    r99ee64d r9e2c1f0  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Thu Apr 28 12:22:09 2016
     12// Last Modified On : Fri May 06 16:18:22 2016
    1313// Update Count     : 3
    1414//
     
    2727        /// Adds return value temporaries and wraps Initializers in ConstructorInit nodes
    2828        void genInit( std::list< Declaration * > & translationUnit );
     29        /// True if the resolver should try to construct objDecl
     30        bool tryConstruct( ObjectDecl * objDecl );
    2931} // namespace
    3032
    31 #endif // GENPOLY_POLYMUTATOR_H
     33#endif // INITTWEAK_GENINIT_H
    3234
    3335// Local Variables: //
  • src/InitTweak/module.mk

    r99ee64d r9e2c1f0  
    1111## Created On       : Mon Jun  1 17:49:17 2015
    1212## Last Modified By : Rob Schluntz
    13 ## Last Modified On : Thu Apr 28 12:23:17 2016
     13## Last Modified On : Fri May 06 15:59:27 2016
    1414## Update Count     : 3
    1515###############################################################################
    1616
    1717SRC += InitTweak/GenInit.cc \
    18         InitTweak/FixInit.cc
     18        InitTweak/FixInit.cc \
     19        InitTweak/FixGlobalInit.cc
     20
  • src/Makefile.in

    r99ee64d r9e2c1f0  
    125125        InitTweak/driver_cfa_cpp-GenInit.$(OBJEXT) \
    126126        InitTweak/driver_cfa_cpp-FixInit.$(OBJEXT) \
     127        InitTweak/driver_cfa_cpp-FixGlobalInit.$(OBJEXT) \
    127128        Parser/driver_cfa_cpp-parser.$(OBJEXT) \
    128129        Parser/driver_cfa_cpp-lex.$(OBJEXT) \
     
    348349        GenPoly/CopyParams.cc GenPoly/FindFunction.cc \
    349350        GenPoly/DeclMutator.cc InitTweak/GenInit.cc \
    350         InitTweak/FixInit.cc Parser/parser.yy Parser/lex.ll \
    351         Parser/TypedefTable.cc Parser/ParseNode.cc \
    352         Parser/DeclarationNode.cc Parser/ExpressionNode.cc \
    353         Parser/StatementNode.cc Parser/InitializerNode.cc \
    354         Parser/TypeData.cc Parser/LinkageSpec.cc \
    355         Parser/parseutility.cc Parser/Parser.cc \
     351        InitTweak/FixInit.cc InitTweak/FixGlobalInit.cc \
     352        Parser/parser.yy Parser/lex.ll Parser/TypedefTable.cc \
     353        Parser/ParseNode.cc Parser/DeclarationNode.cc \
     354        Parser/ExpressionNode.cc Parser/StatementNode.cc \
     355        Parser/InitializerNode.cc Parser/TypeData.cc \
     356        Parser/LinkageSpec.cc Parser/parseutility.cc Parser/Parser.cc \
    356357        ResolvExpr/AlternativeFinder.cc ResolvExpr/Alternative.cc \
    357358        ResolvExpr/Unify.cc ResolvExpr/PtrsAssignable.cc \
     
    569570InitTweak/driver_cfa_cpp-FixInit.$(OBJEXT): InitTweak/$(am__dirstamp) \
    570571        InitTweak/$(DEPDIR)/$(am__dirstamp)
     572InitTweak/driver_cfa_cpp-FixGlobalInit.$(OBJEXT):  \
     573        InitTweak/$(am__dirstamp) InitTweak/$(DEPDIR)/$(am__dirstamp)
    571574Parser/parser.h: Parser/parser.cc
    572575        @if test ! -f $@; then rm -f Parser/parser.cc; else :; fi
     
    800803        -rm -f GenPoly/driver_cfa_cpp-ScrubTyVars.$(OBJEXT)
    801804        -rm -f GenPoly/driver_cfa_cpp-Specialize.$(OBJEXT)
     805        -rm -f InitTweak/driver_cfa_cpp-FixGlobalInit.$(OBJEXT)
    802806        -rm -f InitTweak/driver_cfa_cpp-FixInit.$(OBJEXT)
    803807        -rm -f InitTweak/driver_cfa_cpp-GenInit.$(OBJEXT)
     
    907911@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-ScrubTyVars.Po@am__quote@
    908912@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-Specialize.Po@am__quote@
     913@AMDEP_TRUE@@am__include@ @am__quote@InitTweak/$(DEPDIR)/driver_cfa_cpp-FixGlobalInit.Po@am__quote@
    909914@AMDEP_TRUE@@am__include@ @am__quote@InitTweak/$(DEPDIR)/driver_cfa_cpp-FixInit.Po@am__quote@
    910915@AMDEP_TRUE@@am__include@ @am__quote@InitTweak/$(DEPDIR)/driver_cfa_cpp-GenInit.Po@am__quote@
     
    14061411@am__fastdepCXX_FALSE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o InitTweak/driver_cfa_cpp-FixInit.obj `if test -f 'InitTweak/FixInit.cc'; then $(CYGPATH_W) 'InitTweak/FixInit.cc'; else $(CYGPATH_W) '$(srcdir)/InitTweak/FixInit.cc'; fi`
    14071412
     1413InitTweak/driver_cfa_cpp-FixGlobalInit.o: InitTweak/FixGlobalInit.cc
     1414@am__fastdepCXX_TRUE@   $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT InitTweak/driver_cfa_cpp-FixGlobalInit.o -MD -MP -MF InitTweak/$(DEPDIR)/driver_cfa_cpp-FixGlobalInit.Tpo -c -o InitTweak/driver_cfa_cpp-FixGlobalInit.o `test -f 'InitTweak/FixGlobalInit.cc' || echo '$(srcdir)/'`InitTweak/FixGlobalInit.cc
     1415@am__fastdepCXX_TRUE@   $(am__mv) InitTweak/$(DEPDIR)/driver_cfa_cpp-FixGlobalInit.Tpo InitTweak/$(DEPDIR)/driver_cfa_cpp-FixGlobalInit.Po
     1416@AMDEP_TRUE@@am__fastdepCXX_FALSE@      source='InitTweak/FixGlobalInit.cc' object='InitTweak/driver_cfa_cpp-FixGlobalInit.o' libtool=no @AMDEPBACKSLASH@
     1417@AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     1418@am__fastdepCXX_FALSE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o InitTweak/driver_cfa_cpp-FixGlobalInit.o `test -f 'InitTweak/FixGlobalInit.cc' || echo '$(srcdir)/'`InitTweak/FixGlobalInit.cc
     1419
     1420InitTweak/driver_cfa_cpp-FixGlobalInit.obj: InitTweak/FixGlobalInit.cc
     1421@am__fastdepCXX_TRUE@   $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT InitTweak/driver_cfa_cpp-FixGlobalInit.obj -MD -MP -MF InitTweak/$(DEPDIR)/driver_cfa_cpp-FixGlobalInit.Tpo -c -o InitTweak/driver_cfa_cpp-FixGlobalInit.obj `if test -f 'InitTweak/FixGlobalInit.cc'; then $(CYGPATH_W) 'InitTweak/FixGlobalInit.cc'; else $(CYGPATH_W) '$(srcdir)/InitTweak/FixGlobalInit.cc'; fi`
     1422@am__fastdepCXX_TRUE@   $(am__mv) InitTweak/$(DEPDIR)/driver_cfa_cpp-FixGlobalInit.Tpo InitTweak/$(DEPDIR)/driver_cfa_cpp-FixGlobalInit.Po
     1423@AMDEP_TRUE@@am__fastdepCXX_FALSE@      source='InitTweak/FixGlobalInit.cc' object='InitTweak/driver_cfa_cpp-FixGlobalInit.obj' libtool=no @AMDEPBACKSLASH@
     1424@AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     1425@am__fastdepCXX_FALSE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o InitTweak/driver_cfa_cpp-FixGlobalInit.obj `if test -f 'InitTweak/FixGlobalInit.cc'; then $(CYGPATH_W) 'InitTweak/FixGlobalInit.cc'; else $(CYGPATH_W) '$(srcdir)/InitTweak/FixGlobalInit.cc'; fi`
     1426
    14081427Parser/driver_cfa_cpp-parser.o: Parser/parser.cc
    14091428@am__fastdepCXX_TRUE@   $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Parser/driver_cfa_cpp-parser.o -MD -MP -MF Parser/$(DEPDIR)/driver_cfa_cpp-parser.Tpo -c -o Parser/driver_cfa_cpp-parser.o `test -f 'Parser/parser.cc' || echo '$(srcdir)/'`Parser/parser.cc
  • src/SynTree/Declaration.h

    r99ee64d r9e2c1f0  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Mon Apr 11 16:55:12 2016
    13 // Update Count     : 36
     12// Last Modified On : Fri May 06 16:26:12 2016
     13// Update Count     : 33
    1414//
    1515
     
    115115        typedef DeclarationWithType Parent;
    116116  public:
    117         FunctionDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, FunctionType *type, CompoundStmt *statements, bool isInline, bool isNoreturn );
     117        // temporary - merge this into general GCC attributes
     118        struct Attribute {
     119                enum Type {
     120                        NoAttribute, Constructor, Destructor,
     121                } type;
     122                enum Priority {
     123                        // priorities 0-100 are reserved by gcc, so it's okay to use 100 an exceptional case
     124                        Default = 100, High,
     125                } priority;
     126                Attribute(Type t = NoAttribute, Priority p = Default) : type(t), priority(p) {};
     127        };
     128
     129        FunctionDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, FunctionType *type, CompoundStmt *statements, bool isInline, bool isNoreturn, Attribute attribute = Attribute() );
    118130        FunctionDecl( const FunctionDecl &other );
    119131        virtual ~FunctionDecl();
     
    128140        std::list< std::string >& get_oldIdents() { return oldIdents; }
    129141        std::list< Declaration* >& get_oldDecls() { return oldDecls; }
     142        Attribute get_attribute() const { return attribute; }
     143        void set_attribute( Attribute newValue ) { attribute = newValue; }
    130144
    131145        virtual FunctionDecl *clone() const { return new FunctionDecl( *this ); }
     
    139153        std::list< std::string > oldIdents;
    140154        std::list< Declaration* > oldDecls;
     155        Attribute attribute;
    141156};
    142157
  • src/SynTree/FunctionDecl.cc

    r99ee64d r9e2c1f0  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Tue May 03 15:37:43 2016
     12// Last Modified On : Fri May 06 15:59:48 2016
    1313// Update Count     : 19
    1414//
     
    2121#include "Common/utility.h"
    2222
    23 FunctionDecl::FunctionDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, FunctionType *type, CompoundStmt *statements, bool isInline, bool isNoreturn )
    24                 : Parent( name, sc, linkage ), type( type ), statements( statements ) {
     23FunctionDecl::FunctionDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, FunctionType *type, CompoundStmt *statements, bool isInline, bool isNoreturn, Attribute attribute )
     24                : Parent( name, sc, linkage ), type( type ), statements( statements ), attribute( attribute ) {
    2525        set_isInline( isInline );
    2626        set_isNoreturn( isNoreturn );
     
    3232
    3333FunctionDecl::FunctionDecl( const FunctionDecl &other )
    34         : Parent( other ), type( maybeClone( other.type ) ), statements( maybeClone( other.statements ) ) {
     34        : Parent( other ), type( maybeClone( other.type ) ), statements( maybeClone( other.statements ) ), attribute( other.attribute ) {
    3535}
    3636
     
    6565                os << "_Noreturn ";
    6666        } // if
     67        switch ( attribute.type ) {
     68                case Attribute::Constructor:
     69                        os << "Global Constructor ";
     70                        break;
     71                case Attribute::Destructor:
     72                        os << "Global Destructor ";
     73                        break;
     74                default:
     75                        break;
     76        }
     77        if ( attribute.priority != Attribute::Default ) {
     78                os << "with priority " << attribute.priority << " ";
     79        }
    6780        if ( get_storageClass() != DeclarationNode::NoStorageClass ) {
    6881                os << DeclarationNode::storageName[ get_storageClass() ] << ' ';
     
    105118                os << "_Noreturn ";
    106119        } // if
     120        switch ( attribute.type ) {
     121                case Attribute::Constructor:
     122                        os << " Global Constructor ";
     123                        break;
     124                case Attribute::Destructor:
     125                        os << " Global Destructor ";
     126                        break;
     127                default:
     128                        break;
     129        }
     130        if ( attribute.priority != Attribute::Default ) {
     131                os << "with priority " << attribute.priority << " ";
     132        }
    107133        if ( get_storageClass() != DeclarationNode::NoStorageClass ) {
    108134                os << DeclarationNode::storageName[ get_storageClass() ] << ' ';
  • src/driver/cc1.cc

    r99ee64d r9e2c1f0  
    1010// Created On       : Fri Aug 26 14:23:51 2005
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jan 25 16:05:15 2016
    13 // Update Count     : 56
     12// Last Modified On : Thu May  5 16:04:30 2016
     13// Update Count     : 77
    1414//
    1515
     
    108108        const char *args[argc + 100];                                           // leave space for 100 additional cpp command line values
    109109        int nargs = 1;                                                                          // number of arguments in args list; 0 => command name
    110         const char *uargs[20];                                                          // leave space for 20 additional cfa-cpp command line values
    111         int nuargs = 1;                                                                         // 0 => command name
     110        const char *cargs[20];                                                          // leave space for 20 additional cfa-cpp command line values
     111        int ncargs = 1;                                                                         // 0 => command name
    112112
    113113        signal( SIGINT,  sigTermHandler );
    114114        signal( SIGTERM, sigTermHandler );
     115
     116#ifdef __DEBUG_H__
     117        cerr << "Stage1" << endl;
     118#endif // __DEBUG_H__
    115119
    116120        // process all the arguments
     
    153157                                CFA_flag = true;
    154158                        } else if ( prefix( arg, D__CFA_FLAGPREFIX__ ) ) {
    155                                 uargs[nuargs] = ( *new string( arg.substr( D__CFA_FLAGPREFIX__.size() ) ) ).c_str();
    156                                 nuargs += 1;
     159                                cargs[ncargs] = ( *new string( arg.substr( D__CFA_FLAGPREFIX__.size() ) ) ).c_str();
     160                                ncargs += 1;
    157161                        } else if ( arg == "-D" && prefix( argv[i + 1], D__CFA_FLAGPREFIX__.substr(2) ) ) {
    158                                 uargs[nuargs] = ( *new string( string( argv[i + 1] ).substr( D__CFA_FLAGPREFIX__.size() - 2 ) ) ).c_str();
    159                                 nuargs += 1;
     162                                cargs[ncargs] = ( *new string( string( argv[i + 1] ).substr( D__CFA_FLAGPREFIX__.size() - 2 ) ) ).c_str();
     163                                ncargs += 1;
    160164                                i += 1;                                                                 // and the argument
    161165                        } else if ( prefix( arg, D__GCC_BPREFIX__ ) ) {
     
    317321
    318322        if ( fork() == 0 ) {                                                            // child runs CFA
    319                 uargs[0] = ( *new string( bprefix + "/cfa-cpp" ) ).c_str();
    320 
    321                 uargs[nuargs] = tmpname;
    322                 nuargs += 1;
     323                cargs[0] = ( *new string( bprefix + "/cfa-cpp" ) ).c_str();
     324
     325                // Source file-name used to generate routine names containing global initializations for TU.
     326                cargs[ncargs] = ( *new string( "-F" ) ).c_str();
     327                ncargs += 1;
     328                cargs[ncargs] = ( *new string( string( cpp_in ) ) ).c_str();
     329                ncargs += 1;
     330
     331                cargs[ncargs] = tmpname;
     332                ncargs += 1;
    323333                if ( o_name != NULL ) {
    324                         uargs[nuargs] = o_name;
    325                         nuargs += 1;
     334                        cargs[ncargs] = o_name;
     335                        ncargs += 1;
    326336                } else if ( ! CFA_flag ) {                                              // run cfa-cpp ?
    327                         uargs[nuargs] = cpp_out;
    328                         nuargs += 1;
     337                        cargs[ncargs] = cpp_out;
     338                        ncargs += 1;
    329339                } // if
    330                 uargs[nuargs] = NULL;                                                   // terminate argument list
    331 
    332 #ifdef __DEBUG_H__
    333                 cerr << "cfa-cpp nuargs: " << o_name << " " << CFA_flag << " " << nuargs << endl;
    334                 for ( i = 0; uargs[i] != NULL; i += 1 ) {
    335                         cerr << uargs[i] << " ";
     340                cargs[ncargs] = NULL;                                                   // terminate argument list
     341
     342#ifdef __DEBUG_H__
     343                cerr << "cfa-cpp ncargs: " << o_name << " " << CFA_flag << " " << ncargs << endl;
     344                for ( i = 0; cargs[i] != NULL; i += 1 ) {
     345                        cerr << cargs[i] << " ";
    336346                } // for
    337347                cerr << endl;
    338348#endif // __DEBUG_H__
    339349
    340                 execvp( uargs[0], (char * const *)uargs );              // should not return
     350                execvp( cargs[0], (char * const *)cargs );              // should not return
    341351                perror( "CFA Translator error: cpp level, execvp" );
    342352                exit( EXIT_FAILURE );
     
    370380        const char *args[argc + 100];                                           // leave space for 100 additional cfa command line values
    371381        int nargs = 1;                                                                          // number of arguments in args list; 0 => command name
     382
     383#ifdef __DEBUG_H__
     384        cerr << "Stage2" << endl;
     385#endif // __DEBUG_H__
    372386
    373387        // process all the arguments
     
    467481
    468482        if ( arg == "-E" ) {
    469 #ifdef __DEBUG_H__
    470                 cerr << "Stage1" << endl;
    471 #endif // __DEBUG_H__
    472483                Stage1( argc, argv );
    473484        } else if ( arg == "-fpreprocessed" ) {
    474 #ifdef __DEBUG_H__
    475                 cerr << "Stage2" << endl;
    476 #endif // __DEBUG_H__
    477485                Stage2( argc, argv );
    478486        } else {
  • src/examples/abstype.c

    r99ee64d r9e2c1f0  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed May 27 18:10:01 2015
    13 // Update Count     : 4
     12// Last Modified On : Wed Apr  6 22:16:08 2016
     13// Update Count     : 8
    1414//
    1515
    16 type T | { T x( T ); };
     16otype T | { T x( T ); };
    1717
    1818T y( T t ) {
     
    2121}
    2222
    23 forall(type T) lvalue T *?( T* );
    24 int ?++( int *);
    25 int ?=?( int*, int );
    26 forall(dtype DT) DT* ?=?( DT **, DT* );
     23forall( otype T ) lvalue T *?( T* );
     24int ?++( int * );
     25int ?=?( int *, int );
     26forall( dtype DT ) DT * ?=?( DT **, DT* );
    2727
    28 type U = int*;
     28otype U = int *;
    2929
    3030U x( U u ) {
  • src/examples/alloc.c

    r99ee64d r9e2c1f0  
    1111// Created On       : Wed Feb  3 07:56:22 2016
    1212// Last Modified By : Peter A. Buhr
    13 // Last Modified On : Wed Feb 17 11:43:23 2016
    14 // Update Count     : 40
     13// Last Modified On : Fri Mar 11 17:42:08 2016
     14// Update Count     : 59
    1515//
    1616
     17forall( otype T ) T * malloc( char fill );
     18forall( dtype T ) T *?=?( T **, void * );
     19void *malloc( unsigned long int );
     20#if 0
    1721#include <fstream>
    1822#include <stdlib>
     
    2529int * bar( int * p, int c ) { return p; }
    2630int * baz( int * p, int c ) { return p; }
     31#endif
    2732
    2833int main( void ) {
     34#if 0
    2935    size_t size = 10;
    3036    int * p;
    3137    struct S { int x; double y; } * s;
     38#endif
    3239
     40#if 0
    3341    p = malloc( sizeof(*p) );                                                   // C malloc, type unsafe
    3442        printf( "here1\n" );
     
    3745        printf( "here2\n" );
    3846    free( p );
    39     p = malloc( (char)'\0' );                                                                   // CFA malloc, type safe
     47#endif
     48//    int * p;
     49//    p = malloc( (char)'\0' );                                                                 // CFA malloc, type safe
     50    (int *)malloc( (char)'\0' );                                                                        // CFA malloc, type safe
     51    (void *)malloc( (char)'\0' );                                                                       // CFA malloc, type safe
     52#if 0
    4053        printf( "here3\n" );
    4154    p = malloc( p, 1000 );                                                              // CFA remalloc, type safe
     
    6073        printf( "here9\n" );
    6174    free( p );
    62 #if 0
     75
    6376    float * fp = malloc() + 1;
    6477    fprintf( stderr, "%p %p\n", fp, fp - 1 );
  • src/examples/includes.c

    r99ee64d r9e2c1f0  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 23:28:02 2016
    13 // Update Count     : 328
     12// Last Modified On : Wed Apr 13 22:30:02 2016
     13// Update Count     : 370
    1414//
    1515
     
    2424#if 1
    2525#define _GNU_SOURCE
    26 #include <aio.h>
    27 #include <a.out.h>
    28 #include <aliases.h>
    29 #include <alloca.h>
    30 #include <ansidecl.h>
    31 #include <ar.h>
    32 #include <argp.h>
     26//#include <aio.h>
     27//#include <a.out.h>
     28//#include <aliases.h>
     29//#include <alloca.h>
     30//#include <ansidecl.h>
     31//#include <ar.h>
     32//#include <argp.h>
    3333#include <argz.h>
    34 #include <assert.h>
     34//#include <assert.h>
    3535#include <bfd.h>
     36#if 0
    3637#include <bfdlink.h>
    3738#include <byteswap.h>
     
    5657#include <err.h>
    5758#include <errno.h>
    58 #if 0
    5959#include <error.h>
    60 #endif
    6160#include <eti.h>
    6261#include <evdns.h>
    6362#include <event.h>
    6463#include <evhttp.h>
     64#endif
    6565#if 0
    6666#include <evrpc.h>
     
    129129
    130130//#define _GNU_SOURCE
    131 #include <error.h>
     131#include <bfd.h>
     132//#include <error.h>
    132133
    133134#endif // 0
  • src/main.cc

    r99ee64d r9e2c1f0  
    1010// Created On       : Fri May 15 23:12:02 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Fri Apr 29 12:02:21 2016
    13 // Update Count     : 200
     12// Last Modified On : Fri May 06 15:59:09 2016
     13// Update Count     : 203
    1414//
    1515
     
    4242#include "InitTweak/GenInit.h"
    4343#include "InitTweak/FixInit.h"
     44#include "InitTweak/FixGlobalInit.h"
    4445//#include "Explain/GenProlog.h"
    4546//#include "Try/Visit.h"
     
    102103        std::ostream *output = &std::cout;
    103104        int long_index;
    104         std::list< Declaration* > translationUnit;
     105        std::list< Declaration * > translationUnit;
     106        const char *filename = NULL;
    105107
    106108        opterr = 0;                                                                                     // prevent getopt from printing error messages
    107109
    108110        int c;
    109         while ( (c = getopt_long( argc, argv, "abBcefFglnpqrstvyzD:", long_opts, &long_index )) != -1 ) {
     111        while ( (c = getopt_long( argc, argv, "abBcefglnpqrstvyzD:F:", long_opts, &long_index )) != -1 ) {
    110112                switch ( c ) {
    111113                  case Ast:
     
    174176                        break;
    175177                  case 'D':                                                                             // ignore -Dxxx
     178                        break;
     179                  case 'F':                                                                             // source file-name without suffix
     180                        filename = optarg;
    176181                        break;
    177182                  case '?':
     
    188193                        input = fopen( argv[ optind ], "r" );
    189194                        if ( ! input ) {
    190                                 std::cout << "Error: can't open " << argv[optind] << std::endl;
     195                                std::cout << "Error: can't open " << argv[ optind ] << std::endl;
    191196                                exit( 1 );
    192197                        } // if
     198                        // if running cfa-cpp directly, might forget to pass -F option (and really shouldn't have to)
     199                        if ( filename == NULL ) filename = argv[ optind ];
     200                        // prelude filename comes in differently
     201                        if ( libcfap ) filename = "prelude.cf";
    193202                        optind += 1;
    194203                } else {
     
    263272                OPTPRINT( "fixNames" )
    264273                CodeGen::fixNames( translationUnit );
     274                OPTPRINT( "fixGlobalInit" );
     275                InitTweak::fixGlobalInit( translationUnit, filename, libcfap || treep );
    265276                OPTPRINT( "tweakInit" )
    266277                InitTweak::genInit( translationUnit );
Note: See TracChangeset for help on using the changeset viewer.