|
60 | 60 | import com.oracle.graal.python.builtins.objects.cext.PythonNativeClass;
|
61 | 61 | import com.oracle.graal.python.builtins.objects.cext.PythonNativeObject;
|
62 | 62 | import com.oracle.graal.python.builtins.objects.cext.PythonNativeVoidPtr;
|
| 63 | +import com.oracle.graal.python.builtins.objects.cext.capi.CApiContext.LLVMType; |
| 64 | +import com.oracle.graal.python.builtins.objects.cext.capi.CArrayWrappers.CArrayWrapper; |
| 65 | +import com.oracle.graal.python.builtins.objects.cext.capi.CArrayWrappers.CByteArrayWrapper; |
| 66 | +import com.oracle.graal.python.builtins.objects.cext.capi.CArrayWrappers.CStringWrapper; |
63 | 67 | import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodesFactory.AllToJavaNodeGen;
|
64 | 68 | import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodesFactory.AllToSulongNodeGen;
|
65 | 69 | import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodesFactory.AsPythonObjectNodeGen;
|
|
77 | 81 | import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodesFactory.WrapVoidPtrNodeGen;
|
78 | 82 | import com.oracle.graal.python.builtins.objects.cext.capi.DynamicObjectNativeWrapper.PrimitiveNativeWrapper;
|
79 | 83 | import com.oracle.graal.python.builtins.objects.cext.capi.DynamicObjectNativeWrapper.PythonObjectNativeWrapper;
|
80 |
| -import com.oracle.graal.python.builtins.objects.cext.capi.CApiContext.LLVMType; |
81 | 84 | import com.oracle.graal.python.builtins.objects.cext.capi.NativeReferenceCache.ResolveNativeReferenceNode;
|
82 | 85 | import com.oracle.graal.python.builtins.objects.cext.capi.PyTruffleObjectFree.FreeNode;
|
83 | 86 | import com.oracle.graal.python.builtins.objects.cext.common.CExtAsPythonObjectNode;
|
|
132 | 135 | import com.oracle.truffle.api.Assumption;
|
133 | 136 | import com.oracle.truffle.api.CompilerAsserts;
|
134 | 137 | import com.oracle.truffle.api.CompilerDirectives;
|
| 138 | +import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; |
135 | 139 | import com.oracle.truffle.api.RootCallTarget;
|
136 | 140 | import com.oracle.truffle.api.Truffle;
|
137 | 141 | import com.oracle.truffle.api.TruffleLanguage.ContextReference;
|
138 | 142 | import com.oracle.truffle.api.TruffleLogger;
|
139 |
| -import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; |
140 | 143 | import com.oracle.truffle.api.dsl.Cached;
|
141 | 144 | import com.oracle.truffle.api.dsl.Cached.Exclusive;
|
142 | 145 | import com.oracle.truffle.api.dsl.Cached.Shared;
|
@@ -1445,13 +1448,29 @@ public static AsCharPointerNode getUncached() {
|
1445 | 1448 | public abstract static class FromCharPointerNode extends Node {
|
1446 | 1449 | public abstract Object execute(Object charPtr);
|
1447 | 1450 |
|
1448 |
| - // TODO(fa): add a specialization that handles 'PySequenceArrayWrapper' instances |
| 1451 | + @Specialization(limit = "1") |
| 1452 | + static String doCStringWrapper(CStringWrapper cStringWrapper, |
| 1453 | + @CachedLibrary("cStringWrapper") PythonNativeWrapperLibrary lib) { |
| 1454 | + return cStringWrapper.getString(lib); |
| 1455 | + } |
| 1456 | + |
| 1457 | + @Specialization(limit = "1") |
| 1458 | + static String doCByteArrayWrapper(CByteArrayWrapper cByteArrayWrapper, |
| 1459 | + @CachedLibrary("cByteArrayWrapper") PythonNativeWrapperLibrary lib) { |
| 1460 | + byte[] byteArray = cByteArrayWrapper.getByteArray(lib); |
| 1461 | + // TODO(fa): what is the encoding ? ASCII only ? |
| 1462 | + return PythonUtils.newString(byteArray); |
| 1463 | + } |
1449 | 1464 |
|
1450 |
| - @Specialization |
1451 |
| - PString execute(Object charPtr, |
| 1465 | + @Specialization(guards = "!isCArrayWrapper(charPtr)") |
| 1466 | + PString doPointer(Object charPtr, |
1452 | 1467 | @Cached PythonObjectFactory factory) {
|
1453 | 1468 | return factory.createString(new NativeCharSequence(charPtr, 1, false));
|
1454 | 1469 | }
|
| 1470 | + |
| 1471 | + static boolean isCArrayWrapper(Object object) { |
| 1472 | + return object instanceof CArrayWrapper; |
| 1473 | + } |
1455 | 1474 | }
|
1456 | 1475 |
|
1457 | 1476 | // -----------------------------------------------------------------------------------------------------------------
|
|
0 commit comments