HsSyck 0.50 → 0.51
raw patch · 3 files changed
+24/−15 lines, 3 filesdep +hashtables
Dependencies added: hashtables
Files
- Changes +6/−0
- Data/Yaml/Syck.hsc +13/−10
- HsSyck.cabal +5/−5
Changes view
@@ -1,3 +1,9 @@+[Changes for 0.51 - 2013-11-08]++* Port to hashtables package for compatibility with GHC 7.8.+* Switch internal integer hash algorithm to Cuckoo hashing.+ Reported by: Henk-Jan van Tuyl+ [Changes for 0.50 - 2011-03-19] * parseYaml and emitYaml now work with Unicode Strings.
Data/Yaml/Syck.hsc view
@@ -22,7 +22,7 @@ import Foreign.Storable import System.IO.Unsafe import GHC.Ptr (Ptr(..))-import qualified Data.HashTable as Hash+import qualified Data.HashTable.IO as Hash import qualified Data.ByteString.Char8 as Buf import Data.ByteString.UTF8 (fromString, toString) import Data.ByteString.Char8 (useAsCStringLen, useAsCString)@@ -123,7 +123,7 @@ #{poke SyckEmitter, style} emitter scalarFold #{poke SyckEmitter, anchor_format} emitter (Ptr "%d"## :: CString) - marks <- Hash.new (==) (Hash.hashInt)+ marks <- Hash.new let freeze = freezeNode marks syck_emitter_handler emitter =<< mkEmitterCallback (emitterCallback freeze)@@ -234,7 +234,7 @@ parseYamlCStr cstr = do bracket syck_new_parser syck_free_parser $ \parser -> do err <- newIORef Nothing- badancs <- Hash.new (==) Hash.hashInt+ badancs <- Hash.new syck_parser_str_auto parser cstr nullFunPtr syck_parser_handler parser =<< mkNodeCallback (nodeCallback badancs) syck_parser_error_handler parser =<< mkErrorCallback (errorCallback err)@@ -248,7 +248,8 @@ Nothing -> return nilNode Just e -> fail e -type BadAnchorTable = Hash.HashTable Int YamlNode+type HashTable k v = Hash.CuckooHashTable k v+type BadAnchorTable = HashTable Int YamlNode nodeCallback :: BadAnchorTable -> SyckParser -> SyckNode -> IO SYMID@@ -274,11 +275,13 @@ -- Do something here about circular refs. case nodeId :: SYMID of 0 -> return False- _ -> alloca $ \origPtr -> do- syck_lookup_sym parser nodeId origPtr- ptr <- peek origPtr- -- print ("bad anchor handled", nodeId, ptr)- Hash.update badancs (ptr `minusPtr` nullPtr) node+ _ -> do+ alloca $ \origPtr -> do+ syck_lookup_sym parser nodeId origPtr+ ptr <- peek origPtr+ -- print ("bad anchor handled", nodeId, ptr)+ Hash.insert badancs (ptr `minusPtr` nullPtr) node+ return True symId <- fmap fromIntegral (syck_add_sym parser nodePtr) return symId@@ -303,7 +306,7 @@ , ", column ", show (cursor - lineptr) ] -freezeNode :: Hash.HashTable Int (Ptr a) -> YamlNode -> IO (Ptr a)+freezeNode :: HashTable Int (Ptr a) -> YamlNode -> IO (Ptr a) freezeNode nodes MkNode{ n_anchor = AReference n } = do rv <- Hash.lookup nodes n case rv of
HsSyck.cabal view
@@ -1,5 +1,5 @@ Name: HsSyck-Version: 0.50+Version: 0.51 Cabal-version: >= 1.2.3 Category: Text, Pugs Synopsis: Fast, lightweight YAML loader and dumper@@ -16,10 +16,10 @@ License-File: LICENSE Author: Audrey Tang Maintainer: audreyt@audreyt.org-Copyright: Audrey Tang, Gaal Yahas, 2005, 2006, 2007, 2008, 2009+Copyright: Audrey Tang, Gaal Yahas, 2005, 2006, 2007, 2008, 2009, 2013 Build-Type: Simple-Tested-With: GHC==6.8.2, GHC==6.8.3, GHC==6.10.1, GHC==6.10.2+Tested-With: GHC==6.8.2, GHC==6.8.3, GHC==6.10.1, GHC==6.10.2, GHC==7.6.3 Data-Files: Changes Extra-Source-Files: syck/syck.h syck/syck_st.h syck/gram.h syck/yamlbyte.h @@ -29,9 +29,9 @@ Library if flag(SybInBase)- Build-Depends: base>=3 && <4, bytestring>=0.9.0.1, utf8-string>=0.3+ Build-Depends: base>=3 && <4, bytestring>=0.9.0.1, utf8-string>=0.3, hashtables else- Build-Depends: base>=4 && <6, bytestring>=0.9.0.1, syb, utf8-string>=0.3+ Build-Depends: base>=4 && <6, bytestring>=0.9.0.1, syb, utf8-string>=0.3, hashtables exposed-modules: Data.Yaml.Syck