Skip to content

Commit accf929

Browse files
mstreamjamesdbrock
authored andcommitted
Makes "float" parser of GenTokenParser parse negative numbers.
Resolves #115
1 parent 2251099 commit accf929

File tree

3 files changed

+10
-3
lines changed

3 files changed

+10
-3
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Notable changes to this project are documented in this file. The format is based
55
## [Unreleased]
66

77
Bugfixes:
8+
- `float` parser of `GenTokenParser` does not parse negative numbers (by @mstream)
89

910
Breaking changes:
1011

src/Parsing/Token.purs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import Data.Int (toNumber)
3434
import Data.List (List(..))
3535
import Data.List as List
3636
import Data.List.NonEmpty (NonEmptyList)
37-
import Data.Maybe (Maybe(..), maybe)
37+
import Data.Maybe (Maybe(..), fromMaybe, maybe)
3838
import Data.Number (pow)
3939
import Data.String (null, toLower)
4040
import Data.String.CodePoints (codePointFromChar)
@@ -43,7 +43,7 @@ import Data.String.CodeUnits as SCU
4343
import Data.String.Unicode as Unicode
4444
import Data.Tuple (Tuple(..))
4545
import Parsing (ParseState(..), ParserT, Position, consume, fail, getParserT, stateParserT)
46-
import Parsing.Combinators (between, choice, notFollowedBy, option, sepBy, sepBy1, skipMany, skipMany1, try, tryRethrow, (<?>), (<??>))
46+
import Parsing.Combinators (between, choice, notFollowedBy, option, optionMaybe, sepBy, sepBy1, skipMany, skipMany1, try, tryRethrow, (<?>), (<??>))
4747
import Parsing.String (char, satisfy, satisfyCodePoint, string)
4848
import Parsing.String.Basic (alphaNum, digit, hexDigit, letter, noneOf, octDigit, oneOf, space, upper)
4949
import Parsing.String.Basic as Basic
@@ -608,7 +608,10 @@ makeTokenParser (LanguageDef languageDef) =
608608

609609
-- floats
610610
floating :: ParserT String m Number
611-
floating = decimal >>= fractExponent
611+
floating = do
612+
f <- fromMaybe identity <$> optionMaybe sign
613+
x <- decimal >>= fractExponent
614+
pure $ f x
612615

613616
natFloat :: ParserT String m (Either Int Number)
614617
natFloat = char '0' *> zeroNumFloat

test/Main.purs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,9 @@ tokenParserFloatTest = do
392392
-- parse float
393393
parseTest "100.5" 100.5 testTokenParser.float
394394

395+
-- parse a negative float
396+
parseTest "-100.5" (-100.5) testTokenParser.float
397+
395398
-- parse float with exponent
396399
parseTest "100e1" 1000.0 testTokenParser.float
397400

0 commit comments

Comments
 (0)