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_ASTSWITCHSTATEMENT 9 #define SKSL_ASTSWITCHSTATEMENT 10 11 #include "SkSLASTStatement.h" 12 #include "SkSLASTSwitchCase.h" 13 14 namespace SkSL { 15 16 /** 17 * A 'switch' statement. 18 */ 19 struct ASTSwitchStatement : public ASTStatement { ASTSwitchStatementASTSwitchStatement20 ASTSwitchStatement(Position position, bool isStatic, std::unique_ptr<ASTExpression> value, 21 std::vector<std::unique_ptr<ASTSwitchCase>> cases) 22 : INHERITED(position, kSwitch_Kind) 23 , fIsStatic(isStatic) 24 , fValue(std::move(value)) 25 , fCases(std::move(cases)) {} 26 descriptionASTSwitchStatement27 String description() const override { 28 String result; 29 if (fIsStatic) { 30 result += "@"; 31 } 32 result += String::printf("switch (%s) {\n", fValue->description().c_str()); 33 for (const auto& c : fCases) { 34 result += c->description(); 35 } 36 result += "}"; 37 return result; 38 } 39 40 bool fIsStatic; 41 const std::unique_ptr<ASTExpression> fValue; 42 const std::vector<std::unique_ptr<ASTSwitchCase>> fCases; 43 44 typedef ASTStatement INHERITED; 45 }; 46 47 } // namespace 48 49 #endif 50