diff options
-rw-r--r-- | libsolidity/analysis/TypeChecker.cpp | 21 | ||||
-rw-r--r-- | test/libsolidity/SolidityNameAndTypeResolution.cpp | 8 |
2 files changed, 14 insertions, 15 deletions
diff --git a/libsolidity/analysis/TypeChecker.cpp b/libsolidity/analysis/TypeChecker.cpp index 0c457039..0764bf67 100644 --- a/libsolidity/analysis/TypeChecker.cpp +++ b/libsolidity/analysis/TypeChecker.cpp @@ -318,17 +318,16 @@ void TypeChecker::checkFunctionOverride(FunctionDefinition const& function, Func if (function.visibility() != super.visibility()) overrideError(function, super, "Overriding function visibility differs."); - else if (function.isDeclaredConst() && !super.isDeclaredConst()) - overrideError(function, super, "Overriding function should not be declared constant."); - - else if (!function.isDeclaredConst() && super.isDeclaredConst()) - overrideError(function, super, "Overriding function should be declared constant."); - - else if (function.isPayable() && !super.isPayable()) - overrideError(function, super, "Overriding function should not be declared payable."); - - else if (!function.isPayable() && super.isPayable()) - overrideError(function, super, "Overriding function should be declared payable."); + else if (function.stateMutability() != super.stateMutability()) + overrideError( + function, + super, + "Overriding function changes state mutability from \"" + + stateMutabilityToString(super.stateMutability()) + + "\" to \"" + + stateMutabilityToString(function.stateMutability()) + + "\"." + ); else if (functionType != superType) overrideError(function, super, "Overriding function return types differ."); diff --git a/test/libsolidity/SolidityNameAndTypeResolution.cpp b/test/libsolidity/SolidityNameAndTypeResolution.cpp index fc4c795e..fb2686fc 100644 --- a/test/libsolidity/SolidityNameAndTypeResolution.cpp +++ b/test/libsolidity/SolidityNameAndTypeResolution.cpp @@ -933,7 +933,7 @@ BOOST_AUTO_TEST_CASE(illegal_override_remove_constness) contract B { function f() constant {} } contract C is B { function f() {} } )"; - CHECK_ERROR(text, TypeError, "Overriding function should be declared constant."); + CHECK_ERROR(text, TypeError, "Overriding function changes state mutability from \"view\" to \"nonpayable\"."); } BOOST_AUTO_TEST_CASE(illegal_override_add_constness) @@ -942,7 +942,7 @@ BOOST_AUTO_TEST_CASE(illegal_override_add_constness) contract B { function f() {} } contract C is B { function f() constant {} } )"; - CHECK_ERROR(text, TypeError, "Overriding function should not be declared constant."); + CHECK_ERROR(text, TypeError, "Overriding function changes state mutability from \"nonpayable\" to \"view\"."); } BOOST_AUTO_TEST_CASE(complex_inheritance) @@ -4779,7 +4779,7 @@ BOOST_AUTO_TEST_CASE(illegal_override_payable) contract B { function f() payable {} } contract C is B { function f() {} } )"; - CHECK_ERROR(text, TypeError, "Overriding function should be declared payable."); + CHECK_ERROR(text, TypeError, "Overriding function changes state mutability from \"payable\" to \"nonpayable\"."); } BOOST_AUTO_TEST_CASE(illegal_override_payable_nonpayable) @@ -4788,7 +4788,7 @@ BOOST_AUTO_TEST_CASE(illegal_override_payable_nonpayable) contract B { function f() {} } contract C is B { function f() payable {} } )"; - CHECK_ERROR(text, TypeError, "Overriding function should not be declared payable."); + CHECK_ERROR(text, TypeError, "Overriding function changes state mutability from \"nonpayable\" to \"payable\"."); } BOOST_AUTO_TEST_CASE(function_variable_mixin) |