Skip to main content

Obj

Struct Obj 

Source
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>

Source

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:

  • ptr is non-null and points to a live Lean object (a scalar-tagged pointer is allowed; lean_inc / lean_dec short-circuit on those).
  • The caller transfers exactly one Lean reference count to this handle. After this call the caller must not call lean_dec on ptr itself; releasing the count is the new Obj’s job (via Drop or Obj::into_raw).
  • ptr was produced by the same Lean runtime instance witnessed by _runtime. The borrow is a type-level proof that Lean is initialised and pins the 'lean lifetime of the returned handle; it carries no payload of its own.
Source

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).

Source

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.

Source

pub fn borrow(&self) -> ObjRef<'lean, '_>

Produce a borrowed view tied to this Obj.

Source

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 Clone for Obj<'_>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Obj<'_>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Drop for Obj<'_>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more
Source§

impl<'lean> LeanAbi<'lean> for Obj<'lean>

Source§

type CRepr = *mut lean_object

The C-ABI type Lake emits for this Lean type at function signatures.
Source§

impl<'lean> TryFromLean<'lean> for Obj<'lean>

Source§

fn try_from_lean(obj: Self) -> LeanResult<Self>

Decode 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 more

Auto 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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<'lean, T> DecodeCallResult<'lean> for T
where T: LeanAbi<'lean>,

Source§

const EXPECTS_IO_RESULT: bool = const EXPECTS_IO_RESULT: bool = false;

Source§

type Output = T

What .call(...) returns inside LeanResult.
Source§

type CRepr = <T as LeanAbi<'lean>>::CRepr

The C-ABI return type of the Lake-emitted function. For the pure path this is 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).
Source§

fn decode_c( c: <T as LeanAbi<'lean>>::CRepr, runtime: &'lean LeanRuntime, ) -> Result<T, LeanError>

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more