ruby-changes:55850
From: Nobuyoshi <ko1@a...>
Date: Sun, 26 May 2019 18:52:54 +0900 (JST)
Subject: [ruby-changes:55850] Nobuyoshi Nakada: 2ce6365f9c (trunk): parse.y: adjust error indicator
https://git.ruby-lang.org/ruby.git/commit/?id=2ce6365f9c From 2ce6365f9ccd93e8129252429391118f794f5e0b Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada <nobu@r...> Date: Sun, 26 May 2019 18:45:59 +0900 Subject: 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 ^~ ~~~ diff --git a/parse.y b/parse.y index fcd4959..9036f58 100644 --- a/parse.y +++ b/parse.y @@ -7106,14 +7106,6 @@ number_literal_suffix(struct parser_params *p, int mask) https://github.com/ruby/ruby/blob/trunk/parse.y#L7106 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) https://github.com/ruby/ruby/blob/trunk/parse.y#L8951 } 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); diff --git a/test/irb/test_color.rb b/test/irb/test_color.rb index c25996e..3ba0c4c 100644 --- a/test/irb/test_color.rb +++ b/test/irb/test_color.rb @@ -35,7 +35,7 @@ module TestIRB https://github.com/ruby/ruby/blob/trunk/test/irb/test_color.rb#L35 '"foo#{a} #{b}"' => "#{RED}\"#{CLEAR}#{RED}foo#{CLEAR}#{RED}\#{#{CLEAR}a#{RED}}#{CLEAR}#{RED} #{CLEAR}#{RED}\#{#{CLEAR}b#{RED}}#{CLEAR}#{RED}\"#{CLEAR}", '/r#{e}g/' => "#{RED}#{BOLD}/#{CLEAR}#{RED}r#{CLEAR}#{RED}\#{#{CLEAR}e#{RED}}#{CLEAR}#{RED}g#{CLEAR}#{RED}#{BOLD}/#{CLEAR}", "'a\nb'" => "#{RED}'#{CLEAR}#{RED}a#{CLEAR}\n#{RED}b#{CLEAR}#{RED}'#{CLEAR}", - "4.5.6" => "#{MAGENTA}#{BOLD}4.5.6#{CLEAR}", + "4.5.6" => "4.5.6", "[1]]]" => "[1]]]", "\e[0m\n" => "^[[#{BLUE}#{BOLD}0#{CLEAR}m\n", "%w[a b]" => "#{RED}%w[#{CLEAR}#{RED}a#{CLEAR} #{RED}b#{CLEAR}#{RED}]#{CLEAR}", diff --git a/test/ruby/test_parse.rb b/test/ruby/test_parse.rb index c59454f..e21f1f9 100644 --- a/test/ruby/test_parse.rb +++ b/test/ruby/test_parse.rb @@ -1086,6 +1086,9 @@ x = __ENCODING__ https://github.com/ruby/ruby/blob/trunk/test/ruby/test_parse.rb#L1086 assert_raise_with_message(SyntaxError, /^ \^~~\z/) do eval('1.2i1.1') end + assert_raise_with_message(SyntaxError, /^ \^~\z/) do + eval('1.2.3') + end end def test_truncated_source_line -- cgit v0.10.2 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/