@@ -1588,7 +1588,7 @@ struct TupleField
1588
1588
1589
1589
std::string as_string () const ;
1590
1590
1591
- Analysis::NodeMapping get_mappings () { return mappings; }
1591
+ Analysis::NodeMapping get_mappings () const { return mappings; }
1592
1592
1593
1593
Location get_locus () const { return locus; }
1594
1594
@@ -1644,12 +1644,19 @@ class TupleStruct : public Struct
1644
1644
class EnumItem : public Item
1645
1645
{
1646
1646
Identifier variant_name;
1647
-
1648
1647
Location locus;
1649
1648
1650
1649
public:
1651
1650
virtual ~EnumItem () {}
1652
1651
1652
+ enum EnumItemKind
1653
+ {
1654
+ Named,
1655
+ Tuple,
1656
+ Struct,
1657
+ Discriminant,
1658
+ };
1659
+
1653
1660
EnumItem (Analysis::NodeMapping mappings, Identifier variant_name,
1654
1661
AST::AttrVec outer_attrs, Location locus)
1655
1662
: Item (std::move (mappings), std::move (outer_attrs)),
@@ -1663,6 +1670,7 @@ class EnumItem : public Item
1663
1670
}
1664
1671
1665
1672
virtual std::string as_string () const override ;
1673
+ virtual EnumItemKind get_enum_item_kind () const { return Named; };
1666
1674
1667
1675
// not pure virtual as not abstract
1668
1676
void accept_vis (HIRFullVisitor &vis) override ;
@@ -1687,6 +1695,11 @@ class EnumItemTuple : public EnumItem
1687
1695
// Returns whether tuple enum item has tuple fields.
1688
1696
bool has_tuple_fields () const { return !tuple_fields.empty (); }
1689
1697
1698
+ EnumItemKind get_enum_item_kind () const override
1699
+ {
1700
+ return EnumItemKind::Tuple;
1701
+ }
1702
+
1690
1703
EnumItemTuple (Analysis::NodeMapping mappings, Identifier variant_name,
1691
1704
std::vector<TupleField> tuple_fields, AST::AttrVec outer_attrs,
1692
1705
Location locus)
@@ -1720,6 +1733,11 @@ class EnumItemStruct : public EnumItem
1720
1733
// Returns whether struct enum item has struct fields.
1721
1734
bool has_struct_fields () const { return !struct_fields.empty (); }
1722
1735
1736
+ EnumItemKind get_enum_item_kind () const override
1737
+ {
1738
+ return EnumItemKind::Struct;
1739
+ }
1740
+
1723
1741
EnumItemStruct (Analysis::NodeMapping mappings, Identifier variant_name,
1724
1742
std::vector<StructField> struct_fields,
1725
1743
AST::AttrVec outer_attrs, Location locus)
@@ -1777,6 +1795,11 @@ class EnumItemDiscriminant : public EnumItem
1777
1795
EnumItemDiscriminant (EnumItemDiscriminant &&other) = default;
1778
1796
EnumItemDiscriminant &operator = (EnumItemDiscriminant &&other) = default ;
1779
1797
1798
+ EnumItemKind get_enum_item_kind () const override
1799
+ {
1800
+ return EnumItemKind::Discriminant;
1801
+ }
1802
+
1780
1803
std::string as_string () const override ;
1781
1804
1782
1805
void accept_vis (HIRFullVisitor &vis) override ;
0 commit comments