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/SkSLASTSwitchCase.h b/src/sksl/ast/SkSLASTSwitchCase.h
new file mode 100644
index 0000000..2c0a01c
--- /dev/null
+++ b/src/sksl/ast/SkSLASTSwitchCase.h
@@ -0,0 +1,48 @@
+/*
+ * 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_ASTSWITCHCASE
+#define SKSL_ASTSWITCHCASE
+
+#include "SkSLASTStatement.h"
+
+namespace SkSL {
+
+/**
+ * A single case of a 'switch' statement.
+ */
+struct ASTSwitchCase : public ASTStatement {
+ // a null value means "default:"
+ ASTSwitchCase(Position position, std::unique_ptr<ASTExpression> value,
+ std::vector<std::unique_ptr<ASTStatement>> statements)
+ : INHERITED(position, kSwitch_Kind)
+ , fValue(std::move(value))
+ , fStatements(std::move(statements)) {}
+
+ SkString description() const override {
+ SkString result;
+ if (fValue) {
+ result.appendf("case %s:\n", fValue->description().c_str());
+ } else {
+ result += "default:\n";
+ }
+ for (const auto& s : fStatements) {
+ result += s->description() + "\n";
+ }
+ return result;
+ }
+
+ // null value implies "default" case
+ const std::unique_ptr<ASTExpression> fValue;
+ const std::vector<std::unique_ptr<ASTStatement>> fStatements;
+
+ typedef ASTStatement INHERITED;
+};
+
+} // namespace
+
+#endif