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

ruby-changes:54351

From: shyouhei <ko1@a...>
Date: Wed, 26 Dec 2018 09:58:32 +0900 (JST)
Subject: [ruby-changes:54351] shyouhei:r66564 (trunk): add _sp_inc_helpers.erb [ci skip]

shyouhei	2018-12-26 09:58:26 +0900 (Wed, 26 Dec 2018)

  New Revision: 66564

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=66564

  Log:
    add _sp_inc_helpers.erb [ci skip]
    
    Just add more room for comments.  This is a pure refactoring that does
    not change anything but readability.

  Added files:
    trunk/tool/ruby_vm/views/_sp_inc_helpers.erb
  Modified files:
    trunk/insns.def
    trunk/tool/ruby_vm/views/insns_info.inc.erb
Index: insns.def
===================================================================
--- insns.def	(revision 66563)
+++ insns.def	(revision 66564)
@@ -738,7 +738,7 @@ send https://github.com/ruby/ruby/blob/trunk/insns.def#L738
 (CALL_INFO ci, CALL_CACHE cc, ISEQ blockiseq)
 (...)
 (VALUE val)
-// attr rb_snum_t sp_inc = - (int)(ci->orig_argc + ((ci->flag & VM_CALL_ARGS_BLOCKARG) ? 1 : 0));
+// attr rb_snum_t sp_inc = sp_inc_of_sendish(ci);
 {
     struct rb_calling_info calling;
 
@@ -755,7 +755,7 @@ opt_send_without_block https://github.com/ruby/ruby/blob/trunk/insns.def#L755
 (...)
 (VALUE val)
 // attr bool handles_sp = true;
-// attr rb_snum_t sp_inc = -ci->orig_argc;
+// attr rb_snum_t sp_inc = sp_inc_of_sendish(ci);
 {
     struct rb_calling_info calling;
     calling.block_handler = VM_BLOCK_HANDLER_NONE;
@@ -824,7 +824,7 @@ invokesuper https://github.com/ruby/ruby/blob/trunk/insns.def#L824
 (CALL_INFO ci, CALL_CACHE cc, ISEQ blockiseq)
 (...)
 (VALUE val)
-// attr rb_snum_t sp_inc = - (int)(ci->orig_argc + ((ci->flag & VM_CALL_ARGS_BLOCKARG) ? 1 : 0));
+// attr rb_snum_t sp_inc = sp_inc_of_sendish(ci);
 {
     struct rb_calling_info calling;
 
@@ -841,7 +841,7 @@ invokeblock https://github.com/ruby/ruby/blob/trunk/insns.def#L841
 (...)
 (VALUE val)
 // attr bool handles_sp = true;
-// attr rb_snum_t sp_inc = 1 - ci->orig_argc;
+// attr rb_snum_t sp_inc = sp_inc_of_invokeblock(ci);
 {
     struct rb_calling_info calling;
     VALUE block_handler;
Index: tool/ruby_vm/views/_sp_inc_helpers.erb
===================================================================
--- tool/ruby_vm/views/_sp_inc_helpers.erb	(nonexistent)
+++ tool/ruby_vm/views/_sp_inc_helpers.erb	(revision 66564)
@@ -0,0 +1,35 @@ https://github.com/ruby/ruby/blob/trunk/tool/ruby_vm/views/_sp_inc_helpers.erb#L1
+%# -*- mode:c; style:ruby; coding: utf-8; indent-tabs-mode: nil -*-
+%# Copyright (c) 2018 Urabe, Shyouhei.  All rights reserved.
+%#
+%# This file is a part of  the programming language Ruby.  Permission is hereby
+%# granted, to either  redistribute and/or modify this file,  provided that the
+%# conditions mentioned  in the  file COPYING  are met.   Consult the  file for
+%# details.
+%;
+
+static rb_snum_t
+sp_inc_of_sendish(const struct rb_call_info *ci)
+{
+    /* Send-ish instructions will:
+     *
+     * 1. Pop block argument, if any.
+     * 2. Pop ordinal argumanes.
+     * 3. Pop receiver.
+     * 4. Push return value.
+     */
+    const int argc = ci->orig_argc;
+    const int argb = (ci->flag & VM_CALL_ARGS_BLOCKARG) ? 1 : 0;
+    const int recv = 1;
+    const int retn = 1;
+
+    /*         1.     2.     3.     4. */
+    return 0 - argb - argc - recv + retn;
+}
+
+static rb_snum_t
+sp_inc_of_invokeblock(const struct rb_call_info *ci)
+{
+    /* sp_inc of invokeblock is almost identical to that of sendish
+     * instructions, except that it does not pop receriver. */
+    return sp_inc_of_sendish(ci) + 1;
+}

Property changes on: tool/ruby_vm/views/_sp_inc_helpers.erb
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: tool/ruby_vm/views/insns_info.inc.erb
===================================================================
--- tool/ruby_vm/views/insns_info.inc.erb	(revision 66563)
+++ tool/ruby_vm/views/insns_info.inc.erb	(revision 66564)
@@ -16,5 +16,6 @@ https://github.com/ruby/ruby/blob/trunk/tool/ruby_vm/views/insns_info.inc.erb#L16
 <%= render 'insn_len_info' %>
 <%= render 'insn_operand_info' %>
 <%= render 'leaf_helpers' %>
+<%= render 'sp_inc_helpers' %>
 <%= render 'attributes' %>
 <%= render 'insn_stack_increase' %>

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

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