diff --git a/src/builtin/functions/hash_table.rs b/src/builtin/functions/hash_table.rs index 10d2d4f..68ecc2e 100644 --- a/src/builtin/functions/hash_table.rs +++ b/src/builtin/functions/hash_table.rs @@ -49,7 +49,7 @@ pub(crate) fn add(ctx: &mut TulispContext) { ) .with_trace(args.clone())); } - let table = Shared::new_any(HashTable { + let table = Shared::new(HashTable { inner: SharedMut::new(HashMap::new()), }); Ok(table.into()) diff --git a/src/object.rs b/src/object.rs index af1e86b..0e92bf9 100644 --- a/src/object.rs +++ b/src/object.rs @@ -307,7 +307,7 @@ ctx.add_special_form("make_any", |_ctx, args| { destruct_bind!((inp) = args); let inp: i64 = inp.try_into()?; - let any_obj = Shared::new_any(TestStruct { value: inp }); + let any_obj = Shared::new(TestStruct { value: inp }); Ok(any_obj.into()) }); diff --git a/src/object/wrappers.rs b/src/object/wrappers.rs index b9ce14b..9cd6020 100644 --- a/src/object/wrappers.rs +++ b/src/object/wrappers.rs @@ -30,11 +30,11 @@ pub mod generic { } impl Shared { - pub fn new_tulisp_fn(val: impl TulispFn) -> Shared { + pub(crate) fn new_tulisp_fn(val: impl TulispFn) -> Shared { Shared(std::rc::Rc::new(val)) } - pub fn new_any(val: impl TulispAny) -> Shared { + pub fn new(val: impl TulispAny) -> Shared { Shared(std::rc::Rc::new(val)) } @@ -51,16 +51,6 @@ pub mod generic { } } - impl Shared { - pub fn new(val: T) -> Self { - Shared(std::rc::Rc::new(val)) - } - - pub fn ptr_eq(&self, other: &Self) -> bool { - std::rc::Rc::ptr_eq(&self.0, &other.0) - } - } - impl Deref for Shared { type Target = T; @@ -69,12 +59,6 @@ pub mod generic { } } - impl std::ops::DerefMut for Shared { - fn deref_mut(&mut self) -> &mut Self::Target { - std::rc::Rc::get_mut(&mut self.0).expect("Multiple references exist") - } - } - #[repr(transparent)] #[derive(Clone, Debug)] pub struct SharedMut(std::rc::Rc>); @@ -104,14 +88,6 @@ pub mod generic { } } - impl Deref for SharedMut { - type Target = T; - - fn deref(&self) -> &Self::Target { - todo!() - } - } - pub trait TulispFn: Fn(&mut TulispContext, &TulispObject) -> Result + 'static { @@ -152,11 +128,11 @@ pub mod generic { } impl Shared { - pub fn new_tulisp_fn(val: impl TulispFn) -> Shared { + pub(crate) fn new_tulisp_fn(val: impl TulispFn) -> Shared { Shared(std::sync::Arc::new(val)) } - pub fn new_any(val: impl TulispAny) -> Shared { + pub fn new(val: impl TulispAny) -> Shared { Shared(std::sync::Arc::new(val)) } @@ -173,16 +149,6 @@ pub mod generic { } } - impl Shared { - pub fn new(val: T) -> Self { - Shared(std::sync::Arc::new(val)) - } - - pub fn ptr_eq(&self, other: &Self) -> bool { - std::sync::Arc::ptr_eq(&self.0, &other.0) - } - } - impl Deref for Shared { type Target = T; diff --git a/tests/tests.rs b/tests/tests.rs index 45242fa..cd1e2ef 100644 --- a/tests/tests.rs +++ b/tests/tests.rs @@ -1165,7 +1165,7 @@ fn test_any() -> Result<(), Error> { ctx.add_special_form("make_any", |ctx, args| { destruct_eval_bind!(ctx, (inp) = args); - let res: Shared = Shared::new_any(TestStruct { + let res: Shared = Shared::new(TestStruct { value: inp.try_into()?, });