14#include "slang/ast/SemanticFacts.h"
15#include "slang/numeric/ConstantValue.h"
94 -> std::optional<OperationKind>;
112 :
ID(nextID.fetch_add(1, std::memory_order_relaxed)),
kind(
kind) {};
116 template <
typename T>
auto as() -> T & {
117 SLANG_ASSERT(T::isKind(
kind));
118 return *(
static_cast<T *
>(
this));
121 template <
typename T>
auto as() const -> const T & {
122 SLANG_ASSERT(T::isKind(
kind));
123 return const_cast<T &
>(*(
static_cast<const T *
>(
this)));
139 static std::atomic<size_t> nextID;
Definition NetlistNode.hpp:239
Assignment(TextLocation location)
Definition NetlistNode.hpp:243
auto getLocation() const -> std::optional< TextLocation > override
Definition NetlistNode.hpp:250
static auto isKind(NodeKind otherKind) -> bool
Definition NetlistNode.hpp:246
TextLocation location
Definition NetlistNode.hpp:241
Definition NetlistNode.hpp:271
auto getLocation() const -> std::optional< TextLocation > override
Definition NetlistNode.hpp:282
TextLocation location
Definition NetlistNode.hpp:273
static auto isKind(NodeKind otherKind) -> bool
Definition NetlistNode.hpp:278
Case(TextLocation location)
Definition NetlistNode.hpp:275
Definition NetlistNode.hpp:255
Conditional(TextLocation location)
Definition NetlistNode.hpp:259
TextLocation location
Definition NetlistNode.hpp:257
auto getLocation() const -> std::optional< TextLocation > override
Definition NetlistNode.hpp:266
static auto isKind(NodeKind otherKind) -> bool
Definition NetlistNode.hpp:262
Definition NetlistNode.hpp:298
ConstantValue value
Definition NetlistNode.hpp:300
TextLocation location
Definition NetlistNode.hpp:302
Constant(ConstantValue value, uint64_t width, TextLocation location)
Definition NetlistNode.hpp:304
static auto isKind(NodeKind otherKind) -> bool
Definition NetlistNode.hpp:308
uint64_t width
Definition NetlistNode.hpp:301
auto getLocation() const -> std::optional< TextLocation > override
Definition NetlistNode.hpp:312
Definition NetlistNode.hpp:287
static auto isKind(NodeKind otherKind) -> bool
Definition NetlistNode.hpp:291
Merge()
Definition NetlistNode.hpp:289
~NetlistNode() override=default
bool placeholder
Definition NetlistNode.hpp:109
friend class NetlistBuilder
Definition NetlistNode.hpp:99
NodeKind kind
Definition NetlistNode.hpp:103
size_t ID
Definition NetlistNode.hpp:102
virtual auto getHierarchicalPath() const -> std::optional< std::string_view >
Definition NetlistNode.hpp:126
virtual auto getBounds() const -> std::optional< DriverBitRange >
Definition NetlistNode.hpp:130
auto as() -> T &
Definition NetlistNode.hpp:116
virtual auto getLocation() const -> std::optional< TextLocation >
Definition NetlistNode.hpp:134
auto as() const -> const T &
Definition NetlistNode.hpp:121
NetlistNode(NodeKind kind)
Definition NetlistNode.hpp:111
auto inDegree() const -> size_t
Definition DirectedGraph.hpp:271
Definition NetlistNode.hpp:321
static auto isKind(NodeKind otherKind) -> bool
Definition NetlistNode.hpp:333
bool isSigned
Definition NetlistNode.hpp:325
uint64_t width
Definition NetlistNode.hpp:324
TextLocation location
Definition NetlistNode.hpp:326
OperationKind op
Definition NetlistNode.hpp:323
auto getLocation() const -> std::optional< TextLocation > override
Definition NetlistNode.hpp:337
Operation(OperationKind op, uint64_t width, bool isSigned, TextLocation location)
Definition NetlistNode.hpp:328
Definition NetlistNode.hpp:142
ast::ArgumentDirection direction
Definition NetlistNode.hpp:147
auto getBounds() const -> std::optional< DriverBitRange > override
Definition NetlistNode.hpp:170
static auto isKind(NodeKind otherKind) -> bool
Definition NetlistNode.hpp:156
auto isInput() const
Definition NetlistNode.hpp:160
std::string name
Definition NetlistNode.hpp:144
DriverBitRange bounds
Definition NetlistNode.hpp:148
auto isDriven() const -> bool
Return true if any other node drives this port.
Definition NetlistNode.hpp:164
auto getHierarchicalPath() const -> std::optional< std::string_view > override
Definition NetlistNode.hpp:166
auto isOutput() const
Definition NetlistNode.hpp:161
std::string hierarchicalPath
Definition NetlistNode.hpp:145
TextLocation location
Definition NetlistNode.hpp:146
auto getLocation() const -> std::optional< TextLocation > override
Definition NetlistNode.hpp:174
Port(std::string name, std::string hierarchicalPath, TextLocation location, ast::ArgumentDirection direction, DriverBitRange bounds)
Definition NetlistNode.hpp:150
Definition NetlistNode.hpp:209
std::string name
Definition NetlistNode.hpp:211
State(std::string name, std::string hierarchicalPath, TextLocation location, DriverBitRange bounds)
Definition NetlistNode.hpp:216
std::string hierarchicalPath
Definition NetlistNode.hpp:212
TextLocation location
Definition NetlistNode.hpp:213
static auto isKind(NodeKind otherKind) -> bool
Definition NetlistNode.hpp:222
DriverBitRange bounds
Definition NetlistNode.hpp:214
auto getHierarchicalPath() const -> std::optional< std::string_view > override
Definition NetlistNode.hpp:226
auto getLocation() const -> std::optional< TextLocation > override
Definition NetlistNode.hpp:234
auto getBounds() const -> std::optional< DriverBitRange > override
Definition NetlistNode.hpp:230
Definition NetlistNode.hpp:179
auto getLocation() const -> std::optional< TextLocation > override
Definition NetlistNode.hpp:204
auto getBounds() const -> std::optional< DriverBitRange > override
Definition NetlistNode.hpp:200
auto getHierarchicalPath() const -> std::optional< std::string_view > override
Definition NetlistNode.hpp:196
std::string name
Definition NetlistNode.hpp:181
Variable(std::string name, std::string hierarchicalPath, TextLocation location, DriverBitRange bounds)
Definition NetlistNode.hpp:186
static auto isKind(NodeKind otherKind) -> bool
Definition NetlistNode.hpp:192
std::string hierarchicalPath
Definition NetlistNode.hpp:182
DriverBitRange bounds
Definition NetlistNode.hpp:184
TextLocation location
Definition NetlistNode.hpp:183
Definition FormatBuffer.hpp:9
auto operationKindFromString(std::string_view str) -> std::optional< OperationKind >
The operation kind named by str, or nullopt if it names none.
auto toSymbol(OperationKind kind) -> std::string_view
OperationKind
Definition NetlistNode.hpp:35
@ UnaryPlus
Definition NetlistNode.hpp:37
@ Divide
Definition NetlistNode.hpp:51
@ LogicalAnd
Definition NetlistNode.hpp:72
@ CaseInequality
Definition NetlistNode.hpp:63
@ LogicalShiftRight
Definition NetlistNode.hpp:78
@ WildcardEquality
Definition NetlistNode.hpp:64
@ LogicalEquivalence
Definition NetlistNode.hpp:75
@ Subtract
Definition NetlistNode.hpp:49
@ LessThanEqual
Definition NetlistNode.hpp:70
@ LogicalNot
Definition NetlistNode.hpp:40
@ BitwiseXnor
Definition NetlistNode.hpp:58
@ ReductionOr
Definition NetlistNode.hpp:42
@ GreaterThanEqual
Definition NetlistNode.hpp:68
@ BitwiseAnd
Definition NetlistNode.hpp:55
@ LogicalOr
Definition NetlistNode.hpp:73
@ WildcardInequality
Definition NetlistNode.hpp:65
@ Mod
Definition NetlistNode.hpp:52
@ BitwiseOr
Definition NetlistNode.hpp:56
@ ReductionNand
Definition NetlistNode.hpp:44
@ Inequality
Definition NetlistNode.hpp:61
@ UnaryMinus
Definition NetlistNode.hpp:38
@ Equality
Definition NetlistNode.hpp:60
@ LogicalShiftLeft
Definition NetlistNode.hpp:77
@ CaseEquality
Definition NetlistNode.hpp:62
@ ArithmeticShiftRight
Definition NetlistNode.hpp:80
@ ArithmeticShiftLeft
Definition NetlistNode.hpp:79
@ LessThan
Definition NetlistNode.hpp:69
@ BitwiseNot
Definition NetlistNode.hpp:39
@ BitwiseXor
Definition NetlistNode.hpp:57
@ Power
Definition NetlistNode.hpp:53
@ ReductionXnor
Definition NetlistNode.hpp:46
@ ReductionNor
Definition NetlistNode.hpp:45
@ Multiply
Definition NetlistNode.hpp:50
@ ReductionXor
Definition NetlistNode.hpp:43
@ ReductionAnd
Definition NetlistNode.hpp:41
@ Add
Definition NetlistNode.hpp:48
@ LogicalImplication
Definition NetlistNode.hpp:74
@ GreaterThan
Definition NetlistNode.hpp:67
NodeKind
Definition NetlistNode.hpp:19
@ Case
Definition NetlistNode.hpp:25
@ Operation
Definition NetlistNode.hpp:29
@ 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