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

Side by Side Diff: mojo/public/tools/bindings/generators/mojom_go_generator.py

Issue 1824263002: Mojom backend: Stop re-computing version info and field packing data. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 9 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
« no previous file with comments | « no previous file | mojo/public/tools/bindings/pylib/mojom/generate/generator.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2015 The Chromium Authors. All rights reserved. 1 # Copyright 2015 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 '''Generates Go source files from a mojom.Module.''' 5 '''Generates Go source files from a mojom.Module.'''
6 6
7 from itertools import chain 7 from itertools import chain
8 import os 8 import os
9 import re 9 import re
10 10
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 return GetFullName(element) 151 return GetFullName(element)
152 152
153 def GetNameForElement(element, exported=True): 153 def GetNameForElement(element, exported=True):
154 if (mojom.IsInterfaceKind(element) or mojom.IsStructKind(element) 154 if (mojom.IsInterfaceKind(element) or mojom.IsStructKind(element)
155 or mojom.IsUnionKind(element)): 155 or mojom.IsUnionKind(element)):
156 return GetFullName(element, exported) 156 return GetFullName(element, exported)
157 if isinstance(element, (mojom.EnumField, 157 if isinstance(element, (mojom.EnumField,
158 mojom.Field, 158 mojom.Field,
159 mojom.Method, 159 mojom.Method,
160 mojom.Parameter)): 160 mojom.Parameter)):
161 return FormatName(element.name, exported) 161 element_name = (element.go_name if hasattr(element, "go_name")
162 else element.name)
163 return FormatName(element_name, exported)
162 if isinstance(element, (mojom.Enum, 164 if isinstance(element, (mojom.Enum,
163 mojom.Constant, 165 mojom.Constant,
164 mojom.ConstantValue)): 166 mojom.ConstantValue)):
165 return GetNameForNestedElement(element) 167 return GetNameForNestedElement(element)
166 raise Exception('Unexpected element: %s' % element) 168 raise Exception('Unexpected element: %s' % element)
167 169
168 def ExpressionToText(token): 170 def ExpressionToText(token):
169 if isinstance(token, mojom.EnumValue): 171 if isinstance(token, mojom.EnumValue):
170 return "%s_%s" % (GetNameForNestedElement(token.enum), 172 return "%s_%s" % (GetNameForNestedElement(token.enum),
171 FormatName(token.name, True)) 173 FormatName(token.name, True))
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
416 # Each Interface has a service description that uses this. 418 # Each Interface has a service description that uses this.
417 imports[_service_describer_pkg] = _service_describer_pkg_short 419 imports[_service_describer_pkg] = _service_describer_pkg_short
418 420
419 # TODO(rogulenko): add these after generating constants and struct defaults. 421 # TODO(rogulenko): add these after generating constants and struct defaults.
420 # for constant in GetAllConstants(self.module): 422 # for constant in GetAllConstants(self.module):
421 # AddImport(imports, mojom_imports, self.module, constant.value) 423 # AddImport(imports, mojom_imports, self.module, constant.value)
422 424
423 return imports, mojom_imports 425 return imports, mojom_imports
424 426
425 # Overrides the implementation from the base class in order to customize the 427 # Overrides the implementation from the base class in order to customize the
426 # struct and field names. 428 # struct and field names. Since the Python objects representing the struct
429 # and fields are shared by all language generators we don't want to actually
430 # modify the |name| property. Instead we add a |go_name| property.
427 def _GetStructFromMethod(self, method): 431 def _GetStructFromMethod(self, method):
428 params_class = "%s_%s_Params" % (GetNameForElement(method.interface), 432 self._AddStructComputedData(False, method.param_struct)
429 GetNameForElement(method)) 433 # Only generate the go_names if they have not already been generated.
430 struct = mojom.Struct(params_class, module=method.interface.module) 434 if not hasattr(method.param_struct, "go_name"):
431 for param in method.parameters: 435 method.param_struct.go_name = "%s_%s_Params" % (
432 struct.AddField("in%s" % GetNameForElement(param), 436 GetNameForElement(method.interface), GetNameForElement(method))
433 param.kind, param.ordinal, attributes=param.attributes) 437 for field in method.param_struct.fields:
434 return self._AddStructComputedData(False, struct) 438 field.go_name = "in%s" % GetNameForElement(field)
439 return method.param_struct
435 440
436 # Overrides the implementation from the base class in order to customize the 441 # Overrides the implementation from the base class in order to customize the
437 # struct and field names. 442 # struct and field names. Since the Python objects representing the struct
443 # and fields are shared by all language generators we don't want to actually
444 # modify the |name| property. Instead we add a |go_name| property.
438 def _GetResponseStructFromMethod(self, method): 445 def _GetResponseStructFromMethod(self, method):
439 params_class = "%s_%s_ResponseParams" % ( 446 self._AddStructComputedData(False, method.response_param_struct)
440 GetNameForElement(method.interface), GetNameForElement(method)) 447 if not hasattr(method.response_param_struct, "go_name"):
441 struct = mojom.Struct(params_class, module=method.interface.module) 448 # Only generate the go_names if they have not already been generated.
442 for param in method.response_parameters: 449 method.response_param_struct.go_name = "%s_%s_ResponseParams" % (
443 struct.AddField("out%s" % GetNameForElement(param), 450 GetNameForElement(method.interface), GetNameForElement(method))
444 param.kind, param.ordinal, attributes=param.attributes) 451 for field in method.response_param_struct.fields:
445 return self._AddStructComputedData(False, struct) 452 field.go_name = "out%s" % GetNameForElement(field)
453 return method.response_param_struct
OLDNEW
« no previous file with comments | « no previous file | mojo/public/tools/bindings/pylib/mojom/generate/generator.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698