bun_sm 0.1.1

SpiderMonkey-backed API compatibility layer replacing bun_jsc
//! JsCell — interior mutability for GC-managed state.

use std::cell::UnsafeCell;

/// Interior mutability cell for JS class payloads.
/// In JSC, this wraps `WriteBarrier`. In SM, we use `UnsafeCell`
/// since SM's GC uses reserved slots, not write barriers.
pub struct JsCell<T> {
    inner: UnsafeCell<T>,
}

impl<T> JsCell<T> {
    pub fn new(value: T) -> Self {
        Self {
            inner: UnsafeCell::new(value),
        }
    }

    pub fn get(&self) -> &T {
        unsafe { &*self.inner.get() }
    }

    pub fn get_mut(&self) -> &mut T {
        unsafe { &mut *self.inner.get() }
    }
}

unsafe impl<T: Send> Send for JsCell<T> {}
unsafe impl<T: Sync> Sync for JsCell<T> {}