From 82b573620c42b868e65650e35f85ba8cc11abb0c Mon Sep 17 00:00:00 2001 From: Soutaro Matsumoto Date: Mon, 3 Aug 2026 17:52:35 +0900 Subject: [PATCH 1/8] Rename the `word` lexer definition to `ident_char` `word` describes what the class happens to contain rather than what it is for. Every use is the continuation part of an identifier, and the set is about to widen to match Ruby's `is_identchar` ISALNUM(*(ptr)) || (*(ptr)) == '_' || !ISASCII(*(ptr)) which `word` would then describe even less well. The rule block is realigned so the actions line up again. src/lexer.c is unchanged. Renaming a named definition affects neither the generated DFA nor the line numbers it references. Co-Authored-By: Claude Opus 5 (1M context) --- src/lexer.re | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/lexer.re b/src/lexer.re index cab3b62799..9ccd1a3e0f 100644 --- a/src/lexer.re +++ b/src/lexer.re @@ -16,7 +16,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { re2c:define:YYRESTORE = "*lexer = backup;"; re2c:yyfill:enable = 0; - word = [a-zA-Z0-9_]; + ident_char = [a-zA-Z0-9_]; operator = "/" | "~" | "[]=" | "!" | "!=" | "!~" | "-" | "-@" | "+" | "+@" | "==" | "===" | "=~" | "<<" | "<=" | "<=>" | ">" | ">=" | ">>" | "%"; @@ -116,7 +116,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { ":" dqstring { return rbs_next_token(lexer, tDQSYMBOL); } ":" sqstring { return rbs_next_token(lexer, tSQSYMBOL); } - identifier = [a-zA-Z_] word* [!?=]?; + identifier = [a-zA-Z_] ident_char* [!?=]?; symbol_opr = ":|" | ":&" | ":/" | ":%" | ":~" | ":`" | ":^" | ":==" | ":=~" | ":===" | ":!" | ":!=" | ":!~" | ":<" | ":<=" | ":<<" | ":<=>" | ":>" | ":>=" | ":>>" @@ -133,16 +133,16 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { ":$" global_ident { return rbs_next_token(lexer, tSYMBOL); } symbol_opr { return rbs_next_token(lexer, tSYMBOL); } - [a-z] word* { return rbs_next_token(lexer, tLIDENT); } - [A-Z] word* { return rbs_next_token(lexer, tUIDENT); } - "_" [a-z0-9_] word* { return rbs_next_token(lexer, tULLIDENT); } - "_" [A-Z] word* { return rbs_next_token(lexer, tULIDENT); } - "_" { return rbs_next_token(lexer, tULLIDENT); } - [a-zA-Z_] word* "!" { return rbs_next_token(lexer, tBANGIDENT); } - [a-zA-Z_] word* "=" { return rbs_next_token(lexer, tEQIDENT); } + [a-z] ident_char* { return rbs_next_token(lexer, tLIDENT); } + [A-Z] ident_char* { return rbs_next_token(lexer, tUIDENT); } + "_" [a-z0-9_] ident_char* { return rbs_next_token(lexer, tULLIDENT); } + "_" [A-Z] ident_char* { return rbs_next_token(lexer, tULIDENT); } + "_" { return rbs_next_token(lexer, tULLIDENT); } + [a-zA-Z_] ident_char* "!" { return rbs_next_token(lexer, tBANGIDENT); } + [a-zA-Z_] ident_char* "=" { return rbs_next_token(lexer, tEQIDENT); } - "@" [a-zA-Z_] word* { return rbs_next_token(lexer, tAIDENT); } - "@@" [a-zA-Z_] word* { return rbs_next_token(lexer, tA2IDENT); } + "@" [a-zA-Z_] ident_char* { return rbs_next_token(lexer, tAIDENT); } + "@@" [a-zA-Z_] ident_char* { return rbs_next_token(lexer, tA2IDENT); } "$" global_ident { return rbs_next_token(lexer, tGIDENT); } From d1a4cee44427a63df9bc4029dee0a9c2e18141ec Mon Sep 17 00:00:00 2001 From: Soutaro Matsumoto Date: Mon, 3 Aug 2026 17:52:50 +0900 Subject: [PATCH 2/8] Define `ident_char` by what it excludes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Listing the characters an identifier may contain left no room for non-ASCII ones. `rbs_next_char` folds every non-ASCII character into a single code point, and naming that code point in the grammar would tie the grammar to a value the C side itself calls dummy data. Subtracting instead states Ruby's own rule #define is_identchar(p,ptr,end,enc) \ (ISALNUM(*(ptr)) || (*(ptr)) == '_' || !ISASCII(*(ptr))) without enumerating any punctuation: ident_char = . \ ([\x00-\x7F] \ [a-zA-Z0-9_]) \ [\uFFFD]; The parentheses matter. `\` is left-associative, so without them this would subtract the whole ASCII range and never add the word characters back. `\uFFFD` is the sentinel `rbs_next_char` reports for a byte that is invalid under the active encoding. Keeping it out of the class is what makes such a byte still surface as an ErrorToken instead of being absorbed into a token, as it already does for `#` comments. An identifier can now hold a non-ASCII character in any position but the first: `MI_CONSTANTE_Ñ` is one tUIDENT rather than a tUIDENT followed by an ErrorToken. A leading non-ASCII character still has no rule, because nothing yet decides whether it starts a constant or a local. src/lexer.c grows by 112 lines: two comparisons appended to each of 45 identifier-continuation states, and one more backtracking point. Co-Authored-By: Claude Opus 5 (1M context) --- src/lexer.c | 2196 ++++++++++++++++++++++++++------------------------ src/lexer.re | 8 +- 2 files changed, 1161 insertions(+), 1043 deletions(-) diff --git a/src/lexer.c b/src/lexer.c index ebbaa650d8..74cabc2913 100644 --- a/src/lexer.c +++ b/src/lexer.c @@ -166,7 +166,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { } yy1: rbs_skip(lexer); -#line 152 "src/lexer.re" +#line 158 "src/lexer.re" { return rbs_next_eof_token(lexer); } @@ -174,7 +174,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yy2: rbs_skip(lexer); yy3: -#line 153 "src/lexer.re" +#line 159 "src/lexer.re" { return rbs_next_token(lexer, ErrorToken); } @@ -185,7 +185,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '\t') goto yy4; if (yych == ' ') goto yy4; yy5: -#line 151 "src/lexer.re" +#line 157 "src/lexer.re" { return rbs_next_token(lexer, tTRIVIA); } @@ -199,7 +199,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '=') goto yy24; if (yych == '~') goto yy24; yy8: -#line 49 "src/lexer.re" +#line 55 "src/lexer.re" { return rbs_next_token(lexer, tOPERATOR); } @@ -221,7 +221,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych != 0x0000FFFD) goto yy10; } yy11: -#line 61 "src/lexer.re" +#line 67 "src/lexer.re" { return rbs_next_token( lexer, @@ -284,7 +284,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { goto yy8; yy14: rbs_skip(lexer); -#line 33 "src/lexer.re" +#line 39 "src/lexer.re" { return rbs_next_token(lexer, pAMP); } @@ -298,14 +298,14 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { goto yy78; yy16: rbs_skip(lexer); -#line 24 "src/lexer.re" +#line 30 "src/lexer.re" { return rbs_next_token(lexer, pLPAREN); } #line 243 "src/lexer.c" yy17: rbs_skip(lexer); -#line 25 "src/lexer.re" +#line 31 "src/lexer.re" { return rbs_next_token(lexer, pRPAREN); } @@ -314,7 +314,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == '*') goto yy82; -#line 35 "src/lexer.re" +#line 41 "src/lexer.re" { return rbs_next_token(lexer, pSTAR); } @@ -328,7 +328,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { goto yy8; yy20: rbs_skip(lexer); -#line 30 "src/lexer.re" +#line 36 "src/lexer.re" { return rbs_next_token(lexer, pCOMMA); } @@ -364,7 +364,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yych = rbs_peek(lexer); if (yych == '.') goto yy85; yy23: -#line 37 "src/lexer.re" +#line 43 "src/lexer.re" { return rbs_next_token(lexer, pDOT); } @@ -379,7 +379,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych <= '9') goto yy25; if (yych == '_') goto yy25; yy26: -#line 53 "src/lexer.re" +#line 59 "src/lexer.re" { return rbs_next_token(lexer, tINTEGER); } @@ -481,7 +481,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { goto yy28; } yy28: -#line 44 "src/lexer.re" +#line 50 "src/lexer.re" { return rbs_next_token(lexer, pCOLON); } @@ -493,7 +493,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych <= '<') goto yy24; if (yych <= '=') goto yy102; yy30: -#line 46 "src/lexer.re" +#line 52 "src/lexer.re" { return rbs_next_token(lexer, pLT); } @@ -509,7 +509,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '~') goto yy24; } yy32: -#line 43 "src/lexer.re" +#line 49 "src/lexer.re" { return rbs_next_token(lexer, pEQ); } @@ -520,14 +520,14 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych <= '<') goto yy34; if (yych <= '>') goto yy24; yy34: -#line 47 "src/lexer.re" +#line 53 "src/lexer.re" { return rbs_next_token(lexer, pGT); } #line 427 "src/lexer.c" yy35: rbs_skip(lexer); -#line 34 "src/lexer.re" +#line 40 "src/lexer.re" { return rbs_next_token(lexer, pQUESTION); } @@ -559,246 +559,250 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yy37: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy37; } else { - if (yych <= '9') goto yy37; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy37; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy38; - if (yych <= 'Z') goto yy37; + if (yych <= 'z') { + if (yych == '_') goto yy37; + if (yych >= 'a') goto yy37; } else { - if (yych == '`') goto yy38; - if (yych <= 'z') goto yy37; + if (yych <= 0x0000007F) goto yy38; + if (yych != 0x0000FFFD) goto yy37; } } yy38: -#line 137 "src/lexer.re" +#line 143 "src/lexer.re" { return rbs_next_token(lexer, tUIDENT); } -#line 479 "src/lexer.c" +#line 480 "src/lexer.c" yy39: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == ']') goto yy112; -#line 26 "src/lexer.re" +#line 32 "src/lexer.re" { return rbs_next_token(lexer, pLBRACKET); } -#line 486 "src/lexer.c" +#line 487 "src/lexer.c" yy40: rbs_skip(lexer); -#line 27 "src/lexer.re" +#line 33 "src/lexer.re" { return rbs_next_token(lexer, pRBRACKET); } -#line 491 "src/lexer.c" +#line 492 "src/lexer.c" yy41: rbs_skip(lexer); -#line 32 "src/lexer.re" +#line 38 "src/lexer.re" { return rbs_next_token(lexer, pHAT); } -#line 496 "src/lexer.c" +#line 497 "src/lexer.c" yy42: + yyaccept = 4; rbs_skip(lexer); + backup = *lexer; yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy113; } else { - if (yych <= '9') goto yy113; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy116; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy43; - if (yych <= 'Z') goto yy116; + if (yych <= 'z') { + if (yych == '_') goto yy118; + if (yych >= 'a') goto yy113; } else { - if (yych <= '_') goto yy118; - if (yych <= '`') goto yy43; - if (yych <= 'z') goto yy113; + if (yych <= 0x0000007F) goto yy43; + if (yych != 0x0000FFFD) goto yy119; } } yy43: -#line 140 "src/lexer.re" +#line 146 "src/lexer.re" { return rbs_next_token(lexer, tULLIDENT); } -#line 520 "src/lexer.c" +#line 523 "src/lexer.c" yy44: - yyaccept = 4; + yyaccept = 5; rbs_skip(lexer); backup = *lexer; yych = rbs_peek(lexer); if (yych <= ' ') { if (yych <= 0x00000000) goto yy45; - if (yych <= 0x0000001F) goto yy119; + if (yych <= 0x0000001F) goto yy120; } else { - if (yych != ':') goto yy119; + if (yych != ':') goto yy120; } yy45: -#line 39 "src/lexer.re" +#line 45 "src/lexer.re" { return rbs_next_token(lexer, tOPERATOR); } -#line 535 "src/lexer.c" +#line 538 "src/lexer.c" yy46: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'r') { - if (yych == 'l') goto yy120; + if (yych == 'l') goto yy121; goto yy54; } else { - if (yych <= 's') goto yy121; - if (yych <= 't') goto yy123; + if (yych <= 's') goto yy122; + if (yych <= 't') goto yy124; goto yy54; } yy47: -#line 136 "src/lexer.re" +#line 142 "src/lexer.re" { return rbs_next_token(lexer, tLIDENT); } -#line 550 "src/lexer.c" +#line 553 "src/lexer.c" yy48: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'o') goto yy124; + if (yych == 'o') goto yy125; goto yy54; yy49: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy125; + if (yych == 'l') goto yy126; goto yy54; yy50: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy126; + if (yych == 'e') goto yy127; goto yy54; yy51: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'n') goto yy127; - if (yych == 'x') goto yy128; + if (yych == 'n') goto yy128; + if (yych == 'x') goto yy129; goto yy54; yy52: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy129; + if (yych == 'a') goto yy130; goto yy54; yy53: rbs_skip(lexer); yych = rbs_peek(lexer); yy54: - if (yych <= '=') { - if (yych <= '/') { + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; - goto yy47; + if (yych <= '/') goto yy47; + goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych <= '<') goto yy47; - goto yy111; + if (yych == '=') goto yy111; + if (yych <= '@') goto yy47; + goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy47; - if (yych <= 'Z') goto yy53; - goto yy47; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych <= '`') goto yy47; + goto yy53; } else { - if (yych == '`') goto yy47; - if (yych <= 'z') goto yy53; - goto yy47; + if (yych <= 0x0000007F) goto yy47; + if (yych == 0x0000FFFD) goto yy47; + goto yy53; } } yy55: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'n') goto yy130; + if (yych == 'n') goto yy131; goto yy54; yy56: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'o') goto yy132; + if (yych == 'o') goto yy133; goto yy54; yy57: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'i') goto yy133; + if (yych == 'i') goto yy134; goto yy54; yy58: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'u') goto yy134; + if (yych == 'u') goto yy135; goto yy54; yy59: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'r') goto yy135; - if (yych == 'u') goto yy136; + if (yych == 'r') goto yy136; + if (yych == 'u') goto yy137; goto yy54; yy60: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy137; + if (yych == 'e') goto yy138; goto yy54; yy61: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'h') { - if (yych == 'e') goto yy138; + if (yych == 'e') goto yy139; goto yy54; } else { - if (yych <= 'i') goto yy139; - if (yych == 'k') goto yy140; + if (yych <= 'i') goto yy140; + if (yych == 'k') goto yy141; goto yy54; } yy62: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'q') { - if (yych == 'o') goto yy141; + if (yych == 'o') goto yy142; goto yy54; } else { - if (yych <= 'r') goto yy142; - if (yych == 'y') goto yy143; + if (yych <= 'r') goto yy143; + if (yych == 'y') goto yy144; goto yy54; } yy63: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'n') goto yy144; - if (yych == 's') goto yy145; + if (yych == 'n') goto yy145; + if (yych == 's') goto yy146; goto yy54; yy64: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'o') goto yy146; + if (yych == 'o') goto yy147; goto yy54; yy65: rbs_skip(lexer); -#line 28 "src/lexer.re" +#line 34 "src/lexer.re" { return rbs_next_token(lexer, pLBRACE); } -#line 669 "src/lexer.c" +#line 673 "src/lexer.c" yy66: rbs_skip(lexer); -#line 31 "src/lexer.re" +#line 37 "src/lexer.re" { return rbs_next_token(lexer, pBAR); } -#line 674 "src/lexer.c" +#line 678 "src/lexer.c" yy67: rbs_skip(lexer); -#line 29 "src/lexer.re" +#line 35 "src/lexer.re" { return rbs_next_token(lexer, pRBRACE); } -#line 679 "src/lexer.c" +#line 683 "src/lexer.c" yy68: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -825,31 +829,35 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { } else { if (yyaccept == 3) goto yy28; else - goto yy45; + goto yy43; } } else { - if (yyaccept <= 6) { - if (yyaccept == 5) goto yy80; - else - goto yy162; + if (yyaccept <= 7) { + if (yyaccept <= 6) { + if (yyaccept == 5) goto yy45; + else + goto yy80; + } else { + goto yy163; + } } else { - if (yyaccept == 7) goto yy262; + if (yyaccept == 8) goto yy263; else - goto yy290; + goto yy291; } } yy71: rbs_skip(lexer); -#line 114 "src/lexer.re" +#line 120 "src/lexer.re" { return rbs_next_token(lexer, tDQSTRING); } -#line 719 "src/lexer.c" +#line 727 "src/lexer.c" yy72: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'u') goto yy147; - if (yych == 'x') goto yy148; + if (yych == 'u') goto yy148; + if (yych == 'x') goto yy149; goto yy68; yy73: rbs_skip(lexer); @@ -881,11 +889,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { } } yy74: -#line 147 "src/lexer.re" +#line 153 "src/lexer.re" { return rbs_next_token(lexer, tGIDENT); } -#line 758 "src/lexer.c" +#line 766 "src/lexer.c" yy75: rbs_skip(lexer); goto yy74; @@ -895,18 +903,18 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych <= 'Z') { if (yych <= '(') { if (yych <= '\'') goto yy70; - goto yy149; + goto yy150; } else { - if (yych == '<') goto yy150; + if (yych == '<') goto yy151; goto yy70; } } else { if (yych <= 'z') { - if (yych <= '[') goto yy151; + if (yych <= '[') goto yy152; goto yy70; } else { - if (yych <= '{') goto yy152; - if (yych <= '|') goto yy153; + if (yych <= '{') goto yy153; + if (yych <= '|') goto yy154; goto yy70; } } @@ -924,49 +932,49 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yy79: rbs_skip(lexer); yy80: -#line 115 "src/lexer.re" +#line 121 "src/lexer.re" { return rbs_next_token(lexer, tSQSTRING); } -#line 799 "src/lexer.c" +#line 807 "src/lexer.c" yy81: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '\'') { if (yych <= 0x00000000) goto yy70; if (yych <= '&') goto yy77; - goto yy154; + goto yy155; } else { if (yych == '\\') goto yy81; goto yy77; } yy82: rbs_skip(lexer); -#line 36 "src/lexer.re" +#line 42 "src/lexer.re" { return rbs_next_token(lexer, pSTAR2); } -#line 815 "src/lexer.c" +#line 823 "src/lexer.c" yy83: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych >= 0x00000001) goto yy83; -#line 50 "src/lexer.re" +#line 56 "src/lexer.re" { return rbs_next_token(lexer, tINLINECOMMENT); } -#line 822 "src/lexer.c" +#line 830 "src/lexer.c" yy84: rbs_skip(lexer); -#line 41 "src/lexer.re" +#line 47 "src/lexer.re" { return rbs_next_token(lexer, pARROW); } -#line 827 "src/lexer.c" +#line 835 "src/lexer.c" yy85: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == '.') goto yy155; + if (yych == '.') goto yy156; goto yy70; yy86: rbs_skip(lexer); @@ -974,20 +982,20 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '=') goto yy90; if (yych == '~') goto yy90; yy87: -#line 134 "src/lexer.re" +#line 140 "src/lexer.re" { return rbs_next_token(lexer, tSYMBOL); } -#line 841 "src/lexer.c" +#line 849 "src/lexer.c" yy88: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '"') { if (yych <= 0x00000000) goto yy70; if (yych <= '!') goto yy88; - goto yy156; + goto yy157; } else { - if (yych == '\\') goto yy157; + if (yych == '\\') goto yy158; goto yy88; } yy89: @@ -997,42 +1005,42 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych <= 0x0000001F) { if (yych <= '\n') { if (yych <= 0x00000000) goto yy70; - if (yych <= 0x00000008) goto yy158; + if (yych <= 0x00000008) goto yy159; goto yy70; } else { if (yych == '\r') goto yy70; - goto yy158; + goto yy159; } } else { if (yych <= '#') { if (yych <= ' ') goto yy70; - if (yych <= '"') goto yy160; - goto yy158; + if (yych <= '"') goto yy161; + goto yy159; } else { if (yych == '%') goto yy70; - if (yych <= '\'') goto yy160; + if (yych <= '\'') goto yy161; goto yy70; } } } else { if (yych <= 'Z') { if (yych <= '/') { - if (yych == '-') goto yy158; - goto yy160; + if (yych == '-') goto yy159; + goto yy161; } else { - if (yych <= '9') goto yy158; - if (yych <= '>') goto yy160; - goto yy158; + if (yych <= '9') goto yy159; + if (yych <= '>') goto yy161; + goto yy159; } } else { if (yych <= '^') { - if (yych == '\\') goto yy160; + if (yych == '\\') goto yy161; goto yy70; } else { - if (yych <= 'z') goto yy158; + if (yych <= 'z') goto yy159; if (yych <= '}') goto yy70; - if (yych <= '~') goto yy160; - goto yy158; + if (yych <= '~') goto yy161; + goto yy159; } } } @@ -1045,9 +1053,9 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych <= '\'') { if (yych <= 0x00000000) goto yy70; if (yych <= '&') goto yy91; - goto yy161; + goto yy162; } else { - if (yych == '\\') goto yy163; + if (yych == '\\') goto yy164; goto yy91; } yy92: @@ -1062,22 +1070,22 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { goto yy87; yy94: rbs_skip(lexer); -#line 45 "src/lexer.re" +#line 51 "src/lexer.re" { return rbs_next_token(lexer, pCOLON2); } -#line 927 "src/lexer.c" +#line 935 "src/lexer.c" yy95: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= ';') goto yy87; if (yych <= '<') goto yy90; - if (yych <= '=') goto yy164; + if (yych <= '=') goto yy165; goto yy87; yy96: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == '=') goto yy165; + if (yych == '=') goto yy166; if (yych == '~') goto yy90; goto yy70; yy97: @@ -1091,44 +1099,50 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yych = rbs_peek(lexer); if (yych <= '^') { if (yych <= '?') goto yy70; - if (yych <= '@') goto yy166; - if (yych <= 'Z') goto yy167; + if (yych <= '@') goto yy167; + if (yych <= 'Z') goto yy168; goto yy70; } else { if (yych == '`') goto yy70; - if (yych <= 'z') goto yy167; + if (yych <= 'z') goto yy168; goto yy70; } yy99: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '>') { - if (yych <= '/') { - if (yych == '!') goto yy169; + if (yych <= '@') { + if (yych <= '9') { + if (yych == '!') goto yy170; + if (yych >= '0') goto yy99; } else { - if (yych <= '9') goto yy99; - if (yych == '=') goto yy169; + if (yych <= '=') { + if (yych >= '=') goto yy170; + } else { + if (yych == '?') goto yy170; + } } } else { - if (yych <= '^') { - if (yych <= '?') goto yy169; - if (yych <= '@') goto yy100; + if (yych <= '`') { if (yych <= 'Z') goto yy99; + if (yych == '_') goto yy99; } else { - if (yych == '`') goto yy100; - if (yych <= 'z') goto yy99; + if (yych <= 0x0000007F) { + if (yych <= 'z') goto yy99; + } else { + if (yych != 0x0000FFFD) goto yy99; + } } } yy100: -#line 130 "src/lexer.re" +#line 136 "src/lexer.re" { return rbs_next_token(lexer, tSYMBOL); } -#line 983 "src/lexer.c" +#line 997 "src/lexer.c" yy101: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == ']') goto yy165; + if (yych == ']') goto yy166; goto yy70; yy102: rbs_skip(lexer); @@ -1142,328 +1156,366 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { goto yy8; yy104: rbs_skip(lexer); -#line 42 "src/lexer.re" +#line 48 "src/lexer.re" { return rbs_next_token(lexer, pFATARROW); } -#line 1003 "src/lexer.c" +#line 1017 "src/lexer.c" yy105: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '^') { if (yych <= '@') goto yy70; - if (yych <= 'Z') goto yy170; + if (yych <= 'Z') goto yy171; goto yy70; } else { if (yych == '`') goto yy70; - if (yych <= 'z') goto yy170; + if (yych <= 'z') goto yy171; goto yy70; } yy106: rbs_skip(lexer); yych = rbs_peek(lexer); yy107: - if (yych <= 'Z') { - if (yych <= '/') goto yy108; - if (yych <= '9') goto yy106; - if (yych >= 'A') goto yy106; - } else { - if (yych <= '_') { - if (yych >= '_') goto yy106; + if (yych <= '_') { + if (yych <= '@') { + if (yych <= '/') goto yy108; + if (yych <= '9') goto yy106; } else { + if (yych <= 'Z') goto yy106; + if (yych >= '_') goto yy106; + } + } else { + if (yych <= 0x0000007F) { if (yych <= '`') goto yy108; if (yych <= 'z') goto yy106; + } else { + if (yych != 0x0000FFFD) goto yy106; } } yy108: -#line 144 "src/lexer.re" +#line 150 "src/lexer.re" { return rbs_next_token(lexer, tAIDENT); } -#line 1035 "src/lexer.c" +#line 1053 "src/lexer.c" yy109: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'b') goto yy172; + if (yych == 'b') goto yy173; goto yy107; yy110: rbs_skip(lexer); -#line 141 "src/lexer.re" +#line 147 "src/lexer.re" { return rbs_next_token(lexer, tBANGIDENT); } -#line 1045 "src/lexer.c" +#line 1063 "src/lexer.c" yy111: rbs_skip(lexer); -#line 142 "src/lexer.re" +#line 148 "src/lexer.re" { return rbs_next_token(lexer, tEQIDENT); } -#line 1050 "src/lexer.c" +#line 1068 "src/lexer.c" yy112: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == '=') goto yy24; -#line 48 "src/lexer.re" +#line 54 "src/lexer.re" { return rbs_next_token(lexer, pAREF_OPR); } -#line 1057 "src/lexer.c" +#line 1075 "src/lexer.c" yy113: rbs_skip(lexer); yych = rbs_peek(lexer); yy114: - if (yych <= '=') { - if (yych <= '/') { + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy113; } else { - if (yych <= '9') goto yy113; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy113; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy115; - if (yych <= 'Z') goto yy113; + if (yych <= 'z') { + if (yych == '_') goto yy113; + if (yych >= 'a') goto yy113; } else { - if (yych == '`') goto yy115; - if (yych <= 'z') goto yy113; + if (yych <= 0x0000007F) goto yy115; + if (yych != 0x0000FFFD) goto yy113; } } yy115: -#line 138 "src/lexer.re" +#line 144 "src/lexer.re" { return rbs_next_token(lexer, tULLIDENT); } -#line 1081 "src/lexer.c" +#line 1100 "src/lexer.c" yy116: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy116; } else { - if (yych <= '9') goto yy116; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy116; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy117; - if (yych <= 'Z') goto yy116; + if (yych <= 'z') { + if (yych == '_') goto yy116; + if (yych >= 'a') goto yy116; } else { - if (yych == '`') goto yy117; - if (yych <= 'z') goto yy116; + if (yych <= 0x0000007F) goto yy117; + if (yych != 0x0000FFFD) goto yy116; } } yy117: -#line 139 "src/lexer.re" +#line 145 "src/lexer.re" { return rbs_next_token(lexer, tULIDENT); } -#line 1104 "src/lexer.c" +#line 1124 "src/lexer.c" yy118: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 't') goto yy173; + if (yych == 't') goto yy174; goto yy114; yy119: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= 0x00000000) goto yy70; - if (yych == '`') goto yy174; - goto yy119; + if (yych <= 'Z') { + if (yych <= '9') { + if (yych == '!') goto yy110; + if (yych <= '/') goto yy70; + goto yy119; + } else { + if (yych == '=') goto yy111; + if (yych <= '@') goto yy70; + goto yy119; + } + } else { + if (yych <= 'z') { + if (yych == '_') goto yy119; + if (yych <= '`') goto yy70; + goto yy119; + } else { + if (yych <= 0x0000007F) goto yy70; + if (yych == 0x0000FFFD) goto yy70; + goto yy119; + } + } yy120: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'i') goto yy175; - goto yy54; + if (yych <= 0x00000000) goto yy70; + if (yych == '`') goto yy175; + goto yy120; yy121: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych == 'i') goto yy176; + goto yy54; + yy122: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy122; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy122; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy123; + if (yych != 0x0000FFFD) goto yy53; } } - yy122: -#line 101 "src/lexer.re" + yy123: +#line 107 "src/lexer.re" { return rbs_next_token(lexer, kAS); } -#line 1143 "src/lexer.c" - yy123: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 't') goto yy176; - goto yy54; +#line 1188 "src/lexer.c" yy124: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'o') goto yy177; - if (yych == 't') goto yy178; + if (yych == 't') goto yy177; goto yy54; yy125: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy180; + if (yych == 'o') goto yy178; + if (yych == 't') goto yy179; goto yy54; yy126: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'f') goto yy181; + if (yych == 'a') goto yy181; goto yy54; yy127: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'd') goto yy183; + if (yych == 'f') goto yy182; goto yy54; yy128: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 't') goto yy185; + if (yych == 'd') goto yy184; goto yy54; yy129: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy186; + if (yych == 't') goto yy186; goto yy54; yy130: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '^') { - if (yych <= '9') { - if (yych == '!') goto yy110; - if (yych >= '0') goto yy53; + if (yych == 'l') goto yy187; + goto yy54; + yy131: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych <= '_') { + if (yych <= '<') { + if (yych <= '!') { + if (yych >= '!') goto yy110; + } else { + if (yych <= '/') goto yy132; + if (yych <= '9') goto yy53; + } } else { - if (yych <= '=') { - if (yych >= '=') goto yy111; + if (yych <= '@') { + if (yych <= '=') goto yy111; } else { - if (yych <= '@') goto yy131; if (yych <= 'Z') goto yy53; + if (yych >= '_') goto yy53; } } } else { - if (yych <= 'c') { - if (yych == '`') goto yy131; - if (yych <= 'b') goto yy53; - goto yy187; - } else { - if (yych <= 's') { - if (yych <= 'r') goto yy53; - goto yy188; + if (yych <= 's') { + if (yych <= 'b') { + if (yych >= 'a') goto yy53; } else { - if (yych <= 't') goto yy189; + if (yych <= 'c') goto yy188; + if (yych <= 'r') goto yy53; + goto yy189; + } + } else { + if (yych <= 0x0000007F) { + if (yych <= 't') goto yy190; if (yych <= 'z') goto yy53; + } else { + if (yych != 0x0000FFFD) goto yy53; } } } - yy131: -#line 80 "src/lexer.re" + yy132: +#line 86 "src/lexer.re" { return rbs_next_token(lexer, kIN); } -#line 1213 "src/lexer.c" - yy132: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 'd') goto yy190; - goto yy54; +#line 1265 "src/lexer.c" yy133: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy191; + if (yych == 'd') goto yy191; goto yy54; yy134: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 't') goto yy193; + if (yych == 'l') goto yy192; goto yy54; yy135: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy195; - if (yych == 'i') goto yy196; + if (yych == 't') goto yy194; goto yy54; yy136: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'b') goto yy197; + if (yych == 'e') goto yy196; + if (yych == 'i') goto yy197; goto yy54; yy137: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 't') goto yy198; + if (yych == 'b') goto yy198; goto yy54; yy138: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy199; + if (yych == 't') goto yy199; goto yy54; yy139: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'n') goto yy200; + if (yych == 'l') goto yy200; goto yy54; yy140: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'i') goto yy201; + if (yych == 'n') goto yy201; goto yy54; yy141: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'p') goto yy202; + if (yych == 'i') goto yy202; goto yy54; yy142: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'u') goto yy204; + if (yych == 'p') goto yy203; goto yy54; yy143: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'p') goto yy205; + if (yych == 'u') goto yy205; goto yy54; yy144: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'c') goto yy206; - if (yych == 't') goto yy207; + if (yych == 'p') goto yy206; goto yy54; yy145: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy208; + if (yych == 'c') goto yy207; + if (yych == 't') goto yy208; goto yy54; yy146: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'i') goto yy210; + if (yych == 'e') goto yy209; goto yy54; yy147: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych == 'i') goto yy211; + goto yy54; + yy148: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { if (yych <= '/') goto yy70; - if (yych <= '9') goto yy211; + if (yych <= '9') goto yy212; goto yy70; } else { - if (yych <= 'F') goto yy211; + if (yych <= 'F') goto yy212; if (yych <= '`') goto yy70; - if (yych <= 'f') goto yy211; + if (yych <= 'f') goto yy212; goto yy70; } - yy148: + yy149: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '/') goto yy70; @@ -1471,38 +1523,38 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych <= '`') goto yy70; if (yych <= 'f') goto yy68; goto yy70; - yy149: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych <= 0x00000000) goto yy70; - if (yych == ')') goto yy212; - goto yy149; yy150: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 0x00000000) goto yy70; - if (yych == '>') goto yy213; + if (yych == ')') goto yy213; goto yy150; yy151: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 0x00000000) goto yy70; - if (yych == ']') goto yy214; + if (yych == '>') goto yy214; goto yy151; yy152: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 0x00000000) goto yy70; - if (yych == '}') goto yy215; + if (yych == ']') goto yy215; goto yy152; yy153: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 0x00000000) goto yy70; - if (yych == '|') goto yy216; + if (yych == '}') goto yy216; goto yy153; yy154: - yyaccept = 5; + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych <= 0x00000000) goto yy70; + if (yych == '|') goto yy217; + goto yy154; + yy155: + yyaccept = 6; rbs_skip(lexer); backup = *lexer; yych = rbs_peek(lexer); @@ -1514,519 +1566,536 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '\\') goto yy81; goto yy77; } - yy155: + yy156: rbs_skip(lexer); -#line 38 "src/lexer.re" +#line 44 "src/lexer.re" { return rbs_next_token(lexer, pDOT3); } -#line 1359 "src/lexer.c" - yy156: +#line 1411 "src/lexer.c" + yy157: rbs_skip(lexer); -#line 116 "src/lexer.re" +#line 122 "src/lexer.re" { return rbs_next_token(lexer, tDQSYMBOL); } -#line 1364 "src/lexer.c" - yy157: +#line 1416 "src/lexer.c" + yy158: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'u') goto yy217; - if (yych == 'x') goto yy218; + if (yych == 'u') goto yy218; + if (yych == 'x') goto yy219; goto yy88; - yy158: + yy159: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= ',') { if (yych <= '\f') { - if (yych <= 0x00000000) goto yy159; - if (yych <= 0x00000008) goto yy158; - if (yych >= '\v') goto yy158; + if (yych <= 0x00000000) goto yy160; + if (yych <= 0x00000008) goto yy159; + if (yych >= '\v') goto yy159; } else { if (yych <= 0x0000001F) { - if (yych >= 0x0000000E) goto yy158; + if (yych >= 0x0000000E) goto yy159; } else { - if (yych == '#') goto yy158; + if (yych == '#') goto yy159; } } } else { if (yych <= '>') { - if (yych <= '-') goto yy158; - if (yych <= '/') goto yy159; - if (yych <= '9') goto yy158; + if (yych <= '-') goto yy159; + if (yych <= '/') goto yy160; + if (yych <= '9') goto yy159; } else { if (yych <= '^') { - if (yych <= 'Z') goto yy158; + if (yych <= 'Z') goto yy159; } else { - if (yych <= 'z') goto yy158; - if (yych >= 0x0000007F) goto yy158; + if (yych <= 'z') goto yy159; + if (yych >= 0x0000007F) goto yy159; } } } - yy159: -#line 133 "src/lexer.re" + yy160: +#line 139 "src/lexer.re" { return rbs_next_token(lexer, tSYMBOL); } -#line 1403 "src/lexer.c" - yy160: - rbs_skip(lexer); - goto yy159; +#line 1455 "src/lexer.c" yy161: rbs_skip(lexer); + goto yy160; yy162: -#line 117 "src/lexer.re" + rbs_skip(lexer); + yy163: +#line 123 "src/lexer.re" { return rbs_next_token(lexer, tSQSYMBOL); } -#line 1412 "src/lexer.c" - yy163: +#line 1464 "src/lexer.c" + yy164: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '\'') { if (yych <= 0x00000000) goto yy70; if (yych <= '&') goto yy91; - goto yy219; + goto yy220; } else { - if (yych == '\\') goto yy163; + if (yych == '\\') goto yy164; goto yy91; } - yy164: + yy165: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == '>') goto yy90; goto yy87; - yy165: + yy166: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == '=') goto yy90; goto yy87; - yy166: + yy167: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '^') { if (yych <= '@') goto yy70; - if (yych <= 'Z') goto yy220; + if (yych <= 'Z') goto yy221; goto yy70; } else { if (yych == '`') goto yy70; - if (yych <= 'z') goto yy220; + if (yych <= 'z') goto yy221; goto yy70; } - yy167: + yy168: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '>') { - if (yych <= '/') { - if (yych == '!') goto yy222; + if (yych <= '@') { + if (yych <= '9') { + if (yych == '!') goto yy223; + if (yych >= '0') goto yy168; } else { - if (yych <= '9') goto yy167; - if (yych == '=') goto yy222; + if (yych <= '=') { + if (yych >= '=') goto yy223; + } else { + if (yych == '?') goto yy223; + } } } else { - if (yych <= '^') { - if (yych <= '?') goto yy222; - if (yych <= '@') goto yy168; - if (yych <= 'Z') goto yy167; + if (yych <= '`') { + if (yych <= 'Z') goto yy168; + if (yych == '_') goto yy168; } else { - if (yych == '`') goto yy168; - if (yych <= 'z') goto yy167; + if (yych <= 0x0000007F) { + if (yych <= 'z') goto yy168; + } else { + if (yych != 0x0000FFFD) goto yy168; + } } } - yy168: -#line 131 "src/lexer.re" + yy169: +#line 137 "src/lexer.re" { return rbs_next_token(lexer, tSYMBOL); } -#line 1469 "src/lexer.c" - yy169: +#line 1527 "src/lexer.c" + yy170: rbs_skip(lexer); goto yy100; - yy170: + yy171: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= 'Z') { - if (yych <= '/') goto yy171; - if (yych <= '9') goto yy170; - if (yych >= 'A') goto yy170; + if (yych <= '_') { + if (yych <= '@') { + if (yych <= '/') goto yy172; + if (yych <= '9') goto yy171; + } else { + if (yych <= 'Z') goto yy171; + if (yych >= '_') goto yy171; + } } else { - if (yych <= '_') { - if (yych >= '_') goto yy170; + if (yych <= 0x0000007F) { + if (yych <= '`') goto yy172; + if (yych <= 'z') goto yy171; } else { - if (yych <= '`') goto yy171; - if (yych <= 'z') goto yy170; + if (yych != 0x0000FFFD) goto yy171; } } - yy171: -#line 145 "src/lexer.re" + yy172: +#line 151 "src/lexer.re" { return rbs_next_token(lexer, tA2IDENT); } -#line 1491 "src/lexer.c" - yy172: +#line 1553 "src/lexer.c" + yy173: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 's') goto yy223; + if (yych == 's') goto yy224; goto yy107; - yy173: + yy174: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'o') goto yy225; + if (yych == 'o') goto yy226; goto yy114; - yy174: + yy175: rbs_skip(lexer); -#line 40 "src/lexer.re" +#line 46 "src/lexer.re" { return rbs_next_token(lexer, tQIDENT); } -#line 1506 "src/lexer.c" - yy175: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 'a') goto yy226; - goto yy54; +#line 1568 "src/lexer.c" yy176: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'r') goto yy227; + if (yych == 'a') goto yy227; goto yy54; yy177: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy228; + if (yych == 'r') goto yy228; goto yy54; yy178: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych == 'l') goto yy229; + goto yy54; + yy179: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy179; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy179; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy180; + if (yych != 0x0000FFFD) goto yy53; } } - yy179: -#line 73 "src/lexer.re" + yy180: +#line 79 "src/lexer.re" { return rbs_next_token(lexer, kBOT); } -#line 1544 "src/lexer.c" - yy180: +#line 1607 "src/lexer.c" + yy181: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 's') goto yy230; + if (yych == 's') goto yy231; goto yy54; - yy181: + yy182: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { - if (yych == '!') goto yy110; + if (yych <= 'Z') { + if (yych <= '9') { + if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy182; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy182; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy183; + if (yych != 0x0000FFFD) goto yy53; } } - yy182: -#line 76 "src/lexer.re" + yy183: +#line 82 "src/lexer.re" { return rbs_next_token(lexer, kDEF); } -#line 1572 "src/lexer.c" - yy183: +#line 1636 "src/lexer.c" + yy184: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy184; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy184; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy185; + if (yych != 0x0000FFFD) goto yy53; } } - yy184: -#line 77 "src/lexer.re" + yy185: +#line 83 "src/lexer.re" { return rbs_next_token(lexer, kEND); } -#line 1595 "src/lexer.c" - yy185: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 'e') goto yy231; - goto yy54; +#line 1660 "src/lexer.c" yy186: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 's') goto yy232; + if (yych == 'e') goto yy232; goto yy54; yy187: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy233; + if (yych == 's') goto yy233; goto yy54; yy188: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 't') goto yy234; + if (yych == 'l') goto yy234; goto yy54; yy189: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy235; + if (yych == 't') goto yy235; goto yy54; yy190: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'u') goto yy236; + if (yych == 'e') goto yy236; goto yy54; yy191: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych == 'u') goto yy237; + goto yy54; + yy192: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy192; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy192; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy193; + if (yych != 0x0000FFFD) goto yy53; } } - yy192: -#line 87 "src/lexer.re" + yy193: +#line 93 "src/lexer.re" { return rbs_next_token(lexer, kNIL); } -#line 1648 "src/lexer.c" - yy193: +#line 1714 "src/lexer.c" + yy194: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy194; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy194; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy195; + if (yych != 0x0000FFFD) goto yy53; } } - yy194: -#line 88 "src/lexer.re" + yy195: +#line 94 "src/lexer.re" { return rbs_next_token(lexer, kOUT); } -#line 1671 "src/lexer.c" - yy195: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 'p') goto yy237; - goto yy54; +#line 1738 "src/lexer.c" yy196: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'v') goto yy238; + if (yych == 'p') goto yy238; goto yy54; yy197: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy239; + if (yych == 'v') goto yy239; goto yy54; yy198: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'u') goto yy240; + if (yych == 'l') goto yy240; goto yy54; yy199: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'f') goto yy241; + if (yych == 'u') goto yy241; goto yy54; yy200: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'g') goto yy243; + if (yych == 'f') goto yy242; goto yy54; yy201: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'p') goto yy244; + if (yych == 'g') goto yy244; goto yy54; yy202: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych == 'p') goto yy245; + goto yy54; + yy203: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy203; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy203; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy204; + if (yych != 0x0000FFFD) goto yy53; } } - yy203: -#line 94 "src/lexer.re" + yy204: +#line 100 "src/lexer.re" { return rbs_next_token(lexer, kTOP); } -#line 1729 "src/lexer.c" - yy204: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 'e') goto yy246; - goto yy54; +#line 1797 "src/lexer.c" yy205: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy248; + if (yych == 'e') goto yy247; goto yy54; yy206: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'h') goto yy250; + if (yych == 'e') goto yy249; goto yy54; yy207: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'y') goto yy251; + if (yych == 'h') goto yy251; goto yy54; yy208: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych == 'y') goto yy252; + goto yy54; + yy209: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy209; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy209; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy210; + if (yych != 0x0000FFFD) goto yy53; } } - yy209: -#line 100 "src/lexer.re" + yy210: +#line 106 "src/lexer.re" { return rbs_next_token(lexer, kUSE); } -#line 1772 "src/lexer.c" - yy210: +#line 1841 "src/lexer.c" + yy211: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'd') goto yy252; + if (yych == 'd') goto yy253; goto yy54; - yy211: + yy212: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { if (yych <= '/') goto yy70; - if (yych <= '9') goto yy254; + if (yych <= '9') goto yy255; goto yy70; } else { - if (yych <= 'F') goto yy254; + if (yych <= 'F') goto yy255; if (yych <= '`') goto yy70; - if (yych <= 'f') goto yy254; + if (yych <= 'f') goto yy255; goto yy70; } - yy212: - rbs_skip(lexer); -#line 56 "src/lexer.re" - { - return rbs_next_token(lexer, tANNOTATION); - } -#line 1795 "src/lexer.c" yy213: rbs_skip(lexer); -#line 59 "src/lexer.re" +#line 62 "src/lexer.re" { return rbs_next_token(lexer, tANNOTATION); } -#line 1800 "src/lexer.c" +#line 1864 "src/lexer.c" yy214: rbs_skip(lexer); -#line 57 "src/lexer.re" +#line 65 "src/lexer.re" { return rbs_next_token(lexer, tANNOTATION); } -#line 1805 "src/lexer.c" +#line 1869 "src/lexer.c" yy215: rbs_skip(lexer); -#line 55 "src/lexer.re" +#line 63 "src/lexer.re" { return rbs_next_token(lexer, tANNOTATION); } -#line 1810 "src/lexer.c" +#line 1874 "src/lexer.c" yy216: rbs_skip(lexer); -#line 58 "src/lexer.re" +#line 61 "src/lexer.re" { return rbs_next_token(lexer, tANNOTATION); } -#line 1815 "src/lexer.c" +#line 1879 "src/lexer.c" yy217: rbs_skip(lexer); +#line 64 "src/lexer.re" + { + return rbs_next_token(lexer, tANNOTATION); + } +#line 1884 "src/lexer.c" + yy218: + rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { if (yych <= '/') goto yy70; - if (yych <= '9') goto yy255; + if (yych <= '9') goto yy256; goto yy70; } else { - if (yych <= 'F') goto yy255; + if (yych <= 'F') goto yy256; if (yych <= '`') goto yy70; - if (yych <= 'f') goto yy255; + if (yych <= 'f') goto yy256; goto yy70; } - yy218: + yy219: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '/') goto yy70; @@ -2034,489 +2103,512 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych <= '`') goto yy70; if (yych <= 'f') goto yy88; goto yy70; - yy219: - yyaccept = 6; + yy220: + yyaccept = 7; rbs_skip(lexer); backup = *lexer; yych = rbs_peek(lexer); if (yych <= '\'') { - if (yych <= 0x00000000) goto yy162; + if (yych <= 0x00000000) goto yy163; if (yych <= '&') goto yy91; - goto yy161; + goto yy162; } else { - if (yych == '\\') goto yy163; + if (yych == '\\') goto yy164; goto yy91; } - yy220: + yy221: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '>') { - if (yych <= '/') { - if (yych == '!') goto yy256; + if (yych <= '@') { + if (yych <= '9') { + if (yych == '!') goto yy257; + if (yych >= '0') goto yy221; } else { - if (yych <= '9') goto yy220; - if (yych == '=') goto yy256; + if (yych <= '=') { + if (yych >= '=') goto yy257; + } else { + if (yych == '?') goto yy257; + } } } else { - if (yych <= '^') { - if (yych <= '?') goto yy256; - if (yych <= '@') goto yy221; - if (yych <= 'Z') goto yy220; + if (yych <= '`') { + if (yych <= 'Z') goto yy221; + if (yych == '_') goto yy221; } else { - if (yych == '`') goto yy221; - if (yych <= 'z') goto yy220; + if (yych <= 0x0000007F) { + if (yych <= 'z') goto yy221; + } else { + if (yych != 0x0000FFFD) goto yy221; + } } } - yy221: -#line 132 "src/lexer.re" + yy222: +#line 138 "src/lexer.re" { return rbs_next_token(lexer, tSYMBOL); } -#line 1873 "src/lexer.c" - yy222: - rbs_skip(lexer); - goto yy168; +#line 1948 "src/lexer.c" yy223: + rbs_skip(lexer); + goto yy169; + yy224: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= 'Z') { - if (yych <= '/') goto yy224; - if (yych <= '9') goto yy106; - if (yych >= 'A') goto yy106; - } else { - if (yych <= '_') { - if (yych >= '_') goto yy106; + if (yych <= '_') { + if (yych <= '@') { + if (yych <= '/') goto yy225; + if (yych <= '9') goto yy106; } else { - if (yych <= '`') goto yy224; + if (yych <= 'Z') goto yy106; + if (yych >= '_') goto yy106; + } + } else { + if (yych <= 0x0000007F) { + if (yych <= '`') goto yy225; if (yych <= 'z') goto yy106; + } else { + if (yych != 0x0000FFFD) goto yy106; } } - yy224: -#line 103 "src/lexer.re" + yy225: +#line 109 "src/lexer.re" { return rbs_next_token(lexer, kATRBS); } -#line 1895 "src/lexer.c" - yy225: +#line 1974 "src/lexer.c" + yy226: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'd') goto yy257; + if (yych == 'd') goto yy258; goto yy114; - yy226: + yy227: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 's') goto yy258; + if (yych == 's') goto yy259; goto yy54; - yy227: + yy228: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == '_') goto yy260; + if (yych == '_') goto yy261; goto yy54; - yy228: + yy229: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy229; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy229; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy230; + if (yych != 0x0000FFFD) goto yy53; } } - yy229: -#line 72 "src/lexer.re" + yy230: +#line 78 "src/lexer.re" { return rbs_next_token(lexer, kBOOL); } -#line 1933 "src/lexer.c" - yy230: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 's') goto yy261; - goto yy54; +#line 2013 "src/lexer.c" yy231: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'n') goto yy263; + if (yych == 's') goto yy262; goto yy54; yy232: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy264; + if (yych == 'n') goto yy264; goto yy54; yy233: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'u') goto yy266; + if (yych == 'e') goto yy265; goto yy54; yy234: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy267; + if (yych == 'u') goto yy267; goto yy54; yy235: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'r') goto yy268; + if (yych == 'a') goto yy268; goto yy54; yy236: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy269; + if (yych == 'r') goto yy269; goto yy54; yy237: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy270; + if (yych == 'l') goto yy270; goto yy54; yy238: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy271; + if (yych == 'e') goto yy271; goto yy54; yy239: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'i') goto yy272; + if (yych == 'a') goto yy272; goto yy54; yy240: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'r') goto yy273; + if (yych == 'i') goto yy273; goto yy54; yy241: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych == 'r') goto yy274; + goto yy54; + yy242: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy242; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy242; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy243; + if (yych != 0x0000FFFD) goto yy53; } } - yy242: -#line 92 "src/lexer.re" + yy243: +#line 98 "src/lexer.re" { return rbs_next_token(lexer, kSELF); } -#line 2011 "src/lexer.c" - yy243: +#line 2092 "src/lexer.c" + yy244: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy274; + if (yych == 'l') goto yy275; goto yy54; - yy244: + yy245: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy245; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy245; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy246; + if (yych != 0x0000FFFD) goto yy53; } } - yy245: -#line 104 "src/lexer.re" + yy246: +#line 110 "src/lexer.re" { return rbs_next_token(lexer, kSKIP); } -#line 2039 "src/lexer.c" - yy246: +#line 2121 "src/lexer.c" + yy247: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy247; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy247; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy248; + if (yych != 0x0000FFFD) goto yy53; } } - yy247: -#line 95 "src/lexer.re" + yy248: +#line 101 "src/lexer.re" { return rbs_next_token(lexer, kTRUE); } -#line 2062 "src/lexer.c" - yy248: +#line 2145 "src/lexer.c" + yy249: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy249; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy249; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy250; + if (yych != 0x0000FFFD) goto yy53; } } - yy249: -#line 96 "src/lexer.re" + yy250: +#line 102 "src/lexer.re" { return rbs_next_token(lexer, kTYPE); } -#line 2085 "src/lexer.c" - yy250: +#line 2169 "src/lexer.c" + yy251: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy275; + if (yych == 'e') goto yy276; goto yy54; - yy251: + yy252: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'p') goto yy276; + if (yych == 'p') goto yy277; goto yy54; - yy252: + yy253: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy253; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy253; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy254; + if (yych != 0x0000FFFD) goto yy53; } } - yy253: -#line 99 "src/lexer.re" + yy254: +#line 105 "src/lexer.re" { return rbs_next_token(lexer, kVOID); } -#line 2118 "src/lexer.c" - yy254: +#line 2203 "src/lexer.c" + yy255: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { if (yych <= '/') goto yy70; - if (yych <= '9') goto yy277; + if (yych <= '9') goto yy278; goto yy70; } else { - if (yych <= 'F') goto yy277; + if (yych <= 'F') goto yy278; if (yych <= '`') goto yy70; - if (yych <= 'f') goto yy277; + if (yych <= 'f') goto yy278; goto yy70; } - yy255: + yy256: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { if (yych <= '/') goto yy70; - if (yych <= '9') goto yy278; + if (yych <= '9') goto yy279; goto yy70; } else { - if (yych <= 'F') goto yy278; + if (yych <= 'F') goto yy279; if (yych <= '`') goto yy70; - if (yych <= 'f') goto yy278; + if (yych <= 'f') goto yy279; goto yy70; } - yy256: - rbs_skip(lexer); - goto yy221; yy257: + rbs_skip(lexer); + goto yy222; + yy258: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'o') goto yy279; + if (yych == 'o') goto yy280; goto yy114; - yy258: + yy259: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy259; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy259; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy260; + if (yych != 0x0000FFFD) goto yy53; } } - yy259: -#line 68 "src/lexer.re" + yy260: +#line 74 "src/lexer.re" { return rbs_next_token(lexer, kALIAS); } -#line 2175 "src/lexer.c" - yy260: +#line 2261 "src/lexer.c" + yy261: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'q') { - if (yych == 'a') goto yy280; + if (yych == 'a') goto yy281; goto yy54; } else { - if (yych <= 'r') goto yy281; - if (yych == 'w') goto yy282; + if (yych <= 'r') goto yy282; + if (yych == 'w') goto yy283; goto yy54; } - yy261: - yyaccept = 7; + yy262: + yyaccept = 8; rbs_skip(lexer); backup = *lexer; yych = rbs_peek(lexer); - if (yych <= '<') { - if (yych <= ',') { + if (yych <= '@') { + if (yych <= '-') { if (yych == '!') goto yy110; + if (yych >= '-') goto yy284; } else { - if (yych <= '-') goto yy283; - if (yych <= '/') goto yy262; - if (yych <= '9') goto yy53; - } + if (yych <= '9') { + if (yych >= '0') goto yy53; + } else { + if (yych == '=') goto yy111; + } + } } else { - if (yych <= '^') { - if (yych <= '=') goto yy111; - if (yych <= '@') goto yy262; + if (yych <= '`') { if (yych <= 'Z') goto yy53; + if (yych == '_') goto yy53; } else { - if (yych == '`') goto yy262; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) { + if (yych <= 'z') goto yy53; + } else { + if (yych != 0x0000FFFD) goto yy53; + } } } - yy262: -#line 74 "src/lexer.re" + yy263: +#line 80 "src/lexer.re" { return rbs_next_token(lexer, kCLASS); } -#line 2213 "src/lexer.c" - yy263: +#line 2304 "src/lexer.c" + yy264: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'd') goto yy284; + if (yych == 'd') goto yy285; goto yy54; - yy264: + yy265: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy265; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy265; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy266; + if (yych != 0x0000FFFD) goto yy53; } } - yy265: -#line 79 "src/lexer.re" + yy266: +#line 85 "src/lexer.re" { return rbs_next_token(lexer, kFALSE); } -#line 2241 "src/lexer.c" - yy266: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 'd') goto yy286; - goto yy54; +#line 2333 "src/lexer.c" yy267: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'n') goto yy287; + if (yych == 'd') goto yy287; goto yy54; yy268: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'f') goto yy288; + if (yych == 'n') goto yy288; goto yy54; yy269: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy289; + if (yych == 'f') goto yy289; goto yy54; yy270: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'n') goto yy291; + if (yych == 'e') goto yy290; goto yy54; yy271: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 't') goto yy292; + if (yych == 'n') goto yy292; goto yy54; yy272: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'c') goto yy293; + if (yych == 't') goto yy293; goto yy54; yy273: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'n') goto yy295; + if (yych == 'c') goto yy294; goto yy54; yy274: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy297; + if (yych == 'n') goto yy296; goto yy54; yy275: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'c') goto yy298; + if (yych == 'e') goto yy298; goto yy54; yy276: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy299; + if (yych == 'c') goto yy299; goto yy54; yy277: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych == 'e') goto yy300; + goto yy54; + yy278: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { @@ -2529,189 +2621,197 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych <= 'f') goto yy68; goto yy70; } - yy278: + yy279: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { if (yych <= '/') goto yy70; - if (yych <= '9') goto yy300; + if (yych <= '9') goto yy301; goto yy70; } else { - if (yych <= 'F') goto yy300; + if (yych <= 'F') goto yy301; if (yych <= '`') goto yy70; - if (yych <= 'f') goto yy300; + if (yych <= 'f') goto yy301; goto yy70; } - yy279: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == '_') goto yy301; - goto yy114; yy280: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'c') goto yy302; - goto yy54; + if (yych == '_') goto yy302; + goto yy114; yy281: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy303; + if (yych == 'c') goto yy303; goto yy54; yy282: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'r') goto yy304; + if (yych == 'e') goto yy304; goto yy54; yy283: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy305; - goto yy70; + if (yych == 'r') goto yy305; + goto yy54; yy284: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych == 'a') goto yy306; + goto yy70; + yy285: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy285; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy285; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy286; + if (yych != 0x0000FFFD) goto yy53; } } - yy285: -#line 78 "src/lexer.re" + yy286: +#line 84 "src/lexer.re" { return rbs_next_token(lexer, kEXTEND); } -#line 2370 "src/lexer.c" - yy286: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 'e') goto yy306; - goto yy54; +#line 2463 "src/lexer.c" yy287: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'c') goto yy308; + if (yych == 'e') goto yy307; goto yy54; yy288: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy309; + if (yych == 'c') goto yy309; goto yy54; yy289: - yyaccept = 8; + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych == 'a') goto yy310; + goto yy54; + yy290: + yyaccept = 9; rbs_skip(lexer); backup = *lexer; yych = rbs_peek(lexer); - if (yych <= '<') { - if (yych <= ',') { + if (yych <= '@') { + if (yych <= '-') { if (yych == '!') goto yy110; + if (yych >= '-') goto yy311; } else { - if (yych <= '-') goto yy310; - if (yych <= '/') goto yy290; - if (yych <= '9') goto yy53; + if (yych <= '9') { + if (yych >= '0') goto yy53; + } else { + if (yych == '=') goto yy111; + } } } else { - if (yych <= '^') { - if (yych <= '=') goto yy111; - if (yych <= '@') goto yy290; + if (yych <= '`') { if (yych <= 'Z') goto yy53; + if (yych == '_') goto yy53; } else { - if (yych == '`') goto yy290; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) { + if (yych <= 'z') goto yy53; + } else { + if (yych != 0x0000FFFD) goto yy53; + } } } - yy290: -#line 84 "src/lexer.re" + yy291: +#line 90 "src/lexer.re" { return rbs_next_token(lexer, kMODULE); } -#line 2412 "src/lexer.c" - yy291: +#line 2510 "src/lexer.c" + yy292: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'd') goto yy311; + if (yych == 'd') goto yy312; goto yy54; - yy292: + yy293: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy313; + if (yych == 'e') goto yy314; goto yy54; - yy293: + yy294: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy294; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy294; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy295; + if (yych != 0x0000FFFD) goto yy53; } } - yy294: -#line 91 "src/lexer.re" + yy295: +#line 97 "src/lexer.re" { return rbs_next_token(lexer, kPUBLIC); } -#line 2445 "src/lexer.c" - yy295: +#line 2544 "src/lexer.c" + yy296: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy296; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy296; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy297; + if (yych != 0x0000FFFD) goto yy53; } } - yy296: -#line 105 "src/lexer.re" + yy297: +#line 111 "src/lexer.re" { return rbs_next_token(lexer, kRETURN); } -#line 2468 "src/lexer.c" - yy297: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 't') goto yy315; - goto yy54; +#line 2568 "src/lexer.c" yy298: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'k') goto yy316; + if (yych == 't') goto yy316; goto yy54; yy299: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'd') goto yy317; + if (yych == 'k') goto yy317; goto yy54; yy300: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych == 'd') goto yy318; + goto yy54; + yy301: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { @@ -2724,261 +2824,262 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych <= 'f') goto yy88; goto yy70; } - yy301: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == '_') goto yy319; - goto yy114; yy302: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'c') goto yy321; - goto yy54; + if (yych == '_') goto yy320; + goto yy114; yy303: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy322; + if (yych == 'c') goto yy322; goto yy54; yy304: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'i') goto yy323; + if (yych == 'a') goto yy323; goto yy54; yy305: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy324; - goto yy70; + if (yych == 'i') goto yy324; + goto yy54; yy306: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych == 'l') goto yy325; + goto yy70; + yy307: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy307; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy307; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy308; + if (yych != 0x0000FFFD) goto yy53; } } - yy307: -#line 81 "src/lexer.re" + yy308: +#line 87 "src/lexer.re" { return rbs_next_token(lexer, kINCLUDE); } -#line 2544 "src/lexer.c" - yy308: +#line 2645 "src/lexer.c" + yy309: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy325; + if (yych == 'e') goto yy326; goto yy54; - yy309: + yy310: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'c') goto yy327; + if (yych == 'c') goto yy328; goto yy54; - yy310: + yy311: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy328; - if (yych == 's') goto yy329; + if (yych == 'a') goto yy329; + if (yych == 's') goto yy330; goto yy70; - yy311: + yy312: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy312; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy312; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy313; + if (yych != 0x0000FFFD) goto yy53; } } - yy312: -#line 89 "src/lexer.re" + yy313: +#line 95 "src/lexer.re" { return rbs_next_token(lexer, kPREPEND); } -#line 2583 "src/lexer.c" - yy313: +#line 2685 "src/lexer.c" + yy314: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy314; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy314; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy315; + if (yych != 0x0000FFFD) goto yy53; } } - yy314: -#line 90 "src/lexer.re" + yy315: +#line 96 "src/lexer.re" { return rbs_next_token(lexer, kPRIVATE); } -#line 2606 "src/lexer.c" - yy315: +#line 2709 "src/lexer.c" + yy316: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'o') goto yy330; + if (yych == 'o') goto yy331; goto yy54; - yy316: + yy317: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy331; + if (yych == 'e') goto yy332; goto yy54; - yy317: + yy318: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy318; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy318; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy319; + if (yych != 0x0000FFFD) goto yy53; } } - yy318: -#line 98 "src/lexer.re" + yy319: +#line 104 "src/lexer.re" { return rbs_next_token(lexer, kUNTYPED); } -#line 2639 "src/lexer.c" - yy319: +#line 2743 "src/lexer.c" + yy320: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy113; } else { - if (yych <= '9') goto yy113; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy113; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy320; - if (yych <= 'Z') goto yy113; + if (yych <= 'z') { + if (yych == '_') goto yy113; + if (yych >= 'a') goto yy113; } else { - if (yych == '`') goto yy320; - if (yych <= 'z') goto yy113; + if (yych <= 0x0000007F) goto yy321; + if (yych != 0x0000FFFD) goto yy113; } } - yy320: -#line 102 "src/lexer.re" + yy321: +#line 108 "src/lexer.re" { return rbs_next_token(lexer, k__TODO__); } -#line 2662 "src/lexer.c" - yy321: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 'e') goto yy332; - goto yy54; +#line 2767 "src/lexer.c" yy322: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'd') goto yy333; + if (yych == 'e') goto yy333; goto yy54; yy323: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 't') goto yy334; + if (yych == 'd') goto yy334; goto yy54; yy324: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'i') goto yy335; - goto yy70; + if (yych == 't') goto yy335; + goto yy54; yy325: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych == 'i') goto yy336; + goto yy70; + yy326: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy326; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy326; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy327; + if (yych != 0x0000FFFD) goto yy53; } } - yy326: -#line 82 "src/lexer.re" + yy327: +#line 88 "src/lexer.re" { return rbs_next_token(lexer, kINSTANCE); } -#line 2705 "src/lexer.c" - yy327: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 'e') goto yy336; - goto yy54; +#line 2811 "src/lexer.c" yy328: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy338; - goto yy70; + if (yych == 'e') goto yy337; + goto yy54; yy329: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy339; + if (yych == 'l') goto yy339; goto yy70; yy330: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'n') goto yy340; - goto yy54; + if (yych == 'e') goto yy340; + goto yy70; yy331: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'd') goto yy342; + if (yych == 'n') goto yy341; goto yy54; yy332: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 's') goto yy344; + if (yych == 'd') goto yy343; goto yy54; yy333: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy345; + if (yych == 's') goto yy345; goto yy54; yy334: rbs_skip(lexer); @@ -2988,234 +3089,245 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yy335: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy347; - goto yy70; + if (yych == 'e') goto yy347; + goto yy54; yy336: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych == 'a') goto yy348; + goto yy70; + yy337: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy337; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy337; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy338; + if (yych != 0x0000FFFD) goto yy53; } } - yy337: -#line 83 "src/lexer.re" + yy338: +#line 89 "src/lexer.re" { return rbs_next_token(lexer, kINTERFACE); } -#line 2773 "src/lexer.c" - yy338: +#line 2880 "src/lexer.c" + yy339: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'i') goto yy348; + if (yych == 'i') goto yy349; goto yy70; - yy339: + yy340: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy349; + if (yych == 'l') goto yy350; goto yy70; - yy340: + yy341: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy341; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy341; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy342; + if (yych != 0x0000FFFD) goto yy53; } } - yy341: -#line 93 "src/lexer.re" + yy342: +#line 99 "src/lexer.re" { return rbs_next_token(lexer, kSINGLETON); } -#line 2806 "src/lexer.c" - yy342: +#line 2914 "src/lexer.c" + yy343: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy343; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy343; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy344; + if (yych != 0x0000FFFD) goto yy53; } } - yy343: -#line 97 "src/lexer.re" + yy344: +#line 103 "src/lexer.re" { return rbs_next_token(lexer, kUNCHECKED); } -#line 2829 "src/lexer.c" - yy344: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 's') goto yy350; - goto yy54; +#line 2938 "src/lexer.c" yy345: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'r') goto yy351; + if (yych == 's') goto yy351; goto yy54; yy346: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'r') goto yy353; + if (yych == 'r') goto yy352; goto yy54; yy347: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 's') goto yy355; - goto yy70; + if (yych == 'r') goto yy354; + goto yy54; yy348: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy356; + if (yych == 's') goto yy356; goto yy70; yy349: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'f') goto yy357; + if (yych == 'a') goto yy357; goto yy70; yy350: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'o') goto yy358; - goto yy54; + if (yych == 'f') goto yy358; + goto yy70; yy351: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych == 'o') goto yy359; + goto yy54; + yy352: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy352; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy352; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy353; + if (yych != 0x0000FFFD) goto yy53; } } - yy352: -#line 70 "src/lexer.re" + yy353: +#line 76 "src/lexer.re" { return rbs_next_token(lexer, kATTRREADER); } -#line 2887 "src/lexer.c" - yy353: +#line 2997 "src/lexer.c" + yy354: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy354; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy354; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy355; + if (yych != 0x0000FFFD) goto yy53; } } - yy354: -#line 71 "src/lexer.re" + yy355: +#line 77 "src/lexer.re" { return rbs_next_token(lexer, kATTRWRITER); } -#line 2910 "src/lexer.c" - yy355: +#line 3021 "src/lexer.c" + yy356: rbs_skip(lexer); -#line 75 "src/lexer.re" +#line 81 "src/lexer.re" { return rbs_next_token(lexer, kCLASSALIAS); } -#line 2915 "src/lexer.c" - yy356: +#line 3026 "src/lexer.c" + yy357: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 's') goto yy359; + if (yych == 's') goto yy360; goto yy70; - yy357: + yy358: rbs_skip(lexer); -#line 86 "src/lexer.re" +#line 92 "src/lexer.re" { return rbs_next_token(lexer, kMODULESELF); } -#line 2925 "src/lexer.c" - yy358: +#line 3036 "src/lexer.c" + yy359: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'r') goto yy360; + if (yych == 'r') goto yy361; goto yy54; - yy359: + yy360: rbs_skip(lexer); -#line 85 "src/lexer.re" +#line 91 "src/lexer.re" { return rbs_next_token(lexer, kMODULEALIAS); } -#line 2935 "src/lexer.c" - yy360: +#line 3046 "src/lexer.c" + yy361: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '=') { - if (yych <= '/') { + if (yych <= 'Z') { + if (yych <= '9') { if (yych == '!') goto yy110; + if (yych >= '0') goto yy53; } else { - if (yych <= '9') goto yy53; - if (yych >= '=') goto yy111; + if (yych == '=') goto yy111; + if (yych >= 'A') goto yy53; } } else { - if (yych <= '^') { - if (yych <= '@') goto yy361; - if (yych <= 'Z') goto yy53; + if (yych <= 'z') { + if (yych == '_') goto yy53; + if (yych >= 'a') goto yy53; } else { - if (yych == '`') goto yy361; - if (yych <= 'z') goto yy53; + if (yych <= 0x0000007F) goto yy362; + if (yych != 0x0000FFFD) goto yy53; } } - yy361: -#line 69 "src/lexer.re" + yy362: +#line 75 "src/lexer.re" { return rbs_next_token(lexer, kATTRACCESSOR); } -#line 2958 "src/lexer.c" +#line 3070 "src/lexer.c" } -#line 154 "src/lexer.re" +#line 160 "src/lexer.re" } diff --git a/src/lexer.re b/src/lexer.re index 9ccd1a3e0f..bdc71b7356 100644 --- a/src/lexer.re +++ b/src/lexer.re @@ -16,7 +16,13 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { re2c:define:YYRESTORE = "*lexer = backup;"; re2c:yyfill:enable = 0; - ident_char = [a-zA-Z0-9_]; + // Ruby's rule for what an identifier is made of is `ISALNUM(c) || + // (c) == '_' || !ISASCII(c)`, so define the class by what it leaves + // out: every ASCII character that is not a word character, and the + // sentinel `rbs_next_char` reports for a byte that is invalid under + // the active encoding. Everything else can appear in an identifier, + // which is how a non-ASCII character gets in. + ident_char = . \ ([\x00-\x7F] \ [a-zA-Z0-9_]) \ [\uFFFD]; operator = "/" | "~" | "[]=" | "!" | "!=" | "!~" | "-" | "-@" | "+" | "+@" | "==" | "===" | "=~" | "<<" | "<=" | "<=>" | ">" | ">=" | ">>" | "%"; From ad8bb04c6239a484df70b6f2396ed38b22ad2a90 Mon Sep 17 00:00:00 2001 From: Soutaro Matsumoto Date: Mon, 3 Aug 2026 17:53:27 +0900 Subject: [PATCH 3/8] Allow a non-ASCII character to start a symbol MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `identifier` still required `[a-zA-Z_]` in the leading position, so the non-ASCII members `ident_char` gained could only appear after an ASCII first character: `:foo日本語` lexed, but `:日本語` did not. Ruby restricts that position only by excluding ASCII digits -- every other identifier character may lead one, including a non-ASCII digit, so `:123` is a valid symbol literal. `rbs_next_char` never reports a non-ASCII character as `[0-9]`, so subtracting the ASCII digits from `ident_char` expresses exactly that rule: ident_start = ident_char \ [0-9]; `:123` and `{foo:123}` keep lexing as they did, because the leading position still bars `[0-9]`. The class is given a name because it states a rule about identifiers rather than about symbols, and the rules that lex an identifier take it up next. The leading `@`s fold into the same rule, which collapses the `:`, `:@` and `:@@` rules into one and leaves `identifier` with no use, so the definition goes away. --- src/lexer.c | 1402 +++++++++++++++++++++++--------------------------- src/lexer.re | 15 +- 2 files changed, 667 insertions(+), 750 deletions(-) diff --git a/src/lexer.c b/src/lexer.c index 74cabc2913..37d8754589 100644 --- a/src/lexer.c +++ b/src/lexer.c @@ -166,7 +166,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { } yy1: rbs_skip(lexer); -#line 158 "src/lexer.re" +#line 161 "src/lexer.re" { return rbs_next_eof_token(lexer); } @@ -174,7 +174,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yy2: rbs_skip(lexer); yy3: -#line 159 "src/lexer.re" +#line 162 "src/lexer.re" { return rbs_next_token(lexer, ErrorToken); } @@ -185,7 +185,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '\t') goto yy4; if (yych == ' ') goto yy4; yy5: -#line 157 "src/lexer.re" +#line 160 "src/lexer.re" { return rbs_next_token(lexer, tTRIVIA); } @@ -199,7 +199,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '=') goto yy24; if (yych == '~') goto yy24; yy8: -#line 55 "src/lexer.re" +#line 61 "src/lexer.re" { return rbs_next_token(lexer, tOPERATOR); } @@ -221,7 +221,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych != 0x0000FFFD) goto yy10; } yy11: -#line 67 "src/lexer.re" +#line 73 "src/lexer.re" { return rbs_next_token( lexer, @@ -284,7 +284,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { goto yy8; yy14: rbs_skip(lexer); -#line 39 "src/lexer.re" +#line 45 "src/lexer.re" { return rbs_next_token(lexer, pAMP); } @@ -298,14 +298,14 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { goto yy78; yy16: rbs_skip(lexer); -#line 30 "src/lexer.re" +#line 36 "src/lexer.re" { return rbs_next_token(lexer, pLPAREN); } #line 243 "src/lexer.c" yy17: rbs_skip(lexer); -#line 31 "src/lexer.re" +#line 37 "src/lexer.re" { return rbs_next_token(lexer, pRPAREN); } @@ -314,7 +314,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == '*') goto yy82; -#line 41 "src/lexer.re" +#line 47 "src/lexer.re" { return rbs_next_token(lexer, pSTAR); } @@ -328,7 +328,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { goto yy8; yy20: rbs_skip(lexer); -#line 36 "src/lexer.re" +#line 42 "src/lexer.re" { return rbs_next_token(lexer, pCOMMA); } @@ -364,7 +364,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yych = rbs_peek(lexer); if (yych == '.') goto yy85; yy23: -#line 43 "src/lexer.re" +#line 49 "src/lexer.re" { return rbs_next_token(lexer, pDOT); } @@ -379,7 +379,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych <= '9') goto yy25; if (yych == '_') goto yy25; yy26: -#line 59 "src/lexer.re" +#line 65 "src/lexer.re" { return rbs_next_token(lexer, tINTEGER); } @@ -389,103 +389,73 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { rbs_skip(lexer); backup = *lexer; yych = rbs_peek(lexer); - switch (yych) { - case '!': - goto yy86; - case '"': - goto yy88; - case '$': - goto yy89; - case '%': - case '&': - case '/': - case '^': - case '`': - case '|': - case '~': - goto yy90; - case '\'': - goto yy91; - case '*': - goto yy92; - case '+': - case '-': - goto yy93; - case ':': - goto yy94; - case '<': - goto yy95; - case '=': - goto yy96; - case '>': - goto yy97; - case '@': - goto yy98; - case 'A': - case 'B': - case 'C': - case 'D': - case 'E': - case 'F': - case 'G': - case 'H': - case 'I': - case 'J': - case 'K': - case 'L': - case 'M': - case 'N': - case 'O': - case 'P': - case 'Q': - case 'R': - case 'S': - case 'T': - case 'U': - case 'V': - case 'W': - case 'X': - case 'Y': - case 'Z': - case '_': - case 'a': - case 'b': - case 'c': - case 'd': - case 'e': - case 'f': - case 'g': - case 'h': - case 'i': - case 'j': - case 'k': - case 'l': - case 'm': - case 'n': - case 'o': - case 'p': - case 'q': - case 'r': - case 's': - case 't': - case 'u': - case 'v': - case 'w': - case 'x': - case 'y': - case 'z': - goto yy99; - case '[': - goto yy101; - default: - goto yy28; + if (yych <= '<') { + if (yych <= '*') { + if (yych <= '#') { + if (yych <= ' ') goto yy28; + if (yych <= '!') goto yy86; + if (yych <= '"') goto yy88; + } else { + if (yych <= '&') { + if (yych <= '$') goto yy89; + goto yy90; + } else { + if (yych <= '\'') goto yy91; + if (yych >= '*') goto yy92; + } + } + } else { + if (yych <= '.') { + if (yych == ',') goto yy28; + if (yych <= '-') goto yy93; + } else { + if (yych <= '9') { + if (yych <= '/') goto yy90; + } else { + if (yych <= ':') goto yy94; + if (yych >= '<') goto yy95; + } + } + } + } else { + if (yych <= '_') { + if (yych <= '@') { + if (yych <= '=') goto yy96; + if (yych <= '>') goto yy97; + if (yych >= '@') goto yy98; + } else { + if (yych <= '[') { + if (yych <= 'Z') goto yy99; + goto yy101; + } else { + if (yych <= ']') goto yy28; + if (yych <= '^') goto yy90; + goto yy99; + } + } + } else { + if (yych <= '}') { + if (yych <= 'z') { + if (yych <= '`') goto yy90; + goto yy99; + } else { + if (yych == '|') goto yy90; + } + } else { + if (yych <= 0x0000007F) { + if (yych <= '~') goto yy90; + } else { + if (yych != 0x0000FFFD) goto yy99; + } + } + } } yy28: -#line 50 "src/lexer.re" +#line 56 "src/lexer.re" { return rbs_next_token(lexer, pCOLON); } -#line 394 "src/lexer.c" +#line 379 "src/lexer.c" yy29: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -493,11 +463,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych <= '<') goto yy24; if (yych <= '=') goto yy102; yy30: -#line 52 "src/lexer.re" +#line 58 "src/lexer.re" { return rbs_next_token(lexer, pLT); } -#line 404 "src/lexer.c" +#line 389 "src/lexer.c" yy31: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -509,29 +479,29 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '~') goto yy24; } yy32: -#line 49 "src/lexer.re" +#line 55 "src/lexer.re" { return rbs_next_token(lexer, pEQ); } -#line 418 "src/lexer.c" +#line 403 "src/lexer.c" yy33: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '<') goto yy34; if (yych <= '>') goto yy24; yy34: -#line 53 "src/lexer.re" +#line 59 "src/lexer.re" { return rbs_next_token(lexer, pGT); } -#line 427 "src/lexer.c" +#line 412 "src/lexer.c" yy35: rbs_skip(lexer); -#line 40 "src/lexer.re" +#line 46 "src/lexer.re" { return rbs_next_token(lexer, pQUESTION); } -#line 432 "src/lexer.c" +#line 417 "src/lexer.c" yy36: yyaccept = 0; rbs_skip(lexer); @@ -577,34 +547,34 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { } } yy38: -#line 143 "src/lexer.re" +#line 146 "src/lexer.re" { return rbs_next_token(lexer, tUIDENT); } -#line 480 "src/lexer.c" +#line 465 "src/lexer.c" yy39: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == ']') goto yy112; -#line 32 "src/lexer.re" +#line 38 "src/lexer.re" { return rbs_next_token(lexer, pLBRACKET); } -#line 487 "src/lexer.c" +#line 472 "src/lexer.c" yy40: rbs_skip(lexer); -#line 33 "src/lexer.re" +#line 39 "src/lexer.re" { return rbs_next_token(lexer, pRBRACKET); } -#line 492 "src/lexer.c" +#line 477 "src/lexer.c" yy41: rbs_skip(lexer); -#line 38 "src/lexer.re" +#line 44 "src/lexer.re" { return rbs_next_token(lexer, pHAT); } -#line 497 "src/lexer.c" +#line 482 "src/lexer.c" yy42: yyaccept = 4; rbs_skip(lexer); @@ -628,11 +598,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { } } yy43: -#line 146 "src/lexer.re" +#line 149 "src/lexer.re" { return rbs_next_token(lexer, tULLIDENT); } -#line 523 "src/lexer.c" +#line 508 "src/lexer.c" yy44: yyaccept = 5; rbs_skip(lexer); @@ -645,11 +615,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych != ':') goto yy120; } yy45: -#line 45 "src/lexer.re" +#line 51 "src/lexer.re" { return rbs_next_token(lexer, tOPERATOR); } -#line 538 "src/lexer.c" +#line 523 "src/lexer.c" yy46: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -662,11 +632,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { goto yy54; } yy47: -#line 142 "src/lexer.re" +#line 145 "src/lexer.re" { return rbs_next_token(lexer, tLIDENT); } -#line 553 "src/lexer.c" +#line 538 "src/lexer.c" yy48: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -784,25 +754,25 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { goto yy54; yy65: rbs_skip(lexer); -#line 34 "src/lexer.re" +#line 40 "src/lexer.re" { return rbs_next_token(lexer, pLBRACE); } -#line 673 "src/lexer.c" +#line 658 "src/lexer.c" yy66: rbs_skip(lexer); -#line 37 "src/lexer.re" +#line 43 "src/lexer.re" { return rbs_next_token(lexer, pBAR); } -#line 678 "src/lexer.c" +#line 663 "src/lexer.c" yy67: rbs_skip(lexer); -#line 35 "src/lexer.re" +#line 41 "src/lexer.re" { return rbs_next_token(lexer, pRBRACE); } -#line 683 "src/lexer.c" +#line 668 "src/lexer.c" yy68: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -841,18 +811,18 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { goto yy163; } } else { - if (yyaccept == 8) goto yy263; + if (yyaccept == 8) goto yy257; else - goto yy291; + goto yy285; } } yy71: rbs_skip(lexer); -#line 120 "src/lexer.re" +#line 126 "src/lexer.re" { return rbs_next_token(lexer, tDQSTRING); } -#line 727 "src/lexer.c" +#line 712 "src/lexer.c" yy72: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -889,11 +859,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { } } yy74: -#line 153 "src/lexer.re" +#line 156 "src/lexer.re" { return rbs_next_token(lexer, tGIDENT); } -#line 766 "src/lexer.c" +#line 751 "src/lexer.c" yy75: rbs_skip(lexer); goto yy74; @@ -932,11 +902,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yy79: rbs_skip(lexer); yy80: -#line 121 "src/lexer.re" +#line 127 "src/lexer.re" { return rbs_next_token(lexer, tSQSTRING); } -#line 807 "src/lexer.c" +#line 792 "src/lexer.c" yy81: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -950,27 +920,27 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { } yy82: rbs_skip(lexer); -#line 42 "src/lexer.re" +#line 48 "src/lexer.re" { return rbs_next_token(lexer, pSTAR2); } -#line 823 "src/lexer.c" +#line 808 "src/lexer.c" yy83: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych >= 0x00000001) goto yy83; -#line 56 "src/lexer.re" +#line 62 "src/lexer.re" { return rbs_next_token(lexer, tINLINECOMMENT); } -#line 830 "src/lexer.c" +#line 815 "src/lexer.c" yy84: rbs_skip(lexer); -#line 47 "src/lexer.re" +#line 53 "src/lexer.re" { return rbs_next_token(lexer, pARROW); } -#line 835 "src/lexer.c" +#line 820 "src/lexer.c" yy85: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -982,11 +952,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '=') goto yy90; if (yych == '~') goto yy90; yy87: -#line 140 "src/lexer.re" +#line 143 "src/lexer.re" { return rbs_next_token(lexer, tSYMBOL); } -#line 849 "src/lexer.c" +#line 834 "src/lexer.c" yy88: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -1070,11 +1040,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { goto yy87; yy94: rbs_skip(lexer); -#line 51 "src/lexer.re" +#line 57 "src/lexer.re" { return rbs_next_token(lexer, pCOLON2); } -#line 935 "src/lexer.c" +#line 920 "src/lexer.c" yy95: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -1097,28 +1067,34 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yy98: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '^') { - if (yych <= '?') goto yy70; - if (yych <= '@') goto yy167; - if (yych <= 'Z') goto yy168; - goto yy70; + if (yych <= '_') { + if (yych <= '@') { + if (yych <= '?') goto yy70; + goto yy167; + } else { + if (yych <= 'Z') goto yy99; + if (yych <= '^') goto yy70; + } } else { - if (yych == '`') goto yy70; - if (yych <= 'z') goto yy168; - goto yy70; + if (yych <= 0x0000007F) { + if (yych <= '`') goto yy70; + if (yych >= '{') goto yy70; + } else { + if (yych == 0x0000FFFD) goto yy70; + } } yy99: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { if (yych <= '9') { - if (yych == '!') goto yy170; + if (yych == '!') goto yy168; if (yych >= '0') goto yy99; } else { if (yych <= '=') { - if (yych >= '=') goto yy170; + if (yych >= '=') goto yy168; } else { - if (yych == '?') goto yy170; + if (yych == '?') goto yy168; } } } else { @@ -1134,11 +1110,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { } } yy100: -#line 136 "src/lexer.re" +#line 141 "src/lexer.re" { return rbs_next_token(lexer, tSYMBOL); } -#line 997 "src/lexer.c" +#line 988 "src/lexer.c" yy101: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -1156,21 +1132,21 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { goto yy8; yy104: rbs_skip(lexer); -#line 48 "src/lexer.re" +#line 54 "src/lexer.re" { return rbs_next_token(lexer, pFATARROW); } -#line 1017 "src/lexer.c" +#line 1008 "src/lexer.c" yy105: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '^') { if (yych <= '@') goto yy70; - if (yych <= 'Z') goto yy171; + if (yych <= 'Z') goto yy169; goto yy70; } else { if (yych == '`') goto yy70; - if (yych <= 'z') goto yy171; + if (yych <= 'z') goto yy169; goto yy70; } yy106: @@ -1194,39 +1170,39 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { } } yy108: -#line 150 "src/lexer.re" +#line 153 "src/lexer.re" { return rbs_next_token(lexer, tAIDENT); } -#line 1053 "src/lexer.c" +#line 1044 "src/lexer.c" yy109: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'b') goto yy173; + if (yych == 'b') goto yy171; goto yy107; yy110: rbs_skip(lexer); -#line 147 "src/lexer.re" +#line 150 "src/lexer.re" { return rbs_next_token(lexer, tBANGIDENT); } -#line 1063 "src/lexer.c" +#line 1054 "src/lexer.c" yy111: rbs_skip(lexer); -#line 148 "src/lexer.re" +#line 151 "src/lexer.re" { return rbs_next_token(lexer, tEQIDENT); } -#line 1068 "src/lexer.c" +#line 1059 "src/lexer.c" yy112: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == '=') goto yy24; -#line 54 "src/lexer.re" +#line 60 "src/lexer.re" { return rbs_next_token(lexer, pAREF_OPR); } -#line 1075 "src/lexer.c" +#line 1066 "src/lexer.c" yy113: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -1249,11 +1225,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { } } yy115: -#line 144 "src/lexer.re" +#line 147 "src/lexer.re" { return rbs_next_token(lexer, tULLIDENT); } -#line 1100 "src/lexer.c" +#line 1091 "src/lexer.c" yy116: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -1275,15 +1251,15 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { } } yy117: -#line 145 "src/lexer.re" +#line 148 "src/lexer.re" { return rbs_next_token(lexer, tULIDENT); } -#line 1124 "src/lexer.c" +#line 1115 "src/lexer.c" yy118: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 't') goto yy174; + if (yych == 't') goto yy172; goto yy114; yy119: rbs_skip(lexer); @@ -1313,12 +1289,12 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 0x00000000) goto yy70; - if (yych == '`') goto yy175; + if (yych == '`') goto yy173; goto yy120; yy121: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'i') goto yy176; + if (yych == 'i') goto yy174; goto yy54; yy122: rbs_skip(lexer); @@ -1341,46 +1317,46 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { } } yy123: -#line 107 "src/lexer.re" +#line 113 "src/lexer.re" { return rbs_next_token(lexer, kAS); } -#line 1188 "src/lexer.c" +#line 1179 "src/lexer.c" yy124: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 't') goto yy177; + if (yych == 't') goto yy175; goto yy54; yy125: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'o') goto yy178; - if (yych == 't') goto yy179; + if (yych == 'o') goto yy176; + if (yych == 't') goto yy177; goto yy54; yy126: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy181; + if (yych == 'a') goto yy179; goto yy54; yy127: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'f') goto yy182; + if (yych == 'f') goto yy180; goto yy54; yy128: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'd') goto yy184; + if (yych == 'd') goto yy182; goto yy54; yy129: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 't') goto yy186; + if (yych == 't') goto yy184; goto yy54; yy130: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy187; + if (yych == 'l') goto yy185; goto yy54; yy131: rbs_skip(lexer); @@ -1406,13 +1382,13 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych <= 'b') { if (yych >= 'a') goto yy53; } else { - if (yych <= 'c') goto yy188; + if (yych <= 'c') goto yy186; if (yych <= 'r') goto yy53; - goto yy189; + goto yy187; } } else { if (yych <= 0x0000007F) { - if (yych <= 't') goto yy190; + if (yych <= 't') goto yy188; if (yych <= 'z') goto yy53; } else { if (yych != 0x0000FFFD) goto yy53; @@ -1420,99 +1396,99 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { } } yy132: -#line 86 "src/lexer.re" +#line 92 "src/lexer.re" { return rbs_next_token(lexer, kIN); } -#line 1265 "src/lexer.c" +#line 1256 "src/lexer.c" yy133: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'd') goto yy191; + if (yych == 'd') goto yy189; goto yy54; yy134: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy192; + if (yych == 'l') goto yy190; goto yy54; yy135: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 't') goto yy194; + if (yych == 't') goto yy192; goto yy54; yy136: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy196; - if (yych == 'i') goto yy197; + if (yych == 'e') goto yy194; + if (yych == 'i') goto yy195; goto yy54; yy137: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'b') goto yy198; + if (yych == 'b') goto yy196; goto yy54; yy138: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 't') goto yy199; + if (yych == 't') goto yy197; goto yy54; yy139: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy200; + if (yych == 'l') goto yy198; goto yy54; yy140: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'n') goto yy201; + if (yych == 'n') goto yy199; goto yy54; yy141: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'i') goto yy202; + if (yych == 'i') goto yy200; goto yy54; yy142: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'p') goto yy203; + if (yych == 'p') goto yy201; goto yy54; yy143: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'u') goto yy205; + if (yych == 'u') goto yy203; goto yy54; yy144: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'p') goto yy206; + if (yych == 'p') goto yy204; goto yy54; yy145: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'c') goto yy207; - if (yych == 't') goto yy208; + if (yych == 'c') goto yy205; + if (yych == 't') goto yy206; goto yy54; yy146: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy209; + if (yych == 'e') goto yy207; goto yy54; yy147: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'i') goto yy211; + if (yych == 'i') goto yy209; goto yy54; yy148: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { if (yych <= '/') goto yy70; - if (yych <= '9') goto yy212; + if (yych <= '9') goto yy210; goto yy70; } else { - if (yych <= 'F') goto yy212; + if (yych <= 'F') goto yy210; if (yych <= '`') goto yy70; - if (yych <= 'f') goto yy212; + if (yych <= 'f') goto yy210; goto yy70; } yy149: @@ -1527,31 +1503,31 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 0x00000000) goto yy70; - if (yych == ')') goto yy213; + if (yych == ')') goto yy211; goto yy150; yy151: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 0x00000000) goto yy70; - if (yych == '>') goto yy214; + if (yych == '>') goto yy212; goto yy151; yy152: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 0x00000000) goto yy70; - if (yych == ']') goto yy215; + if (yych == ']') goto yy213; goto yy152; yy153: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 0x00000000) goto yy70; - if (yych == '}') goto yy216; + if (yych == '}') goto yy214; goto yy153; yy154: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 0x00000000) goto yy70; - if (yych == '|') goto yy217; + if (yych == '|') goto yy215; goto yy154; yy155: yyaccept = 6; @@ -1568,23 +1544,23 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { } yy156: rbs_skip(lexer); -#line 44 "src/lexer.re" +#line 50 "src/lexer.re" { return rbs_next_token(lexer, pDOT3); } -#line 1411 "src/lexer.c" +#line 1402 "src/lexer.c" yy157: rbs_skip(lexer); -#line 122 "src/lexer.re" +#line 128 "src/lexer.re" { return rbs_next_token(lexer, tDQSYMBOL); } -#line 1416 "src/lexer.c" +#line 1407 "src/lexer.c" yy158: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'u') goto yy218; - if (yych == 'x') goto yy219; + if (yych == 'u') goto yy216; + if (yych == 'x') goto yy217; goto yy88; yy159: rbs_skip(lexer); @@ -1616,29 +1592,29 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { } } yy160: -#line 139 "src/lexer.re" +#line 142 "src/lexer.re" { return rbs_next_token(lexer, tSYMBOL); } -#line 1455 "src/lexer.c" +#line 1446 "src/lexer.c" yy161: rbs_skip(lexer); goto yy160; yy162: rbs_skip(lexer); yy163: -#line 123 "src/lexer.re" +#line 129 "src/lexer.re" { return rbs_next_token(lexer, tSQSYMBOL); } -#line 1464 "src/lexer.c" +#line 1455 "src/lexer.c" yy164: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '\'') { if (yych <= 0x00000000) goto yy70; if (yych <= '&') goto yy91; - goto yy220; + goto yy218; } else { if (yych == '\\') goto yy164; goto yy91; @@ -1656,108 +1632,84 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yy167: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '^') { - if (yych <= '@') goto yy70; - if (yych <= 'Z') goto yy221; - goto yy70; - } else { - if (yych == '`') goto yy70; - if (yych <= 'z') goto yy221; - goto yy70; - } - yy168: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych <= '@') { - if (yych <= '9') { - if (yych == '!') goto yy223; - if (yych >= '0') goto yy168; + if (yych <= '`') { + if (yych <= 'Z') { + if (yych <= '@') goto yy70; + goto yy99; } else { - if (yych <= '=') { - if (yych >= '=') goto yy223; - } else { - if (yych == '?') goto yy223; - } + if (yych == '_') goto yy99; + goto yy70; } } else { - if (yych <= '`') { - if (yych <= 'Z') goto yy168; - if (yych == '_') goto yy168; + if (yych <= 0x0000007F) { + if (yych <= 'z') goto yy99; + goto yy70; } else { - if (yych <= 0x0000007F) { - if (yych <= 'z') goto yy168; - } else { - if (yych != 0x0000FFFD) goto yy168; - } + if (yych == 0x0000FFFD) goto yy70; + goto yy99; } } - yy169: -#line 137 "src/lexer.re" - { - return rbs_next_token(lexer, tSYMBOL); - } -#line 1527 "src/lexer.c" - yy170: + yy168: rbs_skip(lexer); goto yy100; - yy171: + yy169: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '_') { if (yych <= '@') { - if (yych <= '/') goto yy172; - if (yych <= '9') goto yy171; + if (yych <= '/') goto yy170; + if (yych <= '9') goto yy169; } else { - if (yych <= 'Z') goto yy171; - if (yych >= '_') goto yy171; + if (yych <= 'Z') goto yy169; + if (yych >= '_') goto yy169; } } else { if (yych <= 0x0000007F) { - if (yych <= '`') goto yy172; - if (yych <= 'z') goto yy171; + if (yych <= '`') goto yy170; + if (yych <= 'z') goto yy169; } else { - if (yych != 0x0000FFFD) goto yy171; + if (yych != 0x0000FFFD) goto yy169; } } - yy172: -#line 151 "src/lexer.re" + yy170: +#line 154 "src/lexer.re" { return rbs_next_token(lexer, tA2IDENT); } -#line 1553 "src/lexer.c" - yy173: +#line 1522 "src/lexer.c" + yy171: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 's') goto yy224; + if (yych == 's') goto yy219; goto yy107; - yy174: + yy172: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'o') goto yy226; + if (yych == 'o') goto yy221; goto yy114; - yy175: + yy173: rbs_skip(lexer); -#line 46 "src/lexer.re" +#line 52 "src/lexer.re" { return rbs_next_token(lexer, tQIDENT); } -#line 1568 "src/lexer.c" - yy176: +#line 1537 "src/lexer.c" + yy174: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy227; + if (yych == 'a') goto yy222; goto yy54; - yy177: + yy175: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'r') goto yy228; + if (yych == 'r') goto yy223; goto yy54; - yy178: + yy176: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy229; + if (yych == 'l') goto yy224; goto yy54; - yy179: + yy177: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -1773,22 +1725,22 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy180; + if (yych <= 0x0000007F) goto yy178; if (yych != 0x0000FFFD) goto yy53; } } - yy180: -#line 79 "src/lexer.re" + yy178: +#line 85 "src/lexer.re" { return rbs_next_token(lexer, kBOT); } -#line 1607 "src/lexer.c" - yy181: +#line 1576 "src/lexer.c" + yy179: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 's') goto yy231; + if (yych == 's') goto yy226; goto yy54; - yy182: + yy180: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -1804,17 +1756,17 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy183; + if (yych <= 0x0000007F) goto yy181; if (yych != 0x0000FFFD) goto yy53; } } - yy183: -#line 82 "src/lexer.re" + yy181: +#line 88 "src/lexer.re" { return rbs_next_token(lexer, kDEF); } -#line 1636 "src/lexer.c" - yy184: +#line 1605 "src/lexer.c" + yy182: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -1830,47 +1782,47 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy185; + if (yych <= 0x0000007F) goto yy183; if (yych != 0x0000FFFD) goto yy53; } } - yy185: -#line 83 "src/lexer.re" + yy183: +#line 89 "src/lexer.re" { return rbs_next_token(lexer, kEND); } -#line 1660 "src/lexer.c" - yy186: +#line 1629 "src/lexer.c" + yy184: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy232; + if (yych == 'e') goto yy227; goto yy54; - yy187: + yy185: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 's') goto yy233; + if (yych == 's') goto yy228; goto yy54; - yy188: + yy186: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy234; + if (yych == 'l') goto yy229; goto yy54; - yy189: + yy187: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 't') goto yy235; + if (yych == 't') goto yy230; goto yy54; - yy190: + yy188: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy236; + if (yych == 'e') goto yy231; goto yy54; - yy191: + yy189: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'u') goto yy237; + if (yych == 'u') goto yy232; goto yy54; - yy192: + yy190: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -1886,17 +1838,17 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy193; + if (yych <= 0x0000007F) goto yy191; if (yych != 0x0000FFFD) goto yy53; } } - yy193: -#line 93 "src/lexer.re" + yy191: +#line 99 "src/lexer.re" { return rbs_next_token(lexer, kNIL); } -#line 1714 "src/lexer.c" - yy194: +#line 1683 "src/lexer.c" + yy192: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -1912,52 +1864,52 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy195; + if (yych <= 0x0000007F) goto yy193; if (yych != 0x0000FFFD) goto yy53; } } - yy195: -#line 94 "src/lexer.re" + yy193: +#line 100 "src/lexer.re" { return rbs_next_token(lexer, kOUT); } -#line 1738 "src/lexer.c" - yy196: +#line 1707 "src/lexer.c" + yy194: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'p') goto yy238; + if (yych == 'p') goto yy233; goto yy54; - yy197: + yy195: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'v') goto yy239; + if (yych == 'v') goto yy234; goto yy54; - yy198: + yy196: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy240; + if (yych == 'l') goto yy235; goto yy54; - yy199: + yy197: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'u') goto yy241; + if (yych == 'u') goto yy236; goto yy54; - yy200: + yy198: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'f') goto yy242; + if (yych == 'f') goto yy237; goto yy54; - yy201: + yy199: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'g') goto yy244; + if (yych == 'g') goto yy239; goto yy54; - yy202: + yy200: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'p') goto yy245; + if (yych == 'p') goto yy240; goto yy54; - yy203: + yy201: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -1973,37 +1925,37 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy204; + if (yych <= 0x0000007F) goto yy202; if (yych != 0x0000FFFD) goto yy53; } } - yy204: -#line 100 "src/lexer.re" + yy202: +#line 106 "src/lexer.re" { return rbs_next_token(lexer, kTOP); } -#line 1797 "src/lexer.c" - yy205: +#line 1766 "src/lexer.c" + yy203: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy247; + if (yych == 'e') goto yy242; goto yy54; - yy206: + yy204: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy249; + if (yych == 'e') goto yy244; goto yy54; - yy207: + yy205: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'h') goto yy251; + if (yych == 'h') goto yy246; goto yy54; - yy208: + yy206: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'y') goto yy252; + if (yych == 'y') goto yy247; goto yy54; - yy209: + yy207: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -2019,83 +1971,83 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy210; + if (yych <= 0x0000007F) goto yy208; if (yych != 0x0000FFFD) goto yy53; } } - yy210: -#line 106 "src/lexer.re" + yy208: +#line 112 "src/lexer.re" { return rbs_next_token(lexer, kUSE); } -#line 1841 "src/lexer.c" - yy211: +#line 1810 "src/lexer.c" + yy209: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'd') goto yy253; + if (yych == 'd') goto yy248; goto yy54; - yy212: + yy210: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { if (yych <= '/') goto yy70; - if (yych <= '9') goto yy255; + if (yych <= '9') goto yy250; goto yy70; } else { - if (yych <= 'F') goto yy255; + if (yych <= 'F') goto yy250; if (yych <= '`') goto yy70; - if (yych <= 'f') goto yy255; + if (yych <= 'f') goto yy250; goto yy70; } - yy213: + yy211: rbs_skip(lexer); -#line 62 "src/lexer.re" +#line 68 "src/lexer.re" { return rbs_next_token(lexer, tANNOTATION); } -#line 1864 "src/lexer.c" - yy214: +#line 1833 "src/lexer.c" + yy212: rbs_skip(lexer); -#line 65 "src/lexer.re" +#line 71 "src/lexer.re" { return rbs_next_token(lexer, tANNOTATION); } -#line 1869 "src/lexer.c" - yy215: +#line 1838 "src/lexer.c" + yy213: rbs_skip(lexer); -#line 63 "src/lexer.re" +#line 69 "src/lexer.re" { return rbs_next_token(lexer, tANNOTATION); } -#line 1874 "src/lexer.c" - yy216: +#line 1843 "src/lexer.c" + yy214: rbs_skip(lexer); -#line 61 "src/lexer.re" +#line 67 "src/lexer.re" { return rbs_next_token(lexer, tANNOTATION); } -#line 1879 "src/lexer.c" - yy217: +#line 1848 "src/lexer.c" + yy215: rbs_skip(lexer); -#line 64 "src/lexer.re" +#line 70 "src/lexer.re" { return rbs_next_token(lexer, tANNOTATION); } -#line 1884 "src/lexer.c" - yy218: +#line 1853 "src/lexer.c" + yy216: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { if (yych <= '/') goto yy70; - if (yych <= '9') goto yy256; + if (yych <= '9') goto yy251; goto yy70; } else { - if (yych <= 'F') goto yy256; + if (yych <= 'F') goto yy251; if (yych <= '`') goto yy70; - if (yych <= 'f') goto yy256; + if (yych <= 'f') goto yy251; goto yy70; } - yy219: + yy217: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '/') goto yy70; @@ -2103,7 +2055,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych <= '`') goto yy70; if (yych <= 'f') goto yy88; goto yy70; - yy220: + yy218: yyaccept = 7; rbs_skip(lexer); backup = *lexer; @@ -2116,47 +2068,12 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '\\') goto yy164; goto yy91; } - yy221: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych <= '@') { - if (yych <= '9') { - if (yych == '!') goto yy257; - if (yych >= '0') goto yy221; - } else { - if (yych <= '=') { - if (yych >= '=') goto yy257; - } else { - if (yych == '?') goto yy257; - } - } - } else { - if (yych <= '`') { - if (yych <= 'Z') goto yy221; - if (yych == '_') goto yy221; - } else { - if (yych <= 0x0000007F) { - if (yych <= 'z') goto yy221; - } else { - if (yych != 0x0000FFFD) goto yy221; - } - } - } - yy222: -#line 138 "src/lexer.re" - { - return rbs_next_token(lexer, tSYMBOL); - } -#line 1948 "src/lexer.c" - yy223: - rbs_skip(lexer); - goto yy169; - yy224: + yy219: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '_') { if (yych <= '@') { - if (yych <= '/') goto yy225; + if (yych <= '/') goto yy220; if (yych <= '9') goto yy106; } else { if (yych <= 'Z') goto yy106; @@ -2164,34 +2081,34 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { } } else { if (yych <= 0x0000007F) { - if (yych <= '`') goto yy225; + if (yych <= '`') goto yy220; if (yych <= 'z') goto yy106; } else { if (yych != 0x0000FFFD) goto yy106; } } - yy225: -#line 109 "src/lexer.re" + yy220: +#line 115 "src/lexer.re" { return rbs_next_token(lexer, kATRBS); } -#line 1974 "src/lexer.c" - yy226: +#line 1910 "src/lexer.c" + yy221: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'd') goto yy258; + if (yych == 'd') goto yy252; goto yy114; - yy227: + yy222: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 's') goto yy259; + if (yych == 's') goto yy253; goto yy54; - yy228: + yy223: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == '_') goto yy261; + if (yych == '_') goto yy255; goto yy54; - yy229: + yy224: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -2207,72 +2124,72 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy230; + if (yych <= 0x0000007F) goto yy225; if (yych != 0x0000FFFD) goto yy53; } } - yy230: -#line 78 "src/lexer.re" + yy225: +#line 84 "src/lexer.re" { return rbs_next_token(lexer, kBOOL); } -#line 2013 "src/lexer.c" - yy231: +#line 1949 "src/lexer.c" + yy226: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 's') goto yy262; + if (yych == 's') goto yy256; goto yy54; - yy232: + yy227: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'n') goto yy264; + if (yych == 'n') goto yy258; goto yy54; - yy233: + yy228: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy265; + if (yych == 'e') goto yy259; goto yy54; - yy234: + yy229: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'u') goto yy267; + if (yych == 'u') goto yy261; goto yy54; - yy235: + yy230: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy268; + if (yych == 'a') goto yy262; goto yy54; - yy236: + yy231: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'r') goto yy269; + if (yych == 'r') goto yy263; goto yy54; - yy237: + yy232: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy270; + if (yych == 'l') goto yy264; goto yy54; - yy238: + yy233: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy271; + if (yych == 'e') goto yy265; goto yy54; - yy239: + yy234: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy272; + if (yych == 'a') goto yy266; goto yy54; - yy240: + yy235: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'i') goto yy273; + if (yych == 'i') goto yy267; goto yy54; - yy241: + yy236: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'r') goto yy274; + if (yych == 'r') goto yy268; goto yy54; - yy242: + yy237: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -2288,22 +2205,22 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy243; + if (yych <= 0x0000007F) goto yy238; if (yych != 0x0000FFFD) goto yy53; } } - yy243: -#line 98 "src/lexer.re" + yy238: +#line 104 "src/lexer.re" { return rbs_next_token(lexer, kSELF); } -#line 2092 "src/lexer.c" - yy244: +#line 2028 "src/lexer.c" + yy239: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy275; + if (yych == 'l') goto yy269; goto yy54; - yy245: + yy240: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -2319,17 +2236,17 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy246; + if (yych <= 0x0000007F) goto yy241; if (yych != 0x0000FFFD) goto yy53; } } - yy246: -#line 110 "src/lexer.re" + yy241: +#line 116 "src/lexer.re" { return rbs_next_token(lexer, kSKIP); } -#line 2121 "src/lexer.c" - yy247: +#line 2057 "src/lexer.c" + yy242: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -2345,17 +2262,17 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy248; + if (yych <= 0x0000007F) goto yy243; if (yych != 0x0000FFFD) goto yy53; } } - yy248: -#line 101 "src/lexer.re" + yy243: +#line 107 "src/lexer.re" { return rbs_next_token(lexer, kTRUE); } -#line 2145 "src/lexer.c" - yy249: +#line 2081 "src/lexer.c" + yy244: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -2371,27 +2288,27 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy250; + if (yych <= 0x0000007F) goto yy245; if (yych != 0x0000FFFD) goto yy53; } } - yy250: -#line 102 "src/lexer.re" + yy245: +#line 108 "src/lexer.re" { return rbs_next_token(lexer, kTYPE); } -#line 2169 "src/lexer.c" - yy251: +#line 2105 "src/lexer.c" + yy246: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy276; + if (yych == 'e') goto yy270; goto yy54; - yy252: + yy247: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'p') goto yy277; + if (yych == 'p') goto yy271; goto yy54; - yy253: + yy248: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -2407,51 +2324,48 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy254; + if (yych <= 0x0000007F) goto yy249; if (yych != 0x0000FFFD) goto yy53; } } - yy254: -#line 105 "src/lexer.re" + yy249: +#line 111 "src/lexer.re" { return rbs_next_token(lexer, kVOID); } -#line 2203 "src/lexer.c" - yy255: +#line 2139 "src/lexer.c" + yy250: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { if (yych <= '/') goto yy70; - if (yych <= '9') goto yy278; + if (yych <= '9') goto yy272; goto yy70; } else { - if (yych <= 'F') goto yy278; + if (yych <= 'F') goto yy272; if (yych <= '`') goto yy70; - if (yych <= 'f') goto yy278; + if (yych <= 'f') goto yy272; goto yy70; } - yy256: + yy251: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { if (yych <= '/') goto yy70; - if (yych <= '9') goto yy279; + if (yych <= '9') goto yy273; goto yy70; } else { - if (yych <= 'F') goto yy279; + if (yych <= 'F') goto yy273; if (yych <= '`') goto yy70; - if (yych <= 'f') goto yy279; + if (yych <= 'f') goto yy273; goto yy70; } - yy257: - rbs_skip(lexer); - goto yy222; - yy258: + yy252: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'o') goto yy280; + if (yych == 'o') goto yy274; goto yy114; - yy259: + yy253: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -2467,28 +2381,28 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy260; + if (yych <= 0x0000007F) goto yy254; if (yych != 0x0000FFFD) goto yy53; } } - yy260: -#line 74 "src/lexer.re" + yy254: +#line 80 "src/lexer.re" { return rbs_next_token(lexer, kALIAS); } -#line 2261 "src/lexer.c" - yy261: +#line 2194 "src/lexer.c" + yy255: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'q') { - if (yych == 'a') goto yy281; + if (yych == 'a') goto yy275; goto yy54; } else { - if (yych <= 'r') goto yy282; - if (yych == 'w') goto yy283; + if (yych <= 'r') goto yy276; + if (yych == 'w') goto yy277; goto yy54; } - yy262: + yy256: yyaccept = 8; rbs_skip(lexer); backup = *lexer; @@ -2496,7 +2410,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych <= '@') { if (yych <= '-') { if (yych == '!') goto yy110; - if (yych >= '-') goto yy284; + if (yych >= '-') goto yy278; } else { if (yych <= '9') { if (yych >= '0') goto yy53; @@ -2516,18 +2430,18 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { } } } - yy263: -#line 80 "src/lexer.re" + yy257: +#line 86 "src/lexer.re" { return rbs_next_token(lexer, kCLASS); } -#line 2304 "src/lexer.c" - yy264: +#line 2237 "src/lexer.c" + yy258: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'd') goto yy285; + if (yych == 'd') goto yy279; goto yy54; - yy265: + yy259: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -2543,72 +2457,72 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy266; + if (yych <= 0x0000007F) goto yy260; if (yych != 0x0000FFFD) goto yy53; } } - yy266: -#line 85 "src/lexer.re" + yy260: +#line 91 "src/lexer.re" { return rbs_next_token(lexer, kFALSE); } -#line 2333 "src/lexer.c" - yy267: +#line 2266 "src/lexer.c" + yy261: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'd') goto yy287; + if (yych == 'd') goto yy281; goto yy54; - yy268: + yy262: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'n') goto yy288; + if (yych == 'n') goto yy282; goto yy54; - yy269: + yy263: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'f') goto yy289; + if (yych == 'f') goto yy283; goto yy54; - yy270: + yy264: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy290; + if (yych == 'e') goto yy284; goto yy54; - yy271: + yy265: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'n') goto yy292; + if (yych == 'n') goto yy286; goto yy54; - yy272: + yy266: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 't') goto yy293; + if (yych == 't') goto yy287; goto yy54; - yy273: + yy267: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'c') goto yy294; + if (yych == 'c') goto yy288; goto yy54; - yy274: + yy268: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'n') goto yy296; + if (yych == 'n') goto yy290; goto yy54; - yy275: + yy269: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy298; + if (yych == 'e') goto yy292; goto yy54; - yy276: + yy270: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'c') goto yy299; + if (yych == 'c') goto yy293; goto yy54; - yy277: + yy271: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy300; + if (yych == 'e') goto yy294; goto yy54; - yy278: + yy272: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { @@ -2621,45 +2535,45 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych <= 'f') goto yy68; goto yy70; } - yy279: + yy273: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { if (yych <= '/') goto yy70; - if (yych <= '9') goto yy301; + if (yych <= '9') goto yy295; goto yy70; } else { - if (yych <= 'F') goto yy301; + if (yych <= 'F') goto yy295; if (yych <= '`') goto yy70; - if (yych <= 'f') goto yy301; + if (yych <= 'f') goto yy295; goto yy70; } - yy280: + yy274: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == '_') goto yy302; + if (yych == '_') goto yy296; goto yy114; - yy281: + yy275: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'c') goto yy303; + if (yych == 'c') goto yy297; goto yy54; - yy282: + yy276: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy304; + if (yych == 'e') goto yy298; goto yy54; - yy283: + yy277: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'r') goto yy305; + if (yych == 'r') goto yy299; goto yy54; - yy284: + yy278: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy306; + if (yych == 'a') goto yy300; goto yy70; - yy285: + yy279: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -2675,32 +2589,32 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy286; + if (yych <= 0x0000007F) goto yy280; if (yych != 0x0000FFFD) goto yy53; } } - yy286: -#line 84 "src/lexer.re" + yy280: +#line 90 "src/lexer.re" { return rbs_next_token(lexer, kEXTEND); } -#line 2463 "src/lexer.c" - yy287: +#line 2396 "src/lexer.c" + yy281: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy307; + if (yych == 'e') goto yy301; goto yy54; - yy288: + yy282: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'c') goto yy309; + if (yych == 'c') goto yy303; goto yy54; - yy289: + yy283: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy310; + if (yych == 'a') goto yy304; goto yy54; - yy290: + yy284: yyaccept = 9; rbs_skip(lexer); backup = *lexer; @@ -2708,7 +2622,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych <= '@') { if (yych <= '-') { if (yych == '!') goto yy110; - if (yych >= '-') goto yy311; + if (yych >= '-') goto yy305; } else { if (yych <= '9') { if (yych >= '0') goto yy53; @@ -2728,23 +2642,23 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { } } } - yy291: -#line 90 "src/lexer.re" + yy285: +#line 96 "src/lexer.re" { return rbs_next_token(lexer, kMODULE); } -#line 2510 "src/lexer.c" - yy292: +#line 2443 "src/lexer.c" + yy286: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'd') goto yy312; + if (yych == 'd') goto yy306; goto yy54; - yy293: + yy287: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy314; + if (yych == 'e') goto yy308; goto yy54; - yy294: + yy288: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -2760,17 +2674,17 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy295; + if (yych <= 0x0000007F) goto yy289; if (yych != 0x0000FFFD) goto yy53; } } - yy295: -#line 97 "src/lexer.re" + yy289: +#line 103 "src/lexer.re" { return rbs_next_token(lexer, kPUBLIC); } -#line 2544 "src/lexer.c" - yy296: +#line 2477 "src/lexer.c" + yy290: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -2786,32 +2700,32 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy297; + if (yych <= 0x0000007F) goto yy291; if (yych != 0x0000FFFD) goto yy53; } } - yy297: -#line 111 "src/lexer.re" + yy291: +#line 117 "src/lexer.re" { return rbs_next_token(lexer, kRETURN); } -#line 2568 "src/lexer.c" - yy298: +#line 2501 "src/lexer.c" + yy292: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 't') goto yy316; + if (yych == 't') goto yy310; goto yy54; - yy299: + yy293: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'k') goto yy317; + if (yych == 'k') goto yy311; goto yy54; - yy300: + yy294: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'd') goto yy318; + if (yych == 'd') goto yy312; goto yy54; - yy301: + yy295: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { @@ -2824,32 +2738,32 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych <= 'f') goto yy88; goto yy70; } - yy302: + yy296: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == '_') goto yy320; + if (yych == '_') goto yy314; goto yy114; - yy303: + yy297: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'c') goto yy322; + if (yych == 'c') goto yy316; goto yy54; - yy304: + yy298: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy323; + if (yych == 'a') goto yy317; goto yy54; - yy305: + yy299: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'i') goto yy324; + if (yych == 'i') goto yy318; goto yy54; - yy306: + yy300: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy325; + if (yych == 'l') goto yy319; goto yy70; - yy307: + yy301: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -2865,33 +2779,33 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy308; + if (yych <= 0x0000007F) goto yy302; if (yych != 0x0000FFFD) goto yy53; } } - yy308: -#line 87 "src/lexer.re" + yy302: +#line 93 "src/lexer.re" { return rbs_next_token(lexer, kINCLUDE); } -#line 2645 "src/lexer.c" - yy309: +#line 2578 "src/lexer.c" + yy303: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy326; + if (yych == 'e') goto yy320; goto yy54; - yy310: + yy304: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'c') goto yy328; + if (yych == 'c') goto yy322; goto yy54; - yy311: + yy305: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy329; - if (yych == 's') goto yy330; + if (yych == 'a') goto yy323; + if (yych == 's') goto yy324; goto yy70; - yy312: + yy306: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -2907,17 +2821,17 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy313; + if (yych <= 0x0000007F) goto yy307; if (yych != 0x0000FFFD) goto yy53; } } - yy313: -#line 95 "src/lexer.re" + yy307: +#line 101 "src/lexer.re" { return rbs_next_token(lexer, kPREPEND); } -#line 2685 "src/lexer.c" - yy314: +#line 2618 "src/lexer.c" + yy308: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -2933,27 +2847,27 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy315; + if (yych <= 0x0000007F) goto yy309; if (yych != 0x0000FFFD) goto yy53; } } - yy315: -#line 96 "src/lexer.re" + yy309: +#line 102 "src/lexer.re" { return rbs_next_token(lexer, kPRIVATE); } -#line 2709 "src/lexer.c" - yy316: +#line 2642 "src/lexer.c" + yy310: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'o') goto yy331; + if (yych == 'o') goto yy325; goto yy54; - yy317: + yy311: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy332; + if (yych == 'e') goto yy326; goto yy54; - yy318: + yy312: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -2969,17 +2883,17 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy319; + if (yych <= 0x0000007F) goto yy313; if (yych != 0x0000FFFD) goto yy53; } } - yy319: -#line 104 "src/lexer.re" + yy313: +#line 110 "src/lexer.re" { return rbs_next_token(lexer, kUNTYPED); } -#line 2743 "src/lexer.c" - yy320: +#line 2676 "src/lexer.c" + yy314: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -2995,37 +2909,37 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy113; if (yych >= 'a') goto yy113; } else { - if (yych <= 0x0000007F) goto yy321; + if (yych <= 0x0000007F) goto yy315; if (yych != 0x0000FFFD) goto yy113; } } - yy321: -#line 108 "src/lexer.re" + yy315: +#line 114 "src/lexer.re" { return rbs_next_token(lexer, k__TODO__); } -#line 2767 "src/lexer.c" - yy322: +#line 2700 "src/lexer.c" + yy316: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy333; + if (yych == 'e') goto yy327; goto yy54; - yy323: + yy317: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'd') goto yy334; + if (yych == 'd') goto yy328; goto yy54; - yy324: + yy318: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 't') goto yy335; + if (yych == 't') goto yy329; goto yy54; - yy325: + yy319: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'i') goto yy336; + if (yych == 'i') goto yy330; goto yy70; - yy326: + yy320: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -3041,62 +2955,62 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy327; + if (yych <= 0x0000007F) goto yy321; if (yych != 0x0000FFFD) goto yy53; } } - yy327: -#line 88 "src/lexer.re" + yy321: +#line 94 "src/lexer.re" { return rbs_next_token(lexer, kINSTANCE); } -#line 2811 "src/lexer.c" - yy328: +#line 2744 "src/lexer.c" + yy322: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy337; + if (yych == 'e') goto yy331; goto yy54; - yy329: + yy323: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy339; + if (yych == 'l') goto yy333; goto yy70; - yy330: + yy324: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy340; + if (yych == 'e') goto yy334; goto yy70; - yy331: + yy325: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'n') goto yy341; + if (yych == 'n') goto yy335; goto yy54; - yy332: + yy326: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'd') goto yy343; + if (yych == 'd') goto yy337; goto yy54; - yy333: + yy327: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 's') goto yy345; + if (yych == 's') goto yy339; goto yy54; - yy334: + yy328: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy346; + if (yych == 'e') goto yy340; goto yy54; - yy335: + yy329: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy347; + if (yych == 'e') goto yy341; goto yy54; - yy336: + yy330: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy348; + if (yych == 'a') goto yy342; goto yy70; - yy337: + yy331: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -3112,27 +3026,27 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy338; + if (yych <= 0x0000007F) goto yy332; if (yych != 0x0000FFFD) goto yy53; } } - yy338: -#line 89 "src/lexer.re" + yy332: +#line 95 "src/lexer.re" { return rbs_next_token(lexer, kINTERFACE); } -#line 2880 "src/lexer.c" - yy339: +#line 2813 "src/lexer.c" + yy333: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'i') goto yy349; + if (yych == 'i') goto yy343; goto yy70; - yy340: + yy334: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy350; + if (yych == 'l') goto yy344; goto yy70; - yy341: + yy335: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -3148,17 +3062,17 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy342; + if (yych <= 0x0000007F) goto yy336; if (yych != 0x0000FFFD) goto yy53; } } - yy342: -#line 99 "src/lexer.re" + yy336: +#line 105 "src/lexer.re" { return rbs_next_token(lexer, kSINGLETON); } -#line 2914 "src/lexer.c" - yy343: +#line 2847 "src/lexer.c" + yy337: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -3174,52 +3088,52 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy344; + if (yych <= 0x0000007F) goto yy338; if (yych != 0x0000FFFD) goto yy53; } } - yy344: -#line 103 "src/lexer.re" + yy338: +#line 109 "src/lexer.re" { return rbs_next_token(lexer, kUNCHECKED); } -#line 2938 "src/lexer.c" - yy345: +#line 2871 "src/lexer.c" + yy339: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 's') goto yy351; + if (yych == 's') goto yy345; goto yy54; - yy346: + yy340: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'r') goto yy352; + if (yych == 'r') goto yy346; goto yy54; - yy347: + yy341: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'r') goto yy354; + if (yych == 'r') goto yy348; goto yy54; - yy348: + yy342: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 's') goto yy356; + if (yych == 's') goto yy350; goto yy70; - yy349: + yy343: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy357; + if (yych == 'a') goto yy351; goto yy70; - yy350: + yy344: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'f') goto yy358; + if (yych == 'f') goto yy352; goto yy70; - yy351: + yy345: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'o') goto yy359; + if (yych == 'o') goto yy353; goto yy54; - yy352: + yy346: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -3235,17 +3149,17 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy353; + if (yych <= 0x0000007F) goto yy347; if (yych != 0x0000FFFD) goto yy53; } } - yy353: -#line 76 "src/lexer.re" + yy347: +#line 82 "src/lexer.re" { return rbs_next_token(lexer, kATTRREADER); } -#line 2997 "src/lexer.c" - yy354: +#line 2930 "src/lexer.c" + yy348: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -3261,48 +3175,48 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy355; + if (yych <= 0x0000007F) goto yy349; if (yych != 0x0000FFFD) goto yy53; } } - yy355: -#line 77 "src/lexer.re" + yy349: +#line 83 "src/lexer.re" { return rbs_next_token(lexer, kATTRWRITER); } -#line 3021 "src/lexer.c" - yy356: +#line 2954 "src/lexer.c" + yy350: rbs_skip(lexer); -#line 81 "src/lexer.re" +#line 87 "src/lexer.re" { return rbs_next_token(lexer, kCLASSALIAS); } -#line 3026 "src/lexer.c" - yy357: +#line 2959 "src/lexer.c" + yy351: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 's') goto yy360; + if (yych == 's') goto yy354; goto yy70; - yy358: + yy352: rbs_skip(lexer); -#line 92 "src/lexer.re" +#line 98 "src/lexer.re" { return rbs_next_token(lexer, kMODULESELF); } -#line 3036 "src/lexer.c" - yy359: +#line 2969 "src/lexer.c" + yy353: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'r') goto yy361; + if (yych == 'r') goto yy355; goto yy54; - yy360: + yy354: rbs_skip(lexer); -#line 91 "src/lexer.re" +#line 97 "src/lexer.re" { return rbs_next_token(lexer, kMODULEALIAS); } -#line 3046 "src/lexer.c" - yy361: +#line 2979 "src/lexer.c" + yy355: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { @@ -3318,16 +3232,16 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy362; + if (yych <= 0x0000007F) goto yy356; if (yych != 0x0000FFFD) goto yy53; } } - yy362: -#line 75 "src/lexer.re" + yy356: +#line 81 "src/lexer.re" { return rbs_next_token(lexer, kATTRACCESSOR); } -#line 3070 "src/lexer.c" +#line 3003 "src/lexer.c" } -#line 160 "src/lexer.re" +#line 163 "src/lexer.re" } diff --git a/src/lexer.re b/src/lexer.re index bdc71b7356..4f6bbd27e0 100644 --- a/src/lexer.re +++ b/src/lexer.re @@ -24,6 +24,12 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { // which is how a non-ASCII character gets in. ident_char = . \ ([\x00-\x7F] \ [a-zA-Z0-9_]) \ [\uFFFD]; + // An ASCII digit cannot lead an identifier, but a non-ASCII one can -- + // Ruby accepts a name made of full-width digits. Since `rbs_next_char` + // never reports a non-ASCII character as `[0-9]`, subtracting the ASCII + // digits from `ident_char` is the whole of that rule. + ident_start = ident_char \ [0-9]; + operator = "/" | "~" | "[]=" | "!" | "!=" | "!~" | "-" | "-@" | "+" | "+@" | "==" | "===" | "=~" | "<<" | "<=" | "<=>" | ">" | ">=" | ">>" | "%"; @@ -122,7 +128,6 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { ":" dqstring { return rbs_next_token(lexer, tDQSYMBOL); } ":" sqstring { return rbs_next_token(lexer, tSQSYMBOL); } - identifier = [a-zA-Z_] ident_char* [!?=]?; symbol_opr = ":|" | ":&" | ":/" | ":%" | ":~" | ":`" | ":^" | ":==" | ":=~" | ":===" | ":!" | ":!=" | ":!~" | ":<" | ":<=" | ":<<" | ":<=>" | ":>" | ":>=" | ":>>" @@ -133,11 +138,9 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { | [~*$?!@\\/;,.=:<>"&'`+] | [^ \t\r\n:;=.,!"$%&()-+~|\\'[\]{}*/<>^\x00]+; - ":" identifier { return rbs_next_token(lexer, tSYMBOL); } - ":@" identifier { return rbs_next_token(lexer, tSYMBOL); } - ":@@" identifier { return rbs_next_token(lexer, tSYMBOL); } - ":$" global_ident { return rbs_next_token(lexer, tSYMBOL); } - symbol_opr { return rbs_next_token(lexer, tSYMBOL); } + ":" "@"{0,2} ident_start ident_char* [!?=]? { return rbs_next_token(lexer, tSYMBOL); } + ":$" global_ident { return rbs_next_token(lexer, tSYMBOL); } + symbol_opr { return rbs_next_token(lexer, tSYMBOL); } [a-z] ident_char* { return rbs_next_token(lexer, tLIDENT); } [A-Z] ident_char* { return rbs_next_token(lexer, tUIDENT); } From 5f6f4b3815babf96bc2416ecea07ba721a6b4c60 Mon Sep 17 00:00:00 2001 From: Soutaro Matsumoto Date: Mon, 3 Aug 2026 17:53:49 +0900 Subject: [PATCH 4/8] Allow a non-ASCII character in the remaining identifier rules `foo!`, `foo=`, `@foo` and `@@foo` still asked for `[a-zA-Z_]` at the front. None of them cares about the case of that character, so widening that position to `ident_start` is all they need to accept the same names Ruby does. `@rbs` keeps winning over `@` + identifier: the two match equally far and the keyword is written first. --- src/lexer.c | 2253 +++++++++++++++++++++++++------------------------- src/lexer.re | 11 +- 2 files changed, 1132 insertions(+), 1132 deletions(-) diff --git a/src/lexer.c b/src/lexer.c index 37d8754589..c9da84f999 100644 --- a/src/lexer.c +++ b/src/lexer.c @@ -12,184 +12,147 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { unsigned int yych; unsigned int yyaccept = 0; yych = rbs_peek(lexer); - switch (yych) { - case 0x00000000: - goto yy1; - case '\t': - case ' ': - goto yy4; - case '\n': - case '\r': - goto yy6; - case '!': - goto yy7; - case '"': - goto yy9; - case '#': - goto yy10; - case '$': - goto yy12; - case '%': - goto yy13; - case '&': - goto yy14; - case '\'': - goto yy15; - case '(': - goto yy16; - case ')': - goto yy17; - case '*': - goto yy18; - case '+': - goto yy19; - case ',': - goto yy20; - case '-': - goto yy21; - case '.': - goto yy22; - case '/': - case '~': - goto yy24; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - goto yy25; - case ':': - goto yy27; - case '<': - goto yy29; - case '=': - goto yy31; - case '>': - goto yy33; - case '?': - goto yy35; - case '@': - goto yy36; - case 'A': - case 'B': - case 'C': - case 'D': - case 'E': - case 'F': - case 'G': - case 'H': - case 'I': - case 'J': - case 'K': - case 'L': - case 'M': - case 'N': - case 'O': - case 'P': - case 'Q': - case 'R': - case 'S': - case 'T': - case 'U': - case 'V': - case 'W': - case 'X': - case 'Y': - case 'Z': - goto yy37; - case '[': - goto yy39; - case ']': - goto yy40; - case '^': - goto yy41; - case '_': - goto yy42; - case '`': - goto yy44; - case 'a': - goto yy46; - case 'b': - goto yy48; - case 'c': - goto yy49; - case 'd': - goto yy50; - case 'e': - goto yy51; - case 'f': - goto yy52; - case 'g': - case 'h': - case 'j': - case 'k': - case 'l': - case 'q': - case 'w': - case 'x': - case 'y': - case 'z': - goto yy53; - case 'i': - goto yy55; - case 'm': - goto yy56; - case 'n': - goto yy57; - case 'o': - goto yy58; - case 'p': - goto yy59; - case 'r': - goto yy60; - case 's': - goto yy61; - case 't': - goto yy62; - case 'u': - goto yy63; - case 'v': - goto yy64; - case '{': - goto yy65; - case '|': - goto yy66; - case '}': - goto yy67; - default: - goto yy2; + if (yych <= '[') { + if (yych <= '(') { + if (yych <= ' ') { + if (yych <= '\n') { + if (yych <= 0x00000000) goto yy1; + if (yych <= 0x00000008) goto yy2; + if (yych <= '\t') goto yy4; + goto yy6; + } else { + if (yych == '\r') goto yy6; + if (yych <= 0x0000001F) goto yy2; + goto yy4; + } + } else { + if (yych <= '$') { + if (yych <= '!') goto yy7; + if (yych <= '"') goto yy9; + if (yych <= '#') goto yy10; + goto yy12; + } else { + if (yych <= '%') goto yy13; + if (yych <= '&') goto yy14; + if (yych <= '\'') goto yy15; + goto yy16; + } + } + } else { + if (yych <= '9') { + if (yych <= ',') { + if (yych <= ')') goto yy17; + if (yych <= '*') goto yy18; + if (yych <= '+') goto yy19; + goto yy20; + } else { + if (yych <= '-') goto yy21; + if (yych <= '.') goto yy22; + if (yych <= '/') goto yy24; + goto yy25; + } + } else { + if (yych <= '=') { + if (yych <= ':') goto yy27; + if (yych <= ';') goto yy2; + if (yych <= '<') goto yy29; + goto yy31; + } else { + if (yych <= '?') { + if (yych <= '>') goto yy33; + goto yy35; + } else { + if (yych <= '@') goto yy36; + if (yych <= 'Z') goto yy37; + goto yy39; + } + } + } + } + } else { + if (yych <= 'n') { + if (yych <= 'c') { + if (yych <= '_') { + if (yych <= '\\') goto yy2; + if (yych <= ']') goto yy40; + if (yych <= '^') goto yy41; + goto yy42; + } else { + if (yych <= '`') goto yy44; + if (yych <= 'a') goto yy46; + if (yych <= 'b') goto yy48; + goto yy49; + } + } else { + if (yych <= 'h') { + if (yych <= 'd') goto yy50; + if (yych <= 'e') goto yy51; + if (yych <= 'f') goto yy52; + goto yy53; + } else { + if (yych <= 'i') goto yy55; + if (yych <= 'l') goto yy53; + if (yych <= 'm') goto yy56; + goto yy57; + } + } + } else { + if (yych <= 'v') { + if (yych <= 'r') { + if (yych <= 'o') goto yy58; + if (yych <= 'p') goto yy59; + if (yych <= 'q') goto yy53; + goto yy60; + } else { + if (yych <= 's') goto yy61; + if (yych <= 't') goto yy62; + if (yych <= 'u') goto yy63; + goto yy64; + } + } else { + if (yych <= '}') { + if (yych <= 'z') goto yy53; + if (yych <= '{') goto yy65; + if (yych <= '|') goto yy66; + goto yy67; + } else { + if (yych <= 0x0000007F) { + if (yych <= '~') goto yy24; + goto yy2; + } else { + if (yych == 0x0000FFFD) goto yy2; + goto yy68; + } + } + } + } } yy1: rbs_skip(lexer); -#line 161 "src/lexer.re" +#line 164 "src/lexer.re" { return rbs_next_eof_token(lexer); } -#line 121 "src/lexer.c" +#line 136 "src/lexer.c" yy2: rbs_skip(lexer); yy3: -#line 162 "src/lexer.re" +#line 165 "src/lexer.re" { return rbs_next_token(lexer, ErrorToken); } -#line 127 "src/lexer.c" +#line 142 "src/lexer.c" yy4: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == '\t') goto yy4; if (yych == ' ') goto yy4; yy5: -#line 160 "src/lexer.re" +#line 163 "src/lexer.re" { return rbs_next_token(lexer, tTRIVIA); } -#line 136 "src/lexer.c" +#line 151 "src/lexer.c" yy6: rbs_skip(lexer); goto yy5; @@ -203,14 +166,14 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, tOPERATOR); } -#line 148 "src/lexer.c" +#line 163 "src/lexer.c" yy9: yyaccept = 0; rbs_skip(lexer); backup = *lexer; yych = rbs_peek(lexer); if (yych <= 0x00000000) goto yy3; - goto yy69; + goto yy70; yy10: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -228,7 +191,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { lexer->first_token_of_line ? tLINECOMMENT : tCOMMENT ); } -#line 173 "src/lexer.c" +#line 188 "src/lexer.c" yy12: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -236,42 +199,42 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych <= 0x0000001F) { if (yych <= '\n') { if (yych <= 0x00000000) goto yy3; - if (yych <= 0x00000008) goto yy73; + if (yych <= 0x00000008) goto yy74; goto yy3; } else { if (yych == '\r') goto yy3; - goto yy73; + goto yy74; } } else { if (yych <= '#') { if (yych <= ' ') goto yy3; - if (yych <= '"') goto yy75; - goto yy73; + if (yych <= '"') goto yy76; + goto yy74; } else { if (yych == '%') goto yy3; - if (yych <= '\'') goto yy75; + if (yych <= '\'') goto yy76; goto yy3; } } } else { if (yych <= 'Z') { if (yych <= '/') { - if (yych == '-') goto yy73; - goto yy75; + if (yych == '-') goto yy74; + goto yy76; } else { - if (yych <= '9') goto yy73; - if (yych <= '>') goto yy75; - goto yy73; + if (yych <= '9') goto yy74; + if (yych <= '>') goto yy76; + goto yy74; } } else { if (yych <= '^') { - if (yych == '\\') goto yy75; + if (yych == '\\') goto yy76; goto yy3; } else { - if (yych <= 'z') goto yy73; + if (yych <= 'z') goto yy74; if (yych <= '}') goto yy3; - if (yych <= '~') goto yy75; - goto yy73; + if (yych <= '~') goto yy76; + goto yy74; } } } @@ -280,7 +243,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { rbs_skip(lexer); backup = *lexer; yych = rbs_peek(lexer); - if (yych == 'a') goto yy76; + if (yych == 'a') goto yy77; goto yy8; yy14: rbs_skip(lexer); @@ -288,37 +251,37 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, pAMP); } -#line 231 "src/lexer.c" +#line 246 "src/lexer.c" yy15: yyaccept = 0; rbs_skip(lexer); backup = *lexer; yych = rbs_peek(lexer); if (yych <= 0x00000000) goto yy3; - goto yy78; + goto yy79; yy16: rbs_skip(lexer); #line 36 "src/lexer.re" { return rbs_next_token(lexer, pLPAREN); } -#line 243 "src/lexer.c" +#line 258 "src/lexer.c" yy17: rbs_skip(lexer); #line 37 "src/lexer.re" { return rbs_next_token(lexer, pRPAREN); } -#line 248 "src/lexer.c" +#line 263 "src/lexer.c" yy18: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == '*') goto yy82; + if (yych == '*') goto yy83; #line 47 "src/lexer.re" { return rbs_next_token(lexer, pSTAR); } -#line 255 "src/lexer.c" +#line 270 "src/lexer.c" yy19: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -332,13 +295,13 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, pCOMMA); } -#line 267 "src/lexer.c" +#line 282 "src/lexer.c" yy21: rbs_skip(lexer); yych = rbs_peek(lexer); switch (yych) { case '-': - goto yy83; + goto yy84; case '0': case '1': case '2': @@ -351,7 +314,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { case '9': goto yy25; case '>': - goto yy84; + goto yy85; case '@': goto yy24; default: @@ -362,13 +325,13 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { rbs_skip(lexer); backup = *lexer; yych = rbs_peek(lexer); - if (yych == '.') goto yy85; + if (yych == '.') goto yy86; yy23: #line 49 "src/lexer.re" { return rbs_next_token(lexer, pDOT); } -#line 296 "src/lexer.c" +#line 311 "src/lexer.c" yy24: rbs_skip(lexer); goto yy8; @@ -383,7 +346,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, tINTEGER); } -#line 309 "src/lexer.c" +#line 324 "src/lexer.c" yy27: yyaccept = 3; rbs_skip(lexer); @@ -393,59 +356,59 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych <= '*') { if (yych <= '#') { if (yych <= ' ') goto yy28; - if (yych <= '!') goto yy86; - if (yych <= '"') goto yy88; + if (yych <= '!') goto yy87; + if (yych <= '"') goto yy89; } else { if (yych <= '&') { - if (yych <= '$') goto yy89; - goto yy90; + if (yych <= '$') goto yy90; + goto yy91; } else { - if (yych <= '\'') goto yy91; - if (yych >= '*') goto yy92; + if (yych <= '\'') goto yy92; + if (yych >= '*') goto yy93; } } } else { if (yych <= '.') { if (yych == ',') goto yy28; - if (yych <= '-') goto yy93; + if (yych <= '-') goto yy94; } else { if (yych <= '9') { - if (yych <= '/') goto yy90; + if (yych <= '/') goto yy91; } else { - if (yych <= ':') goto yy94; - if (yych >= '<') goto yy95; + if (yych <= ':') goto yy95; + if (yych >= '<') goto yy96; } } } } else { if (yych <= '_') { if (yych <= '@') { - if (yych <= '=') goto yy96; - if (yych <= '>') goto yy97; - if (yych >= '@') goto yy98; + if (yych <= '=') goto yy97; + if (yych <= '>') goto yy98; + if (yych >= '@') goto yy99; } else { if (yych <= '[') { - if (yych <= 'Z') goto yy99; - goto yy101; + if (yych <= 'Z') goto yy100; + goto yy102; } else { if (yych <= ']') goto yy28; - if (yych <= '^') goto yy90; - goto yy99; + if (yych <= '^') goto yy91; + goto yy100; } } } else { if (yych <= '}') { if (yych <= 'z') { - if (yych <= '`') goto yy90; - goto yy99; + if (yych <= '`') goto yy91; + goto yy100; } else { - if (yych == '|') goto yy90; + if (yych == '|') goto yy91; } } else { if (yych <= 0x0000007F) { - if (yych <= '~') goto yy90; + if (yych <= '~') goto yy91; } else { - if (yych != 0x0000FFFD) goto yy99; + if (yych != 0x0000FFFD) goto yy100; } } } @@ -455,26 +418,26 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, pCOLON); } -#line 379 "src/lexer.c" +#line 394 "src/lexer.c" yy29: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= ';') goto yy30; if (yych <= '<') goto yy24; - if (yych <= '=') goto yy102; + if (yych <= '=') goto yy103; yy30: #line 58 "src/lexer.re" { return rbs_next_token(lexer, pLT); } -#line 389 "src/lexer.c" +#line 404 "src/lexer.c" yy31: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '>') { if (yych <= '<') goto yy32; - if (yych <= '=') goto yy103; - goto yy104; + if (yych <= '=') goto yy104; + goto yy105; } else { if (yych == '~') goto yy24; } @@ -483,7 +446,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, pEQ); } -#line 403 "src/lexer.c" +#line 418 "src/lexer.c" yy33: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -494,36 +457,36 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, pGT); } -#line 412 "src/lexer.c" +#line 427 "src/lexer.c" yy35: rbs_skip(lexer); #line 46 "src/lexer.re" { return rbs_next_token(lexer, pQUESTION); } -#line 417 "src/lexer.c" +#line 432 "src/lexer.c" yy36: yyaccept = 0; rbs_skip(lexer); backup = *lexer; yych = rbs_peek(lexer); - if (yych <= '_') { - if (yych <= '@') { + if (yych <= '`') { + if (yych <= 'Z') { if (yych <= '?') goto yy3; - goto yy105; + if (yych <= '@') goto yy106; + goto yy107; } else { - if (yych <= 'Z') goto yy106; - if (yych <= '^') goto yy3; - goto yy106; + if (yych == '_') goto yy107; + goto yy3; } } else { - if (yych <= 'q') { - if (yych <= '`') goto yy3; - goto yy106; + if (yych <= 'z') { + if (yych == 'r') goto yy110; + goto yy107; } else { - if (yych <= 'r') goto yy109; - if (yych <= 'z') goto yy106; - goto yy3; + if (yych <= 0x0000007F) goto yy3; + if (yych == 0x0000FFFD) goto yy3; + goto yy107; } } yy37: @@ -531,10 +494,10 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy37; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy37; } } else { @@ -551,30 +514,30 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, tUIDENT); } -#line 465 "src/lexer.c" +#line 480 "src/lexer.c" yy39: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == ']') goto yy112; + if (yych == ']') goto yy113; #line 38 "src/lexer.re" { return rbs_next_token(lexer, pLBRACKET); } -#line 472 "src/lexer.c" +#line 487 "src/lexer.c" yy40: rbs_skip(lexer); #line 39 "src/lexer.re" { return rbs_next_token(lexer, pRBRACKET); } -#line 477 "src/lexer.c" +#line 492 "src/lexer.c" yy41: rbs_skip(lexer); #line 44 "src/lexer.re" { return rbs_next_token(lexer, pHAT); } -#line 482 "src/lexer.c" +#line 497 "src/lexer.c" yy42: yyaccept = 4; rbs_skip(lexer); @@ -582,19 +545,19 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; - if (yych >= '0') goto yy113; + if (yych == '!') goto yy111; + if (yych >= '0') goto yy114; } else { - if (yych == '=') goto yy111; - if (yych >= 'A') goto yy116; + if (yych == '=') goto yy112; + if (yych >= 'A') goto yy117; } } else { if (yych <= 'z') { - if (yych == '_') goto yy118; - if (yych >= 'a') goto yy113; + if (yych == '_') goto yy119; + if (yych >= 'a') goto yy114; } else { if (yych <= 0x0000007F) goto yy43; - if (yych != 0x0000FFFD) goto yy119; + if (yych != 0x0000FFFD) goto yy120; } } yy43: @@ -602,7 +565,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, tULLIDENT); } -#line 508 "src/lexer.c" +#line 523 "src/lexer.c" yy44: yyaccept = 5; rbs_skip(lexer); @@ -610,25 +573,25 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yych = rbs_peek(lexer); if (yych <= ' ') { if (yych <= 0x00000000) goto yy45; - if (yych <= 0x0000001F) goto yy120; + if (yych <= 0x0000001F) goto yy121; } else { - if (yych != ':') goto yy120; + if (yych != ':') goto yy121; } yy45: #line 51 "src/lexer.re" { return rbs_next_token(lexer, tOPERATOR); } -#line 523 "src/lexer.c" +#line 538 "src/lexer.c" yy46: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'r') { - if (yych == 'l') goto yy121; + if (yych == 'l') goto yy122; goto yy54; } else { - if (yych <= 's') goto yy122; - if (yych <= 't') goto yy124; + if (yych <= 's') goto yy123; + if (yych <= 't') goto yy125; goto yy54; } yy47: @@ -636,32 +599,32 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, tLIDENT); } -#line 538 "src/lexer.c" +#line 553 "src/lexer.c" yy48: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'o') goto yy125; + if (yych == 'o') goto yy126; goto yy54; yy49: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy126; + if (yych == 'l') goto yy127; goto yy54; yy50: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy127; + if (yych == 'e') goto yy128; goto yy54; yy51: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'n') goto yy128; - if (yych == 'x') goto yy129; + if (yych == 'n') goto yy129; + if (yych == 'x') goto yy130; goto yy54; yy52: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy130; + if (yych == 'a') goto yy131; goto yy54; yy53: rbs_skip(lexer); @@ -669,11 +632,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yy54: if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych <= '/') goto yy47; goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych <= '@') goto yy47; goto yy53; } @@ -691,66 +654,66 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yy55: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'n') goto yy131; + if (yych == 'n') goto yy132; goto yy54; yy56: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'o') goto yy133; + if (yych == 'o') goto yy134; goto yy54; yy57: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'i') goto yy134; + if (yych == 'i') goto yy135; goto yy54; yy58: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'u') goto yy135; + if (yych == 'u') goto yy136; goto yy54; yy59: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'r') goto yy136; - if (yych == 'u') goto yy137; + if (yych == 'r') goto yy137; + if (yych == 'u') goto yy138; goto yy54; yy60: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy138; + if (yych == 'e') goto yy139; goto yy54; yy61: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'h') { - if (yych == 'e') goto yy139; + if (yych == 'e') goto yy140; goto yy54; } else { - if (yych <= 'i') goto yy140; - if (yych == 'k') goto yy141; + if (yych <= 'i') goto yy141; + if (yych == 'k') goto yy142; goto yy54; } yy62: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'q') { - if (yych == 'o') goto yy142; + if (yych == 'o') goto yy143; goto yy54; } else { - if (yych <= 'r') goto yy143; - if (yych == 'y') goto yy144; + if (yych <= 'r') goto yy144; + if (yych == 'y') goto yy145; goto yy54; } yy63: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'n') goto yy145; - if (yych == 's') goto yy146; + if (yych == 'n') goto yy146; + if (yych == 's') goto yy147; goto yy54; yy64: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'o') goto yy147; + if (yych == 'o') goto yy148; goto yy54; yy65: rbs_skip(lexer); @@ -758,34 +721,60 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, pLBRACE); } -#line 658 "src/lexer.c" +#line 673 "src/lexer.c" yy66: rbs_skip(lexer); #line 43 "src/lexer.re" { return rbs_next_token(lexer, pBAR); } -#line 663 "src/lexer.c" +#line 678 "src/lexer.c" yy67: rbs_skip(lexer); #line 41 "src/lexer.re" { return rbs_next_token(lexer, pRBRACE); } -#line 668 "src/lexer.c" +#line 683 "src/lexer.c" yy68: + yyaccept = 0; rbs_skip(lexer); + backup = *lexer; yych = rbs_peek(lexer); + if (yych <= 'Z') { + if (yych <= '9') { + if (yych == '!') goto yy111; + if (yych <= '/') goto yy3; + goto yy120; + } else { + if (yych == '=') goto yy112; + if (yych <= '@') goto yy3; + goto yy120; + } + } else { + if (yych <= 'z') { + if (yych == '_') goto yy120; + if (yych <= '`') goto yy3; + goto yy120; + } else { + if (yych <= 0x0000007F) goto yy3; + if (yych == 0x0000FFFD) goto yy3; + goto yy120; + } + } yy69: + rbs_skip(lexer); + yych = rbs_peek(lexer); + yy70: if (yych <= '"') { - if (yych <= 0x00000000) goto yy70; - if (yych <= '!') goto yy68; - goto yy71; + if (yych <= 0x00000000) goto yy71; + if (yych <= '!') goto yy69; + goto yy72; } else { - if (yych == '\\') goto yy72; - goto yy68; + if (yych == '\\') goto yy73; + goto yy69; } - yy70: + yy71: *lexer = backup; if (yyaccept <= 4) { if (yyaccept <= 2) { @@ -806,395 +795,403 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yyaccept <= 6) { if (yyaccept == 5) goto yy45; else - goto yy80; + goto yy81; } else { - goto yy163; + goto yy164; } } else { - if (yyaccept == 8) goto yy257; + if (yyaccept == 8) goto yy258; else - goto yy285; + goto yy286; } } - yy71: + yy72: rbs_skip(lexer); #line 126 "src/lexer.re" { return rbs_next_token(lexer, tDQSTRING); } -#line 712 "src/lexer.c" - yy72: +#line 753 "src/lexer.c" + yy73: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'u') goto yy148; - if (yych == 'x') goto yy149; - goto yy68; - yy73: + if (yych == 'u') goto yy149; + if (yych == 'x') goto yy150; + goto yy69; + yy74: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= ',') { if (yych <= '\f') { - if (yych <= 0x00000000) goto yy74; - if (yych <= 0x00000008) goto yy73; - if (yych >= '\v') goto yy73; + if (yych <= 0x00000000) goto yy75; + if (yych <= 0x00000008) goto yy74; + if (yych >= '\v') goto yy74; } else { if (yych <= 0x0000001F) { - if (yych >= 0x0000000E) goto yy73; + if (yych >= 0x0000000E) goto yy74; } else { - if (yych == '#') goto yy73; + if (yych == '#') goto yy74; } } } else { if (yych <= '>') { - if (yych <= '-') goto yy73; - if (yych <= '/') goto yy74; - if (yych <= '9') goto yy73; + if (yych <= '-') goto yy74; + if (yych <= '/') goto yy75; + if (yych <= '9') goto yy74; } else { if (yych <= '^') { - if (yych <= 'Z') goto yy73; + if (yych <= 'Z') goto yy74; } else { - if (yych <= 'z') goto yy73; - if (yych >= 0x0000007F) goto yy73; + if (yych <= 'z') goto yy74; + if (yych >= 0x0000007F) goto yy74; } } } - yy74: -#line 156 "src/lexer.re" + yy75: +#line 159 "src/lexer.re" { return rbs_next_token(lexer, tGIDENT); } -#line 751 "src/lexer.c" - yy75: - rbs_skip(lexer); - goto yy74; +#line 792 "src/lexer.c" yy76: + rbs_skip(lexer); + goto yy75; + yy77: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '(') { - if (yych <= '\'') goto yy70; - goto yy150; + if (yych <= '\'') goto yy71; + goto yy151; } else { - if (yych == '<') goto yy151; - goto yy70; + if (yych == '<') goto yy152; + goto yy71; } } else { if (yych <= 'z') { - if (yych <= '[') goto yy152; - goto yy70; + if (yych <= '[') goto yy153; + goto yy71; } else { - if (yych <= '{') goto yy153; - if (yych <= '|') goto yy154; - goto yy70; + if (yych <= '{') goto yy154; + if (yych <= '|') goto yy155; + goto yy71; } } - yy77: + yy78: rbs_skip(lexer); yych = rbs_peek(lexer); - yy78: + yy79: if (yych <= '\'') { - if (yych <= 0x00000000) goto yy70; - if (yych <= '&') goto yy77; + if (yych <= 0x00000000) goto yy71; + if (yych <= '&') goto yy78; } else { - if (yych == '\\') goto yy81; - goto yy77; + if (yych == '\\') goto yy82; + goto yy78; } - yy79: - rbs_skip(lexer); yy80: + rbs_skip(lexer); + yy81: #line 127 "src/lexer.re" { return rbs_next_token(lexer, tSQSTRING); } -#line 792 "src/lexer.c" - yy81: +#line 833 "src/lexer.c" + yy82: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '\'') { - if (yych <= 0x00000000) goto yy70; - if (yych <= '&') goto yy77; - goto yy155; + if (yych <= 0x00000000) goto yy71; + if (yych <= '&') goto yy78; + goto yy156; } else { - if (yych == '\\') goto yy81; - goto yy77; + if (yych == '\\') goto yy82; + goto yy78; } - yy82: + yy83: rbs_skip(lexer); #line 48 "src/lexer.re" { return rbs_next_token(lexer, pSTAR2); } -#line 808 "src/lexer.c" - yy83: +#line 849 "src/lexer.c" + yy84: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych >= 0x00000001) goto yy83; + if (yych >= 0x00000001) goto yy84; #line 62 "src/lexer.re" { return rbs_next_token(lexer, tINLINECOMMENT); } -#line 815 "src/lexer.c" - yy84: +#line 856 "src/lexer.c" + yy85: rbs_skip(lexer); #line 53 "src/lexer.re" { return rbs_next_token(lexer, pARROW); } -#line 820 "src/lexer.c" - yy85: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == '.') goto yy156; - goto yy70; +#line 861 "src/lexer.c" yy86: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == '=') goto yy90; - if (yych == '~') goto yy90; + if (yych == '.') goto yy157; + goto yy71; yy87: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych == '=') goto yy91; + if (yych == '~') goto yy91; + yy88: #line 143 "src/lexer.re" { return rbs_next_token(lexer, tSYMBOL); } -#line 834 "src/lexer.c" - yy88: +#line 875 "src/lexer.c" + yy89: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '"') { - if (yych <= 0x00000000) goto yy70; - if (yych <= '!') goto yy88; - goto yy157; + if (yych <= 0x00000000) goto yy71; + if (yych <= '!') goto yy89; + goto yy158; } else { - if (yych == '\\') goto yy158; - goto yy88; + if (yych == '\\') goto yy159; + goto yy89; } - yy89: + yy90: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= ')') { if (yych <= 0x0000001F) { if (yych <= '\n') { - if (yych <= 0x00000000) goto yy70; - if (yych <= 0x00000008) goto yy159; - goto yy70; + if (yych <= 0x00000000) goto yy71; + if (yych <= 0x00000008) goto yy160; + goto yy71; } else { - if (yych == '\r') goto yy70; - goto yy159; + if (yych == '\r') goto yy71; + goto yy160; } } else { if (yych <= '#') { - if (yych <= ' ') goto yy70; - if (yych <= '"') goto yy161; - goto yy159; + if (yych <= ' ') goto yy71; + if (yych <= '"') goto yy162; + goto yy160; } else { - if (yych == '%') goto yy70; - if (yych <= '\'') goto yy161; - goto yy70; + if (yych == '%') goto yy71; + if (yych <= '\'') goto yy162; + goto yy71; } } } else { if (yych <= 'Z') { if (yych <= '/') { - if (yych == '-') goto yy159; - goto yy161; + if (yych == '-') goto yy160; + goto yy162; } else { - if (yych <= '9') goto yy159; - if (yych <= '>') goto yy161; - goto yy159; + if (yych <= '9') goto yy160; + if (yych <= '>') goto yy162; + goto yy160; } } else { if (yych <= '^') { - if (yych == '\\') goto yy161; - goto yy70; + if (yych == '\\') goto yy162; + goto yy71; } else { - if (yych <= 'z') goto yy159; - if (yych <= '}') goto yy70; - if (yych <= '~') goto yy161; - goto yy159; + if (yych <= 'z') goto yy160; + if (yych <= '}') goto yy71; + if (yych <= '~') goto yy162; + goto yy160; } } } - yy90: - rbs_skip(lexer); - goto yy87; yy91: + rbs_skip(lexer); + goto yy88; + yy92: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '\'') { - if (yych <= 0x00000000) goto yy70; - if (yych <= '&') goto yy91; - goto yy162; + if (yych <= 0x00000000) goto yy71; + if (yych <= '&') goto yy92; + goto yy163; } else { - if (yych == '\\') goto yy164; - goto yy91; + if (yych == '\\') goto yy165; + goto yy92; } - yy92: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == '*') goto yy90; - goto yy87; yy93: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == '@') goto yy90; - goto yy87; + if (yych == '*') goto yy91; + goto yy88; yy94: rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych == '@') goto yy91; + goto yy88; + yy95: + rbs_skip(lexer); #line 57 "src/lexer.re" { return rbs_next_token(lexer, pCOLON2); } -#line 920 "src/lexer.c" - yy95: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych <= ';') goto yy87; - if (yych <= '<') goto yy90; - if (yych <= '=') goto yy165; - goto yy87; +#line 961 "src/lexer.c" yy96: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == '=') goto yy166; - if (yych == '~') goto yy90; - goto yy70; + if (yych <= ';') goto yy88; + if (yych <= '<') goto yy91; + if (yych <= '=') goto yy166; + goto yy88; yy97: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '<') goto yy87; - if (yych <= '>') goto yy90; - goto yy87; + if (yych == '=') goto yy167; + if (yych == '~') goto yy91; + goto yy71; yy98: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych <= '<') goto yy88; + if (yych <= '>') goto yy91; + goto yy88; + yy99: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '_') { if (yych <= '@') { - if (yych <= '?') goto yy70; - goto yy167; + if (yych <= '?') goto yy71; + goto yy168; } else { - if (yych <= 'Z') goto yy99; - if (yych <= '^') goto yy70; + if (yych <= 'Z') goto yy100; + if (yych <= '^') goto yy71; } } else { if (yych <= 0x0000007F) { - if (yych <= '`') goto yy70; - if (yych >= '{') goto yy70; + if (yych <= '`') goto yy71; + if (yych >= '{') goto yy71; } else { - if (yych == 0x0000FFFD) goto yy70; + if (yych == 0x0000FFFD) goto yy71; } } - yy99: + yy100: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { if (yych <= '9') { - if (yych == '!') goto yy168; - if (yych >= '0') goto yy99; + if (yych == '!') goto yy169; + if (yych >= '0') goto yy100; } else { if (yych <= '=') { - if (yych >= '=') goto yy168; + if (yych >= '=') goto yy169; } else { - if (yych == '?') goto yy168; + if (yych == '?') goto yy169; } } } else { if (yych <= '`') { - if (yych <= 'Z') goto yy99; - if (yych == '_') goto yy99; + if (yych <= 'Z') goto yy100; + if (yych == '_') goto yy100; } else { if (yych <= 0x0000007F) { - if (yych <= 'z') goto yy99; + if (yych <= 'z') goto yy100; } else { - if (yych != 0x0000FFFD) goto yy99; + if (yych != 0x0000FFFD) goto yy100; } } } - yy100: + yy101: #line 141 "src/lexer.re" { return rbs_next_token(lexer, tSYMBOL); } -#line 988 "src/lexer.c" - yy101: +#line 1029 "src/lexer.c" + yy102: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == ']') goto yy166; - goto yy70; - yy102: + if (yych == ']') goto yy167; + goto yy71; + yy103: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == '>') goto yy24; goto yy8; - yy103: + yy104: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == '=') goto yy24; goto yy8; - yy104: + yy105: rbs_skip(lexer); #line 54 "src/lexer.re" { return rbs_next_token(lexer, pFATARROW); } -#line 1008 "src/lexer.c" - yy105: +#line 1049 "src/lexer.c" + yy106: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '^') { - if (yych <= '@') goto yy70; - if (yych <= 'Z') goto yy169; - goto yy70; + if (yych <= '`') { + if (yych <= 'Z') { + if (yych <= '@') goto yy71; + goto yy170; + } else { + if (yych == '_') goto yy170; + goto yy71; + } } else { - if (yych == '`') goto yy70; - if (yych <= 'z') goto yy169; - goto yy70; + if (yych <= 0x0000007F) { + if (yych <= 'z') goto yy170; + goto yy71; + } else { + if (yych == 0x0000FFFD) goto yy71; + goto yy170; + } } - yy106: + yy107: rbs_skip(lexer); yych = rbs_peek(lexer); - yy107: + yy108: if (yych <= '_') { if (yych <= '@') { - if (yych <= '/') goto yy108; - if (yych <= '9') goto yy106; + if (yych <= '/') goto yy109; + if (yych <= '9') goto yy107; } else { - if (yych <= 'Z') goto yy106; - if (yych >= '_') goto yy106; + if (yych <= 'Z') goto yy107; + if (yych >= '_') goto yy107; } } else { if (yych <= 0x0000007F) { - if (yych <= '`') goto yy108; - if (yych <= 'z') goto yy106; + if (yych <= '`') goto yy109; + if (yych <= 'z') goto yy107; } else { - if (yych != 0x0000FFFD) goto yy106; + if (yych != 0x0000FFFD) goto yy107; } } - yy108: -#line 153 "src/lexer.re" + yy109: +#line 156 "src/lexer.re" { return rbs_next_token(lexer, tAIDENT); } -#line 1044 "src/lexer.c" - yy109: +#line 1093 "src/lexer.c" + yy110: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'b') goto yy171; - goto yy107; - yy110: + if (yych == 'b') goto yy172; + goto yy108; + yy111: rbs_skip(lexer); -#line 150 "src/lexer.re" +#line 153 "src/lexer.re" { return rbs_next_token(lexer, tBANGIDENT); } -#line 1054 "src/lexer.c" - yy111: +#line 1103 "src/lexer.c" + yy112: rbs_skip(lexer); -#line 151 "src/lexer.re" +#line 154 "src/lexer.re" { return rbs_next_token(lexer, tEQIDENT); } -#line 1059 "src/lexer.c" - yy112: +#line 1108 "src/lexer.c" + yy113: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == '=') goto yy24; @@ -1202,109 +1199,109 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, pAREF_OPR); } -#line 1066 "src/lexer.c" - yy113: +#line 1115 "src/lexer.c" + yy114: rbs_skip(lexer); yych = rbs_peek(lexer); - yy114: + yy115: if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; - if (yych >= '0') goto yy113; + if (yych == '!') goto yy111; + if (yych >= '0') goto yy114; } else { - if (yych == '=') goto yy111; - if (yych >= 'A') goto yy113; + if (yych == '=') goto yy112; + if (yych >= 'A') goto yy114; } } else { if (yych <= 'z') { - if (yych == '_') goto yy113; - if (yych >= 'a') goto yy113; + if (yych == '_') goto yy114; + if (yych >= 'a') goto yy114; } else { - if (yych <= 0x0000007F) goto yy115; - if (yych != 0x0000FFFD) goto yy113; + if (yych <= 0x0000007F) goto yy116; + if (yych != 0x0000FFFD) goto yy114; } } - yy115: + yy116: #line 147 "src/lexer.re" { return rbs_next_token(lexer, tULLIDENT); } -#line 1091 "src/lexer.c" - yy116: +#line 1140 "src/lexer.c" + yy117: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; - if (yych >= '0') goto yy116; + if (yych == '!') goto yy111; + if (yych >= '0') goto yy117; } else { - if (yych == '=') goto yy111; - if (yych >= 'A') goto yy116; + if (yych == '=') goto yy112; + if (yych >= 'A') goto yy117; } } else { if (yych <= 'z') { - if (yych == '_') goto yy116; - if (yych >= 'a') goto yy116; + if (yych == '_') goto yy117; + if (yych >= 'a') goto yy117; } else { - if (yych <= 0x0000007F) goto yy117; - if (yych != 0x0000FFFD) goto yy116; + if (yych <= 0x0000007F) goto yy118; + if (yych != 0x0000FFFD) goto yy117; } } - yy117: + yy118: #line 148 "src/lexer.re" { return rbs_next_token(lexer, tULIDENT); } -#line 1115 "src/lexer.c" - yy118: +#line 1164 "src/lexer.c" + yy119: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 't') goto yy172; - goto yy114; - yy119: + if (yych == 't') goto yy173; + goto yy115; + yy120: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; - if (yych <= '/') goto yy70; - goto yy119; + if (yych == '!') goto yy111; + if (yych <= '/') goto yy71; + goto yy120; } else { - if (yych == '=') goto yy111; - if (yych <= '@') goto yy70; - goto yy119; + if (yych == '=') goto yy112; + if (yych <= '@') goto yy71; + goto yy120; } } else { if (yych <= 'z') { - if (yych == '_') goto yy119; - if (yych <= '`') goto yy70; - goto yy119; + if (yych == '_') goto yy120; + if (yych <= '`') goto yy71; + goto yy120; } else { - if (yych <= 0x0000007F) goto yy70; - if (yych == 0x0000FFFD) goto yy70; - goto yy119; + if (yych <= 0x0000007F) goto yy71; + if (yych == 0x0000FFFD) goto yy71; + goto yy120; } } - yy120: + yy121: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= 0x00000000) goto yy70; - if (yych == '`') goto yy173; - goto yy120; - yy121: + if (yych <= 0x00000000) goto yy71; + if (yych == '`') goto yy174; + goto yy121; + yy122: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'i') goto yy174; + if (yych == 'i') goto yy175; goto yy54; - yy122: + yy123: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -1312,66 +1309,66 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy123; + if (yych <= 0x0000007F) goto yy124; if (yych != 0x0000FFFD) goto yy53; } } - yy123: + yy124: #line 113 "src/lexer.re" { return rbs_next_token(lexer, kAS); } -#line 1179 "src/lexer.c" - yy124: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 't') goto yy175; - goto yy54; +#line 1228 "src/lexer.c" yy125: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'o') goto yy176; - if (yych == 't') goto yy177; + if (yych == 't') goto yy176; goto yy54; yy126: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy179; + if (yych == 'o') goto yy177; + if (yych == 't') goto yy178; goto yy54; yy127: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'f') goto yy180; + if (yych == 'a') goto yy180; goto yy54; yy128: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'd') goto yy182; + if (yych == 'f') goto yy181; goto yy54; yy129: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 't') goto yy184; + if (yych == 'd') goto yy183; goto yy54; yy130: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy185; + if (yych == 't') goto yy185; goto yy54; yy131: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych == 'l') goto yy186; + goto yy54; + yy132: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '_') { if (yych <= '<') { if (yych <= '!') { - if (yych >= '!') goto yy110; + if (yych >= '!') goto yy111; } else { - if (yych <= '/') goto yy132; + if (yych <= '/') goto yy133; if (yych <= '9') goto yy53; } } else { if (yych <= '@') { - if (yych <= '=') goto yy111; + if (yych <= '=') goto yy112; } else { if (yych <= 'Z') goto yy53; if (yych >= '_') goto yy53; @@ -1382,342 +1379,342 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych <= 'b') { if (yych >= 'a') goto yy53; } else { - if (yych <= 'c') goto yy186; + if (yych <= 'c') goto yy187; if (yych <= 'r') goto yy53; - goto yy187; + goto yy188; } } else { if (yych <= 0x0000007F) { - if (yych <= 't') goto yy188; + if (yych <= 't') goto yy189; if (yych <= 'z') goto yy53; } else { if (yych != 0x0000FFFD) goto yy53; } } } - yy132: + yy133: #line 92 "src/lexer.re" { return rbs_next_token(lexer, kIN); } -#line 1256 "src/lexer.c" - yy133: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 'd') goto yy189; - goto yy54; +#line 1305 "src/lexer.c" yy134: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy190; + if (yych == 'd') goto yy190; goto yy54; yy135: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 't') goto yy192; + if (yych == 'l') goto yy191; goto yy54; yy136: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy194; - if (yych == 'i') goto yy195; + if (yych == 't') goto yy193; goto yy54; yy137: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'b') goto yy196; + if (yych == 'e') goto yy195; + if (yych == 'i') goto yy196; goto yy54; yy138: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 't') goto yy197; + if (yych == 'b') goto yy197; goto yy54; yy139: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy198; + if (yych == 't') goto yy198; goto yy54; yy140: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'n') goto yy199; + if (yych == 'l') goto yy199; goto yy54; yy141: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'i') goto yy200; + if (yych == 'n') goto yy200; goto yy54; yy142: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'p') goto yy201; + if (yych == 'i') goto yy201; goto yy54; yy143: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'u') goto yy203; + if (yych == 'p') goto yy202; goto yy54; yy144: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'p') goto yy204; + if (yych == 'u') goto yy204; goto yy54; yy145: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'c') goto yy205; - if (yych == 't') goto yy206; + if (yych == 'p') goto yy205; goto yy54; yy146: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy207; + if (yych == 'c') goto yy206; + if (yych == 't') goto yy207; goto yy54; yy147: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'i') goto yy209; + if (yych == 'e') goto yy208; goto yy54; yy148: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '@') { - if (yych <= '/') goto yy70; - if (yych <= '9') goto yy210; - goto yy70; - } else { - if (yych <= 'F') goto yy210; - if (yych <= '`') goto yy70; - if (yych <= 'f') goto yy210; - goto yy70; - } + if (yych == 'i') goto yy210; + goto yy54; yy149: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '/') goto yy70; - if (yych <= '9') goto yy68; - if (yych <= '`') goto yy70; - if (yych <= 'f') goto yy68; - goto yy70; + if (yych <= '@') { + if (yych <= '/') goto yy71; + if (yych <= '9') goto yy211; + goto yy71; + } else { + if (yych <= 'F') goto yy211; + if (yych <= '`') goto yy71; + if (yych <= 'f') goto yy211; + goto yy71; + } yy150: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= 0x00000000) goto yy70; - if (yych == ')') goto yy211; - goto yy150; + if (yych <= '/') goto yy71; + if (yych <= '9') goto yy69; + if (yych <= '`') goto yy71; + if (yych <= 'f') goto yy69; + goto yy71; yy151: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= 0x00000000) goto yy70; - if (yych == '>') goto yy212; + if (yych <= 0x00000000) goto yy71; + if (yych == ')') goto yy212; goto yy151; yy152: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= 0x00000000) goto yy70; - if (yych == ']') goto yy213; + if (yych <= 0x00000000) goto yy71; + if (yych == '>') goto yy213; goto yy152; yy153: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= 0x00000000) goto yy70; - if (yych == '}') goto yy214; + if (yych <= 0x00000000) goto yy71; + if (yych == ']') goto yy214; goto yy153; yy154: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= 0x00000000) goto yy70; - if (yych == '|') goto yy215; + if (yych <= 0x00000000) goto yy71; + if (yych == '}') goto yy215; goto yy154; yy155: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych <= 0x00000000) goto yy71; + if (yych == '|') goto yy216; + goto yy155; + yy156: yyaccept = 6; rbs_skip(lexer); backup = *lexer; yych = rbs_peek(lexer); if (yych <= '\'') { - if (yych <= 0x00000000) goto yy80; - if (yych <= '&') goto yy77; - goto yy79; + if (yych <= 0x00000000) goto yy81; + if (yych <= '&') goto yy78; + goto yy80; } else { - if (yych == '\\') goto yy81; - goto yy77; + if (yych == '\\') goto yy82; + goto yy78; } - yy156: + yy157: rbs_skip(lexer); #line 50 "src/lexer.re" { return rbs_next_token(lexer, pDOT3); } -#line 1402 "src/lexer.c" - yy157: +#line 1451 "src/lexer.c" + yy158: rbs_skip(lexer); #line 128 "src/lexer.re" { return rbs_next_token(lexer, tDQSYMBOL); } -#line 1407 "src/lexer.c" - yy158: +#line 1456 "src/lexer.c" + yy159: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'u') goto yy216; - if (yych == 'x') goto yy217; - goto yy88; - yy159: + if (yych == 'u') goto yy217; + if (yych == 'x') goto yy218; + goto yy89; + yy160: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= ',') { if (yych <= '\f') { - if (yych <= 0x00000000) goto yy160; - if (yych <= 0x00000008) goto yy159; - if (yych >= '\v') goto yy159; + if (yych <= 0x00000000) goto yy161; + if (yych <= 0x00000008) goto yy160; + if (yych >= '\v') goto yy160; } else { if (yych <= 0x0000001F) { - if (yych >= 0x0000000E) goto yy159; + if (yych >= 0x0000000E) goto yy160; } else { - if (yych == '#') goto yy159; + if (yych == '#') goto yy160; } } } else { if (yych <= '>') { - if (yych <= '-') goto yy159; - if (yych <= '/') goto yy160; - if (yych <= '9') goto yy159; + if (yych <= '-') goto yy160; + if (yych <= '/') goto yy161; + if (yych <= '9') goto yy160; } else { if (yych <= '^') { - if (yych <= 'Z') goto yy159; + if (yych <= 'Z') goto yy160; } else { - if (yych <= 'z') goto yy159; - if (yych >= 0x0000007F) goto yy159; + if (yych <= 'z') goto yy160; + if (yych >= 0x0000007F) goto yy160; } } } - yy160: + yy161: #line 142 "src/lexer.re" { return rbs_next_token(lexer, tSYMBOL); } -#line 1446 "src/lexer.c" - yy161: - rbs_skip(lexer); - goto yy160; +#line 1495 "src/lexer.c" yy162: rbs_skip(lexer); + goto yy161; yy163: + rbs_skip(lexer); + yy164: #line 129 "src/lexer.re" { return rbs_next_token(lexer, tSQSYMBOL); } -#line 1455 "src/lexer.c" - yy164: +#line 1504 "src/lexer.c" + yy165: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '\'') { - if (yych <= 0x00000000) goto yy70; - if (yych <= '&') goto yy91; - goto yy218; + if (yych <= 0x00000000) goto yy71; + if (yych <= '&') goto yy92; + goto yy219; } else { - if (yych == '\\') goto yy164; - goto yy91; + if (yych == '\\') goto yy165; + goto yy92; } - yy165: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == '>') goto yy90; - goto yy87; yy166: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == '=') goto yy90; - goto yy87; + if (yych == '>') goto yy91; + goto yy88; yy167: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych == '=') goto yy91; + goto yy88; + yy168: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '`') { if (yych <= 'Z') { - if (yych <= '@') goto yy70; - goto yy99; + if (yych <= '@') goto yy71; + goto yy100; } else { - if (yych == '_') goto yy99; - goto yy70; + if (yych == '_') goto yy100; + goto yy71; } } else { if (yych <= 0x0000007F) { - if (yych <= 'z') goto yy99; - goto yy70; + if (yych <= 'z') goto yy100; + goto yy71; } else { - if (yych == 0x0000FFFD) goto yy70; - goto yy99; + if (yych == 0x0000FFFD) goto yy71; + goto yy100; } } - yy168: - rbs_skip(lexer); - goto yy100; yy169: + rbs_skip(lexer); + goto yy101; + yy170: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '_') { if (yych <= '@') { - if (yych <= '/') goto yy170; - if (yych <= '9') goto yy169; + if (yych <= '/') goto yy171; + if (yych <= '9') goto yy170; } else { - if (yych <= 'Z') goto yy169; - if (yych >= '_') goto yy169; + if (yych <= 'Z') goto yy170; + if (yych >= '_') goto yy170; } } else { if (yych <= 0x0000007F) { - if (yych <= '`') goto yy170; - if (yych <= 'z') goto yy169; + if (yych <= '`') goto yy171; + if (yych <= 'z') goto yy170; } else { - if (yych != 0x0000FFFD) goto yy169; + if (yych != 0x0000FFFD) goto yy170; } } - yy170: -#line 154 "src/lexer.re" + yy171: +#line 157 "src/lexer.re" { return rbs_next_token(lexer, tA2IDENT); } -#line 1522 "src/lexer.c" - yy171: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 's') goto yy219; - goto yy107; +#line 1571 "src/lexer.c" yy172: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'o') goto yy221; - goto yy114; + if (yych == 's') goto yy220; + goto yy108; yy173: rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych == 'o') goto yy222; + goto yy115; + yy174: + rbs_skip(lexer); #line 52 "src/lexer.re" { return rbs_next_token(lexer, tQIDENT); } -#line 1537 "src/lexer.c" - yy174: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 'a') goto yy222; - goto yy54; +#line 1586 "src/lexer.c" yy175: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'r') goto yy223; + if (yych == 'a') goto yy223; goto yy54; yy176: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy224; + if (yych == 'r') goto yy224; goto yy54; yy177: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych == 'l') goto yy225; + goto yy54; + yy178: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -1725,30 +1722,30 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy178; + if (yych <= 0x0000007F) goto yy179; if (yych != 0x0000FFFD) goto yy53; } } - yy178: + yy179: #line 85 "src/lexer.re" { return rbs_next_token(lexer, kBOT); } -#line 1576 "src/lexer.c" - yy179: +#line 1625 "src/lexer.c" + yy180: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 's') goto yy226; + if (yych == 's') goto yy227; goto yy54; - yy180: + yy181: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -1756,25 +1753,25 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy181; + if (yych <= 0x0000007F) goto yy182; if (yych != 0x0000FFFD) goto yy53; } } - yy181: + yy182: #line 88 "src/lexer.re" { return rbs_next_token(lexer, kDEF); } -#line 1605 "src/lexer.c" - yy182: +#line 1654 "src/lexer.c" + yy183: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -1782,55 +1779,55 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy183; + if (yych <= 0x0000007F) goto yy184; if (yych != 0x0000FFFD) goto yy53; } } - yy183: + yy184: #line 89 "src/lexer.re" { return rbs_next_token(lexer, kEND); } -#line 1629 "src/lexer.c" - yy184: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 'e') goto yy227; - goto yy54; +#line 1678 "src/lexer.c" yy185: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 's') goto yy228; + if (yych == 'e') goto yy228; goto yy54; yy186: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy229; + if (yych == 's') goto yy229; goto yy54; yy187: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 't') goto yy230; + if (yych == 'l') goto yy230; goto yy54; yy188: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy231; + if (yych == 't') goto yy231; goto yy54; yy189: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'u') goto yy232; + if (yych == 'e') goto yy232; goto yy54; yy190: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych == 'u') goto yy233; + goto yy54; + yy191: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -1838,25 +1835,25 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy191; + if (yych <= 0x0000007F) goto yy192; if (yych != 0x0000FFFD) goto yy53; } } - yy191: + yy192: #line 99 "src/lexer.re" { return rbs_next_token(lexer, kNIL); } -#line 1683 "src/lexer.c" - yy192: +#line 1732 "src/lexer.c" + yy193: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -1864,60 +1861,60 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy193; + if (yych <= 0x0000007F) goto yy194; if (yych != 0x0000FFFD) goto yy53; } } - yy193: + yy194: #line 100 "src/lexer.re" { return rbs_next_token(lexer, kOUT); } -#line 1707 "src/lexer.c" - yy194: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 'p') goto yy233; - goto yy54; +#line 1756 "src/lexer.c" yy195: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'v') goto yy234; + if (yych == 'p') goto yy234; goto yy54; yy196: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy235; + if (yych == 'v') goto yy235; goto yy54; yy197: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'u') goto yy236; + if (yych == 'l') goto yy236; goto yy54; yy198: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'f') goto yy237; + if (yych == 'u') goto yy237; goto yy54; yy199: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'g') goto yy239; + if (yych == 'f') goto yy238; goto yy54; yy200: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'p') goto yy240; + if (yych == 'g') goto yy240; goto yy54; yy201: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych == 'p') goto yy241; + goto yy54; + yy202: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -1925,45 +1922,45 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy202; + if (yych <= 0x0000007F) goto yy203; if (yych != 0x0000FFFD) goto yy53; } } - yy202: + yy203: #line 106 "src/lexer.re" { return rbs_next_token(lexer, kTOP); } -#line 1766 "src/lexer.c" - yy203: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 'e') goto yy242; - goto yy54; +#line 1815 "src/lexer.c" yy204: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy244; + if (yych == 'e') goto yy243; goto yy54; yy205: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'h') goto yy246; + if (yych == 'e') goto yy245; goto yy54; yy206: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'y') goto yy247; + if (yych == 'h') goto yy247; goto yy54; yy207: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych == 'y') goto yy248; + goto yy54; + yy208: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -1971,152 +1968,152 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy208; + if (yych <= 0x0000007F) goto yy209; if (yych != 0x0000FFFD) goto yy53; } } - yy208: + yy209: #line 112 "src/lexer.re" { return rbs_next_token(lexer, kUSE); } -#line 1810 "src/lexer.c" - yy209: +#line 1859 "src/lexer.c" + yy210: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'd') goto yy248; + if (yych == 'd') goto yy249; goto yy54; - yy210: + yy211: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { - if (yych <= '/') goto yy70; - if (yych <= '9') goto yy250; - goto yy70; + if (yych <= '/') goto yy71; + if (yych <= '9') goto yy251; + goto yy71; } else { - if (yych <= 'F') goto yy250; - if (yych <= '`') goto yy70; - if (yych <= 'f') goto yy250; - goto yy70; + if (yych <= 'F') goto yy251; + if (yych <= '`') goto yy71; + if (yych <= 'f') goto yy251; + goto yy71; } - yy211: + yy212: rbs_skip(lexer); #line 68 "src/lexer.re" { return rbs_next_token(lexer, tANNOTATION); } -#line 1833 "src/lexer.c" - yy212: +#line 1882 "src/lexer.c" + yy213: rbs_skip(lexer); #line 71 "src/lexer.re" { return rbs_next_token(lexer, tANNOTATION); } -#line 1838 "src/lexer.c" - yy213: +#line 1887 "src/lexer.c" + yy214: rbs_skip(lexer); #line 69 "src/lexer.re" { return rbs_next_token(lexer, tANNOTATION); } -#line 1843 "src/lexer.c" - yy214: +#line 1892 "src/lexer.c" + yy215: rbs_skip(lexer); #line 67 "src/lexer.re" { return rbs_next_token(lexer, tANNOTATION); } -#line 1848 "src/lexer.c" - yy215: +#line 1897 "src/lexer.c" + yy216: rbs_skip(lexer); #line 70 "src/lexer.re" { return rbs_next_token(lexer, tANNOTATION); } -#line 1853 "src/lexer.c" - yy216: +#line 1902 "src/lexer.c" + yy217: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { - if (yych <= '/') goto yy70; - if (yych <= '9') goto yy251; - goto yy70; + if (yych <= '/') goto yy71; + if (yych <= '9') goto yy252; + goto yy71; } else { - if (yych <= 'F') goto yy251; - if (yych <= '`') goto yy70; - if (yych <= 'f') goto yy251; - goto yy70; + if (yych <= 'F') goto yy252; + if (yych <= '`') goto yy71; + if (yych <= 'f') goto yy252; + goto yy71; } - yy217: + yy218: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '/') goto yy70; - if (yych <= '9') goto yy88; - if (yych <= '`') goto yy70; - if (yych <= 'f') goto yy88; - goto yy70; - yy218: + if (yych <= '/') goto yy71; + if (yych <= '9') goto yy89; + if (yych <= '`') goto yy71; + if (yych <= 'f') goto yy89; + goto yy71; + yy219: yyaccept = 7; rbs_skip(lexer); backup = *lexer; yych = rbs_peek(lexer); if (yych <= '\'') { - if (yych <= 0x00000000) goto yy163; - if (yych <= '&') goto yy91; - goto yy162; + if (yych <= 0x00000000) goto yy164; + if (yych <= '&') goto yy92; + goto yy163; } else { - if (yych == '\\') goto yy164; - goto yy91; + if (yych == '\\') goto yy165; + goto yy92; } - yy219: + yy220: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '_') { if (yych <= '@') { - if (yych <= '/') goto yy220; - if (yych <= '9') goto yy106; + if (yych <= '/') goto yy221; + if (yych <= '9') goto yy107; } else { - if (yych <= 'Z') goto yy106; - if (yych >= '_') goto yy106; + if (yych <= 'Z') goto yy107; + if (yych >= '_') goto yy107; } } else { if (yych <= 0x0000007F) { - if (yych <= '`') goto yy220; - if (yych <= 'z') goto yy106; + if (yych <= '`') goto yy221; + if (yych <= 'z') goto yy107; } else { - if (yych != 0x0000FFFD) goto yy106; + if (yych != 0x0000FFFD) goto yy107; } } - yy220: + yy221: #line 115 "src/lexer.re" { return rbs_next_token(lexer, kATRBS); } -#line 1910 "src/lexer.c" - yy221: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 'd') goto yy252; - goto yy114; +#line 1959 "src/lexer.c" yy222: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 's') goto yy253; - goto yy54; + if (yych == 'd') goto yy253; + goto yy115; yy223: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == '_') goto yy255; + if (yych == 's') goto yy254; goto yy54; yy224: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych == '_') goto yy256; + goto yy54; + yy225: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -2124,80 +2121,80 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy225; + if (yych <= 0x0000007F) goto yy226; if (yych != 0x0000FFFD) goto yy53; } } - yy225: + yy226: #line 84 "src/lexer.re" { return rbs_next_token(lexer, kBOOL); } -#line 1949 "src/lexer.c" - yy226: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 's') goto yy256; - goto yy54; +#line 1998 "src/lexer.c" yy227: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'n') goto yy258; + if (yych == 's') goto yy257; goto yy54; yy228: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy259; + if (yych == 'n') goto yy259; goto yy54; yy229: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'u') goto yy261; + if (yych == 'e') goto yy260; goto yy54; yy230: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy262; + if (yych == 'u') goto yy262; goto yy54; yy231: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'r') goto yy263; + if (yych == 'a') goto yy263; goto yy54; yy232: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy264; + if (yych == 'r') goto yy264; goto yy54; yy233: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy265; + if (yych == 'l') goto yy265; goto yy54; yy234: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy266; + if (yych == 'e') goto yy266; goto yy54; yy235: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'i') goto yy267; + if (yych == 'a') goto yy267; goto yy54; yy236: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'r') goto yy268; + if (yych == 'i') goto yy268; goto yy54; yy237: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych == 'r') goto yy269; + goto yy54; + yy238: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -2205,30 +2202,30 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy238; + if (yych <= 0x0000007F) goto yy239; if (yych != 0x0000FFFD) goto yy53; } } - yy238: + yy239: #line 104 "src/lexer.re" { return rbs_next_token(lexer, kSELF); } -#line 2028 "src/lexer.c" - yy239: +#line 2077 "src/lexer.c" + yy240: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy269; + if (yych == 'l') goto yy270; goto yy54; - yy240: + yy241: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -2236,25 +2233,25 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy241; + if (yych <= 0x0000007F) goto yy242; if (yych != 0x0000FFFD) goto yy53; } } - yy241: + yy242: #line 116 "src/lexer.re" { return rbs_next_token(lexer, kSKIP); } -#line 2057 "src/lexer.c" - yy242: +#line 2106 "src/lexer.c" + yy243: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -2262,25 +2259,25 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy243; + if (yych <= 0x0000007F) goto yy244; if (yych != 0x0000FFFD) goto yy53; } } - yy243: + yy244: #line 107 "src/lexer.re" { return rbs_next_token(lexer, kTRUE); } -#line 2081 "src/lexer.c" - yy244: +#line 2130 "src/lexer.c" + yy245: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -2288,35 +2285,35 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy245; + if (yych <= 0x0000007F) goto yy246; if (yych != 0x0000FFFD) goto yy53; } } - yy245: + yy246: #line 108 "src/lexer.re" { return rbs_next_token(lexer, kTYPE); } -#line 2105 "src/lexer.c" - yy246: +#line 2154 "src/lexer.c" + yy247: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy270; + if (yych == 'e') goto yy271; goto yy54; - yy247: + yy248: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'p') goto yy271; + if (yych == 'p') goto yy272; goto yy54; - yy248: + yy249: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -2324,56 +2321,56 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy249; + if (yych <= 0x0000007F) goto yy250; if (yych != 0x0000FFFD) goto yy53; } } - yy249: + yy250: #line 111 "src/lexer.re" { return rbs_next_token(lexer, kVOID); } -#line 2139 "src/lexer.c" - yy250: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych <= '@') { - if (yych <= '/') goto yy70; - if (yych <= '9') goto yy272; - goto yy70; - } else { - if (yych <= 'F') goto yy272; - if (yych <= '`') goto yy70; - if (yych <= 'f') goto yy272; - goto yy70; - } +#line 2188 "src/lexer.c" yy251: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { - if (yych <= '/') goto yy70; + if (yych <= '/') goto yy71; if (yych <= '9') goto yy273; - goto yy70; + goto yy71; } else { if (yych <= 'F') goto yy273; - if (yych <= '`') goto yy70; + if (yych <= '`') goto yy71; if (yych <= 'f') goto yy273; - goto yy70; + goto yy71; } yy252: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'o') goto yy274; - goto yy114; + if (yych <= '@') { + if (yych <= '/') goto yy71; + if (yych <= '9') goto yy274; + goto yy71; + } else { + if (yych <= 'F') goto yy274; + if (yych <= '`') goto yy71; + if (yych <= 'f') goto yy274; + goto yy71; + } yy253: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych == 'o') goto yy275; + goto yy115; + yy254: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -2381,41 +2378,41 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy254; + if (yych <= 0x0000007F) goto yy255; if (yych != 0x0000FFFD) goto yy53; } } - yy254: + yy255: #line 80 "src/lexer.re" { return rbs_next_token(lexer, kALIAS); } -#line 2194 "src/lexer.c" - yy255: +#line 2243 "src/lexer.c" + yy256: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'q') { - if (yych == 'a') goto yy275; + if (yych == 'a') goto yy276; goto yy54; } else { - if (yych <= 'r') goto yy276; - if (yych == 'w') goto yy277; + if (yych <= 'r') goto yy277; + if (yych == 'w') goto yy278; goto yy54; } - yy256: + yy257: yyaccept = 8; rbs_skip(lexer); backup = *lexer; yych = rbs_peek(lexer); if (yych <= '@') { if (yych <= '-') { - if (yych == '!') goto yy110; - if (yych >= '-') goto yy278; + if (yych == '!') goto yy111; + if (yych >= '-') goto yy279; } else { if (yych <= '9') { if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; } } } else { @@ -2430,26 +2427,26 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { } } } - yy257: + yy258: #line 86 "src/lexer.re" { return rbs_next_token(lexer, kCLASS); } -#line 2237 "src/lexer.c" - yy258: +#line 2286 "src/lexer.c" + yy259: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'd') goto yy279; + if (yych == 'd') goto yy280; goto yy54; - yy259: + yy260: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -2457,131 +2454,131 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy260; + if (yych <= 0x0000007F) goto yy261; if (yych != 0x0000FFFD) goto yy53; } } - yy260: + yy261: #line 91 "src/lexer.re" { return rbs_next_token(lexer, kFALSE); } -#line 2266 "src/lexer.c" - yy261: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 'd') goto yy281; - goto yy54; +#line 2315 "src/lexer.c" yy262: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'n') goto yy282; + if (yych == 'd') goto yy282; goto yy54; yy263: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'f') goto yy283; + if (yych == 'n') goto yy283; goto yy54; yy264: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy284; + if (yych == 'f') goto yy284; goto yy54; yy265: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'n') goto yy286; + if (yych == 'e') goto yy285; goto yy54; yy266: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 't') goto yy287; + if (yych == 'n') goto yy287; goto yy54; yy267: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'c') goto yy288; + if (yych == 't') goto yy288; goto yy54; yy268: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'n') goto yy290; + if (yych == 'c') goto yy289; goto yy54; yy269: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy292; + if (yych == 'n') goto yy291; goto yy54; yy270: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'c') goto yy293; + if (yych == 'e') goto yy293; goto yy54; yy271: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy294; + if (yych == 'c') goto yy294; goto yy54; yy272: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '@') { - if (yych <= '/') goto yy70; - if (yych <= '9') goto yy68; - goto yy70; - } else { - if (yych <= 'F') goto yy68; - if (yych <= '`') goto yy70; - if (yych <= 'f') goto yy68; - goto yy70; - } + if (yych == 'e') goto yy295; + goto yy54; yy273: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { - if (yych <= '/') goto yy70; - if (yych <= '9') goto yy295; - goto yy70; + if (yych <= '/') goto yy71; + if (yych <= '9') goto yy69; + goto yy71; } else { - if (yych <= 'F') goto yy295; - if (yych <= '`') goto yy70; - if (yych <= 'f') goto yy295; - goto yy70; + if (yych <= 'F') goto yy69; + if (yych <= '`') goto yy71; + if (yych <= 'f') goto yy69; + goto yy71; } yy274: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == '_') goto yy296; - goto yy114; + if (yych <= '@') { + if (yych <= '/') goto yy71; + if (yych <= '9') goto yy296; + goto yy71; + } else { + if (yych <= 'F') goto yy296; + if (yych <= '`') goto yy71; + if (yych <= 'f') goto yy296; + goto yy71; + } yy275: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'c') goto yy297; - goto yy54; + if (yych == '_') goto yy297; + goto yy115; yy276: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy298; + if (yych == 'c') goto yy298; goto yy54; yy277: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'r') goto yy299; + if (yych == 'e') goto yy299; goto yy54; yy278: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy300; - goto yy70; + if (yych == 'r') goto yy300; + goto yy54; yy279: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych == 'a') goto yy301; + goto yy71; + yy280: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -2589,45 +2586,45 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy280; + if (yych <= 0x0000007F) goto yy281; if (yych != 0x0000FFFD) goto yy53; } } - yy280: + yy281: #line 90 "src/lexer.re" { return rbs_next_token(lexer, kEXTEND); } -#line 2396 "src/lexer.c" - yy281: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 'e') goto yy301; - goto yy54; +#line 2445 "src/lexer.c" yy282: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'c') goto yy303; + if (yych == 'e') goto yy302; goto yy54; yy283: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy304; + if (yych == 'c') goto yy304; goto yy54; yy284: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych == 'a') goto yy305; + goto yy54; + yy285: yyaccept = 9; rbs_skip(lexer); backup = *lexer; yych = rbs_peek(lexer); if (yych <= '@') { if (yych <= '-') { - if (yych == '!') goto yy110; - if (yych >= '-') goto yy305; + if (yych == '!') goto yy111; + if (yych >= '-') goto yy306; } else { if (yych <= '9') { if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; } } } else { @@ -2642,31 +2639,31 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { } } } - yy285: + yy286: #line 96 "src/lexer.re" { return rbs_next_token(lexer, kMODULE); } -#line 2443 "src/lexer.c" - yy286: +#line 2492 "src/lexer.c" + yy287: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'd') goto yy306; + if (yych == 'd') goto yy307; goto yy54; - yy287: + yy288: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy308; + if (yych == 'e') goto yy309; goto yy54; - yy288: + yy289: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -2674,25 +2671,25 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy289; + if (yych <= 0x0000007F) goto yy290; if (yych != 0x0000FFFD) goto yy53; } } - yy289: + yy290: #line 103 "src/lexer.re" { return rbs_next_token(lexer, kPUBLIC); } -#line 2477 "src/lexer.c" - yy290: +#line 2526 "src/lexer.c" + yy291: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -2700,78 +2697,78 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy291; + if (yych <= 0x0000007F) goto yy292; if (yych != 0x0000FFFD) goto yy53; } } - yy291: + yy292: #line 117 "src/lexer.re" { return rbs_next_token(lexer, kRETURN); } -#line 2501 "src/lexer.c" - yy292: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 't') goto yy310; - goto yy54; +#line 2550 "src/lexer.c" yy293: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'k') goto yy311; + if (yych == 't') goto yy311; goto yy54; yy294: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'd') goto yy312; + if (yych == 'k') goto yy312; goto yy54; yy295: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '@') { - if (yych <= '/') goto yy70; - if (yych <= '9') goto yy88; - goto yy70; - } else { - if (yych <= 'F') goto yy88; - if (yych <= '`') goto yy70; - if (yych <= 'f') goto yy88; - goto yy70; - } + if (yych == 'd') goto yy313; + goto yy54; yy296: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == '_') goto yy314; - goto yy114; + if (yych <= '@') { + if (yych <= '/') goto yy71; + if (yych <= '9') goto yy89; + goto yy71; + } else { + if (yych <= 'F') goto yy89; + if (yych <= '`') goto yy71; + if (yych <= 'f') goto yy89; + goto yy71; + } yy297: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'c') goto yy316; - goto yy54; + if (yych == '_') goto yy315; + goto yy115; yy298: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy317; + if (yych == 'c') goto yy317; goto yy54; yy299: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'i') goto yy318; + if (yych == 'a') goto yy318; goto yy54; yy300: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy319; - goto yy70; + if (yych == 'i') goto yy319; + goto yy54; yy301: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych == 'l') goto yy320; + goto yy71; + yy302: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -2779,41 +2776,41 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy302; + if (yych <= 0x0000007F) goto yy303; if (yych != 0x0000FFFD) goto yy53; } } - yy302: + yy303: #line 93 "src/lexer.re" { return rbs_next_token(lexer, kINCLUDE); } -#line 2578 "src/lexer.c" - yy303: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 'e') goto yy320; - goto yy54; +#line 2627 "src/lexer.c" yy304: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'c') goto yy322; + if (yych == 'e') goto yy321; goto yy54; yy305: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy323; - if (yych == 's') goto yy324; - goto yy70; + if (yych == 'c') goto yy323; + goto yy54; yy306: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych == 'a') goto yy324; + if (yych == 's') goto yy325; + goto yy71; + yy307: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -2821,25 +2818,25 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy307; + if (yych <= 0x0000007F) goto yy308; if (yych != 0x0000FFFD) goto yy53; } } - yy307: + yy308: #line 101 "src/lexer.re" { return rbs_next_token(lexer, kPREPEND); } -#line 2618 "src/lexer.c" - yy308: +#line 2667 "src/lexer.c" + yy309: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -2847,35 +2844,35 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy309; + if (yych <= 0x0000007F) goto yy310; if (yych != 0x0000FFFD) goto yy53; } } - yy309: + yy310: #line 102 "src/lexer.re" { return rbs_next_token(lexer, kPRIVATE); } -#line 2642 "src/lexer.c" - yy310: +#line 2691 "src/lexer.c" + yy311: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'o') goto yy325; + if (yych == 'o') goto yy326; goto yy54; - yy311: + yy312: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy326; + if (yych == 'e') goto yy327; goto yy54; - yy312: + yy313: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -2883,71 +2880,71 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy313; + if (yych <= 0x0000007F) goto yy314; if (yych != 0x0000FFFD) goto yy53; } } - yy313: + yy314: #line 110 "src/lexer.re" { return rbs_next_token(lexer, kUNTYPED); } -#line 2676 "src/lexer.c" - yy314: +#line 2725 "src/lexer.c" + yy315: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; - if (yych >= '0') goto yy113; + if (yych == '!') goto yy111; + if (yych >= '0') goto yy114; } else { - if (yych == '=') goto yy111; - if (yych >= 'A') goto yy113; + if (yych == '=') goto yy112; + if (yych >= 'A') goto yy114; } } else { if (yych <= 'z') { - if (yych == '_') goto yy113; - if (yych >= 'a') goto yy113; + if (yych == '_') goto yy114; + if (yych >= 'a') goto yy114; } else { - if (yych <= 0x0000007F) goto yy315; - if (yych != 0x0000FFFD) goto yy113; + if (yych <= 0x0000007F) goto yy316; + if (yych != 0x0000FFFD) goto yy114; } } - yy315: + yy316: #line 114 "src/lexer.re" { return rbs_next_token(lexer, k__TODO__); } -#line 2700 "src/lexer.c" - yy316: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 'e') goto yy327; - goto yy54; +#line 2749 "src/lexer.c" yy317: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'd') goto yy328; + if (yych == 'e') goto yy328; goto yy54; yy318: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 't') goto yy329; + if (yych == 'd') goto yy329; goto yy54; yy319: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'i') goto yy330; - goto yy70; + if (yych == 't') goto yy330; + goto yy54; yy320: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych == 'i') goto yy331; + goto yy71; + yy321: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -2955,50 +2952,45 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy321; + if (yych <= 0x0000007F) goto yy322; if (yych != 0x0000FFFD) goto yy53; } } - yy321: + yy322: #line 94 "src/lexer.re" { return rbs_next_token(lexer, kINSTANCE); } -#line 2744 "src/lexer.c" - yy322: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 'e') goto yy331; - goto yy54; +#line 2793 "src/lexer.c" yy323: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy333; - goto yy70; + if (yych == 'e') goto yy332; + goto yy54; yy324: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy334; - goto yy70; + if (yych == 'l') goto yy334; + goto yy71; yy325: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'n') goto yy335; - goto yy54; + if (yych == 'e') goto yy335; + goto yy71; yy326: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'd') goto yy337; + if (yych == 'n') goto yy336; goto yy54; yy327: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 's') goto yy339; + if (yych == 'd') goto yy338; goto yy54; yy328: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'e') goto yy340; + if (yych == 's') goto yy340; goto yy54; yy329: rbs_skip(lexer); @@ -3008,17 +3000,22 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yy330: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy342; - goto yy70; + if (yych == 'e') goto yy342; + goto yy54; yy331: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych == 'a') goto yy343; + goto yy71; + yy332: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -3026,35 +3023,35 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy332; + if (yych <= 0x0000007F) goto yy333; if (yych != 0x0000FFFD) goto yy53; } } - yy332: + yy333: #line 95 "src/lexer.re" { return rbs_next_token(lexer, kINTERFACE); } -#line 2813 "src/lexer.c" - yy333: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 'i') goto yy343; - goto yy70; +#line 2862 "src/lexer.c" yy334: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'l') goto yy344; - goto yy70; + if (yych == 'i') goto yy344; + goto yy71; yy335: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych == 'l') goto yy345; + goto yy71; + yy336: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -3062,25 +3059,25 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy336; + if (yych <= 0x0000007F) goto yy337; if (yych != 0x0000FFFD) goto yy53; } } - yy336: + yy337: #line 105 "src/lexer.re" { return rbs_next_token(lexer, kSINGLETON); } -#line 2847 "src/lexer.c" - yy337: +#line 2896 "src/lexer.c" + yy338: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -3088,60 +3085,60 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy338; + if (yych <= 0x0000007F) goto yy339; if (yych != 0x0000FFFD) goto yy53; } } - yy338: + yy339: #line 109 "src/lexer.re" { return rbs_next_token(lexer, kUNCHECKED); } -#line 2871 "src/lexer.c" - yy339: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 's') goto yy345; - goto yy54; +#line 2920 "src/lexer.c" yy340: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'r') goto yy346; + if (yych == 's') goto yy346; goto yy54; yy341: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'r') goto yy348; + if (yych == 'r') goto yy347; goto yy54; yy342: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 's') goto yy350; - goto yy70; + if (yych == 'r') goto yy349; + goto yy54; yy343: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'a') goto yy351; - goto yy70; + if (yych == 's') goto yy351; + goto yy71; yy344: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'f') goto yy352; - goto yy70; + if (yych == 'a') goto yy352; + goto yy71; yy345: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'o') goto yy353; - goto yy54; + if (yych == 'f') goto yy353; + goto yy71; yy346: + rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych == 'o') goto yy354; + goto yy54; + yy347: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -3149,25 +3146,25 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy347; + if (yych <= 0x0000007F) goto yy348; if (yych != 0x0000FFFD) goto yy53; } } - yy347: + yy348: #line 82 "src/lexer.re" { return rbs_next_token(lexer, kATTRREADER); } -#line 2930 "src/lexer.c" - yy348: +#line 2979 "src/lexer.c" + yy349: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -3175,56 +3172,56 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy349; + if (yych <= 0x0000007F) goto yy350; if (yych != 0x0000FFFD) goto yy53; } } - yy349: + yy350: #line 83 "src/lexer.re" { return rbs_next_token(lexer, kATTRWRITER); } -#line 2954 "src/lexer.c" - yy350: +#line 3003 "src/lexer.c" + yy351: rbs_skip(lexer); #line 87 "src/lexer.re" { return rbs_next_token(lexer, kCLASSALIAS); } -#line 2959 "src/lexer.c" - yy351: +#line 3008 "src/lexer.c" + yy352: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 's') goto yy354; - goto yy70; - yy352: + if (yych == 's') goto yy355; + goto yy71; + yy353: rbs_skip(lexer); #line 98 "src/lexer.re" { return rbs_next_token(lexer, kMODULESELF); } -#line 2969 "src/lexer.c" - yy353: +#line 3018 "src/lexer.c" + yy354: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == 'r') goto yy355; + if (yych == 'r') goto yy356; goto yy54; - yy354: + yy355: rbs_skip(lexer); #line 97 "src/lexer.re" { return rbs_next_token(lexer, kMODULEALIAS); } -#line 2979 "src/lexer.c" - yy355: +#line 3028 "src/lexer.c" + yy356: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy110; + if (yych == '!') goto yy111; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy111; + if (yych == '=') goto yy112; if (yych >= 'A') goto yy53; } } else { @@ -3232,16 +3229,16 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '_') goto yy53; if (yych >= 'a') goto yy53; } else { - if (yych <= 0x0000007F) goto yy356; + if (yych <= 0x0000007F) goto yy357; if (yych != 0x0000FFFD) goto yy53; } } - yy356: + yy357: #line 81 "src/lexer.re" { return rbs_next_token(lexer, kATTRACCESSOR); } -#line 3003 "src/lexer.c" +#line 3052 "src/lexer.c" } -#line 163 "src/lexer.re" +#line 166 "src/lexer.re" } diff --git a/src/lexer.re b/src/lexer.re index 4f6bbd27e0..d8d4dce546 100644 --- a/src/lexer.re +++ b/src/lexer.re @@ -147,11 +147,14 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { "_" [a-z0-9_] ident_char* { return rbs_next_token(lexer, tULLIDENT); } "_" [A-Z] ident_char* { return rbs_next_token(lexer, tULIDENT); } "_" { return rbs_next_token(lexer, tULLIDENT); } - [a-zA-Z_] ident_char* "!" { return rbs_next_token(lexer, tBANGIDENT); } - [a-zA-Z_] ident_char* "=" { return rbs_next_token(lexer, tEQIDENT); } - "@" [a-zA-Z_] ident_char* { return rbs_next_token(lexer, tAIDENT); } - "@@" [a-zA-Z_] ident_char* { return rbs_next_token(lexer, tA2IDENT); } + // None of these four needs to know the case of the first character, so + // widening the leading position to `ident_start` is all they need. + ident_start ident_char* "!" { return rbs_next_token(lexer, tBANGIDENT); } + ident_start ident_char* "=" { return rbs_next_token(lexer, tEQIDENT); } + + "@" ident_start ident_char* { return rbs_next_token(lexer, tAIDENT); } + "@@" ident_start ident_char* { return rbs_next_token(lexer, tA2IDENT); } "$" global_ident { return rbs_next_token(lexer, tGIDENT); } From 2c6f43be48fb11b318ba5c6d14d3a4e112871755 Mon Sep 17 00:00:00 2001 From: Soutaro Matsumoto Date: Mon, 10 Aug 2026 19:20:10 +0900 Subject: [PATCH 5/8] Allow a non-ASCII character to start a name that is not a type name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The rules above this one already take a non-ASCII character anywhere but the first position, and the ones for symbols, instance variables and class variables take it there too. What is left is a bare identifier, and there the first character is not just a character: RBS reads its case to tell a class name from an interface name from an alias name. `rbs_next_char` reports every character outside ASCII as one and the same code point, so a rule cannot read that case on its own. The encoding could be asked, and its answer would be right -- the tables in `rbs_encoding.c` are a copy of prism's, and prism is what decides this in Ruby, so the two agree on every character in every encoding rbs knows. `TypeName#kind` is the problem. It reads `[[:upper:]]`, which is Onigmo's table, not prism's, and the two are different functions: they disagree about 891 characters, among them the full-width capitals of every EUC-JP and Shift_JIS variant, which Ruby does start a constant on. Agreeing would mean carrying prism's table on the Ruby side as well -- 662 code point ranges, 75 single-byte tables and the Japanese byte ranges, kept in step with the C copy forever. So RBS takes less than Ruby gives. A name whose kind is read from its first character has to open with ASCII, and every other name may open with whatever Ruby accepts. Those names get a token of their own: the parser takes `tNONASCIIIDENT` for a method name, a parameter name and a keyword, and nowhere a type name is read, so `class Foo日本語` parses and `class 日本語` does not. An incorrect `byte_range` lands on such a name, so the token it is reported against is a real one now instead of `ErrorToken`. --- include/rbs/lexer.h | 25 +- src/lexer.c | 1020 ++++++++++++++++----------------- src/lexer.re | 11 + src/lexstate.c | 1 + src/parser.c | 19 +- test/rbs/type_parsing_test.rb | 9 +- 6 files changed, 541 insertions(+), 544 deletions(-) diff --git a/include/rbs/lexer.h b/include/rbs/lexer.h index 6b5c533e8a..59e3e0c81b 100644 --- a/include/rbs/lexer.h +++ b/include/rbs/lexer.h @@ -72,18 +72,19 @@ enum RBSTokenType { kRETURN, /* return */ kMODULESELF, /* module-self */ - tLIDENT, /* Identifiers starting with lower case */ - tUIDENT, /* Identifiers starting with upper case */ - tULIDENT, /* Identifiers starting with `_` followed by upper case */ - tULLIDENT, /* Identifiers starting with `_` followed by lower case */ - tGIDENT, /* Identifiers starting with `$` */ - tAIDENT, /* Identifiers starting with `@` */ - tA2IDENT, /* Identifiers starting with `@@` */ - tBANGIDENT, /* Identifiers ending with `!` */ - tEQIDENT, /* Identifiers ending with `=` */ - tQIDENT, /* Quoted identifier */ - pAREF_OPR, /* [] */ - tOPERATOR, /* Operator identifier */ + tLIDENT, /* Identifiers starting with lower case */ + tUIDENT, /* Identifiers starting with upper case */ + tULIDENT, /* Identifiers starting with `_` followed by upper case */ + tULLIDENT, /* Identifiers starting with `_` followed by lower case */ + tNONASCIIIDENT, /* Identifiers starting with a character outside ASCII */ + tGIDENT, /* Identifiers starting with `$` */ + tAIDENT, /* Identifiers starting with `@` */ + tA2IDENT, /* Identifiers starting with `@@` */ + tBANGIDENT, /* Identifiers ending with `!` */ + tEQIDENT, /* Identifiers ending with `=` */ + tQIDENT, /* Quoted identifier */ + pAREF_OPR, /* [] */ + tOPERATOR, /* Operator identifier */ tCOMMENT, /* Comment */ tLINECOMMENT, /* Comment of all line */ diff --git a/src/lexer.c b/src/lexer.c index c9da84f999..144cc071d8 100644 --- a/src/lexer.c +++ b/src/lexer.c @@ -129,7 +129,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { } yy1: rbs_skip(lexer); -#line 164 "src/lexer.re" +#line 175 "src/lexer.re" { return rbs_next_eof_token(lexer); } @@ -137,7 +137,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yy2: rbs_skip(lexer); yy3: -#line 165 "src/lexer.re" +#line 176 "src/lexer.re" { return rbs_next_token(lexer, ErrorToken); } @@ -148,7 +148,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == '\t') goto yy4; if (yych == ' ') goto yy4; yy5: -#line 163 "src/lexer.re" +#line 174 "src/lexer.re" { return rbs_next_token(lexer, tTRIVIA); } @@ -173,7 +173,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { backup = *lexer; yych = rbs_peek(lexer); if (yych <= 0x00000000) goto yy3; - goto yy70; + goto yy71; yy10: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -199,42 +199,42 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych <= 0x0000001F) { if (yych <= '\n') { if (yych <= 0x00000000) goto yy3; - if (yych <= 0x00000008) goto yy74; + if (yych <= 0x00000008) goto yy75; goto yy3; } else { if (yych == '\r') goto yy3; - goto yy74; + goto yy75; } } else { if (yych <= '#') { if (yych <= ' ') goto yy3; - if (yych <= '"') goto yy76; - goto yy74; + if (yych <= '"') goto yy77; + goto yy75; } else { if (yych == '%') goto yy3; - if (yych <= '\'') goto yy76; + if (yych <= '\'') goto yy77; goto yy3; } } } else { if (yych <= 'Z') { if (yych <= '/') { - if (yych == '-') goto yy74; - goto yy76; + if (yych == '-') goto yy75; + goto yy77; } else { - if (yych <= '9') goto yy74; - if (yych <= '>') goto yy76; - goto yy74; + if (yych <= '9') goto yy75; + if (yych <= '>') goto yy77; + goto yy75; } } else { if (yych <= '^') { - if (yych == '\\') goto yy76; + if (yych == '\\') goto yy77; goto yy3; } else { - if (yych <= 'z') goto yy74; + if (yych <= 'z') goto yy75; if (yych <= '}') goto yy3; - if (yych <= '~') goto yy76; - goto yy74; + if (yych <= '~') goto yy77; + goto yy75; } } } @@ -243,7 +243,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { rbs_skip(lexer); backup = *lexer; yych = rbs_peek(lexer); - if (yych == 'a') goto yy77; + if (yych == 'a') goto yy78; goto yy8; yy14: rbs_skip(lexer); @@ -258,7 +258,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { backup = *lexer; yych = rbs_peek(lexer); if (yych <= 0x00000000) goto yy3; - goto yy79; + goto yy80; yy16: rbs_skip(lexer); #line 36 "src/lexer.re" @@ -276,7 +276,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yy18: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == '*') goto yy83; + if (yych == '*') goto yy84; #line 47 "src/lexer.re" { return rbs_next_token(lexer, pSTAR); @@ -301,7 +301,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yych = rbs_peek(lexer); switch (yych) { case '-': - goto yy84; + goto yy85; case '0': case '1': case '2': @@ -314,7 +314,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { case '9': goto yy25; case '>': - goto yy85; + goto yy86; case '@': goto yy24; default: @@ -325,7 +325,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { rbs_skip(lexer); backup = *lexer; yych = rbs_peek(lexer); - if (yych == '.') goto yy86; + if (yych == '.') goto yy87; yy23: #line 49 "src/lexer.re" { @@ -356,59 +356,59 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych <= '*') { if (yych <= '#') { if (yych <= ' ') goto yy28; - if (yych <= '!') goto yy87; - if (yych <= '"') goto yy89; + if (yych <= '!') goto yy88; + if (yych <= '"') goto yy90; } else { if (yych <= '&') { - if (yych <= '$') goto yy90; - goto yy91; + if (yych <= '$') goto yy91; + goto yy92; } else { - if (yych <= '\'') goto yy92; - if (yych >= '*') goto yy93; + if (yych <= '\'') goto yy93; + if (yych >= '*') goto yy94; } } } else { if (yych <= '.') { if (yych == ',') goto yy28; - if (yych <= '-') goto yy94; + if (yych <= '-') goto yy95; } else { if (yych <= '9') { - if (yych <= '/') goto yy91; + if (yych <= '/') goto yy92; } else { - if (yych <= ':') goto yy95; - if (yych >= '<') goto yy96; + if (yych <= ':') goto yy96; + if (yych >= '<') goto yy97; } } } } else { if (yych <= '_') { if (yych <= '@') { - if (yych <= '=') goto yy97; - if (yych <= '>') goto yy98; - if (yych >= '@') goto yy99; + if (yych <= '=') goto yy98; + if (yych <= '>') goto yy99; + if (yych >= '@') goto yy100; } else { if (yych <= '[') { - if (yych <= 'Z') goto yy100; - goto yy102; + if (yych <= 'Z') goto yy101; + goto yy103; } else { if (yych <= ']') goto yy28; - if (yych <= '^') goto yy91; - goto yy100; + if (yych <= '^') goto yy92; + goto yy101; } } } else { if (yych <= '}') { if (yych <= 'z') { - if (yych <= '`') goto yy91; - goto yy100; + if (yych <= '`') goto yy92; + goto yy101; } else { - if (yych == '|') goto yy91; + if (yych == '|') goto yy92; } } else { if (yych <= 0x0000007F) { - if (yych <= '~') goto yy91; + if (yych <= '~') goto yy92; } else { - if (yych != 0x0000FFFD) goto yy100; + if (yych != 0x0000FFFD) goto yy101; } } } @@ -424,7 +424,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yych = rbs_peek(lexer); if (yych <= ';') goto yy30; if (yych <= '<') goto yy24; - if (yych <= '=') goto yy103; + if (yych <= '=') goto yy104; yy30: #line 58 "src/lexer.re" { @@ -436,8 +436,8 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yych = rbs_peek(lexer); if (yych <= '>') { if (yych <= '<') goto yy32; - if (yych <= '=') goto yy104; - goto yy105; + if (yych <= '=') goto yy105; + goto yy106; } else { if (yych == '~') goto yy24; } @@ -473,20 +473,20 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych <= '`') { if (yych <= 'Z') { if (yych <= '?') goto yy3; - if (yych <= '@') goto yy106; - goto yy107; + if (yych <= '@') goto yy107; + goto yy108; } else { - if (yych == '_') goto yy107; + if (yych == '_') goto yy108; goto yy3; } } else { if (yych <= 'z') { - if (yych == 'r') goto yy110; - goto yy107; + if (yych == 'r') goto yy111; + goto yy108; } else { if (yych <= 0x0000007F) goto yy3; if (yych == 0x0000FFFD) goto yy3; - goto yy107; + goto yy108; } } yy37: @@ -494,10 +494,10 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy37; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy37; } } else { @@ -518,7 +518,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yy39: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == ']') goto yy113; + if (yych == ']') goto yy114; #line 38 "src/lexer.re" { return rbs_next_token(lexer, pLBRACKET); @@ -539,25 +539,23 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { } #line 497 "src/lexer.c" yy42: - yyaccept = 4; rbs_skip(lexer); - backup = *lexer; yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; - if (yych >= '0') goto yy114; + if (yych == '!') goto yy112; + if (yych >= '0') goto yy115; } else { - if (yych == '=') goto yy112; - if (yych >= 'A') goto yy117; + if (yych == '=') goto yy113; + if (yych >= 'A') goto yy118; } } else { if (yych <= 'z') { - if (yych == '_') goto yy119; - if (yych >= 'a') goto yy114; + if (yych == '_') goto yy120; + if (yych >= 'a') goto yy115; } else { if (yych <= 0x0000007F) goto yy43; - if (yych != 0x0000FFFD) goto yy120; + if (yych != 0x0000FFFD) goto yy68; } } yy43: @@ -565,9 +563,9 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, tULLIDENT); } -#line 523 "src/lexer.c" +#line 521 "src/lexer.c" yy44: - yyaccept = 5; + yyaccept = 4; rbs_skip(lexer); backup = *lexer; yych = rbs_peek(lexer); @@ -582,7 +580,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, tOPERATOR); } -#line 538 "src/lexer.c" +#line 536 "src/lexer.c" yy46: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -599,7 +597,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, tLIDENT); } -#line 553 "src/lexer.c" +#line 551 "src/lexer.c" yy48: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -632,11 +630,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yy54: if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych <= '/') goto yy47; goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych <= '@') goto yy47; goto yy53; } @@ -721,60 +719,60 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, pLBRACE); } -#line 673 "src/lexer.c" +#line 671 "src/lexer.c" yy66: rbs_skip(lexer); #line 43 "src/lexer.re" { return rbs_next_token(lexer, pBAR); } -#line 678 "src/lexer.c" +#line 676 "src/lexer.c" yy67: rbs_skip(lexer); #line 41 "src/lexer.re" { return rbs_next_token(lexer, pRBRACE); } -#line 683 "src/lexer.c" +#line 681 "src/lexer.c" yy68: - yyaccept = 0; rbs_skip(lexer); - backup = *lexer; yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; - if (yych <= '/') goto yy3; - goto yy120; + if (yych == '!') goto yy112; + if (yych >= '0') goto yy68; } else { - if (yych == '=') goto yy112; - if (yych <= '@') goto yy3; - goto yy120; + if (yych == '=') goto yy113; + if (yych >= 'A') goto yy68; } } else { if (yych <= 'z') { - if (yych == '_') goto yy120; - if (yych <= '`') goto yy3; - goto yy120; + if (yych == '_') goto yy68; + if (yych >= 'a') goto yy68; } else { - if (yych <= 0x0000007F) goto yy3; - if (yych == 0x0000FFFD) goto yy3; - goto yy120; + if (yych <= 0x0000007F) goto yy69; + if (yych != 0x0000FFFD) goto yy68; } } yy69: +#line 160 "src/lexer.re" + { + return rbs_next_token(lexer, tNONASCIIIDENT); + } +#line 705 "src/lexer.c" + yy70: rbs_skip(lexer); yych = rbs_peek(lexer); - yy70: + yy71: if (yych <= '"') { - if (yych <= 0x00000000) goto yy71; - if (yych <= '!') goto yy69; - goto yy72; + if (yych <= 0x00000000) goto yy72; + if (yych <= '!') goto yy70; + goto yy73; } else { - if (yych == '\\') goto yy73; - goto yy69; + if (yych == '\\') goto yy74; + goto yy70; } - yy71: + yy72: *lexer = backup; if (yyaccept <= 4) { if (yyaccept <= 2) { @@ -788,197 +786,193 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { } else { if (yyaccept == 3) goto yy28; else - goto yy43; + goto yy45; } } else { - if (yyaccept <= 7) { - if (yyaccept <= 6) { - if (yyaccept == 5) goto yy45; - else - goto yy81; - } else { + if (yyaccept <= 6) { + if (yyaccept == 5) goto yy82; + else goto yy164; - } } else { - if (yyaccept == 8) goto yy258; + if (yyaccept == 7) goto yy258; else goto yy286; } } - yy72: + yy73: rbs_skip(lexer); #line 126 "src/lexer.re" { return rbs_next_token(lexer, tDQSTRING); } -#line 753 "src/lexer.c" - yy73: +#line 745 "src/lexer.c" + yy74: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == 'u') goto yy149; if (yych == 'x') goto yy150; - goto yy69; - yy74: + goto yy70; + yy75: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= ',') { if (yych <= '\f') { - if (yych <= 0x00000000) goto yy75; - if (yych <= 0x00000008) goto yy74; - if (yych >= '\v') goto yy74; + if (yych <= 0x00000000) goto yy76; + if (yych <= 0x00000008) goto yy75; + if (yych >= '\v') goto yy75; } else { if (yych <= 0x0000001F) { - if (yych >= 0x0000000E) goto yy74; + if (yych >= 0x0000000E) goto yy75; } else { - if (yych == '#') goto yy74; + if (yych == '#') goto yy75; } } } else { if (yych <= '>') { - if (yych <= '-') goto yy74; - if (yych <= '/') goto yy75; - if (yych <= '9') goto yy74; + if (yych <= '-') goto yy75; + if (yych <= '/') goto yy76; + if (yych <= '9') goto yy75; } else { if (yych <= '^') { - if (yych <= 'Z') goto yy74; + if (yych <= 'Z') goto yy75; } else { - if (yych <= 'z') goto yy74; - if (yych >= 0x0000007F) goto yy74; + if (yych <= 'z') goto yy75; + if (yych >= 0x0000007F) goto yy75; } } } - yy75: -#line 159 "src/lexer.re" + yy76: +#line 170 "src/lexer.re" { return rbs_next_token(lexer, tGIDENT); } -#line 792 "src/lexer.c" - yy76: - rbs_skip(lexer); - goto yy75; +#line 784 "src/lexer.c" yy77: + rbs_skip(lexer); + goto yy76; + yy78: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '(') { - if (yych <= '\'') goto yy71; + if (yych <= '\'') goto yy72; goto yy151; } else { if (yych == '<') goto yy152; - goto yy71; + goto yy72; } } else { if (yych <= 'z') { if (yych <= '[') goto yy153; - goto yy71; + goto yy72; } else { if (yych <= '{') goto yy154; if (yych <= '|') goto yy155; - goto yy71; + goto yy72; } } - yy78: + yy79: rbs_skip(lexer); yych = rbs_peek(lexer); - yy79: + yy80: if (yych <= '\'') { - if (yych <= 0x00000000) goto yy71; - if (yych <= '&') goto yy78; + if (yych <= 0x00000000) goto yy72; + if (yych <= '&') goto yy79; } else { - if (yych == '\\') goto yy82; - goto yy78; + if (yych == '\\') goto yy83; + goto yy79; } - yy80: - rbs_skip(lexer); yy81: + rbs_skip(lexer); + yy82: #line 127 "src/lexer.re" { return rbs_next_token(lexer, tSQSTRING); } -#line 833 "src/lexer.c" - yy82: +#line 825 "src/lexer.c" + yy83: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '\'') { - if (yych <= 0x00000000) goto yy71; - if (yych <= '&') goto yy78; + if (yych <= 0x00000000) goto yy72; + if (yych <= '&') goto yy79; goto yy156; } else { - if (yych == '\\') goto yy82; - goto yy78; + if (yych == '\\') goto yy83; + goto yy79; } - yy83: + yy84: rbs_skip(lexer); #line 48 "src/lexer.re" { return rbs_next_token(lexer, pSTAR2); } -#line 849 "src/lexer.c" - yy84: +#line 841 "src/lexer.c" + yy85: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych >= 0x00000001) goto yy84; + if (yych >= 0x00000001) goto yy85; #line 62 "src/lexer.re" { return rbs_next_token(lexer, tINLINECOMMENT); } -#line 856 "src/lexer.c" - yy85: +#line 848 "src/lexer.c" + yy86: rbs_skip(lexer); #line 53 "src/lexer.re" { return rbs_next_token(lexer, pARROW); } -#line 861 "src/lexer.c" - yy86: +#line 853 "src/lexer.c" + yy87: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == '.') goto yy157; - goto yy71; - yy87: + goto yy72; + yy88: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == '=') goto yy91; - if (yych == '~') goto yy91; - yy88: + if (yych == '=') goto yy92; + if (yych == '~') goto yy92; + yy89: #line 143 "src/lexer.re" { return rbs_next_token(lexer, tSYMBOL); } -#line 875 "src/lexer.c" - yy89: +#line 867 "src/lexer.c" + yy90: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '"') { - if (yych <= 0x00000000) goto yy71; - if (yych <= '!') goto yy89; + if (yych <= 0x00000000) goto yy72; + if (yych <= '!') goto yy90; goto yy158; } else { if (yych == '\\') goto yy159; - goto yy89; + goto yy90; } - yy90: + yy91: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= ')') { if (yych <= 0x0000001F) { if (yych <= '\n') { - if (yych <= 0x00000000) goto yy71; + if (yych <= 0x00000000) goto yy72; if (yych <= 0x00000008) goto yy160; - goto yy71; + goto yy72; } else { - if (yych == '\r') goto yy71; + if (yych == '\r') goto yy72; goto yy160; } } else { if (yych <= '#') { - if (yych <= ' ') goto yy71; + if (yych <= ' ') goto yy72; if (yych <= '"') goto yy162; goto yy160; } else { - if (yych == '%') goto yy71; + if (yych == '%') goto yy72; if (yych <= '\'') goto yy162; - goto yy71; + goto yy72; } } } else { @@ -994,91 +988,91 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { } else { if (yych <= '^') { if (yych == '\\') goto yy162; - goto yy71; + goto yy72; } else { if (yych <= 'z') goto yy160; - if (yych <= '}') goto yy71; + if (yych <= '}') goto yy72; if (yych <= '~') goto yy162; goto yy160; } } } - yy91: - rbs_skip(lexer); - goto yy88; yy92: + rbs_skip(lexer); + goto yy89; + yy93: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '\'') { - if (yych <= 0x00000000) goto yy71; - if (yych <= '&') goto yy92; + if (yych <= 0x00000000) goto yy72; + if (yych <= '&') goto yy93; goto yy163; } else { if (yych == '\\') goto yy165; - goto yy92; + goto yy93; } - yy93: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == '*') goto yy91; - goto yy88; yy94: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == '@') goto yy91; - goto yy88; + if (yych == '*') goto yy92; + goto yy89; yy95: rbs_skip(lexer); + yych = rbs_peek(lexer); + if (yych == '@') goto yy92; + goto yy89; + yy96: + rbs_skip(lexer); #line 57 "src/lexer.re" { return rbs_next_token(lexer, pCOLON2); } -#line 961 "src/lexer.c" - yy96: +#line 953 "src/lexer.c" + yy97: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= ';') goto yy88; - if (yych <= '<') goto yy91; + if (yych <= ';') goto yy89; + if (yych <= '<') goto yy92; if (yych <= '=') goto yy166; - goto yy88; - yy97: + goto yy89; + yy98: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == '=') goto yy167; - if (yych == '~') goto yy91; - goto yy71; - yy98: + if (yych == '~') goto yy92; + goto yy72; + yy99: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '<') goto yy88; - if (yych <= '>') goto yy91; - goto yy88; - yy99: + if (yych <= '<') goto yy89; + if (yych <= '>') goto yy92; + goto yy89; + yy100: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '_') { if (yych <= '@') { - if (yych <= '?') goto yy71; + if (yych <= '?') goto yy72; goto yy168; } else { - if (yych <= 'Z') goto yy100; - if (yych <= '^') goto yy71; + if (yych <= 'Z') goto yy101; + if (yych <= '^') goto yy72; } } else { if (yych <= 0x0000007F) { - if (yych <= '`') goto yy71; - if (yych >= '{') goto yy71; + if (yych <= '`') goto yy72; + if (yych >= '{') goto yy72; } else { - if (yych == 0x0000FFFD) goto yy71; + if (yych == 0x0000FFFD) goto yy72; } } - yy100: + yy101: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { if (yych <= '9') { if (yych == '!') goto yy169; - if (yych >= '0') goto yy100; + if (yych >= '0') goto yy101; } else { if (yych <= '=') { if (yych >= '=') goto yy169; @@ -1088,110 +1082,110 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { } } else { if (yych <= '`') { - if (yych <= 'Z') goto yy100; - if (yych == '_') goto yy100; + if (yych <= 'Z') goto yy101; + if (yych == '_') goto yy101; } else { if (yych <= 0x0000007F) { - if (yych <= 'z') goto yy100; + if (yych <= 'z') goto yy101; } else { - if (yych != 0x0000FFFD) goto yy100; + if (yych != 0x0000FFFD) goto yy101; } } } - yy101: + yy102: #line 141 "src/lexer.re" { return rbs_next_token(lexer, tSYMBOL); } -#line 1029 "src/lexer.c" - yy102: +#line 1021 "src/lexer.c" + yy103: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == ']') goto yy167; - goto yy71; - yy103: + goto yy72; + yy104: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == '>') goto yy24; goto yy8; - yy104: + yy105: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == '=') goto yy24; goto yy8; - yy105: + yy106: rbs_skip(lexer); #line 54 "src/lexer.re" { return rbs_next_token(lexer, pFATARROW); } -#line 1049 "src/lexer.c" - yy106: +#line 1041 "src/lexer.c" + yy107: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '`') { if (yych <= 'Z') { - if (yych <= '@') goto yy71; + if (yych <= '@') goto yy72; goto yy170; } else { if (yych == '_') goto yy170; - goto yy71; + goto yy72; } } else { if (yych <= 0x0000007F) { if (yych <= 'z') goto yy170; - goto yy71; + goto yy72; } else { - if (yych == 0x0000FFFD) goto yy71; + if (yych == 0x0000FFFD) goto yy72; goto yy170; } } - yy107: + yy108: rbs_skip(lexer); yych = rbs_peek(lexer); - yy108: + yy109: if (yych <= '_') { if (yych <= '@') { - if (yych <= '/') goto yy109; - if (yych <= '9') goto yy107; + if (yych <= '/') goto yy110; + if (yych <= '9') goto yy108; } else { - if (yych <= 'Z') goto yy107; - if (yych >= '_') goto yy107; + if (yych <= 'Z') goto yy108; + if (yych >= '_') goto yy108; } } else { if (yych <= 0x0000007F) { - if (yych <= '`') goto yy109; - if (yych <= 'z') goto yy107; + if (yych <= '`') goto yy110; + if (yych <= 'z') goto yy108; } else { - if (yych != 0x0000FFFD) goto yy107; + if (yych != 0x0000FFFD) goto yy108; } } - yy109: -#line 156 "src/lexer.re" + yy110: +#line 167 "src/lexer.re" { return rbs_next_token(lexer, tAIDENT); } -#line 1093 "src/lexer.c" - yy110: +#line 1085 "src/lexer.c" + yy111: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == 'b') goto yy172; - goto yy108; - yy111: + goto yy109; + yy112: rbs_skip(lexer); -#line 153 "src/lexer.re" +#line 164 "src/lexer.re" { return rbs_next_token(lexer, tBANGIDENT); } -#line 1103 "src/lexer.c" - yy112: +#line 1095 "src/lexer.c" + yy113: rbs_skip(lexer); -#line 154 "src/lexer.re" +#line 165 "src/lexer.re" { return rbs_next_token(lexer, tEQIDENT); } -#line 1108 "src/lexer.c" - yy113: +#line 1100 "src/lexer.c" + yy114: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == '=') goto yy24; @@ -1199,93 +1193,69 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, pAREF_OPR); } -#line 1115 "src/lexer.c" - yy114: +#line 1107 "src/lexer.c" + yy115: rbs_skip(lexer); yych = rbs_peek(lexer); - yy115: + yy116: if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; - if (yych >= '0') goto yy114; + if (yych == '!') goto yy112; + if (yych >= '0') goto yy115; } else { - if (yych == '=') goto yy112; - if (yych >= 'A') goto yy114; + if (yych == '=') goto yy113; + if (yych >= 'A') goto yy115; } } else { if (yych <= 'z') { - if (yych == '_') goto yy114; - if (yych >= 'a') goto yy114; + if (yych == '_') goto yy115; + if (yych >= 'a') goto yy115; } else { - if (yych <= 0x0000007F) goto yy116; - if (yych != 0x0000FFFD) goto yy114; + if (yych <= 0x0000007F) goto yy117; + if (yych != 0x0000FFFD) goto yy115; } } - yy116: + yy117: #line 147 "src/lexer.re" { return rbs_next_token(lexer, tULLIDENT); } -#line 1140 "src/lexer.c" - yy117: +#line 1132 "src/lexer.c" + yy118: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; - if (yych >= '0') goto yy117; + if (yych == '!') goto yy112; + if (yych >= '0') goto yy118; } else { - if (yych == '=') goto yy112; - if (yych >= 'A') goto yy117; + if (yych == '=') goto yy113; + if (yych >= 'A') goto yy118; } } else { if (yych <= 'z') { - if (yych == '_') goto yy117; - if (yych >= 'a') goto yy117; + if (yych == '_') goto yy118; + if (yych >= 'a') goto yy118; } else { - if (yych <= 0x0000007F) goto yy118; - if (yych != 0x0000FFFD) goto yy117; + if (yych <= 0x0000007F) goto yy119; + if (yych != 0x0000FFFD) goto yy118; } } - yy118: + yy119: #line 148 "src/lexer.re" { return rbs_next_token(lexer, tULIDENT); } -#line 1164 "src/lexer.c" - yy119: - rbs_skip(lexer); - yych = rbs_peek(lexer); - if (yych == 't') goto yy173; - goto yy115; +#line 1156 "src/lexer.c" yy120: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= 'Z') { - if (yych <= '9') { - if (yych == '!') goto yy111; - if (yych <= '/') goto yy71; - goto yy120; - } else { - if (yych == '=') goto yy112; - if (yych <= '@') goto yy71; - goto yy120; - } - } else { - if (yych <= 'z') { - if (yych == '_') goto yy120; - if (yych <= '`') goto yy71; - goto yy120; - } else { - if (yych <= 0x0000007F) goto yy71; - if (yych == 0x0000FFFD) goto yy71; - goto yy120; - } - } + if (yych == 't') goto yy173; + goto yy116; yy121: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= 0x00000000) goto yy71; + if (yych <= 0x00000000) goto yy72; if (yych == '`') goto yy174; goto yy121; yy122: @@ -1298,10 +1268,10 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -1318,7 +1288,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kAS); } -#line 1228 "src/lexer.c" +#line 1196 "src/lexer.c" yy125: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -1361,14 +1331,14 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych <= '_') { if (yych <= '<') { if (yych <= '!') { - if (yych >= '!') goto yy111; + if (yych >= '!') goto yy112; } else { if (yych <= '/') goto yy133; if (yych <= '9') goto yy53; } } else { if (yych <= '@') { - if (yych <= '=') goto yy112; + if (yych <= '=') goto yy113; } else { if (yych <= 'Z') goto yy53; if (yych >= '_') goto yy53; @@ -1397,7 +1367,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kIN); } -#line 1305 "src/lexer.c" +#line 1273 "src/lexer.c" yy134: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -1479,65 +1449,65 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { - if (yych <= '/') goto yy71; + if (yych <= '/') goto yy72; if (yych <= '9') goto yy211; - goto yy71; + goto yy72; } else { if (yych <= 'F') goto yy211; - if (yych <= '`') goto yy71; + if (yych <= '`') goto yy72; if (yych <= 'f') goto yy211; - goto yy71; + goto yy72; } yy150: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '/') goto yy71; - if (yych <= '9') goto yy69; - if (yych <= '`') goto yy71; - if (yych <= 'f') goto yy69; - goto yy71; + if (yych <= '/') goto yy72; + if (yych <= '9') goto yy70; + if (yych <= '`') goto yy72; + if (yych <= 'f') goto yy70; + goto yy72; yy151: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= 0x00000000) goto yy71; + if (yych <= 0x00000000) goto yy72; if (yych == ')') goto yy212; goto yy151; yy152: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= 0x00000000) goto yy71; + if (yych <= 0x00000000) goto yy72; if (yych == '>') goto yy213; goto yy152; yy153: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= 0x00000000) goto yy71; + if (yych <= 0x00000000) goto yy72; if (yych == ']') goto yy214; goto yy153; yy154: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= 0x00000000) goto yy71; + if (yych <= 0x00000000) goto yy72; if (yych == '}') goto yy215; goto yy154; yy155: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= 0x00000000) goto yy71; + if (yych <= 0x00000000) goto yy72; if (yych == '|') goto yy216; goto yy155; yy156: - yyaccept = 6; + yyaccept = 5; rbs_skip(lexer); backup = *lexer; yych = rbs_peek(lexer); if (yych <= '\'') { - if (yych <= 0x00000000) goto yy81; - if (yych <= '&') goto yy78; - goto yy80; + if (yych <= 0x00000000) goto yy82; + if (yych <= '&') goto yy79; + goto yy81; } else { - if (yych == '\\') goto yy82; - goto yy78; + if (yych == '\\') goto yy83; + goto yy79; } yy157: rbs_skip(lexer); @@ -1545,20 +1515,20 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, pDOT3); } -#line 1451 "src/lexer.c" +#line 1419 "src/lexer.c" yy158: rbs_skip(lexer); #line 128 "src/lexer.re" { return rbs_next_token(lexer, tDQSYMBOL); } -#line 1456 "src/lexer.c" +#line 1424 "src/lexer.c" yy159: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == 'u') goto yy217; if (yych == 'x') goto yy218; - goto yy89; + goto yy90; yy160: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -1593,7 +1563,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, tSYMBOL); } -#line 1495 "src/lexer.c" +#line 1463 "src/lexer.c" yy162: rbs_skip(lexer); goto yy161; @@ -1604,51 +1574,51 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, tSQSYMBOL); } -#line 1504 "src/lexer.c" +#line 1472 "src/lexer.c" yy165: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '\'') { - if (yych <= 0x00000000) goto yy71; - if (yych <= '&') goto yy92; + if (yych <= 0x00000000) goto yy72; + if (yych <= '&') goto yy93; goto yy219; } else { if (yych == '\\') goto yy165; - goto yy92; + goto yy93; } yy166: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == '>') goto yy91; - goto yy88; + if (yych == '>') goto yy92; + goto yy89; yy167: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych == '=') goto yy91; - goto yy88; + if (yych == '=') goto yy92; + goto yy89; yy168: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '`') { if (yych <= 'Z') { - if (yych <= '@') goto yy71; - goto yy100; + if (yych <= '@') goto yy72; + goto yy101; } else { - if (yych == '_') goto yy100; - goto yy71; + if (yych == '_') goto yy101; + goto yy72; } } else { if (yych <= 0x0000007F) { - if (yych <= 'z') goto yy100; - goto yy71; + if (yych <= 'z') goto yy101; + goto yy72; } else { - if (yych == 0x0000FFFD) goto yy71; - goto yy100; + if (yych == 0x0000FFFD) goto yy72; + goto yy101; } } yy169: rbs_skip(lexer); - goto yy101; + goto yy102; yy170: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -1669,28 +1639,28 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { } } yy171: -#line 157 "src/lexer.re" +#line 168 "src/lexer.re" { return rbs_next_token(lexer, tA2IDENT); } -#line 1571 "src/lexer.c" +#line 1539 "src/lexer.c" yy172: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == 's') goto yy220; - goto yy108; + goto yy109; yy173: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == 'o') goto yy222; - goto yy115; + goto yy116; yy174: rbs_skip(lexer); #line 52 "src/lexer.re" { return rbs_next_token(lexer, tQIDENT); } -#line 1586 "src/lexer.c" +#line 1554 "src/lexer.c" yy175: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -1711,10 +1681,10 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -1731,7 +1701,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kBOT); } -#line 1625 "src/lexer.c" +#line 1593 "src/lexer.c" yy180: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -1742,10 +1712,10 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -1762,16 +1732,16 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kDEF); } -#line 1654 "src/lexer.c" +#line 1622 "src/lexer.c" yy183: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -1788,7 +1758,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kEND); } -#line 1678 "src/lexer.c" +#line 1646 "src/lexer.c" yy185: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -1824,10 +1794,10 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -1844,16 +1814,16 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kNIL); } -#line 1732 "src/lexer.c" +#line 1700 "src/lexer.c" yy193: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -1870,7 +1840,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kOUT); } -#line 1756 "src/lexer.c" +#line 1724 "src/lexer.c" yy195: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -1911,10 +1881,10 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -1931,7 +1901,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kTOP); } -#line 1815 "src/lexer.c" +#line 1783 "src/lexer.c" yy204: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -1957,10 +1927,10 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -1977,7 +1947,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kUSE); } -#line 1859 "src/lexer.c" +#line 1827 "src/lexer.c" yy210: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -1987,14 +1957,14 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { - if (yych <= '/') goto yy71; + if (yych <= '/') goto yy72; if (yych <= '9') goto yy251; - goto yy71; + goto yy72; } else { if (yych <= 'F') goto yy251; - if (yych <= '`') goto yy71; + if (yych <= '`') goto yy72; if (yych <= 'f') goto yy251; - goto yy71; + goto yy72; } yy212: rbs_skip(lexer); @@ -2002,68 +1972,68 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, tANNOTATION); } -#line 1882 "src/lexer.c" +#line 1850 "src/lexer.c" yy213: rbs_skip(lexer); #line 71 "src/lexer.re" { return rbs_next_token(lexer, tANNOTATION); } -#line 1887 "src/lexer.c" +#line 1855 "src/lexer.c" yy214: rbs_skip(lexer); #line 69 "src/lexer.re" { return rbs_next_token(lexer, tANNOTATION); } -#line 1892 "src/lexer.c" +#line 1860 "src/lexer.c" yy215: rbs_skip(lexer); #line 67 "src/lexer.re" { return rbs_next_token(lexer, tANNOTATION); } -#line 1897 "src/lexer.c" +#line 1865 "src/lexer.c" yy216: rbs_skip(lexer); #line 70 "src/lexer.re" { return rbs_next_token(lexer, tANNOTATION); } -#line 1902 "src/lexer.c" +#line 1870 "src/lexer.c" yy217: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { - if (yych <= '/') goto yy71; + if (yych <= '/') goto yy72; if (yych <= '9') goto yy252; - goto yy71; + goto yy72; } else { if (yych <= 'F') goto yy252; - if (yych <= '`') goto yy71; + if (yych <= '`') goto yy72; if (yych <= 'f') goto yy252; - goto yy71; + goto yy72; } yy218: rbs_skip(lexer); yych = rbs_peek(lexer); - if (yych <= '/') goto yy71; - if (yych <= '9') goto yy89; - if (yych <= '`') goto yy71; - if (yych <= 'f') goto yy89; - goto yy71; + if (yych <= '/') goto yy72; + if (yych <= '9') goto yy90; + if (yych <= '`') goto yy72; + if (yych <= 'f') goto yy90; + goto yy72; yy219: - yyaccept = 7; + yyaccept = 6; rbs_skip(lexer); backup = *lexer; yych = rbs_peek(lexer); if (yych <= '\'') { if (yych <= 0x00000000) goto yy164; - if (yych <= '&') goto yy92; + if (yych <= '&') goto yy93; goto yy163; } else { if (yych == '\\') goto yy165; - goto yy92; + goto yy93; } yy220: rbs_skip(lexer); @@ -2071,17 +2041,17 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych <= '_') { if (yych <= '@') { if (yych <= '/') goto yy221; - if (yych <= '9') goto yy107; + if (yych <= '9') goto yy108; } else { - if (yych <= 'Z') goto yy107; - if (yych >= '_') goto yy107; + if (yych <= 'Z') goto yy108; + if (yych >= '_') goto yy108; } } else { if (yych <= 0x0000007F) { if (yych <= '`') goto yy221; - if (yych <= 'z') goto yy107; + if (yych <= 'z') goto yy108; } else { - if (yych != 0x0000FFFD) goto yy107; + if (yych != 0x0000FFFD) goto yy108; } } yy221: @@ -2089,12 +2059,12 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kATRBS); } -#line 1959 "src/lexer.c" +#line 1927 "src/lexer.c" yy222: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == 'd') goto yy253; - goto yy115; + goto yy116; yy223: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -2110,10 +2080,10 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -2130,7 +2100,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kBOOL); } -#line 1998 "src/lexer.c" +#line 1966 "src/lexer.c" yy227: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -2191,10 +2161,10 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -2211,7 +2181,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kSELF); } -#line 2077 "src/lexer.c" +#line 2045 "src/lexer.c" yy240: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -2222,10 +2192,10 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -2242,16 +2212,16 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kSKIP); } -#line 2106 "src/lexer.c" +#line 2074 "src/lexer.c" yy243: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -2268,16 +2238,16 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kTRUE); } -#line 2130 "src/lexer.c" +#line 2098 "src/lexer.c" yy245: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -2294,7 +2264,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kTYPE); } -#line 2154 "src/lexer.c" +#line 2122 "src/lexer.c" yy247: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -2310,10 +2280,10 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -2330,47 +2300,47 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kVOID); } -#line 2188 "src/lexer.c" +#line 2156 "src/lexer.c" yy251: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { - if (yych <= '/') goto yy71; + if (yych <= '/') goto yy72; if (yych <= '9') goto yy273; - goto yy71; + goto yy72; } else { if (yych <= 'F') goto yy273; - if (yych <= '`') goto yy71; + if (yych <= '`') goto yy72; if (yych <= 'f') goto yy273; - goto yy71; + goto yy72; } yy252: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { - if (yych <= '/') goto yy71; + if (yych <= '/') goto yy72; if (yych <= '9') goto yy274; - goto yy71; + goto yy72; } else { if (yych <= 'F') goto yy274; - if (yych <= '`') goto yy71; + if (yych <= '`') goto yy72; if (yych <= 'f') goto yy274; - goto yy71; + goto yy72; } yy253: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == 'o') goto yy275; - goto yy115; + goto yy116; yy254: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -2387,7 +2357,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kALIAS); } -#line 2243 "src/lexer.c" +#line 2211 "src/lexer.c" yy256: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -2400,19 +2370,19 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { goto yy54; } yy257: - yyaccept = 8; + yyaccept = 7; rbs_skip(lexer); backup = *lexer; yych = rbs_peek(lexer); if (yych <= '@') { if (yych <= '-') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '-') goto yy279; } else { if (yych <= '9') { if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; } } } else { @@ -2432,7 +2402,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kCLASS); } -#line 2286 "src/lexer.c" +#line 2254 "src/lexer.c" yy259: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -2443,10 +2413,10 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -2463,7 +2433,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kFALSE); } -#line 2315 "src/lexer.c" +#line 2283 "src/lexer.c" yy262: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -2523,33 +2493,33 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { - if (yych <= '/') goto yy71; - if (yych <= '9') goto yy69; - goto yy71; + if (yych <= '/') goto yy72; + if (yych <= '9') goto yy70; + goto yy72; } else { - if (yych <= 'F') goto yy69; - if (yych <= '`') goto yy71; - if (yych <= 'f') goto yy69; - goto yy71; + if (yych <= 'F') goto yy70; + if (yych <= '`') goto yy72; + if (yych <= 'f') goto yy70; + goto yy72; } yy274: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { - if (yych <= '/') goto yy71; + if (yych <= '/') goto yy72; if (yych <= '9') goto yy296; - goto yy71; + goto yy72; } else { if (yych <= 'F') goto yy296; - if (yych <= '`') goto yy71; + if (yych <= '`') goto yy72; if (yych <= 'f') goto yy296; - goto yy71; + goto yy72; } yy275: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == '_') goto yy297; - goto yy115; + goto yy116; yy276: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -2569,16 +2539,16 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == 'a') goto yy301; - goto yy71; + goto yy72; yy280: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -2595,7 +2565,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kEXTEND); } -#line 2445 "src/lexer.c" +#line 2413 "src/lexer.c" yy282: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -2612,19 +2582,19 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { if (yych == 'a') goto yy305; goto yy54; yy285: - yyaccept = 9; + yyaccept = 8; rbs_skip(lexer); backup = *lexer; yych = rbs_peek(lexer); if (yych <= '@') { if (yych <= '-') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '-') goto yy306; } else { if (yych <= '9') { if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; } } } else { @@ -2644,7 +2614,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kMODULE); } -#line 2492 "src/lexer.c" +#line 2460 "src/lexer.c" yy287: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -2660,10 +2630,10 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -2680,16 +2650,16 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kPUBLIC); } -#line 2526 "src/lexer.c" +#line 2494 "src/lexer.c" yy291: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -2706,7 +2676,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kRETURN); } -#line 2550 "src/lexer.c" +#line 2518 "src/lexer.c" yy293: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -2726,20 +2696,20 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= '@') { - if (yych <= '/') goto yy71; - if (yych <= '9') goto yy89; - goto yy71; + if (yych <= '/') goto yy72; + if (yych <= '9') goto yy90; + goto yy72; } else { - if (yych <= 'F') goto yy89; - if (yych <= '`') goto yy71; - if (yych <= 'f') goto yy89; - goto yy71; + if (yych <= 'F') goto yy90; + if (yych <= '`') goto yy72; + if (yych <= 'f') goto yy90; + goto yy72; } yy297: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == '_') goto yy315; - goto yy115; + goto yy116; yy298: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -2759,16 +2729,16 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == 'l') goto yy320; - goto yy71; + goto yy72; yy302: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -2785,7 +2755,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kINCLUDE); } -#line 2627 "src/lexer.c" +#line 2595 "src/lexer.c" yy304: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -2801,16 +2771,16 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yych = rbs_peek(lexer); if (yych == 'a') goto yy324; if (yych == 's') goto yy325; - goto yy71; + goto yy72; yy307: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -2827,16 +2797,16 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kPREPEND); } -#line 2667 "src/lexer.c" +#line 2635 "src/lexer.c" yy309: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -2853,7 +2823,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kPRIVATE); } -#line 2691 "src/lexer.c" +#line 2659 "src/lexer.c" yy311: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -2869,10 +2839,10 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -2889,25 +2859,25 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kUNTYPED); } -#line 2725 "src/lexer.c" +#line 2693 "src/lexer.c" yy315: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; - if (yych >= '0') goto yy114; + if (yych == '!') goto yy112; + if (yych >= '0') goto yy115; } else { - if (yych == '=') goto yy112; - if (yych >= 'A') goto yy114; + if (yych == '=') goto yy113; + if (yych >= 'A') goto yy115; } } else { if (yych <= 'z') { - if (yych == '_') goto yy114; - if (yych >= 'a') goto yy114; + if (yych == '_') goto yy115; + if (yych >= 'a') goto yy115; } else { if (yych <= 0x0000007F) goto yy316; - if (yych != 0x0000FFFD) goto yy114; + if (yych != 0x0000FFFD) goto yy115; } } yy316: @@ -2915,7 +2885,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, k__TODO__); } -#line 2749 "src/lexer.c" +#line 2717 "src/lexer.c" yy317: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -2935,16 +2905,16 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == 'i') goto yy331; - goto yy71; + goto yy72; yy321: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -2961,7 +2931,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kINSTANCE); } -#line 2793 "src/lexer.c" +#line 2761 "src/lexer.c" yy323: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -2971,12 +2941,12 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == 'l') goto yy334; - goto yy71; + goto yy72; yy325: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == 'e') goto yy335; - goto yy71; + goto yy72; yy326: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -3006,16 +2976,16 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == 'a') goto yy343; - goto yy71; + goto yy72; yy332: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -3032,26 +3002,26 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kINTERFACE); } -#line 2862 "src/lexer.c" +#line 2830 "src/lexer.c" yy334: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == 'i') goto yy344; - goto yy71; + goto yy72; yy335: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == 'l') goto yy345; - goto yy71; + goto yy72; yy336: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -3068,16 +3038,16 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kSINGLETON); } -#line 2896 "src/lexer.c" +#line 2864 "src/lexer.c" yy338: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -3094,7 +3064,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kUNCHECKED); } -#line 2920 "src/lexer.c" +#line 2888 "src/lexer.c" yy340: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -3114,17 +3084,17 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == 's') goto yy351; - goto yy71; + goto yy72; yy344: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == 'a') goto yy352; - goto yy71; + goto yy72; yy345: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == 'f') goto yy353; - goto yy71; + goto yy72; yy346: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -3135,10 +3105,10 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -3155,16 +3125,16 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kATTRREADER); } -#line 2979 "src/lexer.c" +#line 2947 "src/lexer.c" yy349: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -3181,26 +3151,26 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kATTRWRITER); } -#line 3003 "src/lexer.c" +#line 2971 "src/lexer.c" yy351: rbs_skip(lexer); #line 87 "src/lexer.re" { return rbs_next_token(lexer, kCLASSALIAS); } -#line 3008 "src/lexer.c" +#line 2976 "src/lexer.c" yy352: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych == 's') goto yy355; - goto yy71; + goto yy72; yy353: rbs_skip(lexer); #line 98 "src/lexer.re" { return rbs_next_token(lexer, kMODULESELF); } -#line 3018 "src/lexer.c" +#line 2986 "src/lexer.c" yy354: rbs_skip(lexer); yych = rbs_peek(lexer); @@ -3212,16 +3182,16 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kMODULEALIAS); } -#line 3028 "src/lexer.c" +#line 2996 "src/lexer.c" yy356: rbs_skip(lexer); yych = rbs_peek(lexer); if (yych <= 'Z') { if (yych <= '9') { - if (yych == '!') goto yy111; + if (yych == '!') goto yy112; if (yych >= '0') goto yy53; } else { - if (yych == '=') goto yy112; + if (yych == '=') goto yy113; if (yych >= 'A') goto yy53; } } else { @@ -3238,7 +3208,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { { return rbs_next_token(lexer, kATTRACCESSOR); } -#line 3052 "src/lexer.c" +#line 3020 "src/lexer.c" } -#line 166 "src/lexer.re" +#line 177 "src/lexer.re" } diff --git a/src/lexer.re b/src/lexer.re index d8d4dce546..18980eacd1 100644 --- a/src/lexer.re +++ b/src/lexer.re @@ -148,6 +148,17 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) { "_" [A-Z] ident_char* { return rbs_next_token(lexer, tULIDENT); } "_" { return rbs_next_token(lexer, tULLIDENT); } + // Every ASCII spelling is covered by one of the rules above, which match + // exactly as far, and re2c settles a tie of equal length in favour of the + // rule written first. So this one is left with the names that open with a + // character outside ASCII. + // + // RBS reads the case of that character to tell a class name from an alias + // name, and outside ASCII there is no reading of it that both the lexer + // and `TypeName#kind` can agree on. Those names get a token of their own + // and the parser takes it only where the question does not come up. + ident_start ident_char* { return rbs_next_token(lexer, tNONASCIIIDENT); } + // None of these four needs to know the case of the first character, so // widening the leading position to `ident_start` is all they need. ident_start ident_char* "!" { return rbs_next_token(lexer, tBANGIDENT); } diff --git a/src/lexstate.c b/src/lexstate.c index fb9f718b35..79f2757170 100644 --- a/src/lexstate.c +++ b/src/lexstate.c @@ -74,6 +74,7 @@ static const char *RBS_TOKENTYPE_NAMES[] = { "tUIDENT", /* Identifiers starting with upper case */ "tULIDENT", /* Identifiers starting with `_` */ "tULLIDENT", + "tNONASCIIIDENT", "tGIDENT", /* Identifiers starting with `$` */ "tAIDENT", /* Identifiers starting with `@` */ "tA2IDENT", /* Identifiers starting with `@@` */ diff --git a/src/parser.c b/src/parser.c index 7be16b9f06..1690a22205 100644 --- a/src/parser.c +++ b/src/parser.c @@ -337,6 +337,7 @@ static bool is_keyword_token(enum RBSTokenType type) { case tUIDENT: case tULIDENT: case tULLIDENT: + case tNONASCIIIDENT: case tQIDENT: case tBANGIDENT: KEYWORD_CASES @@ -346,6 +347,15 @@ static bool is_keyword_token(enum RBSTokenType type) { } } +/** + * Ruby lets a local variable name open with a character outside ASCII, and a + * parameter name is a local variable name. Nothing here reads the case of that + * character, so both spellings are a name. + * */ +static bool is_param_name_token(enum RBSTokenType type) { + return type == tLIDENT || type == tNONASCIIIDENT; +} + /* function_param ::= {} | {} type @@ -664,6 +674,7 @@ static bool parse_params(rbs_parser_t *parser, method_params *params, bool forwa case tQIDENT: case tULIDENT: case tULLIDENT: + case tNONASCIIIDENT: case tBANGIDENT: KEYWORD_CASES if (is_keyword(parser)) { @@ -1841,6 +1852,7 @@ static bool parse_method_name(rbs_parser_t *parser, rbs_range_t *range, rbs_ast_ case tLIDENT: case tULIDENT: case tULLIDENT: + case tNONASCIIIDENT: KEYWORD_CASES if (parser->next_token.type == pQUESTION && parser->current_token.range.end.byte_pos == parser->next_token.range.start.byte_pos) { range->start = parser->current_token.range.start; @@ -3951,6 +3963,7 @@ static bool parse_inline_leading_annotation(rbs_parser_t *parser, rbs_ast_ruby_a return true; } case tLIDENT: + case tNONASCIIIDENT: PARAM_NAME_CASES { return parse_inline_param_type_annotation(parser, annotation, rbs_range); } @@ -3959,7 +3972,7 @@ static bool parse_inline_leading_annotation(rbs_parser_t *parser, rbs_ast_ruby_a rbs_location_range star_loc = rbs_location_range_current_token(parser); rbs_location_range name_loc = RBS_LOCATION_NULL_RANGE; - if (parser->next_token.type == tLIDENT) { + if (is_param_name_token(parser->next_token.type)) { rbs_parser_advance(parser); name_loc = rbs_location_range_current_token(parser); } @@ -3999,7 +4012,7 @@ static bool parse_inline_leading_annotation(rbs_parser_t *parser, rbs_ast_ruby_a rbs_location_range star2_loc = rbs_location_range_current_token(parser); rbs_location_range name_loc = RBS_LOCATION_NULL_RANGE; - if (parser->next_token.type == tLIDENT) { + if (is_param_name_token(parser->next_token.type)) { rbs_parser_advance(parser); name_loc = rbs_location_range_current_token(parser); } @@ -4039,7 +4052,7 @@ static bool parse_inline_leading_annotation(rbs_parser_t *parser, rbs_ast_ruby_a rbs_location_range ampersand_loc = rbs_location_range_current_token(parser); rbs_location_range name_loc = RBS_LOCATION_NULL_RANGE; - if (parser->next_token.type == tLIDENT) { + if (is_param_name_token(parser->next_token.type)) { rbs_parser_advance(parser); name_loc = rbs_location_range_current_token(parser); } diff --git a/test/rbs/type_parsing_test.rb b/test/rbs/type_parsing_test.rb index d4da7c338d..9a95f146e8 100644 --- a/test/rbs/type_parsing_test.rb +++ b/test/rbs/type_parsing_test.rb @@ -1033,14 +1033,15 @@ def test_parse__byte_range_incorrect assert_equal "position range starts inside a character: #{start}...10", exn.message end - # Byte 5 opens `🐈`, so lexing starts exactly where it was asked to. This - # is the error the three positions above used to be silently rounded up - # to. + # Byte 5 opens `🐈`, so lexing starts exactly where it was asked to. The + # character is an identifier now, but a type name may not open outside + # ASCII, so this is still a syntax error -- reported against a real token + # rather than `ErrorToken`. We want better ergonomics here eventually. exn = assert_raises RBS::ParsingError do Parser.parse_type(input, byte_range: 5...) end - assert_equal "a.rbs:1:2...1:3: Syntax error: unexpected token for simple type, token=`🐈` (ErrorToken)", exn.message + assert_equal "a.rbs:1:2...1:3: Syntax error: unexpected token for simple type, token=`🐈` (tNONASCIIIDENT)", exn.message end def test_parse__byte_range_starting_past_the_end From 053681245c66390967916bf7a02fe54633c600e5 Mon Sep 17 00:00:00 2001 From: Soutaro Matsumoto Date: Mon, 10 Aug 2026 19:20:25 +0900 Subject: [PATCH 6/8] Test and document non-ASCII identifiers Covers the names the lexer now takes -- classes, modules, constants, methods, parameters, keywords, instance and class variables, attributes, interfaces, aliases and globals -- and the line the first character draws: a name whose kind is read from it must open with ASCII, everything else need not. The negative cases run three characters through every position that reads a kind, including a titlecase letter, which Ruby does start a constant on. That is the clearest case of RBS taking less than Ruby gives, so it is worth saying in a test. ASCII-8BIT has no invalid bytes, so a high byte there is an identifier character, exactly as it is for Ruby: `\x80abc = 1` assigns a local variable. None of those bytes is ASCII, so a name may not open with one. `TypeName#kind` never sees a name that opens outside ASCII from the parser. One built by hand still can, and the test says what it reads there: nothing. --- docs/syntax.md | 12 ++++ test/rbs/parser_test.rb | 113 +++++++++++++++++++++++++++++++++++++ test/rbs/type_name_test.rb | 13 +++++ 3 files changed, 138 insertions(+) diff --git a/docs/syntax.md b/docs/syntax.md index 855f182efa..012aa243ea 100644 --- a/docs/syntax.md +++ b/docs/syntax.md @@ -48,6 +48,18 @@ _proc_ ::= `^` _parameters?_ _self-type-binding?_ _block?_ `->` _type_ | `^` `(` `?` `)` `->` _type_ # Proc type with untyped parameter ``` +`\w` above, and everywhere else in this document, is `[a-zA-Z0-9_]` together +with every character outside ASCII -- the same set Ruby takes into an +identifier. So `ServicioÚltimaVez` is a class name and `nombre_único` is an +alias name. + +The leading character is the exception. RBS reads it to tell a class name from +an interface name from an alias name, so where it makes that distinction it has +to be ASCII: `class 日本語` is a class in Ruby but not a name RBS can write. +Nowhere else is restricted -- a method name, a variable name, an instance +variable name and a class variable name may all open with any character Ruby +accepts. + ### Class instance type Class instance type denotes _an instance of a class_. diff --git a/test/rbs/parser_test.rb b/test/rbs/parser_test.rb index f78a8597d8..f0e61e7e84 100644 --- a/test/rbs/parser_test.rb +++ b/test/rbs/parser_test.rb @@ -1065,6 +1065,119 @@ def test_invalid_utf8_byte_at_top_level_raises end end + def test_non_ascii_identifiers + RBS::Parser.parse_signature(buffer(<<~RBS)).tap do |_, _, decls| + class ServicioÚltimaVez + end + + module MiMódulo + MI_CONSTANTE_Ñ: Integer + def enviar_últimas_interacciones: () -> void + def 日本語: () -> void + def únicos!: () -> void + + def con_parametros: (Integer 引数, キーワード: String) -> void + + @日本語: Integer + @@クラス変数: Integer + + attr_reader nombre_único: String + end + RBS + + assert_equal RBS::TypeName.parse("ServicioÚltimaVez"), decls[0].name + assert_equal RBS::TypeName.parse("MiMódulo"), decls[1].name + + module_members = decls[1].members + assert_equal RBS::TypeName.parse("MI_CONSTANTE_Ñ"), module_members[0].name + assert_equal :enviar_últimas_interacciones, module_members[1].name + assert_equal :日本語, module_members[2].name + assert_equal :"únicos!", module_members[3].name + + function = module_members[4].overloads[0].method_type.type + assert_equal :引数, function.required_positionals[0].name + assert_equal :キーワード, function.required_keywords.keys[0] + + assert_equal :@日本語, module_members[5].name + assert_equal :@@クラス変数, module_members[6].name + assert_equal :nombre_único, module_members[7].name + end + + RBS::Parser.parse_signature(buffer(<<~RBS)).tap do |_, _, decls| + interface _Unicós + def foo: () -> void + end + + type nombre_único = Integer + + $グローバル: Integer + RBS + + assert_equal RBS::TypeName.parse("_Unicós"), decls[0].name + assert_equal RBS::TypeName.parse("nombre_único"), decls[1].name + assert_equal :$グローバル, decls[2].name + end + end + + def test_type_name_must_start_with_ascii + # RBS reads the case of the first character to tell a class name from an + # interface name from an alias name, and outside ASCII there is no reading + # of it that both the lexer and `TypeName#kind` can agree on. So the first + # character of a name in one of those positions has to be ASCII. Ruby asks + # for no such thing -- every one of these opens a constant or a local + # variable there -- and this is where RBS takes less than Ruby gives. + ["日本語", "Ωmega", "DžFoo"].each do |name| + [ + "class #{name}\nend\n", + "module #{name}\nend\n", + "interface _#{name}\nend\n", + "type #{name} = Integer\n", + "#{name}: Integer\n", + "class Foo[#{name}]\nend\n", + "class Foo\n def f: () -> #{name}\nend\n", + ].each do |source| + assert_raises(RBS::ParsingError, source) do + RBS::Parser.parse_signature(buffer(source)) + end + end + end + end + + def test_non_ascii_identifier_in_single_byte_encoding + # In ISO-8859-1 this is one byte: `A` with a grave accent is 0xC0. The rule + # is about the character being outside ASCII, not about it taking more than + # one byte, so a single-byte encoding reaches it the same way. + inside = "class Abc\xC0\nend\n".dup.force_encoding(Encoding::ISO_8859_1) + _, _, decls = RBS::Parser.parse_signature(buffer(inside)) + assert_equal "Abc\xC0".b, decls[0].name.name.to_s.b + + leading = "class \xC0bc\nend\n".dup.force_encoding(Encoding::ISO_8859_1) + assert_raises(RBS::ParsingError) do + RBS::Parser.parse_signature(buffer(leading)) + end + + method_name = "class Foo\n def \xC0bc: () -> void\nend\n".dup.force_encoding(Encoding::ISO_8859_1) + _, _, decls = RBS::Parser.parse_signature(buffer(method_name)) + assert_equal "\xC0bc".b, decls[0].members[0].name.to_s.b + end + + def test_high_byte_in_ascii_8bit_is_an_identifier + # Every byte is a character in ASCII-8BIT, and Ruby takes any non-ASCII one + # into an identifier: `\x80abc = 1` assigns a local variable there. None of + # those bytes is ASCII, so a name may not open with one. + source = "class \x80 end".dup.force_encoding(Encoding::ASCII_8BIT) + assert_equal :tNONASCIIIDENT, RBS::Parser.lex(source).value[2].type + + method_name = "class Foo\n def \x80abc: () -> void\nend\n".dup.force_encoding(Encoding::ASCII_8BIT) + _, _, decls = RBS::Parser.parse_signature(buffer(method_name)) + assert_equal "\x80abc".b, decls[0].members[0].name.to_s.b + + alias_decl = "type \x80abc = Integer\n".dup.force_encoding(Encoding::ASCII_8BIT) + assert_raises(RBS::ParsingError) do + RBS::Parser.parse_signature(buffer(alias_decl)) + end + end + def test_utf8_replacement_character_in_comment_parses # A genuine U+FFFD (REPLACEMENT CHARACTER) is a valid 3-byte UTF-8 sequence # ("\xEF\xBF\xBD") that decodes to the multibyte dummy code point, not the diff --git a/test/rbs/type_name_test.rb b/test/rbs/type_name_test.rb index 36f8703fb6..3ef933c827 100644 --- a/test/rbs/type_name_test.rb +++ b/test/rbs/type_name_test.rb @@ -52,4 +52,17 @@ def test_intern_preserves_kind_detection assert_equal :alias, aliased.kind assert_equal :interface, interface.kind end + + def test_kind_reads_only_the_leading_ascii_character + ns = Namespace.root + + # The parser never hands `kind` a name that opens outside ASCII, because a + # type name has to start with an ASCII character to be one. A name built by + # hand still can, and `kind` reads nothing there -- no Unicode table on this + # side, which is the whole point of that restriction. + assert_equal :class, TypeName[ns, :Foo日本語].kind + assert_equal :alias, TypeName[ns, :foo日本語].kind + assert_equal :interface, TypeName[ns, :_Foo日本語].kind + assert_equal :class, TypeName[ns, :日本語].kind + end end From 9bee57c8b9490065f2aba16a1216abc42e781d0c Mon Sep 17 00:00:00 2001 From: Soutaro Matsumoto Date: Mon, 10 Aug 2026 19:20:36 +0900 Subject: [PATCH 7/8] Refresh the Unicode tables from prism 1.9.0 The three code point tables in this file are a copy of the ones in prism's `src/encoding.c`, and had fallen behind: the version they came from predates the uppercase letters that Unicode has added since. Refreshed against prism 1.9.0, which is the table Ruby 4.0 carries. Only the three lengths and the values change. Nothing in rbs reads them today -- `alpha_char`, `alnum_char` and `isupper_char` have no callers, because the lexer asks the encoding for nothing beyond the width of a character. They are part of the vendored encoding layer all the same, and a vendored copy that has drifted from its source is worse than no copy: the next reader has no way to tell which Unicode version it is looking at. --- src/util/rbs_encoding.c | 244 ++++++++++++++++++++++++++++++++-------- 1 file changed, 195 insertions(+), 49 deletions(-) diff --git a/src/util/rbs_encoding.c b/src/util/rbs_encoding.c index 1756519934..b960b633c9 100644 --- a/src/util/rbs_encoding.c +++ b/src/util/rbs_encoding.c @@ -5,7 +5,7 @@ typedef uint32_t rbs_unicode_codepoint_t; -#define UNICODE_ALPHA_CODEPOINTS_LENGTH 1450 +#define UNICODE_ALPHA_CODEPOINTS_LENGTH 1508 static const rbs_unicode_codepoint_t unicode_alpha_codepoints[UNICODE_ALPHA_CODEPOINTS_LENGTH] = { 0x100, 0x2C1, @@ -19,7 +19,7 @@ static const rbs_unicode_codepoint_t unicode_alpha_codepoints[UNICODE_ALPHA_CODE 0x2EE, 0x345, 0x345, - 0x370, + 0x363, 0x374, 0x376, 0x377, @@ -100,7 +100,9 @@ static const rbs_unicode_codepoint_t unicode_alpha_codepoints[UNICODE_ALPHA_CODE 0x870, 0x887, 0x889, - 0x88E, + 0x88F, + 0x897, + 0x897, 0x8A0, 0x8C9, 0x8D4, @@ -279,7 +281,7 @@ static const rbs_unicode_codepoint_t unicode_alpha_codepoints[UNICODE_ALPHA_CODE 0xC56, 0xC58, 0xC5A, - 0xC5D, + 0xC5C, 0xC5D, 0xC60, 0xC63, @@ -303,7 +305,7 @@ static const rbs_unicode_codepoint_t unicode_alpha_codepoints[UNICODE_ALPHA_CODE 0xCCC, 0xCD5, 0xCD6, - 0xCDD, + 0xCDC, 0xCDE, 0xCE0, 0xCE3, @@ -528,7 +530,7 @@ static const rbs_unicode_codepoint_t unicode_alpha_codepoints[UNICODE_ALPHA_CODE 0x1C5A, 0x1C7D, 0x1C80, - 0x1C88, + 0x1C8A, 0x1C90, 0x1CBA, 0x1CBD, @@ -543,7 +545,7 @@ static const rbs_unicode_codepoint_t unicode_alpha_codepoints[UNICODE_ALPHA_CODE 0x1CFA, 0x1D00, 0x1DBF, - 0x1DE7, + 0x1DD3, 0x1DF4, 0x1E00, 0x1F15, @@ -704,14 +706,8 @@ static const rbs_unicode_codepoint_t unicode_alpha_codepoints[UNICODE_ALPHA_CODE 0xA722, 0xA788, 0xA78B, - 0xA7CA, - 0xA7D0, - 0xA7D1, - 0xA7D3, - 0xA7D3, - 0xA7D5, - 0xA7D9, - 0xA7F2, + 0xA7DC, + 0xA7F1, 0xA805, 0xA807, 0xA827, @@ -891,6 +887,8 @@ static const rbs_unicode_codepoint_t unicode_alpha_codepoints[UNICODE_ALPHA_CODE 0x105B9, 0x105BB, 0x105BC, + 0x105C0, + 0x105F3, 0x10600, 0x10736, 0x10740, @@ -927,6 +925,8 @@ static const rbs_unicode_codepoint_t unicode_alpha_codepoints[UNICODE_ALPHA_CODE 0x10915, 0x10920, 0x10939, + 0x10940, + 0x10959, 0x10980, 0x109B7, 0x109BE, @@ -965,12 +965,22 @@ static const rbs_unicode_codepoint_t unicode_alpha_codepoints[UNICODE_ALPHA_CODE 0x10CF2, 0x10D00, 0x10D27, + 0x10D4A, + 0x10D65, + 0x10D69, + 0x10D69, + 0x10D6F, + 0x10D85, 0x10E80, 0x10EA9, 0x10EAB, 0x10EAC, 0x10EB0, 0x10EB1, + 0x10EC2, + 0x10EC7, + 0x10EFA, + 0x10EFC, 0x10F00, 0x10F1C, 0x10F27, @@ -1057,6 +1067,28 @@ static const rbs_unicode_codepoint_t unicode_alpha_codepoints[UNICODE_ALPHA_CODE 0x11357, 0x1135D, 0x11363, + 0x11380, + 0x11389, + 0x1138B, + 0x1138B, + 0x1138E, + 0x1138E, + 0x11390, + 0x113B5, + 0x113B7, + 0x113C0, + 0x113C2, + 0x113C2, + 0x113C5, + 0x113C5, + 0x113C7, + 0x113CA, + 0x113CC, + 0x113CD, + 0x113D1, + 0x113D1, + 0x113D3, + 0x113D3, 0x11400, 0x11441, 0x11443, @@ -1133,6 +1165,10 @@ static const rbs_unicode_codepoint_t unicode_alpha_codepoints[UNICODE_ALPHA_CODE 0x11A9D, 0x11AB0, 0x11AF8, + 0x11B60, + 0x11B67, + 0x11BC0, + 0x11BE0, 0x11C00, 0x11C08, 0x11C0A, @@ -1175,6 +1211,8 @@ static const rbs_unicode_codepoint_t unicode_alpha_codepoints[UNICODE_ALPHA_CODE 0x11D96, 0x11D98, 0x11D98, + 0x11DB0, + 0x11DDB, 0x11EE0, 0x11EF6, 0x11F00, @@ -1197,8 +1235,12 @@ static const rbs_unicode_codepoint_t unicode_alpha_codepoints[UNICODE_ALPHA_CODE 0x1342F, 0x13441, 0x13446, + 0x13460, + 0x143FA, 0x14400, 0x14646, + 0x16100, + 0x1612E, 0x16800, 0x16A38, 0x16A40, @@ -1215,8 +1257,14 @@ static const rbs_unicode_codepoint_t unicode_alpha_codepoints[UNICODE_ALPHA_CODE 0x16B77, 0x16B7D, 0x16B8F, + 0x16D40, + 0x16D6C, 0x16E40, 0x16E7F, + 0x16EA0, + 0x16EB8, + 0x16EBB, + 0x16ED3, 0x16F00, 0x16F4A, 0x16F4F, @@ -1228,13 +1276,13 @@ static const rbs_unicode_codepoint_t unicode_alpha_codepoints[UNICODE_ALPHA_CODE 0x16FE3, 0x16FE3, 0x16FF0, - 0x16FF1, + 0x16FF6, 0x17000, - 0x187F7, - 0x18800, 0x18CD5, - 0x18D00, - 0x18D08, + 0x18CFF, + 0x18D1E, + 0x18D80, + 0x18DF2, 0x1AFF0, 0x1AFF3, 0x1AFF5, @@ -1353,6 +1401,16 @@ static const rbs_unicode_codepoint_t unicode_alpha_codepoints[UNICODE_ALPHA_CODE 0x1E2EB, 0x1E4D0, 0x1E4EB, + 0x1E5D0, + 0x1E5ED, + 0x1E5F0, + 0x1E5F0, + 0x1E6C0, + 0x1E6DE, + 0x1E6E0, + 0x1E6F5, + 0x1E6FE, + 0x1E6FF, 0x1E7E0, 0x1E7E6, 0x1E7E8, @@ -1444,22 +1502,22 @@ static const rbs_unicode_codepoint_t unicode_alpha_codepoints[UNICODE_ALPHA_CODE 0x20000, 0x2A6DF, 0x2A700, - 0x2B739, - 0x2B740, 0x2B81D, 0x2B820, - 0x2CEA1, + 0x2CEAD, 0x2CEB0, 0x2EBE0, + 0x2EBF0, + 0x2EE5D, 0x2F800, 0x2FA1D, 0x30000, 0x3134A, 0x31350, - 0x323AF, + 0x33479, }; -#define UNICODE_ALNUM_CODEPOINTS_LENGTH 1528 +#define UNICODE_ALNUM_CODEPOINTS_LENGTH 1598 static const rbs_unicode_codepoint_t unicode_alnum_codepoints[UNICODE_ALNUM_CODEPOINTS_LENGTH] = { 0x100, 0x2C1, @@ -1473,7 +1531,7 @@ static const rbs_unicode_codepoint_t unicode_alnum_codepoints[UNICODE_ALNUM_CODE 0x2EE, 0x345, 0x345, - 0x370, + 0x363, 0x374, 0x376, 0x377, @@ -1552,7 +1610,9 @@ static const rbs_unicode_codepoint_t unicode_alnum_codepoints[UNICODE_ALNUM_CODE 0x870, 0x887, 0x889, - 0x88E, + 0x88F, + 0x897, + 0x897, 0x8A0, 0x8C9, 0x8D4, @@ -1739,7 +1799,7 @@ static const rbs_unicode_codepoint_t unicode_alnum_codepoints[UNICODE_ALNUM_CODE 0xC56, 0xC58, 0xC5A, - 0xC5D, + 0xC5C, 0xC5D, 0xC60, 0xC63, @@ -1765,7 +1825,7 @@ static const rbs_unicode_codepoint_t unicode_alnum_codepoints[UNICODE_ALNUM_CODE 0xCCC, 0xCD5, 0xCD6, - 0xCDD, + 0xCDC, 0xCDE, 0xCE0, 0xCE3, @@ -2010,7 +2070,7 @@ static const rbs_unicode_codepoint_t unicode_alnum_codepoints[UNICODE_ALNUM_CODE 0x1C4D, 0x1C7D, 0x1C80, - 0x1C88, + 0x1C8A, 0x1C90, 0x1CBA, 0x1CBD, @@ -2025,7 +2085,7 @@ static const rbs_unicode_codepoint_t unicode_alnum_codepoints[UNICODE_ALNUM_CODE 0x1CFA, 0x1D00, 0x1DBF, - 0x1DE7, + 0x1DD3, 0x1DF4, 0x1E00, 0x1F15, @@ -2184,14 +2244,8 @@ static const rbs_unicode_codepoint_t unicode_alnum_codepoints[UNICODE_ALNUM_CODE 0xA722, 0xA788, 0xA78B, - 0xA7CA, - 0xA7D0, - 0xA7D1, - 0xA7D3, - 0xA7D3, - 0xA7D5, - 0xA7D9, - 0xA7F2, + 0xA7DC, + 0xA7F1, 0xA805, 0xA807, 0xA827, @@ -2377,6 +2431,8 @@ static const rbs_unicode_codepoint_t unicode_alnum_codepoints[UNICODE_ALNUM_CODE 0x105B9, 0x105BB, 0x105BC, + 0x105C0, + 0x105F3, 0x10600, 0x10736, 0x10740, @@ -2413,6 +2469,8 @@ static const rbs_unicode_codepoint_t unicode_alnum_codepoints[UNICODE_ALNUM_CODE 0x10915, 0x10920, 0x10939, + 0x10940, + 0x10959, 0x10980, 0x109B7, 0x109BE, @@ -2453,12 +2511,22 @@ static const rbs_unicode_codepoint_t unicode_alnum_codepoints[UNICODE_ALNUM_CODE 0x10D27, 0x10D30, 0x10D39, + 0x10D40, + 0x10D65, + 0x10D69, + 0x10D69, + 0x10D6F, + 0x10D85, 0x10E80, 0x10EA9, 0x10EAB, 0x10EAC, 0x10EB0, 0x10EB1, + 0x10EC2, + 0x10EC7, + 0x10EFA, + 0x10EFC, 0x10F00, 0x10F1C, 0x10F27, @@ -2551,6 +2619,28 @@ static const rbs_unicode_codepoint_t unicode_alnum_codepoints[UNICODE_ALNUM_CODE 0x11357, 0x1135D, 0x11363, + 0x11380, + 0x11389, + 0x1138B, + 0x1138B, + 0x1138E, + 0x1138E, + 0x11390, + 0x113B5, + 0x113B7, + 0x113C0, + 0x113C2, + 0x113C2, + 0x113C5, + 0x113C5, + 0x113C7, + 0x113CA, + 0x113CC, + 0x113CD, + 0x113D1, + 0x113D1, + 0x113D3, + 0x113D3, 0x11400, 0x11441, 0x11443, @@ -2589,6 +2679,8 @@ static const rbs_unicode_codepoint_t unicode_alnum_codepoints[UNICODE_ALNUM_CODE 0x116B8, 0x116C0, 0x116C9, + 0x116D0, + 0x116E3, 0x11700, 0x1171A, 0x1171D, @@ -2639,6 +2731,12 @@ static const rbs_unicode_codepoint_t unicode_alnum_codepoints[UNICODE_ALNUM_CODE 0x11A9D, 0x11AB0, 0x11AF8, + 0x11B60, + 0x11B67, + 0x11BC0, + 0x11BE0, + 0x11BF0, + 0x11BF9, 0x11C00, 0x11C08, 0x11C0A, @@ -2687,6 +2785,10 @@ static const rbs_unicode_codepoint_t unicode_alnum_codepoints[UNICODE_ALNUM_CODE 0x11D98, 0x11DA0, 0x11DA9, + 0x11DB0, + 0x11DDB, + 0x11DE0, + 0x11DE9, 0x11EE0, 0x11EF6, 0x11F00, @@ -2711,8 +2813,14 @@ static const rbs_unicode_codepoint_t unicode_alnum_codepoints[UNICODE_ALNUM_CODE 0x1342F, 0x13441, 0x13446, + 0x13460, + 0x143FA, 0x14400, 0x14646, + 0x16100, + 0x1612E, + 0x16130, + 0x16139, 0x16800, 0x16A38, 0x16A40, @@ -2735,8 +2843,16 @@ static const rbs_unicode_codepoint_t unicode_alnum_codepoints[UNICODE_ALNUM_CODE 0x16B77, 0x16B7D, 0x16B8F, + 0x16D40, + 0x16D6C, + 0x16D70, + 0x16D79, 0x16E40, 0x16E7F, + 0x16EA0, + 0x16EB8, + 0x16EBB, + 0x16ED3, 0x16F00, 0x16F4A, 0x16F4F, @@ -2748,13 +2864,13 @@ static const rbs_unicode_codepoint_t unicode_alnum_codepoints[UNICODE_ALNUM_CODE 0x16FE3, 0x16FE3, 0x16FF0, - 0x16FF1, + 0x16FF6, 0x17000, - 0x187F7, - 0x18800, 0x18CD5, - 0x18D00, - 0x18D08, + 0x18CFF, + 0x18D1E, + 0x18D80, + 0x18DF2, 0x1AFF0, 0x1AFF3, 0x1AFF5, @@ -2783,6 +2899,8 @@ static const rbs_unicode_codepoint_t unicode_alnum_codepoints[UNICODE_ALNUM_CODE 0x1BC99, 0x1BC9E, 0x1BC9E, + 0x1CCF0, + 0x1CCF9, 0x1D400, 0x1D454, 0x1D456, @@ -2881,6 +2999,16 @@ static const rbs_unicode_codepoint_t unicode_alnum_codepoints[UNICODE_ALNUM_CODE 0x1E4EB, 0x1E4F0, 0x1E4F9, + 0x1E5D0, + 0x1E5ED, + 0x1E5F0, + 0x1E5FA, + 0x1E6C0, + 0x1E6DE, + 0x1E6E0, + 0x1E6F5, + 0x1E6FE, + 0x1E6FF, 0x1E7E0, 0x1E7E6, 0x1E7E8, @@ -2976,22 +3104,22 @@ static const rbs_unicode_codepoint_t unicode_alnum_codepoints[UNICODE_ALNUM_CODE 0x20000, 0x2A6DF, 0x2A700, - 0x2B739, - 0x2B740, 0x2B81D, 0x2B820, - 0x2CEA1, + 0x2CEAD, 0x2CEB0, 0x2EBE0, + 0x2EBF0, + 0x2EE5D, 0x2F800, 0x2FA1D, 0x30000, 0x3134A, 0x31350, - 0x323AF, + 0x33479, }; -#define UNICODE_ISUPPER_CODEPOINTS_LENGTH 1302 +#define UNICODE_ISUPPER_CODEPOINTS_LENGTH 1320 static const rbs_unicode_codepoint_t unicode_isupper_codepoints[UNICODE_ISUPPER_CODEPOINTS_LENGTH] = { 0x100, 0x100, @@ -3539,6 +3667,8 @@ static const rbs_unicode_codepoint_t unicode_isupper_codepoints[UNICODE_ISUPPER_ 0x10CD, 0x13A0, 0x13F5, + 0x1C89, + 0x1C89, 0x1C90, 0x1CBA, 0x1CBD, @@ -4197,12 +4327,24 @@ static const rbs_unicode_codepoint_t unicode_isupper_codepoints[UNICODE_ISUPPER_ 0xA7C7, 0xA7C9, 0xA7C9, + 0xA7CB, + 0xA7CC, + 0xA7CE, + 0xA7CE, 0xA7D0, 0xA7D0, + 0xA7D2, + 0xA7D2, + 0xA7D4, + 0xA7D4, 0xA7D6, 0xA7D6, 0xA7D8, 0xA7D8, + 0xA7DA, + 0xA7DA, + 0xA7DC, + 0xA7DC, 0xA7F5, 0xA7F5, 0xFF21, @@ -4221,10 +4363,14 @@ static const rbs_unicode_codepoint_t unicode_isupper_codepoints[UNICODE_ISUPPER_ 0x10595, 0x10C80, 0x10CB2, + 0x10D50, + 0x10D65, 0x118A0, 0x118BF, 0x16E40, 0x16E5F, + 0x16EA0, + 0x16EB8, 0x1D400, 0x1D419, 0x1D434, From b3d16a3a6febcff00a248d78d45ba0e0a1eda1af Mon Sep 17 00:00:00 2001 From: Soutaro Matsumoto Date: Wed, 12 Aug 2026 16:55:51 +0900 Subject: [PATCH 8/8] Mark src/lexer.c as generated re2c writes it and `rake confirm_lexer` keeps it honest; the file to review is src/lexer.re. `linguist-generated` collapses it in GitHub diffs and leaves it out of the language statistics. --- .gitattributes | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000..6dbb5b6441 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +src/lexer.c linguist-generated