mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
[Sol2Yul] Adding support for constructors with parameters in case of inheritance
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
contract A {
|
||||
uint x = 42;
|
||||
function f() public returns(uint256) {
|
||||
return x;
|
||||
}
|
||||
}
|
||||
contract B is A {
|
||||
uint public y = f();
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: true
|
||||
// ----
|
||||
// constructor() ->
|
||||
// y() -> 42
|
||||
@@ -0,0 +1,17 @@
|
||||
contract A {
|
||||
uint x;
|
||||
constructor() public {
|
||||
x = 42;
|
||||
}
|
||||
function f() public returns(uint256) {
|
||||
return x;
|
||||
}
|
||||
}
|
||||
contract B is A {
|
||||
uint public y = f();
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: true
|
||||
// ----
|
||||
// constructor() ->
|
||||
// y() -> 42
|
||||
@@ -0,0 +1,28 @@
|
||||
contract A {
|
||||
uint public i;
|
||||
uint public k;
|
||||
|
||||
constructor(uint newI, uint newK) public {
|
||||
i = newI;
|
||||
k = newK;
|
||||
}
|
||||
}
|
||||
abstract contract B is A {
|
||||
uint public j;
|
||||
constructor(uint newJ) public {
|
||||
j = newJ;
|
||||
}
|
||||
}
|
||||
contract C is A {
|
||||
constructor(uint newI, uint newK) A(newI, newK) public {}
|
||||
}
|
||||
contract D is B, C {
|
||||
constructor(uint newI, uint newK) B(newI) C(newI, newK + 1) public {}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// constructor(): 2, 0 ->
|
||||
// i() -> 2
|
||||
// j() -> 2
|
||||
// k() -> 1
|
||||
@@ -0,0 +1,18 @@
|
||||
contract C {
|
||||
uint public i;
|
||||
uint public k;
|
||||
|
||||
constructor(uint newI, uint newK) public {
|
||||
i = newI;
|
||||
k = newK;
|
||||
}
|
||||
}
|
||||
contract D is C {
|
||||
constructor(uint newI, uint newK) C(newI, newK + 1) public {}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// constructor(): 2, 0 ->
|
||||
// i() -> 2
|
||||
// k() -> 1
|
||||
@@ -0,0 +1,15 @@
|
||||
contract C {
|
||||
uint public i;
|
||||
uint public k;
|
||||
|
||||
constructor(uint newI, uint newK) public {
|
||||
i = newI;
|
||||
k = newK;
|
||||
}
|
||||
}
|
||||
contract D is C(2, 1) {}
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// i() -> 2
|
||||
// k() -> 1
|
||||
@@ -0,0 +1,14 @@
|
||||
contract A {
|
||||
uint public x = 0;
|
||||
uint y = f();
|
||||
function f() public returns (uint256) {
|
||||
++x;
|
||||
return 42;
|
||||
}
|
||||
}
|
||||
contract B is A {
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// x() -> 1
|
||||
@@ -0,0 +1,18 @@
|
||||
contract A {
|
||||
uint public x = 0;
|
||||
uint y = f();
|
||||
function f() public returns (uint256) {
|
||||
++x;
|
||||
return 42;
|
||||
}
|
||||
}
|
||||
contract B is A {
|
||||
uint public z;
|
||||
constructor() public {
|
||||
z = x;
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// z() -> 1
|
||||
@@ -0,0 +1,29 @@
|
||||
contract A {
|
||||
uint public a = 42;
|
||||
uint public b;
|
||||
uint public c;
|
||||
constructor(uint x) public {
|
||||
b = a;
|
||||
a = x;
|
||||
}
|
||||
function f(uint x) public returns (uint256) { c = x * 3; return 23; }
|
||||
}
|
||||
contract B is A {
|
||||
uint public d = f(a);
|
||||
uint public e = b;
|
||||
uint public b_a;
|
||||
uint public b_b;
|
||||
uint public b_c;
|
||||
constructor() public A(17) { b_a = a; b_b = b; b_c = c; }
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: true
|
||||
// ----
|
||||
// a() -> 17
|
||||
// b() -> 42
|
||||
// c() -> 51
|
||||
// b_a() -> 17
|
||||
// b_b() -> 42
|
||||
// b_c() -> 51
|
||||
// d() -> 23
|
||||
// e() -> 42
|
||||
Reference in New Issue
Block a user