@@ -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-}))
123 else if word == 0x2E {-.-} then
123 else if word == 0x2E {-.-} then
124− chompFraction (plusPtr pos 1) end n
124+ chompFraction pos end n
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 =
140chompFraction :: Ptr Word8 -> Ptr Word8 -> Int -> Outcome
140chompFraction :: Ptr Word8 -> Ptr Word8 -> Int -> Outcome
141chompFraction pos end n =
141chompFraction pos end n =
143+ !pos1 = plusPtr pos 1
142− if pos >= end then
145+ if pos1 >= end then
143 Err pos (E.NumberDot n)
146 Err pos (E.NumberDot n)
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
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
224 else if word == 0x2E {-.-} then
227 else if word == 0x2E {-.-} then
225− chompFraction (plusPtr pos 1) end 0
228+ chompFraction pos end 0
227 else if isDecimalDigit word then
230 else if isDecimalDigit word then
228 Err pos E.NumberNoLeadingZero
231 Err pos E.NumberNoLeadingZero