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