Take care of internal node type
In parse.y, node can be NODE_DEF_TEMP or NODE_EXITS. Hit "unknown node" without taking care of them. For example `ruby --dump=y lib/cgi/util.rb` causes "[BUG] unknown node: 107".
This commit is contained in:
parent
a78acf18ac
commit
b9a2348632
27
parse.y
27
parse.y
@ -1087,6 +1087,19 @@ enum internal_node_type {
|
|||||||
NODE_INTERNAL_LAST
|
NODE_INTERNAL_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
parser_node_name(int node)
|
||||||
|
{
|
||||||
|
switch (node) {
|
||||||
|
case NODE_DEF_TEMP:
|
||||||
|
return "NODE_DEF_TEMP";
|
||||||
|
case NODE_EXITS:
|
||||||
|
return "NODE_EXITS";
|
||||||
|
default:
|
||||||
|
return ruby_node_name(node);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* This node is parse.y internal */
|
/* This node is parse.y internal */
|
||||||
typedef struct RNode_DEF_TEMP {
|
typedef struct RNode_DEF_TEMP {
|
||||||
NODE node;
|
NODE node;
|
||||||
@ -1726,7 +1739,7 @@ add_block_exit(struct parser_params *p, NODE *node)
|
|||||||
switch (nd_type(node)) {
|
switch (nd_type(node)) {
|
||||||
case NODE_BREAK: case NODE_NEXT: case NODE_REDO: break;
|
case NODE_BREAK: case NODE_NEXT: case NODE_REDO: break;
|
||||||
default:
|
default:
|
||||||
compile_error(p, "unexpected node: %s", ruby_node_name(nd_type(node)));
|
compile_error(p, "unexpected node: %s", parser_node_name(nd_type(node)));
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
if (!p->ctxt.in_defined) {
|
if (!p->ctxt.in_defined) {
|
||||||
@ -1813,7 +1826,7 @@ get_nd_value(struct parser_params *p, NODE *node)
|
|||||||
case NODE_MASGN:
|
case NODE_MASGN:
|
||||||
return RNODE_MASGN(node)->nd_value;
|
return RNODE_MASGN(node)->nd_value;
|
||||||
default:
|
default:
|
||||||
compile_error(p, "unexpected node: %s", ruby_node_name(nd_type(node)));
|
compile_error(p, "unexpected node: %s", parser_node_name(nd_type(node)));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1844,7 +1857,7 @@ set_nd_value(struct parser_params *p, NODE *node, NODE *rhs)
|
|||||||
RNODE_CVASGN(node)->nd_value = rhs;
|
RNODE_CVASGN(node)->nd_value = rhs;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
compile_error(p, "unexpected node: %s", ruby_node_name(nd_type(node)));
|
compile_error(p, "unexpected node: %s", parser_node_name(nd_type(node)));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1866,7 +1879,7 @@ get_nd_vid(struct parser_params *p, NODE *node)
|
|||||||
case NODE_CVASGN:
|
case NODE_CVASGN:
|
||||||
return RNODE_CVASGN(node)->nd_vid;
|
return RNODE_CVASGN(node)->nd_vid;
|
||||||
default:
|
default:
|
||||||
compile_error(p, "unexpected node: %s", ruby_node_name(nd_type(node)));
|
compile_error(p, "unexpected node: %s", parser_node_name(nd_type(node)));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1892,7 +1905,7 @@ get_nd_args(struct parser_params *p, NODE *node)
|
|||||||
case NODE_NEXT:
|
case NODE_NEXT:
|
||||||
return 0;
|
return 0;
|
||||||
default:
|
default:
|
||||||
compile_error(p, "unexpected node: %s", ruby_node_name(nd_type(node)));
|
compile_error(p, "unexpected node: %s", parser_node_name(nd_type(node)));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1908,7 +1921,7 @@ get_nd_args(struct parser_params *p, NODE *node)
|
|||||||
rb_parser_printf(p, "NODE_SPECIAL");
|
rb_parser_printf(p, "NODE_SPECIAL");
|
||||||
}
|
}
|
||||||
else if ($$) {
|
else if ($$) {
|
||||||
rb_parser_printf(p, "%s", ruby_node_name(nd_type(RNODE($$))));
|
rb_parser_printf(p, "%s", parser_node_name(nd_type(RNODE($$))));
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
#endif
|
#endif
|
||||||
@ -12790,7 +12803,7 @@ symbol_append(struct parser_params *p, NODE *symbols, NODE *symbol)
|
|||||||
RB_OBJ_WRITTEN(p->ast, Qnil, RNODE_STR(symbol)->nd_lit = rb_str_intern(RNODE_STR(symbol)->nd_lit));
|
RB_OBJ_WRITTEN(p->ast, Qnil, RNODE_STR(symbol)->nd_lit = rb_str_intern(RNODE_STR(symbol)->nd_lit));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
compile_error(p, "unexpected node as symbol: %s", ruby_node_name(type));
|
compile_error(p, "unexpected node as symbol: %s", parser_node_name(type));
|
||||||
}
|
}
|
||||||
return list_append(p, symbols, symbol);
|
return list_append(p, symbols, symbol);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user