diff options
author | Josh Matthews <josh@joshmatthews.net> | 2013-10-31 17:25:44 -0400 |
---|---|---|
committer | Josh Matthews <josh@joshmatthews.net> | 2013-11-05 12:57:02 -0500 |
commit | 06b1db8818c09201989b017434eef105f4d99e51 (patch) | |
tree | 0e4e0271c873a79034c476665f10bc3eac5843c7 /src/components/script/dom/bindings/codegen/Configuration.py | |
parent | d00736a9c059f08c8b411b3aada795e8bb9e2ea3 (diff) | |
download | servo-06b1db8818c09201989b017434eef105f4d99e51.tar.gz servo-06b1db8818c09201989b017434eef105f4d99e51.zip |
Import unmodified callbacks-related codegen source from Gecko.
Diffstat (limited to 'src/components/script/dom/bindings/codegen/Configuration.py')
-rw-r--r-- | src/components/script/dom/bindings/codegen/Configuration.py | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/src/components/script/dom/bindings/codegen/Configuration.py b/src/components/script/dom/bindings/codegen/Configuration.py index 32918d272b3..0c87ead0259 100644 --- a/src/components/script/dom/bindings/codegen/Configuration.py +++ b/src/components/script/dom/bindings/codegen/Configuration.py @@ -42,6 +42,8 @@ class Configuration: self.enums = [e for e in parseData if e.isEnum()] self.dictionaries = [d for d in parseData if d.isDictionary()] + self.callbacks = [c for c in parseData if + c.isCallback() and not c.isInterface()] # Keep the descriptor list sorted for determinism. self.descriptors.sort(lambda x,y: cmp(x.name, y.name)) @@ -66,14 +68,34 @@ class Configuration: getter = lambda x: x.interface.isCallback() elif key == 'isExternal': getter = lambda x: x.interface.isExternal() + elif key == 'isJSImplemented': + getter = lambda x: x.interface.isJSImplemented() else: 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) - def getDictionaries(self, webIDLFile): - return filter(lambda d: d.filename() == webIDLFile, self.dictionaries) + + @staticmethod + def _filterForFileAndWorkers(items, filters): + """Gets the items that match the given filters.""" + for key, val in filters.iteritems(): + if key == 'webIDLFile': + items = filter(lambda x: x.filename() == val, items) + elif key == 'workers': + if val: + items = filter(lambda x: x.getUserData("workers", False), items) + else: + items = filter(lambda x: x.getUserData("mainThread", False), items) + else: + assert(0) # Unknown key + return items + def getDictionaries(self, **filters): + return self._filterForFileAndWorkers(self.dictionaries, filters) + def getCallbacks(self, **filters): + return self._filterForFileAndWorkers(self.callbacks, filters) + def getDescriptor(self, interfaceName, workers): """ Gets the appropriate descriptor for the given interface name |