diff options
| -rw-r--r-- | include/mruby/khash.h | 4 | ||||
| -rw-r--r-- | mrblib/numeric.rb | 6 | ||||
| -rw-r--r-- | src/codegen.c | 1 | ||||
| -rw-r--r-- | src/string.c | 2 | ||||
| -rw-r--r-- | src/vm.c | 5 |
5 files changed, 12 insertions, 6 deletions
diff --git a/include/mruby/khash.h b/include/mruby/khash.h index 5121f4708..28bbfe434 100644 --- a/include/mruby/khash.h +++ b/include/mruby/khash.h @@ -96,7 +96,7 @@ kh_fill_flags(uint8_t *p, uint8_t c, size_t len) void kh_alloc_##name(mrb_state *mrb, kh_##name##_t *h) \ { \ khint_t sz = h->n_buckets; \ - size_t len = sizeof(khkey_t) + (kh_is_map ? sizeof(khval_t) : 0); \ + size_t len = sizeof(khkey_t) + (kh_is_map ? sizeof(khval_t) : 0); \ uint8_t *p = (uint8_t*)mrb_malloc(mrb, sizeof(uint8_t)*sz/4+len*sz); \ h->size = h->n_occupied = 0; \ h->keys = (khkey_t *)p; \ @@ -169,7 +169,7 @@ kh_fill_flags(uint8_t *p, uint8_t c, size_t len) khint_t kh_put_##name(mrb_state *mrb, kh_##name##_t *h, khkey_t key) \ { \ khint_t k; \ - if (h->n_occupied >= khash_upper_bound(h)) { \ + if (h->n_occupied >= khash_upper_bound(h)) { \ kh_resize_##name(mrb, h, h->n_buckets*2); \ } \ k = __hash_func(mrb,key) & khash_mask(h); \ diff --git a/mrblib/numeric.rb b/mrblib/numeric.rb index 034019e8b..5be3c90fc 100644 --- a/mrblib/numeric.rb +++ b/mrblib/numeric.rb @@ -45,6 +45,8 @@ module Integral # # ISO 15.2.8.3.15 def downto(num, &block) + return to_enum(:downto, num) unless block_given? + i = self.to_i while(i >= num) block.call(i) @@ -84,6 +86,8 @@ module Integral # # ISO 15.2.8.3.27 def upto(num, &block) + return to_enum(:upto, num) unless block_given? + i = self.to_i while(i <= num) block.call(i) @@ -97,6 +101,8 @@ module Integral # incremented by +step+ (default 1). # def step(num, step=1, &block) + return to_enum(:step, num, step) unless block_given? + i = if num.kind_of? Float then self.to_f else self end while(i <= num) block.call(i) diff --git a/src/codegen.c b/src/codegen.c index 418e1f371..c869285d9 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -719,6 +719,7 @@ attrsym(codegen_scope *s, mrb_sym a) + 1 /* '=' */ + 1 /* '\0' */ ); + mrb_assert(len <= SIZE_MAX); memcpy(name2, name, (size_t)len); name2[len] = '='; name2[len+1] = '\0'; diff --git a/src/string.c b/src/string.c index 439cb5409..e5aac98b7 100644 --- a/src/string.c +++ b/src/string.c @@ -754,7 +754,7 @@ mrb_memsearch(const void *x0, mrb_int m, const void *y0, mrb_int n) else if (m < 1) { return 0; } - else if (m == 1) { + else if (m == 1) { const unsigned char *ys = y, *ye = ys + n; for (; y < ye; ++y) { if (*x == *y) @@ -460,7 +460,6 @@ mrb_f_send(mrb_state *mrb, mrb_value self) ci->mid = name; ci->target_class = c; ci->proc = p; - ci->nregs = p->body.irep->nregs; regs = mrb->c->stack+1; /* remove first symbol from arguments */ if (ci->argc >= 0) { @@ -477,8 +476,8 @@ mrb_f_send(mrb_state *mrb, mrb_value self) return p->body.func(mrb, self); } - cipush(mrb); - ci = mrb->c->ci; + ci->nregs = p->body.irep->nregs; + ci = cipush(mrb); ci->target_class = 0; ci->pc = p->body.irep->iseq; ci->stackent = mrb->c->stack; |
