aboutsummaryrefslogtreecommitdiffstats
path: root/vm_insnhelper.c
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-10-29 21:14:29 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-10-29 21:14:29 +0000
commitb999b44b0c88aa97424fa4afd1bf309c81d4e525 (patch)
treecdd22e0671cdcfdb71effc5b68aef459631af5e8 /vm_insnhelper.c
parent4e2e89138df6cf7dd035432123ab9c8e664e6733 (diff)
downloadruby-b999b44b0c88aa97424fa4afd1bf309c81d4e525.tar.gz
* vm_insnhelper.c (vm_check_frame_detail): should require me for
VM_FRAME_FLAG_BMETHOD type frame. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52366 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vm_insnhelper.c')
-rw-r--r--vm_insnhelper.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/vm_insnhelper.c b/vm_insnhelper.c
index b4af1409c2..7fbdcd9c27 100644
--- a/vm_insnhelper.c
+++ b/vm_insnhelper.c
@@ -67,13 +67,17 @@ callable_method_entry_p(const rb_callable_method_entry_t *me)
}
static void
-vm_check_frame_detail(int magic, int req_block, int req_me, int req_cref, VALUE specval, VALUE cref_or_me)
+vm_check_frame_detail(VALUE type, int req_block, int req_me, int req_cref, VALUE specval, VALUE cref_or_me)
{
+ int magic = (int)(type & VM_FRAME_MAGIC_MASK);
enum imemo_type cref_or_me_type = imemo_none;
if (RB_TYPE_P(cref_or_me, T_IMEMO)) {
cref_or_me_type = imemo_type(cref_or_me);
}
+ if (type & VM_FRAME_FLAG_BMETHOD) {
+ req_me = TRUE;
+ }
if (req_block && !VM_ENVVAL_BLOCK_PTR_P(specval)) {
rb_bug("vm_push_frame: specval (%p) should be a block_ptr on %x frame", (void *)specval, magic);
@@ -119,7 +123,7 @@ vm_check_frame(VALUE type,
{
int magic = (int)(type & VM_FRAME_MAGIC_MASK);
-#define CHECK(magic, req_block, req_me, req_cref) case magic: vm_check_frame_detail(magic, req_block, req_me, req_cref, specval, cref_or_me); break;
+#define CHECK(magic, req_block, req_me, req_cref) case magic: vm_check_frame_detail(type, req_block, req_me, req_cref, specval, cref_or_me); break;
switch (magic) {
/* BLK ME CREF */
CHECK(VM_FRAME_MAGIC_METHOD, TRUE, TRUE, FALSE);