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 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
376 return False | 376 return False |
377 return True | 377 return True |
378 | 378 |
379 def ShouldInlineUnion(union): | 379 def ShouldInlineUnion(union): |
380 return not any(mojom.IsMoveOnlyKind(field.kind) for field in union.fields) | 380 return not any(mojom.IsMoveOnlyKind(field.kind) for field in union.fields) |
381 | 381 |
382 def GetArrayValidateParamsCtorArgs(kind): | 382 def GetArrayValidateParamsCtorArgs(kind): |
383 if mojom.IsStringKind(kind): | 383 if mojom.IsStringKind(kind): |
384 expected_num_elements = 0 | 384 expected_num_elements = 0 |
385 element_is_nullable = False | 385 element_is_nullable = False |
| 386 key_validate_params = "nullptr" |
386 element_validate_params = "nullptr" | 387 element_validate_params = "nullptr" |
387 enum_validate_func = "nullptr" | 388 enum_validate_func = "nullptr" |
388 elif mojom.IsMapKind(kind): | 389 elif mojom.IsMapKind(kind): |
389 expected_num_elements = 0 | 390 expected_num_elements = 0 |
390 element_is_nullable = mojom.IsNullableKind(kind.value_kind) | 391 element_is_nullable = False |
391 element_validate_params = GetNewArrayValidateParams(kind.value_kind) | 392 key_validate_params = GetNewArrayValidateParams(mojom.Array( |
| 393 kind=kind.key_kind)) |
| 394 element_validate_params = GetNewArrayValidateParams(mojom.Array( |
| 395 kind=kind.value_kind)) |
392 enum_validate_func = "nullptr" | 396 enum_validate_func = "nullptr" |
393 else: | 397 else: # mojom.IsArrayKind(kind) |
394 expected_num_elements = generator.ExpectedArraySize(kind) or 0 | 398 expected_num_elements = generator.ExpectedArraySize(kind) or 0 |
395 element_is_nullable = mojom.IsNullableKind(kind.kind) | 399 element_is_nullable = mojom.IsNullableKind(kind.kind) |
| 400 key_validate_params = "nullptr" |
396 element_validate_params = GetNewArrayValidateParams(kind.kind) | 401 element_validate_params = GetNewArrayValidateParams(kind.kind) |
397 if mojom.IsEnumKind(kind.kind): | 402 if mojom.IsEnumKind(kind.kind): |
398 enum_validate_func = ("%s::Validate" % | 403 enum_validate_func = ("%s::Validate" % |
399 GetQualifiedNameForKind(kind.kind, internal=True)) | 404 GetQualifiedNameForKind(kind.kind, internal=True)) |
400 else: | 405 else: |
401 enum_validate_func = "nullptr" | 406 enum_validate_func = "nullptr" |
402 | 407 |
403 if enum_validate_func == "nullptr": | 408 if enum_validate_func == "nullptr": |
404 return "%d, %s, %s" % (expected_num_elements, | 409 if key_validate_params == "nullptr": |
405 "true" if element_is_nullable else "false", | 410 return "%d, %s, %s" % (expected_num_elements, |
406 element_validate_params) | 411 "true" if element_is_nullable else "false", |
| 412 element_validate_params) |
| 413 else: |
| 414 return "%s, %s" % (key_validate_params, element_validate_params) |
407 else: | 415 else: |
408 return "%d, %s" % (expected_num_elements, enum_validate_func) | 416 return "%d, %s" % (expected_num_elements, enum_validate_func) |
409 | 417 |
410 def GetNewArrayValidateParams(kind): | 418 def GetNewArrayValidateParams(kind): |
411 if (not mojom.IsArrayKind(kind) and not mojom.IsMapKind(kind) and | 419 if (not mojom.IsArrayKind(kind) and not mojom.IsMapKind(kind) and |
412 not mojom.IsStringKind(kind)): | 420 not mojom.IsStringKind(kind)): |
413 return "nullptr" | 421 return "nullptr" |
414 | 422 |
415 return "new mojo::internal::ArrayValidateParams(%s)" % ( | 423 return "new mojo::internal::ArrayValidateParams(%s)" % ( |
416 GetArrayValidateParamsCtorArgs(kind)) | 424 GetArrayValidateParamsCtorArgs(kind)) |
417 | 425 |
418 def GetMapValidateParamsCtorArgs(value_kind): | |
419 # Unlike GetArrayValidateParams, we are given the wrapped kind, instead of | |
420 # the raw array kind. So we wrap the return value of GetArrayValidateParams. | |
421 element_is_nullable = mojom.IsNullableKind(value_kind) | |
422 return "0, %s, %s" % ("true" if element_is_nullable else "false", | |
423 GetNewArrayValidateParams(value_kind)) | |
424 | |
425 class Generator(generator.Generator): | 426 class Generator(generator.Generator): |
426 | 427 |
427 cpp_filters = { | 428 cpp_filters = { |
428 "constant_value": ConstantValue, | 429 "constant_value": ConstantValue, |
429 "cpp_wrapper_param_type": GetCppWrapperParamType, | 430 "cpp_wrapper_param_type": GetCppWrapperParamType, |
430 "cpp_field_type": GetCppFieldType, | 431 "cpp_field_type": GetCppFieldType, |
431 "cpp_union_field_type": GetCppUnionFieldType, | 432 "cpp_union_field_type": GetCppUnionFieldType, |
432 "cpp_pod_type": GetCppPodType, | 433 "cpp_pod_type": GetCppPodType, |
433 "cpp_union_getter_return_type": GetUnionGetterReturnType, | 434 "cpp_union_getter_return_type": GetUnionGetterReturnType, |
434 "cpp_wrapper_type": GetCppWrapperType, | 435 "cpp_wrapper_type": GetCppWrapperType, |
435 "default_value": DefaultValue, | 436 "default_value": DefaultValue, |
436 "expression_to_text": ExpressionToText, | 437 "expression_to_text": ExpressionToText, |
437 "get_array_validate_params_ctor_args": GetArrayValidateParamsCtorArgs, | 438 "get_array_validate_params_ctor_args": GetArrayValidateParamsCtorArgs, |
438 "get_map_validate_params_ctor_args": GetMapValidateParamsCtorArgs, | |
439 "get_name_for_kind": GetNameForKind, | 439 "get_name_for_kind": GetNameForKind, |
440 "get_pad": pack.GetPad, | 440 "get_pad": pack.GetPad, |
441 "get_qualified_name_for_kind": GetQualifiedNameForKind, | 441 "get_qualified_name_for_kind": GetQualifiedNameForKind, |
442 "has_callbacks": mojom.HasCallbacks, | 442 "has_callbacks": mojom.HasCallbacks, |
443 "has_sync_methods": mojom.HasSyncMethods, | 443 "has_sync_methods": mojom.HasSyncMethods, |
444 "should_inline": ShouldInlineStruct, | 444 "should_inline": ShouldInlineStruct, |
445 "should_inline_union": ShouldInlineUnion, | 445 "should_inline_union": ShouldInlineUnion, |
446 "is_array_kind": mojom.IsArrayKind, | 446 "is_array_kind": mojom.IsArrayKind, |
447 "is_cloneable_kind": IsCloneableKind, | 447 "is_cloneable_kind": IsCloneableKind, |
448 "is_enum_kind": mojom.IsEnumKind, | 448 "is_enum_kind": mojom.IsEnumKind, |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
526 _for_blink = self.for_blink | 526 _for_blink = self.for_blink |
527 global _variant | 527 global _variant |
528 _variant = self.variant | 528 _variant = self.variant |
529 suffix = "-%s" % self.variant if self.variant else "" | 529 suffix = "-%s" % self.variant if self.variant else "" |
530 self.Write(self.GenerateModuleHeader(), | 530 self.Write(self.GenerateModuleHeader(), |
531 self.MatchMojomFilePath("%s%s.h" % (self.module.name, suffix))) | 531 self.MatchMojomFilePath("%s%s.h" % (self.module.name, suffix))) |
532 self.Write(self.GenerateModuleInternalHeader(), | 532 self.Write(self.GenerateModuleInternalHeader(), |
533 self.MatchMojomFilePath("%s%s-internal.h" % (self.module.name, suffix))) | 533 self.MatchMojomFilePath("%s%s-internal.h" % (self.module.name, suffix))) |
534 self.Write(self.GenerateModuleSource(), | 534 self.Write(self.GenerateModuleSource(), |
535 self.MatchMojomFilePath("%s%s.cc" % (self.module.name, suffix))) | 535 self.MatchMojomFilePath("%s%s.cc" % (self.module.name, suffix))) |
OLD | NEW |