summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/mruby/range.h4
-rw-r--r--mrblib/array.rb7
-rw-r--r--src/codegen.c4
-rw-r--r--src/range.c4
-rw-r--r--src/vm.c2
5 files changed, 9 insertions, 12 deletions
diff --git a/include/mruby/range.h b/include/mruby/range.h
index 78ddf32a3..828ec2691 100644
--- a/include/mruby/range.h
+++ b/include/mruby/range.h
@@ -19,13 +19,13 @@ typedef struct mrb_range_edges {
struct RRange {
MRB_OBJECT_HEADER;
mrb_range_edges *edges;
- int excl;
+ mrb_bool excl : 1;
};
#define mrb_range_ptr(v) ((struct RRange*)(mrb_ptr(v)))
#define mrb_range_value(p) mrb_obj_value((void*)(p))
-mrb_value mrb_range_new(mrb_state*, mrb_value, mrb_value, int);
+mrb_value mrb_range_new(mrb_state*, mrb_value, mrb_value, mrb_bool);
mrb_bool mrb_range_beg_len(mrb_state *mrb, mrb_value range, mrb_int *begp, mrb_int *lenp, mrb_int len);
#if defined(__cplusplus)
diff --git a/mrblib/array.rb b/mrblib/array.rb
index 16e69d5d1..3218aa858 100644
--- a/mrblib/array.rb
+++ b/mrblib/array.rb
@@ -187,11 +187,8 @@ class Array
# internal method to convert multi-value to single value
def __svalue
- case self.size
- when 0
- return nil
- when 1
- self[0]
+ if self.size < 2
+ self.first
else
self
end
diff --git a/src/codegen.c b/src/codegen.c
index b35599470..204ec64d0 100644
--- a/src/codegen.c
+++ b/src/codegen.c
@@ -1448,7 +1448,7 @@ codegen(codegen_scope *s, node *tree, int val)
codegen(s, tree->cdr, val);
if (val) {
pop(); pop();
- genop(s, MKOP_ABC(OP_RANGE, cursp(), cursp(), 0));
+ genop(s, MKOP_ABC(OP_RANGE, cursp(), cursp(), FALSE));
push();
}
break;
@@ -1458,7 +1458,7 @@ codegen(codegen_scope *s, node *tree, int val)
codegen(s, tree->cdr, val);
if (val) {
pop(); pop();
- genop(s, MKOP_ABC(OP_RANGE, cursp(), cursp(), 1));
+ genop(s, MKOP_ABC(OP_RANGE, cursp(), cursp(), TRUE));
push();
}
break;
diff --git a/src/range.c b/src/range.c
index 6b1f7faa2..b59b234ef 100644
--- a/src/range.c
+++ b/src/range.c
@@ -33,7 +33,7 @@ range_check(mrb_state *mrb, mrb_value a, mrb_value b)
}
mrb_value
-mrb_range_new(mrb_state *mrb, mrb_value beg, mrb_value end, int excl)
+mrb_range_new(mrb_state *mrb, mrb_value beg, mrb_value end, mrb_bool excl)
{
struct RRange *r;
@@ -95,7 +95,7 @@ mrb_range_excl(mrb_state *mrb, mrb_value range)
}
static void
-range_init(mrb_state *mrb, mrb_value range, mrb_value beg, mrb_value end, int exclude_end)
+range_init(mrb_state *mrb, mrb_value range, mrb_value beg, mrb_value end, mrb_bool exclude_end)
{
struct RRange *r = mrb_range_ptr(range);
diff --git a/src/vm.c b/src/vm.c
index 9d62ce548..717c927c8 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -1114,7 +1114,7 @@ RETRY_TRY_BLOCK:
}
regs = mrb->c->stack;
regs[0] = m->env->stack[0];
- pc = m->body.irep->iseq;
+ pc = irep->iseq;
JUMP;
}
}