diff dstep/foundation/NSError.d @ 16:19885b43130e

Huge update, the bridge actually works now
author Jacob Carlborg <doob@me.com>
date Sun, 03 Jan 2010 22:06:11 +0100
parents 89f3c3ef1fd2
children b9de51448c6b
line wrap: on
line diff
--- a/dstep/foundation/NSError.d	Mon Aug 03 15:31:48 2009 +0200
+++ b/dstep/foundation/NSError.d	Sun Jan 03 22:06:11 2010 +0100
@@ -7,47 +7,169 @@
 module dstep.foundation.NSError;
 
 import dstep.foundation.NSArray;
+import dstep.foundation.NSCoder;
 import dstep.foundation.NSDictionary;
+import dstep.foundation.NSObjCRuntime;
 import dstep.foundation.NSObject;
+import dstep.foundation.NSString;
+import dstep.foundation.NSZone;
 import dstep.objc.bridge.Bridge;
-import dstep.objc.objc : id;
+import dstep.objc.objc;
+
+
 
 import bindings = dstep.foundation.NSError_bindings;
 
-const NSString NSCocoaErrorDomain;
-const NSString NSPOSIXErrorDomain;
-const NSString NSOSStatusErrorDomain;
-const NSString NSMachErrorDomain;
-const NSString NSUnderlyingErrorKey;
-const NSString NSLocalizedDescriptionKey;
-const NSString NSLocalizedFailureReasonErrorKey;
-const NSString NSLocalizedRecoverySuggestionErrorKey;
-const NSString NSLocalizedRecoveryOptionsErrorKey;
-const NSString NSRecoveryAttempterErrorKey;
-const NSString NSStringEncodingErrorKey;
-const NSString NSURLErrorKey;
-const NSString NSFilePathErrorKey;
+private
+{
+	NSString NSCocoaErrorDomain_;
+	NSString NSPOSIXErrorDomain_;
+	NSString NSOSStatusErrorDomain_;
+	NSString NSMachErrorDomain_;
+	NSString NSUnderlyingErrorKey_;
+	NSString NSLocalizedDescriptionKey_;
+	NSString NSLocalizedFailureReasonErrorKey_;
+	NSString NSLocalizedRecoverySuggestionErrorKey_;
+	NSString NSLocalizedRecoveryOptionsErrorKey_;
+	NSString NSRecoveryAttempterErrorKey_;
+	NSString NSStringEncodingErrorKey_;
+	NSString NSURLErrorKey_;
+	NSString NSFilePathErrorKey_;
+}
+
+NSString NSCocoaErrorDomain ()
+{
+	if (NSCocoaErrorDomain_)
+		return NSCocoaErrorDomain_;
+		
+	return NSCocoaErrorDomain_ = new NSString(bindings.NSCocoaErrorDomain);
+}
+
+NSString NSPOSIXErrorDomain ()
+{
+	if (NSPOSIXErrorDomain_)
+		return NSPOSIXErrorDomain_;
+		
+	return NSPOSIXErrorDomain_ = new NSString(bindings.NSPOSIXErrorDomain);
+}
+
+NSString NSOSStatusErrorDomain ()
+{
+	if (NSOSStatusErrorDomain_)
+		return NSOSStatusErrorDomain_;
+		
+	return NSOSStatusErrorDomain_ = new NSString(bindings.NSOSStatusErrorDomain);
+}
+
+NSString NSMachErrorDomain ()
+{
+	if (NSMachErrorDomain_)
+		return NSMachErrorDomain_;
+		
+	return NSMachErrorDomain_ = new NSString(bindings.NSMachErrorDomain);
+}
+
+NSString NSUnderlyingErrorKey ()
+{
+	if (NSUnderlyingErrorKey_)
+		return NSUnderlyingErrorKey_;
+		
+	return NSUnderlyingErrorKey_ = new NSString(bindings.NSUnderlyingErrorKey);
+}
+
+NSString NSLocalizedDescriptionKey ()
+{
+	if (NSLocalizedDescriptionKey_)
+		return NSLocalizedDescriptionKey_;
+		
+	return NSLocalizedDescriptionKey_ = new NSString(bindings.NSLocalizedDescriptionKey);
+}
 
-static this ()
+NSString NSLocalizedFailureReasonErrorKey ()
+{
+	if (NSLocalizedFailureReasonErrorKey_)
+		return NSLocalizedFailureReasonErrorKey_;
+		
+	return NSLocalizedFailureReasonErrorKey_ = new NSString(bindings.NSLocalizedFailureReasonErrorKey);
+}
+
+NSString NSLocalizedRecoverySuggestionErrorKey ()
+{
+	if (NSLocalizedRecoverySuggestionErrorKey_)
+		return NSLocalizedRecoverySuggestionErrorKey_;
+		
+	return NSLocalizedRecoverySuggestionErrorKey_ = new NSString(bindings.NSLocalizedRecoverySuggestionErrorKey);
+}
+
+NSString NSLocalizedRecoveryOptionsErrorKey ()
+{
+	if (NSLocalizedRecoveryOptionsErrorKey_)
+		return NSLocalizedRecoveryOptionsErrorKey_;
+		
+	return NSLocalizedRecoveryOptionsErrorKey_ = new NSString(bindings.NSLocalizedRecoveryOptionsErrorKey);
+}
+
+NSString NSRecoveryAttempterErrorKey ()
+{
+	if (NSRecoveryAttempterErrorKey_)
+		return NSRecoveryAttempterErrorKey_;
+		
+	return NSRecoveryAttempterErrorKey_ = new NSString(bindings.NSRecoveryAttempterErrorKey);
+}
+
+NSString NSStringEncodingErrorKey ()
 {
-	NSCocoaErrorDomain = new NSString(bindings.NSCocoaErrorDomain);
-	NSPOSIXErrorDomain = new NSString(bindings.NSPOSIXErrorDomain);
-	NSOSStatusErrorDomain = new NSString(bindings.NSOSStatusErrorDomain);
-	NSMachErrorDomain = new NSString(bindings.NSMachErrorDomain);
-	NSUnderlyingErrorKey = new NSString(bindings.NSUnderlyingErrorKey);
-	NSLocalizedDescriptionKey = new NSString(bindings.NSLocalizedDescriptionKey);
-	NSLocalizedFailureReasonErrorKey = new NSString(bindings.NSLocalizedFailureReasonErrorKey);
-	NSLocalizedRecoverySuggestionErrorKey = new NSString(bindings.NSLocalizedRecoverySuggestionErrorKey);
-	NSLocalizedRecoveryOptionsErrorKey = new NSString(bindings.NSLocalizedRecoveryOptionsErrorKey);
-	NSRecoveryAttempterErrorKey = new NSString(bindings.NSRecoveryAttempterErrorKey);
-	NSStringEncodingErrorKey = new NSString(bindings.NSStringEncodingErrorKey);
-	NSURLErrorKey = new NSString(bindings.NSURLErrorKey);
-	NSFilePathErrorKey = new NSString(bindings.NSFilePathErrorKey);
+	if (NSStringEncodingErrorKey_)
+		return NSStringEncodingErrorKey_;
+		
+	return NSStringEncodingErrorKey_ = new NSString(bindings.NSStringEncodingErrorKey);
+}
+
+NSString NSURLErrorKey ()
+{
+	if (NSURLErrorKey_)
+		return NSURLErrorKey_;
+		
+	return NSURLErrorKey_ = new NSString(bindings.NSURLErrorKey);
 }
 
+NSString NSFilePathErrorKey ()
+{
+	if (NSFilePathErrorKey_)
+		return NSFilePathErrorKey_;
+		
+	return NSFilePathErrorKey_ = new NSString(bindings.NSFilePathErrorKey);
+}
+
+const TNSErrorRecoveryAttempting = `
+
+	void attemptRecoveryFromError (NSError error, NSUInteger recoveryOptionIndex, Object delegate_, SEL didRecoverSelector, void* contextInfo)
+	{
+		return invokeObjcSelf!(void, "attemptRecoveryFromError:optionIndexdelegate:didRecoverSelector:contextInfo:", NSError, NSUInteger, Object, SEL, void*)(error, recoveryOptionIndex, delegate_, didRecoverSelector, contextInfo);
+	}
+	
+	bool attemptRecoveryFromError (NSError error, NSUInteger recoveryOptionIndex)
+	{
+		return invokeObjcSelf!(bool, "attemptRecoveryFromError:optionIndex:", NSError, NSUInteger)(error, recoveryOptionIndex);
+	}
+	
+	//mixin ObjcBindMethod!(attemptRecoveryFromError, void, "attemptRecoveryFromError:optionIndexdelegate:didRecoverSelector:contextInfo:", NSError, NSUInteger, Object, SEL, void*);
+	//mixin ObjcBindMethod!(attemptRecoveryFromError, bool, "attemptRecoveryFromError:optionIndex:", NSError, NSUInteger);
+`;
+
 class NSError : NSObject, INSCopying, INSCoding
 {
-	mixin ObjcWrap;
+	mixin (ObjcWrap);
+	
+	this ()
+	{
+		super(typeof(this).alloc.init.objcObject);
+	}
+	
+	typeof(this) init ()
+	{
+		return invokeObjcSelf!(typeof(this), "init");
+	}
 
 	Object initWithDomain (NSString domain, NSInteger code, NSDictionary dict)
 	{
@@ -56,18 +178,12 @@
 
 	this (NSString domain, NSInteger code, NSDictionary dict)
 	{
-		objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass);
-		id result = Bridge.invokeObjcMethod!(id, "initWithDomain:code:userInfo:", NSString, NSInteger, NSDictionary)(objcObject, domain, code, dict);
-
-		if (result)
-			objcObject = ret;
-
-		dObject = this;
+		typeof(this).alloc.initWithDomain(domain, code, dict);
 	}
 
 	static Object errorWithDomain (NSString domain, NSInteger code, NSDictionary dict)
 	{
-		return invokeObjcSelfClass!(Object, "errorWithDomain:code:userInfo:", NSString, NSInteger, NSDictionary)(domain, code, dict);
+		return invokeObjcSuperClass!(Object, "errorWithDomain:code:userInfo:", NSString, NSInteger, NSDictionary)(domain, code, dict);
 	}
 
 	NSString domain ()
@@ -127,19 +243,6 @@
 
 	this (NSCoder aDecoder)
 	{
-		objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass);
-		id result = Bridge.invokeObjcMethod!(id, "initWithCoder:", NSCoder)(objcObject, aDecoder);
-
-		if (result)
-			objcObject = ret;
-
-		dObject = this;
+		typeof(this).alloc.initWithCoder(aDecoder);
 	}
-}
-
-template TNSErrorRecoveryAttempting ()
-{
-	void attemptRecoveryFromError (NSError error, NSUInteger recoveryOptionIndex, Object delegate_, SEL didRecoverSelector, void* contextInfo);
-	bool attemptRecoveryFromError (NSError error, NSUInteger recoveryOptionIndex);
-}
-
+}
\ No newline at end of file