Skip to content

Commit f1a6724

Browse files
committed
use library hash method in tuple.__hash__
1 parent 833eae6 commit f1a6724

File tree

1 file changed

+5
-9
lines changed
  • graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/tuple

1 file changed

+5
-9
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/tuple/TupleBuiltins.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,10 @@
6161
import com.oracle.graal.python.builtins.objects.cext.PythonNativeObject;
6262
import com.oracle.graal.python.builtins.objects.common.IndexNodes.NormalizeIndexNode;
6363
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
64+
import com.oracle.graal.python.builtins.objects.function.PArguments;
6465
import com.oracle.graal.python.builtins.objects.ints.PInt;
6566
import com.oracle.graal.python.builtins.objects.iterator.PSequenceIterator;
67+
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
6668
import com.oracle.graal.python.builtins.objects.slice.PSlice;
6769
import com.oracle.graal.python.builtins.objects.str.PString;
6870
import com.oracle.graal.python.nodes.argument.ReadArgumentNode;
@@ -86,6 +88,7 @@
8688
import com.oracle.truffle.api.dsl.Specialization;
8789
import com.oracle.truffle.api.dsl.TypeSystemReference;
8890
import com.oracle.truffle.api.frame.VirtualFrame;
91+
import com.oracle.truffle.api.library.CachedLibrary;
8992

9093
@CoreFunctions(extendClasses = PythonBuiltinClassType.PTuple)
9194
public class TupleBuiltins extends PythonBuiltins {
@@ -584,22 +587,15 @@ public long getHash(PTuple self) {
584587
public long computeHash(VirtualFrame frame, PTuple self,
585588
@Cached("create()") SequenceStorageNodes.LenNode getLen,
586589
@Cached("createNotNormalized()") SequenceStorageNodes.GetItemNode getItemNode,
587-
@Cached("create()") BuiltinFunctions.HashNode hashNode,
588-
@Cached("createLossy()") CoerceToJavaLongNode castToLongNode) {
590+
@CachedLibrary(limit = "getCallSiteInlineCacheMaxDepth()") PythonObjectLibrary lib) {
589591
// adapted from https://github.com/python/cpython/blob/v3.6.5/Objects/tupleobject.c#L345
590592
SequenceStorage tupleStore = self.getSequenceStorage();
591593
int len = getLen.execute(tupleStore);
592594
long multiplier = 0xf4243;
593595
long hash = 0x345678;
594-
long tmp;
595596
for (int i = 0; i < len; i++) {
596597
Object item = getItemNode.execute(frame, tupleStore, i);
597-
Object hashValue = hashNode.execute(frame, item);
598-
tmp = castToLongNode.execute(hashValue);
599-
if (tmp == -1) {
600-
return -1;
601-
}
602-
598+
long tmp = lib.hashWithState(item, PArguments.getThreadState(frame));
603599
hash = (hash ^ tmp) * multiplier;
604600
multiplier += 82520 + len + len;
605601
}

0 commit comments

Comments
 (0)