#50: Parenthesize marshallers, to preserve Haskell expressions
--------------------+-------------------------------------------------------
Reporter: guest | Type: defect
Status: new | Priority: normal
Milestone: | Component: general
Version: 0.16.0 | Keywords:
--------------------+-------------------------------------------------------
Marshallers can contain Haskell expressions; however, c2hs substitutes
those expressions into Haskell code as function calls and adds arguments
to the end, which limits these Haskell expressions to simple function
calls with one or more arguments. Add parentheses to these expressions,
allowing them to contain arbitrary Haskell expressions with lower
precedence than function calls, such as operators.
{{{
diff -rN -u old-c2hs/src/C2HS/Gen/Bind.hs new-c2hs/src/C2HS/Gen/Bind.hs
--- old-c2hs/src/C2HS/Gen/Bind.hs 2012-10-07 19:24:21.493527302
-0700
+++ new-c2hs/src/C2HS/Gen/Bind.hs 2012-10-07 19:24:21.521526937
-0700
@@ -884,7 +884,7 @@
interr "GenBind.funDef: marshRes: no default?"
marshBody (Left ide) = identToString ide
- marshBody (Right str) = str
+ marshBody (Right str) = "(" ++ str ++ ")"
retArgs' = case parm' of
CHSParm _ _ _ (Just (_, CHSVoidArg)) _ ->
retArgs
@@ -962,7 +962,7 @@
retArg = if omArgKind == CHSVoidArg || omArgKind ==
CHSIOVoidArg then "" else outBndr
marshBody (Left ide) = identToString ide
- marshBody (Right str) = str
+ marshBody (Right str) = "(" ++ str ++ ")"
in
(funArg, marshIn, callArgs, marshOut, retArg)
marshArg _ _ = interr "GenBind.funDef: Missing default?"
}}}
--
Ticket URL: <http://hackage.haskell.org/trac/c2hs/ticket/50>
c2hs <http://www.cse.unsw.edu.au/~chak/haskell/c2hs/>
C->Haskell, An Interface Generator for Haskell
_______________________________________________
C2hs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/c2hs