Changeset bf4fe05 for src/ResolvExpr/CastCost.cpp
- Timestamp:
- May 13, 2024, 7:07:06 AM (17 months ago)
- Branches:
- master
- Children:
- ca4f2b2
- Parents:
- ec20ab9 (diff), 5f225f5 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
src/ResolvExpr/CastCost.cpp
rec20ab9 rbf4fe05 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // CastCost.c c--7 // CastCost.cpp -- 8 8 // 9 9 // Author : Richard C. Bilson … … 22 22 #include "AST/Type.hpp" 23 23 #include "AST/TypeEnvironment.hpp" 24 #include "ConversionCost.h "// for ConversionCost25 #include "Cost.h "// for Cost, Cost::infinity26 #include "ResolvExpr/ConversionCost.h "// for conversionCost24 #include "ConversionCost.hpp" // for ConversionCost 25 #include "Cost.hpp" // for Cost, Cost::infinity 26 #include "ResolvExpr/ConversionCost.hpp" // for conversionCost 27 27 #include "ResolvExpr/PtrsCastable.hpp" // for ptrsCastable 28 #include "ResolvExpr/Unify.h "// for typesCompatibleIgnoreQualifiers28 #include "ResolvExpr/Unify.hpp" // for typesCompatibleIgnoreQualifiers 29 29 30 30 #if 0 … … 54 54 cost = conversionCost( basicType, dst, srcIsLvalue, symtab, env ); 55 55 if ( Cost::unsafe < cost ) { 56 if (auto enumInst = 57 assert(enumInst->base->base);58 cost = Cost::unsafe;56 if (auto enumInst = dynamic_cast<const ast::EnumInstType *>(dst)) { 57 // Always explict cast only for typed enum 58 if (enumInst->base->isTyped) cost = Cost::unsafe; 59 59 } 60 60 } … … 63 63 64 64 void postvisit( const ast::ZeroType * zero ) { 65 // auto ptr = dynamic_cast< const ast::PointerType * >( dst );66 // if ( ptr && basicType->isInteger() ) {67 // // needed for, e.g. unsigned long => void *68 // cost = Cost::unsafe;69 // } else {70 65 cost = conversionCost( zero, dst, srcIsLvalue, symtab, env ); 71 66 if ( Cost::unsafe < cost ) { 72 67 if (auto enumInst = dynamic_cast<const ast::EnumInstType *>(dst)) { 73 assert(enumInst->base->base); 74 cost = Cost::unsafe; 68 if (enumInst->base->isTyped) cost = Cost::unsafe; 75 69 } 76 70 } 77 // }78 71 } 79 72 80 73 void postvisit( const ast::OneType * one ) { 81 // auto ptr = dynamic_cast< const ast::PointerType * >( dst );82 // if ( ptr && basicType->isInteger() ) {83 // // needed for, e.g. unsigned long => void *84 // cost = Cost::unsafe;85 // } else {86 74 cost = conversionCost( one, dst, srcIsLvalue, symtab, env ); 87 75 if ( Cost::unsafe < cost ) { 88 if (auto enumInst = dynamic_cast<const ast::EnumInstType *>(dst)) { 89 assert(enumInst->base->base); 90 cost = Cost::unsafe; 76 if (auto enumInst = dynamic_cast<const ast::EnumInstType *>(dst)) { 77 if (enumInst->base->isTyped) cost = Cost::unsafe; 91 78 } 92 79 } 93 // }94 80 } 95 81
Note:
See TracChangeset
for help on using the changeset viewer.