#FEATURE
authorClaus Gittinger <cg@exept.de>
Mon, 01 Feb 2016 16:21:18 +0100
changeset 19134 eaa91cb0ef1b
parent 19133 63ef07879231
child 19135 e2d82660b855
#FEATURE class: ByteArray changed: #bitSetAt: inline C code enabled
ByteArray.st
--- 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'!