Skip to main content

AltrepGuard

Enum AltrepGuard 

Source
pub enum AltrepGuard {
    Unsafe,
    RustUnwind,
    RUnwind,
}
Expand description

Controls the panic/error guard used around ALTREP trampoline callbacks.

Each mode trades off safety vs performance:

  • Unsafe: No protection. If the callback panics, behavior is undefined (unwinding through C frames). Use only for trivial callbacks that cannot panic.

  • RustUnwind: Wraps in catch_unwind, converting Rust panics to R errors. This is the default and safe for all pure-Rust callbacks. Overhead: ~1-2ns per call.

  • RUnwind: Wraps in R_UnwindProtect, catching both Rust panics and R longjmp errors. Use when ALTREP callbacks invoke R API functions that might error (e.g., Rf_allocVector, Rf_eval).

The guard is selected via the const GUARD associated constant on the Altrep trait. Since it is a const, the compiler eliminates dead branches at monomorphization time — zero runtime overhead for the chosen mode.

Variants§

§

Unsafe

No protection. Fastest, but if the callback panics, behavior is undefined.

§

RustUnwind

catch_unwind — catches Rust panics, converts to R errors. Default.

§

RUnwind

with_r_unwind_protect — catches both Rust panics and R longjmps. Use when ALTREP callbacks invoke R API functions that might error.

Trait Implementations§

Source§

impl Clone for AltrepGuard

Source§

fn clone(&self) -> AltrepGuard

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for AltrepGuard

Source§

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

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

impl PartialEq for AltrepGuard

Source§

fn eq(&self, other: &AltrepGuard) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for AltrepGuard

Source§

impl Eq for AltrepGuard

Source§

impl StructuralPartialEq for AltrepGuard

Auto Trait Implementations§

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<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> RClone for T
where T: Clone,

Source§

fn clone(&self) -> T

Create a deep copy of this value.
Source§

impl<T> RCopy for T
where T: Copy,

Source§

fn copy(&self) -> T

Create a bitwise copy of this value. Read more
Source§

fn is_copy(&self) -> bool

Check if this type implements Copy. Read more
Source§

impl<T> RDebug for T
where T: Debug,

Source§

fn debug_str(&self) -> String

Get a compact debug string representation.
Source§

fn debug_str_pretty(&self) -> String

Get a pretty-printed debug string with indentation.
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.