comparison cbackend.rhope @ 40:789a146a48e1

Started adding support for naked values in user defined objects
author Mike Pavone <pavone@retrodev.com>
date Fri, 09 Oct 2009 01:01:26 -0400
parents 7f05bbe82f24
children aabda74c7a88
comparison
equal deleted inserted replaced
39:3d92bc1352c2 40:789a146a48e1
152 array <- "" 152 array <- ""
153 } 153 }
154 }{ 154 }{
155 typename <- "Array" 155 typename <- "Array"
156 } 156 }
157 primitive <- No
157 }{ 158 }{
158 typename <- [type]Name >> 159 ,regulartype <- [("Naked","Raw Pointer")]Find[variant]
160 {
161 [("Int32","Int16","Int8")]Find[[type]Name >>]
162 {
163 primitive <- Yes
164 [[type]Name >>]Slice[3] {}
165 { typename <- [["int"]Append[~]]Append["_t"] }
166 }{
167 ,regulartype <- [("UInt32","UInt16","UInt8")]Find[[type]Name >>]
168 {
169 primitive <- Yes
170 [[type]Name >>]Slice[4] {}
171 { typename <- [["uint"]Append[~]]Append["_t"] }
172 }
173 }
174 }
175
176 Val[regulartype]
177 {
178 typename <- [type]Name >>
179 primitive <- No
180 }
159 } 181 }
160 }{ 182 }{
161 typename <- type 183 typename <- type
162 param <- "Any Type" 184 param <- "Any Type"
163 variant <- "boxed" 185 variant <- "boxed"
186 primitive <- No
164 } 187 }
165 Val[typename] 188 Val[typename]
166 { array <- "" } 189 { array <- "" }
167 If[[typename] = ["Any Type"]] 190 If[[typename] = ["Any Type"]]
168 { 191 {
169 out <- "struct object *" 192 out <- "struct object *"
170 }{ 193 }{
171 [("Naked","Raw Pointer")]Find[variant] 194 [("Naked","Raw Pointer")]Find[variant]
172 { 195 {
173 prefix <- "nt_" 196 If[primitive]
197 {
198 prefix <- ""
199 }{
200 prefix <- "nt_"
201 }
174 }{ 202 }{
175 prefix <- "t_" 203 prefix <- "t_"
176 } 204 }
177 205
178 If[[variant]=["Naked"]] 206 If[[variant]=["Naked"]]
180 postfix <- "" 208 postfix <- ""
181 }{ 209 }{
182 postfix <- " *" 210 postfix <- " *"
183 } 211 }
184 } 212 }
185 out <- [[prefix]Append[Escape Rhope Name[typename]]]Append[postfix] 213 If[primitive]
214 {
215 escaped <- Val[typename]
216 }{
217 escaped <- Escape Rhope Name[typename]
218 }
219 out <- [[prefix]Append[escaped]]Append[postfix]
186 } 220 }
187 221
188 _Type Def C Type[text,field:out] 222 _Type Def C Type[text,field:out]
189 { 223 {
190 name <- [field]Index[0] 224 name <- [field]Index[0]
480 514
481 Copy@C Function[func,pdest:out] 515 Copy@C Function[func,pdest:out]
482 { 516 {
483 dest <- [pdest]Make Op[func] 517 dest <- [pdest]Make Op[func]
484 out <- [func]Add Statement[ [dest]Append[[[" = copy_object("]Append[dest]]Append[")"]] ] 518 out <- [func]Add Statement[ [dest]Append[[[" = copy_object("]Append[dest]]Append[")"]] ]
519 }
520
521 Box@C Function[func,pdest,psource,type:out]
522 {
523 dest <- [pdest]Make Op[func]
524 source <- [psource]Make Op[func]
525 out <- [func]Add Statement[
526 [[[[[dest
527 ]Append[" = naked_to_boxed("]
528 ]Append[ [[func]Type Registry >>]Type ID[[type]Name >>] ]
529 ]Append[", &"]
530 ]Append[source]
531 ]Append[")"] ]
532 }
533
534 Unbox@C Function[func,pdest,psource:out]
535 {
536 dest <- [pdest]Make Op[func]
537 source <- [psource]Make Op[func]
538 out <- [func]Add Statement[
539 [[[["boxed_to_naked("
540 ]Append[source]
541 ]Append[", &"]
542 ]Append[dest]
543 ]Append[")"] ]
485 } 544 }
486 545
487 _Function Arg C[func,val,inputnum:out] 546 _Function Arg C[func,val,inputnum:out]
488 { 547 {
489 out <- [func]Add Statement[ 548 out <- [func]Add Statement[