diff runtime/func.h @ 74:a844c623c7df

Add support for Worker type
author Mike Pavone <pavone@retrodev.com>
date Thu, 01 Jul 2010 21:32:08 -0400
parents c40c3d399133
children 0083b2f7b3c7
line wrap: on
line diff
--- a/runtime/func.h	Sat Jun 19 23:13:41 2010 -0400
+++ b/runtime/func.h	Thu Jul 01 21:32:08 2010 -0400
@@ -119,7 +119,39 @@
 
 #define PrepCall(callspace) cdata = alloc_cdata(ct, cdata, callspace);
 
-#define SetParam(num,value) cdata->params[num] = value;
+#define SetParam(num,value) cdata->params[num] = value;
+
+#define VCPrepCall(func,numparams) \
+	cdata = alloc_cdata(ct, cdata, numparams + ((t_Worker *)func)->payload.Count);\
+	vcparam_offset = 0;
+
+#define VCSetParam(func,num,value) \
+	while((num+vcparam_offset) < ((t_Worker *)func)->payload.Size && ((object **)(((t_Worker *)func)+1))[num+vcparam_offset])\
+	{\
+		cdata->params[num+vcparam_offset] = add_ref(((object **)(((t_Worker *)func)+1))[num+vcparam_offset]);\
+		++vcparam_offset;\
+	}\
+	cdata->params[num+vcparam_offset] = value;\
+	last_vcparam = num+vcparam_offset;
+
+#define ValCall(tocall,numparams,resumeto,myname)\
+	last_vcparam++;\
+	while(last_vcparam < ((t_Worker *)tocall)->payload.Size)\
+	{\
+		if (((object **)(((t_Worker *)tocall)+1))[last_vcparam]) \
+			cdata->params[last_vcparam] = add_ref(((object **)(((t_Worker *)tocall)+1))[last_vcparam]);\
+		++last_vcparam;\
+	}\
+	cdata->func = RES_  ## resumeto ## _ ## myname;\
+	cdata->num_params = numparams + ((t_Worker *)tocall)->payload.Count;\
+	cdata->vars = lv_ ## myname;\
+	func = ((t_Worker *)tocall)->payload.Index;
+
+#define ValCallPostlude(resumeto,myname)\
+r ## resumeto ## _ ## myname:\
+	my_cdata = cdata->lastframe;\
+	lv_ ## myname = cdata->vars;
+
 
 #define Call(tocall, numparams, resumeto, myname)\
 			cdata->func = RES_  ## resumeto ## _ ## myname;\