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

Unified Diff: third_party/mojo/src/mojo/public/tools/bindings/pylib/mojom/parse/translate.py

Issue 917433003: Update mojo sdk to rev 1027d24a1f68c6d10b7539b32114f1272b2cc9f1 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add //build/module_args/mojo.gni. Created 5 years, 10 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
Index: third_party/mojo/src/mojo/public/tools/bindings/pylib/mojom/parse/translate.py
diff --git a/third_party/mojo/src/mojo/public/tools/bindings/pylib/mojom/parse/translate.py b/third_party/mojo/src/mojo/public/tools/bindings/pylib/mojom/parse/translate.py
index 8fbc86d154f1a1c115e2b5c23435e1d6bdc88825..cd5c358ce50f40c72a64282c15dec2a50871b752 100644
--- a/third_party/mojo/src/mojo/public/tools/bindings/pylib/mojom/parse/translate.py
+++ b/third_party/mojo/src/mojo/public/tools/bindings/pylib/mojom/parse/translate.py
@@ -8,11 +8,28 @@
from . import ast
-def _MapTreeForType(func, tree, type_to_map):
+def _DuplicateName(values):
+ """Returns the 'name' of the first entry in |values| whose 'name' has already
+ been encountered. If there are no duplicates, returns None."""
+ names = set()
+ for value in values:
+ if value['name'] in names:
+ return value['name']
+ names.add(value['name'])
+ return None
+
+def _MapTreeForType(func, tree, type_to_map, scope):
assert isinstance(type_to_map, type)
if not tree:
return []
- return [func(subtree) for subtree in tree if isinstance(subtree, type_to_map)]
+ result = [func(subtree)
+ for subtree in tree if isinstance(subtree, type_to_map)]
+ duplicate_name = _DuplicateName(result)
+ if duplicate_name:
+ raise Exception('Names in mojom must be unique within a scope. The name '
+ '"%s" is used more than once within the scope "%s".' %
+ (duplicate_name, scope))
+ return result
def _MapKind(kind):
map_to_kind = {'bool': 'b',
@@ -110,10 +127,11 @@ class _MojomBuilder(object):
assert isinstance(struct, ast.Struct)
data = {'name': struct.name,
'fields': _MapTreeForType(StructFieldToDict, struct.body,
- ast.StructField),
- 'enums': _MapTreeForType(_EnumToDict, struct.body, ast.Enum),
+ ast.StructField, struct.name),
+ 'enums': _MapTreeForType(_EnumToDict, struct.body, ast.Enum,
+ struct.name),
'constants': _MapTreeForType(_ConstToDict, struct.body,
- ast.Const)}
+ ast.Const, struct.name)}
_AddOptional(data, 'attributes',
_AttributeListToDict(struct.attribute_list))
return data
@@ -133,7 +151,7 @@ class _MojomBuilder(object):
assert isinstance(union, ast.Union)
data = {'name': union.name,
'fields': _MapTreeForType(UnionFieldToDict, union.body,
- ast.UnionField)}
+ ast.UnionField, union.name)}
_AddOptional(data, 'attributes',
_AttributeListToDict(union.attribute_list))
return data
@@ -165,10 +183,11 @@ class _MojomBuilder(object):
assert isinstance(interface, ast.Interface)
data = {'name': interface.name,
'methods': _MapTreeForType(MethodToDict, interface.body,
- ast.Method),
- 'enums': _MapTreeForType(_EnumToDict, interface.body, ast.Enum),
+ ast.Method, interface.name),
+ 'enums': _MapTreeForType(_EnumToDict, interface.body, ast.Enum,
+ interface.name),
'constants': _MapTreeForType(_ConstToDict, interface.body,
- ast.Const)}
+ ast.Const, interface.name)}
_AddOptional(data, 'attributes',
_AttributeListToDict(interface.attribute_list))
return data
@@ -179,15 +198,16 @@ class _MojomBuilder(object):
self.mojom['imports'] = \
[{'filename': imp.import_filename} for imp in tree.import_list]
self.mojom['structs'] = \
- _MapTreeForType(StructToDict, tree.definition_list, ast.Struct)
+ _MapTreeForType(StructToDict, tree.definition_list, ast.Struct, name)
self.mojom['unions'] = \
- _MapTreeForType(UnionToDict, tree.definition_list, ast.Union)
+ _MapTreeForType(UnionToDict, tree.definition_list, ast.Union, name)
self.mojom['interfaces'] = \
- _MapTreeForType(InterfaceToDict, tree.definition_list, ast.Interface)
+ _MapTreeForType(InterfaceToDict, tree.definition_list, ast.Interface,
+ name)
self.mojom['enums'] = \
- _MapTreeForType(_EnumToDict, tree.definition_list, ast.Enum)
+ _MapTreeForType(_EnumToDict, tree.definition_list, ast.Enum, name)
self.mojom['constants'] = \
- _MapTreeForType(_ConstToDict, tree.definition_list, ast.Const)
+ _MapTreeForType(_ConstToDict, tree.definition_list, ast.Const, name)
_AddOptional(self.mojom, 'attributes',
_AttributeListToDict(tree.module.attribute_list)
if tree.module else None)

Powered by Google App Engine
This is Rietveld 408576698