Mercurial > repos > rhope
diff runtime/func.h @ 59:4f1ae6eb71d8
Use replicated switch statement for returns and late-bound calls
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 08 Oct 2009 22:54:30 -0400 |
parents | 4c22fe798779 |
children | fa24ef3b026f |
line wrap: on
line diff
--- a/runtime/func.h Thu Oct 08 03:03:48 2009 -0400 +++ b/runtime/func.h Thu Oct 08 22:54:30 2009 -0400 @@ -17,32 +17,29 @@ #define Func(name,numparams) \ - case FUNC_ ## name:\ +f_ ## name:\ for(idx = numparams; idx < cdata->num_params; ++idx)\ release_ref(cdata->params[0-idx]); cdata->num_params = numparams;\ -f_ ## name:\ +sf_ ## name:\ lv_ ## name = alloc_stack(ct, sizeof(lt_ ## name)); #define FuncNoLocals(name,numparams) \ - case FUNC_ ## name:\ +f_ ## name:\ for(idx = numparams; idx < cdata->num_params; ++idx)\ release_ref(cdata->params[0-idx]); cdata->num_params = numparams;\ -f_ ## name: +sf_ ## name: #define EndFunc(name) \ free_stack(ct, lv_ ## name);\ - func = cdata->func;\ - goto _dispatch;\ + func = cdata->func; #define EndFuncNoLocals \ - func = cdata->func;\ - resume = cdata->resume;\ - goto _dispatch;\ + func = cdata->func; #define Method(name) \ - case FUNC_ ## name:\ f_ ## name:\ +sf_ ## name:\ switch(get_blueprint(cdata->params[0])->type_id)\ { @@ -57,8 +54,8 @@ goto m_ ## name ## _AT_ ## type_name; #define MethodImpl(name,type_name,mytype_id,numparams) \ - case FUNC_ ## name ## _AT_ ## type_name:\ f_ ## name ## _AT_ ## type_name:\ +sf_ ## name ## _AT_ ## type_name:\ if (cdata->num_params < 1)\ goto _exception;\ if(get_blueprint(cdata->params[0])->type_id != mytype_id)\ @@ -73,8 +70,8 @@ #define MethodImplNoLocals(name,type_name,mytype_id,numparams) \ - case FUNC_ ## name ## _AT_ ## type_name:\ f_ ## name ## _AT_ ## type_name:\ +sf_ ## name ## _AT_ ## type_name:\ if (cdata->num_params < 1)\ goto _exception;\ if(get_blueprint(cdata->params[0])->type_id != mytype_id)\ @@ -110,8 +107,8 @@ #define Call(tocall, numparams, resumeto, myname)\ cdata->func = FUNC_ ## myname ## _ ## resumeto;\ cdata->num_params = numparams;\ - goto f_ ## tocall;\ - case FUNC_ ## myname ## _ ## resumeto:\ + goto sf_ ## tocall;\ +r ## resumeto ## _ ## myname:\ lv_ ## myname = (lt_ ## myname *)(cdata->lastframe+1); #define FreeCall\