diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-12-06 08:10:47 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-12-06 08:10:47 +0000 |
commit | b9cafaf5246fb240f52ebfce67ae2b72dd4eb363 (patch) | |
tree | 842609f74c880929bf3644ca9101e632341df086 /gc.c | |
parent | c7572f2fe777c96880905ee37ab313cd52b5aa51 (diff) | |
download | ruby-b9cafaf5246fb240f52ebfce67ae2b72dd4eb363.tar.gz |
vm_insnhelper.c: rb_get_kwargs
* vm_insnhelper.c (rb_get_kwargs): get keyword argument values from an
option hash, not only checking keys.
* dir.c (dir_initialize): use rb_get_kwargs.
* gc.c (gc_start_internal): ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44035 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
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); |