Changeset 9021 for src/Pugs/Prim/Yaml.hs

Show
Ignore:
Timestamp:
02/15/06 21:26:43 (3 years ago)
Author:
gaal
svk:copy_cache_prev:
11571
Message:

* change pugs' YAML emission client code to use audreyt++'s speedupped FastString?

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Prim/Yaml.hs

    r9005 r9021  
    1313import qualified Data.IntSet as IntSet 
    1414import qualified Data.IntMap as IntMap 
     15import qualified Data.FastPackedString as Str 
    1516import Foreign.StablePtr 
    1617import Foreign.Ptr 
    1718import Data.Generics 
     19 
     20type Str = Str.FastString 
    1821 
    1922evalYaml :: Val -> Eval Val 
     
    2831fromYaml :: YamlNode -> Eval Val 
    2932fromYaml MkYamlNode{el=YamlNil}       = return VUndef 
    30 fromYaml MkYamlNode{el=YamlStr str}   = return $ VStr (decodeUTF8 str) 
     33fromYaml MkYamlNode{el=YamlStr str}   = return $ VStr $ decodeUTF8 $ Str.unpack str 
    3134fromYaml MkYamlNode{el=YamlSeq nodes} = do 
    3235    vals    <- mapM fromYaml nodes 
     
    4346            hv      <- liftSTM $ (newTVar (Map.fromList vals) :: STM IHash) 
    4447            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 
    4651            vals    <- forM nodes $ \(keyNode, valNode) -> do 
    4752                key <- fromVal =<< fromYaml keyNode 
     
    4954                return (key, val) 
    5055            return . VObject =<< createObject (mkType typ) vals 
    51         Just "pugs/Rule" -> do 
     56        Just s | s == Str.pack "pugs/Rule" -> do 
    5257            vals    <- forM nodes $ \(keyNode, valNode) -> do 
    5358                key <- fromVal =<< fromYaml keyNode 
     
    6368            adverbs <- Map.lookup "adverbs" spec 
    6469            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)) 
    6671 
    6772dumpYaml :: Int -> Val -> Eval Val 
     
    7479 
    7580strNode :: String -> YamlNode 
    76 strNode = mkNode . YamlStr 
     81strNode = mkNode . YamlStr . Str.pack 
    7782 
    7883addressOf :: a -> IO Int 
     
    107112    hash    <- fromVal v :: Eval VHash 
    108113    attrs   <- toYaml $ VRef (hashRef hash) 
    109     return $ tagNode (Just $ "tag:pugs:object:" ++ showType (objType obj)) attrs 
     114    return $ tagNode (Just $ Str.pack $ "tag:pugs:object:" ++ showType (objType obj)) attrs 
    110115toYaml (VRule MkRulePGE{rxRule=rule, rxGlobal=global, rxStringify=stringify, rxAdverbs=adverbs}) =do 
    111116    adverbs' <- toYaml adverbs