aboutsummaryrefslogtreecommitdiffstats
path: root/gc.c
diff options
context:
space:
mode:
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/gc.c b/gc.c
index e10109b707..d5a708a71a 100644
--- a/gc.c
+++ b/gc.c
@@ -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);