mirror of
https://github.com/nzp-team/fteqw.git
synced 2025-02-22 03:21:08 +00:00
fix .unions.
added some extra warning names (so '#pragma warning disable F305' etc can work) git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4438 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
4e480ab24e
commit
e4565ee476
4 changed files with 43 additions and 31 deletions
|
@ -601,7 +601,8 @@ pbool LocateDebugTerm(progfuncs_t *progfuncs, char *key, eval_t **result, etype_
|
||||||
{
|
{
|
||||||
ddef32_t *def;
|
ddef32_t *def;
|
||||||
fdef_t *fdef;
|
fdef_t *fdef;
|
||||||
eval_t *val = NULL;
|
int fofs;
|
||||||
|
eval_t *val = NULL, *fval=NULL;
|
||||||
char *c, *c2;
|
char *c, *c2;
|
||||||
etype_t type = ev_void;
|
etype_t type = ev_void;
|
||||||
struct edictrun_s *ed;
|
struct edictrun_s *ed;
|
||||||
|
@ -653,14 +654,28 @@ pbool LocateDebugTerm(progfuncs_t *progfuncs, char *key, eval_t **result, etype_
|
||||||
if (type != ev_entity)
|
if (type != ev_entity)
|
||||||
return false;
|
return false;
|
||||||
if (c)*c = '\0';
|
if (c)*c = '\0';
|
||||||
fdef = ED_FindField(progfuncs, COM_TrimString(c2));
|
|
||||||
if (c)*c = '.';
|
c2 = COM_TrimString(c2);
|
||||||
if (!fdef)
|
def = ED_FindLocalOrGlobal(progfuncs, c2, &fval);
|
||||||
return false;
|
if (def)
|
||||||
|
{
|
||||||
|
fofs = fval->_int + progfuncs->funcs.fieldadjust;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fdef = ED_FindField(progfuncs, c2);
|
||||||
|
if (c)*c = '.';
|
||||||
|
if (!fdef)
|
||||||
|
return false;
|
||||||
|
fofs = fdef->ofs;
|
||||||
|
}
|
||||||
|
|
||||||
ed = PROG_TO_EDICT(progfuncs, val->_int);
|
ed = PROG_TO_EDICT(progfuncs, val->_int);
|
||||||
if (!ed)
|
if (!ed)
|
||||||
return false;
|
return false;
|
||||||
val = (eval_t *) (((char *)ed->fields) + fdef->ofs*4);
|
if (fofs < 0 || fofs >= max_fields_size)
|
||||||
|
return false;
|
||||||
|
val = (eval_t *) (((char *)ed->fields) + fofs*4);
|
||||||
type = fdef->type;
|
type = fdef->type;
|
||||||
}
|
}
|
||||||
*rettype = type;
|
*rettype = type;
|
||||||
|
|
|
@ -647,8 +647,10 @@ enum {
|
||||||
WARN_MISSINGOPTIONAL,
|
WARN_MISSINGOPTIONAL,
|
||||||
WARN_SYSTEMCRC,
|
WARN_SYSTEMCRC,
|
||||||
WARN_CONDITIONALTYPEMISMATCH,
|
WARN_CONDITIONALTYPEMISMATCH,
|
||||||
WARN_SELFNOTTHIS, //warned for because 'self' does not have the right type. we convert such references to 'this' instead, which is more usable.
|
WARN_SELFNOTTHIS, //warned for because 'self' does not have the right type. we convert such references to 'this' instead, which is more usable.
|
||||||
WARN_EVILPREPROCESSOR, //exploited by nexuiz, and generally unsafe.
|
WARN_EVILPREPROCESSOR, //exploited by nexuiz, and generally unsafe.
|
||||||
|
WARN_UNARYNOTSCOPE, //!foo & bar the ! applies to the result of &. This is unlike C.
|
||||||
|
WARN_STRICTTYPEMISMATCH, //self.think = T_Damage; both are functions, but the arguments/return types/etc differ.
|
||||||
|
|
||||||
ERR_PARSEERRORS, //caused by qcc_pr_parseerror being called.
|
ERR_PARSEERRORS, //caused by qcc_pr_parseerror being called.
|
||||||
|
|
||||||
|
|
|
@ -509,8 +509,8 @@ QCC_opcode_t pr_opcodes[] =
|
||||||
{7, "<SWITCH_I>", "SWITCH_I", -1, ASSOC_LEFT, &type_void, NULL, &type_void},
|
{7, "<SWITCH_I>", "SWITCH_I", -1, ASSOC_LEFT, &type_void, NULL, &type_void},
|
||||||
{7, "<>", "GLOAD_S", -1, ASSOC_LEFT, &type_float, &type_float, &type_float},
|
{7, "<>", "GLOAD_S", -1, ASSOC_LEFT, &type_float, &type_float, &type_float},
|
||||||
|
|
||||||
{6, "<IF_F>", "IF_F", -1, ASSOC_RIGHT, &type_float, NULL, &type_void},
|
{7, "<IF_F>", "IF_F", -1, ASSOC_RIGHT, &type_float, NULL, &type_void},
|
||||||
{6, "<IFNOT_F>","IFNOT_F", -1, ASSOC_RIGHT, &type_float, NULL, &type_void},
|
{7, "<IFNOT_F>","IFNOT_F", -1, ASSOC_RIGHT, &type_float, NULL, &type_void},
|
||||||
|
|
||||||
/* emulated ops begin here */
|
/* emulated ops begin here */
|
||||||
{7, "<>", "OP_EMULATED", -1, ASSOC_LEFT, &type_float, &type_float, &type_float},
|
{7, "<>", "OP_EMULATED", -1, ASSOC_LEFT, &type_float, &type_float, &type_float},
|
||||||
|
@ -587,7 +587,7 @@ pbool OpAssignsToC(unsigned int op)
|
||||||
if(op == OP_STOREP_C || op == OP_LOADP_C)
|
if(op == OP_STOREP_C || op == OP_LOADP_C)
|
||||||
return false;
|
return false;
|
||||||
if(op >= OP_MULSTORE_F && op <= OP_SUBSTOREP_V)
|
if(op >= OP_MULSTORE_F && op <= OP_SUBSTOREP_V)
|
||||||
return false;
|
return false; //actually they do.
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
pbool OpAssignsToB(unsigned int op)
|
pbool OpAssignsToB(unsigned int op)
|
||||||
|
@ -1949,7 +1949,7 @@ QCC_def_t *QCC_PR_Statement (QCC_opcode_t *op, QCC_def_t *var_a, QCC_def_t *var_
|
||||||
{
|
{
|
||||||
TypeName(var_a->type, typea, sizeof(typea));
|
TypeName(var_a->type, typea, sizeof(typea));
|
||||||
TypeName(var_b->type, typeb, sizeof(typeb));
|
TypeName(var_b->type, typeb, sizeof(typeb));
|
||||||
QCC_PR_ParseWarning(WARN_CONSTANTCOMPARISON, "Implicit assignment from %s to %s %s", typea, typeb, var_b->name);
|
QCC_PR_ParseWarning(WARN_STRICTTYPEMISMATCH, "Implicit assignment from %s to %s %s", typea, typeb, var_b->name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1974,7 +1974,7 @@ QCC_def_t *QCC_PR_Statement (QCC_opcode_t *op, QCC_def_t *var_a, QCC_def_t *var_
|
||||||
{
|
{
|
||||||
TypeName(var_a->type, typea, sizeof(typea));
|
TypeName(var_a->type, typea, sizeof(typea));
|
||||||
TypeName(var_b->type->aux_type, typeb, sizeof(typeb));
|
TypeName(var_b->type->aux_type, typeb, sizeof(typeb));
|
||||||
QCC_PR_ParseWarning(WARN_CONSTANTCOMPARISON, "Implicit field assignment from %s to %s", typea, typeb);
|
QCC_PR_ParseWarning(WARN_STRICTTYPEMISMATCH, "Implicit field assignment from %s to %s", typea, typeb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -2022,7 +2022,7 @@ QCC_def_t *QCC_PR_Statement (QCC_opcode_t *op, QCC_def_t *var_a, QCC_def_t *var_
|
||||||
{
|
{
|
||||||
TypeName(var_a->type, typea, sizeof(typea));
|
TypeName(var_a->type, typea, sizeof(typea));
|
||||||
TypeName(var_b->type, typeb, sizeof(typeb));
|
TypeName(var_b->type, typeb, sizeof(typeb));
|
||||||
QCC_PR_ParseWarning(WARN_CONSTANTCOMPARISON, "'%s' type mismatch: %s with %s", op->name, typea, typeb);
|
QCC_PR_ParseWarning(WARN_STRICTTYPEMISMATCH, "'%s' type mismatch: %s with %s", op->name, typea, typeb);
|
||||||
}
|
}
|
||||||
if ((var_a->constant && var_b->constant && !var_a->temp && !var_b->temp) || var_a->ofs == var_b->ofs)
|
if ((var_a->constant && var_b->constant && !var_a->temp && !var_b->temp) || var_a->ofs == var_b->ofs)
|
||||||
QCC_PR_ParseWarning(WARN_CONSTANTCOMPARISON, "Result of comparison is constant");
|
QCC_PR_ParseWarning(WARN_CONSTANTCOMPARISON, "Result of comparison is constant");
|
||||||
|
@ -5937,7 +5937,7 @@ QCC_def_t *QCC_PR_Expression (int priority, int exprflags)
|
||||||
e->type = e2->type->aux_type;
|
e->type = e2->type->aux_type;
|
||||||
|
|
||||||
if (priority > 1 && exprflags & EXPR_WARN_ABOVE_1)
|
if (priority > 1 && exprflags & EXPR_WARN_ABOVE_1)
|
||||||
QCC_PR_ParseWarning(0, "You may wish to add brackets after that ! operator");
|
QCC_PR_ParseWarning(WARN_UNARYNOTSCOPE, "You may wish to add brackets after that ! operator");
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -8062,7 +8062,7 @@ void QCC_WriteAsmFunction(QCC_def_t *sc, unsigned int firststatement, gofs_t fir
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
fprintf(asmfile, ",\t%i", statements[i].b);
|
fprintf(asmfile, ",\t%i", statements[i].b);
|
||||||
if (pr_opcodes[statements[i].op].type_c != &type_void && pr_opcodes[statements[i].op].associative==ASSOC_LEFT)
|
if (pr_opcodes[statements[i].op].type_c != &type_void) && (pr_opcodes[statements[i].op].associative==ASSOC_LEFT || statements[i].c))
|
||||||
{
|
{
|
||||||
if (pr_opcodes[statements[i].op].type_c)
|
if (pr_opcodes[statements[i].op].type_c)
|
||||||
{
|
{
|
||||||
|
@ -9090,7 +9090,7 @@ QCC_def_t *QCC_PR_GetDef (QCC_type_t *type, char *name, QCC_def_t *scope, pbool
|
||||||
def = QCC_PR_GetDef(NULL, name, NULL, false, arraysize, false);
|
def = QCC_PR_GetDef(NULL, name, NULL, false, arraysize, false);
|
||||||
if (def)
|
if (def)
|
||||||
{
|
{
|
||||||
QCC_PR_ParseWarning(WARN_SAMENAMEASGLOBAL, "Local \"%s\" defined with name of a global", name);
|
QCC_PR_ParseWarning(WARN_SAMENAMEASGLOBAL, "Local \"%s\" hides global with same name", name);
|
||||||
QCC_PR_ParsePrintDef(WARN_SAMENAMEASGLOBAL, def);
|
QCC_PR_ParsePrintDef(WARN_SAMENAMEASGLOBAL, def);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9209,6 +9209,7 @@ QCC_def_t *QCC_PR_DummyFieldDef(QCC_type_t *type, char *name, QCC_def_t *scope,
|
||||||
case ev_pointer:
|
case ev_pointer:
|
||||||
case ev_integer:
|
case ev_integer:
|
||||||
case ev_variant:
|
case ev_variant:
|
||||||
|
case ev_function:
|
||||||
if (*name && *name != '<')
|
if (*name && *name != '<')
|
||||||
sprintf(newname, "%s%s.%s", name, array, type->params[partnum].paramname);
|
sprintf(newname, "%s%s.%s", name, array, type->params[partnum].paramname);
|
||||||
else
|
else
|
||||||
|
@ -9221,6 +9222,10 @@ QCC_def_t *QCC_PR_DummyFieldDef(QCC_type_t *type, char *name, QCC_def_t *scope,
|
||||||
if (!def)
|
if (!def)
|
||||||
{
|
{
|
||||||
def = QCC_PR_GetDef(ftype, newname, scope, true, 0, saved);
|
def = QCC_PR_GetDef(ftype, newname, scope, true, 0, saved);
|
||||||
|
if (parttype->type == ev_function)
|
||||||
|
def->initialized = true;
|
||||||
|
((int *)qcc_pr_globals)[def->ofs] = *fieldofs;
|
||||||
|
*fieldofs += parttype->size;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -9228,19 +9233,6 @@ QCC_def_t *QCC_PR_DummyFieldDef(QCC_type_t *type, char *name, QCC_def_t *scope,
|
||||||
QCC_PR_ParsePrintDef(WARN_CONFLICTINGUNIONMEMBER, def);
|
QCC_PR_ParsePrintDef(WARN_CONFLICTINGUNIONMEMBER, def);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ev_function:
|
|
||||||
if (*name && *name != '<')
|
|
||||||
sprintf(newname, "%s%s.%s", name, array, parttype->name);
|
|
||||||
else
|
|
||||||
sprintf(newname, "%s%s", parttype->name, array);
|
|
||||||
ftype = QCC_PR_NewType("FIELD_TYPE", ev_field, false);
|
|
||||||
ftype->aux_type = parttype;
|
|
||||||
def = QCC_PR_GetDef(ftype, newname, scope, true, 0, saved);
|
|
||||||
def->initialized = true;
|
|
||||||
((int *)qcc_pr_globals)[def->ofs] = *fieldofs;
|
|
||||||
*fieldofs += parttype->size;
|
|
||||||
break;
|
|
||||||
case ev_void:
|
case ev_void:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -168,13 +168,16 @@ struct {
|
||||||
// {"", WARN_KEYWORDDISABLED},
|
// {"", WARN_KEYWORDDISABLED},
|
||||||
// {"", WARN_ENUMFLAGS_NOTINTEGER},
|
// {"", WARN_ENUMFLAGS_NOTINTEGER},
|
||||||
// {"", WARN_ENUMFLAGS_NOTBINARY},
|
// {"", WARN_ENUMFLAGS_NOTBINARY},
|
||||||
// {"", WARN_CASEINSENSATIVEFRAMEMACRO},
|
|
||||||
{" Q111", WARN_DUPLICATELABEL},
|
{" Q111", WARN_DUPLICATELABEL},
|
||||||
{" Q201", WARN_ASSIGNMENTINCONDITIONAL},
|
{" Q201", WARN_ASSIGNMENTINCONDITIONAL},
|
||||||
{" F300", WARN_DEADCODE},
|
{" F300", WARN_DEADCODE},
|
||||||
{" F301", WARN_NOTUTF8},
|
{" F301", WARN_NOTUTF8},
|
||||||
{" F302", WARN_UNINITIALIZED},
|
{" F302", WARN_UNINITIALIZED},
|
||||||
{" F303", WARN_EVILPREPROCESSOR},
|
{" F303", WARN_EVILPREPROCESSOR},
|
||||||
|
{" F304", WARN_UNARYNOTSCOPE},
|
||||||
|
{" F305", WARN_CASEINSENSATIVEFRAMEMACRO},
|
||||||
|
{" F306", WARN_SAMENAMEASGLOBAL},
|
||||||
|
{" F307", WARN_STRICTTYPEMISMATCH},
|
||||||
|
|
||||||
//frikqcc errors
|
//frikqcc errors
|
||||||
//Q608: PrecacheSound: numsounds
|
//Q608: PrecacheSound: numsounds
|
||||||
|
|
Loading…
Reference in a new issue