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 """Generates C++ source files from a mojom.Module.""" | 5 """Generates C++ source files from a mojom.Module.""" |
6 | 6 |
7 import mojom.generate.generator as generator | 7 import mojom.generate.generator as generator |
8 import mojom.generate.module as mojom | 8 import mojom.generate.module as mojom |
9 import mojom.generate.pack as pack | 9 import mojom.generate.pack as pack |
10 from mojom.generate.template_expander import UseJinja | 10 from mojom.generate.template_expander import UseJinja |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 name.append(token.name) | 164 name.append(token.name) |
165 return "::".join(name) | 165 return "::".join(name) |
166 return token | 166 return token |
167 | 167 |
168 def ExpressionToText(value, module): | 168 def ExpressionToText(value, module): |
169 if value[0] != "EXPRESSION": | 169 if value[0] != "EXPRESSION": |
170 raise Exception("Expected EXPRESSION, got" + value) | 170 raise Exception("Expected EXPRESSION, got" + value) |
171 return "".join(generator.ExpressionMapper(value, | 171 return "".join(generator.ExpressionMapper(value, |
172 lambda token: TranslateConstants(token, module))) | 172 lambda token: TranslateConstants(token, module))) |
173 | 173 |
| 174 def HasCallbacks(interface): |
| 175 for method in interface.methods: |
| 176 if method.response_parameters != None: |
| 177 return True |
| 178 return False |
| 179 |
174 _HEADER_SIZE = 8 | 180 _HEADER_SIZE = 8 |
175 | 181 |
176 class Generator(generator.Generator): | 182 class Generator(generator.Generator): |
177 | 183 |
178 cpp_filters = { | 184 cpp_filters = { |
179 "cpp_const_wrapper_type": GetCppConstWrapperType, | 185 "cpp_const_wrapper_type": GetCppConstWrapperType, |
180 "cpp_field_type": GetCppFieldType, | 186 "cpp_field_type": GetCppFieldType, |
181 "cpp_pod_type": GetCppPodType, | 187 "cpp_pod_type": GetCppPodType, |
182 "cpp_result_type": GetCppResultWrapperType, | 188 "cpp_result_type": GetCppResultWrapperType, |
183 "cpp_type": GetCppType, | 189 "cpp_type": GetCppType, |
184 "cpp_wrapper_type": GetCppWrapperType, | 190 "cpp_wrapper_type": GetCppWrapperType, |
185 "expression_to_text": ExpressionToText, | 191 "expression_to_text": ExpressionToText, |
186 "get_pad": pack.GetPad, | 192 "get_pad": pack.GetPad, |
| 193 "has_callbacks": HasCallbacks, |
187 "is_enum_kind": generator.IsEnumKind, | 194 "is_enum_kind": generator.IsEnumKind, |
188 "is_handle_kind": generator.IsHandleKind, | 195 "is_handle_kind": generator.IsHandleKind, |
189 "is_interface_kind": generator.IsInterfaceKind, | 196 "is_interface_kind": generator.IsInterfaceKind, |
190 "is_object_kind": generator.IsObjectKind, | 197 "is_object_kind": generator.IsObjectKind, |
191 "is_string_kind": generator.IsStringKind, | 198 "is_string_kind": generator.IsStringKind, |
192 "is_array_kind": lambda kind: isinstance(kind, mojom.Array), | 199 "is_array_kind": lambda kind: isinstance(kind, mojom.Array), |
193 "is_struct_with_handles": IsStructWithHandles, | 200 "is_struct_with_handles": IsStructWithHandles, |
194 "struct_size": lambda ps: ps.GetTotalSize() + _HEADER_SIZE, | 201 "struct_size": lambda ps: ps.GetTotalSize() + _HEADER_SIZE, |
195 "struct_from_method": generator.GetStructFromMethod, | 202 "struct_from_method": generator.GetStructFromMethod, |
196 "response_struct_from_method": generator.GetResponseStructFromMethod, | 203 "response_struct_from_method": generator.GetResponseStructFromMethod, |
(...skipping 23 matching lines...) Expand all Loading... |
220 | 227 |
221 @UseJinja("cpp_templates/module.cc.tmpl", filters=cpp_filters) | 228 @UseJinja("cpp_templates/module.cc.tmpl", filters=cpp_filters) |
222 def GenerateModuleSource(self): | 229 def GenerateModuleSource(self): |
223 return self.GetJinjaExports() | 230 return self.GetJinjaExports() |
224 | 231 |
225 def GenerateFiles(self, args): | 232 def GenerateFiles(self, args): |
226 self.Write(self.GenerateModuleHeader(), "%s.h" % self.module.name) | 233 self.Write(self.GenerateModuleHeader(), "%s.h" % self.module.name) |
227 self.Write(self.GenerateModuleInternalHeader(), | 234 self.Write(self.GenerateModuleInternalHeader(), |
228 "%s-internal.h" % self.module.name) | 235 "%s-internal.h" % self.module.name) |
229 self.Write(self.GenerateModuleSource(), "%s.cc" % self.module.name) | 236 self.Write(self.GenerateModuleSource(), "%s.cc" % self.module.name) |
OLD | NEW |