added package enum item name resolution (resolves #16)

This commit is contained in:
Zachary Snow 2019-08-28 19:01:25 -04:00
parent fabdc08493
commit b48ca0bb8f
3 changed files with 33 additions and 1 deletions

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,5 @@
module top;
wire [2:0] test;
assign test = 3'd0;
initial $display(test);
endmodule