mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-03-20 17:31:08 +00:00
[qfcc] Fix static function declarations
I'm surprised it took this long for static not working to cause a problem.
This commit is contained in:
parent
6144100d9b
commit
7ed12e2f37
5 changed files with 26 additions and 22 deletions
|
@ -137,12 +137,14 @@ struct expr_s *find_function (struct expr_s *fexpr, struct expr_s *params);
|
|||
function_t *new_function (const char *name, const char *nice_name);
|
||||
void add_function (function_t *f);
|
||||
function_t *begin_function (struct symbol_s *sym, const char *nicename,
|
||||
struct symtab_s *parent, int far);
|
||||
struct symtab_s *parent, int far,
|
||||
enum storage_class_e storage);
|
||||
function_t *build_code_function (struct symbol_s *fsym,
|
||||
struct expr_s *state_expr,
|
||||
struct expr_s *statements);
|
||||
function_t *build_builtin_function (struct symbol_s *sym,
|
||||
struct expr_s *bi_val, int far);
|
||||
struct expr_s *bi_val, int far,
|
||||
enum storage_class_e storage);
|
||||
void finish_function (function_t *f);
|
||||
void emit_function (function_t *f, struct expr_s *e);
|
||||
int function_parms (function_t *f, byte *parm_size);
|
||||
|
|
|
@ -1507,7 +1507,6 @@ class_finish_module (void)
|
|||
symbol_t *exec_class_sym;
|
||||
symbol_t *init_sym;
|
||||
expr_t *init_expr;
|
||||
storage_class_t save_storage;
|
||||
|
||||
data.refs = emit_selectors ();
|
||||
if (class_hash) {
|
||||
|
@ -1563,12 +1562,8 @@ class_finish_module (void)
|
|||
build_function_call (new_symbol_expr (exec_class_sym),
|
||||
exec_class_sym->type, module_expr));
|
||||
|
||||
save_storage = current_storage;
|
||||
current_storage = sc_static;
|
||||
current_func = begin_function (init_sym, 0, current_symtab, 1);
|
||||
current_func = begin_function (init_sym, 0, current_symtab, 1, sc_static);
|
||||
build_code_function (init_sym, 0, init_expr);
|
||||
current_func = 0;
|
||||
current_storage = save_storage;
|
||||
}
|
||||
|
||||
protocol_t *
|
||||
|
|
|
@ -584,7 +584,7 @@ add_function (function_t *f)
|
|||
|
||||
function_t *
|
||||
begin_function (symbol_t *sym, const char *nicename, symtab_t *parent,
|
||||
int far)
|
||||
int far, storage_class_t storage)
|
||||
{
|
||||
defspace_t *space;
|
||||
|
||||
|
@ -601,7 +601,7 @@ begin_function (symbol_t *sym, const char *nicename, symtab_t *parent,
|
|||
space = sym->table->space;
|
||||
if (far)
|
||||
space = pr.far_data;
|
||||
make_function (sym, nicename, space, current_storage);
|
||||
make_function (sym, nicename, space, storage);
|
||||
if (!sym->s.func->def->external) {
|
||||
sym->s.func->def->initialized = 1;
|
||||
sym->s.func->def->constant = 1;
|
||||
|
@ -651,7 +651,8 @@ build_code_function (symbol_t *fsym, expr_t *state_expr, expr_t *statements)
|
|||
}
|
||||
|
||||
function_t *
|
||||
build_builtin_function (symbol_t *sym, expr_t *bi_val, int far)
|
||||
build_builtin_function (symbol_t *sym, expr_t *bi_val, int far,
|
||||
storage_class_t storage)
|
||||
{
|
||||
int bi;
|
||||
defspace_t *space;
|
||||
|
@ -671,7 +672,7 @@ build_builtin_function (symbol_t *sym, expr_t *bi_val, int far)
|
|||
space = sym->table->space;
|
||||
if (far)
|
||||
space = pr.far_data;
|
||||
make_function (sym, 0, space, current_storage);
|
||||
make_function (sym, 0, space, storage);
|
||||
if (sym->s.func->def->external)
|
||||
return 0;
|
||||
|
||||
|
|
|
@ -423,7 +423,8 @@ function_body
|
|||
save_storage
|
||||
{
|
||||
$<symtab>$ = current_symtab;
|
||||
current_func = begin_function ($<symbol>2, 0, current_symtab, 0);
|
||||
current_func = begin_function ($<symbol>2, 0, current_symtab, 0,
|
||||
$<spec>-1.storage);
|
||||
current_symtab = current_func->symtab;
|
||||
current_storage = sc_local;
|
||||
}
|
||||
|
@ -442,7 +443,7 @@ function_body
|
|||
$<spec>-1.type = type_default;
|
||||
sym->type = find_type (append_type (sym->type, $<spec>-1.type));
|
||||
sym = function_symbol (sym, $<spec>-1.is_overload, 1);
|
||||
build_builtin_function (sym, $3, 0);
|
||||
build_builtin_function (sym, $3, 0, $<spec>-1.storage);
|
||||
}
|
||||
;
|
||||
|
||||
|
@ -1095,7 +1096,7 @@ non_code_func
|
|||
if ($<spec>-1.storage == sc_extern) {
|
||||
error (0, "initializing external variable");
|
||||
}
|
||||
build_builtin_function ($<symbol>0, $3, 0);
|
||||
build_builtin_function ($<symbol>0, $3, 0, $<spec>-1.storage);
|
||||
}
|
||||
| '=' expr
|
||||
{
|
||||
|
@ -1135,7 +1136,8 @@ code_func
|
|||
save_storage
|
||||
{
|
||||
$<symtab>$ = current_symtab;
|
||||
current_func = begin_function ($<symbol>0, 0, current_symtab, 0);
|
||||
current_func = begin_function ($<symbol>0, 0, current_symtab, 0,
|
||||
$<spec>-1.storage);
|
||||
current_symtab = current_func->symtab;
|
||||
current_storage = sc_local;
|
||||
}
|
||||
|
@ -1965,7 +1967,8 @@ methoddef
|
|||
$<symtab>$ = current_symtab;
|
||||
|
||||
ivar_scope = class_ivar_scope (current_class, current_symtab);
|
||||
current_func = begin_function (sym, nicename, ivar_scope, 1);
|
||||
current_func = begin_function (sym, nicename, ivar_scope, 1,
|
||||
sc_static);
|
||||
class_finish_ivar_scope (current_class, ivar_scope,
|
||||
current_func->symtab);
|
||||
method->func = sym->s.func;
|
||||
|
@ -1988,7 +1991,7 @@ methoddef
|
|||
method->instance = $1;
|
||||
method = class_find_method (current_class, method);
|
||||
sym = method_symbol (current_class, method);
|
||||
build_builtin_function (sym, $5, 1);
|
||||
build_builtin_function (sym, $5, 1, sc_static);
|
||||
method->func = sym->s.func;
|
||||
method->def = sym->s.func->def;
|
||||
}
|
||||
|
|
|
@ -154,7 +154,8 @@ build_dotmain (symbol_t *program)
|
|||
|
||||
exitcode = new_symbol_expr (symtab_lookup (current_symtab, "ExitCode"));
|
||||
|
||||
current_func = begin_function (dotmain, 0, current_symtab, 0);
|
||||
current_func = begin_function (dotmain, 0, current_symtab, 0,
|
||||
current_storage);
|
||||
current_symtab = current_func->symtab;
|
||||
code = new_block_expr ();
|
||||
append_expr (code, function_expr (new_symbol_expr (program), 0));
|
||||
|
@ -177,7 +178,8 @@ program
|
|||
symtab_removesymbol (current_symtab, $1);
|
||||
symtab_addsymbol (current_symtab, $1);
|
||||
|
||||
current_func = begin_function ($1, 0, current_symtab, 0);
|
||||
current_func = begin_function ($1, 0, current_symtab, 0,
|
||||
current_storage);
|
||||
current_symtab = current_func->symtab;
|
||||
build_code_function ($1, 0, $4);
|
||||
current_symtab = st;
|
||||
|
@ -261,7 +263,8 @@ subprogram_declaration
|
|||
: subprogram_head ';'
|
||||
{
|
||||
$<storage>$ = current_storage;
|
||||
current_func = begin_function ($1, 0, current_symtab, 0);
|
||||
current_func = begin_function ($1, 0, current_symtab, 0,
|
||||
current_storage);
|
||||
current_symtab = current_func->symtab;
|
||||
current_storage = sc_local;
|
||||
}
|
||||
|
@ -274,7 +277,7 @@ subprogram_declaration
|
|||
}
|
||||
| subprogram_head ASSIGNOP '#' VALUE ';'
|
||||
{
|
||||
build_builtin_function ($1, $4, 0);
|
||||
build_builtin_function ($1, $4, 0, current_storage);
|
||||
}
|
||||
;
|
||||
|
||||
|
|
Loading…
Reference in a new issue