diff cbackend_c.rhope @ 170:ac5c2d78663f

Inline calls to If@Boolean when static type info is present
author Mike Pavone <pavone@retrodev.com>
date Sun, 08 May 2011 18:21:19 -0700
parents fd06fb07762a
children a32afde77abb
line wrap: on
line diff
--- a/cbackend_c.rhope	Sun May 08 01:37:44 2011 -0700
+++ b/cbackend_c.rhope	Sun May 08 18:21:19 2011 -0700
@@ -596,6 +596,7 @@
 	out <- [func]Add Statement[[[dest]Append[" = "]]Append[source]]
 }
 
+
 Do AddRef@C Function[func,psource,pdest:out]
 {
     source <- [psource]Make Op[func] 
@@ -880,8 +881,10 @@
 	{	
 		If[[[func]Last NumParams >>] = [-1]]
 		{
+			Print["No previous PrepCall"]
 			freed <- Val[func]
 		}{
+			Print[[["Last NumParams is "]Append[String[[func]Last NumParams >>]]]Append[" adding FreeCall"]]
 			freed <- [func]Add Raw Line["FreeCall"]
 		}
 		prepped <- [[freed]Add Raw Line[ [["PrepCall("]Append[String[[rargs]Length]]]Append[")"] ]
@@ -979,12 +982,19 @@
 Do If@C Function[func,condition,stream:out]
 {
 	cond <- [condition]Make Op[func]
-	out <- [[Fold[_If C[?], [[func
+	after statements <- Fold[_If C[?], [[func
 		]Add Raw Line[ [["if("]Append[cond]]Append[")"] ]
 		]Add Raw Line["{"], [stream]Statements >>]
-		]Add Raw Line["}"]
+		
+		
+	If[[[[func]Last NumParams >>]=[-1]]And[[[stream]Last NumParams >>]>[-1]]]
+	{
+		after free <- [after statements]Add Raw Line["FreeCall"]
+	}{
+		after free <- Val[after statements]
+	}
+	out <- [[after free]Add Raw Line["}"]
 		]Resume Index <<[[stream]Resume Index >>]
-
 }
 
 Discard Outputs@C Function[func,first to discard:out]