Changeset 10179 for src/Pugs/Prim/Yaml.hs
- Timestamp:
- 05/01/06 15:33:28 (3 years ago)
- svk:copy_cache_prev:
- 13387
- Files:
-
- 1 modified
-
src/Pugs/Prim/Yaml.hs (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Prim/Yaml.hs
r10107 r10179 18 18 evalYaml cv = do 19 19 str <- fromVal cv 20 rv <- liftIO (parseYaml $ encodeUTF8 str) 21 case rv of 22 Left err -> fail $ "YAML Parse Error: " ++ err 23 Right Nothing -> return undef 24 Right (Just node) -> fromYaml node 20 node <- guardIO (parseYaml $ encodeUTF8 str) 21 fromYaml node 25 22 26 23 fromYaml :: YamlNode -> Eval Val 27 fromYaml MkYamlNode{ el=YamlNil} = return VUndef28 fromYaml MkYamlNode{ el=YamlStr str} = return $ VStr $ decodeUTF8 $ unpackBuf str29 fromYaml MkYamlNode{ el=YamlSeq nodes} = do24 fromYaml MkYamlNode{nodeElem=YamlNil} = return VUndef 25 fromYaml MkYamlNode{nodeElem=YamlStr str} = return $ VStr $ decodeUTF8 $ unpackBuf str 26 fromYaml MkYamlNode{nodeElem=YamlSeq nodes} = do 30 27 vals <- mapM fromYaml nodes 31 28 av <- liftSTM $ newTVar $ 32 29 IntMap.fromAscList ([0..] `zip` map lazyScalar vals) 33 30 return $ VRef (arrayRef av) 34 fromYaml MkYamlNode{ el=YamlMap nodes,tag=tag} = do31 fromYaml MkYamlNode{nodeElem=YamlMap nodes, nodeTag=tag} = do 35 32 case tag of 36 33 Nothing -> do … … 69 66 let ?seen = IntSet.empty 70 67 obj <- toYaml v 71 rv <- liftIO . emitYaml $ obj 72 either (fail . ("YAML Emit Error: "++)) 73 (return . VStr . decodeUTF8) rv 68 rv <- guardIO . emitYaml $ obj 69 (return . VStr . decodeUTF8) rv 74 70 75 71 strNode :: String -> YamlNode … … 89 85 toYaml v@(VRef r) = do 90 86 ptr <- liftIO $ addressOf r 91 if IntSet.member ptr ?seen then return nilNode{ anchor = MkYamlReference ptr } else do87 if IntSet.member ptr ?seen then return nilNode{ nodeAnchor = MkYamlReference ptr } else do 92 88 let ?seen = IntSet.insert ptr ?seen 93 89 node <- ifValTypeIsa v "Hash" (hashToYaml r) $ do … … 97 93 VObject _ -> return nodes 98 94 _ -> liftIO $ toYamlNode r 99 return node{ anchor = MkYamlAnchor ptr }95 return node{ nodeAnchor = MkYamlAnchor ptr } 100 96 toYaml (VList nodes) = do 101 97 n <- mapM toYaml nodes
