ruby-changes:2060
From: ko1@a...
Date: 28 Sep 2007 23:17:40 +0900
Subject: [ruby-changes:2060] matz - Ruby:r13551 (trunk): * insnhelper.ci (vm_call_method): allow send! to call protected
matz 2007-09-28 23:17:28 +0900 (Fri, 28 Sep 2007)
New Revision: 13551
Modified files:
trunk/ChangeLog
trunk/compile.c
trunk/insnhelper.ci
trunk/vm_core.h
Log:
* insnhelper.ci (vm_call_method): allow send! to call protected
methods as well. [ruby-core:12280]
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/insnhelper.ci?r1=13551&r2=13550
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/compile.c?r1=13551&r2=13550
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=13551&r2=13550
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/vm_core.h?r1=13551&r2=13550
Index: ChangeLog
===================================================================
--- ChangeLog (revision 13550)
+++ ChangeLog (revision 13551)
@@ -1,3 +1,8 @@
+Fri Sep 28 23:15:31 2007 Yukihiro Matsumoto <matz@r...>
+
+ * insnhelper.ci (vm_call_method): allow send! to call protected
+ methods as well. [ruby-core:12280]
+
Fri Sep 28 22:33:47 2007 Koichi Sasada <ko1@a...>
* benchmark/bm_so_fasta.rb: added.
Index: vm_core.h
===================================================================
--- vm_core.h (revision 13550)
+++ vm_core.h (revision 13551)
@@ -539,6 +539,7 @@
#define VM_CALL_TAILRECURSION_BIT (0x01 << 6)
#define VM_CALL_SUPER_BIT (0x01 << 7)
#define VM_CALL_SEND_BIT (0x01 << 8)
+#define VM_CALL_SEND_BANG_BIT (0x01 << 9)
/* inline (method|const) cache */
#define NEW_INLINE_CACHE_ENTRY() NEW_WHILE(Qundef, 0, 0)
Index: compile.c
===================================================================
--- compile.c (revision 13550)
+++ compile.c (revision 13551)
@@ -1487,6 +1487,9 @@
mid == id__send__ ) {
OPERAND_AT(iobj, 3) |= INT2FIX(VM_CALL_SEND_BIT);
}
+ if (mid == idSendBang || mid == id__send_bang) {
+ OPERAND_AT(iobj, 3) |= INT2FIX(VM_CALL_SEND_BANG_BIT);
+ }
}
return COMPILE_OK;
}
Index: insnhelper.ci
===================================================================
--- insnhelper.ci (revision 13550)
+++ insnhelper.ci (revision 13551)
@@ -537,7 +537,8 @@
}
val = vm_method_missing(th, id, recv, num, blockptr, stat);
}
- else if ((mn->nd_noex & NOEX_MASK) & NOEX_PROTECTED) {
+ else if (((mn->nd_noex & NOEX_MASK) & NOEX_PROTECTED) &&
+ !(flag & VM_CALL_SEND_BANG_BIT)) {
VALUE defined_class = mn->nd_clss;
if (TYPE(defined_class) == T_ICLASS) {
--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml