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
+12 -9
View File
@@ -8,21 +8,24 @@
namespace Carbon {
auto MakeField(int line_num, std::string name, const Expression* type)
-> Member* {
auto Member::MakeFieldMember(int line_num, std::string name,
const Expression* type) -> Member* {
auto m = new Member();
m->line_num = line_num;
m->tag = MemberKind::FieldMember;
m->u.field.name = new std::string(std::move(name));
m->u.field.type = type;
m->value = FieldMember({.name = std::move(name), .type = type});
return m;
}
void PrintMember(Member* m) {
switch (m->tag) {
auto Member::GetFieldMember() const -> const FieldMember& {
return std::get<FieldMember>(value);
}
void Member::Print() {
switch (tag()) {
case MemberKind::FieldMember:
std::cout << "var " << *m->u.field.name << " : ";
PrintExp(m->u.field.type);
const auto& field = GetFieldMember();
std::cout << "var " << field.name << " : ";
PrintExp(field.type);
std::cout << ";" << std::endl;
break;
}