projects
/
ghc-hetmet.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
6e1e374
)
Add failure to vectorisation monad
author
Roman Leshchinskiy
<rl@cse.unsw.edu.au>
Mon, 9 Jul 2007 04:04:06 +0000
(
04:04
+0000)
committer
Roman Leshchinskiy
<rl@cse.unsw.edu.au>
Mon, 9 Jul 2007 04:04:06 +0000
(
04:04
+0000)
compiler/vectorise/Vectorise.hs
patch
|
blob
|
history
diff --git
a/compiler/vectorise/Vectorise.hs
b/compiler/vectorise/Vectorise.hs
index
0bf4f66
..
ed77f9a
100644
(file)
--- a/
compiler/vectorise/Vectorise.hs
+++ b/
compiler/vectorise/Vectorise.hs
@@
-123,28
+123,42
@@
updVectInfo env guts = guts { mg_vect_info = info' }
, let tc_name = tyConName tc
, Just tc' <- [lookupNameEnv (vect_tycons env) tc_name]]
, let tc_name = tyConName tc
, Just tc' <- [lookupNameEnv (vect_tycons env) tc_name]]
-newtype VM a = VM { runVM :: Builtins -> VEnv -> DsM (VEnv, a) }
+data VResult a = Yes VEnv a | No
+
+newtype VM a = VM { runVM :: Builtins -> VEnv -> DsM (VResult a) }
instance Monad VM where
instance Monad VM where
- return x = VM $ \bi env -> return (env, x)
+ return x = VM $ \bi env -> return (Yes env x)
VM p >>= f = VM $ \bi env -> do
VM p >>= f = VM $ \bi env -> do
- (env', x) <- p bi env
- runVM (f x) bi env'
+ r <- p bi env
+ case r of
+ Yes env' x -> runVM (f x) bi env'
+ No -> return No
+
+noV :: VM a
+noV = VM $ \bi env -> return No
+
+tryV :: VM a -> VM (Maybe a)
+tryV (VM p) = VM $ \bi env -> do
+ r <- p bi env
+ case r of
+ Yes env' x -> return (Yes env' (Just x))
+ No -> return (Yes env Nothing)
liftDs :: DsM a -> VM a
liftDs :: DsM a -> VM a
-liftDs p = VM $ \bi env -> do { x <- p; return (env, x) }
+liftDs p = VM $ \bi env -> do { x <- p; return (Yes env x) }
builtin :: (Builtins -> a) -> VM a
builtin :: (Builtins -> a) -> VM a
-builtin f = VM $ \bi env -> return (env, f bi)
+builtin f = VM $ \bi env -> return (Yes env (f bi))
readEnv :: (VEnv -> a) -> VM a
readEnv :: (VEnv -> a) -> VM a
-readEnv f = VM $ \bi env -> return (env, f env)
+readEnv f = VM $ \bi env -> return (Yes env (f env))
setEnv :: VEnv -> VM ()
setEnv :: VEnv -> VM ()
-setEnv env = VM $ \_ _ -> return (env, ())
+setEnv env = VM $ \_ _ -> return (Yes env ())
updEnv :: (VEnv -> VEnv) -> VM ()
updEnv :: (VEnv -> VEnv) -> VM ()
-updEnv f = VM $ \_ env -> return (f env, ())
+updEnv f = VM $ \_ env -> return (Yes (f env) ())
newTyVar :: FastString -> Kind -> VM Var
newTyVar fs k
newTyVar :: FastString -> Kind -> VM Var
newTyVar fs k
@@
-163,8
+177,10
@@
vectoriseModule info guts
= do
builtins <- initBuiltins
env <- initVEnv info
= do
builtins <- initBuiltins
env <- initVEnv info
- (env', guts') <- runVM (vectModule guts) builtins env
- return $ updVectInfo env' guts'
+ r <- runVM (vectModule guts) builtins env
+ case r of
+ Yes env' guts' -> return $ updVectInfo env' guts'
+ No -> return guts
vectModule :: ModGuts -> VM ModGuts
vectModule guts = return guts
vectModule :: ModGuts -> VM ModGuts
vectModule guts = return guts