aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--parse.y9
-rw-r--r--test/ruby/test_literal.rb10
3 files changed, 21 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index fe593b0aa1..91ceb5fb74 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Mon Nov 30 11:00:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_yylex): suppress an extra error message after
+ numeric literal without digits. based on a patch from ujihisa .
+ in [ruby-dev:39811]. [ruby-dev:39798]
+
Sun Nov 29 16:56:24 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
* vm_eval.c (check_funcall_failed): pass ID. [ruby-core:26934]
diff --git a/parse.y b/parse.y
index c10dfe626f..43407d5619 100644
--- a/parse.y
+++ b/parse.y
@@ -6902,6 +6902,7 @@ parser_yylex(struct parser_params *parser)
c = nextc();
}
if (c == '0') {
+#define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0)
int start = toklen();
c = nextc();
if (c == 'x' || c == 'X') {
@@ -6922,7 +6923,7 @@ parser_yylex(struct parser_params *parser)
pushback(c);
tokfix();
if (toklen() == start) {
- yyerror("numeric literal without digits");
+ no_digits();
}
else if (nondigit) goto trailing_uc;
set_yylval_literal(rb_cstr_to_inum(tok(), 16, FALSE));
@@ -6946,7 +6947,7 @@ parser_yylex(struct parser_params *parser)
pushback(c);
tokfix();
if (toklen() == start) {
- yyerror("numeric literal without digits");
+ no_digits();
}
else if (nondigit) goto trailing_uc;
set_yylval_literal(rb_cstr_to_inum(tok(), 2, FALSE));
@@ -6970,7 +6971,7 @@ parser_yylex(struct parser_params *parser)
pushback(c);
tokfix();
if (toklen() == start) {
- yyerror("numeric literal without digits");
+ no_digits();
}
else if (nondigit) goto trailing_uc;
set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE));
@@ -6984,7 +6985,7 @@ parser_yylex(struct parser_params *parser)
/* prefixed octal */
c = nextc();
if (c == -1 || c == '_' || !ISDIGIT(c)) {
- yyerror("numeric literal without digits");
+ no_digits();
}
}
if (c >= '0' && c <= '7') {
diff --git a/test/ruby/test_literal.rb b/test/ruby/test_literal.rb
index 52f7704940..e251197c79 100644
--- a/test/ruby/test_literal.rb
+++ b/test/ruby/test_literal.rb
@@ -211,6 +211,16 @@ class TestRubyLiteral < Test::Unit::TestCase
}
}
}
+ bug2407 = '[ruby-dev:39798]'
+ head.each {|h|
+ if /^0/ =~ h
+ begin
+ eval("#{h}_")
+ rescue SyntaxError => e
+ assert_match(/numeric literal without digits\Z/, e.message, bug2407)
+ end
+ end
+ }
end
def test_float