summaryrefslogtreecommitdiff
path: root/vm_insnhelper.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-04-03 10:59:44 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-04-03 10:59:44 +0000
commitccf20a6d3fca0ae3a6817387622892c4db340032 (patch)
tree10b0bc74a9d7ed4ef27d6ac558c5b962126437e1 /vm_insnhelper.c
parent9729ba32d0d07f7395205b65faacf0cffdbc0b5e (diff)
* 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.c22
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);
}