Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions crates/bender-slang/cpp/rewriter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,8 @@ class ReferenceRewriter : public SyntaxRewriter<ReferenceRewriter> {
ScopedNameSyntax* newNode = deepClone(node, alloc);
newNode->left = newLeft;

rewrite_scoped_names_inplace(*newNode->right);

replace(node, *newNode);
refRenamed++;
}
Expand Down
10 changes: 10 additions & 0 deletions tests/pickle.rs
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,16 @@ mod tests {
assert!(!renamed.contains("common_pkg::Idle"));
}

#[test]
fn pickle_rename_renames_scoped_packed_dimensions() {
let renamed = run_pickle(&["--prefix", "p_", "--suffix", "_s", "--expand-macros"]);

// A packed dimension is parsed as part of the scoped type name it follows,
// so a scoped name inside it must be renamed along with the type itself.
assert!(renamed.contains("p_common_pkg_s::state_t [p_common_pkg_s::NumStates-1:0]"));
assert!(!renamed.contains("common_pkg::NumStates-1:0"));
}

#[test]
fn pickle_rename_renames_scoped_instantiation_params() {
let renamed = run_pickle(&[
Expand Down
2 changes: 2 additions & 0 deletions tests/pickle/src/common_pkg.sv
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package common_pkg;

parameter int unsigned NumStates = 3;

typedef enum logic [1:0] {
Idle = 2'b00,
Busy = 2'b01,
Expand Down
3 changes: 3 additions & 0 deletions tests/pickle/src/core.sv
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
module core #(
parameter common_pkg::state_t DefaultState = common_pkg::Idle
) ();
// Scoped type name carrying a packed dimension that is itself a scoped name.
common_pkg::state_t [common_pkg::NumStates-1:0] state_history;

leaf u_leaf();
endmodule