blob: 4f0ecced510de3da52c6e06be0189a276df8556b [file] [log] [blame]
dan sinclaira322f5d2020-03-30 22:46:06 +00001// Copyright 2020 The Tint Authors.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15#include "src/ast/scalar_constructor_expression.h"
16
Ben Claytona6b9a8e2021-01-26 16:57:10 +000017#include "src/program_builder.h"
Ben Claytoned2b9782020-12-01 18:04:17 +000018
Ben Clayton7732ca52021-03-02 20:51:18 +000019TINT_INSTANTIATE_TYPEINFO(tint::ast::ScalarConstructorExpression);
Ben Clayton89ea7052020-12-02 18:19:28 +000020
dan sinclaira322f5d2020-03-30 22:46:06 +000021namespace tint {
22namespace ast {
23
Ben Claytonb053acf2020-11-16 16:31:07 +000024ScalarConstructorExpression::ScalarConstructorExpression(const Source& source,
Ben Clayton8454d822021-03-10 11:41:49 +000025 Literal* literal)
26 : Base(source), literal_(literal) {
27 TINT_ASSERT(literal);
28}
dan sinclaira322f5d2020-03-30 22:46:06 +000029
Ryan Harrison4d32be42020-04-09 18:52:06 +000030ScalarConstructorExpression::ScalarConstructorExpression(
31 ScalarConstructorExpression&&) = default;
32
dan sinclaira322f5d2020-03-30 22:46:06 +000033ScalarConstructorExpression::~ScalarConstructorExpression() = default;
34
Ben Claytoned2b9782020-12-01 18:04:17 +000035ScalarConstructorExpression* ScalarConstructorExpression::Clone(
36 CloneContext* ctx) const {
Ben Clayton545c9742021-02-11 20:27:14 +000037 // Clone arguments outside of create() call to have deterministic ordering
38 auto src = ctx->Clone(source());
39 auto* lit = ctx->Clone(literal());
40 return ctx->dst->create<ScalarConstructorExpression>(src, lit);
Ben Claytoned2b9782020-12-01 18:04:17 +000041}
42
Ben Claytondd1b6fc2021-01-29 10:55:40 +000043void ScalarConstructorExpression::to_str(const semantic::Info& sem,
44 std::ostream& out,
dan sinclaira322f5d2020-03-30 22:46:06 +000045 size_t indent) const {
46 make_indent(out, indent);
Ben Claytondd1b6fc2021-01-29 10:55:40 +000047 out << "ScalarConstructor[" << result_type_str(sem) << "]{"
48 << literal_->to_str(sem) << "}" << std::endl;
dan sinclaira322f5d2020-03-30 22:46:06 +000049}
50
51} // namespace ast
52} // namespace tint