From 9ebfeac11171b061dd2021b9de8ff5dc74a58324 Mon Sep 17 00:00:00 2001 From: Li Yazhou Date: Fri, 14 Feb 2014 11:16:56 +0800 Subject: keep stack with nlocals instead of nregs; fix #1706 --- mrbgems/mruby-bin-mirb/tools/mirb/mirb.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c b/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c index 183003307..a9d6850a5 100644 --- a/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +++ b/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c @@ -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); -- cgit v1.2.3 From 876e7de7ecbaafe9386a0d562e13ee315d32036d Mon Sep 17 00:00:00 2001 From: Li Yazhou Date: Fri, 14 Feb 2014 11:32:42 +0800 Subject: add a regression test for #1706 --- mrbgems/mruby-bin-mirb/bintest/mirb.rb | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/mrbgems/mruby-bin-mirb/bintest/mirb.rb b/mrbgems/mruby-bin-mirb/bintest/mirb.rb index ed53321bd..ea13eb0d2 100644 --- a/mrbgems/mruby-bin-mirb/bintest/mirb.rb +++ b/mrbgems/mruby-bin-mirb/bintest/mirb.rb @@ -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 -- cgit v1.2.3