Skip to main content

Module cached_class

Module cached_class 

Source
Expand description

Cached R class attribute SEXPs.

Frequently-used class vectors (like c("POSIXct", "POSIXt")) and attribute values are allocated once and preserved permanently. This avoids repeated Rf_mkCharLenCE hash lookups on hot paths.

Two declarative macros handle the boilerplate:

β“˜
// Cache a symbol (Rf_install result):
cached_symbol!(pub(crate) fn tzone_symbol() = c"tzone");

// Cache a STRSXP vector (class, names, etc.):
cached_strsxp!(pub(crate) fn posixct_class_sexp() = [c"POSIXct", c"POSIXt"]);
cached_strsxp!(pub(crate) fn date_class_sexp() = [c"Date"]);

Both expand to a function with a static OnceLock<SEXP> inside. First call initializes; subsequent calls are a single atomic load.

CHARSXPs are obtained via Rf_install + PRINTNAME β€” symbols are never collected, so the CHARSXP is permanently valid. STRSXP vectors are kept alive via R_PreserveObject.

MacrosΒ§

cached_strsxp πŸ”’
Cache a STRSXP vector built from permanent CHARSXPs.
cached_symbol πŸ”’
Cache an Rf_install symbol result.

FunctionsΒ§

altstring_written_symbol πŸ”’
Cached miniextendr_written symbol: the attribute a string ALTREP’s data2 cache carries once R has stored a value into it.
condition_names_sexp πŸ”’
Cached c("error", "kind", "class", "call", "data") names STRSXP for condition values.
data_frame_class_sexp πŸ”’
Cached "data.frame" class STRSXP.
permanent_charsxp πŸ”’πŸ‘»
Get a permanent CHARSXP for a string by going through Rf_install + PRINTNAME.
rust_condition_attr_symbol πŸ”’
Cached __rust_condition__ symbol β€” the marker attribute on tagged panic-transport SEXPs. Wrapper code asserts this is TRUE in addition to the class check before re-raising via .miniextendr_raise_condition.
rust_condition_class_sexp πŸ”’
Cached "rust_condition_value" class STRSXP β€” applied to every tagged SEXP produced by make_rust_condition_value to identify panic-transport values to the generated R wrappers.