on master help sign in
Move the region back one character on NumberBadDot errors
3e8e457Evan Czaplicki
compiler/src/Parse/Number.hs+8−5
@@ -121,7 +121,7 @@ chompInt !pos end !n =
121 chompInt (plusPtr pos 1) end (10 * n + fromIntegral (word - 0x30 {-0-}))
121 chompInt (plusPtr pos 1) end (10 * n + fromIntegral (word - 0x30 {-0-}))
122
122
123 else if word == 0x2E {-.-} then
123 else if word == 0x2E {-.-} then
124− chompFraction (plusPtr pos 1) end n
124+ chompFraction pos end n
125
125
126 else if word == 0x65 {-e-} || word == 0x45 {-E-} then
126 else if word == 0x65 {-e-} || word == 0x45 {-E-} then
127 chompExponent (plusPtr pos 1) end
127 chompExponent (plusPtr pos 1) end
@@ -139,11 +139,14 @@ chompInt !pos end !n =
139
139
140chompFraction :: Ptr Word8 -> Ptr Word8 -> Int -> Outcome
140chompFraction :: Ptr Word8 -> Ptr Word8 -> Int -> Outcome
141chompFraction pos end n =
141chompFraction pos end n =
142+ let
143+ !pos1 = plusPtr pos 1
144+ in
142− if pos >= end then
145+ if pos1 >= end then
143 Err pos (E.NumberDot n)
146 Err pos (E.NumberDot n)
144
147
145− else if isDecimalDigit (P.unsafeIndex pos) then
148+ else if isDecimalDigit (P.unsafeIndex pos1) then
146− chompFractionHelp (plusPtr pos 1) end
149+ chompFractionHelp (plusPtr pos1 1) end
147
150
148 else
151 else
149 Err pos (E.NumberDot n)
152 Err pos (E.NumberDot n)
@@ -222,7 +225,7 @@ chompZero pos end =
222 chompHexInt (plusPtr pos 1) end
225 chompHexInt (plusPtr pos 1) end
223
226
224 else if word == 0x2E {-.-} then
227 else if word == 0x2E {-.-} then
225− chompFraction (plusPtr pos 1) end 0
228+ chompFraction pos end 0
226
229
227 else if isDecimalDigit word then
230 else if isDecimalDigit word then
228 Err pos E.NumberNoLeadingZero
231 Err pos E.NumberNoLeadingZero