diff cbackend.rhope @ 18:ea991f95ae1f

C backend working well enough to generate Fib test
author Mike Pavone <pavone@retrodev.com>
date Wed, 27 May 2009 04:49:32 -0400
parents 69dfca29565f
children 90c20dc3f4e5
line wrap: on
line diff
--- a/cbackend.rhope	Tue May 26 23:37:59 2009 -0400
+++ b/cbackend.rhope	Wed May 27 04:49:32 2009 -0400
@@ -151,10 +151,10 @@
 Null@C Function[func,pdest:out]
 {
 	dest <- [pdest]Make Op[func]
-	out <- [func]Add Statement[[dest]Append[" = NULL;"]]
+	out <- [func]Add Statement[[dest]Append[" = NULL"]]
 }
 
-_Method Arg[func,val,inputnum:out]
+_Function Arg C[func,val,inputnum:out]
 {
 	out <- [func]Add Statement[
 		[[["call->params["
@@ -166,9 +166,29 @@
 
 Method Call@C Function[func,method,args:out]
 {
+	out <- [func]Func Base[[[func]Method Registry >>]Method ID[method],args, "MCall"]
+}
+
+Call@C Function[func,name,args:out]
+{
+	out <- [func]Func Base[name,args, "Call"]
+}
+
+Func Base@C Function[func,tocall,args,type:out]
+{
 	rargs <- Map[args, ["Make Op"]Set Input[1, func]]
-	out <- [Fold["_Method Arg", func, rargs]
-	]Add Raw Line[[[[["MCall("]Append[ [[func]Method Registry >>]Method ID[method] ]]Append[", "]]Append[ [rargs]Length ]]Append[")"]]
+	out <- [Fold["_Function Arg C", func, rargs]
+	]Add Raw Line[[[[[ [type]Append["("] ]Append[tocall]]Append[", "]]Append[ [rargs]Length ]]Append[")"]]
+}
+
+Tail Method Call@C Function[func,method,args:out]
+{
+	out <- [func]Func Base[[[func]Method Registry >>]Method ID[method],args, "TMCall"]
+}
+
+Tail Call@C Function[func,name,args:out]
+{
+	out <- [func]Func Base[name,args, "TCall"]
 }
 
 Resolve@C Function[func,op:out]
@@ -251,20 +271,18 @@
 }
 _Output Defs C[string,varname:out]
 {
-	Print[varname]
 	out <- [[[string]Append["\tobject *"]]Append[Escape Rhope Name[varname]]]Append[";\n"]
 }
 _Var Defs C[string,type,varname:out]
 {
-	Print[type]
-	{Print[varname]}
 	out <- [[[string]Append["\tobject *"]]Append[Escape Rhope Name[varname]]]Append[";\n"]
 }
 
+
 Definitions@C Function[func:out]
 {
 	Print["Definitions"]
-	out <- [[[Fold["_Definitions C", Fold["_Definitions","typedef struct {\n", [func]Variables >>], [func]Outputs >>]]Append["} l_"]]Append[Escape Rhope Name[[func]Name >>]]]Append[";\n"]
+	out <- [[[Fold["_Output Defs C", Fold["_Var Defs C","typedef struct {\n", [func]Variables >>], [func]Outputs >>]]Append["} l_"]]Append[Escape Rhope Name[[func]Name >>]]]Append[";\n"]
 }
 
 Text@C Function[func:out]