mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Use single counter for name dispenser for performance reasons.
This commit is contained in:
parent
deed8e21f6
commit
845899e305
@ -21,9 +21,9 @@
|
|||||||
#include <libsolidity/inlineasm/AsmScope.h>
|
#include <libsolidity/inlineasm/AsmScope.h>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
using namespace dev;
|
||||||
using namespace dev::solidity::assembly;
|
using namespace dev::solidity::assembly;
|
||||||
|
|
||||||
|
|
||||||
bool Scope::registerLabel(yul::YulString _name)
|
bool Scope::registerLabel(yul::YulString _name)
|
||||||
{
|
{
|
||||||
if (exists(_name))
|
if (exists(_name))
|
||||||
|
@ -52,11 +52,10 @@ YulString NameDispenser::newName(YulString _nameHint, YulString _context)
|
|||||||
YulString NameDispenser::newNameInternal(YulString _nameHint)
|
YulString NameDispenser::newNameInternal(YulString _nameHint)
|
||||||
{
|
{
|
||||||
YulString name = _nameHint;
|
YulString name = _nameHint;
|
||||||
size_t suffix = 0;
|
|
||||||
while (name.empty() || m_usedNames.count(name))
|
while (name.empty() || m_usedNames.count(name))
|
||||||
{
|
{
|
||||||
suffix++;
|
m_counter++;
|
||||||
name = YulString(_nameHint.str() + "_" + to_string(suffix));
|
name = YulString(_nameHint.str() + "_" + to_string(m_counter));
|
||||||
}
|
}
|
||||||
m_usedNames.emplace(name);
|
m_usedNames.emplace(name);
|
||||||
return name;
|
return name;
|
||||||
|
@ -54,6 +54,7 @@ private:
|
|||||||
YulString newNameInternal(YulString _nameHint);
|
YulString newNameInternal(YulString _nameHint);
|
||||||
|
|
||||||
std::set<YulString> m_usedNames;
|
std::set<YulString> m_usedNames;
|
||||||
|
size_t m_counter = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
// a_1 := a_1
|
// a_1 := a_1
|
||||||
// }
|
// }
|
||||||
// {
|
// {
|
||||||
// let b_1:u256 := a_1
|
// let b_2:u256 := a_1
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -14,9 +14,9 @@
|
|||||||
// let a:u256, b:u256, c:u256, d:u256, f:u256
|
// let a:u256, b:u256, c:u256, d:u256, f:u256
|
||||||
// }
|
// }
|
||||||
// {
|
// {
|
||||||
// function f_1(a_1:u256) -> c_1:u256, d_1:u256
|
// function f_1(a_2:u256) -> c_3:u256, d_4:u256
|
||||||
// {
|
// {
|
||||||
// let b_1:u256, c_1_1:u256 := f_1(a_1)
|
// let b_5:u256, c_1:u256 := f_1(a_2)
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
// let a_1:bool
|
// let a_1:bool
|
||||||
// if a_1
|
// if a_1
|
||||||
// {
|
// {
|
||||||
// let b_1:bool := a_1
|
// let b_2:bool := a_1
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -18,10 +18,10 @@
|
|||||||
// let a_1:u256
|
// let a_1:u256
|
||||||
// switch a_1
|
// switch a_1
|
||||||
// case 0:u256 {
|
// case 0:u256 {
|
||||||
// let b_1:u256 := a_1
|
// let b_2:u256 := a_1
|
||||||
// }
|
// }
|
||||||
// default {
|
// default {
|
||||||
// let c_1:u256 := a_1
|
// let c_3:u256 := a_1
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -13,12 +13,12 @@
|
|||||||
// let c:u256
|
// let c:u256
|
||||||
// let b:u256
|
// let b:u256
|
||||||
// }
|
// }
|
||||||
// function f(a:u256, c_1:u256) -> b_1:u256
|
// function f(a:u256, c_1:u256) -> b_2:u256
|
||||||
// {
|
// {
|
||||||
// let x:u256
|
// let x:u256
|
||||||
// }
|
// }
|
||||||
// {
|
// {
|
||||||
// let a_1:u256
|
// let a_3:u256
|
||||||
// let x_1:u256
|
// let x_4:u256
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -14,13 +14,13 @@
|
|||||||
// f_b := sload(mload(f_a))
|
// f_b := sload(mload(f_a))
|
||||||
// f_c := 3
|
// f_c := 3
|
||||||
// let b3 := f_b
|
// let b3 := f_b
|
||||||
// let f_a_1 := f_c
|
// let f_a_2 := f_c
|
||||||
// let f_b_1
|
// let f_b_3
|
||||||
// let f_c_1
|
// let f_c_4
|
||||||
// f_b_1 := sload(mload(f_a_1))
|
// f_b_3 := sload(mload(f_a_2))
|
||||||
// f_c_1 := 3
|
// f_c_4 := 3
|
||||||
// let b4 := f_b_1
|
// let b4 := f_b_3
|
||||||
// let c4 := f_c_1
|
// let c4 := f_c_4
|
||||||
// }
|
// }
|
||||||
// function f(a) -> b, c
|
// function f(a) -> b, c
|
||||||
// {
|
// {
|
||||||
|
@ -23,9 +23,9 @@
|
|||||||
// }
|
// }
|
||||||
// function g(b, c) -> y
|
// function g(b, c) -> y
|
||||||
// {
|
// {
|
||||||
// let f_a_1 := b
|
// let f_a_6 := b
|
||||||
// let f_x_1
|
// let f_x_7
|
||||||
// f_x_1 := add(f_a_1, f_a_1)
|
// f_x_7 := add(f_a_6, f_a_6)
|
||||||
// y := mul(mload(c), f_x_1)
|
// y := mul(mload(c), f_x_7)
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -46,14 +46,14 @@
|
|||||||
// }
|
// }
|
||||||
// function g(x_1)
|
// function g(x_1)
|
||||||
// {
|
// {
|
||||||
// let f_x_1 := 1
|
// let f_x_8 := 1
|
||||||
// mstore(0, f_x_1)
|
// mstore(0, f_x_8)
|
||||||
// let f_h_t
|
// let f_h_t
|
||||||
// f_h_t := 2
|
// f_h_t := 2
|
||||||
// mstore(7, f_h_t)
|
// mstore(7, f_h_t)
|
||||||
// let f_g_x_1 := 10
|
// let f_g_x_1 := 10
|
||||||
// f(1)
|
// f(1)
|
||||||
// mstore(1, f_x_1)
|
// mstore(1, f_x_8)
|
||||||
// }
|
// }
|
||||||
// function h() -> t
|
// function h() -> t
|
||||||
// {
|
// {
|
||||||
|
@ -21,18 +21,18 @@
|
|||||||
// }
|
// }
|
||||||
// f(x)
|
// f(x)
|
||||||
// {
|
// {
|
||||||
// let f_a_1 := x
|
// let f_a_3 := x
|
||||||
// let f_r_1
|
// let f_r_4
|
||||||
// sstore(f_a_1, 0)
|
// sstore(f_a_3, 0)
|
||||||
// f_r_1 := f_a_1
|
// f_r_4 := f_a_3
|
||||||
// x := f_r_1
|
// x := f_r_4
|
||||||
// }
|
// }
|
||||||
// {
|
// {
|
||||||
// let f_a_2 := x
|
// let f_a_6 := x
|
||||||
// let f_r_2
|
// let f_r_7
|
||||||
// sstore(f_a_2, 0)
|
// sstore(f_a_6, 0)
|
||||||
// f_r_2 := f_a_2
|
// f_r_7 := f_a_6
|
||||||
// let t := f_r_2
|
// let t := f_r_7
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// function f(a) -> r
|
// function f(a) -> r
|
||||||
|
@ -14,13 +14,13 @@
|
|||||||
// fullSuite
|
// fullSuite
|
||||||
// {
|
// {
|
||||||
// {
|
// {
|
||||||
// let _12 := 0x20
|
// let _18 := 0x20
|
||||||
// let allocate__7 := 0x40
|
// let allocate__7 := 0x40
|
||||||
// let allocate_p_2 := mload(allocate__7)
|
// let allocate_p_12 := mload(allocate__7)
|
||||||
// mstore(allocate__7, add(allocate_p_2, _12))
|
// mstore(allocate__7, add(allocate_p_12, _18))
|
||||||
// pop(allocate_p_2)
|
// pop(allocate_p_12)
|
||||||
// let allocate_p_2_1 := mload(allocate__7)
|
// let allocate_p_12_31 := mload(allocate__7)
|
||||||
// mstore(allocate__7, add(allocate_p_2_1, allocate__7))
|
// mstore(allocate__7, add(allocate_p_12_31, allocate__7))
|
||||||
// mstore(add(allocate_p_2_1, 96), 2)
|
// mstore(add(allocate_p_12_31, 96), 2)
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -17,19 +17,19 @@
|
|||||||
// let length_1 := mload(from)
|
// let length_1 := mload(from)
|
||||||
// length := length_1
|
// length := length_1
|
||||||
// mstore(to, length_1)
|
// mstore(to, length_1)
|
||||||
// let from_1 := add(from, 0x20)
|
// let from_2 := add(from, 0x20)
|
||||||
// let to_1 := add(to, 0x20)
|
// let to_3 := add(to, 0x20)
|
||||||
// for {
|
// for {
|
||||||
// let x_1 := 1
|
// let x_4 := 1
|
||||||
// let x := x_1
|
// let x := x_4
|
||||||
// }
|
// }
|
||||||
// lt(x, length_1)
|
// lt(x, length_1)
|
||||||
// {
|
// {
|
||||||
// let x_2 := add(x, 0x20)
|
// let x_5 := add(x, 0x20)
|
||||||
// x := x_2
|
// x := x_5
|
||||||
// }
|
// }
|
||||||
// {
|
// {
|
||||||
// mstore(add(to_1, x), mload(add(from_1, x)))
|
// mstore(add(to_3, x), mload(add(from_2, x)))
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -13,11 +13,11 @@
|
|||||||
// {
|
// {
|
||||||
// let b_1 := add(b, a)
|
// let b_1 := add(b, a)
|
||||||
// b := b_1
|
// b := b_1
|
||||||
// let c_1 := add(c, b_1)
|
// let c_2 := add(c, b_1)
|
||||||
// c := c_1
|
// c := c_2
|
||||||
// let d_1 := add(d, c_1)
|
// let d_3 := add(d, c_2)
|
||||||
// d := d_1
|
// d := d_3
|
||||||
// let a_1 := add(a, d_1)
|
// let a_4 := add(a, d_3)
|
||||||
// a := a_1
|
// a := a_4
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -17,16 +17,16 @@
|
|||||||
// let a := a_1
|
// let a := a_1
|
||||||
// let a_2 := 2
|
// let a_2 := 2
|
||||||
// a := a_2
|
// a := a_2
|
||||||
// let b_1 := 3
|
// let b_3 := 3
|
||||||
// let b := b_1
|
// let b := b_3
|
||||||
// let b_2 := 4
|
// let b_4 := 4
|
||||||
// b := b_2
|
// b := b_4
|
||||||
// {
|
// {
|
||||||
// let a_3 := 3
|
// let a_5 := 3
|
||||||
// a := a_3
|
// a := a_5
|
||||||
// let a_4 := 4
|
// let a_6 := 4
|
||||||
// a := a_4
|
// a := a_6
|
||||||
// }
|
// }
|
||||||
// let a_5 := add(b_2, a)
|
// let a_7 := add(b_4, a)
|
||||||
// a := a_5
|
// a := a_7
|
||||||
// }
|
// }
|
||||||
|
Loading…
Reference in New Issue
Block a user