Mercurial > repos > rhope
diff runtime/func.h @ 35:3498713c3dc9
C backend portion of supporting user defined types is done, but untested. Parser/NWorker still need a fair bit of work
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 30 Sep 2009 23:55:04 -0400 |
parents | 31f8182f3433 |
children | a24eb366195c d2f9b0a9403d |
line wrap: on
line diff
--- a/runtime/func.h Wed Sep 30 01:25:03 2009 -0400 +++ b/runtime/func.h Wed Sep 30 23:55:04 2009 -0400 @@ -153,6 +153,38 @@ free_stack(cdata->ct, call);\ return ret;\ } + +#define GFieldCall(fieldid)\ + call->num_params = 1;\ + call->resume = 0;\ + ret = get_field(fieldid, call);\ + while(ret == TAIL_RETURN)\ + ret = call->tail_func(call);\ + if(ret == EXCEPTION_RETURN)\ + {\ + for(idx = 0; idx < cdata->num_params; ++idx)\ + if(cdata->params[idx])\ + release_ref(cdata->params[idx]);\ + cdata->params[0] = call->params[0];\ + free_stack(cdata->ct, call);\ + return ret;\ + } + +#define SFieldCall(fieldid)\ + call->num_params = 2;\ + call->resume = 0;\ + ret = set_field(fieldid, call);\ + while(ret == TAIL_RETURN)\ + ret = call->tail_func(call);\ + if(ret == EXCEPTION_RETURN)\ + {\ + for(idx = 0; idx < cdata->num_params; ++idx)\ + if(cdata->params[idx])\ + release_ref(cdata->params[idx]);\ + cdata->params[0] = call->params[0];\ + free_stack(cdata->ct, call);\ + return ret;\ + } #define TMCall(methodid, numparams)\ free_stack(cdata->ct, call);\