@@ -428,110 +428,113 @@ parseBreak
428428 -> m (Either ParseError b , StreamK m (Array a ))
429429parseBreak parser input = do
430430 let parserk = ParserK. runParser parser ParserK. parserDone 0 0
431- in go [] parserk input
431+ in go 0 [] parserk input
432432
433433 where
434434
435435 {-# INLINE goStop #-}
436436 goStop
437- :: [Array a ]
437+ :: Int
438+ -> [Array a ]
438439 -> (ParserK. Input (Array a )
439440 -> m (ParserK. Step (Array a ) m b ))
440441 -> m (Either ParseError b , StreamK m (Array a ))
441- goStop backBuf parserk = do
442+ goStop absPos backBuf parserk = do
442443 pRes <- parserk ParserK. None
443444 case pRes of
444445 -- If we stop in an alternative, it will try calling the next
445446 -- parser, the next parser may call initial returning Partial and
446447 -- then immediately we have to call extract on it.
447448 ParserK. Partial 0 cont1 ->
448- go [] cont1 StreamK. nil
449+ go absPos [] cont1 StreamK. nil
449450 ParserK. Partial n cont1 -> do
450451 let n1 = negate n
451452 assertM(n1 >= 0 && n1 <= sum (Prelude. map length backBuf))
452453 let (s1, backBuf1) = backtrack n1 backBuf StreamK. nil
453- in go backBuf1 cont1 s1
454+ in go (absPos + n) backBuf1 cont1 s1
454455 ParserK. Continue 0 cont1 ->
455- go backBuf cont1 StreamK. nil
456+ go absPos backBuf cont1 StreamK. nil
456457 ParserK. Continue n cont1 -> do
457458 let n1 = negate n
458459 assertM(n1 >= 0 && n1 <= sum (Prelude. map length backBuf))
459460 let (s1, backBuf1) = backtrack n1 backBuf StreamK. nil
460- in go backBuf1 cont1 s1
461+ in go (absPos + n) backBuf1 cont1 s1
461462 ParserK. Done 0 b ->
462463 return (Right b, StreamK. nil)
463464 ParserK. Done n b -> do
464465 let n1 = negate n
465466 assertM(n1 >= 0 && n1 <= sum (Prelude. map length backBuf))
466467 let (s1, _) = backtrack n1 backBuf StreamK. nil
467468 in return (Right b, s1)
468- ParserK. Error _ err ->
469+ ParserK. Error n err ->
469470 let strm = Prelude. foldl (flip StreamK. cons) StreamK. nil backBuf
470- in return (Left (ParseError err), strm)
471+ in return (Left (ParseError (absPos + n) err), strm)
471472
472473 seekErr n len =
473474 error $ " parseBreak: Partial: forward seek not implemented n = "
474475 ++ show n ++ " len = " ++ show len
475476
476477 yieldk
477- :: [Array a ]
478+ :: Int
479+ -> [Array a ]
478480 -> (ParserK. Input (Array a )
479481 -> m (ParserK. Step (Array a ) m b ))
480482 -> Array a
481483 -> StreamK m (Array a )
482484 -> m (Either ParseError b , StreamK m (Array a ))
483- yieldk backBuf parserk arr stream = do
485+ yieldk absPos backBuf parserk arr stream = do
484486 pRes <- parserk (ParserK. Chunk arr)
485487 let len = length arr
486488 case pRes of
487489 ParserK. Partial n cont1 ->
488490 case compare n len of
489- EQ -> go [] cont1 stream
491+ EQ -> go (absPos + n) [] cont1 stream
490492 LT -> do
491493 if n >= 0
492- then yieldk [] cont1 arr stream
494+ then yieldk (absPos + n) [] cont1 arr stream
493495 else do
494496 let n1 = negate n
495497 bufLen = sum (Prelude. map length backBuf)
496498 s = StreamK. cons arr stream
497499 assertM(n1 >= 0 && n1 <= bufLen)
498500 let (s1, _) = backtrack n1 backBuf s
499- go [] cont1 s1
501+ go (absPos + n) [] cont1 s1
500502 GT -> seekErr n len
501503 ParserK. Continue n cont1 ->
502504 case compare n len of
503- EQ -> go (arr: backBuf) cont1 stream
505+ EQ -> go (absPos + n) ( arr: backBuf) cont1 stream
504506 LT -> do
505507 if n >= 0
506- then yieldk backBuf cont1 arr stream
508+ then yieldk (absPos + n) backBuf cont1 arr stream
507509 else do
508510 let n1 = negate n
509511 bufLen = sum (Prelude. map length backBuf)
510512 s = StreamK. cons arr stream
511513 assertM(n1 >= 0 && n1 <= bufLen)
512514 let (s1, backBuf1) = backtrack n1 backBuf s
513- go backBuf1 cont1 s1
515+ go (absPos + n) backBuf1 cont1 s1
514516 GT -> seekErr n len
515517 ParserK. Done n b -> do
516518 let n1 = len - n
517519 assertM(n1 <= sum (Prelude. map length (arr: backBuf)))
518520 let (s1, _) = backtrack n1 (arr: backBuf) stream
519521 in return (Right b, s1)
520- ParserK. Error _ err ->
522+ ParserK. Error n err ->
521523 let strm = Prelude. foldl (flip StreamK. cons) stream (arr: backBuf)
522- in return (Left (ParseError err), strm)
524+ in return (Left (ParseError (absPos + n + 1 ) err), strm)
523525
524526 go
525- :: [Array a ]
527+ :: Int
528+ -> [Array a ]
526529 -> (ParserK. Input (Array a )
527530 -> m (ParserK. Step (Array a ) m b ))
528531 -> StreamK m (Array a )
529532 -> m (Either ParseError b , StreamK m (Array a ))
530- go backBuf parserk stream = do
531- let stop = goStop backBuf parserk
532- single a = yieldk backBuf parserk a StreamK. nil
533+ go absPos backBuf parserk stream = do
534+ let stop = goStop absPos backBuf parserk
535+ single a = yieldk absPos backBuf parserk a StreamK. nil
533536 in StreamK. foldStream
534- defState (yieldk backBuf parserk) single stop stream
537+ defState (yieldk absPos backBuf parserk) single stop stream
535538
536539{-# INLINE parse #-}
537540parse ::
0 commit comments