From 7e7b421db9ff15b8a9093cb0a7963b09594986b3 Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Tue, 21 Apr 2015 22:53:58 +0200 Subject: [PATCH] Fix generation of static JS methods They now take a global argument. --- .../script/dom/bindings/codegen/CodegenRust.py | 12 ++++++++---- components/script/dom/testbinding.rs | 8 ++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index 960a84b1717..3f806ea05a5 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -2616,7 +2616,11 @@ class CGAbstractStaticBindingMethod(CGAbstractMethod): CGAbstractMethod.__init__(self, descriptor, name, "JSBool", args, extern=True) def definition_body(self): - return self.generate_code() + preamble = CGGeneric("""\ +let global = global_object_for_js_object(JS_CALLEE(cx, vp).to_object()); +let global = global.root(); +""") + return CGList([preamble, self.generate_code()]) def generate_code(self): assert False # Override me @@ -2674,7 +2678,7 @@ class CGStaticMethod(CGAbstractStaticBindingMethod): def generate_code(self): nativeName = CGSpecializedMethod.makeNativeName(self.descriptor, self.method) - return CGMethodCall([], nativeName, True, self.descriptor, self.method) + return CGMethodCall(["global.r()"], nativeName, True, self.descriptor, self.method) class CGGenericGetter(CGAbstractBindingMethod): @@ -2748,7 +2752,7 @@ class CGStaticGetter(CGAbstractStaticBindingMethod): def generate_code(self): nativeName = CGSpecializedGetter.makeNativeName(self.descriptor, self.attr) - return CGGetterCall([], self.attr.type, nativeName, self.descriptor, + return CGGetterCall(["global.r()"], self.attr.type, nativeName, self.descriptor, self.attr) @@ -2827,7 +2831,7 @@ class CGStaticSetter(CGAbstractStaticBindingMethod): " throw_type_error(cx, \"Not enough arguments to %s setter.\");\n" " return 0;\n" "}" % self.attr.identifier.name) - call = CGSetterCall([], self.attr.type, nativeName, self.descriptor, + call = CGSetterCall(["global.r()"], self.attr.type, nativeName, self.descriptor, self.attr) return CGList([checkForArg, call]) diff --git a/components/script/dom/testbinding.rs b/components/script/dom/testbinding.rs index a4bda4eb817..20451f64648 100644 --- a/components/script/dom/testbinding.rs +++ b/components/script/dom/testbinding.rs @@ -12,7 +12,7 @@ use dom::bindings::codegen::UnionTypes::EventOrString; use dom::bindings::codegen::UnionTypes::EventOrString::eString; use dom::bindings::codegen::UnionTypes::HTMLElementOrLong; use dom::bindings::codegen::UnionTypes::HTMLElementOrLong::eLong; -use dom::bindings::global::GlobalField; +use dom::bindings::global::{GlobalField, GlobalRef}; use dom::bindings::js::{JSRef, Temporary}; use dom::bindings::num::Finite; use dom::bindings::str::{ByteString, USVString}; @@ -361,8 +361,8 @@ impl<'a> TestBindingMethods for JSRef<'a, TestBinding> { } impl TestBinding { - pub fn BooleanAttributeStatic() -> bool { false } - pub fn SetBooleanAttributeStatic(_: bool) {} - pub fn ReceiveVoidStatic() {} + pub fn BooleanAttributeStatic(_: GlobalRef) -> bool { false } + pub fn SetBooleanAttributeStatic(_: GlobalRef, _: bool) {} + pub fn ReceiveVoidStatic(_: GlobalRef) {} }