From 561fdbb150172271c3ab1a0c4344d22ae9127d81 Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Tue, 15 Dec 2015 23:55:06 +0100 Subject: [PATCH] Merge CGClassConstructHook and CGClassNameConstructHook (fixes #8934) --- .../dom/bindings/codegen/CodegenRust.py | 51 +++++-------------- 1 file changed, 14 insertions(+), 37 deletions(-) diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index 75de595694c..e3f15872603 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -4722,50 +4722,26 @@ class CGClassConstructHook(CGAbstractExternMethod): """ JS-visible constructor for our objects """ - def __init__(self, descriptor): + def __init__(self, descriptor, constructor=None): args = [Argument('*mut JSContext', 'cx'), Argument('u32', 'argc'), Argument('*mut JSVal', 'vp')] - CGAbstractExternMethod.__init__(self, descriptor, CONSTRUCT_HOOK_NAME, - 'bool', args) - self._ctor = self.descriptor.interface.ctor() - - def define(self): - if not self._ctor: - return "" - return CGAbstractExternMethod.define(self) + name = CONSTRUCT_HOOK_NAME + if constructor: + name += "_" + constructor.identifier.name + else: + constructor = descriptor.interface.ctor() + assert constructor + CGAbstractExternMethod.__init__(self, descriptor, name, 'bool', args) + self.constructor = constructor def definition_body(self): preamble = CGGeneric("""\ let global = global_root_from_object(JS_CALLEE(cx, vp).to_object()); let args = CallArgs::from_vp(vp, argc); """) - name = self._ctor.identifier.name + name = self.constructor.identifier.name nativeName = MakeNativeName(self.descriptor.binaryNameFor(name)) callGenerator = CGMethodCall(["global.r()"], nativeName, True, - self.descriptor, self._ctor) - return CGList([preamble, callGenerator]) - - -class CGClassNameConstructHook(CGAbstractExternMethod): - """ - JS-visible named constructor for our objects - """ - def __init__(self, descriptor, ctor): - args = [Argument('*mut JSContext', 'cx'), Argument('u32', 'argc'), Argument('*mut JSVal', 'vp')] - self._ctor = ctor - CGAbstractExternMethod.__init__(self, descriptor, - CONSTRUCT_HOOK_NAME + "_" + - self._ctor.identifier.name, - 'bool', args) - - def definition_body(self): - preamble = CGGeneric("""\ -let global = global_root_from_object(JS_CALLEE(cx, vp).to_object()); -let args = CallArgs::from_vp(vp, argc); -""") - name = self._ctor.identifier.name - nativeName = MakeNativeName(self.descriptor.binaryNameFor(name)) - callGenerator = CGMethodCall(["global.r()"], nativeName, True, - self.descriptor, self._ctor) + self.descriptor, self.constructor) return CGList([preamble, callGenerator]) @@ -4932,9 +4908,10 @@ class CGDescriptor(CGThing): cgThings.append(CGClassTraceHook(descriptor)) if descriptor.interface.hasInterfaceObject(): - cgThings.append(CGClassConstructHook(descriptor)) + if descriptor.interface.ctor(): + cgThings.append(CGClassConstructHook(descriptor)) for ctor in descriptor.interface.namedConstructors: - cgThings.append(CGClassNameConstructHook(descriptor, ctor)) + cgThings.append(CGClassConstructHook(descriptor, ctor)) cgThings.append(CGInterfaceObjectJSClass(descriptor)) if not descriptor.interface.isCallback():