On Tue, Dec 7, 2010 at 3:41 AM, Lukas Renggli <renggli@gmail.com> wrote:
> One change that I don't understand, although it probably is unrelated, is in [2]:
>
> LargePositiveInteger removeSelector: #=!
> LargePositiveInteger removeSelector: #bitAnd:!
> LargePositiveInteger removeSelector: #bitOr:!
> LargePositiveInteger removeSelector: #bitShift:!
> LargePositiveInteger removeSelector: #bitXor:!
> LargePositiveInteger removeSelector: #'~='!
>
> Why would one want to remove these primitive calls from large integers?

AFAIK, Cog needs those.

That's right. �Those methods used SmallInteger primitives (7, 8, 14, 15, 16 & 17) and in Cog SmallInteger primitives only work on SmallIntegers, not on up to 64-bit LargeIntegers; i.e. they don't bother to test the receiver for being a SmallInteger and hence crash if installed on LargeInteger. �I probably made a mistake in deciding to save a tag test, but I did. �Instead these methods should use the relevant LargeInteger primitives. �The issue is I think those are missing in the standard VM. �See primitives 27 28 34 35 36 & 37�primitiveEqualLargeIntegers,�primitiveNotEqualLargeIntegers,�primitiveBitAndLargeIntegers,�primitiveBitOrLargeIntegers,�primitiveBitXorLargeIntegers,�primitiveBitShiftLargeIntegers in the Cog VM and perhaps the standard VM. �If they're missing in teh standard VM it should be fine to redefine those methods to include the�27 28 34 35 36 & 37 primitive numbers. �If they're defined differently someone needs to check that using those numbers works in the standard VM.

HTH
Eliot

Lukas

--
Lukas Renggli
www.lukas-renggli.ch