diff options
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 16 |
1 files changed, 7 insertions, 9 deletions
@@ -5014,26 +5014,24 @@ gc_start_internal(int argc, VALUE *argv, VALUE self) rb_objspace_t *objspace = &rb_objspace; int full_mark = TRUE, immediate_sweep = TRUE; VALUE opt = Qnil; - VALUE kwval; static ID keyword_ids[2]; - static VALUE keyword_syms[2]; rb_scan_args(argc, argv, "0:", &opt); if (!NIL_P(opt)) { + VALUE kwvals[2]; + if (!keyword_ids[0]) { keyword_ids[0] = rb_intern("full_mark"); keyword_ids[1] = rb_intern("immediate_sweep"); - keyword_syms[0] = ID2SYM(keyword_ids[0]); - keyword_syms[1] = ID2SYM(keyword_ids[1]); } - rb_check_keyword_opthash(opt, keyword_ids, 0, 2); + rb_get_kwargs(opt, keyword_ids, 0, 2, kwvals); - if ((kwval = rb_hash_lookup2(opt, keyword_syms[0], Qundef)) != Qundef) - full_mark = RTEST(kwval); - if ((kwval = rb_hash_lookup2(opt, keyword_syms[1], Qundef)) != Qundef) - immediate_sweep = RTEST(kwval); + if (kwvals[0] != Qundef) + full_mark = RTEST(kwvals[0]); + if (kwvals[1] != Qundef) + immediate_sweep = RTEST(kwvals[1]); } garbage_collect(objspace, full_mark, immediate_sweep, GPR_FLAG_METHOD); |