Had a chance to play a bit last night.
Stepping through
Integer readFrom: (ReadStream on: '8000000000000000') base:16.
tells the tale.
Definitely an edge problem going from SmallInteger into bignums.
I'll try to get into why in the next couple of days.
FYI,
-KenD
vvv===vvv
16r8000000000000000 printString." '0' "
(16r800000000000000 * 16) printStringHex." '8000000000000000' "
(16r8000000000000000 * 16) printStringHex. '0'
Integer readFrom: (ReadStream on: '8000000000000000')
base:16. " 0 "
SmallInteger maxVal printStringHex.
'FFFFFFFFFFFFFFF'
16r800000000000000 class." SmallInteger "
(16r800000000000000 * 16) class." LargePositiveInteger "
16r8000000000000000 printString." '0' "
(16r800000000000000 * 16) printStringHex. "
'8000000000008000000000000000' "
^^^===^^^
-KenD