Mercurial > hg > openttd
changeset 8066:9d274d1bf328 draft
(svn r11627) -Fix [FS#1532] (r11145): poping from text reference stack must be done in a precise order. But some compiler (MSVC) over optimised it and inverted this order.
author | glx <glx@openttd.org> |
---|---|
date | Thu, 13 Dec 2007 02:04:09 +0000 |
parents | 7db06d2429ce |
children | 5401a608c617 |
files | src/newgrf_text.cpp |
diffstat | 1 files changed, 15 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/newgrf_text.cpp +++ b/src/newgrf_text.cpp @@ -505,13 +505,25 @@ uint8 PopUnsignedByte() { assert(this->position < lengthof(this->stack)); return this->stack[this->position++]; } int8 PopSignedByte() { return (int8)this->PopUnsignedByte(); } - uint16 PopUnsignedWord() { return this->PopUnsignedByte() | (((uint16)this->PopUnsignedByte()) << 8); } + uint16 PopUnsignedWord() + { + uint16 val = this->PopUnsignedByte(); + return val | (this->PopUnsignedByte() << 8); + } int16 PopSignedWord() { return (int32)this->PopUnsignedWord(); } - uint32 PopUnsignedDWord() { return this->PopUnsignedWord() | (((uint32)this->PopUnsignedWord()) << 16); } + uint32 PopUnsignedDWord() + { + uint32 val = this->PopUnsignedWord(); + return val | (this->PopUnsignedWord() << 16); + } int32 PopSignedDWord() { return (int32)this->PopUnsignedDWord(); } - uint64 PopUnsignedQWord() { return this->PopUnsignedDWord() | (((uint64)this->PopUnsignedDWord()) << 32); } + uint64 PopUnsignedQWord() + { + uint64 val = this->PopUnsignedDWord(); + return val | (((uint64)this->PopUnsignedDWord()) << 32); + } int64 PopSignedQWord() { return (int64)this->PopUnsignedQWord(); } /** Rotate the top four words down: W1, W2, W3, W4 -> W4, W1, W2, W3 */