Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/ConversionCost.cc

    rc75b30a r0bd3faf  
    279279                conversionCostFromBasicToBasic( basicType, dstAsBasic );
    280280        } else if ( const ast::EnumInstType * enumInst = dynamic_cast< const ast::EnumInstType * >( dst ) ) {
    281                 auto enumDecl = enumInst->base;
    282                 if ( auto baseType = enumDecl->base.get() ) {
    283                         cost = costCalc( basicType, baseType, srcIsLvalue, symtab, env );
    284                         cost.incUnsafe();
     281                const ast::EnumDecl * enumDecl = enumInst->base.get();
     282                if ( enumDecl->isTyped && !enumDecl->base.get() ) {
     283                        cost = Cost::infinity;
     284                } else if ( const ast::Type * enumType = enumDecl->base.get() ) {
     285                        if ( const ast::BasicType * enumTypeAsBasic = dynamic_cast<const ast::BasicType *>(enumType) ) {
     286                                conversionCostFromBasicToBasic( basicType, enumTypeAsBasic );
     287                        } else {
     288                                cost = Cost::infinity;
     289                        }
    285290                } else {
    286291            cost = Cost::unsafe;
     
    362367
    363368void ConversionCost::postvisit( const ast::EnumInstType * enumInstType ) {
    364         //      const ast::EnumDecl * baseEnum = enumInstType->base;
    365         // if ( const ast::Type * baseType = baseEnum->base ) {
    366         //      costCalc( baseType, dst, srcIsLvalue, symtab, env );
    367         // } else {
    368         static ast::ptr<ast::BasicType> integer = { new ast::BasicType( ast::BasicType::SignedInt ) };
    369         cost = costCalc( integer, dst, srcIsLvalue, symtab, env );
    370         // }
     369        const ast::EnumDecl * baseEnum = enumInstType->base;
     370        if ( const ast::Type * baseType = baseEnum->base ) {
     371                costCalc( baseType, dst, srcIsLvalue, symtab, env );
     372        } else {
     373                static ast::ptr<ast::BasicType> integer = { new ast::BasicType( ast::BasicType::SignedInt ) };
     374                cost = costCalc( integer, dst, srcIsLvalue, symtab, env );
     375        }
    371376        if ( cost < Cost::unsafe ) {
    372377                cost.incSafe();
Note: See TracChangeset for help on using the changeset viewer.