diff --git a/common/Types.hs b/common/Types.hs index 808690f..1f12c10 100644 --- a/common/Types.hs +++ b/common/Types.hs @@ -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) diff --git a/transformations/ImplicitMobility.hs b/transformations/ImplicitMobility.hs index f6d2fc9..4b65513 100644 --- a/transformations/ImplicitMobility.hs +++ b/transformations/ImplicitMobility.hs @@ -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)