Use a lambda for tag's visit (#645)

Also shifts declaration order a little for [style](https://google.github.io/styleguide/cppguide.html#Declaration_Order); moving line_num down (data members after methods) and tag() down (factory functions before instance members).
This commit is contained in:
Jon Meow
2021-07-13 13:53:48 -07:00
committed by GitHub
parent 05c2e610ba
commit b03d3cdbb0
6 changed files with 14 additions and 50 deletions
-15
View File
@@ -8,21 +8,6 @@
namespace Carbon {
namespace {
struct TagVisitor {
template <typename Alternative>
auto operator()(const Alternative&) -> ExpressionKind {
return Alternative::Kind;
}
};
} // namespace
auto Expression::tag() const -> ExpressionKind {
return std::visit(TagVisitor(), value);
}
auto Expression::GetIdentifierExpression() const
-> const IdentifierExpression& {
return std::get<IdentifierExpression>(value);
+6 -3
View File
@@ -134,9 +134,6 @@ struct TypeTypeLiteral {
};
struct Expression {
int line_num;
auto tag() const -> ExpressionKind;
static auto MakeIdentifierExpression(int line_num, std::string var)
-> const Expression*;
static auto MakeBindingExpression(int line_num, std::string var,
@@ -176,6 +173,12 @@ struct Expression {
auto GetCallExpression() const -> const CallExpression&;
auto GetFunctionTypeLiteral() const -> const FunctionTypeLiteral&;
inline auto tag() const -> ExpressionKind {
return std::visit([](const auto& t) { return t.Kind; }, value);
}
int line_num;
private:
std::variant<IdentifierExpression, FieldAccessExpression, IndexExpression,
BindingExpression, IntLiteral, BoolLiteral, TupleLiteral,
@@ -17,21 +17,6 @@
namespace Carbon {
namespace {
struct TagVisitor {
template <typename Alternative>
auto operator()(const Alternative&) -> ActionKind {
return Alternative::Kind;
}
};
} // namespace
auto Action::tag() const -> ActionKind {
return std::visit(TagVisitor(), value);
}
auto Action::MakeLValAction(const Expression* e) -> Action* {
auto* act = new Action();
act->value = LValAction({.exp = e});
+4 -2
View File
@@ -43,8 +43,6 @@ struct ValAction {
};
struct Action {
auto tag() const -> ActionKind;
static auto MakeLValAction(const Expression* e) -> Action*;
static auto MakeExpressionAction(const Expression* e) -> Action*;
static auto MakeStatementAction(const Statement* s) -> Action*;
@@ -59,6 +57,10 @@ struct Action {
void Print(std::ostream& out);
inline auto tag() const -> ActionKind {
return std::visit([](const auto& t) { return t.Kind; }, value);
}
// The position or state of the action. Starts at 0 and goes up to the number
// of subexpressions.
//
@@ -12,19 +12,6 @@
namespace Carbon {
namespace {
struct TagVisitor {
template <typename Alternative>
auto operator()(const Alternative&) -> ValKind {
return Alternative::Kind;
}
};
} // namespace
auto Value::tag() const -> ValKind { return std::visit(TagVisitor(), value); }
auto Value::GetIntValue() const -> int {
return std::get<IntValue>(value).value;
}
+4 -2
View File
@@ -163,8 +163,6 @@ struct ContinuationValue {
};
struct Value {
auto tag() const -> ValKind;
// Constructors
// Return a first-class continuation represented by the
@@ -216,6 +214,10 @@ struct Value {
auto GetChoiceType() const -> const ChoiceType&;
auto GetContinuationValue() const -> const ContinuationValue&;
inline auto tag() const -> ValKind {
return std::visit([](const auto& t) { return t.Kind; }, value);
}
private:
std::variant<IntValue, FunctionValue, PointerValue, BoolValue, StructValue,
AlternativeValue, TupleValue, IntType, BoolType, TypeType,