diff options
| author | KOBAYASHI Shuji <[email protected]> | 2019-05-04 16:38:07 +0900 |
|---|---|---|
| committer | KOBAYASHI Shuji <[email protected]> | 2019-05-04 16:38:07 +0900 |
| commit | a5bda13fb76ba50c3742b24b854fb2e86c50b31d (patch) | |
| tree | 9cf94346bc6b06475fefaaaaeb7532343fcaa07c /src/gc.c | |
| parent | 181d14668a3c60e31c8f3de5b6bb075842b6c357 (diff) | |
| download | mruby-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.c | 14 |
1 files changed, 10 insertions, 4 deletions
@@ -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()); |
