Add helper to create StructMember nodes.

This CL updates the ast::Builder to provide help creating struct members
and decorations. The helpers are then used throughout the various files
to simplify the code.

Change-Id: I53af4578190499d9ae2623073f8a44182954e5d9
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/35821
Commit-Queue: dan sinclair <dsinclair@chromium.org>
Reviewed-by: Ben Clayton <bclayton@google.com>
Auto-Submit: dan sinclair <dsinclair@chromium.org>
This commit is contained in:
dan sinclair
2020-12-16 14:41:00 +00:00
committed by Commit Bot service account
parent 8b40a67cf7
commit 5e5e36e7d2
40 changed files with 922 additions and 1634 deletions

View File

@@ -42,21 +42,13 @@ TEST_F(ValidatorTypeTest, RuntimeArrayIsLast_Pass) {
// rt: array<f32>;
// };
ast::StructMemberList members;
{
ast::StructMemberDecorationList deco;
members.push_back(create<ast::StructMember>(mod->RegisterSymbol("vf"), "vf",
ty.f32, deco));
}
{
ast::StructMemberDecorationList deco;
members.push_back(create<ast::StructMember>(
Source{Source::Location{12, 34}}, mod->RegisterSymbol("rt"), "rt",
ty.array<f32>(), deco));
}
ast::StructDecorationList decos;
decos.push_back(create<ast::StructBlockDecoration>());
auto* st = create<ast::Struct>(members, decos);
auto* st =
create<ast::Struct>(ast::StructMemberList{Member("vf", ty.f32),
Member("rt", ty.array<f32>())},
decos);
ast::type::Struct struct_type(mod->RegisterSymbol("Foo"), "Foo", st);
mod->AddConstructedType(&struct_type);
@@ -69,26 +61,18 @@ TEST_F(ValidatorTypeTest, RuntimeArrayIsLastNoBlock_Fail) {
// rt: array<f32>;
// };
ast::StructMemberList members;
{
ast::StructMemberDecorationList deco;
members.push_back(create<ast::StructMember>(mod->RegisterSymbol("vf"), "vf",
ty.f32, deco));
}
{
ast::StructMemberDecorationList deco;
members.push_back(create<ast::StructMember>(
Source{Source::Location{12, 34}}, mod->RegisterSymbol("rt"), "rt",
ty.array<f32>(), deco));
}
ast::StructDecorationList decos;
auto* st = create<ast::Struct>(members, decos);
auto* st =
create<ast::Struct>(ast::StructMemberList{Member("vf", ty.f32),
Member("rt", ty.array<f32>())},
decos);
ast::type::Struct struct_type(mod->RegisterSymbol("Foo"), "Foo", st);
mod->AddConstructedType(&struct_type);
EXPECT_FALSE(v()->ValidateConstructedTypes(mod->constructed_types()));
EXPECT_EQ(v()->error(),
"12:34 v-0031: a struct containing a runtime-sized array must be "
"v-0031: a struct containing a runtime-sized array must be "
"in the 'storage' storage class: 'Foo'");
}
@@ -99,27 +83,19 @@ TEST_F(ValidatorTypeTest, RuntimeArrayIsNotLast_Fail) {
// vf: f32;
// };
ast::StructMemberList members;
{
ast::StructMemberDecorationList deco;
members.push_back(create<ast::StructMember>(
Source{Source::Location{12, 34}}, mod->RegisterSymbol("rt"), "rt",
ty.array<f32>(), deco));
}
{
ast::StructMemberDecorationList deco;
members.push_back(create<ast::StructMember>(mod->RegisterSymbol("vf"), "vf",
ty.f32, deco));
}
ast::StructDecorationList decos;
decos.push_back(create<ast::StructBlockDecoration>());
auto* st = create<ast::Struct>(members, decos);
auto* st =
create<ast::Struct>(ast::StructMemberList{Member("rt", ty.array<f32>()),
Member("vf", ty.f32)},
decos);
ast::type::Struct struct_type(mod->RegisterSymbol("Foo"), "Foo", st);
mod->AddConstructedType(&struct_type);
EXPECT_FALSE(v()->ValidateConstructedTypes(mod->constructed_types()));
EXPECT_EQ(v()->error(),
"12:34 v-0015: runtime arrays may only appear as the last member "
"v-0015: runtime arrays may only appear as the last member "
"of a struct: 'rt'");
}
@@ -134,27 +110,16 @@ TEST_F(ValidatorTypeTest, AliasRuntimeArrayIsNotLast_Fail) {
ast::type::Alias alias{mod->RegisterSymbol("RTArr"), "RTArr",
ty.array<u32>()};
ast::StructMemberList members;
{
ast::StructMemberDecorationList deco;
members.push_back(
create<ast::StructMember>(Source{Source::Location{12, 34}},
mod->RegisterSymbol("b"), "b", &alias, deco));
}
{
ast::StructMemberDecorationList deco;
members.push_back(
create<ast::StructMember>(mod->RegisterSymbol("a"), "a", ty.u32, deco));
}
ast::StructDecorationList decos;
decos.push_back(create<ast::StructBlockDecoration>());
auto* st = create<ast::Struct>(members, decos);
auto* st = create<ast::Struct>(
ast::StructMemberList{Member("b", &alias), Member("a", ty.u32)}, decos);
ast::type::Struct struct_type(mod->RegisterSymbol("s"), "s", st);
mod->AddConstructedType(&struct_type);
EXPECT_FALSE(v()->ValidateConstructedTypes(mod->constructed_types()));
EXPECT_EQ(v()->error(),
"12:34 v-0015: runtime arrays may only appear as the last member "
"v-0015: runtime arrays may only appear as the last member "
"of a struct: 'b'");
}
@@ -169,21 +134,11 @@ TEST_F(ValidatorTypeTest, AliasRuntimeArrayIsLast_Pass) {
ast::type::Alias alias{mod->RegisterSymbol("RTArr"), "RTArr",
ty.array<u32>()};
ast::StructMemberList members;
{
ast::StructMemberDecorationList deco;
members.push_back(
create<ast::StructMember>(mod->RegisterSymbol("a"), "a", ty.u32, deco));
}
{
ast::StructMemberDecorationList deco;
members.push_back(
create<ast::StructMember>(Source{Source::Location{12, 34}},
mod->RegisterSymbol("b"), "b", &alias, deco));
}
ast::StructDecorationList decos;
decos.push_back(create<ast::StructBlockDecoration>());
auto* st = create<ast::Struct>(members, decos);
auto* st = create<ast::Struct>(
ast::StructMemberList{Member("a", ty.u32), Member("b", &alias)}, decos);
ast::type::Struct struct_type(mod->RegisterSymbol("s"), "s", st);
mod->AddConstructedType(&struct_type);
EXPECT_TRUE(v()->ValidateConstructedTypes(mod->constructed_types()));