Changes in / [f886608:522f71c]
- Files:
-
- 2 added
- 2 edited
-
libcfa/prelude/prelude-gen.cc (modified) (4 diffs)
-
src/BasicTypes-gen.cpp (modified) (5 diffs)
-
tests/.expect/ArithmeticConversions.x86.txt (added)
-
tests/ArithmeticConversions.cfa (added)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/prelude/prelude-gen.cc
rf886608 r522f71c 10 10 // Created On : Sat Feb 16 08:44:58 2019 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Feb 2 11:40:01 202313 // Update Count : 3812 // Last Modified On : Sun Jan 12 20:28:33 2025 13 // Update Count : 53 14 14 // 15 15 … … 24 24 const string name; 25 25 bool isFloat; 26 bool hasComparison; 26 bool hasComparison; // CANNOT COMPARE COMPLEX NUMBERS!!! 27 27 } basicTypes[] = { 28 { "char" , false, true ,},29 { "signed char" , false, true ,},30 { "unsigned char" , false, true ,},31 { "signed short" , false, true ,},32 { "unsigned short" , false, true ,},33 { "signed int" , false, true ,},34 { "unsigned int" , false, true ,},35 { "signed long int" , false, true ,},36 { "unsigned long int" , false, true ,},37 { "signed long long int" , false, true ,},38 { "unsigned long long int", false, true ,},39 { "float" , true , true ,},40 { "double" , true , true ,},41 { "long double" , true , true ,},42 { "float _Complex" , true ,false, },43 { "double _Complex" , true ,false, },44 { "long double _Complex" , true ,false, },28 { "char", false, true, }, 29 { "signed char", false, true, }, 30 { "unsigned char", false, true, }, 31 { "signed short", false, true, }, 32 { "unsigned short", false, true, }, 33 { "signed int", false, true, }, 34 { "unsigned int", false, true, }, 35 { "signed long int", false, true, }, 36 { "unsigned long int", false, true, }, 37 { "signed long long int", false, true, }, 38 { "unsigned long long int", false, true, }, 39 { "float", true , true, }, 40 { "double", true, true, }, 41 { "long double", true, true, }, 42 { "float _Complex", true, false, }, 43 { "double _Complex", true, false, }, 44 { "long double _Complex", true, false, }, 45 45 #if defined(__SIZEOF_INT128__) 46 { "__int128" , false, true ,},47 { "unsigned __int128" , false, true ,},46 { "__int128", false, true, }, 47 { "unsigned __int128", false, true, }, 48 48 #endif 49 49 #if defined(__i386__) || defined(__ia64__) || defined(__x86_64__) 50 { "__float80" , true , true , }, 51 { "__float128" , true , true , }, 50 { "__float80", true, true, }, 51 { "__float128", true, true, }, 52 { "_Float128", true, true, }, 53 { "_Float128 _Complex", true, false, }, 54 // { "_Float128x", true, true, }, // add declarations if type supported 55 // { "_Float128x _Complex", true, false, }, 52 56 #endif 53 57 }; … … 60 64 bool isEqual = false; 61 65 } arithmeticOperators[] = { 62 { "?++" , true , true,false, false },63 { "?--" , true , true,false, false },64 { "++?" , true , true,false, false },65 { "--?" , true , true,false, false },66 { "+?" , false, true ,false, false },67 { "-?" , false, true ,false, false },68 { "~?" ,false, false, false, false },69 { "!?" , false, true ,false, true },70 { "?*?" , false, true ,false, false },71 { "?/?" , false, true ,false, false },72 { "?%?" ,false, false, false, false },73 { "?+?" , false, true ,false, false },74 { "?-?" , false, true ,false, false },75 { "?<<?" ,false, false, false, false },76 { "?>>?" ,false, false, false, false },77 { "?<?" , false, true , true ,false },78 { "?<=?" , false, true , true ,true },79 { "?>?" , false, true , true ,false },80 { "?>=?" , false, true , true ,true },81 { "?==?" , false, true ,false, true },82 { "?!=?" , false, true ,false, true },83 { "?&?" ,false, false, false, false },84 { "?^?" ,false, false, false, false },85 { "?|?" ,false, false, false, false },86 { "?=?" , true , true ,false, false },87 { "?+=?" , true , true ,false, false },88 { "?-=?" , true , true ,false, false },89 { "?*=?" , true , true ,false, false },90 { "?/=?" , true , true ,false, false },91 { "?%=?" , true ,false, false, false },92 { "?<<=?", true ,false, false, false },93 { "?>>=?", true ,false, false, false },94 { "?&=?" , true ,false, false, false },95 { "?|=?" , true ,false, false, false },96 { "?^=?" , true ,false, false, false },66 { "?++", true, true, false, false }, 67 { "?--", true, true, false, false }, 68 { "++?", true, true, false, false }, 69 { "--?", true, true, false, false }, 70 { "+?", false, true, false, false }, 71 { "-?", false, true, false, false }, 72 { "~?", false, false, false, false }, 73 { "!?", false, true, false, true }, 74 { "?*?", false, true, false, false }, 75 { "?/?", false, true, false, false }, 76 { "?%?", false, false, false, false }, 77 { "?+?", false, true, false, false }, 78 { "?-?", false, true, false, false }, 79 { "?<<?", false, false, false, false }, 80 { "?>>?", false, false, false, false }, 81 { "?<?", false, true, true, false }, 82 { "?<=?", false, true, true, true }, 83 { "?>?", false, true, true, false }, 84 { "?>=?", false, true, true, true }, 85 { "?==?", false, true, false, true }, 86 { "?!=?", false, true, false, true }, 87 { "?&?", false, false, false, false }, 88 { "?^?", false, false, false, false }, 89 { "?|?", false, false, false, false }, 90 { "?=?", true, true, false, false }, 91 { "?+=?", true, true, false, false }, 92 { "?-=?", true, true, false, false }, 93 { "?*=?", true, true, false, false }, 94 { "?/=?", true, true, false, false }, 95 { "?%=?", true, false, false, false }, 96 { "?<<=?", true, false, false, false }, 97 { "?>>=?", true, false, false, false }, 98 { "?&=?", true, false, false, false }, 99 { "?|=?", true, false, false, false }, 100 { "?^=?", true, false, false, false }, 97 101 }; 98 102 … … 106 110 string sized; 107 111 } pointerOperators[] = { 108 { "?++", true, "", Normal," | sized(DT)" },109 { "?--", true, "", Normal," | sized(DT)" },110 { "++?", true, "", Normal," | sized(DT)" },111 { "--?", true, "", Normal," | sized(DT)" },112 { "!?" , false, "int", Normal,"" },113 { "?<?", false, "signed int", Normal,"" },114 { "?<=?", false, "signed int", Normal,"" },115 { "?>?", false, "signed int", Normal,"" },116 { "?>=?", false, "signed int", Normal,"" },117 { "?==?", false, "signed int", Normal,"" },118 { "?!=?", false, "signed int", Normal,"" },119 { "?=?", true, "", Normal,"" }, // void * LHS, zero_t RHS ???120 // { "*?", false, "&", Normal," | sized(DT)" }, // & ???121 { "*?", false, "&", Normal,"" }, // & ???122 123 { "?-?", false, "ptrdiff_t", Normal," | sized(DT)" },124 { "?-?", false, "", PtrDiff," | sized(DT)" },125 { "?-=?", true, "", PtrDiff," | sized(DT)" },126 127 { "?+?", false, "", CommPtrDiff," | sized(DT)" },128 { "?[?]", false, "&", CommPtrDiff," | sized(DT)" }, // & ???129 { "?+=?" , true, "", PtrDiff," | sized(DT)" },112 { "?++", true, "", Normal, " | sized(DT)" }, 113 { "?--", true, "", Normal, " | sized(DT)" }, 114 { "++?", true, "", Normal, " | sized(DT)" }, 115 { "--?", true, "", Normal, " | sized(DT)" }, 116 { "!?", false, "int", Normal, "" }, 117 { "?<?", false, "signed int", Normal, "" }, 118 { "?<=?", false, "signed int", Normal, "" }, 119 { "?>?", false, "signed int", Normal, "" }, 120 { "?>=?", false, "signed int", Normal, "" }, 121 { "?==?", false, "signed int", Normal, "" }, 122 { "?!=?", false, "signed int", Normal, "" }, 123 { "?=?", true, "", Normal, "" }, // void * LHS, zero_t RHS ??? 124 // { "*?", false, "&", Normal, " | sized(DT)" }, // & ??? 125 { "*?", false, "&", Normal, "" }, // & ??? 126 127 { "?-?", false, "ptrdiff_t", Normal, " | sized(DT)" }, 128 { "?-?", false, "", PtrDiff, " | sized(DT)" }, 129 { "?-=?", true, "", PtrDiff, " | sized(DT)" }, 130 131 { "?+?", false, "", CommPtrDiff, " | sized(DT)" }, 132 { "?[?]", false, "&", CommPtrDiff, " | sized(DT)" }, // & ??? 133 { "?+=?", true, "", PtrDiff, " | sized(DT)" }, 130 134 }; 131 135 -
src/BasicTypes-gen.cpp
rf886608 r522f71c 45 45 Float64xComplex, 46 46 Float80, 47 LongDouble, 48 LongDoubleComplex, 49 uuFloat128, 47 50 Float128, 48 51 Float128Complex, 49 uuFloat128,50 LongDouble,51 LongDoubleComplex,52 52 Float128x, 53 53 Float128xComplex, … … 113 113 { DoubleComplex, "DoubleComplex", "DC", "double _Complex", "Cd", Floating, Float64xComplex, -1, -1, 12 }, 114 114 { Float64x, "Float64x", "_FDX", "_Float64x", "DF64x_", Floating, Float80, Float64xComplex, -1, 13 }, 115 { Float64xComplex, "Float64xComplex", "_FDXC", "_Float64x _Complex", "CDF64x_", Floating, Float128Complex, -1, -1, 13 },116 117 { Float80, "Float80", "_F80", "__float80", "Dq", Floating, Float128, Float64xComplex, -1, 14 },115 { Float64xComplex, "Float64xComplex", "_FDXC", "_Float64x _Complex", "CDF64x_", Floating, LongDoubleComplex, -1, -1, 13 }, 116 117 { Float80, "Float80", "_F80", "__float80", "Dq", Floating, LongDouble, LongDoubleComplex, -1, 14 }, 118 118 // __float80 _Complex, no complex counterpart 119 120 { Float128, "Float128", "_FLD", "_Float128", "DF128_", Floating, uuFloat128, Float128Complex, -1, 15 }, 121 { Float128Complex, "Float128Complex", "_FLDC", "_Float128 _Complex", "CDF128_", Floating, LongDoubleComplex, -1, -1, 15 }, 122 { uuFloat128, "uuFloat128", "__FLD", "__float128", "g", Floating, LongDouble, Float128Complex, -1, 16 }, 119 // gcc implements long double as float80 (12 bytes) 120 { LongDouble, "LongDouble", "LD", "long double", "e", Floating, uuFloat128, LongDoubleComplex, -1, 15 }, 121 { LongDoubleComplex, "LongDoubleComplex", "LDC", "long double _Complex", "Ce", Floating, Float128Complex, -1, -1, 15 }, 122 123 { uuFloat128, "uuFloat128", "__FLD", "__float128", "g", Floating, Float128, Float128Complex, -1, 16 }, 123 124 // __float128 _Complex, no complex counterpart 124 { LongDouble, "LongDouble", "LD", "long double", "e", Floating, Float128x, LongDoubleComplex, -1, 17 },125 { LongDoubleComplex, "LongDoubleComplex", "LDC", "long double _Complex", "Ce", Floating, Float128xComplex, -1, -1, 17 },125 { Float128, "Float128", "_FLD", "_Float128", "DF128_", Floating, Float128x, Float128Complex, -1, 17 }, 126 { Float128Complex, "Float128Complex", "_FLDC", "_Float128 _Complex", "CDF128_", Floating, Float128xComplex, -1, -1, 17 }, 126 127 127 128 // may not be supported … … 134 135 static Kind commonTypeMatrix[NUMBER_OF_BASIC_TYPES][NUMBER_OF_BASIC_TYPES]; 135 136 137 // Fangren explain shortest cost algorithm. 136 138 void generateCosts( int row ) { 137 139 bool seen[NUMBER_OF_BASIC_TYPES] = { false /*, ... */ }; … … 174 176 175 177 // traverse children 178 // Fangren explain "max" 176 179 int i = graph[col].left; 177 180 if ( i == -1 ) continue; // leaf … … 188 191 } // generateCosts 189 192 193 // Fangren explain this routine if you can. 190 194 void generateCommonType( int row, int col ) { // row <= col 191 195 if ( costMatrix[row][col] >= 0 ) {
Note:
See TracChangeset
for help on using the changeset viewer.