Hi, thanks for ChibiRuby — been using it in a Unity project and it's been working well until now.
Ran into a crash with a bigger script:
NotSupportedException: Invalid opcode EXT2
ChibiRuby.MRubyState.<Execute>g__ThrowInvalidOpCode|344_11 (ChibiRuby.OpCode opcode)
ChibiRuby.MRubyState.Execute (...)
ChibiRuby.RFiber.Resume (...)
I dug into it a bit and it looks like EXT1/EXT2/EXT3 aren't actually handled in the VM. In OpCode.cs they're in the enum but marked not implemented, so Execute just hits ThrowInvalidOpCode.
My script has a lot of string literals in one method, so I'm guessing the pool index goes over 255 and the compiler emits the EXT2 prefix to widen the operand. The compiler side generates it fine but the VM can't run it.
For now I worked around it by splitting the oversized method into smaller ones, so no single irep's literal pool exceeds 255. It works, but it'd be nice to have EXT1/2/3 supported so this isn't a problem.
Version 1.5.0, netstandard2.1, Unity on Windows.
Let me know if you want a repro, I can put one together.
Also, unrelated to the issue itself —
I really enjoyed your presentation at RubyKaigi 2026.
I genuinely think this is a great project.
I'm making heavy use of ChibiRuby and VitalRouter in the game I'm building.
Without any separate scenario files like CSV or JSON, I'm handling everything right in the Ruby scripts: game dialogue, graphics direction, stat gains, save/load, all of it.
By combining ChibiRuby with VitalRouter's interceptor pipeline and command ordering, I've been able to implement almost everything I wanted. For example, when ChibiRuby's script publishes a command through VitalRouter, an interceptor swaps the text based on the language setting — that kind of thing.
I've been recommending it to people around me on Twitter.
Thank you for building and maintaining such a great project.
Hi, thanks for ChibiRuby — been using it in a Unity project and it's been working well until now.
Ran into a crash with a bigger script:
I dug into it a bit and it looks like EXT1/EXT2/EXT3 aren't actually handled in the VM. In OpCode.cs they're in the enum but marked not implemented, so Execute just hits ThrowInvalidOpCode.
My script has a lot of string literals in one method, so I'm guessing the pool index goes over 255 and the compiler emits the EXT2 prefix to widen the operand. The compiler side generates it fine but the VM can't run it.
For now I worked around it by splitting the oversized method into smaller ones, so no single irep's literal pool exceeds 255. It works, but it'd be nice to have EXT1/2/3 supported so this isn't a problem.
Version 1.5.0, netstandard2.1, Unity on Windows.
Let me know if you want a repro, I can put one together.
Also, unrelated to the issue itself —
I really enjoyed your presentation at RubyKaigi 2026.
I genuinely think this is a great project.
I'm making heavy use of ChibiRuby and VitalRouter in the game I'm building.
Without any separate scenario files like CSV or JSON, I'm handling everything right in the Ruby scripts: game dialogue, graphics direction, stat gains, save/load, all of it.
By combining ChibiRuby with VitalRouter's interceptor pipeline and command ordering, I've been able to implement almost everything I wanted. For example, when ChibiRuby's script publishes a command through VitalRouter, an interceptor swaps the text based on the language setting — that kind of thing.
I've been recommending it to people around me on Twitter.
Thank you for building and maintaining such a great project.