Mercurial > repos > rhope
diff cbackend_c.rhope @ 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 | d1e206ff75f9 |
children | fd06fb07762a |
line wrap: on
line diff
--- a/cbackend_c.rhope Fri Jan 07 03:19:26 2011 -0500 +++ b/cbackend_c.rhope Sun Jan 09 22:51:10 2011 -0500 @@ -1641,178 +1641,16 @@ constants]] ]Append[Fold[_Text C Program[?, ?, [program]Type Registry >>], "", Filter[[program]Functions >>, Not Native[?]]]] ]Append["\n -#ifdef ENABLE_PROFILING -uint64_t profile_counts[END]; -uint64_t profile_nestedcounts[END]; -uint64_t profile_totals[END]; -uint64_t profile_selftotals[END]; -uint64_t profile_activationlevel[END]; -#endif - -int32_t rhope(uint32_t func, object ** params, uint16_t numparams, uint16_t callspace) -{ -#ifdef ENABLE_PROFILING - struct timeval proftime; -#endif - uint16_t resume,idx, vcparam_offset, last_vcparam; - context *ct,*temp_ct; - void *tmp; - calldata * cdata, *temp_cdata, *my_cdata; - DispatchVar - FuncDef(Build) - FuncDef(BlueprintSP_Of) - FuncDef(ID) - FuncDef(BlueprintSP_FromSP_ID)\n"] +#include \"rhopefuncs_prolog.c\"\n"] ]Append[Fold[Local Pointers[?], "", [program]Functions >>]] ]Append[" - ct = new_context(); - cdata = alloc_cdata(ct, NULL, callspace); - cdata->num_params = numparams; - for(idx = 0; idx < numparams; ++idx) - cdata->params[idx] = params[idx]; - cdata->func = END; -DISPATCH\n"] +#include \"localpointers_fragment.c\"\n"] ]Append[Fold[Method Dispatch[?, ?, ?, [program]Type Registry >>], "", all methods]] ]Append[" -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\n"] +#include \"builtinworkers.c\"\n"] ]Append[Fold[_Text C Program[?, ?, [program]Type Registry >>], "", Filter[[program]Functions >>, Native[?]]]] ]Append[" -DO_END: - for(idx = 0; idx < cdata->num_params; ++idx) - params[idx] = cdata->params[idx]; - free_context(ct); - return cdata->num_params; - -DO_END_THREAD: - for(idx = 0; idx < cdata->num_params; ++idx) - { release_ref(cdata->params[idx]); } - if(ct->runafter) - { - temp_ct = ct; - ct = ct->runafter; - free_context(temp_ct); - cdata = ct->resume_cdata; - func = cdata->func; - DISPATCH - } - free_context(ct); - if(ct = get_cqueue()) - { - cdata = ct->resume_cdata; - func = cdata->func; - DISPATCH - } -NOTHING_TO_DO: - return 0; - -_exception: - puts(\"Exception! Trace follows:\"); - while(cdata && cdata->func < END) - { - printf(\"%d\\n\", cdata->func); - cdata = cdata->lastframe; - } - return -1; -} +#include \"rhopefuncs_epilog.c\" #include \"builtin.c\" #include \"array.c\"