Changes in / [d39d8a4:1e12f07]
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/enum.hfa
rd39d8a4 r1e12f07 66 66 return l; 67 67 } 68 69 E ?+=? ( E & l, one_t ) { 70 l = succ(l); 71 return l; 72 } 73 74 E ?-=? ( E & l, one_t ) { 75 l = pred(l); 76 return l; 77 } 78 79 E ?+=? ( E & l, int i ) { 80 int pos = posn(l) + i; 81 return fromInt(pos); 82 } 83 84 E ?-=? ( E & l, int i ) { 85 int pos = posn(l) - i; 86 return fromInt(pos); 87 } 68 88 69 89 E ?++( E & l ) { -
src/ControlStruct/TranslateEnumRange.cpp
rd39d8a4 r1e12f07 5 5 6 6 namespace ControlStruct { 7 8 struct addInitType {9 const ast::Stmt * postvisit( const ast::ForStmt * stmt );10 };11 7 12 8 struct addInit { … … 17 13 const ast::Stmt * postvisit( const ast::ForStmt * stmt ); 18 14 }; 19 20 const ast::Stmt* addInitType::postvisit( const ast::ForStmt * stmt ) {21 if ( stmt->range_over ) {22 auto typeExpr = stmt->range_over.strict_as<ast::TypeExpr>();23 auto type = typeExpr->type;24 25 auto objInit = stmt->inits.front();26 assert( stmt->inits.size() == 1 );27 28 if (auto declStmt = objInit.as<ast::DeclStmt>()) {29 auto decl = declStmt->decl;30 if ( auto objDecl = decl.as<ast::ObjectDecl>()) {31 if ( !objDecl->type && type ) {32 auto objDeclWithType = ast::mutate_field( objDecl, &ast::ObjectDecl::type, type );33 auto declWithType = ast::mutate_field( declStmt, &ast::DeclStmt::decl, objDeclWithType );34 stmt = ast::mutate_field_index( stmt, &ast::ForStmt::inits, 0, declWithType );35 }36 }37 }38 }39 return stmt;40 }41 15 42 16 const ast::Stmt* addInit::postvisit( const ast::ForStmt * stmt ) { … … 87 61 mut = ast::mutate_field(stmt, &ast::ForStmt::inc, assig ); 88 62 return mut; 89 } 63 } 90 64 91 65 void translateEnumRange( ast::TranslationUnit & translationUnit ) { -
src/ResolvExpr/CandidateFinder.cpp
rd39d8a4 r1e12f07 938 938 addAggMembers( unionInst, aggrExpr, *cand, Cost::unsafe, "" ); 939 939 } else if ( auto enumInst = aggrExpr->result.as< ast::EnumInstType >() ) { 940 addEnumValueAsCandidate( enumInst, aggrExpr, Cost::unsafe);940 addEnumValueAsCandidate( enumInst, aggrExpr, Cost::implicit ); 941 941 } 942 942 } -
src/ResolvExpr/Cost.hpp
rd39d8a4 r1e12f07 31 31 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ 32 32 // Little-endian => first value is low priority and last is high priority. 33 unsigned char padding; ///< unused34 33 unsigned char referenceCost; ///< reference conversions 35 34 unsigned char specCost; ///< Polymorphic type specializations (type assertions), negative cost … … 38 37 unsigned char safeCost; ///< Safe (widening) conversions 39 38 unsigned char polyCost; ///< Count of parameters and return values bound to some poly type 39 unsigned char implicitCost; ///< Aggregate implicit cost 40 40 unsigned char unsafeCost; ///< Unsafe (narrowing) conversions 41 41 #else … … 46 46 }; 47 47 static const unsigned char correctb = 0xff; // byte correction for negative spec cost 48 static const uint64_t correctw = 0x00'00'00'00'00' ff'00'00; //' word correction for negative spec cost48 static const uint64_t correctw = 0x00'00'00'00'00'00'ff'00; //' word correction for negative spec cost 49 49 public: 50 50 // Compiler adjusts constants for correct endian. 51 51 enum : uint64_t { 52 zero = 0x00'00'00'00'00'ff'00'00, 53 infinity = 0xff'ff'ff'ff'ff'00'ff'ff, 54 unsafe = 0x01'00'00'00'00'ff'00'00, 55 poly = 0x00'01'00'00'00'ff'00'00, 56 safe = 0x00'00'01'00'00'ff'00'00, 57 sign = 0x00'00'00'01'00'ff'00'00, 58 var = 0x00'00'00'00'01'ff'00'00, 59 spec = 0x00'00'00'00'00'fe'00'00, 60 reference = 0x00'00'00'00'00'ff'01'00, 52 zero = 0x00'00'00'00'00'00'ff'00, 53 infinity = 0xff'ff'ff'ff'ff'ff'00'ff, 54 unsafe = 0x01'00'00'00'00'00'ff'00, 55 implicit = 0x00'01'00'00'01'00'ff'00, 56 poly = 0x00'00'01'00'00'00'ff'00, 57 safe = 0x00'00'00'01'00'00'ff'00, 58 sign = 0x00'00'00'00'01'00'ff'00, 59 var = 0x00'00'00'00'00'01'ff'00, 60 spec = 0x00'00'00'00'00'00'fe'00, 61 reference = 0x00'00'00'00'00'00'ff'01, 61 62 }; //' 62 63 63 64 Cost( uint64_t all ) { Cost::all = all; } 64 Cost( int unsafeCost, int polyCost, int safeCost, int signCost, int varCost, int specCost, int referenceCost ) {65 Cost( int unsafeCost, int polyCost, int safeCost, int signCost, int implicitCost, int varCost, int specCost, int referenceCost ) { 65 66 // Assume little-endian => first value is low priority and last is high priority. 66 67 v = { 67 68 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ 68 (unsigned char)0, // padding69 69 (unsigned char)referenceCost, // low priority 70 70 (unsigned char)(specCost + correctb), // correct for signedness … … 73 73 (unsigned char)safeCost, 74 74 (unsigned char)polyCost, 75 (unsigned char)implicitCost, 75 76 (unsigned char)unsafeCost, // high priority 76 77 #else … … 81 82 82 83 int get_unsafeCost() const { return v.unsafeCost; } 84 int get_implictCost() const { return v.implicitCost; } 83 85 int get_polyCost() const { return v.polyCost; } 84 86 int get_safeCost() const { return v.safeCost; } … … 112 114 Cost incUnsafe( int inc = 1 ) { 113 115 if ( all != infinity ) { assert( v.unsafeCost + inc <= UCHAR_MAX ); v.unsafeCost += inc; } 116 return *this; 117 } 118 119 Cost incImplicit( int inc = 1 ) { 120 if ( all != infinity ) { assert( v.implicitCost + inc <= UCHAR_MAX ); v.implicitCost += inc; } 114 121 return *this; 115 122 } … … 168 175 169 176 inline std::ostream & operator<<( std::ostream & os, const Cost cost ) { 170 return os << "( " << cost.get_unsafeCost() << ", " << cost.get_ polyCost() << ", " << cost.get_safeCost()177 return os << "( " << cost.get_unsafeCost() << ", " << cost.get_implictCost() << ", " << cost.get_polyCost() << ", " << cost.get_safeCost() 171 178 << ", " << cost.get_signCost() << ", " << cost.get_varCost() << ", " << cost.get_specCost() 172 179 << ", " << cost.get_referenceCost() << " )"; -
src/ResolvExpr/ResolveTypeof.cpp
rd39d8a4 r1e12f07 130 130 mutDecl->type = renameTyVars(mutDecl->type, RenameMode::GEN_EXPR_ID); 131 131 mutDecl->isTypeFixed = true; 132 133 auto enumInst = decl->type.as<ast::EnumInstType>(); 134 if ( enumInst && enumInst->base->isCfa ) { 135 if ( auto init = decl->init.as<ast::SingleInit>() ) { 136 if ( auto initExpr = init->value.as<ast::ConstantExpr>() ) { 137 if ( initExpr->result.as<ast::ZeroType>() ) { 138 auto newInit = new ast::SingleInit( init->location, 139 ast::UntypedExpr::createCall( init->location, "lowerBound", {} ) 140 ); 141 mutDecl->init = newInit; 142 } 143 } 144 } 145 } 146 132 147 return mutDecl; 133 148 } -
tests/.expect/castError.txt
rd39d8a4 r1e12f07 6 6 ... with resolved type: 7 7 char Alternatives are: 8 Cost ( 1, 0, 0, 0, 0, 0, 0 ): Explicit Cast of:8 Cost ( 1, 0, 0, 0, 0, 0, 0, 0 ): Explicit Cast of: 9 9 Variable Expression: f: double 10 10 ... with resolved type: … … 19 19 Environment: 20 20 21 Cost ( 1, 0, 0, 0, 0, 0, 0 ): Explicit Cast of:21 Cost ( 1, 0, 0, 0, 0, 0, 0, 0 ): Explicit Cast of: 22 22 Variable Expression: f: function 23 23 accepting unspecified arguments … … 38 38 Environment: 39 39 40 Cost ( 1, 0, 0, 0, 0, 0, 0 ): Explicit Cast of:40 Cost ( 1, 0, 0, 0, 0, 0, 0, 0 ): Explicit Cast of: 41 41 Variable Expression: f: signed int 42 42 ... with resolved type: … … 62 62 ... with resolved type: 63 63 void Alternatives are: 64 Cost ( 0, 0, 2, 0, 0, 0, 0 ): Generated Cast of:64 Cost ( 0, 0, 0, 2, 0, 0, 0, 0 ): Generated Cast of: 65 65 Comma Expression: 66 66 Constant Expression (3: signed int) … … 80 80 Environment: 81 81 82 Cost ( 0, 0, 2, 0, 0, 0, 0 ): Generated Cast of:82 Cost ( 0, 0, 0, 2, 0, 0, 0, 0 ): Generated Cast of: 83 83 Comma Expression: 84 84 Constant Expression (3: signed int) -
tests/errors/.expect/completeType.x64.txt
rd39d8a4 r1e12f07 9 9 ... with resolved type: 10 10 void Alternatives are: 11 Cost ( 0, 1, 2, 0, 1, -1, 0 ): Generated Cast of:11 Cost ( 0, 0, 1, 2, 0, 1, -1, 0 ): Generated Cast of: 12 12 Application of 13 13 Variable Expression: *?: forall … … 44 44 45 45 46 Cost ( 0, 1, 2, 0, 1, -1, 0 ): Generated Cast of:46 Cost ( 0, 0, 1, 2, 0, 1, -1, 0 ): Generated Cast of: 47 47 Application of 48 48 Variable Expression: *?: forall … … 111 111 112 112 Unsatisfiable alternative: 113 Cost ( 0, 1, 0, 0, 1, -5, 0 ): Application of113 Cost ( 0, 0, 1, 0, 0, 1, -5, 0 ): Application of 114 114 Variable Expression: baz: forall 115 115 instance of type T (not function type) -
tests/meta/.expect/arch.x64.txt
rd39d8a4 r1e12f07 6 6 ... with resolved type: 7 7 char Alternatives are: 8 Cost ( 1, 0, 0, 0, 0, 0, 0 ): Explicit Cast of:8 Cost ( 1, 0, 0, 0, 0, 0, 0, 0 ): Explicit Cast of: 9 9 Variable Expression: FX64: double 10 10 ... with resolved type: … … 19 19 Environment: 20 20 21 Cost ( 1, 0, 0, 0, 0, 0, 0 ): Explicit Cast of:21 Cost ( 1, 0, 0, 0, 0, 0, 0, 0 ): Explicit Cast of: 22 22 Variable Expression: FX64: function 23 23 accepting unspecified arguments … … 38 38 Environment: 39 39 40 Cost ( 1, 0, 0, 0, 0, 0, 0 ): Explicit Cast of:40 Cost ( 1, 0, 0, 0, 0, 0, 0, 0 ): Explicit Cast of: 41 41 Variable Expression: FX64: signed int 42 42 ... with resolved type:
Note: See TracChangeset
for help on using the changeset viewer.