From de4b0aec86f1772a24806f83c38aa720ec08cc9b Mon Sep 17 00:00:00 2001 From: Hadrien Croubois Date: Tue, 9 Feb 2021 11:36:39 +0100 Subject: [PATCH] assembly isn't more efficient for EnumerableSet.add --- contracts/utils/EnumerableSet.sol | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/contracts/utils/EnumerableSet.sol b/contracts/utils/EnumerableSet.sol index 8917cccaf17..3f158e4511b 100644 --- a/contracts/utils/EnumerableSet.sol +++ b/contracts/utils/EnumerableSet.sol @@ -53,21 +53,10 @@ library EnumerableSet { */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { - - uint256 last; - assembly { - let p := sload(0x40) - mstore(p, set.slot) - let blk := keccak256(p, 0x20) - // push new value - last := sload(set.slot) - sstore(add(blk, last), value) - // update array length - last := add(last, 1) - sstore(set.slot, last) - } - set._indexes[value] = last; - + set._values.push(value); + // The value is stored at length-1, but we add 1 to all indexes + // and use 0 as a sentinel value + set._indexes[value] = set._values.length; return true; } else { return false;