@@ -253,26 +253,26 @@ toEscapedBuilderHelp before after !name@(Name ba#) k =
253253 if len <= bLen then
254254 do -- TODO test if writing word-by-word is faster
255255 stToIO (copyToPtr name offset bOffset len)
256− stToIO (escape before after bOffset name offset len)
256+ stToIO (escape before after bOffset name offset len 0)
257257 let !newBufferRange = B.BufferRange (plusPtr bOffset len) bEnd
258258 k newBufferRange
259259 else
260260 do stToIO (copyToPtr name offset bOffset bLen)
261− stToIO (escape before after bOffset name offset bLen)
261+ stToIO (escape before after bOffset name offset bLen 0)
262262 let !newOffset = offset + bLen
263263 let !newLength = len - bLen
264264 return $ B.bufferFull 1 bEnd (go newOffset newLength)
265265
266266
267−escape :: Word8 -> Word8 -> Ptr a -> Name -> Int -> Int -> ST RealWorld ()
268−escape before@(W8# before#) after ptr name@(Name ba#) offset@(I# offset#) end@(I# end#) =
269− if isTrue# (offset# <# end#) then
270− if isTrue# (eqWord# before# (indexWord8Array# ba# offset#))
267+escape :: Word8 -> Word8 -> Ptr a -> Name -> Int -> Int -> Int -> ST RealWorld ()
268+escape before@(W8# before#) after ptr name@(Name ba#) offset@(I# offset#) len@(I# len#) i@(I# i#) =
269+ if isTrue# (i# <# len#) then
270+ if isTrue# (eqWord# before# (indexWord8Array# ba# (offset# +# i#)))
271271 then
272− do writeWordToPtr ptr offset after
273− escape before after ptr name (offset + 1) end
272+ do writeWordToPtr ptr i after
273+ escape before after ptr name offset len (i + 1)
274274 else
275− do escape before after ptr name (offset + 1) end
275+ do escape before after ptr name offset len (i + 1)
276276
277277 else
278278 return ()