mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Handle externally supplied variables correctly in disambiguator.
This commit is contained in:
parent
5e01d767d0
commit
16c2a775fd
@ -34,6 +34,9 @@ using Scope = dev::solidity::assembly::Scope;
|
|||||||
|
|
||||||
string Disambiguator::translateIdentifier(string const& _originalName)
|
string Disambiguator::translateIdentifier(string const& _originalName)
|
||||||
{
|
{
|
||||||
|
if ((m_externallyUsedIdentifiers.count(_originalName)))
|
||||||
|
return _originalName;
|
||||||
|
|
||||||
assertThrow(!m_scopes.empty() && m_scopes.back(), OptimizerException, "");
|
assertThrow(!m_scopes.empty() && m_scopes.back(), OptimizerException, "");
|
||||||
Scope::Identifier const* id = m_scopes.back()->lookup(_originalName);
|
Scope::Identifier const* id = m_scopes.back()->lookup(_originalName);
|
||||||
assertThrow(id, OptimizerException, "");
|
assertThrow(id, OptimizerException, "");
|
||||||
|
@ -43,9 +43,14 @@ namespace yul
|
|||||||
class Disambiguator: public ASTCopier
|
class Disambiguator: public ASTCopier
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Disambiguator(solidity::assembly::AsmAnalysisInfo const& _analysisInfo):
|
explicit Disambiguator(
|
||||||
m_info(_analysisInfo)
|
solidity::assembly::AsmAnalysisInfo const& _analysisInfo,
|
||||||
{}
|
std::set<std::string> const& _externallyUsedIdentifiers = {}
|
||||||
|
):
|
||||||
|
m_info(_analysisInfo), m_externallyUsedIdentifiers(_externallyUsedIdentifiers)
|
||||||
|
{
|
||||||
|
m_nameDispenser.m_usedNames = m_externallyUsedIdentifiers;
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void enterScope(Block const& _block) override;
|
virtual void enterScope(Block const& _block) override;
|
||||||
@ -58,6 +63,7 @@ protected:
|
|||||||
void leaveScopeInternal(solidity::assembly::Scope& _scope);
|
void leaveScopeInternal(solidity::assembly::Scope& _scope);
|
||||||
|
|
||||||
solidity::assembly::AsmAnalysisInfo const& m_info;
|
solidity::assembly::AsmAnalysisInfo const& m_info;
|
||||||
|
std::set<std::string> const& m_externallyUsedIdentifiers;
|
||||||
|
|
||||||
std::vector<solidity::assembly::Scope*> m_scopes;
|
std::vector<solidity::assembly::Scope*> m_scopes;
|
||||||
std::map<void const*, std::string> m_translations;
|
std::map<void const*, std::string> m_translations;
|
||||||
|
@ -86,7 +86,7 @@ pair<shared_ptr<Block>, shared_ptr<assembly::AsmAnalysisInfo>> dev::yul::test::p
|
|||||||
assembly::Block dev::yul::test::disambiguate(string const& _source, bool _yul)
|
assembly::Block dev::yul::test::disambiguate(string const& _source, bool _yul)
|
||||||
{
|
{
|
||||||
auto result = parse(_source, _yul);
|
auto result = parse(_source, _yul);
|
||||||
return boost::get<Block>(Disambiguator(*result.second)(*result.first));
|
return boost::get<Block>(Disambiguator(*result.second, {})(*result.first));
|
||||||
}
|
}
|
||||||
|
|
||||||
string dev::yul::test::format(string const& _source, bool _yul)
|
string dev::yul::test::format(string const& _source, bool _yul)
|
||||||
|
Loading…
Reference in New Issue
Block a user