diff cbackend.rhope @ 87:3c4325e6298f

Add First@Dictionary (need to find mem man bug)
author Mike Pavone <pavone@retrodev.com>
date Fri, 30 Jul 2010 01:48:59 -0400
parents 27bb051d631c
children f69987c58fa8
line wrap: on
line diff
--- a/cbackend.rhope	Tue Jul 27 23:33:31 2010 -0400
+++ b/cbackend.rhope	Fri Jul 30 01:48:59 2010 -0400
@@ -1343,12 +1343,12 @@
 {
 	out <- [[[[["typedef enum {\n"
 		]Append[Fold["_Dispatch Enum", 
-			[Fold["_Dispatch Enum Methods", "", all methods]]Append["\tFUNC_Build,\n\tFUNC_BlueprintSP_Of,\n\tFUNC_ID,\n"], 
+			[Fold["_Dispatch Enum Methods", "", all methods]]Append["\tFUNC_Build,\n\tFUNC_BlueprintSP_Of,\n\tFUNC_ID,\n\tFUNC_BlueprintSP_FromSP_ID,\n"], 
 			[program]Functions >>]]
 		]Append["\tEND\n} funcids;\n\n"]
 		]Append["#define DISPATCH switch(func) { \\\n"]
 		]Append[Fold["_Dispatch Switch", 
-			[Fold["_Dispatch Switch Methods", "", all methods]]Append["\tcase FUNC_Build: goto f_Build;\\\n\tcase FUNC_BlueprintSP_Of: goto f_BlueprintSP_Of;\\\n\tcase FUNC_ID: goto f_ID;\\\n"], 
+			[Fold["_Dispatch Switch Methods", "", all methods]]Append["\tcase FUNC_Build: goto f_Build;\\\n\tcase FUNC_BlueprintSP_Of: goto f_BlueprintSP_Of;\\\n\tcase FUNC_ID: goto f_ID;\\\n\tcase FUNC_BlueprintSP_FromSP_ID: goto f_BlueprintSP_FromSP_ID;\\\n"], 
 			[program]Functions >>]]
 		]Append["\tcase END: goto DO_END;\\\n}\n\n"]
 }
@@ -1442,7 +1442,7 @@
 {
 	uint16_t resume,idx, vcparam_offset, last_vcparam;
 	context * ct;
-	calldata * cdata, *temp_cdata, *my_cdata;\n\nFuncDef(Build)\nFuncDef(BlueprintSP_Of)\nFuncDef(ID)\n"]
+	calldata * cdata, *temp_cdata, *my_cdata;\n\nFuncDef(Build)\nFuncDef(BlueprintSP_Of)\nFuncDef(ID)\nFuncDef(BlueprintSP_FromSP_ID)\n"]
 		]Append[Fold["Local Pointers", "", [program]Functions >>]]
 		]Append["
 	ct = new_context();
@@ -1486,6 +1486,24 @@
 	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\n"]
 		]Append[Fold[["_Text C Program"]Set Input[2, [program]Type Registry >>], "", Filter[[program]Functions >>, "Native"]]]
 		]Append["