aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom
diff options
context:
space:
mode:
authorJack Moffitt <jack@metajack.im>2013-07-08 18:41:33 -0600
committerJack Moffitt <jack@metajack.im>2013-07-09 14:37:53 -0600
commit870db398366bb5f2a19fdc301d8d7641c27cae0b (patch)
treeca298f6386ccca579d09ef7ec68d625d4dde00b2 /src/components/script/dom
parente0e5e1a2a7c33d265e1995a02211a8926980ce82 (diff)
downloadservo-870db398366bb5f2a19fdc301d8d7641c27cae0b.tar.gz
servo-870db398366bb5f2a19fdc301d8d7641c27cae0b.zip
Update to latest Rust.
Diffstat (limited to 'src/components/script/dom')
-rw-r--r--src/components/script/dom/bindings/clientrect.rs62
-rw-r--r--src/components/script/dom/bindings/clientrectlist.rs45
-rw-r--r--src/components/script/dom/bindings/codegen/CodegenRust.py2
-rw-r--r--src/components/script/dom/bindings/document.rs9
-rw-r--r--src/components/script/dom/bindings/element.rs17
-rw-r--r--src/components/script/dom/bindings/event.rs59
-rw-r--r--src/components/script/dom/bindings/eventtarget.rs61
-rw-r--r--src/components/script/dom/bindings/formdata.rs62
-rw-r--r--src/components/script/dom/bindings/htmlcollection.rs45
-rw-r--r--src/components/script/dom/bindings/node.rs36
-rw-r--r--src/components/script/dom/bindings/utils.rs18
-rw-r--r--src/components/script/dom/clientrect.rs54
-rw-r--r--src/components/script/dom/clientrectlist.rs39
-rw-r--r--src/components/script/dom/event.rs52
-rw-r--r--src/components/script/dom/eventtarget.rs58
-rw-r--r--src/components/script/dom/formdata.rs57
-rw-r--r--src/components/script/dom/htmlcollection.rs36
-rw-r--r--src/components/script/dom/node.rs34
-rw-r--r--src/components/script/dom/window.rs2
19 files changed, 347 insertions, 401 deletions
diff --git a/src/components/script/dom/bindings/clientrect.rs b/src/components/script/dom/bindings/clientrect.rs
deleted file mode 100644
index b910ff1f41c..00000000000
--- a/src/components/script/dom/bindings/clientrect.rs
+++ /dev/null
@@ -1,62 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-use dom::bindings::utils::{CacheableWrapper, WrapperCache, BindingObject, DerivedWrapper};
-use dom::bindings::codegen::ClientRectBinding;
-use dom::clientrect::ClientRect;
-use script_task::{task_from_context, global_script_context};
-
-use js::jsapi::{JSObject, JSContext, JSVal};
-use js::glue::RUST_OBJECT_TO_JSVAL;
-
-use std::cast;
-
-impl ClientRect {
- pub fn init_wrapper(@mut self) {
- let script_context = global_script_context();
- let cx = script_context.js_compartment.cx.ptr;
- let owner = script_context.root_frame.get_ref().window;
- let cache = owner.get_wrappercache();
- let scope = cache.get_wrapper();
- self.wrap_object_shared(cx, scope);
- }
-}
-
-impl CacheableWrapper for ClientRect {
- fn get_wrappercache(&mut self) -> &mut WrapperCache {
- unsafe {
- cast::transmute(&self.wrapper)
- }
- }
-
- fn wrap_object_shared(@mut self, cx: *JSContext, scope: *JSObject) -> *JSObject {
- let mut unused = false;
- ClientRectBinding::Wrap(cx, scope, self, &mut unused)
- }
-}
-
-impl BindingObject for ClientRect {
- fn GetParentObject(&self, cx: *JSContext) -> @mut CacheableWrapper {
- let script_context = task_from_context(cx);
- unsafe {
- (*script_context).root_frame.get_ref().window as @mut CacheableWrapper
- }
- }
-}
-
-impl DerivedWrapper for ClientRect {
- fn wrap(&mut self, _cx: *JSContext, _scope: *JSObject, _vp: *mut JSVal) -> i32 {
- fail!(~"nyi")
- }
-
- fn wrap_shared(@mut self, cx: *JSContext, scope: *JSObject, vp: *mut JSVal) -> i32 {
- let obj = self.wrap_object_shared(cx, scope);
- if obj.is_null() {
- return 0;
- } else {
- unsafe { *vp = RUST_OBJECT_TO_JSVAL(obj) };
- return 1;
- }
- }
-}
diff --git a/src/components/script/dom/bindings/clientrectlist.rs b/src/components/script/dom/bindings/clientrectlist.rs
deleted file mode 100644
index a6d19a73a10..00000000000
--- a/src/components/script/dom/bindings/clientrectlist.rs
+++ /dev/null
@@ -1,45 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-use dom::bindings::codegen::ClientRectListBinding;
-use dom::bindings::utils::{WrapperCache, CacheableWrapper, BindingObject};
-use dom::clientrectlist::ClientRectList;
-use script_task::{task_from_context, global_script_context};
-
-use js::jsapi::{JSObject, JSContext};
-
-use std::cast;
-
-impl ClientRectList {
- pub fn init_wrapper(@mut self) {
- let script_context = global_script_context();
- let cx = script_context.js_compartment.cx.ptr;
- let owner = script_context.root_frame.get_ref().window;
- let cache = owner.get_wrappercache();
- let scope = cache.get_wrapper();
- self.wrap_object_shared(cx, scope);
- }
-}
-
-impl CacheableWrapper for ClientRectList {
- fn get_wrappercache(&mut self) -> &mut WrapperCache {
- unsafe {
- cast::transmute(&self.wrapper)
- }
- }
-
- fn wrap_object_shared(@mut self, cx: *JSContext, scope: *JSObject) -> *JSObject {
- let mut unused = false;
- ClientRectListBinding::Wrap(cx, scope, self, &mut unused)
- }
-}
-
-impl BindingObject for ClientRectList {
- fn GetParentObject(&self, cx: *JSContext) -> @mut CacheableWrapper {
- let script_context = task_from_context(cx);
- unsafe {
- (*script_context).root_frame.get_ref().window as @mut CacheableWrapper
- }
- }
-}
diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py
index 66984d6c885..055cb0ce488 100644
--- a/src/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/src/components/script/dom/bindings/codegen/CodegenRust.py
@@ -2153,7 +2153,7 @@ class CGImports(CGWrapper):
# TODO imports to cover descriptors, etc.
def _useString(imports):
- return '#[allow(unused_imports,unused_variable,unused_unsafe,unused_mut)];' + ''.join(['use %s;\n' % i for i in imports]) + '\n'
+ return '#[allow(non_uppercase_statics,unused_imports,unused_variable,unused_unsafe,unused_mut)];' + ''.join(['use %s;\n' % i for i in imports]) + '\n'
CGWrapper.__init__(self, child,
declarePre=_useString(sorted(declareImports)))
diff --git a/src/components/script/dom/bindings/document.rs b/src/components/script/dom/bindings/document.rs
index 731e6619bd9..685b7d2599f 100644
--- a/src/components/script/dom/bindings/document.rs
+++ b/src/components/script/dom/bindings/document.rs
@@ -6,7 +6,6 @@ use std::cast;
use std::libc;
use std::ptr;
use std::result;
-use std::vec;
use dom::bindings::utils::{DOMString, rust_box, squirrel_away, str};
use dom::bindings::utils::{WrapperCache, DerivedWrapper};
use dom::bindings::utils::{jsval_to_str, WrapNewBindingObject, CacheableWrapper};
@@ -102,11 +101,11 @@ pub fn init(compartment: @mut Compartment) {
getter: JSPropertyOpWrapper {op: null(), info: null()},
setter: JSStrictPropertyOpWrapper {op: null(), info: null()}}];
compartment.global_props.push(attrs);
- vec::as_imm_buf(*attrs, |specs, _len| {
+ do attrs.as_imm_buf |specs, _len| {
unsafe {
assert!(JS_DefineProperties(compartment.cx.ptr, obj.ptr, specs) == 1);
}
- });
+ }
let methods = @~[JSFunctionSpec {name: compartment.add_name(~"getElementsByTagName"),
call: JSNativeWrapper {op: getElementsByTagName, info: null()},
@@ -118,11 +117,11 @@ pub fn init(compartment: @mut Compartment) {
nargs: 0,
flags: 0,
selfHostedName: null()}];
- vec::as_imm_buf(*methods, |fns, _len| {
+ do methods.as_imm_buf |fns, _len| {
unsafe {
JS_DefineFunctions(compartment.cx.ptr, obj.ptr, fns);
}
- });
+ }
compartment.register_class(utils::instance_jsclass(~"DocumentInstance",
finalize,
diff --git a/src/components/script/dom/bindings/element.rs b/src/components/script/dom/bindings/element.rs
index b79daf75db7..b37c3f1a43b 100644
--- a/src/components/script/dom/bindings/element.rs
+++ b/src/components/script/dom/bindings/element.rs
@@ -21,7 +21,6 @@ use std::ptr;
use std::ptr::null;
use std::result;
use std::str;
-use std::vec;
use js::glue::*;
use js::jsapi::*;
use js::jsapi::{JSContext, JSVal, JSObject, JSBool, JSFreeOp, JSPropertySpec};
@@ -84,12 +83,12 @@ pub fn init(compartment: @mut Compartment) {
flags: (JSPROP_SHARED | JSPROP_ENUMERATE | JSPROP_NATIVE_ACCESSORS) as u8,
getter: JSPropertyOpWrapper {op: null(), info: null()},
setter: JSStrictPropertyOpWrapper {op: null(), info: null()}}];
- vec::push(&mut compartment.global_props, attrs);
- vec::as_imm_buf(*attrs, |specs, _len| {
+ compartment.global_props.push(attrs);
+ do attrs.as_imm_buf |specs, _len| {
unsafe {
JS_DefineProperties(compartment.cx.ptr, obj.ptr, specs);
}
- });
+ }
let methods = @~[JSFunctionSpec {name: compartment.add_name(~"getClientRects"),
call: JSNativeWrapper {op: getClientRects, info: null()},
@@ -111,11 +110,11 @@ pub fn init(compartment: @mut Compartment) {
nargs: 0,
flags: 0,
selfHostedName: null()}];
- vec::as_imm_buf(*methods, |fns, _len| {
+ do methods.as_imm_buf |fns, _len| {
unsafe {
JS_DefineFunctions(compartment.cx.ptr, obj.ptr, fns);
}
- });
+ }
compartment.register_class(utils::instance_jsclass(~"GenericElementInstance",
finalize, trace));
@@ -137,12 +136,12 @@ pub fn init(compartment: @mut Compartment) {
flags: (JSPROP_SHARED | JSPROP_ENUMERATE | JSPROP_NATIVE_ACCESSORS) as u8,
getter: JSPropertyOpWrapper {op: null(), info: null()},
setter: JSStrictPropertyOpWrapper {op: null(), info: null()}}];
- vec::push(&mut compartment.global_props, attrs);
- vec::as_imm_buf(*attrs, |specs, _len| {
+ compartment.global_props.push(attrs);
+ do attrs.as_imm_buf |specs, _len| {
unsafe {
JS_DefineProperties(compartment.cx.ptr, obj.ptr, specs);
}
- });
+ }
}
extern fn getClientRects(cx: *JSContext, _argc: c_uint, vp: *JSVal) -> JSBool {
diff --git a/src/components/script/dom/bindings/event.rs b/src/components/script/dom/bindings/event.rs
deleted file mode 100644
index 2197646e188..00000000000
--- a/src/components/script/dom/bindings/event.rs
+++ /dev/null
@@ -1,59 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-use std::cast;
-use dom::bindings::codegen::EventBinding;
-use dom::bindings::utils::{CacheableWrapper, WrapperCache, BindingObject, DerivedWrapper};
-use dom::event::Event_;
-use script_task::{task_from_context, global_script_context};
-
-use js::glue::RUST_OBJECT_TO_JSVAL;
-use js::jsapi::{JSObject, JSContext, JSVal};
-
-impl Event_ {
- pub fn init_wrapper(@mut self) {
- let script_context = global_script_context();
- let cx = script_context.js_compartment.cx.ptr;
- let owner = script_context.root_frame.get_ref().window;
- let cache = owner.get_wrappercache();
- let scope = cache.get_wrapper();
- self.wrap_object_shared(cx, scope);
- }
-}
-
-impl CacheableWrapper for Event_ {
- fn get_wrappercache(&mut self) -> &mut WrapperCache {
- unsafe { cast::transmute(&self.wrapper) }
- }
-
- fn wrap_object_shared(@mut self, cx: *JSContext, scope: *JSObject) -> *JSObject {
- let mut unused = false;
- EventBinding::Wrap(cx, scope, self, &mut unused)
- }
-}
-
-impl BindingObject for Event_ {
- fn GetParentObject(&self, cx: *JSContext) -> @mut CacheableWrapper {
- let script_context = task_from_context(cx);
- unsafe {
- (*script_context).root_frame.get_ref().window as @mut CacheableWrapper
- }
- }
-}
-
-impl DerivedWrapper for Event_ {
- fn wrap(&mut self, _cx: *JSContext, _scope: *JSObject, _vp: *mut JSVal) -> i32 {
- fail!(~"nyi")
- }
-
- fn wrap_shared(@mut self, cx: *JSContext, scope: *JSObject, vp: *mut JSVal) -> i32 {
- let obj = self.wrap_object_shared(cx, scope);
- if obj.is_null() {
- return 0;
- } else {
- unsafe { *vp = RUST_OBJECT_TO_JSVAL(obj) };
- return 1;
- }
- }
-}
diff --git a/src/components/script/dom/bindings/eventtarget.rs b/src/components/script/dom/bindings/eventtarget.rs
deleted file mode 100644
index ffb804d905c..00000000000
--- a/src/components/script/dom/bindings/eventtarget.rs
+++ /dev/null
@@ -1,61 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-use std::cast;
-use dom::bindings::codegen::EventTargetBinding;
-use dom::bindings::utils::{CacheableWrapper, WrapperCache, BindingObject, DerivedWrapper};
-use dom::eventtarget::EventTarget;
-use script_task::{task_from_context, global_script_context};
-
-use js::glue::RUST_OBJECT_TO_JSVAL;
-use js::jsapi::{JSObject, JSContext, JSVal};
-
-impl EventTarget {
- pub fn init_wrapper(@mut self) {
- let script_context = global_script_context();
- let cx = script_context.js_compartment.cx.ptr;
- let owner = script_context.root_frame.get_ref().window;
- let cache = owner.get_wrappercache();
- let scope = cache.get_wrapper();
- self.wrap_object_shared(cx, scope);
- }
-}
-
-impl CacheableWrapper for EventTarget {
- fn get_wrappercache(&mut self) -> &mut WrapperCache {
- unsafe { cast::transmute(&self.wrapper) }
- }
-
- fn wrap_object_shared(@mut self, cx: *JSContext, scope: *JSObject) -> *JSObject {
- let mut unused = false;
- EventTargetBinding::Wrap(cx, scope, self, &mut unused)
- }
-}
-
-impl BindingObject for EventTarget {
- fn GetParentObject(&self, cx: *JSContext) -> @mut CacheableWrapper {
- let script_context = task_from_context(cx);
- unsafe {
- (*script_context).root_frame.get_ref().window as @mut CacheableWrapper
- }
- }
-}
-
-impl DerivedWrapper for EventTarget {
- fn wrap(&mut self, _cx: *JSContext, _scope: *JSObject, _vp: *mut JSVal) -> i32 {
- fail!(~"nyi")
- }
-
- fn wrap_shared(@mut self, cx: *JSContext, scope: *JSObject, vp: *mut JSVal) -> i32 {
- let obj = self.wrap_object_shared(cx, scope);
- if obj.is_null() {
- return 0;
- } else {
- unsafe {
- *vp = RUST_OBJECT_TO_JSVAL(obj)
- };
- return 1;
- }
- }
-}
diff --git a/src/components/script/dom/bindings/formdata.rs b/src/components/script/dom/bindings/formdata.rs
deleted file mode 100644
index eaf25a3ebe2..00000000000
--- a/src/components/script/dom/bindings/formdata.rs
+++ /dev/null
@@ -1,62 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-use dom::bindings::utils::{CacheableWrapper, WrapperCache, BindingObject, DerivedWrapper};
-use dom::bindings::codegen::FormDataBinding;
-use dom::formdata::FormData;
-use script_task::{task_from_context, global_script_context};
-
-use js::jsapi::{JSObject, JSContext, JSVal};
-use js::glue::RUST_OBJECT_TO_JSVAL;
-
-use std::cast;
-
-impl FormData {
- pub fn init_wrapper(@mut self) {
- let script_context = global_script_context();
- let cx = script_context.js_compartment.cx.ptr;
- let owner = script_context.root_frame.get_ref().window;
- let cache = owner.get_wrappercache();
- let scope = cache.get_wrapper();
- self.wrap_object_shared(cx, scope);
- }
-}
-
-impl CacheableWrapper for FormData {
- fn get_wrappercache(&mut self) -> &mut WrapperCache {
- unsafe {
- cast::transmute(&self.wrapper)
- }
- }
-
- fn wrap_object_shared(@mut self, cx: *JSContext, scope: *JSObject) -> *JSObject {
- let mut unused = false;
- FormDataBinding::Wrap(cx, scope, self, &mut unused)
- }
-}
-
-impl BindingObject for FormData {
- fn GetParentObject(&self, cx: *JSContext) -> @mut CacheableWrapper {
- let script_context = task_from_context(cx);
- unsafe {
- (*script_context).root_frame.get_ref().window as @mut CacheableWrapper
- }
- }
-}
-
-impl DerivedWrapper for FormData {
- fn wrap(&mut self, _cx: *JSContext, _scope: *JSObject, _vp: *mut JSVal) -> i32 {
- fail!(~"nyi")
- }
-
- fn wrap_shared(@mut self, cx: *JSContext, scope: *JSObject, vp: *mut JSVal) -> i32 {
- let obj = self.wrap_object_shared(cx, scope);
- if obj.is_null() {
- return 0;
- } else {
- unsafe { *vp = RUST_OBJECT_TO_JSVAL(obj) };
- return 1;
- }
- }
-}
diff --git a/src/components/script/dom/bindings/htmlcollection.rs b/src/components/script/dom/bindings/htmlcollection.rs
deleted file mode 100644
index fe7ddf3dfe0..00000000000
--- a/src/components/script/dom/bindings/htmlcollection.rs
+++ /dev/null
@@ -1,45 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-use dom::bindings::codegen::HTMLCollectionBinding;
-use dom::bindings::utils::{CacheableWrapper, BindingObject, WrapperCache};
-use dom::htmlcollection::HTMLCollection;
-use script_task::{task_from_context, global_script_context};
-
-use js::jsapi::{JSObject, JSContext};
-
-use std::cast;
-
-impl HTMLCollection {
- pub fn init_wrapper(@mut self) {
- let script_context = global_script_context();
- let cx = script_context.js_compartment.cx.ptr;
- let owner = script_context.root_frame.get_ref().window;
- let cache = owner.get_wrappercache();
- let scope = cache.get_wrapper();
- self.wrap_object_shared(cx, scope);
- }
-}
-
-impl BindingObject for HTMLCollection {
- fn GetParentObject(&self, cx: *JSContext) -> @mut CacheableWrapper {
- let script_context = task_from_context(cx);
- unsafe {
- (*script_context).root_frame.get_ref().window as @mut CacheableWrapper
- }
- }
-}
-
-impl CacheableWrapper for HTMLCollection {
- fn get_wrappercache(&mut self) -> &mut WrapperCache {
- unsafe {
- cast::transmute(&self.wrapper)
- }
- }
-
- fn wrap_object_shared(@mut self, cx: *JSContext, scope: *JSObject) -> *JSObject {
- let mut unused = false;
- HTMLCollectionBinding::Wrap(cx, scope, self, &mut unused)
- }
-}
diff --git a/src/components/script/dom/bindings/node.rs b/src/components/script/dom/bindings/node.rs
index 49a857405a9..b5da86320bb 100644
--- a/src/components/script/dom/bindings/node.rs
+++ b/src/components/script/dom/bindings/node.rs
@@ -13,7 +13,6 @@ use std::cast;
use std::libc::c_uint;
use std::ptr;
use std::ptr::null;
-use std::vec;
use js::jsapi::*;
use js::jsapi::{JSContext, JSVal, JSObject, JSBool, JSPropertySpec};
use js::jsapi::{JSPropertyOpWrapper, JSStrictPropertyOpWrapper};
@@ -54,12 +53,12 @@ pub fn init(compartment: @mut Compartment) {
flags: (JSPROP_SHARED | JSPROP_ENUMERATE | JSPROP_NATIVE_ACCESSORS) as u8,
getter: JSPropertyOpWrapper {op: null(), info: null()},
setter: JSStrictPropertyOpWrapper {op: null(), info: null()}}];
- vec::push(&mut compartment.global_props, attrs);
- vec::as_imm_buf(*attrs, |specs, _len| {
+ compartment.global_props.push(attrs);
+ do attrs.as_imm_buf |specs, _len| {
unsafe {
JS_DefineProperties(compartment.cx.ptr, obj.ptr, specs);
}
- });
+ }
}
#[allow(non_implicitly_copyable_typarams)]
@@ -121,35 +120,6 @@ extern fn getNextSibling(cx: *JSContext, _argc: c_uint, vp: *mut JSVal) -> JSBoo
return 1;
}
-impl Node<ScriptView> {
- fn getNodeType(&self) -> i32 {
- match self.type_id {
- ElementNodeTypeId(_) => 1,
- TextNodeTypeId => 3,
- CommentNodeTypeId => 8,
- DoctypeNodeTypeId => 10
- }
- }
-
- fn getNextSibling(&mut self) -> Option<&mut AbstractNode<ScriptView>> {
- match self.next_sibling {
- // transmute because the compiler can't deduce that the reference
- // is safe outside of with_mut_base blocks.
- Some(ref mut n) => Some(unsafe { cast::transmute(n) }),
- None => None
- }
- }
-
- fn getFirstChild(&mut self) -> Option<&mut AbstractNode<ScriptView>> {
- match self.first_child {
- // transmute because the compiler can't deduce that the reference
- // is safe outside of with_mut_base blocks.
- Some(ref mut n) => Some(unsafe { cast::transmute(n) }),
- None => None
- }
- }
- }
-
extern fn getNodeType(cx: *JSContext, _argc: c_uint, vp: *mut JSVal) -> JSBool {
unsafe {
let obj = JS_THIS_OBJECT(cx, cast::transmute(vp));
diff --git a/src/components/script/dom/bindings/utils.rs b/src/components/script/dom/bindings/utils.rs
index f72aad15ed9..5fc2fcfc647 100644
--- a/src/components/script/dom/bindings/utils.rs
+++ b/src/components/script/dom/bindings/utils.rs
@@ -13,8 +13,8 @@ use std::ptr;
use std::ptr::{null, to_unsafe_ptr};
use std::result;
use std::str;
-use std::sys;
use std::uint;
+use std::unstable::intrinsics;
use js::glue::*;
use js::glue::{DefineFunctionWithReserved, GetObjectJSClass, RUST_OBJECT_TO_JSVAL};
use js::glue::{PROPERTY_STUB, STRICT_PROPERTY_STUB, ENUMERATE_STUB, CONVERT_STUB, RESOLVE_STUB};
@@ -105,7 +105,7 @@ impl DOMString {
pub struct rust_box<T> {
rc: uint,
- td: *sys::TypeDesc,
+ td: *intrinsics::TyDesc,
next: *(),
prev: *(),
payload: T
@@ -179,12 +179,12 @@ pub fn get_compartment(cx: *JSContext) -> @mut Compartment {
extern fn has_instance(_cx: *JSContext, obj: **JSObject, v: *JSVal, bp: *mut JSBool) -> JSBool {
//XXXjdm this is totally broken for non-object values
unsafe {
- let mut o = RUST_JSVAL_TO_OBJECT(unsafe {*v});
- let obj = unsafe {*obj};
- unsafe { *bp = 0; }
+ let mut o = RUST_JSVAL_TO_OBJECT(*v);
+ let obj = *obj;
+ *bp = 0;
while o.is_not_null() {
if o == obj {
- unsafe { *bp = 1; }
+ *bp = 1;
break;
}
o = JS_GetPrototype(o);
@@ -718,7 +718,7 @@ pub fn XrayResolveProperty(cx: *JSContext,
unsafe {
match attributes {
Some(attrs) => {
- for attrs.each |&elem| {
+ for attrs.iter().advance |&elem| {
let (attr, attr_id) = elem;
if attr_id == JSID_VOID || attr_id != id {
loop;
@@ -769,7 +769,7 @@ fn InternJSString(cx: *JSContext, chars: *libc::c_char) -> Option<jsid> {
pub fn InitIds(cx: *JSContext, specs: &[JSPropertySpec], ids: &mut [jsid]) -> bool {
let mut rval = true;
- for specs.eachi |i, spec| {
+ for specs.iter().enumerate().advance |(i, spec)| {
if spec.name.is_null() == true {
break;
}
@@ -830,7 +830,7 @@ pub fn FindEnumStringIndex(cx: *JSContext,
if chars.is_null() {
return Err(());
}
- for values.eachi |i, value| {
+ for values.iter().enumerate().advance |(i, value)| {
if value.length != length as uint {
loop;
}
diff --git a/src/components/script/dom/clientrect.rs b/src/components/script/dom/clientrect.rs
index ccddcff788f..cd3f9f344e6 100644
--- a/src/components/script/dom/clientrect.rs
+++ b/src/components/script/dom/clientrect.rs
@@ -2,8 +2,14 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-use dom::bindings::utils::WrapperCache;
+use dom::bindings::utils::{CacheableWrapper, WrapperCache, BindingObject, DerivedWrapper};
+use dom::bindings::codegen::ClientRectBinding;
+use script_task::{task_from_context, global_script_context};
+use js::jsapi::{JSObject, JSContext, JSVal};
+use js::glue::RUST_OBJECT_TO_JSVAL;
+
+use std::cast;
use std::f32;
pub struct ClientRect {
@@ -27,6 +33,15 @@ impl ClientRect {
rect
}
+ pub fn init_wrapper(@mut self) {
+ let script_context = global_script_context();
+ let cx = script_context.js_compartment.cx.ptr;
+ let owner = script_context.root_frame.get_ref().window;
+ let cache = owner.get_wrappercache();
+ let scope = cache.get_wrapper();
+ self.wrap_object_shared(cx, scope);
+ }
+
pub fn Top(&self) -> f32 {
self.top
}
@@ -52,3 +67,40 @@ impl ClientRect {
}
}
+impl CacheableWrapper for ClientRect {
+ fn get_wrappercache(&mut self) -> &mut WrapperCache {
+ unsafe {
+ cast::transmute(&self.wrapper)
+ }
+ }
+
+ fn wrap_object_shared(@mut self, cx: *JSContext, scope: *JSObject) -> *JSObject {
+ let mut unused = false;
+ ClientRectBinding::Wrap(cx, scope, self, &mut unused)
+ }
+}
+
+impl BindingObject for ClientRect {
+ fn GetParentObject(&self, cx: *JSContext) -> @mut CacheableWrapper {
+ let script_context = task_from_context(cx);
+ unsafe {
+ (*script_context).root_frame.get_ref().window as @mut CacheableWrapper
+ }
+ }
+}
+
+impl DerivedWrapper for ClientRect {
+ fn wrap(&mut self, _cx: *JSContext, _scope: *JSObject, _vp: *mut JSVal) -> i32 {
+ fail!(~"nyi")
+ }
+
+ fn wrap_shared(@mut self, cx: *JSContext, scope: *JSObject, vp: *mut JSVal) -> i32 {
+ let obj = self.wrap_object_shared(cx, scope);
+ if obj.is_null() {
+ return 0;
+ } else {
+ unsafe { *vp = RUST_OBJECT_TO_JSVAL(obj) };
+ return 1;
+ }
+ }
+}
diff --git a/src/components/script/dom/clientrectlist.rs b/src/components/script/dom/clientrectlist.rs
index 6165f13e6e3..2fdbc108f36 100644
--- a/src/components/script/dom/clientrectlist.rs
+++ b/src/components/script/dom/clientrectlist.rs
@@ -2,8 +2,14 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+use dom::bindings::codegen::ClientRectListBinding;
+use dom::bindings::utils::{WrapperCache, CacheableWrapper, BindingObject};
use dom::clientrect::ClientRect;
-use dom::bindings::utils::WrapperCache;
+use script_task::{task_from_context, global_script_context};
+
+use js::jsapi::{JSObject, JSContext};
+
+use std::cast;
pub struct ClientRectList {
wrapper: WrapperCache,
@@ -20,6 +26,15 @@ impl ClientRectList {
list
}
+ pub fn init_wrapper(@mut self) {
+ let script_context = global_script_context();
+ let cx = script_context.js_compartment.cx.ptr;
+ let owner = script_context.root_frame.get_ref().window;
+ let cache = owner.get_wrappercache();
+ let scope = cache.get_wrapper();
+ self.wrap_object_shared(cx, scope);
+ }
+
pub fn Length(&self) -> u32 {
self.rects.len() as u32
}
@@ -37,3 +52,25 @@ impl ClientRectList {
self.Item(index)
}
}
+
+impl CacheableWrapper for ClientRectList {
+ fn get_wrappercache(&mut self) -> &mut WrapperCache {
+ unsafe {
+ cast::transmute(&self.wrapper)
+ }
+ }
+
+ fn wrap_object_shared(@mut self, cx: *JSContext, scope: *JSObject) -> *JSObject {
+ let mut unused = false;
+ ClientRectListBinding::Wrap(cx, scope, self, &mut unused)
+ }
+}
+
+impl BindingObject for ClientRectList {
+ fn GetParentObject(&self, cx: *JSContext) -> @mut CacheableWrapper {
+ let script_context = task_from_context(cx);
+ unsafe {
+ (*script_context).root_frame.get_ref().window as @mut CacheableWrapper
+ }
+ }
+}
diff --git a/src/components/script/dom/event.rs b/src/components/script/dom/event.rs
index 6b4be15b701..952a8a227cd 100644
--- a/src/components/script/dom/event.rs
+++ b/src/components/script/dom/event.rs
@@ -5,9 +5,16 @@
use dom::eventtarget::EventTarget;
use dom::window::Window;
use dom::bindings::codegen::EventBinding;
+use dom::bindings::utils::{CacheableWrapper, BindingObject, DerivedWrapper};
use dom::bindings::utils::{DOMString, ErrorResult, WrapperCache};
+use script_task::{task_from_context, global_script_context};
use geom::point::Point2D;
+use js::glue::RUST_OBJECT_TO_JSVAL;
+use js::jsapi::{JSObject, JSContext, JSVal};
+
+use std::cast;
+
pub enum Event {
ResizeEvent(uint, uint),
@@ -38,6 +45,15 @@ impl Event_ {
}
}
+ pub fn init_wrapper(@mut self) {
+ let script_context = global_script_context();
+ let cx = script_context.js_compartment.cx.ptr;
+ let owner = script_context.root_frame.get_ref().window;
+ let cache = owner.get_wrappercache();
+ let scope = cache.get_wrapper();
+ self.wrap_object_shared(cx, scope);
+ }
+
pub fn EventPhase(&self) -> u16 {
0
}
@@ -101,3 +117,39 @@ impl Event_ {
@mut Event_::new(type_)
}
}
+
+impl CacheableWrapper for Event_ {
+ fn get_wrappercache(&mut self) -> &mut WrapperCache {
+ unsafe { cast::transmute(&self.wrapper) }
+ }
+
+ fn wrap_object_shared(@mut self, cx: *JSContext, scope: *JSObject) -> *JSObject {
+ let mut unused = false;
+ EventBinding::Wrap(cx, scope, self, &mut unused)
+ }
+}
+
+impl BindingObject for Event_ {
+ fn GetParentObject(&self, cx: *JSContext) -> @mut CacheableWrapper {
+ let script_context = task_from_context(cx);
+ unsafe {
+ (*script_context).root_frame.get_ref().window as @mut CacheableWrapper
+ }
+ }
+}
+
+impl DerivedWrapper for Event_ {
+ fn wrap(&mut self, _cx: *JSContext, _scope: *JSObject, _vp: *mut JSVal) -> i32 {
+ fail!(~"nyi")
+ }
+
+ fn wrap_shared(@mut self, cx: *JSContext, scope: *JSObject, vp: *mut JSVal) -> i32 {
+ let obj = self.wrap_object_shared(cx, scope);
+ if obj.is_null() {
+ return 0;
+ } else {
+ unsafe { *vp = RUST_OBJECT_TO_JSVAL(obj) };
+ return 1;
+ }
+ }
+}
diff --git a/src/components/script/dom/eventtarget.rs b/src/components/script/dom/eventtarget.rs
index e4066ccb8d4..d5f3ff309e8 100644
--- a/src/components/script/dom/eventtarget.rs
+++ b/src/components/script/dom/eventtarget.rs
@@ -2,7 +2,14 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-use dom::bindings::utils::WrapperCache;
+use dom::bindings::codegen::EventTargetBinding;
+use dom::bindings::utils::{CacheableWrapper, WrapperCache, BindingObject, DerivedWrapper};
+use script_task::{task_from_context, global_script_context};
+
+use js::glue::RUST_OBJECT_TO_JSVAL;
+use js::jsapi::{JSObject, JSContext, JSVal};
+
+use std::cast;
pub struct EventTarget {
wrapper: WrapperCache
@@ -14,4 +21,51 @@ impl EventTarget {
wrapper: WrapperCache::new()
}
}
-} \ No newline at end of file
+
+ pub fn init_wrapper(@mut self) {
+ let script_context = global_script_context();
+ let cx = script_context.js_compartment.cx.ptr;
+ let owner = script_context.root_frame.get_ref().window;
+ let cache = owner.get_wrappercache();
+ let scope = cache.get_wrapper();
+ self.wrap_object_shared(cx, scope);
+ }
+}
+
+impl CacheableWrapper for EventTarget {
+ fn get_wrappercache(&mut self) -> &mut WrapperCache {
+ unsafe { cast::transmute(&self.wrapper) }
+ }
+
+ fn wrap_object_shared(@mut self, cx: *JSContext, scope: *JSObject) -> *JSObject {
+ let mut unused = false;
+ EventTargetBinding::Wrap(cx, scope, self, &mut unused)
+ }
+}
+
+impl BindingObject for EventTarget {
+ fn GetParentObject(&self, cx: *JSContext) -> @mut CacheableWrapper {
+ let script_context = task_from_context(cx);
+ unsafe {
+ (*script_context).root_frame.get_ref().window as @mut CacheableWrapper
+ }
+ }
+}
+
+impl DerivedWrapper for EventTarget {
+ fn wrap(&mut self, _cx: *JSContext, _scope: *JSObject, _vp: *mut JSVal) -> i32 {
+ fail!(~"nyi")
+ }
+
+ fn wrap_shared(@mut self, cx: *JSContext, scope: *JSObject, vp: *mut JSVal) -> i32 {
+ let obj = self.wrap_object_shared(cx, scope);
+ if obj.is_null() {
+ return 0;
+ } else {
+ unsafe {
+ *vp = RUST_OBJECT_TO_JSVAL(obj)
+ };
+ return 1;
+ }
+ }
+}
diff --git a/src/components/script/dom/formdata.rs b/src/components/script/dom/formdata.rs
index cda6b7ae272..5c3d49e1371 100644
--- a/src/components/script/dom/formdata.rs
+++ b/src/components/script/dom/formdata.rs
@@ -2,8 +2,16 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+use dom::bindings::utils::{CacheableWrapper, BindingObject, DerivedWrapper};
use dom::bindings::utils::{WrapperCache, DOMString, str};
+use dom::bindings::codegen::FormDataBinding;
use dom::blob::Blob;
+use script_task::{task_from_context, global_script_context};
+
+use js::jsapi::{JSObject, JSContext, JSVal};
+use js::glue::RUST_OBJECT_TO_JSVAL;
+
+use std::cast;
use std::hashmap::HashMap;
enum FormDatum {
@@ -24,6 +32,15 @@ impl FormData {
}
}
+ pub fn init_wrapper(@mut self) {
+ let script_context = global_script_context();
+ let cx = script_context.js_compartment.cx.ptr;
+ let owner = script_context.root_frame.get_ref().window;
+ let cache = owner.get_wrappercache();
+ let scope = cache.get_wrapper();
+ self.wrap_object_shared(cx, scope);
+ }
+
pub fn Append(&mut self, name: DOMString, value: @mut Blob, filename: Option<DOMString>) {
let blob = BlobData {
blob: value,
@@ -35,4 +52,42 @@ impl FormData {
pub fn Append_(&mut self, name: DOMString, value: DOMString) {
self.data.insert(name.to_str(), StringData(value));
}
-} \ No newline at end of file
+}
+
+impl CacheableWrapper for FormData {
+ fn get_wrappercache(&mut self) -> &mut WrapperCache {
+ unsafe {
+ cast::transmute(&self.wrapper)
+ }
+ }
+
+ fn wrap_object_shared(@mut self, cx: *JSContext, scope: *JSObject) -> *JSObject {
+ let mut unused = false;
+ FormDataBinding::Wrap(cx, scope, self, &mut unused)
+ }
+}
+
+impl BindingObject for FormData {
+ fn GetParentObject(&self, cx: *JSContext) -> @mut CacheableWrapper {
+ let script_context = task_from_context(cx);
+ unsafe {
+ (*script_context).root_frame.get_ref().window as @mut CacheableWrapper
+ }
+ }
+}
+
+impl DerivedWrapper for FormData {
+ fn wrap(&mut self, _cx: *JSContext, _scope: *JSObject, _vp: *mut JSVal) -> i32 {
+ fail!(~"nyi")
+ }
+
+ fn wrap_shared(@mut self, cx: *JSContext, scope: *JSObject, vp: *mut JSVal) -> i32 {
+ let obj = self.wrap_object_shared(cx, scope);
+ if obj.is_null() {
+ return 0;
+ } else {
+ unsafe { *vp = RUST_OBJECT_TO_JSVAL(obj) };
+ return 1;
+ }
+ }
+}
diff --git a/src/components/script/dom/htmlcollection.rs b/src/components/script/dom/htmlcollection.rs
index 403469061b8..da0b29e4e40 100644
--- a/src/components/script/dom/htmlcollection.rs
+++ b/src/components/script/dom/htmlcollection.rs
@@ -2,12 +2,15 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-use dom::bindings::utils::WrapperCache;
+use dom::bindings::codegen::HTMLCollectionBinding;
+use dom::bindings::utils::{CacheableWrapper, BindingObject, WrapperCache};
use dom::bindings::utils::{DOMString, ErrorResult};
use dom::node::{AbstractNode, ScriptView};
+use script_task::{task_from_context, global_script_context};
use js::jsapi::{JSObject, JSContext};
+use std::cast;
use std::ptr;
pub struct HTMLCollection {
@@ -24,6 +27,15 @@ impl HTMLCollection {
collection.init_wrapper();
collection
}
+
+ pub fn init_wrapper(@mut self) {
+ let script_context = global_script_context();
+ let cx = script_context.js_compartment.cx.ptr;
+ let owner = script_context.root_frame.get_ref().window;
+ let cache = owner.get_wrappercache();
+ let scope = cache.get_wrapper();
+ self.wrap_object_shared(cx, scope);
+ }
pub fn Length(&self) -> u32 {
self.elements.len() as u32
@@ -47,3 +59,25 @@ impl HTMLCollection {
self.Item(index)
}
}
+
+impl BindingObject for HTMLCollection {
+ fn GetParentObject(&self, cx: *JSContext) -> @mut CacheableWrapper {
+ let script_context = task_from_context(cx);
+ unsafe {
+ (*script_context).root_frame.get_ref().window as @mut CacheableWrapper
+ }
+ }
+}
+
+impl CacheableWrapper for HTMLCollection {
+ fn get_wrappercache(&mut self) -> &mut WrapperCache {
+ unsafe {
+ cast::transmute(&self.wrapper)
+ }
+ }
+
+ fn wrap_object_shared(@mut self, cx: *JSContext, scope: *JSObject) -> *JSObject {
+ let mut unused = false;
+ HTMLCollectionBinding::Wrap(cx, scope, self, &mut unused)
+ }
+}
diff --git a/src/components/script/dom/node.rs b/src/components/script/dom/node.rs
index c573f9912fb..1dd916b52b1 100644
--- a/src/components/script/dom/node.rs
+++ b/src/components/script/dom/node.rs
@@ -367,10 +367,10 @@ impl<View> AbstractNode<View> {
pub fn dump_indent(&self, indent: uint) {
let mut s = ~"";
for uint::range(0u, indent) |_i| {
- s += " ";
+ s.push_str(" ");
}
- s += self.debug_str();
+ s.push_str(self.debug_str());
debug!("%s", s);
// FIXME: this should have a pure version?
@@ -427,7 +427,35 @@ impl Node<ScriptView> {
layout_data: None,
}
}
-}
+
+ pub fn getNodeType(&self) -> i32 {
+ match self.type_id {
+ ElementNodeTypeId(_) => 1,
+ TextNodeTypeId => 3,
+ CommentNodeTypeId => 8,
+ DoctypeNodeTypeId => 10
+ }
+ }
+
+ pub fn getNextSibling(&mut self) -> Option<&mut AbstractNode<ScriptView>> {
+ match self.next_sibling {
+ // transmute because the compiler can't deduce that the reference
+ // is safe outside of with_mut_base blocks.
+ Some(ref mut n) => Some(unsafe { cast::transmute(n) }),
+ None => None
+ }
+ }
+
+ pub fn getFirstChild(&mut self) -> Option<&mut AbstractNode<ScriptView>> {
+ match self.first_child {
+ // transmute because the compiler can't deduce that the reference
+ // is safe outside of with_mut_base blocks.
+ Some(ref mut n) => Some(unsafe { cast::transmute(n) }),
+ None => None
+ }
+ }
+ }
+
/// The CSS library requires that DOM nodes be convertible to `*c_void` via the `VoidPtrLike`
/// trait.
diff --git a/src/components/script/dom/window.rs b/src/components/script/dom/window.rs
index 41f99eaa9e9..7c69ea5aee5 100644
--- a/src/components/script/dom/window.rs
+++ b/src/components/script/dom/window.rs
@@ -34,7 +34,7 @@ pub struct Window {
}
impl Drop for Window {
- fn finalize(&self) {
+ fn drop(&self) {
self.timer_chan.send(TimerMessage_Close);
}
}