ruby-changes:70170
From: Nobuyoshi <ko1@a...>
Date: Mon, 13 Dec 2021 12:53:26 +0900 (JST)
Subject: [ruby-changes:70170] 54f0e63a8c (master): Remove `NODE_DASGN_CURR` [Feature #18406]
https://git.ruby-lang.org/ruby.git/commit/?id=54f0e63a8c From 54f0e63a8c53753af7db8653972ac450415eae13 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada <nobu@r...> Date: Sun, 12 Dec 2021 23:33:47 +0900 Subject: Remove `NODE_DASGN_CURR` [Feature #18406] This `NODE` type was used in pre-YARV implementation, to improve the performance of assignment to dynamic local variable defined at the innermost scope. It has no longer any actual difference with `NODE_DASGN`, except for the node dump. --- ast.c | 1 - compile.c | 12 ++++-------- ext/objspace/objspace.c | 1 - node.c | 9 +-------- node.h | 2 -- parse.y | 12 +++--------- 6 files changed, 8 insertions(+), 29 deletions(-) diff --git a/ast.c b/ast.c index ceb03c29d4f..05bfc755a3b 100644 --- a/ast.c +++ b/ast.c @@ -417,7 +417,6 @@ node_children(rb_ast_t *ast, const NODE *node) https://github.com/ruby/ruby/blob/trunk/ast.c#L417 } case NODE_LASGN: case NODE_DASGN: - case NODE_DASGN_CURR: case NODE_IASGN: case NODE_CVASGN: case NODE_GASGN: diff --git a/compile.c b/compile.c index 82593d87743..83389947c08 100644 --- a/compile.c +++ b/compile.c @@ -4928,7 +4928,6 @@ compile_massign_opt(rb_iseq_t *iseq, LINK_ANCHOR *const ret, https://github.com/ruby/ruby/blob/trunk/compile.c#L4928 MEMORY(ln->nd_vid); break; case NODE_DASGN: - case NODE_DASGN_CURR: case NODE_IASGN: case NODE_CVASGN: MEMORY(ln->nd_vid); @@ -5322,7 +5321,6 @@ defined_expr0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, https://github.com/ruby/ruby/blob/trunk/compile.c#L5321 case NODE_MASGN: case NODE_LASGN: case NODE_DASGN: - case NODE_DASGN_CURR: case NODE_GASGN: case NODE_IASGN: case NODE_CDECL: @@ -6592,8 +6590,7 @@ iseq_compile_pattern_each(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *c https://github.com/ruby/ruby/blob/trunk/compile.c#L6590 ADD_INSNL(ret, line_node, jump, matched); break; } - case NODE_DASGN: - case NODE_DASGN_CURR: { + case NODE_DASGN: { int idx, lv, ls; ID id = node->nd_vid; @@ -6609,7 +6606,7 @@ iseq_compile_pattern_each(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *c https://github.com/ruby/ruby/blob/trunk/compile.c#L6606 } if (idx < 0) { - COMPILE_ERROR(ERROR_ARGS "NODE_DASGN(_CURR): unknown id (%"PRIsVALUE")", + COMPILE_ERROR(ERROR_ARGS "NODE_DASGN: unknown id (%"PRIsVALUE")", rb_id2str(id)); return COMPILE_NG; } @@ -9199,8 +9196,7 @@ iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const no https://github.com/ruby/ruby/blob/trunk/compile.c#L9196 ADD_SETLOCAL(ret, node, idx, get_lvar_level(iseq)); break; } - case NODE_DASGN: - case NODE_DASGN_CURR:{ + case NODE_DASGN: { int idx, lv, ls; ID id = node->nd_vid; CHECK(COMPILE(ret, "dvalue", node->nd_value)); @@ -9213,7 +9209,7 @@ iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const no https://github.com/ruby/ruby/blob/trunk/compile.c#L9209 idx = get_dyna_var_idx(iseq, id, &lv, &ls); if (idx < 0) { - COMPILE_ERROR(ERROR_ARGS "NODE_DASGN(_CURR): unknown id (%"PRIsVALUE")", + COMPILE_ERROR(ERROR_ARGS "NODE_DASGN: unknown id (%"PRIsVALUE")", rb_id2str(id)); goto ng; } diff --git a/ext/objspace/objspace.c b/ext/objspace/objspace.c index 3fa4fd279b1..ad5bbe7d0c8 100644 --- a/ext/objspace/objspace.c +++ b/ext/objspace/objspace.c @@ -423,7 +423,6 @@ count_nodes(int argc, VALUE *argv, VALUE os) https://github.com/ruby/ruby/blob/trunk/ext/objspace/objspace.c#L423 COUNT_NODE(NODE_MASGN); COUNT_NODE(NODE_LASGN); COUNT_NODE(NODE_DASGN); - COUNT_NODE(NODE_DASGN_CURR); COUNT_NODE(NODE_GASGN); COUNT_NODE(NODE_IASGN); COUNT_NODE(NODE_CDECL); diff --git a/node.c b/node.c index fe1a60c1514..d8c1da95ef0 100644 --- a/node.c +++ b/node.c @@ -407,16 +407,9 @@ dump_node(VALUE buf, VALUE indent, int comment, const NODE * node) https://github.com/ruby/ruby/blob/trunk/node.c#L407 } return; case NODE_DASGN: - ANN("dynamic variable assignment (out of current scope)"); + ANN("dynamic variable assignment"); ANN("format: [nd_vid](dvar) = [nd_value]"); ANN("example: x = nil; 1.times { x = foo }"); - F_ID(nd_vid, "local variable"); - LAST_NODE; - F_NODE(nd_value, "rvalue"); - return; - case NODE_DASGN_CURR: - ANN("dynamic variable assignment (in current scope)"); - ANN("format: [nd_vid](current dvar) = [nd_value]"); ANN("example: 1.times { x = foo }"); F_ID(nd_vid, "local variable"); if (NODE_REQUIRED_KEYWORD_P(node)) { diff --git a/node.h b/node.h index 4251638fb3d..ebe82b85be2 100644 --- a/node.h +++ b/node.h @@ -48,7 +48,6 @@ enum node_type { https://github.com/ruby/ruby/blob/trunk/node.h#L48 NODE_MASGN, NODE_LASGN, NODE_DASGN, - NODE_DASGN_CURR, NODE_GASGN, NODE_IASGN, NODE_CDECL, @@ -327,7 +326,6 @@ typedef struct RNode { https://github.com/ruby/ruby/blob/trunk/node.h#L326 #define NEW_GASGN(v,val,loc) NEW_NODE(NODE_GASGN,v,val,v,loc) #define NEW_LASGN(v,val,loc) NEW_NODE(NODE_LASGN,v,val,0,loc) #define NEW_DASGN(v,val,loc) NEW_NODE(NODE_DASGN,v,val,0,loc) -#define NEW_DASGN_CURR(v,val,loc) NEW_NODE(NODE_DASGN_CURR,v,val,0,loc) #define NEW_IASGN(v,val,loc) NEW_NODE(NODE_IASGN,v,val,0,loc) #define NEW_CDECL(v,val,path,loc) NEW_NODE(NODE_CDECL,v,val,path,loc) #define NEW_CVASGN(v,val,loc) NEW_NODE(NODE_CVASGN,v,val,0,loc) diff --git a/parse.y b/parse.y index ed215ad1be7..0ff3ddbb4e4 100644 --- a/parse.y +++ b/parse.y @@ -3177,8 +3177,7 @@ primary : literal https://github.com/ruby/ruby/blob/trunk/parse.y#L3177 switch (nd_type($2)) { case NODE_LASGN: - case NODE_DASGN: - case NODE_DASGN_CURR: /* e.each {|internal_var| a = internal_var; ... } */ + case NODE_DASGN: /* e.each {|internal_var| a = internal_var; ... } */ $2->nd_value = internal_var; id = 0; m->nd_plen = 1; @@ -10879,11 +10878,11 @@ assignable0(struct parser_params *p, ID id, const char **err) https://github.com/ruby/ruby/blob/trunk/parse.y#L10878 NUMPARAM_ID_TO_IDX(id)); return -1; } - if (dvar_curr(p, id)) return NODE_DASGN_CURR; + if (dvar_curr(p, id)) return NODE_DASGN; if (dvar_defined(p, id)) return NODE_DASGN; if (local_id(p, id)) return NODE_LASGN; dyna_var(p, id); - return NODE_DASGN_CURR; + return NODE_DASGN; } else { if (!local_id(p, id)) local_var(p, id); @@ -10910,7 +10909,6 @@ assignable(struct parser_params *p, ID id, NODE *val, const YYLTYPE *loc) https://github.com/ruby/ruby/blob/trunk/parse.y#L10909 const char *err = 0; int node_type = assignable0(p, id, &err); switch (node_type) { - case NODE_DASGN_CURR: return NEW_DASGN_CURR(id, val, loc); case NODE_DASGN: return NEW_DASGN(id, val, loc); case NODE_LASGN: return NEW_LASGN(id, val, loc); case NODE_GASGN: return NEW_GASGN(id, val, loc); @@ -11122,7 +11120,6 @@ mark_lvar_used(struct parser_params *p, NODE *rhs) https://github.com/ruby/ruby/blob/trunk/parse.y#L11120 } break; case NODE_DASGN: - case NODE_DASGN_CURR: if (dvar_defined_ref(p, rhs->nd_vid, &vidp)) { if (vidp) *vidp |= LVAR_USED; } @@ -11397,7 +11394,6 @@ node_assign(struct parser_params *p, NODE *lhs, NODE *rhs, struct lex_context ct https://github.com/ruby/ruby/blob/trunk/parse.y#L11394 case NODE_IASGN: case NODE_LASGN: case NODE_DASGN: - case NODE_DASGN_CURR: case NODE_MASGN: case NODE_CVASGN: lhs->nd_value = rhs; @@ -11477,7 +11473,6 @@ value_expr_check(struct parser_params *p, NODE *node) https://github.com/ruby/ruby/blob/trunk/parse.y#L11473 case NODE_LASGN: case NODE_DASGN: - case NODE_DASGN_CURR: case NODE_MASGN: mark_lvar_used(p, node); return NULL; @@ -11713,7 +11708,6 @@ assign_in_cond(struct parser_params *p, NODE *node) https://github.com/ruby/ruby/blob/trunk/parse.y#L11708 case NODE_MASGN: case NODE_LASGN: case NODE_DASGN: - case NODE_DASGN_CURR: case NODE_GASGN: case NODE_IASGN: break; -- cgit v1.2.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/