From 16c2a775fd532c301eae3abecc8d68c5c421a9a0 Mon Sep 17 00:00:00 2001 From: chriseth Date: Fri, 19 Jan 2018 17:23:49 +0100 Subject: Handle externally supplied variables correctly in disambiguator. --- libyul/optimiser/Disambiguator.cpp | 3 +++ libyul/optimiser/Disambiguator.h | 12 +++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) (limited to 'libyul') diff --git a/libyul/optimiser/Disambiguator.cpp b/libyul/optimiser/Disambiguator.cpp index af3507e1..dcba97c9 100644 --- a/libyul/optimiser/Disambiguator.cpp +++ b/libyul/optimiser/Disambiguator.cpp @@ -34,6 +34,9 @@ using Scope = dev::solidity::assembly::Scope; string Disambiguator::translateIdentifier(string const& _originalName) { + if ((m_externallyUsedIdentifiers.count(_originalName))) + return _originalName; + assertThrow(!m_scopes.empty() && m_scopes.back(), OptimizerException, ""); Scope::Identifier const* id = m_scopes.back()->lookup(_originalName); assertThrow(id, OptimizerException, ""); diff --git a/libyul/optimiser/Disambiguator.h b/libyul/optimiser/Disambiguator.h index 0829fd58..e16ebfbf 100644 --- a/libyul/optimiser/Disambiguator.h +++ b/libyul/optimiser/Disambiguator.h @@ -43,9 +43,14 @@ namespace yul class Disambiguator: public ASTCopier { public: - Disambiguator(solidity::assembly::AsmAnalysisInfo const& _analysisInfo): - m_info(_analysisInfo) - {} + explicit Disambiguator( + solidity::assembly::AsmAnalysisInfo const& _analysisInfo, + std::set const& _externallyUsedIdentifiers = {} + ): + m_info(_analysisInfo), m_externallyUsedIdentifiers(_externallyUsedIdentifiers) + { + m_nameDispenser.m_usedNames = m_externallyUsedIdentifiers; + } protected: virtual void enterScope(Block const& _block) override; @@ -58,6 +63,7 @@ protected: void leaveScopeInternal(solidity::assembly::Scope& _scope); solidity::assembly::AsmAnalysisInfo const& m_info; + std::set const& m_externallyUsedIdentifiers; std::vector m_scopes; std::map m_translations; -- cgit v1.2.3