Changeset 9021 for src/Pugs/Prim/Yaml.hs
- Timestamp:
- 02/15/06 21:26:43 (3 years ago)
- svk:copy_cache_prev:
- 11571
- Files:
-
- 1 modified
-
src/Pugs/Prim/Yaml.hs (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Prim/Yaml.hs
r9005 r9021 13 13 import qualified Data.IntSet as IntSet 14 14 import qualified Data.IntMap as IntMap 15 import qualified Data.FastPackedString as Str 15 16 import Foreign.StablePtr 16 17 import Foreign.Ptr 17 18 import Data.Generics 19 20 type Str = Str.FastString 18 21 19 22 evalYaml :: Val -> Eval Val … … 28 31 fromYaml :: YamlNode -> Eval Val 29 32 fromYaml MkYamlNode{el=YamlNil} = return VUndef 30 fromYaml MkYamlNode{el=YamlStr str} = return $ VStr (decodeUTF8 str)33 fromYaml MkYamlNode{el=YamlStr str} = return $ VStr $ decodeUTF8 $ Str.unpack str 31 34 fromYaml MkYamlNode{el=YamlSeq nodes} = do 32 35 vals <- mapM fromYaml nodes … … 43 46 hv <- liftSTM $ (newTVar (Map.fromList vals) :: STM IHash) 44 47 return $ VRef (hashRef hv) 45 Just ('p':'u':'g':'s':'/':'o':'b':'j':'e':'c':'t':':':typ) -> do 48 Just s | Just (pre, post) <- Str.breakFirst ':' s 49 , pre == Str.pack "pugs/Object" -> do 50 let typ = Str.unpack post 46 51 vals <- forM nodes $ \(keyNode, valNode) -> do 47 52 key <- fromVal =<< fromYaml keyNode … … 49 54 return (key, val) 50 55 return . VObject =<< createObject (mkType typ) vals 51 Just "pugs/Rule" -> do56 Just s | s == Str.pack "pugs/Rule" -> do 52 57 vals <- forM nodes $ \(keyNode, valNode) -> do 53 58 key <- fromVal =<< fromYaml keyNode … … 63 68 adverbs <- Map.lookup "adverbs" spec 64 69 return $ VRule MkRulePGE{rxRule=rule, rxGlobal=global, rxStringify=stringify, rxAdverbs=adverbs} 65 Just x -> error ("can't deserialize: " ++ x)70 Just x -> error ("can't deserialize: " ++ (Str.unpack x)) 66 71 67 72 dumpYaml :: Int -> Val -> Eval Val … … 74 79 75 80 strNode :: String -> YamlNode 76 strNode = mkNode . YamlStr 81 strNode = mkNode . YamlStr . Str.pack 77 82 78 83 addressOf :: a -> IO Int … … 107 112 hash <- fromVal v :: Eval VHash 108 113 attrs <- toYaml $ VRef (hashRef hash) 109 return $ tagNode (Just $ "tag:pugs:object:" ++ showType (objType obj)) attrs114 return $ tagNode (Just $ Str.pack $ "tag:pugs:object:" ++ showType (objType obj)) attrs 110 115 toYaml (VRule MkRulePGE{rxRule=rule, rxGlobal=global, rxStringify=stringify, rxAdverbs=adverbs}) =do 111 116 adverbs' <- toYaml adverbs
