mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-28 19:34:54 +01:00
Switch Member to use inheritance+cast (#713)
This commit is contained in:
@@ -5,26 +5,17 @@
|
||||
#include "executable_semantics/ast/member.h"
|
||||
|
||||
#include "executable_semantics/common/arena.h"
|
||||
#include "llvm/Support/Casting.h"
|
||||
|
||||
namespace Carbon {
|
||||
|
||||
auto Member::MakeFieldMember(int line_num, const BindingPattern* binding)
|
||||
-> Member* {
|
||||
auto m = global_arena->New<Member>();
|
||||
m->line_num = line_num;
|
||||
m->value = FieldMember({.binding = binding});
|
||||
return m;
|
||||
}
|
||||
|
||||
auto Member::GetFieldMember() const -> const FieldMember& {
|
||||
return std::get<FieldMember>(value);
|
||||
}
|
||||
using llvm::cast;
|
||||
|
||||
void Member::Print(llvm::raw_ostream& out) const {
|
||||
switch (tag()) {
|
||||
case MemberKind::FieldMember:
|
||||
const auto& field = GetFieldMember();
|
||||
out << "var " << field.binding << ";\n";
|
||||
switch (Tag()) {
|
||||
case Kind::FieldMember:
|
||||
const auto& field = cast<FieldMember>(*this);
|
||||
out << "var " << field.Binding() << ";\n";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user