Changes in src/AST/SymbolTable.cpp [3e5dd913:9e23b446]
- File:
-
- 1 edited
-
src/AST/SymbolTable.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/AST/SymbolTable.cpp
r3e5dd913 r9e23b446 65 65 66 66 Expr * SymbolTable::IdData::combine( const CodeLocation & loc, ResolvExpr::Cost & cost ) const { 67 Expr * ret = ( baseExpr ) ? 68 (Expr *)new MemberExpr{ loc, id, referenceToRvalueConversion( baseExpr, cost ) } : 69 (Expr *)new VariableExpr{ loc, id }; 67 Expr * ret; 68 if ( baseExpr ) { 69 if (baseExpr->env) { 70 Expr * base = shallowCopy(baseExpr); 71 const TypeSubstitution * subs = baseExpr->env; 72 base->env = nullptr; 73 ret = new MemberExpr{loc, id, referenceToRvalueConversion( base, cost )}; 74 ret->env = subs; 75 } 76 else { 77 ret = new MemberExpr{ loc, id, referenceToRvalueConversion( baseExpr, cost ) }; 78 } 79 } 80 else { 81 ret = new VariableExpr{ loc, id }; 82 } 70 83 if ( deleter ) { ret = new DeletedExpr{ loc, ret, deleter }; } 71 84 return ret; … … 772 785 && ! dynamic_cast<const UnionInstType *>(rty) ) continue; 773 786 ResolvExpr::Cost cost = ResolvExpr::Cost::zero; 787 ast::ptr<ast::TypeSubstitution> tmp = expr->env; 788 expr = mutate_field(expr, &Expr::env, nullptr); 774 789 const Expr * base = ResolvExpr::referenceToRvalueConversion( expr, cost ); 790 base = mutate_field(base, &Expr::env, tmp); 791 775 792 addMembers( 776 793 rty->aggr(), new MemberExpr{ base->location, dwt, base }, handleConflicts );
Note:
See TracChangeset
for help on using the changeset viewer.