Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/ConversionCost.cc

    r0c6596f r5ccb10d  
    1515
    1616#include "ConversionCost.h"
    17 
    18 #include <cassert>                       // for assert
    19 #include <list>                          // for list, list<>::const_iterator
    20 #include <string>                        // for operator==, string
    21 
    22 #include "ResolvExpr/Cost.h"             // for Cost
    23 #include "ResolvExpr/TypeEnvironment.h"  // for EqvClass, TypeEnvironment
    24 #include "SymTab/Indexer.h"              // for Indexer
    25 #include "SynTree/Declaration.h"         // for TypeDecl, NamedTypeDecl
    26 #include "SynTree/Type.h"                // for Type, BasicType, TypeInstType
    27 #include "typeops.h"                     // for typesCompatibleIgnoreQualifiers
     17#include "typeops.h"
     18#include "SynTree/Type.h"
     19#include "SynTree/Visitor.h"
     20#include "SymTab/Indexer.h"
    2821
    2922namespace ResolvExpr {
     
    4033#define PRINT(x)
    4134#endif
     35
    4236        Cost conversionCost( Type *src, Type *dest, const SymTab::Indexer &indexer, const TypeEnvironment &env ) {
    4337                if ( TypeInstType *destAsTypeInst = dynamic_cast< TypeInstType* >( dest ) ) {
     
    7771                } else if ( ReferenceType * refType = dynamic_cast< ReferenceType * > ( dest ) ) {
    7872                        PRINT( std::cerr << "conversionCost: dest is reference" << std::endl; )
    79                         return convertToReferenceCost( src, refType, indexer, env, [](Type * t1, Type * t2, const TypeEnvironment & env, const SymTab::Indexer &){
    80                                 return ptrsAssignable( t1, t2, env );
    81                         });
     73                        return convertToReferenceCost( src, refType, indexer, env );
    8274                } else {
    8375                        ConversionCost converter( dest, indexer, env );
     
    9183        }
    9284
    93         Cost convertToReferenceCost( Type * src, Type * dest, int diff, const SymTab::Indexer & indexer, const TypeEnvironment & env, PtrsFunction func ) {
     85        Cost convertToReferenceCost( Type * src, Type * dest, int diff, const SymTab::Indexer & indexer, const TypeEnvironment & env ) {
    9486                PRINT( std::cerr << "convert to reference cost..." << std::endl; )
    9587                if ( diff > 0 ) {
    9688                        // TODO: document this
    97                         Cost cost = convertToReferenceCost( safe_dynamic_cast< ReferenceType * >( src )->get_base(), dest, diff-1, indexer, env, func );
     89                        Cost cost = convertToReferenceCost( safe_dynamic_cast< ReferenceType * >( src )->get_base(), dest, diff-1, indexer, env );
    9890                        cost.incReference();
    9991                        return cost;
    10092                } else if ( diff < -1 ) {
    10193                        // TODO: document this
    102                         Cost cost = convertToReferenceCost( src, safe_dynamic_cast< ReferenceType * >( dest )->get_base(), diff+1, indexer, env, func );
     94                        Cost cost = convertToReferenceCost( src, safe_dynamic_cast< ReferenceType * >( dest )->get_base(), diff+1, indexer, env );
    10395                        cost.incReference();
    10496                        return cost;
     
    111103                                        return Cost::safe;
    112104                                } else {  // xxx - this discards reference qualifiers from consideration -- reducing qualifiers is a safe conversion; is this right?
    113                                         int assignResult = func( srcAsRef->get_base(), destAsRef->get_base(), env, indexer );
     105                                        int assignResult = ptrsAssignable( srcAsRef->get_base(), destAsRef->get_base(), env );
    114106                                        PRINT( std::cerr << "comparing references: " << assignResult << " " << srcAsRef << " " << destAsRef << std::endl; )
    115107                                        if ( assignResult < 0 ) {
     
    158150        }
    159151
    160         Cost convertToReferenceCost( Type * src, ReferenceType * dest, const SymTab::Indexer & indexer, const TypeEnvironment & env, PtrsFunction func ) {
     152        Cost convertToReferenceCost( Type * src, ReferenceType * dest, const SymTab::Indexer & indexer, const TypeEnvironment & env ) {
    161153                int sdepth = src->referenceDepth(), ddepth = dest->referenceDepth();
    162                 return convertToReferenceCost( src, dest, sdepth-ddepth, indexer, env, func );
     154                return convertToReferenceCost( src, dest, sdepth-ddepth, indexer, env );
    163155        }
    164156
Note: See TracChangeset for help on using the changeset viewer.