aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/bindings/codegen/Configuration.py
diff options
context:
space:
mode:
authorJosh Matthews <josh@joshmatthews.net>2013-10-31 17:25:44 -0400
committerJosh Matthews <josh@joshmatthews.net>2013-11-05 12:57:02 -0500
commit06b1db8818c09201989b017434eef105f4d99e51 (patch)
tree0e4e0271c873a79034c476665f10bc3eac5843c7 /src/components/script/dom/bindings/codegen/Configuration.py
parentd00736a9c059f08c8b411b3aada795e8bb9e2ea3 (diff)
downloadservo-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.py26
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