comparison 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
comparison
equal deleted inserted replaced
140:c14698c512f1 141:f2cb85c53ced
26 #else 26 #else
27 #define DispatchEntry(name) &&f_##name, 27 #define DispatchEntry(name) &&f_##name,
28 #define ResumeEntry(num,name) &&r##num##_##name, 28 #define ResumeEntry(num,name) &&r##num##_##name,
29 #define DispatchVar void * funcs[] = { DispatchEntries }; 29 #define DispatchVar void * funcs[] = { DispatchEntries };
30 #define DISPATCH goto *funcs[func]; 30 #define DISPATCH goto *funcs[func];
31 #define EndEntry &&DO_END 31 #define EndEntry &&DO_END,
32 #define EndThreadEntry &&DO_END_THREAD; 32 #define EndThreadEntry &&DO_END_THREAD
33 #endif 33 #endif
34 34
35 35
36 #define MethodName(name,type) f_ ## name ## AT_ ## type 36 #define MethodName(name,type) f_ ## name ## AT_ ## type
37 37
266 #define ValCallPostlude(resumeto,myname)\ 266 #define ValCallPostlude(resumeto,myname)\
267 r ## resumeto ## _ ## myname:\ 267 r ## resumeto ## _ ## myname:\
268 my_cdata = cdata->lastframe;\ 268 my_cdata = cdata->lastframe;\
269 RESUME_SELF\ 269 RESUME_SELF\
270 lv_ ## myname = cdata->vars; 270 lv_ ## myname = cdata->vars;
271
272 #define ValCallNoLocals(tocall,numparams,resumeto,myname)\
273 last_vcparam++;\
274 while(last_vcparam < ((t_Worker *)tocall)->payload.Size)\
275 {\
276 if (((object **)(((t_Worker *)tocall)+1))[last_vcparam]) \
277 cdata->params[last_vcparam] = add_ref(((object **)(((t_Worker *)tocall)+1))[last_vcparam]);\
278 ++last_vcparam;\
279 }\
280 cdata->func = RES_ ## resumeto ## _ ## myname;\
281 cdata->num_params = numparams + ((t_Worker *)tocall)->payload.Count;\
282 func = ((t_Worker *)tocall)->payload.Index;\
283 PAUSE_SELF
284
285 #define ValCallNoLocalsPostlude(resumeto,myname)\
286 r ## resumeto ## _ ## myname:\
287 my_cdata = cdata->lastframe;\
288 RESUME_SELF
271 289
272 290
273 #define Call(tocall, numparams, resumeto, myname)\ 291 #define Call(tocall, numparams, resumeto, myname)\
274 cdata->func = RES_ ## resumeto ## _ ## myname;\ 292 cdata->func = RES_ ## resumeto ## _ ## myname;\
275 cdata->num_params = numparams;\ 293 cdata->num_params = numparams;\