yarv-diff:360
From: ko1 atdot.net
Date: 20 Jul 2006 04:22:12 +0900
Subject: [yarv-diff:360] r527 - trunk
Author: ko1
Date: 2006-07-20 04:22:12 +0900 (Thu, 20 Jul 2006)
New Revision: 527
Modified:
trunk/
trunk/ChangeLog
trunk/compile.c
trunk/eval.c
Log:
r820@lermite: ko1 | 2006-07-20 04:14:58 +0900
* compile.c : fix [yarv-dev:1041] problem (raise TypeError)
* eval.c : rb_funcall2 send as NOEX_PRIVATE and check scope
when checking protect attribute
Property changes on: trunk
___________________________________________________________________
Name: svk:merge
- 81cd9672-7512-7e48-ae48-6936450e977d:/local/yarv/trunk:819
+ 81cd9672-7512-7e48-ae48-6936450e977d:/local/yarv/trunk:820
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2006-07-19 19:21:29 UTC (rev 526)
+++ trunk/ChangeLog 2006-07-19 19:22:12 UTC (rev 527)
@@ -4,6 +4,13 @@
# from Mon, 03 May 2004 01:24:19 +0900
#
+2006-07-20(Thu) 04:10:13 +0900 Koichi Sasada <ko1 atdot.net>
+
+ * compile.c : fix [yarv-dev:1041] problem (raise TypeError)
+
+ * eval.c : rb_funcall2 send as NOEX_PRIVATE and check scope
+
+
2006-07-20(Thu) 03:38:46 +0900 Koichi Sasada <ko1 atdot.net>
* yarvcore.c : fix [yarv-dev:1040] bug
Modified: trunk/compile.c
===================================================================
--- trunk/compile.c 2006-07-19 19:21:29 UTC (rev 526)
+++ trunk/compile.c 2006-07-19 19:22:12 UTC (rev 527)
@@ -4814,8 +4814,7 @@
insn_id, argc, argv));
}
else {
- // TODO: should throw exception
- rb_bug("unexpected object");
+ rb_raise(rb_eTypeError, "unexpected object for instruction");
}
}
st_free_table(labels_table);
Modified: trunk/eval.c
===================================================================
--- trunk/eval.c 2006-07-19 19:21:29 UTC (rev 526)
+++ trunk/eval.c 2006-07-19 19:22:12 UTC (rev 527)
@@ -1633,16 +1633,17 @@
}
/* self must be kind of a specified form for protected method */
- if (((noex & NOEX_MASK) & NOEX_PROTECTED)) {
+ if (((noex & NOEX_MASK) & NOEX_PROTECTED) && scope == 0) {
VALUE defined_class = klass;
if (TYPE(defined_class) == T_ICLASS) {
defined_class = RBASIC(defined_class)->klass;
}
- if (!rb_obj_is_kind_of
- (rb_frame_self(), rb_class_real(defined_class)))
+ if (!rb_obj_is_kind_of(rb_frame_self(),
+ rb_class_real(defined_class))) {
return method_missing(recv, mid, argc, argv, NOEX_PROTECTED);
+ }
}
}
@@ -1730,13 +1731,15 @@
else {
argv = 0;
}
- return rb_call(CLASS_OF(recv), recv, mid, n, argv, NOEX_NOSUPER);
+ return rb_call(CLASS_OF(recv), recv, mid, n, argv,
+ NOEX_NOSUPER | NOEX_PRIVATE);
}
VALUE
rb_funcall2(VALUE recv, ID mid, int argc, const VALUE *argv)
{
- return rb_call(CLASS_OF(recv), recv, mid, argc, argv, NOEX_NOSUPER);
+ return rb_call(CLASS_OF(recv), recv, mid, argc, argv,
+ NOEX_NOSUPER | NOEX_PRIVATE);
}
VALUE
--
ML: yarv-diff quickml.atdot.net
Info: http://www.atdot.net/~ko1/quickml