Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/ConversionCost.cpp

    r90e683b r2a5345b  
    246246                }
    247247                if (const ast::EnumInstType * srcAsInst = dynamic_cast< const ast::EnumInstType * >( src )) {
    248                         if ( srcAsInst->base && srcAsInst->base->is_c_enum() ) {
     248                        if (srcAsInst->base && !srcAsInst->base->isCfa) {
    249249                                static const ast::BasicType* integer = new ast::BasicType( ast::BasicKind::UnsignedInt );
    250250                                return ast::Pass<ConversionCost>::read( integer, dst, srcIsLvalue, symtab, env, conversionCost );
     
    324324                conversionCostFromBasicToBasic( basicType, dstAsBasic );
    325325        } else if ( auto dstAsEnumInst = dynamic_cast< const ast::EnumInstType * >( dst ) ) {
    326                 if ( dstAsEnumInst->base && dstAsEnumInst->base->is_c_enum() ) {
     326                if ( dstAsEnumInst->base && !dstAsEnumInst->base->isCfa ) {
    327327                        cost = Cost::safe;
    328328                }
     
    405405        if ( auto dstInst = dynamic_cast<const ast::EnumInstType *>( dst ) ) {
    406406                cost = enumCastCost(inst, dstInst, symtab, env);
    407         } else if ( inst->base->is_c_enum() ) {
     407        } else if ( !inst->base->isCfa ) {
    408408                static ast::ptr<ast::BasicType> integer = { new ast::BasicType( ast::BasicKind::SignedInt ) };
    409409                cost = costCalc( integer, dst, srcIsLvalue, symtab, env );
     
    455455}
    456456
    457 void ConversionCost::postvisit( const ast::VarArgsType * ) {
     457void ConversionCost::postvisit( const ast::VarArgsType * varArgsType ) {
     458        (void)varArgsType;
    458459        if ( dynamic_cast< const ast::VarArgsType * >( dst ) ) {
    459460                cost = Cost::zero;
     
    461462}
    462463
    463 void ConversionCost::postvisit( const ast::ZeroType * ) {
     464void ConversionCost::postvisit( const ast::ZeroType * zeroType ) {
     465        (void)zeroType;
    464466        if ( dynamic_cast< const ast::ZeroType * >( dst ) ) {
    465467                cost = Cost::zero;
     
    485487                // assuming 0p is supposed to be used for pointers?
    486488        } else if ( auto dstAsEnumInst = dynamic_cast< const ast::EnumInstType * >( dst ) ) {
    487                 if ( dstAsEnumInst->base && dstAsEnumInst->base->is_c_enum() ) {
     489                if ( dstAsEnumInst->base && !dstAsEnumInst->base->isCfa ) {
    488490                        cost = Cost::safe;
    489491                }
     
    491493}
    492494
    493 void ConversionCost::postvisit( const ast::OneType * ) {
     495void ConversionCost::postvisit( const ast::OneType * oneType ) {
     496        (void)oneType;
    494497        if ( dynamic_cast< const ast::OneType * >( dst ) ) {
    495498                cost = Cost::zero;
     
    505508                }
    506509        } else if ( auto dstAsEnumInst = dynamic_cast< const ast::EnumInstType * >( dst ) ) {
    507                 if ( dstAsEnumInst->base && dstAsEnumInst->base->is_c_enum() ) {
     510                if ( dstAsEnumInst->base && !dstAsEnumInst->base->isCfa ) {
    508511                        cost = Cost::safe;
    509512                }
Note: See TracChangeset for help on using the changeset viewer.