From 1d5a7eb82f564e382ccb274c1e708020ae6d9655 Mon Sep 17 00:00:00 2001 From: Ben Clayton Date: Thu, 18 Feb 2021 16:36:18 +0000 Subject: [PATCH] semantic::Function: Clean up ReferencedXXX() return types Use a type alias for the most common and lengthy return type. Drop the `const` from the return type - it is (or at least should be) meaningless. Fix `auto& referenced_variables =` local variable declaration in inspector.cc. You cannot take a reference to a non-ref return value of a function. I have no idea why the compiler wasn't erroring about this. Change-Id: Icc0b4a9bf4b4c9d03b44670eda27214ef04ad41c Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/42021 Commit-Queue: Ben Clayton Reviewed-by: dan sinclair Reviewed-by: Ryan Harrison --- src/inspector/inspector.cc | 2 +- src/semantic/function.h | 37 ++++++++++++---------------- src/semantic/sem_function.cc | 47 ++++++++++++++++-------------------- 3 files changed, 38 insertions(+), 48 deletions(-) diff --git a/src/inspector/inspector.cc b/src/inspector/inspector.cc index 95f856554f..f699db523e 100644 --- a/src/inspector/inspector.cc +++ b/src/inspector/inspector.cc @@ -412,7 +412,7 @@ std::vector Inspector::GetSampledTextureResourceBindingsImpl( std::vector result; auto* func_sem = program_->Sem().Get(func); - auto& referenced_variables = + auto referenced_variables = multisampled_only ? func_sem->ReferencedMultisampledTextureVariables() : func_sem->ReferencedSampledTextureVariables(); for (auto& ref : referenced_variables) { diff --git a/src/semantic/function.h b/src/semantic/function.h index e5b3aa7997..08904ff404 100644 --- a/src/semantic/function.h +++ b/src/semantic/function.h @@ -47,6 +47,9 @@ class Function : public Castable { ast::GroupDecoration* group = nullptr; }; + /// A vector of [Variable*, BindingInfo] pairs + using VariableBindings = std::vector>; + /// Constructor /// @param declaration the ast::Function /// @param referenced_module_vars the referenced module variables @@ -80,59 +83,52 @@ class Function : public Castable { } /// Retrieves any referenced location variables /// @returns the pair. - const std::vector> + std::vector> ReferencedLocationVariables() const; /// Retrieves any referenced builtin variables /// @returns the pair. - const std::vector> + std::vector> ReferencedBuiltinVariables() const; /// Retrieves any referenced uniform variables. Note, the variables must be /// decorated with both binding and group decorations. /// @returns the referenced uniforms - const std::vector> - ReferencedUniformVariables() const; + VariableBindings ReferencedUniformVariables() const; /// Retrieves any referenced storagebuffer variables. Note, the variables /// must be decorated with both binding and group decorations. /// @returns the referenced storagebuffers - const std::vector> - ReferencedStorageBufferVariables() const; + VariableBindings ReferencedStorageBufferVariables() const; /// Retrieves any referenced regular Sampler variables. Note, the /// variables must be decorated with both binding and group decorations. /// @returns the referenced storagebuffers - const std::vector> - ReferencedSamplerVariables() const; + VariableBindings ReferencedSamplerVariables() const; /// Retrieves any referenced comparison Sampler variables. Note, the /// variables must be decorated with both binding and group decorations. /// @returns the referenced storagebuffers - const std::vector> - ReferencedComparisonSamplerVariables() const; + VariableBindings ReferencedComparisonSamplerVariables() const; /// Retrieves any referenced sampled textures variables. Note, the /// variables must be decorated with both binding and group decorations. /// @returns the referenced sampled textures - const std::vector> - ReferencedSampledTextureVariables() const; + VariableBindings ReferencedSampledTextureVariables() const; /// Retrieves any referenced multisampled textures variables. Note, the /// variables must be decorated with both binding and group decorations. /// @returns the referenced sampled textures - const std::vector> - ReferencedMultisampledTextureVariables() const; + VariableBindings ReferencedMultisampledTextureVariables() const; /// Retrieves any referenced storage texture variables. Note, the variables /// must be decorated with both binding and group decorations. /// @returns the referenced storage textures - const std::vector> - ReferencedStorageTextureVariables() const; + VariableBindings ReferencedStorageTextureVariables() const; /// Retrieves any locally referenced builtin variables /// @returns the pairs. - const std::vector> + std::vector> LocalReferencedBuiltinVariables() const; /// Checks if the given entry point is an ancestor @@ -141,10 +137,9 @@ class Function : public Castable { bool HasAncestorEntryPoint(Symbol sym) const; private: - const std::vector> - ReferencedSamplerVariablesImpl(type::SamplerKind kind) const; - const std::vector> - ReferencedSampledTextureVariablesImpl(bool multisampled) const; + VariableBindings ReferencedSamplerVariablesImpl(type::SamplerKind kind) const; + VariableBindings ReferencedSampledTextureVariablesImpl( + bool multisampled) const; ast::Function* const declaration_; std::vector const referenced_module_vars_; diff --git a/src/semantic/sem_function.cc b/src/semantic/sem_function.cc index a6c69d7cf5..28eb7f0467 100644 --- a/src/semantic/sem_function.cc +++ b/src/semantic/sem_function.cc @@ -57,7 +57,7 @@ Function::Function(ast::Function* declaration, Function::~Function() = default; -const std::vector> +std::vector> Function::ReferencedLocationVariables() const { std::vector> ret; @@ -72,9 +72,8 @@ Function::ReferencedLocationVariables() const { return ret; } -const std::vector> -Function::ReferencedUniformVariables() const { - std::vector> ret; +Function::VariableBindings Function::ReferencedUniformVariables() const { + VariableBindings ret; for (auto* var : ReferencedModuleVariables()) { if (var->StorageClass() != ast::StorageClass::kUniform) { @@ -99,9 +98,8 @@ Function::ReferencedUniformVariables() const { return ret; } -const std::vector> -Function::ReferencedStorageBufferVariables() const { - std::vector> ret; +Function::VariableBindings Function::ReferencedStorageBufferVariables() const { + VariableBindings ret; for (auto* var : ReferencedModuleVariables()) { if (var->StorageClass() != ast::StorageClass::kStorage) { @@ -126,7 +124,7 @@ Function::ReferencedStorageBufferVariables() const { return ret; } -const std::vector> +std::vector> Function::ReferencedBuiltinVariables() const { std::vector> ret; @@ -141,29 +139,26 @@ Function::ReferencedBuiltinVariables() const { return ret; } -const std::vector> -Function::ReferencedSamplerVariables() const { +Function::VariableBindings Function::ReferencedSamplerVariables() const { return ReferencedSamplerVariablesImpl(type::SamplerKind::kSampler); } -const std::vector> -Function::ReferencedComparisonSamplerVariables() const { +Function::VariableBindings Function::ReferencedComparisonSamplerVariables() + const { return ReferencedSamplerVariablesImpl(type::SamplerKind::kComparisonSampler); } -const std::vector> -Function::ReferencedSampledTextureVariables() const { +Function::VariableBindings Function::ReferencedSampledTextureVariables() const { return ReferencedSampledTextureVariablesImpl(false); } -const std::vector> -Function::ReferencedMultisampledTextureVariables() const { +Function::VariableBindings Function::ReferencedMultisampledTextureVariables() + const { return ReferencedSampledTextureVariablesImpl(true); } -const std::vector> -Function::ReferencedStorageTextureVariables() const { - std::vector> ret; +Function::VariableBindings Function::ReferencedStorageTextureVariables() const { + VariableBindings ret; for (auto* var : ReferencedModuleVariables()) { auto* unwrapped_type = var->Declaration()->type()->UnwrapIfNeeded(); @@ -190,7 +185,7 @@ Function::ReferencedStorageTextureVariables() const { return ret; } -const std::vector> +std::vector> Function::LocalReferencedBuiltinVariables() const { std::vector> ret; @@ -214,9 +209,9 @@ bool Function::HasAncestorEntryPoint(Symbol symbol) const { return false; } -const std::vector> -Function::ReferencedSamplerVariablesImpl(type::SamplerKind kind) const { - std::vector> ret; +Function::VariableBindings Function::ReferencedSamplerVariablesImpl( + type::SamplerKind kind) const { + VariableBindings ret; for (auto* var : ReferencedModuleVariables()) { auto* unwrapped_type = var->Declaration()->type()->UnwrapIfNeeded(); @@ -244,9 +239,9 @@ Function::ReferencedSamplerVariablesImpl(type::SamplerKind kind) const { return ret; } -const std::vector> -Function::ReferencedSampledTextureVariablesImpl(bool multisampled) const { - std::vector> ret; +Function::VariableBindings Function::ReferencedSampledTextureVariablesImpl( + bool multisampled) const { + VariableBindings ret; for (auto* var : ReferencedModuleVariables()) { auto* unwrapped_type = var->Declaration()->type()->UnwrapIfNeeded();