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, std::unique_ptr<ASTExpression> value, 21 std::vector<std::unique_ptr<ASTSwitchCase>> cases) 22 : INHERITED(position, kSwitch_Kind) 23 , fValue(std::move(value)) 24 , fCases(std::move(cases)) {} 25 descriptionASTSwitchStatement26 SkString description() const override { 27 SkString result = SkStringPrintf("switch (%s) {\n", + fValue->description().c_str()); 28 for (const auto& c : fCases) { 29 result += c->description(); 30 } 31 result += "}"; 32 return result; 33 } 34 35 const std::unique_ptr<ASTExpression> fValue; 36 const std::vector<std::unique_ptr<ASTSwitchCase>> fCases; 37 38 typedef ASTStatement INHERITED; 39 }; 40 41 } // namespace 42 43 #endif 44