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/