Bryan O'Sullivan avatar Bryan O'Sullivan committed 9d64e67

Rework objectValues to use commaSeparated

This gives us a further 10% performance improvement when parsing
object-heavy inputs, e.g. json-data/twitter100.json (gh-134).

Comments (0)

Files changed (1)

Data/Aeson/Parser/Internal.hs

         a <- str <* skipSpace
         b <- char ':' *> skipSpace *> val
         return (a,b)
-  vals <- ((pair <* skipSpace) `sepBy` (char ',' *> skipSpace)) <* char '}'
-  return (H.fromList vals)
+  H.fromList <$> commaSeparated pair closeCurly
 {-# INLINE objectValues #-}
 
 array_ :: Parser Value
     !n <- rational
     return (Number n)
 
-backslash, closeSquare, comma, doubleQuote :: Word8
+backslash, closeCurly, closeSquare, comma, doubleQuote :: Word8
 backslash = 92
+closeCurly = 125
 closeSquare = 93
 comma = 44
 doubleQuote = 34
 {-# INLINE backslash #-}
+{-# INLINE closeCurly #-}
 {-# INLINE closeSquare #-}
 {-# INLINE comma #-}
 {-# INLINE doubleQuote #-}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.