diff nworker_c.rhope @ 135:18a4403fe576

Javascript backend can now produce broken output. Needs fixes plus port of standard lib
author Mike Pavone <pavone@retrodev.com>
date Sun, 14 Nov 2010 03:09:49 -0500
parents 1af91ceaaf49
children fc3815b7462f
line wrap: on
line diff
--- a/nworker_c.rhope	Wed Nov 10 22:29:49 2010 -0500
+++ b/nworker_c.rhope	Sun Nov 14 03:09:49 2010 -0500
@@ -1,4 +1,3 @@
-Import cbackend_c.rhope
 Import number_c.rhope
 Import boolean.rhope
 
@@ -1353,8 +1352,10 @@
 	}
 }
 
-Make Special@NBlueprint[bp,backend,func name,bp name,pop worker:out]
+Make Special@NBlueprint[bp,backend,info,bp name:out]
 {
+	func name <- [info]Index[0]
+	pop worker <- [info]Index[1]
 	func <- [[backend]Create Function[func name,("obj"),(),"cdecl"]
 		]Set Input Type[Type Instance[bp name], 0]
 	out <- [backend]Store Function[Fold[pop worker, func, [bp]Fields >>]]
@@ -1434,18 +1435,13 @@
 
 Compile Special@NBlueprint[bp,backend,name:out]
 {
-	init name <- [" init "]Append[name]
-	[("Array","Boxed Array","Worker")]Find[=[?,name]]
-	{
-		after copyclean <- Val[backend]
-	}{		
-		copy name <- [" copy "]Append[name]
-		cleanup name <- [" cleanup "]Append[name]
-		after copyclean <- [bp]Make Special[
-					[bp]Make Special[backend, copy name, name, Make Copy[?]], 
-				cleanup name, name, Make Cleanup[?]]
-	}
-	out <- Fold[Getters Setters[?, ?, name], [bp]Make Special[after copyclean, init name, name, Make Init[?]], [bp]Fields >>]
+	makespecial <- [[[Dictionary[]	
+		]Set["init", Make Init[?]]
+		]Set["copy", Make Copy[?]]
+		]Set["cleanup", Make Cleanup[?]]
+		
+	after specials <- Fold[[bp]Make Special[?, ?, name], backend, [backend]Needed Specials[name,makespecial]]
+	out <- Fold[Getters Setters[?, ?, name], after specials, [bp]Fields >>]
 }
 
 Blueprint NProgram