Revision
615
Author
lsansonetti@apple.com
Date
2008-09-23 14:54:59 -0700 (Tue, 23 Sep 2008)

Log Message

make sure #class does not return the CF hidden class for primitive types

Modified Paths

Diff

Modified: MacRuby/trunk/objc.m (614 => 615)


--- MacRuby/trunk/objc.m	2008-09-23 02:11:48 UTC (rev 614)
+++ MacRuby/trunk/objc.m	2008-09-23 21:54:59 UTC (rev 615)
@@ -1130,9 +1130,21 @@
 	/* because Hash.new can accept a block */
 	return rb_class_new_instance(0, NULL, recv);
     }
-    else if (RCLASS_META(klass) && sel == @selector(class)) {
-	/* because +[NSObject class] returns self */
-	return rb_cClass;
+    else if (sel == @selector(class)) {
+	if (RCLASS_META(klass)) {
+	    /* because +[NSObject class] returns self */
+	    return rb_cClass;
+	}
+	/* because the CF classes should be hidden */
+	else if (klass == rb_cCFString) {
+	    return rb_cNSMutableString;
+	}
+	else if (klass == rb_cCFArray) {
+	    return rb_cNSMutableArray;
+	}
+	else if (klass == rb_cCFHash) {
+	    return rb_cNSMutableHash;
+	}
     }
 
     ocrcv = RB2OC(recv);

Modified: MacRuby/trunk/test/ruby/test_objc.rb (614 => 615)


--- MacRuby/trunk/test/ruby/test_objc.rb	2008-09-23 02:11:48 UTC (rev 614)
+++ MacRuby/trunk/test/ruby/test_objc.rb	2008-09-23 21:54:59 UTC (rev 615)
@@ -90,14 +90,17 @@
     assert(o.instance_of?(NSMutableString))
     assert(o.instance_of?(String))
     assert(o.kind_of?(String))
+    assert_equal(String, o.class)
     o = [42]
     assert(o.instance_of?(NSMutableArray))
     assert(o.instance_of?(Array))
     assert(o.kind_of?(Array))
+    assert_equal(Array, o.class)
     o = {42=>42}
     assert(o.instance_of?(NSMutableDictionary))
     assert(o.instance_of?(Hash))
     assert(o.kind_of?(Hash))
+    assert_equal(Hash, o.class)
   end
 
   class ClassWithNamedArg