diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-04-03 10:59:44 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-04-03 10:59:44 +0000 |
commit | ccf20a6d3fca0ae3a6817387622892c4db340032 (patch) | |
tree | 10b0bc74a9d7ed4ef27d6ac558c5b962126437e1 /vm_insnhelper.c | |
parent | 9729ba32d0d07f7395205b65faacf0cffdbc0b5e (diff) | |
download | ruby-ccf20a6d3fca0ae3a6817387622892c4db340032.tar.gz |
* insns.def (defineclass): check if cbase is a class or a module.
[ruby-core:16118]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15894 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vm_insnhelper.c')
-rw-r--r-- | vm_insnhelper.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/vm_insnhelper.c b/vm_insnhelper.c index 6e0d8f30cb..dd72601668 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); } |