Mercurial > repos > rhope
annotate cbackend.rhope @ 15:b71bab34ec65
Added forgotten release_ref to fib test
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 26 May 2009 23:36:41 -0400 |
parents | 31f8182f3433 |
children | 69dfca29565f |
rev | line source |
---|---|
12
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
1 Import extendlib.rhope |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
2 Import backendutils.rhope |
2 | 3 |
4 Blueprint Blueprint Def | |
5 { | |
6 Name | |
7 Fixed Size | |
8 Fields | |
9 Methods | |
10 } | |
11 | |
12 Blueprint Def[name] | |
13 { | |
14 out <- [[[[Build["Blueprint Def"]]Name <<[name]]Fixed Size <<[0]]Fields <<[()]]Methods <<[New@Dictionary[]] | |
15 } | |
16 | |
17 Blueprint C Function | |
18 { | |
19 Name | |
20 Inputs | |
21 Outputs | |
22 Convention | |
23 Variables | |
24 Statements | |
25 } | |
26 | |
27 C Function[name,inputs,outputs,convention:out] | |
28 { | |
29 out <- [[[[[[Build["C Function"] | |
30 ]Name <<[name] | |
31 ]Inputs <<[inputs] | |
32 ]Outputs <<[outputs] | |
33 ]Convention <<[convention] | |
34 ]Variables <<[New@Dictionary[]] | |
35 ]Statements <<[()] | |
36 } | |
37 | |
38 Allocate Var@C Function[func,name,type:out] | |
39 { | |
40 out <- [func]Variables <<[ [[func]Variables >>]Set[name,type] ] | |
41 } | |
42 | |
43 Add Statement@C Function[func,statement:out] | |
44 { | |
12
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
45 out <- [func]Statements <<[ [[func]Statements >>]Append[["\t"]Append[[statement]Append[";\n"]]] ] |
2 | 46 } |
47 | |
48 Add Operator Statement@C Function[func,source1,source2,dest,op:out] | |
49 { | |
50 out <- [func]Add Statement[[[[[dest]Append[" = "]]Append[source1]]Append[op]]Append[source2]] | |
51 } | |
52 | |
53 Add@C Function[func,source1,source2,dest:out] | |
54 { | |
55 out <- [func]Add Operator Statement[source1,source2,dest," + "] | |
56 } | |
57 | |
58 Sub@C Function[func,source1,source2,dest:out] | |
59 { | |
60 out <- [func]Add Operator Statement[source1,source2,dest," - "] | |
61 } | |
62 | |
63 Multiply@C Function[func,source1,source2,dest:out] | |
64 { | |
65 out <- [func]Add Operator Statement[source1,source2,dest," * "] | |
66 } | |
67 | |
68 Divide@C Function[func,source1,source2,dest:out] | |
69 { | |
70 out <- [func]Add Operator Statement[source1,source2,dest," / "] | |
71 } | |
72 | |
73 Move@C Function[func,source,dest:out] | |
74 { | |
75 out <- [func]Add Statement[[[dest]Append[" = "]]Append[source]] | |
76 } | |
77 | |
12
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
78 Init Outputs@C Function[func] |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
79 { |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
80 If[[[[func]Outputs >>]Length ] > [0]] |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
81 { |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
82 out <- [["\tlocals->"]Append[ [[func]Outputs >>]Join[" = NULL;\n\tlocals->"] ]]Append[" = NULL;\n"] |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
83 }{ |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
84 out <- "" |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
85 } |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
86 } |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
87 |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
88 Release Inputs@C Function[func] |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
89 { |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
90 If[[[[func]Inputs >>]Length ] > [0]] |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
91 { |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
92 out <- [["\trelease_ref(->"]Append[ [[func]Outputs >>]Join[" = NULL;\n\tlocals->"] ]]Append[" = NULL;\n"] |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
93 }{ |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
94 out <- "" |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
95 } |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
96 } |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
97 |
2 | 98 Definitions@C Function[func:out] |
99 { | |
100 | |
101 } | |
102 | |
103 Text@C Function[func:out] | |
104 { | |
12
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
105 cname <- Escape Rhope Name[[func]Name >>] |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
106 out <- [[[[[[["Func(" |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
107 ]Append[cname] |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
108 ]Append[",\n\tNumParams "] |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
109 ]Append[ [[func]Inputs >>]Length ] |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
110 ]Append[",\n\tCallSpace 32,\n\t"]//TODO: Fill in with calculated callspace value |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
111 ]Append[["l_"]Append[cname]] |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
112 ]Append[")\n\n"] |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
113 ]Append[[func]Init Outputs] |
2 | 114 } |