mirror of
https://github.com/DarkPlacesEngine/gmqcc.git
synced 2025-01-18 14:21:36 +00:00
Set the full const/var qualifier; only generate warnings about unimplemented functions if they have no qualifier at all
This commit is contained in:
parent
5e23e8296d
commit
600ecda860
3 changed files with 10 additions and 7 deletions
2
ast.c
2
ast.c
|
@ -1270,6 +1270,7 @@ bool ast_global_codegen(ast_value *self, ir_builder *ir, bool isfield)
|
|||
}
|
||||
|
||||
/* link us to the ir_value */
|
||||
v->cvq = self->cvq;
|
||||
self->ir_v = v;
|
||||
return true;
|
||||
|
||||
|
@ -1374,6 +1375,7 @@ bool ast_local_codegen(ast_value *self, ir_function *func, bool param)
|
|||
}
|
||||
|
||||
/* link us to the ir_value */
|
||||
v->cvq = self->cvq;
|
||||
self->ir_v = v;
|
||||
|
||||
if (self->setter) {
|
||||
|
|
6
ir.c
6
ir.c
|
@ -2952,8 +2952,10 @@ static bool gen_global_function_code(ir_builder *ir, ir_value *global)
|
|||
|
||||
irfun = global->constval.vfunc;
|
||||
if (!irfun) {
|
||||
irwarning(global->context, WARN_IMPLICIT_FUNCTION_POINTER,
|
||||
"function `%s` has no body and in QC implicitly becomes a function-pointer", global->name);
|
||||
if (global->cvq == CV_NONE) {
|
||||
irwarning(global->context, WARN_IMPLICIT_FUNCTION_POINTER,
|
||||
"function `%s` has no body and in QC implicitly becomes a function-pointer", global->name);
|
||||
}
|
||||
/* this was a function pointer, don't generate code for those */
|
||||
return true;
|
||||
}
|
||||
|
|
9
parser.c
9
parser.c
|
@ -92,7 +92,7 @@ static void parser_enterblock(parser_t *parser);
|
|||
static bool parser_leaveblock(parser_t *parser);
|
||||
static void parser_addlocal(parser_t *parser, const char *name, ast_expression *e);
|
||||
static bool parse_typedef(parser_t *parser);
|
||||
static bool parse_variable(parser_t *parser, ast_block *localblock, bool nofields, int is_const_var, ast_value *cached_typedef);
|
||||
static bool parse_variable(parser_t *parser, ast_block *localblock, bool nofields, int qualifier, ast_value *cached_typedef);
|
||||
static ast_block* parse_block(parser_t *parser);
|
||||
static bool parse_block_into(parser_t *parser, ast_block *block);
|
||||
static ast_expression* parse_statement_or_block(parser_t *parser);
|
||||
|
@ -3562,7 +3562,7 @@ static bool parse_typedef(parser_t *parser)
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool parse_variable(parser_t *parser, ast_block *localblock, bool nofields, int is_const_var, ast_value *cached_typedef)
|
||||
static bool parse_variable(parser_t *parser, ast_block *localblock, bool nofields, int qualifier, ast_value *cached_typedef)
|
||||
{
|
||||
ast_value *var;
|
||||
ast_value *proto;
|
||||
|
@ -3625,8 +3625,7 @@ static bool parse_variable(parser_t *parser, ast_block *localblock, bool nofield
|
|||
}
|
||||
}
|
||||
|
||||
if (is_const_var == CV_CONST)
|
||||
var->cvq = CV_CONST;
|
||||
var->cvq = qualifier;
|
||||
|
||||
/* Part 1:
|
||||
* check for validity: (end_sys_..., multiple-definitions, prototypes, ...)
|
||||
|
@ -3999,7 +3998,7 @@ skipvar:
|
|||
{
|
||||
if (opts_standard != COMPILER_GMQCC &&
|
||||
!OPTS_FLAG(INITIALIZED_NONCONSTANTS) &&
|
||||
is_const_var != CV_VAR)
|
||||
qualifier != CV_VAR)
|
||||
{
|
||||
var->cvq = CV_CONST;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue