|
1 | 1 | /*
|
2 |
| - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. |
| 2 | + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. All rights reserved. |
3 | 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
4 | 4 | *
|
5 | 5 | * The Universal Permissive License (UPL), Version 1.0
|
|
45 | 45 | import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.CONST_VOID_PTR;
|
46 | 46 | import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.INT8_T_PTR;
|
47 | 47 | import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.Int;
|
48 |
| -import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.PyObject; |
49 | 48 | import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.Py_hash_t;
|
50 | 49 | import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.Py_ssize_t;
|
51 | 50 | import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.Void;
|
|
60 | 59 | import com.oracle.graal.python.lib.PyObjectHashNode;
|
61 | 60 | import com.oracle.truffle.api.CompilerDirectives;
|
62 | 61 | import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
|
63 |
| -import com.oracle.truffle.api.dsl.Bind; |
64 | 62 | import com.oracle.truffle.api.dsl.Cached;
|
65 |
| -import com.oracle.truffle.api.dsl.ImportStatic; |
66 | 63 | import com.oracle.truffle.api.dsl.Specialization;
|
67 | 64 | import com.oracle.truffle.api.strings.TruffleString;
|
68 | 65 | import com.oracle.truffle.api.strings.TruffleString.Encoding;
|
69 |
| -import com.oracle.truffle.api.nodes.Node; |
70 | 66 | import com.oracle.truffle.api.strings.TruffleString.HashCodeNode;
|
71 | 67 |
|
72 | 68 | public final class PythonCextHashBuiltins {
|
@@ -102,21 +98,14 @@ static long doI(int idx) {
|
102 | 98 | }
|
103 | 99 | }
|
104 | 100 |
|
105 |
| - @CApiBuiltin(ret = Py_hash_t, args = {PyObject, ArgDescriptor.Double}, call = Direct) |
106 |
| - @ImportStatic(Double.class) |
107 |
| - abstract static class _Py_HashDouble extends CApiBinaryBuiltinNode { |
| 101 | + @CApiBuiltin(ret = Py_hash_t, args = {ArgDescriptor.Double}, call = Ignored) |
| 102 | + abstract static class _PyTruffle_HashDouble extends CApiUnaryBuiltinNode { |
108 | 103 |
|
109 |
| - @Specialization(guards = "isFinite(value)") |
110 |
| - long doFinite(@SuppressWarnings("unused") Object inst, double value) { |
| 104 | + @Specialization |
| 105 | + long doFinite(double value) { |
| 106 | + assert !Double.isNaN(value); |
111 | 107 | return PyObjectHashNode.hash(value);
|
112 | 108 | }
|
113 |
| - |
114 |
| - @Specialization(guards = "!isFinite(value)") |
115 |
| - long doNonFinite(Object inst, @SuppressWarnings("unused") double value, |
116 |
| - @Bind("this") Node inliningTarget, |
117 |
| - @Cached PyObjectHashNode hashNode) { |
118 |
| - return hashNode.execute(null, inliningTarget, inst); |
119 |
| - } |
120 | 109 | }
|
121 | 110 |
|
122 | 111 | @CApiBuiltin(name = "_Py_HashBytes", ret = Py_hash_t, args = {CONST_VOID_PTR, Py_ssize_t}, call = Direct)
|
|
0 commit comments