summaryrefslogtreecommitdiff
path: root/transfer/run_core.hs
blob: 0bb7f1aa878baccfc59dbcc69fd5f54f4d09baa4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import Transfer.InterpreterAPI
import Transfer.Interpreter (prEnv)

import Control.Monad (when)
import Data.List (partition, isPrefixOf)
import System.Environment (getArgs)
import System.IO (isEOF)

interpretLoop :: Env -> IO ()
interpretLoop env = 
    do
    eof <- isEOF
    if eof
       then return ()
       else do
            line <- getLine
            r <- evaluateString env line
            putStrLn r
            interpretLoop env

runMain :: Env -> IO ()
runMain env = do
              r <- evaluateString env "main"
              putStrLn r

main :: IO ()
main = do args <- getArgs
          let (flags,files) = partition ("-" `isPrefixOf`) args
          env <- case files of
            [f] -> loadFile f
            _   -> fail "Usage: run_core [-i] <file>"
          when ("-v" `elem` flags) $ do
                                     putStrLn "Top-level environment:"
                                     putStrLn (prEnv env)
          if "-i" `elem` flags 
            then interpretLoop env
            else runMain env