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