Mercurial > repos > rhope
comparison backendutils.rhope @ 49:3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 08 Apr 2010 01:02:18 -0400 |
parents | a24eb366195c |
children | a844c623c7df |
comparison
equal
deleted
inserted
replaced
48:a24eb366195c | 49:3e20ed8959c4 |
---|---|
34 } | 34 } |
35 | 35 |
36 Make Op@AddRef[addref,func:out] | 36 Make Op@AddRef[addref,func:out] |
37 { | 37 { |
38 //TODO: Make me work with other backends | 38 //TODO: Make me work with other backends |
39 out <- [["add_ref("]Append[ [[addref]Value >>]Make Op[func] ]]Append[")"] | 39 out <- [["add_ref((object *)"]Append[ [[addref]Value >>]Make Op[func] ]]Append[")"] |
40 } | |
41 | |
42 Strip Addref@AddRef[op:out] | |
43 { | |
44 out <- [[op]Value >>]Strip Addref | |
40 } | 45 } |
41 | 46 |
42 Make Op@String[string,func:out] | 47 Make Op@String[string,func:out] |
43 { | 48 { |
44 out <- [func]Resolve[string] | 49 out <- [func]Resolve[string] |
45 } | 50 } |
46 | 51 |
52 Strip Addref@String[op:out] | |
53 { | |
54 out <- op | |
55 } | |
56 | |
47 Make Op@Whole Number[num,func:out] | 57 Make Op@Whole Number[num,func:out] |
48 { | 58 { |
49 out <- num | 59 out <- num |
50 } | 60 } |
51 | 61 |
62 Strip Addref@Whole Number[op:out] | |
63 { | |
64 out <- op | |
65 } | |
66 | |
52 Make Op@Real Number[num,func:out] | 67 Make Op@Real Number[num,func:out] |
53 { | 68 { |
54 out <- num | 69 out <- num |
55 } | 70 } |
56 | 71 |
72 Strip Addref@Real Number[op:out] | |
73 { | |
74 out <- op | |
75 } | |
76 | |
77 Blueprint Output | |
78 { | |
79 Name | |
80 } | |
81 | |
82 Output[name:out] | |
83 { | |
84 out <- [Build["Output"]]Name <<[name] | |
85 } | |
86 | |
87 Make Op@Output[op,func:out] | |
88 { | |
89 out <- [func]Resolve Output[[op]Name >>] | |
90 } | |
91 | |
92 Strip Addref@Output[op:out] | |
93 { | |
94 out <- op | |
95 } | |
96 | |
57 Blueprint Constant | 97 Blueprint Constant |
58 { | 98 { |
59 Value | 99 Value |
60 } | 100 } |
61 | 101 |
67 Make Op@Constant[const,func:out] | 107 Make Op@Constant[const,func:out] |
68 { | 108 { |
69 out <- [func]Lookup Constant[[const]Value >>] | 109 out <- [func]Lookup Constant[[const]Value >>] |
70 } | 110 } |
71 | 111 |
112 Strip Addref@Constant[op:out] | |
113 { | |
114 out <- op | |
115 } | |
116 | |
72 Blueprint Result | 117 Blueprint Result |
73 { | 118 { |
74 Output Num | 119 Output Num |
75 } | 120 } |
76 | 121 |
80 } | 125 } |
81 | 126 |
82 Make Op@Result[result,func:out] | 127 Make Op@Result[result,func:out] |
83 { | 128 { |
84 out <- [func]Result Reference[[result]Output Num>>] | 129 out <- [func]Result Reference[[result]Output Num>>] |
130 } | |
131 | |
132 Strip Addref@Result[op:out] | |
133 { | |
134 out <- op | |
135 } | |
136 | |
137 Make Condition[op:out] | |
138 { | |
139 If[[Type Of[op]]=["OrValue"]] | |
140 { | |
141 out <- OrCond[Make Condition[[op]Left >>], Make Condition[[op]Right >>]] | |
142 }{ | |
143 out <- op | |
144 } | |
85 } | 145 } |
86 | 146 |
87 Blueprint OrValue | 147 Blueprint OrValue |
88 { | 148 { |
89 Left | 149 Left |
95 out <- [[Build["OrValue"]]Left <<[left]]Right <<[right] | 155 out <- [[Build["OrValue"]]Left <<[left]]Right <<[right] |
96 } | 156 } |
97 | 157 |
98 Make Op@OrValue[orval,func:out] | 158 Make Op@OrValue[orval,func:out] |
99 { | 159 { |
100 out <- [func]If Null Else[[[func]Left >>]Make Op[func], [[func]Right >>]Make Op[func]] | 160 out <- [func]If Null Else[[orval]Left >>, [orval]Right >>] |
161 } | |
162 | |
163 Strip Addref@OrValue[op:out] | |
164 { | |
165 out <- [[op]Left <<[ [[op]Left >>]Strip Addref ]]Right <<[ [[op]Right >>]Strip Addref ] | |
101 } | 166 } |
102 | 167 |
103 Blueprint NotCond | 168 Blueprint NotCond |
104 { | 169 { |
105 Condition | 170 Condition |
106 } | 171 } |
107 | 172 |
108 NotCond[cond:out] | 173 NotCond[cond:out] |
109 { | 174 { |
110 out <- [Build["NotCond"]]Condition <<[cond] | 175 out <- [Build["NotCond"]]Condition <<[[cond]Strip Addref] |
111 } | 176 } |
112 | 177 |
113 Make Op@NotCond[cond,func:out] | 178 Make Op@NotCond[cond,func:out] |
114 { | 179 { |
115 out <- ["!"]Append[[[cond]Condition >>]Make Op[func]] | 180 out <- ["!"]Append[[[cond]Condition >>]Make Op[func]] |
181 } | |
182 | |
183 Strip Addref@NotCond[op:out] | |
184 { | |
185 out <- op | |
116 } | 186 } |
117 | 187 |
118 Blueprint OrCond | 188 Blueprint OrCond |
119 { | 189 { |
120 Condition1 | 190 Condition1 |
121 Condition2 | 191 Condition2 |
122 } | 192 } |
123 | 193 |
124 OrCond[cond1,cond2:out] | 194 OrCond[cond1,cond2:out] |
125 { | 195 { |
126 out <- [[Build["OrCond"]]Condition1 <<[cond1]]Condition2 <<[cond2] | 196 out <- [[Build["OrCond"]]Condition1 <<[[cond1]Strip Addref]]Condition2 <<[[cond2]Strip Addref] |
127 } | 197 } |
128 | 198 |
129 Make Op@OrCond[cond,func:out] | 199 Make Op@OrCond[cond,func:out] |
130 { | 200 { |
131 out <- ["("]Append[[[ [[cond]Condition1 >>]Make Op[func] ]Append[" || "]]Append[[ [[cond]Condition2 >>]Make Op[func] ]Append[")"]]] | 201 out <- ["("]Append[[[ [[cond]Condition1 >>]Make Op[func] ]Append[" || "]]Append[[ [[cond]Condition2 >>]Make Op[func] ]Append[")"]]] |
202 } | |
203 | |
204 Strip Addref@OrCond[op:out] | |
205 { | |
206 out <- op | |
132 } | 207 } |
133 | 208 |
134 Blueprint AndCond | 209 Blueprint AndCond |
135 { | 210 { |
136 Condition1 | 211 Condition1 |
137 Condition2 | 212 Condition2 |
138 } | 213 } |
139 | 214 |
140 AndCond[cond1,cond2:out] | 215 AndCond[cond1,cond2:out] |
141 { | 216 { |
142 out <- [[Build["AndCond"]]Condition1 <<[cond1]]Condition2 <<[cond2] | 217 out <- [[Build["AndCond"]]Condition1 <<[[cond1]Strip Addref]]Condition2 <<[[cond2]Strip Addref] |
143 } | 218 } |
144 | 219 |
145 Make Op@AndCond[cond,func:out] | 220 Make Op@AndCond[cond,func:out] |
146 { | 221 { |
147 out <- ["("]Append[[[ [[cond]Condition1 >>]Make Op[func] ]Append[" && "]]Append[[ [[cond]Condition2 >>]Make Op[func] ]Append[")"]]] | 222 out <- ["("]Append[[[ [[cond]Condition1 >>]Make Op[func] ]Append[" && "]]Append[[ [[cond]Condition2 >>]Make Op[func] ]Append[")"]]] |
223 } | |
224 | |
225 Strip Addref@AndCond[op:out] | |
226 { | |
227 out <- op | |
148 } | 228 } |
149 | 229 |
150 Blueprint Field Ref | 230 Blueprint Field Ref |
151 { | 231 { |
152 Variable | 232 Variable |
159 } | 239 } |
160 | 240 |
161 Make Op@Field Ref[ref,func:out] | 241 Make Op@Field Ref[ref,func:out] |
162 { | 242 { |
163 out <- [func]Field Result[[ref]Variable >>,[ref]Field >>] | 243 out <- [func]Field Result[[ref]Variable >>,[ref]Field >>] |
244 } | |
245 | |
246 Strip Addref@Field Ref[op:out] | |
247 { | |
248 out <- op | |
164 } | 249 } |
165 | 250 |
166 Blueprint Type Instance | 251 Blueprint Type Instance |
167 { | 252 { |
168 Name | 253 Name |
169 Params | 254 Params |
170 Variant | 255 Variant |
256 Mutable? | |
171 } | 257 } |
172 | 258 |
173 Type Instance[raw name:out] | 259 Type Instance[raw name:out] |
174 { | 260 { |
175 If[[raw name]=[""]] | 261 If[[raw name]=[""]] |
176 { | 262 { |
177 name <- "Any Type" | 263 name <- "Any Type" |
178 }{ | 264 }{ |
179 name <- raw name | 265 name <- raw name |
180 } | 266 } |
181 out <- [[[Build["Type Instance"]]Name <<[name]]Params <<[()]]Variant <<["Boxed"] | 267 out <- [[[[Build["Type Instance"]]Name <<[name]]Params <<[()]]Variant <<["Boxed"]]Mutable? <<[No] |
182 } | 268 } |
183 | 269 |
184 Set Variant@Type Instance[type,variant:out,invalid] | 270 Set Variant@Type Instance[type,variant:out,invalid] |
185 { | 271 { |
186 [("Boxed","Naked","Pointer","Raw Pointer")]Find[variant] | 272 [("Boxed","Naked","Pointer","Raw Pointer")]Find[variant] |