dawn-cmake/src/ast
Ben Clayton cfed1cb01e ast: Tweak cloning rules for module-scope decls
Previously the Clone() of the AST would clone all the functions, globals
and type declarations in a temporary vector, then assign this to the
ast::Module. This meant that adding new module-scope declarations inside
callbacks of ReplaceAll() would place them right at the top, before any
of the cloned declarations.

As top-level declarations are not statements, ensuring that a new object
comes before the current ReplaceAll() declaration is surprisingly
tricky.

With this change, we can now safely assume that calling
ProgramBuilder::Var(), ProgramBuilder::Func(), ProgramBuilder::Alias()
or ProgramBuilder::Structure() inside a ReplaceAll() will add that
module-scoped declaration before the currently processed top-level
declaration.

Change-Id: I52772fdc85940c8ac8d941fbd53374a4dd64a9f4
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/54320
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: James Price <jrprice@google.com>
2021-06-16 09:19:36 +00:00
..
access.cc wgsl: Deprecate [[access]] decorations 2021-06-04 20:41:47 +00:00
access.h wgsl: Deprecate [[access]] decorations 2021-06-04 20:41:47 +00:00
access_decoration.cc resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
access_decoration.h resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
access_decoration_test.cc wgsl: Deprecate [[access]] decorations 2021-06-04 20:41:47 +00:00
alias.cc ast: Add ast::NamedType 2021-04-30 19:58:49 +00:00
alias.h ast: Replace NamedType with TypeDecl 2021-06-09 14:32:14 +00:00
alias_test.cc ast: Replace NamedType with TypeDecl 2021-06-09 14:32:14 +00:00
array.cc ast: Add type nodes 2021-04-20 15:04:21 +00:00
array.h ast: Add type nodes 2021-04-20 15:04:21 +00:00
array_accessor_expression.cc Rename semantic to sem 2021-04-16 19:07:51 +00:00
array_accessor_expression.h Rename semantic to sem 2021-04-16 19:07:51 +00:00
array_accessor_expression_test.cc ast: Validate that ASTs are all part of the same program 2021-04-15 17:47:23 +00:00
array_test.cc wgsl: Deprecate [[access]] decorations 2021-06-04 20:41:47 +00:00
assignment_statement.cc Rename semantic to sem 2021-04-16 19:07:51 +00:00
assignment_statement.h Rename semantic to sem 2021-04-16 19:07:51 +00:00
assignment_statement_test.cc ast: Validate that ASTs are all part of the same program 2021-04-15 17:47:23 +00:00
ast_type.cc ast: Replace NamedType with TypeDecl 2021-06-09 14:32:14 +00:00
binary_expression.cc Rename semantic to sem 2021-04-16 19:07:51 +00:00
binary_expression.h Rename semantic to sem 2021-04-16 19:07:51 +00:00
binary_expression_test.cc ast: Validate that ASTs are all part of the same program 2021-04-15 17:47:23 +00:00
binding_decoration.cc resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
binding_decoration.h resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
binding_decoration_test.cc Remove "Is" tests 2021-05-10 18:27:31 +00:00
bitcast_expression.cc ast: Migrate to using ast::Type 2021-05-05 09:09:41 +00:00
bitcast_expression.h Remove typ::TypePair. 2021-05-20 15:10:48 +00:00
bitcast_expression_test.cc ast: Migrate to using ast::Type 2021-05-05 09:09:41 +00:00
block_statement.cc Rename semantic to sem 2021-04-16 19:07:51 +00:00
block_statement.h Rename semantic to sem 2021-04-16 19:07:51 +00:00
block_statement_test.cc ast: Validate that ASTs are all part of the same program 2021-04-15 17:47:23 +00:00
bool.cc ast: Add type nodes 2021-04-20 15:04:21 +00:00
bool.h ast: Add type nodes 2021-04-20 15:04:21 +00:00
bool_literal.cc ast: Remove types from ast::Literals 2021-04-28 13:50:43 +00:00
bool_literal.h ast: Remove types from ast::Literals 2021-04-28 13:50:43 +00:00
bool_literal_test.cc Remove "Is" tests 2021-05-10 18:27:31 +00:00
bool_test.cc wgsl: Deprecate [[access]] decorations 2021-06-04 20:41:47 +00:00
break_statement.cc Rename semantic to sem 2021-04-16 19:07:51 +00:00
break_statement.h Rename semantic to sem 2021-04-16 19:07:51 +00:00
break_statement_test.cc ast: Replace IsValid() with TINT_ASSERT() 2021-03-10 11:41:49 +00:00
builtin.cc Remove deprecated functionality 2021-05-27 17:03:27 +00:00
builtin.h Remove deprecated functionality 2021-05-27 17:03:27 +00:00
builtin_decoration.cc resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
builtin_decoration.h resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
builtin_decoration_test.cc Remove "Is" tests 2021-05-10 18:27:31 +00:00
call_expression.cc ast: Use IdentifierExpression for call targets 2021-05-22 12:42:14 +00:00
call_expression.h ast: Use IdentifierExpression for call targets 2021-05-22 12:42:14 +00:00
call_expression_test.cc ast: Validate that ASTs are all part of the same program 2021-04-15 17:47:23 +00:00
call_statement.cc Rename semantic to sem 2021-04-16 19:07:51 +00:00
call_statement.h Rename semantic to sem 2021-04-16 19:07:51 +00:00
call_statement_test.cc ast: Validate that ASTs are all part of the same program 2021-04-15 17:47:23 +00:00
case_statement.cc Rename semantic to sem 2021-04-16 19:07:51 +00:00
case_statement.h Rename semantic to sem 2021-04-16 19:07:51 +00:00
case_statement_test.cc ast: Remove types from ast::Literals 2021-04-28 13:50:43 +00:00
constructor_expression.cc Add ProgramID feed it into all ast::Nodes 2021-04-13 23:27:27 +00:00
constructor_expression.h Add ProgramID feed it into all ast::Nodes 2021-04-13 23:27:27 +00:00
continue_statement.cc Rename semantic to sem 2021-04-16 19:07:51 +00:00
continue_statement.h Rename semantic to sem 2021-04-16 19:07:51 +00:00
continue_statement_test.cc ast: Replace IsValid() with TINT_ASSERT() 2021-03-10 11:41:49 +00:00
decoration.cc Flatten ast::Decoration class hierarchy 2021-03-11 17:39:32 +00:00
decoration.h resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
depth_texture.cc ast: Add type nodes 2021-04-20 15:04:21 +00:00
depth_texture.h ast: Add type nodes 2021-04-20 15:04:21 +00:00
depth_texture_test.cc wgsl: Deprecate [[access]] decorations 2021-06-04 20:41:47 +00:00
disable_validation_decoration.cc writer/msl: Handle texture and sampler variables 2021-06-11 12:34:26 +00:00
disable_validation_decoration.h writer/msl: Handle texture and sampler variables 2021-06-11 12:34:26 +00:00
discard_statement.cc Rename semantic to sem 2021-04-16 19:07:51 +00:00
discard_statement.h Rename semantic to sem 2021-04-16 19:07:51 +00:00
discard_statement_test.cc ast: Replace IsValid() with TINT_ASSERT() 2021-03-10 11:41:49 +00:00
else_statement.cc Rename semantic to sem 2021-04-16 19:07:51 +00:00
else_statement.h Rename semantic to sem 2021-04-16 19:07:51 +00:00
else_statement_test.cc ast: Validate that ASTs are all part of the same program 2021-04-15 17:47:23 +00:00
expression.cc Rename semantic to sem 2021-04-16 19:07:51 +00:00
expression.h Move type/* files to sem/ directory 2021-04-19 22:54:43 +00:00
external_texture.cc Add ast::ExternalTexture 2021-04-26 14:55:25 +00:00
external_texture.h Add ast::ExternalTexture 2021-04-26 14:55:25 +00:00
external_texture_test.cc wgsl: Deprecate [[access]] decorations 2021-06-04 20:41:47 +00:00
f32.cc ast: Add type nodes 2021-04-20 15:04:21 +00:00
f32.h ast: Add type nodes 2021-04-20 15:04:21 +00:00
f32_test.cc wgsl: Deprecate [[access]] decorations 2021-06-04 20:41:47 +00:00
fallthrough_statement.cc Rename semantic to sem 2021-04-16 19:07:51 +00:00
fallthrough_statement.h Rename semantic to sem 2021-04-16 19:07:51 +00:00
fallthrough_statement_test.cc ast: Replace IsValid() with TINT_ASSERT() 2021-03-10 11:41:49 +00:00
float_literal.cc ast: Remove types from ast::Literals 2021-04-28 13:50:43 +00:00
float_literal.h ast: Remove types from ast::Literals 2021-04-28 13:50:43 +00:00
float_literal_test.cc Remove "Is" tests 2021-05-10 18:27:31 +00:00
function.cc Move workgroup_size property into sem::Function 2021-05-19 08:15:18 +00:00
function.h Remove typ::TypePair. 2021-05-20 15:10:48 +00:00
function_test.cc wgsl: Deprecate [[access]] decorations 2021-06-04 20:41:47 +00:00
group_decoration.cc resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
group_decoration.h resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
group_decoration_test.cc Remove "Is" tests 2021-05-10 18:27:31 +00:00
i32.cc ast: Add type nodes 2021-04-20 15:04:21 +00:00
i32.h ast: Add type nodes 2021-04-20 15:04:21 +00:00
i32_test.cc wgsl: Deprecate [[access]] decorations 2021-06-04 20:41:47 +00:00
identifier_expression.cc Rename semantic to sem 2021-04-16 19:07:51 +00:00
identifier_expression.h Rename semantic to sem 2021-04-16 19:07:51 +00:00
identifier_expression_test.cc Validate that Symbols are all part of the same program 2021-04-15 18:20:03 +00:00
if_statement.cc Rename semantic to sem 2021-04-16 19:07:51 +00:00
if_statement.h Rename semantic to sem 2021-04-16 19:07:51 +00:00
if_statement_test.cc ast: Validate that ASTs are all part of the same program 2021-04-15 17:47:23 +00:00
int_literal.cc ast: Remove types from ast::Literals 2021-04-28 13:50:43 +00:00
int_literal.h ast: Support non-literal workgroup_size parameters 2021-05-19 13:40:08 +00:00
int_literal_test.cc ast: Remove types from ast::Literals 2021-04-28 13:50:43 +00:00
internal_decoration.cc resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
internal_decoration.h resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
intrinsic_texture_helper_test.cc wgsl: Deprecate [[access]] decorations 2021-06-04 20:41:47 +00:00
intrinsic_texture_helper_test.h intrinsics: textureSampleCompareLevel() 2021-06-14 15:29:34 +00:00
literal.cc ast: Remove types from ast::Literals 2021-04-28 13:50:43 +00:00
literal.h ast: Remove types from ast::Literals 2021-04-28 13:50:43 +00:00
location_decoration.cc resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
location_decoration.h resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
location_decoration_test.cc Remove "Is" tests 2021-05-10 18:27:31 +00:00
loop_statement.cc Rename semantic to sem 2021-04-16 19:07:51 +00:00
loop_statement.h Rename semantic to sem 2021-04-16 19:07:51 +00:00
loop_statement_test.cc ast: Validate that ASTs are all part of the same program 2021-04-15 17:47:23 +00:00
matrix.cc ast: Add type nodes 2021-04-20 15:04:21 +00:00
matrix.h ast: Add type nodes 2021-04-20 15:04:21 +00:00
matrix_test.cc wgsl: Deprecate [[access]] decorations 2021-06-04 20:41:47 +00:00
member_accessor_expression.cc Rename semantic to sem 2021-04-16 19:07:51 +00:00
member_accessor_expression.h Rename semantic to sem 2021-04-16 19:07:51 +00:00
member_accessor_expression_test.cc ast: Validate that ASTs are all part of the same program 2021-04-15 17:47:23 +00:00
module.cc ast: Tweak cloning rules for module-scope decls 2021-06-16 09:19:36 +00:00
module.h Rename 'constructed types' to 'type declarartions' 2021-06-09 14:32:14 +00:00
module_clone_test.cc resolver: Validate that a call statement has no return value 2021-06-11 13:22:27 +00:00
module_test.cc ast: Tweak cloning rules for module-scope decls 2021-06-16 09:19:36 +00:00
multisampled_texture.cc ast: Add type nodes 2021-04-20 15:04:21 +00:00
multisampled_texture.h ast: Add type nodes 2021-04-20 15:04:21 +00:00
multisampled_texture_test.cc wgsl: Deprecate [[access]] decorations 2021-06-04 20:41:47 +00:00
node.cc Rename semantic to sem 2021-04-16 19:07:51 +00:00
node.h Move all classes from namespace `type` to namespace `sem` 2021-04-19 22:51:23 +00:00
override_decoration.cc resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
override_decoration.h resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
override_decoration_test.cc ast: Support override decorations without IDs 2021-05-13 20:11:22 +00:00
pipeline_stage.cc Initial commit 2020-03-02 15:47:43 -05:00
pipeline_stage.h Fixup all doxygen warnings 2021-04-09 16:51:38 +00:00
pointer.cc Add optional access to ptr<> 2021-06-04 22:17:37 +00:00
pointer.h Add optional access to ptr<> 2021-06-04 22:17:37 +00:00
pointer_test.cc Add optional access to ptr<> 2021-06-04 22:17:37 +00:00
return_statement.cc Rename semantic to sem 2021-04-16 19:07:51 +00:00
return_statement.h Rename semantic to sem 2021-04-16 19:07:51 +00:00
return_statement_test.cc ast: Validate that ASTs are all part of the same program 2021-04-15 17:47:23 +00:00
sampled_texture.cc wgsl parser: replace almost all sem::Type* with typ::Type where possible 2021-04-26 14:19:55 +00:00
sampled_texture.h wgsl parser: replace almost all sem::Type* with typ::Type where possible 2021-04-26 14:19:55 +00:00
sampled_texture_test.cc wgsl: Deprecate [[access]] decorations 2021-06-04 20:41:47 +00:00
sampler.cc ast: Add type nodes 2021-04-20 15:04:21 +00:00
sampler.h ast: Add type nodes 2021-04-20 15:04:21 +00:00
sampler_test.cc wgsl: Deprecate [[access]] decorations 2021-06-04 20:41:47 +00:00
scalar_constructor_expression.cc Rename semantic to sem 2021-04-16 19:07:51 +00:00
scalar_constructor_expression.h Rename semantic to sem 2021-04-16 19:07:51 +00:00
scalar_constructor_expression_test.cc ast: Remove types from ast::Literals 2021-04-28 13:50:43 +00:00
sint_literal.cc ast: Remove types from ast::Literals 2021-04-28 13:50:43 +00:00
sint_literal.h ast: Remove types from ast::Literals 2021-04-28 13:50:43 +00:00
sint_literal_test.cc Remove "Is" tests 2021-05-10 18:27:31 +00:00
stage_decoration.cc resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
stage_decoration.h resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
stage_decoration_test.cc Remove "Is" tests 2021-05-10 18:27:31 +00:00
statement.cc Add ProgramID feed it into all ast::Nodes 2021-04-13 23:27:27 +00:00
statement.h Add ProgramID feed it into all ast::Nodes 2021-04-13 23:27:27 +00:00
storage_class.cc Resolver: Validate resource binding decorations 2021-05-10 19:16:46 +00:00
storage_class.h Resolver: Validate resource binding decorations 2021-05-10 19:16:46 +00:00
storage_texture.cc wgsl: Deprecate [[access]] decorations 2021-06-04 20:41:47 +00:00
storage_texture.h wgsl: Deprecate [[access]] decorations 2021-06-04 20:41:47 +00:00
storage_texture_test.cc wgsl: Deprecate [[access]] decorations 2021-06-04 20:41:47 +00:00
stride_decoration.cc resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
stride_decoration.h resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
stride_decoration_test.cc Remove "Is" tests 2021-05-10 18:27:31 +00:00
struct.cc ast::Struct: Remove Clone() hack 2021-05-06 16:03:33 +00:00
struct.h ast: Replace NamedType with TypeDecl 2021-06-09 14:32:14 +00:00
struct_block_decoration.cc resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
struct_block_decoration.h resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
struct_member.cc ast: Migrate to using ast::Type 2021-05-05 09:09:41 +00:00
struct_member.h Remove typ::TypePair. 2021-05-20 15:10:48 +00:00
struct_member_align_decoration.cc resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
struct_member_align_decoration.h resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
struct_member_align_decoration_test.cc Remove "Is" tests 2021-05-10 18:27:31 +00:00
struct_member_offset_decoration.cc resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
struct_member_offset_decoration.h resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
struct_member_offset_decoration_test.cc Remove "Is" tests 2021-05-10 18:27:31 +00:00
struct_member_size_decoration.cc resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
struct_member_size_decoration.h resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
struct_member_size_decoration_test.cc Remove "Is" tests 2021-05-10 18:27:31 +00:00
struct_member_test.cc ast: Migrate to using ast::Type 2021-05-05 09:09:41 +00:00
struct_test.cc ast: Replace NamedType with TypeDecl 2021-06-09 14:32:14 +00:00
switch_statement.cc Rename semantic to sem 2021-04-16 19:07:51 +00:00
switch_statement.h Rename semantic to sem 2021-04-16 19:07:51 +00:00
switch_statement_test.cc ast: Remove types from ast::Literals 2021-04-28 13:50:43 +00:00
test_helper.h Fixup all doxygen warnings 2021-04-09 16:51:38 +00:00
texture.cc ast: Add type nodes 2021-04-20 15:04:21 +00:00
texture.h Clarify NumCoordinateAxes 2021-05-21 20:25:53 +00:00
texture_test.cc ast: Add type nodes 2021-04-20 15:04:21 +00:00
type.h Rename all type UnwrapXXX() methods 2021-05-10 18:06:31 +00:00
type_constructor_expression.cc ast: Migrate to using ast::Type 2021-05-05 09:09:41 +00:00
type_constructor_expression.h Remove typ::TypePair. 2021-05-20 15:10:48 +00:00
type_constructor_expression_test.cc ast: Migrate to using ast::Type 2021-05-05 09:09:41 +00:00
type_decl.cc ast: Replace NamedType with TypeDecl 2021-06-09 14:32:14 +00:00
type_decl.h ast: Replace NamedType with TypeDecl 2021-06-09 14:32:14 +00:00
type_name.cc ast::TypeName: Clone the name. 2021-04-28 13:39:53 +00:00
type_name.h ProgramBuilder: Fixup last few uses of sem::Type* 2021-04-23 15:41:34 +00:00
u32.cc ast: Add type nodes 2021-04-20 15:04:21 +00:00
u32.h ast: Add type nodes 2021-04-20 15:04:21 +00:00
u32_test.cc wgsl: Deprecate [[access]] decorations 2021-06-04 20:41:47 +00:00
uint_literal.cc ast: Remove types from ast::Literals 2021-04-28 13:50:43 +00:00
uint_literal.h ast: Remove types from ast::Literals 2021-04-28 13:50:43 +00:00
uint_literal_test.cc Remove "Is" tests 2021-05-10 18:27:31 +00:00
unary_op.cc ast: Rename UnaryOp::kDereference to kIndirection 2021-05-17 14:48:37 +00:00
unary_op.h ast: Rename UnaryOp::kDereference to kIndirection 2021-05-17 14:48:37 +00:00
unary_op_expression.cc Rename semantic to sem 2021-04-16 19:07:51 +00:00
unary_op_expression.h Rename semantic to sem 2021-04-16 19:07:51 +00:00
unary_op_expression_test.cc ast: Validate that ASTs are all part of the same program 2021-04-15 17:47:23 +00:00
variable.cc wgsl: Deprecate [[access]] decorations 2021-06-04 20:41:47 +00:00
variable.h wgsl: Deprecate [[access]] decorations 2021-06-04 20:41:47 +00:00
variable_decl_statement.cc Rename semantic to sem 2021-04-16 19:07:51 +00:00
variable_decl_statement.h Rename semantic to sem 2021-04-16 19:07:51 +00:00
variable_decl_statement_test.cc wgsl: Deprecate [[access]] decorations 2021-06-04 20:41:47 +00:00
variable_test.cc wgsl: Deprecate [[access]] decorations 2021-06-04 20:41:47 +00:00
vector.cc wgsl parser: replace almost all sem::Type* with typ::Type where possible 2021-04-26 14:19:55 +00:00
vector.h wgsl parser: replace almost all sem::Type* with typ::Type where possible 2021-04-26 14:19:55 +00:00
vector_test.cc wgsl: Deprecate [[access]] decorations 2021-06-04 20:41:47 +00:00
void.cc ast: Add type nodes 2021-04-20 15:04:21 +00:00
void.h ast: Add type nodes 2021-04-20 15:04:21 +00:00
workgroup_decoration.cc resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
workgroup_decoration.h resolver: Ensure that decorations aren't duplicated 2021-06-09 18:53:57 +00:00
workgroup_decoration_test.cc ast: Support non-literal workgroup_size parameters 2021-05-19 13:40:08 +00:00