Fixed a bug in the occam type inference where channels of arrays were not being processed properly
This commit is contained in:
parent
cd1b409f96
commit
c787aa9fa5
|
@ -54,6 +54,10 @@ sameType (A.Array (A.Dimension e1 : ds1) t1)
|
||||||
sameType (A.Array (A.UnknownDimension : ds1) t1)
|
sameType (A.Array (A.UnknownDimension : ds1) t1)
|
||||||
(A.Array (A.UnknownDimension : ds2) t2)
|
(A.Array (A.UnknownDimension : ds2) t2)
|
||||||
= sameType (A.Array ds1 t1) (A.Array ds2 t2)
|
= sameType (A.Array ds1 t1) (A.Array ds2 t2)
|
||||||
|
-- We might be dealing with channels of arrays, so we must dig through channels:
|
||||||
|
sameType (A.Chan _ ta) (A.Chan _ tb) = sameType ta tb
|
||||||
|
sameType (A.ChanEnd dira _ ta) (A.ChanEnd dirb _ tb)
|
||||||
|
= liftM (dira == dirb &&) (sameType ta tb)
|
||||||
sameType a b = return $ a == b
|
sameType a b = return $ a == b
|
||||||
|
|
||||||
-- | Check that the second dimension can be used in a context where the first
|
-- | Check that the second dimension can be used in a context where the first
|
||||||
|
@ -879,18 +883,21 @@ inferTypes = occamOnlyPass "Infer types"
|
||||||
return $ A.Proc m sm fs' body'
|
return $ A.Proc m sm fs' body'
|
||||||
where
|
where
|
||||||
processFormal body f@(A.Formal am t n)
|
processFormal body f@(A.Formal am t n)
|
||||||
= case t of
|
= do t' <- recurse t
|
||||||
A.Chan attr t ->
|
case t' of
|
||||||
|
A.Chan attr innerT ->
|
||||||
do dirs <- findDir n body
|
do dirs <- findDir n body
|
||||||
case nub dirs of
|
case nub dirs of
|
||||||
[dir] ->
|
[dir] ->
|
||||||
do let t' = A.ChanEnd dir attr t
|
do let t' = A.ChanEnd dir attr innerT
|
||||||
f' = A.Formal am t' n
|
f' = A.Formal am t' n
|
||||||
modifyName n (\nd -> nd {A.ndSpecType =
|
modifyName n (\nd -> nd {A.ndSpecType =
|
||||||
A.Declaration m t'})
|
A.Declaration m t'})
|
||||||
return f'
|
return f'
|
||||||
_ -> return f -- no direction, or two
|
_ -> return $ A.Formal am t' n -- no direction, or two
|
||||||
_ -> return f
|
_ -> do modifyName n (\nd -> nd {A.ndSpecType =
|
||||||
|
A.Declaration m t'})
|
||||||
|
return $ A.Formal am t' n
|
||||||
_ -> lift $ descend st
|
_ -> lift $ descend st
|
||||||
where
|
where
|
||||||
-- | This is a bit ugly: walk down a Structured to find the single
|
-- | This is a bit ugly: walk down a Structured to find the single
|
||||||
|
|
Loading…
Reference in New Issue
Block a user