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 <bclayton@google.com>
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
This commit is contained in:
Ben Clayton 2021-02-18 16:36:18 +00:00 committed by Commit Bot service account
parent 3a9a55eec6
commit 1d5a7eb82f
3 changed files with 38 additions and 48 deletions

View File

@ -412,7 +412,7 @@ std::vector<ResourceBinding> Inspector::GetSampledTextureResourceBindingsImpl(
std::vector<ResourceBinding> result; std::vector<ResourceBinding> result;
auto* func_sem = program_->Sem().Get(func); auto* func_sem = program_->Sem().Get(func);
auto& referenced_variables = auto referenced_variables =
multisampled_only ? func_sem->ReferencedMultisampledTextureVariables() multisampled_only ? func_sem->ReferencedMultisampledTextureVariables()
: func_sem->ReferencedSampledTextureVariables(); : func_sem->ReferencedSampledTextureVariables();
for (auto& ref : referenced_variables) { for (auto& ref : referenced_variables) {

View File

@ -47,6 +47,9 @@ class Function : public Castable<Function, CallTarget> {
ast::GroupDecoration* group = nullptr; ast::GroupDecoration* group = nullptr;
}; };
/// A vector of [Variable*, BindingInfo] pairs
using VariableBindings = std::vector<std::pair<const Variable*, BindingInfo>>;
/// Constructor /// Constructor
/// @param declaration the ast::Function /// @param declaration the ast::Function
/// @param referenced_module_vars the referenced module variables /// @param referenced_module_vars the referenced module variables
@ -80,59 +83,52 @@ class Function : public Castable<Function, CallTarget> {
} }
/// Retrieves any referenced location variables /// Retrieves any referenced location variables
/// @returns the <variable, decoration> pair. /// @returns the <variable, decoration> pair.
const std::vector<std::pair<const Variable*, ast::LocationDecoration*>> std::vector<std::pair<const Variable*, ast::LocationDecoration*>>
ReferencedLocationVariables() const; ReferencedLocationVariables() const;
/// Retrieves any referenced builtin variables /// Retrieves any referenced builtin variables
/// @returns the <variable, decoration> pair. /// @returns the <variable, decoration> pair.
const std::vector<std::pair<const Variable*, ast::BuiltinDecoration*>> std::vector<std::pair<const Variable*, ast::BuiltinDecoration*>>
ReferencedBuiltinVariables() const; ReferencedBuiltinVariables() const;
/// Retrieves any referenced uniform variables. Note, the variables must be /// Retrieves any referenced uniform variables. Note, the variables must be
/// decorated with both binding and group decorations. /// decorated with both binding and group decorations.
/// @returns the referenced uniforms /// @returns the referenced uniforms
const std::vector<std::pair<const Variable*, BindingInfo>> VariableBindings ReferencedUniformVariables() const;
ReferencedUniformVariables() const;
/// Retrieves any referenced storagebuffer variables. Note, the variables /// Retrieves any referenced storagebuffer variables. Note, the variables
/// must be decorated with both binding and group decorations. /// must be decorated with both binding and group decorations.
/// @returns the referenced storagebuffers /// @returns the referenced storagebuffers
const std::vector<std::pair<const Variable*, BindingInfo>> VariableBindings ReferencedStorageBufferVariables() const;
ReferencedStorageBufferVariables() const;
/// Retrieves any referenced regular Sampler variables. Note, the /// Retrieves any referenced regular Sampler variables. Note, the
/// variables must be decorated with both binding and group decorations. /// variables must be decorated with both binding and group decorations.
/// @returns the referenced storagebuffers /// @returns the referenced storagebuffers
const std::vector<std::pair<const Variable*, BindingInfo>> VariableBindings ReferencedSamplerVariables() const;
ReferencedSamplerVariables() const;
/// Retrieves any referenced comparison Sampler variables. Note, the /// Retrieves any referenced comparison Sampler variables. Note, the
/// variables must be decorated with both binding and group decorations. /// variables must be decorated with both binding and group decorations.
/// @returns the referenced storagebuffers /// @returns the referenced storagebuffers
const std::vector<std::pair<const Variable*, BindingInfo>> VariableBindings ReferencedComparisonSamplerVariables() const;
ReferencedComparisonSamplerVariables() const;
/// Retrieves any referenced sampled textures variables. Note, the /// Retrieves any referenced sampled textures variables. Note, the
/// variables must be decorated with both binding and group decorations. /// variables must be decorated with both binding and group decorations.
/// @returns the referenced sampled textures /// @returns the referenced sampled textures
const std::vector<std::pair<const Variable*, BindingInfo>> VariableBindings ReferencedSampledTextureVariables() const;
ReferencedSampledTextureVariables() const;
/// Retrieves any referenced multisampled textures variables. Note, the /// Retrieves any referenced multisampled textures variables. Note, the
/// variables must be decorated with both binding and group decorations. /// variables must be decorated with both binding and group decorations.
/// @returns the referenced sampled textures /// @returns the referenced sampled textures
const std::vector<std::pair<const Variable*, BindingInfo>> VariableBindings ReferencedMultisampledTextureVariables() const;
ReferencedMultisampledTextureVariables() const;
/// Retrieves any referenced storage texture variables. Note, the variables /// Retrieves any referenced storage texture variables. Note, the variables
/// must be decorated with both binding and group decorations. /// must be decorated with both binding and group decorations.
/// @returns the referenced storage textures /// @returns the referenced storage textures
const std::vector<std::pair<const Variable*, BindingInfo>> VariableBindings ReferencedStorageTextureVariables() const;
ReferencedStorageTextureVariables() const;
/// Retrieves any locally referenced builtin variables /// Retrieves any locally referenced builtin variables
/// @returns the <variable, decoration> pairs. /// @returns the <variable, decoration> pairs.
const std::vector<std::pair<const Variable*, ast::BuiltinDecoration*>> std::vector<std::pair<const Variable*, ast::BuiltinDecoration*>>
LocalReferencedBuiltinVariables() const; LocalReferencedBuiltinVariables() const;
/// Checks if the given entry point is an ancestor /// Checks if the given entry point is an ancestor
@ -141,10 +137,9 @@ class Function : public Castable<Function, CallTarget> {
bool HasAncestorEntryPoint(Symbol sym) const; bool HasAncestorEntryPoint(Symbol sym) const;
private: private:
const std::vector<std::pair<const Variable*, BindingInfo>> VariableBindings ReferencedSamplerVariablesImpl(type::SamplerKind kind) const;
ReferencedSamplerVariablesImpl(type::SamplerKind kind) const; VariableBindings ReferencedSampledTextureVariablesImpl(
const std::vector<std::pair<const Variable*, BindingInfo>> bool multisampled) const;
ReferencedSampledTextureVariablesImpl(bool multisampled) const;
ast::Function* const declaration_; ast::Function* const declaration_;
std::vector<const Variable*> const referenced_module_vars_; std::vector<const Variable*> const referenced_module_vars_;

View File

@ -57,7 +57,7 @@ Function::Function(ast::Function* declaration,
Function::~Function() = default; Function::~Function() = default;
const std::vector<std::pair<const Variable*, ast::LocationDecoration*>> std::vector<std::pair<const Variable*, ast::LocationDecoration*>>
Function::ReferencedLocationVariables() const { Function::ReferencedLocationVariables() const {
std::vector<std::pair<const Variable*, ast::LocationDecoration*>> ret; std::vector<std::pair<const Variable*, ast::LocationDecoration*>> ret;
@ -72,9 +72,8 @@ Function::ReferencedLocationVariables() const {
return ret; return ret;
} }
const std::vector<std::pair<const Variable*, Function::BindingInfo>> Function::VariableBindings Function::ReferencedUniformVariables() const {
Function::ReferencedUniformVariables() const { VariableBindings ret;
std::vector<std::pair<const Variable*, Function::BindingInfo>> ret;
for (auto* var : ReferencedModuleVariables()) { for (auto* var : ReferencedModuleVariables()) {
if (var->StorageClass() != ast::StorageClass::kUniform) { if (var->StorageClass() != ast::StorageClass::kUniform) {
@ -99,9 +98,8 @@ Function::ReferencedUniformVariables() const {
return ret; return ret;
} }
const std::vector<std::pair<const Variable*, Function::BindingInfo>> Function::VariableBindings Function::ReferencedStorageBufferVariables() const {
Function::ReferencedStorageBufferVariables() const { VariableBindings ret;
std::vector<std::pair<const Variable*, Function::BindingInfo>> ret;
for (auto* var : ReferencedModuleVariables()) { for (auto* var : ReferencedModuleVariables()) {
if (var->StorageClass() != ast::StorageClass::kStorage) { if (var->StorageClass() != ast::StorageClass::kStorage) {
@ -126,7 +124,7 @@ Function::ReferencedStorageBufferVariables() const {
return ret; return ret;
} }
const std::vector<std::pair<const Variable*, ast::BuiltinDecoration*>> std::vector<std::pair<const Variable*, ast::BuiltinDecoration*>>
Function::ReferencedBuiltinVariables() const { Function::ReferencedBuiltinVariables() const {
std::vector<std::pair<const Variable*, ast::BuiltinDecoration*>> ret; std::vector<std::pair<const Variable*, ast::BuiltinDecoration*>> ret;
@ -141,29 +139,26 @@ Function::ReferencedBuiltinVariables() const {
return ret; return ret;
} }
const std::vector<std::pair<const Variable*, Function::BindingInfo>> Function::VariableBindings Function::ReferencedSamplerVariables() const {
Function::ReferencedSamplerVariables() const {
return ReferencedSamplerVariablesImpl(type::SamplerKind::kSampler); return ReferencedSamplerVariablesImpl(type::SamplerKind::kSampler);
} }
const std::vector<std::pair<const Variable*, Function::BindingInfo>> Function::VariableBindings Function::ReferencedComparisonSamplerVariables()
Function::ReferencedComparisonSamplerVariables() const { const {
return ReferencedSamplerVariablesImpl(type::SamplerKind::kComparisonSampler); return ReferencedSamplerVariablesImpl(type::SamplerKind::kComparisonSampler);
} }
const std::vector<std::pair<const Variable*, Function::BindingInfo>> Function::VariableBindings Function::ReferencedSampledTextureVariables() const {
Function::ReferencedSampledTextureVariables() const {
return ReferencedSampledTextureVariablesImpl(false); return ReferencedSampledTextureVariablesImpl(false);
} }
const std::vector<std::pair<const Variable*, Function::BindingInfo>> Function::VariableBindings Function::ReferencedMultisampledTextureVariables()
Function::ReferencedMultisampledTextureVariables() const { const {
return ReferencedSampledTextureVariablesImpl(true); return ReferencedSampledTextureVariablesImpl(true);
} }
const std::vector<std::pair<const Variable*, Function::BindingInfo>> Function::VariableBindings Function::ReferencedStorageTextureVariables() const {
Function::ReferencedStorageTextureVariables() const { VariableBindings ret;
std::vector<std::pair<const Variable*, Function::BindingInfo>> ret;
for (auto* var : ReferencedModuleVariables()) { for (auto* var : ReferencedModuleVariables()) {
auto* unwrapped_type = var->Declaration()->type()->UnwrapIfNeeded(); auto* unwrapped_type = var->Declaration()->type()->UnwrapIfNeeded();
@ -190,7 +185,7 @@ Function::ReferencedStorageTextureVariables() const {
return ret; return ret;
} }
const std::vector<std::pair<const Variable*, ast::BuiltinDecoration*>> std::vector<std::pair<const Variable*, ast::BuiltinDecoration*>>
Function::LocalReferencedBuiltinVariables() const { Function::LocalReferencedBuiltinVariables() const {
std::vector<std::pair<const Variable*, ast::BuiltinDecoration*>> ret; std::vector<std::pair<const Variable*, ast::BuiltinDecoration*>> ret;
@ -214,9 +209,9 @@ bool Function::HasAncestorEntryPoint(Symbol symbol) const {
return false; return false;
} }
const std::vector<std::pair<const Variable*, Function::BindingInfo>> Function::VariableBindings Function::ReferencedSamplerVariablesImpl(
Function::ReferencedSamplerVariablesImpl(type::SamplerKind kind) const { type::SamplerKind kind) const {
std::vector<std::pair<const Variable*, Function::BindingInfo>> ret; VariableBindings ret;
for (auto* var : ReferencedModuleVariables()) { for (auto* var : ReferencedModuleVariables()) {
auto* unwrapped_type = var->Declaration()->type()->UnwrapIfNeeded(); auto* unwrapped_type = var->Declaration()->type()->UnwrapIfNeeded();
@ -244,9 +239,9 @@ Function::ReferencedSamplerVariablesImpl(type::SamplerKind kind) const {
return ret; return ret;
} }
const std::vector<std::pair<const Variable*, Function::BindingInfo>> Function::VariableBindings Function::ReferencedSampledTextureVariablesImpl(
Function::ReferencedSampledTextureVariablesImpl(bool multisampled) const { bool multisampled) const {
std::vector<std::pair<const Variable*, Function::BindingInfo>> ret; VariableBindings ret;
for (auto* var : ReferencedModuleVariables()) { for (auto* var : ReferencedModuleVariables()) {
auto* unwrapped_type = var->Declaration()->type()->UnwrapIfNeeded(); auto* unwrapped_type = var->Declaration()->type()->UnwrapIfNeeded();