diff options
Diffstat (limited to 'components/script/dom/bindings/codegen/Configuration.py')
-rw-r--r-- | components/script/dom/bindings/codegen/Configuration.py | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/components/script/dom/bindings/codegen/Configuration.py b/components/script/dom/bindings/codegen/Configuration.py index 6e4bcbed34c..436823a9329 100644 --- a/components/script/dom/bindings/codegen/Configuration.py +++ b/components/script/dom/bindings/codegen/Configuration.py @@ -1,11 +1,12 @@ # This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this file, -# You can obtain one at http://mozilla.org/MPL/2.0/. +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. from WebIDL import IDLInterface autogenerated_comment = "/* THIS FILE IS AUTOGENERATED - DO NOT EDIT */\n" + class Configuration: """ Represents global configuration state based on IDL parse data and @@ -22,7 +23,7 @@ class Configuration: # |parseData|. self.descriptors = [] self.interfaces = {} - self.maxProtoChainLength = 0; + self.maxProtoChainLength = 0 for thing in parseData: # Some toplevel things are sadly types, and those have an # isInterface that doesn't mean the same thing as IDLObject's @@ -44,7 +45,8 @@ class Configuration: if not isinstance(entry, list): assert isinstance(entry, dict) entry = [entry] - self.descriptors.extend([Descriptor(self, iface, x) for x in entry]) + self.descriptors.extend( + [Descriptor(self, iface, x) for x in entry]) # Mark the descriptors for which only a single nativeType implements # an interface. @@ -60,10 +62,11 @@ class Configuration: c.isCallback() and not c.isInterface()] # Keep the descriptor list sorted for determinism. - self.descriptors.sort(lambda x,y: cmp(x.name, y.name)) + self.descriptors.sort(lambda x, y: cmp(x.name, y.name)) def getInterface(self, ifname): return self.interfaces[ifname] + def getDescriptors(self, **filters): """Gets the descriptors that match the given filters.""" curr = self.descriptors @@ -80,6 +83,7 @@ class Configuration: getter = lambda x: getattr(x, key) curr = filter(lambda x: getter(x) == val, curr) return curr + def getEnums(self, webIDLFile): return filter(lambda e: e.filename() == webIDLFile, self.enums) @@ -93,6 +97,7 @@ class Configuration: def getDictionaries(self, webIDLFile=""): return self._filterForFile(self.dictionaries, webIDLFile=webIDLFile) + def getCallbacks(self, webIDLFile=""): return self._filterForFile(self.callbacks, webIDLFile=webIDLFile) @@ -104,20 +109,23 @@ class Configuration: descriptors = self.getDescriptors(interface=iface) # We should have exactly one result. - if len(descriptors) is not 1: + if len(descriptors) != 1: raise NoSuchDescriptorError("For " + interfaceName + " found " + - str(len(matches)) + " matches"); + str(len(descriptors)) + " matches") return descriptors[0] + def getDescriptorProvider(self): """ Gets a descriptor provider that can provide descriptors as needed. """ return DescriptorProvider(self) + class NoSuchDescriptorError(TypeError): def __init__(self, str): TypeError.__init__(self, str) + class DescriptorProvider: """ A way of getting descriptors for interface names @@ -132,6 +140,7 @@ class DescriptorProvider: """ return self.config.getDescriptor(interfaceName) + class Descriptor(DescriptorProvider): """ Represents a single descriptor for an interface. See Bindings.conf. @@ -148,7 +157,7 @@ class Descriptor(DescriptorProvider): if self.interface.isCallback(): self.needsRooting = False ty = "%sBinding::%s" % (ifaceName, ifaceName) - self.returnType = "Rc<%s>"% ty + self.returnType = "Rc<%s>" % ty self.argumentType = "???" self.memberType = "???" self.nativeType = ty @@ -230,7 +239,7 @@ class Descriptor(DescriptorProvider): # self.extendedAttributes is a dict of dicts, keyed on # all/getterOnly/setterOnly and then on member name. Values are an # array of extended attributes. - self.extendedAttributes = { 'all': {}, 'getterOnly': {}, 'setterOnly': {} } + self.extendedAttributes = {'all': {}, 'getterOnly': {}, 'setterOnly': {}} def addExtendedAttribute(attribute, config): def add(key, members, attribute): @@ -334,6 +343,7 @@ def getTypesFromDescriptor(descriptor): types.extend(a.type for a in members if a.isAttr()) return types + def getFlatTypes(types): retval = set() for type in types: @@ -344,6 +354,7 @@ def getFlatTypes(types): retval.add(type) return retval + def getTypesFromDictionary(dictionary): """ Get all member types for this dictionary @@ -355,12 +366,13 @@ def getTypesFromDictionary(dictionary): curDict = curDict.parent return types + def getTypesFromCallback(callback): """ Get the types this callback depends on: its return type and the types of its arguments. """ sig = callback.signatures()[0] - types = [sig[0]] # Return type - types.extend(arg.type for arg in sig[1]) # Arguments + types = [sig[0]] # Return type + types.extend(arg.type for arg in sig[1]) # Arguments return types |