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