Changeset 8d182b1 for src/ResolvExpr/PolyCost.cc
- Timestamp:
- Nov 14, 2023, 12:19:09 PM (23 months ago)
- Branches:
- master
- Children:
- 1ccae59, 89a8bab
- Parents:
- df8ba61a (diff), 5625427 (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. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/ResolvExpr/PolyCost.cc
rdf8ba61a r8d182b1 18 18 #include "AST/Type.hpp" 19 19 #include "AST/TypeEnvironment.hpp" 20 #include "Common/PassVisitor.h"21 #include "SymTab/Indexer.h" // for Indexer22 #include "SynTree/Type.h" // for TypeInstType, Type23 #include "TypeEnvironment.h" // for EqvClass, TypeEnvironment24 20 25 21 namespace ResolvExpr { 26 struct PolyCost {27 PolyCost( const TypeEnvironment &env, const SymTab::Indexer &indexer );28 22 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 } 59 60 // TODO: When the old PolyCost is torn out get rid of the _new suffix. 61 class PolyCost_new { 23 class PolyCost { 62 24 const ast::SymbolTable &symtab; 63 25 public: … … 65 27 const ast::TypeEnvironment &env_; 66 28 67 PolyCost _new( const ast::SymbolTable & symtab, const ast::TypeEnvironment & env )29 PolyCost( const ast::SymbolTable & symtab, const ast::TypeEnvironment & env ) 68 30 : symtab( symtab ), result( 0 ), env_( env ) {} 69 31 … … 86 48 const ast::Type * type, const ast::SymbolTable & symtab, const ast::TypeEnvironment & env 87 49 ) { 88 ast::Pass<PolyCost _new> costing( symtab, env );50 ast::Pass<PolyCost> costing( symtab, env ); 89 51 type->accept( costing ); 90 52 return (costing.core.result > 0) ? 1 : 0;
Note:
See TracChangeset
for help on using the changeset viewer.