diff options
author | glx <glx@openttd.org> | 2007-12-13 02:04:09 +0000 |
---|---|---|
committer | glx <glx@openttd.org> | 2007-12-13 02:04:09 +0000 |
commit | 1a8afc5fb48aa373f0a9bb8f5c3aafffcafd936f (patch) | |
tree | 818e19ab3841d84fee2f9c6aa0a5ce8567eae4cd | |
parent | 1d9c27e235f08829d3f7aed2602225a291b05d8a (diff) | |
download | openttd-1a8afc5fb48aa373f0a9bb8f5c3aafffcafd936f.tar.xz |
(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.
-rw-r--r-- | src/newgrf_text.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/newgrf_text.cpp b/src/newgrf_text.cpp index 1de167266..052c84f56 100644 --- a/src/newgrf_text.cpp +++ b/src/newgrf_text.cpp @@ -505,13 +505,25 @@ struct TextRefStack { 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 */ |