[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]