diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-09-30 10:13:58 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-09-30 10:13:58 +0900 |
| commit | d85cce9539df91b8391c2a7f51820cb48a395839 (patch) | |
| tree | 46017853a2d2c6faf58f34a687024362ca029c56 /mrbgems/mruby-eval/src | |
| parent | b090f43251ec8e3fffafa98932f359f053db4f90 (diff) | |
| parent | 2551d14ff119a4395e544561ecffffee3473c200 (diff) | |
| download | mruby-d85cce9539df91b8391c2a7f51820cb48a395839.tar.gz mruby-d85cce9539df91b8391c2a7f51820cb48a395839.zip | |
Merge pull request #2598 from SatoshiOdawara/fix_lv_scope_eval
fixed. closures scope in eval(string)
Diffstat (limited to 'mrbgems/mruby-eval/src')
| -rw-r--r-- | mrbgems/mruby-eval/src/eval.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/mrbgems/mruby-eval/src/eval.c b/mrbgems/mruby-eval/src/eval.c index 8ee651718..e97a09e80 100644 --- a/mrbgems/mruby-eval/src/eval.c +++ b/mrbgems/mruby-eval/src/eval.c @@ -53,13 +53,22 @@ patch_irep(mrb_state *mrb, mrb_irep *irep, int bnest) size_t i; mrb_code c; - for (i = 0; i < irep->rlen; i++) { - patch_irep(mrb, irep->reps[i], bnest + 1); - } - for (i = 0; i < irep->ilen; i++) { c = irep->iseq[i]; switch(GET_OPCODE(c)){ + case OP_EPUSH: + patch_irep(mrb, irep->reps[GETARG_Bx(c)], bnest + 1); + break; + + case OP_LAMBDA: + { + int arg_c = GETARG_c(c); + if (arg_c & OP_L_CAPTURE) { + patch_irep(mrb, irep->reps[GETARG_b(c)], bnest + 1); + } + } + break; + case OP_SEND: if (GETARG_C(c) != 0) { break; |
