mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #10023 from ethereum/develop
Merge develop into breaking.
This commit is contained in:
@@ -4,8 +4,8 @@ pragma solidity >=0.0;
|
||||
contract Arraysum {
|
||||
uint256[] values;
|
||||
|
||||
function sumArray() public view returns(uint) {
|
||||
uint sum = 0;
|
||||
function sumArray() public view returns(uint sum) {
|
||||
sum = 0;
|
||||
// The optimizer should read the length of the array only once, because
|
||||
// LoopInvariantCodeMotion can move the `sload` corresponding to the length outside of the
|
||||
// loop.
|
||||
|
||||
@@ -43,7 +43,7 @@ object "Arraysum_33" {
|
||||
vloc_sum := add(vloc_sum, _3)
|
||||
}
|
||||
let memPos := allocateMemory(_1)
|
||||
return(memPos, sub(abi_encode_uint(memPos, _1), memPos))
|
||||
return(memPos, sub(abi_encode_uint(memPos, vloc_sum), memPos))
|
||||
}
|
||||
}
|
||||
revert(0, 0)
|
||||
|
||||
@@ -7,6 +7,7 @@ contract C {
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (117-121): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 2072: (133-143): Unused local variable.
|
||||
// Warning 8364: (146-147): Assertion checker does not yet implement type type(struct C.A storage pointer)
|
||||
// Warning 4639: (146-163): Assertion checker does not yet implement this expression.
|
||||
|
||||
@@ -30,4 +30,5 @@ contract C {
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (429-442): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6328: (448-465): CHC: Assertion violation happens here.
|
||||
|
||||
@@ -32,4 +32,5 @@ contract C {
|
||||
// ----
|
||||
// Warning 5740: (116-129): Unreachable code.
|
||||
// Warning 5740: (221-234): Unreachable code.
|
||||
// Warning 6321: (408-421): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6328: (427-444): CHC: Assertion violation happens here.
|
||||
|
||||
@@ -8,5 +8,6 @@ contract C {
|
||||
// ====
|
||||
// EVMVersion: >=byzantium
|
||||
// ----
|
||||
// Warning 6321: (75-79): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 7645: (98-121): Assertion checker does not support try/catch clauses.
|
||||
// Warning 7645: (124-159): Assertion checker does not support try/catch clauses.
|
||||
|
||||
+1
@@ -13,3 +13,4 @@ contract C {
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (85-89): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
|
||||
@@ -7,3 +7,4 @@ contract c {
|
||||
bool b = (f() > 0) || (f() > 0);
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (86-90): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
|
||||
@@ -9,3 +9,5 @@ contract C {
|
||||
}
|
||||
//
|
||||
// ----
|
||||
// Warning 6321: (81-85): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (87-91): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
|
||||
@@ -23,5 +23,18 @@ a;
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (163-167): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (171-175): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (179-183): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (187-191): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (195-199): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (203-207): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (211-215): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (219-223): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (227-231): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (235-239): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (241-244): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (246-250): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (252-259): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6133: (72-90): Statement has no effect.
|
||||
// Warning 6133: (96-107): Statement has no effect.
|
||||
|
||||
@@ -21,6 +21,7 @@ contract C {
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (253-260): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 1218: (94-109): CHC: Error trying to invoke SMT solver.
|
||||
// Warning 1218: (113-126): CHC: Error trying to invoke SMT solver.
|
||||
// Warning 1218: (180-195): CHC: Error trying to invoke SMT solver.
|
||||
|
||||
@@ -11,4 +11,5 @@ contract C {
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (83-87): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6328: (203-217): CHC: Assertion violation happens here.
|
||||
|
||||
@@ -11,4 +11,5 @@ contract C {
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (83-87): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6328: (203-217): CHC: Assertion violation happens here.
|
||||
|
||||
@@ -11,4 +11,5 @@ contract C {
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (83-87): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6328: (204-221): CHC: Assertion violation happens here.
|
||||
|
||||
@@ -14,6 +14,7 @@ contract C
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (87-91): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 4984: (117-122): CHC: Overflow (resulting value larger than 127) happens here.
|
||||
// Warning 4984: (151-158): CHC: Overflow (resulting value larger than 127) happens here.
|
||||
// Warning 3944: (197-205): CHC: Underflow (resulting value less than -128) happens here.
|
||||
|
||||
@@ -25,4 +25,6 @@ contract C {
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (280-284): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (430-434): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6328: (440-449): CHC: Assertion violation happens here.
|
||||
|
||||
@@ -36,4 +36,5 @@ contract C {
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (655-662): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6328: (668-677): CHC: Assertion violation happens here.
|
||||
|
||||
@@ -10,6 +10,7 @@ contract test {
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (115-119): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6133: (125-126): Statement has no effect.
|
||||
// Warning 6133: (130-136): Statement has no effect.
|
||||
// Warning 6133: (140-144): Statement has no effect.
|
||||
|
||||
@@ -7,4 +7,5 @@ contract c {
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (80-84): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6328: (128-142): CHC: Assertion violation happens here.
|
||||
|
||||
@@ -8,4 +8,5 @@ contract C {
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (79-82): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6328: (157-171): CHC: Assertion violation happens here.
|
||||
|
||||
@@ -8,4 +8,5 @@ contract C {
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (79-82): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6328: (159-173): CHC: Assertion violation happens here.
|
||||
|
||||
@@ -5,3 +5,5 @@ contract C {
|
||||
((, a)) = (1, 2);
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (80-83): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
|
||||
@@ -5,3 +5,5 @@ contract C {
|
||||
(((, a),)) = ((1, 2), 3);
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (80-83): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
|
||||
@@ -5,3 +5,5 @@ contract C {
|
||||
(((((((, a),)))))) = ((1, 2), 3);
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (80-83): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
|
||||
@@ -5,3 +5,5 @@ contract C {
|
||||
((((((, a)))),)) = ((1, 2), 3);
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (80-83): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
|
||||
@@ -5,3 +5,5 @@ contract C {
|
||||
((((((((((((, a))))))),))))) = ((1, 2), 3);
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (80-83): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
|
||||
+1
@@ -10,4 +10,5 @@ contract C {
|
||||
// ====
|
||||
// EVMVersion: >=byzantium
|
||||
// ----
|
||||
// Warning 6321: (150-154): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 2072: (166-183): Unused local variable.
|
||||
|
||||
@@ -17,3 +17,4 @@ contract C {
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (399-407): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
|
||||
+3
@@ -4,3 +4,6 @@ contract C {
|
||||
function h() public pure returns(uint[] memory) {}
|
||||
function i() external pure returns(uint[] memory) {}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (51-64): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (134-147): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
|
||||
@@ -4,4 +4,5 @@ contract C {
|
||||
struct S { uint x; }
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (22-26): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// TypeError 3464: (45-46): This variable is of storage pointer type and can be accessed without prior assignment, which would lead to undefined behaviour.
|
||||
|
||||
@@ -4,4 +4,5 @@ contract Test {
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (54-66): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6133: (78-88): Statement has no effect.
|
||||
|
||||
+2
@@ -4,3 +4,5 @@ contract C {
|
||||
a;
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (46-50): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
|
||||
+4
@@ -9,3 +9,7 @@ contract C {
|
||||
function g() internal pure returns (uint, uint, uint, D.S[20] storage x, uint) { x = x; }
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (176-180): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (182-186): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (188-192): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (213-217): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
|
||||
+5
@@ -10,3 +10,8 @@ contract C {
|
||||
function h() internal pure returns (bytes memory, string storage s) { s = s; }
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (51-55): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (57-61): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (63-67): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (69-73): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (250-262): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
|
||||
@@ -8,3 +8,5 @@ contract Second {
|
||||
if (First(2).fun() == true) return 1;
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (183-187): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
|
||||
@@ -9,6 +9,7 @@ contract test {
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (83-87): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6133: (93-94): Statement has no effect.
|
||||
// Warning 6133: (98-104): Statement has no effect.
|
||||
// Warning 6133: (108-112): Statement has no effect.
|
||||
|
||||
@@ -4,3 +4,5 @@ contract C {
|
||||
function (address payable) payable external returns (address payable) h; h;
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (197-267): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
|
||||
@@ -4,5 +4,6 @@ contract test {
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (60-64): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 2072: (109-115): Unused local variable.
|
||||
// Warning 2018: (20-128): Function state mutability can be restricted to pure
|
||||
|
||||
@@ -11,4 +11,6 @@ contract C {
|
||||
// ====
|
||||
// EVMVersion: >=byzantium
|
||||
// ----
|
||||
// Warning 6321: (73-77): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (79-83): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 2072: (122-134): Unused local variable.
|
||||
|
||||
@@ -8,4 +8,7 @@ contract C {
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// EVMVersion: >=byzantium
|
||||
// EVMVersion: >=byzantium
|
||||
// ----
|
||||
// Warning 6321: (46-50): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (52-56): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
|
||||
@@ -8,4 +8,7 @@ contract C {
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// EVMVersion: >=byzantium
|
||||
// EVMVersion: >=byzantium
|
||||
// ----
|
||||
// Warning 6321: (46-50): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (52-56): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
|
||||
@@ -8,4 +8,7 @@ contract C {
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// EVMVersion: >=byzantium
|
||||
// EVMVersion: >=byzantium
|
||||
// ----
|
||||
// Warning 6321: (46-50): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (52-56): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
|
||||
@@ -6,4 +6,7 @@ contract C {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (46-50): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (52-56): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
|
||||
@@ -8,3 +8,6 @@ contract C {
|
||||
}
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (46-50): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (52-56): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
|
||||
@@ -9,3 +9,6 @@ contract C {
|
||||
}
|
||||
// ====
|
||||
// EVMVersion: >=byzantium
|
||||
// ----
|
||||
// Warning 6321: (46-59): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (61-65): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
|
||||
@@ -8,4 +8,7 @@ contract C {
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// EVMVersion: >=byzantium
|
||||
// EVMVersion: >=byzantium
|
||||
// ----
|
||||
// Warning 6321: (46-59): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (61-65): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
|
||||
@@ -11,4 +11,7 @@ contract C {
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// EVMVersion: >=byzantium
|
||||
// EVMVersion: >=byzantium
|
||||
// ----
|
||||
// Warning 6321: (46-50): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (52-56): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
|
||||
@@ -21,3 +21,6 @@ contract C {
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (194-198): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (200-204): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
// Warning 6321: (206-213): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
|
||||
+2
@@ -6,3 +6,5 @@ contract C {
|
||||
g.selector;
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (51-57): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
|
||||
@@ -4,3 +4,5 @@ contract C {
|
||||
function h() public { h(); g(); f(); }
|
||||
function i() payable public { i(); h(); g(); f(); }
|
||||
}
|
||||
// ----
|
||||
// Warning 6321: (89-93): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
|
||||
|
||||
@@ -218,7 +218,7 @@ string BytesUtils::formatRawBytes(
|
||||
auto it = _bytes.begin();
|
||||
|
||||
if (_bytes.size() != ContractABIUtils::encodingSize(_parameters))
|
||||
parameters = ContractABIUtils::defaultParameters(ceil(_bytes.size() / 32));
|
||||
parameters = ContractABIUtils::defaultParameters((_bytes.size() + 31) / 32);
|
||||
else
|
||||
parameters = _parameters;
|
||||
|
||||
@@ -320,7 +320,7 @@ string BytesUtils::formatBytesRange(
|
||||
auto it = _bytes.begin();
|
||||
|
||||
if (_bytes.size() != ContractABIUtils::encodingSize(_parameters))
|
||||
parameters = ContractABIUtils::defaultParameters(ceil(_bytes.size() / 32));
|
||||
parameters = ContractABIUtils::defaultParameters((_bytes.size() + 31) / 32);
|
||||
else
|
||||
parameters = _parameters;
|
||||
|
||||
|
||||
@@ -20,6 +20,9 @@
|
||||
|
||||
#include <test/libsolidity/util/SoltestErrors.h>
|
||||
|
||||
#include <libsolutil/FunctionSelector.h>
|
||||
#include <libsolutil/CommonData.h>
|
||||
|
||||
#include <liblangutil/Common.h>
|
||||
|
||||
#include <boost/algorithm/string.hpp>
|
||||
@@ -314,23 +317,34 @@ solidity::frontend::test::ParameterList ContractABIUtils::defaultParameters(size
|
||||
return parameters;
|
||||
}
|
||||
|
||||
solidity::frontend::test::ParameterList ContractABIUtils::failureParameters(bytes const _bytes)
|
||||
solidity::frontend::test::ParameterList ContractABIUtils::failureParameters(bytes const& _bytes)
|
||||
{
|
||||
ParameterList parameters;
|
||||
|
||||
parameters.push_back(Parameter{bytes(), "", ABIType{ABIType::HexString, ABIType::AlignNone, 4}, FormatInfo{}});
|
||||
if (_bytes.size() > 4)
|
||||
if (_bytes.empty())
|
||||
return {};
|
||||
else if (_bytes.size() < 4)
|
||||
return {Parameter{bytes(), "", ABIType{ABIType::HexString, ABIType::AlignNone, _bytes.size()}, FormatInfo{}}};
|
||||
else
|
||||
{
|
||||
parameters.push_back(Parameter{bytes(), "", ABIType{ABIType::Hex}, FormatInfo{}});
|
||||
parameters.push_back(Parameter{bytes(), "", ABIType{ABIType::UnsignedDec}, FormatInfo{}});
|
||||
ParameterList parameters;
|
||||
parameters.push_back(Parameter{bytes(), "", ABIType{ABIType::HexString, ABIType::AlignNone, 4}, FormatInfo{}});
|
||||
|
||||
uint64_t selector = fromBigEndian<uint64_t>(bytes{_bytes.begin(), _bytes.begin() + 4});
|
||||
if (selector == selectorFromSignature32("Panic(uint256)"))
|
||||
parameters.push_back(Parameter{bytes(), "", ABIType{ABIType::Hex}, FormatInfo{}});
|
||||
else if (selector == selectorFromSignature32("Error(string)"))
|
||||
{
|
||||
parameters.push_back(Parameter{bytes(), "", ABIType{ABIType::Hex}, FormatInfo{}});
|
||||
parameters.push_back(Parameter{bytes(), "", ABIType{ABIType::UnsignedDec}, FormatInfo{}});
|
||||
/// If _bytes contains at least a 1 byte message (function selector + tail pointer + message length + message)
|
||||
/// append an additional string parameter to represent that message.
|
||||
if (_bytes.size() > 68)
|
||||
parameters.push_back(Parameter{bytes(), "", ABIType{ABIType::String}, FormatInfo{}});
|
||||
}
|
||||
else
|
||||
for (size_t i = 4; i < _bytes.size(); i += 32)
|
||||
parameters.push_back(Parameter{bytes(), "", ABIType{ABIType::HexString, ABIType::AlignNone, 32}, FormatInfo{}});
|
||||
return parameters;
|
||||
}
|
||||
|
||||
/// If _bytes contains at least a 1 byte message (function selector + tail pointer + message length + message)
|
||||
/// append an additional string parameter to represent that message.
|
||||
if (_bytes.size() > 68)
|
||||
parameters.push_back(Parameter{bytes(), "", ABIType{ABIType::String}, FormatInfo{}});
|
||||
|
||||
return parameters;
|
||||
}
|
||||
|
||||
size_t ContractABIUtils::encodingSize(
|
||||
|
||||
@@ -65,7 +65,7 @@ public:
|
||||
/// returned values in case of a failure. Creates an additional parameter
|
||||
/// for the error message if _bytes is larger than 68 bytes
|
||||
/// (function_selector + tail_ptr + message_length).
|
||||
static ParameterList failureParameters(bytes const _bytes);
|
||||
static ParameterList failureParameters(bytes const& _bytes);
|
||||
|
||||
/// Returns _count parameters with their type set to ABIType::UnsignedDec
|
||||
/// and their size set to 32 bytes.
|
||||
|
||||
@@ -159,7 +159,7 @@ string TestFunctionCall::format(
|
||||
BytesUtils::formatRawBytes(output, abiParams.value(), _linePrefix) :
|
||||
BytesUtils::formatRawBytes(
|
||||
output,
|
||||
ContractABIUtils::defaultParameters(ceil(output.size() / 32)),
|
||||
ContractABIUtils::defaultParameters((output.size() + 31) / 32),
|
||||
_linePrefix
|
||||
);
|
||||
|
||||
@@ -248,7 +248,7 @@ string TestFunctionCall::formatBytesParameters(
|
||||
}
|
||||
else
|
||||
{
|
||||
ParameterList defaultParameters = ContractABIUtils::defaultParameters(ceil(_bytes.size() / 32));
|
||||
ParameterList defaultParameters = ContractABIUtils::defaultParameters((_bytes.size() + 31) / 32);
|
||||
|
||||
ContractABIUtils::overwriteParameters(_errorReporter, defaultParameters, _parameters);
|
||||
os << BytesUtils::formatBytesRange(_bytes, defaultParameters, _highlight);
|
||||
|
||||
Reference in New Issue
Block a user