aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script
diff options
context:
space:
mode:
authorbors-servo <release+servo@mozilla.com>2013-09-11 16:00:56 -0700
committerbors-servo <release+servo@mozilla.com>2013-09-11 16:00:56 -0700
commit2372a841494dce56bc56467f2bcdb77ffa997cdd (patch)
treedceb9caf5af5db0a6cb3a7b64905bb8568394e03 /src/components/script
parent39252b25f792ae1b9c7e7d269083b18d29d9101a (diff)
parent636c30affeec0578a9ecb36adf9b6ec702d56bb9 (diff)
downloadservo-2372a841494dce56bc56467f2bcdb77ffa997cdd.tar.gz
servo-2372a841494dce56bc56467f2bcdb77ffa997cdd.zip
auto merge of #908 : jdm/servo/gccrash, r=metajack
Diffstat (limited to 'src/components/script')
-rw-r--r--src/components/script/dom/bindings/codegen/Bindings.conf5
-rw-r--r--src/components/script/dom/bindings/codegen/CodegenRust.py28
-rw-r--r--src/components/script/dom/bindings/node.rs2
-rw-r--r--src/components/script/dom/document.rs33
-rw-r--r--src/components/script/dom/window.rs32
-rw-r--r--src/components/script/script_task.rs3
6 files changed, 65 insertions, 38 deletions
diff --git a/src/components/script/dom/bindings/codegen/Bindings.conf b/src/components/script/dom/bindings/codegen/Bindings.conf
index 0ef1d9d502a..709509792e1 100644
--- a/src/components/script/dom/bindings/codegen/Bindings.conf
+++ b/src/components/script/dom/bindings/codegen/Bindings.conf
@@ -143,6 +143,7 @@ DOMInterfaces = {
'Document': {
'nativeType': 'AbstractDocument',
'pointerType': '',
+ 'customTrace': 'trace'
},
'DOMParser': {
@@ -228,6 +229,7 @@ DOMInterfaces = {
'HTMLDocument': {
'nativeType': 'AbstractDocument',
'pointerType': '',
+ 'customTrace': 'trace'
},
'HTMLFormElement': {
@@ -433,7 +435,8 @@ DOMInterfaces = {
}],
'Window': {
- 'createGlobal': True
+ 'createGlobal': True,
+ 'customTrace': 'trace'
},
'WindowProxy': {
diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py
index 0e01fcef059..44946cef991 100644
--- a/src/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/src/components/script/dom/bindings/codegen/CodegenRust.py
@@ -2221,13 +2221,13 @@ static Class_name: [u8, ..%i] = %s;
static Class: DOMJSClass = DOMJSClass {
base: JSClass { name: &Class_name as *u8 as *libc::c_char,
flags: JSCLASS_IS_DOMJSCLASS | %s | (((%s) & JSCLASS_RESERVED_SLOTS_MASK) << JSCLASS_RESERVED_SLOTS_SHIFT), //JSCLASS_HAS_RESERVED_SLOTS(%s),
- addProperty: %s, /* addProperty */
- delProperty: crust::JS_PropertyStub, /* delProperty */
- getProperty: crust::JS_PropertyStub, /* getProperty */
- setProperty: crust::JS_StrictPropertyStub, /* setProperty */
- enumerate: crust::JS_EnumerateStub,
- resolve: crust::JS_ResolveStub,
- convert: crust::JS_ConvertStub,
+ addProperty: Some(%s), /* addProperty */
+ delProperty: Some(crust::JS_PropertyStub), /* delProperty */
+ getProperty: Some(crust::JS_PropertyStub), /* getProperty */
+ setProperty: Some(crust::JS_StrictPropertyStub), /* setProperty */
+ enumerate: Some(crust::JS_EnumerateStub),
+ resolve: Some(crust::JS_ResolveStub),
+ convert: Some(crust::JS_ConvertStub),
finalize: Some(%s), /* finalize */
checkAccess: None, /* checkAccess */
call: None, /* call */
@@ -2269,13 +2269,13 @@ static PrototypeClassName__: [u8, ..%s] = %s;
static PrototypeClass: JSClass = JSClass {
name: &PrototypeClassName__ as *u8 as *libc::c_char,
flags: (1 & JSCLASS_RESERVED_SLOTS_MASK) << JSCLASS_RESERVED_SLOTS_SHIFT, //JSCLASS_HAS_RESERVED_SLOTS(1)
- addProperty: crust::JS_PropertyStub, /* addProperty */
- delProperty: crust::JS_PropertyStub, /* delProperty */
- getProperty: crust::JS_PropertyStub, /* getProperty */
- setProperty: crust::JS_StrictPropertyStub, /* setProperty */
- enumerate: crust::JS_EnumerateStub,
- resolve: crust::JS_ResolveStub,
- convert: crust::JS_ConvertStub,
+ addProperty: Some(crust::JS_PropertyStub), /* addProperty */
+ delProperty: Some(crust::JS_PropertyStub), /* delProperty */
+ getProperty: Some(crust::JS_PropertyStub), /* getProperty */
+ setProperty: Some(crust::JS_StrictPropertyStub), /* setProperty */
+ enumerate: Some(crust::JS_EnumerateStub),
+ resolve: Some(crust::JS_ResolveStub),
+ convert: Some(crust::JS_ConvertStub),
finalize: None, /* finalize */
checkAccess: None, /* checkAccess */
call: None, /* call */
diff --git a/src/components/script/dom/bindings/node.rs b/src/components/script/dom/bindings/node.rs
index 05aff3793ca..a453d5d66c8 100644
--- a/src/components/script/dom/bindings/node.rs
+++ b/src/components/script/dom/bindings/node.rs
@@ -130,7 +130,7 @@ impl Traceable for Node<ScriptView> {
}
}
}
- error!("tracing %p?:", self.wrapper.get_wrapper());
+ debug!("tracing %p?:", self.wrapper.get_wrapper());
trace_node(tracer, self.parent_node, "parent");
trace_node(tracer, self.first_child, "first child");
trace_node(tracer, self.last_child, "last child");
diff --git a/src/components/script/dom/document.rs b/src/components/script/dom/document.rs
index 51352b2faeb..4333ea5b934 100644
--- a/src/components/script/dom/document.rs
+++ b/src/components/script/dom/document.rs
@@ -5,6 +5,7 @@
use dom::bindings::codegen::DocumentBinding;
use dom::bindings::utils::{DOMString, WrapperCache, ErrorResult, null_string, str};
use dom::bindings::utils::{BindingObject, CacheableWrapper, rust_box, DerivedWrapper};
+use dom::bindings::utils::Traceable;
use dom::element::{Element};
use dom::element::{HTMLHtmlElementTypeId, HTMLHeadElementTypeId, HTMLTitleElementTypeId};
use dom::event::Event;
@@ -18,13 +19,15 @@ use dom::window::Window;
use dom::windowproxy::WindowProxy;
use dom::htmltitleelement::HTMLTitleElement;
use html::hubbub_html_parser::build_element_from_tag;
-use js::jsapi::{JS_AddObjectRoot, JS_RemoveObjectRoot, JSObject, JSContext, JSVal};
+use js::jsapi::{JSObject, JSContext, JSVal};
+use js::jsapi::{JSTRACE_OBJECT, JSTracer, JS_CallTracer};
use js::glue::RUST_OBJECT_TO_JSVAL;
use servo_util::tree::TreeNodeRef;
use std::cast;
use std::ptr;
use std::str::eq_slice;
+use std::libc;
pub trait WrappableDocument {
fn init_wrapper(@mut self, cx: *JSContext);
@@ -89,14 +92,6 @@ pub struct Document {
impl Document {
#[fixed_stack_segment]
pub fn new(root: AbstractNode<ScriptView>, window: Option<@mut Window>, doctype: DocumentType) -> Document {
- let compartment = unsafe {(*window.get_ref().page).js_info.get_ref().js_compartment };
- do root.with_base |base| {
- assert!(base.wrapper.get_wrapper().is_not_null());
- let rootable = base.wrapper.get_rootable();
- unsafe {
- JS_AddObjectRoot(compartment.cx.ptr, rootable);
- }
- }
Document {
root: root,
wrapper: WrapperCache::new(),
@@ -460,17 +455,23 @@ impl Document {
window.content_changed()
}
}
+}
+impl Traceable for Document {
#[fixed_stack_segment]
- pub fn teardown(&self) {
+ fn trace(&self, tracer: *mut JSTracer) {
unsafe {
- let compartment = (*self.window.get_ref().page).js_info.get_ref().js_compartment;
- do self.root.with_base |node| {
- assert!(node.wrapper.get_wrapper().is_not_null());
- let rootable = node.wrapper.get_rootable();
- JS_RemoveObjectRoot(compartment.cx.ptr, rootable);
+ (*tracer).debugPrinter = ptr::null();
+ (*tracer).debugPrintIndex = -1;
+ do "root".to_c_str().with_ref |name| {
+ (*tracer).debugPrintArg = name as *libc::c_void;
+ debug!("tracing root node");
+ do self.root.with_base |node| {
+ JS_CallTracer(tracer as *JSTracer,
+ node.wrapper.wrapper,
+ JSTRACE_OBJECT as u32);
+ }
}
}
}
}
-
diff --git a/src/components/script/dom/window.rs b/src/components/script/dom/window.rs
index 00c4b63f539..e6164a96cb4 100644
--- a/src/components/script/dom/window.rs
+++ b/src/components/script/dom/window.rs
@@ -3,7 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use dom::bindings::codegen::WindowBinding;
-use dom::bindings::utils::{WrapperCache, DOMString, null_string};
+use dom::bindings::utils::{WrapperCache, DOMString, null_string, Traceable};
use dom::bindings::utils::{CacheableWrapper, BindingObject};
use dom::document::AbstractDocument;
use dom::node::{AbstractNode, ScriptView};
@@ -14,8 +14,8 @@ use script_task::{ExitMsg, FireTimerMsg, Page, ScriptChan};
use servo_msg::compositor_msg::ScriptListener;
use js::glue::*;
-use js::jsapi::{JSObject, JSContext, JS_DefineProperty};
-use js::jsapi::{JSPropertyOp, JSStrictPropertyOp};
+use js::jsapi::{JSObject, JSContext, JS_DefineProperty, JS_CallTracer};
+use js::jsapi::{JSPropertyOp, JSStrictPropertyOp, JSTracer, JSTRACE_OBJECT};
use js::{JSVAL_NULL, JSPROP_ENUMERATE};
use std::cast;
@@ -25,6 +25,7 @@ use std::comm::SharedChan;
use std::io;
use std::ptr;
use std::int;
+use std::libc;
use std::rt::rtio::RtioTimer;
use std::rt::io::timer::Timer;
use js::jsapi::JSVal;
@@ -214,3 +215,28 @@ impl Window {
}
}
+impl Traceable for Window {
+ #[fixed_stack_segment]
+ fn trace(&self, tracer: *mut JSTracer) {
+ debug!("tracing window");
+ unsafe {
+ match (*self.page).frame {
+ Some(frame) => {
+ do frame.document.with_base |doc| {
+ (*tracer).debugPrinter = ptr::null();
+ (*tracer).debugPrintIndex = -1;
+ do "document".to_c_str().with_ref |name| {
+ (*tracer).debugPrintArg = name as *libc::c_void;
+ debug!("tracing document");
+ JS_CallTracer(tracer as *JSTracer,
+ doc.wrapper.wrapper,
+ JSTRACE_OBJECT as u32);
+ }
+ }
+ }
+ None => ()
+ }
+ }
+ }
+}
+
diff --git a/src/components/script/script_task.rs b/src/components/script/script_task.rs
index 9d45dc7d8dc..4025de24bb4 100644
--- a/src/components/script/script_task.rs
+++ b/src/components/script/script_task.rs
@@ -555,9 +555,6 @@ impl ScriptTask {
fn handle_exit_msg(&mut self) {
for page in self.page_tree.iter() {
page.join_layout();
- do page.frame.unwrap().document.with_mut_base |doc| {
- doc.teardown();
- }
page.layout_chan.send(layout_interface::ExitMsg);
}
self.compositor.close();