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

Unified Diff: mojo/public/tools/bindings/pylib/mojom/generate/data.py

Issue 799113004: Update mojo sdk to rev 59145288bae55b0fce4276b017df6a1117bcf00f (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add mojo's ply to checklicenses whitelist Created 6 years 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: mojo/public/tools/bindings/pylib/mojom/generate/data.py
diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/data.py b/mojo/public/tools/bindings/pylib/mojom/generate/data.py
index 4aca497cc387f0c6287a60eab3bce26fbd40bea9..6d34a403a67e9218d565160b7357ed891e9eac7e 100644
--- a/mojo/public/tools/bindings/pylib/mojom/generate/data.py
+++ b/mojo/public/tools/bindings/pylib/mojom/generate/data.py
@@ -149,7 +149,7 @@ def KindFromData(kinds, data, scope):
def KindFromImport(original_kind, imported_from):
"""Used with 'import module' - clones the kind imported from the given
- module's namespace. Only used with Structs, Interfaces and Enums."""
+ module's namespace. Only used with Structs, Unions, Interfaces and Enums."""
kind = copy.copy(original_kind)
# |shared_definition| is used to store various properties (see
# |AddSharedProperty()| in module.py), including |imported_from|. We don't
@@ -168,8 +168,9 @@ def ImportFromData(module, data):
import_item['module'] = import_module
# Copy the struct kinds from our imports into the current module.
+ importable_kinds = (mojom.Struct, mojom.Union, mojom.Enum, mojom.Interface)
for kind in import_module.kinds.itervalues():
- if (isinstance(kind, (mojom.Struct, mojom.Enum, mojom.Interface)) and
+ if (isinstance(kind, importable_kinds) and
kind.imported_from is None):
kind = KindFromImport(kind, import_item)
module.kinds[kind.spec] = kind
@@ -204,6 +205,21 @@ def StructFromData(module, data):
struct.fields_data = data['fields']
return struct
+def UnionToData(union):
+ return {
+ istr(0, 'name'): union.name,
+ istr(1, 'fields'): map(FieldToData, union.fields)
+ }
+
+def UnionFromData(module, data):
+ union = mojom.Union(module=module)
+ union.name = data['name']
+ union.spec = 'x:' + module.namespace + '.' + union.name
+ module.kinds[union.spec] = union
+ # Stash fields data here temporarily.
+ union.fields_data = data['fields']
+ return union
+
def FieldToData(field):
data = {
istr(0, 'name'): field.name,
@@ -341,7 +357,8 @@ def ModuleToData(module):
istr(0, 'name'): module.name,
istr(1, 'namespace'): module.namespace,
istr(2, 'structs'): map(StructToData, module.structs),
- istr(3, 'interfaces'): map(InterfaceToData, module.interfaces)
+ istr(3, 'interfaces'): map(InterfaceToData, module.interfaces),
+ istr(4, 'unions'): map(UnionToData, module.unions),
}
def ModuleFromData(data):
@@ -366,6 +383,8 @@ def ModuleFromData(data):
lambda enum: EnumFromData(module, enum, None), data['enums'])
module.structs = map(
lambda struct: StructFromData(module, struct), data['structs'])
+ module.unions = map(
+ lambda union: UnionFromData(module, struct), data.get('unions', []))
module.interfaces = map(
lambda interface: InterfaceFromData(module, interface),
data['interfaces'])
@@ -379,6 +398,10 @@ def ModuleFromData(data):
struct.fields = map(lambda field:
FieldFromData(module, field, struct), struct.fields_data)
del struct.fields_data
+ for union in module.unions:
+ union.fields = map(lambda field:
+ FieldFromData(module, field, union), union.fields_data)
+ del union.fields_data
for interface in module.interfaces:
interface.methods = map(lambda method:
MethodFromData(module, method, interface), interface.methods_data)

Powered by Google App Engine
This is Rietveld 408576698