summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJemma Issroff <jemmaissroff@gmail.com>2023-12-14 06:58:50 -0500
committerJemma Issroff <jemmaissroff@gmail.com>2023-12-14 11:46:54 -0500
commit157e6c8a512968dc9f82d7f81606eeb3266cf6bb (patch)
treef724b2df5250c87581d7d4a1c7b742447867e6e3
parente71f0117137c30db1dd694aa2c91c82174fa05df (diff)
[PRISM] Check for static literal, excluding array, hash, range
-rw-r--r--prism_compile.c38
1 files changed, 12 insertions, 26 deletions
diff --git a/prism_compile.c b/prism_compile.c
index 3a746d3023..c629fdfc61 100644
--- a/prism_compile.c
+++ b/prism_compile.c
@@ -4692,21 +4692,15 @@ pm_compile_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *const ret,
pm_node_t *value = cast->value;
name = cast->name;
- switch PM_NODE_TYPE(value) {
- case PM_FALSE_NODE:
- case PM_FLOAT_NODE:
- case PM_INTEGER_NODE:
- case PM_IMAGINARY_NODE:
- case PM_NIL_NODE:
- case PM_RATIONAL_NODE:
- case PM_STRING_NODE:
- case PM_SYMBOL_NODE:
- case PM_TRUE_NODE:
+ if (pm_static_literal_p(value) &&
+ !(PM_NODE_TYPE_P(value, PM_ARRAY_NODE) ||
+ PM_NODE_TYPE_P(value, PM_HASH_NODE) ||
+ PM_NODE_TYPE_P(value, PM_RANGE_NODE))) {
+
rb_ary_push(default_values, pm_static_literal_value(value, scope_node, parser));
- break;
- default: {
+ }
+ else {
rb_ary_push(default_values, complex_mark);
- }
}
break;
@@ -4946,18 +4940,10 @@ pm_compile_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *const ret,
pm_node_t *value = cast->value;
name = cast->name;
- switch PM_NODE_TYPE(value) {
- case PM_FALSE_NODE:
- case PM_FLOAT_NODE:
- case PM_INTEGER_NODE:
- case PM_IMAGINARY_NODE:
- case PM_NIL_NODE:
- case PM_RATIONAL_NODE:
- case PM_STRING_NODE:
- case PM_SYMBOL_NODE:
- case PM_TRUE_NODE:
- break;
- default: {
+ if (!(pm_static_literal_p(value)) ||
+ PM_NODE_TYPE_P(value, PM_ARRAY_NODE) ||
+ PM_NODE_TYPE_P(value, PM_HASH_NODE) ||
+ PM_NODE_TYPE_P(value, PM_RANGE_NODE)) {
LABEL *end_label = NEW_LABEL(nd_line(&dummy_line_node));
int index = pm_lookup_local_index(iseq, scope_node, name);
@@ -4968,8 +4954,8 @@ pm_compile_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *const ret,
ADD_SETLOCAL(ret, &dummy_line_node, index, 0);
ADD_LABEL(ret, end_label);
- }
}
+ break;
}
// def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n)
// ^^