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:
bors-servo 2014-11-28 09:24:44 -07:00
commit 82050d1e53
6 changed files with 14 additions and 28 deletions

View file

@ -5185,7 +5185,8 @@ class GlobalGenRoots():
CGGeneric("use dom::bindings::js::{JS, JSRef, Temporary};\n"),
CGGeneric("use dom::bindings::trace::JSTraceable;\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:
name = descriptor.name
protos = [CGGeneric('pub trait %s {}\n' % (name + 'Base'))]
@ -5199,13 +5200,13 @@ class GlobalGenRoots():
delegate = string.Template('''impl ${selfName} for ${baseName} {
#[inline]
fn ${fname}(&self) -> bool {
self.${parentName}().${fname}()
${parentName}Cast::from_actual(self).${fname}()
}
}
''').substitute({'fname': 'is_' + name.lower(),
'selfName': name + 'Derived',
'baseName': protoDescriptor.concreteType,
'parentName': protoDescriptor.prototypeChain[-2].lower()})
'parentName': protoDescriptor.prototypeChain[-2]})
derived += [CGGeneric(delegate)]
derived += [CGGeneric('\n')]
@ -5251,6 +5252,11 @@ class GlobalGenRoots():
fn from_temporary<T: ${fromBound}+Reflectable>(derived: Temporary<T>) -> Temporary<Self> {
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(),
'castTraitName': name + 'Cast',

View file

@ -183,11 +183,6 @@ impl Element {
document, ElementBinding::Wrap)
}
#[inline]
pub fn node<'a>(&'a self) -> &'a Node {
&self.node
}
#[inline]
pub fn local_name<'a>(&'a self) -> &'a Atom {
&self.local_name

View file

@ -50,11 +50,6 @@ impl HTMLElement {
let element = HTMLElement::new_inherited(HTMLElementTypeId, localName, prefix, document);
Node::reflect_node(box element, document, HTMLElementBinding::Wrap)
}
#[inline]
pub fn element<'a>(&'a self) -> &'a Element {
&self.element
}
}
trait PrivateHTMLElementHelpers {

View file

@ -1149,11 +1149,6 @@ impl Node {
}
}
#[inline]
pub fn eventtarget<'a>(&'a self) -> &'a EventTarget {
&self.eventtarget
}
#[inline]
pub fn layout_data(&self) -> Ref<Option<LayoutData>> {
self.layout_data.borrow()

View file

@ -66,11 +66,6 @@ impl UIEvent {
init.view.root_ref(), init.detail);
Ok(event)
}
#[inline]
pub fn event<'a>(&'a self) -> &'a Event {
&self.event
}
}
impl<'a> UIEventMethods for JSRef<'a, UIEvent> {