• KOBAYASHI Shuji's avatar
    Add new specifiers/modifiers to format string of `mrb_vfromat()` · eea42e06
    KOBAYASHI Shuji authored
    Format sequence syntax:
    
      %[modifier]specifier
    
    Modifiers:
    
      ----------+------------------------------------------------------------
      Modifier  | Meaning
      ----------+------------------------------------------------------------
          !     | Convert to string by corresponding `inspect` instead of
                | corresponding `to_s`.
      ----------+------------------------------------------------------------
    
    Specifiers:
    
      ----------+----------------+--------------------------------------------
      Specifier | Argument Type  | Note
      ----------+----------------+--------------------------------------------
          c     | char           |
         d,i    | mrb_int        |
          f     | mrb_float      |
          l     | char*, mrb_int | Arguments are string and length.
          n     | mrb_sym        |
          s     | char*          | Argument is NUL terminated string.
          t     | mrb_value      | Convert to type (class) of object.
         v,S    | mrb_value      |
          C     | struct RClass* |
          T     | mrb_value      | Convert to real type (class) of object.
          Y     | mrb_value      | Same as `!v` if argument is `true`, `false`
                |                | or `nil`, otherwise same as `T`.
          %     | -              | Convert to percent sign itself (no argument
                |                | taken).
      ----------+----------------+--------------------------------------------
    
    This change will increase the binary size, but replacing all format strings
    with new specifiers/modifiers will decrease the size because it reduces
    inline expansion of `mrb_obj_value()`, etc. at the caller.
    eea42e06
driver.c 7.92 KB