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:
Jon Meow
2021-07-15 15:23:52 -07:00
committed by GitHub
parent 467b58abe9
commit ada2be2d16
6 changed files with 54 additions and 37 deletions
+20 -12
View File
@@ -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