Fixed problems with passing MOBILE items to operators
This commit is contained in:
parent
40fc118c31
commit
3b1519e4d3
|
@ -318,6 +318,15 @@ inferTypes = occamOnlyPass "Infer types"
|
||||||
typeEqForOp :: A.Type -> A.Type -> Bool
|
typeEqForOp :: A.Type -> A.Type -> Bool
|
||||||
typeEqForOp (A.Array ds t) (A.Array ds' t')
|
typeEqForOp (A.Array ds t) (A.Array ds' t')
|
||||||
= (length ds == length ds') && typeEqForOp t t'
|
= (length ds == length ds') && typeEqForOp t t'
|
||||||
|
-- Since we auto-dereference mobiles that are passed to operators, we must
|
||||||
|
-- auto-skip mobile-ness when checking the types, so that we can still
|
||||||
|
-- infer properly if the user is passing a MOBILE INT instead of an INT.
|
||||||
|
-- This does mean you can't overload operators on MOBILE INT differently
|
||||||
|
-- than INT, but I don't see how we could allow that sensibly anyway
|
||||||
|
typeEqForOp (A.Mobile t) t'
|
||||||
|
= typeEqForOp t t'
|
||||||
|
typeEqForOp t (A.Mobile t')
|
||||||
|
= typeEqForOp t t'
|
||||||
typeEqForOp t t' = t == t'
|
typeEqForOp t t' = t == t'
|
||||||
|
|
||||||
doActuals :: (PolyplateM a InferTypeOps () PassM, Data a) => Meta -> A.Name -> [A.Formal] ->
|
doActuals :: (PolyplateM a InferTypeOps () PassM, Data a) => Meta -> A.Name -> [A.Formal] ->
|
||||||
|
|
Loading…
Reference in New Issue
Block a user