assignment in conditional is ignored if placed inside brackets.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@542 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2004-11-29 21:08:02 +00:00
parent 3f2819c65d
commit af06f28e2c

View file

@ -10,7 +10,7 @@ void QCC_PR_ParseAsm(void);
extern char *compilingfile; extern char *compilingfile;
pbool conditional; int conditional;
pbool keyword_var; pbool keyword_var;
pbool keyword_thinktime; pbool keyword_thinktime;
@ -3870,8 +3870,11 @@ QCC_def_t *QCC_PR_Term (void)
} }
else else
{ {
pbool oldcond = conditional;
conditional = conditional?2:0;
e = QCC_PR_Expression (TOP_PRIORITY); e = QCC_PR_Expression (TOP_PRIORITY);
QCC_PR_Expect (")"); QCC_PR_Expect (")");
conditional = oldcond;
} }
return e; return e;
} }
@ -4135,7 +4138,7 @@ QCC_def_t *QCC_PR_Expression (int priority)
editbadfile(strings+s_file, pr_source_line); editbadfile(strings+s_file, pr_source_line);
#endif #endif
} }
if (conditional) if (conditional&1)
QCC_PR_ParseWarning(WARN_ASSIGNMENTINCONDITIONAL, "Assignment in conditional"); QCC_PR_ParseWarning(WARN_ASSIGNMENTINCONDITIONAL, "Assignment in conditional");
e = QCC_PR_Statement (op, e2, e, NULL); e = QCC_PR_Statement (op, e2, e, NULL);
@ -4367,9 +4370,9 @@ void QCC_PR_ParseStatement (void)
QCC_PR_Expect ("("); QCC_PR_Expect ("(");
patch2 = &statements[numstatements]; patch2 = &statements[numstatements];
conditional = true; conditional = 1;
e = QCC_PR_Expression (TOP_PRIORITY); e = QCC_PR_Expression (TOP_PRIORITY);
conditional = false; conditional = 0;
if (((e->constant && !e->temp) || !STRCMP(e->name, "IMMEDIATE")) && opt_compound_jumps) if (((e->constant && !e->temp) || !STRCMP(e->name, "IMMEDIATE")) && opt_compound_jumps)
{ {
optres_compound_jumps++; optres_compound_jumps++;
@ -4457,13 +4460,13 @@ void QCC_PR_ParseStatement (void)
patch2 = &statements[numstatements]; patch2 = &statements[numstatements];
if (!QCC_PR_Check(";")) if (!QCC_PR_Check(";"))
{ {
conditional = true; conditional = 1;
e = QCC_PR_Expression(TOP_PRIORITY); e = QCC_PR_Expression(TOP_PRIORITY);
while (QCC_PR_Check(",")) //logicops, string ops? while (QCC_PR_Check(",")) //logicops, string ops?
{ {
e = QCC_PR_Statement(pr_opcodes+OP_AND, e, QCC_PR_Expression(TOP_PRIORITY), NULL); e = QCC_PR_Statement(pr_opcodes+OP_AND, e, QCC_PR_Expression(TOP_PRIORITY), NULL);
} }
conditional = false; conditional = 0;
QCC_PR_Expect(";"); QCC_PR_Expect(";");
} }
else else
@ -4538,9 +4541,9 @@ void QCC_PR_ParseStatement (void)
QCC_PR_ParseStatement (); QCC_PR_ParseStatement ();
QCC_PR_Expect ("while"); QCC_PR_Expect ("while");
QCC_PR_Expect ("("); QCC_PR_Expect ("(");
conditional = true; conditional = 1;
e = QCC_PR_Expression (TOP_PRIORITY); e = QCC_PR_Expression (TOP_PRIORITY);
conditional = false; conditional = 0;
junkdef.ofs = patch1 - &statements[numstatements]; junkdef.ofs = patch1 - &statements[numstatements];
junkdef.type = type_float; junkdef.type = type_float;
if (e->constant && !e->temp) if (e->constant && !e->temp)
@ -4624,9 +4627,9 @@ void QCC_PR_ParseStatement (void)
if (QCC_PR_Check("not")) if (QCC_PR_Check("not"))
{ {
QCC_PR_Expect ("("); QCC_PR_Expect ("(");
conditional = true; conditional = 1;
e = QCC_PR_Expression (TOP_PRIORITY); e = QCC_PR_Expression (TOP_PRIORITY);
conditional = false; conditional = 0;
if (e->type == type_string && flag_ifstring) //special case, as strings are now pointers, not offsets from string table if (e->type == type_string && flag_ifstring) //special case, as strings are now pointers, not offsets from string table
{ {
@ -4639,9 +4642,9 @@ void QCC_PR_ParseStatement (void)
else else
{ {
QCC_PR_Expect ("("); QCC_PR_Expect ("(");
conditional = true; conditional = 1;
e = QCC_PR_Expression (TOP_PRIORITY); e = QCC_PR_Expression (TOP_PRIORITY);
conditional = false; conditional = 0;
if (e->type == type_string && flag_ifstring) //special case, as strings are now pointers, not offsets from string table if (e->type == type_string && flag_ifstring) //special case, as strings are now pointers, not offsets from string table
{ {
@ -4697,9 +4700,9 @@ void QCC_PR_ParseStatement (void)
QCC_PR_Expect ("("); QCC_PR_Expect ("(");
conditional = true; conditional = 1;
e = QCC_PR_Expression (TOP_PRIORITY); e = QCC_PR_Expression (TOP_PRIORITY);
conditional = false; conditional = 0;
if (e == &def_ret) if (e == &def_ret)
{ //copy it out, so our hack just below doesn't crash us { //copy it out, so our hack just below doesn't crash us
@ -5899,7 +5902,7 @@ QCC_function_t *QCC_PR_ParseImmediateStatements (QCC_type_t *type)
pbool needsdone=false; pbool needsdone=false;
freeoffset_t *oldfofs; freeoffset_t *oldfofs;
conditional = false; conditional = 0;
f = (void *)qccHunkAlloc (sizeof(QCC_function_t)); f = (void *)qccHunkAlloc (sizeof(QCC_function_t));