Fixed some problems with DATA TYPEs that were actually MOBILE stuff not being resolved at the right points

This commit is contained in:
Neil Brown 2009-04-12 13:50:59 +00:00
parent 47d565a3b9
commit 5534d1c3d6
2 changed files with 6 additions and 5 deletions

View File

@ -252,10 +252,10 @@ typeOfVariable (A.Variable m n) = typeOfName n
typeOfVariable (A.SubscriptedVariable m s v) typeOfVariable (A.SubscriptedVariable m s v)
= typeOfVariable v >>= subscriptType s = typeOfVariable v >>= subscriptType s
typeOfVariable (A.DerefVariable m v) typeOfVariable (A.DerefVariable m v)
= do t <- typeOfVariable v = do t <- typeOfVariable v >>= resolveUserType m
case t of case t of
A.Mobile innerT -> return innerT A.Mobile innerT -> return innerT
_ -> dieP m $ "Dereference applied to non-mobile variable" _ -> diePC m $ formatCode "Dereference applied to non-mobile variable of type %" t
typeOfVariable (A.DirectedVariable m dir v) typeOfVariable (A.DirectedVariable m dir v)
= do t <- typeOfVariable v = do t <- typeOfVariable v
case t of case t of

View File

@ -27,6 +27,7 @@ import Data.Generics
import Data.List import Data.List
import qualified Data.Map as Map import qualified Data.Map as Map
import Data.Maybe import Data.Maybe
import qualified Data.Traversable as T
import qualified AST as A import qualified AST as A
import CompState import CompState
@ -696,7 +697,7 @@ inferTypes = occamOnlyPass "Infer types"
-- FIXME: AllocMobile -- FIXME: AllocMobile
A.ExprVariable m v -> A.ExprVariable m v ->
do ctx <- getTypeContext do ctx <- getTypeContext >>= (T.sequence . fmap (underlyingType m))
v' <- recurse v v' <- recurse v
t <- astTypeOf v' >>= underlyingType m t <- astTypeOf v' >>= underlyingType m
case (ctx, t) of case (ctx, t) of
@ -1106,7 +1107,7 @@ inferTypes = occamOnlyPass "Infer types"
return $ A.SubscriptedVariable m s' v'' return $ A.SubscriptedVariable m s' v''
doVariable v doVariable v
= do v' <- descend v = do v' <- descend v
ctx <- getTypeContext ctx <- getTypeContext >>= (T.sequence . fmap (underlyingType (findMeta v)))
underT <- astTypeOf v' >>= resolveUserType (findMeta v) underT <- astTypeOf v' >>= resolveUserType (findMeta v)
case (ctx, underT) of case (ctx, underT) of
(Just (A.Mobile {}), A.Mobile {}) -> return v' (Just (A.Mobile {}), A.Mobile {}) -> return v'
@ -1290,7 +1291,7 @@ checkVariables = checkDepthM doVariable
= do t <- astTypeOf v >>= resolveUserType m = do t <- astTypeOf v >>= resolveUserType m
case t of case t of
A.Mobile _ -> ok A.Mobile _ -> ok
_ -> dieP m $ "Dereference applied to non-mobile variable" _ -> diePC m $ formatCode "Dereference applied to non-mobile variable of type %" t
doVariable _ = ok doVariable _ = ok
--}}} --}}}