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

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

Issue 2715153004: Mojo: Support enums as map keys in WTF (Closed)
Patch Set: Address review comments Created 3 years, 9 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
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 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 146
147 def NamespaceToArray(namespace): 147 def NamespaceToArray(namespace):
148 return namespace.split(".") if namespace else [] 148 return namespace.split(".") if namespace else []
149 149
150 def GetNameForKind(kind, internal=False, flatten_nested_kind=False, 150 def GetNameForKind(kind, internal=False, flatten_nested_kind=False,
151 add_same_module_namespaces=False): 151 add_same_module_namespaces=False):
152 return _NameFormatter(kind, _variant).FormatForCpp( 152 return _NameFormatter(kind, _variant).FormatForCpp(
153 internal=internal, flatten_nested_kind=flatten_nested_kind, 153 internal=internal, flatten_nested_kind=flatten_nested_kind,
154 add_same_module_namespaces=add_same_module_namespaces) 154 add_same_module_namespaces=add_same_module_namespaces)
155 155
156 def GetQualifiedNameForKind(kind, internal=False, flatten_nested_kind=False): 156 def GetQualifiedNameForKind(kind, internal=False, flatten_nested_kind=False,
157 return _NameFormatter(kind, _variant).FormatForCpp( 157 include_variant=True):
158 internal=internal, add_same_module_namespaces=True, 158 return _NameFormatter(
159 flatten_nested_kind=flatten_nested_kind) 159 kind, _variant if include_variant else None).FormatForCpp(
160 internal=internal, add_same_module_namespaces=True,
161 flatten_nested_kind=flatten_nested_kind)
162
163
164 def GetWtfHashFnNameForEnum(enum):
165 return _NameFormatter(
166 enum, None).Format("_", internal=True, add_same_module_namespaces=True,
167 flatten_nested_kind=True) + "HashFn"
168
160 169
161 def GetFullMojomNameForKind(kind): 170 def GetFullMojomNameForKind(kind):
162 return _NameFormatter(kind, _variant).FormatForMojom() 171 return _NameFormatter(kind, _variant).FormatForMojom()
163 172
164 def IsTypemappedKind(kind): 173 def IsTypemappedKind(kind):
165 return hasattr(kind, "name") and \ 174 return hasattr(kind, "name") and \
166 GetFullMojomNameForKind(kind) in _current_typemap 175 GetFullMojomNameForKind(kind) in _current_typemap
167 176
168 def IsNativeOnlyKind(kind): 177 def IsNativeOnlyKind(kind):
169 return (mojom.IsStructKind(kind) or mojom.IsEnumKind(kind)) and \ 178 return (mojom.IsStructKind(kind) or mojom.IsEnumKind(kind)) and \
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 # use case yet. 213 # use case yet.
205 elif mojom.IsArrayKind(kind): 214 elif mojom.IsArrayKind(kind):
206 return False 215 return False
207 elif mojom.IsMapKind(kind): 216 elif mojom.IsMapKind(kind):
208 return False 217 return False
209 else: 218 else:
210 return True 219 return True
211 return Check(kind) 220 return Check(kind)
212 221
213 222
223 def AllEnumValues(enum):
224 """Return all enum values associated with an enum.
225
226 Args:
227 enum: {mojom.Enum} The enum type.
228
229 Returns:
230 {Set[int]} The values.
231 """
232 return set(field.numeric_value for field in enum.fields)
233
234
214 def GetNativeTypeName(typemapped_kind): 235 def GetNativeTypeName(typemapped_kind):
215 return _current_typemap[GetFullMojomNameForKind(typemapped_kind)]["typename"] 236 return _current_typemap[GetFullMojomNameForKind(typemapped_kind)]["typename"]
216 237
217 def GetCppPodType(kind): 238 def GetCppPodType(kind):
218 return _kind_to_cpp_type[kind] 239 return _kind_to_cpp_type[kind]
219 240
220 def FormatConstantDeclaration(constant, nested=False): 241 def FormatConstantDeclaration(constant, nested=False):
221 if mojom.IsStringKind(constant.kind): 242 if mojom.IsStringKind(constant.kind):
222 if nested: 243 if nested:
223 return "const char %s[]" % constant.name 244 return "const char %s[]" % constant.name
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after
577 if (not mojom.IsArrayKind(kind) and not mojom.IsMapKind(kind) and 598 if (not mojom.IsArrayKind(kind) and not mojom.IsMapKind(kind) and
578 not mojom.IsStringKind(kind)): 599 not mojom.IsStringKind(kind)):
579 return "nullptr" 600 return "nullptr"
580 601
581 return "new mojo::internal::ContainerValidateParams(%s)" % ( 602 return "new mojo::internal::ContainerValidateParams(%s)" % (
582 GetContainerValidateParamsCtorArgs(kind)) 603 GetContainerValidateParamsCtorArgs(kind))
583 604
584 class Generator(generator.Generator): 605 class Generator(generator.Generator):
585 606
586 cpp_filters = { 607 cpp_filters = {
608 "all_enum_values": AllEnumValues,
587 "constant_value": ConstantValue, 609 "constant_value": ConstantValue,
588 "contains_handles_or_interfaces": mojom.ContainsHandlesOrInterfaces, 610 "contains_handles_or_interfaces": mojom.ContainsHandlesOrInterfaces,
589 "contains_move_only_members": ContainsMoveOnlyMembers, 611 "contains_move_only_members": ContainsMoveOnlyMembers,
590 "cpp_wrapper_param_type": GetCppWrapperParamType, 612 "cpp_wrapper_param_type": GetCppWrapperParamType,
591 "cpp_data_view_type": GetCppDataViewType, 613 "cpp_data_view_type": GetCppDataViewType,
592 "cpp_field_type": GetCppFieldType, 614 "cpp_field_type": GetCppFieldType,
593 "cpp_union_field_type": GetCppUnionFieldType, 615 "cpp_union_field_type": GetCppUnionFieldType,
594 "cpp_pod_type": GetCppPodType, 616 "cpp_pod_type": GetCppPodType,
595 "cpp_union_getter_return_type": GetUnionGetterReturnType, 617 "cpp_union_getter_return_type": GetUnionGetterReturnType,
596 "cpp_union_trait_getter_return_type": GetUnionTraitGetterReturnType, 618 "cpp_union_trait_getter_return_type": GetUnionTraitGetterReturnType,
(...skipping 26 matching lines...) Expand all
623 "is_reference_kind": mojom.IsReferenceKind, 645 "is_reference_kind": mojom.IsReferenceKind,
624 "is_string_kind": mojom.IsStringKind, 646 "is_string_kind": mojom.IsStringKind,
625 "is_struct_kind": mojom.IsStructKind, 647 "is_struct_kind": mojom.IsStructKind,
626 "is_typemapped_kind": IsTypemappedKind, 648 "is_typemapped_kind": IsTypemappedKind,
627 "is_union_kind": mojom.IsUnionKind, 649 "is_union_kind": mojom.IsUnionKind,
628 "passes_associated_kinds": mojom.PassesAssociatedKinds, 650 "passes_associated_kinds": mojom.PassesAssociatedKinds,
629 "struct_constructors": GetStructConstructors, 651 "struct_constructors": GetStructConstructors,
630 "stylize_method": generator.StudlyCapsToCamel, 652 "stylize_method": generator.StudlyCapsToCamel,
631 "under_to_camel": generator.UnderToCamel, 653 "under_to_camel": generator.UnderToCamel,
632 "unmapped_type_for_serializer": GetUnmappedTypeForSerializer, 654 "unmapped_type_for_serializer": GetUnmappedTypeForSerializer,
655 "wtf_hash_fn_name_for_enum": GetWtfHashFnNameForEnum,
633 } 656 }
634 657
635 def GetExtraTraitsHeaders(self): 658 def GetExtraTraitsHeaders(self):
636 extra_headers = set() 659 extra_headers = set()
637 for typemap in self._GetAllUsedTypemaps(): 660 for typemap in self._GetAllUsedTypemaps():
638 extra_headers.update(typemap.get("traits_headers", [])) 661 extra_headers.update(typemap.get("traits_headers", []))
639 return sorted(extra_headers) 662 return sorted(extra_headers)
640 663
641 def _GetAllUsedTypemaps(self): 664 def _GetAllUsedTypemaps(self):
642 """Returns the typemaps for types needed for serialization in this module. 665 """Returns the typemaps for types needed for serialization in this module.
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
786 global _variant 809 global _variant
787 _variant = self.variant 810 _variant = self.variant
788 global _export_attribute 811 global _export_attribute
789 _export_attribute = self.export_attribute 812 _export_attribute = self.export_attribute
790 suffix = "-%s" % self.variant if self.variant else "" 813 suffix = "-%s" % self.variant if self.variant else ""
791 self.Write(self.GenerateModuleHeader(), 814 self.Write(self.GenerateModuleHeader(),
792 self.MatchMojomFilePath("%s%s.h" % (self.module.name, suffix))) 815 self.MatchMojomFilePath("%s%s.h" % (self.module.name, suffix)))
793 self.Write( 816 self.Write(
794 self.GenerateModuleSource(), 817 self.GenerateModuleSource(),
795 self.MatchMojomFilePath("%s%s.cc" % (self.module.name, suffix))) 818 self.MatchMojomFilePath("%s%s.cc" % (self.module.name, suffix)))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698