[ruby/prism] Fix up void value expression checking for rescue
https://github.com/ruby/prism/commit/509ff88e92
This commit is contained in:
parent
768ceceb12
commit
12cf9f2ae5
@ -1050,25 +1050,44 @@ pm_check_value_expression(pm_parser_t *parser, pm_node_t *node) {
|
|||||||
case PM_BEGIN_NODE: {
|
case PM_BEGIN_NODE: {
|
||||||
pm_begin_node_t *cast = (pm_begin_node_t *) node;
|
pm_begin_node_t *cast = (pm_begin_node_t *) node;
|
||||||
|
|
||||||
if (cast->statements == NULL && cast->ensure_clause != NULL) {
|
if (cast->ensure_clause != NULL) {
|
||||||
node = (pm_node_t *) cast->ensure_clause;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (cast->rescue_clause != NULL) {
|
if (cast->rescue_clause != NULL) {
|
||||||
if (cast->rescue_clause->statements == NULL) {
|
pm_node_t *vn = pm_check_value_expression(parser, (pm_node_t *) cast->rescue_clause);
|
||||||
return NULL;
|
if (vn != NULL) return vn;
|
||||||
}
|
}
|
||||||
else if (cast->else_clause != NULL) {
|
|
||||||
|
if (cast->statements != NULL) {
|
||||||
|
pm_node_t *vn = pm_check_value_expression(parser, (pm_node_t *) cast->statements);
|
||||||
|
if (vn != NULL) return vn;
|
||||||
|
}
|
||||||
|
|
||||||
|
node = (pm_node_t *) cast->ensure_clause;
|
||||||
|
} else if (cast->rescue_clause != NULL) {
|
||||||
|
if (cast->statements == NULL) return NULL;
|
||||||
|
|
||||||
|
pm_node_t *vn = pm_check_value_expression(parser, (pm_node_t *) cast->statements);
|
||||||
|
if (vn == NULL) return NULL;
|
||||||
|
if (void_node == NULL) void_node = vn;
|
||||||
|
|
||||||
|
for (pm_rescue_node_t *rescue_clause = cast->rescue_clause; rescue_clause != NULL; rescue_clause = rescue_clause->subsequent) {
|
||||||
|
pm_node_t *vn = pm_check_value_expression(parser, (pm_node_t *) rescue_clause->statements);
|
||||||
|
if (vn == NULL) {
|
||||||
|
void_node = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (void_node == NULL) {
|
||||||
|
void_node = vn;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cast->else_clause != NULL) {
|
||||||
node = (pm_node_t *) cast->else_clause;
|
node = (pm_node_t *) cast->else_clause;
|
||||||
|
} else {
|
||||||
|
return void_node;
|
||||||
}
|
}
|
||||||
else {
|
} else {
|
||||||
node = (pm_node_t *) cast->statements;
|
node = (pm_node_t *) cast->statements;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else {
|
|
||||||
node = (pm_node_t *) cast->statements;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user