Merge pull request #5240 from ethereum/limitDispenserSize

[Yul] Limit name length created by dispenser
This commit is contained in:
chriseth
2018-10-17 22:54:38 +02:00
committed by GitHub
8 changed files with 97 additions and 25 deletions
+3 -6
View File
@@ -106,8 +106,7 @@ bool YulOptimizerTest::run(ostream& _stream, string const& _linePrefix, bool con
}
else if (m_optimizerStep == "expressionSplitter")
{
NameDispenser nameDispenser;
nameDispenser.m_usedNames = NameCollector(*m_ast).names();
NameDispenser nameDispenser(*m_ast);
ExpressionSplitter{nameDispenser}(*m_ast);
}
else if (m_optimizerStep == "functionGrouper")
@@ -130,8 +129,7 @@ bool YulOptimizerTest::run(ostream& _stream, string const& _linePrefix, bool con
disambiguate();
(FunctionHoister{})(*m_ast);
(FunctionGrouper{})(*m_ast);
NameDispenser nameDispenser;
nameDispenser.m_usedNames = NameCollector(*m_ast).names();
NameDispenser nameDispenser(*m_ast);
ExpressionSplitter{nameDispenser}(*m_ast);
FullInliner(*m_ast).run();
ExpressionJoiner::run(*m_ast);
@@ -155,8 +153,7 @@ bool YulOptimizerTest::run(ostream& _stream, string const& _linePrefix, bool con
else if (m_optimizerStep == "fullSimplify")
{
disambiguate();
NameDispenser nameDispenser;
nameDispenser.m_usedNames = NameCollector(*m_ast).names();
NameDispenser nameDispenser(*m_ast);
ExpressionSplitter{nameDispenser}(*m_ast);
CommonSubexpressionEliminator{}(*m_ast);
ExpressionSimplifier::run(*m_ast);
@@ -0,0 +1,12 @@
// yul
{ { let aanteuhdaoneudbrgkjiuaothduiathudaoeuh:u256 } { let aanteuhdaoneudbrgkjiuaothduiathudaoeuh:u256 } }
// ----
// disambiguator
// {
// {
// let aanteuhdaoneudbrgkjiuaothduiathudaoeuh:u256
// }
// {
// let aanteuhdaoneudbrgkjiuaothduiathudaoeuh_1:u256
// }
// }
@@ -0,0 +1,25 @@
{
function verylongfunctionname(verylongvariablename) -> verylongvariablename2 {
verylongvariablename2 := add(verylongvariablename, verylongvariablename)
}
// same long name
let verylongvariablename2 := 3
mstore(0, verylongfunctionname(verylongvariablename2))
mstore(1, verylongvariablename2)
}
// ----
// fullInliner
// {
// {
// let verylongvariablename2_1 := 3
// let verylongfu_verylongvariablename := verylongvariablename2_1
// let verylongfu_verylongvariablename2
// verylongfu_verylongvariablename2 := add(verylongfu_verylongvariablename, verylongfu_verylongvariablename)
// mstore(0, verylongfu_verylongvariablename2)
// mstore(1, verylongvariablename2_1)
// }
// function verylongfunctionname(verylongvariablename) -> verylongvariablename2
// {
// verylongvariablename2 := add(verylongvariablename, verylongvariablename)
// }
// }