Skip to content

Commit

Permalink
* 0.51
Browse files Browse the repository at this point in the history
  • Loading branch information
audreyt committed May 6, 2014
1 parent 26320f2 commit 92d927b
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 18 deletions.
6 changes: 6 additions & 0 deletions Changes
@@ -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.
Expand Down
25 changes: 14 additions & 11 deletions Data/Yaml/Syck.hsc
@@ -1,4 +1,4 @@
#include <syck.h>
#include "syck.h"

module Data.Yaml.Syck (
parseYaml, emitYaml,
Expand All @@ -22,7 +22,7 @@ import Foreign.Marshal.Utils
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)
Expand Down Expand Up @@ -123,7 +123,7 @@ emitYamlBytes node = do
#{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)
Expand Down Expand Up @@ -234,7 +234,7 @@ parseYamlCStr :: CString -> IO YamlNode
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)
Expand All @@ -248,7 +248,8 @@ parseYamlCStr cstr = do
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
Expand All @@ -274,11 +275,13 @@ nodeCallback badancs parser syckNode = mdo
-- 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
Expand All @@ -303,7 +306,7 @@ errorCallback err parser cstr = do
, ", 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
Expand Down
19 changes: 12 additions & 7 deletions HsSyck.cabal
@@ -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
Expand All @@ -16,10 +16,10 @@ License: BSD3
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, GHC==7.0.4
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

Expand All @@ -29,13 +29,18 @@ Flag SybInBase

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

ghc-options: -funbox-strict-fields

extensions: ForeignFunctionInterface, MagicHash,
DeriveDataTypeable, TypeSynonymInstances, PatternGuards, RecursiveDo
extra-libraries: syck
c-sources: syck-extras.c

c-sources: syck/bytecode.c syck/emitter.c syck/gram.c syck/handler.c
syck/implicit.c syck/node.c syck/syck.c syck/syck_st.c
syck/token.c syck/yaml2byte.c
include-dirs: syck

0 comments on commit 92d927b

Please sign in to comment.