Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(558)

Side by Side Diff: mojo/public/tools/bindings/generators/mojom_cpp_generator.py

Issue 317073005: Mojom: Add 'default' keyword for initializing structs to non-null value. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698