14#include "slang/ast/SemanticFacts.h"
15#include "slang/numeric/ConstantValue.h"
41 :
ID(nextID.fetch_add(1, std::memory_order_relaxed)),
kind(
kind) {};
45 template <
typename T>
auto as() -> T & {
46 SLANG_ASSERT(T::isKind(
kind));
47 return *(
static_cast<T *
>(
this));
50 template <
typename T>
auto as() const -> const T & {
51 SLANG_ASSERT(T::isKind(
kind));
52 return const_cast<T &
>(*(
static_cast<const T *
>(
this)));
68 static std::atomic<size_t> nextID;
Definition NetlistNode.hpp:168
Assignment(TextLocation location)
Definition NetlistNode.hpp:172
auto getLocation() const -> std::optional< TextLocation > override
Definition NetlistNode.hpp:179
static auto isKind(NodeKind otherKind) -> bool
Definition NetlistNode.hpp:175
TextLocation location
Definition NetlistNode.hpp:170
Definition NetlistNode.hpp:200
auto getLocation() const -> std::optional< TextLocation > override
Definition NetlistNode.hpp:211
TextLocation location
Definition NetlistNode.hpp:202
static auto isKind(NodeKind otherKind) -> bool
Definition NetlistNode.hpp:207
Case(TextLocation location)
Definition NetlistNode.hpp:204
Definition NetlistNode.hpp:184
Conditional(TextLocation location)
Definition NetlistNode.hpp:188
TextLocation location
Definition NetlistNode.hpp:186
auto getLocation() const -> std::optional< TextLocation > override
Definition NetlistNode.hpp:195
static auto isKind(NodeKind otherKind) -> bool
Definition NetlistNode.hpp:191
Definition NetlistNode.hpp:227
ConstantValue value
Definition NetlistNode.hpp:229
TextLocation location
Definition NetlistNode.hpp:231
Constant(ConstantValue value, uint64_t width, TextLocation location)
Definition NetlistNode.hpp:233
static auto isKind(NodeKind otherKind) -> bool
Definition NetlistNode.hpp:237
uint64_t width
Definition NetlistNode.hpp:230
auto getLocation() const -> std::optional< TextLocation > override
Definition NetlistNode.hpp:241
Definition NetlistNode.hpp:216
static auto isKind(NodeKind otherKind) -> bool
Definition NetlistNode.hpp:220
Merge()
Definition NetlistNode.hpp:218
~NetlistNode() override=default
friend class NetlistBuilder
Definition NetlistNode.hpp:34
NodeKind kind
Definition NetlistNode.hpp:38
size_t ID
Definition NetlistNode.hpp:37
virtual auto getHierarchicalPath() const -> std::optional< std::string_view >
Definition NetlistNode.hpp:55
virtual auto getBounds() const -> std::optional< DriverBitRange >
Definition NetlistNode.hpp:59
auto as() -> T &
Definition NetlistNode.hpp:45
virtual auto getLocation() const -> std::optional< TextLocation >
Definition NetlistNode.hpp:63
auto as() const -> const T &
Definition NetlistNode.hpp:50
NetlistNode(NodeKind kind)
Definition NetlistNode.hpp:40
auto inDegree() const -> size_t
Definition DirectedGraph.hpp:259
Definition NetlistNode.hpp:71
ast::ArgumentDirection direction
Definition NetlistNode.hpp:76
auto getBounds() const -> std::optional< DriverBitRange > override
Definition NetlistNode.hpp:99
static auto isKind(NodeKind otherKind) -> bool
Definition NetlistNode.hpp:85
auto isInput() const
Definition NetlistNode.hpp:89
std::string name
Definition NetlistNode.hpp:73
DriverBitRange bounds
Definition NetlistNode.hpp:77
auto isDriven() const -> bool
Return true if any other node drives this port.
Definition NetlistNode.hpp:93
auto getHierarchicalPath() const -> std::optional< std::string_view > override
Definition NetlistNode.hpp:95
auto isOutput() const
Definition NetlistNode.hpp:90
std::string hierarchicalPath
Definition NetlistNode.hpp:74
TextLocation location
Definition NetlistNode.hpp:75
auto getLocation() const -> std::optional< TextLocation > override
Definition NetlistNode.hpp:103
Port(std::string name, std::string hierarchicalPath, TextLocation location, ast::ArgumentDirection direction, DriverBitRange bounds)
Definition NetlistNode.hpp:79
Definition NetlistNode.hpp:138
std::string name
Definition NetlistNode.hpp:140
State(std::string name, std::string hierarchicalPath, TextLocation location, DriverBitRange bounds)
Definition NetlistNode.hpp:145
std::string hierarchicalPath
Definition NetlistNode.hpp:141
TextLocation location
Definition NetlistNode.hpp:142
static auto isKind(NodeKind otherKind) -> bool
Definition NetlistNode.hpp:151
DriverBitRange bounds
Definition NetlistNode.hpp:143
auto getHierarchicalPath() const -> std::optional< std::string_view > override
Definition NetlistNode.hpp:155
auto getLocation() const -> std::optional< TextLocation > override
Definition NetlistNode.hpp:163
auto getBounds() const -> std::optional< DriverBitRange > override
Definition NetlistNode.hpp:159
Definition NetlistNode.hpp:108
auto getLocation() const -> std::optional< TextLocation > override
Definition NetlistNode.hpp:133
auto getBounds() const -> std::optional< DriverBitRange > override
Definition NetlistNode.hpp:129
auto getHierarchicalPath() const -> std::optional< std::string_view > override
Definition NetlistNode.hpp:125
std::string name
Definition NetlistNode.hpp:110
Variable(std::string name, std::string hierarchicalPath, TextLocation location, DriverBitRange bounds)
Definition NetlistNode.hpp:115
static auto isKind(NodeKind otherKind) -> bool
Definition NetlistNode.hpp:121
std::string hierarchicalPath
Definition NetlistNode.hpp:111
DriverBitRange bounds
Definition NetlistNode.hpp:113
TextLocation location
Definition NetlistNode.hpp:112
Definition Utilities.hpp:16
NodeKind
Definition NetlistNode.hpp:19
@ Case
Definition NetlistNode.hpp:25
@ State
Definition NetlistNode.hpp:27
@ Variable
Definition NetlistNode.hpp:22
@ Port
Definition NetlistNode.hpp:21
@ Merge
Definition NetlistNode.hpp:26
@ None
Definition NetlistNode.hpp:20
@ Conditional
Definition NetlistNode.hpp:24
@ Constant
Definition NetlistNode.hpp:28
@ Assignment
Definition NetlistNode.hpp:23
A range over which a symbol is driven.
Definition DriverBitRange.hpp:14
Definition TextLocation.hpp:71