Revision 6270 was bad.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@6282 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
c4b043d39f
commit
8705adfb86
1 changed files with 20 additions and 2 deletions
|
@ -7068,7 +7068,7 @@ QCC_sref_t QCC_PR_GenerateFunctionCallRef (QCC_sref_t newself, QCC_sref_t func,
|
|||
copyop[2] = OP_LOADA_V;
|
||||
copyop[1] = OP_LOADA_I64;
|
||||
copyop[0] = OP_LOADA_F;
|
||||
copyop_idx = 0; //offset the base ref
|
||||
copyop_idx = -2; //offset the base ref
|
||||
copyop_index = arglist[i]->index;
|
||||
copyop_index = QCC_SupplyConversion(copyop_index, ev_integer, true);
|
||||
sref = arglist[i]->base;
|
||||
|
@ -7089,6 +7089,11 @@ QCC_sref_t QCC_PR_GenerateFunctionCallRef (QCC_sref_t newself, QCC_sref_t func,
|
|||
copyop[0] = OP_LOAD_F;
|
||||
copyop_index = arglist[i]->index;
|
||||
copyop_idx = -1;
|
||||
if (!QCC_SRef_EvalConst(copyop_index))
|
||||
{ //if its a variable then its probably not a proper field (which has extra field ref values following it). do the shitty thing and make assumptions about ordering. :(
|
||||
copyop_index.cast = type_integer;
|
||||
copyop_idx = OP_ADD_I;
|
||||
}
|
||||
sref = arglist[i]->base;
|
||||
break;
|
||||
case REF_POINTER:
|
||||
|
@ -7138,6 +7143,11 @@ QCC_sref_t QCC_PR_GenerateFunctionCallRef (QCC_sref_t newself, QCC_sref_t func,
|
|||
newindex.ofs += ofs;
|
||||
QCC_UnFreeTemp(copyop_index);
|
||||
}
|
||||
else if (copyop_idx == -2)
|
||||
{ //with this mode, the base reference can just be updated. no mess with the index.
|
||||
newindex = copyop_index;
|
||||
QCC_UnFreeTemp(copyop_index);
|
||||
}
|
||||
else if (copyop_idx == OP_ADD_I)
|
||||
{
|
||||
if (!copyop_index.cast)
|
||||
|
@ -7238,7 +7248,15 @@ QCC_sref_t QCC_PR_GenerateFunctionCallRef (QCC_sref_t newself, QCC_sref_t func,
|
|||
QCC_FreeTemp(copyop_index);
|
||||
}
|
||||
QCC_FreeTemp(newindex);
|
||||
QCC_PR_SimpleStatement(&pr_opcodes[copyop[asz-1]], src, newindex, fparm, false);
|
||||
|
||||
if (copyop_idx == -2)
|
||||
{ //with this mode, the base reference can just be updated. no mess with the index.
|
||||
src.ofs += ofs;
|
||||
QCC_PR_SimpleStatement(&pr_opcodes[copyop[asz-1]], src, newindex, fparm, false);
|
||||
src.ofs -= ofs;
|
||||
}
|
||||
else
|
||||
QCC_PR_SimpleStatement(&pr_opcodes[copyop[asz-1]], src, newindex, fparm, false);
|
||||
}
|
||||
|
||||
ofs += asz;
|
||||
|
|
Loading…
Reference in a new issue