Skip to content

Commit c3866a7

Browse files
committed
to avoid sign-errors, we need to cast the results of natively reading from byte-storages to longs
1 parent 452f384 commit c3866a7

File tree

1 file changed

+18
-19
lines changed

1 file changed

+18
-19
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/PySequenceArrayWrapper.java

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@
6363
import com.oracle.graal.python.nodes.call.CallNode;
6464
import com.oracle.graal.python.nodes.call.special.LookupAndCallUnaryNode.LookupAndCallUnaryDynamicNode;
6565
import com.oracle.graal.python.nodes.truffle.PythonTypes;
66-
import com.oracle.graal.python.nodes.util.CastToByteNode;
6766
import com.oracle.graal.python.nodes.util.CastToJavaLongNode;
6867
import com.oracle.graal.python.runtime.sequence.PSequence;
6968
import com.oracle.graal.python.runtime.sequence.storage.EmptySequenceStorage;
@@ -166,7 +165,7 @@ long doBytesI64(PIBytesLike bytesLike, long byteIdx,
166165
@Cached("createClassProfile()") ValueProfile profile,
167166
@Cached SequenceStorageNodes.LenNode lenNode,
168167
@Cached SequenceStorageNodes.GetItemDynamicNode getItemNode,
169-
@Shared("castToByteNode") @Cached CastToByteNode castToByteNode) {
168+
@Shared("castToLongNode") @Cached CastToJavaLongNode castToJavaLongNode) {
170169
PIBytesLike profiled = profile.profile(bytesLike);
171170
int len = lenNode.execute(profiled.getSequenceStorage());
172171
// simulate sentinel value
@@ -176,27 +175,27 @@ long doBytesI64(PIBytesLike bytesLike, long byteIdx,
176175
int i = (int) byteIdx;
177176
long result = 0;
178177
SequenceStorage store = profiled.getSequenceStorage();
179-
result |= castToByteNode.execute(getItemNode.execute(store, i));
178+
result |= castToJavaLongNode.execute(getItemNode.execute(store, i));
180179
if (i + 1 < len) {
181-
result |= ((long) castToByteNode.execute(getItemNode.execute(store, i + 1)) << 8L) & 0xFF00L;
180+
result |= (castToJavaLongNode.execute(getItemNode.execute(store, i + 1)) << 8L) & 0xFF00L;
182181
}
183182
if (i + 2 < len) {
184-
result |= ((long) castToByteNode.execute(getItemNode.execute(store, i + 2)) << 16L) & 0xFF0000L;
183+
result |= (castToJavaLongNode.execute(getItemNode.execute(store, i + 2)) << 16L) & 0xFF0000L;
185184
}
186185
if (i + 3 < len) {
187-
result |= ((long) castToByteNode.execute(getItemNode.execute(store, i + 3)) << 24L) & 0xFF000000L;
186+
result |= (castToJavaLongNode.execute(getItemNode.execute(store, i + 3)) << 24L) & 0xFF000000L;
188187
}
189188
if (i + 4 < len) {
190-
result |= ((long) castToByteNode.execute(getItemNode.execute(store, i + 4)) << 32L) & 0xFF00000000L;
189+
result |= (castToJavaLongNode.execute(getItemNode.execute(store, i + 4)) << 32L) & 0xFF00000000L;
191190
}
192191
if (i + 5 < len) {
193-
result |= ((long) castToByteNode.execute(getItemNode.execute(store, i + 5)) << 40L) & 0xFF0000000000L;
192+
result |= (castToJavaLongNode.execute(getItemNode.execute(store, i + 5)) << 40L) & 0xFF0000000000L;
194193
}
195194
if (i + 6 < len) {
196-
result |= ((long) castToByteNode.execute(getItemNode.execute(store, i + 6)) << 48L) & 0xFF000000000000L;
195+
result |= (castToJavaLongNode.execute(getItemNode.execute(store, i + 6)) << 48L) & 0xFF000000000000L;
197196
}
198197
if (i + 7 < len) {
199-
result |= ((long) castToByteNode.execute(getItemNode.execute(store, i + 7)) << 56L) & 0xFF00000000000000L;
198+
result |= (castToJavaLongNode.execute(getItemNode.execute(store, i + 7)) << 56L) & 0xFF00000000000000L;
200199
}
201200
return result;
202201
}
@@ -205,34 +204,34 @@ long doBytesI64(PIBytesLike bytesLike, long byteIdx,
205204
long doPMmapI64(PMMap mmap, long byteIdx,
206205
@Exclusive @Cached LookupInheritedAttributeNode.Dynamic lookupGetItemNode,
207206
@Exclusive @Cached CallNode callGetItemNode,
208-
@Shared("castToByteNode") @Cached CastToByteNode castToByteNode) {
207+
@Shared("castToLongNode") @Cached CastToJavaLongNode castToJavaLongNode) {
209208

210209
long len = mmap.getLength();
211210
Object attrGetItem = lookupGetItemNode.execute(mmap, SpecialMethodNames.__GETITEM__);
212211

213212
int i = (int) byteIdx;
214213
long result = 0;
215-
result |= castToByteNode.execute(callGetItemNode.execute(null, attrGetItem, mmap, byteIdx));
214+
result |= castToJavaLongNode.execute(callGetItemNode.execute(null, attrGetItem, mmap, byteIdx));
216215
if (i + 1 < len) {
217-
result |= ((long) castToByteNode.execute(callGetItemNode.execute(null, attrGetItem, mmap, byteIdx)) << 8L) & 0xFF00L;
216+
result |= (castToJavaLongNode.execute(callGetItemNode.execute(null, attrGetItem, mmap, byteIdx)) << 8L) & 0xFF00L;
218217
}
219218
if (i + 2 < len) {
220-
result |= ((long) castToByteNode.execute(callGetItemNode.execute(null, attrGetItem, mmap, byteIdx)) << 16L) & 0xFF0000L;
219+
result |= (castToJavaLongNode.execute(callGetItemNode.execute(null, attrGetItem, mmap, byteIdx)) << 16L) & 0xFF0000L;
221220
}
222221
if (i + 3 < len) {
223-
result |= ((long) castToByteNode.execute(callGetItemNode.execute(null, attrGetItem, mmap, byteIdx)) << 24L) & 0xFF000000L;
222+
result |= (castToJavaLongNode.execute(callGetItemNode.execute(null, attrGetItem, mmap, byteIdx)) << 24L) & 0xFF000000L;
224223
}
225224
if (i + 4 < len) {
226-
result |= ((long) castToByteNode.execute(callGetItemNode.execute(null, attrGetItem, mmap, byteIdx)) << 32L) & 0xFF00000000L;
225+
result |= (castToJavaLongNode.execute(callGetItemNode.execute(null, attrGetItem, mmap, byteIdx)) << 32L) & 0xFF00000000L;
227226
}
228227
if (i + 5 < len) {
229-
result |= ((long) castToByteNode.execute(callGetItemNode.execute(null, attrGetItem, mmap, byteIdx)) << 40L) & 0xFF0000000000L;
228+
result |= (castToJavaLongNode.execute(callGetItemNode.execute(null, attrGetItem, mmap, byteIdx)) << 40L) & 0xFF0000000000L;
230229
}
231230
if (i + 6 < len) {
232-
result |= ((long) castToByteNode.execute(callGetItemNode.execute(null, attrGetItem, mmap, byteIdx)) << 48L) & 0xFF000000000000L;
231+
result |= (castToJavaLongNode.execute(callGetItemNode.execute(null, attrGetItem, mmap, byteIdx)) << 48L) & 0xFF000000000000L;
233232
}
234233
if (i + 7 < len) {
235-
result |= ((long) castToByteNode.execute(callGetItemNode.execute(null, attrGetItem, mmap, byteIdx)) << 56L) & 0xFF00000000000000L;
234+
result |= (castToJavaLongNode.execute(callGetItemNode.execute(null, attrGetItem, mmap, byteIdx)) << 56L) & 0xFF00000000000000L;
236235
}
237236
return result;
238237
}

0 commit comments

Comments
 (0)