[前][次][番号順一覧][スレッド一覧]

ruby-changes:4403

From: ko1@a...
Date: Thu, 3 Apr 2008 20:01:04 +0900 (JST)
Subject: [ruby-changes:4403] nobu - Ruby:r15894 (trunk): * insns.def (defineclass): check if cbase is a class or a module.

nobu	2008-04-03 19:59:44 +0900 (Thu, 03 Apr 2008)

  New Revision: 15894

  Modified files:
    trunk/ChangeLog
    trunk/insns.def
    trunk/vm_insnhelper.c

  Log:
    * insns.def (defineclass): check if cbase is a class or a module.
      [ruby-core:16118]


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=15894&r2=15893&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/insns.def?r1=15894&r2=15893&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/vm_insnhelper.c?r1=15894&r2=15893&diff_format=u

Index: insns.def
===================================================================
--- insns.def	(revision 15893)
+++ insns.def	(revision 15894)
@@ -943,6 +943,8 @@
 	    cbase = vm_get_cbase(th);
 	}
 
+	vm_check_if_namespace(cbase);
+
 	/* find klass */
 	if (rb_const_defined_at(cbase, id)) {
 	    /* already exist */
@@ -981,6 +983,8 @@
 	    cbase = vm_get_cbase(th);
 	}
 
+	vm_check_if_namespace(cbase);
+
 	/* find klass */
 	if (rb_const_defined_at(cbase, id)) {
 	    klass = rb_const_get_at(cbase, id);
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 15893)
+++ ChangeLog	(revision 15894)
@@ -1,3 +1,8 @@
+Thu Apr  3 19:59:42 2008  Nobuyoshi Nakada  <nobu@r...>
+
+	* insns.def (defineclass): check if cbase is a class or a module.
+	  [ruby-core:16118]
+
 Thu Apr  3 14:42:11 2008  NAKAMURA Usaku  <usa@r...>
 
 	* common.mk (INSNS): add insns_info.inc.
Index: vm_insnhelper.c
===================================================================
--- vm_insnhelper.c	(revision 15893)
+++ vm_insnhelper.c	(revision 15894)
@@ -976,6 +976,19 @@
     return val;
 }
 
+static inline void
+vm_check_if_namespace(VALUE klass)
+{
+    switch (TYPE(klass)) {
+      case T_CLASS:
+      case T_MODULE:
+	break;
+      default:
+	rb_raise(rb_eTypeError, "%s is not a class/module",
+		 RSTRING_PTR(rb_obj_as_string(klass)));
+    }
+}
+
 static inline VALUE
 vm_get_ev_const(rb_thread_t *th, rb_iseq_t *iseq,
 		VALUE klass, ID id, int is_defined)
@@ -1030,14 +1043,7 @@
 	}
     }
     else {
-	switch (TYPE(klass)) {
-	  case T_CLASS:
-	  case T_MODULE:
-	    break;
-	  default:
-	    rb_raise(rb_eTypeError, "%s is not a class/module",
-		     RSTRING_PTR(rb_obj_as_string(klass)));
-	}
+	vm_check_if_namespace(klass);
 	if (is_defined) {
 	    return rb_const_defined(klass, id);
 	}

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]