From ab9319d886da3c2e60ff2e642b48a4c376a5cd45 Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 2 Dec 2014 04:55:07 +0000 Subject: [PATCH] compile.c: set true and false directly * compile.c (iseq_set_arguments): directly set true and false default values not only nil to keyword arguments. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48680 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- compile.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/compile.c b/compile.c index b505fbe0d4..860d5adf3a 100644 --- a/compile.c +++ b/compile.c @@ -1240,14 +1240,21 @@ iseq_set_arguments(rb_iseq_t *iseq, LINK_ANCHOR *optargs, NODE *node_args) ++rkw; } else { - if (nd_type(val_node) == NODE_LIT) { + switch (nd_type(val_node)) { + case NODE_LIT: dv = val_node->nd_lit; iseq_add_mark_object(iseq, dv); - } - else if (nd_type(val_node) == NODE_NIL) { + break; + case NODE_NIL: dv = Qnil; - } - else { + break; + case NODE_TRUE: + dv = Qtrue; + break; + case NODE_FALSE: + dv = Qfalse; + break; + default: COMPILE_POPED(optargs, "kwarg", node); /* nd_type(node) == NODE_KW_ARG */ dv = complex_mark; } @@ -5358,7 +5365,10 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped) /* required argument. do nothing */ rb_bug("unreachable"); } - else if (nd_type(default_value) == NODE_LIT) { + else if (nd_type(default_value) == NODE_LIT || + nd_type(default_value) == NODE_NIL || + nd_type(default_value) == NODE_TRUE || + nd_type(default_value) == NODE_FALSE) { rb_bug("unreachable"); } else {