Index: tools/dom/scripts/databasebuilder.py |
diff --git a/tools/dom/scripts/databasebuilder.py b/tools/dom/scripts/databasebuilder.py |
index f61b81be78f37e4118e6720526bae91d2e3440e5..ceb6eb1cafbf8126c5ce363359c8e27d4a165771 100755 |
--- a/tools/dom/scripts/databasebuilder.py |
+++ b/tools/dom/scripts/databasebuilder.py |
@@ -20,9 +20,7 @@ import idl_validator |
import compiler |
import compute_interfaces_info_individual |
-from compute_interfaces_info_individual import compute_info_individual, info_individual |
-import compute_interfaces_info_overall |
-from compute_interfaces_info_overall import compute_interfaces_info_overall, interfaces_info |
+from compute_interfaces_info_individual import InterfaceInfoCollector |
import idl_definitions |
from idlnode import * |
@@ -132,7 +130,7 @@ class Build(): |
# Create compiler. |
self.idl_compiler = compiler.IdlCompilerDart(self.output_directory, |
attrib_file, |
- interfaces_info=interfaces_info, |
+ interfaces_info=provider._info_collector.interfaces_info, |
only_if_changed=True) |
def format_exception(self, e): |
@@ -168,13 +166,15 @@ class DatabaseBuilder(object): |
def __init__(self, database): |
"""DatabaseBuilder is used for importing and merging interfaces into |
the Database""" |
+ self._info_collector = InterfaceInfoCollector() |
+ |
self._database = database |
self._imported_interfaces = [] |
self._impl_stmts = [] |
self.conditionals_met = set() |
# Spin up the new IDL parser. |
- self.build = Build(None) |
+ self.build = Build(self) |
# Global typedef to mapping. |
self.global_type_defs = monitored.Dict('databasebuilder.global_type_defs', { |
@@ -186,13 +186,21 @@ class DatabaseBuilder(object): |
# a type name. |
def _resolve_type_defs(self, idl_file): |
for type_node in idl_file.all(IDLType): |
+ resolved = False |
type_name = type_node.id |
for typedef in self.global_type_defs: |
seq_name_typedef = 'sequence<%s>' % typedef |
if type_name == typedef: |
type_node.id = self.global_type_defs[typedef] |
+ resolved = True |
elif type_name == seq_name_typedef: |
type_node.id = 'sequence<%s>' % self.global_type_defs[typedef] |
+ resolved = True |
+ if not(resolved): |
+ for typedef in idl_file.typeDefs: |
+ if type_name == typedef.id: |
+ type_node.id = typedef.type.id |
+ resolved = True |
def _strip_ext_attributes(self, idl_file): |
"""Strips unuseful extended attributes.""" |
@@ -559,11 +567,11 @@ class DatabaseBuilder(object): |
if not(is_dart_idl): |
start_time = time.time() |
- # 2-stage computation: individual, then overall |
+ # Compute information for individual files |
+ # Information is stored in global variables interfaces_info and |
+ # partial_interface_files. |
for file_path in file_paths: |
- compute_info_individual(file_path) |
- info_individuals = [info_individual()] |
- compute_interfaces_info_overall(info_individuals) |
+ self._info_collector.collect_info(file_path) |
end_time = time.time() |
print 'Compute dependencies %s seconds' % round((end_time - start_time), 2) |
@@ -572,7 +580,7 @@ class DatabaseBuilder(object): |
# file is special in that more than one interface can exist in this file. |
implement_pairs = self._compute_dart_idl_implements(file_paths[0]) |
- interfaces_info['__dart_idl___'] = { |
+ self._info_collector.interfaces_info['__dart_idl___'] = { |
'implement_pairs': implement_pairs, |
} |
@@ -645,6 +653,10 @@ class DatabaseBuilder(object): |
for dictionary in idl_file.dictionaries: |
self._database.AddDictionary(dictionary) |
+ # TODO(terry): Hack to remember all typedef unions they're mapped to any |
+ # - no type. |
+ for typedef in idl_file.typeDefs: |
+ self._database.AddTypeDef(typedef) |
def _is_node_enabled(self, node, idl_defines): |
if not 'Conditional' in node.ext_attrs: |