--- a/SmallInteger.st Thu Apr 08 13:57:19 2010 +0200
+++ b/SmallInteger.st Fri Apr 09 12:48:56 2010 +0200
@@ -1983,6 +1983,30 @@
^ 20
!
+signExtended24BitValue
+ "return a smallInteger from sign-extending the 24'th bit.
+ May be useful for communication interfaces"
+
+%{ /* NOCONTEXT */
+ INT i = __intVal(self);
+
+ if (i & 0x800000) {
+ i = i | ~0xFFFFFFL;
+ } else {
+ i = i & 0x7FFFFF;
+ }
+
+ RETURN (__mkSmallInteger(i));
+%}.
+ ^ self primitiveFailed
+
+ "
+ 16rFFFFFF signExtended24BitValue
+ 16r800000 signExtended24BitValue
+ 16r7FFFFF signExtended24BitValue
+ "
+!
+
signExtendedByteValue
"return a smallInteger from sign-extending the 8'th bit.
May be useful for communication interfaces"
@@ -1991,9 +2015,9 @@
INT i = __intVal(self);
if (i & 0x80) {
- i = i | ~0xFFL;
+ i = i | ~0xFFL;
} else {
- i = i & 0x7F;
+ i = i & 0x7F;
}
RETURN (__mkSmallInteger(i));
@@ -2001,8 +2025,9 @@
^ self primitiveFailed
"
- 16rFF signExtendedByteValue
- 16r7F signExtendedByteValue
+ 16rFF signExtendedByteValue
+ 16r80 signExtendedByteValue
+ 16r7F signExtendedByteValue
"
!
@@ -2014,9 +2039,9 @@
INT i = __intVal(self);
if (i & 0x8000) {
- i = i | ~0xFFFFL;
+ i = i | ~0xFFFFL;
} else {
- i = i & 0x7FFF;
+ i = i & 0x7FFF;
}
RETURN (__mkSmallInteger(i));
@@ -2024,8 +2049,9 @@
^ self primitiveFailed
"
- 16rFFFF signExtendedShortValue
- 16r7FFF signExtendedShortValue
+ 16rFFFF signExtendedShortValue
+ 16r8000 signExtendedShortValue
+ 16r7FFF signExtendedShortValue
"
! !
@@ -3772,9 +3798,9 @@
!SmallInteger class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/SmallInteger.st,v 1.183 2010-03-12 14:12:29 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/SmallInteger.st,v 1.184 2010-04-09 10:48:56 cg Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic/SmallInteger.st,v 1.183 2010-03-12 14:12:29 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/SmallInteger.st,v 1.184 2010-04-09 10:48:56 cg Exp $'
! !