[前][次][番号順一覧][スレッド一覧][生データ]

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

[前][次][番号順一覧][スレッド一覧][生データ]