on master help sign in
Merge pull request #408 from timthelion/parserQuoteFix
7def815Evan Czaplicki
compiler/Parse/Helpers.hs+5−1
@@ -274,7 +274,7 @@ ignoreUntil :: IParser a -> IParser (Maybe a)
274ignoreUntil end = go
274ignoreUntil end = go
275 where
275 where
276 ignore p = const () <$> p
276 ignore p = const () <$> p
277− filler = choice [ ignore str
277+ filler = choice [ try (ignore chr) <|> ignore str
278 , ignore multiComment
278 , ignore multiComment
279 , ignore (markdown (\_ _ -> mzero))
279 , ignore (markdown (\_ _ -> mzero))
280 , ignore anyChar
280 , ignore anyChar
@@ -337,3 +337,7 @@ str = choice [ quote >> dewindows <$> manyTill (backslashed <|> anyChar) quote
337 ('\n':rest) -> '\n' : dewindows rest
337 ('\n':rest) -> '\n' : dewindows rest
338 ('\r':rest) -> '\n' : dewindows rest
338 ('\r':rest) -> '\n' : dewindows rest
339 _ -> []
339 _ -> []
340+
341+chr :: IParser Char
342+chr = betwixt '\'' '\'' (backslashed <|> satisfy (/='\''))
343+ <?> "character"
compiler/Parse/Literal.hs+2−6
@@ -8,7 +8,7 @@ import Text.Parsec.Indent
8import Parse.Helpers
8import Parse.Helpers
9import SourceSyntax.Literal
9import SourceSyntax.Literal
10
10
11−literal = num <|> (Str <$> str) <|> chr
11+literal = num <|> (Str <$> str) <|> (Chr <$> chr)
12
12
13num :: IParser Literal
13num :: IParser Literal
14num = fmap toLit (preNum <?> "number")
14num = fmap toLit (preNum <?> "number")
@@ -20,8 +20,4 @@ num = fmap toLit (preNum <?> "number")
20 ('.':) <$> many1 digit
20 ('.':) <$> many1 digit
21 minus = try $ do string "-"
21 minus = try $ do string "-"
22 lookAhead digit
22 lookAhead digit
23− return "-"
23+ return "-"
24−
25−chr :: IParser Literal
26−chr = Chr <$> betwixt '\'' '\'' (backslashed <|> satisfy (/='\''))
27− <?> "character"
tests/good/QuotesAndComments.elmnew file+12
@@ -0,0 +1,12 @@
1+f x =
2+ let
3+ x' = x+1
4+ in
5+ x'
6+
7+g = '\"'
8+
9+n = '\''
10+
11+{- this is an {- embeded comment -} -}
12+main = plainText "{-"