Rain: extended the resolving pass to include process declarations

This commit is contained in:
Neil Brown 2007-08-22 12:40:20 +00:00
parent 79678055bc
commit 29f1aa0f2f

View File

@ -53,6 +53,8 @@ uniquifyAndResolveVars :: Data t => t -> PassM t
uniquifyAndResolveVars = everywhereM (mkM uniquifyAndResolveVars') uniquifyAndResolveVars = everywhereM (mkM uniquifyAndResolveVars')
where where
uniquifyAndResolveVars' :: A.Structured -> PassM A.Structured uniquifyAndResolveVars' :: A.Structured -> PassM A.Structured
--Variable declarations:
uniquifyAndResolveVars' (A.Spec m (A.Specification m' n decl@(A.Declaration {})) scope) uniquifyAndResolveVars' (A.Spec m (A.Specification m' n decl@(A.Declaration {})) scope)
= do n' <- makeNonce $ A.nameName n = do n' <- makeNonce $ A.nameName n
defineName (n {A.nameName = n'}) A.NameDef {A.ndMeta = m', A.ndName = n', A.ndOrigName = A.nameName n, defineName (n {A.nameName = n'}) A.NameDef {A.ndMeta = m', A.ndName = n', A.ndOrigName = A.nameName n,
@ -60,6 +62,14 @@ uniquifyAndResolveVars = everywhereM (mkM uniquifyAndResolveVars')
A.ndAbbrevMode = A.Original, A.ndPlacement = A.Unplaced} A.ndAbbrevMode = A.Original, A.ndPlacement = A.Unplaced}
let scope' = everywhere (mkT $ replaceNameName (A.nameName n) n') scope let scope' = everywhere (mkT $ replaceNameName (A.nameName n) n') scope
return $ A.Spec m (A.Specification m' n {A.nameName = n'} decl) scope' return $ A.Spec m (A.Specification m' n {A.nameName = n'} decl) scope'
--Processes:
uniquifyAndResolveVars' input@(A.Spec _ (A.Specification m' n decl@(A.Proc {})) _)
= do defineName n A.NameDef {A.ndMeta = m', A.ndName = A.nameName n, A.ndOrigName = A.nameName n,
A.ndNameType = A.ProcName, A.ndType = decl,
A.ndAbbrevMode = A.Original, A.ndPlacement = A.Unplaced}
return input
--Other:
uniquifyAndResolveVars' s = return s uniquifyAndResolveVars' s = return s
replaceNameName :: String -> String -> A.Name -> A.Name replaceNameName :: String -> String -> A.Name -> A.Name