diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-08-24 23:12:08 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-08-26 02:01:50 +0900 |
| commit | 0c52112dd41a040a77bbb4dec339ac73da4992b7 (patch) | |
| tree | a607775906e681552c65f31b99cc34f33aa1b01d /src/range.c | |
| parent | 04dbbff3c13a0b83cf02982791eb6834b9934099 (diff) | |
| download | mruby-0c52112dd41a040a77bbb4dec339ac73da4992b7.tar.gz mruby-0c52112dd41a040a77bbb4dec339ac73da4992b7.zip | |
Keep `Range` class in `mrb_state` structure for performance.
Diffstat (limited to 'src/range.c')
| -rw-r--r-- | src/range.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/src/range.c b/src/range.c index 2cb6f2361..eb9a9c61f 100644 --- a/src/range.c +++ b/src/range.c @@ -10,8 +10,6 @@ #include <mruby/string.h> #include <mruby/array.h> -#define RANGE_CLASS (mrb_class_get(mrb, "Range")) - MRB_API struct RRange* mrb_range_ptr(mrb_state *mrb, mrb_value v) { @@ -50,7 +48,7 @@ mrb_range_new(mrb_state *mrb, mrb_value beg, mrb_value end, mrb_bool excl) struct RRange *r; range_check(mrb, beg, end); - r = (struct RRange*)mrb_obj_alloc(mrb, MRB_TT_RANGE, RANGE_CLASS); + r = (struct RRange*)mrb_obj_alloc(mrb, MRB_TT_RANGE, mrb->range_class); r->edges = (mrb_range_edges *)mrb_malloc(mrb, sizeof(mrb_range_edges)); r->edges->beg = beg; r->edges->end = end; @@ -353,7 +351,7 @@ range_eql(mrb_state *mrb, mrb_value range) mrb_get_args(mrb, "o", &obj); if (mrb_obj_equal(mrb, range, obj)) return mrb_true_value(); - if (!mrb_obj_is_kind_of(mrb, obj, RANGE_CLASS)) { + if (!mrb_obj_is_kind_of(mrb, obj, mrb->range_class)) { return mrb_false_value(); } if (mrb_type(obj) != MRB_TT_RANGE) return mrb_false_value(); @@ -423,6 +421,7 @@ mrb_init_range(mrb_state *mrb) struct RClass *r; r = mrb_define_class(mrb, "Range", mrb->object_class); /* 15.2.14 */ + mrb->range_class = r; MRB_SET_INSTANCE_TT(r, MRB_TT_RANGE); mrb_define_method(mrb, r, "begin", mrb_range_beg, MRB_ARGS_NONE()); /* 15.2.14.4.3 */ |
