diff --git a/src/mem/basic.rs b/src/mem/basic.rs index dcffafe..9838511 100644 --- a/src/mem/basic.rs +++ b/src/mem/basic.rs @@ -45,6 +45,7 @@ impl Gc for BasicGc { } } +#[derive(Default)] pub struct BasicIntern { strs: HashMap>, syms: HashMap, diff --git a/src/mem/mod.rs b/src/mem/mod.rs index f2d9f88..f6e6378 100644 --- a/src/mem/mod.rs +++ b/src/mem/mod.rs @@ -3,11 +3,12 @@ pub mod gc; pub mod intern; pub mod ptr; -pub use basic::BasicGc; +pub use basic::{BasicGc, BasicIntern}; pub mod prelude { pub use crate::mem::{ BasicGc, + BasicIntern, gc::Gc, intern::Intern, ptr::{DynRef, ObjRef}, diff --git a/src/obj/attrs.rs b/src/obj/attrs.rs index 0544c1c..af7aaa5 100644 --- a/src/obj/attrs.rs +++ b/src/obj/attrs.rs @@ -121,15 +121,16 @@ impl<'i, I: Intern> AttrsBuilder<'i, I> { #[test] fn test_attrs_new() { - use crate::mem::BasicGc; + use crate::mem::{BasicGc, BasicIntern}; let mut gc = BasicGc::default(); + let mut intern = BasicIntern::default(); let attrs_ref = Attrs::new(&mut gc, Default::default()); { let mut attrs = attrs_ref.borrow_mut(); - let sym = gc.add_sym("symbol"); + let sym = intern.intern_sym("symbol"); attrs.insert(sym, attrs_ref.as_dyn()); assert!( diff --git a/src/obj/str.rs b/src/obj/str.rs index bcf5a19..9b0979d 100644 --- a/src/obj/str.rs +++ b/src/obj/str.rs @@ -44,7 +44,7 @@ impl Obj for Str { return; } self.marked.set(true); - todo!() + self.attrs.borrow().mark(); } fn unmark(&self) {