diff options
author | Jemma Issroff <jemmaissroff@gmail.com> | 2023-12-01 13:00:20 -0500 |
---|---|---|
committer | Jemma Issroff <jemmaissroff@gmail.com> | 2023-12-01 13:23:23 -0500 |
commit | 2a8d9c59ff151e8e2274e5f788745e070111b8ab (patch) | |
tree | 23d0f35c24bb73f613927dda6e38ccfe215c8d27 | |
parent | d6584a02011120c15b520fa08e5e5f0132b686de (diff) | |
download | ruby-2a8d9c59ff151e8e2274e5f788745e070111b8ab.tar.gz |
[PRISM] Account for RescueNodes with no statements
We need a PUTNIL if a RescueNode has no statements.
-rw-r--r-- | prism_compile.c | 5 | ||||
-rw-r--r-- | test/ruby/test_compile_prism.rb | 6 |
2 files changed, 11 insertions, 0 deletions
diff --git a/prism_compile.c b/prism_compile.c index 04cdb89ce4..1b55396b0b 100644 --- a/prism_compile.c +++ b/prism_compile.c @@ -3658,9 +3658,14 @@ pm_compile_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *const ret, ADD_GETLOCAL(ret, &dummy_line_node, LVAR_ERRINFO, 0); PM_COMPILE((pm_node_t *)rescue_node->reference); } + if (rescue_node->statements) { PM_COMPILE((pm_node_t *)rescue_node->statements); } + else { + PM_PUTNIL; + } + ADD_INSN(ret, &dummy_line_node, leave); ADD_LABEL(ret, rescue_end); diff --git a/test/ruby/test_compile_prism.rb b/test/ruby/test_compile_prism.rb index 2786e2052d..f9f42ce7ec 100644 --- a/test/ruby/test_compile_prism.rb +++ b/test/ruby/test_compile_prism.rb @@ -794,6 +794,12 @@ module Prism CODE assert_prism_eval(<<~CODE) begin + raise StandardError + rescue StandardError => e + end + CODE + assert_prism_eval(<<~CODE) + begin 1 rescue StandardError => e e |