summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Newton <kddnewton@gmail.com>2024-04-04 11:59:50 -0400
committerKevin Newton <kddnewton@gmail.com>2024-04-04 14:14:55 -0400
commitcc248706dd8f7e086e54785db5c2e6904bc428a8 (patch)
tree9cfe2f72fc73920abb9d639f94f7cb697a5fdcad
parent829ca8c4e3fb17ebd255b9e4494c8f70e81d9a06 (diff)
[PRISM] Remove dummy_line_node usage from false and else node
-rw-r--r--prism_compile.c27
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;