Changeset 90e683b for src/ResolvExpr
- Timestamp:
- Feb 3, 2025, 11:46:55 AM (2 months ago)
- Branches:
- master
- Children:
- 54f70c6
- Parents:
- bbbff10
- Location:
- src/ResolvExpr
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified src/ResolvExpr/CastCost.cpp ¶
rbbbff10 r90e683b 53 53 void postvisit( const ast::EnumInstType * enumInst ) { 54 54 cost = conversionCost( enumInst, dst, srcIsLvalue, symtab, env ); 55 if ( enumInst->base->is Typed() ) {56 auto baseConversionCost = 55 if ( enumInst->base->is_typed_enum() ) { 56 auto baseConversionCost = 57 57 castCost( enumInst->base->base, dst, srcIsLvalue, symtab, env ); 58 cost = baseConversionCost < cost ? baseConversionCost: cost;58 cost = baseConversionCost < cost ? baseConversionCost : cost; 59 59 } 60 60 static ast::ptr<ast::BasicType> integer = { new ast::BasicType( ast::BasicKind::SignedInt ) }; 61 61 Cost intCost = costCalc( integer, dst, srcIsLvalue, symtab, env ); 62 62 intCost.incSafe(); 63 cost = intCost < cost ? intCost: cost;63 cost = intCost < cost ? intCost : cost; 64 64 } 65 65 -
TabularUnified src/ResolvExpr/CommonType.cpp ¶
rbbbff10 r90e683b 386 386 } else if ( const ast::EnumInstType * enumInst = dynamic_cast< const ast::EnumInstType * >( type2 ) ) { 387 387 const ast::EnumDecl* enumDecl = enumInst->base; 388 if ( !enumDecl->isCfa) {388 if ( enumDecl->is_c_enum() ) { 389 389 ast::BasicKind kind = commonTypes[ basic->kind ][ ast::BasicKind::SignedInt ]; 390 390 if ( … … 654 654 result = param; 655 655 } 656 } else if ( param->base && !param->base->isCfa) {656 } else if ( param->base && param->base->is_c_enum() ) { 657 657 auto basicType = new ast::BasicType( ast::BasicKind::UnsignedInt ); 658 658 result = commonType( basicType, type2, tenv, need, have, open, widen); -
TabularUnified src/ResolvExpr/ConversionCost.cpp ¶
rbbbff10 r90e683b 246 246 } 247 247 if (const ast::EnumInstType * srcAsInst = dynamic_cast< const ast::EnumInstType * >( src )) { 248 if ( srcAsInst->base && !srcAsInst->base->isCfa) {248 if ( srcAsInst->base && srcAsInst->base->is_c_enum() ) { 249 249 static const ast::BasicType* integer = new ast::BasicType( ast::BasicKind::UnsignedInt ); 250 250 return ast::Pass<ConversionCost>::read( integer, dst, srcIsLvalue, symtab, env, conversionCost ); … … 324 324 conversionCostFromBasicToBasic( basicType, dstAsBasic ); 325 325 } else if ( auto dstAsEnumInst = dynamic_cast< const ast::EnumInstType * >( dst ) ) { 326 if ( dstAsEnumInst->base && !dstAsEnumInst->base->isCfa) {326 if ( dstAsEnumInst->base && dstAsEnumInst->base->is_c_enum() ) { 327 327 cost = Cost::safe; 328 328 } … … 405 405 if ( auto dstInst = dynamic_cast<const ast::EnumInstType *>( dst ) ) { 406 406 cost = enumCastCost(inst, dstInst, symtab, env); 407 } else if ( !inst->base->isCfa) {407 } else if ( inst->base->is_c_enum() ) { 408 408 static ast::ptr<ast::BasicType> integer = { new ast::BasicType( ast::BasicKind::SignedInt ) }; 409 409 cost = costCalc( integer, dst, srcIsLvalue, symtab, env ); … … 455 455 } 456 456 457 void ConversionCost::postvisit( const ast::VarArgsType * varArgsType ) { 458 (void)varArgsType; 457 void ConversionCost::postvisit( const ast::VarArgsType * ) { 459 458 if ( dynamic_cast< const ast::VarArgsType * >( dst ) ) { 460 459 cost = Cost::zero; … … 462 461 } 463 462 464 void ConversionCost::postvisit( const ast::ZeroType * zeroType ) { 465 (void)zeroType; 463 void ConversionCost::postvisit( const ast::ZeroType * ) { 466 464 if ( dynamic_cast< const ast::ZeroType * >( dst ) ) { 467 465 cost = Cost::zero; … … 487 485 // assuming 0p is supposed to be used for pointers? 488 486 } else if ( auto dstAsEnumInst = dynamic_cast< const ast::EnumInstType * >( dst ) ) { 489 if ( dstAsEnumInst->base && !dstAsEnumInst->base->isCfa) {487 if ( dstAsEnumInst->base && dstAsEnumInst->base->is_c_enum() ) { 490 488 cost = Cost::safe; 491 489 } … … 493 491 } 494 492 495 void ConversionCost::postvisit( const ast::OneType * oneType ) { 496 (void)oneType; 493 void ConversionCost::postvisit( const ast::OneType * ) { 497 494 if ( dynamic_cast< const ast::OneType * >( dst ) ) { 498 495 cost = Cost::zero; … … 508 505 } 509 506 } else if ( auto dstAsEnumInst = dynamic_cast< const ast::EnumInstType * >( dst ) ) { 510 if ( dstAsEnumInst->base && !dstAsEnumInst->base->isCfa) {507 if ( dstAsEnumInst->base && dstAsEnumInst->base->is_c_enum() ) { 511 508 cost = Cost::safe; 512 509 } -
TabularUnified src/ResolvExpr/ResolveTypeof.cpp ¶
rbbbff10 r90e683b 62 62 // replace basetypeof(<enum>) by int 63 63 auto enumInst = newType.as< ast::EnumInstType >(); 64 if ( enumInst && (!enumInst->base || !enumInst->base->isCfa) ) {64 if ( enumInst && (!enumInst->base || enumInst->base->is_c_enum() ) ) { 65 65 newType = new ast::BasicType( 66 66 ast::BasicKind::SignedInt, newType->qualifiers, copy(newType->attributes) ); … … 144 144 145 145 auto enumInst = decl->type.as<ast::EnumInstType>(); 146 if ( enumInst && enumInst->base->isCfa) {146 if ( enumInst && !enumInst->base->is_c_enum() ) { 147 147 if ( auto init = decl->init.as<ast::SingleInit>() ) { 148 148 if ( auto initExpr = init->value.as<ast::ConstantExpr>() ) { 149 149 if ( initExpr->result.as<ast::ZeroType>() ) { 150 auto newInit = new ast::SingleInit( init->location, 150 auto newInit = new ast::SingleInit( init->location, 151 151 ast::UntypedExpr::createCall( init->location, "lowerBound", {} ) 152 152 );
Note: See TracChangeset
for help on using the changeset viewer.