Changeset 2433 for src/Main.hs

Show
Ignore:
Timestamp:
04/28/05 13:59:35 (4 years ago)
Author:
autrijus
svk:copy_cache_prev:
3914
Message:

* STMification: All our IORefs are now TVars.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Main.hs

    r2409 r2433  
    9393dumpGlob :: String -> IO () 
    9494dumpGlob = (doParseWith $ \env _ -> do 
    95     glob <- readIORef $ envGlobal env 
     95    glob <- liftSTM $ readTVar $ envGlobal env 
    9696    print $ userDefined glob) "-" 
    9797 
     
    105105repLoop = do 
    106106    initializeShell 
    107     env <- tabulaRasa >>= newIORef 
    108     modifyIORef env $ \e -> e{ envDebug = Nothing } 
     107    env <- liftSTM . newTVar . (\e -> e{ envDebug = Nothing }) =<< tabulaRasa 
    109108    fix $ \loop -> do 
    110109        command <- getCommand 
     
    115114            CmdParse prog     -> doParse "<interactive>" prog >> loop 
    116115            CmdHelp           -> printInteractiveHelp >> loop 
    117             CmdReset          -> tabulaRasa >>= writeIORef env >> loop 
     116            CmdReset          -> tabulaRasa >>= (liftSTM . writeTVar env) >> loop 
    118117 
    119118tabulaRasa :: IO Env 
     
    131130doCompile :: [Char] -> FilePath -> String -> IO () 
    132131doCompile 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 } 
    136136    writeFile "dump.ast" str 
    137137 
     
    154154        exp -> putStrLn $ pretty exp 
    155155 
    156 doLoad :: IORef Env -> String -> IO () 
     156doLoad :: TVar Env -> String -> IO () 
    157157doLoad env fn = do 
    158158    runImperatively env (evaluate exp) 
     
    161161    exp = App "&require" [] [Val $ VStr fn] 
    162162 
    163 doRunSingle :: IORef Env -> RunOptions -> String -> IO () 
     163doRunSingle :: TVar Env -> RunOptions -> String -> IO () 
    164164doRunSingle menv opts prog = (`catch` handler) $ do 
    165165    exp     <- makeProper =<< parse 
     
    168168    result  <- case rv of 
    169169        VControl (ControlEnv env') -> do 
    170             glob    <- readIORef $ envGlobal env' 
     170            glob    <- liftSTM . readTVar $ envGlobal env' 
    171171            ref     <- findSymRef "$*_" glob 
    172172            val     <- runEval env' $ readRef ref 
    173             writeIORef menv env' 
     173            liftSTM $ writeTVar menv env' 
    174174            return val 
    175175        _ -> return rv 
     
    177177    where 
    178178    parse = do 
    179         env <- readIORef menv 
     179        env <- liftSTM $ readTVar menv 
    180180        runRule env (return . envBody) ruleProgram "<interactive>" (decodeUTF8 prog) 
    181181    theEnv = do 
    182182        ref <- if runOptSeparately opts 
    183                 then tabulaRasa >>= newIORef 
     183                then (liftSTM . newTVar) =<< tabulaRasa 
    184184                else return menv 
    185185        debug <- if runOptDebug opts 
    186                 then liftM Just (newIORef Map.empty) 
     186                then fmap Just (liftSTM $ newTVar Map.empty) 
    187187                else return Nothing 
    188         modifyIORef ref $ \e -> e{ envDebug = debug } 
     188        liftSTM $ modifyTVar ref $ \e -> e{ envDebug = debug } 
    189189        return ref 
    190190    printer env = if runOptShowPretty opts 
     
    206206        putStrLn $ ioeGetErrorString err 
    207207 
    208 runImperatively :: IORef Env -> Eval Val -> IO Val 
     208runImperatively :: TVar Env -> Eval Val -> IO Val 
    209209runImperatively menv eval = do 
    210     env <- readIORef menv 
     210    env <- liftSTM $ readTVar menv 
    211211    runEval env $ do 
    212212        val <- eval 
    213213        newEnv <- ask 
    214         liftIO $ writeIORef menv newEnv 
     214        liftSTM $ writeTVar menv newEnv 
    215215        return val 
    216216