aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/trace.rs
diff options
context:
space:
mode:
authorIgor Matuszewski <Xanewok@gmail.com>2018-03-23 14:28:25 +0100
committerIgor Matuszewski <Xanewok@gmail.com>2018-03-23 17:31:34 +0100
commited0091f86f92f84442508b380ff9334511670c54 (patch)
treeaf9c76470c0340d0cf6cc1f080a2baf273e25621 /components/script/dom/bindings/trace.rs
parent8aa2ebef0c167db298b58af1bbbe0e07f40d2e2b (diff)
downloadservo-ed0091f86f92f84442508b380ff9334511670c54.tar.gz
servo-ed0091f86f92f84442508b380ff9334511670c54.zip
Add safe `handle` function for rooted heap values
Diffstat (limited to 'components/script/dom/bindings/trace.rs')
-rw-r--r--components/script/dom/bindings/trace.rs14
1 files changed, 12 insertions, 2 deletions
diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs
index 423b053cbbf..be38b14a540 100644
--- a/components/script/dom/bindings/trace.rs
+++ b/components/script/dom/bindings/trace.rs
@@ -59,9 +59,9 @@ use hyper::mime::Mime;
use hyper::status::StatusCode;
use ipc_channel::ipc::{IpcReceiver, IpcSender};
use js::glue::{CallObjectTracer, CallValueTracer};
-use js::jsapi::{GCTraceKindToAscii, Heap, JSObject, JSTracer, TraceKind};
+use js::jsapi::{GCTraceKindToAscii, Heap, Handle, JSObject, JSTracer, TraceKind};
use js::jsval::JSVal;
-use js::rust::Runtime;
+use js::rust::{GCMethods, Runtime};
use js::typedarray::TypedArray;
use js::typedarray::TypedArrayElement;
use metrics::{InteractiveMetrics, InteractiveWindow};
@@ -788,6 +788,16 @@ impl<T: JSTraceable + 'static> RootedTraceableBox<T> {
}
}
+impl<T> RootedTraceableBox<Heap<T>>
+ where
+ Heap<T>: JSTraceable + 'static,
+ T: GCMethods + Copy,
+{
+ pub fn handle(&self) -> Handle<T> {
+ unsafe { (*self.ptr).handle() }
+ }
+}
+
impl<T: JSTraceable + Default> Default for RootedTraceableBox<T> {
fn default() -> RootedTraceableBox<T> {
RootedTraceableBox::new(T::default())