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]