dont complain about argument number of unknown functions

This commit is contained in:
Thomas Lindner 2023-01-06 04:03:43 +01:00
parent 2d4f4c5bd5
commit f4ed3e2754

View file

@ -70,28 +70,29 @@ std::any TypeCheckVisitor::visitFactor(xlangParser::FactorContext *ctx) {
auto token = identifier->getSymbol(); auto token = identifier->getSymbol();
auto name = token->getText(); auto name = token->getText();
if (ctx->LeftParen()) { if (ctx->LeftParen()) {
if (function_arity.find(name) == function_arity.end()) { if (function_arity.find(name) != function_arity.end()) {
if (auto expr_list = ctx->exprList()) {
auto arity = function_arity[name];
auto arg_num = expr_list->expr().size();
if (arity != arg_num) {
errorlistener.typeError(
token->getLine(), token->getCharPositionInLine(),
"function '" + name + "' expects " + std::to_string(arity) +
" arguments, but got " + std::to_string(arg_num));
}
} else {
if (auto arity = function_arity[name]) {
errorlistener.typeError(
token->getLine(), token->getCharPositionInLine(),
"function '" + name + "' expects " + std::to_string(arity) +
" arguments, but got none");
}
}
} else {
errorlistener.typeError(token->getLine(), errorlistener.typeError(token->getLine(),
token->getCharPositionInLine(), token->getCharPositionInLine(),
"unknown function '" + name + "'"); "unknown function '" + name + "'");
} }
if (auto expr_list = ctx->exprList()) {
auto arity = function_arity[name];
auto arg_num = expr_list->expr().size();
if (arity != arg_num) {
errorlistener.typeError(
token->getLine(), token->getCharPositionInLine(),
"function '" + name + "' expects " + std::to_string(arity) +
" arguments, but got " + std::to_string(arg_num));
}
} else {
if (auto arity = function_arity[name]) {
errorlistener.typeError(
token->getLine(), token->getCharPositionInLine(),
"function '" + name + "' expects " + std::to_string(arity) +
" arguments, but got none");
}
}
visitChildren(ctx); visitChildren(ctx);
} else { } else {
if (!inScope(name)) { if (!inScope(name)) {