|
56 | 56 | import com.oracle.graal.python.builtins.PythonBuiltins;
|
57 | 57 | import com.oracle.graal.python.builtins.modules.PythonCextBuiltins.CheckFunctionResultNode;
|
58 | 58 | import com.oracle.graal.python.builtins.objects.PNone;
|
| 59 | +import com.oracle.graal.python.builtins.objects.bytes.PBytes; |
| 60 | +import com.oracle.graal.python.builtins.objects.bytes.PIBytesLike; |
59 | 61 | import com.oracle.graal.python.builtins.objects.cext.CExtNodes.AsPythonObjectNode;
|
60 | 62 | import com.oracle.graal.python.builtins.objects.code.PCode;
|
61 | 63 | import com.oracle.graal.python.builtins.objects.common.HashingCollectionNodes.SetItemNode;
|
62 | 64 | import com.oracle.graal.python.builtins.objects.common.HashingStorageNodes;
|
63 | 65 | import com.oracle.graal.python.builtins.objects.dict.PDict;
|
64 | 66 | import com.oracle.graal.python.builtins.objects.exception.PBaseException;
|
| 67 | +import com.oracle.graal.python.builtins.objects.ints.PInt; |
65 | 68 | import com.oracle.graal.python.builtins.objects.list.PList;
|
66 | 69 | import com.oracle.graal.python.builtins.objects.module.PythonModule;
|
67 | 70 | import com.oracle.graal.python.builtins.objects.object.PythonObject;
|
@@ -366,6 +369,26 @@ public Object run(PythonObject moduleSpec) {
|
366 | 369 | }
|
367 | 370 | }
|
368 | 371 |
|
| 372 | + @Builtin(name = "source_hash", minNumOfPositionalArgs = 2) |
| 373 | + @GenerateNodeFactory |
| 374 | + public abstract static class SourceHashNode extends PythonBinaryBuiltinNode { |
| 375 | + @Specialization |
| 376 | + @TruffleBoundary |
| 377 | + PBytes run(long magicNumber, PIBytesLike source) { |
| 378 | + byte[] hash = new byte[Long.BYTES]; |
| 379 | + long hashCode = magicNumber ^ source.hashCode(); |
| 380 | + for (int i = 0; i < hash.length; i++) { |
| 381 | + hash[i] = (byte) (hashCode << (8 * i)); |
| 382 | + } |
| 383 | + return factory().createBytes(hash); |
| 384 | + } |
| 385 | + |
| 386 | + @Specialization |
| 387 | + PBytes run(PInt magicNumber, PIBytesLike source) { |
| 388 | + return run(magicNumber.longValue(), source); |
| 389 | + } |
| 390 | + } |
| 391 | + |
369 | 392 | @Builtin(name = "_fix_co_filename", minNumOfPositionalArgs = 2)
|
370 | 393 | @GenerateNodeFactory
|
371 | 394 | public abstract static class FixCoFilename extends PythonBinaryBuiltinNode {
|
|
0 commit comments