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:
parent
2d9a4afb13
commit
41f864faab
3 changed files with 22 additions and 5 deletions
|
@ -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
14
parse.y
|
@ -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 */
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue