slang-netlist  0.10.0
Loading...
Searching...
No Matches
ReportVariables.hpp
Go to the documentation of this file.
1#pragma once
2
4
5#include "slang/analysis/AnalysisManager.h"
6#include "slang/ast/symbols/VariableSymbols.h"
7#include "slang/ast/types/NetType.h"
8
9namespace slang::report {
10
12 std::string name;
13 std::string type;
14 uint64_t width;
15 std::string kind;
16 uint64_t drivers;
17 SourceLocation location;
18};
19
22 : public ReportVisitorBase<ReportVariables, VariableInfo> {
23 analysis::AnalysisManager &analysisManager;
24
25 auto record(ast::ValueSymbol const &symbol, std::string kind) -> void {
26 auto path = symbol.getHierarchicalPath();
27 if (!nameMatches(path)) {
28 return;
29 }
30 items.push_back(VariableInfo{
31 .name = std::move(path),
32 .type = symbol.getType().toString(),
33 .width = symbol.getType().getBitWidth(),
34 .kind = std::move(kind),
35 .drivers = analysisManager.getDrivers(symbol).size(),
36 .location = symbol.location,
37 });
38 }
39
40public:
41 explicit ReportVariables(ast::Compilation &compilation,
42 analysis::AnalysisManager &analysisManager)
43 : ReportVisitorBase(compilation), analysisManager(analysisManager) {}
44
45 auto tableHeader() const -> netlist::Utilities::Row {
46 return {"Name", "Type", "Width", "Kind", "Drivers", "Location"};
47 }
48
50 VariableInfo const &var) const {
51 table.push_back(netlist::Utilities::Row{
52 var.name, var.type, std::to_string(var.width), var.kind,
53 std::to_string(var.drivers), locationStr(var.location)});
54 }
55
56 void emitJsonItem(JsonWriter &writer, VariableInfo const &var) const {
57 writer.startObject();
58 writer.writeProperty("name");
59 writer.writeValue(var.name);
60 writer.writeProperty("type");
61 writer.writeValue(var.type);
62 writer.writeProperty("width");
63 writer.writeValue(var.width);
64 writer.writeProperty("kind");
65 writer.writeValue(var.kind);
66 writer.writeProperty("drivers");
67 writer.writeValue(var.drivers);
68 writer.writeProperty("location");
69 writer.writeValue(locationStr(var.location));
70 writer.endObject();
71 }
72
73 void handle(const ast::VariableSymbol &symbol) { record(symbol, "var"); }
74
75 void handle(const ast::NetSymbol &symbol) {
76 record(symbol, std::string(symbol.netType.name));
77 }
78};
79
80} // namespace slang::report
auto tableHeader() const -> netlist::Utilities::Row
Definition ReportVariables.hpp:45
void handle(const ast::VariableSymbol &symbol)
Definition ReportVariables.hpp:73
void appendItemRows(netlist::Utilities::Table &table, VariableInfo const &var) const
Definition ReportVariables.hpp:49
void emitJsonItem(JsonWriter &writer, VariableInfo const &var) const
Definition ReportVariables.hpp:56
void handle(const ast::NetSymbol &symbol)
Definition ReportVariables.hpp:75
ReportVariables(ast::Compilation &compilation, analysis::AnalysisManager &analysisManager)
Definition ReportVariables.hpp:41
ast::Compilation & compilation
Definition ReportVisitorBase.hpp:35
ReportVisitorBase(ast::Compilation &compilation)
Definition ReportVisitorBase.hpp:60
auto locationStr(SourceLocation loc) const -> std::string
Definition ReportVisitorBase.hpp:40
auto nameMatches(std::string_view name) const -> bool
Definition ReportVisitorBase.hpp:46
std::vector< VariableInfo > items
Definition ReportVisitorBase.hpp:36
Definition Utilities.hpp:16
Definition ReportDrivers.hpp:12
std::vector< Row > Table
Definition Utilities.hpp:33
std::vector< std::string > Row
Definition Utilities.hpp:32
Definition ReportVariables.hpp:11
std::string type
Definition ReportVariables.hpp:13
std::string name
Definition ReportVariables.hpp:12
std::string kind
Definition ReportVariables.hpp:15
uint64_t width
Definition ReportVariables.hpp:14
uint64_t drivers
Definition ReportVariables.hpp:16
SourceLocation location
Definition ReportVariables.hpp:17