[Sol2Yul] Adding support for constructors with parameters in case of inheritance

This commit is contained in:
Djordje Mijovic
2020-04-22 14:47:08 +02:00
parent d0fcd468f6
commit 5329da93fb
22 changed files with 476 additions and 82 deletions
@@ -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