dont complain about argument number of unknown functions
This commit is contained in:
parent
2d4f4c5bd5
commit
f4ed3e2754
|
@ -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)) {
|
||||||
|
|
Loading…
Reference in a new issue