From 8a554113c8e51abb27ded83a57687dbc7e7746c1 Mon Sep 17 00:00:00 2001 From: Zachary Snow Date: Mon, 19 Jul 2021 12:33:11 -0400 Subject: [PATCH] don't process global items when looking up identifiers in packages --- src/Convert/Package.hs | 8 +++++--- test/core/package_ident.sv | 17 +++++++++++++++++ test/core/package_ident.v | 7 +++++++ 3 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 test/core/package_ident.sv create mode 100644 test/core/package_ident.v diff --git a/src/Convert/Package.hs b/src/Convert/Package.hs index c7e081e..ff7d0f9 100644 --- a/src/Convert/Package.hs +++ b/src/Convert/Package.hs @@ -264,9 +264,11 @@ processItems topName packageName moduleItems = do details <- lookupElemM x case details of Nothing -> - if null topName - then return x - else resolveGlobalIdent x + -- only missing identifiers within parts should be looked up + -- in the global scope + if null packageName && not (null topName) + then resolveGlobalIdent x + else return x Just ([_, _], _, Declared) -> if null packageName then return x diff --git a/test/core/package_ident.sv b/test/core/package_ident.sv new file mode 100644 index 0000000..4297bcd --- /dev/null +++ b/test/core/package_ident.sv @@ -0,0 +1,17 @@ +package P; + typedef struct packed { + integer U; + } T; + function automatic integer F; + input integer inp; + return $clog2(inp); + endfunction + localparam X = F(100); + localparam T Y = '{ U: X + 1 }; + localparam Z = Y.U + 1; +endpackage +import P::*; +localparam V = Y + 1; +module top; + initial $display("%0d %0d", V, X); +endmodule diff --git a/test/core/package_ident.v b/test/core/package_ident.v new file mode 100644 index 0000000..295d7e5 --- /dev/null +++ b/test/core/package_ident.v @@ -0,0 +1,7 @@ +module top; + localparam X = $clog2(100); + localparam Y = X + 1; + localparam Z = Y + 1; + localparam V = Y + 1; + initial $display("%0d %0d", V, X); +endmodule