summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/mruby/khash.h4
-rw-r--r--mrblib/numeric.rb6
-rw-r--r--src/codegen.c1
-rw-r--r--src/string.c2
-rw-r--r--src/vm.c5
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)
diff --git a/src/vm.c b/src/vm.c
index 09988a996..05d7139e6 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -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;