Disallow constructor in interfaces

This commit is contained in:
Alex Beregszaszi 2017-03-17 16:37:02 +00:00
parent 2c4bce2d62
commit d5102c1db7
3 changed files with 5 additions and 1 deletions

View File

@ -931,6 +931,7 @@ Interfaces
Interfaces are similar to abstract contracts, but they cannot have any functions implemented. There are further restrictions:
#. Cannot inherit other contracts or interfaces.
#. Cannot define constructor.
#. Cannot define variables.
#. Cannot define structs.
#. Cannot define enums.

View File

@ -463,6 +463,9 @@ bool TypeChecker::visit(FunctionDefinition const& _function)
typeError(_function.location(), "Functions in interfaces cannot have an implementation.");
_function.body().accept(*this);
}
if (_function.isConstructor())
if (m_scope->contractKind() == ContractDefinition::ContractKind::Interface)
typeError(_function.location(), "Constructor cannot be defined in interfaces.");
return false;
}

View File

@ -5343,7 +5343,7 @@ BOOST_AUTO_TEST_CASE(interface_constructor)
function I();
}
)";
success(text);
CHECK_ERROR(text, TypeError, "Constructor cannot be defined in interfaces");
}
BOOST_AUTO_TEST_CASE(interface_functions)