diff nworker.rhope @ 103:7428aa5d6ade

Compiler compiled by compiler sort of working
author Mike Pavone <pavone@retrodev.com>
date Wed, 11 Aug 2010 03:13:28 -0400
parents e73a93fb5de1
children 43cc42df26cc
line wrap: on
line diff
--- a/nworker.rhope	Tue Aug 10 20:55:52 2010 -0400
+++ b/nworker.rhope	Wed Aug 11 03:13:28 2010 -0400
@@ -1376,8 +1376,17 @@
 {
 	//Rhope identifiers can't start with spaces, so we can use identifiers that start with spaces for special functions
 	init name <- [" init "]Append[name]
-	copy name <- [" copy "]Append[name]
-	cleanup name <- [" cleanup "]Append[name]
+	[("Array","Boxed Array","Worker")]Find[name]
+	{
+		[("internalarraynaked","internalarrayboxed","internalworker")]Index[~]
+		{
+			copy name <- [~]Append["copy"]
+			cleanup name <- [~]Append["cleanup"]
+		}
+	}{
+		copy name <- [" copy "]Append[name]
+		cleanup name <- [" cleanup "]Append[name]
+	}
 	type <- [[[Fold["_Compile Blueprint Methods", Fold["_Compile Blueprint Fields", [backend]Create Type[name], [bp]Fields >>], [bp]Methods >>]
 	]Init <<[init name]
 	]Copy <<[copy name]
@@ -1389,14 +1398,17 @@
 Compile Special@NBlueprint[bp,backend,name:out]
 {
 	init name <- [" init "]Append[name]
-	copy name <- [" copy "]Append[name]
-	cleanup name <- [" cleanup "]Append[name]
-	got specials <- [bp]Make Special[
-				[bp]Make Special[
-					[bp]Make Special[backend, init name, name, "Make Init"], 
-					copy name, name, "Make Copy"], 
-			cleanup name, name, "Make Cleanup"]
-	out <- Fold[["Getters Setters"]Set Input[2, name], got specials, [bp]Fields >>]
+	[("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"]Set Input[2, name], [bp]Make Special[after copyclean, init name, name, "Make Init"], [bp]Fields >>]
 }
 
 Blueprint NProgram