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 11 matching lines...) Expand all Loading... |
22 mojom.HANDLE: "mojo::Handle", | 22 mojom.HANDLE: "mojo::Handle", |
23 mojom.DCPIPE: "mojo::DataPipeConsumerHandle", | 23 mojom.DCPIPE: "mojo::DataPipeConsumerHandle", |
24 mojom.DPPIPE: "mojo::DataPipeProducerHandle", | 24 mojom.DPPIPE: "mojo::DataPipeProducerHandle", |
25 mojom.MSGPIPE: "mojo::MessagePipeHandle", | 25 mojom.MSGPIPE: "mojo::MessagePipeHandle", |
26 mojom.SHAREDBUFFER: "mojo::SharedBufferHandle", | 26 mojom.SHAREDBUFFER: "mojo::SharedBufferHandle", |
27 mojom.INT64: "int64_t", | 27 mojom.INT64: "int64_t", |
28 mojom.UINT64: "uint64_t", | 28 mojom.UINT64: "uint64_t", |
29 mojom.DOUBLE: "double", | 29 mojom.DOUBLE: "double", |
30 } | 30 } |
31 | 31 |
| 32 def DefaultValue(field): |
| 33 if field.default: |
| 34 if isinstance(field.kind, mojom.Struct): |
| 35 assert field.default == "default" |
| 36 return "%s::New()" % GetNameForKind(field.kind) |
| 37 return ExpressionToText(field.default) |
| 38 return "" |
32 | 39 |
33 def NamespaceToArray(namespace): | 40 def NamespaceToArray(namespace): |
34 return namespace.split('.') if namespace else [] | 41 return namespace.split('.') if namespace else [] |
35 | 42 |
36 def GetNameForKind(kind, internal = False): | 43 def GetNameForKind(kind, internal = False): |
37 parts = [] | 44 parts = [] |
38 if kind.imported_from: | 45 if kind.imported_from: |
39 parts.extend(NamespaceToArray(kind.imported_from["namespace"])) | 46 parts.extend(NamespaceToArray(kind.imported_from["namespace"])) |
40 if internal: | 47 if internal: |
41 parts.append("internal") | 48 parts.append("internal") |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
221 | 228 |
222 class Generator(generator.Generator): | 229 class Generator(generator.Generator): |
223 | 230 |
224 cpp_filters = { | 231 cpp_filters = { |
225 "cpp_const_wrapper_type": GetCppConstWrapperType, | 232 "cpp_const_wrapper_type": GetCppConstWrapperType, |
226 "cpp_field_type": GetCppFieldType, | 233 "cpp_field_type": GetCppFieldType, |
227 "cpp_pod_type": GetCppPodType, | 234 "cpp_pod_type": GetCppPodType, |
228 "cpp_result_type": GetCppResultWrapperType, | 235 "cpp_result_type": GetCppResultWrapperType, |
229 "cpp_type": GetCppType, | 236 "cpp_type": GetCppType, |
230 "cpp_wrapper_type": GetCppWrapperType, | 237 "cpp_wrapper_type": GetCppWrapperType, |
| 238 "default_value": DefaultValue, |
231 "expression_to_text": ExpressionToText, | 239 "expression_to_text": ExpressionToText, |
232 "get_pad": pack.GetPad, | 240 "get_pad": pack.GetPad, |
233 "has_callbacks": HasCallbacks, | 241 "has_callbacks": HasCallbacks, |
234 "should_inline": ShouldInlineStruct, | 242 "should_inline": ShouldInlineStruct, |
235 "is_enum_kind": generator.IsEnumKind, | 243 "is_enum_kind": generator.IsEnumKind, |
236 "is_move_only_kind": generator.IsMoveOnlyKind, | 244 "is_move_only_kind": generator.IsMoveOnlyKind, |
237 "is_handle_kind": generator.IsHandleKind, | 245 "is_handle_kind": generator.IsHandleKind, |
238 "is_interface_kind": generator.IsInterfaceKind, | 246 "is_interface_kind": generator.IsInterfaceKind, |
239 "is_interface_request_kind": generator.IsInterfaceRequestKind, | 247 "is_interface_request_kind": generator.IsInterfaceRequestKind, |
240 "is_object_kind": generator.IsObjectKind, | 248 "is_object_kind": generator.IsObjectKind, |
241 "is_string_kind": generator.IsStringKind, | 249 "is_string_kind": generator.IsStringKind, |
242 "is_array_kind": lambda kind: isinstance(kind, mojom.Array), | |
243 "is_struct_with_handles": IsStructWithHandles, | 250 "is_struct_with_handles": IsStructWithHandles, |
244 "struct_size": lambda ps: ps.GetTotalSize() + _HEADER_SIZE, | 251 "struct_size": lambda ps: ps.GetTotalSize() + _HEADER_SIZE, |
245 "struct_from_method": generator.GetStructFromMethod, | 252 "struct_from_method": generator.GetStructFromMethod, |
246 "response_struct_from_method": generator.GetResponseStructFromMethod, | 253 "response_struct_from_method": generator.GetResponseStructFromMethod, |
247 "stylize_method": generator.StudlyCapsToCamel, | 254 "stylize_method": generator.StudlyCapsToCamel, |
248 "verify_token_type": generator.VerifyTokenType, | |
249 } | 255 } |
250 | 256 |
251 def GetJinjaExports(self): | 257 def GetJinjaExports(self): |
252 return { | 258 return { |
253 "module": self.module, | 259 "module": self.module, |
254 "namespace": self.module.namespace, | 260 "namespace": self.module.namespace, |
255 "namespaces_as_array": NamespaceToArray(self.module.namespace), | 261 "namespaces_as_array": NamespaceToArray(self.module.namespace), |
256 "imports": self.module.imports, | 262 "imports": self.module.imports, |
257 "kinds": self.module.kinds, | 263 "kinds": self.module.kinds, |
258 "enums": self.module.enums, | 264 "enums": self.module.enums, |
(...skipping 11 matching lines...) Expand all Loading... |
270 | 276 |
271 @UseJinja("cpp_templates/module.cc.tmpl", filters=cpp_filters) | 277 @UseJinja("cpp_templates/module.cc.tmpl", filters=cpp_filters) |
272 def GenerateModuleSource(self): | 278 def GenerateModuleSource(self): |
273 return self.GetJinjaExports() | 279 return self.GetJinjaExports() |
274 | 280 |
275 def GenerateFiles(self, args): | 281 def GenerateFiles(self, args): |
276 self.Write(self.GenerateModuleHeader(), "%s.h" % self.module.name) | 282 self.Write(self.GenerateModuleHeader(), "%s.h" % self.module.name) |
277 self.Write(self.GenerateModuleInternalHeader(), | 283 self.Write(self.GenerateModuleInternalHeader(), |
278 "%s-internal.h" % self.module.name) | 284 "%s-internal.h" % self.module.name) |
279 self.Write(self.GenerateModuleSource(), "%s.cc" % self.module.name) | 285 self.Write(self.GenerateModuleSource(), "%s.cc" % self.module.name) |
OLD | NEW |