Changeset 3e5dd913 for src/ResolvExpr/CandidateFinder.cpp
- Timestamp:
- Dec 16, 2020, 2:43:12 PM (2 years ago)
- Branches:
- ADT, arm-eh, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 53449a4
- Parents:
- 13fece5
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/ResolvExpr/CandidateFinder.cpp
r13fece5 r3e5dd913 212 212 // mark type variable and specialization cost of forall clause 213 213 convCost.incVar( function->forall.size() ); 214 for ( const ast::TypeDecl * td : function->forall ) { 215 convCost.decSpec( td->assertions.size() ); 216 } 214 convCost.decSpec( function->assertions.size() ); 217 215 218 216 return convCost; … … 223 221 ast::AssertionSet & need 224 222 ) { 225 for ( const ast::TypeDecl *tyvar : type->forall ) {226 unifiableVars[ tyvar->name ] = ast::TypeDecl::Data{ tyvar};227 for ( const ast::DeclWithType * assn : tyvar->assertions ) {228 need[ assn ].isUsed = true;229 }223 for ( auto & tyvar : type->forall ) { 224 unifiableVars[ *tyvar ] = ast::TypeDecl::Data{ tyvar->base }; 225 } 226 for ( auto & assn : type->assertions ) { 227 need[ assn ].isUsed = true; 230 228 } 231 229 } … … 953 951 auto inst = dynamic_cast< const ast::TypeInstType * >( funcResult ) 954 952 ) { 955 if ( const ast::EqvClass * clz = func->env.lookup( inst->name) ) {953 if ( const ast::EqvClass * clz = func->env.lookup( *inst ) ) { 956 954 if ( auto function = clz->bound.as< ast::FunctionType >() ) { 957 955 CandidateRef newFunc{ new Candidate{ *func } }; … … 1077 1075 assert( toType ); 1078 1076 toType = resolveTypeof( toType, symtab ); 1079 toType = SymTab::validateType( castExpr->location, toType, symtab );1077 // toType = SymTab::validateType( castExpr->location, toType, symtab ); 1080 1078 toType = adjustExprType( toType, tenv, symtab ); 1081 1079 … … 1162 1160 1163 1161 if(auto insttype = dynamic_cast<const ast::TypeInstType*>(expr)) { 1164 auto td = cand->env.lookup( insttype->name);1162 auto td = cand->env.lookup(*insttype); 1165 1163 if(!td) { continue; } 1166 1164 expr = td->bound.get(); … … 1568 1566 // calculate target type 1569 1567 const ast::Type * toType = resolveTypeof( initAlt.type, symtab ); 1570 toType = SymTab::validateType( initExpr->location, toType, symtab );1568 // toType = SymTab::validateType( initExpr->location, toType, symtab ); 1571 1569 toType = adjustExprType( toType, tenv, symtab ); 1572 1570 // The call to find must occur inside this loop, otherwise polymorphic return
Note: See TracChangeset
for help on using the changeset viewer.