Changeset 7c70089 for src/Tuples
- Timestamp:
- Mar 17, 2017, 1:36:27 PM (9 years ago)
- 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. - Location:
- src/Tuples
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Tuples/TupleAssignment.cc
rb32ada31 r7c70089 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Mar 16 08:04:51201713 // Update Count : 712 // Last Modified On : Fri Mar 17 09:43:03 2017 13 // Update Count : 8 14 14 // 15 15 … … 200 200 assert( type ); 201 201 type->get_qualifiers() -= Type::Qualifiers( Type::Const | Type::Volatile | Type::Restrict | Type::Atomic ); 202 type->set_ isLvalue( true ); // xxx - might not need this202 type->set_lvalue( true ); // xxx - might not need this 203 203 expr = new CastExpr( expr, castType ); 204 204 } -
src/Tuples/TupleExpansion.cc
rb32ada31 r7c70089 126 126 /// given a expression representing the member and an expression representing the aggregate, 127 127 /// reconstructs a flattened UntypedMemberExpr with the right precedence 128 Expression * reconstructMemberExpr( Expression * member, Expression * aggr ) {128 Expression * reconstructMemberExpr( Expression * member, Expression * aggr, CodeLocation & loc ) { 129 129 if ( UntypedMemberExpr * memberExpr = dynamic_cast< UntypedMemberExpr * >( member ) ) { 130 130 // construct a new UntypedMemberExpr with the correct structure , and recursively 131 131 // expand that member expression. 132 132 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; 135 136 memberExpr->set_member(nullptr); 136 137 memberExpr->set_aggregate(nullptr); … … 139 140 } else { 140 141 // 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; 142 145 } 143 146 } … … 152 155 aggr = new UniqueExpr( aggr ); 153 156 for ( Expression *& expr : tupleExpr->get_exprs() ) { 154 expr = reconstructMemberExpr( expr, aggr ); 157 expr = reconstructMemberExpr( expr, aggr, memberExpr->location ); 158 expr->location = memberExpr->location; 155 159 } 156 160 delete aggr; 161 tupleExpr->location = memberExpr->location; 157 162 return tupleExpr; 158 163 } else { 159 164 // there may be a tuple expr buried in the aggregate 160 165 // 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; 162 169 } 163 170 }
Note:
See TracChangeset
for help on using the changeset viewer.