summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2019-05-26 18:45:59 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2019-05-26 18:47:52 +0900
commit2ce6365f9ccd93e8129252429391118f794f5e0b (patch)
tree57e8631b7b739ad5022c0d3c748a6fbb7226dfd7 /parse.y
parent58308899151ee3d49f8d9ef5c4e8d108d8822525 (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.y20
1 files changed, 11 insertions, 9 deletions
diff --git a/parse.y b/parse.y
index fcd495969c..9036f58a59 100644
--- a/parse.y
+++ b/parse.y
@@ -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);