mirror of
https://github.com/YosysHQ/yosys
synced 2025-08-06 19:21:23 +00:00
verilog: support module scope identifiers in parametric modules
This commit is contained in:
parent
3d9698153f
commit
4f187d53c5
2 changed files with 37 additions and 4 deletions
|
@ -1691,11 +1691,15 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage,
|
|||
if (type == AST_IDENTIFIER) {
|
||||
if (current_scope.count(str) == 0) {
|
||||
AstNode *current_scope_ast = (current_ast_mod == nullptr) ? current_ast : current_ast_mod;
|
||||
const std::string& mod_scope = current_scope_ast->str;
|
||||
if (str[0] == '\\' && str.substr(0, mod_scope.size()) == mod_scope) {
|
||||
std::string new_str = "\\" + str.substr(mod_scope.size() + 1);
|
||||
size_t pos = str.find('.', 1);
|
||||
if (str[0] == '\\' && pos != std::string::npos) {
|
||||
std::string new_str = "\\" + str.substr(pos + 1);
|
||||
if (current_scope.count(new_str)) {
|
||||
str = new_str;
|
||||
std::string prefix = str.substr(0, pos);
|
||||
auto it = current_scope_ast->attributes.find(ID::hdlname);
|
||||
if ((it != current_scope_ast->attributes.end() && it->second->str == prefix)
|
||||
|| prefix == current_scope_ast->str)
|
||||
str = new_str;
|
||||
}
|
||||
}
|
||||
for (auto node : current_scope_ast->children) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue