[前][次][番号順一覧][スレッド一覧]

ruby-changes:73686

From: HParker <ko1@a...>
Date: Fri, 23 Sep 2022 01:47:32 +0900 (JST)
Subject: [ruby-changes:73686] aafbc9068f (master): avoid extra dup and pop in compile_op_log

https://git.ruby-lang.org/ruby.git/commit/?id=aafbc9068f

From aafbc9068f96e5e1f7f5c2c1fa6cba01ec8422db Mon Sep 17 00:00:00 2001
From: HParker <HParker@g...>
Date: Wed, 21 Sep 2022 13:53:10 -0700
Subject: avoid extra dup and pop in compile_op_log

Co-authored-by: John Hawthorn <jhawthorn@g...>
---
 compile.c | 19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/compile.c b/compile.c
index 7d553bfba1..c6cd941d22 100644
--- a/compile.c
+++ b/compile.c
@@ -8831,7 +8831,10 @@ compile_op_log(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, https://github.com/ruby/ruby/blob/trunk/compile.c#L8831
     }
 
     CHECK(COMPILE(ret, "NODE_OP_ASGN_AND/OR#nd_head", node->nd_head));
-    ADD_INSN(ret, node, dup);
+
+    if (!popped) {
+        ADD_INSN(ret, node, dup);
+    }
 
     if (type == NODE_OP_ASGN_AND) {
         ADD_INSNL(ret, node, branchunless, lfin);
@@ -8840,15 +8843,15 @@ compile_op_log(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, https://github.com/ruby/ruby/blob/trunk/compile.c#L8843
         ADD_INSNL(ret, node, branchif, lfin);
     }
 
-    ADD_INSN(ret, node, pop);
-    ADD_LABEL(ret, lassign);
-    CHECK(COMPILE(ret, "NODE_OP_ASGN_AND/OR#nd_value", node->nd_value));
-    ADD_LABEL(ret, lfin);
-
-    if (popped) {
-        /* we can apply more optimize */
+    if (!popped) {
         ADD_INSN(ret, node, pop);
     }
+
+    ADD_LABEL(ret, lassign);
+
+    CHECK(COMPILE_(ret, "NODE_OP_ASGN_AND/OR#nd_value", node->nd_value, popped));
+
+    ADD_LABEL(ret, lfin);
     return COMPILE_OK;
 }
 
-- 
cgit v1.2.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]