Actions
Bug #21132
closedChanged postposition `rescue` and `if` behavior since Ruby 3.4
Bug #21132:
Changed postposition `rescue` and `if` behavior since Ruby 3.4
Description
When I use postposition rescue and if at same line, the behavior is changed since Ruby 3.4.
Reproduction¶
Result with Ruby 3.3¶
irb(main):001> RUBY_VERSION
=> "3.3.6"
irb(main):002* def foo
irb(main):003* return "hogehoge" rescue nil if false
irb(main):004* return "fugafuga"
irb(main):005> end
=> :foo
irb(main):006> foo
=> "fugafuga"
YARV bytecode
ruby 3.3.6 (2024-11-05 revision 75015d4c1f) [x86_64-linux]
== disasm: #<ISeq:<compiled>@<compiled>:1 (1,0)-(6,3)>
0000 definemethod :foo, foo ( 1)[Li]
0003 putself ( 6)[Li]
0004 opt_send_without_block <calldata!mid:foo, argc:0, FCALL|VCALL|ARGS_SIMPLE>
0006 leave
== disasm: #<ISeq:foo@<compiled>:1 (1,0)-(4,3)>
0000 putstring "fugafuga" ( 3)[LiCa]
0002 leave ( 4)[Re]
Result with Ruby 3.4¶
irb(main):001> RUBY_VERSION
=> "3.4.1"
irb(main):002* def foo
irb(main):003* return "hogehoge" rescue nil if false
irb(main):004* return "fugafuga"
irb(main):005> end
=> :foo
irb(main):006> foo
=> "hogehoge"
YARV bytecode
ruby 3.4.1 (2024-12-25 revision 48d4efcb85) +PRISM [x86_64-linux]
== disasm: #<ISeq:<compiled>@<compiled>:1 (1,0)-(1,54)>
0000 putself ( 1)[Li]
0001 opt_getconstant_path <ic:0 RubyVM::InstructionSequence>
0003 opt_getconstant_path <ic:1 DATA>
0005 opt_send_without_block <calldata!mid:new, argc:1, ARGS_SIMPLE>
0007 opt_send_without_block <calldata!mid:disassemble, argc:0, ARGS_SIMPLE>
0009 opt_send_without_block <calldata!mid:puts, argc:1, FCALL|ARGS_SIMPLE>
Updated by watson1978 (Shizuo Fujita) over 1 year ago
- Description updated (diff)
Updated by watson1978 (Shizuo Fujita) over 1 year ago
- Subject changed from Changed postposition `resque` and `if` behavior since Ruby 3.4 to Changed postposition `rescue` and `if` behavior since Ruby 3.4
Updated by watson1978 (Shizuo Fujita) over 1 year ago
Updated by nobu (Nobuyoshi Nakada) over 1 year ago
- Related to Bug #21097: `x = a rescue b in c` and `def f = a rescue b in c` parsed differently between parse.y and prism added
Updated by nobu (Nobuyoshi Nakada) over 1 year ago
- Assignee set to prism
Updated by hsbt (Hiroshi SHIBATA) over 1 year ago
- Is duplicate of Bug #21048: [Prism] rescue in modifier form with condition behaves differently added
Updated by watson1978 (Shizuo Fujita) over 1 year ago
My problem will be solved by https://github.com/ruby/ruby/commit/c2908613368b2ae404d094a15df61d830fc46dc9
Thanks
Updated by watson1978 (Shizuo Fujita) over 1 year ago
- Status changed from Open to Closed
Actions