Mercurial > repos > rhope
diff runtime/builtinworkers.c @ 186:ba35ab624ec2
Add support for raw C function output from C backend as well as an option to use Boehm-GC instead of reference counting
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 07 Oct 2011 00:10:02 -0700 |
parents | e57c151f351e |
children |
line wrap: on
line diff
--- a/runtime/builtinworkers.c Wed Jul 27 21:32:40 2011 -0700 +++ b/runtime/builtinworkers.c Fri Oct 07 00:10:02 2011 -0700 @@ -1,56 +1,59 @@ Func(Build, - NumParams 1) + NumParams 1, + NumOutputs 1) Param(0, TYPE_BLUEPRINT) - lv_Build->bp = ((t_Blueprint *)(cdata->params[0]))->bp; - release_ref(cdata->params[0]); + lv(Build, bp) = ((t_Blueprint *)(my_params(0)))->bp; + release_ref(my_params(0)); - Ret(0, new_object_bp(lv_Build->bp)) + Ret(0, new_object_bp(lv(Build, bp))) EndFunc(Build) DISPATCH Func(BlueprintSP_Of, - NumParams 1) + NumParams 1, + NumOutputs 1) - lv_BlueprintSP_Of->bp = get_blueprint(cdata->params[0]); - release_ref(cdata->params[0]); + lv(BlueprintSP_Of, bp) = get_blueprint(my_params(0)); + release_ref(my_params(0)); Ret(0, new_object(TYPE_BLUEPRINT)) - ((t_Blueprint *)cdata->params[0])->bp = lv_BlueprintSP_Of->bp; + ((t_Blueprint *)my_outputs(0))->bp = lv(BlueprintSP_Of, bp); EndFunc(BlueprintSP_Of) DISPATCH -Func(ID, NumParams 1) +Func(ID, NumParams 1, NumOutputs 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) + lv(ID, id) = new_object(TYPE_UINT32); + ((t_UInt32 *)lv(ID, id))->Num = ((t_Blueprint *)my_params(0))->bp->type_id; + release_ref(my_params(0)); + Ret(0, lv(ID, id)) EndFunc(ID) DISPATCH -Func(BlueprintSP_FromSP_ID, NumParams 1) +Func(BlueprintSP_FromSP_ID, NumParams 1, NumOutputs 2) 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]) + lv(BlueprintSP_FromSP_ID, type) = ((t_UInt32 *)my_params(0))->Num; + if (lv(BlueprintSP_FromSP_ID, type) >= max_registered_type || !registered_types[lv(BlueprintSP_FromSP_ID, type)]) { + Ret(1, my_params(0)) Ret(0, NULL) } else { - release_ref(cdata->params[0]); + release_ref(my_params(0)); Ret(0, new_object(TYPE_BLUEPRINT)) - ((t_Blueprint *)cdata->params[0])->bp = registered_types[lv_BlueprintSP_FromSP_ID->type]; + ((t_Blueprint *)my_outputs(0))->bp = registered_types[lv(BlueprintSP_FromSP_ID, type)]; Ret(1, NULL) } EndFunc(BlueprintSP_FromSP_ID) DISPATCH -FuncNoLocals(Pause, NumParams 1) +#ifndef RAW_FUNC +FuncNoLocals(Pause, NumParams 1, NumOutputs 1) Param(0, TYPE_WORKER) ct->resume_cdata = my_cdata; @@ -74,7 +77,7 @@ EndFuncNoLocals DISPATCH -FuncNoLocals(Resume, NumParams 2) +FuncNoLocals(Resume, NumParams 2, NumOutputs 2) Param(0, TYPE_CONTEXT) temp_ct = ((t_Context *)my_cdata->params[0])->ct; @@ -216,4 +219,18 @@ } EndFunc(RunSP_Bytecode) DISPATCH +#else +FuncNoLocals(Pause, NumParams 1, NumOutputs 0) + exit(2); +EndFuncNoLocals +FuncNoLocals(Resume, NumParams 2, NumOutputs 0) + exit(2); +EndFuncNoLocals + +FuncNoLocals(RunSP_Bytecode, NumParams 2, NumOutputs 0) + exit(2); +EndFuncNoLocals +#endif //RAW_FUNC + +