Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/InitTweak/FixInit.cc

    r08da53d r680620d  
    367367                        ImplicitCtorDtorStmt * stmt = genCtorDtor( fname, var, cpArg );
    368368                        ExprStmt * exprStmt = strict_dynamic_cast< ExprStmt * >( stmt->get_callStmt() );
    369                         Expression * resolved = exprStmt->expr;
    370                         exprStmt->expr = nullptr; // take ownership of expr
     369                        Expression * untyped = exprStmt->get_expr();
    371370
    372371                        // resolve copy constructor
    373372                        // should only be one alternative for copy ctor and dtor expressions, since all arguments are fixed
    374373                        // (VariableExpr and already resolved expression)
    375                         CP_CTOR_PRINT( std::cerr << "ResolvingCtorDtor " << resolved << std::endl; )
    376                         ResolvExpr::findVoidExpression( resolved, indexer );
     374                        CP_CTOR_PRINT( std::cerr << "ResolvingCtorDtor " << untyped << std::endl; )
     375                        Expression * resolved = ResolvExpr::findVoidExpression( untyped, indexer );
    377376                        assert( resolved );
    378377                        if ( resolved->get_env() ) {
     
    382381                                resolved->set_env( nullptr );
    383382                        } // if
     383
    384384                        delete stmt;
    385385                        return resolved;
     
    11121112                }
    11131113
    1114                 DeclarationWithType * MutatingResolver::mutate( ObjectDecl * objectDecl ) {
     1114                DeclarationWithType * MutatingResolver::mutate( ObjectDecl *objectDecl ) {
    11151115                        // add object to the indexer assumes that there will be no name collisions
    11161116                        // in generated code. If this changes, add mutate methods for entities with
     
    11201120                }
    11211121
    1122                 Expression * MutatingResolver::mutate( UntypedExpr * untypedExpr ) {
    1123                         Expression * newExpr = untypedExpr;
    1124                         ResolvExpr::findVoidExpression( newExpr, indexer );
    1125                         return newExpr;
     1122                Expression* MutatingResolver::mutate( UntypedExpr *untypedExpr ) {
     1123                        return strict_dynamic_cast< ApplicationExpr * >( ResolvExpr::findVoidExpression( untypedExpr, indexer ) );
    11261124                }
    11271125
     
    11481146
    11491147                        // resolve assignment and dispose of new env
    1150                         ResolvExpr::findVoidExpression( assign, indexer );
    1151                         delete assign->env;
    1152                         assign->env = nullptr;
     1148                        Expression * resolvedAssign = ResolvExpr::findVoidExpression( assign, indexer );
     1149                        delete resolvedAssign->env;
     1150                        resolvedAssign->env = nullptr;
     1151                        delete assign;
    11531152
    11541153                        // for constructor expr:
     
    11591158                        //   T & tmp;
    11601159                        //   &tmp = &x, ?{}(tmp), tmp
    1161                         CommaExpr * commaExpr = new CommaExpr( assign, new CommaExpr( callExpr, new VariableExpr( tmp ) ) );
     1160                        CommaExpr * commaExpr = new CommaExpr( resolvedAssign, new CommaExpr( callExpr, new VariableExpr( tmp ) ) );
    11621161                        commaExpr->set_env( env );
    11631162                        return commaExpr;
Note: See TracChangeset for help on using the changeset viewer.