Changes in / [1e12f07:d39d8a4]
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/enum.hfa
r1e12f07 rd39d8a4 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 }88 68 89 69 E ?++( E & l ) { -
src/ControlStruct/TranslateEnumRange.cpp
r1e12f07 rd39d8a4 5 5 6 6 namespace ControlStruct { 7 8 struct addInitType { 9 const ast::Stmt * postvisit( const ast::ForStmt * stmt ); 10 }; 7 11 8 12 struct addInit { … … 13 17 const ast::Stmt * postvisit( const ast::ForStmt * stmt ); 14 18 }; 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 } 15 41 16 42 const ast::Stmt* addInit::postvisit( const ast::ForStmt * stmt ) { … … 61 87 mut = ast::mutate_field(stmt, &ast::ForStmt::inc, assig ); 62 88 return mut; 63 } 89 } 64 90 65 91 void translateEnumRange( ast::TranslationUnit & translationUnit ) { -
src/ResolvExpr/CandidateFinder.cpp
r1e12f07 rd39d8a4 938 938 addAggMembers( unionInst, aggrExpr, *cand, Cost::unsafe, "" ); 939 939 } else if ( auto enumInst = aggrExpr->result.as< ast::EnumInstType >() ) { 940 addEnumValueAsCandidate( enumInst, aggrExpr, Cost::implicit);940 addEnumValueAsCandidate(enumInst, aggrExpr, Cost::unsafe); 941 941 } 942 942 } -
src/ResolvExpr/Cost.hpp
r1e12f07 rd39d8a4 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; ///< unused 33 34 unsigned char referenceCost; ///< reference conversions 34 35 unsigned char specCost; ///< Polymorphic type specializations (type assertions), negative cost … … 37 38 unsigned char safeCost; ///< Safe (widening) conversions 38 39 unsigned char polyCost; ///< Count of parameters and return values bound to some poly type 39 unsigned char implicitCost; ///< Aggregate implicit cost40 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' 00'ff'00; //' word correction for negative spec cost48 static const uint64_t correctw = 0x00'00'00'00'00'ff'00'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'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, 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, 62 61 }; //' 63 62 64 63 Cost( uint64_t all ) { Cost::all = all; } 65 Cost( int unsafeCost, int polyCost, int safeCost, int signCost, int implicitCost, intvarCost, int specCost, int referenceCost ) {64 Cost( int unsafeCost, int polyCost, int safeCost, int signCost, int varCost, int specCost, int referenceCost ) { 66 65 // Assume little-endian => first value is low priority and last is high priority. 67 66 v = { 68 67 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ 68 (unsigned char)0, // padding 69 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,76 75 (unsigned char)unsafeCost, // high priority 77 76 #else … … 82 81 83 82 int get_unsafeCost() const { return v.unsafeCost; } 84 int get_implictCost() const { return v.implicitCost; }85 83 int get_polyCost() const { return v.polyCost; } 86 84 int get_safeCost() const { return v.safeCost; } … … 114 112 Cost incUnsafe( int inc = 1 ) { 115 113 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; }121 114 return *this; 122 115 } … … 175 168 176 169 inline std::ostream & operator<<( std::ostream & os, const Cost cost ) { 177 return os << "( " << cost.get_unsafeCost() << ", " << cost.get_ implictCost() << ", " << cost.get_polyCost() << ", " << cost.get_safeCost()170 return os << "( " << cost.get_unsafeCost() << ", " << cost.get_polyCost() << ", " << cost.get_safeCost() 178 171 << ", " << cost.get_signCost() << ", " << cost.get_varCost() << ", " << cost.get_specCost() 179 172 << ", " << cost.get_referenceCost() << " )"; -
src/ResolvExpr/ResolveTypeof.cpp
r1e12f07 rd39d8a4 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 147 132 return mutDecl; 148 133 } -
tests/.expect/castError.txt
r1e12f07 rd39d8a4 6 6 ... with resolved type: 7 7 char Alternatives are: 8 Cost ( 1, 0, 0, 0, 0, 0, 0 , 0): Explicit Cast of:8 Cost ( 1, 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 , 0): Explicit Cast of:21 Cost ( 1, 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 , 0): Explicit Cast of:40 Cost ( 1, 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, 0,2, 0, 0, 0, 0 ): Generated Cast of:64 Cost ( 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, 0,2, 0, 0, 0, 0 ): Generated Cast of:82 Cost ( 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
r1e12f07 rd39d8a4 9 9 ... with resolved type: 10 10 void Alternatives are: 11 Cost ( 0, 0,1, 2, 0, 1, -1, 0 ): Generated Cast of:11 Cost ( 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, 0,1, 2, 0, 1, -1, 0 ): Generated Cast of:46 Cost ( 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, 0,1, 0, 0, 1, -5, 0 ): Application of113 Cost ( 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
r1e12f07 rd39d8a4 6 6 ... with resolved type: 7 7 char Alternatives are: 8 Cost ( 1, 0, 0, 0, 0, 0, 0 , 0): Explicit Cast of:8 Cost ( 1, 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 , 0): Explicit Cast of:21 Cost ( 1, 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 , 0): Explicit Cast of:40 Cost ( 1, 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.