Fixed a couple of problems with the implicit mobility system

This commit is contained in:
Neil Brown 2009-05-19 12:58:49 +00:00
parent 703bfe1afe
commit 589a6380fb
2 changed files with 5 additions and 3 deletions

View File

@ -201,6 +201,7 @@ subscriptType sub A.Infer
= return $ A.Infer
subscriptType sub t@(A.UserDataType _)
= resolveUserType (findMeta sub) t >>= subscriptType sub
subscriptType sub (A.Mobile t) = subscriptType sub t
subscriptType (A.SubscriptFromFor m _ _ count) (A.Array (_:ds) t)
= return $ A.Array (dimensionFromExpr count : ds) t
subscriptType (A.SubscriptFrom m _ base) (A.Array (d:ds) t)

View File

@ -306,10 +306,11 @@ inferDeref = pass "Infer mobile dereferences" [] [] recurse
doProcess :: Transform A.Process
doProcess (A.ProcCall m n as)
= do A.Proc _ _ fs _ <- specTypeOfName n
= do as' <- recurse as
A.Proc _ _ fs _ <- specTypeOfName n
ts <- mapM astTypeOf fs
as' <- mapM (uncurry $ unify m) (zip ts as)
return $ A.ProcCall m n as'
as'' <- mapM (uncurry $ unify m) (zip ts as')
return $ A.ProcCall m n as''
doProcess (A.IntrinsicProcCall m n as)
= do let Just amtns = lookup n intrinsicProcs
as' <- mapM (uncurry $ unify m) (zip (map mid amtns) as)