Home | History | Annotate | Download | only in ir
      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_SWITCHCASE
      9 #define SKSL_SWITCHCASE
     10 
     11 #include "SkSLExpression.h"
     12 #include "SkSLStatement.h"
     13 
     14 namespace SkSL {
     15 
     16 /**
     17  * A single case of a 'switch' statement.
     18  */
     19 struct SwitchCase : public Statement {
     20     SwitchCase(Position position, std::unique_ptr<Expression> value,
     21                std::vector<std::unique_ptr<Statement>> statements)
     22     : INHERITED(position, kSwitch_Kind)
     23     , fValue(std::move(value))
     24     , fStatements(std::move(statements)) {}
     25 
     26     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     std::unique_ptr<Expression> fValue;
     41     std::vector<std::unique_ptr<Statement>> fStatements;
     42 
     43     typedef Statement INHERITED;
     44 };
     45 
     46 } // namespace
     47 
     48 #endif
     49