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

Side by Side Diff: mojo/public/bindings/pylib/generate/mojom_data.py

Issue 159983003: Fix a bug with mojom imports where 2 imports with the same namespace would (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 # Copyright 2013 The Chromium Authors. All rights reserved. 1 # Copyright 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import mojom 5 import mojom
6 6
7 # mojom_data provides a mechanism to turn mojom Modules to dictionaries and 7 # mojom_data provides a mechanism to turn mojom Modules to dictionaries and
8 # back again. This can be used to persist a mojom Module created progromatically 8 # back again. This can be used to persist a mojom Module created progromatically
9 # or to read a dictionary from code or a file. 9 # or to read a dictionary from code or a file.
10 # Example: 10 # Example:
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 return kinds[data] 47 return kinds[data]
48 if data.startswith('a:'): 48 if data.startswith('a:'):
49 kind = mojom.Array() 49 kind = mojom.Array()
50 kind.kind = KindFromData(kinds, data[2:]) 50 kind.kind = KindFromData(kinds, data[2:])
51 else: 51 else:
52 kind = mojom.Kind() 52 kind = mojom.Kind()
53 kind.spec = data 53 kind.spec = data
54 kinds[data] = kind 54 kinds[data] = kind
55 return kind 55 return kind
56 56
57 def ImportFromData(data): 57 def ImportFromData(module, data):
58 import_module = data['module'] 58 import_module = data['module']
59 59
60 import_item = {} 60 import_item = {}
61 import_item['module_name'] = import_module.name 61 import_item['module_name'] = import_module.name
62 import_item['namespace'] = import_module.namespace 62 import_item['namespace'] = import_module.namespace
63
64 # Copy the struct kinds from our imports into the current module.
65 for kind in import_module.kinds.itervalues():
66 # TODO(mpcomplete): Handle enums
67 if isinstance(kind, mojom.Struct) and kind.imported_from is None:
68 kind = mojom.Struct.CreateFromImport(kind, import_item)
69 module.kinds[kind.spec] = kind
63 return import_item 70 return import_item
64 71
65 def StructToData(struct): 72 def StructToData(struct):
66 return { 73 return {
67 istr(0, 'name'): struct.name, 74 istr(0, 'name'): struct.name,
68 istr(1, 'fields'): map(FieldToData, struct.fields) 75 istr(1, 'fields'): map(FieldToData, struct.fields)
69 } 76 }
70 77
71 def StructFromData(module, data): 78 def StructFromData(module, data):
72 struct = mojom.Struct() 79 struct = mojom.Struct()
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 istr(1, 'namespace'): module.namespace, 182 istr(1, 'namespace'): module.namespace,
176 istr(2, 'structs'): map(StructToData, module.structs), 183 istr(2, 'structs'): map(StructToData, module.structs),
177 istr(3, 'interfaces'): map(InterfaceToData, module.interfaces) 184 istr(3, 'interfaces'): map(InterfaceToData, module.interfaces)
178 } 185 }
179 186
180 def ModuleFromData(data): 187 def ModuleFromData(data):
181 module = mojom.Module() 188 module = mojom.Module()
182 module.kinds = {} 189 module.kinds = {}
183 for kind in mojom.PRIMITIVES: 190 for kind in mojom.PRIMITIVES:
184 module.kinds[kind.spec] = kind 191 module.kinds[kind.spec] = kind
185 # Copy the struct kinds from our imports into the current module.
186 for import_data in data['imports']:
187 import_module = import_data['module']
188 for kind in import_module.kinds.itervalues():
189 # TODO(mpcomplete): Handle enums
190 if isinstance(kind, mojom.Struct):
191 kind = mojom.Struct.CreateFromImport(
192 kind, import_module.namespace)
193 module.kinds[kind.spec] = kind
194 192
195 module.name = data['name'] 193 module.name = data['name']
196 module.namespace = data['namespace'] 194 module.namespace = data['namespace']
195 # Imports must come first, because they add to module.kinds which is used
196 # by by the others.
197 module.imports = map( 197 module.imports = map(
198 lambda import_data: ImportFromData(import_data), data['imports']) 198 lambda import_data: ImportFromData(module, import_data),
199 data['imports'])
199 module.structs = map( 200 module.structs = map(
200 lambda struct: StructFromData(module, struct), data['structs']) 201 lambda struct: StructFromData(module, struct), data['structs'])
201 module.interfaces = map( 202 module.interfaces = map(
202 lambda interface: 203 lambda interface: InterfaceFromData(module, interface),
203 InterfaceFromData(module, interface), data['interfaces']) 204 data['interfaces'])
204 if data.has_key('enums'): 205 if data.has_key('enums'):
205 module.enums = map( 206 module.enums = map(
206 lambda enum: EnumFromData(module.kinds, enum), data['enums']) 207 lambda enum: EnumFromData(module.kinds, enum), data['enums'])
207 return module 208 return module
208 209
209 def OrderedModuleFromData(data): 210 def OrderedModuleFromData(data):
210 module = ModuleFromData(data) 211 module = ModuleFromData(data)
211 next_interface_ordinal = 0 212 next_interface_ordinal = 0
212 for interface in module.interfaces: 213 for interface in module.interfaces:
213 next_ordinal = 0 214 next_ordinal = 0
214 for method in interface.methods: 215 for method in interface.methods:
215 if method.ordinal is None: 216 if method.ordinal is None:
216 method.ordinal = next_ordinal 217 method.ordinal = next_ordinal
217 next_ordinal = method.ordinal + 1 218 next_ordinal = method.ordinal + 1
218 return module 219 return module
OLDNEW
« no previous file with comments | « mojo/public/bindings/pylib/generate/mojom.py ('k') | mojo/public/bindings/tests/sample_import.mojom » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698