mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Improved error message for lookup in function types.
This commit is contained in:
parent
dd4acda73a
commit
ef25454a04
@ -99,6 +99,7 @@ Compiler Features:
|
||||
* Tests: Determine transaction status during IPC calls.
|
||||
* Code Generator: Allocate and free local variables according to their scope.
|
||||
* Removed ``pragma experimental "v0.5.0";``.
|
||||
* Syntax Checker: Improved error message for lookup in function types.
|
||||
|
||||
Bugfixes:
|
||||
* Build System: Support versions of CVC4 linked against CLN instead of GMP. In case of compilation issues due to the experimental SMT solver support, the solvers can be disabled when configuring the project with CMake using ``-DUSE_CVC4=OFF`` or ``-DUSE_Z3=OFF``.
|
||||
|
@ -2141,8 +2141,25 @@ bool TypeChecker::visit(MemberAccess const& _memberAccess)
|
||||
);
|
||||
}
|
||||
string errorMsg = "Member \"" + memberName + "\" not found or not visible "
|
||||
"after argument-dependent lookup in " + exprType->toString() +
|
||||
(memberName == "value" ? " - did you forget the \"payable\" modifier?" : ".");
|
||||
"after argument-dependent lookup in " + exprType->toString() + ".";
|
||||
if (memberName == "value")
|
||||
{
|
||||
errorMsg.pop_back();
|
||||
errorMsg += " - did you forget the \"payable\" modifier?";
|
||||
}
|
||||
else if (exprType->category() == Type::Category::Function)
|
||||
{
|
||||
if (auto const& funType = dynamic_pointer_cast<FunctionType const>(exprType))
|
||||
{
|
||||
auto const& t = funType->returnParameterTypes();
|
||||
if (t.size() == 1)
|
||||
if (
|
||||
t.front()->category() == Type::Category::Contract ||
|
||||
t.front()->category() == Type::Category::Struct
|
||||
)
|
||||
errorMsg += " Did you intend to call the function?";
|
||||
}
|
||||
}
|
||||
if (exprType->category() == Type::Category::Contract)
|
||||
for (auto const& addressMember: AddressType::addressPayable().nativeMembers(nullptr))
|
||||
if (addressMember.name == memberName)
|
||||
|
@ -0,0 +1,19 @@
|
||||
contract A{
|
||||
function f() public pure{
|
||||
|
||||
}
|
||||
}
|
||||
contract B{
|
||||
A public a;
|
||||
}
|
||||
contract C{
|
||||
B public b;
|
||||
}
|
||||
contract D{
|
||||
C c;
|
||||
function f() public view{
|
||||
c.b.a.f();
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// TypeError: (170-175): Member "a" not found or not visible after argument-dependent lookup in function () view external returns (contract B). Did you intend to call the function?
|
@ -0,0 +1,17 @@
|
||||
contract A{
|
||||
function f() public pure{
|
||||
|
||||
}
|
||||
}
|
||||
contract B{
|
||||
A public a;
|
||||
}
|
||||
contract C{
|
||||
B b;
|
||||
function f() public view{
|
||||
b.a.f();
|
||||
}
|
||||
}
|
||||
|
||||
// ----
|
||||
// TypeError: (140-145): Member "f" not found or not visible after argument-dependent lookup in function () view external returns (contract A). Did you intend to call the function?
|
@ -0,0 +1,15 @@
|
||||
contract A{
|
||||
|
||||
}
|
||||
contract B{
|
||||
A public a;
|
||||
}
|
||||
contract C{
|
||||
B b;
|
||||
function f() public view{
|
||||
b.a.f();
|
||||
}
|
||||
}
|
||||
|
||||
// ----
|
||||
// TypeError: (104-109): Member "f" not found or not visible after argument-dependent lookup in function () view external returns (contract A). Did you intend to call the function?
|
@ -0,0 +1,17 @@
|
||||
contract A{
|
||||
function f() public pure{
|
||||
|
||||
}
|
||||
}
|
||||
contract B{
|
||||
A private a;
|
||||
}
|
||||
contract C{
|
||||
B b;
|
||||
function f() public view{
|
||||
b.a.f();
|
||||
}
|
||||
}
|
||||
|
||||
// ----
|
||||
// TypeError: (141-144): Member "a" not found or not visible after argument-dependent lookup in contract B.
|
@ -0,0 +1,17 @@
|
||||
contract A{
|
||||
function f() private pure{
|
||||
|
||||
}
|
||||
}
|
||||
contract B{
|
||||
A public a;
|
||||
}
|
||||
contract C{
|
||||
B b;
|
||||
function f() public view{
|
||||
b.a.f();
|
||||
}
|
||||
}
|
||||
|
||||
// ----
|
||||
// TypeError: (141-146): Member "f" not found or not visible after argument-dependent lookup in function () view external returns (contract A). Did you intend to call the function?
|
Loading…
Reference in New Issue
Block a user