diff options
author | Ethan Nicholas <ethannicholas@google.com> | 2017-02-27 13:26:45 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-02-27 19:01:55 +0000 |
commit | af19769831f1c4c3b90c85aa9f8851cd8bbf86d5 (patch) | |
tree | 5dd063830d41aff45eefcb524c868ac210016467 /src/sksl/ir/SkSLSwitchCase.h | |
parent | 578f064a60b63ddfb00831e9e59a47060bfcefe0 (diff) |
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>
Diffstat (limited to 'src/sksl/ir/SkSLSwitchCase.h')
-rw-r--r-- | src/sksl/ir/SkSLSwitchCase.h | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/sksl/ir/SkSLSwitchCase.h b/src/sksl/ir/SkSLSwitchCase.h new file mode 100644 index 0000000000..3f1c3acbd3 --- /dev/null +++ b/src/sksl/ir/SkSLSwitchCase.h @@ -0,0 +1,47 @@ +/* + * 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_SWITCHCASE +#define SKSL_SWITCHCASE + +#include "SkSLStatement.h" + +namespace SkSL { + +/** + * A single case of a 'switch' statement. + */ +struct SwitchCase : public Statement { + SwitchCase(Position position, std::unique_ptr<Expression> value, + std::vector<std::unique_ptr<Statement>> 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 + std::unique_ptr<Expression> fValue; + std::vector<std::unique_ptr<Statement>> fStatements; + + typedef Statement INHERITED; +}; + +} // namespace + +#endif |