mirror of
https://github.com/DarkPlacesEngine/gmqcc.git
synced 2025-01-31 12:00:38 +00:00
-frelaxed-switch to enable switch on non-constant cases
This commit is contained in:
parent
5c52e817ea
commit
f4043faf0b
2 changed files with 16 additions and 3 deletions
1
opts.def
1
opts.def
|
@ -32,6 +32,7 @@
|
|||
GMQCC_DEFINE_FLAG(OMIT_NULL_BYTES)
|
||||
GMQCC_DEFINE_FLAG(ADJUST_VECTOR_FIELDS)
|
||||
GMQCC_DEFINE_FLAG(FTEPP)
|
||||
GMQCC_DEFINE_FLAG(RELAXED_SWITCH)
|
||||
#endif
|
||||
|
||||
/* warning flags */
|
||||
|
|
18
parser.c
18
parser.c
|
@ -1741,6 +1741,7 @@ static bool parse_break_continue(parser_t *parser, ast_block *block, ast_express
|
|||
static bool parse_switch(parser_t *parser, ast_block *block, ast_expression **out)
|
||||
{
|
||||
ast_expression *operand;
|
||||
ast_value *opval;
|
||||
ast_switch *switchnode;
|
||||
ast_switch_case swcase;
|
||||
|
||||
|
@ -1762,6 +1763,15 @@ static bool parse_switch(parser_t *parser, ast_block *block, ast_expression **ou
|
|||
if (!operand)
|
||||
return false;
|
||||
|
||||
if (!OPTS_FLAG(RELAXED_SWITCH)) {
|
||||
opval = (ast_value*)operand;
|
||||
if (!ast_istype(operand, ast_value) || !opval->isconst) {
|
||||
parseerror(parser, "case on non-constant values need to be explicitly enabled via -frelaxed-switch");
|
||||
ast_unref(operand);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
switchnode = ast_switch_new(ctx, operand);
|
||||
|
||||
/* closing paren */
|
||||
|
@ -1988,9 +1998,11 @@ static bool GMQCC_WARN parser_pop_local(parser_t *parser)
|
|||
varentry_t *ve;
|
||||
|
||||
ve = &vec_last(parser->locals);
|
||||
if (ast_istype(ve->var, ast_value) && !(((ast_value*)(ve->var))->uses)) {
|
||||
if (parsewarning(parser, WARN_UNUSED_VARIABLE, "unused variable: `%s`", ve->name))
|
||||
rv = false;
|
||||
if (!parser->errors) {
|
||||
if (ast_istype(ve->var, ast_value) && !(((ast_value*)(ve->var))->uses)) {
|
||||
if (parsewarning(parser, WARN_UNUSED_VARIABLE, "unused variable: `%s`", ve->name))
|
||||
rv = false;
|
||||
}
|
||||
}
|
||||
mem_d(ve->name);
|
||||
vec_pop(parser->locals);
|
||||
|
|
Loading…
Reference in a new issue