1212
1313from typing_extensions import final
1414
15- from _pointers import add_ref , handle , remove_ref
15+ from _pointers import add_ref , remove_ref
1616
1717from ._utils import deref , force_set_attr , move_to_mem
18- from .constants import NULL , Nullable
18+ from .constants import NULL , Nullable , handle
1919from .exceptions import DereferenceError , FreedMemoryError , NullPointerError
2020
2121__all__ = (
@@ -96,22 +96,13 @@ def ensure(self) -> int:
9696
9797class Movable (ABC , Generic [T , A ]):
9898 @abstractmethod
99- def _move (
100- self ,
101- data : Union [A , T ],
102- * ,
103- unsafe : bool = False ,
104- ) -> None :
105- ...
106-
107- @final
10899 def move (
109100 self ,
110101 data : Union [A , T ],
111102 * ,
112103 unsafe : bool = False ,
113104 ) -> None :
114- handle ( self . _move , ( data ,), { "unsafe" : unsafe })
105+ ...
115106
116107 def __ilshift__ (self , data : Union [A , T ]):
117108 self .move (data )
@@ -126,16 +117,12 @@ class Dereferencable(ABC, Generic[T]):
126117 """Abstract class for an object that may be dereferenced."""
127118
128119 @abstractmethod
129- def _dereference (self ) -> T :
130- ...
131-
132- @final
133120 def dereference (self ) -> T :
134121 """Dereference the pointer.
135122
136123 Returns:
137124 Value at the pointers address."""
138- return handle ( self . _dereference )
125+ ...
139126
140127 @final
141128 def __invert__ (self ) -> T :
@@ -204,6 +191,8 @@ def size(self) -> int:
204191 """Size of the target value."""
205192 ...
206193
194+ @handle
195+ @final
207196 def make_ct_pointer (self ) -> "ctypes._PointerLike" :
208197 """Convert the address to a ctypes pointer.
209198
@@ -262,13 +251,15 @@ def type(self) -> Type[T]:
262251
263252 return self ._type
264253
254+ @handle
265255 def set_attr (self , key : str , value : Any ) -> None :
266256 v : Any = ~ self # mypy gets angry if this isnt any
267257 if not isinstance (~ self , type ):
268258 v = type (v )
269259
270260 force_set_attr (v , key , value )
271261
262+ @handle
272263 def assign (
273264 self ,
274265 target : Nullable [Union ["BaseObjectPointer[T]" , T ]],
@@ -299,7 +290,7 @@ def assign(
299290 def address (self ) -> Optional [int ]:
300291 return self ._address
301292
302- def _dereference (self ) -> T :
293+ def dereference (self ) -> T :
303294 return deref (self .ensure ())
304295
305296 def __irshift__ (
@@ -366,7 +357,8 @@ def _make_stream_and_ptr(
366357 bytes_a = (ctypes .c_ubyte * size ).from_address (address )
367358 return self .make_ct_pointer (), bytes (bytes_a )
368359
369- def _move (
360+ @handle
361+ def move (
370362 self ,
371363 data : Union ["BaseCPointer[T]" , T ],
372364 * ,
@@ -392,6 +384,7 @@ def __ixor__(self, data: Union["BaseCPointer[T]", T]):
392384 self .move (data , unsafe = True )
393385 return self
394386
387+ @handle
395388 def make_ct_pointer (self ):
396389 return ctypes .cast (
397390 self .ensure (),
@@ -436,7 +429,8 @@ def assigned(self) -> bool:
436429 def assigned (self , value : bool ) -> None :
437430 self ._assigned = value
438431
439- def _move (
432+ @handle
433+ def move (
440434 self ,
441435 data : Union [BasePointer [T ], T ],
442436 unsafe : bool = False ,
@@ -456,7 +450,8 @@ def _move(
456450 self .assigned = True
457451 remove_ref (data )
458452
459- def _dereference (self ) -> T :
453+ @handle
454+ def dereference (self ) -> T :
460455 if self .freed :
461456 raise FreedMemoryError (
462457 "cannot dereference memory that has been freed" ,
0 commit comments