diff options
author | bors-servo <metajack+bors@gmail.com> | 2014-11-28 09:24:44 -0700 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2014-11-28 09:24:44 -0700 |
commit | 82050d1e535681ea993e4290d02bcf4b9f4ee5a2 (patch) | |
tree | 35fde6cd718b3e2da95986c00bb9997837000ce7 /components/script/dom/bindings/codegen/CodegenRust.py | |
parent | fafd3fd8ba6d2e43ad8cc34ac0f4cc9e835e6867 (diff) | |
parent | 1305ac4dd0e6764ac929c0e9303fb50ce291df74 (diff) | |
download | servo-82050d1e535681ea993e4290d02bcf4b9f4ee5a2.tar.gz servo-82050d1e535681ea993e4290d02bcf4b9f4ee5a2.zip |
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).
Diffstat (limited to 'components/script/dom/bindings/codegen/CodegenRust.py')
-rw-r--r-- | components/script/dom/bindings/codegen/CodegenRust.py | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index 9a2cb83bcb1..fbb67e5bb9e 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -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', |