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