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