diff options
author | Jack Moffitt <jack@metajack.im> | 2013-07-08 18:41:33 -0600 |
---|---|---|
committer | Jack Moffitt <jack@metajack.im> | 2013-07-09 14:37:53 -0600 |
commit | 870db398366bb5f2a19fdc301d8d7641c27cae0b (patch) | |
tree | ca298f6386ccca579d09ef7ec68d625d4dde00b2 /src/components/script/dom | |
parent | e0e5e1a2a7c33d265e1995a02211a8926980ce82 (diff) | |
download | servo-870db398366bb5f2a19fdc301d8d7641c27cae0b.tar.gz servo-870db398366bb5f2a19fdc301d8d7641c27cae0b.zip |
Update to latest Rust.
Diffstat (limited to 'src/components/script/dom')
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); } } |