mirror of
https://github.com/nzp-team/fteqw.git
synced 2024-11-10 14:42:13 +00:00
fir for do {} while (string) jumping to the wrong offset.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@639 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
d62b960d17
commit
bbc31e475b
1 changed files with 11 additions and 10 deletions
|
@ -667,8 +667,6 @@ pbool QCC_OPCodeValid(QCC_opcode_t *op)
|
|||
QCC_def_t *QCC_PR_Expression (int priority);
|
||||
int QCC_AStatementJumpsTo(int targ, int first, int last);
|
||||
|
||||
QCC_def_t junkdef;
|
||||
|
||||
temp_t *functemps; //floats/strings/funcs/ents...
|
||||
|
||||
//===========================================================================
|
||||
|
@ -4443,9 +4441,8 @@ void QCC_PR_ParseStatement (void)
|
|||
}
|
||||
QCC_PR_Expect (")"); //after the line number is noted..
|
||||
QCC_PR_ParseStatement ();
|
||||
junkdef.ofs = patch2 - &statements[numstatements];
|
||||
junkdef.type = type_float;
|
||||
QCC_FreeTemp(QCC_PR_Statement (&pr_opcodes[OP_GOTO], &junkdef, 0, (QCC_dstatement_t **)0xffffffff));
|
||||
QCC_FreeTemp(QCC_PR_Statement (&pr_opcodes[OP_GOTO], NULL, 0, &patch3));
|
||||
patch3->a = patch2 - patch3;
|
||||
if (patch1)
|
||||
{
|
||||
if (patch1->op == OP_GOTO)
|
||||
|
@ -4582,22 +4579,26 @@ void QCC_PR_ParseStatement (void)
|
|||
conditional = 1;
|
||||
e = QCC_PR_Expression (TOP_PRIORITY);
|
||||
conditional = 0;
|
||||
junkdef.ofs = patch1 - &statements[numstatements];
|
||||
junkdef.type = type_float;
|
||||
|
||||
if (e->constant && !e->temp)
|
||||
{
|
||||
if (G_FLOAT(e->ofs))
|
||||
QCC_FreeTemp(QCC_PR_Statement (&pr_opcodes[OP_GOTO], &junkdef, 0, (QCC_dstatement_t **)0xffffffff));
|
||||
{
|
||||
QCC_FreeTemp(QCC_PR_Statement (&pr_opcodes[OP_GOTO], NULL, 0, &patch2));
|
||||
patch2->a = patch1 - patch2;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (e->type == type_string && flag_ifstring)
|
||||
{
|
||||
QCC_PR_ParseWarning(WARN_IFSTRING_USED, "do {} while(string) can result in bizzare behaviour");
|
||||
QCC_FreeTemp(QCC_PR_Statement (&pr_opcodes[OP_IFS], e, &junkdef, (QCC_dstatement_t **)0xffffffff));
|
||||
QCC_FreeTemp(QCC_PR_Statement (&pr_opcodes[OP_IFS], e, NULL, &patch2));
|
||||
}
|
||||
else
|
||||
QCC_FreeTemp(QCC_PR_Statement (&pr_opcodes[OP_IF], e, &junkdef, (QCC_dstatement_t **)0xffffffff));
|
||||
QCC_FreeTemp(QCC_PR_Statement (&pr_opcodes[OP_IF], e, NULL, &patch2));
|
||||
|
||||
patch2->b = patch1 - patch2;
|
||||
}
|
||||
|
||||
QCC_PR_Expect (")");
|
||||
|
|
Loading…
Reference in a new issue