@@ -72,16 +72,18 @@ instance Text.Parser.Char.CharParsing IdrisInnerParser where
7272 char = P.char
7373 string = P.string
7474
75−instance {-# OVERLAPPING #-} Tok.TokenParsing IdrisParser where
76− someSpace = someSpace'
77− token p = do s <- get
75+tokenFC :: IdrisParser a -> IdrisParser (a, FC)
76+tokenFC p = do s <- get
7877 (FC fn (sl, sc) _) <- getFC --TODO: Update after fixing getFC
7978 -- See Issue #1594
8079 r <- p
8180 (FC fn _ (el, ec)) <- getFC
8281 whiteSpace
83− put (s { lastTokenSpan = Just (FC fn (sl, sc) (el, ec)) })
84− return r
82+ return (r, FC fn (sl, sc) (el, ec))
83+
84+instance {-# OVERLAPPING #-} Tok.TokenParsing IdrisParser where
85+ someSpace = someSpace'
86+ token p = p <* whiteSpace
8587
8688-- | Helper to run Idris inner parser based stateT parsers
8789runparser :: StateT st IdrisInnerParser res -> st -> String -> String -> Either ParseError res
@@ -227,27 +229,21 @@ whiteSpace = someSpace' <|> pure ()
227229
228230-- | Parses a string literal
229231stringLiteral :: IdrisParser (String, FC)
230−stringLiteral = do str <- Tok.stringLiteral
231− fc <- lastTokenSpan <$> get
232− return (str, fromMaybe NoFC fc)
232+stringLiteral = tokenFC . P.try $ P.char '"' *> P.manyTill P.charLiteral (P.char '"')
233233
234234-- | Parses a char literal
235235charLiteral :: IdrisParser (Char, FC)
236−charLiteral = do ch <- Tok.charLiteral
237− fc <- lastTokenSpan <$> get
238− return (ch, fromMaybe NoFC fc)
236+charLiteral = tokenFC . P.try $ P.char '\'' *> P.charLiteral <* P.char '\''
239237
240238-- | Parses a natural number
241239natural :: IdrisParser (Integer, FC)
242−natural = do n <- Tok.natural
243− fc <- lastTokenSpan <$> get
244− return (n, fromMaybe NoFC fc)
240+natural = tokenFC ( P.try (P.char '0' *> P.char' 'x' *> P.hexadecimal)
241+ <|> P.try (P.char '0' *> P.char' 'o' *> P.octal)
242+ <|> P.try P.decimal)
245243
246244-- | Parses a floating point number
247245float :: IdrisParser (Double, FC)
248−float = do f <- Tok.double
249− fc <- lastTokenSpan <$> get
250− return (f, fromMaybe NoFC fc)
246+float = tokenFC . P.try $ P.float
251247
252248{- * Symbols, identifiers, names and operators -}
253249