Improve error message for wrong struct initialization (#3359)

This commit is contained in:
Federico Bond 2018-01-04 07:24:39 -03:00 committed by chriseth
parent fdbe78a769
commit a0771691ff
3 changed files with 20 additions and 1 deletions

View File

@ -9,6 +9,7 @@ Bugfixes:
* Standard JSON: Populate the ``sourceLocation`` field in the error list.
* Type Checker: Suggest the experimental ABI encoder if using ``struct``s as function parameters
(instead of an internal compiler error).
* Type Checker: Improve error message for wrong struct initialization.
### 0.4.19 (2017-11-30)

View File

@ -1551,8 +1551,12 @@ bool TypeChecker::visit(FunctionCall const& _functionCall)
if (!functionType->takesArbitraryParameters() && parameterTypes.size() != arguments.size())
{
bool isStructConstructorCall = _functionCall.annotation().kind == FunctionCallKind::StructConstructorCall;
string msg =
"Wrong argument count for function call: " +
"Wrong argument count for " +
string(isStructConstructorCall ? "struct constructor" : "function call") +
": " +
toString(arguments.size()) +
" arguments given but expected " +
toString(parameterTypes.size()) +

View File

@ -3608,6 +3608,20 @@ BOOST_AUTO_TEST_CASE(invalid_args_creating_memory_array)
CHECK_ERROR(text, TypeError, "Wrong argument count for function call: 0 arguments given but expected 1.");
}
BOOST_AUTO_TEST_CASE(invalid_args_creating_struct)
{
char const* text = R"(
contract C {
struct S { uint a; uint b; }
function f() public {
var s = S({a: 1});
}
}
)";
CHECK_ERROR(text, TypeError, "Wrong argument count for struct constructor: 1 arguments given but expected 2.");
}
BOOST_AUTO_TEST_CASE(function_overload_array_type)
{
char const* text = R"(