14#include "slang/ast/SemanticFacts.h"
15#include "slang/numeric/ConstantValue.h"
47 :
ID(nextID.fetch_add(1, std::memory_order_relaxed)),
kind(
kind) {};
51 template <
typename T>
auto as() -> T & {
52 SLANG_ASSERT(T::isKind(
kind));
53 return *(
static_cast<T *
>(
this));
56 template <
typename T>
auto as() const -> const T & {
57 SLANG_ASSERT(T::isKind(
kind));
58 return const_cast<T &
>(*(
static_cast<const T *
>(
this)));
74 static std::atomic<size_t> nextID;
Definition NetlistNode.hpp:174
Assignment(TextLocation location)
Definition NetlistNode.hpp:178
auto getLocation() const -> std::optional< TextLocation > override
Definition NetlistNode.hpp:185
static auto isKind(NodeKind otherKind) -> bool
Definition NetlistNode.hpp:181
TextLocation location
Definition NetlistNode.hpp:176
Definition NetlistNode.hpp:206
auto getLocation() const -> std::optional< TextLocation > override
Definition NetlistNode.hpp:217
TextLocation location
Definition NetlistNode.hpp:208
static auto isKind(NodeKind otherKind) -> bool
Definition NetlistNode.hpp:213
Case(TextLocation location)
Definition NetlistNode.hpp:210
Definition NetlistNode.hpp:190
Conditional(TextLocation location)
Definition NetlistNode.hpp:194
TextLocation location
Definition NetlistNode.hpp:192
auto getLocation() const -> std::optional< TextLocation > override
Definition NetlistNode.hpp:201
static auto isKind(NodeKind otherKind) -> bool
Definition NetlistNode.hpp:197
Definition NetlistNode.hpp:233
ConstantValue value
Definition NetlistNode.hpp:235
TextLocation location
Definition NetlistNode.hpp:237
Constant(ConstantValue value, uint64_t width, TextLocation location)
Definition NetlistNode.hpp:239
static auto isKind(NodeKind otherKind) -> bool
Definition NetlistNode.hpp:243
uint64_t width
Definition NetlistNode.hpp:236
auto getLocation() const -> std::optional< TextLocation > override
Definition NetlistNode.hpp:247
Definition NetlistNode.hpp:222
static auto isKind(NodeKind otherKind) -> bool
Definition NetlistNode.hpp:226
Merge()
Definition NetlistNode.hpp:224
~NetlistNode() override=default
bool placeholder
Definition NetlistNode.hpp:44
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:61
virtual auto getBounds() const -> std::optional< DriverBitRange >
Definition NetlistNode.hpp:65
auto as() -> T &
Definition NetlistNode.hpp:51
virtual auto getLocation() const -> std::optional< TextLocation >
Definition NetlistNode.hpp:69
auto as() const -> const T &
Definition NetlistNode.hpp:56
NetlistNode(NodeKind kind)
Definition NetlistNode.hpp:46
auto inDegree() const -> size_t
Definition DirectedGraph.hpp:271
Definition NetlistNode.hpp:77
ast::ArgumentDirection direction
Definition NetlistNode.hpp:82
auto getBounds() const -> std::optional< DriverBitRange > override
Definition NetlistNode.hpp:105
static auto isKind(NodeKind otherKind) -> bool
Definition NetlistNode.hpp:91
auto isInput() const
Definition NetlistNode.hpp:95
std::string name
Definition NetlistNode.hpp:79
DriverBitRange bounds
Definition NetlistNode.hpp:83
auto isDriven() const -> bool
Return true if any other node drives this port.
Definition NetlistNode.hpp:99
auto getHierarchicalPath() const -> std::optional< std::string_view > override
Definition NetlistNode.hpp:101
auto isOutput() const
Definition NetlistNode.hpp:96
std::string hierarchicalPath
Definition NetlistNode.hpp:80
TextLocation location
Definition NetlistNode.hpp:81
auto getLocation() const -> std::optional< TextLocation > override
Definition NetlistNode.hpp:109
Port(std::string name, std::string hierarchicalPath, TextLocation location, ast::ArgumentDirection direction, DriverBitRange bounds)
Definition NetlistNode.hpp:85
Definition NetlistNode.hpp:144
std::string name
Definition NetlistNode.hpp:146
State(std::string name, std::string hierarchicalPath, TextLocation location, DriverBitRange bounds)
Definition NetlistNode.hpp:151
std::string hierarchicalPath
Definition NetlistNode.hpp:147
TextLocation location
Definition NetlistNode.hpp:148
static auto isKind(NodeKind otherKind) -> bool
Definition NetlistNode.hpp:157
DriverBitRange bounds
Definition NetlistNode.hpp:149
auto getHierarchicalPath() const -> std::optional< std::string_view > override
Definition NetlistNode.hpp:161
auto getLocation() const -> std::optional< TextLocation > override
Definition NetlistNode.hpp:169
auto getBounds() const -> std::optional< DriverBitRange > override
Definition NetlistNode.hpp:165
Definition NetlistNode.hpp:114
auto getLocation() const -> std::optional< TextLocation > override
Definition NetlistNode.hpp:139
auto getBounds() const -> std::optional< DriverBitRange > override
Definition NetlistNode.hpp:135
auto getHierarchicalPath() const -> std::optional< std::string_view > override
Definition NetlistNode.hpp:131
std::string name
Definition NetlistNode.hpp:116
Variable(std::string name, std::string hierarchicalPath, TextLocation location, DriverBitRange bounds)
Definition NetlistNode.hpp:121
static auto isKind(NodeKind otherKind) -> bool
Definition NetlistNode.hpp:127
std::string hierarchicalPath
Definition NetlistNode.hpp:117
DriverBitRange bounds
Definition NetlistNode.hpp:119
TextLocation location
Definition NetlistNode.hpp:118
Definition FormatBuffer.hpp:9
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