From 0fffab89adfa5f8fb216bb7fe0d3fc60006418d5 Mon Sep 17 00:00:00 2001 From: nobu Date: Thu, 3 Apr 2008 10:59:44 +0000 Subject: * insns.def (defineclass): check if cbase is a class or a module. [ruby-core:16118] git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@15894 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ insns.def | 4 ++++ vm_insnhelper.c | 22 ++++++++++++++-------- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3d82826b4..6c529c0e4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Thu Apr 3 19:59:42 2008 Nobuyoshi Nakada + + * insns.def (defineclass): check if cbase is a class or a module. + [ruby-core:16118] + Thu Apr 3 14:42:11 2008 NAKAMURA Usaku * common.mk (INSNS): add insns_info.inc. diff --git a/insns.def b/insns.def index d89d989ac..cb7802e70 100644 --- a/insns.def +++ b/insns.def @@ -943,6 +943,8 @@ defineclass 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 @@ defineclass 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); diff --git a/vm_insnhelper.c b/vm_insnhelper.c index 6e0d8f30c..dd7260166 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -976,6 +976,19 @@ vm_getspecial(rb_thread_t *th, VALUE *lfp, VALUE key, rb_num_t type) 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 @@ vm_get_ev_const(rb_thread_t *th, rb_iseq_t *iseq, } } 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); } -- cgit