fix: some analysis stage problems

This commit is contained in:
samsonium
2026-10-27 14:12:09 +03:00
parent 411d291a2c
commit c61322718d
10 changed files with 69 additions and 18 deletions
+8 -7
View File
@@ -106,9 +106,9 @@ fzl_an_res_t analyze_call(fzl_analyzer_t *analyzer, fzl_node_t *call_node)
.error = false, .type = FZL_TYPE_NULL, .classname = NULL};
}
fzl_an_res_t callee_res = analyze_common(analyzer, callee);
if (callee_res.error)
return (fzl_an_res_t){.error = true};
// fzl_an_res_t callee_res = analyze_common(analyzer, callee);
// if (callee_res.error)
// return (fzl_an_res_t){.error = true};
fzl_sym_t sym;
bool sym_found = false;
@@ -148,11 +148,12 @@ fzl_an_res_t analyze_call(fzl_analyzer_t *analyzer, fzl_node_t *call_node)
return (fzl_an_res_t){.error = true};
}
if (sym.node->fn.args_count != call_node->call.args_count)
size_t start_i = is_method ? 1 : 0;
if ((sym.node->fn.args_count - start_i) != call_node->call.args_count)
{
snprintf(call_problem, sizeof(call_problem),
"expected %zu argument(s) while %zu is specified",
sym.node->fn.args_count, call_node->call.args_count);
sym.node->fn.args_count, call_node->call.args_count - start_i);
an_push_error(analyzer, call_node->token, call_problem);
if (tmp_method_name != NULL)
@@ -164,7 +165,6 @@ fzl_an_res_t analyze_call(fzl_analyzer_t *analyzer, fzl_node_t *call_node)
return (fzl_an_res_t){.error = true};
}
size_t start_i = is_method ? 1 : 0;
for (size_t i = start_i; i < sym.node->fn.args_count; i++)
{
fzl_node_t *arg = sym.node->fn.args[i];
@@ -173,7 +173,8 @@ fzl_an_res_t analyze_call(fzl_analyzer_t *analyzer, fzl_node_t *call_node)
if (req_type == FZL_TYPE_OBJECT)
req_classname = arg->var.type->value;
fzl_an_res_t got = analyze_common(analyzer, call_node->call.args[i]);
fzl_an_res_t got =
analyze_common(analyzer, call_node->call.args[i - start_i]);
if (got.error)
{
if (tmp_method_name != NULL)