зеркало из https://github.com/github/ruby.git
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. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66564 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
756b200ad6
Коммит
686881d383
|
@ -738,7 +738,7 @@ send
|
|||
(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
|
|||
(...)
|
||||
(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
|
|||
(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
|
|||
(...)
|
||||
(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;
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
%# -*- 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;
|
||||
}
|
|
@ -16,5 +16,6 @@
|
|||
<%= render 'insn_len_info' %>
|
||||
<%= render 'insn_operand_info' %>
|
||||
<%= render 'leaf_helpers' %>
|
||||
<%= render 'sp_inc_helpers' %>
|
||||
<%= render 'attributes' %>
|
||||
<%= render 'insn_stack_increase' %>
|
||||
|
|
Загрузка…
Ссылка в новой задаче