Skip to content

Commit 0300452

Browse files
committed
handle PythonNativeVoidPtr in int constructor
1 parent add6b15 commit 0300452

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
import com.oracle.graal.python.builtins.objects.cell.PCell;
7979
import com.oracle.graal.python.builtins.objects.cext.CExtNodes;
8080
import com.oracle.graal.python.builtins.objects.cext.PythonNativeClass;
81+
import com.oracle.graal.python.builtins.objects.cext.PythonNativeVoidPtr;
8182
import com.oracle.graal.python.builtins.objects.code.PCode;
8283
import com.oracle.graal.python.builtins.objects.common.HashingCollectionNodes;
8384
import com.oracle.graal.python.builtins.objects.common.HashingStorage.DictEntry;
@@ -1002,6 +1003,16 @@ public Object createInt(LazyPythonClass cls, long arg, @SuppressWarnings("unused
10021003
return factory().createInt(cls, arg);
10031004
}
10041005

1006+
@Specialization(guards = "isNoValue(keywordArg)")
1007+
public Object createInt(LazyPythonClass cls, PythonNativeVoidPtr arg, @SuppressWarnings("unused") PNone keywordArg) {
1008+
if (isPrimitiveInt(cls)) {
1009+
return arg;
1010+
} else {
1011+
CompilerDirectives.transferToInterpreter();
1012+
throw new IllegalStateException("cannot wrap void ptr in int subclass");
1013+
}
1014+
}
1015+
10051016
@Specialization(guards = "isNoValue(keywordArg)")
10061017
public Object createInt(LazyPythonClass cls, double arg, @SuppressWarnings("unused") PNone keywordArg,
10071018
@Cached("createBinaryProfile()") ConditionProfile isIntProfile) {
@@ -1178,7 +1189,7 @@ public Object createInt(LazyPythonClass cls, Object obj, PNone keywordArg,
11781189
}
11791190

11801191
protected static boolean isHandledType(Object obj) {
1181-
return PGuards.isInteger(obj) || obj instanceof Double || obj instanceof Boolean || PGuards.isString(obj) || PGuards.isBytes(obj);
1192+
return PGuards.isInteger(obj) || obj instanceof Double || obj instanceof Boolean || PGuards.isString(obj) || PGuards.isBytes(obj) || obj instanceof PythonNativeVoidPtr;
11821193
}
11831194

11841195
private String toString(PIBytesLike pByteArray) {

0 commit comments

Comments
 (0)