" Smalltalk/SmallInteger.st -*- Smalltalk -*- " SmallInteger : Integer () [SmallInteger _beTaggedType] Object isSmallInteger [^false] SmallInteger isSmallInteger [^true] SmallInteger + anInteger [ { assert(_isIntegerObject(self)); if ((int)v_anInteger & 1) return _integerObject(_integerValue(self) + _integerValue(v_anInteger)); }. ^self primitiveFailed ] SmallInteger - anInteger [ { assert(_isIntegerObject(self)); if ((int)v_anInteger & 1) return _integerObject(_integerValue(self) - _integerValue(v_anInteger)); }. ^self primitiveFailed ] SmallInteger * anInteger [ { assert(_isIntegerObject(self)); if ((int)v_anInteger & 1) return _integerObject(_integerValue(self) * _integerValue(v_anInteger)); }. ^self primitiveFailed ] SmallInteger // anInteger [ { assert(_isIntegerObject(self)); if ((int)v_anInteger & 1) return _integerObject(_integerValue(self) / _integerValue(v_anInteger)); }. ^self primitiveFailed ] SmallInteger \\ anInteger [ { assert(_isIntegerObject(self)); if ((int)v_anInteger & 1) return _integerObject(_integerValue(self) % _integerValue(v_anInteger)); }. ^self primitiveFailed ] SmallInteger bitAnd: anInteger [ { assert(_isIntegerObject(self)); if ((int)v_anInteger & 1) return (oop)((unsigned)(self) & (unsigned)(v_anInteger)); }. ^self primitiveFailed ] SmallInteger bitOr: anInteger [ { assert(_isIntegerObject(self)); if ((int)v_anInteger & 1) return (oop)((unsigned)self | (unsigned)(v_anInteger)); }. ^self primitiveFailed ] SmallInteger bitXor: anInteger [ { assert(_isIntegerObject(self)); if ((int)v_anInteger & 1) return (oop)(((unsigned)(self) ^ (unsigned)(v_anInteger)) | 1); }. ^self primitiveFailed ] SmallInteger < anInteger [ { assert(_isIntegerObject(self)); if ((int)v_anInteger & 1) return (_integerValue(self) < _integerValue(v_anInteger)) ? v_true : v_false; }. ^self primitiveFailed ] SmallInteger <= anInteger [ { assert(_isIntegerObject(self)); if ((int)v_anInteger & 1) return (_integerValue(self) <= _integerValue(v_anInteger)) ? v_true : v_false; }. self println. anInteger println. ^self primitiveFailed ] SmallInteger = anInteger [ { assert(_isIntegerObject(self)); if ((int)v_anInteger & 1) return (oop)((self == v_anInteger) ? v_true : v_false); }. ^self primitiveFailed ] SmallInteger >= anInteger [ { assert(_isIntegerObject(self)); if ((int)v_anInteger & 1) return (_integerValue(self) >= _integerValue(v_anInteger)) ? v_true : v_false; }. ^self primitiveFailed ] SmallInteger > anInteger [ { assert(_isIntegerObject(self)); if ((int)v_anInteger & 1) return (_integerValue(self) > _integerValue(v_anInteger)) ? v_true : v_false; }. ^self primitiveFailed ] SmallInteger to: maxValue do: unaryBlock [ | value | { assert(_isIntegerObject(self)); }. value := self. [ value <= maxValue ] whileTrue: [ unaryBlock value: value. value := value + 1 ] ] SmallInteger timesRepeat: aBlock [ | count | count := self. [(count := count - 1) >= 0] whileTrue: [aBlock value] ]