mirror of
https://github.com/servo/servo.git
synced 2025-08-04 21:20:23 +01:00
auto merge of #4130 : saneyuki/servo/cast, r=Manishearth
Fix #4124 This also introduce `BarCast::from_actual()` which is used for up-cast for dom's actual data types (non JS pointer values).
This commit is contained in:
commit
82050d1e53
6 changed files with 14 additions and 28 deletions
|
@ -39,7 +39,7 @@ use util::{PrivateLayoutData};
|
||||||
use gfx::display_list::OpaqueNode;
|
use gfx::display_list::OpaqueNode;
|
||||||
use script::dom::bindings::codegen::InheritTypes::{ElementCast, HTMLIFrameElementCast};
|
use script::dom::bindings::codegen::InheritTypes::{ElementCast, HTMLIFrameElementCast};
|
||||||
use script::dom::bindings::codegen::InheritTypes::{HTMLImageElementCast, HTMLInputElementCast};
|
use script::dom::bindings::codegen::InheritTypes::{HTMLImageElementCast, HTMLInputElementCast};
|
||||||
use script::dom::bindings::codegen::InheritTypes::{TextCast};
|
use script::dom::bindings::codegen::InheritTypes::{NodeCast, TextCast};
|
||||||
use script::dom::bindings::js::JS;
|
use script::dom::bindings::js::JS;
|
||||||
use script::dom::element::{Element, HTMLAreaElementTypeId, HTMLAnchorElementTypeId};
|
use script::dom::element::{Element, HTMLAreaElementTypeId, HTMLAnchorElementTypeId};
|
||||||
use script::dom::element::{HTMLLinkElementTypeId, LayoutElementHelpers, RawLayoutElementHelpers};
|
use script::dom::element::{HTMLLinkElementTypeId, LayoutElementHelpers, RawLayoutElementHelpers};
|
||||||
|
@ -508,7 +508,7 @@ impl<'le> TElement<'le> for LayoutElement<'le> {
|
||||||
|
|
||||||
fn get_link(self) -> Option<&'le str> {
|
fn get_link(self) -> Option<&'le str> {
|
||||||
// FIXME: This is HTML only.
|
// FIXME: This is HTML only.
|
||||||
match self.element.node().type_id_for_layout() {
|
match NodeCast::from_actual(self.element).type_id_for_layout() {
|
||||||
// http://www.whatwg.org/specs/web-apps/current-work/multipage/selectors.html#
|
// http://www.whatwg.org/specs/web-apps/current-work/multipage/selectors.html#
|
||||||
// selector-link
|
// selector-link
|
||||||
ElementNodeTypeId(HTMLAnchorElementTypeId) |
|
ElementNodeTypeId(HTMLAnchorElementTypeId) |
|
||||||
|
@ -525,7 +525,7 @@ impl<'le> TElement<'le> for LayoutElement<'le> {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn get_hover_state(self) -> bool {
|
fn get_hover_state(self) -> bool {
|
||||||
unsafe {
|
unsafe {
|
||||||
self.element.node().get_hover_state_for_layout()
|
NodeCast::from_actual(self.element).get_hover_state_for_layout()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -539,14 +539,14 @@ impl<'le> TElement<'le> for LayoutElement<'le> {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn get_disabled_state(self) -> bool {
|
fn get_disabled_state(self) -> bool {
|
||||||
unsafe {
|
unsafe {
|
||||||
self.element.node().get_disabled_state_for_layout()
|
NodeCast::from_actual(self.element).get_disabled_state_for_layout()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn get_enabled_state(self) -> bool {
|
fn get_enabled_state(self) -> bool {
|
||||||
unsafe {
|
unsafe {
|
||||||
self.element.node().get_enabled_state_for_layout()
|
NodeCast::from_actual(self.element).get_enabled_state_for_layout()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5185,7 +5185,8 @@ class GlobalGenRoots():
|
||||||
CGGeneric("use dom::bindings::js::{JS, JSRef, Temporary};\n"),
|
CGGeneric("use dom::bindings::js::{JS, JSRef, Temporary};\n"),
|
||||||
CGGeneric("use dom::bindings::trace::JSTraceable;\n"),
|
CGGeneric("use dom::bindings::trace::JSTraceable;\n"),
|
||||||
CGGeneric("use dom::bindings::utils::Reflectable;\n"),
|
CGGeneric("use dom::bindings::utils::Reflectable;\n"),
|
||||||
CGGeneric("use js::jsapi::JSTracer;\n\n")]
|
CGGeneric("use js::jsapi::JSTracer;\n\n"),
|
||||||
|
CGGeneric("use std::mem;\n\n")]
|
||||||
for descriptor in descriptors:
|
for descriptor in descriptors:
|
||||||
name = descriptor.name
|
name = descriptor.name
|
||||||
protos = [CGGeneric('pub trait %s {}\n' % (name + 'Base'))]
|
protos = [CGGeneric('pub trait %s {}\n' % (name + 'Base'))]
|
||||||
|
@ -5199,13 +5200,13 @@ class GlobalGenRoots():
|
||||||
delegate = string.Template('''impl ${selfName} for ${baseName} {
|
delegate = string.Template('''impl ${selfName} for ${baseName} {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn ${fname}(&self) -> bool {
|
fn ${fname}(&self) -> bool {
|
||||||
self.${parentName}().${fname}()
|
${parentName}Cast::from_actual(self).${fname}()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
''').substitute({'fname': 'is_' + name.lower(),
|
''').substitute({'fname': 'is_' + name.lower(),
|
||||||
'selfName': name + 'Derived',
|
'selfName': name + 'Derived',
|
||||||
'baseName': protoDescriptor.concreteType,
|
'baseName': protoDescriptor.concreteType,
|
||||||
'parentName': protoDescriptor.prototypeChain[-2].lower()})
|
'parentName': protoDescriptor.prototypeChain[-2]})
|
||||||
derived += [CGGeneric(delegate)]
|
derived += [CGGeneric(delegate)]
|
||||||
derived += [CGGeneric('\n')]
|
derived += [CGGeneric('\n')]
|
||||||
|
|
||||||
|
@ -5251,6 +5252,11 @@ class GlobalGenRoots():
|
||||||
fn from_temporary<T: ${fromBound}+Reflectable>(derived: Temporary<T>) -> Temporary<Self> {
|
fn from_temporary<T: ${fromBound}+Reflectable>(derived: Temporary<T>) -> Temporary<Self> {
|
||||||
unsafe { derived.transmute() }
|
unsafe { derived.transmute() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline(always)]
|
||||||
|
fn from_actual<'a, T: ${fromBound}+Reflectable>(derived: &T) -> &'a Self {
|
||||||
|
unsafe { mem::transmute(derived) }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
''').substitute({'checkFn': 'is_' + name.lower(),
|
''').substitute({'checkFn': 'is_' + name.lower(),
|
||||||
'castTraitName': name + 'Cast',
|
'castTraitName': name + 'Cast',
|
||||||
|
|
|
@ -183,11 +183,6 @@ impl Element {
|
||||||
document, ElementBinding::Wrap)
|
document, ElementBinding::Wrap)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
|
||||||
pub fn node<'a>(&'a self) -> &'a Node {
|
|
||||||
&self.node
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn local_name<'a>(&'a self) -> &'a Atom {
|
pub fn local_name<'a>(&'a self) -> &'a Atom {
|
||||||
&self.local_name
|
&self.local_name
|
||||||
|
|
|
@ -50,11 +50,6 @@ impl HTMLElement {
|
||||||
let element = HTMLElement::new_inherited(HTMLElementTypeId, localName, prefix, document);
|
let element = HTMLElement::new_inherited(HTMLElementTypeId, localName, prefix, document);
|
||||||
Node::reflect_node(box element, document, HTMLElementBinding::Wrap)
|
Node::reflect_node(box element, document, HTMLElementBinding::Wrap)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
|
||||||
pub fn element<'a>(&'a self) -> &'a Element {
|
|
||||||
&self.element
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
trait PrivateHTMLElementHelpers {
|
trait PrivateHTMLElementHelpers {
|
||||||
|
|
|
@ -1149,11 +1149,6 @@ impl Node {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
|
||||||
pub fn eventtarget<'a>(&'a self) -> &'a EventTarget {
|
|
||||||
&self.eventtarget
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn layout_data(&self) -> Ref<Option<LayoutData>> {
|
pub fn layout_data(&self) -> Ref<Option<LayoutData>> {
|
||||||
self.layout_data.borrow()
|
self.layout_data.borrow()
|
||||||
|
|
|
@ -66,11 +66,6 @@ impl UIEvent {
|
||||||
init.view.root_ref(), init.detail);
|
init.view.root_ref(), init.detail);
|
||||||
Ok(event)
|
Ok(event)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
|
||||||
pub fn event<'a>(&'a self) -> &'a Event {
|
|
||||||
&self.event
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> UIEventMethods for JSRef<'a, UIEvent> {
|
impl<'a> UIEventMethods for JSRef<'a, UIEvent> {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue