From b2f40b9873ac828610c3f97bc7408316b1c9c86f Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sat, 10 Jan 2015 16:39:00 +0100 Subject: [PATCH 1/2] Make Runnable::handler take self by value. With my thanks to kimundi and eddyb for their help in making this approach work. --- components/script/dom/worker.rs | 5 +++-- components/script/dom/xmlhttprequest.rs | 5 +++-- components/script/script_task.rs | 4 ++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/components/script/dom/worker.rs b/components/script/dom/worker.rs index 3822e4e538c..8fa36436c19 100644 --- a/components/script/dom/worker.rs +++ b/components/script/dom/worker.rs @@ -115,7 +115,8 @@ impl WorkerMessageHandler { } impl Runnable for WorkerMessageHandler { - fn handler(&self){ - Worker::handle_message(self.addr.clone(), self.data); + fn handler(self: Box) { + let this = *self; + Worker::handle_message(this.addr, this.data); } } diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs index beee21798af..a5d5c767a72 100644 --- a/components/script/dom/xmlhttprequest.rs +++ b/components/script/dom/xmlhttprequest.rs @@ -85,8 +85,9 @@ impl XHRProgressHandler { } impl Runnable for XHRProgressHandler { - fn handler(&self) { - XMLHttpRequest::handle_progress(self.addr.clone(), self.progress.clone()); + fn handler(self: Box) { + let this = *self; + XMLHttpRequest::handle_progress(this.addr, this.progress); } } diff --git a/components/script/script_task.rs b/components/script/script_task.rs index 4783d8539f4..46488446b9d 100644 --- a/components/script/script_task.rs +++ b/components/script/script_task.rs @@ -96,7 +96,7 @@ pub enum TimerSource { } pub trait Runnable { - fn handler(&self); + fn handler(self: Box); } /// Messages used to control script event loops, such as ScriptTask and @@ -1385,7 +1385,7 @@ impl DocumentProgressHandler { } impl Runnable for DocumentProgressHandler { - fn handler(&self) { + fn handler(self: Box) { match self.task { DocumentProgressTask::DOMContentLoaded => { self.dispatch_dom_content_loaded(); From 01444022b0e4d48fbbff6f078d76e382c4aa5a22 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sat, 10 Jan 2015 17:44:55 +0100 Subject: [PATCH 2/2] Make StructuredCloneData an opaque struct. --- components/script/dom/bindings/structuredclone.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/components/script/dom/bindings/structuredclone.rs b/components/script/dom/bindings/structuredclone.rs index 843b7bea30c..f426c6f4677 100644 --- a/components/script/dom/bindings/structuredclone.rs +++ b/components/script/dom/bindings/structuredclone.rs @@ -15,11 +15,9 @@ use js::jsval::{JSVal, UndefinedValue}; use libc::size_t; use std::ptr; -#[allow(raw_pointer_deriving)] -#[deriving(Copy)] pub struct StructuredCloneData { - pub data: *mut u64, - pub nbytes: size_t, + data: *mut u64, + nbytes: size_t, } impl StructuredCloneData {