@@ -148,7 +148,9 @@ void* to_java_type(PyTypeObject* cls) {
148
148
149
149
__attribute__((always_inline ))
150
150
static inline PyObject * PyTruffle_Explicit_Cast (PyObject * cobj , unsigned long flags ) {
151
- if (PyTruffle_FastSubclass (flags , Py_TPFLAGS_TUPLE_SUBCLASS )) {
151
+ if (PyTruffle_FastSubclass (flags , Py_TPFLAGS_TYPE_SUBCLASS )) {
152
+ return (PyObject * )polyglot_as__typeobject (cobj );
153
+ } else if (PyTruffle_FastSubclass (flags , Py_TPFLAGS_TUPLE_SUBCLASS )) {
152
154
return (PyObject * )polyglot_as_PyTupleObject (cobj );
153
155
} else if (PyTruffle_FastSubclass (flags , Py_TPFLAGS_LIST_SUBCLASS )) {
154
156
return (PyObject * )polyglot_as_PyListObject (cobj );
@@ -158,6 +160,10 @@ static inline PyObject* PyTruffle_Explicit_Cast(PyObject* cobj, unsigned long fl
158
160
return (PyObject * )polyglot_as_PyUnicodeObject (cobj );
159
161
} else if (PyTruffle_FastSubclass (flags , Py_TPFLAGS_BYTES_SUBCLASS )) {
160
162
return (PyObject * )polyglot_as_PyBytesObject (cobj );
163
+ } else if (PyTruffle_FastSubclass (flags , Py_TPFLAGS_LONG_SUBCLASS )) {
164
+ return (PyObject * )polyglot_as__longobject (cobj );
165
+ } else if (PyTruffle_FastSubclass (flags , Py_TPFLAGS_BASE_EXC_SUBCLASS )) {
166
+ return (PyObject * )polyglot_as_PyBaseExceptionObject (cobj );
161
167
}
162
168
return (PyObject * )polyglot_as_PyVarObject (cobj );
163
169
}
@@ -490,23 +496,23 @@ PyObject *wrap_direct(PyCFunction fun, ...) {
490
496
}
491
497
492
498
PyObject * wrap_varargs (PyCFunction fun , PyObject * module , PyObject * varargs ) {
493
- return fun (module , _explicit_cast (varargs ));
499
+ return fun (_explicit_cast ( module ) , _explicit_cast (varargs ));
494
500
}
495
501
496
502
PyObject * wrap_keywords (PyCFunctionWithKeywords fun , PyObject * module , PyObject * varargs , PyObject * kwargs ) {
497
- return fun (module , _explicit_cast (varargs ), _explicit_cast (kwargs ));
503
+ return fun (_explicit_cast ( module ) , _explicit_cast (varargs ), _explicit_cast (kwargs ));
498
504
}
499
505
500
506
PyObject * wrap_noargs (PyCFunction fun , PyObject * module , PyObject * pnone ) {
501
- return fun (module , pnone );
507
+ return fun (_explicit_cast ( module ), _explicit_cast ( pnone ) );
502
508
}
503
509
504
510
PyObject * wrap_fastcall (_PyCFunctionFast fun , PyObject * self , PyObject * * args , Py_ssize_t nargs , PyObject * kwnames ) {
505
511
Py_ssize_t i ;
506
512
for (i = 0 ; i < nargs ; i ++ ) {
507
513
args [i ] = _explicit_cast (args [i ]);
508
514
}
509
- return fun (self , args , nargs , _explicit_cast (kwnames ));
515
+ return fun (_explicit_cast ( self ) , args , nargs , _explicit_cast (kwnames ));
510
516
}
511
517
512
518
PyObject * wrap_unsupported (void * fun , ...) {
0 commit comments