From b8fdb666e235bb6b19f11dba7740227026111598 Mon Sep 17 00:00:00 2001 From: Daniel Kirchner Date: Wed, 4 Apr 2018 12:28:22 +0200 Subject: Allow duplicated constructor calls, if no arguments; support for multiple inheritance; backwards compatibility. # tmp --- .../allow_empty_duplicated_super_constructor_call.sol | 3 +++ .../inheritance/base_arguments_multiple_inheritance.sol | 9 +++++++++ .../inheritance/duplicated_ancestor_constructor_call.sol | 5 +++++ .../inheritance/duplicated_ancestor_constructor_call_V050.sol | 7 +++++++ .../inheritance/duplicated_super_constructor_call.sol | 2 +- .../inheritance/duplicated_super_constructor_call_V050.sol | 6 ++++++ .../inheritance/duplicated_super_constructor_call_empty.sol | 4 ---- .../inheritance/duplicated_super_constructor_call_multi.sol | 7 +++++++ 8 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 test/libsolidity/syntaxTests/inheritance/allow_empty_duplicated_super_constructor_call.sol create mode 100644 test/libsolidity/syntaxTests/inheritance/base_arguments_multiple_inheritance.sol create mode 100644 test/libsolidity/syntaxTests/inheritance/duplicated_ancestor_constructor_call.sol create mode 100644 test/libsolidity/syntaxTests/inheritance/duplicated_ancestor_constructor_call_V050.sol create mode 100644 test/libsolidity/syntaxTests/inheritance/duplicated_super_constructor_call_V050.sol delete mode 100644 test/libsolidity/syntaxTests/inheritance/duplicated_super_constructor_call_empty.sol create mode 100644 test/libsolidity/syntaxTests/inheritance/duplicated_super_constructor_call_multi.sol (limited to 'test/libsolidity/syntaxTests/inheritance') diff --git a/test/libsolidity/syntaxTests/inheritance/allow_empty_duplicated_super_constructor_call.sol b/test/libsolidity/syntaxTests/inheritance/allow_empty_duplicated_super_constructor_call.sol new file mode 100644 index 00000000..1f580b1d --- /dev/null +++ b/test/libsolidity/syntaxTests/inheritance/allow_empty_duplicated_super_constructor_call.sol @@ -0,0 +1,3 @@ +contract A { constructor() public { } } +contract B1 is A { constructor() A() public { } } +contract B2 is A { constructor() A public { } } diff --git a/test/libsolidity/syntaxTests/inheritance/base_arguments_multiple_inheritance.sol b/test/libsolidity/syntaxTests/inheritance/base_arguments_multiple_inheritance.sol new file mode 100644 index 00000000..f63d0f02 --- /dev/null +++ b/test/libsolidity/syntaxTests/inheritance/base_arguments_multiple_inheritance.sol @@ -0,0 +1,9 @@ +contract Base { + constructor(uint) public { } +} +contract Base1 is Base(3) {} +contract Derived is Base, Base1 { + constructor(uint i) Base(i) public {} +} +// ---- +// Warning: Duplicated super constructor calls are deprecated. diff --git a/test/libsolidity/syntaxTests/inheritance/duplicated_ancestor_constructor_call.sol b/test/libsolidity/syntaxTests/inheritance/duplicated_ancestor_constructor_call.sol new file mode 100644 index 00000000..97f3f8ff --- /dev/null +++ b/test/libsolidity/syntaxTests/inheritance/duplicated_ancestor_constructor_call.sol @@ -0,0 +1,5 @@ +contract A { constructor(uint) public { } } +contract B is A(2) { constructor() public { } } +contract C is B { constructor() A(3) public { } } +// ---- +// Warning: Duplicated super constructor calls are deprecated. diff --git a/test/libsolidity/syntaxTests/inheritance/duplicated_ancestor_constructor_call_V050.sol b/test/libsolidity/syntaxTests/inheritance/duplicated_ancestor_constructor_call_V050.sol new file mode 100644 index 00000000..933c9087 --- /dev/null +++ b/test/libsolidity/syntaxTests/inheritance/duplicated_ancestor_constructor_call_V050.sol @@ -0,0 +1,7 @@ +pragma experimental "v0.5.0"; + +contract A { constructor(uint) public { } } +contract B is A(2) { constructor() public { } } +contract C is B { constructor() A(3) public { } } +// ---- +// DeclarationError: Duplicated super constructor call. diff --git a/test/libsolidity/syntaxTests/inheritance/duplicated_super_constructor_call.sol b/test/libsolidity/syntaxTests/inheritance/duplicated_super_constructor_call.sol index 95df1040..876b07ea 100644 --- a/test/libsolidity/syntaxTests/inheritance/duplicated_super_constructor_call.sol +++ b/test/libsolidity/syntaxTests/inheritance/duplicated_super_constructor_call.sol @@ -1,4 +1,4 @@ contract A { constructor(uint) public { } } contract B is A(2) { constructor() A(3) public { } } // ---- -// DeclarationError: Duplicated super constructor call. +// Warning: Duplicated super constructor calls are deprecated. diff --git a/test/libsolidity/syntaxTests/inheritance/duplicated_super_constructor_call_V050.sol b/test/libsolidity/syntaxTests/inheritance/duplicated_super_constructor_call_V050.sol new file mode 100644 index 00000000..31a363fd --- /dev/null +++ b/test/libsolidity/syntaxTests/inheritance/duplicated_super_constructor_call_V050.sol @@ -0,0 +1,6 @@ +pragma experimental "v0.5.0"; + +contract A { constructor(uint) public { } } +contract B is A(2) { constructor() A(3) public { } } +// ---- +// DeclarationError: Duplicated super constructor call. diff --git a/test/libsolidity/syntaxTests/inheritance/duplicated_super_constructor_call_empty.sol b/test/libsolidity/syntaxTests/inheritance/duplicated_super_constructor_call_empty.sol deleted file mode 100644 index f8024ad6..00000000 --- a/test/libsolidity/syntaxTests/inheritance/duplicated_super_constructor_call_empty.sol +++ /dev/null @@ -1,4 +0,0 @@ -contract A { constructor() public { } } -contract B is A { constructor() A() public { } } -// ---- -// DeclarationError: Duplicated super constructor call. diff --git a/test/libsolidity/syntaxTests/inheritance/duplicated_super_constructor_call_multi.sol b/test/libsolidity/syntaxTests/inheritance/duplicated_super_constructor_call_multi.sol new file mode 100644 index 00000000..caed18eb --- /dev/null +++ b/test/libsolidity/syntaxTests/inheritance/duplicated_super_constructor_call_multi.sol @@ -0,0 +1,7 @@ +contract C { constructor(uint) public {} } +contract A is C(2) {} +contract B is C(2) {} +contract D is A, B { constructor() C(3) public {} } +// ---- +// Warning: Duplicated super constructor calls are deprecated. +// Warning: Duplicated super constructor calls are deprecated. -- cgit v1.2.3