Commit 7586d474 authored by Yukihiro "Matz" Matsumoto's avatar Yukihiro "Matz" Matsumoto

Merge pull request #1707 from Fleurer/issue1706

keep stack with nlocals instead of nregs; fix #1706
parents 007ed07e 876e7de7
......@@ -10,3 +10,26 @@ assert('regression for #1563') do
o, s = Open3.capture2('bin/mirb', :stdin_data => "a=1;b=2;c=3\nb\nc")
assert_true o.include?('=> 3')
end
assert('regression for #1706') do
o, s = Open3.capture2('bin/mirb', :stdin_data => %{
if false
a = 1
b = 1
end
puts "a: \#{a.inspect}"
puts "b: \#{b.inspect}"
})
assert_true o.include?('a: nil')
assert_true o.include?('b: nil')
o, s = Open3.capture2('bin/mirb', :stdin_data => %{
a = 1
b = 2
if false
c = 3
end
puts "c: \#{c.inspect}"
})
assert_true o.include?('c: nil')
end
......@@ -251,8 +251,7 @@ main(int argc, char **argv)
int n;
mrb_bool code_block_open = FALSE;
int ai;
mrb_bool first_command = TRUE;
unsigned int nregs;
unsigned int stack_keep = 0;
/* new interpreter instance */
mrb = mrb_open();
......@@ -365,12 +364,12 @@ main(int argc, char **argv)
mrb_codedump_all(mrb, proc);
}
/* pass a proc for evaulation */
nregs = first_command ? 0: proc->body.irep->nregs;
/* evaluate the bytecode */
result = mrb_context_run(mrb,
proc,
mrb_top_self(mrb),
nregs);
stack_keep);
stack_keep = proc->body.irep->nlocals;
/* did an exception occur? */
if (mrb->exc) {
p(mrb, mrb_obj_value(mrb->exc), 0);
......@@ -390,7 +389,6 @@ main(int argc, char **argv)
}
mrb_parser_free(parser);
cxt->lineno++;
first_command = FALSE;
}
mrbc_context_free(mrb, cxt);
mrb_close(mrb);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment