Merge pull request #1707 from Fleurer/issue1706

keep stack with nlocals instead of nregs; fix #1706
This commit is contained in:
Yukihiro "Matz" Matsumoto
2014-02-14 17:06:43 +09:00
2 changed files with 26 additions and 5 deletions
+23
View File
@@ -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
+3 -5
View File
@@ -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);