Changeset 2935

Show
Ignore:
Timestamp:
05/10/05 18:36:20 (4 years ago)
Author:
bsmith
svk:copy_cache_prev:
4498
Message:

Refactored Yaml handling in Prim into Pugs.Prim.Yaml

Location:
src/Pugs
Files:
1 added
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Prim.hs

    r2932 r2935  
    2222import Text.Printf 
    2323import Data.Array 
    24 import Data.Yaml.Syck 
    2524import qualified RRegex.PCRE as PCRE 
    2625import qualified Data.Set as Set 
    2726import qualified Data.Map as Map 
    2827import qualified Data.Array as Array 
    29 import qualified Data.IntMap as IntMap 
    3028 
    3129import Pugs.Prim.Keyed 
     30import Pugs.Prim.Yaml 
    3231 
    3332op0 :: Ident -> [Val] -> Eval Val 
     
    219218op1 "eval_perl5" = boolIO evalPerl5 
    220219op1 "eval_haskell" = op1EvalHaskell 
    221 op1 "eval_yaml" = op1EvalYaml 
     220op1 "eval_yaml" = evalYaml 
    222221op1 "defined" = op1Cast (VBool . defined) 
    223222op1 "last" = \v -> return (VError "cannot last() outside a loop" (Val v)) 
     
    366365    return . VRef . MkRef $ ivar 
    367366op1 "pairs" = \v -> do 
    368     pairs <- op1Pairs v 
     367    pairs <- pairsFromVal v 
    369368    return $ VList pairs 
    370369op1 "kv" = \v -> do 
    371     pairs <- op1Pairs v 
     370    pairs <- pairsFromVal v 
    372371    kvs   <- forM pairs $ \(VRef ref) -> do 
    373372        pair   <- readRef ref 
    374373        fromVal pair 
    375374    return (VList $ concat kvs) 
    376 op1 "keys" = op1Keys 
    377 op1 "values" = op1Values 
     375op1 "keys" = keysFromVal 
     376op1 "values" = valuesFromVal 
    378377op1 "readline" = op1 "=" 
    379378op1 "=" = \v -> do 
     
    442441        _       -> return undef 
    443442 
    444 op1EvalYaml :: Val -> Eval Val 
    445 op1EvalYaml cv = do 
    446     str     <- fromVal cv 
    447     rv      <- liftIO (parseYaml $ encodeUTF8 str) 
    448     case rv of 
    449         Left err            -> fail err 
    450         Right Nothing       -> return undef 
    451         Right (Just node)   -> fromYaml node 
    452  
    453 fromYaml :: YamlNode -> Eval Val 
    454 fromYaml (YamlStr str) = return $ VStr (decodeUTF8 str) 
    455 fromYaml (YamlSeq nodes) = do 
    456     vals    <- mapM fromYaml nodes 
    457     av      <- liftSTM $ newTVar $ 
    458         IntMap.fromAscList ([0..] `zip` map lazyScalar vals) 
    459     return $ VRef (arrayRef av) 
    460 fromYaml (YamlMap nodes) = do 
    461     vals    <- forM nodes $ \(keyNode, valNode) -> do 
    462         key <- fromVal =<< fromYaml keyNode 
    463         val <- newScalar =<< fromYaml valNode 
    464         return (key, val) 
    465     hv      <- liftSTM $ (newTVar (Map.fromList vals) :: STM IHash) 
    466     return $ VRef (hashRef hv) 
    467443 
    468444op1EvalHaskell :: Val -> Eval Val 
     
    488464    y' <- fromVal =<< fromVal' y 
    489465    return (f x' y') 
    490  
    491 op1Pairs :: Val -> Eval [Val] 
    492 op1Pairs = pairsFromVal 
    493  
    494 op1Keys :: Val -> Eval Val 
    495 op1Keys = keysFromVal 
    496  
    497 op1Values :: Val -> Eval Val 
    498 op1Values = valuesFromVal 
    499466 
    500467op1StrFirst :: (Char -> Char) -> Val -> Eval Val