Skip to content

Commit d8de478

Browse files
committed
add _imp.source_hash which is used in pycompile
1 parent 911c89b commit d8de478

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/ImpModuleBuiltins.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,15 @@
5656
import com.oracle.graal.python.builtins.PythonBuiltins;
5757
import com.oracle.graal.python.builtins.modules.PythonCextBuiltins.CheckFunctionResultNode;
5858
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;
5961
import com.oracle.graal.python.builtins.objects.cext.CExtNodes.AsPythonObjectNode;
6062
import com.oracle.graal.python.builtins.objects.code.PCode;
6163
import com.oracle.graal.python.builtins.objects.common.HashingCollectionNodes.SetItemNode;
6264
import com.oracle.graal.python.builtins.objects.common.HashingStorageNodes;
6365
import com.oracle.graal.python.builtins.objects.dict.PDict;
6466
import com.oracle.graal.python.builtins.objects.exception.PBaseException;
67+
import com.oracle.graal.python.builtins.objects.ints.PInt;
6568
import com.oracle.graal.python.builtins.objects.list.PList;
6669
import com.oracle.graal.python.builtins.objects.module.PythonModule;
6770
import com.oracle.graal.python.builtins.objects.object.PythonObject;
@@ -366,6 +369,26 @@ public Object run(PythonObject moduleSpec) {
366369
}
367370
}
368371

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+
369392
@Builtin(name = "_fix_co_filename", minNumOfPositionalArgs = 2)
370393
@GenerateNodeFactory
371394
public abstract static class FixCoFilename extends PythonBinaryBuiltinNode {

0 commit comments

Comments
 (0)