Merge pull request #6698 from ethereum/asmPrinterOneLine

Format short blocks and loops on a single line.
This commit is contained in:
chriseth 2019-05-08 14:46:02 +02:00 committed by GitHub
commit 54a3116ab8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
180 changed files with 338 additions and 1089 deletions

View File

@ -191,7 +191,11 @@ string AsmPrinter::operator()(FunctionCall const& _functionCall) const
string AsmPrinter::operator()(If const& _if) const
{
solAssert(_if.condition, "Invalid if condition.");
return "if " + boost::apply_visitor(*this, *_if.condition) + "\n" + (*this)(_if.body);
string body = (*this)(_if.body);
char delim = '\n';
if (body.find('\n') == string::npos)
delim = ' ';
return "if " + boost::apply_visitor(*this, *_if.condition) + delim + (*this)(_if.body);
}
string AsmPrinter::operator()(Switch const& _switch) const
@ -212,15 +216,19 @@ string AsmPrinter::operator()(Switch const& _switch) const
string AsmPrinter::operator()(ForLoop const& _forLoop) const
{
solAssert(_forLoop.condition, "Invalid for loop condition.");
string out = "for ";
out += (*this)(_forLoop.pre);
out += "\n";
out += boost::apply_visitor(*this, *_forLoop.condition);
out += "\n";
out += (*this)(_forLoop.post);
out += "\n";
out += (*this)(_forLoop.body);
return out;
string pre = (*this)(_forLoop.pre);
string condition = boost::apply_visitor(*this, *_forLoop.condition);
string post = (*this)(_forLoop.post);
char delim = '\n';
if (
pre.size() + condition.size() + post.size() < 60 &&
pre.find('\n') == string::npos &&
post.find('\n') == string::npos
)
delim = ' ';
return
("for " + move(pre) + delim + move(condition) + delim + move(post) + "\n") +
(*this)(_forLoop.body);
}
string AsmPrinter::operator()(Break const&) const
@ -236,13 +244,18 @@ string AsmPrinter::operator()(Continue const&) const
string AsmPrinter::operator()(Block const& _block) const
{
if (_block.statements.empty())
return "{\n}";
return "{ }";
string body = boost::algorithm::join(
_block.statements | boost::adaptors::transformed(boost::apply_visitor(*this)),
"\n"
);
if (body.size() < 30 && body.find('\n') == string::npos)
return "{ " + body + " }";
else
{
boost::replace_all(body, "\n", "\n ");
return "{\n " + body + "\n}";
}
}
string AsmPrinter::formatTypedName(TypedName _variable) const

View File

@ -1 +1 @@
{"contracts":{"A":{"C":{"irOptimized":"/*******************************************************\n * WARNING *\n * Solidity to Yul compilation is still EXPERIMENTAL *\n * It can result in LOSS OF FUNDS or worse *\n * !USE AT YOUR OWN RISK! *\n *******************************************************/\n\nobject \"C_6\" {\n code {\n mstore(64, 128)\n codecopy(0, dataoffset(\"C_6_deployed\"), datasize(\"C_6_deployed\"))\n return(0, datasize(\"C_6_deployed\"))\n }\n object \"C_6_deployed\" {\n code {\n mstore(64, 128)\n if iszero(lt(calldatasize(), 4))\n {\n let selector := shift_right_224_unsigned(calldataload(0))\n switch selector\n case 0x26121ff0 {\n if callvalue()\n {\n revert(0, 0)\n }\n abi_decode_tuple_(4, calldatasize())\n fun_f_5()\n let memPos := allocateMemory(0)\n let memEnd := abi_encode_tuple__to__fromStack(memPos)\n return(memPos, sub(memEnd, memPos))\n }\n default {\n }\n }\n revert(0, 0)\n function abi_decode_tuple_(headStart, dataEnd)\n {\n if slt(sub(dataEnd, headStart), 0)\n {\n revert(0, 0)\n }\n }\n function abi_encode_tuple__to__fromStack(headStart) -> tail\n {\n tail := add(headStart, 0)\n }\n function allocateMemory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, size)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n {\n revert(0, 0)\n }\n mstore(64, newFreePtr)\n }\n function fun_f_5()\n {\n for {\n let return_flag := 1\n }\n return_flag\n {\n }\n {\n break\n }\n }\n function shift_right_224_unsigned(value) -> newValue\n {\n newValue := shr(224, value)\n }\n }\n }\n}\n"}}},"sources":{"A":{"id":0}}}
{"contracts":{"A":{"C":{"irOptimized":"/*******************************************************\n * WARNING *\n * Solidity to Yul compilation is still EXPERIMENTAL *\n * It can result in LOSS OF FUNDS or worse *\n * !USE AT YOUR OWN RISK! *\n *******************************************************/\n\nobject \"C_6\" {\n code {\n mstore(64, 128)\n codecopy(0, dataoffset(\"C_6_deployed\"), datasize(\"C_6_deployed\"))\n return(0, datasize(\"C_6_deployed\"))\n }\n object \"C_6_deployed\" {\n code {\n mstore(64, 128)\n if iszero(lt(calldatasize(), 4))\n {\n let selector := shift_right_224_unsigned(calldataload(0))\n switch selector\n case 0x26121ff0 {\n if callvalue() { revert(0, 0) }\n abi_decode_tuple_(4, calldatasize())\n fun_f_5()\n let memPos := allocateMemory(0)\n let memEnd := abi_encode_tuple__to__fromStack(memPos)\n return(memPos, sub(memEnd, memPos))\n }\n default { }\n }\n revert(0, 0)\n function abi_decode_tuple_(headStart, dataEnd)\n {\n if slt(sub(dataEnd, headStart), 0) { revert(0, 0) }\n }\n function abi_encode_tuple__to__fromStack(headStart) -> tail\n { tail := add(headStart, 0) }\n function allocateMemory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, size)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { revert(0, 0) }\n mstore(64, newFreePtr)\n }\n function fun_f_5()\n {\n for { let return_flag := 1 } return_flag { }\n { break }\n }\n function shift_right_224_unsigned(value) -> newValue\n { newValue := shr(224, value) }\n }\n }\n}\n"}}},"sources":{"A":{"id":0}}}

View File

@ -1 +1 @@
{"contracts":{"A":{"NamedObject":{"evm":{"assembly":" data_4e03657aea45a94fc7d47ba826c8d667c0d1e6e33a64a036ec44f58fa12d6c45\n /* \"A\":80:81 */\n 0x00\n /* \"A\":76:77 */\n 0x00\n /* \"A\":73:74 */\n dup3\n /* \"A\":69:78 */\n add\n /* \"A\":62:82 */\n sstore\n /* \"A\":28:84 */\n pop\nstop\ndata_4e03657aea45a94fc7d47ba826c8d667c0d1e6e33a64a036ec44f58fa12d6c45 616263\n\nsub_0: assembly {\n /* \"A\":147:148 */\n 0x00\n /* \"A\":144:145 */\n 0x00\n /* \"A\":137:149 */\n revert\n}\n","bytecode":{"linkReferences":{},"object":"600b6000600082015550fe616263","opcodes":"PUSH1 0xB PUSH1 0x0 PUSH1 0x0 DUP3 ADD SSTORE POP INVALID PUSH2 0x6263 ","sourceMap":""}},"ir":"object \"NamedObject\" {\n code {\n let x := dataoffset(\"DataName\")\n sstore(add(x, 0), 0)\n }\n data \"DataName\" hex\"616263\"\n object \"OtherObject\" {\n code {\n revert(0, 0)\n }\n }\n}\n","irOptimized":"object \"NamedObject\" {\n code {\n let x := dataoffset(\"DataName\")\n sstore(add(x, 0), 0)\n }\n data \"DataName\" hex\"616263\"\n object \"OtherObject\" {\n code {\n revert(0, 0)\n }\n }\n}\n"}}},"errors":[{"component":"general","formattedMessage":"Yul is still experimental. Please use the output with care.","message":"Yul is still experimental. Please use the output with care.","severity":"warning","type":"Warning"}]}
{"contracts":{"A":{"NamedObject":{"evm":{"assembly":" data_4e03657aea45a94fc7d47ba826c8d667c0d1e6e33a64a036ec44f58fa12d6c45\n /* \"A\":80:81 */\n 0x00\n /* \"A\":76:77 */\n 0x00\n /* \"A\":73:74 */\n dup3\n /* \"A\":69:78 */\n add\n /* \"A\":62:82 */\n sstore\n /* \"A\":28:84 */\n pop\nstop\ndata_4e03657aea45a94fc7d47ba826c8d667c0d1e6e33a64a036ec44f58fa12d6c45 616263\n\nsub_0: assembly {\n /* \"A\":147:148 */\n 0x00\n /* \"A\":144:145 */\n 0x00\n /* \"A\":137:149 */\n revert\n}\n","bytecode":{"linkReferences":{},"object":"600b6000600082015550fe616263","opcodes":"PUSH1 0xB PUSH1 0x0 PUSH1 0x0 DUP3 ADD SSTORE POP INVALID PUSH2 0x6263 ","sourceMap":""}},"ir":"object \"NamedObject\" {\n code {\n let x := dataoffset(\"DataName\")\n sstore(add(x, 0), 0)\n }\n data \"DataName\" hex\"616263\"\n object \"OtherObject\" {\n code { revert(0, 0) }\n }\n}\n","irOptimized":"object \"NamedObject\" {\n code {\n let x := dataoffset(\"DataName\")\n sstore(add(x, 0), 0)\n }\n data \"DataName\" hex\"616263\"\n object \"OtherObject\" {\n code { revert(0, 0) }\n }\n}\n"}}},"errors":[{"component":"general","formattedMessage":"Yul is still experimental. Please use the output with care.","message":"Yul is still experimental. Please use the output with care.","severity":"warning","type":"Warning"}]}

View File

@ -1 +1 @@
{"contracts":{"A":{"object":{"evm":{"assembly":" /* \"A\":17:18 */\n 0x00\n 0x00\n /* \"A\":11:19 */\n mload\n /* \"A\":20:40 */\n sstore\n","bytecode":{"linkReferences":{},"object":"600060005155","opcodes":"PUSH1 0x0 PUSH1 0x0 MLOAD SSTORE ","sourceMap":""}},"ir":"object \"object\" {\n code {\n let x := mload(0)\n sstore(add(x, 0), 0)\n }\n}\n","irOptimized":"object \"object\" {\n code {\n {\n sstore(mload(0), 0)\n }\n }\n}\n"}}},"errors":[{"component":"general","formattedMessage":"Yul is still experimental. Please use the output with care.","message":"Yul is still experimental. Please use the output with care.","severity":"warning","type":"Warning"}]}
{"contracts":{"A":{"object":{"evm":{"assembly":" /* \"A\":17:18 */\n 0x00\n 0x00\n /* \"A\":11:19 */\n mload\n /* \"A\":20:40 */\n sstore\n","bytecode":{"linkReferences":{},"object":"600060005155","opcodes":"PUSH1 0x0 PUSH1 0x0 MLOAD SSTORE ","sourceMap":""}},"ir":"object \"object\" {\n code {\n let x := mload(0)\n sstore(add(x, 0), 0)\n }\n}\n","irOptimized":"object \"object\" {\n code { { sstore(mload(0), 0) } }\n}\n"}}},"errors":[{"component":"general","formattedMessage":"Yul is still experimental. Please use the output with care.","message":"Yul is still experimental. Please use the output with care.","severity":"warning","type":"Warning"}]}

View File

@ -555,7 +555,7 @@ BOOST_AUTO_TEST_SUITE(Printing)
BOOST_AUTO_TEST_CASE(print_smoke)
{
parsePrintCompare("{\n}");
parsePrintCompare("{ }");
}
BOOST_AUTO_TEST_CASE(print_instructions)
@ -570,7 +570,7 @@ BOOST_AUTO_TEST_CASE(print_subblock)
BOOST_AUTO_TEST_CASE(print_functional)
{
parsePrintCompare("{\n let x := mul(sload(0x12), 7)\n}");
parsePrintCompare("{ let x := mul(sload(0x12), 7) }");
}
BOOST_AUTO_TEST_CASE(print_label)
@ -585,7 +585,7 @@ BOOST_AUTO_TEST_CASE(print_assignments)
BOOST_AUTO_TEST_CASE(print_multi_assignments)
{
parsePrintCompare("{\n function f() -> x, y\n {\n }\n let x, y := f()\n}");
parsePrintCompare("{\n function f() -> x, y\n { }\n let x, y := f()\n}");
}
BOOST_AUTO_TEST_CASE(print_string_literals)
@ -596,48 +596,45 @@ BOOST_AUTO_TEST_CASE(print_string_literals)
BOOST_AUTO_TEST_CASE(print_string_literal_unicode)
{
string source = "{ let x := \"\\u1bac\" }";
string parsed = "object \"object\" {\n code {\n let x := \"\\xe1\\xae\\xac\"\n }\n}\n";
string parsed = "object \"object\" {\n code { let x := \"\\xe1\\xae\\xac\" }\n}\n";
AssemblyStack stack(dev::test::Options::get().evmVersion(), AssemblyStack::Language::Assembly, OptimiserSettings::none());
BOOST_REQUIRE(stack.parseAndAnalyze("", source));
BOOST_REQUIRE(stack.errors().empty());
BOOST_CHECK_EQUAL(stack.print(), parsed);
string parsedInner = "{\n let x := \"\\xe1\\xae\\xac\"\n}";
string parsedInner = "{ let x := \"\\xe1\\xae\\xac\" }";
parsePrintCompare(parsedInner);
}
BOOST_AUTO_TEST_CASE(print_if)
{
parsePrintCompare("{\n if 2\n {\n pop(mload(0))\n }\n}");
parsePrintCompare("{ if 2 { pop(mload(0)) } }");
}
BOOST_AUTO_TEST_CASE(print_switch)
{
parsePrintCompare("{\n switch 42\n case 1 {\n }\n case 2 {\n }\n default {\n }\n}");
parsePrintCompare("{\n switch 42\n case 1 { }\n case 2 { }\n default { }\n}");
}
BOOST_AUTO_TEST_CASE(print_for)
{
parsePrintCompare("{\n let ret := 5\n for {\n let i := 1\n }\n lt(i, 15)\n {\n i := add(i, 1)\n }\n {\n ret := mul(ret, i)\n }\n}");
parsePrintCompare("{\n let ret := 5\n for { let i := 1 } lt(i, 15) { i := add(i, 1) }\n { ret := mul(ret, i) }\n}");
}
BOOST_AUTO_TEST_CASE(function_definitions_multiple_args)
{
parsePrintCompare("{\n function f(a, d)\n {\n mstore(a, d)\n }\n function g(a, d) -> x, y\n {\n }\n}");
parsePrintCompare("{\n function f(a, d)\n { mstore(a, d) }\n function g(a, d) -> x, y\n { }\n}");
}
BOOST_AUTO_TEST_CASE(function_calls)
{
string source = R"({
function y()
{
}
{ }
function f(a) -> b
{
}
{ }
function g(a, b, c)
{
}
{ }
g(1, mul(2, address()), f(mul(2, caller())))
y()
})";

View File

@ -228,14 +228,10 @@ BOOST_AUTO_TEST_CASE(to_string)
string expectation = R"(object "O" {
code {
let x := mload(0)
if x
{
sstore(0, 1)
}
if x { sstore(0, 1) }
}
object "i" {
code {
}
code { }
data "j" hex"646566"
}
data "j" hex"616263"

View File

@ -7,14 +7,6 @@
// step: blockFlattener
// ----
// {
// for {
// let a := 1
// }
// iszero(eq(a, 10))
// {
// a := add(a, 1)
// }
// {
// a := add(a, 1)
// }
// for { let a := 1 } iszero(eq(a, 10)) { a := add(a, 1) }
// { a := add(a, 1) }
// }

View File

@ -12,15 +12,12 @@
// {
// let a := 1
// let b := codesize()
// for {
// }
// for { }
// lt(1, b)
// {
// mstore(1, b)
// a := add(a, b)
// }
// {
// mstore(1, b)
// }
// { mstore(1, b) }
// mstore(1, b)
// }

View File

@ -8,9 +8,6 @@
// ----
// {
// let b := 1
// if b
// {
// b := b
// }
// if b { b := b }
// let c := 1
// }

View File

@ -2,5 +2,4 @@
// ====
// step: commonSubexpressionEliminator
// ----
// {
// }
// { }

View File

@ -18,17 +18,9 @@
// ----
// {
// let a := 20
// for {
// }
// lt(a, 40)
// {
// a := add(a, 2)
// }
// for { } lt(a, 40) { a := add(a, 2) }
// {
// a := a
// if lt(a, 0)
// {
// break
// }
// if lt(a, 0) { break }
// }
// }

View File

@ -19,12 +19,7 @@
// ----
// {
// let a := 20
// for {
// }
// lt(a, 40)
// {
// a := add(a, 2)
// }
// for { } lt(a, 40) { a := add(a, 2) }
// {
// a := a
// break

View File

@ -19,12 +19,7 @@
// ----
// {
// let a := 20
// for {
// }
// lt(a, 40)
// {
// a := add(a, 2)
// }
// for { } lt(a, 40) { a := add(a, 2) }
// {
// a := a
// continue

View File

@ -7,6 +7,4 @@
// ====
// step: deadCodeEliminator
// ----
// {
// stop()
// }
// { stop() }

View File

@ -19,7 +19,5 @@
// fun()
// revert(0, 0)
// function fun()
// {
// return(1, 1)
// }
// { return(1, 1) }
// }

View File

@ -18,14 +18,10 @@
// {
// let y := mload(0)
// switch y
// case 0 {
// y := 8
// }
// case 0 { y := 8 }
// case 1 {
// y := 9
// revert(0, 0)
// }
// default {
// y := 10
// }
// default { y := 10 }
// }

View File

@ -8,8 +8,6 @@
// step: deadCodeEliminator
// ----
// {
// {
// revert(0, 0)
// }
// { revert(0, 0) }
// mstore(0, 0)
// }

View File

@ -17,12 +17,7 @@
// ----
// {
// let a := 20
// for {
// }
// lt(a, 40)
// {
// a := add(a, 2)
// }
// for { } lt(a, 40) { a := add(a, 2) }
// {
// a := a
// break

View File

@ -17,12 +17,7 @@
// ----
// {
// let a := 20
// for {
// }
// lt(a, 40)
// {
// a := add(a, 2)
// }
// for { } lt(a, 40) { a := add(a, 2) }
// {
// a := a
// continue

View File

@ -21,12 +21,7 @@
// {
// let b := 20
// let a := 20
// for {
// }
// lt(a, 40)
// {
// a := add(a, 2)
// }
// for { } lt(a, 40) { a := add(a, 2) }
// {
// a := a
// mstore(0, a)

View File

@ -11,19 +11,9 @@
// yul: true
// ----
// {
// { let a:u256, b:u256 }
// {
// let a:u256, b:u256
// }
// {
// for {
// let a_1:u256
// }
// a_1
// {
// a_1 := a_1
// }
// {
// let b_2:u256 := a_1
// }
// for { let a_1:u256 } a_1 { a_1 := a_1 }
// { let b_2:u256 := a_1 }
// }
// }

View File

@ -10,14 +10,9 @@
// yul: true
// ----
// {
// {
// let a:u256, b:u256, c:u256
// }
// { let a:u256, b:u256, c:u256 }
// {
// let a_1:bool
// if a_1
// {
// let b_2:bool := a_1
// }
// if a_1 { let b_2:bool := a_1 }
// }
// }

View File

@ -2,5 +2,4 @@
// ====
// step: disambiguator
// ----
// {
// }
// { }

View File

@ -3,5 +3,4 @@
// step: disambiguator
// yul: true
// ----
// {
// }
// { }

View File

@ -12,17 +12,11 @@
// yul: true
// ----
// {
// {
// let a:u256, b:u256, c:u256
// }
// { let a:u256, b:u256, c:u256 }
// {
// let a_1:u256
// switch a_1
// case 0:u256 {
// let b_2:u256 := a_1
// }
// default {
// let c_3:u256 := a_1
// }
// case 0:u256 { let b_2:u256 := a_1 }
// default { let c_3:u256 := a_1 }
// }
// }

View File

@ -4,10 +4,6 @@
// yul: true
// ----
// {
// {
// let a:u256
// }
// {
// let a_1:u256
// }
// { let a:u256 }
// { let a_1:u256 }
// }

View File

@ -8,7 +8,5 @@
// let a:u256
// let a_1:u256
// }
// {
// let a_2:u256
// }
// { let a_2:u256 }
// }

View File

@ -15,9 +15,7 @@
// let b:u256
// }
// function f(a:u256, c_1:u256) -> b_2:u256
// {
// let x:u256
// }
// { let x:u256 }
// {
// let a_3:u256
// let x_4:u256

View File

@ -65,51 +65,27 @@
// {
// switch f1
// case 0 {
// if f2
// {
// rf := f3
// }
// if not(f2)
// {
// rf := f1
// }
// }
// default {
// rf := 3
// if f2 { rf := f3 }
// if not(f2) { rf := f1 }
// }
// default { rf := 3 }
// }
// function g(g1, g2, g3) -> rg
// {
// switch g1
// case 0 {
// if g2
// {
// rg := g3
// }
// if not(g2)
// {
// rg := g1
// }
// }
// default {
// rg := 3
// if g2 { rg := g3 }
// if not(g2) { rg := g1 }
// }
// default { rg := 3 }
// }
// function h(h1, h2, h3) -> rh
// {
// switch h1
// case 1 {
// if h2
// {
// rh := h3
// }
// if not(h2)
// {
// rh := h1
// }
// }
// default {
// rh := 3
// if h2 { rh := h3 }
// if not(h2) { rh := h1 }
// }
// default { rh := 3 }
// }
// }

View File

@ -11,11 +11,7 @@
// f()
// f()
// function f()
// {
// mstore(1, mload(0))
// }
// { mstore(1, mload(0)) }
// function g()
// {
// mstore(1, mload(0))
// }
// { mstore(1, mload(0)) }
// }

View File

@ -13,21 +13,13 @@
// function f(x)
// {
// switch x
// case 0 {
// mstore(0, 42)
// }
// case 1 {
// mstore(1, 42)
// }
// case 0 { mstore(0, 42) }
// case 1 { mstore(1, 42) }
// }
// function g(x_1)
// {
// switch x_1
// case 1 {
// mstore(1, 42)
// }
// case 0 {
// mstore(0, 42)
// }
// case 1 { mstore(1, 42) }
// case 0 { mstore(0, 42) }
// }
// }

View File

@ -7,8 +7,6 @@
// ----
// {
// function f(a) -> x
// {
// x := add(a, a)
// }
// { x := add(a, a) }
// let y := add(calldatasize(), calldatasize())
// }

View File

@ -8,12 +8,8 @@
// ----
// {
// function f(a) -> x
// {
// x := add(a, a)
// }
// { x := add(a, a) }
// function g(b, c) -> y
// {
// y := mul(mload(c), add(b, b))
// }
// { y := mul(mload(c), add(b, b)) }
// let y_1 := mul(mload(7), add(calldatasize(), calldatasize()))
// }

View File

@ -8,9 +8,7 @@
// ----
// {
// function f(a, r) -> x
// {
// x := g(a, f(r, f(r, r)))
// }
// { x := g(a, f(r, f(r, r))) }
// function g(b, s) -> y
// {
// y := f(b, g(s, f(s, f(s, s))))

View File

@ -8,8 +8,6 @@
// ----
// {
// function f(a) -> x
// {
// x := a
// }
// { x := a }
// let y := f(mload(2))
// }

View File

@ -11,9 +11,7 @@
// ----
// {
// function f(a, b) -> x
// {
// x := add(b, a)
// }
// { x := add(b, a) }
// function g() -> y
// {
// y := mload(0)

View File

@ -8,8 +8,6 @@
// ----
// {
// function f() -> x:u256
// {
// x := 2:u256
// }
// { x := 2:u256 }
// let y:u256 := 2:u256
// }

View File

@ -8,8 +8,6 @@
// ----
// {
// function f(a:u256) -> x:u256
// {
// x := a
// }
// { x := a }
// let y:u256 := 7:u256
// }

View File

@ -14,9 +14,6 @@
// step: expressionJoiner
// ----
// {
// if add(mload(7), sload(mload(3)))
// {
// let y := add(mload(3), 3)
// }
// if add(mload(7), sload(mload(3))) { let y := add(mload(3), 3) }
// let t := add(3, 9)
// }

View File

@ -5,12 +5,6 @@
// step: expressionJoiner
// ----
// {
// for {
// let b := mload(1)
// }
// b
// {
// }
// {
// }
// for { let b := mload(1) } b { }
// { }
// }

View File

@ -7,11 +7,6 @@
// ----
// {
// let a := mload(0)
// for {
// }
// a
// {
// }
// {
// }
// for { } a { }
// { }
// }

View File

@ -2,5 +2,4 @@
// ====
// step: expressionJoiner
// ----
// {
// }
// { }

View File

@ -19,11 +19,7 @@
// ----
// {
// switch add(mload(7), sload(mload(3)))
// case 3 {
// let y := add(mload(3), 3)
// }
// default {
// sstore(1, 0)
// }
// case 3 { let y := add(mload(3), 3) }
// default { sstore(1, 0) }
// let t := add(3, 9)
// }

View File

@ -8,8 +8,7 @@
// ----
// {
// function f() -> x, z
// {
// }
// { }
// let c, d := f()
// let y := add(add(d, c), 7)
// }

View File

@ -2,6 +2,4 @@
// ====
// step: expressionSimplifier
// ----
// {
// let a := mload(0)
// }
// { let a := mload(0) }

View File

@ -2,6 +2,4 @@
// ====
// step: expressionSimplifier
// ----
// {
// let a := 13
// }
// { let a := 13 }

View File

@ -2,6 +2,4 @@
// ====
// step: expressionSimplifier
// ----
// {
// let a := 0
// }
// { let a := 0 }

View File

@ -7,7 +7,6 @@
// ----
// {
// function f() -> a
// {
// }
// { }
// let b := f()
// }

View File

@ -7,12 +7,6 @@
// ----
// {
// let a := 10
// for {
// }
// iszero(iszero(a))
// {
// a := add(a, 1)
// }
// {
// }
// for { } iszero(iszero(a)) { a := add(a, 1) }
// { }
// }

View File

@ -7,7 +7,6 @@
// ----
// {
// function f(a) -> b
// {
// }
// { }
// let c := sub(f(0), f(1))
// }

View File

@ -8,10 +8,8 @@
// ----
// {
// function f1() -> a
// {
// }
// { }
// function f2() -> b
// {
// }
// { }
// let c := sub(f1(), f2())
// }

View File

@ -8,7 +8,6 @@
// ----
// {
// function f() -> a
// {
// }
// { }
// let b := sub(f(), f())
// }

View File

@ -9,7 +9,5 @@
// ----
// {
// function f() -> c, d
// {
// let y := 7
// }
// { let y := 7 }
// }

View File

@ -4,6 +4,4 @@
// ====
// step: expressionSimplifier
// ----
// {
// let a := mload(0)
// }
// { let a := mload(0) }

View File

@ -2,5 +2,4 @@
// ====
// step: expressionSimplifier
// ----
// {
// }
// { }

View File

@ -19,9 +19,7 @@
// let _5 := mul(_4, _2)
// if _5
// {
// for {
// let a := 2
// }
// for { let a := 2 }
// lt(a, mload(a))
// {
// let _6 := 2

View File

@ -2,5 +2,4 @@
// ====
// step: expressionSplitter
// ----
// {
// }
// { }

View File

@ -12,13 +12,6 @@
// let random := 42
// let a := 1
// let b := 1
// for {
// }
// iszero(eq(a, 10))
// {
// a := add(a, b)
// }
// {
// a := add(a, 1)
// }
// for { } iszero(eq(a, 10)) { a := add(a, b) }
// { a := add(a, 1) }
// }

View File

@ -9,13 +9,6 @@
// ----
// {
// let a := 1
// for {
// }
// iszero(eq(a, 10))
// {
// a := add(a, 1)
// }
// {
// a := add(a, 1)
// }
// for { } iszero(eq(a, 10)) { a := add(a, 1) }
// { a := add(a, 1) }
// }

View File

@ -19,31 +19,15 @@
// {
// let random := 42
// let a := 1
// for {
// }
// iszero(eq(a, 10))
// {
// }
// {
// a := add(a, 1)
// }
// for { } iszero(eq(a, 10)) { }
// { a := add(a, 1) }
// let b := 1
// for {
// }
// for { }
// iszero(eq(b, 10))
// {
// let c := 1
// for {
// }
// iszero(eq(c, 2))
// {
// c := add(c, 1)
// }
// {
// b := add(b, 1)
// }
// }
// {
// mstore(b, b)
// for { } iszero(eq(c, 2)) { c := add(c, 1) }
// { b := add(b, 1) }
// }
// { mstore(b, b) }
// }

View File

@ -10,13 +10,6 @@
// {
// let random := 42
// let a := 1
// for {
// }
// iszero(eq(a, 10))
// {
// a := add(a, 1)
// }
// {
// a := add(a, 1)
// }
// for { } iszero(eq(a, 10)) { a := add(a, 1) }
// { a := add(a, 1) }
// }

View File

@ -18,10 +18,7 @@
// let r_11 := 0
// a_10 := mload(a_10)
// r_11 := add(a_10, calldatasize())
// if gt(r_11, _2)
// {
// sstore(0, 2)
// }
// if gt(r_11, _2) { sstore(0, 2) }
// }
// function f(a) -> r
// {

View File

@ -19,9 +19,7 @@
// let y_1 := y_10
// }
// function f(a) -> x
// {
// x := add(a, a)
// }
// { x := add(a, a) }
// function g(b, c) -> y
// {
// let a_13 := b

View File

@ -56,7 +56,5 @@
// mstore(1, x_14)
// }
// function h() -> t
// {
// t := 2
// }
// { t := 2 }
// }

View File

@ -14,9 +14,7 @@
// ----
// {
// function f(a) -> b
// {
// b := sload(mload(a))
// }
// { b := sload(mload(a)) }
// function g() -> x_1
// {
// let a_20 := 2

View File

@ -54,7 +54,5 @@
// let x_1 := f(f(f(f(f(f(b_57))))))
// }
// function f(a) -> b
// {
// b := sload(mload(a))
// }
// { b := sload(mload(a)) }
// }

View File

@ -13,7 +13,5 @@
// sstore(a_3, a_3)
// }
// function f(a)
// {
// sstore(a, a)
// }
// { sstore(a, a) }
// }

View File

@ -19,8 +19,7 @@
// sstore(a_3, 0)
// r_4 := a_3
// let x := r_4
// for {
// }
// for { }
// f(x)
// {
// let a_6 := x

View File

@ -13,7 +13,5 @@
// f(1)
// }
// function f(a)
// {
// f(1)
// }
// { f(1) }
// }

View File

@ -5,6 +5,4 @@
// ====
// step: fullSimplify
// ----
// {
// mstore(0, 13)
// }
// { mstore(0, 13) }

View File

@ -5,6 +5,4 @@
// ====
// step: fullSimplify
// ----
// {
// mstore(0, 0)
// }
// { mstore(0, 0) }

View File

@ -8,7 +8,6 @@
// ----
// {
// function f() -> a
// {
// }
// { }
// mstore(f(), 0)
// }

View File

@ -8,12 +8,6 @@
// ----
// {
// let a := 10
// for {
// }
// iszero(iszero(a))
// {
// a := add(a, 1)
// }
// {
// }
// for { } iszero(iszero(a)) { a := add(a, 1) }
// { }
// }

View File

@ -7,8 +7,7 @@
// ----
// {
// function f(a) -> b
// {
// }
// { }
// let _2 := f(1)
// let _3 := 0
// mstore(_3, sub(f(_3), _2))

View File

@ -9,10 +9,8 @@
// ----
// {
// function f1() -> a
// {
// }
// { }
// function f2() -> b
// {
// }
// { }
// mstore(0, sub(f1(), f2()))
// }

View File

@ -9,7 +9,6 @@
// ----
// {
// function f() -> a
// {
// }
// { }
// mstore(0, sub(f(), f()))
// }

View File

@ -2,5 +2,4 @@
// ====
// step: fullSimplify
// ----
// {
// }
// { }

View File

@ -1076,10 +1076,7 @@
// {
// let _1 := mload(1)
// let _2 := mload(0)
// if slt(sub(_1, _2), 64)
// {
// revert(0, 0)
// }
// if slt(sub(_1, _2), 64) { revert(0, 0) }
// sstore(0, and(calldataload(_2), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF))
// let x0, x1, x2, x3, x4 := abi_decode_tuple_t_addresst_uint256t_bytes_calldata_ptrt_enum$_Operation_$1949(mload(7), mload(8))
// sstore(x1, x0)
@ -1089,39 +1086,21 @@
// }
// function abi_decode_tuple_t_addresst_uint256t_bytes_calldata_ptrt_enum$_Operation_$1949(headStart, dataEnd) -> value0, value1, value2, value3, value4
// {
// if slt(sub(dataEnd, headStart), 128)
// {
// revert(value4, value4)
// }
// if slt(sub(dataEnd, headStart), 128) { revert(value4, value4) }
// value0 := and(calldataload(headStart), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)
// value1 := calldataload(add(headStart, 32))
// let offset := calldataload(add(headStart, 64))
// let _1 := 0xffffffffffffffff
// if gt(offset, _1)
// {
// revert(value4, value4)
// }
// if gt(offset, _1) { revert(value4, value4) }
// let _2 := add(headStart, offset)
// if iszero(slt(add(_2, 0x1f), dataEnd))
// {
// revert(value4, value4)
// }
// if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(value4, value4) }
// let length := calldataload(_2)
// if gt(length, _1)
// {
// revert(value4, value4)
// }
// if gt(add(add(_2, length), 32), dataEnd)
// {
// revert(value4, value4)
// }
// if gt(length, _1) { revert(value4, value4) }
// if gt(add(add(_2, length), 32), dataEnd) { revert(value4, value4) }
// value2 := add(_2, 32)
// value3 := length
// let _3 := calldataload(add(headStart, 96))
// if iszero(lt(_3, 3))
// {
// revert(value4, value4)
// }
// if iszero(lt(_3, 3)) { revert(value4, value4) }
// value4 := _3
// }
// function abi_encode_tuple_t_bytes32_t_address_t_uint256_t_bytes32_t_enum$_Operation_$1949_t_uint256_t_uint256_t_uint256_t_address_t_address_t_uint256__to_t_bytes32_t_address_t_uint256_t_bytes32_t_uint8_t_uint256_t_uint256_t_uint256_t_address_t_address_t_uint256_(headStart, value10, value9, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail
@ -1132,10 +1111,7 @@
// mstore(add(headStart, 32), and(value1, _1))
// mstore(add(headStart, 64), value2)
// mstore(add(headStart, 96), value3)
// if iszero(lt(value4, 3))
// {
// invalid()
// }
// if iszero(lt(value4, 3)) { invalid() }
// mstore(add(headStart, 128), value4)
// mstore(add(headStart, 160), value5)
// mstore(add(headStart, 192), value6)

View File

@ -469,12 +469,7 @@
// pos := 64
// let srcPtr := add(_3, _1)
// let i := _2
// for {
// }
// lt(i, length)
// {
// i := add(i, 1)
// }
// for { } lt(i, length) { i := add(i, 1) }
// {
// abi_encode_t_array$_t_contract$_C_$55_$3_memory_to_t_array$_t_address_$3_memory_ptr(mload(srcPtr), pos)
// srcPtr := add(srcPtr, _1)
@ -482,22 +477,13 @@
// }
// let _4 := mload(64)
// let _5 := mload(_1)
// if slt(sub(_4, _5), 128)
// {
// revert(_2, _2)
// }
// if slt(sub(_4, _5), 128) { revert(_2, _2) }
// let offset := calldataload(add(_5, 64))
// let _6 := 0xffffffffffffffff
// if gt(offset, _6)
// {
// revert(_2, _2)
// }
// if gt(offset, _6) { revert(_2, _2) }
// let value2 := abi_decode_t_array$_t_uint256_$dyn_memory_ptr(add(_5, offset), _4)
// let offset_1 := calldataload(add(_5, 96))
// if gt(offset_1, _6)
// {
// revert(_2, _2)
// }
// if gt(offset_1, _6) { revert(_2, _2) }
// let value3 := abi_decode_t_array$_t_array$_t_uint256_$2_memory_$dyn_memory_ptr(add(_5, offset_1), _4)
// sstore(calldataload(_5), calldataload(add(_5, _1)))
// sstore(value2, value3)
@ -505,10 +491,7 @@
// }
// function abi_decode_t_array$_t_array$_t_uint256_$2_memory_$dyn_memory_ptr(offset, end) -> array
// {
// if iszero(slt(add(offset, 0x1f), end))
// {
// revert(array, array)
// }
// if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }
// let length := calldataload(offset)
// array := allocateMemory(array_allocation_size_t_array$_t_address_$dyn_memory(length))
// let dst := array
@ -516,37 +499,18 @@
// let _1 := 0x20
// dst := add(array, _1)
// let src := add(offset, _1)
// if gt(add(add(offset, mul(length, 0x40)), _1), end)
// {
// revert(0, 0)
// }
// if gt(add(add(offset, mul(length, 0x40)), _1), end) { revert(0, 0) }
// let i := 0
// for {
// }
// lt(i, length)
// for { } lt(i, length) { i := add(i, 1) }
// {
// i := add(i, 1)
// }
// {
// if iszero(slt(add(src, 0x1f), end))
// {
// revert(0, 0)
// }
// if iszero(slt(add(src, 0x1f), end)) { revert(0, 0) }
// let dst_1 := allocateMemory(array_allocation_size_t_array$_t_uint256_$2_memory(0x2))
// let dst_2 := dst_1
// let src_1 := src
// let _2 := add(src, 0x40)
// if gt(_2, end)
// {
// revert(0, 0)
// }
// if gt(_2, end) { revert(0, 0) }
// let i_1 := 0
// for {
// }
// lt(i_1, 0x2)
// {
// i_1 := add(i_1, 1)
// }
// for { } lt(i_1, 0x2) { i_1 := add(i_1, 1) }
// {
// mstore(dst_1, calldataload(src_1))
// dst_1 := add(dst_1, _1)
@ -559,10 +523,7 @@
// }
// function abi_decode_t_array$_t_uint256_$dyn_memory_ptr(offset, end) -> array
// {
// if iszero(slt(add(offset, 0x1f), end))
// {
// revert(array, array)
// }
// if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }
// let length := calldataload(offset)
// array := allocateMemory(array_allocation_size_t_array$_t_address_$dyn_memory(length))
// let dst := array
@ -570,17 +531,9 @@
// let _1 := 0x20
// dst := add(array, _1)
// let src := add(offset, _1)
// if gt(add(add(offset, mul(length, _1)), _1), end)
// {
// revert(0, 0)
// }
// if gt(add(add(offset, mul(length, _1)), _1), end) { revert(0, 0) }
// let i := 0
// for {
// }
// lt(i, length)
// {
// i := add(i, 1)
// }
// for { } lt(i, length) { i := add(i, 1) }
// {
// mstore(dst, calldataload(src))
// dst := add(dst, _1)
@ -591,12 +544,7 @@
// {
// let srcPtr := value
// let i := 0
// for {
// }
// lt(i, 0x3)
// {
// i := add(i, 1)
// }
// for { } lt(i, 0x3) { i := add(i, 1) }
// {
// mstore(pos, and(mload(srcPtr), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF))
// srcPtr := add(srcPtr, 0x20)
@ -607,26 +555,17 @@
// {
// memPtr := mload(64)
// let newFreePtr := add(memPtr, size)
// if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))
// {
// revert(0, 0)
// }
// if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { revert(0, 0) }
// mstore(64, newFreePtr)
// }
// function array_allocation_size_t_array$_t_address_$dyn_memory(length) -> size
// {
// if gt(length, 0xffffffffffffffff)
// {
// revert(0, 0)
// }
// if gt(length, 0xffffffffffffffff) { revert(0, 0) }
// size := add(mul(length, 0x20), 0x20)
// }
// function array_allocation_size_t_array$_t_uint256_$2_memory(length) -> size
// {
// if gt(length, 0xffffffffffffffff)
// {
// revert(0, 0)
// }
// if gt(length, 0xffffffffffffffff) { revert(0, 0) }
// size := mul(length, 0x20)
// }
// }

View File

@ -254,12 +254,7 @@
// let b := add(0x300, mul(n, 0x80))
// let i := 0
// let i_1 := i
// for {
// }
// lt(i, n)
// {
// i := add(i, 0x01)
// }
// for { } lt(i, n) { i := add(i, 0x01) }
// {
// let _1 := add(calldataload(0x04), mul(i, 0xc0))
// let noteIndex := add(_1, 0x24)
@ -270,14 +265,9 @@
// switch eq(_2, n)
// case 1 {
// k := kn
// if eq(m, n)
// {
// k := sub(gen_order, kn)
// }
// }
// case 0 {
// k := calldataload(noteIndex)
// if eq(m, n) { k := sub(gen_order, kn) }
// }
// case 0 { k := calldataload(noteIndex) }
// validateCommitment(noteIndex, k, a)
// switch gt(_2, m)
// case 1 {
@ -323,10 +313,7 @@
// }
// b := add(b, _3)
// }
// if lt(m, n)
// {
// validatePairing(0x64)
// }
// if lt(m, n) { validatePairing(0x64) }
// if iszero(eq(mod(keccak256(0x2a0, add(b, 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60)), gen_order), challenge))
// {
// mstore(i_1, 404)
@ -388,12 +375,7 @@
// function hashCommitments(notes, n)
// {
// let i := 0
// for {
// }
// lt(i, n)
// {
// i := add(i, 0x01)
// }
// for { } lt(i, n) { i := add(i, 0x01) }
// {
// calldatacopy(add(0x300, mul(i, 0x80)), add(add(notes, mul(i, 0xc0)), 0x60), 0x80)
// }

View File

@ -12,8 +12,4 @@
// ====
// step: fullSuite
// ----
// {
// {
// mstore(1, 1)
// }
// }
// { { mstore(1, 1) } }

View File

@ -47,19 +47,10 @@
// }
// function abi_decode_t_bytes_calldata_ptr(offset, end) -> arrayPos, length
// {
// if iszero(slt(add(offset, 0x1f), end))
// {
// revert(0, 0)
// }
// if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }
// length := calldataload(offset)
// if gt(length, 0xffffffffffffffff)
// {
// revert(0, 0)
// }
// if gt(length, 0xffffffffffffffff) { revert(0, 0) }
// arrayPos := add(offset, 0x20)
// if gt(add(add(offset, length), 0x20), end)
// {
// revert(0, 0)
// }
// if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }
// }
// }

View File

@ -9,8 +9,4 @@
// ====
// step: fullSuite
// ----
// {
// {
// mstore(9, 0)
// }
// }
// { { mstore(9, 0) } }

View File

@ -10,8 +10,4 @@
// ====
// step: fullSuite
// ----
// {
// {
// mstore(10, 0)
// }
// }
// { { mstore(10, 0) } }

View File

@ -8,11 +8,7 @@
// step: functionGrouper
// ----
// {
// {
// let x := 2
// }
// { let x := 2 }
// function f() -> y
// {
// y := 8
// }
// { y := 8 }
// }

View File

@ -6,20 +6,13 @@
// {
// {
// let a:u256
// {
// }
// { }
// }
// function f() -> x:bool
// {
// let b:u256 := 4:u256
// {
// }
// for {
// }
// f()
// {
// }
// {
// }
// { }
// for { } f() { }
// { }
// }
// }

View File

@ -8,13 +8,7 @@
// step: functionGrouper
// ----
// {
// {
// {
// let x := 2
// }
// }
// { { let x := 2 } }
// function f() -> y
// {
// y := 8
// }
// { y := 8 }
// }

View File

@ -15,11 +15,7 @@
// let e:u256
// }
// function f()
// {
// let b:u256
// }
// { let b:u256 }
// function g()
// {
// let d:u256
// }
// { let d:u256 }
// }

View File

@ -13,16 +13,12 @@
// yul: true
// ----
// {
// {
// let a:u256
// }
// { let a:u256 }
// function f()
// {
// let b:u256
// function g()
// {
// let c:u256
// }
// { let c:u256 }
// let d:u256
// }
// }

View File

@ -6,10 +6,7 @@
// yul: true
// ----
// {
// {
// let a:u256
// }
// { let a:u256 }
// function f()
// {
// }
// { }
// }

View File

@ -2,7 +2,4 @@
// ====
// step: functionGrouper
// ----
// {
// {
// }
// }
// { { } }

View File

@ -16,12 +16,7 @@
// function f() -> x:bool
// {
// let b:u256 := 4:u256
// for {
// }
// f()
// {
// }
// {
// }
// for { } f() { }
// { }
// }
// }

View File

@ -14,11 +14,7 @@
// let c:u256
// let e:u256
// function f()
// {
// let b:u256
// }
// { let b:u256 }
// function g()
// {
// let d:u256
// }
// { let d:u256 }
// }

View File

@ -13,9 +13,7 @@
// {
// let a:u256
// function g()
// {
// let c:u256
// }
// { let c:u256 }
// function f()
// {
// let b:u256

View File

@ -9,6 +9,5 @@
// {
// let a:u256
// function f()
// {
// }
// { }
// }

View File

@ -3,5 +3,4 @@
// ====
// step: functionHoister
// ----
// {
// }
// { }

View File

@ -15,20 +15,13 @@
// function main()
// {
// let a:u256
// {
// }
// { }
// }
// function f() -> x:bool
// {
// let b:u256 := 4:u256
// {
// }
// for {
// }
// f()
// {
// }
// {
// }
// { }
// for { } f() { }
// { }
// }
// }

View File

@ -17,11 +17,7 @@
// let e:u256
// }
// function f()
// {
// let b:u256
// }
// { let b:u256 }
// function g()
// {
// let d:u256
// }
// { let d:u256 }
// }

View File

@ -12,16 +12,12 @@
// ----
// {
// function main()
// {
// let a:u256
// }
// { let a:u256 }
// function f()
// {
// let b:u256
// function g()
// {
// let c:u256
// }
// { let c:u256 }
// let d:u256
// }
// }

View File

@ -8,10 +8,7 @@
// ----
// {
// function main()
// {
// let a:u256
// }
// { let a:u256 }
// function f()
// {
// }
// { }
// }

Some files were not shown because too many files have changed in this diff Show More