From a68aaad307c87a579be982e6f03ba5909d4fc693 Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Sun, 10 Nov 2024 23:34:07 +0900 Subject: [PATCH] [qfcc] Clean up some arg/param confusion Only in expr_call.c, but that's probably where it's at its worst. --- tools/qfcc/source/expr_call.c | 42 ++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/tools/qfcc/source/expr_call.c b/tools/qfcc/source/expr_call.c index 74a3a691e..5022117e7 100644 --- a/tools/qfcc/source/expr_call.c +++ b/tools/qfcc/source/expr_call.c @@ -273,19 +273,19 @@ build_args (const expr_t *(*arg_exprs)[2], int *arg_expr_count, const expr_t * build_function_call (const expr_t *fexpr, const type_t *ftype, - const expr_t *params) + const expr_t *args) { int param_count = 0; expr_t *call; const expr_t *err = 0; - int arg_count = params ? list_count (¶ms->list) : 0; + int arg_count = args ? list_count (&args->list) : 0; const expr_t *arguments[arg_count + 1] = {}; const type_t *arg_types[arg_count + 1] = {}; - if (params) { - // params is reversed (a, b, c) -> c, b, a - list_scatter_rev (¶ms->list, arguments); + if (args) { + // args is reversed (a, b, c) -> c, b, a + list_scatter_rev (&args->list, arguments); } if ((err = optimize_arguments (arguments, arg_count))) { @@ -302,34 +302,34 @@ build_function_call (const expr_t *fexpr, const type_t *ftype, scoped_src_loc (fexpr); call = new_block_expr (0); call->block.is_call = 1; - int arg_expr_count = 0; + int num_args = 0; const expr_t *arg_exprs[arg_count + 1][2]; - auto args = build_args (arg_exprs, &arg_expr_count, arguments, arg_types, - arg_count, param_count, ftype); - for (int i = 0; i < arg_expr_count; i++) { + auto arg_list = build_args (arg_exprs, &num_args, arguments, arg_types, + arg_count, param_count, ftype); + for (int i = 0; i < num_args; i++) { scoped_src_loc (arg_exprs[i][0]); auto assign = assign_expr (arg_exprs[i][1], arg_exprs[i][0]); append_expr (call, assign); } auto ret_type = ftype->func.ret_type; - call->block.result = new_call_expr (fexpr, args, ret_type); + call->block.result = new_call_expr (fexpr, arg_list, ret_type); return call; } const expr_t * -function_expr (const expr_t *fexpr, const expr_t *params) +function_expr (const expr_t *fexpr, const expr_t *args) { - if (params) { - for (auto p = params->list.head; p; p = p->next) { + if (args) { + for (auto p = args->list.head; p; p = p->next) { p->expr = convert_name (p->expr); } } if (fexpr->type == ex_symbol && fexpr->symbol->sy_type == sy_type) { - return constructor_expr (fexpr, params); + return constructor_expr (fexpr, args); } - fexpr = find_function (fexpr, params); + fexpr = find_function (fexpr, args); fexpr = convert_name (fexpr); if (is_error (fexpr)) { return fexpr; @@ -344,18 +344,20 @@ function_expr (const expr_t *fexpr, const expr_t *params) return error (fexpr, "Called object is not a function"); } - if (fexpr->type == ex_symbol && params && is_string_val (params)) { + if (fexpr->type == ex_symbol && args + && args->list.head && is_string_val (args->list.head->expr)) { + auto arg = args->list.head->expr; // FIXME eww, I hate this, but it's needed :( // FIXME make a qc hook? :) if (strncmp (fexpr->symbol->name, "precache_sound", 14) == 0) - PrecacheSound (expr_string (params), fexpr->symbol->name[14]); + PrecacheSound (expr_string (arg), fexpr->symbol->name[14]); else if (strncmp (fexpr->symbol->name, "precache_model", 14) == 0) - PrecacheModel (expr_string (params), fexpr->symbol->name[14]); + PrecacheModel (expr_string (arg), fexpr->symbol->name[14]); else if (strncmp (fexpr->symbol->name, "precache_file", 13) == 0) - PrecacheFile (expr_string (params), fexpr->symbol->name[13]); + PrecacheFile (expr_string (arg), fexpr->symbol->name[13]); } - return build_function_call (fexpr, ftype, params); + return build_function_call (fexpr, ftype, args); } const expr_t *