Changeset 3740 for src/Pugs/Prim.hs

Show
Ignore:
Timestamp:
05/23/05 16:57:32 (4 years ago)
Author:
autrijus
svk:copy_cache_prev:
5329
Message:

* move enterEvalContext to Monads.hs so Prim can use it.
* introduce the maybeM abstraction that lifts fmapM into monads.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Prim.hs

    r3739 r3740  
    2727import Pugs.AST 
    2828import Pugs.Types 
     29import Pugs.Monads 
    2930import Pugs.Pretty 
    3031import Text.Printf 
     
    178179        Just subVal -> do 
    179180            sub <- fromVal subVal 
    180             evl <- asks envEval 
    181181            sorted <- (`sortByM` valList) $ \v1 v2 -> do 
    182                 rv  <- local (\e -> e{ envContext = cxtItem "Int" }) $ do 
    183                     evl (App (Val sub) [Val v1, Val v2] []) 
     182                rv  <- enterEvalContext (cxtItem "Int") $ App (Val sub) [Val v1, Val v2] [] 
    184183                int <- fromVal rv 
    185184                return (int <= (0 :: Int)) 
     
    406405    tid     <- liftIO . (if rtsSupportsBoundThreads then forkOS else forkIO) $ do 
    407406        val <- runEvalIO env $ do 
    408             evl <- asks envEval 
    409             local (\e -> e{ envContext = CxtVoid }) $ do 
    410                 evl (App (Val code) [] []) 
     407            enterEvalContext CxtVoid $ App (Val code) [] [] 
    411408        liftSTM $ tryPutTMVar lock val 
    412409        return () 
     
    827824    writeIVar (IHash attrs) named 
    828825    uniq    <- liftIO $ newUnique 
    829     return . VObject $ MkObject{ objType = typ, objAttrs = attrs, objId = uniq } 
     826    let obj = VObject $ MkObject{ objType = typ, objAttrs = attrs, objId = uniq } 
     827    -- Now start calling BUILD for each of parent classes (if defined) 
     828 
     829    return obj 
    830830op3 other = \_ _ _ -> fail ("Unimplemented 3-ary op: " ++ other) 
    831831 
     
    880880        = doHyper =<< readRef x' 
    881881        | otherwise 
    882         = do 
    883             evl <- asks envEval 
    884             local (\e -> e{ envContext = cxtItemAny }) $ do 
    885                 evl (App (Val $ VCode sub) [Val x] []) 
     882        = enterEvalContext cxtItemAny $ App (Val $ VCode sub) [Val x] [] 
    886883    hyperList []     = return [] 
    887884    hyperList (x:xs) = do 
     
    910907    = fail "Hyper OP only works on lists" 
    911908    where 
    912     doHyper x y = do 
    913         evl <- asks envEval 
    914         local (\e -> e{ envContext = cxtItemAny }) $ do 
    915             evl (App (Val $ VCode sub) [Val x, Val y] []) 
     909    doHyper x y = enterEvalContext cxtItemAny $ App (Val $ VCode sub) [Val x, Val y] [] 
    916910    hyperLists [] [] = return [] 
    917911    hyperLists xs [] = return xs