use & mask
for array bounds clipping (provided array size is 2^n)
This commit is contained in:
parent
dec6bc0950
commit
1edd3b7a93
2 changed files with 5 additions and 2 deletions
|
@ -24,6 +24,9 @@
|
|||
#include <unicode/uscript.h>
|
||||
#pragma GCC diagnostic pop
|
||||
|
||||
const unsigned int STACK_SIZE = 1 << 7; // 2^n
|
||||
const unsigned int STACK_MASK = STACK_SIZE - 1;
|
||||
|
||||
struct ScriptRecord
|
||||
{
|
||||
UChar32 startChar = 0;
|
||||
|
@ -85,7 +88,7 @@ private:
|
|||
int32_t scriptEnd;
|
||||
UScriptCode scriptCode;
|
||||
|
||||
ParenStackEntry parenStack[128];
|
||||
ParenStackEntry parenStack[STACK_SIZE];
|
||||
int32_t parenSP;
|
||||
|
||||
static int8_t highBit(int32_t value);
|
||||
|
|
|
@ -161,7 +161,7 @@ UBool ScriptRun::next()
|
|||
// characters above it on the stack will be poped.
|
||||
if (pairIndex >= 0) {
|
||||
if ((pairIndex & 1) == 0) {
|
||||
parenSP = (++parenSP) % ARRAY_SIZE(parenStack); // avoid out-of-bounds access
|
||||
parenSP = (++parenSP) & STACK_MASK; // avoid out-of-bounds access
|
||||
parenStack[parenSP].pairIndex = pairIndex;
|
||||
parenStack[parenSP].scriptCode = scriptCode;
|
||||
} else if (parenSP >= 0) {
|
||||
|
|
Loading…
Reference in a new issue