aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/codegen
diff options
context:
space:
mode:
authorShinichi Morimoto <shnmorimoto@gmail.com>2020-03-28 20:17:16 +0900
committerShinichi Morimoto <shnmorimoto@gmail.com>2020-03-28 20:18:30 +0900
commit80b2a87be718d81032a14bc96d94bb37318c31d8 (patch)
treef429e379d18cdff168722f2037f817c14644dec8 /components/script/dom/bindings/codegen
parent7d66871a9f3c9224f3ecf37ec2c66dd410db648c (diff)
downloadservo-80b2a87be718d81032a14bc96d94bb37318c31d8.tar.gz
servo-80b2a87be718d81032a14bc96d94bb37318c31d8.zip
fixed #25281
Diffstat (limited to 'components/script/dom/bindings/codegen')
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py11
1 files changed, 9 insertions, 2 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index 8f0281be802..3191a7acc4d 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -2968,12 +2968,19 @@ class CGCollectJSONAttributesMethod(CGAbstractMethod):
def definition_body(self):
ret = ''
interface = self.descriptor.interface
+
for m in interface.members:
if m.isAttr() and not m.isStatic() and m.type.isJSONType():
name = m.identifier.name
+ conditions = MemberCondition(None, None, m.exposureSet)
+ ret_conditions = 'vec![' + ",".join(conditions) + "]"
ret += fill(
"""
- rooted!(in(cx) let mut temp = UndefinedValue());
+ let conditions = ${conditions};
+ if !conditions.iter().any(|c| c.is_satisfied(SafeJSContext::from_ptr(cx), HandleObject::from_raw(obj), HandleObject::from_raw(obj))) {
+ return false;
+ }
+ rooted!(in(cx) let mut temp = UndefinedValue());
if !get_${name}(cx, obj, this, JSJitGetterCallArgs { _base: temp.handle_mut().into() }) {
return false;
}
@@ -2983,7 +2990,7 @@ class CGCollectJSONAttributesMethod(CGAbstractMethod):
return false;
}
""",
- name=name, nameAsArray=str_to_const_array(name))
+ name=name, nameAsArray=str_to_const_array(name), conditions=ret_conditions)
ret += 'return true;\n'
return CGGeneric(ret)