From 9af38e7870e42df011282011e8417c5d4aadf923 Mon Sep 17 00:00:00 2001 From: Zachary Snow Date: Sun, 16 Feb 2020 15:43:55 -0500 Subject: [PATCH] globally imported items are selectively nested --- src/Convert/NestPI.hs | 8 ++------ src/Convert/Package.hs | 19 ++++++++++++++----- test/basic/unused_imports.sv | 8 ++++++++ test/basic/unused_imports.v | 4 ++++ 4 files changed, 28 insertions(+), 11 deletions(-) create mode 100644 test/basic/unused_imports.sv create mode 100644 test/basic/unused_imports.v diff --git a/src/Convert/NestPI.hs b/src/Convert/NestPI.hs index 75332a9..a0b2ba1 100644 --- a/src/Convert/NestPI.hs +++ b/src/Convert/NestPI.hs @@ -31,6 +31,7 @@ convert = (traverseDescriptions . convertDescription) curr isPI :: Description -> Bool + isPI (PackageItem Import{}) = False isPI (PackageItem item) = piName item /= Nothing isPI _ = False @@ -55,8 +56,7 @@ convertDescription pis (orig @ Part{}) = , collectTypesM $ collectNestedTypesM collectTypenamesM , collectExprsM $ collectNestedExprsM collectIdentsM ] - neededPIs = Set.difference (Set.union usedPIs imports) existingPIs - imports = Map.keysSet $ Map.filter isImport pis + neededPIs = Set.difference usedPIs existingPIs newItems = map MIPackageItem $ Map.elems $ Map.restrictKeys pis neededPIs -- place data declarations at the beginning to obey declaration @@ -104,7 +104,3 @@ piName (Decl (CommentDecl _)) = Nothing piName (Import x y) = Just $ show $ Import x y piName (Export _) = Nothing piName (Directive _) = Nothing - -isImport :: PackageItem -> Bool -isImport Import{} = True -isImport _ = False diff --git a/src/Convert/Package.hs b/src/Convert/Package.hs index 217dbe2..379e3e3 100644 --- a/src/Convert/Package.hs +++ b/src/Convert/Package.hs @@ -53,7 +53,7 @@ convertFile :: Packages -> AST -> AST convertFile packages ast = (++) globalItems $ filter (not . isCollected) $ - traverseDescriptions (traverseDescription packages) $ + concatMap (traverseDescription packages) $ ast where globalItems = map PackageItem $ @@ -127,11 +127,20 @@ collectDescriptionM (Package _ name items) = isImport _ = False collectDescriptionM _ = return () -traverseDescription :: Packages -> Description -> Description -traverseDescription packages description = - traverseModuleItems (traverseModuleItem existingItemNames packages) - description +traverseDescription :: Packages -> Description -> [Description] +traverseDescription packages (PackageItem (Import x y)) = + map (\(MIPackageItem item) -> PackageItem item) items where + orig = Part [] False Module Inherit "DNE" [] + [MIPackageItem $ Import x y] + [orig'] = traverseDescription packages orig + Part [] False Module Inherit "DNE" [] items = orig' +traverseDescription packages description = + [description'] + where + description' = traverseModuleItems + (traverseModuleItem existingItemNames packages) + description existingItemNames = execWriter $ collectModuleItemsM writePIName description writePIName :: ModuleItem -> Writer Idents () diff --git a/test/basic/unused_imports.sv b/test/basic/unused_imports.sv new file mode 100644 index 0000000..5e6cf3c --- /dev/null +++ b/test/basic/unused_imports.sv @@ -0,0 +1,8 @@ +package P; + localparam FOO = 1; + localparam BAR = 2; +endpackage +import P::*; +module top; + initial $display(FOO); +endmodule diff --git a/test/basic/unused_imports.v b/test/basic/unused_imports.v new file mode 100644 index 0000000..8b8085f --- /dev/null +++ b/test/basic/unused_imports.v @@ -0,0 +1,4 @@ +module top; + localparam FOO = 1; + initial $display(FOO); +endmodule