Skip to content

Commit

Permalink
fix assembly
Browse files Browse the repository at this point in the history
  • Loading branch information
ZumZoom committed Mar 20, 2024
1 parent 4bbdcb9 commit 20eecb4
Showing 1 changed file with 17 additions and 17 deletions.
34 changes: 17 additions & 17 deletions contracts/libraries/AddressArray.sol
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ library AddressArray {
function get(Data storage self) internal view returns (address[] memory output) {
/// @solidity memory-safe-assembly
assembly { // solhint-disable-line no-inline-assembly
let lengthAndFirst := sload(self.offset)
let lengthAndFirst := sload(self.slot)
let len := shr(_LENGTH_OFFSET, and(lengthAndFirst, _LENGTH_MASK))
let fst := and(lengthAndFirst, _ADDRESS_MASK)

Expand All @@ -47,7 +47,7 @@ library AddressArray {
let ptr := add(output, 0x20)
mstore(ptr, fst)
for { let i := 1 } lt(i, len) { i:= add(i, 1) } {
let item := sload(add(self.offset, i))
let item := sload(add(self.slot, i))
mstore(add(ptr, mul(0x20, i)), item)
}
}
Expand All @@ -59,7 +59,7 @@ library AddressArray {
bool exception;

Check warning on line 59 in contracts/libraries/AddressArray.sol

View check run for this annotation

Codecov / codecov/patch

contracts/libraries/AddressArray.sol#L57-L59

Added lines #L57 - L59 were not covered by tests
/// @solidity memory-safe-assembly
assembly { // solhint-disable-line no-inline-assembly

Check warning on line 61 in contracts/libraries/AddressArray.sol

View check run for this annotation

Codecov / codecov/patch

contracts/libraries/AddressArray.sol#L61

Added line #L61 was not covered by tests
let lengthAndFirst := sload(self.offset)
let lengthAndFirst := sload(self.slot)
let len := shr(_LENGTH_OFFSET, and(lengthAndFirst, _LENGTH_MASK))
let fst := and(lengthAndFirst, _ADDRESS_MASK)

Expand All @@ -71,7 +71,7 @@ library AddressArray {
let ptr := add(output, 0x20)
mstore(ptr, fst)
for { let i := 1 } lt(i, len) { i:= add(i, 1) } {
let item := and(sload(add(self.offset, i)), _ADDRESS_MASK)
let item := and(sload(add(self.slot, i)), _ADDRESS_MASK)
mstore(add(ptr, mul(0x20, i)), item)
}
}
Expand All @@ -82,16 +82,16 @@ library AddressArray {
function push(Data storage self, address account) internal returns (uint256 res) {
/// @solidity memory-safe-assembly
assembly { // solhint-disable-line no-inline-assembly
let lengthAndFirst := sload(self.offset)
let lengthAndFirst := sload(self.slot)
let len := shr(_LENGTH_OFFSET, and(lengthAndFirst, _LENGTH_MASK))

switch len
case 0 {
sstore(self.offset, or(or(account, _ONE_LENGTH), _ZERO_ADDRESS))
sstore(self.slot, or(or(account, _ONE_LENGTH), _ZERO_ADDRESS))
}
default {
sstore(self.offset, add(lengthAndFirst, _ONE_LENGTH))
sstore(add(self.offset, len), or(account, _ZERO_ADDRESS))
sstore(self.slot, add(lengthAndFirst, _ONE_LENGTH))
sstore(add(self.slot, len), or(account, _ZERO_ADDRESS))
}
res := add(len, 1)
}
Expand All @@ -102,20 +102,20 @@ library AddressArray {
bool exception;
/// @solidity memory-safe-assembly
assembly { // solhint-disable-line no-inline-assembly
let lengthAndFirst := sload(self.offset)
let lengthAndFirst := sload(self.slot)
let len := shr(_LENGTH_OFFSET, and(lengthAndFirst, _LENGTH_MASK))

switch len
case 0 {
exception := true
}
case 1 {
res := and(sload(self.offset), _ADDRESS_MASK)
sstore(self.offset, _ZERO_ADDRESS)
res := and(sload(self.slot), _ADDRESS_MASK)
sstore(self.slot, _ZERO_ADDRESS)
}
default {
res := and(sload(add(self.offset, sub(len, 1))), _ADDRESS_MASK)
sstore(self.offset, sub(lengthAndFirst, _ONE_LENGTH))
res := and(sload(add(self.slot, sub(len, 1))), _ADDRESS_MASK)
sstore(self.slot, sub(lengthAndFirst, _ONE_LENGTH))
}
}
if (exception) revert PopFromEmptyArray();
Expand All @@ -126,7 +126,7 @@ library AddressArray {
bool exception;
/// @solidity memory-safe-assembly
assembly { // solhint-disable-line no-inline-assembly
let lengthAndFirst := sload(self.offset)
let lengthAndFirst := sload(self.slot)
let len := shr(_LENGTH_OFFSET, and(lengthAndFirst, _LENGTH_MASK))
let fst := and(lengthAndFirst, _ADDRESS_MASK)

Expand All @@ -136,10 +136,10 @@ library AddressArray {

switch index
case 0 {
sstore(self.offset, or(xor(lengthAndFirst, fst), account))
sstore(self.slot, or(xor(lengthAndFirst, fst), account))
}
default {
sstore(add(self.offset, index), or(account, _ZERO_ADDRESS))
sstore(add(self.slot, index), or(account, _ZERO_ADDRESS))
}
}
if (exception) revert IndexOutOfBounds();
Expand All @@ -149,7 +149,7 @@ library AddressArray {
function erase(Data storage self) internal {

Check warning on line 149 in contracts/libraries/AddressArray.sol

View check run for this annotation

Codecov / codecov/patch

contracts/libraries/AddressArray.sol#L149

Added line #L149 was not covered by tests
/// @solidity memory-safe-assembly
assembly { // solhint-disable-line no-inline-assembly

Check warning on line 151 in contracts/libraries/AddressArray.sol

View check run for this annotation

Codecov / codecov/patch

contracts/libraries/AddressArray.sol#L151

Added line #L151 was not covered by tests
sstore(self.offset, _ADDRESS_MASK)
sstore(self.slot, _ADDRESS_MASK)
}
}
}

0 comments on commit 20eecb4

Please sign in to comment.