Merge pull request #6171 from ethereum/ignorePrefixWhileInlining

Do not prepend function name to all variables when inlining.
This commit is contained in:
chriseth 2019-03-05 11:36:53 +01:00 committed by GitHub
commit d0ab5454f8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
24 changed files with 322 additions and 339 deletions

View File

@ -177,7 +177,7 @@ vector<Statement> InlineModifier::performInline(Statement& _statement, FunctionC
// helper function to create a new variable that is supposed to model // helper function to create a new variable that is supposed to model
// an existing variable. // an existing variable.
auto newVariable = [&](TypedName const& _existingVariable, Expression* _value) { auto newVariable = [&](TypedName const& _existingVariable, Expression* _value) {
YulString newName = m_nameDispenser.newName(_existingVariable.name, function->name); YulString newName = m_nameDispenser.newName(_existingVariable.name);
variableReplacements[_existingVariable.name] = newName; variableReplacements[_existingVariable.name] = newName;
VariableDeclaration varDecl{_funCall.location, {{_funCall.location, newName, _existingVariable.type}}, {}}; VariableDeclaration varDecl{_funCall.location, {{_funCall.location, newName, _existingVariable.type}}, {}};
if (_value) if (_value)
@ -192,7 +192,7 @@ vector<Statement> InlineModifier::performInline(Statement& _statement, FunctionC
for (auto const& var: function->returnVariables) for (auto const& var: function->returnVariables)
newVariable(var, nullptr); newVariable(var, nullptr);
Statement newBody = BodyCopier(m_nameDispenser, function->name, variableReplacements)(function->body); Statement newBody = BodyCopier(m_nameDispenser, variableReplacements)(function->body);
newStatements += std::move(boost::get<Block>(newBody).statements); newStatements += std::move(boost::get<Block>(newBody).statements);
boost::apply_visitor(GenericFallbackVisitor<Assignment, VariableDeclaration>{ boost::apply_visitor(GenericFallbackVisitor<Assignment, VariableDeclaration>{
@ -228,7 +228,7 @@ vector<Statement> InlineModifier::performInline(Statement& _statement, FunctionC
Statement BodyCopier::operator()(VariableDeclaration const& _varDecl) Statement BodyCopier::operator()(VariableDeclaration const& _varDecl)
{ {
for (auto const& var: _varDecl.variables) for (auto const& var: _varDecl.variables)
m_variableReplacements[var.name] = m_nameDispenser.newName(var.name, m_varNamePrefix); m_variableReplacements[var.name] = m_nameDispenser.newName(var.name);
return ASTCopier::operator()(_varDecl); return ASTCopier::operator()(_varDecl);
} }

View File

@ -140,11 +140,9 @@ class BodyCopier: public ASTCopier
public: public:
BodyCopier( BodyCopier(
NameDispenser& _nameDispenser, NameDispenser& _nameDispenser,
YulString _varNamePrefix,
std::map<YulString, YulString> const& _variableReplacements std::map<YulString, YulString> const& _variableReplacements
): ):
m_nameDispenser(_nameDispenser), m_nameDispenser(_nameDispenser),
m_varNamePrefix(_varNamePrefix),
m_variableReplacements(_variableReplacements) m_variableReplacements(_variableReplacements)
{} {}
@ -156,7 +154,6 @@ public:
YulString translateIdentifier(YulString _name) override; YulString translateIdentifier(YulString _name) override;
NameDispenser& m_nameDispenser; NameDispenser& m_nameDispenser;
YulString m_varNamePrefix;
std::map<YulString, YulString> m_variableReplacements; std::map<YulString, YulString> m_variableReplacements;
}; };

View File

@ -39,18 +39,7 @@ NameDispenser::NameDispenser(Dialect const& _dialect, set<YulString> _usedNames)
{ {
} }
YulString NameDispenser::newName(YulString _nameHint, YulString _context) YulString NameDispenser::newName(YulString _nameHint)
{
// Shortening rules: Use a suffix of _prefix and a prefix of _context.
YulString prefix = _nameHint;
if (!_context.empty())
prefix = YulString{_context.str().substr(0, 10) + "_" + prefix.str()};
return newNameInternal(prefix);
}
YulString NameDispenser::newNameInternal(YulString _nameHint)
{ {
YulString name = _nameHint; YulString name = _nameHint;
while (name.empty() || m_usedNames.count(name) || m_dialect.builtin(name)) while (name.empty() || m_usedNames.count(name) || m_dialect.builtin(name))

View File

@ -43,14 +43,10 @@ public:
/// Initialize the name dispenser with the given used names. /// Initialize the name dispenser with the given used names.
explicit NameDispenser(Dialect const& _dialect, std::set<YulString> _usedNames); explicit NameDispenser(Dialect const& _dialect, std::set<YulString> _usedNames);
/// @returns a currently unused name that should be similar to _nameHint /// @returns a currently unused name that should be similar to _nameHint.
/// and prefixed by _context if present. YulString newName(YulString _nameHint);
/// If the resulting name would be too long, trims the context at the end
/// and the name hint at the start.
YulString newName(YulString _nameHint, YulString _context = {});
private: private:
YulString newNameInternal(YulString _nameHint);
Dialect const& m_dialect; Dialect const& m_dialect;
std::set<YulString> m_usedNames; std::set<YulString> m_usedNames;

View File

@ -8,19 +8,19 @@
// fullInliner // fullInliner
// { // {
// { // {
// let f_a := calldataload(0) // let a_2 := calldataload(0)
// let f_b := 0 // let b_3 := 0
// let f_c := 0 // let c_4 := 0
// f_b := sload(mload(f_a)) // b_3 := sload(mload(a_2))
// f_c := 3 // c_4 := 3
// let b3 := f_b // let b3 := b_3
// let f_a_2 := f_c // let a_6 := c_4
// let f_b_3 := 0 // let b_7 := 0
// let f_c_4 := 0 // let c_8 := 0
// f_b_3 := sload(mload(f_a_2)) // b_7 := sload(mload(a_6))
// f_c_4 := 3 // c_8 := 3
// let b4 := f_b_3 // let b4 := b_7
// let c4 := f_c_4 // let c4 := c_8
// } // }
// function f(a) -> b, c // function f(a) -> b, c
// { // {

View File

@ -13,11 +13,11 @@
// { // {
// { // {
// let _2 := mload(0) // let _2 := mload(0)
// let f_a := mload(1) // let a_10 := mload(1)
// let f_r := 0 // let r_11 := 0
// f_a := mload(f_a) // a_10 := mload(a_10)
// f_r := add(f_a, calldatasize()) // r_11 := add(a_10, calldatasize())
// if gt(f_r, _2) // if gt(r_11, _2)
// { // {
// sstore(0, 2) // sstore(0, 2)
// } // }

View File

@ -21,28 +21,28 @@
// { // {
// let a_1 := mload(2) // let a_1 := mload(2)
// let a2 := 2 // let a2 := 2
// let f_a := a_1 // let a_3 := a_1
// let f_b := 0 // let b_4 := 0
// let f_x := mload(f_a) // let x_5 := mload(a_3)
// f_b := sload(f_x) // b_4 := sload(x_5)
// let f_y := add(f_a, f_x) // let y_6 := add(a_3, x_5)
// sstore(f_y, 10) // sstore(y_6, 10)
// let r := f_b // let r := b_4
// let f_a_3 := a2 // let a_8 := a2
// let f_b_4 := 0 // let b_9 := 0
// let f_x_5 := mload(f_a_3) // let x_10 := mload(a_8)
// f_b_4 := sload(f_x_5) // b_9 := sload(x_10)
// let f_y_6 := add(f_a_3, f_x_5) // let y_11 := add(a_8, x_10)
// sstore(f_y_6, 10) // sstore(y_11, 10)
// let t := f_b_4 // let t := b_9
// let a3 // let a3
// let f_a_8 := a3 // let a_13 := a3
// let f_b_9 := 0 // let b_14 := 0
// let f_x_10 := mload(f_a_8) // let x_15 := mload(a_13)
// f_b_9 := sload(f_x_10) // b_14 := sload(x_15)
// let f_y_11 := add(f_a_8, f_x_10) // let y_16 := add(a_13, x_15)
// sstore(f_y_11, 10) // sstore(y_16, 10)
// let s := f_b_9 // let s := b_14
// } // }
// function f(a) -> b // function f(a) -> b
// { // {

View File

@ -14,15 +14,15 @@
// fullInliner // fullInliner
// { // {
// { // {
// let f_a := mload(1) // let a_6 := mload(1)
// let f_b := 0 // let b_7 := 0
// let f_x := mload(f_a) // let x_8 := mload(a_6)
// f_b := sload(f_x) // b_7 := sload(x_8)
// let f_c := 3 // let c_9 := 3
// mstore(mul(f_a, f_b), mload(f_x)) // mstore(mul(a_6, b_7), mload(x_8))
// let f_y := add(f_a, f_x) // let y_12 := add(a_6, x_8)
// sstore(f_y, 10) // sstore(y_12, 10)
// let r := f_b // let r := b_7
// } // }
// function f(a) -> b // function f(a) -> b
// { // {

View File

@ -12,10 +12,10 @@
// { // {
// { // {
// let verylongvariablename2_1 := 3 // let verylongvariablename2_1 := 3
// let verylongfu_verylongvariablename := verylongvariablename2_1 // let verylongvariablename_4 := verylongvariablename2_1
// let verylongfu_verylongvariablename2 := 0 // let verylongvariablename2_5 := 0
// verylongfu_verylongvariablename2 := add(verylongfu_verylongvariablename, verylongfu_verylongvariablename) // verylongvariablename2_5 := add(verylongvariablename_4, verylongvariablename_4)
// mstore(0, verylongfu_verylongvariablename2) // mstore(0, verylongvariablename2_5)
// mstore(1, verylongvariablename2_1) // mstore(1, verylongvariablename2_1)
// } // }
// function verylongfunctionname(verylongvariablename) -> verylongvariablename2 // function verylongfunctionname(verylongvariablename) -> verylongvariablename2

View File

@ -12,13 +12,13 @@
// let _2 := mload(5) // let _2 := mload(5)
// let _4 := mload(4) // let _4 := mload(4)
// let _6 := mload(3) // let _6 := mload(3)
// let f_a := mload(2) // let a_13 := mload(2)
// let f_b := _6 // let b_14 := _6
// let f_c := _4 // let c_15 := _4
// let f_x := 0 // let x_16 := 0
// f_x := add(f_a, f_b) // x_16 := add(a_13, b_14)
// f_x := mul(f_x, f_c) // x_16 := mul(x_16, c_15)
// let _10 := add(f_x, _2) // let _10 := add(x_16, _2)
// let y := add(mload(1), _10) // let y := add(mload(1), _10)
// } // }
// function f(a, b, c) -> x // function f(a, b, c) -> x

View File

@ -8,14 +8,14 @@
// { // {
// { // {
// let _1 := 7 // let _1 := 7
// let f_a := 3 // let a_6 := 3
// let f_x := 0 // let x_7 := 0
// f_x := add(f_a, f_a) // x_7 := add(a_6, a_6)
// let g_b := f_x // let b_8 := x_7
// let g_c := _1 // let c_9 := _1
// let g_y := 0 // let y_10 := 0
// g_y := mul(mload(g_c), f(g_b)) // y_10 := mul(mload(c_9), f(b_8))
// let y_1 := g_y // let y_1 := y_10
// } // }
// function f(a) -> x // function f(a) -> x
// { // {
@ -23,9 +23,9 @@
// } // }
// function g(b, c) -> y // function g(b, c) -> y
// { // {
// let f_a_6 := b // let a_13 := b
// let f_x_7 := 0 // let x_14 := 0
// f_x_7 := add(f_a_6, f_a_6) // x_14 := add(a_13, a_13)
// y := mul(mload(c), f_x_7) // y := mul(mload(c), x_14)
// } // }
// } // }

View File

@ -26,33 +26,33 @@
// fullInliner // fullInliner
// { // {
// { // {
// let f_x := 100 // let x_8 := 100
// mstore(0, f_x) // mstore(0, x_8)
// mstore(7, h()) // mstore(7, h())
// g(10) // g(10)
// mstore(1, f_x) // mstore(1, x_8)
// } // }
// function f(x) // function f(x)
// { // {
// mstore(0, x) // mstore(0, x)
// let h_t := 0 // let t_20 := 0
// h_t := 2 // t_20 := 2
// mstore(7, h_t) // mstore(7, t_20)
// let g_x_1 := 10 // let x_1_21 := 10
// let g_f_x_8 := 1 // let x_14_23 := 1
// mstore(0, g_f_x_8) // mstore(0, x_14_23)
// mstore(7, h()) // mstore(7, h())
// g(10) // g(10)
// mstore(1, g_f_x_8) // mstore(1, x_14_23)
// mstore(1, x) // mstore(1, x)
// } // }
// function g(x_1) // function g(x_1)
// { // {
// let f_x_8 := 1 // let x_14 := 1
// mstore(0, f_x_8) // mstore(0, x_14)
// mstore(7, h()) // mstore(7, h())
// g(10) // g(10)
// mstore(1, f_x_8) // mstore(1, x_14)
// } // }
// function h() -> t // function h() -> t
// { // {

View File

@ -10,13 +10,13 @@
// fullInliner // fullInliner
// { // {
// { // {
// let f_a := mload(0) // let a_3 := mload(0)
// let f_x := 0 // let x_4 := 0
// let f_y := 0 // let y_5 := 0
// f_x := mul(f_a, f_a) // x_4 := mul(a_3, a_3)
// f_y := add(f_a, f_x) // y_5 := add(a_3, x_4)
// let r := f_x // let r := x_4
// mstore(r, f_y) // mstore(r, y_5)
// } // }
// function f(a) -> x, y // function f(a) -> x, y
// { // {

View File

@ -18,45 +18,45 @@
// } // }
// function g() -> x_1 // function g() -> x_1
// { // {
// let f_a := 2 // let a_20 := 2
// let f_b := 0 // let b_21 := 0
// f_b := sload(mload(f_a)) // b_21 := sload(mload(a_20))
// let f_a_20 := f_b // let a_23 := b_21
// let f_b_21 := 0 // let b_24 := 0
// f_b_21 := sload(mload(f_a_20)) // b_24 := sload(mload(a_23))
// let f_a_23 := f_b_21 // let a_26 := b_24
// let f_b_24 := 0 // let b_27 := 0
// f_b_24 := sload(mload(f_a_23)) // b_27 := sload(mload(a_26))
// let f_a_26 := f_b_24 // let a_29 := b_27
// let f_b_27 := 0 // let b_30 := 0
// f_b_27 := sload(mload(f_a_26)) // b_30 := sload(mload(a_29))
// let f_a_29 := f_b_27 // let a_32 := b_30
// let f_b_30 := 0 // let b_33 := 0
// f_b_30 := sload(mload(f_a_29)) // b_33 := sload(mload(a_32))
// let f_a_32 := f_b_30 // let a_35 := b_33
// let f_b_33 := 0 // let b_36 := 0
// f_b_33 := sload(mload(f_a_32)) // b_36 := sload(mload(a_35))
// let f_a_35 := f_b_33 // let a_38 := b_36
// let f_b_36 := 0 // let b_39 := 0
// f_b_36 := sload(mload(f_a_35)) // b_39 := sload(mload(a_38))
// let f_a_38 := f_b_36 // let a_41 := b_39
// let f_b_39 := 0 // let b_42 := 0
// f_b_39 := sload(mload(f_a_38)) // b_42 := sload(mload(a_41))
// let f_a_41 := f_b_39 // let a_44 := b_42
// let f_b_42 := 0 // let b_45 := 0
// f_b_42 := sload(mload(f_a_41)) // b_45 := sload(mload(a_44))
// let f_a_44 := f_b_42 // let a_47 := b_45
// let f_b_45 := 0 // let b_48 := 0
// f_b_45 := sload(mload(f_a_44)) // b_48 := sload(mload(a_47))
// let f_a_47 := f_b_45 // let a_50 := b_48
// let f_b_48 := 0 // let b_51 := 0
// f_b_48 := sload(mload(f_a_47)) // b_51 := sload(mload(a_50))
// let f_a_50 := f_b_48 // let a_53 := b_51
// let f_b_51 := 0 // let b_54 := 0
// f_b_51 := sload(mload(f_a_50)) // b_54 := sload(mload(a_53))
// let f_a_53 := f_b_51 // let a_56 := b_54
// let f_b_54 := 0 // let b_57 := 0
// f_b_54 := sload(mload(f_a_53)) // b_57 := sload(mload(a_56))
// x_1 := f(f(f(f(f(f(f_b_54)))))) // x_1 := f(f(f(f(f(f(b_57))))))
// } // }
// } // }

View File

@ -11,46 +11,46 @@
// fullInliner // fullInliner
// { // {
// { // {
// let f_a := 2 // let a_20 := 2
// let f_b := 0 // let b_21 := 0
// f_b := sload(mload(f_a)) // b_21 := sload(mload(a_20))
// let f_a_20 := f_b // let a_23 := b_21
// let f_b_21 := 0 // let b_24 := 0
// f_b_21 := sload(mload(f_a_20)) // b_24 := sload(mload(a_23))
// let f_a_23 := f_b_21 // let a_26 := b_24
// let f_b_24 := 0 // let b_27 := 0
// f_b_24 := sload(mload(f_a_23)) // b_27 := sload(mload(a_26))
// let f_a_26 := f_b_24 // let a_29 := b_27
// let f_b_27 := 0 // let b_30 := 0
// f_b_27 := sload(mload(f_a_26)) // b_30 := sload(mload(a_29))
// let f_a_29 := f_b_27 // let a_32 := b_30
// let f_b_30 := 0 // let b_33 := 0
// f_b_30 := sload(mload(f_a_29)) // b_33 := sload(mload(a_32))
// let f_a_32 := f_b_30 // let a_35 := b_33
// let f_b_33 := 0 // let b_36 := 0
// f_b_33 := sload(mload(f_a_32)) // b_36 := sload(mload(a_35))
// let f_a_35 := f_b_33 // let a_38 := b_36
// let f_b_36 := 0 // let b_39 := 0
// f_b_36 := sload(mload(f_a_35)) // b_39 := sload(mload(a_38))
// let f_a_38 := f_b_36 // let a_41 := b_39
// let f_b_39 := 0 // let b_42 := 0
// f_b_39 := sload(mload(f_a_38)) // b_42 := sload(mload(a_41))
// let f_a_41 := f_b_39 // let a_44 := b_42
// let f_b_42 := 0 // let b_45 := 0
// f_b_42 := sload(mload(f_a_41)) // b_45 := sload(mload(a_44))
// let f_a_44 := f_b_42 // let a_47 := b_45
// let f_b_45 := 0 // let b_48 := 0
// f_b_45 := sload(mload(f_a_44)) // b_48 := sload(mload(a_47))
// let f_a_47 := f_b_45 // let a_50 := b_48
// let f_b_48 := 0 // let b_51 := 0
// f_b_48 := sload(mload(f_a_47)) // b_51 := sload(mload(a_50))
// let f_a_50 := f_b_48 // let a_53 := b_51
// let f_b_51 := 0 // let b_54 := 0
// f_b_51 := sload(mload(f_a_50)) // b_54 := sload(mload(a_53))
// let f_a_53 := f_b_51 // let a_56 := b_54
// let f_b_54 := 0 // let b_57 := 0
// f_b_54 := sload(mload(f_a_53)) // b_57 := sload(mload(a_56))
// let x_1 := f(f(f(f(f(f(f_b_54)))))) // let x_1 := f(f(f(f(f(f(b_57))))))
// } // }
// function f(a) -> b // function f(a) -> b
// { // {

View File

@ -8,8 +8,8 @@
// fullInliner // fullInliner
// { // {
// { // {
// let f_a := mload(0) // let a_3 := mload(0)
// sstore(f_a, f_a) // sstore(a_3, a_3)
// } // }
// function f(a) // function f(a)
// { // {

View File

@ -13,26 +13,26 @@
// { // {
// { // {
// for { // for {
// let f_a := 0 // let a_3 := 0
// let f_r := 0 // let r_4 := 0
// sstore(f_a, 0) // sstore(a_3, 0)
// f_r := f_a // r_4 := a_3
// let x := f_r // let x := r_4
// } // }
// f(x) // f(x)
// { // {
// let f_a_3 := x // let a_6 := x
// let f_r_4 := 0 // let r_7 := 0
// sstore(f_a_3, 0) // sstore(a_6, 0)
// f_r_4 := f_a_3 // r_7 := a_6
// x := f_r_4 // x := r_7
// } // }
// { // {
// let f_a_6 := x // let a_9 := x
// let f_r_7 := 0 // let r_10 := 0
// sstore(f_a_6, 0) // sstore(a_9, 0)
// f_r_7 := f_a_6 // r_10 := a_9
// let t := f_r_7 // let t := r_10
// } // }
// } // }
// function f(a) -> r // function f(a) -> r

View File

@ -13,11 +13,11 @@
// { // {
// { // {
// let _1 := 2 // let _1 := 2
// let f_a := 7 // let a_5 := 7
// let f_x := 0 // let x_6 := 0
// let f_r := mul(f_a, f_a) // let r_7 := mul(a_5, a_5)
// f_x := add(f_r, f_r) // x_6 := add(r_7, r_7)
// pop(add(f_x, _1)) // pop(add(x_6, _1))
// } // }
// function f(a) -> x // function f(a) -> x
// { // {

View File

@ -8,7 +8,7 @@
// fullInliner // fullInliner
// { // {
// { // {
// let f_a := mload(0) // let a_4 := mload(0)
// f(1) // f(1)
// } // }
// function f(a) // function f(a)

View File

@ -10,11 +10,11 @@
// { // {
// { // {
// let _2 := mload(7) // let _2 := mload(7)
// let f_a := sload(mload(2)) // let a_7 := sload(mload(2))
// let f_x := 0 // let x_8 := 0
// let f_r := mul(f_a, f_a) // let r_9 := mul(a_7, a_7)
// f_x := add(f_r, f_r) // x_8 := add(r_9, r_9)
// let y := add(f_x, _2) // let y := add(x_8, _2)
// } // }
// function f(a) -> x // function f(a) -> x
// { // {

View File

@ -1103,17 +1103,17 @@
// { // {
// revert(value4, value4) // revert(value4, value4)
// } // }
// let abi_decode_length := calldataload(_2) // let length := calldataload(_2)
// if gt(abi_decode_length, _1) // if gt(length, _1)
// { // {
// revert(value4, value4) // revert(value4, value4)
// } // }
// if gt(add(add(_2, abi_decode_length), 32), dataEnd) // if gt(add(add(_2, length), 32), dataEnd)
// { // {
// revert(value4, value4) // revert(value4, value4)
// } // }
// value2 := add(_2, 32) // value2 := add(_2, 32)
// value3 := abi_decode_length // value3 := length
// let _3 := calldataload(add(headStart, 96)) // let _3 := calldataload(add(headStart, 96))
// if iszero(lt(_3, 3)) // if iszero(lt(_3, 3))
// { // {

View File

@ -461,36 +461,36 @@
// let _1 := 0x20 // let _1 := 0x20
// let _2 := 0 // let _2 := 0
// let _3 := mload(_2) // let _3 := mload(_2)
// let abi_encode_pos := _1 // let pos := _1
// let abi_encode_length := mload(_3) // let length := mload(_3)
// mstore(_1, abi_encode_length) // mstore(_1, length)
// abi_encode_pos := 64 // pos := 64
// let abi_encode_srcPtr := add(_3, _1) // let srcPtr := add(_3, _1)
// let abi_encode_i := _2 // let i := _2
// for { // for {
// } // }
// lt(abi_encode_i, abi_encode_length) // lt(i, length)
// { // {
// abi_encode_i := add(abi_encode_i, 1) // i := add(i, 1)
// } // }
// { // {
// let _4 := mload(abi_encode_srcPtr) // let _4 := mload(srcPtr)
// let abi_encode_pos_1 := abi_encode_pos // let pos_1 := pos
// let abi_encode_srcPtr_1 := _4 // let srcPtr_1 := _4
// let abi_encode_i_1 := _2 // let i_1 := _2
// for { // for {
// } // }
// lt(abi_encode_i_1, 0x3) // lt(i_1, 0x3)
// { // {
// abi_encode_i_1 := add(abi_encode_i_1, 1) // i_1 := add(i_1, 1)
// } // }
// { // {
// mstore(abi_encode_pos_1, and(mload(abi_encode_srcPtr_1), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)) // mstore(pos_1, and(mload(srcPtr_1), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF))
// abi_encode_srcPtr_1 := add(abi_encode_srcPtr_1, _1) // srcPtr_1 := add(srcPtr_1, _1)
// abi_encode_pos_1 := add(abi_encode_pos_1, _1) // pos_1 := add(pos_1, _1)
// } // }
// abi_encode_srcPtr := add(abi_encode_srcPtr, _1) // srcPtr := add(srcPtr, _1)
// abi_encode_pos := add(abi_encode_pos, 0x60) // pos := add(pos, 0x60)
// } // }
// let _5 := mload(64) // let _5 := mload(64)
// let _6 := mload(_1) // let _6 := mload(_1)
@ -498,22 +498,22 @@
// { // {
// revert(_2, _2) // revert(_2, _2)
// } // }
// let abi_decode_offset := calldataload(add(_6, 64)) // let offset := calldataload(add(_6, 64))
// let abi_decode := 0xffffffffffffffff // let _7 := 0xffffffffffffffff
// if gt(abi_decode_offset, abi_decode) // if gt(offset, _7)
// { // {
// revert(_2, _2) // revert(_2, _2)
// } // }
// let abi_decode_value2 := abi_decode_t_array$_t_uint256_$dyn_memory_ptr(add(_6, abi_decode_offset), _5) // let value2 := abi_decode_t_array$_t_uint256_$dyn_memory_ptr(add(_6, offset), _5)
// let abi_decode_offset_1 := calldataload(add(_6, 96)) // let offset_1 := calldataload(add(_6, 96))
// if gt(abi_decode_offset_1, abi_decode) // if gt(offset_1, _7)
// { // {
// revert(_2, _2) // revert(_2, _2)
// } // }
// let abi_decode_value3 := abi_decode_t_array$_t_array$_t_uint256_$2_memory_$dyn_memory_ptr(add(_6, abi_decode_offset_1), _5) // let value3 := abi_decode_t_array$_t_array$_t_uint256_$2_memory_$dyn_memory_ptr(add(_6, offset_1), _5)
// sstore(calldataload(_6), calldataload(add(_6, _1))) // sstore(calldataload(_6), calldataload(add(_6, _1)))
// sstore(abi_decode_value2, abi_decode_value3) // sstore(value2, value3)
// sstore(_2, abi_encode_pos) // sstore(_2, pos)
// function abi_decode_t_array$_t_array$_t_uint256_$2_memory_$dyn_memory_ptr(offset, end) -> array // function abi_decode_t_array$_t_array$_t_uint256_$2_memory_$dyn_memory_ptr(offset, end) -> array
// { // {
// if iszero(slt(add(offset, 0x1f), end)) // if iszero(slt(add(offset, 0x1f), end))
@ -543,29 +543,29 @@
// { // {
// revert(0, 0) // revert(0, 0)
// } // }
// let abi_decode_dst := allocateMemory(array_allocation_size_t_array$_t_uint256_$2_memory(0x2)) // let dst_1 := allocateMemory(array_allocation_size_t_array$_t_uint256_$2_memory(0x2))
// let abi_decode_dst_1 := abi_decode_dst // let dst_2 := dst_1
// let abi_decode_src := src // let src_1 := src
// let abi_decode := add(src, 0x40) // let _2 := add(src, 0x40)
// if gt(abi_decode, end) // if gt(_2, end)
// { // {
// revert(0, 0) // revert(0, 0)
// } // }
// let abi_decode_i := 0 // let i_1 := 0
// for { // for {
// } // }
// lt(abi_decode_i, 0x2) // lt(i_1, 0x2)
// { // {
// abi_decode_i := add(abi_decode_i, 1) // i_1 := add(i_1, 1)
// } // }
// { // {
// mstore(abi_decode_dst, calldataload(abi_decode_src)) // mstore(dst_1, calldataload(src_1))
// abi_decode_dst := add(abi_decode_dst, _1) // dst_1 := add(dst_1, _1)
// abi_decode_src := add(abi_decode_src, _1) // src_1 := add(src_1, _1)
// } // }
// mstore(dst, abi_decode_dst_1) // mstore(dst, dst_2)
// dst := add(dst, _1) // dst := add(dst, _1)
// src := abi_decode // src := _2
// } // }
// } // }
// function abi_decode_t_array$_t_uint256_$dyn_memory_ptr(offset, end) -> array // function abi_decode_t_array$_t_uint256_$dyn_memory_ptr(offset, end) -> array

View File

@ -231,107 +231,108 @@
// ---- // ----
// fullSuite // fullSuite
// { // {
// let validateJo := 0x80 // let _1 := 0x80
// mstore(validateJo, 7673901602397024137095011250362199966051872585513276903826533215767972925880) // mstore(_1, 7673901602397024137095011250362199966051872585513276903826533215767972925880)
// mstore(0xa0, 8489654445897228341090914135473290831551238522473825886865492707826370766375) // mstore(0xa0, 8489654445897228341090914135473290831551238522473825886865492707826370766375)
// let validateJo_m := calldataload(0x24) // let m := calldataload(0x24)
// let validateJo_n := calldataload(add(0x04, calldataload(0x04))) // let n := calldataload(add(0x04, calldataload(0x04)))
// let validateJo_gen_order := 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001 // let gen_order := 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001
// let validateJo_challenge := mod(calldataload(0x44), validateJo_gen_order) // let challenge := mod(calldataload(0x44), gen_order)
// if gt(validateJo_m, validateJo_n) // if gt(m, n)
// { // {
// mstore(0x00, 404) // mstore(0x00, 404)
// revert(0x00, 0x20) // revert(0x00, 0x20)
// } // }
// let validateJo_kn := calldataload(add(calldatasize(), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40)) // let kn := calldataload(add(calldatasize(), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40))
// mstore(0x2a0, caller()) // mstore(0x2a0, caller())
// mstore(0x2c0, validateJo_kn) // mstore(0x2c0, kn)
// mstore(0x2e0, validateJo_m) // mstore(0x2e0, m)
// validateJo_kn := mulmod(sub(validateJo_gen_order, validateJo_kn), validateJo_challenge, validateJo_gen_order) // kn := mulmod(sub(gen_order, kn), challenge, gen_order)
// hashCommitments(add(0x04, calldataload(0x04)), validateJo_n) // hashCommitments(add(0x04, calldataload(0x04)), n)
// let validateJo_b := add(0x300, mul(validateJo_n, validateJo)) // let b := add(0x300, mul(n, _1))
// let validateJo_i := 0 // let i := 0
// let validateJo_i_1 := validateJo_i // let i_1 := i
// for { // for {
// } // }
// lt(validateJo_i, validateJo_n) // lt(i, n)
// { // {
// validateJo_i := add(validateJo_i, 0x01) // i := add(i, 0x01)
// } // }
// { // {
// let validateJo_1 := add(calldataload(0x04), mul(validateJo_i, 0xc0)) // let _2 := add(calldataload(0x04), mul(i, 0xc0))
// let validateJo_k := validateJo_i_1 // let k := i_1
// let validateJo_a := calldataload(add(validateJo_1, 0x44)) // let a := calldataload(add(_2, 0x44))
// let validateJo_c := validateJo_challenge // let c := challenge
// switch eq(add(validateJo_i, 0x01), validateJo_n) // switch eq(add(i, 0x01), n)
// case 1 { // case 1 {
// validateJo_k := validateJo_kn // k := kn
// if eq(validateJo_m, validateJo_n) // if eq(m, n)
// { // {
// validateJo_k := sub(validateJo_gen_order, validateJo_kn) // k := sub(gen_order, kn)
// } // }
// } // }
// case 0 { // case 0 {
// validateJo_k := calldataload(add(validateJo_1, 0x24)) // k := calldataload(add(_2, 0x24))
// } // }
// validateCommitment(add(validateJo_1, 0x24), validateJo_k, validateJo_a) // validateCommitment(add(_2, 0x24), k, a)
// switch gt(add(validateJo_i, 0x01), validateJo_m) // switch gt(add(i, 0x01), m)
// case 1 { // case 1 {
// validateJo_kn := addmod(validateJo_kn, sub(validateJo_gen_order, validateJo_k), validateJo_gen_order) // kn := addmod(kn, sub(gen_order, k), gen_order)
// let validateJo_x := mod(mload(validateJo_i_1), validateJo_gen_order) // let x := mod(mload(i_1), gen_order)
// validateJo_k := mulmod(validateJo_k, validateJo_x, validateJo_gen_order) // k := mulmod(k, x, gen_order)
// validateJo_a := mulmod(validateJo_a, validateJo_x, validateJo_gen_order) // a := mulmod(a, x, gen_order)
// validateJo_c := mulmod(validateJo_challenge, validateJo_x, validateJo_gen_order) // c := mulmod(challenge, x, gen_order)
// mstore(validateJo_i_1, keccak256(validateJo_i_1, 0x20)) // mstore(i_1, keccak256(i_1, 0x20))
// } // }
// case 0 { // case 0 {
// validateJo_kn := addmod(validateJo_kn, validateJo_k, validateJo_gen_order) // kn := addmod(kn, k, gen_order)
// } // }
// let validateJo_2 := 0x40 // let _3 := 0x40
// calldatacopy(0xe0, add(validateJo_1, 164), validateJo_2) // calldatacopy(0xe0, add(_2, 164), _3)
// calldatacopy(0x20, add(validateJo_1, 100), validateJo_2) // calldatacopy(0x20, add(_2, 100), _3)
// mstore(0x120, sub(validateJo_gen_order, validateJo_c)) // mstore(0x120, sub(gen_order, c))
// mstore(0x60, validateJo_k) // let _4 := 0x60
// mstore(0xc0, validateJo_a) // mstore(_4, k)
// let validateJo_result := call(gas(), 7, validateJo_i_1, 0xe0, 0x60, 0x1a0, validateJo_2) // mstore(0xc0, a)
// let validateJo_result_1 := and(validateJo_result, call(gas(), 7, validateJo_i_1, 0x20, 0x60, 0x120, validateJo_2)) // let result := call(gas(), 7, i_1, 0xe0, _4, 0x1a0, _3)
// let validateJo_result_2 := and(validateJo_result_1, call(gas(), 7, validateJo_i_1, validateJo, 0x60, 0x160, validateJo_2)) // let result_1 := and(result, call(gas(), 7, i_1, 0x20, _4, 0x120, _3))
// let validateJo_result_3 := and(validateJo_result_2, call(gas(), 6, validateJo_i_1, 0x120, validateJo, 0x160, validateJo_2)) // let result_2 := and(result_1, call(gas(), 7, i_1, _1, _4, 0x160, _3))
// validateJo_result := and(validateJo_result_3, call(gas(), 6, validateJo_i_1, 0x160, validateJo, validateJo_b, validateJo_2)) // let result_3 := and(result_2, call(gas(), 6, i_1, 0x120, _1, 0x160, _3))
// if eq(validateJo_i, validateJo_m) // result := and(result_3, call(gas(), 6, i_1, 0x160, _1, b, _3))
// if eq(i, m)
// { // {
// mstore(0x260, mload(0x20)) // mstore(0x260, mload(0x20))
// mstore(0x280, mload(validateJo_2)) // mstore(0x280, mload(_3))
// mstore(0x1e0, mload(0xe0)) // mstore(0x1e0, mload(0xe0))
// mstore(0x200, sub(0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47, mload(0x100))) // mstore(0x200, sub(0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47, mload(0x100)))
// } // }
// if gt(validateJo_i, validateJo_m) // if gt(i, m)
// { // {
// mstore(0x60, validateJo_c) // mstore(_4, c)
// let validateJo_result_4 := and(validateJo_result, call(gas(), 7, validateJo_i_1, 0x20, 0x60, 0x220, validateJo_2)) // let result_4 := and(result, call(gas(), 7, i_1, 0x20, _4, 0x220, _3))
// let validateJo_result_5 := and(validateJo_result_4, call(gas(), 6, validateJo_i_1, 0x220, validateJo, 0x260, validateJo_2)) // let result_5 := and(result_4, call(gas(), 6, i_1, 0x220, _1, 0x260, _3))
// validateJo_result := and(validateJo_result_5, call(gas(), 6, validateJo_i_1, 0x1a0, validateJo, 0x1e0, validateJo_2)) // result := and(result_5, call(gas(), 6, i_1, 0x1a0, _1, 0x1e0, _3))
// } // }
// if iszero(validateJo_result) // if iszero(result)
// { // {
// mstore(validateJo_i_1, 400) // mstore(i_1, 400)
// revert(validateJo_i_1, 0x20) // revert(i_1, 0x20)
// } // }
// validateJo_b := add(validateJo_b, validateJo_2) // b := add(b, _3)
// } // }
// if lt(validateJo_m, validateJo_n) // if lt(m, n)
// { // {
// validatePairing(0x64) // validatePairing(0x64)
// } // }
// if iszero(eq(mod(keccak256(0x2a0, add(validateJo_b, 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60)), validateJo_gen_order), validateJo_challenge)) // if iszero(eq(mod(keccak256(0x2a0, add(b, 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60)), gen_order), challenge))
// { // {
// mstore(validateJo_i_1, 404) // mstore(i_1, 404)
// revert(validateJo_i_1, 0x20) // revert(i_1, 0x20)
// } // }
// mstore(validateJo_i_1, 0x01) // mstore(i_1, 0x01)
// return(validateJo_i_1, 0x20) // return(i_1, 0x20)
// mstore(validateJo_i_1, 404) // mstore(i_1, 404)
// revert(validateJo_i_1, 0x20) // revert(i_1, 0x20)
// function validatePairing(t2) // function validatePairing(t2)
// { // {
// let t2_x := calldataload(t2) // let t2_x := calldataload(t2)

View File

@ -19,10 +19,10 @@
// ---- // ----
// fullSuite // fullSuite
// { // {
// let allocate := 0x40 // let _1 := 0x40
// mstore(allocate, add(mload(allocate), 0x20)) // mstore(_1, add(mload(_1), 0x20))
// let allocate_p := mload(allocate) // let p := mload(_1)
// mstore(allocate, add(allocate_p, allocate)) // mstore(_1, add(p, _1))
// mstore(add(allocate_p, 96), 2) // mstore(add(p, 96), 2)
// mstore(allocate, 0x20) // mstore(_1, 0x20)
// } // }