helmut.rohregger at gmail.com
Mon Apr 15 09:31:33 UTC 2013
i am interested in the implementations of primitives in the VMMaker
package and found some code, which i think may be implemented incorrectly.
Maybe some of you can help me out and correct me if i am wrong.
Its located in InterpreterPrimitives>>#primitiveBitShift (VMMaker-dtl.319):
the code: "self success: integerArgument <= 31" checks, if we lose bits
by shifting to the left. This is because of processing SmallIntegers
here, isn't it? But a "1 bitShift: 31" will produce a
LargePositiveInteger instead of a SmallInteger. In fact a left shift of
30 will produce a LargePositiveInteger too.
I know the code works, because the resulting object gets checked being a
SmallInteger and fails if not. But the correct check would be "self
success: integerArgument <= 29", isn't it?
What do you think?
More information about the Vm-dev