Defaults to external visibility for interfaces.

This commit is contained in:
bitshift authored and Erik Kundt committed 2018-04-03 11:16:44 +02:00
1 parent 3bb54e8bd5
commit 8fe1cfb12e
4 files changed
+24 -12

No files matched your search

+8
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
+3 -12
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;
}
@@ -0,0 +1,6 @@
interface I {
function f();
}
// ----
// Warning: Functions in interfaces should be declared external.
// Warning: No visibility specified. Defaulting to "external".
@@ -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.