Changes in / [0df292b:721f17a]


Ignore:
Location:
src/ResolvExpr
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/AlternativeFinder.cc

    r0df292b r721f17a  
    8989                };
    9090
    91                 /// Prunes a list of alternatives down to those that have the minimum conversion cost for a given return type; skips ambiguous interpretations
    9291                template< typename InputIterator, typename OutputIterator >
    9392                void pruneAlternatives( InputIterator begin, InputIterator end, OutputIterator out, const SymTab::Indexer &indexer ) {
     
    354353
    355354        bool AlternativeFinder::instantiateFunction( std::list< DeclarationWithType* >& formals, /*const*/ AltList &actuals, bool isVarArgs, OpenVarSet& openVars, TypeEnvironment &resultEnv, AssertionSet &resultNeed, AssertionSet &resultHave ) {
     355                std::list< TypeEnvironment > toBeDone;
    356356                simpleCombineEnvironments( actuals.begin(), actuals.end(), resultEnv );
    357357                // make sure we don't widen any existing bindings
  • src/ResolvExpr/AlternativeFinder.h

    r0df292b r721f17a  
    3030                AlternativeFinder( const SymTab::Indexer &indexer, const TypeEnvironment &env );
    3131                void find( Expression *expr, bool adjust = false );
    32                 /// Calls find with the adjust flag set; adjustment turns array and function types into equivalent pointer types
    3332                void findWithAdjustment( Expression *expr );
    3433                AltList &get_alternatives() { return alternatives; }
  • src/ResolvExpr/FindOpenVars.h

    r0df292b r721f17a  
    2121
    2222namespace ResolvExpr {
    23         // Updates open and closed variables and their associated assertions
    2423        void findOpenVars( Type *type, OpenVarSet &openVars, OpenVarSet &closedVars, AssertionSet &needAssertions, AssertionSet &haveAssertions, bool firstIsOpen );
    2524} // namespace ResolvExpr
  • src/ResolvExpr/RenameVars.cc

    r0df292b r721f17a  
    118118///     type->print( std::cout );
    119119///     std::cout << std::endl;
    120                         // copies current name mapping into new mapping
    121120                        mapStack.push_front( mapStack.front() );
    122                         // renames all "forall" type names to `_${level}_${name}'
    123121                        for ( std::list< TypeDecl* >::iterator i = type->get_forall().begin(); i != type->get_forall().end(); ++i ) {
    124122                                std::ostringstream output;
     
    127125                                mapStack.front()[ (*i)->get_name() ] = newname;
    128126                                (*i)->set_name( newname );
    129                                 // ditto for assertion names, the next level in
    130127                                level++;
    131128                                acceptAll( (*i)->get_assertions(), *this );
     
    135132
    136133        void RenameVars::typeAfter( Type *type ) {
    137                 // clears name mapping added by typeBefore()
    138134                if ( ! type->get_forall().empty() ) {
    139135                        mapStack.pop_front();
  • src/ResolvExpr/RenameVars.h

    r0df292b r721f17a  
    2525
    2626namespace ResolvExpr {
    27 
    28         /// Provides a consistent renaming of forall type names in a hierarchy by prefixing them with a unique "level" ID
    2927        class RenameVars : public Visitor {
    3028          public:
  • src/ResolvExpr/Unify.cc

    r0df292b r721f17a  
    7373        };
    7474
    75         /// Attempts an inexact unification of type1 and type2.
    76         /// Returns false if no such unification; if the types can be unified, sets common (unless they unify exactly and have identical type qualifiers)
    7775        bool unifyInexact( Type *type1, Type *type2, TypeEnvironment &env, AssertionSet &needAssertions, AssertionSet &haveAssertions, const OpenVarSet &openVars, WidenMode widenMode, const SymTab::Indexer &indexer, Type *&common );
    7876        bool unifyExact( Type *type1, Type *type2, TypeEnvironment &env, AssertionSet &needAssertions, AssertionSet &haveAssertions, const OpenVarSet &openVars, WidenMode widenMode, const SymTab::Indexer &indexer );
     
    150148                        if ( curClass.type ) {
    151149                                Type *common = 0;
    152                                 // attempt to unify equivalence class type (which has qualifiers stripped, so they must be restored) with the type to bind to
    153150                                std::auto_ptr< Type > newType( curClass.type->clone() );
    154151                                newType->get_qualifiers() = typeInst->get_qualifiers();
     
    283280                TypeEnvironment debugEnv( env );
    284281#endif
    285                 if ( type1->get_qualifiers() != type2->get_qualifiers() ) {
    286                         return false;
    287                 }
    288 
    289282                bool result;
    290283                TypeInstType *var1 = dynamic_cast< TypeInstType* >( type1 );
     
    299292                bool isopen1 = var1 && ( entry1 != openVars.end() );
    300293                bool isopen2 = var2 && ( entry2 != openVars.end() );
    301 
    302                 if ( isopen1 && isopen2 && entry1->second == entry2->second ) {
     294                if ( type1->get_qualifiers() != type2->get_qualifiers() ) {
     295                        return false;
     296                } else if ( isopen1 && isopen2 && entry1->second == entry2->second ) {
    303297                        result = bindVarToVar( var1, var2, entry1->second, env, needAssertions, haveAssertions, openVars, widenMode, indexer );
    304298                } else if ( isopen1 ) {
Note: See TracChangeset for help on using the changeset viewer.