diff options
| author | Kevin Newton <kddnewton@gmail.com> | 2024-04-04 11:59:50 -0400 |
|---|---|---|
| committer | Kevin Newton <kddnewton@gmail.com> | 2024-04-04 14:14:55 -0400 |
| commit | cc248706dd8f7e086e54785db5c2e6904bc428a8 (patch) | |
| tree | 9cfe2f72fc73920abb9d639f94f7cb697a5fdcad | |
| parent | 829ca8c4e3fb17ebd255b9e4494c8f70e81d9a06 (diff) | |
[PRISM] Remove dummy_line_node usage from false and else node
| -rw-r--r-- | prism_compile.c | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/prism_compile.c b/prism_compile.c index d2927f4dc8..6b1ade3085 100644 --- a/prism_compile.c +++ b/prism_compile.c @@ -5655,11 +5655,14 @@ pm_compile_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *const ret, PM_COMPILE(cast->variable); return; } - case PM_FALSE_NODE: + case PM_FALSE_NODE: { + // false + // ^^^^^ if (!popped) { - ADD_INSN1(ret, &dummy_line_node, putobject, Qfalse); + PUSH_INSN1(ret, location, putobject, Qfalse); } return; + } case PM_ENSURE_NODE: { pm_ensure_node_t *ensure_node = (pm_ensure_node_t *)node; @@ -5676,14 +5679,18 @@ pm_compile_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *const ret, return; } case PM_ELSE_NODE: { - pm_else_node_t *cast = (pm_else_node_t *)node; - if (cast->statements) { - PM_COMPILE((pm_node_t *)cast->statements); - } - else { - PM_PUTNIL_UNLESS_POPPED; - } - return; + // if foo then bar else baz end + // ^^^^^^^^^^^^ + const pm_else_node_t *cast = (const pm_else_node_t *) node; + + if (cast->statements != NULL) { + PM_COMPILE((const pm_node_t *) cast->statements); + } + else if (!popped) { + PUSH_INSN(ret, location, putnil); + } + + return; } case PM_FLIP_FLOP_NODE: { pm_flip_flop_node_t *flip_flop_node = (pm_flip_flop_node_t *)node; |
