@@ -45,6 +45,7 @@ impl Gc for BasicGc {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Default)]
|
||||||
pub struct BasicIntern {
|
pub struct BasicIntern {
|
||||||
strs: HashMap<String, ObjRef<Str>>,
|
strs: HashMap<String, ObjRef<Str>>,
|
||||||
syms: HashMap<String, Sym>,
|
syms: HashMap<String, Sym>,
|
||||||
|
|||||||
@@ -3,11 +3,12 @@ pub mod gc;
|
|||||||
pub mod intern;
|
pub mod intern;
|
||||||
pub mod ptr;
|
pub mod ptr;
|
||||||
|
|
||||||
pub use basic::BasicGc;
|
pub use basic::{BasicGc, BasicIntern};
|
||||||
|
|
||||||
pub mod prelude {
|
pub mod prelude {
|
||||||
pub use crate::mem::{
|
pub use crate::mem::{
|
||||||
BasicGc,
|
BasicGc,
|
||||||
|
BasicIntern,
|
||||||
gc::Gc,
|
gc::Gc,
|
||||||
intern::Intern,
|
intern::Intern,
|
||||||
ptr::{DynRef, ObjRef},
|
ptr::{DynRef, ObjRef},
|
||||||
|
|||||||
@@ -121,15 +121,16 @@ impl<'i, I: Intern> AttrsBuilder<'i, I> {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_attrs_new() {
|
fn test_attrs_new() {
|
||||||
use crate::mem::BasicGc;
|
use crate::mem::{BasicGc, BasicIntern};
|
||||||
|
|
||||||
let mut gc = BasicGc::default();
|
let mut gc = BasicGc::default();
|
||||||
|
let mut intern = BasicIntern::default();
|
||||||
|
|
||||||
let attrs_ref = Attrs::new(&mut gc, Default::default());
|
let attrs_ref = Attrs::new(&mut gc, Default::default());
|
||||||
|
|
||||||
{
|
{
|
||||||
let mut attrs = attrs_ref.borrow_mut();
|
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());
|
attrs.insert(sym, attrs_ref.as_dyn());
|
||||||
|
|
||||||
assert!(
|
assert!(
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ impl Obj for Str {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
self.marked.set(true);
|
self.marked.set(true);
|
||||||
todo!()
|
self.attrs.borrow().mark();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn unmark(&self) {
|
fn unmark(&self) {
|
||||||
|
|||||||
Reference in New Issue
Block a user