changeset 159:d1e206ff75f9

Fix some bugs involving calling a worker object
author Mike Pavone <pavone@retrodev.com>
date Fri, 07 Jan 2011 03:17:20 -0500
parents 0e06f29aa83d
children f5095855c878
files cbackend_c.rhope nworker_c.rhope runtime/func.h
diffstat 3 files changed, 11 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/cbackend_c.rhope	Thu Dec 23 16:16:31 2010 -0500
+++ b/cbackend_c.rhope	Fri Jan 07 03:17:20 2011 -0500
@@ -848,12 +848,13 @@
 		{
 			to call <- [args]Index[0]
 			last numparams <- [func]Last NumParams >>
-			out <- [[[[[[func]Add Raw Line[[["if (get_blueprint("]Append[Make Op[Strip Addref[to call], func]]]Append[")->type_id == TYPE_WORKER) {"]]
+			out <- [[[[[[[func]Add Raw Line[[["if (get_blueprint("]Append[Make Op[Strip Addref[to call], func]]]Append[")->type_id == TYPE_WORKER) {"]]
 			]Val Call[to call, Tail[args,1]]
 			]Add Raw Line["} else {"]
 			]Last NumParams <<[last numparams]
 			]Func Base["Call",args, "Call"]
 			]Add Raw Line["}"]
+			]Last NumParams <<[[Length[args]]-[1]]
 		}{
 			out <- [func]Func Base[Escape Rhope Name[name,[func]Escape Pattern >>],args, "Call"]
 		}
--- a/nworker_c.rhope	Thu Dec 23 16:16:31 2010 -0500
+++ b/nworker_c.rhope	Fri Jan 07 03:17:20 2011 -0500
@@ -213,7 +213,7 @@
 Wire From@NWorker Node[node,to,input,output:out]
 {
 	existing cons <- [[node]Wires From >>]Index[output] {}
-	{ exist cons <- () }
+	{ existing cons <- () }
 	out <- [node]Wires From <<[
 		[[node]Wires From >>]Set[output,
 			[existing cons]Append[Node Ref[to,input]]
@@ -1602,11 +1602,12 @@
 
 Register Builtins@NProgram[prog:out]
 {
-	registered <- [[[[[[[[[[prog]Register Worker["Print", "rhope", 1, 1]
+	registered <- [[[[[[[[[[[prog]Register Worker["Print", "rhope", 1, 1]
 	]Register Worker["If@Boolean", "rhope", 1, 2]
 	]Register Worker["Build", "rhope", 1, 1]
 	]Register Worker["Blueprint Of", "rhope", 1, 1]
-	]Register Worker["Call@Worker", "rhope", 1, 2] //We're using 2 because we need to assume that the outputs are conditional
+	]Register Worker["Call", "rhope", 1, 1]//This will ensure that min outputs is 1
+	]Register Worker["Call@Worker", "rhope", 1, 10]//10 is a quick workaround for the lack of proper varargs
 	]Register Worker["ID", "rhope", 1, 1]
 	]Register Worker["Blueprint From ID", "rhope", 1, 2]
 	]Register Worker["Pause", "rhope", 1, 1]
@@ -1645,7 +1646,7 @@
 		[[[[[NWorker["rhope"]
 		]Inputs <<[("worker")]
 		]Input Types <<[ [()]Append[Type Instance["Worker"]] ]
-		]Outputs <<[("ret1","ret2")]
+		]Outputs <<[("ret1","ret2","ret3","ret4","ret5","ret6","ret7","ret8","ret9","ret10")]
 		]Output Types <<[ [[()]Append[Type Instance["Any Type"]]]Append[Type Instance["Any Type"]] ]
 		]Builtin? << [Yes]]
 	]Bind Worker["ID",
--- a/runtime/func.h	Thu Dec 23 16:16:31 2010 -0500
+++ b/runtime/func.h	Fri Jan 07 03:17:20 2011 -0500
@@ -234,11 +234,13 @@
 		free_stack(ct, cdata);\
 		cdata = alloc_cdata(ct, temp_cdata, numparams + ((t_Worker *)func)->payload.Count);\
 	}\
-	vcparam_offset = 0;
+	vcparam_offset = 0;\
+	last_vcparam = -1;
 
 #define VCPrepCall(func,numparams) \
 	cdata = alloc_cdata(ct, cdata, numparams + ((t_Worker *)func)->payload.Count);\
-	vcparam_offset = 0;
+	vcparam_offset = 0;\
+	last_vcparam = -1;
 
 #define VCSetParam(func,num,value) \
 	while((num+vcparam_offset) < ((t_Worker *)func)->payload.Size && ((object **)(((t_Worker *)func)+1))[num+vcparam_offset])\