summaryrefslogtreecommitdiffhomepage
path: root/src/range.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-08-24 23:12:08 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-08-26 02:01:50 +0900
commit0c52112dd41a040a77bbb4dec339ac73da4992b7 (patch)
treea607775906e681552c65f31b99cc34f33aa1b01d /src/range.c
parent04dbbff3c13a0b83cf02982791eb6834b9934099 (diff)
downloadmruby-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.c7
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 */