Defaults to external visibility for interfaces.

This commit is contained in:
bitshift 2018-03-09 17:38:17 +01:00 committed by Erik Kundt
parent 3bb54e8bd5
commit 8fe1cfb12e
4 changed files with 24 additions and 12 deletions

View File

@ -50,6 +50,14 @@ void StaticAnalyzer::endVisit(ContractDefinition const&)
bool StaticAnalyzer::visit(FunctionDefinition const& _function)
{
const bool isInterface = m_currentContract->contractKind() == ContractDefinition::ContractKind::Interface;
if (_function.noVisibilitySpecified())
m_errorReporter.warning(
_function.location(),
"No visibility specified. Defaulting to \"" +
(isInterface ? "external" : Declaration::visibilityToString(_function.visibility())) +
"\"."
);
if (_function.isImplemented())
m_currentFunction = &_function;
else

View File

@ -214,18 +214,9 @@ bool SyntaxChecker::visit(FunctionDefinition const& _function)
{
bool const v050 = m_sourceUnit->annotation().experimentalFeatures.count(ExperimentalFeature::V050);
if (_function.noVisibilitySpecified())
{
if (v050)
m_errorReporter.syntaxError(_function.location(), "No visibility specified.");
else
m_errorReporter.warning(
_function.location(),
"No visibility specified. Defaulting to \"" +
Declaration::visibilityToString(_function.visibility()) +
"\"."
);
}
if (v050 && _function.noVisibilitySpecified())
m_errorReporter.syntaxError(_function.location(), "No visibility specified.");
return true;
}

View File

@ -0,0 +1,6 @@
interface I {
function f();
}
// ----
// Warning: Functions in interfaces should be declared external.
// Warning: No visibility specified. Defaulting to "external".

View File

@ -0,0 +1,7 @@
pragma experimental "v0.5.0";
interface I {
function f();
}
// ----
// SyntaxError: No visibility specified.
// TypeError: Functions in interfaces must be declared external.