ruby-changes:67525
From: Nobuyoshi <ko1@a...>
Date: Wed, 1 Sep 2021 16:17:25 +0900 (JST)
Subject: [ruby-changes:67525] 70c8155d8b (master): Extract compile_colon2 from iseq_compile_each0
https://git.ruby-lang.org/ruby.git/commit/?id=70c8155d8b From 70c8155d8b2987986ca42210d36c0b133e8e022e Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada <nobu@r...> Date: Sun, 12 Mar 2017 19:51:28 +0900 Subject: Extract compile_colon2 from iseq_compile_each0 --- compile.c | 91 ++++++++++++++++++++++++++++++++++----------------------------- 1 file changed, 49 insertions(+), 42 deletions(-) diff --git a/compile.c b/compile.c index ddcef4e..30ccb9f 100644 --- a/compile.c +++ b/compile.c @@ -8699,6 +8699,53 @@ compile_match(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, i https://github.com/ruby/ruby/blob/trunk/compile.c#L8699 return COMPILE_OK; } +static int +compile_colon2(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped) +{ + const int line = nd_line(node); + if (rb_is_const_id(node->nd_mid)) { + /* constant */ + LABEL *lend = NEW_LABEL(line); + int ic_index = iseq->body->is_size++; + + DECL_ANCHOR(pref); + DECL_ANCHOR(body); + + INIT_ANCHOR(pref); + INIT_ANCHOR(body); + CHECK(compile_const_prefix(iseq, node, pref, body)); + if (LIST_INSN_SIZE_ZERO(pref)) { + if (ISEQ_COMPILE_DATA(iseq)->option->inline_const_cache) { + ADD_INSN2(ret, node, opt_getinlinecache, lend, INT2FIX(ic_index)); + } + else { + ADD_INSN(ret, node, putnil); + } + + ADD_SEQ(ret, body); + + if (ISEQ_COMPILE_DATA(iseq)->option->inline_const_cache) { + ADD_INSN1(ret, node, opt_setinlinecache, INT2FIX(ic_index)); + ADD_LABEL(ret, lend); + } + } + else { + ADD_SEQ(ret, pref); + ADD_SEQ(ret, body); + } + } + else { + /* function call */ + ADD_CALL_RECEIVER(ret, node); + CHECK(COMPILE(ret, "colon2#nd_head", node->nd_head)); + ADD_CALL(ret, node, node->nd_mid, INT2FIX(1)); + } + if (popped) { + ADD_INSN(ret, node, pop); + } + return COMPILE_OK; +} + static int iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped); /** compile each node @@ -9304,49 +9351,9 @@ iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const no https://github.com/ruby/ruby/blob/trunk/compile.c#L9351 } break; } - case NODE_COLON2:{ - if (rb_is_const_id(node->nd_mid)) { - /* constant */ - LABEL *lend = NEW_LABEL(line); - int ic_index = body->is_size++; - - DECL_ANCHOR(pref); - DECL_ANCHOR(body); - - INIT_ANCHOR(pref); - INIT_ANCHOR(body); - CHECK(compile_const_prefix(iseq, node, pref, body)); - if (LIST_INSN_SIZE_ZERO(pref)) { - if (ISEQ_COMPILE_DATA(iseq)->option->inline_const_cache) { - ADD_INSN2(ret, node, opt_getinlinecache, lend, INT2FIX(ic_index)); - } - else { - ADD_INSN(ret, node, putnil); - } - - ADD_SEQ(ret, body); - - if (ISEQ_COMPILE_DATA(iseq)->option->inline_const_cache) { - ADD_INSN1(ret, node, opt_setinlinecache, INT2FIX(ic_index)); - ADD_LABEL(ret, lend); - } - } - else { - ADD_SEQ(ret, pref); - ADD_SEQ(ret, body); - } - } - else { - /* function call */ - ADD_CALL_RECEIVER(ret, node); - CHECK(COMPILE(ret, "colon2#nd_head", node->nd_head)); - ADD_CALL(ret, node, node->nd_mid, INT2FIX(1)); - } - if (popped) { - ADD_INSN(ret, node, pop); - } + case NODE_COLON2: + CHECK(compile_colon2(iseq, ret, node, popped)); break; - } case NODE_COLON3:{ LABEL *lend = NEW_LABEL(line); int ic_index = body->is_size++; -- cgit v1.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/