summaryrefslogtreecommitdiffhomepage
path: root/src/proc.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2021-06-28 09:13:54 +0900
committerGitHub <[email protected]>2021-06-28 09:13:54 +0900
commitd63c0df6bcd5851522c4b982dba4e0a93f44a2d7 (patch)
tree83c1d2a39786d802d3d09da6d5a4be56d9fe12c2 /src/proc.c
parente462b42ff05254f8142662c24b426b5af3b98173 (diff)
parentc182903ea0ee5c904725f336373f608962059996 (diff)
downloadmruby-d63c0df6bcd5851522c4b982dba4e0a93f44a2d7.tar.gz
mruby-d63c0df6bcd5851522c4b982dba4e0a93f44a2d7.zip
Merge pull request #5493 from dearblue/binding.2
Fixed finding variables from `proc` in `binding.eval` failed
Diffstat (limited to 'src/proc.c')
-rw-r--r--src/proc.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/proc.c b/src/proc.c
index 2717cd610..1d5a4aa76 100644
--- a/src/proc.c
+++ b/src/proc.c
@@ -417,7 +417,14 @@ mrb_proc_merge_lvar(mrb_state *mrb, mrb_irep *irep, struct REnv *env, int num, c
mrb_sym *destlv = (mrb_sym*)irep->lv + irep->nlocals - 1 /* self */;
mrb_value *destst = env->stack + irep->nlocals;
memmove(destlv, lv, sizeof(mrb_sym) * num);
- memmove(destst, stack, sizeof(mrb_value) * num);
+ if (stack) {
+ memmove(destst, stack, sizeof(mrb_value) * num);
+ }
+ else {
+ for (int i = num; i > 0; i--, destst++) {
+ *destst = mrb_nil_value();
+ }
+ }
irep->nlocals += num;
irep->nregs = irep->nlocals;
MRB_ENV_SET_LEN(env, irep->nlocals);