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\"