From 440636c15c740270df62a7b0bbbf46787ec1a967 Mon Sep 17 00:00:00 2001 From: Ben Clayton Date: Wed, 21 Apr 2021 13:32:22 +0000 Subject: [PATCH] Add typepair.h Introduces typ::Type which wraps a templated pair of AST and SEM type pointers. This is a temporary helper to ease migration of the thousands of tests that use the ProgramBuilder over from sem::Type to the new ast::Types. Bug: tint:724 Change-Id: I4e2643a819cde97947d789fce7a74c251f837a58 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/48601 Kokoro: Kokoro Reviewed-by: Antonio Maiorano Commit-Queue: Ben Clayton --- src/BUILD.gn | 1 + src/CMakeLists.txt | 1 + src/typepair.h | 91 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 93 insertions(+) create mode 100644 src/typepair.h diff --git a/src/BUILD.gn b/src/BUILD.gn index 335a04fc97..ddd24b13a5 100644 --- a/src/BUILD.gn +++ b/src/BUILD.gn @@ -496,6 +496,7 @@ libtint_source_set("libtint_core_all_src") { "symbol_table.cc", "symbol_table.h", "traits.h", + "typepair.h", "transform/binding_point.h", "transform/binding_remapper.cc", "transform/binding_remapper.h", diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9e6de7bffb..d5e3737c61 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -249,6 +249,7 @@ set(TINT_LIB_SRCS symbol.cc symbol.h traits.h + typepair.h transform/binding_point.h transform/binding_remapper.cc transform/binding_remapper.h diff --git a/src/typepair.h b/src/typepair.h new file mode 100644 index 0000000000..12f10b94a3 --- /dev/null +++ b/src/typepair.h @@ -0,0 +1,91 @@ +// Copyright 2021 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. + +// This file contains temporary code to help implement the new `ast::Type`s. +// Once complete, this file should be completely removed. +// Bug: crbug.com/tint/724 + +#ifndef SRC_TYPEPAIR_H_ +#define SRC_TYPEPAIR_H_ + +namespace tint { + +namespace ast { +class Bool; +class F32; +class I32; +class U32; +class Void; +} // namespace ast + +namespace sem { +class Bool; +class F32; +class I32; +class U32; +class Void; +} // namespace sem + +namespace typ { // type-pair + +/// Type is a pair of ast::Type and sem::Type pointers used to simplify +/// migration to the new ast::Type nodes. +/// +/// Type attempts to behave as either an ast::Type or sem::Type: +/// * Type has constructors that take either an ast::Type and sem::Type pointer +/// pair, and single-parameter implicit constructors for either a single +/// ast::Type or sem::Type pointer. +/// * Type also has user-defined conversion functions for returning either an +/// ast::Type or sem::Type pointer. +/// * operator->() returns the sem::Type pointer. Later in the migration this +/// will switch to returning the ast::Type pointer. +template +struct Type { + /// The ast::Type pointer + AST const* const ast = nullptr; + /// The sem::Type pointer + SEM const* const sem = nullptr; + + /// Constructor + Type() = default; + /// Constructor + /// @param a the ast::Type pointer + Type(const AST* a) : ast(a) {} // NOLINT: explicit + /// Constructor + /// @param s the sem::Type pointer + Type(const SEM* s) : sem(s) {} // NOLINT: explicit + /// Constructor + /// @param a the ast::Type pointer + /// @param s the sem::Type pointer + Type(const AST* a, const SEM* s) : ast(a), sem(s) {} + + /// @returns the ast::Type pointer + operator AST*() const { return const_cast(ast); } + /// @returns the sem::Type pointer + operator SEM*() const { return const_cast(sem); } + /// @returns the sem::Type pointer + SEM* operator->() const { return const_cast(sem); } +}; + +using Bool = Type; +using F32 = Type; +using I32 = Type; +using U32 = Type; +using Void = Type; + +} // namespace typ + +} // namespace tint + +#endif // SRC_TYPEPAIR_H_