зеркало из https://github.com/github/ruby.git
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
This commit is contained in:
Родитель
a81979ec55
Коммит
ab9319d886
22
compile.c
22
compile.c
|
@ -1240,14 +1240,21 @@ iseq_set_arguments(rb_iseq_t *iseq, LINK_ANCHOR *optargs, NODE *node_args)
|
||||||
++rkw;
|
++rkw;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (nd_type(val_node) == NODE_LIT) {
|
switch (nd_type(val_node)) {
|
||||||
|
case NODE_LIT:
|
||||||
dv = val_node->nd_lit;
|
dv = val_node->nd_lit;
|
||||||
iseq_add_mark_object(iseq, dv);
|
iseq_add_mark_object(iseq, dv);
|
||||||
}
|
break;
|
||||||
else if (nd_type(val_node) == NODE_NIL) {
|
case NODE_NIL:
|
||||||
dv = Qnil;
|
dv = Qnil;
|
||||||
}
|
break;
|
||||||
else {
|
case NODE_TRUE:
|
||||||
|
dv = Qtrue;
|
||||||
|
break;
|
||||||
|
case NODE_FALSE:
|
||||||
|
dv = Qfalse;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
COMPILE_POPED(optargs, "kwarg", node); /* nd_type(node) == NODE_KW_ARG */
|
COMPILE_POPED(optargs, "kwarg", node); /* nd_type(node) == NODE_KW_ARG */
|
||||||
dv = complex_mark;
|
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 */
|
/* required argument. do nothing */
|
||||||
rb_bug("unreachable");
|
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");
|
rb_bug("unreachable");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче