Самое интересное, что if() работает корректно - проблема возникает лишь при присваивании значения int64 булевской переменной:
X++:
Int64 i = 0x7fffffffffffffff;
str hexI;
boolean b;
boolean c;
Counter n;
;
for (n = 0; n < 8; n++)
{
b = i ? true : false;
c = i;
hexI = strfmt("0x%1%2", int2hex(i >> 32, 8), int2hex(i & 0xffffffffu, 8));
info(strfmt("if (%1) -> (boolean) %2; %1 -> (boolean) %3", hexI, b, c));
i = (i << 8) ^ 0x8000000000000000u;
}
Код:
if (0x7FFFFFFFFFFFFFFF) -> (boolean) true; 0x7FFFFFFFFFFFFFFF -> (boolean) true
if (0x7FFFFFFFFFFFFF00) -> (boolean) true; 0x7FFFFFFFFFFFFF00 -> (boolean) true
if (0x7FFFFFFFFFFF0000) -> (boolean) true; 0x7FFFFFFFFFFF0000 -> (boolean) true
if (0x7FFFFFFFFF000000) -> (boolean) true; 0x7FFFFFFFFF000000 -> (boolean) true
if (0x7FFFFFFF00000000) -> (boolean) true; 0x7FFFFFFF00000000 -> (boolean) false
if (0x7FFFFF0000000000) -> (boolean) true; 0x7FFFFF0000000000 -> (boolean) false
if (0x7FFF000000000000) -> (boolean) true; 0x7FFF000000000000 -> (boolean) false
if (0x7F00000000000000) -> (boolean) true; 0x7F00000000000000 -> (boolean) false
Проверялось на ядре AX 2009 v5.0.495.0