mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Suggests external for fallback and interface functions.
This commit is contained in:
parent
75bba5c9f0
commit
dfd2fee91d
@ -197,12 +197,24 @@ bool SyntaxChecker::visit(PlaceholderStatement const&)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SyntaxChecker::visit(ContractDefinition const& _contract)
|
||||||
|
{
|
||||||
|
m_isInterface = _contract.contractKind() == ContractDefinition::ContractKind::Interface;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool SyntaxChecker::visit(FunctionDefinition const& _function)
|
bool SyntaxChecker::visit(FunctionDefinition const& _function)
|
||||||
{
|
{
|
||||||
bool const v050 = m_sourceUnit->annotation().experimentalFeatures.count(ExperimentalFeature::V050);
|
bool const v050 = m_sourceUnit->annotation().experimentalFeatures.count(ExperimentalFeature::V050);
|
||||||
|
|
||||||
if (_function.noVisibilitySpecified())
|
if (_function.noVisibilitySpecified())
|
||||||
m_errorReporter.syntaxError(_function.location(), "No visibility specified.");
|
{
|
||||||
|
string suggestedVisibility = _function.isFallback() || m_isInterface ? "external" : "public";
|
||||||
|
m_errorReporter.syntaxError(
|
||||||
|
_function.location(),
|
||||||
|
"No visibility specified. Did you intend to add \"" + suggestedVisibility + "\"?"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if (_function.isOldStyleConstructor())
|
if (_function.isOldStyleConstructor())
|
||||||
{
|
{
|
||||||
|
@ -66,6 +66,7 @@ private:
|
|||||||
|
|
||||||
virtual bool visit(PlaceholderStatement const& _placeholderStatement) override;
|
virtual bool visit(PlaceholderStatement const& _placeholderStatement) override;
|
||||||
|
|
||||||
|
virtual bool visit(ContractDefinition const& _contract) override;
|
||||||
virtual bool visit(FunctionDefinition const& _function) override;
|
virtual bool visit(FunctionDefinition const& _function) override;
|
||||||
virtual bool visit(FunctionTypeName const& _node) override;
|
virtual bool visit(FunctionTypeName const& _node) override;
|
||||||
|
|
||||||
@ -82,6 +83,7 @@ private:
|
|||||||
bool m_versionPragmaFound = false;
|
bool m_versionPragmaFound = false;
|
||||||
|
|
||||||
int m_inLoopDepth = 0;
|
int m_inLoopDepth = 0;
|
||||||
|
bool m_isInterface = false;
|
||||||
|
|
||||||
SourceUnit const* m_sourceUnit = nullptr;
|
SourceUnit const* m_sourceUnit = nullptr;
|
||||||
};
|
};
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
contract A { constructor() {} }
|
contract A { constructor() {} }
|
||||||
// ----
|
// ----
|
||||||
// SyntaxError: (13-29): No visibility specified.
|
// SyntaxError: (13-29): No visibility specified. Did you intend to add "public"?
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
pragma experimental "v0.5.0";
|
pragma experimental "v0.5.0";
|
||||||
contract A { constructor() {} }
|
contract A { constructor() {} }
|
||||||
// ----
|
// ----
|
||||||
// SyntaxError: (43-59): No visibility specified.
|
// SyntaxError: (43-59): No visibility specified. Did you intend to add "public"?
|
||||||
|
@ -3,5 +3,5 @@ contract C {
|
|||||||
function() {}
|
function() {}
|
||||||
}
|
}
|
||||||
// ----
|
// ----
|
||||||
// SyntaxError: (90-103): No visibility specified.
|
// SyntaxError: (90-103): No visibility specified. Did you intend to add "external"?
|
||||||
// TypeError: (90-103): Fallback function must be defined as "external".
|
// TypeError: (90-103): Fallback function must be defined as "external".
|
||||||
|
@ -3,4 +3,4 @@ contract C {
|
|||||||
function f() pure { }
|
function f() pure { }
|
||||||
}
|
}
|
||||||
// ----
|
// ----
|
||||||
// SyntaxError: (47-68): No visibility specified.
|
// SyntaxError: (47-68): No visibility specified. Did you intend to add "public"?
|
||||||
|
@ -2,4 +2,4 @@ contract C {
|
|||||||
function f() pure { }
|
function f() pure { }
|
||||||
}
|
}
|
||||||
// ----
|
// ----
|
||||||
// SyntaxError: (17-38): No visibility specified.
|
// SyntaxError: (17-38): No visibility specified. Did you intend to add "public"?
|
||||||
|
@ -2,5 +2,5 @@ interface I {
|
|||||||
function f();
|
function f();
|
||||||
}
|
}
|
||||||
// ----
|
// ----
|
||||||
// SyntaxError: (15-28): No visibility specified. Did you intend to add "public"?
|
// SyntaxError: (15-28): No visibility specified. Did you intend to add "external"?
|
||||||
// TypeError: (15-28): Functions in interfaces must be declared external.
|
// TypeError: (15-28): Functions in interfaces must be declared external.
|
||||||
|
@ -0,0 +1,10 @@
|
|||||||
|
interface I {
|
||||||
|
function f();
|
||||||
|
}
|
||||||
|
contract C {
|
||||||
|
function g();
|
||||||
|
}
|
||||||
|
// ----
|
||||||
|
// SyntaxError: (18-31): No visibility specified. Did you intend to add "external"?
|
||||||
|
// SyntaxError: (51-64): No visibility specified. Did you intend to add "public"?
|
||||||
|
// TypeError: (18-31): Functions in interfaces must be declared external.
|
Loading…
Reference in New Issue
Block a user