mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
parse.y: flush numeric token
* parse.y (parser_number_literal_suffix, parse_numeric): flush numeric token so following unexpected token part is marked. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59191 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
d98afe3ae2
commit
e42a16190c
2 changed files with 12 additions and 0 deletions
6
parse.y
6
parse.y
|
@ -4886,10 +4886,12 @@ ripper_yylval_id(ID x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef RIPPER
|
#ifndef RIPPER
|
||||||
|
#define numeric_literl_flush(p) (parser->tokp = (p))
|
||||||
#define dispatch_scan_event(t) ((void)0)
|
#define dispatch_scan_event(t) ((void)0)
|
||||||
#define dispatch_delayed_token(t) ((void)0)
|
#define dispatch_delayed_token(t) ((void)0)
|
||||||
#define has_delayed_token() (0)
|
#define has_delayed_token() (0)
|
||||||
#else
|
#else
|
||||||
|
#define numeric_literl_flush(p) ((void)0)
|
||||||
|
|
||||||
#define yylval_rval (*(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val))
|
#define yylval_rval (*(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val))
|
||||||
|
|
||||||
|
@ -6516,6 +6518,7 @@ parser_number_literal_suffix(struct parser_params *parser, int mask)
|
||||||
}
|
}
|
||||||
if (!ISASCII(c) || ISALPHA(c) || c == '_') {
|
if (!ISASCII(c) || ISALPHA(c) || c == '_') {
|
||||||
lex_p = lastp;
|
lex_p = lastp;
|
||||||
|
numeric_literl_flush(lex_p);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
pushback(c);
|
pushback(c);
|
||||||
|
@ -6529,6 +6532,7 @@ parser_number_literal_suffix(struct parser_params *parser, int mask)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
numeric_literl_flush(lex_p);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7357,6 +7361,7 @@ parse_numeric(struct parser_params *parser, int c)
|
||||||
if (nondigit) {
|
if (nondigit) {
|
||||||
char tmp[30];
|
char tmp[30];
|
||||||
trailing_uc:
|
trailing_uc:
|
||||||
|
numeric_literl_flush(lex_p - 1);
|
||||||
snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit);
|
snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit);
|
||||||
yyerror(tmp);
|
yyerror(tmp);
|
||||||
}
|
}
|
||||||
|
@ -7378,6 +7383,7 @@ parse_numeric(struct parser_params *parser, int c)
|
||||||
}
|
}
|
||||||
v = DBL2NUM(d);
|
v = DBL2NUM(d);
|
||||||
}
|
}
|
||||||
|
numeric_literl_flush(lex_p);
|
||||||
return set_number_literal(v, type, suffix);
|
return set_number_literal(v, type, suffix);
|
||||||
}
|
}
|
||||||
suffix = number_literal_suffix(NUM_SUFFIX_ALL);
|
suffix = number_literal_suffix(NUM_SUFFIX_ALL);
|
||||||
|
|
|
@ -1007,6 +1007,12 @@ x = __ENCODING__
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_unexpected_token_after_numeric
|
||||||
|
assert_raise_with_message(SyntaxError, /^ \^~~\z/) do
|
||||||
|
eval('0000xyz')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
=begin
|
=begin
|
||||||
def test_past_scope_variable
|
def test_past_scope_variable
|
||||||
assert_warning(/past scope/) {catch {|tag| eval("BEGIN{throw tag}; tap {a = 1}; a")}}
|
assert_warning(/past scope/) {catch {|tag| eval("BEGIN{throw tag}; tap {a = 1}; a")}}
|
||||||
|
|
Loading…
Reference in a new issue