dawn-cmake/src/ast/case_statement.h
dan sinclair 1d69915155 Rename case statement conditions to selectors.
The name conditions isn't quite correct for the case statement. This CL
updates the code to use selectors instead of conditions.

Change-Id: I98b8050b11e2328f97e4443469572ab47d7c1555
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/22520
Reviewed-by: David Neto <dneto@google.com>
2020-06-02 17:18:56 +00:00

97 lines
2.9 KiB
C++

// Copyright 2020 The Tint Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef SRC_AST_CASE_STATEMENT_H_
#define SRC_AST_CASE_STATEMENT_H_
#include <memory>
#include <utility>
#include <vector>
#include "src/ast/expression.h"
#include "src/ast/literal.h"
#include "src/ast/statement.h"
namespace tint {
namespace ast {
/// A list of case literals
using CaseSelectorList = std::vector<std::unique_ptr<ast::Literal>>;
/// A case statement
class CaseStatement : public Statement {
public:
/// Constructor
CaseStatement();
/// Constructor
/// Creates a default case statement
/// @param body the case body
explicit CaseStatement(StatementList body);
/// Constructor
/// @param selectors the case selectors
/// @param body the case body
CaseStatement(CaseSelectorList selectors, StatementList body);
/// Constructor
/// @param source the source information
/// @param selectors the case selectors
/// @param body the case body
CaseStatement(const Source& source,
CaseSelectorList selectors,
StatementList body);
/// Move constructor
CaseStatement(CaseStatement&&);
~CaseStatement() override;
/// Sets the selectors for the case statement
/// @param selectors the selectors to set
void set_selectors(CaseSelectorList selectors) {
selectors_ = std::move(selectors);
}
/// @returns the case selectors, empty if none set
const CaseSelectorList& selectors() const { return selectors_; }
/// @returns true if this is a default statement
bool IsDefault() const { return selectors_.empty(); }
/// Sets the case body
/// @param body the case body
void set_body(StatementList body) { body_ = std::move(body); }
/// @returns the case body
const StatementList& body() const { return body_; }
/// @returns true if this is a case statement
bool IsCase() const override;
/// @returns true if the node is valid
bool IsValid() const override;
/// Writes a representation of the node to the output stream
/// @param out the stream to write to
/// @param indent number of spaces to indent the node when writing
void to_str(std::ostream& out, size_t indent) const override;
private:
CaseStatement(const CaseStatement&) = delete;
CaseSelectorList selectors_;
StatementList body_;
};
/// A list of unique case statements
using CaseStatementList = std::vector<std::unique_ptr<CaseStatement>>;
} // namespace ast
} // namespace tint
#endif // SRC_AST_CASE_STATEMENT_H_