Better error message when trying to call things that are not functions

This commit is contained in:
Kamil Śliwak 2023-04-03 16:30:42 +02:00
parent 293690e5a4
commit a019f400d0
13 changed files with 46 additions and 8 deletions

View File

@ -2847,7 +2847,11 @@ bool TypeChecker::visit(FunctionCall const& _functionCall)
}
default:
m_errorReporter.fatalTypeError(5704_error, _functionCall.location(), "Type is not callable");
m_errorReporter.fatalTypeError(
5704_error,
_functionCall.location(),
capitalized(Type::categoryName(expressionType->category())) + " is not callable."
);
// Unreachable, because fatalTypeError throws. We don't set kind, but that's okay because the switch below
// is never reached. And, even if it was, SetOnce would trigger an assertion violation and not UB.
funcCallAnno.isPure = argumentsArePure;

View File

@ -0,0 +1,7 @@
enum E { A, B, C }
contract C {
uint a = E.B(1000);
}
// ----
// TypeError 5704: (46-55): Enum is not callable.

View File

@ -5,4 +5,4 @@ contract C
}
}
// ----
// TypeError 5704: (53-60): Type is not callable
// TypeError 5704: (53-60): Rational number literal is not callable.

View File

@ -0,0 +1,5 @@
contract C {
uint a = msg(1000);
}
// ----
// TypeError 5704: (26-35): Magic variable is not callable.

View File

@ -0,0 +1,6 @@
contract C {
mapping (uint => uint) m;
uint a = m(1000);
}
// ----
// TypeError 5704: (56-63): Mapping is not callable.

View File

@ -0,0 +1,7 @@
contract C {
uint a = m(1000);
modifier m(uint) { _; }
}
// ----
// TypeError 5704: (26-33): Modifier is not callable.

View File

@ -0,0 +1,9 @@
==== Source: A.sol ====
==== Source: B.sol ====
import "A.sol" as A;
contract C {
uint a = A(1000);
}
// ----
// TypeError 5704: (B.sol:48-55): Module is not callable.

View File

@ -6,4 +6,4 @@ contract C {
}
}
// ----
// TypeError 5704: (72-78): Type is not callable
// TypeError 5704: (72-78): Contract is not callable.

View File

@ -6,4 +6,4 @@ contract C {
}
}
// ----
// TypeError 5704: (90-108): Type is not callable
// TypeError 5704: (90-108): Rational number literal is not callable.

View File

@ -6,4 +6,4 @@ contract C {
}
}
// ----
// TypeError 5704: (153-157): Type is not callable
// TypeError 5704: (153-157): Mapping is not callable.

View File

@ -11,4 +11,4 @@ contract SomeContract {
}
// ----
// DeclarationError 2333: (106-145): Identifier already declared.
// TypeError 5704: (185-195): Type is not callable
// TypeError 5704: (185-195): Integer is not callable.

View File

@ -7,4 +7,4 @@ contract CrashContract {
}
}
// ----
// TypeError 5704: (170-177): Type is not callable
// TypeError 5704: (170-177): Rational number literal is not callable.

View File

@ -4,4 +4,4 @@ contract C {
}
}
// ----
// TypeError 5704: (59-63): Type is not callable
// TypeError 5704: (59-63): Rational number literal is not callable.