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 |