#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
C2hs@haskell.org
http://www.haskell.org/mailman/listinfo/c2hs

Reply via email to