Changeset 71f4e4f for src/InitTweak


Ignore:
Timestamp:
Jan 13, 2016, 5:19:47 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:
f1e012b
Parents:
02c7d04
Message:

added ConstructorInit?, simple constructors and destructors work correctly

Location:
src/InitTweak
Files:
2 added
2 edited

Legend:

Unmodified
Added
Removed
  • src/InitTweak/RemoveInit.cc

    r02c7d04 r71f4e4f  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Mon Jan 11 16:10:45 2016
    13 // Update Count     : 150
     12// Last Modified On : Wed Jan 13 15:19:35 2016
     13// Update Count     : 154
    1414//
    1515
     
    148148                }
    149149
    150                 ExprStmt * makeCtorDtorStmt( std::string name, ObjectDecl * objDecl, std::list< Expression * > args ) {
     150                Expression * makeCtorDtorExpr( std::string name, ObjectDecl * objDecl, std::list< Expression * > args ) {
    151151                        UntypedExpr * expr = new UntypedExpr( new NameExpr( name ) );
    152152                        expr->get_args().push_back( new AddressExpr( new VariableExpr( objDecl ) ) );
    153153                        expr->get_args().splice( expr->get_args().end(), args );
    154                         return new ExprStmt( noLabels, expr );
     154                        return expr;
    155155                }
    156156
     
    186186                // hands off if designated or if @=
    187187                if ( tryConstruct( objDecl ) ) {
    188                         ExprStmt * ctor = makeCtorDtorStmt( "?{}", objDecl, makeInitList( objDecl->get_init() ) );
    189                         ExprStmt * dtor = makeCtorDtorStmt( "^?{}", objDecl, std::list< Expression * >() );
    190 
    191                         // set_ctor...
     188                        Expression * ctor = makeCtorDtorExpr( "?{}", objDecl, makeInitList( objDecl->get_init() ) );
     189                        Expression * dtor = makeCtorDtorExpr( "^?{}", objDecl, std::list< Expression * >() );
     190
    192191                        // need to remember init expression, in case no ctors exist
    193                         // if ctor does exist, want to use ctor stmt instead of init
    194                         objDecl->set_ctor( ctor );
    195                         destructorStmts.push_front( dtor );
     192                        // if ctor does exist, want to use ctor expression instead of init
     193                        // push this decision to the resolver
     194                        objDecl->set_init( new ConstructorInit( ctor, objDecl->get_init() ) );
     195                        destructorStmts.push_front( new ExprStmt( noLabels, dtor ) );
    196196                }
    197197                return objDecl;
  • src/InitTweak/module.mk

    r02c7d04 r71f4e4f  
    1111## Created On       : Mon Jun  1 17:49:17 2015
    1212## Last Modified By : Rob Schluntz
    13 ## Last Modified On : Mon Jan 11 14:40:16 2016
    14 ## Update Count     : 2
     13## Last Modified On : Wed Jan 13 16:29:03 2016
     14## Update Count     : 3
    1515###############################################################################
    1616
    17 SRC += InitTweak/RemoveInit.cc
    18 
     17SRC += InitTweak/RemoveInit.cc \
     18        InitTweak/FixInit.cc
Note: See TracChangeset for help on using the changeset viewer.