@@ -26,35 +26,23 @@ const PYJLVALUES = []
2626# unused indices in PYJLVALUES
2727const PYJLFREEVALUES = Int[]
2828
29- # Choose the layout based on whether Python is free-threaded.
30- pyjl_obj_type () = C. CTX. is_free_threaded ? PyJuliaValueObjectFT : PyJuliaValueObject
31-
32- function pyjl_obj_ptr (o:: C.PyPtr )
33- if C. CTX. is_free_threaded
34- return UnsafePtr {PyJuliaValueObjectFT} (o)
35- else
36- return UnsafePtr {PyJuliaValueObject} (o)
37- end
38- end
39-
4029function _pyjl_new (t:: C.PyPtr , :: C.PyPtr , :: C.PyPtr )
4130 alloc = C. PyType_GetSlot (t, C. Py_tp_alloc)
4231 alloc == C_NULL && return C. PyNULL
4332 o = ccall (alloc, C. PyPtr, (C. PyPtr, C. Py_ssize_t), t, 0 )
4433 o == C. PyNULL && return C. PyNULL
45- p = pyjl_obj_ptr (o)
46- p. weaklist[] = C. PyNULL
47- p. value[] = 0
34+ C. @ft UnsafePtr {PyJuliaValueObject} (o). weaklist[] = C. PyNULL
35+ C. @ft UnsafePtr {PyJuliaValueObject} (o). value[] = 0
4836 return o
4937end
5038
5139function _pyjl_dealloc (o:: C.PyPtr )
52- idx = pyjl_obj_ptr (o). value[]
40+ idx = C . @ft UnsafePtr {PyJuliaValueObject} (o). value[]
5341 if idx != 0
5442 PYJLVALUES[idx] = nothing
5543 push! (PYJLFREEVALUES, idx)
5644 end
57- pyjl_obj_ptr ( o). weaklist[! ] == C. PyNULL || C. PyObject_ClearWeakRefs (o)
45+ (C . @ft UnsafePtr {PyJuliaValueObject} ( o). weaklist[! ]) == C. PyNULL || C. PyObject_ClearWeakRefs (o)
5846 freeptr = C. PyType_GetSlot (C. Py_Type (o), C. Py_tp_free)
5947 freeptr == C_NULL || ccall (freeptr, Cvoid, (C. PyPtr,), o)
6048 nothing
@@ -335,13 +323,12 @@ function init_c()
335323
336324 # Create members for weakref support
337325 empty! (_pyjlbase_members)
338- objT = pyjl_obj_type ()
339326 push! (
340327 _pyjlbase_members,
341328 C. PyMemberDef (
342329 name = pointer (_pyjlbase_weaklistoffset_name),
343330 typ = C. Py_T_PYSSIZET,
344- offset = fieldoffset (objT , 3 ),
331+ offset = (C . @ft fieldoffset (PyJuliaValueObject , 3 ) ),
345332 flags = C. Py_READONLY,
346333 ),
347334 C. PyMemberDef (), # NULL terminator
@@ -363,7 +350,7 @@ function init_c()
363350 # Create PyType_Spec
364351 _pyjlbase_spec[] = C. PyType_Spec (
365352 name = pointer (_pyjlbase_name),
366- basicsize = sizeof (objT ),
353+ basicsize = (C . @ft sizeof (PyJuliaValueObject) ),
367354 flags = C. Py_TPFLAGS_BASETYPE | C. Py_TPFLAGS_HAVE_VERSION_TAG,
368355 slots = pointer (_pyjlbase_slots),
369356 )
@@ -380,14 +367,13 @@ function __init__()
380367 init_c ()
381368end
382369
383- PyJuliaValue_IsNull (o) = Base. GC. @preserve o pyjl_obj_ptr (C. asptr (o)). value[] == 0
370+ PyJuliaValue_IsNull (o) = Base. GC. @preserve o (C. @ft UnsafePtr {PyJuliaValueObject} (C . asptr (o)). value[]) == 0
384371
385- PyJuliaValue_GetValue (o) = Base. GC. @preserve o PYJLVALUES[pyjl_obj_ptr (C. asptr (o)). value[]]
372+ PyJuliaValue_GetValue (o) = Base. GC. @preserve o PYJLVALUES[(C. @ft UnsafePtr {PyJuliaValueObject} (C . asptr (o)). value[]) ]
386373
387374PyJuliaValue_SetValue (_o, @nospecialize (v)) = Base. GC. @preserve _o begin
388375 o = C. asptr (_o)
389- p = pyjl_obj_ptr (o)
390- idx = p. value[]
376+ idx = C. @ft UnsafePtr {PyJuliaValueObject} (o). value[]
391377 if idx == 0
392378 if isempty (PYJLFREEVALUES)
393379 push! (PYJLVALUES, v)
@@ -396,7 +382,7 @@ PyJuliaValue_SetValue(_o, @nospecialize(v)) = Base.GC.@preserve _o begin
396382 idx = pop! (PYJLFREEVALUES)
397383 PYJLVALUES[idx] = v
398384 end
399- p . value[] = idx
385+ C . @ft UnsafePtr {PyJuliaValueObject} (o) . value[] = idx
400386 else
401387 PYJLVALUES[idx] = v
402388 end
0 commit comments