mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-14 23:56:16 +00:00
ast: Rename ArrayAccessorExpression to IndexAccessorExpression
The object is not always an array. The index can be applied to vectors too. Change-Id: Ifb63d1862090d28cb48d692870e9dd01ddbce5df Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/68841 Kokoro: Kokoro <noreply+kokoro@google.com> Reviewed-by: James Price <jrprice@google.com>
This commit is contained in:
@@ -22,9 +22,9 @@ namespace tint {
|
||||
namespace resolver {
|
||||
namespace {
|
||||
|
||||
using ResolverArrayAccessorTest = ResolverTest;
|
||||
using ResolverIndexAccessorTest = ResolverTest;
|
||||
|
||||
TEST_F(ResolverArrayAccessorTest, Matrix_Dynamic_F32) {
|
||||
TEST_F(ResolverIndexAccessorTest, Matrix_Dynamic_F32) {
|
||||
Global("my_var", ty.mat2x3<f32>(), ast::StorageClass::kPrivate);
|
||||
auto* acc = IndexAccessor("my_var", Expr(Source{{12, 34}}, 1.0f));
|
||||
WrapInFunction(acc);
|
||||
@@ -34,7 +34,7 @@ TEST_F(ResolverArrayAccessorTest, Matrix_Dynamic_F32) {
|
||||
"12:34 error: index must be of type 'i32' or 'u32', found: 'f32'");
|
||||
}
|
||||
|
||||
TEST_F(ResolverArrayAccessorTest, Matrix_Dynamic_Ref) {
|
||||
TEST_F(ResolverIndexAccessorTest, Matrix_Dynamic_Ref) {
|
||||
Global("my_var", ty.mat2x3<f32>(), ast::StorageClass::kPrivate);
|
||||
auto* idx = Var("idx", ty.i32(), Construct(ty.i32()));
|
||||
auto* acc = IndexAccessor("my_var", idx);
|
||||
@@ -43,7 +43,7 @@ TEST_F(ResolverArrayAccessorTest, Matrix_Dynamic_Ref) {
|
||||
EXPECT_TRUE(r()->Resolve()) << r()->error();
|
||||
}
|
||||
|
||||
TEST_F(ResolverArrayAccessorTest, Matrix_BothDimensions_Dynamic_Ref) {
|
||||
TEST_F(ResolverIndexAccessorTest, Matrix_BothDimensions_Dynamic_Ref) {
|
||||
Global("my_var", ty.mat4x4<f32>(), ast::StorageClass::kPrivate);
|
||||
auto* idx = Var("idx", ty.u32(), Expr(3u));
|
||||
auto* idy = Var("idy", ty.u32(), Expr(2u));
|
||||
@@ -53,7 +53,7 @@ TEST_F(ResolverArrayAccessorTest, Matrix_BothDimensions_Dynamic_Ref) {
|
||||
EXPECT_TRUE(r()->Resolve()) << r()->error();
|
||||
}
|
||||
|
||||
TEST_F(ResolverArrayAccessorTest, Matrix_Dynamic) {
|
||||
TEST_F(ResolverIndexAccessorTest, Matrix_Dynamic) {
|
||||
GlobalConst("my_const", ty.mat2x3<f32>(), Construct(ty.mat2x3<f32>()));
|
||||
auto* idx = Var("idx", ty.i32(), Construct(ty.i32()));
|
||||
auto* acc = IndexAccessor("my_const", Expr(Source{{12, 34}}, idx));
|
||||
@@ -64,7 +64,7 @@ TEST_F(ResolverArrayAccessorTest, Matrix_Dynamic) {
|
||||
"12:34 error: index must be signed or unsigned integer literal");
|
||||
}
|
||||
|
||||
TEST_F(ResolverArrayAccessorTest, Matrix_XDimension_Dynamic) {
|
||||
TEST_F(ResolverIndexAccessorTest, Matrix_XDimension_Dynamic) {
|
||||
GlobalConst("my_var", ty.mat4x4<f32>(), Construct(ty.mat4x4<f32>()));
|
||||
auto* idx = Var("idx", ty.u32(), Expr(3u));
|
||||
auto* acc = IndexAccessor("my_var", Expr(Source{{12, 34}}, idx));
|
||||
@@ -75,7 +75,7 @@ TEST_F(ResolverArrayAccessorTest, Matrix_XDimension_Dynamic) {
|
||||
"12:34 error: index must be signed or unsigned integer literal");
|
||||
}
|
||||
|
||||
TEST_F(ResolverArrayAccessorTest, Matrix_BothDimension_Dynamic) {
|
||||
TEST_F(ResolverIndexAccessorTest, Matrix_BothDimension_Dynamic) {
|
||||
GlobalConst("my_var", ty.mat4x4<f32>(), Construct(ty.mat4x4<f32>()));
|
||||
auto* idx = Var("idy", ty.u32(), Expr(2u));
|
||||
auto* acc =
|
||||
@@ -87,7 +87,7 @@ TEST_F(ResolverArrayAccessorTest, Matrix_BothDimension_Dynamic) {
|
||||
"12:34 error: index must be signed or unsigned integer literal");
|
||||
}
|
||||
|
||||
TEST_F(ResolverArrayAccessorTest, Matrix) {
|
||||
TEST_F(ResolverIndexAccessorTest, Matrix) {
|
||||
Global("my_var", ty.mat2x3<f32>(), ast::StorageClass::kPrivate);
|
||||
|
||||
auto* acc = IndexAccessor("my_var", 2);
|
||||
@@ -103,7 +103,7 @@ TEST_F(ResolverArrayAccessorTest, Matrix) {
|
||||
EXPECT_EQ(ref->StoreType()->As<sem::Vector>()->Width(), 3u);
|
||||
}
|
||||
|
||||
TEST_F(ResolverArrayAccessorTest, Matrix_BothDimensions) {
|
||||
TEST_F(ResolverIndexAccessorTest, Matrix_BothDimensions) {
|
||||
Global("my_var", ty.mat2x3<f32>(), ast::StorageClass::kPrivate);
|
||||
|
||||
auto* acc = IndexAccessor(IndexAccessor("my_var", 2), 1);
|
||||
@@ -118,7 +118,7 @@ TEST_F(ResolverArrayAccessorTest, Matrix_BothDimensions) {
|
||||
EXPECT_TRUE(ref->StoreType()->Is<sem::F32>());
|
||||
}
|
||||
|
||||
TEST_F(ResolverArrayAccessorTest, Vector_F32) {
|
||||
TEST_F(ResolverIndexAccessorTest, Vector_F32) {
|
||||
Global("my_var", ty.vec3<f32>(), ast::StorageClass::kPrivate);
|
||||
auto* acc = IndexAccessor("my_var", Expr(Source{{12, 34}}, 2.0f));
|
||||
WrapInFunction(acc);
|
||||
@@ -128,7 +128,7 @@ TEST_F(ResolverArrayAccessorTest, Vector_F32) {
|
||||
"12:34 error: index must be of type 'i32' or 'u32', found: 'f32'");
|
||||
}
|
||||
|
||||
TEST_F(ResolverArrayAccessorTest, Vector_Dynamic_Ref) {
|
||||
TEST_F(ResolverIndexAccessorTest, Vector_Dynamic_Ref) {
|
||||
Global("my_var", ty.vec3<f32>(), ast::StorageClass::kPrivate);
|
||||
auto* idx = Var("idx", ty.i32(), Expr(2));
|
||||
auto* acc = IndexAccessor("my_var", idx);
|
||||
@@ -137,7 +137,7 @@ TEST_F(ResolverArrayAccessorTest, Vector_Dynamic_Ref) {
|
||||
EXPECT_TRUE(r()->Resolve());
|
||||
}
|
||||
|
||||
TEST_F(ResolverArrayAccessorTest, Vector_Dynamic) {
|
||||
TEST_F(ResolverIndexAccessorTest, Vector_Dynamic) {
|
||||
GlobalConst("my_var", ty.vec3<f32>(), Construct(ty.vec3<f32>()));
|
||||
auto* idx = Var("idx", ty.i32(), Expr(2));
|
||||
auto* acc = IndexAccessor("my_var", Expr(Source{{12, 34}}, idx));
|
||||
@@ -146,7 +146,7 @@ TEST_F(ResolverArrayAccessorTest, Vector_Dynamic) {
|
||||
EXPECT_TRUE(r()->Resolve());
|
||||
}
|
||||
|
||||
TEST_F(ResolverArrayAccessorTest, Vector) {
|
||||
TEST_F(ResolverIndexAccessorTest, Vector) {
|
||||
Global("my_var", ty.vec3<f32>(), ast::StorageClass::kPrivate);
|
||||
|
||||
auto* acc = IndexAccessor("my_var", 2);
|
||||
@@ -161,7 +161,7 @@ TEST_F(ResolverArrayAccessorTest, Vector) {
|
||||
EXPECT_TRUE(ref->StoreType()->Is<sem::F32>());
|
||||
}
|
||||
|
||||
TEST_F(ResolverArrayAccessorTest, Array) {
|
||||
TEST_F(ResolverIndexAccessorTest, Array) {
|
||||
auto* idx = Expr(2);
|
||||
Global("my_var", ty.array<f32, 3>(), ast::StorageClass::kPrivate);
|
||||
|
||||
@@ -177,7 +177,7 @@ TEST_F(ResolverArrayAccessorTest, Array) {
|
||||
EXPECT_TRUE(ref->StoreType()->Is<sem::F32>());
|
||||
}
|
||||
|
||||
TEST_F(ResolverArrayAccessorTest, Alias_Array) {
|
||||
TEST_F(ResolverIndexAccessorTest, Alias_Array) {
|
||||
auto* aary = Alias("myarrty", ty.array<f32, 3>());
|
||||
|
||||
Global("my_var", ty.Of(aary), ast::StorageClass::kPrivate);
|
||||
@@ -194,7 +194,7 @@ TEST_F(ResolverArrayAccessorTest, Alias_Array) {
|
||||
EXPECT_TRUE(ref->StoreType()->Is<sem::F32>());
|
||||
}
|
||||
|
||||
TEST_F(ResolverArrayAccessorTest, Array_Constant) {
|
||||
TEST_F(ResolverIndexAccessorTest, Array_Constant) {
|
||||
GlobalConst("my_var", ty.array<f32, 3>(), array<f32, 3>());
|
||||
|
||||
auto* acc = IndexAccessor("my_var", 2);
|
||||
@@ -206,7 +206,7 @@ TEST_F(ResolverArrayAccessorTest, Array_Constant) {
|
||||
EXPECT_TRUE(TypeOf(acc)->Is<sem::F32>()) << TypeOf(acc)->type_name();
|
||||
}
|
||||
|
||||
TEST_F(ResolverArrayAccessorTest, Array_Dynamic_I32) {
|
||||
TEST_F(ResolverIndexAccessorTest, Array_Dynamic_I32) {
|
||||
// let a : array<f32, 3> = 0;
|
||||
// var idx : i32 = 0;
|
||||
// var f : f32 = a[idx];
|
||||
@@ -226,7 +226,7 @@ TEST_F(ResolverArrayAccessorTest, Array_Dynamic_I32) {
|
||||
"12:34 error: index must be signed or unsigned integer literal");
|
||||
}
|
||||
|
||||
TEST_F(ResolverArrayAccessorTest, Array_Literal_F32) {
|
||||
TEST_F(ResolverIndexAccessorTest, Array_Literal_F32) {
|
||||
// let a : array<f32, 3>;
|
||||
// var f : f32 = a[2.0f];
|
||||
auto* a = Const("a", ty.array<f32, 3>(), array<f32, 3>());
|
||||
@@ -243,7 +243,7 @@ TEST_F(ResolverArrayAccessorTest, Array_Literal_F32) {
|
||||
"12:34 error: index must be of type 'i32' or 'u32', found: 'f32'");
|
||||
}
|
||||
|
||||
TEST_F(ResolverArrayAccessorTest, Array_Literal_I32) {
|
||||
TEST_F(ResolverIndexAccessorTest, Array_Literal_I32) {
|
||||
// let a : array<f32, 3>;
|
||||
// var f : f32 = a[2];
|
||||
auto* a = Const("a", ty.array<f32, 3>(), array<f32, 3>());
|
||||
@@ -257,7 +257,7 @@ TEST_F(ResolverArrayAccessorTest, Array_Literal_I32) {
|
||||
EXPECT_TRUE(r()->Resolve()) << r()->error();
|
||||
}
|
||||
|
||||
TEST_F(ResolverArrayAccessorTest, EXpr_Deref_FuncGoodParent) {
|
||||
TEST_F(ResolverIndexAccessorTest, EXpr_Deref_FuncGoodParent) {
|
||||
// fn func(p: ptr<function, vec4<f32>>) -> f32 {
|
||||
// let idx: u32 = u32();
|
||||
// let x: f32 = (*p)[idx];
|
||||
@@ -274,7 +274,7 @@ TEST_F(ResolverArrayAccessorTest, EXpr_Deref_FuncGoodParent) {
|
||||
EXPECT_TRUE(r()->Resolve()) << r()->error();
|
||||
}
|
||||
|
||||
TEST_F(ResolverArrayAccessorTest, EXpr_Deref_FuncBadParent) {
|
||||
TEST_F(ResolverIndexAccessorTest, EXpr_Deref_FuncBadParent) {
|
||||
// fn func(p: ptr<function, vec4<f32>>) -> f32 {
|
||||
// let idx: u32 = u32();
|
||||
// let x: f32 = *p[idx];
|
||||
@@ -294,7 +294,7 @@ TEST_F(ResolverArrayAccessorTest, EXpr_Deref_FuncBadParent) {
|
||||
"12:34 error: cannot index type 'ptr<function, vec4<f32>, read_write>'");
|
||||
}
|
||||
|
||||
TEST_F(ResolverArrayAccessorTest, Exr_Deref_BadParent) {
|
||||
TEST_F(ResolverIndexAccessorTest, Exr_Deref_BadParent) {
|
||||
// var param: vec4<f32>
|
||||
// let x: f32 = *(¶m)[0];
|
||||
auto* param = Var("param", ty.vec4<f32>());
|
||||
|
||||
@@ -166,7 +166,6 @@ TEST_F(ResolverEntryPointValidationTest,
|
||||
12:34 note: while analysing entry point 'main')");
|
||||
}
|
||||
|
||||
|
||||
TEST_F(ResolverEntryPointValidationTest, ReturnType_Struct_DuplicateBuiltins) {
|
||||
// struct Output {
|
||||
// [[builtin(frag_depth)]] a : f32;
|
||||
@@ -354,20 +353,20 @@ constexpr Params ParamsFor(bool is_valid) {
|
||||
using TypeValidationTest = resolver::ResolverTestWithParam<Params>;
|
||||
|
||||
static constexpr Params cases[] = {
|
||||
ParamsFor<f32>(true), //
|
||||
ParamsFor<i32>(true), //
|
||||
ParamsFor<u32>(true), //
|
||||
ParamsFor<bool>(false), //
|
||||
ParamsFor<vec2<f32>>(true), //
|
||||
ParamsFor<vec3<f32>>(true), //
|
||||
ParamsFor<vec4<f32>>(true), //
|
||||
ParamsFor<mat2x2<f32>>(false), //
|
||||
ParamsFor<mat3x3<f32>>(false), //
|
||||
ParamsFor<mat4x4<f32>>(false), //
|
||||
ParamsFor<alias<f32>>(true), //
|
||||
ParamsFor<alias<i32>>(true), //
|
||||
ParamsFor<alias<u32>>(true), //
|
||||
ParamsFor<alias<bool>>(false), //
|
||||
ParamsFor<f32>(true), //
|
||||
ParamsFor<i32>(true), //
|
||||
ParamsFor<u32>(true), //
|
||||
ParamsFor<bool>(false), //
|
||||
ParamsFor<vec2<f32>>(true), //
|
||||
ParamsFor<vec3<f32>>(true), //
|
||||
ParamsFor<vec4<f32>>(true), //
|
||||
ParamsFor<mat2x2<f32>>(false), //
|
||||
ParamsFor<mat3x3<f32>>(false), //
|
||||
ParamsFor<mat4x4<f32>>(false), //
|
||||
ParamsFor<alias<f32>>(true), //
|
||||
ParamsFor<alias<i32>>(true), //
|
||||
ParamsFor<alias<u32>>(true), //
|
||||
ParamsFor<alias<bool>>(false), //
|
||||
};
|
||||
|
||||
TEST_P(TypeValidationTest, BareInputs) {
|
||||
|
||||
@@ -80,7 +80,7 @@ TEST_F(ResolverPtrRefValidationTest, AddressOfVectorComponent_MemberAccessor) {
|
||||
"12:34 error: cannot take the address of a vector component");
|
||||
}
|
||||
|
||||
TEST_F(ResolverPtrRefValidationTest, AddressOfVectorComponent_ArrayAccessor) {
|
||||
TEST_F(ResolverPtrRefValidationTest, AddressOfVectorComponent_IndexAccessor) {
|
||||
// var v : vec4<i32>;
|
||||
// &v[2]
|
||||
auto* v = Var("v", ty.vec4<i32>());
|
||||
|
||||
@@ -2354,8 +2354,8 @@ sem::Expression* Resolver::Expression(const ast::Expression* root) {
|
||||
|
||||
for (auto* expr : utils::Reverse(sorted)) {
|
||||
sem::Expression* sem_expr = nullptr;
|
||||
if (auto* array = expr->As<ast::ArrayAccessorExpression>()) {
|
||||
sem_expr = ArrayAccessor(array);
|
||||
if (auto* array = expr->As<ast::IndexAccessorExpression>()) {
|
||||
sem_expr = IndexAccessor(array);
|
||||
} else if (auto* bin_op = expr->As<ast::BinaryExpression>()) {
|
||||
sem_expr = Binary(bin_op);
|
||||
} else if (auto* bitcast = expr->As<ast::BitcastExpression>()) {
|
||||
@@ -2394,8 +2394,8 @@ sem::Expression* Resolver::Expression(const ast::Expression* root) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
sem::Expression* Resolver::ArrayAccessor(
|
||||
const ast::ArrayAccessorExpression* expr) {
|
||||
sem::Expression* Resolver::IndexAccessor(
|
||||
const ast::IndexAccessorExpression* expr) {
|
||||
auto* idx = expr->index;
|
||||
auto* parent_raw_ty = TypeOf(expr->array);
|
||||
auto* parent_ty = parent_raw_ty->UnwrapRef();
|
||||
@@ -3455,7 +3455,7 @@ sem::Expression* Resolver::UnaryOp(const ast::UnaryOpExpression* unary) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
auto* array = unary->expr->As<ast::ArrayAccessorExpression>();
|
||||
auto* array = unary->expr->As<ast::IndexAccessorExpression>();
|
||||
auto* member = unary->expr->As<ast::MemberAccessorExpression>();
|
||||
if ((array && TypeOf(array->array)->UnwrapRef()->Is<sem::Vector>()) ||
|
||||
(member &&
|
||||
|
||||
@@ -37,7 +37,7 @@ namespace tint {
|
||||
|
||||
// Forward declarations
|
||||
namespace ast {
|
||||
class ArrayAccessorExpression;
|
||||
class IndexAccessorExpression;
|
||||
class BinaryExpression;
|
||||
class BitcastExpression;
|
||||
class CallExpression;
|
||||
@@ -167,7 +167,7 @@ class Resolver {
|
||||
|
||||
// Expression resolving methods
|
||||
// Returns the semantic node pointer on success, nullptr on failure.
|
||||
sem::Expression* ArrayAccessor(const ast::ArrayAccessorExpression*);
|
||||
sem::Expression* IndexAccessor(const ast::IndexAccessorExpression*);
|
||||
sem::Expression* Binary(const ast::BinaryExpression*);
|
||||
sem::Expression* Bitcast(const ast::BitcastExpression*);
|
||||
sem::Expression* Call(const ast::CallExpression*);
|
||||
|
||||
@@ -667,7 +667,7 @@ TEST_F(ResolverTest, Expr_Identifier_FunctionVariable_Const) {
|
||||
EXPECT_EQ(VarOf(my_var_a)->Declaration(), var);
|
||||
}
|
||||
|
||||
TEST_F(ResolverTest, ArrayAccessor_Dynamic_Ref_F32) {
|
||||
TEST_F(ResolverTest, IndexAccessor_Dynamic_Ref_F32) {
|
||||
// var a : array<bool, 10> = 0;
|
||||
// var idx : f32 = f32();
|
||||
// var f : f32 = a[idx];
|
||||
|
||||
Reference in New Issue
Block a user