| 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 |