mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-06 08:14:43 +01:00
Switch Member to variant in anticipation of more kinds. (#656)
Note this overlaps a little with #644's Member changes, but not too badly.
This commit is contained in:
@@ -13,21 +13,29 @@ namespace Carbon {
|
||||
|
||||
enum class MemberKind { FieldMember };
|
||||
|
||||
struct Member {
|
||||
int line_num;
|
||||
MemberKind tag;
|
||||
union {
|
||||
struct {
|
||||
std::string* name;
|
||||
const Expression* type;
|
||||
} field;
|
||||
} u;
|
||||
struct FieldMember {
|
||||
static constexpr MemberKind Kind = MemberKind::FieldMember;
|
||||
std::string name;
|
||||
const Expression* type;
|
||||
};
|
||||
|
||||
auto MakeField(int line_num, std::string name, const Expression* type)
|
||||
-> Member*;
|
||||
struct Member {
|
||||
static auto MakeFieldMember(int line_num, std::string name,
|
||||
const Expression* type) -> Member*;
|
||||
|
||||
void PrintMember(Member* m);
|
||||
auto GetFieldMember() const -> const FieldMember&;
|
||||
|
||||
void Print();
|
||||
|
||||
inline auto tag() const -> MemberKind {
|
||||
return std::visit([](const auto& t) { return t.Kind; }, value);
|
||||
}
|
||||
|
||||
int line_num;
|
||||
|
||||
private:
|
||||
std::variant<FieldMember> value;
|
||||
};
|
||||
|
||||
} // namespace Carbon
|
||||
|
||||
|
||||
Reference in New Issue
Block a user