Auto merge of #15561 - saneyuki:rm-domrefcell-heap, r=mbrubeck

Stop using DOMRefCell<Heap<..>>

Fix https://github.com/servo/servo/issues/15560

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/15561)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2017-02-15 11:11:40 -08:00 committed by GitHub
commit 3c8daca772
2 changed files with 21 additions and 17 deletions

View file

@ -43,5 +43,11 @@ impl EarlyLintPass for BanPass {
.is_some() {
cx.span_lint(BANNED_TYPE, ty.span, "Banned type DOMRefCell<JS<T>> detected. Use MutJS<JS<T>> instead")
}
if match_ty_unwrap(ty, &["dom", "bindings", "cell", "DOMRefCell"])
.and_then(|t| t.get(0))
.and_then(|t| match_ty_unwrap(&**t, &["js", "jsapi", "Heap"]))
.is_some() {
cx.span_lint(BANNED_TYPE, ty.span, "Banned type DOMRefCell<Heap<T>> detected. Use Heap<T> directly instead")
}
}
}

View file

@ -3,7 +3,6 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use core::nonzero::NonZero;
use dom::bindings::cell::DOMRefCell;
use dom::bindings::codegen::Bindings::VRPoseBinding;
use dom::bindings::codegen::Bindings::VRPoseBinding::VRPoseMethods;
use dom::bindings::js::Root;
@ -17,19 +16,18 @@ use webvr_traits::webvr;
#[dom_struct]
pub struct VRPose {
reflector_: Reflector,
position: DOMRefCell<Heap<*mut JSObject>>,
orientation: DOMRefCell<Heap<*mut JSObject>>,
linear_vel: DOMRefCell<Heap<*mut JSObject>>,
angular_vel: DOMRefCell<Heap<*mut JSObject>>,
linear_acc: DOMRefCell<Heap<*mut JSObject>>,
angular_acc: DOMRefCell<Heap<*mut JSObject>>
position: Heap<*mut JSObject>,
orientation: Heap<*mut JSObject>,
linear_vel: Heap<*mut JSObject>,
angular_vel: Heap<*mut JSObject>,
linear_acc: Heap<*mut JSObject>,
angular_acc: Heap<*mut JSObject>,
}
#[allow(unsafe_code)]
unsafe fn update_or_create_typed_array(cx: *mut JSContext,
src: Option<&[f32]>,
dst: &DOMRefCell<Heap<*mut JSObject>>) {
let dst = dst.borrow();
dst: &Heap<*mut JSObject>) {
match src {
Some(data) => {
if dst.get().is_null() {
@ -51,8 +49,8 @@ unsafe fn update_or_create_typed_array(cx: *mut JSContext,
#[inline]
#[allow(unsafe_code)]
fn heap_to_option(heap: &DOMRefCell<Heap<*mut JSObject>>) -> Option<NonZero<*mut JSObject>> {
let js_object = heap.borrow_mut().get();
fn heap_to_option(heap: &Heap<*mut JSObject>) -> Option<NonZero<*mut JSObject>> {
let js_object = heap.get();
if js_object.is_null() {
None
} else {
@ -66,12 +64,12 @@ impl VRPose {
fn new_inherited() -> VRPose {
VRPose {
reflector_: Reflector::new(),
position: DOMRefCell::new(Heap::default()),
orientation: DOMRefCell::new(Heap::default()),
linear_vel: DOMRefCell::new(Heap::default()),
angular_vel: DOMRefCell::new(Heap::default()),
linear_acc: DOMRefCell::new(Heap::default()),
angular_acc: DOMRefCell::new(Heap::default())
position: Heap::default(),
orientation: Heap::default(),
linear_vel: Heap::default(),
angular_vel: Heap::default(),
linear_acc: Heap::default(),
angular_acc: Heap::default(),
}
}