Changes in / [7e23d0a:5189888]


Ignore:
Location:
src
Files:
4 deleted
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/Unify.cc

    r7e23d0a r5189888  
    6161
    6262                template< typename RefType > void handleRefType( RefType *inst, Type *other );
    63                 template< typename RefType > void handleGenericRefType( RefType *inst, Type *other );
    6463
    6564                bool result;
     
    497496
    498497        template< typename RefType >
    499         void Unify::handleRefType( RefType *inst, Type *other ) {
    500                 // check that other type is compatible and named the same
     498        void Unify::handleRefType( RefType *inst, Type *other ) { 
    501499                RefType *otherStruct = dynamic_cast< RefType* >( other );
    502500                result = otherStruct && inst->get_name() == otherStruct->get_name();
    503         }
    504 
    505         template< typename RefType >
    506         void Unify::handleGenericRefType( RefType *inst, Type *other ) {
    507                 // Check that other type is compatible and named the same
    508                 handleRefType( inst, other );
    509                 if ( ! result ) return;
    510                 // Check that parameters of type unify, if any
    511                 std::list< Expression* > params = inst->get_parameters();
    512                 if ( ! params.empty() ) {
    513                         std::list< TypeDecl* > *baseParams = inst->get_baseParameters();
    514                         if ( ! baseParams ) {
    515                                 result = false;
    516                                 return;
    517                         }
    518                         std::list< Expression* >::const_iterator it = params.begin();
    519                         std::list< TypeDecl* >::const_iterator baseIt = baseParams->begin();
    520                         while ( it != params.end() && baseIt != baseParams->end()) {
    521                                 TypeExpr *param = dynamic_cast< TypeExpr* >(*it);
    522                                 assert(param && "Aggregate parameters should be type expressions");
    523                                 TypeInstType baseType(Type::Qualifiers(), (*baseIt)->get_name(), *baseIt);
    524                                 if ( ! unifyExact( param->get_type(), &baseType, env, needAssertions, haveAssertions, openVars, WidenMode(false, false), indexer ) ) {
    525                                         result = false;
    526                                         return;
    527                                 }
    528                                
    529                                 ++it;
    530                                 ++baseIt;
    531                         }
    532                         if ( it != params.end() || baseIt != baseParams->end() ) {
    533                                 result = false;
    534                         }
    535                 }
    536         }
     501        } 
    537502
    538503        void Unify::visit(StructInstType *structInst) {
    539                 handleGenericRefType( structInst, type2 );
     504                handleRefType( structInst, type2 );
    540505        }
    541506
    542507        void Unify::visit(UnionInstType *unionInst) {
    543                 handleGenericRefType( unionInst, type2 );
     508                handleRefType( unionInst, type2 );
    544509        }
    545510
Note: See TracChangeset for help on using the changeset viewer.