Index: mojo/public/bindings/mojom_bindings_generator.py |
diff --git a/mojo/public/bindings/mojom_bindings_generator.py b/mojo/public/bindings/mojom_bindings_generator.py |
index c060de4bd83c2c158b952da0f7d7c675e8e6d536..87b055d6053278d79fbe3f365533b5f103a2e438 100755 |
--- a/mojo/public/bindings/mojom_bindings_generator.py |
+++ b/mojo/public/bindings/mojom_bindings_generator.py |
@@ -46,7 +46,11 @@ def LoadGenerators(generators_string): |
def ProcessFile(args, generator_modules, filename, processed_files): |
# Ensure we only visit each file once. |
- processed_files.append(filename) |
+ if filename in processed_files: |
+ if processed_files[filename] is None: |
+ raise Exception("Circular dependency: " + filename) |
+ return processed_files[filename] |
+ processed_files[filename] = None |
dirname, name = os.path.split(filename) |
name = os.path.splitext(name)[0] |
@@ -61,9 +65,8 @@ def ProcessFile(args, generator_modules, filename, processed_files): |
# We use these to generate proper type info. |
for import_data in mojom['imports']: |
import_filename = os.path.join(dirname, import_data['filename']) |
- if import_filename not in processed_files: |
- import_data['module'] = ProcessFile( |
- args, generator_modules, import_filename, processed_files) |
+ import_data['module'] = ProcessFile( |
+ args, generator_modules, import_filename, processed_files) |
module = mojom_data.OrderedModuleFromData(mojom) |
for generator_module in generator_modules: |
@@ -71,6 +74,7 @@ def ProcessFile(args, generator_modules, filename, processed_files): |
args.output_dir) |
generator.GenerateFiles() |
+ processed_files[filename] = module |
return module |
def Main(): |
@@ -95,7 +99,7 @@ def Main(): |
os.makedirs(args.output_dir) |
for filename in args.filename: |
- ProcessFile(args, generator_modules, filename, []) |
+ ProcessFile(args, generator_modules, filename, {}) |
return 0 |