diff runtime/func.h @ 141:f2cb85c53ced

Fix Pause/Resume and rewrite Call Async in Rhope rather than C
author Mike Pavone <pavone@retrodev.com>
date Sat, 20 Nov 2010 17:48:22 -0500
parents c14698c512f1
children 7bbdc034e347
line wrap: on
line diff
--- a/runtime/func.h	Sat Nov 20 20:03:25 2010 +0000
+++ b/runtime/func.h	Sat Nov 20 17:48:22 2010 -0500
@@ -28,8 +28,8 @@
 #define ResumeEntry(num,name) &&r##num##_##name,
 #define DispatchVar void * funcs[] = { DispatchEntries };
 #define DISPATCH goto *funcs[func];
-#define EndEntry &&DO_END
-#define EndThreadEntry &&DO_END_THREAD;
+#define EndEntry &&DO_END,
+#define EndThreadEntry &&DO_END_THREAD
 #endif
 
 
@@ -268,6 +268,24 @@
 	my_cdata = cdata->lastframe;\
 	RESUME_SELF\
 	lv_ ## myname = cdata->vars;
+	
+#define ValCallNoLocals(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;\
+	func = ((t_Worker *)tocall)->payload.Index;\
+	PAUSE_SELF
+
+#define ValCallNoLocalsPostlude(resumeto,myname)\
+r ## resumeto ## _ ## myname:\
+	my_cdata = cdata->lastframe;\
+	RESUME_SELF
 
 
 #define Call(tocall, numparams, resumeto, myname)\