diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-03-19 07:54:22 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-03-19 07:54:22 +0900 |
| commit | 2f4eed25017903ab525e881107817024d36e3c66 (patch) | |
| tree | 1a72a6a265f5a54be0b3f5bb257b201a848b4e01 | |
| parent | 792c1add0cc44a60ecad661b86fd16bf773a5d58 (diff) | |
| parent | 40c18fca77175a9e2882baa1975d4460412a4d28 (diff) | |
| download | mruby-2f4eed25017903ab525e881107817024d36e3c66.tar.gz mruby-2f4eed25017903ab525e881107817024d36e3c66.zip | |
Merge pull request #1889 from iij/pr-struct-new-block-def
Set the newly created Struct object to self in its initialization block.
| -rw-r--r-- | include/mruby.h | 1 | ||||
| -rw-r--r-- | mrbgems/mruby-object-ext/src/object.c | 3 | ||||
| -rw-r--r-- | mrbgems/mruby-struct/src/struct.c | 2 | ||||
| -rw-r--r-- | src/class.c | 2 | ||||
| -rw-r--r-- | src/kernel.c | 2 |
5 files changed, 2 insertions, 8 deletions
diff --git a/include/mruby.h b/include/mruby.h index 303b00ccf..3eda0193f 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -364,6 +364,7 @@ void mrb_print_error(mrb_state *mrb); mrb_value mrb_yield(mrb_state *mrb, mrb_value b, mrb_value arg); mrb_value mrb_yield_argv(mrb_state *mrb, mrb_value b, int argc, mrb_value *argv); +mrb_value mrb_yield_internal(mrb_state *mrb, mrb_value b, int argc, mrb_value *argv, mrb_value self, struct RClass *c); void mrb_gc_protect(mrb_state *mrb, mrb_value obj); mrb_value mrb_to_int(mrb_state *mrb, mrb_value val); diff --git a/mrbgems/mruby-object-ext/src/object.c b/mrbgems/mruby-object-ext/src/object.c index 927a23d66..3f30dfa12 100644 --- a/mrbgems/mruby-object-ext/src/object.c +++ b/mrbgems/mruby-object-ext/src/object.c @@ -59,9 +59,6 @@ nil_to_i(mrb_state *mrb, mrb_value obj) * k.instance_exec(5) {|x| @secret+x } #=> 104 */ -mrb_value -mrb_yield_internal(mrb_state *mrb, mrb_value b, int argc, mrb_value *argv, mrb_value self, struct RClass *c); - static mrb_value mrb_obj_instance_exec(mrb_state *mrb, mrb_value self) { diff --git a/mrbgems/mruby-struct/src/struct.c b/mrbgems/mruby-struct/src/struct.c index 34db4c40f..05fc2485d 100644 --- a/mrbgems/mruby-struct/src/struct.c +++ b/mrbgems/mruby-struct/src/struct.c @@ -382,7 +382,7 @@ mrb_struct_s_def(mrb_state *mrb, mrb_value klass) } st = make_struct(mrb, name, rest, struct_class(mrb)); if (!mrb_nil_p(b)) { - mrb_funcall(mrb, b, "call", 1, st); + mrb_yield_internal(mrb, b, 1, &st, st, mrb_class_ptr(klass)); } return st; diff --git a/src/class.c b/src/class.c index 1a55009e4..e9ce74221 100644 --- a/src/class.c +++ b/src/class.c @@ -943,8 +943,6 @@ mrb_mod_instance_methods(mrb_state *mrb, mrb_value mod) return mrb_class_instance_method_list(mrb, recur, c, 0); } -mrb_value mrb_yield_internal(mrb_state *mrb, mrb_value b, int argc, mrb_value *argv, mrb_value self, struct RClass *c); - /* 15.2.2.4.35 */ /* * call-seq: diff --git a/src/kernel.c b/src/kernel.c index b805c3c47..a2331dcc2 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -455,8 +455,6 @@ mrb_obj_init_copy(mrb_state *mrb, mrb_value self) return self; } -mrb_value mrb_yield_internal(mrb_state *mrb, mrb_value b, int argc, mrb_value *argv, mrb_value self, struct RClass *c); - /* 15.3.1.3.18 */ /* * call-seq: |
