Changeset 2935
- Timestamp:
- 05/10/05 18:36:20 (4 years ago)
- svk:copy_cache_prev:
- 4498
- Location:
- src/Pugs
- Files:
-
- 1 added
- 1 modified
-
Prim.hs (modified) (5 diffs)
-
Prim/Yaml.hs (added)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Prim.hs
r2932 r2935 22 22 import Text.Printf 23 23 import Data.Array 24 import Data.Yaml.Syck25 24 import qualified RRegex.PCRE as PCRE 26 25 import qualified Data.Set as Set 27 26 import qualified Data.Map as Map 28 27 import qualified Data.Array as Array 29 import qualified Data.IntMap as IntMap30 28 31 29 import Pugs.Prim.Keyed 30 import Pugs.Prim.Yaml 32 31 33 32 op0 :: Ident -> [Val] -> Eval Val … … 219 218 op1 "eval_perl5" = boolIO evalPerl5 220 219 op1 "eval_haskell" = op1EvalHaskell 221 op1 "eval_yaml" = op1EvalYaml220 op1 "eval_yaml" = evalYaml 222 221 op1 "defined" = op1Cast (VBool . defined) 223 222 op1 "last" = \v -> return (VError "cannot last() outside a loop" (Val v)) … … 366 365 return . VRef . MkRef $ ivar 367 366 op1 "pairs" = \v -> do 368 pairs <- op1Pairsv367 pairs <- pairsFromVal v 369 368 return $ VList pairs 370 369 op1 "kv" = \v -> do 371 pairs <- op1Pairsv370 pairs <- pairsFromVal v 372 371 kvs <- forM pairs $ \(VRef ref) -> do 373 372 pair <- readRef ref 374 373 fromVal pair 375 374 return (VList $ concat kvs) 376 op1 "keys" = op1Keys377 op1 "values" = op1Values375 op1 "keys" = keysFromVal 376 op1 "values" = valuesFromVal 378 377 op1 "readline" = op1 "=" 379 378 op1 "=" = \v -> do … … 442 441 _ -> return undef 443 442 444 op1EvalYaml :: Val -> Eval Val445 op1EvalYaml cv = do446 str <- fromVal cv447 rv <- liftIO (parseYaml $ encodeUTF8 str)448 case rv of449 Left err -> fail err450 Right Nothing -> return undef451 Right (Just node) -> fromYaml node452 453 fromYaml :: YamlNode -> Eval Val454 fromYaml (YamlStr str) = return $ VStr (decodeUTF8 str)455 fromYaml (YamlSeq nodes) = do456 vals <- mapM fromYaml nodes457 av <- liftSTM $ newTVar $458 IntMap.fromAscList ([0..] `zip` map lazyScalar vals)459 return $ VRef (arrayRef av)460 fromYaml (YamlMap nodes) = do461 vals <- forM nodes $ \(keyNode, valNode) -> do462 key <- fromVal =<< fromYaml keyNode463 val <- newScalar =<< fromYaml valNode464 return (key, val)465 hv <- liftSTM $ (newTVar (Map.fromList vals) :: STM IHash)466 return $ VRef (hashRef hv)467 443 468 444 op1EvalHaskell :: Val -> Eval Val … … 488 464 y' <- fromVal =<< fromVal' y 489 465 return (f x' y') 490 491 op1Pairs :: Val -> Eval [Val]492 op1Pairs = pairsFromVal493 494 op1Keys :: Val -> Eval Val495 op1Keys = keysFromVal496 497 op1Values :: Val -> Eval Val498 op1Values = valuesFromVal499 466 500 467 op1StrFirst :: (Char -> Char) -> Val -> Eval Val
