diff options
author | Tetsuharu OHZEKI <saneyuki.snyk@gmail.com> | 2014-09-20 00:04:02 +0900 |
---|---|---|
committer | Tetsuharu OHZEKI <saneyuki.snyk@gmail.com> | 2014-09-20 15:19:00 +0900 |
commit | 54d3a0b28010cd590ad5ebd4c516ff091b76908f (patch) | |
tree | 394947d8a6ccf13ccfb1f2dc9ecd2f714367f102 /components/script | |
parent | c51b8a07acbbfa8539b9234c7717a9af53a9e2b8 (diff) | |
download | servo-54d3a0b28010cd590ad5ebd4c516ff091b76908f.tar.gz servo-54d3a0b28010cd590ad5ebd4c516ff091b76908f.zip |
Reintroduce Untraceable<T>.deref_mut() to make mem::replace() possible to Untracebale<T> field.
Some compile errors caused by the compiler's misreading comes back again :(
We re-use `deref()`explicitly to hide these errors.
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/dom/bindings/trace.rs | 6 | ||||
-rw-r--r-- | components/script/dom/canvasrenderingcontext2d.rs | 8 | ||||
-rw-r--r-- | components/script/dom/dedicatedworkerglobalscope.rs | 2 | ||||
-rw-r--r-- | components/script/dom/workerglobalscope.rs | 4 | ||||
-rw-r--r-- | components/script/dom/workerlocation.rs | 2 |
5 files changed, 14 insertions, 8 deletions
diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs index b160508a761..837dec61f5a 100644 --- a/components/script/dom/bindings/trace.rs +++ b/components/script/dom/bindings/trace.rs @@ -132,6 +132,12 @@ impl<T> Deref<T> for Untraceable<T> { } } +impl<T> DerefMut<T> for Untraceable<T> { + fn deref_mut<'a>(&'a mut self) -> &'a mut T { + &mut self.inner + } +} + /// Encapsulates a type that can be traced but is boxed in a type we don't /// control (such as `RefCell`). /// diff --git a/components/script/dom/canvasrenderingcontext2d.rs b/components/script/dom/canvasrenderingcontext2d.rs index cc06b7fadfc..c96b63eae7c 100644 --- a/components/script/dom/canvasrenderingcontext2d.rs +++ b/components/script/dom/canvasrenderingcontext2d.rs @@ -41,7 +41,7 @@ impl CanvasRenderingContext2D { } pub fn recreate(&self, size: Size2D<i32>) { - self.renderer.send(Recreate(size)); + self.renderer.deref().send(Recreate(size)); } } @@ -52,17 +52,17 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> fn FillRect(&self, x: f64, y: f64, width: f64, height: f64) { let rect = Rect(Point2D(x as f32, y as f32), Size2D(width as f32, height as f32)); - self.renderer.send(FillRect(rect)); + self.renderer.deref().send(FillRect(rect)); } fn ClearRect(&self, x: f64, y: f64, width: f64, height: f64) { let rect = Rect(Point2D(x as f32, y as f32), Size2D(width as f32, height as f32)); - self.renderer.send(ClearRect(rect)); + self.renderer.deref().send(ClearRect(rect)); } fn StrokeRect(&self, x: f64, y: f64, width: f64, height: f64) { let rect = Rect(Point2D(x as f32, y as f32), Size2D(width as f32, height as f32)); - self.renderer.send(StrokeRect(rect)); + self.renderer.deref().send(StrokeRect(rect)); } } diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs index 749db8d61f7..a17cd511990 100644 --- a/components/script/dom/dedicatedworkerglobalscope.rs +++ b/components/script/dom/dedicatedworkerglobalscope.rs @@ -120,7 +120,7 @@ impl DedicatedWorkerGlobalScope { let target: JSRef<EventTarget> = EventTargetCast::from_ref(*global); loop { - match global.receiver.recv_opt() { + match global.receiver.deref().recv_opt() { Ok(DOMMessage(data, nbytes)) => { let mut message = UndefinedValue(); unsafe { diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs index 897fe2fbc64..b4aa3603ef4 100644 --- a/components/script/dom/workerglobalscope.rs +++ b/components/script/dom/workerglobalscope.rs @@ -85,7 +85,7 @@ impl<'a> WorkerGlobalScopeMethods for JSRef<'a, WorkerGlobalScope> { fn Location(&self) -> Temporary<WorkerLocation> { if self.location.get().is_none() { - let location = WorkerLocation::new(*self, self.worker_url.clone()); + let location = WorkerLocation::new(*self, self.worker_url.deref().clone()); self.location.assign(Some(location)); } Temporary::new(self.location.get().get_ref().clone()) @@ -110,7 +110,7 @@ impl<'a> WorkerGlobalScopeMethods for JSRef<'a, WorkerGlobalScope> { } }; - match self.js_context.evaluate_script( + match self.js_context.deref().evaluate_script( self.reflector().get_jsobject(), source, url.serialize(), 1) { Ok(_) => (), Err(_) => { diff --git a/components/script/dom/workerlocation.rs b/components/script/dom/workerlocation.rs index 7092b2979ec..05112c54a88 100644 --- a/components/script/dom/workerlocation.rs +++ b/components/script/dom/workerlocation.rs @@ -38,7 +38,7 @@ impl WorkerLocation { impl<'a> WorkerLocationMethods for JSRef<'a, WorkerLocation> { fn Href(&self) -> DOMString { - self.url.serialize() + self.url.deref().serialize() } fn Search(&self) -> DOMString { |