mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Disallow constructor arguments given multiple times.
This commit is contained in:
parent
e289c36158
commit
f69e24c85e
@ -27,6 +27,7 @@ Breaking Changes:
|
|||||||
* Parser: Disallow trailing dots that are not followed by a number.
|
* Parser: Disallow trailing dots that are not followed by a number.
|
||||||
* Type Checker: Disallow arithmetic operations for boolean variables.
|
* Type Checker: Disallow arithmetic operations for boolean variables.
|
||||||
* Type Checker: Disallow conversions between ``bytesX`` and ``uintY`` of different size.
|
* Type Checker: Disallow conversions between ``bytesX`` and ``uintY`` of different size.
|
||||||
|
* Type Checker: Disallow specifying base constructor arguments multiple times in the same inheritance hierarchy. This was already the case in the experimental 0.5.0 mode.
|
||||||
* Type Checker: Only accept a single ``bytes`` type for ``.call()`` (and family), ``keccak256()``, ``sha256()`` and ``ripemd160()``.
|
* Type Checker: Only accept a single ``bytes`` type for ``.call()`` (and family), ``keccak256()``, ``sha256()`` and ``ripemd160()``.
|
||||||
* Remove obsolete ``std`` directory from the Solidity repository. This means accessing ``https://github.com/ethereum/soldity/blob/develop/std/*.sol`` (or ``https://github.com/ethereum/solidity/std/*.sol`` in Remix) will not be possible.
|
* Remove obsolete ``std`` directory from the Solidity repository. This means accessing ``https://github.com/ethereum/soldity/blob/develop/std/*.sol`` (or ``https://github.com/ethereum/solidity/std/*.sol`` in Remix) will not be possible.
|
||||||
* Syntax Checker: Named return values in function types are an error.
|
* Syntax Checker: Named return values in function types are an error.
|
||||||
|
@ -335,8 +335,6 @@ void TypeChecker::annotateBaseConstructorArguments(
|
|||||||
ASTNode const* _argumentNode
|
ASTNode const* _argumentNode
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
bool const v050 = _currentContract.sourceUnit().annotation().experimentalFeatures.count(ExperimentalFeature::V050);
|
|
||||||
|
|
||||||
solAssert(_baseConstructor, "");
|
solAssert(_baseConstructor, "");
|
||||||
solAssert(_argumentNode, "");
|
solAssert(_argumentNode, "");
|
||||||
|
|
||||||
@ -365,18 +363,11 @@ void TypeChecker::annotateBaseConstructorArguments(
|
|||||||
ssl.append("Second constructor call is here: ", previousNode->location());
|
ssl.append("Second constructor call is here: ", previousNode->location());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (v050)
|
|
||||||
m_errorReporter.declarationError(
|
m_errorReporter.declarationError(
|
||||||
*mainLocation,
|
*mainLocation,
|
||||||
ssl,
|
ssl,
|
||||||
"Base constructor arguments given twice."
|
"Base constructor arguments given twice."
|
||||||
);
|
);
|
||||||
else
|
|
||||||
m_errorReporter.warning(
|
|
||||||
*mainLocation,
|
|
||||||
"Base constructor arguments given twice.",
|
|
||||||
ssl
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -6,4 +6,4 @@ contract Derived is Base, Base1 {
|
|||||||
constructor(uint i) Base(i) public {}
|
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 B is A(2) { constructor() public { } }
|
||||||
contract C is B { constructor() A(3) 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 A { constructor(uint) public { } }
|
||||||
contract B is A(2) { constructor() A(3) 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 B is C(2) {}
|
||||||
contract D is A, B { constructor() C(3) public {} }
|
contract D is A, B { constructor() C(3) public {} }
|
||||||
// ----
|
// ----
|
||||||
// Warning: (122-126): Base constructor arguments given twice.
|
// DeclarationError: (122-126): Base constructor arguments given twice.
|
||||||
// Warning: (122-126): Base constructor arguments given twice.
|
// DeclarationError: (122-126): Base constructor arguments given twice.
|
||||||
|
@ -3,4 +3,4 @@ contract A is C(2) {}
|
|||||||
contract B is C(2) {}
|
contract B is C(2) {}
|
||||||
contract D is A, B {}
|
contract D is A, B {}
|
||||||
// ----
|
// ----
|
||||||
// Warning: (87-108): Base constructor arguments given twice.
|
// DeclarationError: (87-108): Base constructor arguments given twice.
|
||||||
|
@ -3,4 +3,4 @@ contract A is C { constructor() C(2) public {} }
|
|||||||
contract B is C { constructor() C(2) public {} }
|
contract B is C { constructor() C(2) public {} }
|
||||||
contract D is A, B { }
|
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 {}
|
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.
|
// DeclarationError: (86-90): Base constructor already provided.
|
||||||
|
Loading…
Reference in New Issue
Block a user