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
+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,