8 #include <hilti/ast/attribute.h> 9 #include <hilti/ast/expression.h> 10 #include <hilti/ast/function.h> 11 #include <hilti/ast/id.h> 12 #include <hilti/ast/type.h> 13 #include <hilti/ast/types/function.h> 14 #include <hilti/ast/types/integer.h> 15 #include <hilti/ast/types/unknown.h> 17 #include <spicy/ast/aliases.h> 28 Bits(
ID id,
int lower,
int upper,
int field_width, std::optional<AttributeSet> attrs = {},
Meta m =
Meta())
29 :
hilti::NodeBase(nodes(std::move(
id), std::move(attrs)), std::move(m)),
32 _field_width(field_width) {}
34 const auto& id()
const {
return child<ID>(0); }
35 auto lower()
const {
return _lower; }
36 auto upper()
const {
return _upper; }
42 return node::Properties{
45 {
"field_width", _field_width},
49 bool operator==(
const Bits& other)
const {
50 return id() == other.id() && _lower == other._lower && _upper == other._upper &&
51 _field_width == other._field_width && attributes() == other.attributes();
63 x.childs()[1] = attrs;
84 : TypeBase(nodes(std::move(bits)), std::move(m)), _width(width) {}
87 int width()
const {
return _width; }
88 auto bits()
const {
return childsOfType<bitfield::Bits>(); }
89 std::optional<bitfield::Bits> bits(
const ID&
id)
const;
90 std::optional<int> bitsIndex(
const ID&
id)
const;
93 bool operator==(
const Bitfield& other)
const {
return width() == other.width() && bits() == other.bits(); }
96 auto _bitsNodes() {
return nodesOfType<bitfield::Bits>(); }
99 auto isEqual(
const Type& other)
const {
return node::isEqual(
this, other); }
115 auto x = Type(s)._clone().as<
Bitfield>();
122 bool _wildcard =
false;
auto isEqual(const Type &other) const
Definition: bitfield.h:99
NodeBase(Meta meta)
Definition: node.h:325
auto typeParameters() const
Definition: bitfield.h:101
auto & childs() const
Definition: node.h:445
Definition: bitfield.h:25
auto properties() const
Definition: bitfield.h:41
const Node none
Definition: node.cc:12
auto _bitsNodes()
Definition: bitfield.h:96
Definition: bitfield.h:78
void addChild(Node n)
Definition: node.h:434
Definition: attribute.h:159
static Bitfield addField(const Bitfield &s, bitfield::Bits f)
Definition: bitfield.h:114
auto isWildcard() const
Definition: bitfield.h:103
auto properties() const
Definition: bitfield.h:105
static Bits setAttributes(const Bits &f, const AttributeSet &attrs)
Definition: bitfield.h:61
std::vector< T > slice(const std::vector< T > &v, int begin, int end=-1)
Definition: util.h:196