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/