Changeset d76c588 for src/ResolvExpr
- Timestamp:
- May 30, 2019, 4:10:24 PM (5 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 8d70648
- Parents:
- eba615c
- Location:
- src/ResolvExpr
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
src/ResolvExpr/AlternativeFinder.cc
reba615c rd76c588 28 28 #include "Alternative.h" // for AltList, Alternative 29 29 #include "AlternativeFinder.h" 30 #include "AST/Expr.hpp" 31 #include "AST/Type.hpp" 30 32 #include "Common/SemanticError.h" // for SemanticError 31 33 #include "Common/utility.h" // for deleteAll, printAll, CodeLocation … … 222 224 cost.incReference(); 223 225 } 226 } 227 228 const ast::Expr * referenceToRvalueConversion( const ast::Expr * expr, Cost & cost ) { 229 if ( expr->result.as< ast::ReferenceType >() ) { 230 // cast away reference from expr 231 cost.incReference(); 232 return new ast::CastExpr{ expr->location, expr, expr->result->stripReferences() }; 233 } 234 235 return expr; 224 236 } 225 237 -
src/ResolvExpr/ResolveAssertions.cc
reba615c rd76c588 30 30 #include "Common/Indenter.h" // for Indenter 31 31 #include "Common/utility.h" // for sort_mins 32 #include "GenPoly/GenPoly.h" // for getFunctionType 32 33 #include "ResolvExpr/RenameVars.h" // for renameTyVars 33 34 #include "SymTab/Indexer.h" // for Indexer … … 154 155 Cost k = Cost::zero; 155 156 for ( const auto& assn : x.assns ) { 157 // compute conversion cost from satisfying decl to assertion 156 158 k += computeConversionCost( 157 159 assn.match.adjType, assn.decl->get_type(), indexer, x.env ); 158 160 159 161 // mark vars+specialization cost on function-type assertions 160 Type* assnType = assn.match.cdata.id->get_type(); 161 FunctionType* func; 162 if ( PointerType* ptr = dynamic_cast< PointerType* >( assnType ) ) { 163 func = dynamic_cast< FunctionType* >( ptr->base ); 164 } else { 165 func = dynamic_cast< FunctionType* >( assnType ); 166 } 162 FunctionType* func = GenPoly::getFunctionType( assn.match.cdata.id->get_type() ); 167 163 if ( ! func ) continue; 168 164 -
src/ResolvExpr/Resolver.cc
reba615c rd76c588 7 7 // Resolver.cc -- 8 8 // 9 // Author : Richard C. Bilson9 // Author : Aaron B. Moss 10 10 // Created On : Sun May 17 12:17:01 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Tue Feb 19 18:09:56201913 // Update Count : 24 011 // Last Modified By : Aaron B. Moss 12 // Last Modified On : Wed May 29 11:00:00 2019 13 // Update Count : 241 14 14 // 15 15 … … 21 21 #include "Alternative.h" // for Alternative, AltList 22 22 #include "AlternativeFinder.h" // for AlternativeFinder, resolveIn... 23 #include "CurrentObject.h" // for CurrentObject 24 #include "RenameVars.h" // for RenameVars, global_renamer 25 #include "Resolver.h" 26 #include "ResolvMode.h" // for ResolvMode 27 #include "typeops.h" // for extractResultType 28 #include "Unify.h" // for unify 29 #include "AST/Pass.hpp" 30 #include "AST/SymbolTable.hpp" 23 31 #include "Common/PassVisitor.h" // for PassVisitor 24 32 #include "Common/SemanticError.h" // for SemanticError 25 33 #include "Common/utility.h" // for ValueGuard, group_iterate 26 #include "CurrentObject.h" // for CurrentObject27 34 #include "InitTweak/GenInit.h" 28 35 #include "InitTweak/InitTweak.h" // for isIntrinsicSingleArgCallStmt 29 #include "RenameVars.h" // for RenameVars, global_renamer30 36 #include "ResolvExpr/TypeEnvironment.h" // for TypeEnvironment 31 #include "Resolver.h"32 #include "ResolvMode.h" // for ResolvMode33 37 #include "SymTab/Autogen.h" // for SizeType 34 38 #include "SymTab/Indexer.h" // for Indexer … … 41 45 #include "SynTree/Visitor.h" // for acceptAll, maybeAccept 42 46 #include "Tuples/Tuples.h" 43 #include "typeops.h" // for extractResultType44 #include "Unify.h" // for unify45 47 46 48 using namespace std; 47 49 48 50 namespace ResolvExpr { 49 struct Resolver final : public WithIndexer, public WithGuards, public WithVisitorRef<Resolver>, public WithShortCircuiting, public WithStmtsToAdd {50 Resolver () {}51 Resolver ( const SymTab::Indexer & other ) {51 struct Resolver_old final : public WithIndexer, public WithGuards, public WithVisitorRef<Resolver_old>, public WithShortCircuiting, public WithStmtsToAdd { 52 Resolver_old() {} 53 Resolver_old( const SymTab::Indexer & other ) { 52 54 indexer = other; 53 55 } … … 100 102 101 103 void resolve( std::list< Declaration * > translationUnit ) { 102 PassVisitor<Resolver > resolver;104 PassVisitor<Resolver_old> resolver; 103 105 acceptAll( translationUnit, resolver ); 104 106 } 105 107 106 108 void resolveDecl( Declaration * decl, const SymTab::Indexer & indexer ) { 107 PassVisitor<Resolver > resolver( indexer );109 PassVisitor<Resolver_old> resolver( indexer ); 108 110 maybeAccept( decl, resolver ); 109 111 } … … 401 403 } 402 404 403 void Resolver ::previsit( ObjectDecl * objectDecl ) {405 void Resolver_old::previsit( ObjectDecl * objectDecl ) { 404 406 // To handle initialization of routine pointers, e.g., int (*fp)(int) = foo(), means that 405 407 // class-variable initContext is changed multiple time because the LHS is analysed twice. … … 417 419 418 420 template< typename PtrType > 419 void Resolver ::handlePtrType( PtrType * type ) {421 void Resolver_old::handlePtrType( PtrType * type ) { 420 422 if ( type->get_dimension() ) { 421 423 findSingleExpression( type->dimension, SymTab::SizeType->clone(), indexer ); … … 423 425 } 424 426 425 void Resolver ::previsit( ArrayType * at ) {427 void Resolver_old::previsit( ArrayType * at ) { 426 428 handlePtrType( at ); 427 429 } 428 430 429 void Resolver ::previsit( PointerType * pt ) {431 void Resolver_old::previsit( PointerType * pt ) { 430 432 handlePtrType( pt ); 431 433 } 432 434 433 void Resolver ::previsit( FunctionDecl * functionDecl ) {435 void Resolver_old::previsit( FunctionDecl * functionDecl ) { 434 436 #if 0 435 437 std::cerr << "resolver visiting functiondecl "; … … 441 443 } 442 444 443 void Resolver ::postvisit( FunctionDecl * functionDecl ) {445 void Resolver_old::postvisit( FunctionDecl * functionDecl ) { 444 446 // default value expressions have an environment which shouldn't be there and trips up 445 447 // later passes. … … 456 458 } 457 459 458 void Resolver ::previsit( EnumDecl * ) {460 void Resolver_old::previsit( EnumDecl * ) { 459 461 // in case we decide to allow nested enums 460 462 GuardValue( inEnumDecl ); … … 462 464 } 463 465 464 void Resolver ::previsit( StaticAssertDecl * assertDecl ) {466 void Resolver_old::previsit( StaticAssertDecl * assertDecl ) { 465 467 findIntegralExpression( assertDecl->condition, indexer ); 466 468 } 467 469 468 void Resolver ::previsit( ExprStmt * exprStmt ) {470 void Resolver_old::previsit( ExprStmt * exprStmt ) { 469 471 visit_children = false; 470 472 assertf( exprStmt->expr, "ExprStmt has null Expression in resolver" ); … … 472 474 } 473 475 474 void Resolver ::previsit( AsmExpr * asmExpr ) {476 void Resolver_old::previsit( AsmExpr * asmExpr ) { 475 477 visit_children = false; 476 478 findVoidExpression( asmExpr->operand, indexer ); … … 480 482 } 481 483 482 void Resolver ::previsit( AsmStmt * asmStmt ) {484 void Resolver_old::previsit( AsmStmt * asmStmt ) { 483 485 visit_children = false; 484 486 acceptAll( asmStmt->get_input(), *visitor ); … … 486 488 } 487 489 488 void Resolver ::previsit( IfStmt * ifStmt ) {490 void Resolver_old::previsit( IfStmt * ifStmt ) { 489 491 findIntegralExpression( ifStmt->condition, indexer ); 490 492 } 491 493 492 void Resolver ::previsit( WhileStmt * whileStmt ) {494 void Resolver_old::previsit( WhileStmt * whileStmt ) { 493 495 findIntegralExpression( whileStmt->condition, indexer ); 494 496 } 495 497 496 void Resolver ::previsit( ForStmt * forStmt ) {498 void Resolver_old::previsit( ForStmt * forStmt ) { 497 499 if ( forStmt->condition ) { 498 500 findIntegralExpression( forStmt->condition, indexer ); … … 504 506 } 505 507 506 void Resolver ::previsit( SwitchStmt * switchStmt ) {508 void Resolver_old::previsit( SwitchStmt * switchStmt ) { 507 509 GuardValue( currentObject ); 508 510 findIntegralExpression( switchStmt->condition, indexer ); … … 511 513 } 512 514 513 void Resolver ::previsit( CaseStmt * caseStmt ) {515 void Resolver_old::previsit( CaseStmt * caseStmt ) { 514 516 if ( caseStmt->condition ) { 515 517 std::list< InitAlternative > initAlts = currentObject.getOptions(); … … 530 532 } 531 533 532 void Resolver ::previsit( BranchStmt * branchStmt ) {534 void Resolver_old::previsit( BranchStmt * branchStmt ) { 533 535 visit_children = false; 534 536 // must resolve the argument for a computed goto … … 541 543 } 542 544 543 void Resolver ::previsit( ReturnStmt * returnStmt ) {545 void Resolver_old::previsit( ReturnStmt * returnStmt ) { 544 546 visit_children = false; 545 547 if ( returnStmt->expr ) { … … 548 550 } 549 551 550 void Resolver ::previsit( ThrowStmt * throwStmt ) {552 void Resolver_old::previsit( ThrowStmt * throwStmt ) { 551 553 visit_children = false; 552 554 // TODO: Replace *exception type with &exception type. … … 560 562 } 561 563 562 void Resolver ::previsit( CatchStmt * catchStmt ) {564 void Resolver_old::previsit( CatchStmt * catchStmt ) { 563 565 if ( catchStmt->cond ) { 564 566 findSingleExpression( catchStmt->cond, new BasicType( noQualifiers, BasicType::Bool ), indexer ); … … 575 577 } 576 578 577 void Resolver ::previsit( WaitForStmt * stmt ) {579 void Resolver_old::previsit( WaitForStmt * stmt ) { 578 580 visit_children = false; 579 581 … … 781 783 } 782 784 783 void Resolver ::previsit( SingleInit * singleInit ) {785 void Resolver_old::previsit( SingleInit * singleInit ) { 784 786 visit_children = false; 785 787 // resolve initialization using the possibilities as determined by the currentObject cursor … … 833 835 } 834 836 835 void Resolver ::previsit( ListInit * listInit ) {837 void Resolver_old::previsit( ListInit * listInit ) { 836 838 visit_children = false; 837 839 // move cursor into brace-enclosed initializer-list … … 868 870 869 871 // ConstructorInit - fall back on C-style initializer 870 void Resolver ::fallbackInit( ConstructorInit * ctorInit ) {872 void Resolver_old::fallbackInit( ConstructorInit * ctorInit ) { 871 873 // could not find valid constructor, or found an intrinsic constructor 872 874 // fall back on C-style initializer … … 881 883 void resolveCtorInit( ConstructorInit * ctorInit, const SymTab::Indexer & indexer ) { 882 884 assert( ctorInit ); 883 PassVisitor<Resolver > resolver( indexer );885 PassVisitor<Resolver_old> resolver( indexer ); 884 886 ctorInit->accept( resolver ); 885 887 } … … 887 889 void resolveStmtExpr( StmtExpr * stmtExpr, const SymTab::Indexer & indexer ) { 888 890 assert( stmtExpr ); 889 PassVisitor<Resolver > resolver( indexer );891 PassVisitor<Resolver_old> resolver( indexer ); 890 892 stmtExpr->accept( resolver ); 891 893 stmtExpr->computeResult(); … … 893 895 } 894 896 895 void Resolver ::previsit( ConstructorInit * ctorInit ) {897 void Resolver_old::previsit( ConstructorInit * ctorInit ) { 896 898 visit_children = false; 897 899 // xxx - fallback init has been removed => remove fallbackInit function and remove complexity from FixInit and remove C-init from ConstructorInit … … 927 929 // } 928 930 } 931 932 /////////////////////////////////////////////////////////////////////////// 933 // 934 // *** NEW RESOLVER *** 935 // 936 /////////////////////////////////////////////////////////////////////////// 937 938 class Resolver_new final 939 : public ast::WithIndexer, public ast::WithGuards, public ast::WithVisitorRef<Resolver_new>, 940 public ast::WithShortCircuiting, public ast::WithStmtsToAdd<> { 941 942 public: 943 Resolver_new() = default; 944 Resolver_new( const ast::SymbolTable & syms ) { /*symtab = syms;*/ } 945 946 void previsit( ast::FunctionDecl * functionDecl ); 947 ast::DeclWithType * postvisit( ast::FunctionDecl * functionDecl ); 948 void previsit( ast::ObjectDecl * objectDecl ); 949 void previsit( ast::EnumDecl * enumDecl ); 950 void previsit( ast::StaticAssertDecl * assertDecl ); 951 952 void previsit( ast::ArrayType * at ); 953 void previsit( ast::PointerType * pt ); 954 955 void previsit( ast::ExprStmt * exprStmt ); 956 void previsit( ast::AsmExpr * asmExpr ); 957 void previsit( ast::AsmStmt * asmStmt ); 958 void previsit( ast::IfStmt * ifStmt ); 959 void previsit( ast::WhileStmt * whileStmt ); 960 void previsit( ast::ForStmt * forStmt ); 961 void previsit( ast::SwitchStmt * switchStmt ); 962 void previsit( ast::CaseStmt * caseStmt ); 963 void previsit( ast::BranchStmt * branchStmt ); 964 void previsit( ast::ReturnStmt * returnStmt ); 965 void previsit( ast::ThrowStmt * throwStmt ); 966 void previsit( ast::CatchStmt * catchStmt ); 967 void previsit( ast::WaitForStmt * stmt ); 968 969 void previsit( ast::SingleInit * singleInit ); 970 void previsit( ast::ListInit * listInit ); 971 void previsit( ast::ConstructorInit * ctorInit ); 972 }; 973 974 void resolve( std::list< ast::ptr<ast::Decl> >& translationUnit ) { 975 ast::Pass<Resolver_new> resolver; 976 accept_all( translationUnit, resolver ); 977 } 978 979 void previsit( ast::FunctionDecl * functionDecl ) { 980 #warning unimplemented; Resolver port in progress 981 (void)functionDecl; 982 assert(false); 983 } 984 985 ast::DeclWithType * postvisit( ast::FunctionDecl * functionDecl ) { 986 #warning unimplemented; Resolver port in progress 987 (void)functionDecl; 988 assert(false); 989 return nullptr; 990 } 991 992 void previsit( ast::ObjectDecl * objectDecl ) { 993 #warning unimplemented; Resolver port in progress 994 (void)objectDecl; 995 assert(false); 996 } 997 998 void previsit( ast::EnumDecl * enumDecl ) { 999 #warning unimplemented; Resolver port in progress 1000 (void)enumDecl; 1001 assert(false); 1002 } 1003 1004 void previsit( ast::StaticAssertDecl * assertDecl ) { 1005 #warning unimplemented; Resolver port in progress 1006 (void)assertDecl; 1007 assert(false); 1008 } 1009 1010 void previsit( ast::ArrayType * at ) { 1011 #warning unimplemented; Resolver port in progress 1012 (void)at; 1013 assert(false); 1014 } 1015 1016 void previsit( ast::PointerType * pt ) { 1017 #warning unimplemented; Resolver port in progress 1018 (void)pt; 1019 assert(false); 1020 } 1021 1022 void previsit( ast::ExprStmt * exprStmt ) { 1023 #warning unimplemented; Resolver port in progress 1024 (void)exprStmt; 1025 assert(false); 1026 } 1027 1028 void previsit( ast::AsmExpr * asmExpr ) { 1029 #warning unimplemented; Resolver port in progress 1030 (void)asmExpr; 1031 assert(false); 1032 } 1033 1034 void previsit( ast::AsmStmt * asmStmt ) { 1035 #warning unimplemented; Resolver port in progress 1036 (void)asmStmt; 1037 assert(false); 1038 } 1039 1040 void previsit( ast::IfStmt * ifStmt ) { 1041 #warning unimplemented; Resolver port in progress 1042 (void)ifStmt; 1043 assert(false); 1044 } 1045 1046 void previsit( ast::WhileStmt * whileStmt ) { 1047 #warning unimplemented; Resolver port in progress 1048 (void)whileStmt; 1049 assert(false); 1050 } 1051 1052 void previsit( ast::ForStmt * forStmt ) { 1053 #warning unimplemented; Resolver port in progress 1054 (void)forStmt; 1055 assert(false); 1056 } 1057 1058 void previsit( ast::SwitchStmt * switchStmt ) { 1059 #warning unimplemented; Resolver port in progress 1060 (void)switchStmt; 1061 assert(false); 1062 } 1063 1064 void previsit( ast::CaseStmt * caseStmt ) { 1065 #warning unimplemented; Resolver port in progress 1066 (void)caseStmt; 1067 assert(false); 1068 } 1069 1070 void previsit( ast::BranchStmt * branchStmt ) { 1071 #warning unimplemented; Resolver port in progress 1072 (void)branchStmt; 1073 assert(false); 1074 } 1075 1076 void previsit( ast::ReturnStmt * returnStmt ) { 1077 #warning unimplemented; Resolver port in progress 1078 (void)returnStmt; 1079 assert(false); 1080 } 1081 1082 void previsit( ast::ThrowStmt * throwStmt ) { 1083 #warning unimplemented; Resolver port in progress 1084 (void)throwStmt; 1085 assert(false); 1086 } 1087 1088 void previsit( ast::CatchStmt * catchStmt ) { 1089 #warning unimplemented; Resolver port in progress 1090 (void)catchStmt; 1091 assert(false); 1092 } 1093 1094 void previsit( ast::WaitForStmt * stmt ) { 1095 #warning unimplemented; Resolver port in progress 1096 (void)stmt; 1097 assert(false); 1098 } 1099 1100 void previsit( ast::SingleInit * singleInit ) { 1101 #warning unimplemented; Resolver port in progress 1102 (void)singleInit; 1103 assert(false); 1104 } 1105 1106 void previsit( ast::ListInit * listInit ) { 1107 #warning unimplemented; Resolver port in progress 1108 (void)listInit; 1109 assert(false); 1110 } 1111 1112 void previsit( ast::ConstructorInit * ctorInit ) { 1113 #warning unimplemented; Resolver port in progress 1114 (void)ctorInit; 1115 assert(false); 1116 } 1117 929 1118 } // namespace ResolvExpr 930 1119 -
src/ResolvExpr/Resolver.h
reba615c rd76c588 16 16 #pragma once 17 17 18 #include <list> // for list 18 #include <list> // for list 19 #include <AST/Node.hpp> // for ptr 19 20 20 21 class ConstructorInit; … … 23 24 class StmtExpr; 24 25 namespace SymTab { 25 class Indexer; 26 } // namespace SymTab 26 class Indexer; 27 } // namespace SymTab 28 29 namespace ast { 30 class Decl; 31 } // namespace ast 27 32 28 33 namespace ResolvExpr { … … 40 45 /// Resolves with-stmts and with-clauses on functions 41 46 void resolveWithExprs( std::list< Declaration * > & translationUnit ); 47 48 /// Checks types and binds syntactic constructs to typed representations 49 void resolve( std::list< ast::ptr<ast::Decl> >& translationUnit ); 42 50 } // namespace ResolvExpr 43 51 -
src/ResolvExpr/Unify.cc
reba615c rd76c588 14 14 // 15 15 16 #include <cassert> // for assertf, assert17 #include <iterator> // for back_insert_iterator, back_inserter18 #include <map> // for _Rb_tree_const_iterator, _Rb_tree_i...19 #include <memory> // for unique_ptr20 #include <set> // for set21 #include <string> // for string, operator==, operator!=, bas...22 #include <utility> // for pair, move16 #include <cassert> // for assertf, assert 17 #include <iterator> // for back_insert_iterator, back_inserter 18 #include <map> // for _Rb_tree_const_iterator, _Rb_tree_i... 19 #include <memory> // for unique_ptr 20 #include <set> // for set 21 #include <string> // for string, operator==, operator!=, bas... 22 #include <utility> // for pair, move 23 23 #include <vector> 24 24 25 25 #include "AST/Node.hpp" 26 26 #include "AST/Type.hpp" 27 #include "Common/PassVisitor.h" // for PassVisitor 28 #include "FindOpenVars.h" // for findOpenVars 29 #include "Parser/LinkageSpec.h" // for C 30 #include "SynTree/Constant.h" // for Constant 31 #include "SynTree/Declaration.h" // for TypeDecl, TypeDecl::Data, Declarati... 32 #include "SynTree/Expression.h" // for TypeExpr, Expression, ConstantExpr 33 #include "SynTree/Mutator.h" // for Mutator 34 #include "SynTree/Type.h" // for Type, TypeInstType, FunctionType 35 #include "SynTree/Visitor.h" // for Visitor 36 #include "Tuples/Tuples.h" // for isTtype 37 #include "TypeEnvironment.h" // for EqvClass, AssertionSet, OpenVarSet 27 #include "AST/TypeEnvironment.hpp" 28 #include "Common/PassVisitor.h" // for PassVisitor 29 #include "FindOpenVars.h" // for findOpenVars 30 #include "Parser/LinkageSpec.h" // for C 31 #include "SynTree/Constant.h" // for Constant 32 #include "SynTree/Declaration.h" // for TypeDecl, TypeDecl::Data, Declarati... 33 #include "SynTree/Expression.h" // for TypeExpr, Expression, ConstantExpr 34 #include "SynTree/Mutator.h" // for Mutator 35 #include "SynTree/Type.h" // for Type, TypeInstType, FunctionType 36 #include "SynTree/Visitor.h" // for Visitor 37 #include "Tuples/Tuples.h" // for isTtype 38 #include "TypeEnvironment.h" // for EqvClass, AssertionSet, OpenVarSet 38 39 #include "Unify.h" 39 #include "typeops.h" // for flatten, occurs, commonType40 #include "typeops.h" // for flatten, occurs, commonType 40 41 41 42 namespace SymTab { … … 106 107 delete newSecond; 107 108 return result; 109 } 110 111 bool typesCompatible( 112 const ast::Type * first, const ast::Type * second, const ast::SymbolTable & symtab, 113 const ast::TypeEnvironment & env ) { 114 #warning unimplemented 115 assert((first, second, symtab, env, false)); 116 return false; 108 117 } 109 118 … … 130 139 delete newSecond; 131 140 return result; 141 } 142 143 bool typesCompatibleIgnoreQualifiers( 144 const ast::Type * first, const ast::Type * second, const ast::SymbolTable & symtab, 145 const ast::TypeEnvironment & env ) { 146 #warning unimplemented 147 assert((first, second, symtab, env, false)); 148 return false; 132 149 } 133 150 … … 263 280 } 264 281 282 bool unifyInexact( 283 const ast::Type * type1, const ast::Type * type2, ast::TypeEnvironment & env, 284 ast::AssertionSet & need, ast::AssertionSet & have, const ast::OpenVarSet & openVars, 285 WidenMode widenMode, const ast::SymbolTable & symtab, const ast::Type *& common ) { 286 #warning unimplemented 287 assert((type1, type2, env, need, have, openVars, widenMode, symtab, common, false)); 288 return false; 289 } 290 265 291 Unify::Unify( Type *type2, TypeEnvironment &env, AssertionSet &needAssertions, AssertionSet &haveAssertions, const OpenVarSet &openVars, WidenMode widenMode, const SymTab::Indexer &indexer ) 266 292 : result( false ), type2( type2 ), env( env ), needAssertions( needAssertions ), haveAssertions( haveAssertions ), openVars( openVars ), widenMode( widenMode ), indexer( indexer ) { -
src/ResolvExpr/Unify.h
reba615c rd76c588 18 18 #include <list> // for list 19 19 20 #include "AST/TypeEnvironment.hpp" // for TypeEnvironment, AssertionSet, OpenVarSet 20 21 #include "Common/utility.h" // for deleteAll 21 22 #include "SynTree/Declaration.h" // for TypeDecl, TypeDecl::Data 22 23 #include "TypeEnvironment.h" // for AssertionSet, OpenVarSet 23 #include "WidenMode.h" // for WidenMode24 #include "WidenMode.h" // for WidenMode 24 25 25 26 class Type; 26 27 class TypeInstType; 27 28 namespace SymTab { 28 class Indexer; 29 } // namespace SymTab 29 class Indexer; 30 } 31 32 namespace ast { 33 class SymbolTable; 34 class Type; 35 } 30 36 31 37 namespace ResolvExpr { … … 62 68 } 63 69 70 bool unifyInexact( 71 const ast::Type * type1, const ast::Type * type2, ast::TypeEnvironment & env, 72 ast::AssertionSet & need, ast::AssertionSet & have, const ast::OpenVarSet & openVars, 73 WidenMode widenMode, const ast::SymbolTable & symtab, const ast::Type *& common ); 74 64 75 } // namespace ResolvExpr 65 76 -
src/ResolvExpr/typeops.h
reba615c rd76c588 18 18 #include <vector> 19 19 20 #include "AST/Fwd.hpp" 20 21 #include "AST/Node.hpp" 22 #include "AST/SymbolTable.hpp" 21 23 #include "AST/Type.hpp" 24 #include "AST/TypeEnvironment.hpp" 22 25 #include "SynTree/SynTree.h" 23 26 #include "SynTree/Type.h" … … 99 102 } 100 103 104 bool typesCompatible( 105 const ast::Type *, const ast::Type *, const ast::SymbolTable &, 106 const ast::TypeEnvironment & env = {} ); 107 108 bool typesCompatibleIgnoreQualifiers( 109 const ast::Type *, const ast::Type *, const ast::SymbolTable &, 110 const ast::TypeEnvironment & env = {} ); 111 101 112 /// creates the type represented by the list of returnVals in a FunctionType. The caller owns the return value. 102 113 Type * extractResultType( FunctionType * functionType ); … … 115 126 // in Occurs.cc 116 127 bool occurs( Type *type, std::string varName, const TypeEnvironment &env ); 128 // new AST version in TypeEnvironment.cpp (only place it was used in old AST) 117 129 118 130 template<typename Iter> … … 127 139 // in AlternativeFinder.cc 128 140 void referenceToRvalueConversion( Expression *& expr, Cost & cost ); 141 const ast::Expr * referenceToRvalueConversion( const ast::Expr * expr, Cost & cost ); 129 142 130 143 // flatten tuple type into list of types
Note: See TracChangeset
for help on using the changeset viewer.