on master help sign in
Inline commaSeparated
674bd71Bryan O'Sullivan
Data/Aeson/Parser/Internal.hs+9−14
@@ -40,7 +40,7 @@ import Data.Text (Text)
40import Data.Text.Encoding (decodeUtf8')
40import Data.Text.Encoding (decodeUtf8')
41import Data.Text.Internal.Encoding.Utf8 (ord2, ord3, ord4)
41import Data.Text.Internal.Encoding.Utf8 (ord2, ord3, ord4)
42import Data.Text.Internal.Unsafe.Char (ord)
42import Data.Text.Internal.Unsafe.Char (ord)
43−import Data.Vector as Vector (Vector, fromList)
43+import Data.Vector as Vector (Vector, empty, fromList)
44import Data.Word (Word8)
44import Data.Word (Word8)
45import Foreign.ForeignPtr (withForeignPtr)
45import Foreign.ForeignPtr (withForeignPtr)
46import Foreign.Ptr (minusPtr)
46import Foreign.Ptr (minusPtr)
@@ -136,25 +136,20 @@ array_' = {-# SCC "array_'" #-} do
136 !vals <- arrayValues value'
136 !vals <- arrayValues value'
137 return (Array vals)
137 return (Array vals)
138
138
139−commaSeparated :: Parser a -> Word8 -> Parser [a]
139+arrayValues :: Parser Value -> Parser (Vector Value)
140−commaSeparated item endByte = do
140+arrayValues val = do
141+ skipSpace
141 w <- A.peekWord8'
142 w <- A.peekWord8'
142− if w == endByte
143+ if w == CLOSE_SQUARE
143− then A.anyWord8 >> return []
144+ then A.anyWord8 >> return Vector.empty
144− else loop
145+ else Vector.fromList <$> loop
145 where
146 where
146 loop = do
147 loop = do
147− v <- item <* skipSpace
148+ v <- val <* skipSpace
148− ch <- A.satisfy $ \w -> w == COMMA || w == endByte
149+ ch <- A.satisfy $ \w -> w == COMMA || w == CLOSE_SQUARE
149 if ch == COMMA
150 if ch == COMMA
150 then skipSpace >> (v:) <$> loop
151 then skipSpace >> (v:) <$> loop
151 else return [v]
152 else return [v]
152−{-# INLINE commaSeparated #-}
153−
154−arrayValues :: Parser Value -> Parser (Vector Value)
155−arrayValues val = do
156− skipSpace
157− Vector.fromList <$> commaSeparated val CLOSE_SQUARE
158{-# INLINE arrayValues #-}
153{-# INLINE arrayValues #-}
159
154
160-- | Parse any JSON value. You should usually 'json' in preference to
155-- | Parse any JSON value. You should usually 'json' in preference to