pub struct Obj<'lean> { /* private fields */ }Expand description
Owned handle to a Lean heap or scalar object.
Obj<'lean> holds exactly one Lean reference count for the duration
of its scope. Clone bumps that count via lean_inc; Drop
releases it via lean_dec. The 'lean lifetime parameter is the
type-system anchor for “init-before-use”: the constructor takes a
&'lean LeanRuntime borrow, so the handle cannot exist before the
runtime is up and cannot outlive the borrow it was derived from.
Neither Send nor Sync: the contained NonNull<lean_object>
and the PhantomData<&'lean LeanRuntime> (where LeanRuntime: !Sync)
both propagate the per-thread restriction. A negative-bound static
assertion in tests fails to compile if either auto-trait is ever
implemented.
Implementations§
Source§impl<'lean> Obj<'lean>
impl<'lean> Obj<'lean>
Sourcepub unsafe fn from_owned_raw(
_runtime: &'lean LeanRuntime,
ptr: *mut lean_object,
) -> Self
pub unsafe fn from_owned_raw( _runtime: &'lean LeanRuntime, ptr: *mut lean_object, ) -> Self
Wrap a raw owned Lean pointer.
§Safety
The caller must guarantee all of the following:
ptris non-null and points to a live Lean object (a scalar-tagged pointer is allowed;lean_inc/lean_decshort-circuit on those).- The caller transfers exactly one Lean reference count to this
handle. After this call the caller must not call
lean_deconptritself; releasing the count is the newObj’s job (viaDroporObj::into_raw). ptrwas produced by the same Lean runtime instance witnessed by_runtime. The borrow is a type-level proof that Lean is initialised and pins the'leanlifetime of the returned handle; it carries no payload of its own.
Sourcepub fn into_raw(self) -> *mut lean_object
pub fn into_raw(self) -> *mut lean_object
Consume the handle and return the underlying raw owned pointer
without running Drop.
The returned pointer carries the same one reference count that
this Obj held. Whoever receives it inherits the obligation to
release it (via lean_dec, or by reconstructing an Obj with
Obj::from_owned_raw).
Sourcepub fn as_raw_borrowed(&self) -> *mut lean_object
pub fn as_raw_borrowed(&self) -> *mut lean_object
Borrow the underlying raw pointer for a borrowed-argument FFI
call (b_lean_obj_arg).
The returned pointer must not be passed where a Lean function
expects to consume one reference count; that is what
Obj::into_raw is for.
Sourcepub fn runtime(&self) -> &'lean LeanRuntime
pub fn runtime(&self) -> &'lean LeanRuntime
Recover the runtime borrow that anchors this handle’s 'lean.
LeanRuntime is a ZST whose only construction path goes through
LeanRuntime::init; the 'lean lifetime carried by self is
already a witness that a runtime borrow is live in the caller’s
scope. Container readers (e.g. Vec<T>::try_from_lean) use this to
wrap extracted fields as fresh Obj<'lean> values without forcing
the runtime through every signature in the trait surface.
&self rather than an associated function because the borrow
pins the inferred 'lean lifetime to this Obj’s lifetime —
callers do not need to spell the parameter out at the call site.
Trait Implementations§
Source§impl<'lean> LeanAbi<'lean> for Obj<'lean>
impl<'lean> LeanAbi<'lean> for Obj<'lean>
Source§type CRepr = *mut lean_object
type CRepr = *mut lean_object
Source§impl<'lean> TryFromLean<'lean> for Obj<'lean>
impl<'lean> TryFromLean<'lean> for Obj<'lean>
Source§fn try_from_lean(obj: Self) -> LeanResult<Self>
fn try_from_lean(obj: Self) -> LeanResult<Self>
obj into Self, returning a
LeanError::Host with stage
HostStage::Conversion if the object’s kind or payload is
outside the type’s representable range. Read moreAuto Trait Implementations§
impl<'lean> Freeze for Obj<'lean>
impl<'lean> RefUnwindSafe for Obj<'lean>
impl<'lean> !Send for Obj<'lean>
impl<'lean> !Sync for Obj<'lean>
impl<'lean> Unpin for Obj<'lean>
impl<'lean> UnsafeUnpin for Obj<'lean>
impl<'lean> UnwindSafe for Obj<'lean>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<'lean, T> DecodeCallResult<'lean> for Twhere
T: LeanAbi<'lean>,
impl<'lean, T> DecodeCallResult<'lean> for Twhere
T: LeanAbi<'lean>,
const EXPECTS_IO_RESULT: bool = const EXPECTS_IO_RESULT: bool = false;
Source§type CRepr = <T as LeanAbi<'lean>>::CRepr
type CRepr = <T as LeanAbi<'lean>>::CRepr
T::CRepr (e.g. u8 for Bool exports, *mut lean_object for String); for the IO path it is always
*mut lean_object (the lean_io_result_* wrapper).