- added a direct native function for NextHighestCeilingAt to test multiple return values.
This commit is contained in:
parent
5ae456d059
commit
d3ff657231
7 changed files with 21 additions and 39 deletions
|
|
@ -1081,12 +1081,14 @@ ExpEmit FunctionCallEmitter::EmitCall(VMFunctionBuilder *build, TArray<ExpEmit>
|
|||
}
|
||||
|
||||
assert(returns.Size() < 2 || ReturnRegs != nullptr);
|
||||
|
||||
ExpEmit retreg;
|
||||
for (unsigned i = 0; i < returns.Size(); i++)
|
||||
{
|
||||
ExpEmit reg(build, returns[i].first, returns[i].second);
|
||||
build->Emit(OP_RESULT, 0, EncodeRegType(reg), reg.RegNum);
|
||||
if (ReturnRegs) ReturnRegs->Push(reg);
|
||||
else return reg;
|
||||
else retreg = reg;
|
||||
}
|
||||
if (vm_jit) // The JIT compiler needs this, but the VM interpreter does not.
|
||||
{
|
||||
|
|
@ -1097,6 +1099,6 @@ ExpEmit FunctionCallEmitter::EmitCall(VMFunctionBuilder *build, TArray<ExpEmit>
|
|||
reg.Free(build);
|
||||
}
|
||||
}
|
||||
return ExpEmit();
|
||||
return retreg;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -160,7 +160,7 @@ DEFINE_ACTION_FUNCTION(_Sector, LowestFloorAt)
|
|||
return numret;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION(_Sector, NextHighestCeilingAt)
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_Sector, NextHighestCeilingAt, NextHighestCeilingAt)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(sector_t);
|
||||
PARAM_FLOAT(x);
|
||||
|
|
@ -170,21 +170,11 @@ DEFINE_ACTION_FUNCTION(_Sector, NextHighestCeilingAt)
|
|||
PARAM_INT(flags);
|
||||
sector_t *resultsec;
|
||||
F3DFloor *resultff;
|
||||
double resultheight = self->NextHighestCeilingAt(x, y, bottomz, topz, flags, &resultsec, &resultff);
|
||||
double resultheight = NextHighestCeilingAt(self, x, y, bottomz, topz, flags, &resultsec, &resultff);
|
||||
|
||||
if (numret > 2)
|
||||
{
|
||||
ret[2].SetPointer(resultff);
|
||||
numret = 3;
|
||||
}
|
||||
if (numret > 1)
|
||||
{
|
||||
ret[1].SetPointer(resultsec);
|
||||
}
|
||||
if (numret > 0)
|
||||
{
|
||||
ret[0].SetFloat(resultheight);
|
||||
}
|
||||
if (numret > 2) ret[2].SetPointer(resultff);
|
||||
if (numret > 1) ret[1].SetPointer(resultsec);
|
||||
if (numret > 0) ret[0].SetFloat(resultheight);
|
||||
return numret;
|
||||
}
|
||||
DEFINE_ACTION_FUNCTION(_Sector, NextLowestFloorAt)
|
||||
|
|
@ -199,19 +189,9 @@ DEFINE_ACTION_FUNCTION(_Sector, NextLowestFloorAt)
|
|||
F3DFloor *resultff;
|
||||
double resultheight = self->NextLowestFloorAt(x, y, z, flags, steph, &resultsec, &resultff);
|
||||
|
||||
if (numret > 2)
|
||||
{
|
||||
ret[2].SetPointer(resultff);
|
||||
numret = 3;
|
||||
}
|
||||
if (numret > 1)
|
||||
{
|
||||
ret[1].SetPointer(resultsec);
|
||||
}
|
||||
if (numret > 0)
|
||||
{
|
||||
ret[0].SetFloat(resultheight);
|
||||
}
|
||||
if (numret > 2) ret[2].SetPointer(resultff);
|
||||
if (numret > 1) ret[1].SetPointer(resultsec);
|
||||
if (numret > 0) ret[0].SetFloat(resultheight);
|
||||
return numret;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue