Merge pull request #319 from antmicro/function-ranges

Fix logic var ranges access
diff --git a/systemverilog-plugin/UhdmAst.cc b/systemverilog-plugin/UhdmAst.cc
index 04d3206..978fde5 100644
--- a/systemverilog-plugin/UhdmAst.cc
+++ b/systemverilog-plugin/UhdmAst.cc
@@ -3282,7 +3282,13 @@
         }
         delete node;
     });
-    visit_one_to_many({vpiRange}, obj_h, [&](AST::AstNode *node) { packed_ranges.push_back(node); });
+    // TODO: Handling below seems similar to other typespec accesses for range. Candidate for extraction to a function.
+    if (auto typespec_h = vpi_handle(vpiTypespec, obj_h)) {
+        visit_one_to_many({vpiRange}, typespec_h, [&](AST::AstNode *node) { packed_ranges.push_back(node); });
+        vpi_release_handle(typespec_h);
+    } else {
+        visit_one_to_many({vpiRange}, obj_h, [&](AST::AstNode *node) { packed_ranges.push_back(node); });
+    }
     visit_default_expr(obj_h);
     add_multirange_wire(current_node, packed_ranges, unpacked_ranges);
 }