diff --git a/src/Convert/Package.hs b/src/Convert/Package.hs index 185185b..83a207f 100644 --- a/src/Convert/Package.hs +++ b/src/Convert/Package.hs @@ -64,7 +64,18 @@ convertFile packages ast = globalPackageItems :: Identifier -> PackageItems -> [PackageItem] globalPackageItems name items = - map (prefixPackageItem name (Map.keysSet items)) (Map.elems items) + map (prefixPackageItem name (packageItemIdents items)) (Map.elems items) + +packageItemIdents :: PackageItems -> Idents +packageItemIdents items = + Set.union + (Map.keysSet items) + (Set.unions $ map packageItemSubIdents $ Map.elems items) + where + packageItemSubIdents :: PackageItem -> Idents + packageItemSubIdents (Typedef (Enum _ enumItems _) _) = + Set.fromList $ map fst enumItems + packageItemSubIdents _ = Set.empty prefixPackageItem :: Identifier -> Idents -> PackageItem -> PackageItem prefixPackageItem packageName idents item = @@ -84,6 +95,10 @@ prefixPackageItem packageName idents item = Decl (Localparam a x b) -> Decl (Localparam a (prefix x) b) other -> other convertType (Alias Nothing x rs) = Alias Nothing (prefix x) rs + convertType (Enum mt items rs) = Enum mt items' rs + where + items' = map prefixItem items + prefixItem (x, me) = (prefix x, me) convertType other = other convertExpr (Ident x) = Ident $ prefix x convertExpr other = other diff --git a/test/basic/package_enum.sv b/test/basic/package_enum.sv new file mode 100644 index 0000000..7029d01 --- /dev/null +++ b/test/basic/package_enum.sv @@ -0,0 +1,12 @@ +package foo_pkg; + typedef enum logic [2:0] { + AccessAck = 3'd0, + AccessAckData = 3'd1 + } inp_t; +endpackage + +module top; + foo_pkg::inp_t test; + assign test = foo_pkg::AccessAck; + initial $display(test); +endmodule diff --git a/test/basic/package_enum.v b/test/basic/package_enum.v new file mode 100644 index 0000000..de80d4e --- /dev/null +++ b/test/basic/package_enum.v @@ -0,0 +1,5 @@ +module top; + wire [2:0] test; + assign test = 3'd0; + initial $display(test); +endmodule