Correctly casting node for accessing nd_value and nd_vid in compile.c
This commit is contained in:
parent
b7ee728a83
commit
fbd534679f
37
compile.c
37
compile.c
@ -801,6 +801,37 @@ get_node_colon_nd_mid(const NODE *node)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ID
|
||||||
|
get_nd_vid(const NODE *node)
|
||||||
|
{
|
||||||
|
switch (nd_type(node)) {
|
||||||
|
case NODE_LASGN:
|
||||||
|
return RNODE_LASGN(node)->nd_vid;
|
||||||
|
case NODE_DASGN:
|
||||||
|
return RNODE_DASGN(node)->nd_vid;
|
||||||
|
case NODE_IASGN:
|
||||||
|
return RNODE_IASGN(node)->nd_vid;
|
||||||
|
case NODE_CVASGN:
|
||||||
|
return RNODE_CVASGN(node)->nd_vid;
|
||||||
|
default:
|
||||||
|
rb_bug("unexpected node: %s", ruby_node_name(nd_type(node)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static NODE *
|
||||||
|
get_nd_value(const NODE *node)
|
||||||
|
{
|
||||||
|
switch (nd_type(node)) {
|
||||||
|
case NODE_LASGN:
|
||||||
|
return RNODE_LASGN(node)->nd_value;
|
||||||
|
case NODE_DASGN:
|
||||||
|
return RNODE_DASGN(node)->nd_value;
|
||||||
|
default:
|
||||||
|
rb_bug("unexpected node: %s", ruby_node_name(nd_type(node)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
VALUE
|
VALUE
|
||||||
rb_iseq_compile_callback(rb_iseq_t *iseq, const struct rb_iseq_new_with_callback_callback_func * ifunc)
|
rb_iseq_compile_callback(rb_iseq_t *iseq, const struct rb_iseq_new_with_callback_callback_func * ifunc)
|
||||||
{
|
{
|
||||||
@ -1904,7 +1935,7 @@ iseq_set_arguments_keywords(rb_iseq_t *iseq, LINK_ANCHOR *const optargs,
|
|||||||
|
|
||||||
node = args->kw_args;
|
node = args->kw_args;
|
||||||
while (node) {
|
while (node) {
|
||||||
const NODE *val_node = RNODE_LASGN(node->nd_body)->nd_value;
|
const NODE *val_node = get_nd_value(node->nd_body);
|
||||||
VALUE dv;
|
VALUE dv;
|
||||||
|
|
||||||
if (val_node == NODE_SPECIAL_REQUIRED_KEYWORD) {
|
if (val_node == NODE_SPECIAL_REQUIRED_KEYWORD) {
|
||||||
@ -5218,7 +5249,7 @@ compile_massign_opt(rb_iseq_t *iseq, LINK_ANCHOR *const ret,
|
|||||||
case NODE_DASGN:
|
case NODE_DASGN:
|
||||||
case NODE_IASGN:
|
case NODE_IASGN:
|
||||||
case NODE_CVASGN:
|
case NODE_CVASGN:
|
||||||
MEMORY(RNODE_LASGN(ln)->nd_vid);
|
MEMORY(get_nd_vid(ln));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
@ -9351,7 +9382,7 @@ compile_kw_arg(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node,
|
|||||||
{
|
{
|
||||||
struct rb_iseq_constant_body *const body = ISEQ_BODY(iseq);
|
struct rb_iseq_constant_body *const body = ISEQ_BODY(iseq);
|
||||||
LABEL *end_label = NEW_LABEL(nd_line(node));
|
LABEL *end_label = NEW_LABEL(nd_line(node));
|
||||||
const NODE *default_value = RNODE_DASGN(RNODE_KW_ARG(node)->nd_body)->nd_value;
|
const NODE *default_value = get_nd_value(RNODE_KW_ARG(node)->nd_body);
|
||||||
|
|
||||||
if (default_value == NODE_SPECIAL_REQUIRED_KEYWORD) {
|
if (default_value == NODE_SPECIAL_REQUIRED_KEYWORD) {
|
||||||
/* required argument. do nothing */
|
/* required argument. do nothing */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user