diff options
author | snf <snf@users.noreply.github.com> | 2015-04-26 02:05:38 +0100 |
---|---|---|
committer | snf <snf@users.noreply.github.com> | 2015-04-27 23:47:22 +0100 |
commit | cdcd6670ba39be3cbaffb154f876b052b6ecdc51 (patch) | |
tree | a4d5cd91ca2bcabae3324e51d4eca70d01004f68 /components/script/dom/bindings/codegen/CodegenRust.py | |
parent | 8ecb9d681c385995b082d67874fdfa7f1e929e1f (diff) | |
download | servo-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.py | 45 |
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()) |