Changeset 8607
- Timestamp:
- 01/08/06 15:26:21 (3 years ago)
- Location:
- src
- Files:
-
- 2 modified
-
Data/Yaml/Syck.hsc (modified) (3 diffs)
-
Pugs/Prim/Yaml.hs (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/Data/Yaml/Syck.hsc
r8606 r8607 193 193 deRefStablePtr (castPtrToStablePtr ptr) 194 194 195 syckNodeTag :: SyckNode -> IO (Maybe String) 196 syckNodeTag syckNode = do 197 tag <- #{peek SyckNode, type_id} syckNode 198 if (tag == nullPtr) then (return Nothing) else do 199 tag' <- peekCString tag 200 return $ Just tag' 201 195 202 syckNodeKind :: SyckNode -> IO SyckKind 196 203 syckNodeKind syckNode = fmap toEnum $ #{peek SyckNode, kind} syckNode … … 203 210 parseNode :: SyckKind -> SyckParser -> SyckNode -> CLong -> IO YamlNode 204 211 parseNode SyckMap parser syckNode len = do 212 tag <- syckNodeTag syckNode 205 213 pairs <- (`mapM` [0..len-1]) $ \idx -> do 206 214 keyId <- syck_map_read syckNode 0 idx … … 209 217 val <- readNode parser valId 210 218 return (key, val) 211 return $ emptyYamlNode{ el = YamlMap pairs }219 return $ emptyYamlNode{ el = YamlMap pairs, tag = tag} 212 220 213 221 parseNode SyckSeq parser syckNode len = do 222 tag <- syckNodeTag syckNode 214 223 nodes <- (`mapM` [0..len-1]) $ \idx -> do 215 224 symId <- syck_seq_read syckNode idx 216 225 readNode parser symId 217 return $ emptyYamlNode{ el = YamlSeq nodes }226 return $ emptyYamlNode{ el = YamlSeq nodes, tag = tag } 218 227 219 228 parseNode SyckStr _ syckNode len = do 220 cstr <- syck_str_read syckNode 221 str <- peekCStringLen (cstr, fromEnum len) 222 return $ emptyYamlNode{ el = YamlStr str } 229 tag <- syckNodeTag syckNode 230 cstr <- syck_str_read syckNode 231 str <- peekCStringLen (cstr, fromEnum len) 232 return $ emptyYamlNode{ el = YamlStr str, tag = tag } 223 233 224 234 foreign import ccall "wrapper" -
src/Pugs/Prim/Yaml.hs
r8606 r8607 30 30 IntMap.fromAscList ([0..] `zip` map lazyScalar vals) 31 31 return $ VRef (arrayRef av) 32 fromYaml MkYamlNode{el=YamlMap nodes} = do 33 vals <- forM nodes $ \(keyNode, valNode) -> do 34 key <- fromVal =<< fromYaml keyNode 35 val <- newScalar =<< fromYaml valNode 36 return (key, val) 37 hv <- liftSTM $ (newTVar (Map.fromList vals) :: STM IHash) 38 -- XXX: if YamlMap (Just "!perl/":type) nodes then mkObject etc. 39 return $ VRef (hashRef hv) 32 fromYaml MkYamlNode{el=YamlMap nodes,tag=tag} = do 33 case tag of 34 Nothing -> do 35 vals <- forM nodes $ \(keyNode, valNode) -> do 36 key <- fromVal =<< fromYaml keyNode 37 val <- newScalar =<< fromYaml valNode 38 return (key, val) 39 hv <- liftSTM $ (newTVar (Map.fromList vals) :: STM IHash) 40 return $ VRef (hashRef hv) 41 Just ('p':'u':'g':'s':'/':'o':'b':'j':'e':'c':'t':':':typ) -> do 42 vals <- forM nodes $ \(keyNode, valNode) -> do 43 key <- fromVal =<< fromYaml keyNode 44 val <- fromYaml valNode 45 return (key, val) 46 return . VObject =<< createObject (mkType typ) vals 47 Just x -> error ("can't deserialize: " ++ x) 40 48 41 49 dumpYaml :: Int -> Val -> Eval Val
