aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/codegen/CodegenRust.py
diff options
context:
space:
mode:
authorsnf <snf@users.noreply.github.com>2015-04-26 02:05:38 +0100
committersnf <snf@users.noreply.github.com>2015-04-27 23:47:22 +0100
commitcdcd6670ba39be3cbaffb154f876b052b6ecdc51 (patch)
treea4d5cd91ca2bcabae3324e51d4eca70d01004f68 /components/script/dom/bindings/codegen/CodegenRust.py
parent8ecb9d681c385995b082d67874fdfa7f1e929e1f (diff)
downloadservo-cdcd6670ba39be3cbaffb154f876b052b6ecdc51.tar.gz
servo-cdcd6670ba39be3cbaffb154f876b052b6ecdc51.zip
fix defineproperty for cases with namedsetter
Diffstat (limited to 'components/script/dom/bindings/codegen/CodegenRust.py')
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py45
1 files changed, 31 insertions, 14 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index 7100a8c6f82..11b18acb071 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -3745,6 +3745,14 @@ class CGProxyNamedGetter(CGProxySpecialOperation):
self.templateValues = templateValues
CGProxySpecialOperation.__init__(self, descriptor, 'NamedGetter')
+class CGProxyNamedPresenceChecker(CGProxyNamedGetter):
+ """
+ Class to generate a call that checks whether a named property exists.
+ For now, we just delegate to CGProxyNamedGetter
+ """
+ def __init__(self, descriptor):
+ CGProxyNamedGetter.__init__(self, descriptor)
+
class CGProxyNamedSetter(CGProxySpecialOperation):
"""
Class to generate a call to a named setter.
@@ -3872,6 +3880,7 @@ return true;"""
def definition_body(self):
return CGGeneric(self.getBody())
+# TODO(Issue 5876)
class CGDOMJSProxyHandler_defineProperty(CGAbstractExternMethod):
def __init__(self, descriptor):
args = [Argument('*mut JSContext', 'cx'), Argument('*mut JSObject', 'proxy'),
@@ -3911,21 +3920,29 @@ class CGDOMJSProxyHandler_defineProperty(CGAbstractExternMethod):
" let this = Unrooted::from_raw(this);\n" +
" let this = this.root();\n" +
CGIndenter(CGProxyNamedSetter(self.descriptor)).define() +
+ " return true;\n" +
+ "} else {\n" +
+ " return false;\n" +
"}\n")
- elif self.descriptor.operations['NamedGetter']:
- set += ("if RUST_JSID_IS_STRING(id) != 0 {\n" +
- " let name = jsid_to_str(cx, id);\n" +
- " let this = UnwrapProxy(proxy);\n" +
- " let this = Unrooted::from_raw(this);\n" +
- " let this = this.root();\n" +
- CGIndenter(CGProxyNamedGetter(self.descriptor)).define() +
- " if (found) {\n"
- " return false;\n" +
- " //return ThrowErrorMessage(cx, MSG_NO_PROPERTY_SETTER, \"%s\");\n" +
- " }\n" +
- " return true;\n"
- "}\n") % (self.descriptor.name)
- return set + """return proxyhandler::define_property(%s);""" % ", ".join(a.name for a in self.args)
+ else:
+ if self.descriptor.operations['NamedGetter']:
+ set += ("if RUST_JSID_IS_STRING(id) != 0 {\n" +
+ " let name = jsid_to_str(cx, id);\n" +
+ " let this = UnwrapProxy(proxy);\n" +
+ " let this = Unrooted::from_raw(this);\n" +
+ " let this = this.root();\n" +
+ CGProxyNamedPresenceChecker(self.descriptor).define() +
+ " if (found) {\n" +
+ # TODO(Issue 5876)
+ " //return js::IsInNonStrictPropertySet(cx)\n" +
+ " // ? opresult.succeed()\n" +
+ " // : ThrowErrorMessage(cx, MSG_NO_NAMED_SETTER, \"${name}\");\n" +
+ " return true;\n" +
+ " }\n" +
+ "}"
+ ) % (self.descriptor.name, self.descriptor.name)
+ set += "return proxyhandler::define_property(%s);" % ", ".join(a.name for a in self.args)
+ return set
def definition_body(self):
return CGGeneric(self.getBody())