Changeset 64ac636 for src/Tuples


Ignore:
Timestamp:
Mar 17, 2017, 1:14:07 PM (7 years ago)
Author:
Rob Schluntz <rschlunt@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
b2f5082
Parents:
1fbab5a
Message:

fix missing line numbers in some places, including member constructor generation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Tuples/TupleExpansion.cc

    r1fbab5a r64ac636  
    126126                /// given a expression representing the member and an expression representing the aggregate,
    127127                /// reconstructs a flattened UntypedMemberExpr with the right precedence
    128                 Expression * reconstructMemberExpr( Expression * member, Expression * aggr ) {
     128                Expression * reconstructMemberExpr( Expression * member, Expression * aggr, CodeLocation & loc ) {
    129129                        if ( UntypedMemberExpr * memberExpr = dynamic_cast< UntypedMemberExpr * >( member ) ) {
    130130                                // construct a new UntypedMemberExpr with the correct structure , and recursively
    131131                                // expand that member expression.
    132132                                MemberTupleExpander expander;
    133                                 UntypedMemberExpr * newMemberExpr = new UntypedMemberExpr( memberExpr->get_member(), new UntypedMemberExpr( memberExpr->get_aggregate(), aggr->clone() ) );
    134 
     133                                UntypedMemberExpr * inner = new UntypedMemberExpr( memberExpr->get_aggregate(), aggr->clone() );
     134                                UntypedMemberExpr * newMemberExpr = new UntypedMemberExpr( memberExpr->get_member(), inner );
     135                                inner->location = newMemberExpr->location = loc;
    135136                                memberExpr->set_member(nullptr);
    136137                                memberExpr->set_aggregate(nullptr);
     
    139140                        } else {
    140141                                // not a member expression, so there is nothing to do but attach and return
    141                                 return new UntypedMemberExpr( member, aggr->clone() );
     142                                UntypedMemberExpr * newMemberExpr = new UntypedMemberExpr( member, aggr->clone() );
     143                                newMemberExpr->location = loc;
     144                                return newMemberExpr;
    142145                        }
    143146                }
     
    152155                        aggr = new UniqueExpr( aggr );
    153156                        for ( Expression *& expr : tupleExpr->get_exprs() ) {
    154                                 expr = reconstructMemberExpr( expr, aggr );
     157                                expr = reconstructMemberExpr( expr, aggr, memberExpr->location );
     158                                expr->location = memberExpr->location;
    155159                        }
    156160                        delete aggr;
     161                        tupleExpr->location = memberExpr->location;
    157162                        return tupleExpr;
    158163                } else {
    159164                        // there may be a tuple expr buried in the aggregate
    160165                        // xxx - this is a memory leak
    161                         return new UntypedMemberExpr( memberExpr->get_member()->clone(), memberExpr->get_aggregate()->acceptMutator( *this ) );
     166                        UntypedMemberExpr * newMemberExpr = new UntypedMemberExpr( memberExpr->get_member()->clone(), memberExpr->get_aggregate()->acceptMutator( *this ) );
     167                        newMemberExpr->location = memberExpr->location;
     168                        return newMemberExpr;
    162169                }
    163170        }
Note: See TracChangeset for help on using the changeset viewer.