git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Merge pull request #1127 from kRITZCREEK/master
4942fe9Gary Burgess
examples/failing/LeadingZeros1.pursnew file+3
@@ -0,0 +1,3 @@
1+module Main where
2+
3+x = 01
examples/failing/LeadingZeros2.pursnew file+3
@@ -0,0 +1,3 @@
1+module Main where
2+
3+x = 00.1
src/Language/PureScript/Parser/Lexer.hs+11−4
@@ -240,12 +240,19 @@ parseToken = P.choice
240 parseStringLiteral :: P.Parsec String u String
240 parseStringLiteral :: P.Parsec String u String
241 parseStringLiteral = blockString <|> PT.stringLiteral tokenParser
241 parseStringLiteral = blockString <|> PT.stringLiteral tokenParser
242 where
242 where
243− delimeter = P.try (P.string "\"\"\"")
243+ delimiter = P.try (P.string "\"\"\"")
244− blockString = delimeter >> P.manyTill P.anyChar delimeter
244+ blockString = delimiter >> P.manyTill P.anyChar delimiter
245
245
246 parseNumber :: P.Parsec String u (Either Integer Double)
246 parseNumber :: P.Parsec String u (Either Integer Double)
247+ parseNumber = (consumeLeadingZero >> P.parserZero) <|>
247− parseNumber = (Right <$> P.try (PT.float tokenParser) <|>
248+ (Right <$> P.try (PT.float tokenParser) <|>
248− Left <$> P.try (PT.natural tokenParser)) P.<?> "number"
249+ Left <$> P.try (PT.natural tokenParser))
250+ P.<?> "number"
251+ where
252+ -- lookAhead doesn't consume any input if its parser succeeds
253+ -- if notFollowedBy fails though, the consumed '0' will break the choice chain
254+ consumeLeadingZero = P.lookAhead (P.char '0' >>
255+ (P.notFollowedBy P.digit P.<?> "no leading zero in number literal"))
249
256
250-- |
257-- |
251-- We use Text.Parsec.Token to implement the string and number lexemes
258-- We use Text.Parsec.Token to implement the string and number lexemes