Skip to content

Commit 4c2b83b

Browse files
committed
Fix case when wiretype is 2nd child
Signed-off-by: Kamil Rakoczy <[email protected]>
1 parent 81b3e76 commit 4c2b83b

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

uhdm-plugin/UhdmAst.cc

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,19 @@ static AST::AstNode *convert_range(AST::AstNode *id, const std::vector<AST::AstN
216216

217217
static void resolve_wiretype(AST::AstNode *wire_node)
218218
{
219+
AST::AstNode *wiretype_node = nullptr;
220+
if (!wire_node->children.empty()) {
221+
if (wire_node->children[0]->type == AST::AST_WIRETYPE) {
222+
wiretype_node = wire_node->children[0];
223+
}
224+
}
225+
if (wire_node->children.size() > 1) {
226+
if (wire_node->children[1]->type == AST::AST_WIRETYPE) {
227+
wiretype_node = wire_node->children[1];
228+
}
229+
}
230+
if (wiretype_node == nullptr)
231+
return;
219232
std::vector<AST::AstNode *> packed_ranges;
220233
std::vector<AST::AstNode *> unpacked_ranges;
221234
// First check if it has already defined ranges
@@ -230,10 +243,8 @@ static void resolve_wiretype(AST::AstNode *wire_node)
230243
}
231244
}
232245
AST::AstNode *wiretype_ast = nullptr;
233-
if (!wire_node->children.empty() && wire_node->children[0]->type == AST::AST_WIRETYPE) {
234-
log_assert(AST_INTERNAL::current_scope.count(wire_node->children[0]->str));
235-
wiretype_ast = AST_INTERNAL::current_scope[wire_node->children[0]->str];
236-
}
246+
log_assert(AST_INTERNAL::current_scope.count(wiretype_node->str));
247+
wiretype_ast = AST_INTERNAL::current_scope[wiretype_node->str];
237248
// we need to setup current top ast as this simplify
238249
// needs to have access to all already definied ids
239250
while (wire_node->simplify(true, false, false, 1, -1, false, false)) {
@@ -295,9 +306,7 @@ static void check_memories(AST::AstNode *module_node)
295306
// to correct range
296307
static void convert_packed_unpacked_range(AST::AstNode *wire_node)
297308
{
298-
if (!wire_node->children.empty() && wire_node->children[0]->type == AST::AST_WIRETYPE) {
299-
resolve_wiretype(wire_node);
300-
}
309+
resolve_wiretype(wire_node);
301310
const std::vector<AST::AstNode *> packed_ranges =
302311
wire_node->attributes.count(ID::packed_ranges) ? wire_node->attributes[ID::packed_ranges]->children : std::vector<AST::AstNode *>();
303312
const std::vector<AST::AstNode *> unpacked_ranges =

0 commit comments

Comments
 (0)