Add a call ast statement. This CL adds CallStatement to the AST to allow wrapping a CallExpression into a statement. Bug: tint:45 Change-Id: I5a9525514344fcc2cf9900eb2cd78c1fb94ca2ef Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/25320 Reviewed-by: David Neto <dneto@google.com>
diff --git a/src/ast/call_statement.h b/src/ast/call_statement.h new file mode 100644 index 0000000..374136b --- /dev/null +++ b/src/ast/call_statement.h
@@ -0,0 +1,67 @@ +// 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_CALL_STATEMENT_H_ +#define SRC_AST_CALL_STATEMENT_H_ + +#include <memory> +#include <utility> + +#include "src/ast/call_expression.h" +#include "src/ast/statement.h" + +namespace tint { +namespace ast { + +/// A call expression +class CallStatement : public Statement { + public: + /// Constructor + CallStatement(); + /// Constructor + /// @param call the function + explicit CallStatement(std::unique_ptr<CallExpression> call); + /// Move constructor + CallStatement(CallStatement&&); + ~CallStatement() override; + + /// Sets the call expression + /// @param call the call + void set_expr(std::unique_ptr<CallExpression> call) { + call_ = std::move(call); + } + /// @returns the call expression + CallExpression* expr() const { return call_.get(); } + + /// @returns true if this is a call statement + bool IsCall() 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: + CallStatement(const CallStatement&) = delete; + + std::unique_ptr<CallExpression> call_; +}; + +} // namespace ast +} // namespace tint + +#endif // SRC_AST_CALL_STATEMENT_H_