Index: mojo/public/tools/bindings/generators/mojom_cpp_generator.py |
diff --git a/mojo/public/tools/bindings/generators/mojom_cpp_generator.py b/mojo/public/tools/bindings/generators/mojom_cpp_generator.py |
index eb2f03bd20f8696fafb4df23f6822932421a9dd6..e3288679a735b443bfb7e11132a801331281b264 100644 |
--- a/mojo/public/tools/bindings/generators/mojom_cpp_generator.py |
+++ b/mojo/public/tools/bindings/generators/mojom_cpp_generator.py |
@@ -61,24 +61,39 @@ def DefaultValue(field): |
def NamespaceToArray(namespace): |
return namespace.split(".") if namespace else [] |
-def GetNameForKind(kind, internal = False): |
+def GetNamePartsForKind(kind, add_same_module_namespaces, internal): |
+ def MapKindName_(kind): |
+ if not internal: |
+ return kind.name |
+ if (mojom.IsStructKind(kind) or mojom.IsUnionKind(kind) or |
+ mojom.IsInterfaceKind(kind) or mojom.IsEnumKind(kind)): |
+ return kind.name + "_Data" |
+ return kind.name |
+ |
parts = [] |
if kind.imported_from: |
parts.extend(NamespaceToArray(kind.imported_from["namespace"])) |
+ elif hasattr(kind, "module") and add_same_module_namespaces: |
+ parts.extend(NamespaceToArray(kind.module.namespace)) |
if internal: |
parts.append("internal") |
if kind.parent_kind: |
- parts.append(kind.parent_kind.name) |
- parts.append(kind.name) |
+ parts.append(MapKindName_(kind.parent_kind)) |
+ parts.append(MapKindName_(kind)) |
+ return parts |
+ |
+def GetNameForKind(kind, internal=False): |
+ parts = GetNamePartsForKind(kind, False, internal) |
+ return "::".join(parts) |
+ |
+def GetQualifiedNameForKind(kind, internal=False): |
+ # Always start with an empty part to force a leading "::" on output. |
+ parts = [""] |
+ parts.extend(GetNamePartsForKind(kind, True, internal)) |
return "::".join(parts) |
def GetFullMojomNameForKind(kind): |
- parts = [] |
- if kind.imported_from: |
- parts.extend(NamespaceToArray(kind.imported_from["namespace"])) |
- elif hasattr(kind, "module"): |
- parts.extend(NamespaceToArray(kind.module.namespace)) |
- parts.append(kind.name) |
+ parts = GetNamePartsForKind(kind, True, False) |
return ".".join(parts) |
def IsTypemappedKind(kind): |
@@ -91,13 +106,6 @@ def IsNativeOnlyKind(kind): |
def GetNativeTypeName(typemapped_kind): |
return _current_typemap[GetFullMojomNameForKind(typemapped_kind)]["typename"] |
-def GetQualifiedNameForKind(kind): |
- # Always start with an empty part to force a leading "::" on output. |
- parts = [""] |
- parts.extend(NamespaceToArray(kind.module.namespace)) |
- parts.append(kind.name) |
- return "::".join(parts) |
- |
def GetCppType(kind): |
if mojom.IsStructKind(kind) and kind.native_only: |
raise Exception("Should not be reached!") |
@@ -107,9 +115,9 @@ def GetCppType(kind): |
return "mojo::internal::Map_Data<%s, %s>*" % ( |
GetCppType(kind.key_kind), GetCppType(kind.value_kind)) |
if mojom.IsStructKind(kind): |
- return "%s_Data*" % GetNameForKind(kind, internal=True) |
+ return "%s*" % GetNameForKind(kind, internal=True) |
if mojom.IsUnionKind(kind): |
- return "%s_Data" % GetNameForKind(kind, internal=True) |
+ return "%s" % GetNameForKind(kind, internal=True) |
if mojom.IsInterfaceKind(kind): |
return "mojo::internal::Interface_Data" |
if mojom.IsInterfaceRequestKind(kind): |
@@ -119,7 +127,7 @@ def GetCppType(kind): |
if mojom.IsAssociatedInterfaceRequestKind(kind): |
return "mojo::internal::AssociatedInterfaceRequest_Data" |
if mojom.IsEnumKind(kind): |
- return "int32_t" |
+ return GetNameForKind(kind, internal=True) |
if mojom.IsStringKind(kind): |
return "mojo::internal::String_Data*" |
return _kind_to_cpp_type[kind] |
@@ -280,10 +288,10 @@ def GetCppFieldType(kind): |
if IsNativeOnlyKind(kind): |
return "mojo::internal::ArrayPointer<uint8_t>" |
if mojom.IsStructKind(kind): |
- return ("mojo::internal::StructPointer<%s_Data>" % |
+ return ("mojo::internal::StructPointer<%s>" % |
GetNameForKind(kind, internal=True)) |
if mojom.IsUnionKind(kind): |
- return "%s_Data" % GetNameForKind(kind, internal=True) |
+ return "%s" % GetNameForKind(kind, internal=True) |
if mojom.IsArrayKind(kind): |
return "mojo::internal::ArrayPointer<%s>" % GetCppType(kind.kind) |
if mojom.IsMapKind(kind): |
@@ -298,7 +306,7 @@ def GetCppFieldType(kind): |
if mojom.IsAssociatedInterfaceRequestKind(kind): |
return "mojo::internal::AssociatedInterfaceRequest_Data" |
if mojom.IsEnumKind(kind): |
- return GetNameForKind(kind) |
+ return GetNameForKind(kind, internal=True) |
if mojom.IsStringKind(kind): |
return "mojo::internal::StringPointer" |
return _kind_to_cpp_type[kind] |
@@ -308,10 +316,8 @@ def GetCppUnionFieldType(kind): |
return "MojoHandle" |
if mojom.IsInterfaceKind(kind): |
return "uint64_t" |
- if mojom.IsEnumKind(kind): |
- return "int32_t" |
if mojom.IsUnionKind(kind): |
- return ("mojo::internal::UnionPointer<%s_Data>" % |
+ return ("mojo::internal::UnionPointer<%s>" % |
GetNameForKind(kind, internal=True)) |
return GetCppFieldType(kind) |