sync runplugs from lambdabot
This commit is contained in:
parent
27c8624308
commit
08e0483f75
@ -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
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user