Handle externally supplied variables correctly in disambiguator.

This commit is contained in:
chriseth
2018-10-17 14:12:11 +02:00
parent 5e01d767d0
commit 16c2a775fd
3 changed files with 13 additions and 4 deletions
+3
View File
@@ -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, "");
+9 -3
View File
@@ -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<std::string> 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<std::string> const& m_externallyUsedIdentifiers;
std::vector<solidity::assembly::Scope*> m_scopes;
std::map<void const*, std::string> m_translations;