From f0a4820d440e42e87991ca9b1ee87db78d19e6df Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 18 Feb 2026 16:44:30 +0900 Subject: [PATCH] mruby-symbol-ext: ROM method table for Symbol extensions (2 methods) Co-authored-by: Claude --- mrbgems/mruby-symbol-ext/src/symbol.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/mrbgems/mruby-symbol-ext/src/symbol.c b/mrbgems/mruby-symbol-ext/src/symbol.c index d0c481ad2..7efd60a49 100644 --- a/mrbgems/mruby-symbol-ext/src/symbol.c +++ b/mrbgems/mruby-symbol-ext/src/symbol.c @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -57,6 +58,27 @@ mrb_sym_length(mrb_state *mrb, mrb_value self) return mrb_fixnum_value(len); } +#ifndef MRB_NO_PRESYM +#define SYMBOL_EXT_ROM_MT_SIZE 2 +static struct { + union mt_ptr vals[SYMBOL_EXT_ROM_MT_SIZE]; + mrb_sym keys[SYMBOL_EXT_ROM_MT_SIZE]; +} symbol_ext_rom_data = { + .vals = { + { .func = mrb_sym_length }, + { .func = mrb_sym_length }, + }, + .keys = { + MT_KEY(MRB_SYM(length), MT_FUNC|MT_NOARG|MT_PUBLIC), + MT_KEY(MRB_SYM(size), MT_FUNC|MT_NOARG|MT_PUBLIC), + } +}; +static mt_tbl symbol_ext_rom_mt = { + SYMBOL_EXT_ROM_MT_SIZE, SYMBOL_EXT_ROM_MT_SIZE, + (union mt_ptr*)&symbol_ext_rom_data, NULL +}; +#endif /* !MRB_NO_PRESYM */ + void mrb_mruby_symbol_ext_gem_init(mrb_state* mrb) { @@ -64,8 +86,12 @@ mrb_mruby_symbol_ext_gem_init(mrb_state* mrb) #ifdef MRB_USE_ALL_SYMBOLS mrb_define_class_method_id(mrb, s, MRB_SYM(all_symbols), mrb_sym_all_symbols, MRB_ARGS_NONE()); #endif +#ifndef MRB_NO_PRESYM + mrb_mt_init_rom(s, &symbol_ext_rom_mt); +#else mrb_define_method_id(mrb, s, MRB_SYM(length), mrb_sym_length, MRB_ARGS_NONE()); mrb_define_method_id(mrb, s, MRB_SYM(size), mrb_sym_length, MRB_ARGS_NONE()); +#endif } void