Auto merge of #6688 - Manishearth:smarter-root-lint, r=jdm

Handle type parameters in unused_must_root

fixes #6651

<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/6688)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2015-07-22 07:05:31 -06:00
commit 8a6681ba70
11 changed files with 118 additions and 57 deletions

View file

@ -81,6 +81,7 @@ impl<T: Reflectable> JS<T> {
/// An unrooted reference to a DOM object for use in layout. `Layout*Helpers`
/// traits must be implemented on this.
#[allow_unrooted_interior]
pub struct LayoutJS<T> {
ptr: NonZero<*const T>
}
@ -270,6 +271,12 @@ impl<T: Reflectable> MutNullableHeap<JS<T>> {
pub unsafe fn get_inner_as_layout(&self) -> Option<LayoutJS<T>> {
self.ptr.get().map(|js| js.to_layout())
}
/// Get a rooted value out of this object
// FIXME(#6684)
pub fn get_rooted(&self) -> Option<Root<T>> {
self.get().map(|o| o.root())
}
}
impl<T: HeapGCValue+Copy> Default for MutNullableHeap<T> {
@ -382,6 +389,7 @@ pub unsafe fn trace_roots(tracer: *mut JSTracer) {
/// are additive, so this object's destruction will not invalidate other roots
/// for the same JS value. `Root`s cannot outlive the associated
/// `RootCollection` object.
#[allow_unrooted_interior]
pub struct Root<T: Reflectable> {
/// Reference to rooted value that must not outlive this container
ptr: NonZero<*const T>,

View file

@ -57,6 +57,7 @@ unsafe impl Send for TrustedReference {}
/// shared among tasks for use in asynchronous operations. The underlying
/// DOM object is guaranteed to live at least as long as the last outstanding
/// `Trusted<T>` instance.
#[allow_unrooted_interior]
pub struct Trusted<T: Reflectable> {
/// A pointer to the Rust DOM object of type T, but void to allow
/// sending `Trusted<T>` between tasks, regardless of T's sendability.

View file

@ -455,6 +455,7 @@ impl<'a, T: JSTraceable> Drop for RootedTraceable<'a, T> {
#[allow(unrooted_must_root)]
#[no_move]
#[derive(JSTraceable)]
#[allow_unrooted_interior]
pub struct RootedVec<T: JSTraceable + Reflectable> {
v: Vec<T>
}

View file

@ -413,8 +413,7 @@ pub fn reflect_dom_object<T: Reflectable>
}
/// A struct to store a reference to the reflector of a DOM object.
// Allowing unused_attribute because the lint sometimes doesn't run in order
#[allow(raw_pointer_derive, unrooted_must_root, unused_attributes)]
#[allow(raw_pointer_derive, unrooted_must_root)]
#[must_root]
#[servo_lang = "reflector"]
// If you're renaming or moving this field, update the path in plugins::reflector as well