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