From 737791aebd7f638545005c808c7282e4d7ccf716 Mon Sep 17 00:00:00 2001 From: Zachary Snow Date: Tue, 27 Aug 2019 19:28:04 -0400 Subject: [PATCH] expose nested type traversal --- src/Convert/NestPI.hs | 6 +----- src/Convert/Traverse.hs | 8 ++++++++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/Convert/NestPI.hs b/src/Convert/NestPI.hs index 8c078a5..8843434 100644 --- a/src/Convert/NestPI.hs +++ b/src/Convert/NestPI.hs @@ -55,7 +55,7 @@ traverseDescriptionM (orig @ (Part extern kw lifetime name ports items)) = do runner f = execWriter $ collectModuleItemsM f orig usedPIs = Set.unions $ map runner $ [ collectStmtsM collectSubroutinesM - , collectTypesM collectTypenamesM + , collectTypesM $ collectNestedTypesM collectTypenamesM , collectExprsM $ collectNestedExprsM collectIdentsM ] traverseDescriptionM other = return other @@ -82,10 +82,6 @@ collectIdentsM _ = return () -- writes down aliased typenames collectTypenamesM :: Type -> Writer Idents () collectTypenamesM (Alias _ x _) = tell $ Set.singleton x -collectTypenamesM (Enum (Just t) _ _) = collectTypenamesM t -collectTypenamesM (Struct _ fields _) = do - _ <- mapM collectTypenamesM $ map fst fields - return () collectTypenamesM _ = return () -- returns the "name" of a package item, if it has one diff --git a/src/Convert/Traverse.hs b/src/Convert/Traverse.hs index f70f34b..6678095 100644 --- a/src/Convert/Traverse.hs +++ b/src/Convert/Traverse.hs @@ -47,6 +47,9 @@ module Convert.Traverse , traverseDeclsM' , traverseDecls' , collectDeclsM' +, traverseNestedTypesM +, traverseNestedTypes +, collectNestedTypesM , traverseTypesM , traverseTypes , collectTypesM @@ -796,6 +799,11 @@ traverseNestedTypesM mapper = fullMapper let idents = map snd fields return $ Union p (zip types idents) r +traverseNestedTypes :: Mapper Type -> Mapper Type +traverseNestedTypes = unmonad traverseNestedTypesM +collectNestedTypesM :: Monad m => CollectorM m Type -> CollectorM m Type +collectNestedTypesM = collectify traverseNestedTypesM + traverseTypesM :: Monad m => MapperM m Type -> MapperM m ModuleItem traverseTypesM mapper item = miMapper item >>=