1 | module Text.ILex.Internal.Runner
3 | import Data.Array.Index
5 | import Data.Buffer.Core
6 | import Data.Buffer.Indexed
7 | import Data.ByteString
8 | import Data.Linear.Ref1
10 | import Data.Nat.BSExtra
13 | import Text.ParseError
15 | import Text.ILex.Lexer
16 | import Text.ILex.RExp
21 | offsetToIx : (o : Nat) -> Ix s (o+s)
23 | offsetToIx (S k) = rewrite plusSuccRightSucc k s in IS (offsetToIx k)
30 | -> {auto ix : Ix till n}
31 | -> {auto 0 lte : LTE (ixToNat from) (ixToNat ix)}
34 | writeBS buf from till ref t =
35 | let bv := fromIBuffer buf
36 | bs := BS _ $
substringFromTill (ixToNat from) (ixToNat ix) {lt2 = ixLTE ix} bv
45 | -> {auto ix : Ix till n}
46 | -> {auto 0 lte : LTE (ixToNat from) (ixToNat ix)}
49 | writeBSP (BS 0 _) buf from till ref t = writeBS buf from till ref t
50 | writeBSP prev buf from till ref t =
51 | let bv := fromIBuffer buf
52 | bs := BS _ $
substringFromTill (ixToNat from) (ixToNat ix) {lt2 = ixLTE ix} bv
53 | in write1 ref (prev <+> bs) t