sync runplugs from lambdabot

This commit is contained in:
dons 2005-12-25 23:11:57 +00:00
parent 27c8624308
commit 08e0483f75

View File

@ -9,9 +9,11 @@
-- --
import System.Eval.Haskell (unsafeEval) import System.Eval.Haskell (unsafeEval)
import Data.Char (chr)
import Data.Maybe (isJust, fromJust) import Data.Maybe (isJust, fromJust)
import Control.Monad (when) import Control.Monad
import System.Random
import System.Exit (exitWith, ExitCode(ExitSuccess)) import System.Exit (exitWith, ExitCode(ExitSuccess))
import System.IO (getContents, putStrLn) import System.IO (getContents, putStrLn)
import System.Posix.Resource (setResourceLimit, import System.Posix.Resource (setResourceLimit,
@ -19,13 +21,17 @@ import System.Posix.Resource (setResourceLimit,
ResourceLimits(ResourceLimits), ResourceLimits(ResourceLimits),
ResourceLimit(ResourceLimit)) ResourceLimit(ResourceLimit))
import qualified Control.Exception (catch)
rlimit = ResourceLimit 3 rlimit = ResourceLimit 3
context = prehier ++ datas ++ qualifieds ++ controls context = prehier ++ datas ++ qualifieds ++ controls
prehier = ["Char", "List", "Maybe", "Numeric", "Random" ] prehier = ["Char", "List", "Maybe", "Numeric", "Random" ]
qualifieds = ["qualified Data.Map as M", "qualified Data.Set as S"] qualifieds = ["qualified Data.Map as M"
,"qualified Data.Set as S"
,"qualified Data.IntSet as I"]
datas = map ("Data." ++) [ datas = map ("Data." ++) [
"Bits", "Bool", "Char", "Dynamic", "Either", "Bits", "Bool", "Char", "Dynamic", "Either",
@ -37,9 +43,15 @@ controls = map ("Control." ++) ["Monad", "Monad.Reader", "Monad.Fix", "Arrow"]
main = do main = do
setResourceLimit ResourceCPUTime (ResourceLimits rlimit rlimit) setResourceLimit ResourceCPUTime (ResourceLimits rlimit rlimit)
s <- getContents s <- getLine
when (not . null $ s) $ do when (not . null $ s) $ do
s <- unsafeEval ("(take 2048 (show ("++s++")))") context x <- sequence (take 3 (repeat $ getStdRandom (randomR (97,122)) >>= return . chr))
when (isJust s) (putStrLn (fromJust s)) s <- unsafeEval ("let { "++x++
" = \n# 1 \"<irc>\"\n"++s++
"\n} in take 2048 (show "++x++
")") context
when (isJust s) $ Control.Exception.catch
(putStrLn $ fromJust s)
(\e -> putStrLn $ "Exception: " ++ show e )
exitWith ExitSuccess exitWith ExitSuccess