6#include "slang/analysis/AnalysisManager.h"
7#include "slang/analysis/ValueDriver.h"
8#include "slang/ast/ASTVisitor.h"
9#include "slang/ast/EvalContext.h"
10#include "slang/ast/ValuePath.h"
11#include "slang/ast/symbols/ValueSymbol.h"
17 :
public ast::ASTVisitor<ReportDrivers, ast::VisitFlags::Expressions |
18 ast::VisitFlags::Canonical> {
21 static auto driverPathToString(
const ast::ValueSymbol &symbol,
22 const analysis::ValueDriver &driver) {
23 ast::EvalContext evalContext(symbol);
24 return driver.path.toString(evalContext);
29 analysis::DriverKind kind;
31 SourceLocation location;
36 SourceLocation location;
37 std::vector<DriverInfo> drivers;
40 ast::Compilation &compilation;
41 analysis::AnalysisManager &analysisManager;
42 std::vector<ValueInfo> values;
46 analysis::AnalysisManager &analysisManager)
47 : compilation(compilation), analysisManager(analysisManager) {}
55 for (
auto value : values) {
59 for (
auto &driver : value.drivers) {
61 driver.kind == analysis::DriverKind::Procedural ?
"proc" :
"cont";
65 driver.prefix, kind, loc});
75 void handle(ast::ValueSymbol
const &symbol) {
77 auto value = ValueInfo{.path = symbol.getHierarchicalPath(),
78 .location = symbol.location,
81 auto drivers = analysisManager.getDrivers(symbol);
82 for (
auto const *driver : drivers) {
83 value.drivers.emplace_back(driverPathToString(symbol, *driver),
86 driver->getSourceRange().start());
89 values.emplace_back(std::move(value));
void report(FormatBuffer &buffer)
Renders the collected driver information to the given format buffer.
Definition ReportDrivers.hpp:50
ReportDrivers(ast::Compilation &compilation, analysis::AnalysisManager &analysisManager)
Definition ReportDrivers.hpp:45
void handle(ast::ValueSymbol const &symbol)
Definition ReportDrivers.hpp:75
Definition ReportDrivers.hpp:13
A range over which a symbol is driven.
Definition DriverBitRange.hpp:14
std::vector< Row > Table
Definition Utilities.hpp:33
static auto locationStr(ast::Compilation const &compilation, SourceLocation location)
Return a string representation of a slang SourceLocation.
Definition Utilities.hpp:21
static auto formatTable(FormatBuffer &buffer, const Row &header, const Table &rows, TableFormatConfig cfg={})
Format a table of data into the given format buffer.
Definition Utilities.hpp:44
std::vector< std::string > Row
Definition Utilities.hpp:32