mirror of https://github.com/zachjs/sv2v.git
flatten generate blocks into their parent description where trivially possible
This commit is contained in:
parent
231b7f9936
commit
55aebec3ad
|
|
@ -103,8 +103,10 @@ maybeDo _ Nothing = return Nothing
|
||||||
maybeDo fun (Just val) = fun val >>= return . Just
|
maybeDo fun (Just val) = fun val >>= return . Just
|
||||||
|
|
||||||
traverseModuleItemsM :: Monad m => MapperM m ModuleItem -> MapperM m Description
|
traverseModuleItemsM :: Monad m => MapperM m ModuleItem -> MapperM m Description
|
||||||
traverseModuleItemsM mapper (Part extern kw lifetime name ports items) =
|
traverseModuleItemsM mapper (Part extern kw lifetime name ports items) = do
|
||||||
mapM fullMapper items >>= return . Part extern kw lifetime name ports
|
items' <- mapM fullMapper items
|
||||||
|
let items'' = concatMap breakGenerate items'
|
||||||
|
return $ Part extern kw lifetime name ports items''
|
||||||
where
|
where
|
||||||
fullMapper (Generate [GenBlock Nothing genItems]) =
|
fullMapper (Generate [GenBlock Nothing genItems]) =
|
||||||
mapM fullGenItemMapper genItems >>= mapper . Generate
|
mapM fullGenItemMapper genItems >>= mapper . Generate
|
||||||
|
|
@ -118,6 +120,17 @@ traverseModuleItemsM mapper (Part extern kw lifetime name ports items) =
|
||||||
Generate subItems -> GenBlock Nothing subItems
|
Generate subItems -> GenBlock Nothing subItems
|
||||||
_ -> GenModuleItem moduleItem'
|
_ -> GenModuleItem moduleItem'
|
||||||
genItemMapper other = return other
|
genItemMapper other = return other
|
||||||
|
breakGenerate :: ModuleItem -> [ModuleItem]
|
||||||
|
breakGenerate (Generate genItems) =
|
||||||
|
if all isGenModuleItem genItems
|
||||||
|
then map (\(GenModuleItem item) -> item) genItems
|
||||||
|
else [Generate genItems]
|
||||||
|
where
|
||||||
|
isGenModuleItem :: GenItem -> Bool
|
||||||
|
isGenModuleItem (GenModuleItem _) = True
|
||||||
|
isGenModuleItem _ = False
|
||||||
|
breakGenerate other = [other]
|
||||||
|
|
||||||
traverseModuleItemsM mapper (PackageItem packageItem) = do
|
traverseModuleItemsM mapper (PackageItem packageItem) = do
|
||||||
let item = MIPackageItem packageItem
|
let item = MIPackageItem packageItem
|
||||||
Part False Module Nothing "DNE" [] [item'] <-
|
Part False Module Nothing "DNE" [] [item'] <-
|
||||||
|
|
@ -782,9 +795,11 @@ collectAsgnsM = collectAsgnsM' IncludeTFs
|
||||||
|
|
||||||
traverseNestedModuleItemsM :: Monad m => MapperM m ModuleItem -> MapperM m ModuleItem
|
traverseNestedModuleItemsM :: Monad m => MapperM m ModuleItem -> MapperM m ModuleItem
|
||||||
traverseNestedModuleItemsM mapper item = do
|
traverseNestedModuleItemsM mapper item = do
|
||||||
Part False Module Nothing "DNE" [] [item'] <-
|
Part False Module Nothing "DNE" [] items' <-
|
||||||
traverseModuleItemsM mapper (Part False Module Nothing "DNE" [] [item])
|
traverseModuleItemsM mapper (Part False Module Nothing "DNE" [] [item])
|
||||||
return item'
|
return $ case items' of
|
||||||
|
[item'] -> item'
|
||||||
|
_ -> Generate $ map GenModuleItem items'
|
||||||
|
|
||||||
traverseNestedModuleItems :: Mapper ModuleItem -> Mapper ModuleItem
|
traverseNestedModuleItems :: Mapper ModuleItem -> Mapper ModuleItem
|
||||||
traverseNestedModuleItems = unmonad traverseNestedModuleItemsM
|
traverseNestedModuleItems = unmonad traverseNestedModuleItemsM
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue