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[