From 8e77971422b193836646f7bae300126510ec290b Mon Sep 17 00:00:00 2001 From: Spoike Date: Sun, 18 Mar 2012 20:07:03 +0000 Subject: [PATCH] fix a temp use error in self.enemy.velocity += vecfunc(); divVerent has full credit for this. git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4004 fc73d0e0-1445-4013-8a0c-d673dee63da5 --- engine/qclib/qcc_pr_comp.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/engine/qclib/qcc_pr_comp.c b/engine/qclib/qcc_pr_comp.c index d73fd6f1a..badefcac4 100644 --- a/engine/qclib/qcc_pr_comp.c +++ b/engine/qclib/qcc_pr_comp.c @@ -1428,6 +1428,13 @@ static void QCC_LockTemp(QCC_def_t *d) if (d->temp && d->temp->used) d->temp->scope = pr_scope; } +static void QCC_ForceLockTempForOffset(int ofs) +{ + temp_t *t; + for (t = functemps; t; t = t->next) + if(t->ofs == ofs /* && t->used */) + t->scope = pr_scope; +} static void QCC_RemapLockedTemp(temp_t *t, int firststatement, int laststatement) { @@ -2391,7 +2398,11 @@ QCC_def_t *QCC_PR_Statement (QCC_opcode_t *op, QCC_def_t *var_a, QCC_def_t *var_ { /*it came from an OP_ADDRESS - st says the instruction*/ if (need_lock) + { + QCC_ForceLockTempForOffset(statements[st].a); + QCC_ForceLockTempForOffset(statements[st].b); QCC_LockTemp(var_c); /*that temp needs to be preserved over calls*/ + } /*generate new OP_ADDRESS instruction - FIXME: the arguments may have changed since the original instruction*/ statement_linenums[statement-statements] = statement_linenums[st];