| OLD | NEW |
| 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 """Code shared by the various language-specific code generators.""" | 5 """Code shared by the various language-specific code generators.""" |
| 6 | 6 |
| 7 from functools import partial | 7 from functools import partial |
| 8 import os.path | 8 import os.path |
| 9 import re | 9 import re |
| 10 | 10 |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 """Returns default constructor parameters for the jinja environment.""" | 81 """Returns default constructor parameters for the jinja environment.""" |
| 82 return {} | 82 return {} |
| 83 | 83 |
| 84 def GetGlobals(self): | 84 def GetGlobals(self): |
| 85 """Returns global mappings for the template generation.""" | 85 """Returns global mappings for the template generation.""" |
| 86 return {} | 86 return {} |
| 87 | 87 |
| 88 def _AddStructComputedData(self, exported, struct): | 88 def _AddStructComputedData(self, exported, struct): |
| 89 """Adds computed data to the given struct. The data is computed once and | 89 """Adds computed data to the given struct. The data is computed once and |
| 90 used repeatedly in the generation process.""" | 90 used repeatedly in the generation process.""" |
| 91 struct.packed = pack.PackedStruct(struct) | 91 if not hasattr(struct, 'packed') or struct.packed is None: |
| 92 struct.bytes = pack.GetByteLayout(struct.packed) | 92 struct.packed = pack.PackedStruct(struct) |
| 93 struct.versions = pack.GetVersionInfo(struct.packed) | 93 struct.bytes = pack.GetByteLayout(struct.packed) |
| 94 struct.exported = exported | 94 struct.exported = exported |
| 95 return struct | 95 return struct |
| 96 | 96 |
| 97 def _AddInterfaceComputedData(self, interface): | 97 def _AddInterfaceComputedData(self, interface): |
| 98 """Adds computed data to the given interface. The data is computed once and | 98 """Adds computed data to the given interface. The data is computed once and |
| 99 used repeatedly in the generation process.""" | 99 used repeatedly in the generation process.""" |
| 100 # Here we set the interface's |version| attribute to be the maximum value |
| 101 # of the |min_version| attributes of all methods in the interface and all |
| 102 # parameters in those methods. |
| 103 # TODO(rudominer) Consider adding this value to the intermediate |
| 104 # representation. |
| 100 interface.version = 0 | 105 interface.version = 0 |
| 101 for method in interface.methods: | 106 for method in interface.methods: |
| 102 if method.min_version is not None: | 107 if method.min_version is not None: |
| 103 interface.version = max(interface.version, method.min_version) | 108 interface.version = max(interface.version, method.min_version) |
| 104 | 109 |
| 105 method.param_struct = self._GetStructFromMethod(method) | 110 method.param_struct = self._GetStructFromMethod(method) |
| 106 interface.version = max(interface.version, | 111 interface.version = max(interface.version, |
| 107 method.param_struct.versions[-1].version) | 112 method.param_struct.versions[-1].version) |
| 108 | 113 |
| 109 if method.response_parameters is not None: | 114 if method.response_parameters is not None: |
| 110 method.response_param_struct = self._GetResponseStructFromMethod(method) | 115 method.response_param_struct = self._GetResponseStructFromMethod(method) |
| 111 interface.version = max( | 116 interface.version = max( |
| 112 interface.version, | 117 interface.version, |
| 113 method.response_param_struct.versions[-1].version) | 118 method.response_param_struct.versions[-1].version) |
| 114 else: | 119 else: |
| 115 method.response_param_struct = None | 120 method.response_param_struct = None |
| 116 return interface | 121 return interface |
| 117 | 122 |
| 118 def _GetStructFromMethod(self, method): | 123 def _GetStructFromMethod(self, method): |
| 119 """Converts a method's parameters into the fields of a struct.""" | 124 """Returns a method's parameters as a struct.""" |
| 120 params_class = "%s_%s_Params" % (method.interface.name, method.name) | 125 return self._AddStructComputedData(False, method.param_struct) |
| 121 struct = mojom.Struct(params_class, module=method.interface.module) | |
| 122 for param in method.parameters: | |
| 123 struct.AddField(param.name, param.kind, param.ordinal, | |
| 124 attributes=param.attributes) | |
| 125 return self._AddStructComputedData(False, struct) | |
| 126 | 126 |
| 127 def _GetResponseStructFromMethod(self, method): | 127 def _GetResponseStructFromMethod(self, method): |
| 128 """Converts a method's response_parameters into the fields of a struct.""" | 128 """Returns a method's response_parameters as a struct.""" |
| 129 params_class = "%s_%s_ResponseParams" % (method.interface.name, method.name) | 129 return self._AddStructComputedData(False, method.response_param_struct) |
| 130 struct = mojom.Struct(params_class, module=method.interface.module) | |
| 131 for param in method.response_parameters: | |
| 132 struct.AddField(param.name, param.kind, param.ordinal, | |
| 133 attributes=param.attributes) | |
| 134 return self._AddStructComputedData(False, struct) | |
| OLD | NEW |