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 13 namespace SkSL { 14 15 /** 16 * A single case of a 'switch' statement. 17 */ 18 struct ASTSwitchCase : public ASTStatement { 19 // a null value means "default:" ASTSwitchCaseASTSwitchCase20 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 descriptionASTSwitchCase26 String description() const override { 27 String 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