Bound functions.

This commit is contained in:
chriseth
2020-11-23 18:58:23 +01:00
parent b62de4f16d
commit f87edb6efc
11 changed files with 96 additions and 24 deletions
@@ -14,6 +14,7 @@ contract C {
}
}
// ====
// compileViaYul: also
// EVMVersion: >homestead
// ----
// library: D
@@ -14,6 +14,7 @@ contract C {
}
}
// ====
// compileViaYul: also
// EVMVersion: >homestead
// ----
// library: D
@@ -0,0 +1,27 @@
library L {
struct S {
uint256[] data;
}
function f(S memory _s) internal {
_s.data[3] += 2;
}
}
contract C {
using L for L.S;
function f() public returns (uint256) {
L.S memory x;
x.data = new uint256[](7);
x.data[3] = 8;
(x.f)();
return x.data[3];
}
}
// ====
// compileViaYul: also
// ----
// f() -> 0x0a
@@ -0,0 +1,22 @@
library L {
function f(string memory a) internal pure returns (string memory) {
return a;
}
function g(string storage a) internal pure returns (string memory) {
return a;
}
}
contract C {
using L for string;
string s;
function test(string calldata x) public returns (string memory, string memory) {
s = x;
return (s.f(), s.g());
}
}
// ====
// compileViaYul: also
// ----
// test(string): 0x20, 3, "def" -> 0x40, 0x80, 3, "def", 3, "def"