Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(333)

Unified Diff: Source/bindings/scripts/compute_interfaces_info_individual.py

Issue 1063253005: bindings: Use Visitor to collect union types (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | Source/bindings/tests/idls/core/TestInterfaceConstructor.idl » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/bindings/scripts/compute_interfaces_info_individual.py
diff --git a/Source/bindings/scripts/compute_interfaces_info_individual.py b/Source/bindings/scripts/compute_interfaces_info_individual.py
index 3756879f920a0c5b4df727d04b7453bf20b7cf6a..888f410d9e11876ecd8a38845127db4caff4ce4e 100755
--- a/Source/bindings/scripts/compute_interfaces_info_individual.py
+++ b/Source/bindings/scripts/compute_interfaces_info_individual.py
@@ -47,6 +47,7 @@ import os
import posixpath
import sys
+from idl_definitions import Visitor
from idl_reader import IdlReader
from utilities import get_file_contents, read_file_to_list, idl_filename_to_interface_name, idl_filename_to_component, write_pickle_file, get_interface_extended_attributes_from_idl, is_callback_interface_from_idl
@@ -129,34 +130,27 @@ def get_put_forward_interfaces_from_definition(definition):
if 'PutForwards' in attribute.extended_attributes))
-def collect_union_types_from_definitions(definitions):
+class UnionTypeCollector(Visitor):
Jens Widell 2015/04/08 09:35:19 I guess we could have kept a collect_union_types_f
bashi 2015/04/10 00:05:14 Done.
"""Traverse definitions and collect all union types."""
- def union_types_from(things):
- return (thing.idl_type for thing in things
- if thing.idl_type.is_union_type)
-
- this_union_types = set()
- for interface in definitions.interfaces.itervalues():
- this_union_types.update(union_types_from(interface.attributes))
- for operation in interface.operations:
- this_union_types.update(union_types_from(operation.arguments))
- if operation.idl_type.is_union_type:
- this_union_types.add(operation.idl_type)
- for constructor in interface.constructors:
- this_union_types.update(union_types_from(constructor.arguments))
- for constructor in interface.custom_constructors:
- this_union_types.update(union_types_from(constructor.arguments))
- for callback_function in definitions.callback_functions.itervalues():
- this_union_types.update(union_types_from(callback_function.arguments))
- if callback_function.idl_type.is_union_type:
- this_union_types.add(callback_function.idl_type)
- for dictionary in definitions.dictionaries.itervalues():
- this_union_types.update(union_types_from(dictionary.members))
- for typedef in definitions.typedefs.itervalues():
- if typedef.idl_type.is_union_type:
- this_union_types.add(typedef.idl_type)
- return this_union_types
+ def collect(self, definitions):
+ self._union_types = set()
+ definitions.accept(self)
+ return self._union_types
+
+ def visit_typed_object(self, typed_object):
+ try:
+ idl_type = getattr(typed_object, 'idl_type')
Jens Widell 2015/04/08 09:35:19 It would be better to use typed_object.idl_type_at
bashi 2015/04/10 00:05:14 Done.
+ except AttributeError:
+ return
+ if not idl_type:
+ return
+ if idl_type.is_union_type:
+ self._union_types.add(idl_type)
+ if idl_type.element_type and idl_type.element_type.is_union_type:
Jens Widell 2015/04/08 09:35:19 I think it would be better to have a process_type(
bashi 2015/04/10 00:05:14 Good suggestion. I added idl_types() to IdlTypeBas
+ self._union_types.add(idl_type.element_type)
+ if idl_type.inner_type and idl_type.inner_type.is_union_type:
+ self._union_types.add(idl_type.inner_type)
class InterfaceInfoCollector(object):
@@ -183,7 +177,7 @@ class InterfaceInfoCollector(object):
binding code generation."""
definitions = self.reader.read_idl_file(idl_filename)
- this_union_types = collect_union_types_from_definitions(definitions)
+ this_union_types = UnionTypeCollector().collect(definitions)
self.union_types.update(this_union_types)
self.typedefs.update(definitions.typedefs)
# Check enum duplication.
« no previous file with comments | « no previous file | Source/bindings/tests/idls/core/TestInterfaceConstructor.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698