Changeset 2433 for src/Main.hs
- Timestamp:
- 04/28/05 13:59:35 (4 years ago)
- svk:copy_cache_prev:
- 3914
- Files:
-
- 1 modified
-
src/Main.hs (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Main.hs
r2409 r2433 93 93 dumpGlob :: String -> IO () 94 94 dumpGlob = (doParseWith $ \env _ -> do 95 glob <- readIORef$ envGlobal env95 glob <- liftSTM $ readTVar $ envGlobal env 96 96 print $ userDefined glob) "-" 97 97 … … 105 105 repLoop = do 106 106 initializeShell 107 env <- tabulaRasa >>= newIORef 108 modifyIORef env $ \e -> e{ envDebug = Nothing } 107 env <- liftSTM . newTVar . (\e -> e{ envDebug = Nothing }) =<< tabulaRasa 109 108 fix $ \loop -> do 110 109 command <- getCommand … … 115 114 CmdParse prog -> doParse "<interactive>" prog >> loop 116 115 CmdHelp -> printInteractiveHelp >> loop 117 CmdReset -> tabulaRasa >>= writeIORef env>> loop116 CmdReset -> tabulaRasa >>= (liftSTM . writeTVar env) >> loop 118 117 119 118 tabulaRasa :: IO Env … … 131 130 doCompile :: [Char] -> FilePath -> String -> IO () 132 131 doCompile backend = doParseWith $ \env _ -> do 133 glob <- readIORef $ envGlobal env 134 globRef <- newIORef $ userDefined glob 135 str <- compile backend env{ envGlobal = globRef } 132 globRef <- liftSTM $ do 133 glob <- readTVar $ envGlobal env 134 newTVar $ userDefined glob 135 str <- compile backend env{ envGlobal = globRef } 136 136 writeFile "dump.ast" str 137 137 … … 154 154 exp -> putStrLn $ pretty exp 155 155 156 doLoad :: IORefEnv -> String -> IO ()156 doLoad :: TVar Env -> String -> IO () 157 157 doLoad env fn = do 158 158 runImperatively env (evaluate exp) … … 161 161 exp = App "&require" [] [Val $ VStr fn] 162 162 163 doRunSingle :: IORefEnv -> RunOptions -> String -> IO ()163 doRunSingle :: TVar Env -> RunOptions -> String -> IO () 164 164 doRunSingle menv opts prog = (`catch` handler) $ do 165 165 exp <- makeProper =<< parse … … 168 168 result <- case rv of 169 169 VControl (ControlEnv env') -> do 170 glob <- readIORef$ envGlobal env'170 glob <- liftSTM . readTVar $ envGlobal env' 171 171 ref <- findSymRef "$*_" glob 172 172 val <- runEval env' $ readRef ref 173 writeIORefmenv env'173 liftSTM $ writeTVar menv env' 174 174 return val 175 175 _ -> return rv … … 177 177 where 178 178 parse = do 179 env <- readIORefmenv179 env <- liftSTM $ readTVar menv 180 180 runRule env (return . envBody) ruleProgram "<interactive>" (decodeUTF8 prog) 181 181 theEnv = do 182 182 ref <- if runOptSeparately opts 183 then tabulaRasa >>= newIORef183 then (liftSTM . newTVar) =<< tabulaRasa 184 184 else return menv 185 185 debug <- if runOptDebug opts 186 then liftM Just (newIORefMap.empty)186 then fmap Just (liftSTM $ newTVar Map.empty) 187 187 else return Nothing 188 modifyIORefref $ \e -> e{ envDebug = debug }188 liftSTM $ modifyTVar ref $ \e -> e{ envDebug = debug } 189 189 return ref 190 190 printer env = if runOptShowPretty opts … … 206 206 putStrLn $ ioeGetErrorString err 207 207 208 runImperatively :: IORefEnv -> Eval Val -> IO Val208 runImperatively :: TVar Env -> Eval Val -> IO Val 209 209 runImperatively menv eval = do 210 env <- readIORefmenv210 env <- liftSTM $ readTVar menv 211 211 runEval env $ do 212 212 val <- eval 213 213 newEnv <- ask 214 lift IO $ writeIORefmenv newEnv214 liftSTM $ writeTVar menv newEnv 215 215 return val 216 216
