use ocas_rewrite::pattern::{Pattern, PatternAlloc};
pub struct VecAlloc;
impl<'a> PatternAlloc<'a> for VecAlloc {
fn alloc_slice(&self, items: &[Pattern<'a>]) -> &'a [Pattern<'a>] {
let leaked: &'a mut [Pattern<'a>] = Vec::from(items).leak();
&*leaked
}
}
#[cfg(test)]
mod tests {
use ocas_atom::AtomArena;
use ocas_core::arena::Arena;
use ocas_rewrite::pattern::Pattern;
use super::*;
#[test]
fn alloc_slice_leaks_pattern() {
let arena = Arena::new();
let ctx = AtomArena::new(&arena);
let x = ctx.var("x");
let pat = Pattern::Literal(x);
let slice = VecAlloc.alloc_slice(&[pat.clone(), pat]);
assert_eq!(slice.len(), 2);
}
}