Mercurial > repos > rhope
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]