Mercurial > repos > rhope
diff 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 |
line wrap: on
line diff
--- a/cbackend.rhope Thu Oct 08 00:37:24 2009 -0400 +++ b/cbackend.rhope Fri Oct 09 01:01:26 2009 -0400 @@ -154,13 +154,36 @@ }{ typename <- "Array" } + primitive <- No }{ - typename <- [type]Name >> + ,regulartype <- [("Naked","Raw Pointer")]Find[variant] + { + [("Int32","Int16","Int8")]Find[[type]Name >>] + { + primitive <- Yes + [[type]Name >>]Slice[3] {} + { typename <- [["int"]Append[~]]Append["_t"] } + }{ + ,regulartype <- [("UInt32","UInt16","UInt8")]Find[[type]Name >>] + { + primitive <- Yes + [[type]Name >>]Slice[4] {} + { typename <- [["uint"]Append[~]]Append["_t"] } + } + } + } + + Val[regulartype] + { + typename <- [type]Name >> + primitive <- No + } } }{ typename <- type param <- "Any Type" variant <- "boxed" + primitive <- No } Val[typename] { array <- "" } @@ -170,7 +193,12 @@ }{ [("Naked","Raw Pointer")]Find[variant] { - prefix <- "nt_" + If[primitive] + { + prefix <- "" + }{ + prefix <- "nt_" + } }{ prefix <- "t_" } @@ -182,7 +210,13 @@ postfix <- " *" } } - out <- [[prefix]Append[Escape Rhope Name[typename]]]Append[postfix] + If[primitive] + { + escaped <- Val[typename] + }{ + escaped <- Escape Rhope Name[typename] + } + out <- [[prefix]Append[escaped]]Append[postfix] } _Type Def C Type[text,field:out] @@ -484,6 +518,31 @@ out <- [func]Add Statement[ [dest]Append[[[" = copy_object("]Append[dest]]Append[")"]] ] } +Box@C Function[func,pdest,psource,type:out] +{ + dest <- [pdest]Make Op[func] + source <- [psource]Make Op[func] + out <- [func]Add Statement[ + [[[[[dest + ]Append[" = naked_to_boxed("] + ]Append[ [[func]Type Registry >>]Type ID[[type]Name >>] ] + ]Append[", &"] + ]Append[source] + ]Append[")"] ] +} + +Unbox@C Function[func,pdest,psource:out] +{ + dest <- [pdest]Make Op[func] + source <- [psource]Make Op[func] + out <- [func]Add Statement[ + [[[["boxed_to_naked(" + ]Append[source] + ]Append[", &"] + ]Append[dest] + ]Append[")"] ] +} + _Function Arg C[func,val,inputnum:out] { out <- [func]Add Statement[