diff --git a/ext/date/lib/parse_date.c b/ext/date/lib/parse_date.c index a53fdc21547..ea1602ef13b 100644 --- a/ext/date/lib/parse_date.c +++ b/ext/date/lib/parse_date.c @@ -1,4 +1,4 @@ -/* Generated by re2c 1.0.3 on Thu Nov 23 16:02:28 2023 */ +/* Generated by re2c 1.0.3 on Wed Sep 11 17:29:29 2024 */ #line 1 "ext/date/lib/parse_date.re" /* * The MIT License (MIT) @@ -549,22 +549,26 @@ static timelib_ull timelib_get_signed_nr(Scanner *s, const char **ptr, int max_l timelib_sll tmp_nr = 0; int len = 0; - str = timelib_calloc(1, max_length + 2); // for sign and \0 - str_ptr = str; + /* Skip over non-numeric chars */ while (((**ptr < '0') || (**ptr > '9')) && (**ptr != '+') && (**ptr != '-')) { if (**ptr == '\0') { add_error(s, TIMELIB_ERR_UNEXPECTED_DATA, "Found unexpected data"); - timelib_free(str); return 0; } ++*ptr; } + + /* Allocate string to feed to strtoll(): sign + length + '\0' */ + str = timelib_calloc(1, max_length + 2); + str[0] = '+'; /* First position is the sign */ + str_ptr = str + 1; - if ((**ptr == '+') || (**ptr == '-')) { - *str_ptr = **ptr; + while ((**ptr == '+') || (**ptr == '-')) { + if (**ptr == '-') { + str[0] = str[0] == '+' ? '-' : '+'; + } ++*ptr; - ++str_ptr; } while (((**ptr < '0') || (**ptr > '9'))) { @@ -715,7 +719,7 @@ static const timelib_relunit* timelib_lookup_relunit(const char **ptr) static void add_with_overflow(Scanner *s, timelib_sll *e, timelib_sll amount, int multiplier) { -#if defined(__has_builtin) && __has_builtin(__builtin_saddll_overflow) +#if TIMELIB_HAVE_BUILTIN_SADDLL_OVERFLOW if (__builtin_saddll_overflow(*e, amount * multiplier, e)) { add_error(s, TIMELIB_ERR_NUMBER_OUT_OF_RANGE, "Number out of range"); } @@ -1014,11 +1018,11 @@ static int scan(Scanner *s, timelib_tz_get_wrapper tz_get_wrapper) std: s->tok = cursor; s->len = 0; -#line 1147 "ext/date/lib/parse_date.re" +#line 1151 "ext/date/lib/parse_date.re" -#line 1022 "" +#line 1026 "" { YYCTYPE yych; unsigned int yyaccept = 0; @@ -1199,23 +1203,23 @@ yy2: YYDEBUG(2, *YYCURSOR); ++YYCURSOR; YYDEBUG(3, *YYCURSOR); -#line 1980 "ext/date/lib/parse_date.re" +#line 1984 "ext/date/lib/parse_date.re" { s->pos = cursor; s->line++; goto std; } -#line 1208 "" +#line 1212 "" yy4: YYDEBUG(4, *YYCURSOR); ++YYCURSOR; yy5: YYDEBUG(5, *YYCURSOR); -#line 1986 "ext/date/lib/parse_date.re" +#line 1990 "ext/date/lib/parse_date.re" { add_error(s, TIMELIB_ERR_UNEXPECTED_CHARACTER, "Unexpected character"); goto std; } -#line 1219 "" +#line 1223 "" yy6: YYDEBUG(6, *YYCURSOR); yyaccept = 0; @@ -1230,11 +1234,11 @@ yy6: if (yych <= '9') goto yy58; yy8: YYDEBUG(8, *YYCURSOR); -#line 1975 "ext/date/lib/parse_date.re" +#line 1979 "ext/date/lib/parse_date.re" { goto std; } -#line 1238 "" +#line 1242 "" yy9: YYDEBUG(9, *YYCURSOR); yych = *++YYCURSOR; @@ -1268,11 +1272,11 @@ yy11: YYDEBUG(11, *YYCURSOR); ++YYCURSOR; YYDEBUG(12, *YYCURSOR); -#line 1970 "ext/date/lib/parse_date.re" +#line 1974 "ext/date/lib/parse_date.re" { goto std; } -#line 1276 "" +#line 1280 "" yy13: YYDEBUG(13, *YYCURSOR); yyaccept = 1; @@ -1773,7 +1777,7 @@ yy19: } yy20: YYDEBUG(20, *YYCURSOR); -#line 1885 "ext/date/lib/parse_date.re" +#line 1889 "ext/date/lib/parse_date.re" { int tz_not_found; DEBUG_OUTPUT("tzcorrection | tz"); @@ -1787,7 +1791,7 @@ yy20: TIMELIB_DEINIT; return TIMELIB_TIMEZONE; } -#line 1791 "" +#line 1795 "" yy21: YYDEBUG(21, *YYCURSOR); yych = *++YYCURSOR; @@ -3592,7 +3596,7 @@ yy80: } yy81: YYDEBUG(81, *YYCURSOR); -#line 1632 "ext/date/lib/parse_date.re" +#line 1636 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("datenoyearrev"); TIMELIB_INIT; @@ -3603,7 +3607,7 @@ yy81: TIMELIB_DEINIT; return TIMELIB_DATE_TEXT; } -#line 3607 "" +#line 3611 "" yy82: YYDEBUG(82, *YYCURSOR); yych = *++YYCURSOR; @@ -4118,7 +4122,7 @@ yy112: } if (yych == '.') goto yy289; YYDEBUG(114, *YYCURSOR); -#line 1207 "ext/date/lib/parse_date.re" +#line 1211 "ext/date/lib/parse_date.re" { timelib_ull i; @@ -4143,7 +4147,7 @@ yy112: TIMELIB_DEINIT; return TIMELIB_RELATIVE; } -#line 4147 "" +#line 4151 "" yy115: YYDEBUG(115, *YYCURSOR); ++YYCURSOR; @@ -5869,7 +5873,7 @@ yy176: } yy177: YYDEBUG(177, *YYCURSOR); -#line 1373 "ext/date/lib/parse_date.re" +#line 1377 "ext/date/lib/parse_date.re" { int tz_not_found; DEBUG_OUTPUT("timetiny24 | timeshort24 | timelong24 | iso8601long"); @@ -5896,7 +5900,7 @@ yy177: TIMELIB_DEINIT; return TIMELIB_TIME24_WITH_ZONE; } -#line 5900 "" +#line 5904 "" yy178: YYDEBUG(178, *YYCURSOR); yyaccept = 4; @@ -6925,7 +6929,7 @@ yy223: } yy224: YYDEBUG(224, *YYCURSOR); -#line 1467 "ext/date/lib/parse_date.re" +#line 1471 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("americanshort | american"); @@ -6940,7 +6944,7 @@ yy224: TIMELIB_DEINIT; return TIMELIB_AMERICAN; } -#line 6944 "" +#line 6948 "" yy225: YYDEBUG(225, *YYCURSOR); yyaccept = 5; @@ -7183,7 +7187,7 @@ yy250: if (yych <= '9') goto yy431; yy251: YYDEBUG(251, *YYCURSOR); -#line 1549 "ext/date/lib/parse_date.re" +#line 1553 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("datefull"); @@ -7197,7 +7201,7 @@ yy251: TIMELIB_DEINIT; return TIMELIB_DATE_FULL; } -#line 7201 "" +#line 7205 "" yy252: YYDEBUG(252, *YYCURSOR); yyaccept = 3; @@ -7311,7 +7315,7 @@ yy259: if (yych == 'e') goto yy440; yy260: YYDEBUG(260, *YYCURSOR); -#line 1954 "ext/date/lib/parse_date.re" +#line 1958 "ext/date/lib/parse_date.re" { timelib_ull i; DEBUG_OUTPUT("relative"); @@ -7326,7 +7330,7 @@ yy260: TIMELIB_DEINIT; return TIMELIB_RELATIVE; } -#line 7330 "" +#line 7334 "" yy261: YYDEBUG(261, *YYCURSOR); yych = *++YYCURSOR; @@ -7772,7 +7776,7 @@ yy289: if (yych <= '9') goto yy471; yy290: YYDEBUG(290, *YYCURSOR); -#line 1233 "ext/date/lib/parse_date.re" +#line 1237 "ext/date/lib/parse_date.re" { timelib_sll i; timelib_ull us; @@ -7811,7 +7815,7 @@ yy290: TIMELIB_DEINIT; return TIMELIB_RELATIVE; } -#line 7815 "" +#line 7819 "" yy291: YYDEBUG(291, *YYCURSOR); yych = *++YYCURSOR; @@ -7836,7 +7840,7 @@ yy292: } yy293: YYDEBUG(293, *YYCURSOR); -#line 1795 "ext/date/lib/parse_date.re" +#line 1799 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("ago"); TIMELIB_INIT; @@ -7856,7 +7860,7 @@ yy293: TIMELIB_DEINIT; return TIMELIB_AGO; } -#line 7860 "" +#line 7864 "" yy294: YYDEBUG(294, *YYCURSOR); yyaccept = 7; @@ -7895,7 +7899,7 @@ yy294: } yy295: YYDEBUG(295, *YYCURSOR); -#line 1875 "ext/date/lib/parse_date.re" +#line 1879 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("monthtext"); TIMELIB_INIT; @@ -7904,7 +7908,7 @@ yy295: TIMELIB_DEINIT; return TIMELIB_DATE_TEXT; } -#line 7908 "" +#line 7912 "" yy296: YYDEBUG(296, *YYCURSOR); yyaccept = 7; @@ -8479,7 +8483,7 @@ yy314: } yy315: YYDEBUG(315, *YYCURSOR); -#line 1816 "ext/date/lib/parse_date.re" +#line 1820 "ext/date/lib/parse_date.re" { const timelib_relunit* relunit; DEBUG_OUTPUT("daytext"); @@ -8496,7 +8500,7 @@ yy315: TIMELIB_DEINIT; return TIMELIB_WEEKDAY; } -#line 8500 "" +#line 8504 "" yy316: YYDEBUG(316, *YYCURSOR); yych = *++YYCURSOR; @@ -8764,7 +8768,7 @@ yy324: } yy325: YYDEBUG(325, *YYCURSOR); -#line 1618 "ext/date/lib/parse_date.re" +#line 1622 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("datetextual | datenoyear"); @@ -8777,7 +8781,7 @@ yy325: TIMELIB_DEINIT; return TIMELIB_DATE_TEXT; } -#line 8781 "" +#line 8785 "" yy326: YYDEBUG(326, *YYCURSOR); yyaccept = 10; @@ -9471,7 +9475,7 @@ yy350: } yy351: YYDEBUG(351, *YYCURSOR); -#line 1164 "ext/date/lib/parse_date.re" +#line 1168 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("now"); TIMELIB_INIT; @@ -9479,7 +9483,7 @@ yy351: TIMELIB_DEINIT; return TIMELIB_RELATIVE; } -#line 9483 "" +#line 9487 "" yy352: YYDEBUG(352, *YYCURSOR); yyaccept = 2; @@ -10982,7 +10986,7 @@ yy419: } yy420: YYDEBUG(420, *YYCURSOR); -#line 1401 "ext/date/lib/parse_date.re" +#line 1405 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("gnunocolon"); TIMELIB_INIT; @@ -11004,7 +11008,7 @@ yy420: TIMELIB_DEINIT; return TIMELIB_GNU_NOCOLON; } -#line 11008 "" +#line 11012 "" yy421: YYDEBUG(421, *YYCURSOR); yyaccept = 13; @@ -11085,7 +11089,7 @@ yy421: } yy422: YYDEBUG(422, *YYCURSOR); -#line 1786 "ext/date/lib/parse_date.re" +#line 1790 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("year4"); TIMELIB_INIT; @@ -11093,7 +11097,7 @@ yy422: TIMELIB_DEINIT; return TIMELIB_CLF; } -#line 11097 "" +#line 11101 "" yy423: YYDEBUG(423, *YYCURSOR); yyaccept = 3; @@ -11700,7 +11704,7 @@ yy456: YYDEBUG(456, *YYCURSOR); ++YYCURSOR; YYDEBUG(457, *YYCURSOR); -#line 1335 "ext/date/lib/parse_date.re" +#line 1339 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("timetiny12 | timeshort12 | timelong12"); TIMELIB_INIT; @@ -11717,7 +11721,7 @@ yy456: TIMELIB_DEINIT; return TIMELIB_TIME12; } -#line 11721 "" +#line 11725 "" yy458: YYDEBUG(458, *YYCURSOR); yych = *++YYCURSOR; @@ -13044,7 +13048,7 @@ yy525: } yy526: YYDEBUG(526, *YYCURSOR); -#line 1173 "ext/date/lib/parse_date.re" +#line 1177 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("noon"); TIMELIB_INIT; @@ -13055,7 +13059,7 @@ yy526: TIMELIB_DEINIT; return TIMELIB_RELATIVE; } -#line 13059 "" +#line 13063 "" yy527: YYDEBUG(527, *YYCURSOR); yyaccept = 2; @@ -14101,7 +14105,7 @@ yy566: } yy567: YYDEBUG(567, *YYCURSOR); -#line 1535 "ext/date/lib/parse_date.re" +#line 1539 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("gnudateshort"); @@ -14114,7 +14118,7 @@ yy567: TIMELIB_DEINIT; return TIMELIB_ISO_DATE; } -#line 14118 "" +#line 14122 "" yy568: YYDEBUG(568, *YYCURSOR); yyaccept = 15; @@ -14565,7 +14569,7 @@ yy599: } yy600: YYDEBUG(600, *YYCURSOR); -#line 1604 "ext/date/lib/parse_date.re" +#line 1608 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("datenodayrev"); @@ -14578,7 +14582,7 @@ yy600: TIMELIB_DEINIT; return TIMELIB_DATE_NO_DAY; } -#line 14582 "" +#line 14586 "" yy601: YYDEBUG(601, *YYCURSOR); yych = *++YYCURSOR; @@ -15953,7 +15957,7 @@ yy696: YYDEBUG(696, *YYCURSOR); ++YYCURSOR; YYDEBUG(697, *YYCURSOR); -#line 1590 "ext/date/lib/parse_date.re" +#line 1594 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("datenoday"); @@ -15966,7 +15970,7 @@ yy696: TIMELIB_DEINIT; return TIMELIB_DATE_NO_DAY; } -#line 15970 "" +#line 15974 "" yy698: YYDEBUG(698, *YYCURSOR); yych = *++YYCURSOR; @@ -16527,7 +16531,7 @@ yy721: } yy722: YYDEBUG(722, *YYCURSOR); -#line 1185 "ext/date/lib/parse_date.re" +#line 1189 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("midnight | today"); TIMELIB_INIT; @@ -16536,7 +16540,7 @@ yy722: TIMELIB_DEINIT; return TIMELIB_RELATIVE; } -#line 16540 "" +#line 16544 "" yy723: YYDEBUG(723, *YYCURSOR); yych = *++YYCURSOR; @@ -16846,7 +16850,7 @@ yy738: if (yych <= '9') goto yy897; yy739: YYDEBUG(739, *YYCURSOR); -#line 1576 "ext/date/lib/parse_date.re" +#line 1580 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("pointed date YY"); @@ -16859,7 +16863,7 @@ yy739: TIMELIB_DEINIT; return TIMELIB_DATE_FULL_POINTED; } -#line 16863 "" +#line 16867 "" yy740: YYDEBUG(740, *YYCURSOR); yyaccept = 15; @@ -16971,7 +16975,7 @@ yy751: } yy752: YYDEBUG(752, *YYCURSOR); -#line 1521 "ext/date/lib/parse_date.re" +#line 1525 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("gnudateshorter"); @@ -16984,7 +16988,7 @@ yy752: TIMELIB_DEINIT; return TIMELIB_ISO_DATE; } -#line 16988 "" +#line 16992 "" yy753: YYDEBUG(753, *YYCURSOR); yyaccept = 18; @@ -17233,7 +17237,7 @@ yy776: } yy777: YYDEBUG(777, *YYCURSOR); -#line 1447 "ext/date/lib/parse_date.re" +#line 1451 "ext/date/lib/parse_date.re" { int tz_not_found; DEBUG_OUTPUT("iso8601nocolon"); @@ -17252,7 +17256,7 @@ yy777: TIMELIB_DEINIT; return TIMELIB_ISO_NOCOLON; } -#line 17256 "" +#line 17260 "" yy778: YYDEBUG(778, *YYCURSOR); yyaccept = 19; @@ -18480,7 +18484,7 @@ yy848: } yy849: YYDEBUG(849, *YYCURSOR); -#line 1924 "ext/date/lib/parse_date.re" +#line 1928 "ext/date/lib/parse_date.re" { int tz_not_found; DEBUG_OUTPUT("dateshortwithtimeshort | dateshortwithtimelong | dateshortwithtimelongtz"); @@ -18509,7 +18513,7 @@ yy849: TIMELIB_DEINIT; return TIMELIB_SHORTDATE_WITH_TIME; } -#line 18513 "" +#line 18517 "" yy850: YYDEBUG(850, *YYCURSOR); yyaccept = 20; @@ -19553,7 +19557,7 @@ yy925: } yy926: YYDEBUG(926, *YYCURSOR); -#line 1682 "ext/date/lib/parse_date.re" +#line 1686 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("pgydotd"); @@ -19566,7 +19570,7 @@ yy926: TIMELIB_DEINIT; return TIMELIB_PG_YEARDAY; } -#line 19570 "" +#line 19574 "" yy927: YYDEBUG(927, *YYCURSOR); yyaccept = 21; @@ -19820,7 +19824,7 @@ yy941: if (yych <= '7') goto yy1059; yy942: YYDEBUG(942, *YYCURSOR); -#line 1715 "ext/date/lib/parse_date.re" +#line 1719 "ext/date/lib/parse_date.re" { timelib_sll w, d; DEBUG_OUTPUT("isoweek"); @@ -19838,7 +19842,7 @@ yy942: TIMELIB_DEINIT; return TIMELIB_ISO_WEEK; } -#line 19842 "" +#line 19846 "" yy943: YYDEBUG(943, *YYCURSOR); yych = *++YYCURSOR; @@ -20314,7 +20318,7 @@ yy981: if (yych == 'e') goto yy1094; yy982: YYDEBUG(982, *YYCURSOR); -#line 1858 "ext/date/lib/parse_date.re" +#line 1862 "ext/date/lib/parse_date.re" { timelib_sll i; int behavior = 0; @@ -20330,7 +20334,7 @@ yy982: TIMELIB_DEINIT; return TIMELIB_RELATIVE; } -#line 20334 "" +#line 20338 "" yy983: YYDEBUG(983, *YYCURSOR); yych = *++YYCURSOR; @@ -20677,7 +20681,7 @@ yy1020: YYDEBUG(1020, *YYCURSOR); ++YYCURSOR; YYDEBUG(1021, *YYCURSOR); -#line 1564 "ext/date/lib/parse_date.re" +#line 1568 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("pointed date YYYY"); TIMELIB_INIT; @@ -20688,7 +20692,7 @@ yy1020: TIMELIB_DEINIT; return TIMELIB_DATE_FULL_POINTED; } -#line 20692 "" +#line 20696 "" yy1022: YYDEBUG(1022, *YYCURSOR); ++YYCURSOR; @@ -20717,7 +20721,7 @@ yy1024: } yy1025: YYDEBUG(1025, *YYCURSOR); -#line 1495 "ext/date/lib/parse_date.re" +#line 1499 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("iso8601date2"); @@ -20730,7 +20734,7 @@ yy1025: TIMELIB_DEINIT; return TIMELIB_ISO_DATE; } -#line 20734 "" +#line 20738 "" yy1026: YYDEBUG(1026, *YYCURSOR); yyaccept = 15; @@ -20950,7 +20954,7 @@ yy1042: } yy1043: YYDEBUG(1043, *YYCURSOR); -#line 1483 "ext/date/lib/parse_date.re" +#line 1487 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("iso8601date4 | iso8601date2 | iso8601dateslash | dateslash"); TIMELIB_INIT; @@ -20961,7 +20965,7 @@ yy1043: TIMELIB_DEINIT; return TIMELIB_ISO_DATE; } -#line 20965 "" +#line 20969 "" yy1044: YYDEBUG(1044, *YYCURSOR); yyaccept = 26; @@ -21076,7 +21080,7 @@ yy1047: } yy1048: YYDEBUG(1048, *YYCURSOR); -#line 1644 "ext/date/lib/parse_date.re" +#line 1648 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("datenocolon"); TIMELIB_INIT; @@ -21087,7 +21091,7 @@ yy1048: TIMELIB_DEINIT; return TIMELIB_DATE_NOCOLON; } -#line 21091 "" +#line 21095 "" yy1049: YYDEBUG(1049, *YYCURSOR); yych = *++YYCURSOR; @@ -21157,7 +21161,7 @@ yy1059: YYDEBUG(1059, *YYCURSOR); ++YYCURSOR; YYDEBUG(1060, *YYCURSOR); -#line 1696 "ext/date/lib/parse_date.re" +#line 1700 "ext/date/lib/parse_date.re" { timelib_sll w, d; DEBUG_OUTPUT("isoweekday"); @@ -21175,7 +21179,7 @@ yy1059: TIMELIB_DEINIT; return TIMELIB_ISO_WEEK; } -#line 21179 "" +#line 21183 "" yy1061: YYDEBUG(1061, *YYCURSOR); yych = *++YYCURSOR; @@ -21238,7 +21242,7 @@ yy1069: if (yych <= '9') goto yy1143; yy1070: YYDEBUG(1070, *YYCURSOR); -#line 1734 "ext/date/lib/parse_date.re" +#line 1738 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("pgtextshort"); @@ -21251,7 +21255,7 @@ yy1070: TIMELIB_DEINIT; return TIMELIB_PG_TEXT; } -#line 21255 "" +#line 21259 "" yy1071: YYDEBUG(1071, *YYCURSOR); yych = *++YYCURSOR; @@ -21724,7 +21728,7 @@ yy1106: ++YYCURSOR; yy1107: YYDEBUG(1107, *YYCURSOR); -#line 1195 "ext/date/lib/parse_date.re" +#line 1199 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("tomorrow"); TIMELIB_INIT; @@ -21735,7 +21739,7 @@ yy1107: TIMELIB_DEINIT; return TIMELIB_RELATIVE; } -#line 21739 "" +#line 21743 "" yy1108: YYDEBUG(1108, *YYCURSOR); yyaccept = 28; @@ -22072,7 +22076,7 @@ yy1140: YYDEBUG(1140, *YYCURSOR); ++YYCURSOR; YYDEBUG(1141, *YYCURSOR); -#line 1748 "ext/date/lib/parse_date.re" +#line 1752 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("pgtextreverse"); @@ -22085,7 +22089,7 @@ yy1140: TIMELIB_DEINIT; return TIMELIB_PG_TEXT; } -#line 22089 "" +#line 22093 "" yy1142: YYDEBUG(1142, *YYCURSOR); ++YYCURSOR; @@ -22129,7 +22133,7 @@ yy1144: } yy1145: YYDEBUG(1145, *YYCURSOR); -#line 1290 "ext/date/lib/parse_date.re" +#line 1294 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("backof | frontof"); TIMELIB_INIT; @@ -22151,7 +22155,7 @@ yy1145: TIMELIB_DEINIT; return TIMELIB_LF_DAY_OF_MONTH; } -#line 22155 "" +#line 22159 "" yy1146: YYDEBUG(1146, *YYCURSOR); yyaccept = 29; @@ -22475,7 +22479,7 @@ yy1171: } yy1172: YYDEBUG(1172, *YYCURSOR); -#line 1834 "ext/date/lib/parse_date.re" +#line 1838 "ext/date/lib/parse_date.re" { timelib_sll i; int behavior = 0; @@ -22498,7 +22502,7 @@ yy1172: TIMELIB_DEINIT; return TIMELIB_RELATIVE; } -#line 22502 "" +#line 22506 "" yy1173: YYDEBUG(1173, *YYCURSOR); yych = *++YYCURSOR; @@ -22510,7 +22514,7 @@ yy1174: ++YYCURSOR; yy1175: YYDEBUG(1175, *YYCURSOR); -#line 1152 "ext/date/lib/parse_date.re" +#line 1156 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("yesterday"); TIMELIB_INIT; @@ -22521,7 +22525,7 @@ yy1175: TIMELIB_DEINIT; return TIMELIB_RELATIVE; } -#line 22525 "" +#line 22529 "" yy1176: YYDEBUG(1176, *YYCURSOR); yyaccept = 31; @@ -23014,7 +23018,7 @@ yy1222: YYDEBUG(1222, *YYCURSOR); ++YYCURSOR; YYDEBUG(1223, *YYCURSOR); -#line 1900 "ext/date/lib/parse_date.re" +#line 1904 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("dateshortwithtimeshort12 | dateshortwithtimelong12"); TIMELIB_INIT; @@ -23037,7 +23041,7 @@ yy1222: TIMELIB_DEINIT; return TIMELIB_SHORTDATE_WITH_TIME; } -#line 23041 "" +#line 23045 "" yy1224: YYDEBUG(1224, *YYCURSOR); yych = *++YYCURSOR; @@ -23539,7 +23543,7 @@ yy1268: YYDEBUG(1268, *YYCURSOR); ++YYCURSOR; YYDEBUG(1269, *YYCURSOR); -#line 1313 "ext/date/lib/parse_date.re" +#line 1317 "ext/date/lib/parse_date.re" { timelib_sll i; int behavior = 0; @@ -23560,7 +23564,7 @@ yy1268: TIMELIB_DEINIT; return TIMELIB_WEEK_DAY_OF_MONTH; } -#line 23564 "" +#line 23568 "" yy1270: YYDEBUG(1270, *YYCURSOR); yyaccept = 24; @@ -23607,7 +23611,7 @@ yy1273: YYDEBUG(1273, *YYCURSOR); ++YYCURSOR; YYDEBUG(1274, *YYCURSOR); -#line 1273 "ext/date/lib/parse_date.re" +#line 1277 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("firstdayof | lastdayof"); TIMELIB_INIT; @@ -23623,12 +23627,12 @@ yy1273: TIMELIB_DEINIT; return TIMELIB_LF_DAY_OF_MONTH; } -#line 23627 "" +#line 23631 "" yy1275: YYDEBUG(1275, *YYCURSOR); ++YYCURSOR; YYDEBUG(1276, *YYCURSOR); -#line 1509 "ext/date/lib/parse_date.re" +#line 1513 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("iso8601datex"); TIMELIB_INIT; @@ -23639,7 +23643,7 @@ yy1275: TIMELIB_DEINIT; return TIMELIB_ISO_DATE; } -#line 23643 "" +#line 23647 "" yy1277: YYDEBUG(1277, *YYCURSOR); yych = *++YYCURSOR; @@ -23742,7 +23746,7 @@ yy1290: YYDEBUG(1290, *YYCURSOR); ++YYCURSOR; YYDEBUG(1291, *YYCURSOR); -#line 1353 "ext/date/lib/parse_date.re" +#line 1357 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("mssqltime"); TIMELIB_INIT; @@ -23761,7 +23765,7 @@ yy1290: TIMELIB_DEINIT; return TIMELIB_TIME24_WITH_ZONE; } -#line 23765 "" +#line 23769 "" yy1292: YYDEBUG(1292, *YYCURSOR); yych = *++YYCURSOR; @@ -24185,7 +24189,7 @@ yy1328: if (yych <= '9') goto yy1331; yy1329: YYDEBUG(1329, *YYCURSOR); -#line 1656 "ext/date/lib/parse_date.re" +#line 1660 "ext/date/lib/parse_date.re" { int tz_not_found; DEBUG_OUTPUT("xmlrpc | xmlrpcnocolon | soap | wddx | exif"); @@ -24210,7 +24214,7 @@ yy1329: TIMELIB_DEINIT; return TIMELIB_XMLRPC_SOAP; } -#line 24214 "" +#line 24218 "" yy1330: YYDEBUG(1330, *YYCURSOR); yych = *++YYCURSOR; @@ -24580,7 +24584,7 @@ yy1374: if (yych <= ':') goto yy1383; yy1375: YYDEBUG(1375, *YYCURSOR); -#line 1762 "ext/date/lib/parse_date.re" +#line 1766 "ext/date/lib/parse_date.re" { int tz_not_found; DEBUG_OUTPUT("clf"); @@ -24603,7 +24607,7 @@ yy1375: TIMELIB_DEINIT; return TIMELIB_CLF; } -#line 24607 "" +#line 24611 "" yy1376: YYDEBUG(1376, *YYCURSOR); yyaccept = 33; @@ -24835,7 +24839,7 @@ yy1406: if (yych == ':') goto yy1286; goto yy1329; } -#line 1990 "ext/date/lib/parse_date.re" +#line 1994 "ext/date/lib/parse_date.re" } diff --git a/ext/date/lib/parse_date.re b/ext/date/lib/parse_date.re index 5d259ed4e2c..d32be9bfe7b 100644 --- a/ext/date/lib/parse_date.re +++ b/ext/date/lib/parse_date.re @@ -547,22 +547,26 @@ static timelib_ull timelib_get_signed_nr(Scanner *s, const char **ptr, int max_l timelib_sll tmp_nr = 0; int len = 0; - str = timelib_calloc(1, max_length + 2); // for sign and \0 - str_ptr = str; + /* Skip over non-numeric chars */ while (((**ptr < '0') || (**ptr > '9')) && (**ptr != '+') && (**ptr != '-')) { if (**ptr == '\0') { add_error(s, TIMELIB_ERR_UNEXPECTED_DATA, "Found unexpected data"); - timelib_free(str); return 0; } ++*ptr; } + + /* Allocate string to feed to strtoll(): sign + length + '\0' */ + str = timelib_calloc(1, max_length + 2); + str[0] = '+'; /* First position is the sign */ + str_ptr = str + 1; - if ((**ptr == '+') || (**ptr == '-')) { - *str_ptr = **ptr; + while ((**ptr == '+') || (**ptr == '-')) { + if (**ptr == '-') { + str[0] = str[0] == '+' ? '-' : '+'; + } ++*ptr; - ++str_ptr; } while (((**ptr < '0') || (**ptr > '9'))) { @@ -713,7 +717,7 @@ static const timelib_relunit* timelib_lookup_relunit(const char **ptr) static void add_with_overflow(Scanner *s, timelib_sll *e, timelib_sll amount, int multiplier) { -#if defined(__has_builtin) && __has_builtin(__builtin_saddll_overflow) +#if TIMELIB_HAVE_BUILTIN_SADDLL_OVERFLOW if (__builtin_saddll_overflow(*e, amount * multiplier, e)) { add_error(s, TIMELIB_ERR_NUMBER_OUT_OF_RANGE, "Number out of range"); } diff --git a/ext/date/lib/parse_iso_intervals.c b/ext/date/lib/parse_iso_intervals.c index 6715d5cee52..cdc329431ec 100644 --- a/ext/date/lib/parse_iso_intervals.c +++ b/ext/date/lib/parse_iso_intervals.c @@ -1,4 +1,4 @@ -/* Generated by re2c 0.15.3 on Wed Sep 14 16:32:05 2022 */ +/* Generated by re2c 1.0.3 on Wed Sep 11 17:29:40 2024 */ #line 1 "ext/date/lib/parse_iso_intervals.re" /* * The MIT License (MIT) @@ -223,54 +223,72 @@ std: yych = *YYCURSOR; if (yych <= ',') { if (yych <= '\n') { - if (yych <= 0x00) goto yy9; - if (yych <= 0x08) goto yy11; - if (yych <= '\t') goto yy7; - goto yy9; + if (yych <= 0x00) goto yy2; + if (yych <= 0x08) goto yy4; + if (yych <= '\t') goto yy6; } else { - if (yych == ' ') goto yy7; - if (yych <= '+') goto yy11; - goto yy7; + if (yych == ' ') goto yy6; + if (yych <= '+') goto yy4; + goto yy6; } } else { if (yych <= 'O') { - if (yych <= '-') goto yy11; - if (yych <= '/') goto yy7; - if (yych <= '9') goto yy4; - goto yy11; + if (yych <= '-') goto yy4; + if (yych <= '/') goto yy6; + if (yych <= '9') goto yy8; + goto yy4; } else { - if (yych <= 'P') goto yy5; - if (yych != 'R') goto yy11; + if (yych <= 'P') goto yy9; + if (yych == 'R') goto yy11; + goto yy4; } } +yy2: YYDEBUG(2, *YYCURSOR); ++YYCURSOR; - if ((yych = *YYCURSOR) <= '/') goto yy3; - if (yych <= '9') goto yy98; -yy3: YYDEBUG(3, *YYCURSOR); +#line 311 "ext/date/lib/parse_iso_intervals.re" + { + s->pos = cursor; s->line++; + goto std; + } +#line 256 "" +yy4: + YYDEBUG(4, *YYCURSOR); + ++YYCURSOR; +yy5: + YYDEBUG(5, *YYCURSOR); #line 317 "ext/date/lib/parse_iso_intervals.re" { add_error(s, "Unexpected character"); goto std; } -#line 258 "" -yy4: - YYDEBUG(4, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '/') goto yy3; - if (yych <= '9') goto yy59; - goto yy3; -yy5: - YYDEBUG(5, *YYCURSOR); - yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '/') goto yy6; - if (yych <= '9') goto yy12; - if (yych == 'T') goto yy14; +#line 267 "" yy6: YYDEBUG(6, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(7, *YYCURSOR); +#line 306 "ext/date/lib/parse_iso_intervals.re" + { + goto std; + } +#line 276 "" +yy8: + YYDEBUG(8, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '/') goto yy5; + if (yych <= '9') goto yy12; + goto yy5; +yy9: + YYDEBUG(9, *YYCURSOR); + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '/') goto yy10; + if (yych <= '9') goto yy14; + if (yych == 'T') goto yy15; +yy10: + YYDEBUG(10, *YYCURSOR); #line 244 "ext/date/lib/parse_iso_intervals.re" { timelib_sll nr; @@ -312,189 +330,197 @@ yy6: TIMELIB_DEINIT; return TIMELIB_PERIOD; } -#line 316 "" -yy7: - YYDEBUG(7, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(8, *YYCURSOR); -#line 306 "ext/date/lib/parse_iso_intervals.re" - { - goto std; - } -#line 325 "" -yy9: - YYDEBUG(9, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(10, *YYCURSOR); -#line 311 "ext/date/lib/parse_iso_intervals.re" - { - s->pos = cursor; s->line++; - goto std; - } -#line 335 "" +#line 334 "" yy11: YYDEBUG(11, *YYCURSOR); yych = *++YYCURSOR; - goto yy3; + if (yybm[0+yych] & 128) { + goto yy16; + } + goto yy5; yy12: YYDEBUG(12, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= 'L') { - if (yych <= '9') { - if (yych >= '0') goto yy25; - } else { - if (yych == 'D') goto yy24; - } - } else { - if (yych <= 'W') { - if (yych <= 'M') goto yy27; - if (yych >= 'W') goto yy26; - } else { - if (yych == 'Y') goto yy28; - } - } + if (yych <= '/') goto yy13; + if (yych <= '9') goto yy19; yy13: YYDEBUG(13, *YYCURSOR); YYCURSOR = YYMARKER; if (yyaccept == 0) { - goto yy3; + goto yy5; } else { - goto yy6; + goto yy10; } yy14: YYDEBUG(14, *YYCURSOR); - yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - if (yybm[0+yych] & 128) { - goto yy15; - } - goto yy6; -yy15: - YYDEBUG(15, *YYCURSOR); - ++YYCURSOR; - if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = *YYCURSOR; - YYDEBUG(16, *YYCURSOR); - if (yybm[0+yych] & 128) { - goto yy15; - } - if (yych <= 'L') { - if (yych == 'H') goto yy19; - goto yy13; - } else { - if (yych <= 'M') goto yy18; - if (yych != 'S') goto yy13; - } -yy17: - YYDEBUG(17, *YYCURSOR); - yych = *++YYCURSOR; - goto yy6; -yy18: - YYDEBUG(18, *YYCURSOR); - yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '/') goto yy6; - if (yych <= '9') goto yy22; - goto yy6; -yy19: - YYDEBUG(19, *YYCURSOR); - yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '/') goto yy6; - if (yych >= ':') goto yy6; -yy20: - YYDEBUG(20, *YYCURSOR); - ++YYCURSOR; - if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = *YYCURSOR; - YYDEBUG(21, *YYCURSOR); - if (yych <= 'L') { - if (yych <= '/') goto yy13; - if (yych <= '9') goto yy20; - goto yy13; - } else { - if (yych <= 'M') goto yy18; - if (yych == 'S') goto yy17; - goto yy13; - } -yy22: - YYDEBUG(22, *YYCURSOR); - ++YYCURSOR; - if (YYLIMIT <= YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(23, *YYCURSOR); - if (yych <= '/') goto yy13; - if (yych <= '9') goto yy22; - if (yych == 'S') goto yy17; - goto yy13; -yy24: - YYDEBUG(24, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'T') goto yy14; - goto yy6; -yy25: - YYDEBUG(25, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'L') { if (yych <= '9') { if (yych <= '/') goto yy13; - goto yy35; + goto yy20; } else { - if (yych == 'D') goto yy24; + if (yych == 'D') goto yy21; goto yy13; } } else { if (yych <= 'W') { - if (yych <= 'M') goto yy27; + if (yych <= 'M') goto yy22; if (yych <= 'V') goto yy13; + goto yy23; } else { - if (yych == 'Y') goto yy28; + if (yych == 'Y') goto yy24; goto yy13; } } -yy26: - YYDEBUG(26, *YYCURSOR); +yy15: + YYDEBUG(15, *YYCURSOR); yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '/') goto yy6; + if (yych <= '/') goto yy10; + if (yych <= '9') goto yy25; + goto yy10; +yy16: + YYDEBUG(16, *YYCURSOR); + ++YYCURSOR; + if (YYLIMIT <= YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(17, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy16; + } + YYDEBUG(18, *YYCURSOR); +#line 209 "ext/date/lib/parse_iso_intervals.re" + { + DEBUG_OUTPUT("recurrences"); + TIMELIB_INIT; + ptr++; + s->recurrences = timelib_get_unsigned_nr(&ptr, 9); + TIMELIB_DEINIT; + s->have_recurrences = 1; + return TIMELIB_PERIOD; + } +#line 403 "" +yy19: + YYDEBUG(19, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '/') goto yy13; + if (yych <= '9') goto yy27; + goto yy13; +yy20: + YYDEBUG(20, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'L') { + if (yych <= '9') { + if (yych <= '/') goto yy13; + goto yy28; + } else { + if (yych != 'D') goto yy13; + } + } else { + if (yych <= 'W') { + if (yych <= 'M') goto yy22; + if (yych <= 'V') goto yy13; + goto yy23; + } else { + if (yych == 'Y') goto yy24; + goto yy13; + } + } +yy21: + YYDEBUG(21, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy15; + goto yy10; +yy22: + YYDEBUG(22, *YYCURSOR); + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '/') goto yy10; + if (yych <= '9') goto yy29; + if (yych == 'T') goto yy15; + goto yy10; +yy23: + YYDEBUG(23, *YYCURSOR); + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '/') goto yy10; + if (yych <= '9') goto yy31; + if (yych == 'T') goto yy15; + goto yy10; +yy24: + YYDEBUG(24, *YYCURSOR); + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '/') goto yy10; if (yych <= '9') goto yy33; - if (yych == 'T') goto yy14; - goto yy6; + if (yych == 'T') goto yy15; + goto yy10; +yy25: + YYDEBUG(25, *YYCURSOR); + ++YYCURSOR; + if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + YYDEBUG(26, *YYCURSOR); + if (yych <= 'H') { + if (yych <= '/') goto yy13; + if (yych <= '9') goto yy25; + if (yych <= 'G') goto yy13; + goto yy35; + } else { + if (yych <= 'M') { + if (yych <= 'L') goto yy13; + goto yy36; + } else { + if (yych == 'S') goto yy37; + goto yy13; + } + } yy27: YYDEBUG(27, *YYCURSOR); - yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '/') goto yy6; - if (yych <= '9') goto yy31; - if (yych == 'T') goto yy14; - goto yy6; + yych = *++YYCURSOR; + if (yych <= '/') { + if (yych == '-') goto yy38; + goto yy13; + } else { + if (yych <= '0') goto yy39; + if (yych <= '1') goto yy40; + goto yy13; + } yy28: YYDEBUG(28, *YYCURSOR); - yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '/') goto yy6; - if (yych <= '9') goto yy29; - if (yych == 'T') goto yy14; - goto yy6; + yych = *++YYCURSOR; + if (yych <= 'L') { + if (yych <= '9') { + if (yych <= '/') goto yy13; + goto yy41; + } else { + if (yych == 'D') goto yy21; + goto yy13; + } + } else { + if (yych <= 'W') { + if (yych <= 'M') goto yy22; + if (yych <= 'V') goto yy13; + goto yy23; + } else { + if (yych == 'Y') goto yy24; + goto yy13; + } + } yy29: YYDEBUG(29, *YYCURSOR); ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = *YYCURSOR; YYDEBUG(30, *YYCURSOR); - if (yych <= 'D') { + if (yych <= 'C') { if (yych <= '/') goto yy13; if (yych <= '9') goto yy29; - if (yych <= 'C') goto yy13; - goto yy24; + goto yy13; } else { - if (yych <= 'M') { - if (yych <= 'L') goto yy13; - goto yy27; - } else { - if (yych == 'W') goto yy26; - goto yy13; - } + if (yych <= 'D') goto yy21; + if (yych == 'W') goto yy23; + goto yy13; } yy31: YYDEBUG(31, *YYCURSOR); @@ -502,313 +528,372 @@ yy31: if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = *YYCURSOR; YYDEBUG(32, *YYCURSOR); - if (yych <= 'C') { - if (yych <= '/') goto yy13; - if (yych <= '9') goto yy31; - goto yy13; - } else { - if (yych <= 'D') goto yy24; - if (yych == 'W') goto yy26; - goto yy13; - } + if (yych <= '/') goto yy13; + if (yych <= '9') goto yy31; + if (yych == 'D') goto yy21; + goto yy13; yy33: YYDEBUG(33, *YYCURSOR); ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = *YYCURSOR; YYDEBUG(34, *YYCURSOR); - if (yych <= '/') goto yy13; - if (yych <= '9') goto yy33; - if (yych == 'D') goto yy24; - goto yy13; + if (yych <= 'D') { + if (yych <= '/') goto yy13; + if (yych <= '9') goto yy33; + if (yych <= 'C') goto yy13; + goto yy21; + } else { + if (yych <= 'M') { + if (yych <= 'L') goto yy13; + goto yy22; + } else { + if (yych == 'W') goto yy23; + goto yy13; + } + } yy35: YYDEBUG(35, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= 'L') { - if (yych <= '9') { - if (yych <= '/') goto yy13; - } else { - if (yych == 'D') goto yy24; - goto yy13; - } - } else { - if (yych <= 'W') { - if (yych <= 'M') goto yy27; - if (yych <= 'V') goto yy13; - goto yy26; - } else { - if (yych == 'Y') goto yy28; - goto yy13; - } - } + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '/') goto yy10; + if (yych <= '9') goto yy42; + goto yy10; +yy36: YYDEBUG(36, *YYCURSOR); - yych = *++YYCURSOR; - if (yych != '-') goto yy39; + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '/') goto yy10; + if (yych <= '9') goto yy44; + goto yy10; +yy37: YYDEBUG(37, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= '/') goto yy13; - if (yych <= '0') goto yy40; - if (yych <= '1') goto yy41; - goto yy13; + ++YYCURSOR; + goto yy10; yy38: YYDEBUG(38, *YYCURSOR); - ++YYCURSOR; - if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); - yych = *YYCURSOR; + yych = *++YYCURSOR; + if (yych <= '/') goto yy13; + if (yych <= '0') goto yy46; + if (yych <= '1') goto yy47; + goto yy13; yy39: YYDEBUG(39, *YYCURSOR); - if (yych <= 'L') { - if (yych <= '9') { - if (yych <= '/') goto yy13; - goto yy38; - } else { - if (yych == 'D') goto yy24; - goto yy13; - } - } else { - if (yych <= 'W') { - if (yych <= 'M') goto yy27; - if (yych <= 'V') goto yy13; - goto yy26; - } else { - if (yych == 'Y') goto yy28; - goto yy13; - } - } + yych = *++YYCURSOR; + if (yych <= '0') goto yy13; + if (yych <= '9') goto yy48; + goto yy13; yy40: YYDEBUG(40, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy13; - if (yych <= '9') goto yy42; + if (yych <= '2') goto yy48; goto yy13; yy41: YYDEBUG(41, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '/') goto yy13; - if (yych >= '3') goto yy13; + if (yych == '-') goto yy49; + goto yy51; yy42: YYDEBUG(42, *YYCURSOR); - yych = *++YYCURSOR; - if (yych != '-') goto yy13; + ++YYCURSOR; + if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; YYDEBUG(43, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= '/') goto yy13; - if (yych <= '0') goto yy44; - if (yych <= '2') goto yy45; - if (yych <= '3') goto yy46; - goto yy13; + if (yych <= 'L') { + if (yych <= '/') goto yy13; + if (yych <= '9') goto yy42; + goto yy13; + } else { + if (yych <= 'M') goto yy36; + if (yych == 'S') goto yy37; + goto yy13; + } yy44: YYDEBUG(44, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= '/') goto yy13; - if (yych <= '9') goto yy47; - goto yy13; -yy45: + ++YYCURSOR; + if (YYLIMIT <= YYCURSOR) YYFILL(1); + yych = *YYCURSOR; YYDEBUG(45, *YYCURSOR); - yych = *++YYCURSOR; if (yych <= '/') goto yy13; - if (yych <= '9') goto yy47; + if (yych <= '9') goto yy44; + if (yych == 'S') goto yy37; goto yy13; yy46: YYDEBUG(46, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '/') goto yy13; - if (yych >= '2') goto yy13; + if (yych <= '0') goto yy13; + if (yych <= '9') goto yy52; + goto yy13; yy47: YYDEBUG(47, *YYCURSOR); yych = *++YYCURSOR; - if (yych != 'T') goto yy13; + if (yych <= '/') goto yy13; + if (yych <= '2') goto yy52; + goto yy13; +yy48: YYDEBUG(48, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy13; - if (yych <= '1') goto yy49; - if (yych <= '2') goto yy50; + if (yych <= '0') goto yy53; + if (yych <= '2') goto yy54; + if (yych <= '3') goto yy55; goto yy13; yy49: YYDEBUG(49, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy13; - if (yych <= '9') goto yy51; + if (yych <= '0') goto yy56; + if (yych <= '1') goto yy57; goto yy13; yy50: YYDEBUG(50, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= '/') goto yy13; - if (yych >= '5') goto yy13; + ++YYCURSOR; + if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); + yych = *YYCURSOR; yy51: YYDEBUG(51, *YYCURSOR); - yych = *++YYCURSOR; - if (yych != ':') goto yy13; + if (yych <= 'L') { + if (yych <= '9') { + if (yych <= '/') goto yy13; + goto yy50; + } else { + if (yych == 'D') goto yy21; + goto yy13; + } + } else { + if (yych <= 'W') { + if (yych <= 'M') goto yy22; + if (yych <= 'V') goto yy13; + goto yy23; + } else { + if (yych == 'Y') goto yy24; + goto yy13; + } + } +yy52: YYDEBUG(52, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '/') goto yy13; - if (yych >= '6') goto yy13; + if (yych == '-') goto yy58; + goto yy13; +yy53: YYDEBUG(53, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '/') goto yy13; - if (yych >= ':') goto yy13; + if (yych <= '0') goto yy13; + if (yych <= '9') goto yy59; + goto yy13; +yy54: YYDEBUG(54, *YYCURSOR); yych = *++YYCURSOR; - if (yych != ':') goto yy13; + if (yych <= '/') goto yy13; + if (yych <= '9') goto yy59; + goto yy13; +yy55: YYDEBUG(55, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy13; - if (yych >= '6') goto yy13; + if (yych <= '1') goto yy59; + goto yy13; +yy56: YYDEBUG(56, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy13; - if (yych >= ':') goto yy13; + if (yych <= '9') goto yy60; + goto yy13; +yy57: YYDEBUG(57, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych <= '/') goto yy13; + if (yych <= '2') goto yy60; + goto yy13; +yy58: YYDEBUG(58, *YYCURSOR); -#line 286 "ext/date/lib/parse_iso_intervals.re" - { - DEBUG_OUTPUT("combinedrep"); - TIMELIB_INIT; - s->period->y = timelib_get_unsigned_nr(&ptr, 4); - ptr++; - s->period->m = timelib_get_unsigned_nr(&ptr, 2); - ptr++; - s->period->d = timelib_get_unsigned_nr(&ptr, 2); - ptr++; - s->period->h = timelib_get_unsigned_nr(&ptr, 2); - ptr++; - s->period->i = timelib_get_unsigned_nr(&ptr, 2); - ptr++; - s->period->s = timelib_get_unsigned_nr(&ptr, 2); - s->have_period = 1; - TIMELIB_DEINIT; - return TIMELIB_PERIOD; - } -#line 684 "" + yych = *++YYCURSOR; + if (yych <= '/') goto yy13; + if (yych <= '0') goto yy61; + if (yych <= '2') goto yy62; + if (yych <= '3') goto yy63; + goto yy13; yy59: YYDEBUG(59, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '/') goto yy13; - if (yych >= ':') goto yy13; + if (yych == 'T') goto yy64; + goto yy13; +yy60: YYDEBUG(60, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '/') goto yy13; - if (yych >= ':') goto yy13; + if (yych == '-') goto yy65; + goto yy13; +yy61: YYDEBUG(61, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '/') { - if (yych == '-') goto yy64; - goto yy13; - } else { - if (yych <= '0') goto yy62; - if (yych <= '1') goto yy63; - goto yy13; - } + if (yych <= '0') goto yy13; + if (yych <= '9') goto yy66; + goto yy13; yy62: YYDEBUG(62, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '0') goto yy13; - if (yych <= '9') goto yy85; + if (yych <= '/') goto yy13; + if (yych <= '9') goto yy66; goto yy13; yy63: YYDEBUG(63, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy13; - if (yych <= '2') goto yy85; + if (yych <= '1') goto yy66; goto yy13; yy64: YYDEBUG(64, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy13; - if (yych <= '0') goto yy65; - if (yych <= '1') goto yy66; + if (yych <= '1') goto yy67; + if (yych <= '2') goto yy68; goto yy13; yy65: YYDEBUG(65, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '0') goto yy13; - if (yych <= '9') goto yy67; + if (yych <= '/') goto yy13; + if (yych <= '2') goto yy69; + if (yych <= '3') goto yy70; goto yy13; yy66: YYDEBUG(66, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '/') goto yy13; - if (yych >= '3') goto yy13; + if (yych == 'T') goto yy71; + goto yy13; yy67: YYDEBUG(67, *YYCURSOR); yych = *++YYCURSOR; - if (yych != '-') goto yy13; + if (yych <= '/') goto yy13; + if (yych <= '9') goto yy72; + goto yy13; +yy68: YYDEBUG(68, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy13; - if (yych <= '0') goto yy69; - if (yych <= '2') goto yy70; - if (yych <= '3') goto yy71; + if (yych <= '4') goto yy72; goto yy13; yy69: YYDEBUG(69, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '0') goto yy13; - if (yych <= '9') goto yy72; + if (yych <= '/') goto yy13; + if (yych <= '9') goto yy73; goto yy13; yy70: YYDEBUG(70, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy13; - if (yych <= '9') goto yy72; + if (yych <= '1') goto yy73; goto yy13; yy71: YYDEBUG(71, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy13; - if (yych >= '2') goto yy13; + if (yych <= '1') goto yy74; + if (yych <= '2') goto yy75; + goto yy13; yy72: YYDEBUG(72, *YYCURSOR); yych = *++YYCURSOR; - if (yych != 'T') goto yy13; + if (yych <= '/') goto yy13; + if (yych <= '5') goto yy76; + goto yy13; +yy73: YYDEBUG(73, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '/') goto yy13; - if (yych <= '1') goto yy74; - if (yych <= '2') goto yy75; + if (yych == 'T') goto yy77; goto yy13; yy74: YYDEBUG(74, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy13; - if (yych <= '9') goto yy76; + if (yych <= '9') goto yy78; goto yy13; yy75: YYDEBUG(75, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy13; - if (yych >= '5') goto yy13; + if (yych <= '4') goto yy78; + goto yy13; yy76: YYDEBUG(76, *YYCURSOR); yych = *++YYCURSOR; - if (yych != ':') goto yy13; + if (yych <= '/') goto yy13; + if (yych <= '9') goto yy79; + goto yy13; +yy77: YYDEBUG(77, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy13; - if (yych >= '6') goto yy13; + if (yych <= '1') goto yy80; + if (yych <= '2') goto yy81; + goto yy13; +yy78: YYDEBUG(78, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '/') goto yy13; - if (yych >= ':') goto yy13; + if (yych == ':') goto yy82; + goto yy13; +yy79: YYDEBUG(79, *YYCURSOR); yych = *++YYCURSOR; - if (yych != ':') goto yy13; + if (yych <= '/') goto yy13; + if (yych <= '5') goto yy83; + goto yy13; +yy80: YYDEBUG(80, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy13; - if (yych >= '6') goto yy13; + if (yych <= '9') goto yy84; + goto yy13; +yy81: YYDEBUG(81, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy13; - if (yych >= ':') goto yy13; + if (yych <= '4') goto yy84; + goto yy13; +yy82: YYDEBUG(82, *YYCURSOR); yych = *++YYCURSOR; - if (yych != 'Z') goto yy13; + if (yych <= '/') goto yy13; + if (yych <= '5') goto yy85; + goto yy13; yy83: YYDEBUG(83, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych <= '/') goto yy13; + if (yych <= '9') goto yy86; + goto yy13; +yy84: YYDEBUG(84, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == ':') goto yy87; + goto yy13; +yy85: + YYDEBUG(85, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '/') goto yy13; + if (yych <= '9') goto yy88; + goto yy13; +yy86: + YYDEBUG(86, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'Z') goto yy89; + goto yy13; +yy87: + YYDEBUG(87, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '/') goto yy13; + if (yych <= '5') goto yy91; + goto yy13; +yy88: + YYDEBUG(88, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == ':') goto yy79; + goto yy13; +yy89: + YYDEBUG(89, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(90, *YYCURSOR); #line 220 "ext/date/lib/parse_iso_intervals.re" { timelib_time *current; @@ -832,54 +917,15 @@ yy83: TIMELIB_DEINIT; return TIMELIB_ISO_DATE; } -#line 836 "" -yy85: - YYDEBUG(85, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= '/') goto yy13; - if (yych <= '0') goto yy86; - if (yych <= '2') goto yy87; - if (yych <= '3') goto yy88; - goto yy13; -yy86: - YYDEBUG(86, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= '0') goto yy13; - if (yych <= '9') goto yy89; - goto yy13; -yy87: - YYDEBUG(87, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= '/') goto yy13; - if (yych <= '9') goto yy89; - goto yy13; -yy88: - YYDEBUG(88, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= '/') goto yy13; - if (yych >= '2') goto yy13; -yy89: - YYDEBUG(89, *YYCURSOR); - yych = *++YYCURSOR; - if (yych != 'T') goto yy13; - YYDEBUG(90, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= '/') goto yy13; - if (yych <= '1') goto yy91; - if (yych <= '2') goto yy92; - goto yy13; +#line 921 "" yy91: YYDEBUG(91, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy13; - if (yych <= '9') goto yy93; - goto yy13; -yy92: + if (yych >= ':') goto yy13; YYDEBUG(92, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '/') goto yy13; - if (yych >= '5') goto yy13; -yy93: + if (yych != ':') goto yy13; YYDEBUG(93, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy13; @@ -889,38 +935,28 @@ yy93: if (yych <= '/') goto yy13; if (yych >= ':') goto yy13; YYDEBUG(95, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= '/') goto yy13; - if (yych >= '6') goto yy13; - YYDEBUG(96, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= '/') goto yy13; - if (yych >= ':') goto yy13; - YYDEBUG(97, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'Z') goto yy83; - goto yy13; -yy98: - YYDEBUG(98, *YYCURSOR); ++YYCURSOR; - if (YYLIMIT <= YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(99, *YYCURSOR); - if (yych <= '/') goto yy100; - if (yych <= '9') goto yy98; -yy100: - YYDEBUG(100, *YYCURSOR); -#line 209 "ext/date/lib/parse_iso_intervals.re" + YYDEBUG(96, *YYCURSOR); +#line 286 "ext/date/lib/parse_iso_intervals.re" { - DEBUG_OUTPUT("recurrences"); + DEBUG_OUTPUT("combinedrep"); TIMELIB_INIT; + s->period->y = timelib_get_unsigned_nr(&ptr, 4); ptr++; - s->recurrences = timelib_get_unsigned_nr(&ptr, 9); + s->period->m = timelib_get_unsigned_nr(&ptr, 2); + ptr++; + s->period->d = timelib_get_unsigned_nr(&ptr, 2); + ptr++; + s->period->h = timelib_get_unsigned_nr(&ptr, 2); + ptr++; + s->period->i = timelib_get_unsigned_nr(&ptr, 2); + ptr++; + s->period->s = timelib_get_unsigned_nr(&ptr, 2); + s->have_period = 1; TIMELIB_DEINIT; - s->have_recurrences = 1; return TIMELIB_PERIOD; } -#line 924 "" +#line 960 "" } #line 321 "ext/date/lib/parse_iso_intervals.re" @@ -931,6 +967,7 @@ yy100: #define YYMAXFILL 20 + void timelib_strtointerval(const char *s, size_t len, timelib_time **begin, timelib_time **end, timelib_rel_time **period, int *recurrences, diff --git a/ext/date/lib/timelib.h b/ext/date/lib/timelib.h index 4582fcfd469..a2c976af7ed 100644 --- a/ext/date/lib/timelib.h +++ b/ext/date/lib/timelib.h @@ -1,7 +1,7 @@ /* * The MIT License (MIT) * - * Copyright (c) 2015-2023 Derick Rethans + * Copyright (c) 2015-2024 Derick Rethans * Copyright (c) 2018,2021 MongoDB, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a copy @@ -30,9 +30,9 @@ # include "timelib_config.h" #endif -#define TIMELIB_VERSION 202210 -#define TIMELIB_EXTENDED_VERSION 20221001 -#define TIMELIB_ASCII_VERSION "2022.10" +#define TIMELIB_VERSION 202212 +#define TIMELIB_EXTENDED_VERSION 20221201 +#define TIMELIB_ASCII_VERSION "2022.12" #include #include diff --git a/ext/date/lib/timelib_private.h b/ext/date/lib/timelib_private.h index 65ec6b014b8..3c5f9b22147 100644 --- a/ext/date/lib/timelib_private.h +++ b/ext/date/lib/timelib_private.h @@ -126,6 +126,15 @@ # define TIMELIB_BREAK_INTENTIONALLY_MISSING #endif +#if defined(__has_builtin) +# if __has_builtin(__builtin_saddll_overflow) +# define TIMELIB_HAVE_BUILTIN_SADDLL_OVERFLOW 1 +# endif +#endif + +#ifndef TIMELIB_HAVE_BUILTIN_SADDLL_OVERFLOW +# define TIMELIB_HAVE_BUILTIN_SADDLL_OVERFLOW 0 +#endif struct _ttinfo { int32_t offset;