mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Do not dispatch a nil token in ripper
As a comment token includes the newline, so delayed newline token just follows it should not be dispatched. [Bug #11485] Co-Authored-By: Jeremy Evans <code@jeremyevans.net>
This commit is contained in:
parent
23c92b6f82
commit
f19e048d24
2 changed files with 7 additions and 0 deletions
1
parse.y
1
parse.y
|
@ -5340,6 +5340,7 @@ ripper_dispatch_delayed_token(struct parser_params *p, enum yytokentype t)
|
||||||
int saved_line = p->ruby_sourceline;
|
int saved_line = p->ruby_sourceline;
|
||||||
const char *saved_tokp = p->lex.ptok;
|
const char *saved_tokp = p->lex.ptok;
|
||||||
|
|
||||||
|
if (NIL_P(p->delayed)) return;
|
||||||
p->ruby_sourceline = p->delayed_line;
|
p->ruby_sourceline = p->delayed_line;
|
||||||
p->lex.ptok = p->lex.pbeg + p->delayed_col;
|
p->lex.ptok = p->lex.pbeg + p->delayed_col;
|
||||||
add_mark_object(p, yylval_rval = ripper_dispatch1(p, ripper_token2eventid(t), p->delayed));
|
add_mark_object(p, yylval_rval = ripper_dispatch1(p, ripper_token2eventid(t), p->delayed));
|
||||||
|
|
|
@ -751,6 +751,12 @@ class TestRipper::ParserEvents < Test::Unit::TestCase
|
||||||
assert_equal true, thru_ifop
|
assert_equal true, thru_ifop
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_ignored_nl
|
||||||
|
ignored_nl = []
|
||||||
|
parse("foo # comment\n...\n", :on_ignored_nl) {|_, a| ignored_nl << a}
|
||||||
|
assert_equal ["\n"], ignored_nl
|
||||||
|
end
|
||||||
|
|
||||||
def test_lambda
|
def test_lambda
|
||||||
thru_lambda = false
|
thru_lambda = false
|
||||||
parse('->{}', :on_lambda) {thru_lambda = true}
|
parse('->{}', :on_lambda) {thru_lambda = true}
|
||||||
|
|
Loading…
Reference in a new issue