From 927615e1f072d8fff3d9b84660cdce15a239e36c Mon Sep 17 00:00:00 2001 From: dearblue Date: Mon, 22 Feb 2021 23:32:43 +0900 Subject: Added other methods for `Binding` - Added to `mruby-binding-core` - `Binding#local_variable_defined?` - `Binding#local_variable_get` - `Binding#local_variable_set` - `Binding#local_variables` - `Binding#receiver` - `Binding#source_location` - `Binding#inspect` - Added to `mruby-proc-binding` - `Proc#binding` The reason for separating `Proc#binding` is that core-mrbgems has a method that returns a closure object to minimize possible problems with being able to manipulate internal variables. By separating it as different mrbgem, each user can judge this problem and incorporate it arbitrarily. --- mrbgems/mruby-proc-ext/src/proc.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'mrbgems/mruby-proc-ext') diff --git a/mrbgems/mruby-proc-ext/src/proc.c b/mrbgems/mruby-proc-ext/src/proc.c index 6117c4d40..9d8a7b037 100644 --- a/mrbgems/mruby-proc-ext/src/proc.c +++ b/mrbgems/mruby-proc-ext/src/proc.c @@ -13,11 +13,9 @@ mrb_proc_lambda_p(mrb_state *mrb, mrb_value self) return mrb_bool_value(MRB_PROC_STRICT_P(p)); } -static mrb_value -mrb_proc_source_location(mrb_state *mrb, mrb_value self) +mrb_value +mrb_proc_source_location(mrb_state *mrb, struct RProc *p) { - struct RProc *p = mrb_proc_ptr(self); - if (MRB_PROC_CFUNC_P(p)) { return mrb_nil_value(); } @@ -34,6 +32,12 @@ mrb_proc_source_location(mrb_state *mrb, mrb_value self) } } +static mrb_value +mrb_proc_source_location_m(mrb_state *mrb, mrb_value self) +{ + return mrb_proc_source_location(mrb, mrb_proc_ptr(self)); +} + static mrb_value mrb_proc_inspect(mrb_state *mrb, mrb_value self) { @@ -183,7 +187,7 @@ mrb_mruby_proc_ext_gem_init(mrb_state* mrb) { struct RClass *p = mrb->proc_class; mrb_define_method(mrb, p, "lambda?", mrb_proc_lambda_p, MRB_ARGS_NONE()); - mrb_define_method(mrb, p, "source_location", mrb_proc_source_location, MRB_ARGS_NONE()); + mrb_define_method(mrb, p, "source_location", mrb_proc_source_location_m, MRB_ARGS_NONE()); mrb_define_method(mrb, p, "to_s", mrb_proc_inspect, MRB_ARGS_NONE()); mrb_define_method(mrb, p, "inspect", mrb_proc_inspect, MRB_ARGS_NONE()); mrb_define_method(mrb, p, "parameters", mrb_proc_parameters, MRB_ARGS_NONE()); -- cgit v1.2.3