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 incatch_unwind, converting Rust panics to R errors. Suitable for pure-Rust callbacks. -
RUnwind: Wraps inR_UnwindProtect, catching both Rust panics and Rlongjmperrors. This is the default. 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.
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
impl Clone for AltrepGuard
impl Copy for AltrepGuard
Source§impl Debug for AltrepGuard
impl Debug for AltrepGuard
Source§impl Eq for AltrepGuard
impl Eq for AltrepGuard
1.0.0 (const: unstable) · Source§#[doc(hidden)]fn assert_receiver_is_total_eq(&self)
#[doc(hidden)]fn assert_receiver_is_total_eq(&self)
implementation detail of #[derive(Eq)]
Source§#[doc(hidden)]fn assert_fields_are_eq(&self)
#[doc(hidden)]fn assert_fields_are_eq(&self)
derive_eq_internals)Source§impl PartialEq for AltrepGuard
impl PartialEq for AltrepGuard
impl StructuralPartialEq for AltrepGuard
impl TrivialClone for AltrepGuard
Auto Trait Implementations§
impl Freeze for AltrepGuard
impl RefUnwindSafe for AltrepGuard
impl Send for AltrepGuard
impl Sync for AltrepGuard
impl Unpin for AltrepGuard
impl UnsafeUnpin for AltrepGuard
impl UnwindSafe for AltrepGuard
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,
impl<T> ConsumingFallible for Twhere
T: Clone,
impl<T> Printable for T
Source§impl<T> RCopy for Twhere
T: Copy,
impl<T> RCopy for Twhere
T: Copy,
Source§impl<T> RDebug for Twhere
T: Debug,
impl<T> RDebug for Twhere
T: Debug,
Source§impl<T> SizeHint for Twhere
T: ?Sized,
impl<T> SizeHint for Twhere
T: ?Sized,
Source§default fn lower_bound(&self) -> usize
default fn lower_bound(&self) -> usize
core_io_internals)[u8; 12] could return any value between 0 and
12 inclusively as a correct implementation. Read moreSource§impl<T> SizedTypeProperties for T
impl<T> SizedTypeProperties for T
Source§#[doc(hidden)]const SIZE: usize = _
#[doc(hidden)]const SIZE: usize = _
sized_type_properties)Source§#[doc(hidden)]const ALIGN: usize = _
#[doc(hidden)]const ALIGN: usize = _
sized_type_properties)Source§#[doc(hidden)]const ALIGNMENT: Alignment = _
#[doc(hidden)]const ALIGNMENT: Alignment = _
ptr_alignment_type)Source§#[doc(hidden)]const IS_ZST: bool = _
#[doc(hidden)]const IS_ZST: bool = _
sized_type_properties)Source§#[doc(hidden)]const LAYOUT: Layout = _
#[doc(hidden)]const LAYOUT: Layout = _
sized_type_properties)Source§#[doc(hidden)]const MAX_SLICE_LEN: usize = _
#[doc(hidden)]const MAX_SLICE_LEN: usize = _
sized_type_properties)[Self]. Read moreLayout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 1 byte
Size for each variant:
Unsafe: 0 bytesRustUnwind: 0 bytesRUnwind: 0 bytes