aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/codegen
diff options
context:
space:
mode:
authorAnthony Ramine <n.oxyde@gmail.com>2016-08-24 15:29:12 +0200
committerAnthony Ramine <n.oxyde@gmail.com>2016-08-25 15:46:43 +0200
commitf70fa989547a256255ae74264ac6e906709b72f4 (patch)
treef49beefd8ad801a6950f3762783774565a70fccf /components/script/dom/bindings/codegen
parentfbc8938bee86cdc8c9427092b8b2c5dd8286a47b (diff)
downloadservo-f70fa989547a256255ae74264ac6e906709b72f4.tar.gz
servo-f70fa989547a256255ae74264ac6e906709b72f4.zip
Make has_property_on_prototype fallible
Diffstat (limited to 'components/script/dom/bindings/codegen')
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py35
1 files changed, 25 insertions, 10 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index 8e04fc76a10..4eb02f796e0 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -4724,10 +4724,17 @@ class CGDOMJSProxyHandler_getOwnPropertyDescriptor(CGAbstractExternMethod):
# Once we start supporting OverrideBuiltins we need to make
# ResolveOwnProperty or EnumerateOwnProperties filter out named
# properties that shadow prototype properties.
- namedGet = ("\n" +
- "if RUST_JSID_IS_STRING(id) && !has_property_on_prototype(cx, proxy, id) {\n" +
- CGIndenter(CGProxyNamedGetter(self.descriptor, templateValues)).define() + "\n" +
- "}\n")
+ namedGet = """
+if RUST_JSID_IS_STRING(id) {
+ let mut has_on_proto = false;
+ if !has_property_on_prototype(cx, proxy, id, &mut has_on_proto) {
+ return false;
+ }
+ if !has_on_proto {
+ %s
+ }
+}
+""" % CGIndenter(CGProxyNamedGetter(self.descriptor, templateValues), 8).define()
else:
namedGet = ""
@@ -4952,12 +4959,20 @@ class CGDOMJSProxyHandler_hasOwn(CGAbstractExternMethod):
namedGetter = self.descriptor.operations['NamedGetter']
if namedGetter:
- named = ("if RUST_JSID_IS_STRING(id) && !has_property_on_prototype(cx, proxy, id) {\n" +
- CGIndenter(CGProxyNamedGetter(self.descriptor)).define() + "\n" +
- " *bp = found;\n"
- " return true;\n"
- "}\n" +
- "\n")
+ named = """\
+if RUST_JSID_IS_STRING(id) {
+ let mut has_on_proto = false;
+ if !has_property_on_prototype(cx, proxy, id, &mut has_on_proto) {
+ return false;
+ }
+ if !has_on_proto {
+ %s
+ *bp = found;
+ return true;
+ }
+}
+
+""" % CGIndenter(CGProxyNamedGetter(self.descriptor), 8).define()
else:
named = ""