mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #4379 from ethereum/constructorArgsTwice
Disallow constructor arguments given multiple times.
This commit is contained in:
@@ -2783,24 +2783,6 @@ BOOST_AUTO_TEST_CASE(virtual_function_usage_in_constructor_arguments)
|
||||
ABI_CHECK(callContractFunction("getA()"), encodeArgs(2));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(constructor_argument_overriding)
|
||||
{
|
||||
char const* sourceCode = R"(
|
||||
contract BaseBase {
|
||||
uint m_a;
|
||||
constructor(uint a) {
|
||||
m_a = a;
|
||||
}
|
||||
}
|
||||
contract Base is BaseBase(2) { }
|
||||
contract Derived is BaseBase(3), Base {
|
||||
function getA() returns (uint r) { return m_a; }
|
||||
}
|
||||
)";
|
||||
compileAndRun(sourceCode, 0, "Derived");
|
||||
ABI_CHECK(callContractFunction("getA()"), encodeArgs(3));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(internal_constructor)
|
||||
{
|
||||
char const* sourceCode = R"(
|
||||
@@ -5521,10 +5503,10 @@ BOOST_AUTO_TEST_CASE(pass_dynamic_arguments_to_the_base_base)
|
||||
uint public m_i;
|
||||
}
|
||||
contract Base1 is Base {
|
||||
constructor(uint k) Base(k*k) {}
|
||||
constructor(uint k) Base(k) {}
|
||||
}
|
||||
contract Derived is Base, Base1 {
|
||||
constructor(uint i) Base(i) Base1(i)
|
||||
constructor(uint i) Base1(i)
|
||||
{}
|
||||
}
|
||||
contract Final is Derived(4) {
|
||||
@@ -5544,9 +5526,11 @@ BOOST_AUTO_TEST_CASE(pass_dynamic_arguments_to_the_base_base_with_gap)
|
||||
}
|
||||
uint public m_i;
|
||||
}
|
||||
contract Base1 is Base(3) {}
|
||||
contract Base1 is Base {
|
||||
constructor(uint k) {}
|
||||
}
|
||||
contract Derived is Base, Base1 {
|
||||
constructor(uint i) Base(i) {}
|
||||
constructor(uint i) Base(i) Base1(7) {}
|
||||
}
|
||||
contract Final is Derived(4) {
|
||||
}
|
||||
|
||||
@@ -6,4 +6,4 @@ contract Derived is Base, Base1 {
|
||||
constructor(uint i) Base(i) public {}
|
||||
}
|
||||
// ----
|
||||
// Warning: (138-145): Base constructor arguments given twice.
|
||||
// DeclarationError: (138-145): Base constructor arguments given twice.
|
||||
|
||||
@@ -2,4 +2,4 @@ contract A { constructor(uint) public { } }
|
||||
contract B is A(2) { constructor() public { } }
|
||||
contract C is B { constructor() A(3) public { } }
|
||||
// ----
|
||||
// Warning: (125-129): Base constructor arguments given twice.
|
||||
// DeclarationError: (125-129): Base constructor arguments given twice.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
contract A { constructor(uint) public { } }
|
||||
contract B is A(2) { constructor() A(3) public { } }
|
||||
// ----
|
||||
// Warning: (79-83): Base constructor arguments given twice.
|
||||
// DeclarationError: (79-83): Base constructor arguments given twice.
|
||||
|
||||
@@ -3,5 +3,5 @@ contract A is C(2) {}
|
||||
contract B is C(2) {}
|
||||
contract D is A, B { constructor() C(3) public {} }
|
||||
// ----
|
||||
// Warning: (122-126): Base constructor arguments given twice.
|
||||
// Warning: (122-126): Base constructor arguments given twice.
|
||||
// DeclarationError: (122-126): Base constructor arguments given twice.
|
||||
// DeclarationError: (122-126): Base constructor arguments given twice.
|
||||
|
||||
+1
-1
@@ -3,4 +3,4 @@ contract A is C(2) {}
|
||||
contract B is C(2) {}
|
||||
contract D is A, B {}
|
||||
// ----
|
||||
// Warning: (87-108): Base constructor arguments given twice.
|
||||
// DeclarationError: (87-108): Base constructor arguments given twice.
|
||||
|
||||
+1
-1
@@ -3,4 +3,4 @@ contract A is C { constructor() C(2) public {} }
|
||||
contract B is C { constructor() C(2) public {} }
|
||||
contract D is A, B { }
|
||||
// ----
|
||||
// Warning: (141-163): Base constructor arguments given twice.
|
||||
// DeclarationError: (141-163): Base constructor arguments given twice.
|
||||
|
||||
@@ -3,5 +3,5 @@ contract B is C {
|
||||
constructor() C(2) C(2) public {}
|
||||
}
|
||||
// ----
|
||||
// Warning: (81-85): Base constructor arguments given twice.
|
||||
// DeclarationError: (81-85): Base constructor arguments given twice.
|
||||
// DeclarationError: (86-90): Base constructor already provided.
|
||||
|
||||
Reference in New Issue
Block a user