diff --git a/binding-mri/disposable-binding.h b/binding-mri/disposable-binding.h index 7dfe928..fa057a4 100644 --- a/binding-mri/disposable-binding.h +++ b/binding-mri/disposable-binding.h @@ -52,9 +52,8 @@ disposableDisposeChildren(VALUE disp) if (NIL_P(children)) return; - ID dispFun = rb_intern("dispose"); + ID dispFun = rb_intern("_mkxp_dispose_alias"); - /* Note: RMXP doesn't call overridden 'dispose' methods here */ for (long i = 0; i < RARRAY_LEN(children); ++i) rb_funcall2(rb_ary_entry(children, i), dispFun, 0, 0); } @@ -98,6 +97,10 @@ static void disposableBindingInit(VALUE klass) { _rb_define_method(klass, "dispose", disposableDispose); _rb_define_method(klass, "disposed?", disposableIsDisposed); + + /* Make sure we always have access to the original method, even + * if it is overridden by user scripts */ + rb_define_alias(klass, "_mkxp_dispose_alias", "dispose"); } template diff --git a/binding-mruby/binding-util.cpp b/binding-mruby/binding-util.cpp index 49c2563..c062eec 100644 --- a/binding-mruby/binding-util.cpp +++ b/binding-mruby/binding-util.cpp @@ -55,7 +55,7 @@ struct SYMD(default_color), SYMD(default_out_color), SYMD(children), - SYMD(dispose) + SYMD(_mkxp_dispose_alias) }; static elementsN(symData); diff --git a/binding-mruby/binding-util.h b/binding-mruby/binding-util.h index 5dd5cd7..142a386 100644 --- a/binding-mruby/binding-util.h +++ b/binding-mruby/binding-util.h @@ -56,7 +56,7 @@ enum CommonSymbol CSdefault_color, CSdefault_out_color, CSchildren, - CSdispose, + CS_mkxp_dispose_alias, CommonSymbolsMax }; diff --git a/binding-mruby/disposable-binding.h b/binding-mruby/disposable-binding.h index 9b1895c..7cf80cb 100644 --- a/binding-mruby/disposable-binding.h +++ b/binding-mruby/disposable-binding.h @@ -60,7 +60,7 @@ disposableDisposeChildren(mrb_state *mrb, mrb_value disp) for (mrb_int i = 0; i < RARRAY_LEN(children); ++i) mrb_funcall_argv(mrb, mrb_ary_entry(children, i), - mrbData->symbols[CSdispose], 0, 0); + mrbData->symbols[CS_mkxp_dispose_alias], 0, 0); } template @@ -99,6 +99,9 @@ static void disposableBindingInit(mrb_state *mrb, RClass *klass) { mrb_define_method(mrb, klass, "dispose", disposableDispose, MRB_ARGS_NONE()); mrb_define_method(mrb, klass, "disposed?", disposableIsDisposed, MRB_ARGS_NONE()); + + mrb_alias_method(mrb, klass, getMrbData(mrb)->symbols[CS_mkxp_dispose_alias], + mrb_intern_lit(mrb, "dispose")); } template