From 0c0c67113a85fe0c7d4aebb8c92a5660282377d2 Mon Sep 17 00:00:00 2001 From: Matheus Aguiar Date: Tue, 4 Mar 2025 14:47:40 -0300 Subject: [PATCH] Rename ContractType::stateVariables --- libsolidity/ast/Types.cpp | 2 +- libsolidity/ast/Types.h | 9 ++++++--- libsolidity/codegen/ContractCompiler.cpp | 2 +- libsolidity/codegen/ir/IRGenerator.cpp | 2 +- libsolidity/interface/StorageLayout.cpp | 2 +- 5 files changed, 10 insertions(+), 7 deletions(-) diff --git a/libsolidity/ast/Types.cpp b/libsolidity/ast/Types.cpp index 5f543be0dfa8..02df22dd5ce0 100644 --- a/libsolidity/ast/Types.cpp +++ b/libsolidity/ast/Types.cpp @@ -2150,7 +2150,7 @@ FunctionType const* ContractType::newExpressionType() const return m_constructorType; } -std::vector> ContractType::stateVariables(DataLocation _location) const +std::vector> ContractType::linearizedStateVariables(DataLocation _location) const { VariableDeclaration::Location location; switch (_location) diff --git a/libsolidity/ast/Types.h b/libsolidity/ast/Types.h index 2a5cdcfc99bb..8d2453d8d503 100644 --- a/libsolidity/ast/Types.h +++ b/libsolidity/ast/Types.h @@ -1005,9 +1005,12 @@ class ContractType: public Type /// Returns the function type of the constructor modified to return an object of the contract's type. FunctionType const* newExpressionType() const; - /// @returns a list of all state variables (including inherited) of the contract and their - /// offsets in storage/transient storage. - std::vector> stateVariables(DataLocation _location) const; + /// @returns a list of all state variables in the linearized inheritance hierarchy and + /// their respective slots and offsets in storage/transient storage. + /// It should only be called for the top level contract in order to get the absolute slots and + /// offsets values in storage/transient storage. Otherwise, the slots of the state variables + /// will be relative to the contract position in the hierarchy. + std::vector> linearizedStateVariables(DataLocation _location) const; /// @returns a list of all immutable variables (including inherited) of the contract. std::vector immutableVariables() const; protected: diff --git a/libsolidity/codegen/ContractCompiler.cpp b/libsolidity/codegen/ContractCompiler.cpp index 57a23fb803ce..3a4dca0439ca 100644 --- a/libsolidity/codegen/ContractCompiler.cpp +++ b/libsolidity/codegen/ContractCompiler.cpp @@ -571,7 +571,7 @@ void ContractCompiler::appendReturnValuePacker(TypePointers const& _typeParamete void ContractCompiler::registerStateVariables(ContractDefinition const& _contract) { for (auto const location: {DataLocation::Storage, DataLocation::Transient}) - for (auto const& var: ContractType(_contract).stateVariables(location)) + for (auto const& var: ContractType(_contract).linearizedStateVariables(location)) m_context.addStateVariable(*std::get<0>(var), std::get<1>(var), std::get<2>(var)); } diff --git a/libsolidity/codegen/ir/IRGenerator.cpp b/libsolidity/codegen/ir/IRGenerator.cpp index dd6503ca1fbf..27f7bedce225 100644 --- a/libsolidity/codegen/ir/IRGenerator.cpp +++ b/libsolidity/codegen/ir/IRGenerator.cpp @@ -1175,7 +1175,7 @@ void IRGenerator::resetContext(ContractDefinition const& _contract, ExecutionCon m_context.setMostDerivedContract(_contract); for (auto const location: {DataLocation::Storage, DataLocation::Transient}) - for (auto const& var: ContractType(_contract).stateVariables(location)) + for (auto const& var: ContractType(_contract).linearizedStateVariables(location)) m_context.addStateVariable(*std::get<0>(var), std::get<1>(var), std::get<2>(var)); } diff --git a/libsolidity/interface/StorageLayout.cpp b/libsolidity/interface/StorageLayout.cpp index 8565fec68f26..05d799d08ffd 100644 --- a/libsolidity/interface/StorageLayout.cpp +++ b/libsolidity/interface/StorageLayout.cpp @@ -36,7 +36,7 @@ Json StorageLayout::generate(ContractDefinition const& _contractDef, DataLocatio solAssert(contractType, ""); Json variables = Json::array(); - for (auto [var, slot, offset]: contractType->stateVariables(_location)) + for (auto [var, slot, offset]: contractType->linearizedStateVariables(_location)) variables.emplace_back(generate(*var, slot, offset)); Json layout;