[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