on master help sign in
Fix #1213, disallow whitespace in operator functions
commit98db71de6cab05fedb8e9f294e1e4353d5c2ee3e authorEvan Czaplicki <evancz@users.noreply.github.com> dateThu 24 Nov 2016, 12:35 (10 years ago) parent3ef0720
2 files changed+19−8
src/Parse/Expression.hs+14−5 src/Parse/Helpers.hs+5−3
src/Parse/Expression.hs+14−5
@@ -106,11 +106,16 @@ parensTerm =
106106 _ ->
107107 A.at start end (Src.tuple expressions)
108108 in
109− do (start, mkExpr, end) <-
110− located $ choice $
111− [ mkBinop <$> try (parens (addLocation Binop.infixOp))
112− , parens (tupleFn <|> parenedExpr)
109+ do char '('
110+ start <- getMyPosition
111+ mkExpr <-
112+ choice
113+ [ mkBinop <$> try (addLocation Binop.infixOp)
114+ , tupleFn
115+ , parenedExpr
113116 ]
117+ end <- getMyPosition
118+ char ')'
114119 return (mkExpr start end)
115120
116121
@@ -299,7 +304,11 @@ def =
299304defStart :: IParser P.Raw
300305defStart =
301306 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)
303312 , Pattern.term
304313 ]
305314
src/Parse/Helpers.hs+5−3
@@ -246,9 +246,11 @@ getMyPosition =
246246
247247
248248addLocation :: IParser a -> IParser (A.Located a)
249−addLocation expr =
250− do (start, e, end) <- located expr
251− return (A.at start end e)
249+addLocation parser =
250+ do start <- getMyPosition
251+ value <- parser
252+ end <- getMyPosition
253+ return (A.at start end value)
252254
253255
254256located :: IParser a -> IParser (R.Position, a, R.Position)