mirror of
https://github.com/servo/servo.git
synced 2025-08-05 21:50:18 +01:00
Auto merge of #11872 - eddyb:back-to-roots, r=Ms2ger
Replace return_address usage for rooting with stack guards and convenience macros. The existing `Rooted` and `RootedVec` users were migrated the the following two macros: ```rust let x = Rooted::new(cx, value); // Was changed to: rooted!(in(cx) let x = value); // Which expands to: let mut __root = Rooted::new_unrooted(value); let x = RootedGuard::new(cx, &mut __root); ``` ```rust let mut v = RootedVec::new(); v.extend(iterator); // Was changed to: rooted_vec!(let v <- iterator); // Which expands to: let mut __root = RootableVec::new(); let v = RootedVec::new(&mut __root, iterator); ``` The `rooted!` macro depends on servo/rust-mozjs#272. These APIs based on two types, a container to be rooted and a rooting guard, allow implementing both `Rooted`-style rooting and `Traceable`-based rooting in stable Rust, without abusing `return_address`. Such macros may have been tried before, but in 1.9 their hygiene is broken, they work only since 1.10. Sadly, `Rooted` is a FFI type and completely exposed, so I cannot prevent anyone from creating their own, although all fields but the value get overwritten by `RootedGuard::new` anyway. `RootableVec` OTOH is *guaranteed* to be empty when not rooted, which makes it harmless AFAICT. By fixing rust-lang/rust#34227, this PR enables Servo to build with `-Zorbit`. --- - [x] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors - [x] These changes fix rust-lang/rust#34227 - [x] These changes do not require tests because they are not functional changes <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/11872) <!-- Reviewable:end -->
This commit is contained in:
commit
80cb0cf821
33 changed files with 315 additions and 308 deletions
|
@ -28,7 +28,6 @@ use dom::bindings::num::Finite;
|
|||
use dom::bindings::refcounted::Trusted;
|
||||
use dom::bindings::reflector::{Reflectable, reflect_dom_object};
|
||||
use dom::bindings::str::{DOMString, USVString};
|
||||
use dom::bindings::trace::RootedVec;
|
||||
use dom::bindings::xmlname::XMLName::InvalidXMLName;
|
||||
use dom::bindings::xmlname::{validate_and_extract, namespace_from_domstring, xml_name_type};
|
||||
use dom::browsingcontext::BrowsingContext;
|
||||
|
@ -115,6 +114,7 @@ use std::cell::{Cell, Ref, RefMut};
|
|||
use std::collections::HashMap;
|
||||
use std::collections::hash_map::Entry::{Occupied, Vacant};
|
||||
use std::default::Default;
|
||||
use std::iter::once;
|
||||
use std::mem;
|
||||
use std::ptr;
|
||||
use std::rc::Rc;
|
||||
|
@ -1009,18 +1009,15 @@ impl Document {
|
|||
}
|
||||
}
|
||||
|
||||
let mut touches = RootedVec::new();
|
||||
rooted_vec!(let mut touches);
|
||||
touches.extend(self.active_touch_points.borrow().iter().cloned());
|
||||
|
||||
let mut changed_touches = RootedVec::new();
|
||||
changed_touches.push(JS::from_ref(&*touch));
|
||||
|
||||
let mut target_touches = RootedVec::new();
|
||||
rooted_vec!(let mut target_touches);
|
||||
target_touches.extend(self.active_touch_points
|
||||
.borrow()
|
||||
.iter()
|
||||
.filter(|t| t.Target() == target)
|
||||
.cloned());
|
||||
rooted_vec!(let changed_touches <- once(touch));
|
||||
|
||||
let event = TouchEvent::new(window,
|
||||
DOMString::from(event_name),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue