Mercurial > repos > rhope
diff runtime/builtinworkers.c @ 162:bac2c74801f0
Move some C code out of cbackend_c.rhope into separate include files
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 09 Jan 2011 22:51:10 -0500 |
parents | |
children | 327bcf35e094 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/builtinworkers.c Sun Jan 09 22:51:10 2011 -0500 @@ -0,0 +1,101 @@ +Func(Build, + NumParams 1) + + Param(0, TYPE_BLUEPRINT) + + lv_Build->bp = ((t_Blueprint *)(cdata->params[0]))->bp; + release_ref(cdata->params[0]); + + Ret(0, new_object_bp(lv_Build->bp)) +EndFunc(Build) +DISPATCH + +Func(BlueprintSP_Of, + NumParams 1) + + lv_BlueprintSP_Of->bp = get_blueprint(cdata->params[0]); + release_ref(cdata->params[0]); + + Ret(0, new_object(TYPE_BLUEPRINT)) + ((t_Blueprint *)cdata->params[0])->bp = lv_BlueprintSP_Of->bp; +EndFunc(BlueprintSP_Of) +DISPATCH + +Func(ID, NumParams 1) + + Param(0, TYPE_BLUEPRINT) + + lv_ID->id = new_object(TYPE_UINT32); + ((t_UInt32 *)lv_ID->id)->Num = ((t_Blueprint *)cdata->params[0])->bp->type_id; + release_ref(cdata->params[0]); + Ret(0, lv_ID->id) +EndFunc(ID) +DISPATCH + +Func(BlueprintSP_FromSP_ID, NumParams 1) + + Param(0, TYPE_UINT32) + + lv_BlueprintSP_FromSP_ID->type = ((t_UInt32 *)cdata->params[0])->Num; + if (lv_BlueprintSP_FromSP_ID->type >= max_registered_type || !registered_types[lv_BlueprintSP_FromSP_ID->type]) { + Ret(1, cdata->params[0]) + Ret(0, NULL) + } else { + release_ref(cdata->params[0]); + Ret(0, new_object(TYPE_BLUEPRINT)) + ((t_Blueprint *)cdata->params[0])->bp = registered_types[lv_BlueprintSP_FromSP_ID->type]; + Ret(1, NULL) + } + +EndFunc(BlueprintSP_FromSP_ID) +DISPATCH + +FuncNoLocals(Pause, NumParams 1) + Param(0, TYPE_WORKER) + + ct->resume_cdata = my_cdata; + ct->resumeable = 1; + temp_ct = ct; + ct = new_context(); + VCPrepCall(my_cdata->params[0], 1) + VCSetParam(my_cdata->params[0], 0, make_Context(temp_ct)) + ValCallNoLocals(my_cdata->params[0], 1, 1, Pause) + release_ref(my_cdata->params[0]); + DISPATCH + ValCallNoLocalsPostlude(1, Pause) + for(idx = 0; idx < cdata->num_params; ++idx) + if(cdata->params[idx]) + { release_ref(cdata->params[idx]); } + free_context(ct); + ct = get_cqueue(); + if (!ct) goto NOTHING_TO_DO; + cdata = ct->resume_cdata; + ct->resume_cdata = NULL; +EndFuncNoLocals +DISPATCH + +FuncNoLocals(Resume, NumParams 2) + Param(0, TYPE_CONTEXT) + + temp_ct = ((t_Context *)my_cdata->params[0])->ct; + release_ref(my_cdata->params[0]); + if(temp_ct->resumeable && temp_ct->resume_cdata) + { + temp_ct->resumeable = 0; + temp_ct->resume_cdata->params[0] = add_ref(my_cdata->params[1]); + my_cdata->params[0] = my_cdata->params[1]; + my_cdata->params[1] = NULL; + if(!put_cqueue(temp_ct)) + { + ct->resume_cdata = my_cdata; + temp_ct->runafter = ct; + ct = temp_ct; + cdata = ct->resume_cdata; + ct->resume_cdata = NULL; + } + } else { + my_cdata->params[0] = NULL; + } +EndFuncNoLocals +DISPATCH +