8 #include <hilti/ast/attribute.h> 9 #include <hilti/ast/declarations/expression.h> 10 #include <hilti/ast/expression.h> 11 #include <hilti/ast/expressions/keyword.h> 12 #include <hilti/ast/function.h> 13 #include <hilti/ast/id.h> 14 #include <hilti/ast/type.h> 15 #include <hilti/ast/types/function.h> 16 #include <hilti/ast/types/integer.h> 17 #include <hilti/ast/types/unknown.h> 19 #include <spicy/ast/aliases.h> 30 Bits(
ID id,
int lower,
int upper,
int field_width, std::optional<AttributeSet> attrs = {},
Meta m =
Meta())
34 hilti::type::auto_, std::move(attrs)),
38 _field_width(field_width) {}
40 const auto& id()
const {
return child<ID>(0); }
41 auto lower()
const {
return _lower; }
42 auto upper()
const {
return _upper; }
43 auto fieldWidth()
const {
return _field_width; }
47 const auto& itemType()
const {
return child<Type>(2); }
51 return node::Properties{
54 {
"field_width", _field_width},
59 void setItemType(
Type t) {
childs()[2] = std::move(t); }
61 bool operator==(
const Bits& other)
const {
62 return id() == other.id() && _lower == other._lower && _upper == other._upper &&
63 _field_width == other._field_width && itemType() == other.itemType() &&
64 attributes() == other.attributes();
84 : TypeBase(nodes(
type::UnsignedInteger(width, m), hilti::type::auto_, std::move(bits)), m), _width(width) {}
86 : TypeBase({hilti::type::unknown, hilti::type::unknown}, std::move(m)), _wildcard(
true) {}
88 int width()
const {
return _width; }
89 auto bits()
const {
return childs<bitfield::Bits>(2, -1); }
91 std::optional<int> bitsIndex(
const ID&
id)
const;
92 const Type& parseType()
const {
return child<Type>(0); }
93 const Type& type()
const {
return child<Type>(1); }
96 void setType(
Type t) {
childs()[1] = std::move(t); }
98 bool operator==(
const Bitfield& other)
const {
return width() == other.width() && bits() == other.bits(); }
101 auto isEqual(
const Type& other)
const {
return node::isEqual(
this, other); }
113 bool _wildcard =
false;
auto isEqual(const Type &other) const
Definition: bitfield.h:101
NodeBase(Meta meta)
Definition: node.h:365
auto typeParameters() const
Definition: bitfield.h:105
Definition: bitfield.h:27
auto properties() const
Definition: bitfield.h:50
const Node none
Definition: node.cc:14
Definition: bitfield.h:78
void addChild(Node n)
Definition: node.h:459
static Declaration createDollarDollarDeclaration(Type t)
Definition: keyword.h:64
Definition: attribute.h:145
Definition: optional-ref.h:22
Definition: expression.h:17
auto _isResolved(ResolvedState *rstate) const
Definition: bitfield.h:103
auto isWildcard() const
Definition: bitfield.h:107
auto properties() const
Definition: bitfield.h:109
Definition: node-ref.h:44
const auto & childs() const
Definition: node.h:470
std::vector< T > slice(const std::vector< T > &v, int begin, int end=-1)
Definition: util.h:154