Mercurial > repos > rhope
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;\ |