@@ -57,8 +57,18 @@ verilog_typecheck_exprt::hierarchical_identifier(irep_idt base_name) const
5757 return id2string (function_or_task_name) + " ." + named_block +
5858 id2string (base_name);
5959 else if (!module_identifier.empty ())
60- return id2string (module_identifier) + " ." + named_block +
61- id2string (base_name);
60+ {
61+ if (has_prefix (id2string (module_identifier), " Verilog::package::" ))
62+ {
63+ return id2string (module_identifier) + " ::" + named_block +
64+ id2string (base_name);
65+ }
66+ else
67+ {
68+ return id2string (module_identifier) + " ." + named_block +
69+ id2string (base_name);
70+ }
71+ }
6272 else
6373 {
6474 // not in a function/task, not in a module/checker/package etc.
@@ -662,7 +672,7 @@ exprt verilog_typecheck_exprt::convert_expr_function_call(
662672 to_verilog_identifier_expr (package_scope.identifier ()).base_name ();
663673
664674 full_identifier = id2string (verilog_package_identifier (package_base)) +
665- ' . ' + id2string (base_name);
675+ " :: " + id2string (base_name);
666676 }
667677 else if (f_op.id () == ID_verilog_identifier)
668678 {
@@ -1316,22 +1326,32 @@ const symbolt *verilog_typecheck_exprt::resolve(const irep_idt base_name)
13161326 return symbol; // found!
13171327 }
13181328
1329+ // determine the pacakge/module prefix, using the right separator
1330+ std::string prefix;
1331+
1332+ if (has_prefix (id2string (module_identifier), " Verilog::package::" ))
1333+ {
1334+ prefix = id2string (module_identifier) + " ::" ;
1335+ }
1336+ else
1337+ {
1338+ prefix = id2string (module_identifier) + ' .' ;
1339+ }
1340+
13191341 // try named blocks, beginning with inner one
13201342 for (named_blockst::const_reverse_iterator
13211343 it=named_blocks.rbegin ();
13221344 it!=named_blocks.rend ();
13231345 it++)
13241346 {
1325- auto full_identifier = id2string (module_identifier) + " ." + id2string (*it) +
1326- id2string (base_name);
1347+ irep_idt full_identifier = prefix + id2string (*it) + id2string (base_name);
13271348
13281349 const symbolt *symbol;
13291350 if (!ns.lookup (full_identifier, symbol))
13301351 return symbol; // found!
13311352 }
13321353
1333- auto full_identifier =
1334- id2string (module_identifier) + " ." + id2string (base_name);
1354+ irep_idt full_identifier = prefix + id2string (base_name);
13351355
13361356 const symbolt *symbol;
13371357 if (!ns.lookup (full_identifier, symbol))
@@ -3006,8 +3026,8 @@ exprt verilog_typecheck_exprt::convert_binary_expr(binary_exprt expr)
30063026
30073027 // stitch together
30083028 irep_idt full_identifier =
3009- id2string (verilog_package_identifier (package_base)) + ' . ' +
3010- id2string (rhs_base);
3029+ id2string (verilog_package_identifier (package_base)) +
3030+ " :: " + id2string (rhs_base);
30113031
30123032 const symbolt *symbol;
30133033 if (ns.lookup (full_identifier, symbol))
0 commit comments