summaryrefslogtreecommitdiffhomepage
path: root/src/gc.c
diff options
context:
space:
mode:
authorKOBAYASHI Shuji <[email protected]>2019-05-04 16:38:07 +0900
committerKOBAYASHI Shuji <[email protected]>2019-05-04 16:38:07 +0900
commita5bda13fb76ba50c3742b24b854fb2e86c50b31d (patch)
tree9cf94346bc6b06475fefaaaaeb7532343fcaa07c /src/gc.c
parent181d14668a3c60e31c8f3de5b6bb075842b6c357 (diff)
downloadmruby-a5bda13fb76ba50c3742b24b854fb2e86c50b31d.tar.gz
mruby-a5bda13fb76ba50c3742b24b854fb2e86c50b31d.zip
Check whether object is immediate in `mrb_gc_(register|unregister)`
Diffstat (limited to 'src/gc.c')
-rw-r--r--src/gc.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/gc.c b/src/gc.c
index 27f3716ec..5e7440d50 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -466,9 +466,12 @@ mrb_gc_protect(mrb_state *mrb, mrb_value obj)
MRB_API void
mrb_gc_register(mrb_state *mrb, mrb_value obj)
{
- mrb_sym root = mrb_intern_lit(mrb, GC_ROOT_NAME);
- mrb_value table = mrb_gv_get(mrb, root);
+ mrb_sym root;
+ mrb_value table;
+ if (mrb_immediate_p(obj)) return;
+ root = mrb_intern_lit(mrb, GC_ROOT_NAME);
+ table = mrb_gv_get(mrb, root);
if (mrb_nil_p(table) || mrb_type(table) != MRB_TT_ARRAY) {
table = mrb_ary_new(mrb);
mrb_gv_set(mrb, root, table);
@@ -480,11 +483,14 @@ mrb_gc_register(mrb_state *mrb, mrb_value obj)
MRB_API void
mrb_gc_unregister(mrb_state *mrb, mrb_value obj)
{
- mrb_sym root = mrb_intern_lit(mrb, GC_ROOT_NAME);
- mrb_value table = mrb_gv_get(mrb, root);
+ mrb_sym root;
+ mrb_value table;
struct RArray *a;
mrb_int i;
+ if (mrb_immediate_p(obj)) return;
+ root = mrb_intern_lit(mrb, GC_ROOT_NAME);
+ table = mrb_gv_get(mrb, root);
if (mrb_nil_p(table)) return;
if (mrb_type(table) != MRB_TT_ARRAY) {
mrb_gv_set(mrb, root, mrb_nil_value());