mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Merge pull request #1707 from Fleurer/issue1706
keep stack with nlocals instead of nregs; fix #1706
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user