From 44dc05f12a06e329119b6bf5606e4836b653c48f Mon Sep 17 00:00:00 2001 From: take_cheeze Date: Fri, 2 May 2014 23:20:48 +0900 Subject: Implement Struct#values_at and Array#values_at . Add API `mrb_get_values_at()` to mruby/range.h . --- include/mruby/range.h | 1 + 1 file changed, 1 insertion(+) (limited to 'include') diff --git a/include/mruby/range.h b/include/mruby/range.h index 828ec2691..61beb2319 100644 --- a/include/mruby/range.h +++ b/include/mruby/range.h @@ -27,6 +27,7 @@ struct RRange { 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); +mrb_value mrb_get_values_at(mrb_state *mrb, mrb_value obj, mrb_int olen, mrb_int argc, const mrb_value *argv, mrb_value (*func)(mrb_state*, mrb_value, mrb_int)); #if defined(__cplusplus) } /* extern "C" { */ -- cgit v1.2.3 From f977772359a8a5582df618568a229a7f1112c6cd Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sat, 3 May 2014 23:45:40 +0900 Subject: new macro mrb_int(mrb,x) to retrieve mrb_int from mrb_value with conversion if needed --- include/mruby.h | 1 + src/range.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) (limited to 'include') diff --git a/include/mruby.h b/include/mruby.h index 9cf578836..db3b06aa8 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -381,6 +381,7 @@ mrb_value mrb_yield_with_class(mrb_state *mrb, mrb_value b, mrb_int argc, const void mrb_gc_protect(mrb_state *mrb, mrb_value obj); mrb_value mrb_to_int(mrb_state *mrb, mrb_value val); +#define mrb_int(mrb, val) mrb_fixnum(mrb_to_int(mrb, val)) void mrb_check_type(mrb_state *mrb, mrb_value x, enum mrb_vtype t); typedef enum call_type { diff --git a/src/range.c b/src/range.c index b392f37b2..3e5af1894 100644 --- a/src/range.c +++ b/src/range.c @@ -242,8 +242,8 @@ range_beg_len(mrb_state *mrb, mrb_value range, mrb_int *begp, mrb_int *lenp, mrb if (mrb_type(range) != MRB_TT_RANGE) return FALSE; - beg = b = mrb_fixnum(mrb_to_int(mrb, r->edges->beg)); - end = e = mrb_fixnum(mrb_to_int(mrb, r->edges->end)); + beg = b = mrb_int(mrb, r->edges->beg); + end = e = mrb_int(mrb, r->edges->end); if (beg < 0) { beg += len; -- cgit v1.2.3