diff options
| author | dearblue <[email protected]> | 2021-02-22 23:32:18 +0900 |
|---|---|---|
| committer | dearblue <[email protected]> | 2021-02-22 23:32:18 +0900 |
| commit | 792f6ac6700469ddf9be8f87ca3376082f9af7f3 (patch) | |
| tree | f04a5ffe00d4f442286a833b06d472941b20c93c /mrbgems/mruby-metaprog/src | |
| parent | 935ffa46a3a89a5f1662e5a4111ca0ed19566698 (diff) | |
| download | mruby-792f6ac6700469ddf9be8f87ca3376082f9af7f3.tar.gz mruby-792f6ac6700469ddf9be8f87ca3376082f9af7f3.zip | |
Adjustment of the current HEAD and bindings, and separation
Make changes to make `Binding` work.
At the same time, it separates `Binding#eval`, which depends on `mruby-eval`, from `mruby-binding-core`.
Diffstat (limited to 'mrbgems/mruby-metaprog/src')
| -rw-r--r-- | mrbgems/mruby-metaprog/src/metaprog.c | 37 |
1 files changed, 3 insertions, 34 deletions
diff --git a/mrbgems/mruby-metaprog/src/metaprog.c b/mrbgems/mruby-metaprog/src/metaprog.c index f2f2e7dda..99a1b46da 100644 --- a/mrbgems/mruby-metaprog/src/metaprog.c +++ b/mrbgems/mruby-metaprog/src/metaprog.c @@ -117,6 +117,8 @@ mrb_obj_ivar_set(mrb_state *mrb, mrb_value self) return val; } +mrb_value mrb_proc_local_variables(mrb_state *mrb, const struct RProc *proc); + /* 15.3.1.2.7 */ /* 15.3.1.3.28 */ /* @@ -133,40 +135,7 @@ mrb_obj_ivar_set(mrb_state *mrb, mrb_value self) static mrb_value mrb_local_variables(mrb_state *mrb, mrb_value self) { - const struct RProc *proc; - const mrb_irep *irep; - mrb_value vars; - size_t i; - - proc = mrb->c->ci[-1].proc; - - if (proc == NULL || MRB_PROC_CFUNC_P(proc)) { - return mrb_ary_new(mrb); - } - vars = mrb_hash_new(mrb); - while (proc) { - if (MRB_PROC_CFUNC_P(proc)) break; - irep = proc->body.irep; - if (irep->lv) { - for (i = 0; i + 1 < irep->nlocals; ++i) { - if (irep->lv[i]) { - mrb_sym sym = irep->lv[i]; - const char *name = mrb_sym_name(mrb, sym); - switch (name[0]) { - case '*': case '&': - break; - default: - mrb_hash_set(mrb, vars, mrb_symbol_value(sym), mrb_true_value()); - break; - } - } - } - } - if (MRB_PROC_SCOPE_P(proc)) break; - proc = proc->upper; - } - - return mrb_hash_keys(mrb, vars); + return mrb_proc_local_variables(mrb, mrb->c->ci[-1].proc); } KHASH_DECLARE(st, mrb_sym, char, FALSE) |
