summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2008-06-26 21:01:51 +0000
committeraarne <aarne@cs.chalmers.se>2008-06-26 21:01:51 +0000
commit33eb6d899fef48f2d38a92bc0fab66ff585be553 (patch)
tree2e802e73a69f749fc03e45bb1411fdf03eb2ba27 /src
parentba639910078845c37641ccb2315095b4438cf0c8 (diff)
moved interruption to GFI level to capture all commands
Diffstat (limited to 'src')
-rw-r--r--src/GF/Command/Interpreter.hs3
-rw-r--r--src/GFI.hs6
2 files changed, 8 insertions, 1 deletions
diff --git a/src/GF/Command/Interpreter.hs b/src/GF/Command/Interpreter.hs
index 2762875ec..db4192001 100644
--- a/src/GF/Command/Interpreter.hs
+++ b/src/GF/Command/Interpreter.hs
@@ -38,10 +38,13 @@ interpretCommandLine :: (String -> String) -> CommandEnv -> String -> IO ()
interpretCommandLine enc env line =
case readCommandLine line of
Just [] -> return ()
+ Just pipes -> mapM_ (interpretPipe enc env) pipes
+{-
Just pipes -> do res <- runInterruptibly (mapM_ (interpretPipe enc env) pipes)
case res of
Left ex -> putStrLnFlush $ enc (show ex)
Right x -> return x
+-}
Nothing -> putStrLnFlush "command not parsed"
interpretPipe enc env cs = do
diff --git a/src/GFI.hs b/src/GFI.hs
index 75ffa22d8..014fa327e 100644
--- a/src/GFI.hs
+++ b/src/GFI.hs
@@ -26,6 +26,8 @@ import System.Cmd
import System.CPUTime
import Control.Exception
import Data.Version
+import GF.System.Signal
+
import Paths_gf
@@ -53,7 +55,7 @@ loop opts gfenv0 = do
pwords = case words s of
w:ws -> getCommandOp w :ws
ws -> ws
- case pwords of
+ r <- runInterruptibly $ case pwords of
-- special commands, requiring source grammar in env
"!":ws -> do
system $ unwords ws
@@ -106,6 +108,8 @@ loop opts gfenv0 = do
_ -> do
interpretCommandLine enc env s
loopNewCPU gfenv
+ gfenv' <- return $ either (const gfenv) id r
+ loopNewCPU gfenv'
importInEnv :: GFEnv -> Options -> [FilePath] -> IO GFEnv
importInEnv gfenv opts files