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

ruby-changes:4796

From: ko1@a...
Date: Mon, 5 May 2008 11:27:47 +0900 (JST)
Subject: [ruby-changes:4796] matz - Ruby:r16290 (trunk): * compile.c (compile_cpath): use Qundef to denote cbase lookup.

matz	2008-05-05 11:27:29 +0900 (Mon, 05 May 2008)

  New Revision: 16290

  Modified files:
    trunk/ChangeLog
    trunk/compile.c
    trunk/insns.def
    trunk/version.h
    trunk/vm_insnhelper.c

  Log:
    * compile.c (compile_cpath): use Qundef to denote cbase lookup.
    
    * insns.def (defineclass): Qudef is passed for cbase.
    
    * insns.def (setconstant): ditto.
    
    * vm_insnhelper.c (vm_check_if_namespace): use rb_inspect()
      instead of rb_obj_as_string() for better description.

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/version.h?r1=16290&r2=16289&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/compile.c?r1=16290&r2=16289&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=16290&r2=16289&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/insns.def?r1=16290&r2=16289&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/vm_insnhelper.c?r1=16290&r2=16289&diff_format=u

Index: insns.def
===================================================================
--- insns.def	(revision 16289)
+++ insns.def	(revision 16290)
@@ -240,24 +240,14 @@
 (VALUE val, VALUE klass)
 ()
 {
-    if (klass == Qnil) {
+    if (klass == Qundef) {
 	klass = vm_get_cbase(th);
+	if (NIL_P(klass)) {
+	    rb_raise(rb_eTypeError, "no class/module to define constant");
+	}
     }
-    if (NIL_P(klass)) {
-	rb_raise(rb_eTypeError, "no class/module to define constant");
-    }
 
-    switch (TYPE(klass)) {
-      case T_CLASS:
-      case T_MODULE:
-	break;
-      default: {
-	volatile VALUE tmp = rb_obj_as_string(klass);
-	rb_raise(rb_eTypeError, "%s is not a class/module",
-		 RSTRING_PTR(tmp));
-      }
-    }
-
+    vm_check_if_namespace(klass);
     rb_const_set(klass, id, val);
     INC_VM_STATE_VERSION();
 }
@@ -939,8 +929,11 @@
 	    super = rb_cObject;
 	}
 
-	if (cbase == Qnil) {
+	if (cbase == Qundef) {
 	    cbase = vm_get_cbase(th);
+	    if (NIL_P(klass)) {
+		rb_raise(rb_eTypeError, "no class/module to define constant");
+	    }
 	}
 
 	vm_check_if_namespace(cbase);
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 16289)
+++ ChangeLog	(revision 16290)
@@ -1,3 +1,14 @@
+Mon May  5 11:13:50 2008  Yukihiro Matsumoto  <matz@r...>
+
+	* compile.c (compile_cpath): use Qundef to denote cbase lookup.
+
+	* insns.def (defineclass): Qudef is passed for cbase.
+
+	* insns.def (setconstant): ditto.
+
+	* vm_insnhelper.c (vm_check_if_namespace): use rb_inspect()
+	  instead of rb_obj_as_string() for better description.
+
 Mon May  5 02:10:23 2008  Tanaka Akira  <akr@f...>
 
 	* gc.c (set_heaps_increment): fix memory allocation strategy by
Index: compile.c
===================================================================
--- compile.c	(revision 16289)
+++ compile.c	(revision 16290)
@@ -2283,14 +2283,17 @@
 static int
 compile_cpath(LINK_ANCHOR *ret, rb_iseq_t *iseq, NODE *cpath)
 {
-    if (cpath->nd_head) {
+    if (nd_type(cpath) == NODE_COLON3) {
+	/* toplevel class ::Foo */
+	ADD_INSN1(ret, nd_line(cpath), putobject, rb_cObject);
+    }
+    else if (cpath->nd_head) {
+	/* Bar::Foo */
 	COMPILE(ret, "nd_else->nd_head", cpath->nd_head);
     }
-    else if (nd_type(cpath) == NODE_COLON2) {
-	COMPILE(ret, "cpath (NODE_COLON2)", cpath->nd_head);
-    }
     else {
-	ADD_INSN1(ret, nd_line(cpath), putobject, rb_cObject);
+	/* class at cbase Foo */
+	ADD_INSN1(ret, nd_line(cpath), putobject, Qundef);
     }
     return COMPILE_OK;
 }
@@ -3432,7 +3435,7 @@
 	}
 
 	if (node->nd_vid) {
-	    ADD_INSN(ret, nd_line(node), putnil);
+	    ADD_INSN1(ret, nd_line(node), putobject, Qundef);
 	    ADD_INSN1(ret, nd_line(node), setconstant,
 		      ID2SYM(node->nd_vid));
 	}
Index: version.h
===================================================================
--- version.h	(revision 16289)
+++ version.h	(revision 16290)
@@ -1,7 +1,7 @@
 #define RUBY_VERSION "1.9.0"
-#define RUBY_RELEASE_DATE "2008-05-02"
+#define RUBY_RELEASE_DATE "2008-05-05"
 #define RUBY_VERSION_CODE 190
-#define RUBY_RELEASE_CODE 20080502
+#define RUBY_RELEASE_CODE 20080505
 #define RUBY_PATCHLEVEL 0
 
 #define RUBY_VERSION_MAJOR 1
@@ -9,7 +9,7 @@
 #define RUBY_VERSION_TEENY 0
 #define RUBY_RELEASE_YEAR 2008
 #define RUBY_RELEASE_MONTH 5
-#define RUBY_RELEASE_DAY 2
+#define RUBY_RELEASE_DAY 5
 
 #ifdef RUBY_EXTERN
 RUBY_EXTERN const char ruby_version[];
Index: vm_insnhelper.c
===================================================================
--- vm_insnhelper.c	(revision 16289)
+++ vm_insnhelper.c	(revision 16290)
@@ -985,7 +985,7 @@
 	break;
       default:
 	rb_raise(rb_eTypeError, "%s is not a class/module",
-		 RSTRING_PTR(rb_obj_as_string(klass)));
+		 RSTRING_PTR(rb_inspect(klass)));
     }
 }
 

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

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