aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/utils.rs
diff options
context:
space:
mode:
authorAnthony Ramine <n.oxyde@gmail.com>2015-10-06 02:59:38 +0200
committerAnthony Ramine <n.oxyde@gmail.com>2015-10-21 10:59:36 +0200
commitc77d3b965f6099ffcb2eddc359948f106afca7b5 (patch)
tree1f421208c1a17bc21c3c3b06c45dfb64650dae6e /components/script/dom/bindings/utils.rs
parent7fb3c51bbbbc708b1472cb79751349adff8b9501 (diff)
downloadservo-c77d3b965f6099ffcb2eddc359948f106afca7b5.tar.gz
servo-c77d3b965f6099ffcb2eddc359948f106afca7b5.zip
Introduce IDLInterface::derives()
This method is given a DOMClass value and returns whether it derives from Self. Interfaces with no descendants directly check whether the given DOMClass is the same as their own.
Diffstat (limited to 'components/script/dom/bindings/utils.rs')
-rw-r--r--components/script/dom/bindings/utils.rs7
1 files changed, 5 insertions, 2 deletions
diff --git a/components/script/dom/bindings/utils.rs b/components/script/dom/bindings/utils.rs
index af028ebfcbc..4b4e6cfea93 100644
--- a/components/script/dom/bindings/utils.rs
+++ b/components/script/dom/bindings/utils.rs
@@ -8,7 +8,7 @@ use dom::bindings::codegen::InheritTypes::TopTypeId;
use dom::bindings::codegen::PrototypeList;
use dom::bindings::codegen::PrototypeList::MAX_PROTO_CHAIN_LENGTH;
use dom::bindings::conversions::native_from_handleobject;
-use dom::bindings::conversions::private_from_proto_chain;
+use dom::bindings::conversions::private_from_proto_check;
use dom::bindings::conversions::{is_dom_class, jsstring_to_str};
use dom::bindings::error::throw_type_error;
use dom::bindings::error::{Error, ErrorResult, Fallible, throw_invalid_this};
@@ -755,7 +755,10 @@ unsafe fn generic_call(cx: *mut JSContext, argc: libc::c_uint, vp: *mut JSVal,
let info = RUST_FUNCTION_VALUE_TO_JITINFO(JS_CALLEE(cx, vp));
let proto_id = (*info).protoID;
let depth = (*info).depth;
- let this = match private_from_proto_chain(obj.ptr, proto_id, depth) {
+ let proto_check = |class: &'static DOMClass| {
+ class.interface_chain[depth as usize] as u16 == proto_id
+ };
+ let this = match private_from_proto_check(obj.ptr, proto_check) {
Ok(val) => val,
Err(()) => {
if is_lenient {