mirror of
https://github.com/ZDoom/gzdoom.git
synced 2025-02-18 10:11:11 +00:00
- Fixed: FStateExpressions could copy unresolved default parameter expressions.
When these were resolved and changed later all copied pointers pointed to invalid data. SVN r1279 (trunk)
This commit is contained in:
parent
a8a3aca601
commit
0e9c3a3e2b
2 changed files with 14 additions and 2 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
October 28, 2008 (Changes by Graf Zahl)
|
||||||
|
- Fixed: FStateExpressions could copy unresolved default parameter expressions.
|
||||||
|
When these were resolved and changed later all copied pointers pointed to
|
||||||
|
invalid data.
|
||||||
|
|
||||||
October 26, 2008 (Changes by Graf Zahl)
|
October 26, 2008 (Changes by Graf Zahl)
|
||||||
- Added read and write barriers to the actor pointer in the sound channel
|
- Added read and write barriers to the actor pointer in the sound channel
|
||||||
structure.
|
structure.
|
||||||
|
|
|
@ -2763,7 +2763,8 @@ void FStateExpressions::Copy(int dest, int src, int cnt)
|
||||||
{
|
{
|
||||||
for(int i=0; i<cnt; i++)
|
for(int i=0; i<cnt; i++)
|
||||||
{
|
{
|
||||||
expressions[dest+i].expr = expressions[src+i].expr;
|
// For now set only a reference because these expressions may change when being resolved
|
||||||
|
expressions[dest+i].expr = (FxExpression*)(src+i);
|
||||||
expressions[dest+i].cloned = true;
|
expressions[dest+i].cloned = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2782,7 +2783,13 @@ int FStateExpressions::ResolveAll()
|
||||||
ctx.lax = true;
|
ctx.lax = true;
|
||||||
for(unsigned i=0; i<Size(); i++)
|
for(unsigned i=0; i<Size(); i++)
|
||||||
{
|
{
|
||||||
if (expressions[i].expr != NULL && !expressions[i].cloned)
|
if (expressions[i].cloned)
|
||||||
|
{
|
||||||
|
// Now that everything coming before has been resolved we may copy the actual pointer.
|
||||||
|
intptr_t ii = ((intptr_t)expressions[i].expr)-1;
|
||||||
|
expressions[i].expr = expressions[ii].expr;
|
||||||
|
}
|
||||||
|
else if (expressions[i].expr != NULL)
|
||||||
{
|
{
|
||||||
ctx.cls = expressions[i].owner;
|
ctx.cls = expressions[i].owner;
|
||||||
ctx.isconst = expressions[i].constant;
|
ctx.isconst = expressions[i].constant;
|
||||||
|
|
Loading…
Reference in a new issue