@@ -121,7 +121,7 @@ chompInt !pos end !n =
121121 chompInt (plusPtr pos 1) end (10 * n + fromIntegral (word - 0x30 {-0-}))
122122
123123 else if word == 0x2E {-.-} then
124− chompFraction (plusPtr pos 1) end n
124+ chompFraction pos end n
125125
126126 else if word == 0x65 {-e-} || word == 0x45 {-E-} then
127127 chompExponent (plusPtr pos 1) end
@@ -139,11 +139,14 @@ chompInt !pos end !n =
139139
140140chompFraction :: Ptr Word8 -> Ptr Word8 -> Int -> Outcome
141141chompFraction pos end n =
142− if pos >= end then
142+ let
143+ !pos1 = plusPtr pos 1
144+ in
145+ if pos1 >= end then
143146 Err pos (E.NumberDot n)
144147
145− else if isDecimalDigit (P.unsafeIndex pos) then
146− chompFractionHelp (plusPtr pos 1) end
148+ else if isDecimalDigit (P.unsafeIndex pos1) then
149+ chompFractionHelp (plusPtr pos1 1) end
147150
148151 else
149152 Err pos (E.NumberDot n)
@@ -222,7 +225,7 @@ chompZero pos end =
222225 chompHexInt (plusPtr pos 1) end
223226
224227 else if word == 0x2E {-.-} then
225− chompFraction (plusPtr pos 1) end 0
228+ chompFraction pos end 0
226229
227230 else if isDecimalDigit word then
228231 Err pos E.NumberNoLeadingZero