Changeset 7c70089 for src/Tuples


Ignore:
Timestamp:
Mar 17, 2017, 1:36:27 PM (9 years ago)
Author:
Thierry Delisle <tdelisle@…>
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:
31ce3d6
Parents:
b32ada31 (diff), 946bcca (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 'master' of plg.uwaterloo.ca:software/cfa/cfa-cc

Location:
src/Tuples
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/Tuples/TupleAssignment.cc

    rb32ada31 r7c70089  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Mar 16 08:04:51 2017
    13 // Update Count     : 7
     12// Last Modified On : Fri Mar 17 09:43:03 2017
     13// Update Count     : 8
    1414//
    1515
     
    200200                                assert( type );
    201201                                type->get_qualifiers() -= Type::Qualifiers( Type::Const | Type::Volatile | Type::Restrict | Type::Atomic );
    202                                 type->set_isLvalue( true ); // xxx - might not need this
     202                                type->set_lvalue( true ); // xxx - might not need this
    203203                                expr = new CastExpr( expr, castType );
    204204                        }
  • src/Tuples/TupleExpansion.cc

    rb32ada31 r7c70089  
    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.