Remove typ::TypePair.
You've helped us bridge two worlds.
Good Night, Sweet Prince.
Fixed: tint:724
Change-Id: I0b4ba960e9cf5dcff7df9d2f332ea36d6663c440
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/51667
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
Commit-Queue: Antonio Maiorano <amaiorano@google.com>
Auto-Submit: Ben Clayton <bclayton@google.com>
diff --git a/src/BUILD.gn b/src/BUILD.gn
index e7735a2..517a3b1 100644
--- a/src/BUILD.gn
+++ b/src/BUILD.gn
@@ -527,7 +527,6 @@
"transform/var_for_dynamic_index.h",
"transform/vertex_pulling.cc",
"transform/vertex_pulling.h",
- "typepair.h",
"utils/get_or_create.h",
"utils/hash.h",
"utils/math.h",
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index f4ff38d..b42303e 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -262,7 +262,6 @@
symbol.cc
symbol.h
traits.h
- typepair.h
transform/binding_remapper.cc
transform/binding_remapper.h
transform/bound_array_accessors.cc
diff --git a/src/ast/bitcast_expression.h b/src/ast/bitcast_expression.h
index 6cce249..f901fec 100644
--- a/src/ast/bitcast_expression.h
+++ b/src/ast/bitcast_expression.h
@@ -20,6 +20,9 @@
namespace tint {
namespace ast {
+// Forward declaration
+class Type;
+
/// A bitcast expression
class BitcastExpression : public Castable<BitcastExpression, Expression> {
public:
diff --git a/src/ast/function.h b/src/ast/function.h
index 397e1c4..86e85bb 100644
--- a/src/ast/function.h
+++ b/src/ast/function.h
@@ -28,7 +28,6 @@
#include "src/ast/location_decoration.h"
#include "src/ast/pipeline_stage.h"
#include "src/ast/variable.h"
-#include "src/typepair.h"
namespace tint {
namespace ast {
diff --git a/src/ast/intrinsic_texture_helper_test.cc b/src/ast/intrinsic_texture_helper_test.cc
index f9430d4..3cd12f6 100644
--- a/src/ast/intrinsic_texture_helper_test.cc
+++ b/src/ast/intrinsic_texture_helper_test.cc
@@ -171,7 +171,7 @@
ast::StorageClass::kNone, nullptr, decos);
case ast::intrinsic::test::TextureKind::kStorage: {
- auto st = b->ty.storage_texture(texture_dimension, image_format);
+ auto* st = b->ty.storage_texture(texture_dimension, image_format);
auto* ac = b->ty.access(access_control, st);
return b->Global("texture", ac, ast::StorageClass::kNone, nullptr, decos);
}
diff --git a/src/ast/struct_member.h b/src/ast/struct_member.h
index 4ed141d..8fae5ff 100644
--- a/src/ast/struct_member.h
+++ b/src/ast/struct_member.h
@@ -19,11 +19,13 @@
#include <vector>
#include "src/ast/decoration.h"
-#include "src/typepair.h"
namespace tint {
namespace ast {
+// Forward declaration
+class Type;
+
/// A struct member statement.
class StructMember : public Castable<StructMember, Node> {
public:
diff --git a/src/ast/type_constructor_expression.h b/src/ast/type_constructor_expression.h
index 19560a4..8bd15a5 100644
--- a/src/ast/type_constructor_expression.h
+++ b/src/ast/type_constructor_expression.h
@@ -22,6 +22,9 @@
namespace tint {
namespace ast {
+// Forward declaration
+class Type;
+
/// A type specific constructor
class TypeConstructorExpression
: public Castable<TypeConstructorExpression, ConstructorExpression> {
diff --git a/src/ast/variable.h b/src/ast/variable.h
index 0151d74..a345fcc 100644
--- a/src/ast/variable.h
+++ b/src/ast/variable.h
@@ -25,9 +25,11 @@
namespace tint {
namespace ast {
+// Forward declarations
class BindingDecoration;
class GroupDecoration;
class LocationDecoration;
+class Type;
/// A Variable statement.
///
diff --git a/src/clone_context.h b/src/clone_context.h
index c032877..6e46f8f 100644
--- a/src/clone_context.h
+++ b/src/clone_context.h
@@ -26,7 +26,6 @@
#include "src/debug.h"
#include "src/symbol.h"
#include "src/traits.h"
-#include "src/typepair.h"
namespace tint {
@@ -178,14 +177,6 @@
return CheckedCast<T>(c);
}
- /// Clones the AST node of the type pair
- /// @param tp the type pair to clone
- /// @return the cloned AST node wrapped in a type pair
- template <typename AST, typename SEM>
- typ::TypePair<AST, SEM> Clone(const typ::TypePair<AST, SEM>& tp) {
- return Clone(const_cast<ast::Type*>(tp.ast));
- }
-
/// Clones the Source `s` into #dst
/// TODO(bclayton) - Currently this 'clone' is a shallow copy. If/when
/// `Source.File`s are owned by the Program this should make a copy of the
diff --git a/src/inspector/inspector_test.cc b/src/inspector/inspector_test.cc
index 2eebad1..d8a3a35 100644
--- a/src/inspector/inspector_test.cc
+++ b/src/inspector/inspector_test.cc
@@ -359,15 +359,15 @@
/// @param dim the dimensions of the texture
/// @param type the data type of the sampled texture
/// @returns the generated SampleTextureType
- typ::SampledTexture MakeSampledTextureType(ast::TextureDimension dim,
- ast::Type* type) {
+ ast::SampledTexture* MakeSampledTextureType(ast::TextureDimension dim,
+ ast::Type* type) {
return ty.sampled_texture(dim, type);
}
/// Generates a DepthTexture appropriate for the params
/// @param dim the dimensions of the texture
/// @returns the generated DepthTexture
- typ::DepthTexture MakeDepthTextureType(ast::TextureDimension dim) {
+ ast::DepthTexture* MakeDepthTextureType(ast::TextureDimension dim) {
return ty.depth_texture(dim);
}
@@ -375,7 +375,7 @@
/// @param dim the dimensions of the texture
/// @param type the data type of the sampled texture
/// @returns the generated SampleTextureType
- typ::MultisampledTexture MakeMultisampledTextureType(
+ ast::MultisampledTexture* MakeMultisampledTextureType(
ast::TextureDimension dim,
ast::Type* type) {
return ty.multisampled_texture(dim, type);
@@ -383,7 +383,7 @@
/// Generates an ExternalTexture appropriate for the params
/// @returns the generated ExternalTexture
- typ::ExternalTexture MakeExternalTextureType() {
+ ast::ExternalTexture* MakeExternalTextureType() {
return ty.external_texture();
}
@@ -577,7 +577,7 @@
bool read_only) {
auto ac = read_only ? ast::AccessControl::kReadOnly
: ast::AccessControl::kWriteOnly;
- auto tex = ty.storage_texture(dim, format);
+ auto* tex = ty.storage_texture(dim, format);
return ty.access(ac, tex);
}
@@ -588,7 +588,7 @@
/// @param group the binding/group to use for the sampled texture
/// @param binding the binding number to use for the sampled texture
void AddStorageTexture(const std::string& name,
- typ::Type type,
+ ast::Type* type,
uint32_t group,
uint32_t binding) {
AddBinding(name, type, ast::StorageClass::kNone, group, binding);
@@ -603,7 +603,7 @@
ast::Function* MakeStorageTextureBodyFunction(
const std::string& func_name,
const std::string& st_name,
- typ::Type dim_type,
+ ast::Type* dim_type,
ast::DecorationList decorations) {
ast::StatementList stmts;
@@ -863,16 +863,16 @@
TEST_P(InspectorGetEntryPointTestWithComponentTypeParam, InOutVariables) {
ComponentType inspector_type = GetParam();
- std::function<typ::Type()> tint_type;
+ std::function<ast::Type*()> tint_type;
switch (inspector_type) {
case ComponentType::kFloat:
- tint_type = [this]() -> typ::Type { return ty.f32(); };
+ tint_type = [this]() -> ast::Type* { return ty.f32(); };
break;
case ComponentType::kSInt:
- tint_type = [this]() -> typ::Type { return ty.i32(); };
+ tint_type = [this]() -> ast::Type* { return ty.i32(); };
break;
case ComponentType::kUInt:
- tint_type = [this]() -> typ::Type { return ty.u32(); };
+ tint_type = [this]() -> ast::Type* { return ty.u32(); };
break;
case ComponentType::kUnknown:
return;
@@ -1672,7 +1672,7 @@
MakeStructVariableReferenceBodyFunction("rosb_func", "rosb_var",
{{0, ty.i32()}});
- auto s_texture_type =
+ auto* s_texture_type =
MakeSampledTextureType(ast::TextureDimension::k1d, ty.f32());
AddSampledTexture("s_texture", s_texture_type, 2, 0);
AddSampler("s_var", 3, 0);
@@ -1680,7 +1680,8 @@
MakeSamplerReferenceBodyFunction("s_func", "s_texture", "s_var", "s_coords",
ty.f32(), {});
- auto cs_depth_texture_type = MakeDepthTextureType(ast::TextureDimension::k2d);
+ auto* cs_depth_texture_type =
+ MakeDepthTextureType(ast::TextureDimension::k2d);
AddDepthTexture("cs_texture", cs_depth_texture_type, 3, 1);
AddComparisonSampler("cs_var", 3, 2);
AddGlobalVariable("cs_coords", ty.vec2<f32>());
@@ -2327,7 +2328,7 @@
}
TEST_F(InspectorGetSamplerResourceBindingsTest, Simple) {
- auto sampled_texture_type =
+ auto* sampled_texture_type =
MakeSampledTextureType(ast::TextureDimension::k1d, ty.f32());
AddSampledTexture("foo_texture", sampled_texture_type, 0, 0);
AddSampler("foo_sampler", 0, 1);
@@ -2364,7 +2365,7 @@
}
TEST_F(InspectorGetSamplerResourceBindingsTest, InFunction) {
- auto sampled_texture_type =
+ auto* sampled_texture_type =
MakeSampledTextureType(ast::TextureDimension::k1d, ty.f32());
AddSampledTexture("foo_texture", sampled_texture_type, 0, 0);
AddSampler("foo_sampler", 0, 1);
@@ -2390,7 +2391,7 @@
}
TEST_F(InspectorGetSamplerResourceBindingsTest, UnknownEntryPoint) {
- auto sampled_texture_type =
+ auto* sampled_texture_type =
MakeSampledTextureType(ast::TextureDimension::k1d, ty.f32());
AddSampledTexture("foo_texture", sampled_texture_type, 0, 0);
AddSampler("foo_sampler", 0, 1);
@@ -2409,7 +2410,7 @@
}
TEST_F(InspectorGetSamplerResourceBindingsTest, SkipsComparisonSamplers) {
- auto depth_texture_type = MakeDepthTextureType(ast::TextureDimension::k2d);
+ auto* depth_texture_type = MakeDepthTextureType(ast::TextureDimension::k2d);
AddDepthTexture("foo_texture", depth_texture_type, 0, 0);
AddComparisonSampler("foo_sampler", 0, 1);
AddGlobalVariable("foo_coords", ty.vec2<f32>());
@@ -2430,7 +2431,7 @@
}
TEST_F(InspectorGetComparisonSamplerResourceBindingsTest, Simple) {
- auto depth_texture_type = MakeDepthTextureType(ast::TextureDimension::k2d);
+ auto* depth_texture_type = MakeDepthTextureType(ast::TextureDimension::k2d);
AddDepthTexture("foo_texture", depth_texture_type, 0, 0);
AddComparisonSampler("foo_sampler", 0, 1);
AddGlobalVariable("foo_coords", ty.vec2<f32>());
@@ -2468,7 +2469,7 @@
}
TEST_F(InspectorGetComparisonSamplerResourceBindingsTest, InFunction) {
- auto depth_texture_type = MakeDepthTextureType(ast::TextureDimension::k2d);
+ auto* depth_texture_type = MakeDepthTextureType(ast::TextureDimension::k2d);
AddDepthTexture("foo_texture", depth_texture_type, 0, 0);
AddComparisonSampler("foo_sampler", 0, 1);
AddGlobalVariable("foo_coords", ty.vec2<f32>());
@@ -2496,7 +2497,7 @@
}
TEST_F(InspectorGetComparisonSamplerResourceBindingsTest, UnknownEntryPoint) {
- auto depth_texture_type = MakeDepthTextureType(ast::TextureDimension::k2d);
+ auto* depth_texture_type = MakeDepthTextureType(ast::TextureDimension::k2d);
AddDepthTexture("foo_texture", depth_texture_type, 0, 0);
AddComparisonSampler("foo_sampler", 0, 1);
AddGlobalVariable("foo_coords", ty.vec2<f32>());
@@ -2515,7 +2516,7 @@
}
TEST_F(InspectorGetComparisonSamplerResourceBindingsTest, SkipsSamplers) {
- auto sampled_texture_type =
+ auto* sampled_texture_type =
MakeSampledTextureType(ast::TextureDimension::k1d, ty.f32());
AddSampledTexture("foo_texture", sampled_texture_type, 0, 0);
AddSampler("foo_sampler", 0, 1);
@@ -2549,7 +2550,7 @@
}
TEST_P(InspectorGetSampledTextureResourceBindingsTestWithParam, textureSample) {
- auto sampled_texture_type = MakeSampledTextureType(
+ auto* sampled_texture_type = MakeSampledTextureType(
GetParam().type_dim, GetBaseType(GetParam().sampled_kind));
AddSampledTexture("foo_texture", sampled_texture_type, 0, 0);
AddSampler("foo_sampler", 0, 1);
@@ -2607,7 +2608,7 @@
TEST_P(InspectorGetSampledArrayTextureResourceBindingsTestWithParam,
textureSample) {
- auto sampled_texture_type = MakeSampledTextureType(
+ auto* sampled_texture_type = MakeSampledTextureType(
GetParam().type_dim, GetBaseType(GetParam().sampled_kind));
AddSampledTexture("foo_texture", sampled_texture_type, 0, 0);
AddSampler("foo_sampler", 0, 1);
@@ -2651,7 +2652,7 @@
TEST_P(InspectorGetMultisampledTextureResourceBindingsTestWithParam,
textureLoad) {
- auto multisampled_texture_type = MakeMultisampledTextureType(
+ auto* multisampled_texture_type = MakeMultisampledTextureType(
GetParam().type_dim, GetBaseType(GetParam().sampled_kind));
AddMultisampledTexture("foo_texture", multisampled_texture_type, 0, 0);
auto* coord_type = GetCoordsType(GetParam().type_dim, ty.i32());
@@ -2720,7 +2721,7 @@
TEST_P(InspectorGetMultisampledArrayTextureResourceBindingsTestWithParam,
DISABLED_textureSample) {
- auto multisampled_texture_type = MakeMultisampledTextureType(
+ auto* multisampled_texture_type = MakeMultisampledTextureType(
GetParam().type_dim, GetBaseType(GetParam().sampled_kind));
AddMultisampledTexture("foo_texture", multisampled_texture_type, 0, 0);
AddSampler("foo_sampler", 0, 1);
@@ -2912,7 +2913,7 @@
TEST_P(InspectorGetDepthTextureResourceBindingsTestWithParam,
textureDimensions) {
- auto depth_texture_type = MakeDepthTextureType(GetParam().type_dim);
+ auto* depth_texture_type = MakeDepthTextureType(GetParam().type_dim);
AddDepthTexture("dt", depth_texture_type, 0, 0);
AddGlobalVariable("dt_level", ty.i32());
@@ -2956,7 +2957,7 @@
inspector::ResourceBinding::TextureDimension::kCubeArray}));
TEST_F(InspectorGetExternalTextureResourceBindingsTest, Simple) {
- auto external_texture_type = MakeExternalTextureType();
+ auto* external_texture_type = MakeExternalTextureType();
AddExternalTexture("et", external_texture_type, 0, 0);
Func("ep", ast::VariableList(), ty.void_(),
diff --git a/src/program_builder.h b/src/program_builder.h
index 47805bc..3a102ff 100644
--- a/src/program_builder.h
+++ b/src/program_builder.h
@@ -77,7 +77,6 @@
#include "src/sem/u32_type.h"
#include "src/sem/vector_type.h"
#include "src/sem/void_type.h"
-#include "src/typepair.h"
namespace tint {
@@ -350,59 +349,59 @@
/// @return the tint AST type for the C type `T`.
template <typename T>
- typ::Type Of() const {
+ ast::Type* Of() const {
return CToAST<T>::get(this);
}
/// @returns a boolean type
- typ::Bool bool_() const { return builder->create<ast::Bool>(); }
+ ast::Bool* bool_() const { return builder->create<ast::Bool>(); }
/// @param source the Source of the node
/// @returns a boolean type
- typ::Bool bool_(const Source& source) const {
+ ast::Bool* bool_(const Source& source) const {
return builder->create<ast::Bool>(source);
}
/// @returns a f32 type
- typ::F32 f32() const { return builder->create<ast::F32>(); }
+ ast::F32* f32() const { return builder->create<ast::F32>(); }
/// @param source the Source of the node
/// @returns a f32 type
- typ::F32 f32(const Source& source) const {
+ ast::F32* f32(const Source& source) const {
return builder->create<ast::F32>(source);
}
/// @returns a i32 type
- typ::I32 i32() const { return builder->create<ast::I32>(); }
+ ast::I32* i32() const { return builder->create<ast::I32>(); }
/// @param source the Source of the node
/// @returns a i32 type
- typ::I32 i32(const Source& source) const {
+ ast::I32* i32(const Source& source) const {
return builder->create<ast::I32>(source);
}
/// @returns a u32 type
- typ::U32 u32() const { return builder->create<ast::U32>(); }
+ ast::U32* u32() const { return builder->create<ast::U32>(); }
/// @param source the Source of the node
/// @returns a u32 type
- typ::U32 u32(const Source& source) const {
+ ast::U32* u32(const Source& source) const {
return builder->create<ast::U32>(source);
}
/// @returns a void type
- typ::Void void_() const { return builder->create<ast::Void>(); }
+ ast::Void* void_() const { return builder->create<ast::Void>(); }
/// @param source the Source of the node
/// @returns a void type
- typ::Void void_(const Source& source) const {
+ ast::Void* void_(const Source& source) const {
return builder->create<ast::Void>(source);
}
/// @param type vector subtype
/// @param n vector width in elements
/// @return the tint AST type for a `n`-element vector of `type`.
- typ::Vector vec(ast::Type* type, uint32_t n) const {
+ ast::Vector* vec(ast::Type* type, uint32_t n) const {
type = MaybeCreateTypename(type);
return builder->create<ast::Vector>(type, n);
}
@@ -411,45 +410,45 @@
/// @param type vector subtype
/// @param n vector width in elements
/// @return the tint AST type for a `n`-element vector of `type`.
- typ::Vector vec(const Source& source, ast::Type* type, uint32_t n) const {
+ ast::Vector* vec(const Source& source, ast::Type* type, uint32_t n) const {
type = MaybeCreateTypename(type);
return builder->create<ast::Vector>(source, type, n);
}
/// @param type vector subtype
/// @return the tint AST type for a 2-element vector of `type`.
- typ::Vector vec2(ast::Type* type) const { return vec(type, 2u); }
+ ast::Vector* vec2(ast::Type* type) const { return vec(type, 2u); }
/// @param type vector subtype
/// @return the tint AST type for a 3-element vector of `type`.
- typ::Vector vec3(ast::Type* type) const { return vec(type, 3u); }
+ ast::Vector* vec3(ast::Type* type) const { return vec(type, 3u); }
/// @param type vector subtype
/// @return the tint AST type for a 4-element vector of `type`.
- typ::Vector vec4(ast::Type* type) const { return vec(type, 4u); }
+ ast::Vector* vec4(ast::Type* type) const { return vec(type, 4u); }
/// @param n vector width in elements
/// @return the tint AST type for a `n`-element vector of `type`.
template <typename T>
- typ::Vector vec(uint32_t n) const {
+ ast::Vector* vec(uint32_t n) const {
return vec(Of<T>(), n);
}
/// @return the tint AST type for a 2-element vector of the C type `T`.
template <typename T>
- typ::Vector vec2() const {
+ ast::Vector* vec2() const {
return vec2(Of<T>());
}
/// @return the tint AST type for a 3-element vector of the C type `T`.
template <typename T>
- typ::Vector vec3() const {
+ ast::Vector* vec3() const {
return vec3(Of<T>());
}
/// @return the tint AST type for a 4-element vector of the C type `T`.
template <typename T>
- typ::Vector vec4() const {
+ ast::Vector* vec4() const {
return vec4(Of<T>());
}
@@ -457,7 +456,7 @@
/// @param columns number of columns for the matrix
/// @param rows number of rows for the matrix
/// @return the tint AST type for a matrix of `type`
- typ::Matrix mat(ast::Type* type, uint32_t columns, uint32_t rows) const {
+ ast::Matrix* mat(ast::Type* type, uint32_t columns, uint32_t rows) const {
type = MaybeCreateTypename(type);
return builder->create<ast::Matrix>(type, rows, columns);
}
@@ -467,108 +466,108 @@
/// @param columns number of columns for the matrix
/// @param rows number of rows for the matrix
/// @return the tint AST type for a matrix of `type`
- typ::Matrix mat(const Source& source,
- typ::Type type,
- uint32_t columns,
- uint32_t rows) const {
+ ast::Matrix* mat(const Source& source,
+ ast::Type* type,
+ uint32_t columns,
+ uint32_t rows) const {
return builder->create<ast::Matrix>(source, type, rows, columns);
}
/// @param type matrix subtype
/// @return the tint AST type for a 2x3 matrix of `type`.
- typ::Matrix mat2x2(ast::Type* type) const { return mat(type, 2u, 2u); }
+ ast::Matrix* mat2x2(ast::Type* type) const { return mat(type, 2u, 2u); }
/// @param type matrix subtype
/// @return the tint AST type for a 2x3 matrix of `type`.
- typ::Matrix mat2x3(ast::Type* type) const { return mat(type, 2u, 3u); }
+ ast::Matrix* mat2x3(ast::Type* type) const { return mat(type, 2u, 3u); }
/// @param type matrix subtype
/// @return the tint AST type for a 2x4 matrix of `type`.
- typ::Matrix mat2x4(ast::Type* type) const { return mat(type, 2u, 4u); }
+ ast::Matrix* mat2x4(ast::Type* type) const { return mat(type, 2u, 4u); }
/// @param type matrix subtype
/// @return the tint AST type for a 3x2 matrix of `type`.
- typ::Matrix mat3x2(ast::Type* type) const { return mat(type, 3u, 2u); }
+ ast::Matrix* mat3x2(ast::Type* type) const { return mat(type, 3u, 2u); }
/// @param type matrix subtype
/// @return the tint AST type for a 3x3 matrix of `type`.
- typ::Matrix mat3x3(ast::Type* type) const { return mat(type, 3u, 3u); }
+ ast::Matrix* mat3x3(ast::Type* type) const { return mat(type, 3u, 3u); }
/// @param type matrix subtype
/// @return the tint AST type for a 3x4 matrix of `type`.
- typ::Matrix mat3x4(ast::Type* type) const { return mat(type, 3u, 4u); }
+ ast::Matrix* mat3x4(ast::Type* type) const { return mat(type, 3u, 4u); }
/// @param type matrix subtype
/// @return the tint AST type for a 4x2 matrix of `type`.
- typ::Matrix mat4x2(ast::Type* type) const { return mat(type, 4u, 2u); }
+ ast::Matrix* mat4x2(ast::Type* type) const { return mat(type, 4u, 2u); }
/// @param type matrix subtype
/// @return the tint AST type for a 4x3 matrix of `type`.
- typ::Matrix mat4x3(ast::Type* type) const { return mat(type, 4u, 3u); }
+ ast::Matrix* mat4x3(ast::Type* type) const { return mat(type, 4u, 3u); }
/// @param type matrix subtype
/// @return the tint AST type for a 4x4 matrix of `type`.
- typ::Matrix mat4x4(ast::Type* type) const { return mat(type, 4u, 4u); }
+ ast::Matrix* mat4x4(ast::Type* type) const { return mat(type, 4u, 4u); }
/// @param columns number of columns for the matrix
/// @param rows number of rows for the matrix
/// @return the tint AST type for a matrix of `type`
template <typename T>
- typ::Matrix mat(uint32_t columns, uint32_t rows) const {
+ ast::Matrix* mat(uint32_t columns, uint32_t rows) const {
return mat(Of<T>(), columns, rows);
}
/// @return the tint AST type for a 2x3 matrix of the C type `T`.
template <typename T>
- typ::Matrix mat2x2() const {
+ ast::Matrix* mat2x2() const {
return mat2x2(Of<T>());
}
/// @return the tint AST type for a 2x3 matrix of the C type `T`.
template <typename T>
- typ::Matrix mat2x3() const {
+ ast::Matrix* mat2x3() const {
return mat2x3(Of<T>());
}
/// @return the tint AST type for a 2x4 matrix of the C type `T`.
template <typename T>
- typ::Matrix mat2x4() const {
+ ast::Matrix* mat2x4() const {
return mat2x4(Of<T>());
}
/// @return the tint AST type for a 3x2 matrix of the C type `T`.
template <typename T>
- typ::Matrix mat3x2() const {
+ ast::Matrix* mat3x2() const {
return mat3x2(Of<T>());
}
/// @return the tint AST type for a 3x3 matrix of the C type `T`.
template <typename T>
- typ::Matrix mat3x3() const {
+ ast::Matrix* mat3x3() const {
return mat3x3(Of<T>());
}
/// @return the tint AST type for a 3x4 matrix of the C type `T`.
template <typename T>
- typ::Matrix mat3x4() const {
+ ast::Matrix* mat3x4() const {
return mat3x4(Of<T>());
}
/// @return the tint AST type for a 4x2 matrix of the C type `T`.
template <typename T>
- typ::Matrix mat4x2() const {
+ ast::Matrix* mat4x2() const {
return mat4x2(Of<T>());
}
/// @return the tint AST type for a 4x3 matrix of the C type `T`.
template <typename T>
- typ::Matrix mat4x3() const {
+ ast::Matrix* mat4x3() const {
return mat4x3(Of<T>());
}
/// @return the tint AST type for a 4x4 matrix of the C type `T`.
template <typename T>
- typ::Matrix mat4x4() const {
+ ast::Matrix* mat4x4() const {
return mat4x4(Of<T>());
}
@@ -663,7 +662,7 @@
/// @param type the alias type
/// @returns the alias pointer
template <typename NAME>
- ast::Alias* alias(NAME&& name, typ::Type type) const {
+ ast::Alias* alias(NAME&& name, ast::Type* type) const {
type = MaybeCreateTypename(type);
auto sym = builder->Sym(std::forward<NAME>(name));
return builder->create<ast::Alias>(sym, type);
@@ -675,7 +674,9 @@
/// @param type the alias type
/// @returns the alias pointer
template <typename NAME>
- ast::Alias* alias(const Source& source, NAME&& name, typ::Type type) const {
+ ast::Alias* alias(const Source& source,
+ NAME&& name,
+ ast::Type* type) const {
type = MaybeCreateTypename(type);
auto sym = builder->Sym(std::forward<NAME>(name));
return builder->create<ast::Alias>(source, sym, type);
@@ -707,8 +708,8 @@
/// @param type the type of the pointer
/// @param storage_class the storage class of the pointer
/// @return the pointer to `type` with the given ast::StorageClass
- typ::Pointer pointer(ast::Type* type,
- ast::StorageClass storage_class) const {
+ ast::Pointer* pointer(ast::Type* type,
+ ast::StorageClass storage_class) const {
type = MaybeCreateTypename(type);
return builder->create<ast::Pointer>(type, storage_class);
}
@@ -717,9 +718,9 @@
/// @param type the type of the pointer
/// @param storage_class the storage class of the pointer
/// @return the pointer to `type` with the given ast::StorageClass
- typ::Pointer pointer(const Source& source,
- typ::Type type,
- ast::StorageClass storage_class) const {
+ ast::Pointer* pointer(const Source& source,
+ ast::Type* type,
+ ast::StorageClass storage_class) const {
type = MaybeCreateTypename(type);
return builder->create<ast::Pointer>(source, type, storage_class);
}
@@ -727,42 +728,42 @@
/// @param storage_class the storage class of the pointer
/// @return the pointer to type `T` with the given ast::StorageClass.
template <typename T>
- typ::Pointer pointer(ast::StorageClass storage_class) const {
+ ast::Pointer* pointer(ast::StorageClass storage_class) const {
return pointer(Of<T>(), storage_class);
}
/// @param kind the kind of sampler
/// @returns the sampler
- typ::Sampler sampler(ast::SamplerKind kind) const {
+ ast::Sampler* sampler(ast::SamplerKind kind) const {
return builder->create<ast::Sampler>(kind);
}
/// @param source the Source of the node
/// @param kind the kind of sampler
/// @returns the sampler
- typ::Sampler sampler(const Source& source, ast::SamplerKind kind) const {
+ ast::Sampler* sampler(const Source& source, ast::SamplerKind kind) const {
return builder->create<ast::Sampler>(source, kind);
}
/// @param dims the dimensionality of the texture
/// @returns the depth texture
- typ::DepthTexture depth_texture(ast::TextureDimension dims) const {
+ ast::DepthTexture* depth_texture(ast::TextureDimension dims) const {
return builder->create<ast::DepthTexture>(dims);
}
/// @param source the Source of the node
/// @param dims the dimensionality of the texture
/// @returns the depth texture
- typ::DepthTexture depth_texture(const Source& source,
- ast::TextureDimension dims) const {
+ ast::DepthTexture* depth_texture(const Source& source,
+ ast::TextureDimension dims) const {
return builder->create<ast::DepthTexture>(source, dims);
}
/// @param dims the dimensionality of the texture
/// @param subtype the texture subtype.
/// @returns the sampled texture
- typ::SampledTexture sampled_texture(ast::TextureDimension dims,
- ast::Type* subtype) const {
+ ast::SampledTexture* sampled_texture(ast::TextureDimension dims,
+ ast::Type* subtype) const {
return builder->create<ast::SampledTexture>(dims, subtype);
}
@@ -770,17 +771,17 @@
/// @param dims the dimensionality of the texture
/// @param subtype the texture subtype.
/// @returns the sampled texture
- typ::SampledTexture sampled_texture(const Source& source,
- ast::TextureDimension dims,
- ast::Type* subtype) const {
+ ast::SampledTexture* sampled_texture(const Source& source,
+ ast::TextureDimension dims,
+ ast::Type* subtype) const {
return builder->create<ast::SampledTexture>(source, dims, subtype);
}
/// @param dims the dimensionality of the texture
/// @param subtype the texture subtype.
/// @returns the multisampled texture
- typ::MultisampledTexture multisampled_texture(ast::TextureDimension dims,
- ast::Type* subtype) const {
+ ast::MultisampledTexture* multisampled_texture(ast::TextureDimension dims,
+ ast::Type* subtype) const {
return builder->create<ast::MultisampledTexture>(dims, subtype);
}
@@ -788,17 +789,17 @@
/// @param dims the dimensionality of the texture
/// @param subtype the texture subtype.
/// @returns the multisampled texture
- typ::MultisampledTexture multisampled_texture(const Source& source,
- ast::TextureDimension dims,
- ast::Type* subtype) const {
+ ast::MultisampledTexture* multisampled_texture(const Source& source,
+ ast::TextureDimension dims,
+ ast::Type* subtype) const {
return builder->create<ast::MultisampledTexture>(source, dims, subtype);
}
/// @param dims the dimensionality of the texture
/// @param format the image format of the texture
/// @returns the storage texture
- typ::StorageTexture storage_texture(ast::TextureDimension dims,
- ast::ImageFormat format) const {
+ ast::StorageTexture* storage_texture(ast::TextureDimension dims,
+ ast::ImageFormat format) const {
auto* subtype = ast::StorageTexture::SubtypeFor(format, *builder);
return builder->create<ast::StorageTexture>(dims, format, subtype);
}
@@ -807,22 +808,22 @@
/// @param dims the dimensionality of the texture
/// @param format the image format of the texture
/// @returns the storage texture
- typ::StorageTexture storage_texture(const Source& source,
- ast::TextureDimension dims,
- ast::ImageFormat format) const {
+ ast::StorageTexture* storage_texture(const Source& source,
+ ast::TextureDimension dims,
+ ast::ImageFormat format) const {
auto* subtype = ast::StorageTexture::SubtypeFor(format, *builder);
return builder->create<ast::StorageTexture>(source, dims, format,
subtype);
}
/// @returns the external texture
- typ::ExternalTexture external_texture() const {
+ ast::ExternalTexture* external_texture() const {
return builder->create<ast::ExternalTexture>();
}
/// @param source the Source of the node
/// @returns the external texture
- typ::ExternalTexture external_texture(const Source& source) const {
+ ast::ExternalTexture* external_texture(const Source& source) const {
return builder->create<ast::ExternalTexture>(source);
}
@@ -847,7 +848,7 @@
/// contains a single static `get()` method for obtaining the corresponding
/// AST type for the C type `T`.
/// `get()` has the signature:
- /// `static typ::Type get(Types* t)`
+ /// `static ast::Type* get(Types* t)`
template <typename T>
struct CToAST {};
};
@@ -1333,7 +1334,7 @@
/// variable with the ast::Module.
template <typename NAME>
ast::Variable* GlobalConst(NAME&& name,
- typ::Type type,
+ ast::Type* type,
ast::Expression* constructor,
ast::DecorationList decorations = {}) {
auto* var = Const(std::forward<NAME>(name), type, constructor,
@@ -1353,7 +1354,7 @@
template <typename NAME>
ast::Variable* GlobalConst(const Source& source,
NAME&& name,
- typ::Type type,
+ ast::Type* type,
ast::Expression* constructor,
ast::DecorationList decorations = {}) {
auto* var = Const(source, std::forward<NAME>(name), type, constructor,
@@ -2003,31 +2004,31 @@
// Various template specializations for ProgramBuilder::TypesBuilder::CToAST.
template <>
struct ProgramBuilder::TypesBuilder::CToAST<ProgramBuilder::i32> {
- static typ::Type get(const ProgramBuilder::TypesBuilder* t) {
+ static ast::Type* get(const ProgramBuilder::TypesBuilder* t) {
return t->i32();
}
};
template <>
struct ProgramBuilder::TypesBuilder::CToAST<ProgramBuilder::u32> {
- static typ::Type get(const ProgramBuilder::TypesBuilder* t) {
+ static ast::Type* get(const ProgramBuilder::TypesBuilder* t) {
return t->u32();
}
};
template <>
struct ProgramBuilder::TypesBuilder::CToAST<ProgramBuilder::f32> {
- static typ::Type get(const ProgramBuilder::TypesBuilder* t) {
+ static ast::Type* get(const ProgramBuilder::TypesBuilder* t) {
return t->f32();
}
};
template <>
struct ProgramBuilder::TypesBuilder::CToAST<bool> {
- static typ::Type get(const ProgramBuilder::TypesBuilder* t) {
+ static ast::Type* get(const ProgramBuilder::TypesBuilder* t) {
return t->bool_();
}
};
template <>
struct ProgramBuilder::TypesBuilder::CToAST<void> {
- static typ::Type get(const ProgramBuilder::TypesBuilder* t) {
+ static ast::Type* get(const ProgramBuilder::TypesBuilder* t) {
return t->void_();
}
};
diff --git a/src/program_builder_test.cc b/src/program_builder_test.cc
index f5a7394..bfa9159 100644
--- a/src/program_builder_test.cc
+++ b/src/program_builder_test.cc
@@ -33,7 +33,7 @@
TEST_F(ProgramBuilderTest, WrapDoesntAffectInner) {
Program inner([] {
ProgramBuilder builder;
- auto ty = builder.ty.f32();
+ auto* ty = builder.ty.f32();
builder.Func("a", {}, ty, {}, {});
return builder;
}());
@@ -54,7 +54,7 @@
EXPECT_FALSE(inner.Symbols().Get("b").IsValid());
EXPECT_FALSE(outer.Symbols().Get("b").IsValid());
- auto ty = outer.ty.f32();
+ auto* ty = outer.ty.f32();
outer.Func("b", {}, ty, {}, {});
ASSERT_EQ(inner.AST().Functions().size(), 1u);
diff --git a/src/reader/wgsl/parser_impl.h b/src/reader/wgsl/parser_impl.h
index 513da69..261d2c9 100644
--- a/src/reader/wgsl/parser_impl.h
+++ b/src/reader/wgsl/parser_impl.h
@@ -27,7 +27,6 @@
#include "src/reader/wgsl/parser_impl_detail.h"
#include "src/reader/wgsl/token.h"
#include "src/sem/storage_texture_type.h"
-#include "src/typepair.h"
namespace tint {
namespace ast {
diff --git a/src/reader/wgsl/parser_impl_detail.h b/src/reader/wgsl/parser_impl_detail.h
index 26f2813..6d5d144 100644
--- a/src/reader/wgsl/parser_impl_detail.h
+++ b/src/reader/wgsl/parser_impl_detail.h
@@ -16,7 +16,6 @@
#define SRC_READER_WGSL_PARSER_IMPL_DETAIL_H_
#include <memory>
-#include "src/typepair.h"
namespace tint {
namespace reader {
@@ -63,17 +62,6 @@
static inline T* ptr(T* val) { return val; }
};
-/// OperatorArrow template specialization for TypePair<T, U>.
-template <typename T, typename U>
-struct OperatorArrow<typ::TypePair<T, U>> {
- /// type resolves to the same as input type to allow for operator-> chaining
- using type = typ::TypePair<T, U>;
- /// @param val the value held by `ParserImpl::Expect<T>` or
- /// `ParserImpl::Maybe<T>`.
- /// @return `val`.
- static inline type& ptr(type& val) { return val; }
-};
-
} // namespace detail
} // namespace wgsl
} // namespace reader
diff --git a/src/resolver/assignment_validation_test.cc b/src/resolver/assignment_validation_test.cc
index 86a92c2..3a4bc3f 100644
--- a/src/resolver/assignment_validation_test.cc
+++ b/src/resolver/assignment_validation_test.cc
@@ -161,8 +161,8 @@
// a = b;
auto make_type = [&] {
- auto tex_type = ty.storage_texture(ast::TextureDimension::k1d,
- ast::ImageFormat::kRgba8Unorm);
+ auto* tex_type = ty.storage_texture(ast::TextureDimension::k1d,
+ ast::ImageFormat::kRgba8Unorm);
return ty.access(ast::AccessControl::kReadOnly, tex_type);
};
diff --git a/src/resolver/intrinsic_test.cc b/src/resolver/intrinsic_test.cc
index 69a8001..76452e8 100644
--- a/src/resolver/intrinsic_test.cc
+++ b/src/resolver/intrinsic_test.cc
@@ -222,7 +222,7 @@
/// @param dim dimensionality of the texture being sampled
/// @param scalar the scalar type
/// @returns a pointer to a type appropriate for the coord param
- typ::Type GetCoordsType(ast::TextureDimension dim, typ::Type scalar) {
+ ast::Type* GetCoordsType(ast::TextureDimension dim, ast::Type* scalar) {
switch (dim) {
case ast::TextureDimension::k1d:
return scalar;
@@ -255,7 +255,7 @@
call_params->push_back(Expr(name));
}
- typ::Type subtype(Texture type) {
+ ast::Type* subtype(Texture type) {
if (type == Texture::kF32) {
return ty.f32();
}
@@ -273,8 +273,8 @@
auto type = GetParam().type;
auto format = GetParam().format;
- auto coords_type = GetCoordsType(dim, ty.i32());
- auto texture_type = ty.storage_texture(dim, format);
+ auto* coords_type = GetCoordsType(dim, ty.i32());
+ auto* texture_type = ty.storage_texture(dim, format);
auto* ro_texture_type =
ty.access(ast::AccessControl::kReadOnly, texture_type);
@@ -339,9 +339,9 @@
auto dim = GetParam().dim;
auto type = GetParam().type;
- auto s = subtype(type);
- auto coords_type = GetCoordsType(dim, ty.i32());
- auto texture_type = ty.sampled_texture(dim, s);
+ auto* s = subtype(type);
+ auto* coords_type = GetCoordsType(dim, ty.i32());
+ auto* texture_type = ty.sampled_texture(dim, s);
ast::ExpressionList call_params;
diff --git a/src/resolver/resolver.cc b/src/resolver/resolver.cc
index 246c2da..dba06ce 100644
--- a/src/resolver/resolver.cc
+++ b/src/resolver/resolver.cc
@@ -2446,7 +2446,7 @@
sem::Type* Resolver::TypeOf(const ast::Expression* expr) {
auto it = expr_info_.find(expr);
if (it != expr_info_.end()) {
- return it->second.type;
+ return const_cast<sem::Type*>(it->second.type);
}
return nullptr;
}
@@ -2477,19 +2477,17 @@
return nullptr;
}
-void Resolver::SetType(ast::Expression* expr, typ::Type type) {
- SetType(expr, type,
- type.sem ? type.sem->FriendlyName(builder_->Symbols())
- : type.ast->FriendlyName(builder_->Symbols()));
+void Resolver::SetType(ast::Expression* expr, const ast::Type* type) {
+ SetType(expr, Type(type), type->FriendlyName(builder_->Symbols()));
+}
+
+void Resolver::SetType(ast::Expression* expr, const sem::Type* type) {
+ SetType(expr, type, type->FriendlyName(builder_->Symbols()));
}
void Resolver::SetType(ast::Expression* expr,
- typ::Type type,
+ const sem::Type* type,
const std::string& type_name) {
- if (!type.sem) {
- type.sem = Type(type.ast);
- TINT_ASSERT(type.sem);
- }
if (expr_info_.count(expr)) {
TINT_ICE(diagnostics_) << "SetType() called twice for the same expression";
}
diff --git a/src/resolver/resolver.h b/src/resolver/resolver.h
index ac2bbf0..2df4789 100644
--- a/src/resolver/resolver.h
+++ b/src/resolver/resolver.h
@@ -122,7 +122,7 @@
/// Structure holding semantic information about an expression.
/// Used to build the sem::Expression nodes at the end of resolving.
struct ExpressionInfo {
- sem::Type* type;
+ sem::Type const* type;
std::string const type_name; // Declared type name
sem::Statement* statement;
};
@@ -318,11 +318,17 @@
/// @param lit the literal
sem::Type* TypeOf(const ast::Literal* lit);
+ /// Creates a sem::Expression node with the pre-resolved AST type `type`, and
+ /// assigns this semantic node to the expression `expr`.
+ /// @param expr the expression
+ /// @param type the AST type
+ void SetType(ast::Expression* expr, const ast::Type* type);
+
/// Creates a sem::Expression node with the resolved type `type`, and
/// assigns this semantic node to the expression `expr`.
/// @param expr the expression
/// @param type the resolved type
- void SetType(ast::Expression* expr, typ::Type type);
+ void SetType(ast::Expression* expr, const sem::Type* type);
/// Creates a sem::Expression node with the resolved type `type`, the declared
/// type name `type_name` and assigns this semantic node to the expression
@@ -331,7 +337,7 @@
/// @param type the resolved type
/// @param type_name the declared type name
void SetType(ast::Expression* expr,
- typ::Type type,
+ const sem::Type* type,
const std::string& type_name);
/// Resolve the value of a scalar const_expr.
diff --git a/src/resolver/resolver_test.cc b/src/resolver/resolver_test.cc
index 53fb0b7..1645aab 100644
--- a/src/resolver/resolver_test.cc
+++ b/src/resolver/resolver_test.cc
@@ -1579,8 +1579,8 @@
uint32_t rhs_mat_rows = std::get<2>(GetParam());
uint32_t rhs_mat_cols = std::get<3>(GetParam());
- auto lhs_type = ty.mat<f32>(lhs_mat_cols, lhs_mat_rows);
- auto rhs_type = ty.mat<f32>(rhs_mat_cols, rhs_mat_rows);
+ auto* lhs_type = ty.mat<f32>(lhs_mat_cols, lhs_mat_rows);
+ auto* rhs_type = ty.mat<f32>(rhs_mat_cols, rhs_mat_rows);
auto* f32 = create<sem::F32>();
auto* col = create<sem::Vector>(f32, lhs_mat_rows);
@@ -1650,7 +1650,7 @@
}
TEST_F(ResolverTest, StorageClass_SetForSampler) {
- auto t = ty.sampler(ast::SamplerKind::kSampler);
+ auto* t = ty.sampler(ast::SamplerKind::kSampler);
auto* var = Global("var", t, ast::StorageClass::kNone, nullptr,
{
create<ast::BindingDecoration>(0),
@@ -1664,7 +1664,7 @@
}
TEST_F(ResolverTest, StorageClass_SetForTexture) {
- auto t = ty.sampled_texture(ast::TextureDimension::k1d, ty.f32());
+ auto* t = ty.sampled_texture(ast::TextureDimension::k1d, ty.f32());
auto* ac = ty.access(ast::AccessControl::kReadOnly, t);
auto* var = Global("var", ac, ast::StorageClass::kNone, nullptr,
{
diff --git a/src/resolver/resolver_test_helper.h b/src/resolver/resolver_test_helper.h
index a9dbb36..b82aec0 100644
--- a/src/resolver/resolver_test_helper.h
+++ b/src/resolver/resolver_test_helper.h
@@ -99,9 +99,15 @@
/// @param type a type
/// @returns the name for `type` that closely resembles how it would be
/// declared in WGSL.
- std::string FriendlyName(typ::Type type) {
- return type.ast ? type.ast->FriendlyName(Symbols())
- : type.sem->FriendlyName(Symbols());
+ std::string FriendlyName(const ast::Type* type) {
+ return type->FriendlyName(Symbols());
+ }
+
+ /// @param type a type
+ /// @returns the name for `type` that closely resembles how it would be
+ /// declared in WGSL.
+ std::string FriendlyName(const sem::Type* type) {
+ return type->FriendlyName(Symbols());
}
private:
diff --git a/src/resolver/type_validation_test.cc b/src/resolver/type_validation_test.cc
index de11bb9..86481e9 100644
--- a/src/resolver/type_validation_test.cc
+++ b/src/resolver/type_validation_test.cc
@@ -513,7 +513,7 @@
// var a : [[access(read)]] texture_storage_*<ru32int>;
auto& params = GetParam();
- auto st = ty.storage_texture(params.dim, ast::ImageFormat::kR32Uint);
+ auto* st = ty.storage_texture(params.dim, ast::ImageFormat::kR32Uint);
auto* ac = ty.access(ast::AccessControl::kReadOnly, st);
Global("a", ac, ast::StorageClass::kNone, nullptr,
@@ -586,7 +586,7 @@
// [[group(0), binding(3)]]
// var d : [[access(read)]] texture_storage_3d<*>;
- auto st_a = ty.storage_texture(ast::TextureDimension::k1d, params.format);
+ auto* st_a = ty.storage_texture(ast::TextureDimension::k1d, params.format);
auto* ac_a = ty.access(ast::AccessControl::kReadOnly, st_a);
Global("a", ac_a, ast::StorageClass::kNone, nullptr,
ast::DecorationList{
@@ -594,7 +594,7 @@
create<ast::GroupDecoration>(0),
});
- auto st_b = ty.storage_texture(ast::TextureDimension::k2d, params.format);
+ auto* st_b = ty.storage_texture(ast::TextureDimension::k2d, params.format);
auto* ac_b = ty.access(ast::AccessControl::kReadOnly, st_b);
Global("b", ac_b, ast::StorageClass::kNone, nullptr,
ast::DecorationList{
@@ -602,7 +602,7 @@
create<ast::GroupDecoration>(1),
});
- auto st_c =
+ auto* st_c =
ty.storage_texture(ast::TextureDimension::k2dArray, params.format);
auto* ac_c = ty.access(ast::AccessControl::kReadOnly, st_c);
Global("c", ac_c, ast::StorageClass::kNone, nullptr,
@@ -611,7 +611,7 @@
create<ast::GroupDecoration>(2),
});
- auto st_d = ty.storage_texture(ast::TextureDimension::k3d, params.format);
+ auto* st_d = ty.storage_texture(ast::TextureDimension::k3d, params.format);
auto* ac_d = ty.access(ast::AccessControl::kReadOnly, st_d);
Global("d", ac_d, ast::StorageClass::kNone, nullptr,
ast::DecorationList{
@@ -635,8 +635,8 @@
// [[group(0), binding(0)]]
// var a : texture_storage_1d<ru32int>;
- auto st = ty.storage_texture(ast::TextureDimension::k1d,
- ast::ImageFormat::kR32Uint);
+ auto* st = ty.storage_texture(ast::TextureDimension::k1d,
+ ast::ImageFormat::kR32Uint);
Global("a", st, ast::StorageClass::kNone, nullptr,
ast::DecorationList{
@@ -651,8 +651,8 @@
// [[group(0), binding(0)]]
// var a : [[access(readwrite)]] texture_storage_1d<ru32int>;
- auto st = ty.storage_texture(ast::TextureDimension::k1d,
- ast::ImageFormat::kR32Uint);
+ auto* st = ty.storage_texture(ast::TextureDimension::k1d,
+ ast::ImageFormat::kR32Uint);
Global("a", st, ast::StorageClass::kNone, nullptr,
ast::DecorationList{
@@ -667,8 +667,8 @@
// [[group(0), binding(0)]]
// var a : [[access(read)]] texture_storage_1d<ru32int>;
- auto st = ty.storage_texture(ast::TextureDimension::k1d,
- ast::ImageFormat::kR32Uint);
+ auto* st = ty.storage_texture(ast::TextureDimension::k1d,
+ ast::ImageFormat::kR32Uint);
auto* ac = ty.access(ast::AccessControl::kReadOnly, st);
Global("a", ac, ast::StorageClass::kNone, nullptr,
@@ -684,8 +684,8 @@
// [[group(0), binding(0)]]
// var a : [[access(write)]] texture_storage_1d<ru32int>;
- auto st = ty.storage_texture(ast::TextureDimension::k1d,
- ast::ImageFormat::kR32Uint);
+ auto* st = ty.storage_texture(ast::TextureDimension::k1d,
+ ast::ImageFormat::kR32Uint);
auto* ac = ty.access(ast::AccessControl::kWriteOnly, st);
Global("a", ac, ast::StorageClass::kNone, nullptr,
diff --git a/src/resolver/validation_test.cc b/src/resolver/validation_test.cc
index ed4d089..4b9731c 100644
--- a/src/resolver/validation_test.cc
+++ b/src/resolver/validation_test.cc
@@ -343,7 +343,7 @@
}
TEST_F(ResolverValidationTest, StorageClass_SamplerExplicitStorageClass) {
- auto t = ty.sampler(ast::SamplerKind::kSampler);
+ auto* t = ty.sampler(ast::SamplerKind::kSampler);
Global(Source{{12, 34}}, "var", t, ast::StorageClass::kUniformConstant,
nullptr,
{
@@ -359,7 +359,7 @@
}
TEST_F(ResolverValidationTest, StorageClass_TextureExplicitStorageClass) {
- auto t = ty.sampled_texture(ast::TextureDimension::k1d, ty.f32());
+ auto* t = ty.sampled_texture(ast::TextureDimension::k1d, ty.f32());
Global(Source{{12, 34}}, "var", t, ast::StorageClass::kUniformConstant,
nullptr,
{
@@ -1729,7 +1729,7 @@
AST().AddConstructedType(f32_alias);
// vec2<Float32>(1.0f, 1u)
- auto vec_type = ty.vec(f32_alias, 2);
+ auto* vec_type = ty.vec(f32_alias, 2);
auto* tc = create<ast::TypeConstructorExpression>(
Source{{12, 34}}, vec_type,
ExprList(1.0f, create<ast::ScalarConstructorExpression>(Source{{12, 40}},
@@ -1748,7 +1748,7 @@
AST().AddConstructedType(f32_alias);
// vec2<Float32>(1.0f, 1.0f)
- auto vec_type = ty.vec(f32_alias, 2);
+ auto* vec_type = ty.vec(f32_alias, 2);
auto* tc = create<ast::TypeConstructorExpression>(Source{{12, 34}}, vec_type,
ExprList(1.0f, 1.0f));
WrapInFunction(tc);
@@ -1762,7 +1762,7 @@
AST().AddConstructedType(f32_alias);
// vec3<u32>(vec<Float32>(), 1.0f)
- auto vec_type = ty.vec(f32_alias, 2);
+ auto* vec_type = ty.vec(f32_alias, 2);
auto* tc = vec3<u32>(create<ast::TypeConstructorExpression>(
Source{{12, 34}}, vec_type, ExprList()),
1.0f);
@@ -1780,7 +1780,7 @@
AST().AddConstructedType(f32_alias);
// vec3<f32>(vec<Float32>(), 1.0f)
- auto vec_type = ty.vec(f32_alias, 2);
+ auto* vec_type = ty.vec(f32_alias, 2);
auto* tc = vec3<f32>(create<ast::TypeConstructorExpression>(
Source{{12, 34}}, vec_type, ExprList()),
1.0f);
@@ -1813,12 +1813,12 @@
ast::ExpressionList args;
for (uint32_t i = 1; i <= param.columns - 1; i++) {
- auto vec_type = ty.vec<f32>(param.rows);
+ auto* vec_type = ty.vec<f32>(param.rows);
args.push_back(create<ast::TypeConstructorExpression>(
Source{{12, i}}, vec_type, ExprList()));
}
- auto matrix_type = ty.mat<f32>(param.columns, param.rows);
+ auto* matrix_type = ty.mat<f32>(param.columns, param.rows);
auto* tc = create<ast::TypeConstructorExpression>(Source{}, matrix_type,
std::move(args));
WrapInFunction(tc);
@@ -1837,12 +1837,12 @@
ast::ExpressionList args;
for (uint32_t i = 1; i <= param.columns + 1; i++) {
- auto vec_type = ty.vec<f32>(param.rows);
+ auto* vec_type = ty.vec<f32>(param.rows);
args.push_back(create<ast::TypeConstructorExpression>(
Source{{12, i}}, vec_type, ExprList()));
}
- auto matrix_type = ty.mat<f32>(param.columns, param.rows);
+ auto* matrix_type = ty.mat<f32>(param.columns, param.rows);
auto* tc = create<ast::TypeConstructorExpression>(Source{}, matrix_type,
std::move(args));
WrapInFunction(tc);
@@ -1865,7 +1865,7 @@
Literal(1.0f)));
}
- auto matrix_type = ty.mat<f32>(param.columns, param.rows);
+ auto* matrix_type = ty.mat<f32>(param.columns, param.rows);
auto* tc = create<ast::TypeConstructorExpression>(Source{}, matrix_type,
std::move(args));
WrapInFunction(tc);
@@ -1889,16 +1889,16 @@
ast::ExpressionList args;
for (uint32_t i = 1; i <= param.columns - 1; i++) {
- auto valid_vec_type = ty.vec<f32>(param.rows);
+ auto* valid_vec_type = ty.vec<f32>(param.rows);
args.push_back(create<ast::TypeConstructorExpression>(
Source{{12, i}}, valid_vec_type, ExprList()));
}
const size_t kInvalidLoc = 2 * (param.columns - 1);
- auto invalid_vec_type = ty.vec<f32>(param.rows - 1);
+ auto* invalid_vec_type = ty.vec<f32>(param.rows - 1);
args.push_back(create<ast::TypeConstructorExpression>(
Source{{12, kInvalidLoc}}, invalid_vec_type, ExprList()));
- auto matrix_type = ty.mat<f32>(param.columns, param.rows);
+ auto* matrix_type = ty.mat<f32>(param.columns, param.rows);
auto* tc = create<ast::TypeConstructorExpression>(Source{}, matrix_type,
std::move(args));
WrapInFunction(tc);
@@ -1924,16 +1924,16 @@
ast::ExpressionList args;
for (uint32_t i = 1; i <= param.columns - 1; i++) {
- auto valid_vec_type = ty.vec<f32>(param.rows);
+ auto* valid_vec_type = ty.vec<f32>(param.rows);
args.push_back(create<ast::TypeConstructorExpression>(
Source{{12, i}}, valid_vec_type, ExprList()));
}
const size_t kInvalidLoc = 2 * (param.columns - 1);
- auto invalid_vec_type = ty.vec<f32>(param.rows + 1);
+ auto* invalid_vec_type = ty.vec<f32>(param.rows + 1);
args.push_back(create<ast::TypeConstructorExpression>(
Source{{12, kInvalidLoc}}, invalid_vec_type, ExprList()));
- auto matrix_type = ty.mat<f32>(param.columns, param.rows);
+ auto* matrix_type = ty.mat<f32>(param.columns, param.rows);
auto* tc = create<ast::TypeConstructorExpression>(Source{}, matrix_type,
std::move(args));
WrapInFunction(tc);
@@ -1954,12 +1954,12 @@
ast::ExpressionList args;
for (uint32_t i = 1; i <= param.columns; i++) {
- auto vec_type = ty.vec<u32>(param.rows);
+ auto* vec_type = ty.vec<u32>(param.rows);
args.push_back(create<ast::TypeConstructorExpression>(
Source{{12, i}}, vec_type, ExprList()));
}
- auto matrix_type = ty.mat<f32>(param.columns, param.rows);
+ auto* matrix_type = ty.mat<f32>(param.columns, param.rows);
auto* tc = create<ast::TypeConstructorExpression>(Source{}, matrix_type,
std::move(args));
WrapInFunction(tc);
@@ -1975,7 +1975,7 @@
// matNxM<f32>();
const auto param = GetParam();
- auto matrix_type = ty.mat<f32>(param.columns, param.rows);
+ auto* matrix_type = ty.mat<f32>(param.columns, param.rows);
auto* tc = create<ast::TypeConstructorExpression>(Source{{12, 40}},
matrix_type, ExprList());
WrapInFunction(tc);
@@ -1990,12 +1990,12 @@
ast::ExpressionList args;
for (uint32_t i = 1; i <= param.columns; i++) {
- auto vec_type = ty.vec<f32>(param.rows);
+ auto* vec_type = ty.vec<f32>(param.rows);
args.push_back(create<ast::TypeConstructorExpression>(
Source{{12, i}}, vec_type, ExprList()));
}
- auto matrix_type = ty.mat<f32>(param.columns, param.rows);
+ auto* matrix_type = ty.mat<f32>(param.columns, param.rows);
auto* tc = create<ast::TypeConstructorExpression>(Source{}, matrix_type,
std::move(args));
WrapInFunction(tc);
@@ -2012,12 +2012,12 @@
ast::ExpressionList args;
for (uint32_t i = 1; i <= param.columns; i++) {
- auto vec_type = ty.vec(ty.u32(), param.rows);
+ auto* vec_type = ty.vec(ty.u32(), param.rows);
args.push_back(create<ast::TypeConstructorExpression>(
Source{{12, i}}, vec_type, ExprList()));
}
- auto matrix_type = ty.mat(f32_alias, param.columns, param.rows);
+ auto* matrix_type = ty.mat(f32_alias, param.columns, param.rows);
auto* tc = create<ast::TypeConstructorExpression>(Source{}, matrix_type,
std::move(args));
WrapInFunction(tc);
@@ -2038,12 +2038,12 @@
ast::ExpressionList args;
for (uint32_t i = 1; i <= param.columns; i++) {
- auto vec_type = ty.vec<f32>(param.rows);
+ auto* vec_type = ty.vec<f32>(param.rows);
args.push_back(create<ast::TypeConstructorExpression>(
Source{{12, i}}, vec_type, ExprList()));
}
- auto matrix_type = ty.mat(f32_alias, param.columns, param.rows);
+ auto* matrix_type = ty.mat(f32_alias, param.columns, param.rows);
auto* tc = create<ast::TypeConstructorExpression>(Source{}, matrix_type,
std::move(args));
WrapInFunction(tc);
@@ -2068,8 +2068,8 @@
TEST_P(MatrixConstructorTest, Expr_Constructor_ArgumentTypeAlias_Success) {
const auto param = GetParam();
- auto matrix_type = ty.mat<f32>(param.columns, param.rows);
- auto vec_type = ty.vec<f32>(param.rows);
+ auto* matrix_type = ty.mat<f32>(param.columns, param.rows);
+ auto* vec_type = ty.vec<f32>(param.rows);
auto* vec_alias = ty.alias("VectorFloat2", vec_type);
AST().AddConstructedType(vec_alias);
@@ -2088,13 +2088,13 @@
TEST_P(MatrixConstructorTest, Expr_Constructor_ArgumentElementTypeAlias_Error) {
const auto param = GetParam();
- auto matrix_type = ty.mat<f32>(param.columns, param.rows);
+ auto* matrix_type = ty.mat<f32>(param.columns, param.rows);
auto* f32_alias = ty.alias("UnsignedInt", ty.u32());
AST().AddConstructedType(f32_alias);
ast::ExpressionList args;
for (uint32_t i = 1; i <= param.columns; i++) {
- auto vec_type = ty.vec(f32_alias, param.rows);
+ auto* vec_type = ty.vec(f32_alias, param.rows);
args.push_back(create<ast::TypeConstructorExpression>(
Source{{12, i}}, vec_type, ExprList()));
}
@@ -2118,12 +2118,12 @@
ast::ExpressionList args;
for (uint32_t i = 1; i <= param.columns; i++) {
- auto vec_type = ty.vec(f32_alias, param.rows);
+ auto* vec_type = ty.vec(f32_alias, param.rows);
args.push_back(create<ast::TypeConstructorExpression>(
Source{{12, i}}, vec_type, ExprList()));
}
- auto matrix_type = ty.mat<f32>(param.columns, param.rows);
+ auto* matrix_type = ty.mat<f32>(param.columns, param.rows);
auto* tc = create<ast::TypeConstructorExpression>(Source{}, matrix_type,
std::move(args));
WrapInFunction(tc);
diff --git a/src/transform/external_texture_transform.cc b/src/transform/external_texture_transform.cc
index c8fb07f..036c296 100644
--- a/src/transform/external_texture_transform.cc
+++ b/src/transform/external_texture_transform.cc
@@ -108,8 +108,8 @@
if (Is<ast::ExternalTexture>(var->type())) {
// Replace a single-plane external texture with a 2D, f32 sampled
// texture.
- auto newType = ctx.dst->ty.sampled_texture(ast::TextureDimension::k2d,
- ctx.dst->ty.f32());
+ auto* newType = ctx.dst->ty.sampled_texture(ast::TextureDimension::k2d,
+ ctx.dst->ty.f32());
auto clonedSrc = ctx.Clone(var->source());
auto clonedSym = ctx.Clone(var->symbol());
auto* clonedConstructor = ctx.Clone(var->constructor());
diff --git a/src/typepair.h b/src/typepair.h
deleted file mode 100644
index 78b6a68..0000000
--- a/src/typepair.h
+++ /dev/null
@@ -1,273 +0,0 @@
-// 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_
-
-#include <cstddef>
-#include <type_traits>
-#include <utility>
-
-// X11 likes to #define Bool leading to confusing error messages.
-// If its defined, undefine it.
-#ifdef Bool
-#undef Bool
-#endif
-
-namespace tint {
-
-namespace ast {
-class AccessControl;
-class Array;
-class Bool;
-class DepthTexture;
-class ExternalTexture;
-class F32;
-class I32;
-class Matrix;
-class MultisampledTexture;
-class Pointer;
-class Sampler;
-class SampledTexture;
-class StorageTexture;
-class Struct;
-class Texture;
-class Type;
-class U32;
-class Vector;
-class Void;
-} // namespace ast
-
-namespace sem {
-class AccessControl;
-class Array;
-class Bool;
-class DepthTexture;
-class ExternalTexture;
-class F32;
-class I32;
-class Matrix;
-class MultisampledTexture;
-class Pointer;
-class Sampler;
-class SampledTexture;
-class StorageTexture;
-class Struct;
-class Texture;
-class Type;
-class U32;
-class Vector;
-class Void;
-} // namespace sem
-
-namespace typ { // type-pair
-
-/// A simple wrapper around a raw pointer. Used to prevent a whole bunch of
-/// warnings about `auto` needing to be declared as `auto*` while we're
-/// migrating code.
-template <typename T>
-struct Ptr {
- /// The raw pointer
- T* const ptr;
-
- /// Constructor
- Ptr() = default;
-
- /// Copy constructor
- /// @param other the Ptr to copy
- template <typename OTHER>
- Ptr(const Ptr<OTHER>& other) : ptr(static_cast<T*>(other.ptr)) {}
-
- /// Constructor
- /// @param p the pointer to wrap in a Ptr
- template <typename U>
- Ptr(U* p) : ptr(p) {} // NOLINT: explicit
-
- /// @returns the pointer
- operator T*() { return ptr; }
-
- /// @returns the pointer
- operator const T*() const { return ptr; }
-
- /// @returns the pointer
- T* operator->() { return ptr; }
-
- /// @returns the pointer
- const T* operator->() const { return ptr; }
-};
-
-/// TypePair 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 <typename AST, typename SEM>
-struct TypePair {
- /// Alias of the `AST` template type parameter
- using AST_TYPE = AST;
- /// Alias of the `SEM` template type parameter
- using SEM_TYPE = SEM;
-
- /// The ast::Type pointer
- AST const* ast = nullptr;
- /// The sem::Type pointer
- SEM const* sem = nullptr;
-
- /// Constructor
- TypePair() = default;
- /// Copy constructor
- /// @param other the TypePair to copy
- template <typename OTHER_AST, typename OTHER_SEM>
- TypePair(const TypePair<OTHER_AST, OTHER_SEM>& other)
- : ast(static_cast<const AST*>(other.ast)),
- sem(static_cast<const SEM*>(other.sem)) {}
- /// Constructor
- /// @param a the ast::Type pointer
- TypePair(const AST* a) : ast(a) {} // NOLINT: explicit
- /// Constructor
- /// @param s the sem::Type pointer
- TypePair(const SEM* s) : sem(s) {} // NOLINT: explicit
- /// Constructor
- /// @param a the ast::Type pointer
- /// @param s the sem::Type pointer
- TypePair(const AST* a, const SEM* s) : ast(a), sem(s) {}
- /// Constructor
- /// @param ptr the Ptr<T>
- template <typename T>
- TypePair(Ptr<T> ptr) : TypePair(ptr.ptr) {} // NOLINT: explicit
- /// Constructor
- TypePair(std::nullptr_t) {} // NOLINT: explicit
-
- /// @returns the ast::Type pointer
- operator AST*() const { return const_cast<AST*>(ast); }
- /// @returns the sem::Type pointer
- operator SEM*() const { return const_cast<SEM*>(sem); }
- /// @returns the sem::Type pointer
- SEM* operator->() const { return const_cast<SEM*>(sem); }
-
- /// @returns true if sem is valid
- explicit operator bool() const { return sem != nullptr; }
-
- /// @param ty the semantic type to compare against
- /// @returns true if the semantic type is equal to `ty`
- bool operator==(sem::Type* ty) const { return sem == ty; }
-
- /// @param ty the semantic type to compare against
- /// @returns true if the semantic type is not equal to `ty`
- bool operator!=(sem::Type* ty) const { return !((*this) == ty); }
-
- /// @param other the TypePair to compare against
- /// @returns true if this TypePair is less than `other`
- template <typename OTHER_AST, typename OTHER_SEM>
- bool operator<(const TypePair<OTHER_AST, OTHER_SEM>& other) const {
- if (sem < other.sem) {
- return true;
- }
- if (sem > other.sem) {
- return false;
- }
- return ast < other.ast;
- }
-};
-
-/// @param lhs LHS value to compare
-/// @param rhs RHS value to compare
-/// @returns true if values compare equal
-template <typename AST, typename SEM>
-bool operator==(const TypePair<AST, SEM>& lhs, const TypePair<AST, SEM>& rhs) {
- return lhs.sem == rhs.sem;
-}
-
-/// @param lhs LHS value to compare
-/// @param rhs RHS value to compare
-/// @returns true if values compare not equal
-template <typename AST, typename SEM>
-bool operator!=(const TypePair<AST, SEM>& lhs, const TypePair<AST, SEM>& rhs) {
- return !(lhs == rhs);
-}
-
-/// @param lhs LHS value to compare
-/// @returns true if `lhs` is nullptr
-template <typename AST, typename SEM>
-bool operator==(const TypePair<AST, SEM>& lhs, std::nullptr_t) {
- return lhs.sem == nullptr;
-}
-
-/// @param lhs LHS value to compare
-/// @returns true if `lhs` is not nullptr
-template <typename AST, typename SEM>
-bool operator!=(const TypePair<AST, SEM>& lhs, std::nullptr_t) {
- return !(lhs == nullptr);
-}
-
-/// @param rhs RHS value to compare
-/// @returns true if `rhs` is nullptr
-template <typename AST, typename SEM>
-bool operator==(std::nullptr_t, const TypePair<AST, SEM>& rhs) {
- return nullptr == rhs.sem;
-}
-
-/// @param rhs RHS value to compare
-/// @returns true if `rhs` is not nullptr
-template <typename AST, typename SEM>
-bool operator!=(std::nullptr_t, const TypePair<AST, SEM>& rhs) {
- return !(nullptr == rhs);
-}
-
-using Type = TypePair<ast::Type, sem::Type>;
-
-
-using Bool = Ptr<ast::Bool>;
-using U32 = Ptr<ast::U32>;
-using I32 = Ptr<ast::I32>;
-using F32 = Ptr<ast::F32>;
-using Void = Ptr<ast::Void>;
-using DepthTexture = Ptr<ast::DepthTexture>;
-using ExternalTexture = Ptr<ast::ExternalTexture>;
-using MultisampledTexture = Ptr<ast::MultisampledTexture>;
-using SampledTexture = Ptr<ast::SampledTexture>;
-using StorageTexture = Ptr<ast::StorageTexture>;
-using Texture = Ptr<ast::Texture>;
-using Sampler = Ptr<ast::Sampler>;
-using Matrix = Ptr<ast::Matrix>;
-using Vector = Ptr<ast::Vector>;
-using Pointer = Ptr<ast::Pointer>;
-using Struct = Ptr<ast::Struct>;
-
-// Helpers
-
-/// Makes a type pair, deducing the return type from input args
-/// @parm ast the ast node
-/// @param sem the sem node
-/// @returns a type pair
-template <typename AST, typename SEM>
-inline auto MakeTypePair(AST* ast, SEM* sem) {
- return TypePair<AST, SEM>{ast, sem};
-}
-
-} // namespace typ
-
-} // namespace tint
-
-#endif // SRC_TYPEPAIR_H_
diff --git a/src/writer/hlsl/generator_impl_member_accessor_test.cc b/src/writer/hlsl/generator_impl_member_accessor_test.cc
index 431912d..e155281 100644
--- a/src/writer/hlsl/generator_impl_member_accessor_test.cc
+++ b/src/writer/hlsl/generator_impl_member_accessor_test.cc
@@ -25,63 +25,63 @@
using ::testing::HasSubstr;
using create_type_func_ptr =
- typ::Type (*)(const ProgramBuilder::TypesBuilder& ty);
+ ast::Type* (*)(const ProgramBuilder::TypesBuilder& ty);
-inline typ::Type ty_i32(const ProgramBuilder::TypesBuilder& ty) {
+inline ast::Type* ty_i32(const ProgramBuilder::TypesBuilder& ty) {
return ty.i32();
}
-inline typ::Type ty_u32(const ProgramBuilder::TypesBuilder& ty) {
+inline ast::Type* ty_u32(const ProgramBuilder::TypesBuilder& ty) {
return ty.u32();
}
-inline typ::Type ty_f32(const ProgramBuilder::TypesBuilder& ty) {
+inline ast::Type* ty_f32(const ProgramBuilder::TypesBuilder& ty) {
return ty.f32();
}
template <typename T>
-inline typ::Type ty_vec2(const ProgramBuilder::TypesBuilder& ty) {
+inline ast::Type* ty_vec2(const ProgramBuilder::TypesBuilder& ty) {
return ty.vec2<T>();
}
template <typename T>
-inline typ::Type ty_vec3(const ProgramBuilder::TypesBuilder& ty) {
+inline ast::Type* ty_vec3(const ProgramBuilder::TypesBuilder& ty) {
return ty.vec3<T>();
}
template <typename T>
-inline typ::Type ty_vec4(const ProgramBuilder::TypesBuilder& ty) {
+inline ast::Type* ty_vec4(const ProgramBuilder::TypesBuilder& ty) {
return ty.vec4<T>();
}
template <typename T>
-inline typ::Type ty_mat2x2(const ProgramBuilder::TypesBuilder& ty) {
+inline ast::Type* ty_mat2x2(const ProgramBuilder::TypesBuilder& ty) {
return ty.mat2x2<T>();
}
template <typename T>
-inline typ::Type ty_mat2x3(const ProgramBuilder::TypesBuilder& ty) {
+inline ast::Type* ty_mat2x3(const ProgramBuilder::TypesBuilder& ty) {
return ty.mat2x3<T>();
}
template <typename T>
-inline typ::Type ty_mat2x4(const ProgramBuilder::TypesBuilder& ty) {
+inline ast::Type* ty_mat2x4(const ProgramBuilder::TypesBuilder& ty) {
return ty.mat2x4<T>();
}
template <typename T>
-inline typ::Type ty_mat3x2(const ProgramBuilder::TypesBuilder& ty) {
+inline ast::Type* ty_mat3x2(const ProgramBuilder::TypesBuilder& ty) {
return ty.mat3x2<T>();
}
template <typename T>
-inline typ::Type ty_mat3x3(const ProgramBuilder::TypesBuilder& ty) {
+inline ast::Type* ty_mat3x3(const ProgramBuilder::TypesBuilder& ty) {
return ty.mat3x3<T>();
}
template <typename T>
-inline typ::Type ty_mat3x4(const ProgramBuilder::TypesBuilder& ty) {
+inline ast::Type* ty_mat3x4(const ProgramBuilder::TypesBuilder& ty) {
return ty.mat3x4<T>();
}
template <typename T>
-inline typ::Type ty_mat4x2(const ProgramBuilder::TypesBuilder& ty) {
+inline ast::Type* ty_mat4x2(const ProgramBuilder::TypesBuilder& ty) {
return ty.mat4x2<T>();
}
template <typename T>
-inline typ::Type ty_mat4x3(const ProgramBuilder::TypesBuilder& ty) {
+inline ast::Type* ty_mat4x3(const ProgramBuilder::TypesBuilder& ty) {
return ty.mat4x3<T>();
}
template <typename T>
-inline typ::Type ty_mat4x4(const ProgramBuilder::TypesBuilder& ty) {
+inline ast::Type* ty_mat4x4(const ProgramBuilder::TypesBuilder& ty) {
return ty.mat4x4<T>();
}
@@ -154,12 +154,8 @@
};
inline std::ostream& operator<<(std::ostream& out, TypeCase c) {
ProgramBuilder b;
- auto ty = c.member_type(b.ty);
- if (ty.sem) {
- out << ty.sem->FriendlyName(b.Symbols());
- } else {
- out << ty.ast->FriendlyName(b.Symbols());
- }
+ auto* ty = c.member_type(b.ty);
+ out << ty->FriendlyName(b.Symbols());
return out;
}
diff --git a/src/writer/hlsl/generator_impl_type_test.cc b/src/writer/hlsl/generator_impl_type_test.cc
index 0418044..a4c2b97 100644
--- a/src/writer/hlsl/generator_impl_type_test.cc
+++ b/src/writer/hlsl/generator_impl_type_test.cc
@@ -352,7 +352,7 @@
TEST_P(HlslDepthTexturesTest, Emit) {
auto params = GetParam();
- auto t = ty.depth_texture(params.dim);
+ auto* t = ty.depth_texture(params.dim);
Global("tex", t, ast::StorageClass::kNone, nullptr,
ast::DecorationList{
@@ -399,7 +399,7 @@
TEST_P(HlslSampledTexturesTest, Emit) {
auto params = GetParam();
- typ::Type datatype;
+ ast::Type* datatype = nullptr;
switch (params.datatype) {
case TextureDataType::F32:
datatype = ty.f32();
@@ -411,7 +411,7 @@
datatype = ty.i32();
break;
}
- auto t = ty.sampled_texture(params.dim, datatype);
+ auto* t = ty.sampled_texture(params.dim, datatype);
Global("tex", t, ast::StorageClass::kNone, nullptr,
ast::DecorationList{
@@ -552,7 +552,7 @@
TEST_P(HlslStorageTexturesTest, Emit) {
auto params = GetParam();
- auto t = ty.storage_texture(params.dim, params.imgfmt);
+ auto* t = ty.storage_texture(params.dim, params.imgfmt);
auto* ac = ty.access(params.ro ? ast::AccessControl::kReadOnly
: ast::AccessControl::kWriteOnly,
t);
diff --git a/src/writer/msl/generator_impl.cc b/src/writer/msl/generator_impl.cc
index f2928a9..9fd861a 100644
--- a/src/writer/msl/generator_impl.cc
+++ b/src/writer/msl/generator_impl.cc
@@ -920,10 +920,7 @@
return true;
}
-bool GeneratorImpl::EmitZeroValue(typ::Type type) {
- if (!type.sem) {
- type.sem = program_->Sem().Get(type.ast);
- }
+bool GeneratorImpl::EmitZeroValue(const sem::Type* type) {
if (type->Is<sem::Bool>()) {
out_ << "false";
} else if (type->Is<sem::F32>()) {
diff --git a/src/writer/msl/generator_impl.h b/src/writer/msl/generator_impl.h
index f701dc2..3608dc6 100644
--- a/src/writer/msl/generator_impl.h
+++ b/src/writer/msl/generator_impl.h
@@ -227,7 +227,7 @@
/// Emits the zero value for the given type
/// @param type the type to emit the value for
/// @returns true if the zero value was successfully emitted.
- bool EmitZeroValue(typ::Type type);
+ bool EmitZeroValue(const sem::Type* type);
/// Determines if the function needs the input struct passed to it.
/// @param func the function to check
diff --git a/src/writer/msl/generator_impl_type_test.cc b/src/writer/msl/generator_impl_type_test.cc
index cf3f141..8054ebd 100644
--- a/src/writer/msl/generator_impl_type_test.cc
+++ b/src/writer/msl/generator_impl_type_test.cc
@@ -765,7 +765,7 @@
TEST_P(MslStorageTexturesTest, Emit) {
auto params = GetParam();
- auto s = ty.storage_texture(params.dim, ast::ImageFormat::kR32Float);
+ auto* s = ty.storage_texture(params.dim, ast::ImageFormat::kR32Float);
auto* ac = ty.access(params.ro ? ast::AccessControl::kReadOnly
: ast::AccessControl::kWriteOnly,
s);
diff --git a/src/writer/spirv/builder_global_variable_test.cc b/src/writer/spirv/builder_global_variable_test.cc
index fc1ee17..f084a40 100644
--- a/src/writer/spirv/builder_global_variable_test.cc
+++ b/src/writer/spirv/builder_global_variable_test.cc
@@ -570,8 +570,8 @@
TEST_F(BuilderTest, GlobalVar_TextureStorageReadOnly) {
// var<uniform_constant> a : [[access(read)]] texture_storage_2d<r32uint>;
- auto type = ty.storage_texture(ast::TextureDimension::k2d,
- ast::ImageFormat::kR32Uint);
+ auto* type = ty.storage_texture(ast::TextureDimension::k2d,
+ ast::ImageFormat::kR32Uint);
auto* ac = ty.access(ast::AccessControl::kReadOnly, type);
@@ -599,8 +599,8 @@
TEST_F(BuilderTest, GlobalVar_TextureStorageWriteOnly) {
// var<uniform_constant> a : [[access(write)]] texture_storage_2d<r32uint>;
- auto type = ty.storage_texture(ast::TextureDimension::k2d,
- ast::ImageFormat::kR32Uint);
+ auto* type = ty.storage_texture(ast::TextureDimension::k2d,
+ ast::ImageFormat::kR32Uint);
auto* ac = ty.access(ast::AccessControl::kWriteOnly, type);
diff --git a/src/writer/spirv/builder_intrinsic_test.cc b/src/writer/spirv/builder_intrinsic_test.cc
index d6d8156..3c40829 100644
--- a/src/writer/spirv/builder_intrinsic_test.cc
+++ b/src/writer/spirv/builder_intrinsic_test.cc
@@ -370,8 +370,8 @@
// This tests that we do not push OpTypeSampledImage and float_0 type twice.
TEST_F(IntrinsicBuilderTest, Call_TextureSampleCompare_Twice) {
- auto s = ty.sampler(ast::SamplerKind::kComparisonSampler);
- auto t = ty.depth_texture(ast::TextureDimension::k2d);
+ auto* s = ty.sampler(ast::SamplerKind::kComparisonSampler);
+ auto* t = ty.depth_texture(ast::TextureDimension::k2d);
auto* tex = Global("texture", t, ast::StorageClass::kNone, nullptr,
{
diff --git a/src/writer/spirv/builder_type_test.cc b/src/writer/spirv/builder_type_test.cc
index 255f695..fec6b39 100644
--- a/src/writer/spirv/builder_type_test.cc
+++ b/src/writer/spirv/builder_type_test.cc
@@ -830,8 +830,8 @@
}
TEST_F(BuilderTest_Type, StorageTexture_Generate_1d) {
- auto s = ty.storage_texture(ast::TextureDimension::k1d,
- ast::ImageFormat::kR32Float);
+ auto* s = ty.storage_texture(ast::TextureDimension::k1d,
+ ast::ImageFormat::kR32Float);
auto* ac = ty.access(ast::AccessControl::kReadOnly, s);
Global("test_var", ac, ast::StorageClass::kNone, nullptr,
@@ -850,8 +850,8 @@
}
TEST_F(BuilderTest_Type, StorageTexture_Generate_2d) {
- auto s = ty.storage_texture(ast::TextureDimension::k2d,
- ast::ImageFormat::kR32Float);
+ auto* s = ty.storage_texture(ast::TextureDimension::k2d,
+ ast::ImageFormat::kR32Float);
auto* ac = ty.access(ast::AccessControl::kReadOnly, s);
Global("test_var", ac, ast::StorageClass::kNone, nullptr,
@@ -870,8 +870,8 @@
}
TEST_F(BuilderTest_Type, StorageTexture_Generate_2dArray) {
- auto s = ty.storage_texture(ast::TextureDimension::k2dArray,
- ast::ImageFormat::kR32Float);
+ auto* s = ty.storage_texture(ast::TextureDimension::k2dArray,
+ ast::ImageFormat::kR32Float);
auto* ac = ty.access(ast::AccessControl::kReadOnly, s);
Global("test_var", ac, ast::StorageClass::kNone, nullptr,
@@ -890,8 +890,8 @@
}
TEST_F(BuilderTest_Type, StorageTexture_Generate_3d) {
- auto s = ty.storage_texture(ast::TextureDimension::k3d,
- ast::ImageFormat::kR32Float);
+ auto* s = ty.storage_texture(ast::TextureDimension::k3d,
+ ast::ImageFormat::kR32Float);
auto* ac = ty.access(ast::AccessControl::kReadOnly, s);
Global("test_var", ac, ast::StorageClass::kNone, nullptr,
@@ -911,8 +911,8 @@
TEST_F(BuilderTest_Type,
StorageTexture_Generate_SampledTypeFloat_Format_r32float) {
- auto s = ty.storage_texture(ast::TextureDimension::k2d,
- ast::ImageFormat::kR32Float);
+ auto* s = ty.storage_texture(ast::TextureDimension::k2d,
+ ast::ImageFormat::kR32Float);
auto* ac = ty.access(ast::AccessControl::kReadOnly, s);
Global("test_var", ac, ast::StorageClass::kNone, nullptr,
@@ -932,8 +932,8 @@
TEST_F(BuilderTest_Type,
StorageTexture_Generate_SampledTypeSint_Format_r32sint) {
- auto s = ty.storage_texture(ast::TextureDimension::k2d,
- ast::ImageFormat::kR32Sint);
+ auto* s = ty.storage_texture(ast::TextureDimension::k2d,
+ ast::ImageFormat::kR32Sint);
auto* ac = ty.access(ast::AccessControl::kReadOnly, s);
Global("test_var", ac, ast::StorageClass::kNone, nullptr,
@@ -953,8 +953,8 @@
TEST_F(BuilderTest_Type,
StorageTexture_Generate_SampledTypeUint_Format_r32uint) {
- auto s = ty.storage_texture(ast::TextureDimension::k2d,
- ast::ImageFormat::kR32Uint);
+ auto* s = ty.storage_texture(ast::TextureDimension::k2d,
+ ast::ImageFormat::kR32Uint);
auto* ac = ty.access(ast::AccessControl::kReadOnly, s);
Global("test_var", ac, ast::StorageClass::kNone, nullptr,
diff --git a/src/writer/wgsl/generator_impl_function_test.cc b/src/writer/wgsl/generator_impl_function_test.cc
index 0e19f5a..97bf435 100644
--- a/src/writer/wgsl/generator_impl_function_test.cc
+++ b/src/writer/wgsl/generator_impl_function_test.cc
@@ -110,7 +110,7 @@
}
TEST_F(WgslGeneratorImplTest, Emit_Function_EntryPoint_Parameters) {
- auto vec4 = ty.vec4<f32>();
+ auto* vec4 = ty.vec4<f32>();
auto* coord = Param("coord", vec4, {Builtin(ast::Builtin::kPosition)});
auto* loc1 = Param("loc1", ty.f32(), {Location(1u)});
auto* func = Func("frag_main", ast::VariableList{coord, loc1}, ty.void_(),
diff --git a/src/writer/wgsl/generator_impl_global_decl_test.cc b/src/writer/wgsl/generator_impl_global_decl_test.cc
index db555b1..76584d0 100644
--- a/src/writer/wgsl/generator_impl_global_decl_test.cc
+++ b/src/writer/wgsl/generator_impl_global_decl_test.cc
@@ -113,7 +113,7 @@
}
TEST_F(WgslGeneratorImplTest, Emit_Global_Texture) {
- auto st = ty.sampled_texture(ast::TextureDimension::k1d, ty.f32());
+ auto* st = ty.sampled_texture(ast::TextureDimension::k1d, ty.f32());
Global("t", ty.access(ast::AccessControl::kReadOnly, st),
ast::StorageClass::kNone, nullptr,
{create<ast::GroupDecoration>(0), create<ast::BindingDecoration>(0)});
diff --git a/src/writer/wgsl/generator_impl_type_test.cc b/src/writer/wgsl/generator_impl_type_test.cc
index cdd291e..b15559d 100644
--- a/src/writer/wgsl/generator_impl_type_test.cc
+++ b/src/writer/wgsl/generator_impl_type_test.cc
@@ -92,7 +92,7 @@
}
TEST_F(WgslGeneratorImplTest, EmitType_Bool) {
- auto bool_ = ty.bool_();
+ auto* bool_ = ty.bool_();
AST().AddConstructedType(ty.alias("make_type_reachable", bool_));
GeneratorImpl& gen = Build();
@@ -102,7 +102,7 @@
}
TEST_F(WgslGeneratorImplTest, EmitType_F32) {
- auto f32 = ty.f32();
+ auto* f32 = ty.f32();
AST().AddConstructedType(ty.alias("make_type_reachable", f32));
GeneratorImpl& gen = Build();
@@ -112,7 +112,7 @@
}
TEST_F(WgslGeneratorImplTest, EmitType_I32) {
- auto i32 = ty.i32();
+ auto* i32 = ty.i32();
AST().AddConstructedType(ty.alias("make_type_reachable", i32));
GeneratorImpl& gen = Build();
@@ -122,7 +122,7 @@
}
TEST_F(WgslGeneratorImplTest, EmitType_Matrix) {
- auto mat2x3 = ty.mat2x3<f32>();
+ auto* mat2x3 = ty.mat2x3<f32>();
AST().AddConstructedType(ty.alias("make_type_reachable", mat2x3));
GeneratorImpl& gen = Build();
@@ -132,7 +132,7 @@
}
TEST_F(WgslGeneratorImplTest, EmitType_Pointer) {
- auto p = ty.pointer<f32>(ast::StorageClass::kWorkgroup);
+ auto* p = ty.pointer<f32>(ast::StorageClass::kWorkgroup);
AST().AddConstructedType(ty.alias("make_type_reachable", p));
GeneratorImpl& gen = Build();
@@ -275,7 +275,7 @@
}
TEST_F(WgslGeneratorImplTest, EmitType_U32) {
- auto u32 = ty.u32();
+ auto* u32 = ty.u32();
GeneratorImpl& gen = Build();
@@ -284,7 +284,7 @@
}
TEST_F(WgslGeneratorImplTest, EmitType_Vector) {
- auto vec3 = ty.vec3<f32>();
+ auto* vec3 = ty.vec3<f32>();
AST().AddConstructedType(ty.alias("make_type_reachable", vec3));
GeneratorImpl& gen = Build();
@@ -306,7 +306,7 @@
TEST_P(WgslGenerator_DepthTextureTest, EmitType_DepthTexture) {
auto param = GetParam();
- auto d = ty.depth_texture(param.dim);
+ auto* d = ty.depth_texture(param.dim);
AST().AddConstructedType(ty.alias("make_type_reachable", d));
GeneratorImpl& gen = Build();
@@ -328,7 +328,7 @@
TEST_P(WgslGenerator_SampledTextureTest, EmitType_SampledTexture_F32) {
auto param = GetParam();
- auto t = ty.sampled_texture(param.dim, ty.f32());
+ auto* t = ty.sampled_texture(param.dim, ty.f32());
AST().AddConstructedType(ty.alias("make_type_reachable", t));
GeneratorImpl& gen = Build();
@@ -340,7 +340,7 @@
TEST_P(WgslGenerator_SampledTextureTest, EmitType_SampledTexture_I32) {
auto param = GetParam();
- auto t = ty.sampled_texture(param.dim, ty.i32());
+ auto* t = ty.sampled_texture(param.dim, ty.i32());
AST().AddConstructedType(ty.alias("make_type_reachable", t));
GeneratorImpl& gen = Build();
@@ -352,7 +352,7 @@
TEST_P(WgslGenerator_SampledTextureTest, EmitType_SampledTexture_U32) {
auto param = GetParam();
- auto t = ty.sampled_texture(param.dim, ty.u32());
+ auto* t = ty.sampled_texture(param.dim, ty.u32());
AST().AddConstructedType(ty.alias("make_type_reachable", t));
GeneratorImpl& gen = Build();
@@ -375,7 +375,7 @@
TEST_P(WgslGenerator_MultiampledTextureTest, EmitType_MultisampledTexture_F32) {
auto param = GetParam();
- auto t = ty.multisampled_texture(param.dim, ty.f32());
+ auto* t = ty.multisampled_texture(param.dim, ty.f32());
AST().AddConstructedType(ty.alias("make_type_reachable", t));
GeneratorImpl& gen = Build();
@@ -387,7 +387,7 @@
TEST_P(WgslGenerator_MultiampledTextureTest, EmitType_MultisampledTexture_I32) {
auto param = GetParam();
- auto t = ty.multisampled_texture(param.dim, ty.i32());
+ auto* t = ty.multisampled_texture(param.dim, ty.i32());
AST().AddConstructedType(ty.alias("make_type_reachable", t));
GeneratorImpl& gen = Build();
@@ -399,7 +399,7 @@
TEST_P(WgslGenerator_MultiampledTextureTest, EmitType_MultisampledTexture_U32) {
auto param = GetParam();
- auto t = ty.multisampled_texture(param.dim, ty.u32());
+ auto* t = ty.multisampled_texture(param.dim, ty.u32());
AST().AddConstructedType(ty.alias("make_type_reachable", t));
GeneratorImpl& gen = Build();
@@ -427,7 +427,7 @@
TEST_P(WgslGenerator_StorageTextureTest, EmitType_StorageTexture) {
auto param = GetParam();
- auto t = ty.storage_texture(param.dim, param.fmt);
+ auto* t = ty.storage_texture(param.dim, param.fmt);
auto* ac = ty.access(param.access, t);
GeneratorImpl& gen = Build();
@@ -531,7 +531,7 @@
ImageFormatData{ast::ImageFormat::kRgba32Float, "rgba32float"}));
TEST_F(WgslGeneratorImplTest, EmitType_Sampler) {
- auto sampler = ty.sampler(ast::SamplerKind::kSampler);
+ auto* sampler = ty.sampler(ast::SamplerKind::kSampler);
AST().AddConstructedType(ty.alias("make_type_reachable", sampler));
GeneratorImpl& gen = Build();
@@ -541,7 +541,7 @@
}
TEST_F(WgslGeneratorImplTest, EmitType_SamplerComparison) {
- auto sampler = ty.sampler(ast::SamplerKind::kComparisonSampler);
+ auto* sampler = ty.sampler(ast::SamplerKind::kComparisonSampler);
AST().AddConstructedType(ty.alias("make_type_reachable", sampler));
GeneratorImpl& gen = Build();