1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

parse.y: separate numeric literal

* parse.y (parser_yylex): separate numeric literal from succeeding
  token, and treat 'e' as floating point number only if followed by
  exponent part.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42197 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2013-07-26 14:05:34 +00:00
parent 2d9a4afb13
commit 41f864faab
3 changed files with 22 additions and 5 deletions

View file

@ -1,3 +1,9 @@
Fri Jul 26 23:05:27 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
* parse.y (parser_yylex): separate numeric literal from succeeding
token, and treat 'e' as floating point number only if followed by
exponent part.
Fri Jul 26 22:14:10 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
* vm_exec.h (CHECK_VM_STACK_OVERFLOW_FOR_INSN): surround with

14
parse.y
View file

@ -7542,14 +7542,18 @@ parser_yylex(struct parser_params *parser)
if (seen_e) {
goto decode_num;
}
tokadd(c);
seen_e++;
is_float++;
nondigit = c;
c = nextc();
if (c != '-' && c != '+') continue;
if (c != '-' && c != '+' && !ISDIGIT(c)) {
pushback(c);
nondigit = 0;
goto decode_num;
}
tokadd(nondigit);
seen_e++;
is_float++;
tokadd(c);
nondigit = c;
nondigit = (c == '-' || c == '+') ? c : 0;
break;
case '_': /* `_' in number just ignored */

View file

@ -363,6 +363,13 @@ eom
assert_constant_reassignment_toplevel("11", "+", %w[53], already)
end
def test_integer_suffix
["1if true", "begin 1end"].each do |src|
assert_valid_syntax(src)
assert_equal(1, eval(src), src)
end
end
private
def not_label(x) @result = x; @not_label ||= nil end