on master help sign in
Fix #1213, disallow whitespace in operator functions
98db71dEvan Czaplicki
src/Parse/Expression.hs+14−5
@@ -106,11 +106,16 @@ parensTerm =
106 _ ->
106 _ ->
107 A.at start end (Src.tuple expressions)
107 A.at start end (Src.tuple expressions)
108 in
108 in
109+ do char '('
110+ start <- getMyPosition
109− do (start, mkExpr, end) <-
111+ mkExpr <-
110− located $ choice $
112+ choice
111− [ mkBinop <$> try (parens (addLocation Binop.infixOp))
113+ [ mkBinop <$> try (addLocation Binop.infixOp)
114+ , tupleFn
112− , parens (tupleFn <|> parenedExpr)
115+ , parenedExpr
113 ]
116 ]
117+ end <- getMyPosition
118+ char ')'
114 return (mkExpr start end)
119 return (mkExpr start end)
115
120
116
121
@@ -299,7 +304,11 @@ def =
299defStart :: IParser P.Raw
304defStart :: IParser P.Raw
300defStart =
305defStart =
301 choice
306 choice
302− [ addLocation (try (P.Var <$> parens Binop.infixOp))
307+ [ addLocation $ try $
308+ do char '('
309+ op <- Binop.infixOp
310+ char ')'
311+ return (P.Var op)
303 , Pattern.term
312 , Pattern.term
304 ]
313 ]
305
314
src/Parse/Helpers.hs+5−3
@@ -246,9 +246,11 @@ getMyPosition =
246
246
247
247
248addLocation :: IParser a -> IParser (A.Located a)
248addLocation :: IParser a -> IParser (A.Located a)
249−addLocation expr =
249+addLocation parser =
250− do (start, e, end) <- located expr
250+ do start <- getMyPosition
251+ value <- parser
252+ end <- getMyPosition
251− return (A.at start end e)
253+ return (A.at start end value)
252
254
253
255
254located :: IParser a -> IParser (R.Position, a, R.Position)
256located :: IParser a -> IParser (R.Position, a, R.Position)