From fabdc08493ab5b95d82bf45d7ffa7c4b5750fb08 Mon Sep 17 00:00:00 2001 From: Zachary Snow Date: Tue, 27 Aug 2019 21:32:03 -0400 Subject: [PATCH] fix package resolution of nested typedefs (resolves #11) --- src/Convert/Package.hs | 5 +++- ...{pacakge_typedef.sv => package_typedef.sv} | 0 .../{pacakge_typedef.v => package_typedef.v} | 0 test/basic/package_typedef_nested.sv | 24 +++++++++++++++++++ test/basic/package_typedef_nested.v | 4 ++++ 5 files changed, 32 insertions(+), 1 deletion(-) rename test/basic/{pacakge_typedef.sv => package_typedef.sv} (100%) rename test/basic/{pacakge_typedef.v => package_typedef.v} (100%) create mode 100644 test/basic/package_typedef_nested.sv create mode 100644 test/basic/package_typedef_nested.v diff --git a/src/Convert/Package.hs b/src/Convert/Package.hs index 78ceeb1..185185b 100644 --- a/src/Convert/Package.hs +++ b/src/Convert/Package.hs @@ -83,11 +83,14 @@ prefixPackageItem packageName idents item = Decl (Parameter a x b) -> Decl (Parameter a (prefix x) b) Decl (Localparam a x b) -> Decl (Localparam a (prefix x) b) other -> other + convertType (Alias Nothing x rs) = Alias Nothing (prefix x) rs + convertType other = other convertExpr (Ident x) = Ident $ prefix x convertExpr other = other convertLHS (LHSIdent x) = LHSIdent $ prefix x convertLHS other = other converter = + (traverseTypes $ traverseNestedTypes convertType) . (traverseExprs $ traverseNestedExprs convertExpr) . (traverseLHSs $ traverseNestedLHSs convertLHS ) MIPackageItem item'' = converter $ MIPackageItem item' @@ -137,7 +140,7 @@ traverseModuleItem existingItemNames packages (MIPackageItem (Import x y)) = traverseModuleItem _ _ item = (traverseExprs $ traverseNestedExprs traverseExpr) $ (traverseStmts traverseStmt) $ - (traverseTypes traverseType) $ + (traverseTypes $ traverseNestedTypes traverseType) $ item where diff --git a/test/basic/pacakge_typedef.sv b/test/basic/package_typedef.sv similarity index 100% rename from test/basic/pacakge_typedef.sv rename to test/basic/package_typedef.sv diff --git a/test/basic/pacakge_typedef.v b/test/basic/package_typedef.v similarity index 100% rename from test/basic/pacakge_typedef.v rename to test/basic/package_typedef.v diff --git a/test/basic/package_typedef_nested.sv b/test/basic/package_typedef_nested.sv new file mode 100644 index 0000000..6e0395c --- /dev/null +++ b/test/basic/package_typedef_nested.sv @@ -0,0 +1,24 @@ +package foo_pkg; + + typedef struct packed { + logic [7:0] rsvd; + logic [7:0] parity; + } user_t; + + typedef struct packed { + logic valid; + user_t user; + } inp_t; + + typedef struct packed { + logic valid; + logic opcode; + } out_t; + +endpackage + +module top ( + input foo_pkg::inp_t dat_i, + output foo_pkg::out_t dat_o +); +endmodule diff --git a/test/basic/package_typedef_nested.v b/test/basic/package_typedef_nested.v new file mode 100644 index 0000000..31a0a76 --- /dev/null +++ b/test/basic/package_typedef_nested.v @@ -0,0 +1,4 @@ +module top (dat_i, dat_o); + input wire [16:0] dat_i; + output wire [1:0] dat_o; +endmodule