Mercurial > repos > rhope
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]