• dearblue's avatar
    Extended mruby binary format · a54a3df3
    dearblue authored
    The catch handler table is combined with iseq block.
    This is to prevent the structure from growing by adding a field for the
    catch handler table to the `mrb_irep` structure.
    
    "iseq block" and "catch handler table":
      [number of catch handler table (2 bytes)]
      [number of byte code (4 bytes)]
      [iseq (any bytes)]
      [catch handlers (multiple of 7 bytes)]
    
    catch handler:
      [catch type (1 byte)]
      [begin offset (2 bytes)]
      [end offset (2 bytes)]
      [target offset (2 bytes)]
    
    catch type: enum mrb_catch_type (0 = rescue, 1 = ensure)
    begin offset: Includes the specified instruction address
    end offset: Does not include the specified instruction address
    target offset: replaces pc with the specified instruction address
    
    This table is not expanded by `read_irep_record_1()`.
    The necessary elements are expanded one by one when used.
    a54a3df3
dump.c 29.5 KB