mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
proc.c: ROM method table for Proc class (5 methods)
Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
+32
@@ -544,6 +544,34 @@ mrb_proc_merge_lvar(mrb_state *mrb, mrb_irep *irep, struct REnv *env, int num, c
|
||||
MRB_ENV_SET_LEN(env, irep->nlocals);
|
||||
}
|
||||
|
||||
/* ---------------------------*/
|
||||
#ifndef MRB_NO_PRESYM
|
||||
#define PROC_ROM_MT_SIZE 5
|
||||
static struct {
|
||||
union mt_ptr vals[PROC_ROM_MT_SIZE];
|
||||
mrb_sym keys[PROC_ROM_MT_SIZE];
|
||||
} proc_rom_data = {
|
||||
.vals = {
|
||||
{ .func = mrb_proc_init_copy },
|
||||
{ .func = proc_arity },
|
||||
{ .func = proc_eql },
|
||||
{ .func = proc_eql },
|
||||
{ .func = proc_hash },
|
||||
},
|
||||
.keys = {
|
||||
MT_KEY(MRB_SYM(initialize_copy), MT_FUNC|MT_PRIVATE),
|
||||
MT_KEY(MRB_SYM(arity), MT_FUNC|MT_NOARG|MT_PUBLIC),
|
||||
MT_KEY(MRB_OPSYM(eq), MT_FUNC|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM_Q(eql), MT_FUNC|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(hash), MT_FUNC|MT_NOARG|MT_PUBLIC),
|
||||
}
|
||||
};
|
||||
static mt_tbl proc_rom_mt = {
|
||||
PROC_ROM_MT_SIZE, PROC_ROM_MT_SIZE,
|
||||
(union mt_ptr*)&proc_rom_data, NULL
|
||||
};
|
||||
#endif /* !MRB_NO_PRESYM */
|
||||
|
||||
void
|
||||
mrb_init_proc(mrb_state *mrb)
|
||||
{
|
||||
@@ -553,11 +581,15 @@ mrb_init_proc(mrb_state *mrb)
|
||||
MRB_SET_INSTANCE_TT(pc, MRB_TT_PROC);
|
||||
MRB_UNDEF_ALLOCATOR(pc);
|
||||
mrb_define_class_method_id(mrb, pc, MRB_SYM(new), mrb_proc_s_new, MRB_ARGS_NONE()|MRB_ARGS_BLOCK());
|
||||
#ifndef MRB_NO_PRESYM
|
||||
mrb_mt_init_rom(pc, &proc_rom_mt);
|
||||
#else
|
||||
mrb_define_private_method_id(mrb, pc, MRB_SYM(initialize_copy), mrb_proc_init_copy, MRB_ARGS_REQ(1));
|
||||
mrb_define_method_id(mrb, pc, MRB_SYM(arity), proc_arity, MRB_ARGS_NONE()); /* 15.2.17.4.2 */
|
||||
mrb_define_method_id(mrb, pc, MRB_OPSYM(eq), proc_eql, MRB_ARGS_REQ(1));
|
||||
mrb_define_method_id(mrb, pc, MRB_SYM_Q(eql), proc_eql, MRB_ARGS_REQ(1));
|
||||
mrb_define_method_id(mrb, pc, MRB_SYM(hash), proc_hash, MRB_ARGS_NONE()); /* 15.2.17.4.2 */
|
||||
#endif
|
||||
|
||||
MRB_METHOD_FROM_PROC(m, &call_proc);
|
||||
mrb_define_method_raw(mrb, pc, MRB_SYM(call), m); /* 15.2.17.4.3 */
|
||||
|
||||
Reference in New Issue
Block a user