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/