Ignore:
Timestamp:
Aug 16, 2016, 3:07:21 PM (8 years ago)
Author:
Rob Schluntz <rschlunt@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
04cdd9b
Parents:
04273e9
git-author:
Rob Schluntz <rschlunt@…> (08/15/16 17:19:40)
git-committer:
Rob Schluntz <rschlunt@…> (08/16/16 15:07:21)
Message:

added comparator to more intelligently order assertions for resolution and added length checks to short circuit function type unification

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/Unify.cc

    r04273e9 r03da511  
    484484                FunctionType *otherFunction = dynamic_cast< FunctionType* >( type2 );
    485485                if ( otherFunction && functionType->get_isVarArgs() == otherFunction->get_isVarArgs() ) {
    486 
    487                         if ( unifyDeclList( functionType->get_parameters().begin(), functionType->get_parameters().end(), otherFunction->get_parameters().begin(), otherFunction->get_parameters().end(), env, needAssertions, haveAssertions, openVars, indexer ) ) {
    488 
    489                                 if ( unifyDeclList( functionType->get_returnVals().begin(), functionType->get_returnVals().end(), otherFunction->get_returnVals().begin(), otherFunction->get_returnVals().end(), env, needAssertions, haveAssertions, openVars, indexer ) ) {
    490 
    491                                         markAssertions( haveAssertions, needAssertions, functionType );
    492                                         markAssertions( haveAssertions, needAssertions, otherFunction );
    493 
    494                                         result = true;
     486                        if ( functionType->get_parameters().size() == otherFunction->get_parameters().size() && functionType->get_returnVals().size() == otherFunction->get_returnVals().size() ) {
     487                                if ( unifyDeclList( functionType->get_parameters().begin(), functionType->get_parameters().end(), otherFunction->get_parameters().begin(), otherFunction->get_parameters().end(), env, needAssertions, haveAssertions, openVars, indexer ) ) {
     488                                        if ( unifyDeclList( functionType->get_returnVals().begin(), functionType->get_returnVals().end(), otherFunction->get_returnVals().begin(), otherFunction->get_returnVals().end(), env, needAssertions, haveAssertions, openVars, indexer ) ) {
     489
     490                                                markAssertions( haveAssertions, needAssertions, functionType );
     491                                                markAssertions( haveAssertions, needAssertions, otherFunction );
     492
     493                                                result = true;
     494                                        } // if
    495495                                } // if
    496496                        } // if
Note: See TracChangeset for help on using the changeset viewer.