|
128 | 128 | import com.oracle.graal.python.builtins.objects.cext.CExtNodes.ToNewRefNode;
|
129 | 129 | import com.oracle.graal.python.builtins.objects.cext.CExtNodes.TransformExceptionToNativeNode;
|
130 | 130 | import com.oracle.graal.python.builtins.objects.cext.CExtNodes.VoidPtrToJavaNode;
|
| 131 | +import com.oracle.graal.python.builtins.objects.cext.CExtNodesFactory.CastToNativeLongNodeGen; |
| 132 | +import com.oracle.graal.python.builtins.objects.cext.CExtNodesFactory.MayRaiseBinaryNodeGen; |
| 133 | +import com.oracle.graal.python.builtins.objects.cext.CExtNodesFactory.MayRaiseTernaryNodeGen; |
| 134 | +import com.oracle.graal.python.builtins.objects.cext.CExtNodesFactory.MayRaiseUnaryNodeGen; |
| 135 | +import com.oracle.graal.python.builtins.objects.cext.CExtNodesFactory.PRaiseNativeNodeGen; |
| 136 | +import com.oracle.graal.python.builtins.objects.cext.CExtNodesFactory.ToJavaNodeGen; |
| 137 | +import com.oracle.graal.python.builtins.objects.cext.CExtNodesFactory.TransformExceptionToNativeNodeGen; |
131 | 138 | import com.oracle.graal.python.builtins.objects.cext.DynamicObjectNativeWrapper;
|
132 | 139 | import com.oracle.graal.python.builtins.objects.cext.DynamicObjectNativeWrapper.PrimitiveNativeWrapper;
|
133 | 140 | import com.oracle.graal.python.builtins.objects.cext.HandleCache;
|
|
144 | 151 | import com.oracle.graal.python.builtins.objects.cext.PythonNativeWrapper;
|
145 | 152 | import com.oracle.graal.python.builtins.objects.cext.PythonNativeWrapperLibrary;
|
146 | 153 | import com.oracle.graal.python.builtins.objects.cext.UnicodeObjectNodes.UnicodeAsWideCharNode;
|
147 |
| -import com.oracle.graal.python.builtins.objects.cext.CExtNodesFactory.CastToNativeLongNodeGen; |
148 |
| -import com.oracle.graal.python.builtins.objects.cext.CExtNodesFactory.MayRaiseBinaryNodeGen; |
149 |
| -import com.oracle.graal.python.builtins.objects.cext.CExtNodesFactory.MayRaiseTernaryNodeGen; |
150 |
| -import com.oracle.graal.python.builtins.objects.cext.CExtNodesFactory.MayRaiseUnaryNodeGen; |
151 |
| -import com.oracle.graal.python.builtins.objects.cext.CExtNodesFactory.PRaiseNativeNodeGen; |
152 |
| -import com.oracle.graal.python.builtins.objects.cext.CExtNodesFactory.ToJavaNodeGen; |
153 |
| -import com.oracle.graal.python.builtins.objects.cext.CExtNodesFactory.TransformExceptionToNativeNodeGen; |
154 | 154 | import com.oracle.graal.python.builtins.objects.cext.capi.CApiContext;
|
155 | 155 | import com.oracle.graal.python.builtins.objects.cext.capi.CApiContext.AllocInfo;
|
156 | 156 | import com.oracle.graal.python.builtins.objects.cext.capi.NativeReferenceCache;
|
|
162 | 162 | import com.oracle.graal.python.builtins.objects.cext.common.CExtCommonNodes.EncodeNativeStringNode;
|
163 | 163 | import com.oracle.graal.python.builtins.objects.cext.common.CExtCommonNodes.PCallCExtFunction;
|
164 | 164 | import com.oracle.graal.python.builtins.objects.cext.common.CExtCommonNodes.UnicodeFromWcharNode;
|
| 165 | +import com.oracle.graal.python.builtins.objects.cext.common.CExtCommonNodesFactory.ConvertPIntToPrimitiveNodeGen; |
165 | 166 | import com.oracle.graal.python.builtins.objects.cext.common.CExtContext;
|
166 | 167 | import com.oracle.graal.python.builtins.objects.cext.common.CExtParseArgumentsNode;
|
167 | 168 | import com.oracle.graal.python.builtins.objects.cext.common.CExtParseArgumentsNode.SplitFormatStringNode;
|
168 | 169 | import com.oracle.graal.python.builtins.objects.cext.common.VaListWrapper;
|
169 |
| -import com.oracle.graal.python.builtins.objects.cext.common.CExtCommonNodesFactory.ConvertPIntToPrimitiveNodeGen; |
170 | 170 | import com.oracle.graal.python.builtins.objects.code.PCode;
|
171 | 171 | import com.oracle.graal.python.builtins.objects.common.HashingCollectionNodes;
|
172 | 172 | import com.oracle.graal.python.builtins.objects.common.IndexNodes.NormalizeIndexNode;
|
@@ -2513,9 +2513,18 @@ private static BigInteger convertToBigInteger(long n) {
|
2513 | 2513 | @Builtin(name = "PyLong_FromVoidPtr", minNumOfPositionalArgs = 1)
|
2514 | 2514 | @GenerateNodeFactory
|
2515 | 2515 | abstract static class PyLongFromVoidPtr extends PythonUnaryBuiltinNode {
|
2516 |
| - @Specialization |
| 2516 | + @Specialization(limit = "2") |
2517 | 2517 | Object doPointer(TruffleObject pointer,
|
2518 |
| - @Cached CExtNodes.ToSulongNode toSulongNode) { |
| 2518 | + @Cached CExtNodes.ToSulongNode toSulongNode, |
| 2519 | + @CachedLibrary("pointer") InteropLibrary lib) { |
| 2520 | + // We capture the native pointer at the time when we create the wrapper if it exists. |
| 2521 | + if (lib.isPointer(pointer)) { |
| 2522 | + try { |
| 2523 | + return toSulongNode.execute(factory().createNativeVoidPtr(pointer, lib.asPointer(pointer))); |
| 2524 | + } catch (UnsupportedMessageException e) { |
| 2525 | + CompilerDirectives.shouldNotReachHere(e); |
| 2526 | + } |
| 2527 | + } |
2519 | 2528 | return toSulongNode.execute(factory().createNativeVoidPtr(pointer));
|
2520 | 2529 | }
|
2521 | 2530 | }
|
@@ -2547,8 +2556,8 @@ long doPointer(PInt n,
|
2547 | 2556 | }
|
2548 | 2557 |
|
2549 | 2558 | @Specialization
|
2550 |
| - static TruffleObject doPointer(PythonNativeVoidPtr n) { |
2551 |
| - return n.object; |
| 2559 | + static Object doPointer(PythonNativeVoidPtr n) { |
| 2560 | + return n.getPointerObject(); |
2552 | 2561 | }
|
2553 | 2562 |
|
2554 | 2563 | @Fallback
|
|
0 commit comments