git.iko.soy/typeable/attoparsec
on master help sign in
Fix an incorrect indexing bug in Text.string
e3791b4Bryan O'Sullivan
Data/Attoparsec/Text/Buffer.hs+6
@@ -28,6 +28,7 @@ module Data.Attoparsec.Text.Buffer
28 Buffer
28 Buffer
29 , buffer
29 , buffer
30 , unbuffer
30 , unbuffer
31+ , unbufferAt
31 , length
32 , length
32 , pappend
33 , pappend
33 , iter
34 , iter
@@ -74,6 +75,11 @@ buffer (Text arr off len) = Buf arr off len len 0
74unbuffer :: Buffer -> Text
75unbuffer :: Buffer -> Text
75unbuffer (Buf arr off len _ _) = Text arr off len
76unbuffer (Buf arr off len _ _) = Text arr off len
76
77
78+unbufferAt :: Int -> Buffer -> Text
79+unbufferAt s (Buf arr off len _ _) =
80+ assert (s >= 0 && s <= len) $
81+ Text arr (off+s) (len-s)
82+
77instance Monoid Buffer where
83instance Monoid Buffer where
78 mempty = Buf A.empty 0 0 0 0
84 mempty = Buf A.empty 0 0 0 0
79
85
Data/Attoparsec/Text/Internal.hs+1−1
@@ -169,7 +169,7 @@ string_ :: (forall r. Text -> Text -> Buffer -> Pos -> More
169 -> Text -> Parser Text
169 -> Text -> Parser Text
170string_ suspended f s0 = T.Parser $ \t pos more lose succ ->
170string_ suspended f s0 = T.Parser $ \t pos more lose succ ->
171 let s = f s0
171 let s = f s0
172− ft = f (Buf.unbuffer t)
172+ ft = f (Buf.unbufferAt (fromPos pos) t)
173 in case T.commonPrefixes s ft of
173 in case T.commonPrefixes s ft of
174 Nothing
174 Nothing
175 | T.null s -> succ t pos more T.empty
175 | T.null s -> succ t pos more T.empty