Changes in / [80018f5:262a864]
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/ExpressionNode.cpp
r80018f5 r262a864 10 10 // Created On : Sat May 16 13:17:07 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Sep 12 22:40:35202413 // Update Count : 1 09012 // Last Modified On : Mon Dec 16 20:50:27 2024 13 // Update Count : 1110 14 14 // 15 15 … … 162 162 lnthSuffix( str, type, ltype ); // could have length suffix 163 163 } else { 164 // At least one digit in integer constant, so safe to backup while looking for suffix. 165 // This declaration and the comma expressions in the conditions mimic166 // the declare and check pattern allowed in later compiler versions.167 // (Only some early compilers/C++ standards donot support it.)164 // At least one digit in integer constant, so safe to backup while looking for suffix. This 165 // declaration and the comma expressions in the conditions mimic the declare and check 166 // pattern allowed in later compiler versions. (Only some early compilers/C++ standards do 167 // not support it.) 168 168 string::size_type posn; 169 169 // pointer value … … 465 465 } 466 466 467 // A "sequence" is the series of characters in a character/string literal 468 // that becomes a singlecharacter value in the runtime value.467 // A "sequence" is the series of characters in a character/string literal that becomes a single 468 // character value in the runtime value. 469 469 static size_t sequenceLength( const std::string & str, size_t pos ) { 470 470 // Most "sequences" are just a single character, filter those out: … … 497 497 assertf( false, "Unknown escape sequence (start %c).", str[pos] ); 498 498 return 1; 499 } 499 } // switch 500 500 } 501 501 502 ast::Expr * build_constantStr( 503 const CodeLocation & location, 504 string & str ) { 502 ast::Expr * build_constantStr( const CodeLocation & location, string & str ) { 505 503 assert( str.length() > 0 ); 506 504 string units; // units … … 525 523 } // switch 526 524 527 // The dimension value of the type is equal to the number of "sequences" 528 // not including the openning and closing quotes in the literal plus 1 529 // for the implicit null terminator. 530 size_t dimension = 1; 531 for ( size_t pos = 1 ; pos < str.size() - 1 ; 532 pos += sequenceLength( str, pos ) ) { 533 dimension += 1; 534 } 525 // The length value of the type is equal to the number of "sequences" not including the openning 526 // and closing quotes in the literal plus 1 for the implicit null terminator. 527 size_t length = 1; 528 for ( size_t pos = 1 ; pos < str.size() - 1 ; pos += sequenceLength( str, pos ) ) { 529 if ( '"' == str[pos] ) { // concatenated strings ? "ABC" "DEF" 530 int cnt = 1; // skip outside quotes and space between 531 for ( unsigned int i = pos + 1; str[i] != '"'; i += 1, cnt += 1 ); 532 pos += cnt; 533 continue; // not part of length 534 } // if 535 length += 1; 536 } // for 535 537 536 538 ast::ArrayType * at = new ast::ArrayType( 537 539 strtype, 538 ast::ConstantExpr::from_ulong( location, dimension),540 ast::ConstantExpr::from_ulong( location, length ), 539 541 ast::FixedLen, 540 542 ast::DynamicDim ); 541 543 ast::Expr * ret = new ast::ConstantExpr( location, at, str, std::nullopt ); 542 544 if ( units.length() != 0 ) { 543 ret = new ast::UntypedExpr( location, 544 new ast::NameExpr( location, units ), 545 { ret } ); 545 ret = new ast::UntypedExpr( location, new ast::NameExpr( location, units ), { ret } ); 546 546 } // if 547 547 -
tests/.expect/attributes.x64.txt
r80018f5 r262a864 1339 1339 __attribute__ (( noreturn )) void _X4fredFv___1(void){ 1340 1340 __attribute__ ((unused)) signed int _X1ii_2; 1341 __attribute__ ((gnu::xxx)) signed int _X1ji_2; 1341 1342 switch ( 3 ) { 1342 1343 case 2: -
tests/attributes.cfa
r80018f5 r262a864 10 10 // Created On : Mon Feb 6 16:07:02 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Dec 15 17:45:39202413 // Update Count : 4912 // Last Modified On : Mon Dec 16 14:45:04 2024 13 // Update Count : 51 14 14 // 15 15 … … 164 164 [[ noreturn ]] void fred() { 165 165 int [[unused]] i; 166 int [[gnu::xxx]] j; 166 167 switch ( 3 ) { 167 168 case 2:
Note:
See TracChangeset
for help on using the changeset viewer.