[macruby-changes] [1318] MacRuby/branches/experimental/roxor.cpp
source_changes at macosforge.org
source_changes at macosforge.org
Fri Apr 3 19:09:43 PDT 2009
Revision: 1318
http://trac.macosforge.org/projects/ruby/changeset/1318
Author: lsansonetti at apple.com
Date: 2009-04-03 19:09:42 -0700 (Fri, 03 Apr 2009)
Log Message:
-----------
more rubyspec 'compliance' (hum hum) regarding class definitions
Modified Paths:
--------------
MacRuby/branches/experimental/roxor.cpp
Modified: MacRuby/branches/experimental/roxor.cpp
===================================================================
--- MacRuby/branches/experimental/roxor.cpp 2009-04-04 01:53:20 UTC (rev 1317)
+++ MacRuby/branches/experimental/roxor.cpp 2009-04-04 02:09:42 UTC (rev 1318)
@@ -4643,11 +4643,26 @@
GET_VM()->set_outer((Class)klass, (Class)under);
}
+static inline void
+check_if_module(VALUE mod)
+{
+ switch (TYPE(mod)) {
+ case T_CLASS:
+ case T_MODULE:
+ break;
+
+ default:
+ rb_raise(rb_eTypeError, "%s is not a class/module",
+ RSTRING_PTR(rb_inspect(mod)));
+ }
+}
+
extern "C"
VALUE
rb_vm_define_class(ID path, VALUE outer, VALUE super, unsigned char is_module)
{
assert(path > 0);
+ check_if_module(outer);
if (GET_VM()->current_class != NULL) {
outer = (VALUE)GET_VM()->current_class;
@@ -4657,7 +4672,11 @@
if (rb_const_defined_at(outer, path)) {
klass = rb_const_get_at(outer, path);
if (!is_module && super != 0) {
- assert(RCLASS_SUPER(klass) == super);
+ check_if_module(klass);
+ if (RCLASS_SUPER(klass) != super) {
+ rb_raise(rb_eTypeError, "superclass mismatch for class %s",
+ rb_class2name(klass));
+ }
}
}
else {
@@ -4671,6 +4690,9 @@
if (super == 0) {
super = rb_cObject;
}
+ else {
+ check_if_module(super);
+ }
klass = rb_define_class_id(path, super);
rb_set_class_path(klass, outer, rb_id2name(path));
rb_const_set(outer, path, klass);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090403/bff19dca/attachment.html>
More information about the macruby-changes
mailing list