Changes in src/ResolvExpr/PolyCost.cc [c6b4432:bccd70a]
- File:
-
- 1 edited
-
src/ResolvExpr/PolyCost.cc (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/ResolvExpr/PolyCost.cc
rc6b4432 rbccd70a 18 18 #include "AST/Type.hpp" 19 19 #include "AST/TypeEnvironment.hpp" 20 #include "Common/PassVisitor.h" 21 #include "SymTab/Indexer.h" // for Indexer 22 #include "SynTree/Type.h" // for TypeInstType, Type 23 #include "TypeEnvironment.h" // for EqvClass, TypeEnvironment 20 24 21 25 namespace ResolvExpr { 26 struct PolyCost { 27 PolyCost( const TypeEnvironment &env, const SymTab::Indexer &indexer ); 28 29 void previsit( TypeInstType * aggregateUseType ); 30 int result; 31 const TypeEnvironment &tenv; 32 const SymTab::Indexer &indexer; 33 }; 34 35 int polyCost( Type *type, const TypeEnvironment & env, const SymTab::Indexer &indexer ) { 36 PassVisitor<PolyCost> coster( env, indexer ); 37 type->accept( coster ); 38 return (coster.pass.result > 0) ? 1 : 0; 39 } 40 41 PolyCost::PolyCost( const TypeEnvironment & env, const SymTab::Indexer & indexer ) : result( 0 ), tenv( env ), indexer( indexer ) { 42 } 43 44 void PolyCost::previsit(TypeInstType * typeInst) { 45 if ( const EqvClass *eqvClass = tenv.lookup( typeInst->name ) ) { 46 if ( eqvClass->type ) { 47 if ( TypeInstType * otherTypeInst = dynamic_cast< TypeInstType* >( eqvClass->type ) ) { 48 if ( indexer.lookupType( otherTypeInst->name ) ) { 49 // bound to opaque type 50 result += 1; 51 } // if 52 } else { 53 // bound to concrete type 54 result += 1; 55 } // if 56 } // if 57 } // if 58 } 22 59 23 60 // TODO: When the old PolyCost is torn out get rid of the _new suffix.
Note:
See TracChangeset
for help on using the changeset viewer.