From 6cf79732f9c1ebb13f1bd354e24efee1ca073e5a Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Thu, 13 Mar 2014 23:17:51 +0100 Subject: [PATCH 01/18] Move the responsibility for indentation to CGAbstractBindingMethod.definition_body from its callees. --- .../dom/bindings/codegen/CodegenRust.py | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index 293cdf0ca4d..c6ec69c43b1 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -2337,14 +2337,14 @@ class CGAbstractBindingMethod(CGAbstractExternMethod): unwrapThis = str(CastableObjectUnwrapper( FakeCastableDescriptor(self.descriptor), "obj", self.unwrapFailureCode)) - unwrapThis = CGIndenter( - CGGeneric("let obj: *mut JSObject = JS_THIS_OBJECT(cx, vp as *mut JSVal);\n" - "if obj.is_null() {\n" - " return false as JSBool;\n" - "}\n" - "\n" - "let this: JS<%s> = %s;\n" % (self.descriptor.concreteType, unwrapThis))) - return CGList([ unwrapThis, self.generate_code() ], "\n").define() + unwrapThis = CGGeneric( + "let obj: *mut JSObject = JS_THIS_OBJECT(cx, vp as *mut JSVal);\n" + "if obj.is_null() {\n" + " return false as JSBool;\n" + "}\n" + "\n" + "let this: JS<%s> = %s;\n" % (self.descriptor.concreteType, unwrapThis)) + return CGIndenter(CGList([ unwrapThis, self.generate_code() ], "\n")).define() def generate_code(self): assert(False) # Override me @@ -2359,9 +2359,9 @@ class CGGenericMethod(CGAbstractBindingMethod): CGAbstractBindingMethod.__init__(self, descriptor, 'genericMethod', args) def generate_code(self): - return CGIndenter(CGGeneric( + return CGGeneric( "let _info: *JSJitInfo = RUST_FUNCTION_VALUE_TO_JITINFO(JS_CALLEE(cx, vp));\n" - "return CallJitMethodOp(_info, cx, obj, this.unsafe_get() as *libc::c_void, argc, vp);")) + "return CallJitMethodOp(_info, cx, obj, this.unsafe_get() as *libc::c_void, argc, vp);") class CGSpecializedMethod(CGAbstractExternMethod): """ @@ -2403,9 +2403,9 @@ class CGGenericGetter(CGAbstractBindingMethod): unwrapFailureCode) def generate_code(self): - return CGIndenter(CGGeneric( + return CGGeneric( "let info: *JSJitInfo = RUST_FUNCTION_VALUE_TO_JITINFO(JS_CALLEE(cx, vp));\n" - "return CallJitPropertyOp(info, cx, obj, this.unsafe_get() as *libc::c_void, vp);\n")) + "return CallJitPropertyOp(info, cx, obj, this.unsafe_get() as *libc::c_void, vp);\n") class CGSpecializedGetter(CGAbstractExternMethod): """ @@ -2453,7 +2453,7 @@ class CGGenericSetter(CGAbstractBindingMethod): unwrapFailureCode) def generate_code(self): - return CGIndenter(CGGeneric( + return CGGeneric( "let mut undef = UndefinedValue();\n" "let argv: *mut JSVal = if argc != 0 { JS_ARGV(cx, vp) } else { &mut undef as *mut JSVal };\n" "let info: *JSJitInfo = RUST_FUNCTION_VALUE_TO_JITINFO(JS_CALLEE(cx, vp));\n" @@ -2461,7 +2461,7 @@ class CGGenericSetter(CGAbstractBindingMethod): " return 0;\n" "}\n" "*vp = UndefinedValue();\n" - "return 1;")) + "return 1;") class CGSpecializedSetter(CGAbstractExternMethod): """ From 644df404f58b62a770d4328f1f66dc005bcbdad1 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sat, 21 Jun 2014 13:34:37 +0200 Subject: [PATCH 02/18] Return a CGThing from CGAbstractMethod.definition_body. --- .../dom/bindings/codegen/CodegenRust.py | 67 +++++++++++-------- 1 file changed, 38 insertions(+), 29 deletions(-) diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index c6ec69c43b1..4d00800fe28 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -1715,7 +1715,7 @@ class CGAbstractMethod(CGThing): return "\n }\n" if self.unsafe else "" def define(self): - return self.definition_prologue() + "\n" + self.definition_body() + self.definition_epilogue() + return self.definition_prologue() + "\n" + self.definition_body().define() + self.definition_epilogue() def definition_prologue(self): return "%sfn %s%s(%s)%s {%s" % (self._decorators(), self.name, self._template(), @@ -1770,7 +1770,7 @@ class CGWrapMethod(CGAbstractMethod): def definition_body(self): if not self.descriptor.createGlobal: - return """ + return CGGeneric(""" let scope = aScope.reflector().get_jsobject(); assert!(scope.is_not_null()); assert!(((*JS_GetClass(scope)).flags & JSCLASS_IS_GLOBAL) != 0); @@ -1782,16 +1782,16 @@ class CGWrapMethod(CGAbstractMethod): raw.reflector().set_jsobject(obj); - return raw;""" % CreateBindingJSObject(self.descriptor, "scope") + return raw;""" % CreateBindingJSObject(self.descriptor, "scope")) else: - return """ + return CGGeneric(""" %s with_compartment(aCx, obj, || { let proto = GetProtoObject(aCx, obj, obj); JS_SetPrototype(aCx, obj, proto); }); raw.reflector().set_jsobject(obj); - return raw;""" % CreateBindingJSObject(self.descriptor) + return raw;""" % CreateBindingJSObject(self.descriptor)) class CGIDLInterface(CGThing): @@ -1925,7 +1925,7 @@ class CGCreateInterfaceObjectsMethod(CGAbstractMethod): CGGeneric(call % self.properties.variableNames())], "\n\n") #return CGIndenter(CGWrapper(functionBody, pre="/*", post="*/return ptr::null()")).define() - return CGIndenter(functionBody).define() + return CGIndenter(functionBody) class CGGetPerInterfaceObject(CGAbstractMethod): """ @@ -1939,7 +1939,7 @@ class CGGetPerInterfaceObject(CGAbstractMethod): '*mut JSObject', args, pub=pub) self.id = idPrefix + "id::" + self.descriptor.name def definition_body(self): - return """ + return CGGeneric(""" /* aGlobal and aReceiver are usually the same, but they can be different too. For example a sandbox often has an xray wrapper for a window as the @@ -1959,7 +1959,7 @@ class CGGetPerInterfaceObject(CGAbstractMethod): tmp } else { cachedObject - }""" % (self.id, self.id) + }""" % (self.id, self.id)) class CGGetProtoObjectMethod(CGGetPerInterfaceObject): """ @@ -1969,9 +1969,12 @@ class CGGetProtoObjectMethod(CGGetPerInterfaceObject): CGGetPerInterfaceObject.__init__(self, descriptor, "GetProtoObject", "PrototypeList::", pub=True) def definition_body(self): - return """ + return CGList([ + CGGeneric(""" /* Get the interface prototype object for this class. This will create the - object as needed. */""" + CGGetPerInterfaceObject.definition_body(self) + object as needed. */"""), + CGGetPerInterfaceObject.definition_body(self), + ]) class CGGetConstructorObjectMethod(CGGetPerInterfaceObject): """ @@ -1981,9 +1984,12 @@ class CGGetConstructorObjectMethod(CGGetPerInterfaceObject): CGGetPerInterfaceObject.__init__(self, descriptor, "GetConstructorObject", "constructors::") def definition_body(self): - return """ + return CGList([ + CGGeneric(""" /* Get the interface object for this class. This will create the object as - needed. */""" + CGGetPerInterfaceObject.definition_body(self) + needed. */"""), + CGGetPerInterfaceObject.definition_body(self), + ]) class CGDefineDOMInterfaceMethod(CGAbstractMethod): """ @@ -2048,7 +2054,7 @@ class CGDefineDOMInterfaceMethod(CGAbstractMethod): assert!(global.is_not_null()); assert!(GetProtoObject(cx, global, global).is_not_null());""" - return body + return CGGeneric(body) def needCx(returnType, arguments, extendedAttributes, considerTypes): return (considerTypes and @@ -2344,7 +2350,7 @@ class CGAbstractBindingMethod(CGAbstractExternMethod): "}\n" "\n" "let this: JS<%s> = %s;\n" % (self.descriptor.concreteType, unwrapThis)) - return CGIndenter(CGList([ unwrapThis, self.generate_code() ], "\n")).define() + return CGIndenter(CGList([ unwrapThis, self.generate_code() ], "\n")) def generate_code(self): assert(False) # Override me @@ -2381,7 +2387,7 @@ class CGSpecializedMethod(CGAbstractExternMethod): return CGWrapper(CGMethodCall([], MakeNativeName(name), self.method.isStatic(), self.descriptor, self.method), pre=" let this = JS::from_raw(this);\n" + - " let mut this = this.root();\n").define() + " let mut this = this.root();\n") class CGGenericGetter(CGAbstractBindingMethod): """ @@ -2432,7 +2438,7 @@ class CGSpecializedGetter(CGAbstractExternMethod): return CGWrapper(CGIndenter(CGGetterCall([], self.attr.type, nativeName, self.descriptor, self.attr)), pre=" let this = JS::from_raw(this);\n" + - " let mut this = this.root();\n").define() + " let mut this = this.root();\n") class CGGenericSetter(CGAbstractBindingMethod): """ @@ -2483,7 +2489,7 @@ class CGSpecializedSetter(CGAbstractExternMethod): "Set" + MakeNativeName(name), self.descriptor, self.attr)), pre=" let this = JS::from_raw(this);\n" + - " let mut this = this.root();\n").define() + " let mut this = this.root();\n") class CGMemberJITInfo(CGThing): @@ -3388,12 +3394,12 @@ class CGProxyUnwrap(CGAbstractMethod): CGAbstractMethod.__init__(self, descriptor, "UnwrapProxy", '*' + descriptor.concreteType, args, alwaysInline=True) def definition_body(self): - return """ /*if (xpc::WrapperFactory::IsXrayWrapper(obj)) { + return CGGeneric(""" /*if (xpc::WrapperFactory::IsXrayWrapper(obj)) { obj = js::UnwrapObject(obj); }*/ //MOZ_ASSERT(IsProxy(obj)); let box_ = GetProxyPrivate(obj).to_private() as *%s; - return box_;""" % (self.descriptor.concreteType) + return box_;""" % self.descriptor.concreteType) class CGDOMJSProxyHandler_getOwnPropertyDescriptor(CGAbstractExternMethod): def __init__(self, descriptor): @@ -3490,7 +3496,7 @@ if expando.is_not_null() { return 1;""" def definition_body(self): - return self.getBody() + return CGGeneric(self.getBody()) class CGDOMJSProxyHandler_defineProperty(CGAbstractExternMethod): def __init__(self, descriptor): @@ -3548,7 +3554,7 @@ class CGDOMJSProxyHandler_defineProperty(CGAbstractExternMethod): return set + """return proxyhandler::defineProperty_(%s);""" % ", ".join(a.name for a in self.args) def definition_body(self): - return self.getBody() + return CGGeneric(self.getBody()) class CGDOMJSProxyHandler_hasOwn(CGAbstractExternMethod): def __init__(self, descriptor): @@ -3601,7 +3607,7 @@ if expando.is_not_null() { return 1;""" def definition_body(self): - return self.getBody() + return CGGeneric(self.getBody()) class CGDOMJSProxyHandler_get(CGAbstractExternMethod): def __init__(self, descriptor): @@ -3673,7 +3679,7 @@ if found { return 1;""" % (getIndexedOrExpando, getNamed) def definition_body(self): - return self.getBody() + return CGGeneric(self.getBody()) class CGDOMJSProxyHandler_obj_toString(CGAbstractExternMethod): def __init__(self, descriptor): @@ -3705,7 +3711,7 @@ return xpc_qsStringToJsstring(cx, result, &jsresult) ? jsresult : NULL;""" })""" % self.descriptor.name def definition_body(self): - return self.getBody() + return CGGeneric(self.getBody()) class CGAbstractClassHook(CGAbstractExternMethod): """ @@ -3717,12 +3723,15 @@ class CGAbstractClassHook(CGAbstractExternMethod): args) def definition_body_prologue(self): - return """ + return CGGeneric(""" let this: *%s = unwrap::<%s>(obj); -""" % (self.descriptor.concreteType, self.descriptor.concreteType) +""" % (self.descriptor.concreteType, self.descriptor.concreteType)) def definition_body(self): - return self.definition_body_prologue() + self.generate_code() + return CGList([ + self.definition_body_prologue(), + CGGeneric(self.generate_code()), + ]) def generate_code(self): # Override me @@ -3763,7 +3772,7 @@ class CGClassConstructHook(CGAbstractExternMethod): return CGAbstractExternMethod.define(self) def definition_body(self): - return self.generate_code() + return CGGeneric(self.generate_code()) def generate_code(self): preamble = """ @@ -4113,7 +4122,7 @@ class CGRegisterProtos(CGAbstractMethod): register=True)] return '\n'.join(lines) + '\n' def definition_body(self): - return self._registerProtos() + return CGGeneric(self._registerProtos()) class CGBindingRoot(CGThing): """ From 44a609d5635de95c571436329a5ed580cccbe813 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sat, 21 Jun 2014 13:37:18 +0200 Subject: [PATCH 03/18] Use CGIndenter for CGWrapMethod.definition_body. --- .../dom/bindings/codegen/CodegenRust.py | 66 +++++++++---------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index 4d00800fe28..36cb1ef710b 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -1726,33 +1726,33 @@ class CGAbstractMethod(CGThing): assert(False) # Override me! def CreateBindingJSObject(descriptor, parent=None): - create = " let mut raw: JS<%s> = JS::from_raw(&*aObject);\n" % descriptor.concreteType + create = "let mut raw: JS<%s> = JS::from_raw(&*aObject);\n" % descriptor.concreteType if descriptor.proxy: assert not descriptor.createGlobal create += """ - let js_info = aScope.deref().page().js_info(); - let handler = js_info.get_ref().dom_static.proxy_handlers.deref().get(&(PrototypeList::id::%s as uint)); - let mut private = PrivateValue(squirrel_away_unique(aObject) as *libc::c_void); - let obj = with_compartment(aCx, proto, || { - NewProxyObject(aCx, *handler, - &private, - proto, %s, - ptr::mut_null(), ptr::mut_null()) - }); - assert!(obj.is_not_null()); +let js_info = aScope.deref().page().js_info(); +let handler = js_info.get_ref().dom_static.proxy_handlers.deref().get(&(PrototypeList::id::%s as uint)); +let mut private = PrivateValue(squirrel_away_unique(aObject) as *libc::c_void); +let obj = with_compartment(aCx, proto, || { + NewProxyObject(aCx, *handler, + &private, + proto, %s, + ptr::mut_null(), ptr::mut_null()) +}); +assert!(obj.is_not_null()); """ % (descriptor.name, parent) else: if descriptor.createGlobal: - create += " let obj = CreateDOMGlobal(aCx, &Class.base as *js::Class as *JSClass);\n" + create += "let obj = CreateDOMGlobal(aCx, &Class.base as *js::Class as *JSClass);\n" else: - create += (" let obj = with_compartment(aCx, proto, || {\n" - " JS_NewObject(aCx, &Class.base as *js::Class as *JSClass, proto, %s)\n" - " });\n" % parent) - create += """ assert!(obj.is_not_null()); + create += ("let obj = with_compartment(aCx, proto, || {\n" + " JS_NewObject(aCx, &Class.base as *js::Class as *JSClass, proto, %s)\n" + "});\n" % parent) + create += """assert!(obj.is_not_null()); - JS_SetReservedSlot(obj, DOM_OBJECT_SLOT as u32, - PrivateValue(squirrel_away_unique(aObject) as *libc::c_void)); +JS_SetReservedSlot(obj, DOM_OBJECT_SLOT as u32, + PrivateValue(squirrel_away_unique(aObject) as *libc::c_void)); """ return create @@ -1770,28 +1770,28 @@ class CGWrapMethod(CGAbstractMethod): def definition_body(self): if not self.descriptor.createGlobal: - return CGGeneric(""" - let scope = aScope.reflector().get_jsobject(); - assert!(scope.is_not_null()); - assert!(((*JS_GetClass(scope)).flags & JSCLASS_IS_GLOBAL) != 0); + return CGIndenter(CGGeneric(""" +let scope = aScope.reflector().get_jsobject(); +assert!(scope.is_not_null()); +assert!(((*JS_GetClass(scope)).flags & JSCLASS_IS_GLOBAL) != 0); - let proto = with_compartment(aCx, scope, || GetProtoObject(aCx, scope, scope)); - assert!(proto.is_not_null()); +let proto = with_compartment(aCx, scope, || GetProtoObject(aCx, scope, scope)); +assert!(proto.is_not_null()); %s - raw.reflector().set_jsobject(obj); +raw.reflector().set_jsobject(obj); - return raw;""" % CreateBindingJSObject(self.descriptor, "scope")) +return raw;""" % CreateBindingJSObject(self.descriptor, "scope"))) else: - return CGGeneric(""" + return CGIndenter(CGGeneric(""" %s - with_compartment(aCx, obj, || { - let proto = GetProtoObject(aCx, obj, obj); - JS_SetPrototype(aCx, obj, proto); - }); - raw.reflector().set_jsobject(obj); - return raw;""" % CreateBindingJSObject(self.descriptor)) +with_compartment(aCx, obj, || { + let proto = GetProtoObject(aCx, obj, obj); + JS_SetPrototype(aCx, obj, proto); +}); +raw.reflector().set_jsobject(obj); +return raw;""" % CreateBindingJSObject(self.descriptor))) class CGIDLInterface(CGThing): From b717fbe868e3dbb1f2b1d9a1e87dcd59f79c7711 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sat, 21 Jun 2014 13:38:57 +0200 Subject: [PATCH 04/18] Use CGIndenter for CGGetPerInterfaceObject.definition_body. --- .../dom/bindings/codegen/CodegenRust.py | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index 36cb1ef710b..ccf3df55ed8 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -1941,25 +1941,25 @@ class CGGetPerInterfaceObject(CGAbstractMethod): def definition_body(self): return CGGeneric(""" - /* aGlobal and aReceiver are usually the same, but they can be different - too. For example a sandbox often has an xray wrapper for a window as the - prototype of the sandbox's global. In that case aReceiver is the xray - wrapper and aGlobal is the sandbox's global. - */ +/* aGlobal and aReceiver are usually the same, but they can be different + too. For example a sandbox often has an xray wrapper for a window as the + prototype of the sandbox's global. In that case aReceiver is the xray + wrapper and aGlobal is the sandbox's global. + */ - assert!(((*JS_GetClass(aGlobal)).flags & JSCLASS_DOM_GLOBAL) != 0); +assert!(((*JS_GetClass(aGlobal)).flags & JSCLASS_DOM_GLOBAL) != 0); - /* Check to see whether the interface objects are already installed */ - let protoOrIfaceArray = GetProtoOrIfaceArray(aGlobal); - let cachedObject: *mut JSObject = *protoOrIfaceArray.offset(%s as int); - if cachedObject.is_null() { - let tmp: *mut JSObject = CreateInterfaceObjects(aCx, aGlobal, aReceiver); - assert!(tmp.is_not_null()); - *protoOrIfaceArray.offset(%s as int) = tmp; - tmp - } else { - cachedObject - }""" % (self.id, self.id)) +/* Check to see whether the interface objects are already installed */ +let protoOrIfaceArray = GetProtoOrIfaceArray(aGlobal); +let cachedObject: *mut JSObject = *protoOrIfaceArray.offset(%s as int); +if cachedObject.is_null() { + let tmp: *mut JSObject = CreateInterfaceObjects(aCx, aGlobal, aReceiver); + assert!(tmp.is_not_null()); + *protoOrIfaceArray.offset(%s as int) = tmp; + tmp +} else { + cachedObject +}""" % (self.id, self.id)) class CGGetProtoObjectMethod(CGGetPerInterfaceObject): """ @@ -1969,12 +1969,12 @@ class CGGetProtoObjectMethod(CGGetPerInterfaceObject): CGGetPerInterfaceObject.__init__(self, descriptor, "GetProtoObject", "PrototypeList::", pub=True) def definition_body(self): - return CGList([ + return CGIndenter(CGList([ CGGeneric(""" - /* Get the interface prototype object for this class. This will create the - object as needed. */"""), +/* Get the interface prototype object for this class. This will create the + object as needed. */"""), CGGetPerInterfaceObject.definition_body(self), - ]) + ])) class CGGetConstructorObjectMethod(CGGetPerInterfaceObject): """ @@ -1984,12 +1984,12 @@ class CGGetConstructorObjectMethod(CGGetPerInterfaceObject): CGGetPerInterfaceObject.__init__(self, descriptor, "GetConstructorObject", "constructors::") def definition_body(self): - return CGList([ + return CGIndenter(CGList([ CGGeneric(""" - /* Get the interface object for this class. This will create the object as - needed. */"""), +/* Get the interface object for this class. This will create the object as + needed. */"""), CGGetPerInterfaceObject.definition_body(self), - ]) + ])) class CGDefineDOMInterfaceMethod(CGAbstractMethod): """ From fa7a0aae75f687415741efb00b33b9377095bd78 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sat, 21 Jun 2014 13:41:38 +0200 Subject: [PATCH 05/18] Use CGIndenter for CGDefineDOMInterfaceMethod.definition_body. --- .../dom/bindings/codegen/CodegenRust.py | 76 +++++++++---------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index ccf3df55ed8..8fcd311d03e 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -2007,54 +2007,54 @@ class CGDefineDOMInterfaceMethod(CGAbstractMethod): return CGAbstractMethod.define(self) def definition_body(self): - body = "" + body = CGList([]) #XXXjdm This self.descriptor.concrete check shouldn't be necessary if not self.descriptor.concrete or self.descriptor.proxy: - body += """ let traps = ProxyTraps { - getPropertyDescriptor: Some(getPropertyDescriptor), - getOwnPropertyDescriptor: Some(getOwnPropertyDescriptor), - defineProperty: Some(defineProperty), - getOwnPropertyNames: ptr::null(), - delete_: None, - enumerate: ptr::null(), + body.append(CGGeneric("""let traps = ProxyTraps { + getPropertyDescriptor: Some(getPropertyDescriptor), + getOwnPropertyDescriptor: Some(getOwnPropertyDescriptor), + defineProperty: Some(defineProperty), + getOwnPropertyNames: ptr::null(), + delete_: None, + enumerate: ptr::null(), - has: None, - hasOwn: Some(hasOwn), - get: Some(get), - set: None, - keys: ptr::null(), - iterate: None, + has: None, + hasOwn: Some(hasOwn), + get: Some(get), + set: None, + keys: ptr::null(), + iterate: None, - call: None, - construct: None, - nativeCall: ptr::null(), - hasInstance: None, - typeOf: None, - objectClassIs: None, - obj_toString: Some(obj_toString), - fun_toString: None, - //regexp_toShared: ptr::null(), - defaultValue: None, - iteratorNext: None, - finalize: Some(%s), - getElementIfPresent: None, - getPrototypeOf: None, - trace: Some(%s) - }; - js_info.dom_static.proxy_handlers.insert(PrototypeList::id::%s as uint, - CreateProxyHandler(&traps, &Class as *_ as *_)); + call: None, + construct: None, + nativeCall: ptr::null(), + hasInstance: None, + typeOf: None, + objectClassIs: None, + obj_toString: Some(obj_toString), + fun_toString: None, + //regexp_toShared: ptr::null(), + defaultValue: None, + iteratorNext: None, + finalize: Some(%s), + getElementIfPresent: None, + getPrototypeOf: None, + trace: Some(%s) +}; +js_info.dom_static.proxy_handlers.insert(PrototypeList::id::%s as uint, + CreateProxyHandler(&traps, &Class as *_ as *_)); """ % (FINALIZE_HOOK_NAME, TRACE_HOOK_NAME, - self.descriptor.name) + self.descriptor.name))) if self.descriptor.interface.hasInterfaceObject(): - body += """ let cx = (**js_info.js_context).ptr; - let global = window.reflector().get_jsobject(); - assert!(global.is_not_null()); - assert!(GetProtoObject(cx, global, global).is_not_null());""" + body.append(CGGeneric("""let cx = (**js_info.js_context).ptr; +let global = window.reflector().get_jsobject(); +assert!(global.is_not_null()); +assert!(GetProtoObject(cx, global, global).is_not_null());""")) - return CGGeneric(body) + return CGIndenter(body) def needCx(returnType, arguments, extendedAttributes, considerTypes): return (considerTypes and From 437c025e99d2a47e72f4920da3be9809d6251a15 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sat, 21 Jun 2014 13:48:55 +0200 Subject: [PATCH 06/18] Stop indenting in CGMethodCall. --- .../script/dom/bindings/codegen/CodegenRust.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index 8fcd311d03e..3f8b1cbd3aa 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -168,7 +168,7 @@ class CGMethodCall(CGThing): # here for our one signature and not worry about switching # on anything. signature = signatures[0] - self.cgRoot = CGList([ CGIndenter(getPerSignatureCall(signature)) ]) + self.cgRoot = CGList([getPerSignatureCall(signature)]) requiredArgs = requiredArgCount(signature) @@ -179,7 +179,7 @@ class CGMethodCall(CGThing): " return 0;\n" "}" % (requiredArgs, methodName)) self.cgRoot.prepend( - CGWrapper(CGIndenter(CGGeneric(code)), pre="\n", post="\n")) + CGWrapper(CGGeneric(code), pre="\n", post="\n")) return @@ -359,7 +359,7 @@ class CGMethodCall(CGThing): #overloadCGThings.append( # CGGeneric('fail!("We have an always-returning default case");\n' # 'return 0;')) - self.cgRoot = CGWrapper(CGIndenter(CGList(overloadCGThings, "\n")), + self.cgRoot = CGWrapper(CGList(overloadCGThings, "\n"), pre="\n") def define(self): @@ -2384,8 +2384,8 @@ class CGSpecializedMethod(CGAbstractExternMethod): def definition_body(self): name = self.method.identifier.name - return CGWrapper(CGMethodCall([], MakeNativeName(name), self.method.isStatic(), - self.descriptor, self.method), + return CGWrapper(CGIndenter(CGMethodCall([], MakeNativeName(name), self.method.isStatic(), + self.descriptor, self.method)), pre=" let this = JS::from_raw(this);\n" + " let mut this = this.root();\n") @@ -3780,8 +3780,8 @@ class CGClassConstructHook(CGAbstractExternMethod): let obj = global.deref().reflector().get_jsobject(); """ nativeName = MakeNativeName(self._ctor.identifier.name) - callGenerator = CGMethodCall(["&global.root_ref()"], nativeName, True, - self.descriptor, self._ctor) + callGenerator = CGIndenter(CGMethodCall(["&global.root_ref()"], nativeName, True, + self.descriptor, self._ctor)) return preamble + callGenerator.define(); class CGClassFinalizeHook(CGAbstractClassHook): From 5affa73aa1f08e8f2028e45841c5b79f266b00e3 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sat, 21 Jun 2014 13:57:39 +0200 Subject: [PATCH 07/18] Use CGIndenter for CGSpecialized{Method, Getter, Setter}.definition_body. --- .../dom/bindings/codegen/CodegenRust.py | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index 3f8b1cbd3aa..07c9366b0c6 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -2384,10 +2384,10 @@ class CGSpecializedMethod(CGAbstractExternMethod): def definition_body(self): name = self.method.identifier.name - return CGWrapper(CGIndenter(CGMethodCall([], MakeNativeName(name), self.method.isStatic(), - self.descriptor, self.method)), - pre=" let this = JS::from_raw(this);\n" + - " let mut this = this.root();\n") + return CGIndenter(CGWrapper(CGMethodCall([], MakeNativeName(name), self.method.isStatic(), + self.descriptor, self.method), + pre="let this = JS::from_raw(this);\n" + "let mut this = this.root();\n")) class CGGenericGetter(CGAbstractBindingMethod): """ @@ -2435,10 +2435,10 @@ class CGSpecializedGetter(CGAbstractExternMethod): getter=True)) if self.attr.type.nullable() or not infallible: nativeName = "Get" + nativeName - return CGWrapper(CGIndenter(CGGetterCall([], self.attr.type, nativeName, - self.descriptor, self.attr)), - pre=" let this = JS::from_raw(this);\n" + - " let mut this = this.root();\n") + return CGIndenter(CGWrapper(CGGetterCall([], self.attr.type, nativeName, + self.descriptor, self.attr), + pre="let this = JS::from_raw(this);\n" + "let mut this = this.root();\n")) class CGGenericSetter(CGAbstractBindingMethod): """ @@ -2485,11 +2485,11 @@ class CGSpecializedSetter(CGAbstractExternMethod): def definition_body(self): name = self.attr.identifier.name - return CGWrapper(CGIndenter(CGSetterCall([], self.attr.type, + return CGIndenter(CGWrapper(CGSetterCall([], self.attr.type, "Set" + MakeNativeName(name), - self.descriptor, self.attr)), - pre=" let this = JS::from_raw(this);\n" + - " let mut this = this.root();\n") + self.descriptor, self.attr), + pre="let this = JS::from_raw(this);\n" + "let mut this = this.root();\n")) class CGMemberJITInfo(CGThing): From df552fca5d685da57aa5b8824fb02ece4c3928f5 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sat, 21 Jun 2014 13:57:54 +0200 Subject: [PATCH 08/18] Use CGIndenter for CGProxyUnwrap.definition_body. --- .../script/dom/bindings/codegen/CodegenRust.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index 07c9366b0c6..7adadce6d14 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -3394,12 +3394,12 @@ class CGProxyUnwrap(CGAbstractMethod): CGAbstractMethod.__init__(self, descriptor, "UnwrapProxy", '*' + descriptor.concreteType, args, alwaysInline=True) def definition_body(self): - return CGGeneric(""" /*if (xpc::WrapperFactory::IsXrayWrapper(obj)) { - obj = js::UnwrapObject(obj); - }*/ - //MOZ_ASSERT(IsProxy(obj)); - let box_ = GetProxyPrivate(obj).to_private() as *%s; - return box_;""" % self.descriptor.concreteType) + return CGIndenter(CGGeneric("""/*if (xpc::WrapperFactory::IsXrayWrapper(obj)) { + obj = js::UnwrapObject(obj); +}*/ +//MOZ_ASSERT(IsProxy(obj)); +let box_ = GetProxyPrivate(obj).to_private() as *%s; +return box_;""" % self.descriptor.concreteType)) class CGDOMJSProxyHandler_getOwnPropertyDescriptor(CGAbstractExternMethod): def __init__(self, descriptor): From 8ef51158ff2ec3fae5e2583e25aac99078284046 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sat, 21 Jun 2014 14:10:14 +0200 Subject: [PATCH 09/18] Indent the contents of getOwnPropertyDescriptor. --- src/components/script/dom/bindings/codegen/CodegenRust.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index 7adadce6d14..59320527ae3 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -3496,7 +3496,7 @@ if expando.is_not_null() { return 1;""" def definition_body(self): - return CGGeneric(self.getBody()) + return CGIndenter(CGGeneric(self.getBody())) class CGDOMJSProxyHandler_defineProperty(CGAbstractExternMethod): def __init__(self, descriptor): From cf556cbbd6e11a667f3a993760b1ec4c8450d70f Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sat, 21 Jun 2014 14:14:49 +0200 Subject: [PATCH 10/18] Indent the contents of defineProperty. --- src/components/script/dom/bindings/codegen/CodegenRust.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index 59320527ae3..663870781f9 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -3554,7 +3554,7 @@ class CGDOMJSProxyHandler_defineProperty(CGAbstractExternMethod): return set + """return proxyhandler::defineProperty_(%s);""" % ", ".join(a.name for a in self.args) def definition_body(self): - return CGGeneric(self.getBody()) + return CGIndenter(CGGeneric(self.getBody())) class CGDOMJSProxyHandler_hasOwn(CGAbstractExternMethod): def __init__(self, descriptor): From b5ca6d9a372d425f15b7dc0ca40ff9d7241aea9c Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sat, 21 Jun 2014 14:19:31 +0200 Subject: [PATCH 11/18] Indent the contents of hasOwn. --- src/components/script/dom/bindings/codegen/CodegenRust.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index 663870781f9..da788982e10 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -3607,7 +3607,7 @@ if expando.is_not_null() { return 1;""" def definition_body(self): - return CGGeneric(self.getBody()) + return CGIndenter(CGGeneric(self.getBody())) class CGDOMJSProxyHandler_get(CGAbstractExternMethod): def __init__(self, descriptor): From eb4213f613dd45bc44021030996884387329a8f7 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sat, 21 Jun 2014 14:22:14 +0200 Subject: [PATCH 12/18] Indent the contents of get. --- src/components/script/dom/bindings/codegen/CodegenRust.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index da788982e10..18c3d305a3d 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -3679,7 +3679,7 @@ if found { return 1;""" % (getIndexedOrExpando, getNamed) def definition_body(self): - return CGGeneric(self.getBody()) + return CGIndenter(CGGeneric(self.getBody())) class CGDOMJSProxyHandler_obj_toString(CGAbstractExternMethod): def __init__(self, descriptor): From 504efb66fbc89092cb742b056a956408f3e03757 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sat, 21 Jun 2014 14:25:08 +0200 Subject: [PATCH 13/18] Indent the contents of obj_toString correctly. --- src/components/script/dom/bindings/codegen/CodegenRust.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index 18c3d305a3d..913b345b306 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -3706,12 +3706,12 @@ class CGDOMJSProxyHandler_obj_toString(CGAbstractExternMethod): JSString* jsresult; return xpc_qsStringToJsstring(cx, result, &jsresult) ? jsresult : NULL;""" - return """ "%s".to_c_str().with_ref(|s| { - _obj_toString(cx, s) - })""" % self.descriptor.name + return """"%s".to_c_str().with_ref(|s| { + _obj_toString(cx, s) +})""" % self.descriptor.name def definition_body(self): - return CGGeneric(self.getBody()) + return CGIndenter(CGGeneric(self.getBody())) class CGAbstractClassHook(CGAbstractExternMethod): """ From 31ab6415c98bf95b277a9017689af05c24434ace Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sat, 21 Jun 2014 14:36:35 +0200 Subject: [PATCH 14/18] Use CGIndenter for CGAbstractClassHook.definition_body. --- .../script/dom/bindings/codegen/CodegenRust.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index 913b345b306..c32a1d5ea7f 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -3724,14 +3724,14 @@ class CGAbstractClassHook(CGAbstractExternMethod): def definition_body_prologue(self): return CGGeneric(""" - let this: *%s = unwrap::<%s>(obj); +let this: *%s = unwrap::<%s>(obj); """ % (self.descriptor.concreteType, self.descriptor.concreteType)) def definition_body(self): - return CGList([ + return CGIndenter(CGList([ self.definition_body_prologue(), - CGGeneric(self.generate_code()), - ]) + self.generate_code(), + ])) def generate_code(self): # Override me @@ -3754,7 +3754,7 @@ class CGClassTraceHook(CGAbstractClassHook): args) def generate_code(self): - return " (*this).trace(%s);" % self.args[0].name + return CGGeneric("(*this).trace(%s);" % self.args[0].name) class CGClassConstructHook(CGAbstractExternMethod): """ @@ -3794,7 +3794,7 @@ class CGClassFinalizeHook(CGAbstractClassHook): 'void', args) def generate_code(self): - return CGIndenter(CGGeneric(finalizeHook(self.descriptor, self.name, self.args[0].name))).define() + return CGGeneric(finalizeHook(self.descriptor, self.name, self.args[0].name)) class CGDOMJSProxyHandlerDOMClass(CGThing): def __init__(self, descriptor): From f3a8f74d3c62d5fa22d8650d01e12fa3f3a816c2 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sat, 21 Jun 2014 14:38:58 +0200 Subject: [PATCH 15/18] Use CGIndenter for CGClassConstructHook.definition_body. --- .../script/dom/bindings/codegen/CodegenRust.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index c32a1d5ea7f..d29e7731ac6 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -3772,17 +3772,14 @@ class CGClassConstructHook(CGAbstractExternMethod): return CGAbstractExternMethod.define(self) def definition_body(self): - return CGGeneric(self.generate_code()) - - def generate_code(self): - preamble = """ - let global = global_object_for_js_object(JS_CALLEE(cx, vp).to_object()).root(); - let obj = global.deref().reflector().get_jsobject(); -""" + preamble = CGGeneric(""" +let global = global_object_for_js_object(JS_CALLEE(cx, vp).to_object()).root(); +let obj = global.deref().reflector().get_jsobject(); +""") nativeName = MakeNativeName(self._ctor.identifier.name) - callGenerator = CGIndenter(CGMethodCall(["&global.root_ref()"], nativeName, True, - self.descriptor, self._ctor)) - return preamble + callGenerator.define(); + callGenerator = CGMethodCall(["&global.root_ref()"], nativeName, True, + self.descriptor, self._ctor) + return CGIndenter(CGList([preamble, callGenerator])) class CGClassFinalizeHook(CGAbstractClassHook): """ From 46b9343459b8aef5d9181a0d95644ad4e8f13ab9 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sat, 21 Jun 2014 14:44:08 +0200 Subject: [PATCH 16/18] Use CGIndenter for CGRegisterProtos.definition_body. --- .../script/dom/bindings/codegen/CodegenRust.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index d29e7731ac6..28fba6a3fbc 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -4113,13 +4113,11 @@ class CGRegisterProtos(CGAbstractMethod): unsafe=False, pub=True) self.config = config - def _registerProtos(self): - lines = [" codegen::Bindings::%sBinding::DefineDOMInterface(window, js_info);" % desc.name - for desc in self.config.getDescriptors(isCallback=False, - register=True)] - return '\n'.join(lines) + '\n' def definition_body(self): - return CGGeneric(self._registerProtos()) + return CGIndenter(CGList([ + CGGeneric("codegen::Bindings::%sBinding::DefineDOMInterface(window, js_info);\n" % desc.name) + for desc in self.config.getDescriptors(isCallback=False, register=True) + ])) class CGBindingRoot(CGThing): """ From 5fb475617bee337d6d62af37d2d9a316643bcedc Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sat, 21 Jun 2014 14:48:23 +0200 Subject: [PATCH 17/18] Move the responsibility for indenting code from CGAbstractMethod.definition_body to its caller. --- .../dom/bindings/codegen/CodegenRust.py | 82 +++++++++---------- 1 file changed, 40 insertions(+), 42 deletions(-) diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index 28fba6a3fbc..b96038356a8 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -1715,7 +1715,7 @@ class CGAbstractMethod(CGThing): return "\n }\n" if self.unsafe else "" def define(self): - return self.definition_prologue() + "\n" + self.definition_body().define() + self.definition_epilogue() + return self.definition_prologue() + "\n" + CGIndenter(self.definition_body()).define() + self.definition_epilogue() def definition_prologue(self): return "%sfn %s%s(%s)%s {%s" % (self._decorators(), self.name, self._template(), @@ -1770,7 +1770,7 @@ class CGWrapMethod(CGAbstractMethod): def definition_body(self): if not self.descriptor.createGlobal: - return CGIndenter(CGGeneric(""" + return CGGeneric(""" let scope = aScope.reflector().get_jsobject(); assert!(scope.is_not_null()); assert!(((*JS_GetClass(scope)).flags & JSCLASS_IS_GLOBAL) != 0); @@ -1782,16 +1782,16 @@ assert!(proto.is_not_null()); raw.reflector().set_jsobject(obj); -return raw;""" % CreateBindingJSObject(self.descriptor, "scope"))) +return raw;""" % CreateBindingJSObject(self.descriptor, "scope")) else: - return CGIndenter(CGGeneric(""" + return CGGeneric(""" %s with_compartment(aCx, obj, || { let proto = GetProtoObject(aCx, obj, obj); JS_SetPrototype(aCx, obj, proto); }); raw.reflector().set_jsobject(obj); -return raw;""" % CreateBindingJSObject(self.descriptor))) +return raw;""" % CreateBindingJSObject(self.descriptor)) class CGIDLInterface(CGThing): @@ -1920,12 +1920,10 @@ class CGCreateInterfaceObjectsMethod(CGAbstractMethod): arrayPtr("methods"), arrayPtr("attrs"), arrayPtr("consts"), arrayPtr("staticMethods")) - functionBody = CGList( - [CGGeneric(getParentProto), - CGGeneric(call % self.properties.variableNames())], - "\n\n") - #return CGIndenter(CGWrapper(functionBody, pre="/*", post="*/return ptr::null()")).define() - return CGIndenter(functionBody) + return CGList([ + CGGeneric(getParentProto), + CGGeneric(call % self.properties.variableNames()) + ], "\n\n") class CGGetPerInterfaceObject(CGAbstractMethod): """ @@ -1969,12 +1967,12 @@ class CGGetProtoObjectMethod(CGGetPerInterfaceObject): CGGetPerInterfaceObject.__init__(self, descriptor, "GetProtoObject", "PrototypeList::", pub=True) def definition_body(self): - return CGIndenter(CGList([ + return CGList([ CGGeneric(""" /* Get the interface prototype object for this class. This will create the object as needed. */"""), CGGetPerInterfaceObject.definition_body(self), - ])) + ]) class CGGetConstructorObjectMethod(CGGetPerInterfaceObject): """ @@ -1984,12 +1982,12 @@ class CGGetConstructorObjectMethod(CGGetPerInterfaceObject): CGGetPerInterfaceObject.__init__(self, descriptor, "GetConstructorObject", "constructors::") def definition_body(self): - return CGIndenter(CGList([ + return CGList([ CGGeneric(""" /* Get the interface object for this class. This will create the object as needed. */"""), CGGetPerInterfaceObject.definition_body(self), - ])) + ]) class CGDefineDOMInterfaceMethod(CGAbstractMethod): """ @@ -2054,7 +2052,7 @@ let global = window.reflector().get_jsobject(); assert!(global.is_not_null()); assert!(GetProtoObject(cx, global, global).is_not_null());""")) - return CGIndenter(body) + return body def needCx(returnType, arguments, extendedAttributes, considerTypes): return (considerTypes and @@ -2350,7 +2348,7 @@ class CGAbstractBindingMethod(CGAbstractExternMethod): "}\n" "\n" "let this: JS<%s> = %s;\n" % (self.descriptor.concreteType, unwrapThis)) - return CGIndenter(CGList([ unwrapThis, self.generate_code() ], "\n")) + return CGList([ unwrapThis, self.generate_code() ], "\n") def generate_code(self): assert(False) # Override me @@ -2384,10 +2382,10 @@ class CGSpecializedMethod(CGAbstractExternMethod): def definition_body(self): name = self.method.identifier.name - return CGIndenter(CGWrapper(CGMethodCall([], MakeNativeName(name), self.method.isStatic(), - self.descriptor, self.method), - pre="let this = JS::from_raw(this);\n" - "let mut this = this.root();\n")) + return CGWrapper(CGMethodCall([], MakeNativeName(name), self.method.isStatic(), + self.descriptor, self.method), + pre="let this = JS::from_raw(this);\n" + "let mut this = this.root();\n") class CGGenericGetter(CGAbstractBindingMethod): """ @@ -2435,10 +2433,10 @@ class CGSpecializedGetter(CGAbstractExternMethod): getter=True)) if self.attr.type.nullable() or not infallible: nativeName = "Get" + nativeName - return CGIndenter(CGWrapper(CGGetterCall([], self.attr.type, nativeName, - self.descriptor, self.attr), - pre="let this = JS::from_raw(this);\n" - "let mut this = this.root();\n")) + return CGWrapper(CGGetterCall([], self.attr.type, nativeName, + self.descriptor, self.attr), + pre="let this = JS::from_raw(this);\n" + "let mut this = this.root();\n") class CGGenericSetter(CGAbstractBindingMethod): """ @@ -2485,11 +2483,11 @@ class CGSpecializedSetter(CGAbstractExternMethod): def definition_body(self): name = self.attr.identifier.name - return CGIndenter(CGWrapper(CGSetterCall([], self.attr.type, - "Set" + MakeNativeName(name), - self.descriptor, self.attr), - pre="let this = JS::from_raw(this);\n" - "let mut this = this.root();\n")) + return CGWrapper(CGSetterCall([], self.attr.type, + "Set" + MakeNativeName(name), + self.descriptor, self.attr), + pre="let this = JS::from_raw(this);\n" + "let mut this = this.root();\n") class CGMemberJITInfo(CGThing): @@ -3394,12 +3392,12 @@ class CGProxyUnwrap(CGAbstractMethod): CGAbstractMethod.__init__(self, descriptor, "UnwrapProxy", '*' + descriptor.concreteType, args, alwaysInline=True) def definition_body(self): - return CGIndenter(CGGeneric("""/*if (xpc::WrapperFactory::IsXrayWrapper(obj)) { + return CGGeneric("""/*if (xpc::WrapperFactory::IsXrayWrapper(obj)) { obj = js::UnwrapObject(obj); }*/ //MOZ_ASSERT(IsProxy(obj)); let box_ = GetProxyPrivate(obj).to_private() as *%s; -return box_;""" % self.descriptor.concreteType)) +return box_;""" % self.descriptor.concreteType) class CGDOMJSProxyHandler_getOwnPropertyDescriptor(CGAbstractExternMethod): def __init__(self, descriptor): @@ -3496,7 +3494,7 @@ if expando.is_not_null() { return 1;""" def definition_body(self): - return CGIndenter(CGGeneric(self.getBody())) + return CGGeneric(self.getBody()) class CGDOMJSProxyHandler_defineProperty(CGAbstractExternMethod): def __init__(self, descriptor): @@ -3554,7 +3552,7 @@ class CGDOMJSProxyHandler_defineProperty(CGAbstractExternMethod): return set + """return proxyhandler::defineProperty_(%s);""" % ", ".join(a.name for a in self.args) def definition_body(self): - return CGIndenter(CGGeneric(self.getBody())) + return CGGeneric(self.getBody()) class CGDOMJSProxyHandler_hasOwn(CGAbstractExternMethod): def __init__(self, descriptor): @@ -3607,7 +3605,7 @@ if expando.is_not_null() { return 1;""" def definition_body(self): - return CGIndenter(CGGeneric(self.getBody())) + return CGGeneric(self.getBody()) class CGDOMJSProxyHandler_get(CGAbstractExternMethod): def __init__(self, descriptor): @@ -3679,7 +3677,7 @@ if found { return 1;""" % (getIndexedOrExpando, getNamed) def definition_body(self): - return CGIndenter(CGGeneric(self.getBody())) + return CGGeneric(self.getBody()) class CGDOMJSProxyHandler_obj_toString(CGAbstractExternMethod): def __init__(self, descriptor): @@ -3711,7 +3709,7 @@ return xpc_qsStringToJsstring(cx, result, &jsresult) ? jsresult : NULL;""" })""" % self.descriptor.name def definition_body(self): - return CGIndenter(CGGeneric(self.getBody())) + return CGGeneric(self.getBody()) class CGAbstractClassHook(CGAbstractExternMethod): """ @@ -3728,10 +3726,10 @@ let this: *%s = unwrap::<%s>(obj); """ % (self.descriptor.concreteType, self.descriptor.concreteType)) def definition_body(self): - return CGIndenter(CGList([ + return CGList([ self.definition_body_prologue(), self.generate_code(), - ])) + ]) def generate_code(self): # Override me @@ -3779,7 +3777,7 @@ let obj = global.deref().reflector().get_jsobject(); nativeName = MakeNativeName(self._ctor.identifier.name) callGenerator = CGMethodCall(["&global.root_ref()"], nativeName, True, self.descriptor, self._ctor) - return CGIndenter(CGList([preamble, callGenerator])) + return CGList([preamble, callGenerator]) class CGClassFinalizeHook(CGAbstractClassHook): """ @@ -4114,10 +4112,10 @@ class CGRegisterProtos(CGAbstractMethod): self.config = config def definition_body(self): - return CGIndenter(CGList([ + return CGList([ CGGeneric("codegen::Bindings::%sBinding::DefineDOMInterface(window, js_info);\n" % desc.name) for desc in self.config.getDescriptors(isCallback=False, register=True) - ])) + ]) class CGBindingRoot(CGThing): """ From 07310452499a3bbb1cdc1f7cd496e63b0aa3d6fe Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sat, 21 Jun 2014 20:07:09 +0200 Subject: [PATCH 18/18] Remove some spurious newlines from the generated code. --- .../dom/bindings/codegen/CodegenRust.py | 36 ++++++++++--------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index b96038356a8..fda7fea34f8 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -1709,19 +1709,21 @@ class CGAbstractMethod(CGThing): def _returnType(self): return (" -> %s" % self.returnType) if self.returnType != "void" else "" - def _unsafe_open(self): - return "\n unsafe {\n" if self.unsafe else "" - def _unsafe_close(self): - return "\n }\n" if self.unsafe else "" def define(self): - return self.definition_prologue() + "\n" + CGIndenter(self.definition_body()).define() + self.definition_epilogue() + body = self.definition_body() + if self.unsafe: + body = CGWrapper(body, pre="unsafe {\n", post="\n}") + + return CGWrapper(CGIndenter(body), + pre=self.definition_prologue(), + post=self.definition_epilogue()).define() def definition_prologue(self): - return "%sfn %s%s(%s)%s {%s" % (self._decorators(), self.name, self._template(), - self._argstring(), self._returnType(), self._unsafe_open()) + return "%sfn %s%s(%s)%s {\n" % (self._decorators(), self.name, self._template(), + self._argstring(), self._returnType()) def definition_epilogue(self): - return "%s}\n" % self._unsafe_close() + return "\n}\n" def definition_body(self): assert(False) # Override me! @@ -1770,7 +1772,7 @@ class CGWrapMethod(CGAbstractMethod): def definition_body(self): if not self.descriptor.createGlobal: - return CGGeneric(""" + return CGGeneric("""\ let scope = aScope.reflector().get_jsobject(); assert!(scope.is_not_null()); assert!(((*JS_GetClass(scope)).flags & JSCLASS_IS_GLOBAL) != 0); @@ -1784,7 +1786,7 @@ raw.reflector().set_jsobject(obj); return raw;""" % CreateBindingJSObject(self.descriptor, "scope")) else: - return CGGeneric(""" + return CGGeneric("""\ %s with_compartment(aCx, obj, || { let proto = GetProtoObject(aCx, obj, obj); @@ -1923,7 +1925,7 @@ class CGCreateInterfaceObjectsMethod(CGAbstractMethod): return CGList([ CGGeneric(getParentProto), CGGeneric(call % self.properties.variableNames()) - ], "\n\n") + ], "\n") class CGGetPerInterfaceObject(CGAbstractMethod): """ @@ -1968,7 +1970,7 @@ class CGGetProtoObjectMethod(CGGetPerInterfaceObject): "PrototypeList::", pub=True) def definition_body(self): return CGList([ - CGGeneric(""" + CGGeneric("""\ /* Get the interface prototype object for this class. This will create the object as needed. */"""), CGGetPerInterfaceObject.definition_body(self), @@ -1983,7 +1985,7 @@ class CGGetConstructorObjectMethod(CGGetPerInterfaceObject): "constructors::") def definition_body(self): return CGList([ - CGGeneric(""" + CGGeneric("""\ /* Get the interface object for this class. This will create the object as needed. */"""), CGGetPerInterfaceObject.definition_body(self), @@ -3721,7 +3723,7 @@ class CGAbstractClassHook(CGAbstractExternMethod): args) def definition_body_prologue(self): - return CGGeneric(""" + return CGGeneric("""\ let this: *%s = unwrap::<%s>(obj); """ % (self.descriptor.concreteType, self.descriptor.concreteType)) @@ -3770,7 +3772,7 @@ class CGClassConstructHook(CGAbstractExternMethod): return CGAbstractExternMethod.define(self) def definition_body(self): - preamble = CGGeneric(""" + preamble = CGGeneric("""\ let global = global_object_for_js_object(JS_CALLEE(cx, vp).to_object()).root(); let obj = global.deref().reflector().get_jsobject(); """) @@ -4113,9 +4115,9 @@ class CGRegisterProtos(CGAbstractMethod): def definition_body(self): return CGList([ - CGGeneric("codegen::Bindings::%sBinding::DefineDOMInterface(window, js_info);\n" % desc.name) + CGGeneric("codegen::Bindings::%sBinding::DefineDOMInterface(window, js_info);" % desc.name) for desc in self.config.getDescriptors(isCallback=False, register=True) - ]) + ], "\n") class CGBindingRoot(CGThing): """