changeset 24:ab33fc0c3fc1

Fixed the implementation for the methods in Capsule. Changed a method name in objc_class
author Jacob Carlborg <doob@me.com>
date Wed, 10 Feb 2010 19:24:32 +0100
parents 420969b22201
children b9de51448c6b
files dstep/objc/bridge/Capsule.d dstep/objc/runtime.d
diffstat 2 files changed, 26 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/dstep/objc/bridge/Capsule.d	Wed Feb 10 17:29:12 2010 +0100
+++ b/dstep/objc/bridge/Capsule.d	Wed Feb 10 19:24:32 2010 +0100
@@ -59,7 +59,14 @@
 	}
 	body
 	{
-		return encapsuleString(decapsule!(Object)(self).toString);
+		if (auto object = decapsule!(Object)(self))
+			return encapsuleString(object.toString);
+		
+		objc_super superObject;
+		superObject.cls = .capsuleClass.getSuperclass;
+		superObject.receiver = self;
+		
+		return Bridge.invokeObjcSuperMethod!(id, "description")(&superObject);
 	}
 	
 	static hash_t hash (id self, SEL op)
@@ -69,17 +76,31 @@
 	}
 	body
 	{
-		return decapsule!(Object)(self).toHash;
+		if (auto object = decapsule!(Object)(self))
+			return object.toHash;
+		
+		objc_super superObject;
+		superObject.cls = .capsuleClass.getSuperclass;
+		superObject.receiver = self;
+		
+		return Bridge.invokeObjcSuperMethod!(hash_t, "hash")(&superObject);
 	}
 	
-	static byte isEqual (id self, SEL op, Object object)
+	static bool isEqual (id self, SEL op, Object other)
 	in
 	{
 		assert(isCapsule(self));
 	}
 	body
 	{
-		return decapsule!(Object)(self) == object;
+		if (auto object = decapsule!(Object)(self))
+			return cast(bool) (object == other);
+		
+		objc_super superObject;
+		superObject.cls = .capsuleClass.getSuperclass;
+		superObject.receiver = self;
+		
+		return Bridge.invokeObjcSuperMethod!(bool, "isEqual:", Object)(&superObject, other);
 	}
 }
 
--- a/dstep/objc/runtime.d	Wed Feb 10 17:29:12 2010 +0100
+++ b/dstep/objc/runtime.d	Wed Feb 10 19:24:32 2010 +0100
@@ -187,7 +187,7 @@
 		return bindings.class_getSuperclass(this);
 	}
 	
-	Class setSuperClass (Class newSuper)
+	Class setSuperclass (Class newSuper)
 	{
 		return bindings.class_setSuperclass(this, newSuper);
 	}