diff dstep/foundation/NSAppleScript.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/NSAppleScript.d	Mon Aug 03 15:31:48 2009 +0200
+++ b/dstep/foundation/NSAppleScript.d	Sun Jan 03 22:06:11 2010 +0100
@@ -11,44 +11,95 @@
 import dstep.foundation.NSObject;
 import dstep.foundation.NSString;
 import dstep.foundation.NSURL;
+import dstep.foundation.NSZone;
 import dstep.objc.bridge.Bridge;
-import dstep.objc.objc : id;
+import dstep.objc.objc;
+
+
 
 import bindings = dstep.foundation.NSAppleScript_bindings;
 
-const NSString NSAppleScriptErrorMessage;
-const NSString NSAppleScriptErrorNumber;
-const NSString NSAppleScriptErrorAppName;
-const NSString NSAppleScriptErrorBriefMessage;
-const NSString NSAppleScriptErrorRange;
+private 
+{
+	NSString NSAppleScriptErrorMessage_;
+	NSString NSAppleScriptErrorNumber_;
+	NSString NSAppleScriptErrorAppName_;
+	NSString NSAppleScriptErrorBriefMessage_;
+	NSString NSAppleScriptErrorRange_;
+}
+
+NSString NSAppleScriptErrorMessage ()
+{
+	if (NSAppleScriptErrorMessage_)
+		return NSAppleScriptErrorMessage_;
+		
+	return NSAppleScriptErrorMessage_ = new NSString(bindings.NSAppleScriptErrorMessage);
+}
 
-static this ()
+NSString NSAppleScriptErrorNumber ()
+{
+	if (NSAppleScriptErrorNumber_)
+		return NSAppleScriptErrorNumber_;
+		
+	return NSAppleScriptErrorNumber_ = new NSString(bindings.NSAppleScriptErrorNumber);
+}
+
+NSString NSAppleScriptErrorAppName ()
 {
-	NSAppleScriptErrorMessage = new NSString(bindings.NSAppleScriptErrorMessage);
-	NSAppleScriptErrorNumber = new NSString(bindings.NSAppleScriptErrorNumber);
-	NSAppleScriptErrorAppName = new NSString(bindings.NSAppleScriptErrorAppName);
-	NSAppleScriptErrorBriefMessage = new NSString(bindings.NSAppleScriptErrorBriefMessage);
-	NSAppleScriptErrorRange = new NSString(bindings.NSAppleScriptErrorRange);
+	if (NSAppleScriptErrorAppName_)
+		return NSAppleScriptErrorAppName_;
+		
+	return NSAppleScriptErrorAppName_ = new NSString(bindings.NSAppleScriptErrorAppName);
+}
+
+NSString NSAppleScriptErrorBriefMessage ()
+{
+	if (NSAppleScriptErrorBriefMessage_)
+		return NSAppleScriptErrorBriefMessage_;
+		
+	return NSAppleScriptErrorBriefMessage_ = new NSString(bindings.NSAppleScriptErrorBriefMessage);
+}
+
+NSString NSAppleScriptErrorRange ()
+{
+	if (NSAppleScriptErrorRange_)
+		return NSAppleScriptErrorRange_;
+		
+	return NSAppleScriptErrorRange_ = new NSString(bindings.NSAppleScriptErrorRange);
 }
 
 class NSAppleScript : NSObject, INSCopying
 {
-	mixin ObjcWrap;
-
-	Object initWithContentsOfURL (NSURL url, NSDictionary** errorInfo)
+	mixin (ObjcWrap);
+	
+	this ()
 	{
-		return invokeObjcSelf!(Object, "initWithContentsOfURL:error:", NSURL, NSDictionary**)(url, errorInfo);
+		super(typeof(this).alloc.init.objcObject);
+	}
+	
+	typeof(this) init ()
+	{
+		return invokeObjcSelf!(typeof(this), "init");
 	}
 
-	this (NSURL url, NSDictionary** errorInfo)
+	Object initWithContentsOfURL (NSURL url, ref NSDictionary errorInfo)
 	{
-		objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass);
-		id result = Bridge.invokeObjcMethod!(id, "initWithContentsOfURL:error:", NSURL, NSDictionary**)(objcObject, url, errorInfo);
+		id error;
+		
+		if (errorInfo)
+			error = new objc_object;
+		
+		Object result = invokeObjcSelf!(Object, "initWithContentsOfURL:error:", NSURL, id*)(url, &error);
+				
+		if (error)
+			errorInfo = new NSDictionary(error);
+		
+		return result;
+	}
 
-		if (result)
-			objcObject = ret;
-
-		dObject = this;
+	this (NSURL url, ref NSDictionary errorInfo)
+	{
+		typeof(this).alloc.initWithContentsOfURL(url, errorInfo);
 	}
 
 	Object initWithSource (NSString source)
@@ -58,13 +109,7 @@
 
 	this (NSString source)
 	{
-		objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass);
-		id result = Bridge.invokeObjcMethod!(id, "initWithSource:", NSString)(objcObject, source);
-
-		if (result)
-			objcObject = ret;
-
-		dObject = this;
+		typeof(this).alloc.initWithSource(source);
 	}
 
 	NSString source ()
@@ -77,19 +122,49 @@
 		return invokeObjcSelf!(bool, "isCompiled");
 	}
 
-	bool compileAndReturnError (NSDictionary** errorInfo)
+	bool compileAndReturnError (ref NSDictionary errorInfo)
 	{
-		return invokeObjcSelf!(bool, "compileAndReturnError:", NSDictionary**)(errorInfo);
+		id error;
+		
+		if (errorInfo)
+			error = new objc_object;
+		
+		bool result =  invokeObjcSelf!(bool, "compileAndReturnError:", id*)(&error);
+		
+		if (error)
+			errorInfo = new NSDictionary(error);
+		
+		return result;
 	}
 
-	NSAppleEventDescriptor executeAndReturnError (NSDictionary** errorInfo)
+	NSAppleEventDescriptor executeAndReturnError (ref NSDictionary errorInfo)
 	{
-		return invokeObjcSelf!(NSAppleEventDescriptor, "executeAndReturnError:", NSDictionary**)(errorInfo);
+		id error;
+		
+		if (errorInfo)
+			error = new objc_object;
+		
+		NSAppleEventDescriptor result = invokeObjcSelf!(NSAppleEventDescriptor, "executeAndReturnError:", id*)(&error);
+		
+		if (error)
+			errorInfo = new NSDictionary(error);
+		
+		return result;
 	}
 
-	NSAppleEventDescriptor executeAppleEvent (NSAppleEventDescriptor event, NSDictionary** errorInfo)
+	NSAppleEventDescriptor executeAppleEvent (NSAppleEventDescriptor event, ref NSDictionary errorInfo)
 	{
-		return invokeObjcSelf!(NSAppleEventDescriptor, "executeAppleEvent:error:", NSAppleEventDescriptor, NSDictionary**)(event, errorInfo);
+		id error;
+		
+		if (errorInfo)
+			error = new objc_object;
+		
+		NSAppleEventDescriptor result = invokeObjcSelf!(NSAppleEventDescriptor, "executeAppleEvent:error:", NSAppleEventDescriptor, id*)(event, &error);
+		
+		if (error)
+			errorInfo = new NSDictionary(error);
+		
+		return result;
 	}
 
 	Object copyWithZone (NSZone* zone)