diff options
| -rw-r--r-- | mrblib/array.rb | 10 | ||||
| -rw-r--r-- | tools/mirb/mirb.c | 3 |
2 files changed, 11 insertions, 2 deletions
diff --git a/mrblib/array.rb b/mrblib/array.rb index 3c4e2dd76..56bf5ceb2 100644 --- a/mrblib/array.rb +++ b/mrblib/array.rb @@ -11,8 +11,14 @@ class Array # ISO 15.2.12.5.10 def each(&block) idx, length = -1, self.length-1 - while(idx < length) - block.call(self[idx += 1]) + while idx < length and length < self.length and length = self.length-1 + elm = self[idx += 1] + unless elm + if elm == nil and length >= self.length + break + end + end + block.call(elm) end self end diff --git a/tools/mirb/mirb.c b/tools/mirb/mirb.c index b89c63cff..85c3249d2 100644 --- a/tools/mirb/mirb.c +++ b/tools/mirb/mirb.c @@ -159,6 +159,7 @@ main(void) mrb_value result; int n; int code_block_open = FALSE; + int ai; print_hint(); @@ -172,6 +173,7 @@ main(void) cxt = mrbc_context_new(mrb); cxt->capture_errors = 1; + ai = mrb_gc_arena_save(mrb); while (TRUE) { #ifndef ENABLE_READLINE print_cmdline(code_block_open); @@ -253,6 +255,7 @@ main(void) ruby_code[0] = '\0'; last_code_line[0] = '\0'; mrb_parser_free(parser); + mrb_gc_arena_restore(mrb, ai); } } mrbc_context_free(mrb, cxt); |
