@@ -16,7 +16,7 @@ internal CLRObject(object ob, PyType tp)
1616 using var py = Runtime . PyType_GenericAlloc ( tp , 0 ) ;
1717
1818 tpHandle = tp ;
19- pyHandle = py ;
19+ pyHandle = py . MoveToPyObject ( ) ;
2020 inst = ob ;
2121
2222 GCHandle gc = AllocGCHandle ( TrackTypes . Wrapper ) ;
@@ -45,44 +45,34 @@ static CLRObject GetInstance(object ob)
4545
4646 internal static NewReference GetReference ( object ob , BorrowedReference pyType )
4747 {
48- CLRObject co = GetInstance ( ob , pyType . DangerousGetAddress ( ) ) ;
49- return NewReference . DangerousFromPointer ( co . pyHandle ) ;
50- }
51- internal static IntPtr GetInstHandle ( object ob , IntPtr pyType )
52- {
53- CLRObject co = GetInstance ( ob , pyType ) ;
54- return co . pyHandle ;
48+ CLRObject co = GetInstance ( ob , new PyType ( pyType ) ) ;
49+ return new NewReference ( co . pyHandle ) ;
5550 }
5651
57-
58- internal static IntPtr GetInstHandle ( object ob , Type type )
52+ internal static NewReference GetReference ( object ob , Type type )
5953 {
6054 ClassBase cc = ClassManager . GetClass ( type ) ;
6155 CLRObject co = GetInstance ( ob , cc . tpHandle ) ;
62- return co . pyHandle ;
56+ return new NewReference ( co . pyHandle ) ;
6357 }
6458
6559
66- internal static IntPtr GetInstHandle ( object ob )
60+ internal static NewReference GetReference ( object ob )
6761 {
6862 CLRObject co = GetInstance ( ob ) ;
69- return co . pyHandle ;
63+ return new NewReference ( co . pyHandle ) ;
7064 }
7165
72- internal static NewReference GetReference ( object ob )
73- => NewReference . DangerousFromPointer ( GetInstHandle ( ob ) ) ;
74- internal static NewReference GetReference ( object ob , Type type )
75- => NewReference . DangerousFromPointer ( GetInstHandle ( ob , type ) ) ;
76-
77- internal static CLRObject Restore ( object ob , IntPtr pyHandle , InterDomainContext context )
66+ internal static CLRObject Restore ( object ob , BorrowedReference pyHandle , InterDomainContext context )
7867 {
68+ var pyObj = new PyObject ( pyHandle ) ;
7969 CLRObject co = new CLRObject ( )
8070 {
8171 inst = ob ,
82- pyHandle = pyHandle ,
83- tpHandle = Runtime . PyObject_TYPE ( pyHandle )
72+ pyHandle = pyObj ,
73+ tpHandle = pyObj . GetPythonType ( ) ,
8474 } ;
85- Debug . Assert ( co . tpHandle != IntPtr . Zero ) ;
75+ Debug . Assert ( co . tpHandle != null ) ;
8676 co . Load ( context ) ;
8777 return co ;
8878 }
0 commit comments