aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
Diffstat (limited to 'components/script')
-rw-r--r--components/script/dom/attr.rs2
-rw-r--r--components/script/dom/bindings/js.rs31
-rw-r--r--components/script/dom/document.rs13
-rw-r--r--components/script/dom/event.rs4
-rw-r--r--components/script/dom/filereader.rs6
-rw-r--r--components/script/dom/mouseevent.rs2
-rw-r--r--components/script/dom/node.rs44
-rw-r--r--components/script/dom/nodelist.rs27
-rw-r--r--components/script/dom/uievent.rs2
-rw-r--r--components/script/dom/webglprogram.rs2
-rw-r--r--components/script/dom/webglrenderingcontext.rs2
11 files changed, 68 insertions, 67 deletions
diff --git a/components/script/dom/attr.rs b/components/script/dom/attr.rs
index 465ed0f4042..e4241f713ad 100644
--- a/components/script/dom/attr.rs
+++ b/components/script/dom/attr.rs
@@ -315,7 +315,7 @@ impl Attr {
}
(old, new) => assert!(old == new)
}
- self.owner.set(owner.map(JS::from_ref))
+ self.owner.set(owner);
}
pub fn owner(&self) -> Option<Root<Element>> {
diff --git a/components/script/dom/bindings/js.rs b/components/script/dom/bindings/js.rs
index c7365a13bf8..31f6b8c4100 100644
--- a/components/script/dom/bindings/js.rs
+++ b/components/script/dom/bindings/js.rs
@@ -254,16 +254,6 @@ impl<T: HeapGCValue> MutNullableHeap<T> {
ptr: UnsafeCell::new(initial)
}
}
-
- /// Set this `MutNullableHeap` to the given value.
- pub fn set(&self, val: Option<T>) {
- unsafe { *self.ptr.get() = val; }
- }
-
- /// Retrieve a copy of the current optional inner value.
- pub fn get(&self) -> Option<T> {
- unsafe { ptr::read(self.ptr.get()) }
- }
}
impl<T: Reflectable> MutNullableHeap<JS<T>> {
@@ -273,10 +263,10 @@ impl<T: Reflectable> MutNullableHeap<JS<T>> {
where F: FnOnce() -> Root<T>
{
match self.get() {
- Some(inner) => Root::from_rooted(inner),
+ Some(inner) => inner,
None => {
let inner = cb();
- self.set(Some(JS::from_rooted(&inner)));
+ self.set(Some(&inner));
inner
},
}
@@ -289,9 +279,22 @@ impl<T: Reflectable> MutNullableHeap<JS<T>> {
}
/// Get a rooted value out of this object
- // FIXME(#6684)
+ pub fn get(&self) -> Option<Root<T>> {
+ unsafe {
+ ptr::read(self.ptr.get()).map(|o| o.root())
+ }
+ }
+
+ /// Get a rooted value out of this object
pub fn get_rooted(&self) -> Option<Root<T>> {
- self.get().map(|o| o.root())
+ self.get()
+ }
+
+ /// Set this `MutNullableHeap` to the given value.
+ pub fn set(&self, val: Option<&T>) {
+ unsafe {
+ *self.ptr.get() = val.map(|p| JS::from_ref(p));
+ }
}
}
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs
index 0419895233b..b849280e685 100644
--- a/components/script/dom/document.rs
+++ b/components/script/dom/document.rs
@@ -297,7 +297,7 @@ impl Document {
.filter_map(HTMLBaseElementCast::to_root)
.filter(|element| ElementCast::from_ref(&**element).has_attribute(&atom!("href")))
.next();
- self.base_element.set(base.map(|element| JS::from_ref(&*element)));
+ self.base_element.set(base.as_ref().map(Root::r));
}
pub fn quirks_mode(&self) -> QuirksMode {
@@ -506,7 +506,7 @@ impl Document {
/// Request that the given element receive focus once the current transaction is complete.
pub fn request_focus(&self, elem: &Element) {
if elem.is_focusable_area() {
- self.possibly_focused.set(Some(JS::from_ref(elem)))
+ self.possibly_focused.set(Some(elem))
}
}
@@ -520,7 +520,7 @@ impl Document {
node.set_focus_state(false);
}
- self.focused.set(self.possibly_focused.get());
+ self.focused.set(self.possibly_focused.get().r());
if let Some(ref elem) = self.focused.get_rooted() {
let node = NodeCast::from_ref(elem.r());
@@ -852,7 +852,7 @@ impl Document {
}
pub fn set_current_script(&self, script: Option<&HTMLScriptElement>) {
- self.current_script.set(script.map(JS::from_ref));
+ self.current_script.set(script);
}
pub fn trigger_mozbrowser_event(&self, event: MozBrowserEvent) {
@@ -959,7 +959,7 @@ impl Document {
}
pub fn set_current_parser(&self, script: Option<&ServoHTMLParser>) {
- self.current_parser.set(script.map(JS::from_ref));
+ self.current_parser.set(script);
}
pub fn get_current_parser(&self) -> Option<Root<ServoHTMLParser>> {
@@ -1119,8 +1119,7 @@ impl Document {
let new_doc = Document::new(
&*self.window(), None, doctype, None, None,
DocumentSource::NotFromParser, DocumentLoader::new(&self.loader()));
- new_doc.appropriate_template_contents_owner_document.set(
- Some(JS::from_ref(&*new_doc)));
+ new_doc.appropriate_template_contents_owner_document.set(Some(&new_doc));
new_doc
})
}
diff --git a/components/script/dom/event.rs b/components/script/dom/event.rs
index c3a8a52dc55..10118923f56 100644
--- a/components/script/dom/event.rs
+++ b/components/script/dom/event.rs
@@ -106,12 +106,12 @@ impl Event {
#[inline]
pub fn set_current_target(&self, val: &EventTarget) {
- self.current_target.set(Some(JS::from_ref(val)));
+ self.current_target.set(Some(val));
}
#[inline]
pub fn set_target(&self, val: &EventTarget) {
- self.target.set(Some(JS::from_ref(val)));
+ self.target.set(Some(val));
}
#[inline]
diff --git a/components/script/dom/filereader.rs b/components/script/dom/filereader.rs
index 3ae20361ab6..a659908f31c 100644
--- a/components/script/dom/filereader.rs
+++ b/components/script/dom/filereader.rs
@@ -116,7 +116,7 @@ impl FileReader {
let global = fr.global.root();
let exception = DOMException::new(global.r(), error);
- fr.error.set(Some(JS::from_rooted(&exception)));
+ fr.error.set(Some(&exception));
fr.dispatch_progress_event("error".to_owned(), 0, None);
return_on_abort!();
@@ -292,7 +292,7 @@ impl FileReaderMethods for FileReader {
let global = self.global.root();
let exception = DOMException::new(global.r(), DOMErrorName::AbortError);
- self.error.set(Some(JS::from_rooted(&exception)));
+ self.error.set(Some(&exception));
self.terminate_ongoing_reading();
// Steps 5 & 6
@@ -346,7 +346,7 @@ impl FileReader {
if blob.IsClosed() {
let global = self.global.root();
let exception = DOMException::new(global.r(), DOMErrorName::InvalidStateError);
- self.error.set(Some(JS::from_rooted(&exception)));
+ self.error.set(Some(&exception));
self.dispatch_progress_event("error".to_owned(), 0, None);
return Ok(());
diff --git a/components/script/dom/mouseevent.rs b/components/script/dom/mouseevent.rs
index 5f05fc97b77..eb57489c1e4 100644
--- a/components/script/dom/mouseevent.rs
+++ b/components/script/dom/mouseevent.rs
@@ -205,6 +205,6 @@ impl MouseEventMethods for MouseEvent {
self.shift_key.set(shiftKeyArg);
self.meta_key.set(metaKeyArg);
self.button.set(buttonArg);
- self.related_target.set(relatedTargetArg.map(JS::from_ref));
+ self.related_target.set(relatedTargetArg);
}
}
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs
index d5e7f5c6e83..35f00ef0a37 100644
--- a/components/script/dom/node.rs
+++ b/components/script/dom/node.rs
@@ -271,32 +271,32 @@ impl Node {
match prev_sibling {
None => {
assert!(Some(*before) == self.first_child.get_rooted().r());
- self.first_child.set(Some(JS::from_ref(new_child)));
+ self.first_child.set(Some(new_child));
},
Some(ref prev_sibling) => {
- prev_sibling.next_sibling.set(Some(JS::from_ref(new_child)));
- new_child.prev_sibling.set(Some(JS::from_ref(prev_sibling.r())));
+ prev_sibling.next_sibling.set(Some(new_child));
+ new_child.prev_sibling.set(Some(prev_sibling.r()));
},
}
- before.prev_sibling.set(Some(JS::from_ref(new_child)));
- new_child.next_sibling.set(Some(JS::from_ref(before)));
+ before.prev_sibling.set(Some(new_child));
+ new_child.next_sibling.set(Some(before));
},
None => {
let last_child = self.GetLastChild();
match last_child {
- None => self.first_child.set(Some(JS::from_ref(new_child))),
+ None => self.first_child.set(Some(new_child)),
Some(ref last_child) => {
assert!(last_child.next_sibling.get().is_none());
- last_child.r().next_sibling.set(Some(JS::from_ref(new_child)));
- new_child.prev_sibling.set(Some(JS::from_rooted(&last_child)));
+ last_child.r().next_sibling.set(Some(new_child));
+ new_child.prev_sibling.set(Some(&last_child));
}
}
- self.last_child.set(Some(JS::from_ref(new_child)));
+ self.last_child.set(Some(new_child));
},
}
- new_child.parent_node.set(Some(JS::from_ref(self)));
+ new_child.parent_node.set(Some(self));
let parent_in_doc = self.is_in_doc();
for node in new_child.traverse_preorder() {
@@ -315,19 +315,19 @@ impl Node {
let prev_sibling = child.GetPreviousSibling();
match prev_sibling {
None => {
- self.first_child.set(child.next_sibling.get());
+ self.first_child.set(child.next_sibling.get().r());
}
Some(ref prev_sibling) => {
- prev_sibling.next_sibling.set(child.next_sibling.get());
+ prev_sibling.next_sibling.set(child.next_sibling.get().r());
}
}
let next_sibling = child.GetNextSibling();
match next_sibling {
None => {
- self.last_child.set(child.prev_sibling.get());
+ self.last_child.set(child.prev_sibling.get().r());
}
Some(ref next_sibling) => {
- next_sibling.prev_sibling.set(child.prev_sibling.get());
+ next_sibling.prev_sibling.set(child.prev_sibling.get().r());
}
}
@@ -591,7 +591,7 @@ impl Node {
match self.parent_node.get() {
None => return,
Some(parent) => parent,
- }.root();
+ };
for sibling in parent.r().children() {
sibling.r().set_has_dirty_siblings(true);
@@ -660,7 +660,7 @@ impl Node {
pub fn is_parent_of(&self, child: &Node) -> bool {
match child.parent_node.get() {
- Some(ref parent) => parent.root().r() == self,
+ Some(ref parent) => parent.r() == self,
None => false,
}
}
@@ -689,7 +689,7 @@ impl Node {
// Step 2.
let parent = match parent.get() {
None => return Ok(()),
- Some(ref parent) => parent.root(),
+ Some(parent) => parent,
};
// Step 3.
@@ -702,7 +702,7 @@ impl Node {
let viable_previous_sibling = match viable_previous_sibling {
Some(ref viable_previous_sibling) => viable_previous_sibling.next_sibling.get(),
None => parent.first_child.get(),
- }.map(|s| s.root());
+ };
// Step 6.
try!(Node::pre_insert(&node, &parent, viable_previous_sibling.r()));
@@ -718,7 +718,7 @@ impl Node {
// Step 2.
let parent = match parent.get() {
None => return Ok(()),
- Some(ref parent) => parent.root(),
+ Some(parent) => parent,
};
// Step 3.
@@ -745,7 +745,7 @@ impl Node {
let doc = self.owner_doc();
let node = try!(doc.r().node_from_nodes_and_strings(nodes));
// Step 3.
- parent_node.root().r().ReplaceChild(node.r(), self).map(|_| ())
+ parent_node.r().ReplaceChild(node.r(), self).map(|_| ())
},
}
}
@@ -823,11 +823,11 @@ impl Node {
}
pub fn owner_doc(&self) -> Root<Document> {
- self.owner_doc.get().unwrap().root()
+ self.owner_doc.get().unwrap()
}
pub fn set_owner_doc(&self, document: &Document) {
- self.owner_doc.set(Some(JS::from_ref(document)));
+ self.owner_doc.set(Some(document));
}
pub fn is_in_html_doc(&self) -> bool {
diff --git a/components/script/dom/nodelist.rs b/components/script/dom/nodelist.rs
index dfea6e98eb4..f86c1204a1c 100644
--- a/components/script/dom/nodelist.rs
+++ b/components/script/dom/nodelist.rs
@@ -127,14 +127,14 @@ impl ChildrenList {
let last_index = self.last_index.get();
if index == last_index {
// Item is last visited child, no need to update last visited.
- return Some(self.last_visited.get().unwrap().root());
+ return Some(self.last_visited.get().unwrap());
}
let last_visited = if index - 1u32 == last_index {
// Item is last visited's next sibling.
- self.last_visited.get().unwrap().root().GetNextSibling().unwrap()
+ self.last_visited.get().unwrap().GetNextSibling().unwrap()
} else if last_index > 0 && index == last_index - 1u32 {
// Item is last visited's previous sibling.
- self.last_visited.get().unwrap().root().GetPreviousSibling().unwrap()
+ self.last_visited.get().unwrap().GetPreviousSibling().unwrap()
} else if index > last_index {
if index == len - 1u32 {
// Item is parent's last child, not worth updating last visited.
@@ -142,7 +142,7 @@ impl ChildrenList {
}
if index <= last_index + (len - last_index) / 2u32 {
// Item is closer to the last visited child and follows it.
- self.last_visited.get().unwrap().root()
+ self.last_visited.get().unwrap()
.inclusively_following_siblings()
.nth((index - last_index) as usize).unwrap()
} else {
@@ -154,7 +154,7 @@ impl ChildrenList {
}
} else if index >= last_index / 2u32 {
// Item is closer to the last visited child and precedes it.
- self.last_visited.get().unwrap().root()
+ self.last_visited.get().unwrap()
.inclusively_preceding_siblings()
.nth((last_index - index) as usize).unwrap()
} else {
@@ -165,7 +165,7 @@ impl ChildrenList {
.nth(index as usize)
.unwrap()
};
- self.last_visited.set(Some(JS::from_rooted(&last_visited)));
+ self.last_visited.set(Some(last_visited.r()));
self.last_index.set(index);
Some(last_visited)
}
@@ -178,7 +178,7 @@ impl ChildrenList {
}
let index = list.last_index.get();
if index < len {
- list.last_visited.set(Some(JS::from_ref(added[index as usize])));
+ list.last_visited.set(Some(added[index as usize]));
} else if index / 2u32 >= len {
// If last index is twice as large as the number of added nodes,
// updating only it means that less nodes will be traversed if
@@ -187,7 +187,7 @@ impl ChildrenList {
} else {
// If last index is not twice as large but still larger,
// it's better to update it to the number of added nodes.
- list.last_visited.set(Some(JS::from_ref(next)));
+ list.last_visited.set(Some(next));
list.last_index.set(len);
}
}
@@ -198,7 +198,7 @@ impl ChildrenList {
added: &[&Node],
next: Option<&Node>) {
let index = list.last_index.get();
- if removed == &*list.last_visited.get().unwrap().root() {
+ if removed == &*list.last_visited.get().unwrap() {
let visited = match (prev, added, next) {
(None, _, None) => {
// Such cases where parent had only one child should
@@ -213,7 +213,7 @@ impl ChildrenList {
prev
},
};
- list.last_visited.set(Some(JS::from_ref(visited)));
+ list.last_visited.set(Some(visited));
} else if added.len() != 1 {
// The replaced child isn't the last visited one, and there are
// 0 or more than 1 nodes to replace it. Special care must be
@@ -250,13 +250,13 @@ impl ChildrenList {
self.last_visited.set(None);
self.last_index.set(0u32);
} else if index < len as u32 {
- self.last_visited.set(Some(JS::from_ref(added[index as usize])));
+ self.last_visited.set(Some(added[index as usize]));
} else {
// Setting last visited to parent's last child serves no purpose,
// so the middle is arbitrarily chosen here in case the caller
// wants random access.
let middle = len / 2;
- self.last_visited.set(Some(JS::from_ref(added[middle])));
+ self.last_visited.set(Some(added[middle]));
self.last_index.set(middle as u32);
}
},
@@ -264,8 +264,7 @@ impl ChildrenList {
}
fn reset(&self) {
- self.last_visited.set(
- self.node.root().GetFirstChild().map(|node| JS::from_rooted(&node)));
+ self.last_visited.set(self.node.root().GetFirstChild().as_ref().map(Root::r));
self.last_index.set(0u32);
}
}
diff --git a/components/script/dom/uievent.rs b/components/script/dom/uievent.rs
index a28783bc6e4..f01f8476356 100644
--- a/components/script/dom/uievent.rs
+++ b/components/script/dom/uievent.rs
@@ -92,7 +92,7 @@ impl UIEventMethods for UIEvent {
}
event.InitEvent(type_, can_bubble, cancelable);
- self.view.set(view.map(JS::from_ref));
+ self.view.set(view);
self.detail.set(detail);
}
}
diff --git a/components/script/dom/webglprogram.rs b/components/script/dom/webglprogram.rs
index 37dfc3d7904..997f48c96b4 100644
--- a/components/script/dom/webglprogram.rs
+++ b/components/script/dom/webglprogram.rs
@@ -86,7 +86,7 @@ impl WebGLProgram {
return Err(WebGLError::InvalidOperation);
}
- shader_slot.set(Some(JS::from_ref(shader)));
+ shader_slot.set(Some(shader));
self.renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::AttachShader(self.id, shader.id()))).unwrap();
diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs
index 493d383fd47..0b968b4b42f 100644
--- a/components/script/dom/webglrenderingcontext.rs
+++ b/components/script/dom/webglrenderingcontext.rs
@@ -360,7 +360,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
if let Some(texture) = texture {
match texture.bind(target) {
- Ok(_) => slot.set(Some(JS::from_ref(texture))),
+ Ok(_) => slot.set(Some(texture)),
Err(err) => return self.webgl_error(err),
}
} else {