diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2019-05-26 18:45:59 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2019-05-26 18:47:52 +0900 |
commit | 2ce6365f9ccd93e8129252429391118f794f5e0b (patch) | |
tree | 57e8631b7b739ad5022c0d3c748a6fbb7226dfd7 /parse.y | |
parent | 58308899151ee3d49f8d9ef5c4e8d108d8822525 (diff) |
parse.y: adjust error indicator
* parse.y (parser_yylex): adjust the error indicator of unexpected
fraction part.
before:
~~~
1.2.3
^~~
~~~
after:
~~~
1.2.3
^~
~~~
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 20 |
1 files changed, 11 insertions, 9 deletions
@@ -7106,14 +7106,6 @@ number_literal_suffix(struct parser_params *p, int mask) return 0; } pushback(p, c); - if (c == '.') { - c = peekc_n(p, 1); - if (ISDIGIT(c)) { - yyerror0("unexpected fraction part after numeric literal"); - p->lex.pcur += 2; - while (parser_is_identchar(p)) nextc(p); - } - } break; } return result; @@ -8959,7 +8951,17 @@ parser_yylex(struct parser_params *p) } pushback(p, c); if (c != -1 && ISDIGIT(c)) { - yyerror0("no .<digit> floating literal anymore; put 0 before dot"); + char prev = p->lex.pcur-1 > p->lex.pbeg ? *(p->lex.pcur-2) : 0; + parse_numeric(p, '.'); + if (ISDIGIT(prev)) { + yyerror0("unexpected fraction part after numeric literal"); + } + else { + yyerror0("no .<digit> floating literal anymore; put 0 before dot"); + } + SET_LEX_STATE(EXPR_END); + p->lex.ptok = p->lex.pcur; + goto retry; } set_yylval_id('.'); SET_LEX_STATE(EXPR_DOT); |