From 144df5fc608a89dd9d4fc65dc0ab03f2b0d1568b Mon Sep 17 00:00:00 2001 From: Jeff Trull Date: Thu, 13 Nov 2025 14:29:08 -0800 Subject: [PATCH] Implement support for digit separators in preprocessor expressions Integers with digit separators are already recognized as literal tokens. This commit adds proper interpretation of them as integers for use in expressions e.g. with #if --- include/boost/wave/cpplexer/re2clex/cpp.re | 2 +- .../boost/wave/cpplexer/re2clex/cpp_re.inc | 1569 +++++++++-------- .../wave/cpplexer/re2clex/strict_cpp_re.inc | 2 +- .../wave/grammars/cpp_intlit_grammar.hpp | 13 +- test/testwave/testfiles/t_5_014.cpp | 98 +- test/testwave/testfiles/t_5_038.cpp | 4 +- 6 files changed, 903 insertions(+), 785 deletions(-) diff --git a/include/boost/wave/cpplexer/re2clex/cpp.re b/include/boost/wave/cpplexer/re2clex/cpp.re index d3cfecc0b..36a86b9eb 100644 --- a/include/boost/wave/cpplexer/re2clex/cpp.re +++ b/include/boost/wave/cpplexer/re2clex/cpp.re @@ -468,7 +468,7 @@ pp_number: if (s->detect_pp_numbers) { /*!re2c - "."? Digit (Digit | NonDigit | ExponentStart | ".")* + "."? Digit (("'"? (Digit | NonDigit | ExponentStart)) | ".")* { BOOST_WAVE_RET(T_PP_NUMBER); } // because we reached this point, then reset the cursor, diff --git a/include/boost/wave/cpplexer/re2clex/cpp_re.inc b/include/boost/wave/cpplexer/re2clex/cpp_re.inc index 995c170f0..402b80b7f 100644 --- a/include/boost/wave/cpplexer/re2clex/cpp_re.inc +++ b/include/boost/wave/cpplexer/re2clex/cpp_re.inc @@ -1,4 +1,4 @@ -/* Generated by re2c 1.0.2 on Sun Oct 26 21:28:12 2025 */ +/* Generated by re2c 1.0.2 on Thu Nov 13 14:28:20 2025 */ #line 1 "cpp.re" /*============================================================================= Boost.Wave: A Standard compliant C++ preprocessor library @@ -6454,62 +6454,95 @@ yy1005: if (yybm[0+yych] & 64) { goto yy1005; } - if (yych <= 'E') { - if (yych == '?') goto yy1008; - if (yych >= 'A') goto yy1010; + if (yych <= '@') { + if (yych <= '\'') { + if (yych >= '\'') goto yy1008; + } else { + if (yych == '?') goto yy1010; + } } else { if (yych <= '\\') { - if (yych >= '\\') goto yy1012; + if (yych <= 'E') goto yy1011; + if (yych >= '\\') goto yy1013; } else { if (yych <= '`') goto yy1007; - if (yych <= 'e') goto yy1010; + if (yych <= 'e') goto yy1011; } } yy1007: #line 472 "cpp.re" { BOOST_WAVE_RET(T_PP_NUMBER); } -#line 6472 "cpp_re.inc" +#line 6476 "cpp_re.inc" yy1008: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if (yych == '?') goto yy1013; + if (yybm[0+yych] & 128) { + goto yy1011; + } + if (yych <= '@') { + if (yych <= '/') { + if (yych == '$') goto yy1005; + } else { + if (yych <= '9') goto yy1005; + if (yych == '?') goto yy1010; + } + } else { + if (yych <= '^') { + if (yych <= 'Z') goto yy1005; + if (yych == '\\') goto yy1013; + } else { + if (yych == '`') goto yy1009; + if (yych <= 'z') goto yy1005; + } + } yy1009: YYCURSOR = YYMARKER; goto yy1007; yy1010: + ++YYCURSOR; + if (YYLIMIT <= YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if (yych == '?') goto yy1014; + goto yy1009; +yy1011: YYMARKER = ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 128) { - goto yy1010; + goto yy1011; } - if (yych <= '>') { - if (yych <= '+') { - if (yych == '$') goto yy1005; - if (yych <= '*') goto yy1007; - goto yy1005; - } else { - if (yych <= '.') { - if (yych <= ',') goto yy1007; + if (yych <= '9') { + if (yych <= '*') { + if (yych <= '$') { + if (yych <= '#') goto yy1007; goto yy1005; } else { - if (yych <= '/') goto yy1007; - if (yych <= '9') goto yy1005; + if (yych == '\'') goto yy1008; + goto yy1007; + } + } else { + if (yych <= ',') { + if (yych <= '+') goto yy1005; goto yy1007; + } else { + if (yych == '/') goto yy1007; + goto yy1005; } } } else { - if (yych <= '\\') { - if (yych <= '@') { - if (yych <= '?') goto yy1008; - goto yy1007; + if (yych <= '[') { + if (yych <= '?') { + if (yych <= '>') goto yy1007; + goto yy1010; } else { + if (yych <= '@') goto yy1007; if (yych <= 'Z') goto yy1005; - if (yych <= '[') goto yy1007; + goto yy1007; } } else { if (yych <= '_') { + if (yych <= '\\') goto yy1013; if (yych <= '^') goto yy1007; goto yy1005; } else { @@ -6519,33 +6552,19 @@ yy1010: } } } -yy1012: - ++YYCURSOR; - if (YYLIMIT <= YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - if (yych == 'U') goto yy1014; - if (yych == 'u') goto yy1015; - goto yy1009; yy1013: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if (yych == '/') goto yy1012; + if (yych == 'U') goto yy1015; + if (yych == 'u') goto yy1016; goto yy1009; yy1014: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if (yych <= '@') { - if (yych <= '/') goto yy1009; - if (yych <= '9') goto yy1016; - goto yy1009; - } else { - if (yych <= 'F') goto yy1016; - if (yych <= '`') goto yy1009; - if (yych <= 'f') goto yy1016; - goto yy1009; - } + if (yych == '/') goto yy1013; + goto yy1009; yy1015: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); @@ -6622,15 +6641,29 @@ yy1020: yych = *YYCURSOR; if (yych <= '@') { if (yych <= '/') goto yy1009; - if (yych <= '9') goto yy1015; + if (yych <= '9') goto yy1022; goto yy1009; } else { - if (yych <= 'F') goto yy1015; + if (yych <= 'F') goto yy1022; if (yych <= '`') goto yy1009; - if (yych <= 'f') goto yy1015; + if (yych <= 'f') goto yy1022; goto yy1009; } yy1021: + ++YYCURSOR; + if (YYLIMIT <= YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy1009; + if (yych <= '9') goto yy1016; + goto yy1009; + } else { + if (yych <= 'F') goto yy1016; + if (yych <= '`') goto yy1009; + if (yych <= 'f') goto yy1016; + goto yy1009; + } +yy1022: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; @@ -6650,7 +6683,7 @@ yy1021: } else { -#line 6654 "cpp_re.inc" +#line 6687 "cpp_re.inc" { YYCTYPE yych; unsigned int yyaccept = 0; @@ -6691,309 +6724,309 @@ yy1021: if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4); yych = *YYCURSOR; if (yych <= '/') { - if (yych == '.') goto yy1026; + if (yych == '.') goto yy1027; } else { - if (yych <= '0') goto yy1027; - if (yych <= '9') goto yy1029; + if (yych <= '0') goto yy1028; + if (yych <= '9') goto yy1030; } ++YYCURSOR; -yy1025: +yy1026: #line 487 "cpp.re" { BOOST_ASSERT(false); } -#line 6704 "cpp_re.inc" -yy1026: - yych = *++YYCURSOR; - if (yych <= '/') goto yy1025; - if (yych <= '9') goto yy1031; - goto yy1025; +#line 6737 "cpp_re.inc" yy1027: + yych = *++YYCURSOR; + if (yych <= '/') goto yy1026; + if (yych <= '9') goto yy1032; + goto yy1026; +yy1028: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'X') { - if (yych == 'B') goto yy1041; - if (yych <= 'W') goto yy1038; - goto yy1043; + if (yych == 'B') goto yy1042; + if (yych <= 'W') goto yy1039; + goto yy1044; } else { if (yych <= 'b') { - if (yych <= 'a') goto yy1038; - goto yy1041; + if (yych <= 'a') goto yy1039; + goto yy1042; } else { - if (yych == 'x') goto yy1043; - goto yy1038; + if (yych == 'x') goto yy1044; + goto yy1039; } } -yy1028: +yy1029: #line 484 "cpp.re" { goto integer_suffix; } -#line 6729 "cpp_re.inc" -yy1029: +#line 6762 "cpp_re.inc" +yy1030: yyaccept = 0; YYMARKER = ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = *YYCURSOR; if (yybm[0+yych] & 16) { - goto yy1029; + goto yy1030; } if (yych <= '.') { - if (yych == '\'') goto yy1044; - if (yych <= '-') goto yy1028; - goto yy1036; + if (yych == '\'') goto yy1045; + if (yych <= '-') goto yy1029; + goto yy1037; } else { if (yych <= 'E') { - if (yych <= 'D') goto yy1028; - goto yy1042; + if (yych <= 'D') goto yy1029; + goto yy1043; } else { - if (yych == 'e') goto yy1042; - goto yy1028; + if (yych == 'e') goto yy1043; + goto yy1029; } } -yy1031: +yy1032: yyaccept = 1; YYMARKER = ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; -yy1032: +yy1033: if (yych <= 'F') { if (yych <= '/') { - if (yych == '\'') goto yy1045; + if (yych == '\'') goto yy1046; } else { - if (yych <= '9') goto yy1031; - if (yych <= 'D') goto yy1033; - if (yych <= 'E') goto yy1042; - goto yy1046; + if (yych <= '9') goto yy1032; + if (yych <= 'D') goto yy1034; + if (yych <= 'E') goto yy1043; + goto yy1047; } } else { if (yych <= 'e') { - if (yych == 'L') goto yy1047; - if (yych >= 'e') goto yy1042; + if (yych == 'L') goto yy1048; + if (yych >= 'e') goto yy1043; } else { - if (yych <= 'f') goto yy1046; - if (yych == 'l') goto yy1047; + if (yych <= 'f') goto yy1047; + if (yych == 'l') goto yy1048; } } -yy1033: +yy1034: #line 482 "cpp.re" { BOOST_WAVE_RET(T_FLOATLIT); } -#line 6778 "cpp_re.inc" -yy1034: +#line 6811 "cpp_re.inc" +yy1035: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if (yych <= '/') goto yy1035; - if (yych <= '7') goto yy1048; - if (yych <= '9') goto yy1050; -yy1035: + if (yych <= '/') goto yy1036; + if (yych <= '7') goto yy1049; + if (yych <= '9') goto yy1051; +yy1036: YYCURSOR = YYMARKER; if (yyaccept == 0) { - goto yy1028; + goto yy1029; } else { - goto yy1033; + goto yy1034; } -yy1036: +yy1037: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych == '\'') goto yy1033; - goto yy1032; -yy1037: + if (yych == '\'') goto yy1034; + goto yy1033; +yy1038: yyaccept = 0; YYMARKER = ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = *YYCURSOR; -yy1038: +yy1039: if (yybm[0+yych] & 32) { - goto yy1037; + goto yy1038; } if (yych <= '/') { if (yych <= '\'') { - if (yych <= '&') goto yy1028; - goto yy1034; + if (yych <= '&') goto yy1029; + goto yy1035; } else { - if (yych == '.') goto yy1036; - goto yy1028; + if (yych == '.') goto yy1037; + goto yy1029; } } else { if (yych <= 'E') { - if (yych <= '9') goto yy1039; - if (yych <= 'D') goto yy1028; - goto yy1042; + if (yych <= '9') goto yy1040; + if (yych <= 'D') goto yy1029; + goto yy1043; } else { - if (yych == 'e') goto yy1042; - goto yy1028; + if (yych == 'e') goto yy1043; + goto yy1029; } } -yy1039: +yy1040: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = *YYCURSOR; if (yych <= '/') { if (yych <= '\'') { - if (yych <= '&') goto yy1035; - goto yy1052; + if (yych <= '&') goto yy1036; + goto yy1053; } else { - if (yych == '.') goto yy1036; - goto yy1035; + if (yych == '.') goto yy1037; + goto yy1036; } } else { if (yych <= 'E') { - if (yych <= '9') goto yy1039; - if (yych <= 'D') goto yy1035; - goto yy1042; + if (yych <= '9') goto yy1040; + if (yych <= 'D') goto yy1036; + goto yy1043; } else { - if (yych == 'e') goto yy1042; - goto yy1035; + if (yych == 'e') goto yy1043; + goto yy1036; } } -yy1041: +yy1042: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 64) { - goto yy1053; + goto yy1054; } - goto yy1035; -yy1042: + goto yy1036; +yy1043: yych = *++YYCURSOR; if (yych <= ',') { - if (yych == '+') goto yy1055; - goto yy1035; + if (yych == '+') goto yy1056; + goto yy1036; } else { - if (yych <= '-') goto yy1055; - if (yych <= '/') goto yy1035; - if (yych <= '9') goto yy1056; - goto yy1035; + if (yych <= '-') goto yy1056; + if (yych <= '/') goto yy1036; + if (yych <= '9') goto yy1057; + goto yy1036; } -yy1043: +yy1044: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 128) { - goto yy1058; + goto yy1059; } - goto yy1035; -yy1044: + goto yy1036; +yy1045: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if (yych <= '/') goto yy1035; - if (yych <= '9') goto yy1060; - goto yy1035; -yy1045: + if (yych <= '/') goto yy1036; + if (yych <= '9') goto yy1061; + goto yy1036; +yy1046: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if (yych <= '/') goto yy1035; - if (yych <= '9') goto yy1031; - goto yy1035; -yy1046: - yych = *++YYCURSOR; - if (yych == 'L') goto yy1062; - if (yych == 'l') goto yy1062; - goto yy1033; + if (yych <= '/') goto yy1036; + if (yych <= '9') goto yy1032; + goto yy1036; yy1047: yych = *++YYCURSOR; - if (yych == 'F') goto yy1062; - if (yych == 'f') goto yy1062; - goto yy1033; + if (yych == 'L') goto yy1063; + if (yych == 'l') goto yy1063; + goto yy1034; yy1048: + yych = *++YYCURSOR; + if (yych == 'F') goto yy1063; + if (yych == 'f') goto yy1063; + goto yy1034; +yy1049: yyaccept = 0; YYMARKER = ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = *YYCURSOR; if (yych <= '.') { - if (yych == '\'') goto yy1034; - if (yych <= '-') goto yy1028; - goto yy1036; + if (yych == '\'') goto yy1035; + if (yych <= '-') goto yy1029; + goto yy1037; } else { - if (yych <= '/') goto yy1028; - if (yych <= '7') goto yy1048; - if (yych >= ':') goto yy1028; + if (yych <= '/') goto yy1029; + if (yych <= '7') goto yy1049; + if (yych >= ':') goto yy1029; } -yy1050: +yy1051: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = *YYCURSOR; if (yych <= '-') { - if (yych != '\'') goto yy1035; + if (yych != '\'') goto yy1036; } else { - if (yych <= '.') goto yy1036; - if (yych <= '/') goto yy1035; - if (yych <= '9') goto yy1050; - goto yy1035; + if (yych <= '.') goto yy1037; + if (yych <= '/') goto yy1036; + if (yych <= '9') goto yy1051; + goto yy1036; } -yy1052: +yy1053: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if (yych <= '/') goto yy1035; - if (yych <= '9') goto yy1050; - goto yy1035; -yy1053: + if (yych <= '/') goto yy1036; + if (yych <= '9') goto yy1051; + goto yy1036; +yy1054: yyaccept = 0; YYMARKER = ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 64) { - goto yy1053; + goto yy1054; } - if (yych == '\'') goto yy1041; - goto yy1028; -yy1055: + if (yych == '\'') goto yy1042; + goto yy1029; +yy1056: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if (yych <= '/') goto yy1035; - if (yych >= ':') goto yy1035; -yy1056: + if (yych <= '/') goto yy1036; + if (yych >= ':') goto yy1036; +yy1057: yyaccept = 1; YYMARKER = ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; if (yych <= 'F') { if (yych <= '/') { - if (yych == '\'') goto yy1055; - goto yy1033; + if (yych == '\'') goto yy1056; + goto yy1034; } else { - if (yych <= '9') goto yy1056; - if (yych <= 'E') goto yy1033; - goto yy1046; + if (yych <= '9') goto yy1057; + if (yych <= 'E') goto yy1034; + goto yy1047; } } else { if (yych <= 'e') { - if (yych == 'L') goto yy1047; - goto yy1033; + if (yych == 'L') goto yy1048; + goto yy1034; } else { - if (yych <= 'f') goto yy1046; - if (yych == 'l') goto yy1047; - goto yy1033; + if (yych <= 'f') goto yy1047; + if (yych == 'l') goto yy1048; + goto yy1034; } } -yy1058: +yy1059: yyaccept = 0; YYMARKER = ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 128) { - goto yy1058; + goto yy1059; } - if (yych == '\'') goto yy1043; - goto yy1028; -yy1060: + if (yych == '\'') goto yy1044; + goto yy1029; +yy1061: yyaccept = 0; YYMARKER = ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = *YYCURSOR; if (yych <= '-') { - if (yych == '\'') goto yy1044; - goto yy1028; + if (yych == '\'') goto yy1045; + goto yy1029; } else { - if (yych <= '.') goto yy1036; - if (yych <= '/') goto yy1028; - if (yych <= '9') goto yy1060; - goto yy1028; + if (yych <= '.') goto yy1037; + if (yych <= '/') goto yy1029; + if (yych <= '9') goto yy1061; + goto yy1029; } -yy1062: +yy1063: ++YYCURSOR; - goto yy1033; + goto yy1034; } #line 488 "cpp.re" @@ -7006,61 +7039,61 @@ integer_suffix: auto suffix_start = YYCURSOR; -#line 7010 "cpp_re.inc" +#line 7043 "cpp_re.inc" { YYCTYPE yych; if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4); yych = *(YYMARKER = YYCURSOR); if (yych <= 'h') { if (yych <= 'T') { - if (yych == 'L') goto yy1066; + if (yych == 'L') goto yy1067; } else { - if (yych <= 'U') goto yy1067; - if (yych == 'Z') goto yy1068; + if (yych <= 'U') goto yy1068; + if (yych == 'Z') goto yy1069; } } else { if (yych <= 't') { - if (yych <= 'i') goto yy1070; - if (yych == 'l') goto yy1072; + if (yych <= 'i') goto yy1071; + if (yych == 'l') goto yy1073; } else { - if (yych <= 'u') goto yy1073; - if (yych == 'z') goto yy1068; + if (yych <= 'u') goto yy1074; + if (yych == 'z') goto yy1069; } } -yy1065: +yy1066: #line 520 "cpp.re" { BOOST_WAVE_RET(T_INTLIT); } -#line 7034 "cpp_re.inc" -yy1066: +#line 7067 "cpp_re.inc" +yy1067: yych = *++YYCURSOR; if (yych <= 'T') { - if (yych == 'L') goto yy1074; - goto yy1065; + if (yych == 'L') goto yy1075; + goto yy1066; } else { - if (yych <= 'U') goto yy1076; - if (yych == 'u') goto yy1076; - goto yy1065; + if (yych <= 'U') goto yy1077; + if (yych == 'u') goto yy1077; + goto yy1066; } -yy1067: +yy1068: yych = *++YYCURSOR; if (yych <= 'Z') { - if (yych == 'L') goto yy1077; - if (yych <= 'Y') goto yy1065; - goto yy1078; + if (yych == 'L') goto yy1078; + if (yych <= 'Y') goto yy1066; + goto yy1079; } else { if (yych <= 'l') { - if (yych <= 'k') goto yy1065; - goto yy1079; + if (yych <= 'k') goto yy1066; + goto yy1080; } else { - if (yych == 'z') goto yy1078; - goto yy1065; + if (yych == 'z') goto yy1079; + goto yy1066; } } -yy1068: - yych = *++YYCURSOR; - if (yych == 'U') goto yy1078; - if (yych == 'u') goto yy1078; yy1069: + yych = *++YYCURSOR; + if (yych == 'U') goto yy1079; + if (yych == 'u') goto yy1079; +yy1070: #line 510 "cpp.re" { if (s->act_in_cpp2b_mode) { @@ -7070,74 +7103,74 @@ yy1069: BOOST_WAVE_RET(T_INTLIT); } } -#line 7074 "cpp_re.inc" -yy1070: - yych = *++YYCURSOR; - if (yych == '6') goto yy1080; +#line 7107 "cpp_re.inc" yy1071: - YYCURSOR = YYMARKER; - goto yy1065; + yych = *++YYCURSOR; + if (yych == '6') goto yy1081; yy1072: + YYCURSOR = YYMARKER; + goto yy1066; +yy1073: yych = *++YYCURSOR; if (yych <= 'k') { - if (yych == 'U') goto yy1076; - goto yy1065; + if (yych == 'U') goto yy1077; + goto yy1066; } else { - if (yych <= 'l') goto yy1074; - if (yych == 'u') goto yy1076; - goto yy1065; + if (yych <= 'l') goto yy1075; + if (yych == 'u') goto yy1077; + goto yy1066; } -yy1073: +yy1074: yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'h') { if (yych <= 'L') { - if (yych <= 'K') goto yy1065; - goto yy1077; + if (yych <= 'K') goto yy1066; + goto yy1078; } else { - if (yych == 'Z') goto yy1078; - goto yy1065; + if (yych == 'Z') goto yy1079; + goto yy1066; } } else { if (yych <= 'l') { - if (yych <= 'i') goto yy1070; - if (yych <= 'k') goto yy1065; - goto yy1079; + if (yych <= 'i') goto yy1071; + if (yych <= 'k') goto yy1066; + goto yy1080; } else { - if (yych == 'z') goto yy1078; - goto yy1065; + if (yych == 'z') goto yy1079; + goto yy1066; } } -yy1074: - yych = *++YYCURSOR; - if (yych == 'U') goto yy1081; - if (yych == 'u') goto yy1081; yy1075: + yych = *++YYCURSOR; + if (yych == 'U') goto yy1082; + if (yych == 'u') goto yy1082; +yy1076: #line 499 "cpp.re" { BOOST_WAVE_RET(T_LONGINTLIT); } -#line 7118 "cpp_re.inc" -yy1076: - ++YYCURSOR; - goto yy1065; +#line 7151 "cpp_re.inc" yy1077: - yych = *++YYCURSOR; - if (yych == 'L') goto yy1081; - goto yy1065; -yy1078: ++YYCURSOR; - goto yy1069; -yy1079: + goto yy1066; +yy1078: yych = *++YYCURSOR; - if (yych == 'l') goto yy1081; - goto yy1065; + if (yych == 'L') goto yy1082; + goto yy1066; +yy1079: + ++YYCURSOR; + goto yy1070; yy1080: yych = *++YYCURSOR; - if (yych == '4') goto yy1082; - goto yy1071; + if (yych == 'l') goto yy1082; + goto yy1066; yy1081: - ++YYCURSOR; - goto yy1075; + yych = *++YYCURSOR; + if (yych == '4') goto yy1083; + goto yy1072; yy1082: ++YYCURSOR; + goto yy1076; +yy1083: + ++YYCURSOR; #line 501 "cpp.re" { if (s->enable_ms_extensions) { @@ -7147,7 +7180,7 @@ yy1082: BOOST_WAVE_RET(T_INTLIT); } } -#line 7151 "cpp_re.inc" +#line 7184 "cpp_re.inc" } #line 522 "cpp.re" @@ -7161,7 +7194,7 @@ yy1082: extcharlit: { -#line 7165 "cpp_re.inc" +#line 7198 "cpp_re.inc" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -7202,285 +7235,285 @@ extcharlit: yych = *YYCURSOR; if (yych <= 0x1F) { if (yych <= '\n') { - if (yych <= 0x08) goto yy1086; - if (yych <= '\t') goto yy1088; - goto yy1090; + if (yych <= 0x08) goto yy1087; + if (yych <= '\t') goto yy1089; + goto yy1091; } else { - if (yych <= '\f') goto yy1088; - if (yych <= '\r') goto yy1090; + if (yych <= '\f') goto yy1089; + if (yych <= '\r') goto yy1091; } } else { if (yych <= '>') { - if (yych == '\'') goto yy1090; - goto yy1088; + if (yych == '\'') goto yy1091; + goto yy1089; } else { - if (yych <= '?') goto yy1091; - if (yych == '\\') goto yy1092; - goto yy1088; + if (yych <= '?') goto yy1092; + if (yych == '\\') goto yy1093; + goto yy1089; } } -yy1086: +yy1087: ++YYCURSOR; #line 533 "cpp.re" { (*s->error_proc)(s, lexing_exception::generic_lexing_error, "Invalid character in raw string delimiter ('%c')", yych); } -#line 7230 "cpp_re.inc" -yy1088: - yych = *++YYCURSOR; - if (yych == '\'') goto yy1093; +#line 7263 "cpp_re.inc" yy1089: + yych = *++YYCURSOR; + if (yych == '\'') goto yy1094; +yy1090: #line 542 "cpp.re" { BOOST_WAVE_RET(TOKEN_FROM_ID(*s->tok, UnknownTokenType)); } -#line 7237 "cpp_re.inc" -yy1090: - ++YYCURSOR; - goto yy1089; +#line 7270 "cpp_re.inc" yy1091: - yych = *(YYMARKER = ++YYCURSOR); - if (yych == '\'') goto yy1093; - if (yych == '?') goto yy1095; - goto yy1089; + ++YYCURSOR; + goto yy1090; yy1092: + yych = *(YYMARKER = ++YYCURSOR); + if (yych == '\'') goto yy1094; + if (yych == '?') goto yy1096; + goto yy1090; +yy1093: yych = *(YYMARKER = ++YYCURSOR); if (yych <= '\\') { if (yych <= '>') { if (yych <= '&') { - if (yych == '"') goto yy1097; - goto yy1089; + if (yych == '"') goto yy1098; + goto yy1090; } else { - if (yych <= '\'') goto yy1097; - if (yych <= '/') goto yy1089; - if (yych <= '7') goto yy1098; - goto yy1089; + if (yych <= '\'') goto yy1098; + if (yych <= '/') goto yy1090; + if (yych <= '7') goto yy1099; + goto yy1090; } } else { if (yych <= 'E') { - if (yych <= '?') goto yy1099; - if (yych <= 'D') goto yy1089; - goto yy1097; + if (yych <= '?') goto yy1100; + if (yych <= 'D') goto yy1090; + goto yy1098; } else { - if (yych == 'U') goto yy1100; - if (yych <= '[') goto yy1089; - goto yy1097; + if (yych == 'U') goto yy1101; + if (yych <= '[') goto yy1090; + goto yy1098; } } } else { if (yych <= 'q') { if (yych <= 'd') { - if (yych <= '`') goto yy1089; - if (yych <= 'b') goto yy1097; - goto yy1089; + if (yych <= '`') goto yy1090; + if (yych <= 'b') goto yy1098; + goto yy1090; } else { - if (yych <= 'f') goto yy1097; - if (yych == 'n') goto yy1097; - goto yy1089; + if (yych <= 'f') goto yy1098; + if (yych == 'n') goto yy1098; + goto yy1090; } } else { if (yych <= 'u') { - if (yych == 's') goto yy1089; - if (yych <= 't') goto yy1097; - goto yy1101; + if (yych == 's') goto yy1090; + if (yych <= 't') goto yy1098; + goto yy1102; } else { - if (yych <= 'v') goto yy1097; - if (yych == 'x') goto yy1102; - goto yy1089; + if (yych <= 'v') goto yy1098; + if (yych == 'x') goto yy1103; + goto yy1090; } } } -yy1093: +yy1094: ++YYCURSOR; #line 539 "cpp.re" { BOOST_WAVE_RET(T_CHARLIT); } -#line 7297 "cpp_re.inc" -yy1095: - yych = *++YYCURSOR; - if (yych == '/') goto yy1103; +#line 7330 "cpp_re.inc" yy1096: - YYCURSOR = YYMARKER; - goto yy1089; -yy1097: yych = *++YYCURSOR; - if (yych == '\'') goto yy1093; - goto yy1096; + if (yych == '/') goto yy1104; +yy1097: + YYCURSOR = YYMARKER; + goto yy1090; yy1098: yych = *++YYCURSOR; - if (yych == '\'') goto yy1093; - if (yych <= '/') goto yy1096; - if (yych <= '7') goto yy1104; - goto yy1096; + if (yych == '\'') goto yy1094; + goto yy1097; yy1099: yych = *++YYCURSOR; - if (yych == '\'') goto yy1093; - if (yych == '?') goto yy1105; - goto yy1096; + if (yych == '\'') goto yy1094; + if (yych <= '/') goto yy1097; + if (yych <= '7') goto yy1105; + goto yy1097; yy1100: yych = *++YYCURSOR; - if (yych <= '@') { - if (yych <= '/') goto yy1096; - if (yych <= '9') goto yy1106; - goto yy1096; - } else { - if (yych <= 'F') goto yy1106; - if (yych <= '`') goto yy1096; - if (yych <= 'f') goto yy1106; - goto yy1096; - } + if (yych == '\'') goto yy1094; + if (yych == '?') goto yy1106; + goto yy1097; yy1101: yych = *++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy1096; + if (yych <= '/') goto yy1097; if (yych <= '9') goto yy1107; - goto yy1096; + goto yy1097; } else { if (yych <= 'F') goto yy1107; - if (yych <= '`') goto yy1096; + if (yych <= '`') goto yy1097; if (yych <= 'f') goto yy1107; - goto yy1096; + goto yy1097; } yy1102: yych = *++YYCURSOR; - if (yych == '\'') goto yy1096; - goto yy1109; + if (yych <= '@') { + if (yych <= '/') goto yy1097; + if (yych <= '9') goto yy1108; + goto yy1097; + } else { + if (yych <= 'F') goto yy1108; + if (yych <= '`') goto yy1097; + if (yych <= 'f') goto yy1108; + goto yy1097; + } yy1103: + yych = *++YYCURSOR; + if (yych == '\'') goto yy1097; + goto yy1110; +yy1104: yych = *++YYCURSOR; if (yych <= '\\') { if (yych <= '>') { if (yych <= '&') { - if (yych == '"') goto yy1097; - goto yy1096; + if (yych == '"') goto yy1098; + goto yy1097; } else { - if (yych <= '\'') goto yy1097; - if (yych <= '/') goto yy1096; - if (yych <= '7') goto yy1098; - goto yy1096; + if (yych <= '\'') goto yy1098; + if (yych <= '/') goto yy1097; + if (yych <= '7') goto yy1099; + goto yy1097; } } else { if (yych <= 'E') { - if (yych <= '?') goto yy1099; - if (yych <= 'D') goto yy1096; - goto yy1097; + if (yych <= '?') goto yy1100; + if (yych <= 'D') goto yy1097; + goto yy1098; } else { - if (yych == 'U') goto yy1100; - if (yych <= '[') goto yy1096; - goto yy1097; + if (yych == 'U') goto yy1101; + if (yych <= '[') goto yy1097; + goto yy1098; } } } else { if (yych <= 'q') { if (yych <= 'd') { - if (yych <= '`') goto yy1096; - if (yych <= 'b') goto yy1097; - goto yy1096; + if (yych <= '`') goto yy1097; + if (yych <= 'b') goto yy1098; + goto yy1097; } else { - if (yych <= 'f') goto yy1097; - if (yych == 'n') goto yy1097; - goto yy1096; + if (yych <= 'f') goto yy1098; + if (yych == 'n') goto yy1098; + goto yy1097; } } else { if (yych <= 'u') { - if (yych == 's') goto yy1096; - if (yych <= 't') goto yy1097; - goto yy1101; + if (yych == 's') goto yy1097; + if (yych <= 't') goto yy1098; + goto yy1102; } else { - if (yych <= 'v') goto yy1097; - if (yych == 'x') goto yy1102; - goto yy1096; + if (yych <= 'v') goto yy1098; + if (yych == 'x') goto yy1103; + goto yy1097; } } } -yy1104: - yych = *++YYCURSOR; - if (yych == '\'') goto yy1093; - if (yych <= '/') goto yy1096; - if (yych <= '7') goto yy1097; - goto yy1096; yy1105: yych = *++YYCURSOR; - if (yych == '/') goto yy1097; - goto yy1096; + if (yych == '\'') goto yy1094; + if (yych <= '/') goto yy1097; + if (yych <= '7') goto yy1098; + goto yy1097; yy1106: yych = *++YYCURSOR; - if (yych <= '@') { - if (yych <= '/') goto yy1096; - if (yych <= '9') goto yy1110; - goto yy1096; - } else { - if (yych <= 'F') goto yy1110; - if (yych <= '`') goto yy1096; - if (yych <= 'f') goto yy1110; - goto yy1096; - } + if (yych == '/') goto yy1098; + goto yy1097; yy1107: yych = *++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy1096; + if (yych <= '/') goto yy1097; if (yych <= '9') goto yy1111; - goto yy1096; + goto yy1097; } else { if (yych <= 'F') goto yy1111; - if (yych <= '`') goto yy1096; + if (yych <= '`') goto yy1097; if (yych <= 'f') goto yy1111; - goto yy1096; + goto yy1097; } yy1108: - ++YYCURSOR; - if (YYLIMIT <= YYCURSOR) YYFILL(1); - yych = *YYCURSOR; -yy1109: - if (yybm[0+yych] & 128) { - goto yy1108; - } - if (yych == '\'') goto yy1093; - goto yy1096; -yy1110: yych = *++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy1096; + if (yych <= '/') goto yy1097; if (yych <= '9') goto yy1112; - goto yy1096; + goto yy1097; } else { if (yych <= 'F') goto yy1112; - if (yych <= '`') goto yy1096; + if (yych <= '`') goto yy1097; if (yych <= 'f') goto yy1112; - goto yy1096; + goto yy1097; + } +yy1109: + ++YYCURSOR; + if (YYLIMIT <= YYCURSOR) YYFILL(1); + yych = *YYCURSOR; +yy1110: + if (yybm[0+yych] & 128) { + goto yy1109; } + if (yych == '\'') goto yy1094; + goto yy1097; yy1111: yych = *++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy1096; + if (yych <= '/') goto yy1097; if (yych <= '9') goto yy1113; - goto yy1096; + goto yy1097; } else { if (yych <= 'F') goto yy1113; - if (yych <= '`') goto yy1096; + if (yych <= '`') goto yy1097; if (yych <= 'f') goto yy1113; - goto yy1096; + goto yy1097; } yy1112: yych = *++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy1096; - if (yych <= '9') goto yy1101; - goto yy1096; + if (yych <= '/') goto yy1097; + if (yych <= '9') goto yy1114; + goto yy1097; } else { - if (yych <= 'F') goto yy1101; - if (yych <= '`') goto yy1096; - if (yych <= 'f') goto yy1101; - goto yy1096; + if (yych <= 'F') goto yy1114; + if (yych <= '`') goto yy1097; + if (yych <= 'f') goto yy1114; + goto yy1097; } yy1113: yych = *++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy1096; - if (yych <= '9') goto yy1097; - goto yy1096; + if (yych <= '/') goto yy1097; + if (yych <= '9') goto yy1102; + goto yy1097; + } else { + if (yych <= 'F') goto yy1102; + if (yych <= '`') goto yy1097; + if (yych <= 'f') goto yy1102; + goto yy1097; + } +yy1114: + yych = *++YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy1097; + if (yych <= '9') goto yy1098; + goto yy1097; } else { - if (yych <= 'F') goto yy1097; - if (yych <= '`') goto yy1096; - if (yych <= 'f') goto yy1097; - goto yy1096; + if (yych <= 'F') goto yy1098; + if (yych <= '`') goto yy1097; + if (yych <= 'f') goto yy1098; + goto yy1097; } } #line 543 "cpp.re" @@ -7491,7 +7524,7 @@ yy1113: extstringlit: { -#line 7495 "cpp_re.inc" +#line 7528 "cpp_re.inc" { YYCTYPE yych; unsigned int yyaccept = 0; @@ -7533,346 +7566,346 @@ extstringlit: yych = *YYCURSOR; if (yych <= 0x1F) { if (yych <= '\n') { - if (yych <= 0x08) goto yy1116; - if (yych <= '\t') goto yy1118; - goto yy1120; + if (yych <= 0x08) goto yy1117; + if (yych <= '\t') goto yy1119; + goto yy1121; } else { - if (yych <= '\f') goto yy1118; - if (yych <= '\r') goto yy1120; + if (yych <= '\f') goto yy1119; + if (yych <= '\r') goto yy1121; } } else { if (yych <= '>') { - if (yych == '"') goto yy1121; - goto yy1118; + if (yych == '"') goto yy1122; + goto yy1119; } else { - if (yych <= '?') goto yy1123; - if (yych == '\\') goto yy1124; - goto yy1118; + if (yych <= '?') goto yy1124; + if (yych == '\\') goto yy1125; + goto yy1119; } } -yy1116: +yy1117: ++YYCURSOR; #line 550 "cpp.re" { (*s->error_proc)(s, lexing_exception::generic_lexing_error, "Invalid character in raw string delimiter ('%c')", yych); } -#line 7561 "cpp_re.inc" -yy1118: +#line 7594 "cpp_re.inc" +yy1119: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '\n') { - if (yych == '\t') goto yy1126; + if (yych == '\t') goto yy1127; } else { - if (yych <= '\f') goto yy1126; - if (yych >= ' ') goto yy1126; + if (yych <= '\f') goto yy1127; + if (yych >= ' ') goto yy1127; } -yy1119: +yy1120: #line 559 "cpp.re" { BOOST_WAVE_RET(TOKEN_FROM_ID(*s->tok, UnknownTokenType)); } -#line 7574 "cpp_re.inc" -yy1120: - ++YYCURSOR; - goto yy1119; +#line 7607 "cpp_re.inc" yy1121: ++YYCURSOR; + goto yy1120; yy1122: + ++YYCURSOR; +yy1123: #line 556 "cpp.re" { BOOST_WAVE_RET(T_STRINGLIT); } -#line 7583 "cpp_re.inc" -yy1123: +#line 7616 "cpp_re.inc" +yy1124: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 64) { - goto yy1130; + goto yy1131; } if (yych <= '\n') { - if (yych == '\t') goto yy1126; - goto yy1119; + if (yych == '\t') goto yy1127; + goto yy1120; } else { - if (yych <= '\f') goto yy1126; - if (yych <= 0x1F) goto yy1119; - goto yy1126; + if (yych <= '\f') goto yy1127; + if (yych <= 0x1F) goto yy1120; + goto yy1127; } -yy1124: +yy1125: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '\\') { if (yych <= '>') { if (yych <= '&') { - if (yych != '"') goto yy1119; + if (yych != '"') goto yy1120; } else { - if (yych <= '\'') goto yy1125; - if (yych <= '/') goto yy1119; - if (yych >= '8') goto yy1119; + if (yych <= '\'') goto yy1126; + if (yych <= '/') goto yy1120; + if (yych >= '8') goto yy1120; } } else { if (yych <= 'E') { - if (yych <= '?') goto yy1125; - if (yych <= 'D') goto yy1119; + if (yych <= '?') goto yy1126; + if (yych <= 'D') goto yy1120; } else { - if (yych == 'U') goto yy1132; - if (yych <= '[') goto yy1119; + if (yych == 'U') goto yy1133; + if (yych <= '[') goto yy1120; } } } else { if (yych <= 'q') { if (yych <= 'd') { - if (yych <= '`') goto yy1119; - if (yych >= 'c') goto yy1119; + if (yych <= '`') goto yy1120; + if (yych >= 'c') goto yy1120; } else { - if (yych <= 'f') goto yy1125; - if (yych != 'n') goto yy1119; + if (yych <= 'f') goto yy1126; + if (yych != 'n') goto yy1120; } } else { if (yych <= 'u') { - if (yych == 's') goto yy1119; - if (yych >= 'u') goto yy1133; + if (yych == 's') goto yy1120; + if (yych >= 'u') goto yy1134; } else { - if (yych <= 'v') goto yy1125; - if (yych == 'x') goto yy1134; - goto yy1119; + if (yych <= 'v') goto yy1126; + if (yych == 'x') goto yy1135; + goto yy1120; } } } -yy1125: +yy1126: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; -yy1126: +yy1127: if (yybm[0+yych] & 32) { - goto yy1125; + goto yy1126; } - if (yych <= 0x1F) goto yy1127; - if (yych <= '"') goto yy1121; - if (yych <= '?') goto yy1128; - goto yy1129; -yy1127: + if (yych <= 0x1F) goto yy1128; + if (yych <= '"') goto yy1122; + if (yych <= '?') goto yy1129; + goto yy1130; +yy1128: YYCURSOR = YYMARKER; if (yyaccept == 0) { - goto yy1119; + goto yy1120; } else { - goto yy1122; + goto yy1123; } -yy1128: +yy1129: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 32) { - goto yy1125; + goto yy1126; } - if (yych <= 0x1F) goto yy1127; - if (yych <= '"') goto yy1121; - if (yych <= '?') goto yy1130; -yy1129: + if (yych <= 0x1F) goto yy1128; + if (yych <= '"') goto yy1122; + if (yych <= '?') goto yy1131; +yy1130: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= '\\') { if (yych <= '>') { if (yych <= '&') { - if (yych == '"') goto yy1125; - goto yy1127; + if (yych == '"') goto yy1126; + goto yy1128; } else { - if (yych <= '\'') goto yy1125; - if (yych <= '/') goto yy1127; - if (yych <= '7') goto yy1125; - goto yy1127; + if (yych <= '\'') goto yy1126; + if (yych <= '/') goto yy1128; + if (yych <= '7') goto yy1126; + goto yy1128; } } else { if (yych <= 'E') { - if (yych <= '?') goto yy1125; - if (yych <= 'D') goto yy1127; - goto yy1125; + if (yych <= '?') goto yy1126; + if (yych <= 'D') goto yy1128; + goto yy1126; } else { - if (yych == 'U') goto yy1132; - if (yych <= '[') goto yy1127; - goto yy1125; + if (yych == 'U') goto yy1133; + if (yych <= '[') goto yy1128; + goto yy1126; } } } else { if (yych <= 'q') { if (yych <= 'd') { - if (yych <= '`') goto yy1127; - if (yych <= 'b') goto yy1125; - goto yy1127; + if (yych <= '`') goto yy1128; + if (yych <= 'b') goto yy1126; + goto yy1128; } else { - if (yych <= 'f') goto yy1125; - if (yych == 'n') goto yy1125; - goto yy1127; + if (yych <= 'f') goto yy1126; + if (yych == 'n') goto yy1126; + goto yy1128; } } else { if (yych <= 'u') { - if (yych == 's') goto yy1127; - if (yych <= 't') goto yy1125; - goto yy1133; + if (yych == 's') goto yy1128; + if (yych <= 't') goto yy1126; + goto yy1134; } else { - if (yych <= 'v') goto yy1125; - if (yych == 'x') goto yy1134; - goto yy1127; + if (yych <= 'v') goto yy1126; + if (yych == 'x') goto yy1135; + goto yy1128; } } } -yy1130: +yy1131: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 64) { - goto yy1130; + goto yy1131; } if (yych <= '!') { if (yych <= '\n') { - if (yych == '\t') goto yy1125; - goto yy1127; + if (yych == '\t') goto yy1126; + goto yy1128; } else { - if (yych <= '\f') goto yy1125; - if (yych <= 0x1F) goto yy1127; - goto yy1125; + if (yych <= '\f') goto yy1126; + if (yych <= 0x1F) goto yy1128; + goto yy1126; } } else { if (yych <= '/') { - if (yych <= '"') goto yy1121; - if (yych <= '.') goto yy1125; - goto yy1135; + if (yych <= '"') goto yy1122; + if (yych <= '.') goto yy1126; + goto yy1136; } else { - if (yych == '\\') goto yy1129; - goto yy1125; + if (yych == '\\') goto yy1130; + goto yy1126; } } -yy1132: - ++YYCURSOR; - if (YYLIMIT <= YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - if (yych <= '@') { - if (yych <= '/') goto yy1127; - if (yych <= '9') goto yy1137; - goto yy1127; - } else { - if (yych <= 'F') goto yy1137; - if (yych <= '`') goto yy1127; - if (yych <= 'f') goto yy1137; - goto yy1127; - } yy1133: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy1127; + if (yych <= '/') goto yy1128; if (yych <= '9') goto yy1138; - goto yy1127; + goto yy1128; } else { if (yych <= 'F') goto yy1138; - if (yych <= '`') goto yy1127; + if (yych <= '`') goto yy1128; if (yych <= 'f') goto yy1138; - goto yy1127; + goto yy1128; } yy1134: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy1127; - if (yych <= '9') goto yy1125; - goto yy1127; + if (yych <= '/') goto yy1128; + if (yych <= '9') goto yy1139; + goto yy1128; } else { - if (yych <= 'F') goto yy1125; - if (yych <= '`') goto yy1127; - if (yych <= 'f') goto yy1125; - goto yy1127; + if (yych <= 'F') goto yy1139; + if (yych <= '`') goto yy1128; + if (yych <= 'f') goto yy1139; + goto yy1128; } yy1135: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if (yybm[0+yych] & 32) { - goto yy1125; + if (yych <= '@') { + if (yych <= '/') goto yy1128; + if (yych <= '9') goto yy1126; + goto yy1128; + } else { + if (yych <= 'F') goto yy1126; + if (yych <= '`') goto yy1128; + if (yych <= 'f') goto yy1126; + goto yy1128; } - if (yych <= 0x1F) goto yy1127; - if (yych <= '"') goto yy1139; - if (yych <= '?') goto yy1128; - goto yy1135; -yy1137: +yy1136: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if (yych <= '@') { - if (yych <= '/') goto yy1127; - if (yych <= '9') goto yy1140; - goto yy1127; - } else { - if (yych <= 'F') goto yy1140; - if (yych <= '`') goto yy1127; - if (yych <= 'f') goto yy1140; - goto yy1127; + if (yybm[0+yych] & 32) { + goto yy1126; } + if (yych <= 0x1F) goto yy1128; + if (yych <= '"') goto yy1140; + if (yych <= '?') goto yy1129; + goto yy1136; yy1138: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy1127; + if (yych <= '/') goto yy1128; if (yych <= '9') goto yy1141; - goto yy1127; + goto yy1128; } else { if (yych <= 'F') goto yy1141; - if (yych <= '`') goto yy1127; + if (yych <= '`') goto yy1128; if (yych <= 'f') goto yy1141; - goto yy1127; + goto yy1128; } yy1139: + ++YYCURSOR; + if (YYLIMIT <= YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy1128; + if (yych <= '9') goto yy1142; + goto yy1128; + } else { + if (yych <= 'F') goto yy1142; + if (yych <= '`') goto yy1128; + if (yych <= 'f') goto yy1142; + goto yy1128; + } +yy1140: yyaccept = 1; YYMARKER = ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 32) { - goto yy1125; + goto yy1126; } - if (yych <= 0x1F) goto yy1122; - if (yych <= '"') goto yy1121; - if (yych <= '?') goto yy1128; - goto yy1129; -yy1140: + if (yych <= 0x1F) goto yy1123; + if (yych <= '"') goto yy1122; + if (yych <= '?') goto yy1129; + goto yy1130; +yy1141: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy1127; - if (yych <= '9') goto yy1142; - goto yy1127; + if (yych <= '/') goto yy1128; + if (yych <= '9') goto yy1143; + goto yy1128; } else { - if (yych <= 'F') goto yy1142; - if (yych <= '`') goto yy1127; - if (yych <= 'f') goto yy1142; - goto yy1127; + if (yych <= 'F') goto yy1143; + if (yych <= '`') goto yy1128; + if (yych <= 'f') goto yy1143; + goto yy1128; } -yy1141: +yy1142: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy1127; - if (yych <= '9') goto yy1134; - goto yy1127; + if (yych <= '/') goto yy1128; + if (yych <= '9') goto yy1135; + goto yy1128; } else { - if (yych <= 'F') goto yy1134; - if (yych <= '`') goto yy1127; - if (yych <= 'f') goto yy1134; - goto yy1127; + if (yych <= 'F') goto yy1135; + if (yych <= '`') goto yy1128; + if (yych <= 'f') goto yy1135; + goto yy1128; } -yy1142: +yy1143: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy1127; - if (yych <= '9') goto yy1133; - goto yy1127; + if (yych <= '/') goto yy1128; + if (yych <= '9') goto yy1134; + goto yy1128; } else { - if (yych <= 'F') goto yy1133; - if (yych <= '`') goto yy1127; - if (yych <= 'f') goto yy1133; - goto yy1127; + if (yych <= 'F') goto yy1134; + if (yych <= '`') goto yy1128; + if (yych <= 'f') goto yy1134; + goto yy1128; } } #line 560 "cpp.re" @@ -7885,28 +7918,28 @@ extrawstringlit: // at this point we may see a delimiter -#line 7889 "cpp_re.inc" +#line 7922 "cpp_re.inc" { YYCTYPE yych; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= '(') { - if (yych <= 0x1F) goto yy1145; - if (yych <= '\'') goto yy1147; - goto yy1149; + if (yych <= 0x1F) goto yy1146; + if (yych <= '\'') goto yy1148; + goto yy1150; } else { - if (yych <= ')') goto yy1145; - if (yych != '\\') goto yy1147; + if (yych <= ')') goto yy1146; + if (yych != '\\') goto yy1148; } -yy1145: +yy1146: ++YYCURSOR; #line 569 "cpp.re" { (*s->error_proc)(s, lexing_exception::generic_lexing_error, "Invalid character in raw string delimiter ('%c')", yych); } -#line 7909 "cpp_re.inc" -yy1147: +#line 7942 "cpp_re.inc" +yy1148: ++YYCURSOR; #line 576 "cpp.re" { @@ -7919,15 +7952,15 @@ yy1147: } goto extrawstringlit; } -#line 7923 "cpp_re.inc" -yy1149: +#line 7956 "cpp_re.inc" +yy1150: ++YYCURSOR; #line 588 "cpp.re" { rawstringdelim = ")" + rawstringdelim; goto extrawstringbody; } -#line 7931 "cpp_re.inc" +#line 7964 "cpp_re.inc" } #line 593 "cpp.re" @@ -7936,7 +7969,7 @@ yy1149: extrawstringbody: { -#line 7940 "cpp_re.inc" +#line 7973 "cpp_re.inc" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -7977,54 +8010,54 @@ extrawstringbody: yych = *YYCURSOR; if (yych <= 0x1F) { if (yych <= '\n') { - if (yych <= 0x08) goto yy1153; - if (yych <= '\t') goto yy1155; - goto yy1157; + if (yych <= 0x08) goto yy1154; + if (yych <= '\t') goto yy1156; + goto yy1158; } else { - if (yych <= '\f') goto yy1155; - if (yych <= '\r') goto yy1159; + if (yych <= '\f') goto yy1156; + if (yych <= '\r') goto yy1160; } } else { if (yych <= '>') { - if (yych == '"') goto yy1160; - goto yy1155; + if (yych == '"') goto yy1161; + goto yy1156; } else { - if (yych <= '?') goto yy1162; - if (yych == '\\') goto yy1163; - goto yy1155; + if (yych <= '?') goto yy1163; + if (yych == '\\') goto yy1164; + goto yy1156; } } -yy1153: +yy1154: ++YYCURSOR; #line 600 "cpp.re" { (*s->error_proc)(s, lexing_exception::generic_lexing_error, "Invalid character in raw string body ('%c')", yych); } -#line 8005 "cpp_re.inc" -yy1155: - ++YYCURSOR; +#line 8038 "cpp_re.inc" yy1156: + ++YYCURSOR; +yy1157: #line 613 "cpp.re" { goto extrawstringbody; } -#line 8013 "cpp_re.inc" -yy1157: - ++YYCURSOR; +#line 8046 "cpp_re.inc" yy1158: + ++YYCURSOR; +yy1159: #line 606 "cpp.re" { s->line += count_backslash_newlines(s, cursor) +1; cursor.column = 1; goto extrawstringbody; } -#line 8023 "cpp_re.inc" -yy1159: - yych = *++YYCURSOR; - if (yych == '\n') goto yy1157; - goto yy1158; +#line 8056 "cpp_re.inc" yy1160: + yych = *++YYCURSOR; + if (yych == '\n') goto yy1158; + goto yy1159; +yy1161: ++YYCURSOR; #line 618 "cpp.re" { @@ -8037,238 +8070,238 @@ yy1160: goto extrawstringbody; } } -#line 8041 "cpp_re.inc" -yy1162: - yych = *(YYMARKER = ++YYCURSOR); - if (yych == '?') goto yy1164; - goto yy1156; +#line 8074 "cpp_re.inc" yy1163: + yych = *(YYMARKER = ++YYCURSOR); + if (yych == '?') goto yy1165; + goto yy1157; +yy1164: yych = *(YYMARKER = ++YYCURSOR); if (yych <= '\\') { if (yych <= '>') { if (yych <= '&') { - if (yych == '"') goto yy1155; - goto yy1156; + if (yych == '"') goto yy1156; + goto yy1157; } else { - if (yych <= '\'') goto yy1155; - if (yych <= '/') goto yy1156; - if (yych <= '7') goto yy1166; - goto yy1156; + if (yych <= '\'') goto yy1156; + if (yych <= '/') goto yy1157; + if (yych <= '7') goto yy1167; + goto yy1157; } } else { if (yych <= 'E') { - if (yych <= '?') goto yy1167; - if (yych <= 'D') goto yy1156; - goto yy1155; + if (yych <= '?') goto yy1168; + if (yych <= 'D') goto yy1157; + goto yy1156; } else { - if (yych == 'U') goto yy1168; - if (yych <= '[') goto yy1156; - goto yy1155; + if (yych == 'U') goto yy1169; + if (yych <= '[') goto yy1157; + goto yy1156; } } } else { if (yych <= 'q') { if (yych <= 'd') { - if (yych <= '`') goto yy1156; - if (yych <= 'b') goto yy1155; - goto yy1156; + if (yych <= '`') goto yy1157; + if (yych <= 'b') goto yy1156; + goto yy1157; } else { - if (yych <= 'f') goto yy1155; - if (yych == 'n') goto yy1155; - goto yy1156; + if (yych <= 'f') goto yy1156; + if (yych == 'n') goto yy1156; + goto yy1157; } } else { if (yych <= 'u') { - if (yych == 's') goto yy1156; - if (yych <= 't') goto yy1155; - goto yy1169; + if (yych == 's') goto yy1157; + if (yych <= 't') goto yy1156; + goto yy1170; } else { - if (yych <= 'v') goto yy1155; - if (yych == 'x') goto yy1170; - goto yy1156; + if (yych <= 'v') goto yy1156; + if (yych == 'x') goto yy1171; + goto yy1157; } } } -yy1164: - yych = *++YYCURSOR; - if (yych == '/') goto yy1171; yy1165: - YYCURSOR = YYMARKER; - goto yy1156; -yy1166: yych = *++YYCURSOR; - if (yych <= '/') goto yy1156; - if (yych <= '7') goto yy1172; - goto yy1156; + if (yych == '/') goto yy1172; +yy1166: + YYCURSOR = YYMARKER; + goto yy1157; yy1167: - yych = *(YYMARKER = ++YYCURSOR); - if (yych == '?') goto yy1173; - goto yy1156; -yy1168: yych = *++YYCURSOR; - if (yych <= '@') { - if (yych <= '/') goto yy1165; - if (yych <= '9') goto yy1174; - goto yy1165; - } else { - if (yych <= 'F') goto yy1174; - if (yych <= '`') goto yy1165; - if (yych <= 'f') goto yy1174; - goto yy1165; - } + if (yych <= '/') goto yy1157; + if (yych <= '7') goto yy1173; + goto yy1157; +yy1168: + yych = *(YYMARKER = ++YYCURSOR); + if (yych == '?') goto yy1174; + goto yy1157; yy1169: yych = *++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy1165; + if (yych <= '/') goto yy1166; if (yych <= '9') goto yy1175; - goto yy1165; + goto yy1166; } else { if (yych <= 'F') goto yy1175; - if (yych <= '`') goto yy1165; + if (yych <= '`') goto yy1166; if (yych <= 'f') goto yy1175; - goto yy1165; + goto yy1166; } yy1170: yych = *++YYCURSOR; - if (yybm[0+yych] & 128) { - goto yy1176; + if (yych <= '@') { + if (yych <= '/') goto yy1166; + if (yych <= '9') goto yy1176; + goto yy1166; + } else { + if (yych <= 'F') goto yy1176; + if (yych <= '`') goto yy1166; + if (yych <= 'f') goto yy1176; + goto yy1166; } - goto yy1165; yy1171: + yych = *++YYCURSOR; + if (yybm[0+yych] & 128) { + goto yy1177; + } + goto yy1166; +yy1172: yych = *++YYCURSOR; if (yych <= '\\') { if (yych <= '>') { if (yych <= '&') { - if (yych == '"') goto yy1155; - goto yy1165; + if (yych == '"') goto yy1156; + goto yy1166; } else { - if (yych <= '\'') goto yy1155; - if (yych <= '/') goto yy1165; - if (yych <= '7') goto yy1166; - goto yy1165; + if (yych <= '\'') goto yy1156; + if (yych <= '/') goto yy1166; + if (yych <= '7') goto yy1167; + goto yy1166; } } else { if (yych <= 'E') { - if (yych <= '?') goto yy1167; - if (yych <= 'D') goto yy1165; - goto yy1155; + if (yych <= '?') goto yy1168; + if (yych <= 'D') goto yy1166; + goto yy1156; } else { - if (yych == 'U') goto yy1168; - if (yych <= '[') goto yy1165; - goto yy1155; + if (yych == 'U') goto yy1169; + if (yych <= '[') goto yy1166; + goto yy1156; } } } else { if (yych <= 'q') { if (yych <= 'd') { - if (yych <= '`') goto yy1165; - if (yych <= 'b') goto yy1155; - goto yy1165; + if (yych <= '`') goto yy1166; + if (yych <= 'b') goto yy1156; + goto yy1166; } else { - if (yych <= 'f') goto yy1155; - if (yych == 'n') goto yy1155; - goto yy1165; + if (yych <= 'f') goto yy1156; + if (yych == 'n') goto yy1156; + goto yy1166; } } else { if (yych <= 'u') { - if (yych == 's') goto yy1165; - if (yych <= 't') goto yy1155; - goto yy1169; + if (yych == 's') goto yy1166; + if (yych <= 't') goto yy1156; + goto yy1170; } else { - if (yych <= 'v') goto yy1155; - if (yych == 'x') goto yy1170; - goto yy1165; + if (yych <= 'v') goto yy1156; + if (yych == 'x') goto yy1171; + goto yy1166; } } } -yy1172: - yych = *++YYCURSOR; - if (yych <= '/') goto yy1156; - if (yych <= '7') goto yy1155; - goto yy1156; yy1173: yych = *++YYCURSOR; - if (yych == '/') goto yy1155; - goto yy1165; + if (yych <= '/') goto yy1157; + if (yych <= '7') goto yy1156; + goto yy1157; yy1174: yych = *++YYCURSOR; - if (yych <= '@') { - if (yych <= '/') goto yy1165; - if (yych <= '9') goto yy1178; - goto yy1165; - } else { - if (yych <= 'F') goto yy1178; - if (yych <= '`') goto yy1165; - if (yych <= 'f') goto yy1178; - goto yy1165; - } + if (yych == '/') goto yy1156; + goto yy1166; yy1175: yych = *++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy1165; + if (yych <= '/') goto yy1166; if (yych <= '9') goto yy1179; - goto yy1165; + goto yy1166; } else { if (yych <= 'F') goto yy1179; - if (yych <= '`') goto yy1165; + if (yych <= '`') goto yy1166; if (yych <= 'f') goto yy1179; - goto yy1165; + goto yy1166; } yy1176: - ++YYCURSOR; - if (YYLIMIT <= YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - if (yybm[0+yych] & 128) { - goto yy1176; - } - goto yy1156; -yy1178: yych = *++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy1165; + if (yych <= '/') goto yy1166; if (yych <= '9') goto yy1180; - goto yy1165; + goto yy1166; } else { if (yych <= 'F') goto yy1180; - if (yych <= '`') goto yy1165; + if (yych <= '`') goto yy1166; if (yych <= 'f') goto yy1180; - goto yy1165; + goto yy1166; } +yy1177: + ++YYCURSOR; + if (YYLIMIT <= YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if (yybm[0+yych] & 128) { + goto yy1177; + } + goto yy1157; yy1179: yych = *++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy1165; + if (yych <= '/') goto yy1166; if (yych <= '9') goto yy1181; - goto yy1165; + goto yy1166; } else { if (yych <= 'F') goto yy1181; - if (yych <= '`') goto yy1165; + if (yych <= '`') goto yy1166; if (yych <= 'f') goto yy1181; - goto yy1165; + goto yy1166; } yy1180: yych = *++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy1165; - if (yych <= '9') goto yy1169; - goto yy1165; + if (yych <= '/') goto yy1166; + if (yych <= '9') goto yy1182; + goto yy1166; } else { - if (yych <= 'F') goto yy1169; - if (yych <= '`') goto yy1165; - if (yych <= 'f') goto yy1169; - goto yy1165; + if (yych <= 'F') goto yy1182; + if (yych <= '`') goto yy1166; + if (yych <= 'f') goto yy1182; + goto yy1166; } yy1181: yych = *++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy1165; - if (yych <= '9') goto yy1155; - goto yy1165; - } else { - if (yych <= 'F') goto yy1155; - if (yych <= '`') goto yy1165; - if (yych <= 'f') goto yy1155; - goto yy1165; + if (yych <= '/') goto yy1166; + if (yych <= '9') goto yy1170; + goto yy1166; + } else { + if (yych <= 'F') goto yy1170; + if (yych <= '`') goto yy1166; + if (yych <= 'f') goto yy1170; + goto yy1166; + } +yy1182: + yych = *++YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy1166; + if (yych <= '9') goto yy1156; + goto yy1166; + } else { + if (yych <= 'F') goto yy1156; + if (yych <= '`') goto yy1166; + if (yych <= 'f') goto yy1156; + goto yy1166; } } #line 628 "cpp.re" diff --git a/include/boost/wave/cpplexer/re2clex/strict_cpp_re.inc b/include/boost/wave/cpplexer/re2clex/strict_cpp_re.inc index d7665768b..e65124e22 100644 --- a/include/boost/wave/cpplexer/re2clex/strict_cpp_re.inc +++ b/include/boost/wave/cpplexer/re2clex/strict_cpp_re.inc @@ -1,4 +1,4 @@ -/* Generated by re2c 1.0.2 on Sun Oct 26 21:28:07 2025 */ +/* Generated by re2c 1.0.2 on Thu Nov 13 14:28:22 2025 */ #line 1 "strict_cpp.re" /*============================================================================= Boost.Wave: A Standard compliant C++ preprocessor library diff --git a/include/boost/wave/grammars/cpp_intlit_grammar.hpp b/include/boost/wave/grammars/cpp_intlit_grammar.hpp index c078c6de2..05010ddd2 100644 --- a/include/boost/wave/grammars/cpp_intlit_grammar.hpp +++ b/include/boost/wave/grammars/cpp_intlit_grammar.hpp @@ -13,6 +13,8 @@ #include +#include + #include #include #include @@ -171,13 +173,20 @@ intlit_grammar_gen::evaluate(TokenT const &token, intlit_grammar g(is_unsigned); uint_literal_type result = 0; typename TokenT::string_type const &token_val = token.get_value(); + + // filter out digit separators + auto not_digit_separator = [](char c){ return c != '\''; }; + auto digits_begin = boost::make_filter_iterator(not_digit_separator, token_val.begin(), token_val.end()); + auto digits_end = boost::make_filter_iterator(not_digit_separator, token_val.end(), token_val.end()); + typename TokenT::string_type token_digits(digits_begin, digits_end); + using boost::spirit::classic::parse_info; parse_info hit = - parse(token_val.begin(), token_val.end(), g[spirit_assign_actor(result)]); + parse(token_digits.begin(), token_digits.end(), g[spirit_assign_actor(result)]); if (!hit.hit) { BOOST_WAVE_THROW(preprocess_exception, ill_formed_integer_literal, - token_val.c_str(), token.get_position()); + token_digits.c_str(), token.get_position()); } return result; } diff --git a/test/testwave/testfiles/t_5_014.cpp b/test/testwave/testfiles/t_5_014.cpp index c7bae19f7..8020de414 100644 --- a/test/testwave/testfiles/t_5_014.cpp +++ b/test/testwave/testfiles/t_5_014.cpp @@ -16,9 +16,10 @@ // Tests integer preprocessing number token and type of #if expression. //O --long_long +//O --c++17 // 12.1: -//R #line 26 "t_5_014.cpp" +//R #line 27 "t_5_014.cpp" //R true #if __TESTWAVE_LONG_MAX__ <= __TESTWAVE_LONG_MIN__ "Bad evaluation of long." @@ -26,7 +27,7 @@ true #endif -//R #line 34 "t_5_014.cpp" +//R #line 35 "t_5_014.cpp" //R true #if __TESTWAVE_LONG_MAX__ <= (__TESTWAVE_LONG_MAX__ / 2) /* 0x3FFFFFFF */ "Bad evaluation of long." @@ -35,7 +36,7 @@ true #endif // 12.2: -//R #line 43 "t_5_014.cpp" +//R #line 44 "t_5_014.cpp" //R true #if __TESTWAVE_ULONG_MAX__ / 2 < __TESTWAVE_LONG_MAX__ "Bad evaluation of unsigned long." @@ -44,7 +45,7 @@ true #endif // 12.3: Octal number. -//R #line 52 "t_5_014.cpp" +//R #line 53 "t_5_014.cpp" //R true #if 0177777 != 65535 "Bad evaluation of octal number." @@ -53,7 +54,7 @@ true #endif // 12.4: Hexadecimal number. -//R #line 61 "t_5_014.cpp" +//R #line 62 "t_5_014.cpp" //R true #if 0Xffff != 65535 || 0xFfFf != 65535 "Bad evaluation of hexadecimal number." @@ -62,7 +63,7 @@ true #endif // 12.5: Suffix 'L' or 'l'. -//R #line 70 "t_5_014.cpp" +//R #line 71 "t_5_014.cpp" //R true #if 0L != 0 || 0l != 0 "Bad evaluation of 'L' suffix." @@ -71,7 +72,7 @@ true #endif // 12.6: Suffix 'U' or 'u'. -//R #line 79 "t_5_014.cpp" +//R #line 80 "t_5_014.cpp" //R true #if 1U != 1 || 1u != 1 "Bad evaluation of 'U' suffix." @@ -80,7 +81,7 @@ true #endif // 12.7: Negative integer. -//R #line 88 "t_5_014.cpp" +//R #line 89 "t_5_014.cpp" //R true #if 0 <= -1 "Bad evaluation of negative number." @@ -89,7 +90,7 @@ true #endif // 12.8: Long Long integers -//R #line 97 "t_5_014.cpp" +//R #line 98 "t_5_014.cpp" //R true #if 0LL != 0 || 0ll != 0 "Bad evaluation of 'LL' suffix." @@ -98,7 +99,7 @@ true #endif // 12.8: Unsigned Long Long integers -//R #line 106 "t_5_014.cpp" +//R #line 107 "t_5_014.cpp" //R true #if 1ull != 1 || 1uLL != 1 || 1Ull != 1 || 1ULL != 1 || 1llu != 1 || 1llU != 1 || 1LLu != 1 || 1LLU != 1 "Bad evaluation of 'ULL' or 'LLU' suffix." @@ -107,7 +108,7 @@ true #endif // 12.9: invalid (mixed case) long long integers -//R #line 115 "t_5_014.cpp" +//R #line 116 "t_5_014.cpp" //R long long foo = 1234l L; //R long long bar = 5678L l; //R unsigned long long baz = 1234uL l; @@ -117,6 +118,81 @@ long long bar = 5678Ll; unsigned long long baz = 1234uLl; unsigned long long quux = 5678uLl; +// Evaluating numbers containing digit separators + +//R #line 128 "t_5_014.cpp" +//R true +#if 120'3 < 120'2 + "Bad comparison of signed integers with digit separators" +#else + true +#endif + +//R #line 136 "t_5_014.cpp" +//R true +#if 1'202 != 120'2l + "Bad equality comparison of signed integers with digit separators" +#else + true +#endif + +//R #line 144 "t_5_014.cpp" +//R true +#if 120'3ul < 120'2u + "Bad comparison of unsigned integers with digit separators" +#else + true +#endif + +//R #line 152 "t_5_014.cpp" +//R true +#if 1'202U != 120'2UL + "Bad equality comparison of unsigned integers with digit separators" +#else + true +#endif + +//R #line 160 "t_5_014.cpp" +//R true +#if 0x13'37c0de != 0x13'37c0'de + "Bad equality comparison of hex integers with digit separators" +#else + true +#endif + +//R #line 168 "t_5_014.cpp" +//R true +#if 0x13'37c0de < 0x13'27c0'de + "Bad comparison of hex integers with digit separators" +#else + true +#endif + +//R #line 176 "t_5_014.cpp" +//R true +#if 0b10'0101 != 0b1'00101 + "Bad equality comparison of binary integers with digit separators" +#else + true +#endif + +//R #line 184 "t_5_014.cpp" +//R true +#if 0b10'0101 > 0b11'0101 + "Bad comparison of binary integers with digit separators" +#else + true +#endif + +// Now one comparison the other way, just in case +//R #line 191 "t_5_014.cpp" +//R true +#if 0x13'37c0d'e == 0x1'3'3'7'c0de + true +#else + "Bad equality comparison for many hex digits with separator" +#endif + /*- * Copyright (c) 1998, 2002-2005 Kiyoshi Matsui diff --git a/test/testwave/testfiles/t_5_038.cpp b/test/testwave/testfiles/t_5_038.cpp index 1af756f3e..60883aedc 100644 --- a/test/testwave/testfiles/t_5_038.cpp +++ b/test/testwave/testfiles/t_5_038.cpp @@ -11,12 +11,12 @@ // Verify that long integer literals from a macro expansion parse correctly // This test covers #162 -//O --c++11 +//O --c++17 //O -DFOO=0x1234567ULL #define BAZ (FOO*2UL+1UL) #define BAR (BAZ + 1ULL) -#if defined(BAR) && (BAR == 0x2468AD0) +#if defined(BAR) && (BAR == 0x246'8AD0) struct Bar {}; #else #endif