diff --git a/config.yml b/config.yml index a760020e8..d6a3cdb6c 100644 --- a/config.yml +++ b/config.yml @@ -338,3 +338,11 @@ nodes: - name: prefix_location - name: skip_location - name: comment_location + - name: RBS::AST::Ruby::Annotations::ReturnTypeAnnotation + fields: + - name: location + - name: prefix_location + - name: return_location + - name: colon_location + - name: return_type + - name: comment_location diff --git a/ext/rbs_extension/lexer.c b/ext/rbs_extension/lexer.c index 82e530725..1a525657f 100644 --- a/ext/rbs_extension/lexer.c +++ b/ext/rbs_extension/lexer.c @@ -94,7 +94,6 @@ token rbsparser_next_token(lexstate *state) { case 'k': case 'l': case 'q': - case 'r': case 'w': case 'x': case 'y': @@ -104,24 +103,25 @@ token rbsparser_next_token(lexstate *state) { case 'n': goto yy56; case 'o': goto yy57; case 'p': goto yy58; - case 's': goto yy59; - case 't': goto yy60; - case 'u': goto yy61; - case 'v': goto yy62; - case '{': goto yy63; - case '|': goto yy64; - case '}': goto yy65; + case 'r': goto yy59; + case 's': goto yy60; + case 't': goto yy61; + case 'u': goto yy62; + case 'v': goto yy63; + case '{': goto yy64; + case '|': goto yy65; + case '}': goto yy66; default: goto yy2; } yy1: rbs_skip(state); -#line 147 "ext/rbs_extension/lexer.re" +#line 148 "ext/rbs_extension/lexer.re" { return next_eof_token(state); } #line 121 "ext/rbs_extension/lexer.c" yy2: rbs_skip(state); yy3: -#line 148 "ext/rbs_extension/lexer.re" +#line 149 "ext/rbs_extension/lexer.re" { return next_token(state, ErrorToken); } #line 127 "ext/rbs_extension/lexer.c" yy4: @@ -130,7 +130,7 @@ token rbsparser_next_token(lexstate *state) { if (yych == '\t') goto yy4; if (yych == ' ') goto yy4; yy5: -#line 146 "ext/rbs_extension/lexer.re" +#line 147 "ext/rbs_extension/lexer.re" { return next_token(state, tTRIVIA); } #line 136 "ext/rbs_extension/lexer.c" yy6: @@ -151,7 +151,7 @@ token rbsparser_next_token(lexstate *state) { backup = *state; yych = peek(state); if (yych <= 0x00000000) goto yy3; - goto yy67; + goto yy68; yy10: rbs_skip(state); yych = peek(state); @@ -173,42 +173,42 @@ token rbsparser_next_token(lexstate *state) { if (yych <= 0x0000001F) { if (yych <= '\n') { if (yych <= 0x00000000) goto yy3; - if (yych <= 0x00000008) goto yy71; + if (yych <= 0x00000008) goto yy72; goto yy3; } else { if (yych == '\r') goto yy3; - goto yy71; + goto yy72; } } else { if (yych <= '#') { if (yych <= ' ') goto yy3; - if (yych <= '"') goto yy73; - goto yy71; + if (yych <= '"') goto yy74; + goto yy72; } else { if (yych == '%') goto yy3; - if (yych <= '\'') goto yy73; + if (yych <= '\'') goto yy74; goto yy3; } } } else { if (yych <= 'Z') { if (yych <= '/') { - if (yych == '-') goto yy71; - goto yy73; + if (yych == '-') goto yy72; + goto yy74; } else { - if (yych <= '9') goto yy71; - if (yych <= '>') goto yy73; - goto yy71; + if (yych <= '9') goto yy72; + if (yych <= '>') goto yy74; + goto yy72; } } else { if (yych <= '^') { - if (yych == '\\') goto yy73; + if (yych == '\\') goto yy74; goto yy3; } else { - if (yych <= 'z') goto yy71; + if (yych <= 'z') goto yy72; if (yych <= '}') goto yy3; - if (yych <= '~') goto yy73; - goto yy71; + if (yych <= '~') goto yy74; + goto yy72; } } } @@ -217,7 +217,7 @@ token rbsparser_next_token(lexstate *state) { rbs_skip(state); backup = *state; yych = peek(state); - if (yych == 'a') goto yy74; + if (yych == 'a') goto yy75; goto yy8; yy14: rbs_skip(state); @@ -230,7 +230,7 @@ token rbsparser_next_token(lexstate *state) { backup = *state; yych = peek(state); if (yych <= 0x00000000) goto yy3; - goto yy76; + goto yy77; yy16: rbs_skip(state); #line 24 "ext/rbs_extension/lexer.re" @@ -244,7 +244,7 @@ token rbsparser_next_token(lexstate *state) { yy18: rbs_skip(state); yych = peek(state); - if (yych == '*') goto yy80; + if (yych == '*') goto yy81; #line 35 "ext/rbs_extension/lexer.re" { return next_token(state, pSTAR); } #line 251 "ext/rbs_extension/lexer.c" @@ -264,7 +264,7 @@ token rbsparser_next_token(lexstate *state) { rbs_skip(state); yych = peek(state); switch (yych) { - case '-': goto yy81; + case '-': goto yy82; case '0': case '1': case '2': @@ -275,7 +275,7 @@ token rbsparser_next_token(lexstate *state) { case '7': case '8': case '9': goto yy25; - case '>': goto yy82; + case '>': goto yy83; case '@': goto yy24; default: goto yy8; } @@ -284,7 +284,7 @@ token rbsparser_next_token(lexstate *state) { rbs_skip(state); backup = *state; yych = peek(state); - if (yych == '.') goto yy83; + if (yych == '.') goto yy84; yy23: #line 37 "ext/rbs_extension/lexer.re" { return next_token(state, pDOT); } @@ -308,25 +308,25 @@ token rbsparser_next_token(lexstate *state) { backup = *state; yych = peek(state); switch (yych) { - case '!': goto yy84; - case '"': goto yy86; - case '$': goto yy87; + case '!': goto yy85; + case '"': goto yy87; + case '$': goto yy88; case '%': case '&': case '/': case '^': case '`': case '|': - case '~': goto yy88; - case '\'': goto yy89; - case '*': goto yy90; + case '~': goto yy89; + case '\'': goto yy90; + case '*': goto yy91; case '+': - case '-': goto yy91; - case ':': goto yy92; - case '<': goto yy93; - case '=': goto yy94; - case '>': goto yy95; - case '@': goto yy96; + case '-': goto yy92; + case ':': goto yy93; + case '<': goto yy94; + case '=': goto yy95; + case '>': goto yy96; + case '@': goto yy97; case 'A': case 'B': case 'C': @@ -379,8 +379,8 @@ token rbsparser_next_token(lexstate *state) { case 'w': case 'x': case 'y': - case 'z': goto yy97; - case '[': goto yy99; + case 'z': goto yy98; + case '[': goto yy100; default: goto yy28; } yy28: @@ -392,7 +392,7 @@ token rbsparser_next_token(lexstate *state) { yych = peek(state); if (yych <= ';') goto yy30; if (yych <= '<') goto yy24; - if (yych <= '=') goto yy100; + if (yych <= '=') goto yy101; yy30: #line 46 "ext/rbs_extension/lexer.re" { return next_token(state, pLT); } @@ -402,8 +402,8 @@ token rbsparser_next_token(lexstate *state) { yych = peek(state); if (yych <= '>') { if (yych <= '<') goto yy32; - if (yych <= '=') goto yy101; - goto yy102; + if (yych <= '=') goto yy102; + goto yy103; } else { if (yych == '~') goto yy24; } @@ -430,19 +430,19 @@ token rbsparser_next_token(lexstate *state) { if (yych <= '_') { if (yych <= '@') { if (yych <= '?') goto yy3; - goto yy103; + goto yy104; } else { - if (yych <= 'Z') goto yy104; + if (yych <= 'Z') goto yy105; if (yych <= '^') goto yy3; - goto yy104; + goto yy105; } } else { if (yych <= 'q') { if (yych <= '`') goto yy3; - goto yy104; + goto yy105; } else { - if (yych <= 'r') goto yy107; - if (yych <= 'z') goto yy104; + if (yych <= 'r') goto yy108; + if (yych <= 'z') goto yy105; goto yy3; } } @@ -451,10 +451,10 @@ token rbsparser_next_token(lexstate *state) { yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy36; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { @@ -466,13 +466,13 @@ token rbsparser_next_token(lexstate *state) { } } yy37: -#line 132 "ext/rbs_extension/lexer.re" +#line 133 "ext/rbs_extension/lexer.re" { return next_token(state, tUIDENT); } #line 472 "ext/rbs_extension/lexer.c" yy38: rbs_skip(state); yych = peek(state); - if (yych == ']') goto yy110; + if (yych == ']') goto yy111; #line 26 "ext/rbs_extension/lexer.re" { return next_token(state, pLBRACKET); } #line 479 "ext/rbs_extension/lexer.c" @@ -491,23 +491,23 @@ token rbsparser_next_token(lexstate *state) { yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { - if (yych <= '9') goto yy111; - if (yych >= '=') goto yy109; + if (yych <= '9') goto yy112; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { if (yych <= '@') goto yy42; - if (yych <= 'Z') goto yy114; + if (yych <= 'Z') goto yy115; } else { - if (yych <= '_') goto yy116; + if (yych <= '_') goto yy117; if (yych <= '`') goto yy42; - if (yych <= 'z') goto yy111; + if (yych <= 'z') goto yy112; } } yy42: -#line 135 "ext/rbs_extension/lexer.re" +#line 136 "ext/rbs_extension/lexer.re" { return next_token(state, tULLIDENT); } #line 513 "ext/rbs_extension/lexer.c" yy43: @@ -517,9 +517,9 @@ token rbsparser_next_token(lexstate *state) { yych = peek(state); if (yych <= ' ') { if (yych <= 0x00000000) goto yy44; - if (yych <= 0x0000001F) goto yy117; + if (yych <= 0x0000001F) goto yy118; } else { - if (yych != ':') goto yy117; + if (yych != ':') goto yy118; } yy44: #line 39 "ext/rbs_extension/lexer.re" @@ -529,42 +529,42 @@ token rbsparser_next_token(lexstate *state) { rbs_skip(state); yych = peek(state); if (yych <= 'r') { - if (yych == 'l') goto yy118; + if (yych == 'l') goto yy119; goto yy53; } else { - if (yych <= 's') goto yy119; - if (yych <= 't') goto yy121; + if (yych <= 's') goto yy120; + if (yych <= 't') goto yy122; goto yy53; } yy46: -#line 131 "ext/rbs_extension/lexer.re" +#line 132 "ext/rbs_extension/lexer.re" { return next_token(state, tLIDENT); } #line 543 "ext/rbs_extension/lexer.c" yy47: rbs_skip(state); yych = peek(state); - if (yych == 'o') goto yy122; + if (yych == 'o') goto yy123; goto yy53; yy48: rbs_skip(state); yych = peek(state); - if (yych == 'l') goto yy123; + if (yych == 'l') goto yy124; goto yy53; yy49: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy124; + if (yych == 'e') goto yy125; goto yy53; yy50: rbs_skip(state); yych = peek(state); - if (yych == 'n') goto yy125; - if (yych == 'x') goto yy126; + if (yych == 'n') goto yy126; + if (yych == 'x') goto yy127; goto yy53; yy51: rbs_skip(state); yych = peek(state); - if (yych == 'a') goto yy127; + if (yych == 'a') goto yy128; goto yy53; yy52: rbs_skip(state); @@ -572,12 +572,12 @@ token rbsparser_next_token(lexstate *state) { yy53: if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; goto yy46; } else { if (yych <= '9') goto yy52; if (yych <= '<') goto yy46; - goto yy109; + goto yy110; } } else { if (yych <= '^') { @@ -593,90 +593,95 @@ token rbsparser_next_token(lexstate *state) { yy54: rbs_skip(state); yych = peek(state); - if (yych == 'n') goto yy128; + if (yych == 'n') goto yy129; goto yy53; yy55: rbs_skip(state); yych = peek(state); - if (yych == 'o') goto yy130; + if (yych == 'o') goto yy131; goto yy53; yy56: rbs_skip(state); yych = peek(state); - if (yych == 'i') goto yy131; + if (yych == 'i') goto yy132; goto yy53; yy57: rbs_skip(state); yych = peek(state); - if (yych == 'u') goto yy132; + if (yych == 'u') goto yy133; goto yy53; yy58: rbs_skip(state); yych = peek(state); - if (yych == 'r') goto yy133; - if (yych == 'u') goto yy134; + if (yych == 'r') goto yy134; + if (yych == 'u') goto yy135; goto yy53; yy59: + rbs_skip(state); + yych = peek(state); + if (yych == 'e') goto yy136; + goto yy53; +yy60: rbs_skip(state); yych = peek(state); if (yych <= 'h') { - if (yych == 'e') goto yy135; + if (yych == 'e') goto yy137; goto yy53; } else { - if (yych <= 'i') goto yy136; - if (yych == 'k') goto yy137; + if (yych <= 'i') goto yy138; + if (yych == 'k') goto yy139; goto yy53; } -yy60: +yy61: rbs_skip(state); yych = peek(state); if (yych <= 'q') { - if (yych == 'o') goto yy138; + if (yych == 'o') goto yy140; goto yy53; } else { - if (yych <= 'r') goto yy139; - if (yych == 'y') goto yy140; + if (yych <= 'r') goto yy141; + if (yych == 'y') goto yy142; goto yy53; } -yy61: +yy62: rbs_skip(state); yych = peek(state); - if (yych == 'n') goto yy141; - if (yych == 's') goto yy142; + if (yych == 'n') goto yy143; + if (yych == 's') goto yy144; goto yy53; -yy62: +yy63: rbs_skip(state); yych = peek(state); - if (yych == 'o') goto yy143; + if (yych == 'o') goto yy145; goto yy53; -yy63: +yy64: rbs_skip(state); #line 28 "ext/rbs_extension/lexer.re" { return next_token(state, pLBRACE); } -#line 657 "ext/rbs_extension/lexer.c" -yy64: +#line 662 "ext/rbs_extension/lexer.c" +yy65: rbs_skip(state); #line 31 "ext/rbs_extension/lexer.re" { return next_token(state, pBAR); } -#line 662 "ext/rbs_extension/lexer.c" -yy65: +#line 667 "ext/rbs_extension/lexer.c" +yy66: rbs_skip(state); #line 29 "ext/rbs_extension/lexer.re" { return next_token(state, pRBRACE); } -#line 667 "ext/rbs_extension/lexer.c" -yy66: +#line 672 "ext/rbs_extension/lexer.c" +yy67: rbs_skip(state); yych = peek(state); -yy67: +yy68: if (yych <= '"') { - if (yych <= 0x00000000) goto yy68; - if (yych <= '!') goto yy66; - goto yy69; + if (yych <= 0x00000000) goto yy69; + if (yych <= '!') goto yy67; + goto yy70; } else { - if (yych == '\\') goto yy70; - goto yy66; + if (yych == '\\') goto yy71; + goto yy67; } -yy68: +yy69: *state = backup; if (yyaccept <= 3) { if (yyaccept <= 1) { @@ -697,561 +702,556 @@ token rbsparser_next_token(lexstate *state) { if (yyaccept == 4) { goto yy44; } else { - goto yy78; + goto yy79; } } else { - goto yy159; + goto yy161; } } -yy69: +yy70: rbs_skip(state); -#line 109 "ext/rbs_extension/lexer.re" +#line 110 "ext/rbs_extension/lexer.re" { return next_token(state, tDQSTRING); } -#line 711 "ext/rbs_extension/lexer.c" -yy70: +#line 716 "ext/rbs_extension/lexer.c" +yy71: rbs_skip(state); yych = peek(state); - if (yych == 'u') goto yy144; - if (yych == 'x') goto yy145; - goto yy66; -yy71: + if (yych == 'u') goto yy146; + if (yych == 'x') goto yy147; + goto yy67; +yy72: rbs_skip(state); yych = peek(state); if (yych <= ',') { if (yych <= '\f') { - if (yych <= 0x00000000) goto yy72; - if (yych <= 0x00000008) goto yy71; - if (yych >= '\v') goto yy71; + if (yych <= 0x00000000) goto yy73; + if (yych <= 0x00000008) goto yy72; + if (yych >= '\v') goto yy72; } else { if (yych <= 0x0000001F) { - if (yych >= 0x0000000E) goto yy71; + if (yych >= 0x0000000E) goto yy72; } else { - if (yych == '#') goto yy71; + if (yych == '#') goto yy72; } } } else { if (yych <= '>') { - if (yych <= '-') goto yy71; - if (yych <= '/') goto yy72; - if (yych <= '9') goto yy71; + if (yych <= '-') goto yy72; + if (yych <= '/') goto yy73; + if (yych <= '9') goto yy72; } else { if (yych <= '^') { - if (yych <= 'Z') goto yy71; + if (yych <= 'Z') goto yy72; } else { - if (yych <= 'z') goto yy71; - if (yych >= 0x0000007F) goto yy71; + if (yych <= 'z') goto yy72; + if (yych >= 0x0000007F) goto yy72; } } } -yy72: -#line 142 "ext/rbs_extension/lexer.re" - { return next_token(state, tGIDENT); } -#line 750 "ext/rbs_extension/lexer.c" yy73: - rbs_skip(state); - goto yy72; +#line 143 "ext/rbs_extension/lexer.re" + { return next_token(state, tGIDENT); } +#line 755 "ext/rbs_extension/lexer.c" yy74: + rbs_skip(state); + goto yy73; +yy75: rbs_skip(state); yych = peek(state); if (yych <= 'Z') { if (yych <= '(') { - if (yych <= '\'') goto yy68; - goto yy146; + if (yych <= '\'') goto yy69; + goto yy148; } else { - if (yych == '<') goto yy147; - goto yy68; + if (yych == '<') goto yy149; + goto yy69; } } else { if (yych <= 'z') { - if (yych <= '[') goto yy148; - goto yy68; + if (yych <= '[') goto yy150; + goto yy69; } else { - if (yych <= '{') goto yy149; - if (yych <= '|') goto yy150; - goto yy68; + if (yych <= '{') goto yy151; + if (yych <= '|') goto yy152; + goto yy69; } } -yy75: +yy76: rbs_skip(state); yych = peek(state); -yy76: +yy77: if (yych <= '\'') { - if (yych <= 0x00000000) goto yy68; - if (yych <= '&') goto yy75; + if (yych <= 0x00000000) goto yy69; + if (yych <= '&') goto yy76; } else { - if (yych == '\\') goto yy79; - goto yy75; + if (yych == '\\') goto yy80; + goto yy76; } -yy77: - rbs_skip(state); yy78: -#line 110 "ext/rbs_extension/lexer.re" - { return next_token(state, tSQSTRING); } -#line 791 "ext/rbs_extension/lexer.c" + rbs_skip(state); yy79: +#line 111 "ext/rbs_extension/lexer.re" + { return next_token(state, tSQSTRING); } +#line 796 "ext/rbs_extension/lexer.c" +yy80: rbs_skip(state); yych = peek(state); if (yych <= '\'') { - if (yych <= 0x00000000) goto yy68; - if (yych <= '&') goto yy75; - goto yy151; + if (yych <= 0x00000000) goto yy69; + if (yych <= '&') goto yy76; + goto yy153; } else { - if (yych == '\\') goto yy79; - goto yy75; + if (yych == '\\') goto yy80; + goto yy76; } -yy80: +yy81: rbs_skip(state); #line 36 "ext/rbs_extension/lexer.re" { return next_token(state, pSTAR2); } -#line 807 "ext/rbs_extension/lexer.c" -yy81: +#line 812 "ext/rbs_extension/lexer.c" +yy82: rbs_skip(state); yych = peek(state); - if (yych >= 0x00000001) goto yy81; + if (yych >= 0x00000001) goto yy82; #line 49 "ext/rbs_extension/lexer.re" { return next_token(state, tINLINECOMMENT); } -#line 814 "ext/rbs_extension/lexer.c" -yy82: - rbs_skip(state); -#line 41 "ext/rbs_extension/lexer.re" - { return next_token(state, pARROW); } #line 819 "ext/rbs_extension/lexer.c" yy83: rbs_skip(state); - yych = peek(state); - if (yych == '.') goto yy152; - goto yy68; +#line 41 "ext/rbs_extension/lexer.re" + { return next_token(state, pARROW); } +#line 824 "ext/rbs_extension/lexer.c" yy84: rbs_skip(state); yych = peek(state); - if (yych == '=') goto yy88; - if (yych == '~') goto yy88; + if (yych == '.') goto yy154; + goto yy69; yy85: -#line 129 "ext/rbs_extension/lexer.re" - { return next_token(state, tSYMBOL); } -#line 833 "ext/rbs_extension/lexer.c" + rbs_skip(state); + yych = peek(state); + if (yych == '=') goto yy89; + if (yych == '~') goto yy89; yy86: +#line 130 "ext/rbs_extension/lexer.re" + { return next_token(state, tSYMBOL); } +#line 838 "ext/rbs_extension/lexer.c" +yy87: rbs_skip(state); yych = peek(state); if (yych <= '"') { - if (yych <= 0x00000000) goto yy68; - if (yych <= '!') goto yy86; - goto yy153; + if (yych <= 0x00000000) goto yy69; + if (yych <= '!') goto yy87; + goto yy155; } else { - if (yych == '\\') goto yy154; - goto yy86; + if (yych == '\\') goto yy156; + goto yy87; } -yy87: +yy88: rbs_skip(state); yych = peek(state); if (yych <= ')') { if (yych <= 0x0000001F) { if (yych <= '\n') { - if (yych <= 0x00000000) goto yy68; - if (yych <= 0x00000008) goto yy155; - goto yy68; + if (yych <= 0x00000000) goto yy69; + if (yych <= 0x00000008) goto yy157; + goto yy69; } else { - if (yych == '\r') goto yy68; - goto yy155; + if (yych == '\r') goto yy69; + goto yy157; } } else { if (yych <= '#') { - if (yych <= ' ') goto yy68; - if (yych <= '"') goto yy157; - goto yy155; + if (yych <= ' ') goto yy69; + if (yych <= '"') goto yy159; + goto yy157; } else { - if (yych == '%') goto yy68; - if (yych <= '\'') goto yy157; - goto yy68; + if (yych == '%') goto yy69; + if (yych <= '\'') goto yy159; + goto yy69; } } } else { if (yych <= 'Z') { if (yych <= '/') { - if (yych == '-') goto yy155; - goto yy157; + if (yych == '-') goto yy157; + goto yy159; } else { - if (yych <= '9') goto yy155; - if (yych <= '>') goto yy157; - goto yy155; + if (yych <= '9') goto yy157; + if (yych <= '>') goto yy159; + goto yy157; } } else { if (yych <= '^') { - if (yych == '\\') goto yy157; - goto yy68; + if (yych == '\\') goto yy159; + goto yy69; } else { - if (yych <= 'z') goto yy155; - if (yych <= '}') goto yy68; - if (yych <= '~') goto yy157; - goto yy155; + if (yych <= 'z') goto yy157; + if (yych <= '}') goto yy69; + if (yych <= '~') goto yy159; + goto yy157; } } } -yy88: - rbs_skip(state); - goto yy85; yy89: + rbs_skip(state); + goto yy86; +yy90: rbs_skip(state); yych = peek(state); if (yych <= '\'') { - if (yych <= 0x00000000) goto yy68; - if (yych <= '&') goto yy89; - goto yy158; + if (yych <= 0x00000000) goto yy69; + if (yych <= '&') goto yy90; + goto yy160; } else { - if (yych == '\\') goto yy160; - goto yy89; + if (yych == '\\') goto yy162; + goto yy90; } -yy90: - rbs_skip(state); - yych = peek(state); - if (yych == '*') goto yy88; - goto yy85; yy91: rbs_skip(state); yych = peek(state); - if (yych == '@') goto yy88; - goto yy85; + if (yych == '*') goto yy89; + goto yy86; yy92: rbs_skip(state); -#line 45 "ext/rbs_extension/lexer.re" - { return next_token(state, pCOLON2); } -#line 919 "ext/rbs_extension/lexer.c" + yych = peek(state); + if (yych == '@') goto yy89; + goto yy86; yy93: rbs_skip(state); - yych = peek(state); - if (yych <= ';') goto yy85; - if (yych <= '<') goto yy88; - if (yych <= '=') goto yy161; - goto yy85; +#line 45 "ext/rbs_extension/lexer.re" + { return next_token(state, pCOLON2); } +#line 924 "ext/rbs_extension/lexer.c" yy94: rbs_skip(state); yych = peek(state); - if (yych == '=') goto yy162; - if (yych == '~') goto yy88; - goto yy68; + if (yych <= ';') goto yy86; + if (yych <= '<') goto yy89; + if (yych <= '=') goto yy163; + goto yy86; yy95: rbs_skip(state); yych = peek(state); - if (yych <= '<') goto yy85; - if (yych <= '>') goto yy88; - goto yy85; + if (yych == '=') goto yy164; + if (yych == '~') goto yy89; + goto yy69; yy96: + rbs_skip(state); + yych = peek(state); + if (yych <= '<') goto yy86; + if (yych <= '>') goto yy89; + goto yy86; +yy97: rbs_skip(state); yych = peek(state); if (yych <= '^') { - if (yych <= '?') goto yy68; - if (yych <= '@') goto yy163; - if (yych <= 'Z') goto yy164; - goto yy68; + if (yych <= '?') goto yy69; + if (yych <= '@') goto yy165; + if (yych <= 'Z') goto yy166; + goto yy69; } else { - if (yych == '`') goto yy68; - if (yych <= 'z') goto yy164; - goto yy68; + if (yych == '`') goto yy69; + if (yych <= 'z') goto yy166; + goto yy69; } -yy97: +yy98: rbs_skip(state); yych = peek(state); if (yych <= '>') { if (yych <= '/') { - if (yych == '!') goto yy166; + if (yych == '!') goto yy168; } else { - if (yych <= '9') goto yy97; - if (yych == '=') goto yy166; + if (yych <= '9') goto yy98; + if (yych == '=') goto yy168; } } else { if (yych <= '^') { - if (yych <= '?') goto yy166; - if (yych <= '@') goto yy98; - if (yych <= 'Z') goto yy97; + if (yych <= '?') goto yy168; + if (yych <= '@') goto yy99; + if (yych <= 'Z') goto yy98; } else { - if (yych == '`') goto yy98; - if (yych <= 'z') goto yy97; + if (yych == '`') goto yy99; + if (yych <= 'z') goto yy98; } } -yy98: -#line 125 "ext/rbs_extension/lexer.re" - { return next_token(state, tSYMBOL); } -#line 975 "ext/rbs_extension/lexer.c" yy99: +#line 126 "ext/rbs_extension/lexer.re" + { return next_token(state, tSYMBOL); } +#line 980 "ext/rbs_extension/lexer.c" +yy100: rbs_skip(state); yych = peek(state); - if (yych == ']') goto yy162; - goto yy68; -yy100: + if (yych == ']') goto yy164; + goto yy69; +yy101: rbs_skip(state); yych = peek(state); if (yych == '>') goto yy24; goto yy8; -yy101: +yy102: rbs_skip(state); yych = peek(state); if (yych == '=') goto yy24; goto yy8; -yy102: +yy103: rbs_skip(state); #line 42 "ext/rbs_extension/lexer.re" { return next_token(state, pFATARROW); } -#line 995 "ext/rbs_extension/lexer.c" -yy103: +#line 1000 "ext/rbs_extension/lexer.c" +yy104: rbs_skip(state); yych = peek(state); if (yych <= '^') { - if (yych <= '@') goto yy68; - if (yych <= 'Z') goto yy167; - goto yy68; + if (yych <= '@') goto yy69; + if (yych <= 'Z') goto yy169; + goto yy69; } else { - if (yych == '`') goto yy68; - if (yych <= 'z') goto yy167; - goto yy68; + if (yych == '`') goto yy69; + if (yych <= 'z') goto yy169; + goto yy69; } -yy104: +yy105: rbs_skip(state); yych = peek(state); -yy105: +yy106: if (yych <= 'Z') { - if (yych <= '/') goto yy106; - if (yych <= '9') goto yy104; - if (yych >= 'A') goto yy104; + if (yych <= '/') goto yy107; + if (yych <= '9') goto yy105; + if (yych >= 'A') goto yy105; } else { if (yych <= '_') { - if (yych >= '_') goto yy104; + if (yych >= '_') goto yy105; } else { - if (yych <= '`') goto yy106; - if (yych <= 'z') goto yy104; + if (yych <= '`') goto yy107; + if (yych <= 'z') goto yy105; } } -yy106: -#line 139 "ext/rbs_extension/lexer.re" - { return next_token(state, tAIDENT); } -#line 1027 "ext/rbs_extension/lexer.c" yy107: - rbs_skip(state); - yych = peek(state); - if (yych == 'b') goto yy169; - goto yy105; +#line 140 "ext/rbs_extension/lexer.re" + { return next_token(state, tAIDENT); } +#line 1032 "ext/rbs_extension/lexer.c" yy108: rbs_skip(state); -#line 136 "ext/rbs_extension/lexer.re" - { return next_token(state, tBANGIDENT); } -#line 1037 "ext/rbs_extension/lexer.c" + yych = peek(state); + if (yych == 'b') goto yy171; + goto yy106; yy109: rbs_skip(state); #line 137 "ext/rbs_extension/lexer.re" - { return next_token(state, tEQIDENT); } + { return next_token(state, tBANGIDENT); } #line 1042 "ext/rbs_extension/lexer.c" yy110: rbs_skip(state); +#line 138 "ext/rbs_extension/lexer.re" + { return next_token(state, tEQIDENT); } +#line 1047 "ext/rbs_extension/lexer.c" +yy111: + rbs_skip(state); yych = peek(state); if (yych == '=') goto yy24; #line 47 "ext/rbs_extension/lexer.re" { return next_token(state, pAREF_OPR); } -#line 1049 "ext/rbs_extension/lexer.c" -yy111: +#line 1054 "ext/rbs_extension/lexer.c" +yy112: rbs_skip(state); yych = peek(state); -yy112: +yy113: if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { - if (yych <= '9') goto yy111; - if (yych >= '=') goto yy109; + if (yych <= '9') goto yy112; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy113; - if (yych <= 'Z') goto yy111; + if (yych <= '@') goto yy114; + if (yych <= 'Z') goto yy112; } else { - if (yych == '`') goto yy113; - if (yych <= 'z') goto yy111; + if (yych == '`') goto yy114; + if (yych <= 'z') goto yy112; } } -yy113: -#line 133 "ext/rbs_extension/lexer.re" - { return next_token(state, tULLIDENT); } -#line 1073 "ext/rbs_extension/lexer.c" yy114: +#line 134 "ext/rbs_extension/lexer.re" + { return next_token(state, tULLIDENT); } +#line 1078 "ext/rbs_extension/lexer.c" +yy115: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { - if (yych <= '9') goto yy114; - if (yych >= '=') goto yy109; + if (yych <= '9') goto yy115; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy115; - if (yych <= 'Z') goto yy114; + if (yych <= '@') goto yy116; + if (yych <= 'Z') goto yy115; } else { - if (yych == '`') goto yy115; - if (yych <= 'z') goto yy114; + if (yych == '`') goto yy116; + if (yych <= 'z') goto yy115; } } -yy115: -#line 134 "ext/rbs_extension/lexer.re" - { return next_token(state, tULIDENT); } -#line 1096 "ext/rbs_extension/lexer.c" yy116: - rbs_skip(state); - yych = peek(state); - if (yych == 't') goto yy170; - goto yy112; +#line 135 "ext/rbs_extension/lexer.re" + { return next_token(state, tULIDENT); } +#line 1101 "ext/rbs_extension/lexer.c" yy117: rbs_skip(state); yych = peek(state); - if (yych <= 0x00000000) goto yy68; - if (yych == '`') goto yy171; - goto yy117; + if (yych == 't') goto yy172; + goto yy113; yy118: rbs_skip(state); yych = peek(state); - if (yych == 'i') goto yy172; - goto yy53; + if (yych <= 0x00000000) goto yy69; + if (yych == '`') goto yy173; + goto yy118; yy119: + rbs_skip(state); + yych = peek(state); + if (yych == 'i') goto yy174; + goto yy53; +yy120: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy120; + if (yych <= '@') goto yy121; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy120; + if (yych == '`') goto yy121; if (yych <= 'z') goto yy52; } } -yy120: +yy121: #line 97 "ext/rbs_extension/lexer.re" { return next_token(state, kAS); } -#line 1135 "ext/rbs_extension/lexer.c" -yy121: - rbs_skip(state); - yych = peek(state); - if (yych == 't') goto yy173; - goto yy53; +#line 1140 "ext/rbs_extension/lexer.c" yy122: rbs_skip(state); yych = peek(state); - if (yych == 'o') goto yy174; if (yych == 't') goto yy175; goto yy53; yy123: rbs_skip(state); yych = peek(state); - if (yych == 'a') goto yy177; + if (yych == 'o') goto yy176; + if (yych == 't') goto yy177; goto yy53; yy124: rbs_skip(state); yych = peek(state); - if (yych == 'f') goto yy178; + if (yych == 'a') goto yy179; goto yy53; yy125: rbs_skip(state); yych = peek(state); - if (yych == 'd') goto yy180; + if (yych == 'f') goto yy180; goto yy53; yy126: rbs_skip(state); yych = peek(state); - if (yych == 't') goto yy182; + if (yych == 'd') goto yy182; goto yy53; yy127: rbs_skip(state); yych = peek(state); - if (yych == 'l') goto yy183; + if (yych == 't') goto yy184; goto yy53; yy128: + rbs_skip(state); + yych = peek(state); + if (yych == 'l') goto yy185; + goto yy53; +yy129: rbs_skip(state); yych = peek(state); if (yych <= '^') { if (yych <= '9') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; if (yych >= '0') goto yy52; } else { if (yych <= '=') { - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } else { - if (yych <= '@') goto yy129; + if (yych <= '@') goto yy130; if (yych <= 'Z') goto yy52; } } } else { if (yych <= 'c') { - if (yych == '`') goto yy129; + if (yych == '`') goto yy130; if (yych <= 'b') goto yy52; - goto yy184; + goto yy186; } else { if (yych <= 's') { if (yych <= 'r') goto yy52; - goto yy185; + goto yy187; } else { - if (yych <= 't') goto yy186; + if (yych <= 't') goto yy188; if (yych <= 'z') goto yy52; } } } -yy129: +yy130: #line 78 "ext/rbs_extension/lexer.re" { return next_token(state, kIN); } -#line 1205 "ext/rbs_extension/lexer.c" -yy130: - rbs_skip(state); - yych = peek(state); - if (yych == 'd') goto yy187; - goto yy53; +#line 1210 "ext/rbs_extension/lexer.c" yy131: rbs_skip(state); yych = peek(state); - if (yych == 'l') goto yy188; + if (yych == 'd') goto yy189; goto yy53; yy132: rbs_skip(state); yych = peek(state); - if (yych == 't') goto yy190; + if (yych == 'l') goto yy190; goto yy53; yy133: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy192; - if (yych == 'i') goto yy193; + if (yych == 't') goto yy192; goto yy53; yy134: rbs_skip(state); yych = peek(state); - if (yych == 'b') goto yy194; + if (yych == 'e') goto yy194; + if (yych == 'i') goto yy195; goto yy53; yy135: rbs_skip(state); yych = peek(state); - if (yych == 'l') goto yy195; + if (yych == 'b') goto yy196; goto yy53; yy136: rbs_skip(state); yych = peek(state); - if (yych == 'n') goto yy196; + if (yych == 't') goto yy197; goto yy53; yy137: rbs_skip(state); yych = peek(state); - if (yych == 'i') goto yy197; + if (yych == 'l') goto yy198; goto yy53; yy138: rbs_skip(state); yych = peek(state); - if (yych == 'p') goto yy198; + if (yych == 'n') goto yy199; goto yy53; yy139: rbs_skip(state); yych = peek(state); - if (yych == 'u') goto yy200; + if (yych == 'i') goto yy200; goto yy53; yy140: rbs_skip(state); @@ -1261,1533 +1261,1581 @@ token rbsparser_next_token(lexstate *state) { yy141: rbs_skip(state); yych = peek(state); - if (yych == 'c') goto yy202; - if (yych == 't') goto yy203; + if (yych == 'u') goto yy203; goto yy53; yy142: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy204; + if (yych == 'p') goto yy204; goto yy53; yy143: rbs_skip(state); yych = peek(state); - if (yych == 'i') goto yy206; + if (yych == 'c') goto yy205; + if (yych == 't') goto yy206; goto yy53; yy144: rbs_skip(state); yych = peek(state); - if (yych <= '@') { - if (yych <= '/') goto yy68; - if (yych <= '9') goto yy207; - goto yy68; - } else { - if (yych <= 'F') goto yy207; - if (yych <= '`') goto yy68; - if (yych <= 'f') goto yy207; - goto yy68; - } + if (yych == 'e') goto yy207; + goto yy53; yy145: rbs_skip(state); yych = peek(state); - if (yych <= '/') goto yy68; - if (yych <= '9') goto yy66; - if (yych <= '`') goto yy68; - if (yych <= 'f') goto yy66; - goto yy68; + if (yych == 'i') goto yy209; + goto yy53; yy146: rbs_skip(state); yych = peek(state); - if (yych <= 0x00000000) goto yy68; - if (yych == ')') goto yy208; - goto yy146; + if (yych <= '@') { + if (yych <= '/') goto yy69; + if (yych <= '9') goto yy210; + goto yy69; + } else { + if (yych <= 'F') goto yy210; + if (yych <= '`') goto yy69; + if (yych <= 'f') goto yy210; + goto yy69; + } yy147: rbs_skip(state); yych = peek(state); - if (yych <= 0x00000000) goto yy68; - if (yych == '>') goto yy209; - goto yy147; + if (yych <= '/') goto yy69; + if (yych <= '9') goto yy67; + if (yych <= '`') goto yy69; + if (yych <= 'f') goto yy67; + goto yy69; yy148: rbs_skip(state); yych = peek(state); - if (yych <= 0x00000000) goto yy68; - if (yych == ']') goto yy210; + if (yych <= 0x00000000) goto yy69; + if (yych == ')') goto yy211; goto yy148; yy149: rbs_skip(state); yych = peek(state); - if (yych <= 0x00000000) goto yy68; - if (yych == '}') goto yy211; + if (yych <= 0x00000000) goto yy69; + if (yych == '>') goto yy212; goto yy149; yy150: rbs_skip(state); yych = peek(state); - if (yych <= 0x00000000) goto yy68; - if (yych == '|') goto yy212; + if (yych <= 0x00000000) goto yy69; + if (yych == ']') goto yy213; goto yy150; yy151: + rbs_skip(state); + yych = peek(state); + if (yych <= 0x00000000) goto yy69; + if (yych == '}') goto yy214; + goto yy151; +yy152: + rbs_skip(state); + yych = peek(state); + if (yych <= 0x00000000) goto yy69; + if (yych == '|') goto yy215; + goto yy152; +yy153: yyaccept = 5; rbs_skip(state); backup = *state; yych = peek(state); if (yych <= '\'') { - if (yych <= 0x00000000) goto yy78; - if (yych <= '&') goto yy75; - goto yy77; + if (yych <= 0x00000000) goto yy79; + if (yych <= '&') goto yy76; + goto yy78; } else { - if (yych == '\\') goto yy79; - goto yy75; + if (yych == '\\') goto yy80; + goto yy76; } -yy152: +yy154: rbs_skip(state); #line 38 "ext/rbs_extension/lexer.re" { return next_token(state, pDOT3); } -#line 1346 "ext/rbs_extension/lexer.c" -yy153: +#line 1356 "ext/rbs_extension/lexer.c" +yy155: rbs_skip(state); -#line 111 "ext/rbs_extension/lexer.re" +#line 112 "ext/rbs_extension/lexer.re" { return next_token(state, tDQSYMBOL); } -#line 1351 "ext/rbs_extension/lexer.c" -yy154: +#line 1361 "ext/rbs_extension/lexer.c" +yy156: rbs_skip(state); yych = peek(state); - if (yych == 'u') goto yy213; - if (yych == 'x') goto yy214; - goto yy86; -yy155: + if (yych == 'u') goto yy216; + if (yych == 'x') goto yy217; + goto yy87; +yy157: rbs_skip(state); yych = peek(state); if (yych <= ',') { if (yych <= '\f') { - if (yych <= 0x00000000) goto yy156; - if (yych <= 0x00000008) goto yy155; - if (yych >= '\v') goto yy155; + if (yych <= 0x00000000) goto yy158; + if (yych <= 0x00000008) goto yy157; + if (yych >= '\v') goto yy157; } else { if (yych <= 0x0000001F) { - if (yych >= 0x0000000E) goto yy155; + if (yych >= 0x0000000E) goto yy157; } else { - if (yych == '#') goto yy155; + if (yych == '#') goto yy157; } } } else { if (yych <= '>') { - if (yych <= '-') goto yy155; - if (yych <= '/') goto yy156; - if (yych <= '9') goto yy155; + if (yych <= '-') goto yy157; + if (yych <= '/') goto yy158; + if (yych <= '9') goto yy157; } else { if (yych <= '^') { - if (yych <= 'Z') goto yy155; + if (yych <= 'Z') goto yy157; } else { - if (yych <= 'z') goto yy155; - if (yych >= 0x0000007F) goto yy155; + if (yych <= 'z') goto yy157; + if (yych >= 0x0000007F) goto yy157; } } } -yy156: -#line 128 "ext/rbs_extension/lexer.re" +yy158: +#line 129 "ext/rbs_extension/lexer.re" { return next_token(state, tSYMBOL); } -#line 1390 "ext/rbs_extension/lexer.c" -yy157: +#line 1400 "ext/rbs_extension/lexer.c" +yy159: rbs_skip(state); - goto yy156; -yy158: + goto yy158; +yy160: rbs_skip(state); -yy159: -#line 112 "ext/rbs_extension/lexer.re" +yy161: +#line 113 "ext/rbs_extension/lexer.re" { return next_token(state, tSQSYMBOL); } -#line 1399 "ext/rbs_extension/lexer.c" -yy160: +#line 1409 "ext/rbs_extension/lexer.c" +yy162: rbs_skip(state); yych = peek(state); if (yych <= '\'') { - if (yych <= 0x00000000) goto yy68; - if (yych <= '&') goto yy89; - goto yy215; + if (yych <= 0x00000000) goto yy69; + if (yych <= '&') goto yy90; + goto yy218; } else { - if (yych == '\\') goto yy160; - goto yy89; + if (yych == '\\') goto yy162; + goto yy90; } -yy161: +yy163: rbs_skip(state); yych = peek(state); - if (yych == '>') goto yy88; - goto yy85; -yy162: + if (yych == '>') goto yy89; + goto yy86; +yy164: rbs_skip(state); yych = peek(state); - if (yych == '=') goto yy88; - goto yy85; -yy163: + if (yych == '=') goto yy89; + goto yy86; +yy165: rbs_skip(state); yych = peek(state); if (yych <= '^') { - if (yych <= '@') goto yy68; - if (yych <= 'Z') goto yy216; - goto yy68; + if (yych <= '@') goto yy69; + if (yych <= 'Z') goto yy219; + goto yy69; } else { - if (yych == '`') goto yy68; - if (yych <= 'z') goto yy216; - goto yy68; + if (yych == '`') goto yy69; + if (yych <= 'z') goto yy219; + goto yy69; } -yy164: +yy166: rbs_skip(state); yych = peek(state); if (yych <= '>') { if (yych <= '/') { - if (yych == '!') goto yy218; + if (yych == '!') goto yy221; } else { - if (yych <= '9') goto yy164; - if (yych == '=') goto yy218; + if (yych <= '9') goto yy166; + if (yych == '=') goto yy221; } } else { if (yych <= '^') { - if (yych <= '?') goto yy218; - if (yych <= '@') goto yy165; - if (yych <= 'Z') goto yy164; + if (yych <= '?') goto yy221; + if (yych <= '@') goto yy167; + if (yych <= 'Z') goto yy166; } else { - if (yych == '`') goto yy165; - if (yych <= 'z') goto yy164; + if (yych == '`') goto yy167; + if (yych <= 'z') goto yy166; } } -yy165: -#line 126 "ext/rbs_extension/lexer.re" +yy167: +#line 127 "ext/rbs_extension/lexer.re" { return next_token(state, tSYMBOL); } -#line 1456 "ext/rbs_extension/lexer.c" -yy166: +#line 1466 "ext/rbs_extension/lexer.c" +yy168: rbs_skip(state); - goto yy98; -yy167: + goto yy99; +yy169: rbs_skip(state); yych = peek(state); if (yych <= 'Z') { - if (yych <= '/') goto yy168; - if (yych <= '9') goto yy167; - if (yych >= 'A') goto yy167; + if (yych <= '/') goto yy170; + if (yych <= '9') goto yy169; + if (yych >= 'A') goto yy169; } else { if (yych <= '_') { - if (yych >= '_') goto yy167; + if (yych >= '_') goto yy169; } else { - if (yych <= '`') goto yy168; - if (yych <= 'z') goto yy167; + if (yych <= '`') goto yy170; + if (yych <= 'z') goto yy169; } } -yy168: -#line 140 "ext/rbs_extension/lexer.re" +yy170: +#line 141 "ext/rbs_extension/lexer.re" { return next_token(state, tA2IDENT); } -#line 1478 "ext/rbs_extension/lexer.c" -yy169: +#line 1488 "ext/rbs_extension/lexer.c" +yy171: rbs_skip(state); yych = peek(state); - if (yych == 's') goto yy219; - goto yy105; -yy170: + if (yych == 's') goto yy222; + goto yy106; +yy172: rbs_skip(state); yych = peek(state); - if (yych == 'o') goto yy221; - goto yy112; -yy171: + if (yych == 'o') goto yy224; + goto yy113; +yy173: rbs_skip(state); #line 40 "ext/rbs_extension/lexer.re" { return next_token(state, tQIDENT); } -#line 1493 "ext/rbs_extension/lexer.c" -yy172: +#line 1503 "ext/rbs_extension/lexer.c" +yy174: rbs_skip(state); yych = peek(state); - if (yych == 'a') goto yy222; + if (yych == 'a') goto yy225; goto yy53; -yy173: +yy175: rbs_skip(state); yych = peek(state); - if (yych == 'r') goto yy223; + if (yych == 'r') goto yy226; goto yy53; -yy174: +yy176: rbs_skip(state); yych = peek(state); - if (yych == 'l') goto yy224; + if (yych == 'l') goto yy227; goto yy53; -yy175: +yy177: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy176; + if (yych <= '@') goto yy178; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy176; + if (yych == '`') goto yy178; if (yych <= 'z') goto yy52; } } -yy176: +yy178: #line 72 "ext/rbs_extension/lexer.re" { return next_token(state, kBOT); } -#line 1531 "ext/rbs_extension/lexer.c" -yy177: +#line 1541 "ext/rbs_extension/lexer.c" +yy179: rbs_skip(state); yych = peek(state); - if (yych == 's') goto yy226; + if (yych == 's') goto yy229; goto yy53; -yy178: +yy180: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy179; + if (yych <= '@') goto yy181; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy179; + if (yych == '`') goto yy181; if (yych <= 'z') goto yy52; } } -yy179: +yy181: #line 74 "ext/rbs_extension/lexer.re" { return next_token(state, kDEF); } -#line 1559 "ext/rbs_extension/lexer.c" -yy180: +#line 1569 "ext/rbs_extension/lexer.c" +yy182: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy181; + if (yych <= '@') goto yy183; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy181; + if (yych == '`') goto yy183; if (yych <= 'z') goto yy52; } } -yy181: +yy183: #line 75 "ext/rbs_extension/lexer.re" { return next_token(state, kEND); } -#line 1582 "ext/rbs_extension/lexer.c" -yy182: +#line 1592 "ext/rbs_extension/lexer.c" +yy184: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy227; + if (yych == 'e') goto yy230; goto yy53; -yy183: +yy185: rbs_skip(state); yych = peek(state); - if (yych == 's') goto yy228; + if (yych == 's') goto yy231; goto yy53; -yy184: +yy186: rbs_skip(state); yych = peek(state); - if (yych == 'l') goto yy229; + if (yych == 'l') goto yy232; goto yy53; -yy185: +yy187: rbs_skip(state); yych = peek(state); - if (yych == 't') goto yy230; + if (yych == 't') goto yy233; goto yy53; -yy186: +yy188: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy231; + if (yych == 'e') goto yy234; goto yy53; -yy187: +yy189: rbs_skip(state); yych = peek(state); - if (yych == 'u') goto yy232; + if (yych == 'u') goto yy235; goto yy53; -yy188: +yy190: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy189; + if (yych <= '@') goto yy191; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy189; + if (yych == '`') goto yy191; if (yych <= 'z') goto yy52; } } -yy189: +yy191: #line 83 "ext/rbs_extension/lexer.re" { return next_token(state, kNIL); } -#line 1635 "ext/rbs_extension/lexer.c" -yy190: +#line 1645 "ext/rbs_extension/lexer.c" +yy192: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy191; + if (yych <= '@') goto yy193; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy191; + if (yych == '`') goto yy193; if (yych <= 'z') goto yy52; } } -yy191: +yy193: #line 84 "ext/rbs_extension/lexer.re" { return next_token(state, kOUT); } -#line 1658 "ext/rbs_extension/lexer.c" -yy192: +#line 1668 "ext/rbs_extension/lexer.c" +yy194: rbs_skip(state); yych = peek(state); - if (yych == 'p') goto yy233; + if (yych == 'p') goto yy236; goto yy53; -yy193: +yy195: rbs_skip(state); yych = peek(state); - if (yych == 'v') goto yy234; + if (yych == 'v') goto yy237; goto yy53; -yy194: +yy196: rbs_skip(state); yych = peek(state); - if (yych == 'l') goto yy235; + if (yych == 'l') goto yy238; goto yy53; -yy195: +yy197: rbs_skip(state); yych = peek(state); - if (yych == 'f') goto yy236; + if (yych == 'u') goto yy239; goto yy53; -yy196: +yy198: rbs_skip(state); yych = peek(state); - if (yych == 'g') goto yy238; + if (yych == 'f') goto yy240; goto yy53; -yy197: +yy199: rbs_skip(state); yych = peek(state); - if (yych == 'p') goto yy239; + if (yych == 'g') goto yy242; goto yy53; -yy198: +yy200: + rbs_skip(state); + yych = peek(state); + if (yych == 'p') goto yy243; + goto yy53; +yy201: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy199; + if (yych <= '@') goto yy202; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy199; + if (yych == '`') goto yy202; if (yych <= 'z') goto yy52; } } -yy199: +yy202: #line 90 "ext/rbs_extension/lexer.re" { return next_token(state, kTOP); } -#line 1711 "ext/rbs_extension/lexer.c" -yy200: +#line 1726 "ext/rbs_extension/lexer.c" +yy203: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy241; + if (yych == 'e') goto yy245; goto yy53; -yy201: +yy204: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy243; + if (yych == 'e') goto yy247; goto yy53; -yy202: +yy205: rbs_skip(state); yych = peek(state); - if (yych == 'h') goto yy245; + if (yych == 'h') goto yy249; goto yy53; -yy203: +yy206: rbs_skip(state); yych = peek(state); - if (yych == 'y') goto yy246; + if (yych == 'y') goto yy250; goto yy53; -yy204: +yy207: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy205; + if (yych <= '@') goto yy208; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy205; + if (yych == '`') goto yy208; if (yych <= 'z') goto yy52; } } -yy205: +yy208: #line 96 "ext/rbs_extension/lexer.re" { return next_token(state, kUSE); } -#line 1754 "ext/rbs_extension/lexer.c" -yy206: +#line 1769 "ext/rbs_extension/lexer.c" +yy209: rbs_skip(state); yych = peek(state); - if (yych == 'd') goto yy247; + if (yych == 'd') goto yy251; goto yy53; -yy207: +yy210: rbs_skip(state); yych = peek(state); if (yych <= '@') { - if (yych <= '/') goto yy68; - if (yych <= '9') goto yy249; - goto yy68; + if (yych <= '/') goto yy69; + if (yych <= '9') goto yy253; + goto yy69; } else { - if (yych <= 'F') goto yy249; - if (yych <= '`') goto yy68; - if (yych <= 'f') goto yy249; - goto yy68; + if (yych <= 'F') goto yy253; + if (yych <= '`') goto yy69; + if (yych <= 'f') goto yy253; + goto yy69; } -yy208: +yy211: rbs_skip(state); #line 55 "ext/rbs_extension/lexer.re" { return next_token(state, tANNOTATION); } -#line 1777 "ext/rbs_extension/lexer.c" -yy209: +#line 1792 "ext/rbs_extension/lexer.c" +yy212: rbs_skip(state); #line 58 "ext/rbs_extension/lexer.re" { return next_token(state, tANNOTATION); } -#line 1782 "ext/rbs_extension/lexer.c" -yy210: +#line 1797 "ext/rbs_extension/lexer.c" +yy213: rbs_skip(state); #line 56 "ext/rbs_extension/lexer.re" { return next_token(state, tANNOTATION); } -#line 1787 "ext/rbs_extension/lexer.c" -yy211: +#line 1802 "ext/rbs_extension/lexer.c" +yy214: rbs_skip(state); #line 54 "ext/rbs_extension/lexer.re" { return next_token(state, tANNOTATION); } -#line 1792 "ext/rbs_extension/lexer.c" -yy212: +#line 1807 "ext/rbs_extension/lexer.c" +yy215: rbs_skip(state); #line 57 "ext/rbs_extension/lexer.re" { return next_token(state, tANNOTATION); } -#line 1797 "ext/rbs_extension/lexer.c" -yy213: +#line 1812 "ext/rbs_extension/lexer.c" +yy216: rbs_skip(state); yych = peek(state); if (yych <= '@') { - if (yych <= '/') goto yy68; - if (yych <= '9') goto yy250; - goto yy68; + if (yych <= '/') goto yy69; + if (yych <= '9') goto yy254; + goto yy69; } else { - if (yych <= 'F') goto yy250; - if (yych <= '`') goto yy68; - if (yych <= 'f') goto yy250; - goto yy68; + if (yych <= 'F') goto yy254; + if (yych <= '`') goto yy69; + if (yych <= 'f') goto yy254; + goto yy69; } -yy214: +yy217: rbs_skip(state); yych = peek(state); - if (yych <= '/') goto yy68; - if (yych <= '9') goto yy86; - if (yych <= '`') goto yy68; - if (yych <= 'f') goto yy86; - goto yy68; -yy215: + if (yych <= '/') goto yy69; + if (yych <= '9') goto yy87; + if (yych <= '`') goto yy69; + if (yych <= 'f') goto yy87; + goto yy69; +yy218: yyaccept = 6; rbs_skip(state); backup = *state; yych = peek(state); if (yych <= '\'') { - if (yych <= 0x00000000) goto yy159; - if (yych <= '&') goto yy89; - goto yy158; + if (yych <= 0x00000000) goto yy161; + if (yych <= '&') goto yy90; + goto yy160; } else { - if (yych == '\\') goto yy160; - goto yy89; + if (yych == '\\') goto yy162; + goto yy90; } -yy216: +yy219: rbs_skip(state); yych = peek(state); if (yych <= '>') { if (yych <= '/') { - if (yych == '!') goto yy251; + if (yych == '!') goto yy255; } else { - if (yych <= '9') goto yy216; - if (yych == '=') goto yy251; + if (yych <= '9') goto yy219; + if (yych == '=') goto yy255; } } else { if (yych <= '^') { - if (yych <= '?') goto yy251; - if (yych <= '@') goto yy217; - if (yych <= 'Z') goto yy216; + if (yych <= '?') goto yy255; + if (yych <= '@') goto yy220; + if (yych <= 'Z') goto yy219; } else { - if (yych == '`') goto yy217; - if (yych <= 'z') goto yy216; + if (yych == '`') goto yy220; + if (yych <= 'z') goto yy219; } } -yy217: -#line 127 "ext/rbs_extension/lexer.re" +yy220: +#line 128 "ext/rbs_extension/lexer.re" { return next_token(state, tSYMBOL); } -#line 1855 "ext/rbs_extension/lexer.c" -yy218: +#line 1870 "ext/rbs_extension/lexer.c" +yy221: rbs_skip(state); - goto yy165; -yy219: + goto yy167; +yy222: rbs_skip(state); yych = peek(state); if (yych <= 'Z') { - if (yych <= '/') goto yy220; - if (yych <= '9') goto yy104; - if (yych >= 'A') goto yy104; + if (yych <= '/') goto yy223; + if (yych <= '9') goto yy105; + if (yych >= 'A') goto yy105; } else { if (yych <= '_') { - if (yych >= '_') goto yy104; + if (yych >= '_') goto yy105; } else { - if (yych <= '`') goto yy220; - if (yych <= 'z') goto yy104; + if (yych <= '`') goto yy223; + if (yych <= 'z') goto yy105; } } -yy220: +yy223: #line 99 "ext/rbs_extension/lexer.re" { return next_token(state, kATRBS); } -#line 1877 "ext/rbs_extension/lexer.c" -yy221: +#line 1892 "ext/rbs_extension/lexer.c" +yy224: rbs_skip(state); yych = peek(state); - if (yych == 'd') goto yy252; - goto yy112; -yy222: + if (yych == 'd') goto yy256; + goto yy113; +yy225: rbs_skip(state); yych = peek(state); - if (yych == 's') goto yy253; + if (yych == 's') goto yy257; goto yy53; -yy223: +yy226: rbs_skip(state); yych = peek(state); - if (yych == '_') goto yy255; + if (yych == '_') goto yy259; goto yy53; -yy224: +yy227: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy225; + if (yych <= '@') goto yy228; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy225; + if (yych == '`') goto yy228; if (yych <= 'z') goto yy52; } } -yy225: +yy228: #line 71 "ext/rbs_extension/lexer.re" { return next_token(state, kBOOL); } -#line 1915 "ext/rbs_extension/lexer.c" -yy226: +#line 1930 "ext/rbs_extension/lexer.c" +yy229: rbs_skip(state); yych = peek(state); - if (yych == 's') goto yy256; + if (yych == 's') goto yy260; goto yy53; -yy227: +yy230: rbs_skip(state); yych = peek(state); - if (yych == 'n') goto yy258; + if (yych == 'n') goto yy262; goto yy53; -yy228: +yy231: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy259; + if (yych == 'e') goto yy263; goto yy53; -yy229: +yy232: rbs_skip(state); yych = peek(state); - if (yych == 'u') goto yy261; + if (yych == 'u') goto yy265; goto yy53; -yy230: +yy233: rbs_skip(state); yych = peek(state); - if (yych == 'a') goto yy262; + if (yych == 'a') goto yy266; goto yy53; -yy231: +yy234: rbs_skip(state); yych = peek(state); - if (yych == 'r') goto yy263; + if (yych == 'r') goto yy267; goto yy53; -yy232: +yy235: rbs_skip(state); yych = peek(state); - if (yych == 'l') goto yy264; + if (yych == 'l') goto yy268; goto yy53; -yy233: +yy236: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy265; + if (yych == 'e') goto yy269; goto yy53; -yy234: +yy237: rbs_skip(state); yych = peek(state); - if (yych == 'a') goto yy266; + if (yych == 'a') goto yy270; goto yy53; -yy235: +yy238: rbs_skip(state); yych = peek(state); - if (yych == 'i') goto yy267; + if (yych == 'i') goto yy271; goto yy53; -yy236: +yy239: + rbs_skip(state); + yych = peek(state); + if (yych == 'r') goto yy272; + goto yy53; +yy240: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy237; + if (yych <= '@') goto yy241; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy237; + if (yych == '`') goto yy241; if (yych <= 'z') goto yy52; } } -yy237: +yy241: #line 88 "ext/rbs_extension/lexer.re" { return next_token(state, kSELF); } -#line 1988 "ext/rbs_extension/lexer.c" -yy238: +#line 2008 "ext/rbs_extension/lexer.c" +yy242: rbs_skip(state); yych = peek(state); - if (yych == 'l') goto yy268; + if (yych == 'l') goto yy273; goto yy53; -yy239: +yy243: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy240; + if (yych <= '@') goto yy244; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy240; + if (yych == '`') goto yy244; if (yych <= 'z') goto yy52; } } -yy240: +yy244: #line 100 "ext/rbs_extension/lexer.re" { return next_token(state, kSKIP); } -#line 2016 "ext/rbs_extension/lexer.c" -yy241: +#line 2036 "ext/rbs_extension/lexer.c" +yy245: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy242; + if (yych <= '@') goto yy246; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy242; + if (yych == '`') goto yy246; if (yych <= 'z') goto yy52; } } -yy242: +yy246: #line 91 "ext/rbs_extension/lexer.re" { return next_token(state, kTRUE); } -#line 2039 "ext/rbs_extension/lexer.c" -yy243: +#line 2059 "ext/rbs_extension/lexer.c" +yy247: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy244; + if (yych <= '@') goto yy248; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy244; + if (yych == '`') goto yy248; if (yych <= 'z') goto yy52; } } -yy244: +yy248: #line 92 "ext/rbs_extension/lexer.re" { return next_token(state, kTYPE); } -#line 2062 "ext/rbs_extension/lexer.c" -yy245: +#line 2082 "ext/rbs_extension/lexer.c" +yy249: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy269; + if (yych == 'e') goto yy274; goto yy53; -yy246: +yy250: rbs_skip(state); yych = peek(state); - if (yych == 'p') goto yy270; + if (yych == 'p') goto yy275; goto yy53; -yy247: +yy251: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy248; + if (yych <= '@') goto yy252; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy248; + if (yych == '`') goto yy252; if (yych <= 'z') goto yy52; } } -yy248: +yy252: #line 95 "ext/rbs_extension/lexer.re" { return next_token(state, kVOID); } -#line 2095 "ext/rbs_extension/lexer.c" -yy249: +#line 2115 "ext/rbs_extension/lexer.c" +yy253: rbs_skip(state); yych = peek(state); if (yych <= '@') { - if (yych <= '/') goto yy68; - if (yych <= '9') goto yy271; - goto yy68; + if (yych <= '/') goto yy69; + if (yych <= '9') goto yy276; + goto yy69; } else { - if (yych <= 'F') goto yy271; - if (yych <= '`') goto yy68; - if (yych <= 'f') goto yy271; - goto yy68; + if (yych <= 'F') goto yy276; + if (yych <= '`') goto yy69; + if (yych <= 'f') goto yy276; + goto yy69; } -yy250: +yy254: rbs_skip(state); yych = peek(state); if (yych <= '@') { - if (yych <= '/') goto yy68; - if (yych <= '9') goto yy272; - goto yy68; + if (yych <= '/') goto yy69; + if (yych <= '9') goto yy277; + goto yy69; } else { - if (yych <= 'F') goto yy272; - if (yych <= '`') goto yy68; - if (yych <= 'f') goto yy272; - goto yy68; + if (yych <= 'F') goto yy277; + if (yych <= '`') goto yy69; + if (yych <= 'f') goto yy277; + goto yy69; } -yy251: +yy255: rbs_skip(state); - goto yy217; -yy252: + goto yy220; +yy256: rbs_skip(state); yych = peek(state); - if (yych == 'o') goto yy273; - goto yy112; -yy253: + if (yych == 'o') goto yy278; + goto yy113; +yy257: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy254; + if (yych <= '@') goto yy258; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy254; + if (yych == '`') goto yy258; if (yych <= 'z') goto yy52; } } -yy254: +yy258: #line 67 "ext/rbs_extension/lexer.re" { return next_token(state, kALIAS); } -#line 2152 "ext/rbs_extension/lexer.c" -yy255: +#line 2172 "ext/rbs_extension/lexer.c" +yy259: rbs_skip(state); yych = peek(state); if (yych <= 'q') { - if (yych == 'a') goto yy274; + if (yych == 'a') goto yy279; goto yy53; } else { - if (yych <= 'r') goto yy275; - if (yych == 'w') goto yy276; + if (yych <= 'r') goto yy280; + if (yych == 'w') goto yy281; goto yy53; } -yy256: +yy260: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy257; + if (yych <= '@') goto yy261; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy257; + if (yych == '`') goto yy261; if (yych <= 'z') goto yy52; } } -yy257: +yy261: #line 73 "ext/rbs_extension/lexer.re" { return next_token(state, kCLASS); } -#line 2186 "ext/rbs_extension/lexer.c" -yy258: +#line 2206 "ext/rbs_extension/lexer.c" +yy262: rbs_skip(state); yych = peek(state); - if (yych == 'd') goto yy277; + if (yych == 'd') goto yy282; goto yy53; -yy259: +yy263: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy260; + if (yych <= '@') goto yy264; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy260; + if (yych == '`') goto yy264; if (yych <= 'z') goto yy52; } } -yy260: +yy264: #line 77 "ext/rbs_extension/lexer.re" { return next_token(state, kFALSE); } -#line 2214 "ext/rbs_extension/lexer.c" -yy261: +#line 2234 "ext/rbs_extension/lexer.c" +yy265: rbs_skip(state); yych = peek(state); - if (yych == 'd') goto yy279; + if (yych == 'd') goto yy284; goto yy53; -yy262: +yy266: rbs_skip(state); yych = peek(state); - if (yych == 'n') goto yy280; + if (yych == 'n') goto yy285; goto yy53; -yy263: +yy267: rbs_skip(state); yych = peek(state); - if (yych == 'f') goto yy281; + if (yych == 'f') goto yy286; goto yy53; -yy264: +yy268: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy282; + if (yych == 'e') goto yy287; goto yy53; -yy265: +yy269: rbs_skip(state); yych = peek(state); - if (yych == 'n') goto yy284; + if (yych == 'n') goto yy289; goto yy53; -yy266: +yy270: rbs_skip(state); yych = peek(state); - if (yych == 't') goto yy285; + if (yych == 't') goto yy290; goto yy53; -yy267: +yy271: rbs_skip(state); yych = peek(state); - if (yych == 'c') goto yy286; + if (yych == 'c') goto yy291; goto yy53; -yy268: +yy272: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy288; + if (yych == 'n') goto yy293; goto yy53; -yy269: +yy273: rbs_skip(state); yych = peek(state); - if (yych == 'c') goto yy289; + if (yych == 'e') goto yy295; goto yy53; -yy270: +yy274: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy290; + if (yych == 'c') goto yy296; goto yy53; -yy271: +yy275: + rbs_skip(state); + yych = peek(state); + if (yych == 'e') goto yy297; + goto yy53; +yy276: rbs_skip(state); yych = peek(state); if (yych <= '@') { - if (yych <= '/') goto yy68; - if (yych <= '9') goto yy66; - goto yy68; + if (yych <= '/') goto yy69; + if (yych <= '9') goto yy67; + goto yy69; } else { - if (yych <= 'F') goto yy66; - if (yych <= '`') goto yy68; - if (yych <= 'f') goto yy66; - goto yy68; + if (yych <= 'F') goto yy67; + if (yych <= '`') goto yy69; + if (yych <= 'f') goto yy67; + goto yy69; } -yy272: +yy277: rbs_skip(state); yych = peek(state); if (yych <= '@') { - if (yych <= '/') goto yy68; - if (yych <= '9') goto yy291; - goto yy68; + if (yych <= '/') goto yy69; + if (yych <= '9') goto yy298; + goto yy69; } else { - if (yych <= 'F') goto yy291; - if (yych <= '`') goto yy68; - if (yych <= 'f') goto yy291; - goto yy68; + if (yych <= 'F') goto yy298; + if (yych <= '`') goto yy69; + if (yych <= 'f') goto yy298; + goto yy69; } -yy273: +yy278: rbs_skip(state); yych = peek(state); - if (yych == '_') goto yy292; - goto yy112; -yy274: + if (yych == '_') goto yy299; + goto yy113; +yy279: rbs_skip(state); yych = peek(state); - if (yych == 'c') goto yy293; + if (yych == 'c') goto yy300; goto yy53; -yy275: +yy280: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy294; + if (yych == 'e') goto yy301; goto yy53; -yy276: +yy281: rbs_skip(state); yych = peek(state); - if (yych == 'r') goto yy295; + if (yych == 'r') goto yy302; goto yy53; -yy277: +yy282: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy278; + if (yych <= '@') goto yy283; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy278; + if (yych == '`') goto yy283; if (yych <= 'z') goto yy52; } } -yy278: +yy283: #line 76 "ext/rbs_extension/lexer.re" { return next_token(state, kEXTEND); } -#line 2333 "ext/rbs_extension/lexer.c" -yy279: +#line 2358 "ext/rbs_extension/lexer.c" +yy284: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy296; + if (yych == 'e') goto yy303; goto yy53; -yy280: +yy285: rbs_skip(state); yych = peek(state); - if (yych == 'c') goto yy298; + if (yych == 'c') goto yy305; goto yy53; -yy281: +yy286: rbs_skip(state); yych = peek(state); - if (yych == 'a') goto yy299; + if (yych == 'a') goto yy306; goto yy53; -yy282: +yy287: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy283; + if (yych <= '@') goto yy288; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy283; + if (yych == '`') goto yy288; if (yych <= 'z') goto yy52; } } -yy283: +yy288: #line 82 "ext/rbs_extension/lexer.re" { return next_token(state, kMODULE); } -#line 2371 "ext/rbs_extension/lexer.c" -yy284: +#line 2396 "ext/rbs_extension/lexer.c" +yy289: rbs_skip(state); yych = peek(state); - if (yych == 'd') goto yy300; + if (yych == 'd') goto yy307; goto yy53; -yy285: +yy290: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy302; + if (yych == 'e') goto yy309; goto yy53; -yy286: +yy291: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy287; + if (yych <= '@') goto yy292; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy287; + if (yych == '`') goto yy292; if (yych <= 'z') goto yy52; } } -yy287: +yy292: #line 87 "ext/rbs_extension/lexer.re" { return next_token(state, kPUBLIC); } -#line 2404 "ext/rbs_extension/lexer.c" -yy288: +#line 2429 "ext/rbs_extension/lexer.c" +yy293: + rbs_skip(state); + yych = peek(state); + if (yych <= '=') { + if (yych <= '/') { + if (yych == '!') goto yy109; + } else { + if (yych <= '9') goto yy52; + if (yych >= '=') goto yy110; + } + } else { + if (yych <= '^') { + if (yych <= '@') goto yy294; + if (yych <= 'Z') goto yy52; + } else { + if (yych == '`') goto yy294; + if (yych <= 'z') goto yy52; + } + } +yy294: +#line 101 "ext/rbs_extension/lexer.re" + { return next_token(state, kRETURN); } +#line 2452 "ext/rbs_extension/lexer.c" +yy295: rbs_skip(state); yych = peek(state); - if (yych == 't') goto yy304; + if (yych == 't') goto yy311; goto yy53; -yy289: +yy296: rbs_skip(state); yych = peek(state); - if (yych == 'k') goto yy305; + if (yych == 'k') goto yy312; goto yy53; -yy290: +yy297: rbs_skip(state); yych = peek(state); - if (yych == 'd') goto yy306; + if (yych == 'd') goto yy313; goto yy53; -yy291: +yy298: rbs_skip(state); yych = peek(state); if (yych <= '@') { - if (yych <= '/') goto yy68; - if (yych <= '9') goto yy86; - goto yy68; + if (yych <= '/') goto yy69; + if (yych <= '9') goto yy87; + goto yy69; } else { - if (yych <= 'F') goto yy86; - if (yych <= '`') goto yy68; - if (yych <= 'f') goto yy86; - goto yy68; + if (yych <= 'F') goto yy87; + if (yych <= '`') goto yy69; + if (yych <= 'f') goto yy87; + goto yy69; } -yy292: +yy299: rbs_skip(state); yych = peek(state); - if (yych == '_') goto yy308; - goto yy112; -yy293: + if (yych == '_') goto yy315; + goto yy113; +yy300: rbs_skip(state); yych = peek(state); - if (yych == 'c') goto yy310; + if (yych == 'c') goto yy317; goto yy53; -yy294: +yy301: rbs_skip(state); yych = peek(state); - if (yych == 'a') goto yy311; + if (yych == 'a') goto yy318; goto yy53; -yy295: +yy302: rbs_skip(state); yych = peek(state); - if (yych == 'i') goto yy312; + if (yych == 'i') goto yy319; goto yy53; -yy296: +yy303: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy297; + if (yych <= '@') goto yy304; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy297; + if (yych == '`') goto yy304; if (yych <= 'z') goto yy52; } } -yy297: +yy304: #line 79 "ext/rbs_extension/lexer.re" { return next_token(state, kINCLUDE); } -#line 2475 "ext/rbs_extension/lexer.c" -yy298: +#line 2523 "ext/rbs_extension/lexer.c" +yy305: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy313; + if (yych == 'e') goto yy320; goto yy53; -yy299: +yy306: rbs_skip(state); yych = peek(state); - if (yych == 'c') goto yy315; + if (yych == 'c') goto yy322; goto yy53; -yy300: +yy307: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy301; + if (yych <= '@') goto yy308; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy301; + if (yych == '`') goto yy308; if (yych <= 'z') goto yy52; } } -yy301: +yy308: #line 85 "ext/rbs_extension/lexer.re" { return next_token(state, kPREPEND); } -#line 2508 "ext/rbs_extension/lexer.c" -yy302: +#line 2556 "ext/rbs_extension/lexer.c" +yy309: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy303; + if (yych <= '@') goto yy310; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy303; + if (yych == '`') goto yy310; if (yych <= 'z') goto yy52; } } -yy303: +yy310: #line 86 "ext/rbs_extension/lexer.re" { return next_token(state, kPRIVATE); } -#line 2531 "ext/rbs_extension/lexer.c" -yy304: +#line 2579 "ext/rbs_extension/lexer.c" +yy311: rbs_skip(state); yych = peek(state); - if (yych == 'o') goto yy316; + if (yych == 'o') goto yy323; goto yy53; -yy305: +yy312: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy317; + if (yych == 'e') goto yy324; goto yy53; -yy306: +yy313: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy307; + if (yych <= '@') goto yy314; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy307; + if (yych == '`') goto yy314; if (yych <= 'z') goto yy52; } } -yy307: +yy314: #line 94 "ext/rbs_extension/lexer.re" { return next_token(state, kUNTYPED); } -#line 2564 "ext/rbs_extension/lexer.c" -yy308: +#line 2612 "ext/rbs_extension/lexer.c" +yy315: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { - if (yych <= '9') goto yy111; - if (yych >= '=') goto yy109; + if (yych <= '9') goto yy112; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy309; - if (yych <= 'Z') goto yy111; + if (yych <= '@') goto yy316; + if (yych <= 'Z') goto yy112; } else { - if (yych == '`') goto yy309; - if (yych <= 'z') goto yy111; + if (yych == '`') goto yy316; + if (yych <= 'z') goto yy112; } } -yy309: +yy316: #line 98 "ext/rbs_extension/lexer.re" { return next_token(state, k__TODO__); } -#line 2587 "ext/rbs_extension/lexer.c" -yy310: +#line 2635 "ext/rbs_extension/lexer.c" +yy317: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy318; + if (yych == 'e') goto yy325; goto yy53; -yy311: +yy318: rbs_skip(state); yych = peek(state); - if (yych == 'd') goto yy319; + if (yych == 'd') goto yy326; goto yy53; -yy312: +yy319: rbs_skip(state); yych = peek(state); - if (yych == 't') goto yy320; + if (yych == 't') goto yy327; goto yy53; -yy313: +yy320: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy314; + if (yych <= '@') goto yy321; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy314; + if (yych == '`') goto yy321; if (yych <= 'z') goto yy52; } } -yy314: +yy321: #line 80 "ext/rbs_extension/lexer.re" { return next_token(state, kINSTANCE); } -#line 2625 "ext/rbs_extension/lexer.c" -yy315: +#line 2673 "ext/rbs_extension/lexer.c" +yy322: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy321; + if (yych == 'e') goto yy328; goto yy53; -yy316: +yy323: rbs_skip(state); yych = peek(state); - if (yych == 'n') goto yy323; + if (yych == 'n') goto yy330; goto yy53; -yy317: +yy324: rbs_skip(state); yych = peek(state); - if (yych == 'd') goto yy325; + if (yych == 'd') goto yy332; goto yy53; -yy318: +yy325: rbs_skip(state); yych = peek(state); - if (yych == 's') goto yy327; + if (yych == 's') goto yy334; goto yy53; -yy319: +yy326: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy328; + if (yych == 'e') goto yy335; goto yy53; -yy320: +yy327: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy329; + if (yych == 'e') goto yy336; goto yy53; -yy321: +yy328: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy322; + if (yych <= '@') goto yy329; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy322; + if (yych == '`') goto yy329; if (yych <= 'z') goto yy52; } } -yy322: +yy329: #line 81 "ext/rbs_extension/lexer.re" { return next_token(state, kINTERFACE); } -#line 2678 "ext/rbs_extension/lexer.c" -yy323: +#line 2726 "ext/rbs_extension/lexer.c" +yy330: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy324; + if (yych <= '@') goto yy331; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy324; + if (yych == '`') goto yy331; if (yych <= 'z') goto yy52; } } -yy324: +yy331: #line 89 "ext/rbs_extension/lexer.re" { return next_token(state, kSINGLETON); } -#line 2701 "ext/rbs_extension/lexer.c" -yy325: +#line 2749 "ext/rbs_extension/lexer.c" +yy332: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy326; + if (yych <= '@') goto yy333; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy326; + if (yych == '`') goto yy333; if (yych <= 'z') goto yy52; } } -yy326: +yy333: #line 93 "ext/rbs_extension/lexer.re" { return next_token(state, kUNCHECKED); } -#line 2724 "ext/rbs_extension/lexer.c" -yy327: +#line 2772 "ext/rbs_extension/lexer.c" +yy334: rbs_skip(state); yych = peek(state); - if (yych == 's') goto yy330; + if (yych == 's') goto yy337; goto yy53; -yy328: +yy335: rbs_skip(state); yych = peek(state); - if (yych == 'r') goto yy331; + if (yych == 'r') goto yy338; goto yy53; -yy329: +yy336: rbs_skip(state); yych = peek(state); - if (yych == 'r') goto yy333; + if (yych == 'r') goto yy340; goto yy53; -yy330: +yy337: rbs_skip(state); yych = peek(state); - if (yych == 'o') goto yy335; + if (yych == 'o') goto yy342; goto yy53; -yy331: +yy338: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy332; + if (yych <= '@') goto yy339; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy332; + if (yych == '`') goto yy339; if (yych <= 'z') goto yy52; } } -yy332: +yy339: #line 69 "ext/rbs_extension/lexer.re" { return next_token(state, kATTRREADER); } -#line 2767 "ext/rbs_extension/lexer.c" -yy333: +#line 2815 "ext/rbs_extension/lexer.c" +yy340: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy334; + if (yych <= '@') goto yy341; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy334; + if (yych == '`') goto yy341; if (yych <= 'z') goto yy52; } } -yy334: +yy341: #line 70 "ext/rbs_extension/lexer.re" { return next_token(state, kATTRWRITER); } -#line 2790 "ext/rbs_extension/lexer.c" -yy335: +#line 2838 "ext/rbs_extension/lexer.c" +yy342: rbs_skip(state); yych = peek(state); if (yych != 'r') goto yy53; @@ -2795,25 +2843,25 @@ token rbsparser_next_token(lexstate *state) { yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy108; + if (yych == '!') goto yy109; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy109; + if (yych >= '=') goto yy110; } } else { if (yych <= '^') { - if (yych <= '@') goto yy336; + if (yych <= '@') goto yy343; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy336; + if (yych == '`') goto yy343; if (yych <= 'z') goto yy52; } } -yy336: +yy343: #line 68 "ext/rbs_extension/lexer.re" { return next_token(state, kATTRACCESSOR); } -#line 2816 "ext/rbs_extension/lexer.c" +#line 2864 "ext/rbs_extension/lexer.c" } -#line 149 "ext/rbs_extension/lexer.re" +#line 150 "ext/rbs_extension/lexer.re" } diff --git a/ext/rbs_extension/lexer.h b/ext/rbs_extension/lexer.h index 6a0d71b8b..b073f373d 100644 --- a/ext/rbs_extension/lexer.h +++ b/ext/rbs_extension/lexer.h @@ -63,6 +63,7 @@ enum TokenType { k__TODO__, /* __todo__ */ kATRBS, /* @rbs */ kSKIP, /* skip */ + kRETURN, /* return */ tLIDENT, /* Identifiers starting with lower case */ tUIDENT, /* Identifiers starting with upper case */ diff --git a/ext/rbs_extension/lexer.re b/ext/rbs_extension/lexer.re index ef0e09503..cbcef13bd 100644 --- a/ext/rbs_extension/lexer.re +++ b/ext/rbs_extension/lexer.re @@ -98,6 +98,7 @@ token rbsparser_next_token(lexstate *state) { "__todo__" { return next_token(state, k__TODO__); } "@rbs" { return next_token(state, kATRBS); } "skip" { return next_token(state, kSKIP); } + "return" { return next_token(state, kRETURN); } unicode_char = "\\u" [0-9a-fA-F]{4}; oct_char = "\\x" [0-9a-f]{1,2}; diff --git a/ext/rbs_extension/lexstate.c b/ext/rbs_extension/lexstate.c index cb1cc7234..1d20a3f81 100644 --- a/ext/rbs_extension/lexstate.c +++ b/ext/rbs_extension/lexstate.c @@ -62,6 +62,7 @@ static const char *RBS_TOKENTYPE_NAMES[] = { "k__TODO__", /* __todo__ */ "kATRBS", /* @rbs */ "kSKIP", /* skip */ + "kRETURN", /* return */ "tLIDENT", /* Identifiers starting with lower case */ "tUIDENT", /* Identifiers starting with upper case */ diff --git a/ext/rbs_extension/parser.c b/ext/rbs_extension/parser.c index 9b2758a73..78b50b0b8 100644 --- a/ext/rbs_extension/parser.c +++ b/ext/rbs_extension/parser.c @@ -49,6 +49,7 @@ case kAS: \ case k__TODO__: \ case kSKIP: \ + case kRETURN: \ /* nop */ typedef struct { @@ -190,6 +191,7 @@ static VALUE parse_type_name(parserstate *state, TypeNameKind kind, range *rg) { switch (state->current_token.type) { case tLIDENT: case kSKIP: + case kRETURN: if (kind & ALIAS_NAME) goto success; goto error; case tULIDENT: @@ -901,6 +903,7 @@ static VALUE parse_instance_type(parserstate *state, bool parse_alias) { break; } case kSKIP: + case kRETURN: case tLIDENT: { kind = ALIAS_NAME; break; @@ -1065,6 +1068,7 @@ static VALUE parse_simple(parserstate *state) { case tULIDENT: // fallthrough case tLIDENT: // fallthrough case kSKIP: // fallthrough + case kRETURN: // fallthrough case pCOLON2: { return parse_instance_type(state, true); } @@ -2988,6 +2992,26 @@ static VALUE parse_inline_leading_annotation(parserstate *state) { comment_loc ); } + case kRETURN: { + parser_advance(state); + + range return_loc = state->current_token.range; + parser_advance_assert(state, pCOLON); + range colon_loc = state->current_token.range; + + VALUE return_type = parse_type(state); + + VALUE comment_loc = parse_inline_comment(state); + + return rbs_ast_ruby_annotations_return_type_annotation( + rbs_new_location(state->buffer, (range) { .start = rbs_range.start, .end = state->current_token.range.end }), + rbs_new_location(state->buffer, rbs_range), + rbs_new_location(state->buffer, return_loc), + rbs_new_location(state->buffer, colon_loc), + return_type, + comment_loc + ); + } default: { raise_syntax_error( state, diff --git a/include/rbs/constants.h b/include/rbs/constants.h index 48f5b5457..7fc878e65 100644 --- a/include/rbs/constants.h +++ b/include/rbs/constants.h @@ -52,6 +52,7 @@ extern VALUE RBS_AST_Members_Public; extern VALUE RBS_AST_Ruby_Annotations_ColonMethodTypeAnnotation; extern VALUE RBS_AST_Ruby_Annotations_MethodTypesAnnotation; extern VALUE RBS_AST_Ruby_Annotations_NodeTypeAssertion; +extern VALUE RBS_AST_Ruby_Annotations_ReturnTypeAnnotation; extern VALUE RBS_AST_Ruby_Annotations_SkipAnnotation; extern VALUE RBS_AST_TypeParam; extern VALUE RBS_MethodType; diff --git a/include/rbs/ruby_objs.h b/include/rbs/ruby_objs.h index 084391107..b57a21675 100644 --- a/include/rbs/ruby_objs.h +++ b/include/rbs/ruby_objs.h @@ -42,6 +42,7 @@ VALUE rbs_ast_members_public(VALUE location); VALUE rbs_ast_ruby_annotations_colon_method_type_annotation(VALUE location, VALUE prefix_location, VALUE annotations, VALUE method_type); VALUE rbs_ast_ruby_annotations_method_types_annotation(VALUE location, VALUE prefix_location, VALUE overloads, VALUE vertical_bar_locations); VALUE rbs_ast_ruby_annotations_node_type_assertion(VALUE location, VALUE prefix_location, VALUE type); +VALUE rbs_ast_ruby_annotations_return_type_annotation(VALUE location, VALUE prefix_location, VALUE return_location, VALUE colon_location, VALUE return_type, VALUE comment_location); VALUE rbs_ast_ruby_annotations_skip_annotation(VALUE location, VALUE prefix_location, VALUE skip_location, VALUE comment_location); VALUE rbs_ast_type_param(VALUE name, VALUE variance, VALUE upper_bound, VALUE default_type, VALUE unchecked, VALUE location); VALUE rbs_method_type(VALUE type_params, VALUE type, VALUE block, VALUE location); diff --git a/lib/rbs/ast/ruby/annotations.rb b/lib/rbs/ast/ruby/annotations.rb index ffb03a180..4de877a25 100644 --- a/lib/rbs/ast/ruby/annotations.rb +++ b/lib/rbs/ast/ruby/annotations.rb @@ -84,6 +84,35 @@ def initialize(location:, prefix_location:, skip_location:, comment_location:) @comment_location = comment_location end end + + class ReturnTypeAnnotation < Base + attr_reader :return_location + + attr_reader :colon_location + + attr_reader :return_type + + attr_reader :comment_location + + def initialize(location:, prefix_location:, return_location:, colon_location:, return_type:, comment_location:) + super(location, prefix_location) + @return_location = return_location + @colon_location = colon_location + @return_type = return_type + @comment_location = comment_location + end + + def map_type_name(&block) + self.class.new( + location:, + prefix_location:, + return_location: return_location, + colon_location: colon_location, + return_type: return_type.map_type_name { yield _1 }, + comment_location: comment_location + ) #: self + end + end end end end diff --git a/lib/rbs/ast/ruby/members.rb b/lib/rbs/ast/ruby/members.rb index 082d11713..e4cf7d00b 100644 --- a/lib/rbs/ast/ruby/members.rb +++ b/lib/rbs/ast/ruby/members.rb @@ -15,6 +15,50 @@ def initialize(buffer) end class MethodTypeAnnotation + class DocStyle + attr_accessor :return_type_annotation + + def initialize + @return_type_annotation = nil + end + + def map_type_name(&block) + DocStyle.new.tap do |new| + new.return_type_annotation = return_type_annotation&.map_type_name(&block) + end #: self + end + + def method_type + return_type = + case return_type_annotation + when Annotations::NodeTypeAssertion + return_type_annotation.type + when Annotations::ReturnTypeAnnotation + return_type_annotation.return_type + else + Types::Bases::Any.new(location: nil) + end + + type = Types::Function.new( + required_positionals: [], + optional_positionals: [], + rest_positionals: nil, + trailing_positionals: [], + required_keywords: {}, + optional_keywords: {}, + rest_keywords: nil, + return_type: return_type + ) + + MethodType.new( + type_params: [], + type: type, + block: nil, + location: nil + ) + end + end + attr_reader :type_annotations def initialize(type_annotations:) @@ -27,7 +71,7 @@ def map_type_name(&block) updated_annots = type_annotations.map do |annotation| annotation.map_type_name(&block) end - when Annotations::NodeTypeAssertion + when DocStyle updated_annots = type_annotations.map_type_name(&block) end @@ -43,7 +87,8 @@ def self.build(leading_block, trailing_block, variables) if trailing_block case annotation = trailing_block.trailing_annotation(variables) when Annotations::NodeTypeAssertion - type_annotations = annotation + type_annotations = DocStyle.new() + type_annotations.return_type_annotation = annotation else unused_trailing_annotation = annotation end @@ -65,6 +110,17 @@ def self.build(leading_block, trailing_block, variables) type_annotations << paragraph next end + when Annotations::ReturnTypeAnnotation + unless type_annotations + type_annotations = DocStyle.new() + end + + if type_annotations.is_a?(DocStyle) + unless type_annotations.return_type_annotation + type_annotations.return_type_annotation = paragraph + next + end + end end unused_annotations << paragraph @@ -86,13 +142,8 @@ def empty? def overloads case type_annotations - when Annotations::NodeTypeAssertion - method_type = MethodType.new( - type_params: [], - type: Types::Function.empty(type_annotations.type), - block: nil, - location: nil - ) + when DocStyle + method_type = type_annotations.method_type [ AST::Members::MethodDefinition::Overload.new(annotations: [], method_type: method_type) diff --git a/sig/ast/ruby/annotations.rbs b/sig/ast/ruby/annotations.rbs index a27d0146f..18a8cbb9c 100644 --- a/sig/ast/ruby/annotations.rbs +++ b/sig/ast/ruby/annotations.rbs @@ -5,6 +5,7 @@ module RBS type leading_annotation = ColonMethodTypeAnnotation | MethodTypesAnnotation | SkipAnnotation + | ReturnTypeAnnotation type trailing_annotation = NodeTypeAssertion @@ -73,6 +74,36 @@ module RBS def initialize: (location: Location, prefix_location: Location, skip_location: Location, comment_location: Location?) -> void end + + # `@rbs return: T -- comment` annotation in leading comments + # + # ``` + # @rbs return: String -- Returns a string + # ^^^ -- prefix_location + # ^^^^^^ -- return_location + # ^ -- colon_location + # ^^^^^^^^^^^^^^^^^^^ -- comment + # ``` + class ReturnTypeAnnotation < Base + attr_reader return_location: Location + + attr_reader colon_location: Location + + attr_reader return_type: Types::t + + attr_reader comment_location: Location? + + def initialize: ( + location: Location, + prefix_location: Location, + return_location: Location, + colon_location: Location, + return_type: Types::t, + comment_location: Location?, + ) -> void + + def map_type_name: () { (TypeName) -> TypeName } -> self + end end end end diff --git a/sig/ast/ruby/members.rbs b/sig/ast/ruby/members.rbs index cf3cebd68..82452460f 100644 --- a/sig/ast/ruby/members.rbs +++ b/sig/ast/ruby/members.rbs @@ -13,7 +13,17 @@ module RBS type t = DefMember class MethodTypeAnnotation - type type_annotations = Annotations::NodeTypeAssertion | Array[Annotations::ColonMethodTypeAnnotation | Annotations::MethodTypesAnnotation] | nil + class DocStyle + attr_accessor return_type_annotation: Annotations::ReturnTypeAnnotation | Annotations::NodeTypeAssertion | nil + + def initialize: () -> void + + def map_type_name: () { (TypeName) -> TypeName } -> self + + def method_type: () -> MethodType + end + + type type_annotations = DocStyle | Array[Annotations::ColonMethodTypeAnnotation | Annotations::MethodTypesAnnotation] | nil attr_reader type_annotations: type_annotations diff --git a/src/constants.c b/src/constants.c index df5d72679..185c4f8ed 100644 --- a/src/constants.c +++ b/src/constants.c @@ -52,6 +52,7 @@ VALUE RBS_AST_Members_Public; VALUE RBS_AST_Ruby_Annotations_ColonMethodTypeAnnotation; VALUE RBS_AST_Ruby_Annotations_MethodTypesAnnotation; VALUE RBS_AST_Ruby_Annotations_NodeTypeAssertion; +VALUE RBS_AST_Ruby_Annotations_ReturnTypeAnnotation; VALUE RBS_AST_Ruby_Annotations_SkipAnnotation; VALUE RBS_AST_TypeParam; VALUE RBS_MethodType; @@ -132,6 +133,7 @@ void rbs__init_constants(void) { IMPORT_CONSTANT(RBS_AST_Ruby_Annotations_ColonMethodTypeAnnotation, RBS_AST_Ruby_Annotations, "ColonMethodTypeAnnotation"); IMPORT_CONSTANT(RBS_AST_Ruby_Annotations_MethodTypesAnnotation, RBS_AST_Ruby_Annotations, "MethodTypesAnnotation"); IMPORT_CONSTANT(RBS_AST_Ruby_Annotations_NodeTypeAssertion, RBS_AST_Ruby_Annotations, "NodeTypeAssertion"); + IMPORT_CONSTANT(RBS_AST_Ruby_Annotations_ReturnTypeAnnotation, RBS_AST_Ruby_Annotations, "ReturnTypeAnnotation"); IMPORT_CONSTANT(RBS_AST_Ruby_Annotations_SkipAnnotation, RBS_AST_Ruby_Annotations, "SkipAnnotation"); IMPORT_CONSTANT(RBS_AST_TypeParam, RBS_AST, "TypeParam"); IMPORT_CONSTANT(RBS_MethodType, RBS, "MethodType"); diff --git a/src/ruby_objs.c b/src/ruby_objs.c index f7e9dd0b2..1d9fc4753 100644 --- a/src/ruby_objs.c +++ b/src/ruby_objs.c @@ -480,6 +480,22 @@ VALUE rbs_ast_ruby_annotations_node_type_assertion(VALUE location, VALUE prefix_ ); } +VALUE rbs_ast_ruby_annotations_return_type_annotation(VALUE location, VALUE prefix_location, VALUE return_location, VALUE colon_location, VALUE return_type, VALUE comment_location) { + VALUE _init_kwargs = rb_hash_new(); + rb_hash_aset(_init_kwargs, ID2SYM(rb_intern("location")), location); + rb_hash_aset(_init_kwargs, ID2SYM(rb_intern("prefix_location")), prefix_location); + rb_hash_aset(_init_kwargs, ID2SYM(rb_intern("return_location")), return_location); + rb_hash_aset(_init_kwargs, ID2SYM(rb_intern("colon_location")), colon_location); + rb_hash_aset(_init_kwargs, ID2SYM(rb_intern("return_type")), return_type); + rb_hash_aset(_init_kwargs, ID2SYM(rb_intern("comment_location")), comment_location); + + return CLASS_NEW_INSTANCE( + RBS_AST_Ruby_Annotations_ReturnTypeAnnotation, + 1, + &_init_kwargs + ); +} + VALUE rbs_ast_ruby_annotations_skip_annotation(VALUE location, VALUE prefix_location, VALUE skip_location, VALUE comment_location) { VALUE _init_kwargs = rb_hash_new(); rb_hash_aset(_init_kwargs, ID2SYM(rb_intern("location")), location); diff --git a/test/rbs/inline_annotation_parsing_test.rb b/test/rbs/inline_annotation_parsing_test.rb index 336e152ca..1fef5ff51 100644 --- a/test/rbs/inline_annotation_parsing_test.rb +++ b/test/rbs/inline_annotation_parsing_test.rb @@ -95,4 +95,24 @@ def test_parse__skip assert_equal "-- some comment here", annot.comment_location.source end end + + def test_parse__return + Parser.parse_inline_leading_annotation("@rbs return: untyped", 0...).tap do |annot| + assert_instance_of AST::Ruby::Annotations::ReturnTypeAnnotation, annot + assert_equal "@rbs return: untyped", annot.location.source + assert_equal "return", annot.return_location.source + assert_equal ":", annot.colon_location.source + assert_equal "untyped", annot.return_type.location.source + assert_nil annot.comment_location + end + + Parser.parse_inline_leading_annotation("@rbs return: untyped -- some comment here", 0...).tap do |annot| + assert_instance_of AST::Ruby::Annotations::ReturnTypeAnnotation, annot + assert_equal "@rbs return: untyped -- some comment here", annot.location.source + assert_equal "return", annot.return_location.source + assert_equal ":", annot.colon_location.source + assert_equal "untyped", annot.return_type.location.source + assert_equal "-- some comment here", annot.comment_location.source + end + end end diff --git a/test/rbs/inline_parser_test.rb b/test/rbs/inline_parser_test.rb index 32d4b4393..2090b42a1 100644 --- a/test/rbs/inline_parser_test.rb +++ b/test/rbs/inline_parser_test.rb @@ -267,4 +267,24 @@ def foo assert_empty decl.members end end + + def test_parse__return_type + result = parse(<<~RUBY) + class Foo + # @rbs return: void + def foo + end + end + RUBY + + assert_empty result.diagnostics + + result.declarations[0].tap do |decl| + decl.members[0].tap do |member| + assert_instance_of RBS::AST::Ruby::Members::DefMember, member + assert_instance_of Array, member.annotations + assert_equal ["() -> void"], member.overloads.map { _1.method_type.to_s } + end + end + end end diff --git a/test/rbs/signature_parsing_test.rb b/test/rbs/signature_parsing_test.rb index f8eb0f974..de7ac56ea 100644 --- a/test/rbs/signature_parsing_test.rb +++ b/test/rbs/signature_parsing_test.rb @@ -2304,4 +2304,17 @@ def skip: (untyped skip) -> void end RBS end + + def test_inline_keyword__return + Parser.parse_signature(<<~RBS) + class Foo + def return: (untyped return) -> void + attr_reader return: untyped + + type return = untyped + + @foo: Array[return] + end + RBS + end end