comparison 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
comparison
equal deleted inserted replaced
17:d05184970c1c 18:ea991f95ae1f
149 } 149 }
150 150
151 Null@C Function[func,pdest:out] 151 Null@C Function[func,pdest:out]
152 { 152 {
153 dest <- [pdest]Make Op[func] 153 dest <- [pdest]Make Op[func]
154 out <- [func]Add Statement[[dest]Append[" = NULL;"]] 154 out <- [func]Add Statement[[dest]Append[" = NULL"]]
155 } 155 }
156 156
157 _Method Arg[func,val,inputnum:out] 157 _Function Arg C[func,val,inputnum:out]
158 { 158 {
159 out <- [func]Add Statement[ 159 out <- [func]Add Statement[
160 [[["call->params[" 160 [[["call->params["
161 ]Append[inputnum] 161 ]Append[inputnum]
162 ]Append["] = "] 162 ]Append["] = "]
164 ] 164 ]
165 } 165 }
166 166
167 Method Call@C Function[func,method,args:out] 167 Method Call@C Function[func,method,args:out]
168 { 168 {
169 out <- [func]Func Base[[[func]Method Registry >>]Method ID[method],args, "MCall"]
170 }
171
172 Call@C Function[func,name,args:out]
173 {
174 out <- [func]Func Base[name,args, "Call"]
175 }
176
177 Func Base@C Function[func,tocall,args,type:out]
178 {
169 rargs <- Map[args, ["Make Op"]Set Input[1, func]] 179 rargs <- Map[args, ["Make Op"]Set Input[1, func]]
170 out <- [Fold["_Method Arg", func, rargs] 180 out <- [Fold["_Function Arg C", func, rargs]
171 ]Add Raw Line[[[[["MCall("]Append[ [[func]Method Registry >>]Method ID[method] ]]Append[", "]]Append[ [rargs]Length ]]Append[")"]] 181 ]Add Raw Line[[[[[ [type]Append["("] ]Append[tocall]]Append[", "]]Append[ [rargs]Length ]]Append[")"]]
182 }
183
184 Tail Method Call@C Function[func,method,args:out]
185 {
186 out <- [func]Func Base[[[func]Method Registry >>]Method ID[method],args, "TMCall"]
187 }
188
189 Tail Call@C Function[func,name,args:out]
190 {
191 out <- [func]Func Base[name,args, "TCall"]
172 } 192 }
173 193
174 Resolve@C Function[func,op:out] 194 Resolve@C Function[func,op:out]
175 { 195 {
176 [[func]Inputs >>]Find[op] 196 [[func]Inputs >>]Find[op]
249 out <- "" 269 out <- ""
250 } 270 }
251 } 271 }
252 _Output Defs C[string,varname:out] 272 _Output Defs C[string,varname:out]
253 { 273 {
254 Print[varname]
255 out <- [[[string]Append["\tobject *"]]Append[Escape Rhope Name[varname]]]Append[";\n"] 274 out <- [[[string]Append["\tobject *"]]Append[Escape Rhope Name[varname]]]Append[";\n"]
256 } 275 }
257 _Var Defs C[string,type,varname:out] 276 _Var Defs C[string,type,varname:out]
258 { 277 {
259 Print[type]
260 {Print[varname]}
261 out <- [[[string]Append["\tobject *"]]Append[Escape Rhope Name[varname]]]Append[";\n"] 278 out <- [[[string]Append["\tobject *"]]Append[Escape Rhope Name[varname]]]Append[";\n"]
262 } 279 }
263 280
281
264 Definitions@C Function[func:out] 282 Definitions@C Function[func:out]
265 { 283 {
266 Print["Definitions"] 284 Print["Definitions"]
267 out <- [[[Fold["_Definitions C", Fold["_Definitions","typedef struct {\n", [func]Variables >>], [func]Outputs >>]]Append["} l_"]]Append[Escape Rhope Name[[func]Name >>]]]Append[";\n"] 285 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"]
268 } 286 }
269 287
270 Text@C Function[func:out] 288 Text@C Function[func:out]
271 { 289 {
272 cname <- Escape Rhope Name[[func]Name >>] 290 cname <- Escape Rhope Name[[func]Name >>]