summaryrefslogtreecommitdiff
path: root/compile.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2020-06-27 00:47:36 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2020-06-27 10:55:18 +0900
commit61984d4760889fd098dff006b2cf6506aa8fb341 (patch)
tree150a38d2e422670957579fe099541b3c42f8af10 /compile.c
parentad1ebefefe0375c9aa3d322327d7833d1fa384df (diff)
Not to rewrite node while compiling
Moved this hack mark to an argument to `compile_hash`. > Bad Hack: temporarily mark hash node with flag so > compile_hash can compile call differently.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/3262
Diffstat (limited to 'compile.c')
-rw-r--r--compile.c13
1 files changed, 4 insertions, 9 deletions
diff --git a/compile.c b/compile.c
index 77af3162fe..3432bed242 100644
--- a/compile.c
+++ b/compile.c
@@ -490,6 +490,7 @@ static int iseq_set_exception_table(rb_iseq_t *iseq);
static int iseq_set_optargs_table(rb_iseq_t *iseq);
static int compile_defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, VALUE needstr);
+static int compile_hash(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, int method_call_keywords, int popped);
/*
* To make Array to LinkedList, use link_anchor
@@ -4050,12 +4051,7 @@ compile_args(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node,
len--;
}
else {
- /* Bad Hack: temporarily mark hash node with flag so compile_hash
- * can compile call differently.
- */
- node->nd_head->nd_brace = METHOD_CALL_KEYWORDS;
- NO_CHECK(COMPILE_(ret, "array element", node->nd_head, FALSE));
- node->nd_head->nd_brace = HASH_NO_BRACE;
+ compile_hash(iseq, ret, node->nd_head, TRUE, FALSE);
}
}
else {
@@ -4246,10 +4242,9 @@ static_literal_node_pair_p(const NODE *node, const rb_iseq_t *iseq)
}
static int
-compile_hash(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, int popped)
+compile_hash(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, int method_call_keywords, int popped)
{
int line = (int)nd_line(node);
- int method_call_keywords = node->nd_brace == METHOD_CALL_KEYWORDS;
node = node->nd_head;
@@ -8122,7 +8117,7 @@ iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, in
break;
}
case NODE_HASH:
- CHECK(compile_hash(iseq, ret, node, popped) >= 0);
+ CHECK(compile_hash(iseq, ret, node, FALSE, popped) >= 0);
break;
case NODE_RETURN:
CHECK(compile_return(iseq, ret, node, popped));