SkSLASTSwitchCase.h revision bcf35f86d50b784b165de703b404998dd4299f6a
1/*
2 * Copyright 2017 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef SKSL_ASTSWITCHCASE
9#define SKSL_ASTSWITCHCASE
10
11#include "SkSLASTStatement.h"
12
13namespace SkSL {
14
15/**
16 * A single case of a 'switch' statement.
17 */
18struct ASTSwitchCase : public ASTStatement {
19    // a null value means "default:"
20    ASTSwitchCase(Position position, std::unique_ptr<ASTExpression> value,
21                  std::vector<std::unique_ptr<ASTStatement>> statements)
22    : INHERITED(position, kSwitch_Kind)
23    , fValue(std::move(value))
24    , fStatements(std::move(statements)) {}
25
26    SkString description() const override {
27        SkString result;
28        if (fValue) {
29            result.appendf("case %s:\n", fValue->description().c_str());
30        } else {
31            result += "default:\n";
32        }
33        for (const auto& s : fStatements) {
34            result += s->description() + "\n";
35        }
36        return result;
37    }
38
39    // null value implies "default" case
40    const std::unique_ptr<ASTExpression> fValue;
41    const std::vector<std::unique_ptr<ASTStatement>> fStatements;
42
43    typedef ASTStatement INHERITED;
44};
45
46} // namespace
47
48#endif
49