Re-land of skslc switch support
This reverts commit 7d975fc200bbbea991ec4c04c08f3a5ea7b847af.
BUG=skia:
Change-Id: I57521f7a291a35cfed58d623ea4f8da29582d2c5
Reviewed-on: https://skia-review.googlesource.com/8993
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
diff --git a/src/sksl/ast/SkSLASTSwitchStatement.h b/src/sksl/ast/SkSLASTSwitchStatement.h
new file mode 100644
index 0000000..3031a7d
--- /dev/null
+++ b/src/sksl/ast/SkSLASTSwitchStatement.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef SKSL_ASTSWITCHSTATEMENT
+#define SKSL_ASTSWITCHSTATEMENT
+
+#include "SkSLASTStatement.h"
+#include "SkSLASTSwitchCase.h"
+
+namespace SkSL {
+
+/**
+ * A 'switch' statement.
+ */
+struct ASTSwitchStatement : public ASTStatement {
+ ASTSwitchStatement(Position position, std::unique_ptr<ASTExpression> value,
+ std::vector<std::unique_ptr<ASTSwitchCase>> cases)
+ : INHERITED(position, kSwitch_Kind)
+ , fValue(std::move(value))
+ , fCases(std::move(cases)) {}
+
+ SkString description() const override {
+ SkString result = SkStringPrintf("switch (%s) {\n", + fValue->description().c_str());
+ for (const auto& c : fCases) {
+ result += c->description();
+ }
+ result += "}";
+ return result;
+ }
+
+ const std::unique_ptr<ASTExpression> fValue;
+ const std::vector<std::unique_ptr<ASTSwitchCase>> fCases;
+
+ typedef ASTStatement INHERITED;
+};
+
+} // namespace
+
+#endif