From 81089d137749472f91bf5b8f1f91331c4ec4d354 Mon Sep 17 00:00:00 2001 From: Halid Odat Date: Sun, 13 Sep 2020 12:41:26 +0200 Subject: [PATCH] Feature `gc` module (#694) --- boa/examples/classes.rs | 3 ++- boa/src/class.rs | 3 ++- boa/src/gc.rs | 11 +++++++++++ boa/src/lib.rs | 2 +- 4 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 boa/src/gc.rs diff --git a/boa/examples/classes.rs b/boa/examples/classes.rs index b0706ca79b..7f62147c8e 100644 --- a/boa/examples/classes.rs +++ b/boa/examples/classes.rs @@ -1,7 +1,8 @@ use boa::{ class::{Class, ClassBuilder}, + gc::{Finalize, Trace}, property::Attribute, - Context, Finalize, Result, Trace, Value, + Context, Result, Value, }; // We create a new struct that is going to represent a person. diff --git a/boa/src/class.rs b/boa/src/class.rs index e754bddef9..e3d4200421 100644 --- a/boa/src/class.rs +++ b/boa/src/class.rs @@ -5,7 +5,8 @@ //!# use boa::{ //!# property::Attribute, //!# class::{Class, ClassBuilder}, -//!# Context, Finalize, Result, Trace, Value, +//!# gc::{Finalize, Trace}, +//!# Context, Result, Value, //!# }; //!# //! // This does not have to be an enum it can also be a struct. diff --git a/boa/src/gc.rs b/boa/src/gc.rs new file mode 100644 index 0000000000..a0413e2056 --- /dev/null +++ b/boa/src/gc.rs @@ -0,0 +1,11 @@ +//! This module represents the main way to interact with the garbacge collector. + +// This is because `rust-gc` unsafe_empty_trace has a `unsafe_` +// when it should be `empty_trace`. +#![allow(clippy::unsafe_removed_from_name)] + +pub use crate::object::GcObject; +pub use ::gc::{ + custom_trace, force_collect, unsafe_empty_trace as empty_trace, Finalize, GcCellRef as Ref, + GcCellRefMut as RefMut, Trace, +}; diff --git a/boa/src/lib.rs b/boa/src/lib.rs index 591634780d..3718825c4e 100644 --- a/boa/src/lib.rs +++ b/boa/src/lib.rs @@ -38,6 +38,7 @@ pub mod builtins; pub mod class; pub mod environment; pub mod exec; +pub mod gc; pub mod object; pub mod profiler; pub mod property; @@ -50,7 +51,6 @@ mod context; use std::result::Result as StdResult; pub(crate) use crate::{exec::Executable, profiler::BoaProfiler}; -pub use gc::{custom_trace, unsafe_empty_trace, Finalize, Trace}; // Export things to root level pub use crate::{context::Context, value::Value};