From 6a5c548218035bfdaf226c7ab1d0af37c9480900 Mon Sep 17 00:00:00 2001 From: Koichi Sasada Date: Tue, 1 Aug 2023 16:51:36 +0900 Subject: [PATCH] remove strange line event ```ruby def helper_cant_rescue begin raise SyntaxError rescue cant_rescue # here end end ``` on this case, a line event is reported on `cant_rescue` line because of node structure. it should not be reported. --- parse.y | 1 + test/ruby/test_settracefunc.rb | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/parse.y b/parse.y index 80b9887095..dd5e664c68 100644 --- a/parse.y +++ b/parse.y @@ -12360,6 +12360,7 @@ reduce_nodes(struct parser_params *p, NODE **body) if (!subnodes(nd_head, nd_resq)) goto end; break; case NODE_RESCUE: + newline = 0; // RESBODY should not be a NEWLINE if (node->nd_else) { body = &node->nd_resq; break; diff --git a/test/ruby/test_settracefunc.rb b/test/ruby/test_settracefunc.rb index a30c4309ad..c5e0f328e2 100644 --- a/test/ruby/test_settracefunc.rb +++ b/test/ruby/test_settracefunc.rb @@ -2725,4 +2725,28 @@ CODE Foo.foo RUBY end + + def helper_cant_rescue + begin + raise SyntaxError + rescue + cant_rescue + end + end + + def test_tp_rescue + lines = [] + TracePoint.new(:line){|tp| + next unless target_thread? + lines << tp.lineno + }.enable{ + begin + helper_cant_rescue + rescue SyntaxError + end + } + call_line = lines.shift + raise_line = lines.shift + assert_equal [], lines + end end