diff --git a/common/EvalConstants.hs b/common/EvalConstants.hs index 93838d1..5c74a36 100644 --- a/common/EvalConstants.hs +++ b/common/EvalConstants.hs @@ -124,6 +124,13 @@ evalVariable (A.VariableSizes m v) A.UnknownDimension -> throwError (Just m, "Unknown dimension") | d <- ds] >>* OccArray + A.Mobile (A.Array ds _) + -> sequence [case d of + A.Dimension e -> evalExpression e + A.UnknownDimension -> + throwError (Just m, "Unknown dimension") + | d <- ds] >>* OccArray + _ -> throwError (Just m, " variable not array") diff --git a/common/Types.hs b/common/Types.hs index e96674e..40fe31f 100644 --- a/common/Types.hs +++ b/common/Types.hs @@ -275,6 +275,7 @@ typeOfVariable (A.VariableSizes m v) = do t <- typeOfVariable v case t of A.Array ds _ -> return $ A.Array [A.Dimension $ makeConstant m $ length ds] A.Int + A.Mobile (A.Array ds _) -> return $ A.Array [A.Dimension $ makeConstant m $ length ds] A.Int _ -> diePC m $ formatCode "Attempted to get size of non-array: % (type: %)" v t -- | Get the abbreviation mode of a variable. diff --git a/frontends/OccamTypes.hs b/frontends/OccamTypes.hs index ae47f97..79ef1a8 100644 --- a/frontends/OccamTypes.hs +++ b/frontends/OccamTypes.hs @@ -1007,7 +1007,7 @@ inferTypes = occamOnlyPass "Infer types" doProcess p = case p of A.Assign m vs el -> - do vs' <- recurse vs + do vs' <- noTypeContext $ recurse vs ts <- mapM astTypeOf vs' el' <- doExpressionList ts el return $ A.Assign m vs' el'