зеркало из https://github.com/mozilla/gecko-dev.git
Bug 852219 part 4. Fix forward-declarations and includes for JS-implemented interfaces. r=mccr8
This commit is contained in:
Родитель
793e37ca3f
Коммит
94f45fb924
|
@ -478,7 +478,7 @@ class CGHeaders(CGWrapper):
|
|||
def __init__(self, descriptors, dictionaries, callbacks,
|
||||
callbackDescriptors,
|
||||
declareIncludes, defineIncludes, child,
|
||||
config=None, anyJSImplemented=False):
|
||||
config=None, jsImplementedDescriptors=[]):
|
||||
"""
|
||||
Builds a set of includes to cover |descriptors|.
|
||||
|
||||
|
@ -594,12 +594,20 @@ class CGHeaders(CGWrapper):
|
|||
# And we need BindingUtils.h so we can wrap "this" objects
|
||||
declareIncludes.add("mozilla/dom/BindingUtils.h")
|
||||
|
||||
if len(callbackDescriptors) != 0 or anyJSImplemented:
|
||||
if len(callbackDescriptors) != 0 or len(jsImplementedDescriptors) != 0:
|
||||
# We need CallbackInterface to serve as our parent class
|
||||
declareIncludes.add("mozilla/dom/CallbackInterface.h")
|
||||
# And we need BindingUtils.h so we can wrap "this" objects
|
||||
declareIncludes.add("mozilla/dom/BindingUtils.h")
|
||||
|
||||
# Also need to include the headers for ancestors of
|
||||
# JS-implemented interfaces.
|
||||
for jsImplemented in jsImplementedDescriptors:
|
||||
jsParent = jsImplemented.interface.parent
|
||||
if jsParent:
|
||||
parentDesc = jsImplemented.getDescriptor(jsParent.identifier.name)
|
||||
declareIncludes.add(parentDesc.headerFile)
|
||||
|
||||
# Let the machinery do its thing.
|
||||
def _includeString(includes):
|
||||
return ''.join(['#include "%s"\n' % i for i in includes]) + '\n'
|
||||
|
@ -7161,7 +7169,7 @@ class CGBindingRoot(CGThing):
|
|||
for callback in workerCallbacks:
|
||||
workerIfaces.extend(getInterfacesFromCallback(callback))
|
||||
|
||||
for callbackDescriptor in callbackDescriptors:
|
||||
for callbackDescriptor in callbackDescriptors + jsImplemented:
|
||||
callbackDescriptorIfaces = [
|
||||
t.unroll().inner
|
||||
for t in getTypesFromDescriptor(callbackDescriptor)
|
||||
|
@ -7219,6 +7227,13 @@ class CGBindingRoot(CGThing):
|
|||
for t in getTypesFromDictionary(dictionary)
|
||||
if t.unroll().isCallback())
|
||||
|
||||
# Forward declarations for callback functions used in interfaces
|
||||
for desc in descriptors:
|
||||
forwardDeclares.extend(
|
||||
declareNativeType("mozilla::dom::" + str(t.unroll()))
|
||||
for t in getTypesFromDescriptor(desc)
|
||||
if t.unroll().isCallback())
|
||||
|
||||
forwardDeclares = CGList(forwardDeclares)
|
||||
|
||||
descriptorsWithPrototype = filter(lambda d: d.interface.hasInterfacePrototypeObject(),
|
||||
|
@ -7335,7 +7350,7 @@ class CGBindingRoot(CGThing):
|
|||
],
|
||||
curr,
|
||||
config,
|
||||
anyJSImplemented = len(jsImplemented) != 0)
|
||||
jsImplemented)
|
||||
|
||||
# Add include guards.
|
||||
curr = CGIncludeGuard(prefix, curr)
|
||||
|
|
Загрузка…
Ссылка в новой задаче