--- a/ByteArray.st Mon Feb 01 15:25:15 2016 +0100
+++ b/ByteArray.st Mon Feb 01 16:21:18 2016 +0100
@@ -398,30 +398,26 @@
%{ /* NOCONTEXT */
- REGISTER int indx;
- REGISTER int byte;
- int nIndex;
- REGISTER OBJ slf;
- REGISTER OBJ cls;
-
- if (0 /* __isSmallInteger(index) */) {
- indx = __intVal(index) - 1;
- slf = self;
-
- byte = indx / 8;
- indx = indx % 8;
-
- if ((cls = __qClass(slf)) != @global(ByteArray)) {
- if (indx < 0) goto badIndex;
- byte += __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
- }
- nIndex = __byteArraySize(slf);
- if ((unsigned)byte < (unsigned)nIndex) {
- __ByteArrayInstPtr(slf)->ba_element[byte] |= (1 << indx);
- RETURN (slf);
- }
+ if (__isSmallInteger(index)
+ && (__qClass(self) == @global(ByteArray))) {
+ int indx;
+
+ indx = __intVal(index) - 1;
+ if (indx >= 0) {
+ int byteIndex;
+ int bitIndex;
+ int nIndex;
+
+ byteIndex = indx / 8;
+ bitIndex = indx % 8;
+
+ nIndex = __byteArraySize(self);
+ if ((unsigned)byteIndex < (unsigned)nIndex) {
+ __ByteArrayInstPtr(self)->ba_element[byteIndex] |= (1 << bitIndex);
+ RETURN (self);
+ }
+ }
}
-badIndex: ;
%}.
byteIndex := ((index-1) // 8) + 1.
bitIndex0 := ((index-1) \\ 8).
@@ -434,8 +430,11 @@
#[0 0 0 0] copy bitSetAt:7
#[0 0 0 0] copy bitSetAt:8
#[0 0 0 0] copy bitSetAt:9
+ #[0 0 0 0] copy bitSetAt:32
+ #[0 0 0 0] copy bitSetAt:33
+ #[0 0 0 0] copy bitSetAt:0
"
- "
+ "
#[ 0 0 0 0 ] bitSetAt:1
#[ 0 0 0 0 ] bitSetAt:4
#[ 0 0 0 0 ] bitSetAt:8
@@ -443,9 +442,6 @@
#[ 0 0 0 0 ] bitSetAt:10
#[ 0 0 0 0 ] bitSetAt:11
"
-
-
-
! !
!ByteArray methodsFor:'accessing-bytes'!