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 f9d2bd0713310de550524fed81605fe0fae22b74..ba9ec1671342291bbb888713394fdbdd167f490f 100644 |
--- a/mojo/public/tools/bindings/generators/mojom_cpp_generator.py |
+++ b/mojo/public/tools/bindings/generators/mojom_cpp_generator.py |
@@ -61,11 +61,17 @@ def DefaultValue(field): |
def NamespaceToArray(namespace): |
return namespace.split(".") if namespace else [] |
+def IsNativeStructKind(kind): |
+ return mojom.IsStructKind(kind) and kind.native_only |
+ |
+def IsNativeEnumKind(kind): |
+ return mojom.IsEnumKind(kind) and kind.native_only |
+ |
def GetNamePartsForKind(kind, add_same_module_namespaces, internal): |
def MapKindName_(kind): |
if not internal: |
return kind.name |
- if mojom.IsStructKind(kind) and kind.native_only: |
+ if IsNativeStructKind(kind): |
return "mojo::Array_Data<uint8_t>" |
if (mojom.IsStructKind(kind) or mojom.IsUnionKind(kind) or |
mojom.IsInterfaceKind(kind) or mojom.IsEnumKind(kind)): |
@@ -102,16 +108,13 @@ def IsTypemappedKind(kind): |
return hasattr(kind, "name") and \ |
GetFullMojomNameForKind(kind) in _current_typemap |
-def IsNativeOnlyKind(kind): |
- return mojom.IsStructKind(kind) and kind.native_only |
- |
def GetNativeTypeName(typemapped_kind): |
return _current_typemap[GetFullMojomNameForKind(typemapped_kind)]["typename"] |
def DoesKindSupportEquality(kind): |
if IsTypemappedKind(kind): |
return False |
- if mojom.IsStructKind(kind) and kind.native_only: |
+ if IsNativeStructKind(kind): |
return False |
if mojom.IsArrayKind(kind): |
return DoesKindSupportEquality(kind.kind) |
@@ -120,7 +123,7 @@ def DoesKindSupportEquality(kind): |
return True |
def GetCppType(kind): |
- if mojom.IsStructKind(kind) and kind.native_only: |
+ if IsNativeStructKind(kind): |
# A native-only type is just a blob of bytes. |
return "mojo::internal::Array_Data<uint8_t>*" |
if mojom.IsArrayKind(kind): |
@@ -152,16 +155,18 @@ def GetCppPodType(kind): |
return _kind_to_cpp_type[kind] |
def GetCppArrayArgWrapperType(kind): |
- if mojom.IsStructKind(kind) and kind.native_only: |
+ if IsNativeStructKind(kind): |
if IsTypemappedKind(kind): |
return GetNativeTypeName(kind) |
- else: |
- # Without a relevant typemap to apply, a native-only struct can only be |
- # exposed as a blob of bytes. |
- return "mojo::Array<uint8_t>" |
- if IsTypemappedKind(kind): |
+ # Without a relevant typemap to apply, a native-only struct can only be |
+ # exposed as a blob of bytes. |
+ return "mojo::Array<uint8_t>" |
+ if mojom.IsStructKind(kind) and IsTypemappedKind(kind): |
raise Exception( |
"Cannot serialize containers of non-native typemapped structs yet!") |
+ if IsNativeEnumKind(kind): |
+ assert IsTypemappedKind(kind) |
+ return GetNativeTypeName(kind) |
if mojom.IsEnumKind(kind): |
return GetNameForKind(kind) |
if mojom.IsStructKind(kind) or mojom.IsUnionKind(kind): |
@@ -195,10 +200,12 @@ def GetCppArrayArgWrapperType(kind): |
return _kind_to_cpp_type[kind] |
def GetCppResultWrapperType(kind): |
- if IsTypemappedKind(kind): |
+ if mojom.IsStructKind(kind) and IsTypemappedKind(kind): |
return "const %s&" % GetNativeTypeName(kind) |
- if mojom.IsStructKind(kind) and kind.native_only: |
+ if IsNativeStructKind(kind): |
return "mojo::Array<uint8_t>" |
+ if IsNativeEnumKind(kind): |
+ return GetNativeTypeName(kind) |
if mojom.IsEnumKind(kind): |
return GetNameForKind(kind) |
if mojom.IsStructKind(kind) or mojom.IsUnionKind(kind): |
@@ -239,7 +246,8 @@ def GetCppResultWrapperType(kind): |
def GetCppWrapperType(kind): |
if IsTypemappedKind(kind): |
return GetNativeTypeName(kind) |
- if mojom.IsStructKind(kind) and kind.native_only: |
+ assert not IsNativeEnumKind(kind) |
+ if IsNativeStructKind(kind): |
return "mojo::Array<uint8_t>" |
if mojom.IsEnumKind(kind): |
return GetNameForKind(kind) |
@@ -273,10 +281,13 @@ def GetCppWrapperType(kind): |
return _kind_to_cpp_type[kind] |
def GetCppConstWrapperType(kind): |
- if IsTypemappedKind(kind): |
+ if mojom.IsStructKind(kind) and IsTypemappedKind(kind): |
return "const %s&" % GetNativeTypeName(kind) |
- if mojom.IsStructKind(kind) and kind.native_only: |
+ if IsNativeStructKind(kind): |
return "mojo::Array<uint8_t>" |
+ if IsNativeEnumKind(kind): |
+ assert IsTypemappedKind(kind) |
+ return GetNativeTypeName(kind) |
if mojom.IsStructKind(kind) or mojom.IsUnionKind(kind): |
return "%sPtr" % GetNameForKind(kind) |
if mojom.IsArrayKind(kind): |
@@ -311,7 +322,7 @@ def GetCppConstWrapperType(kind): |
return _kind_to_cpp_type[kind] |
def GetCppFieldType(kind): |
- if mojom.IsStructKind(kind) and kind.native_only: |
+ if IsNativeStructKind(kind): |
return "mojo::internal::ArrayPointer<uint8_t>" |
if mojom.IsStructKind(kind): |
return ("mojo::internal::StructPointer<%s>" % |
@@ -477,7 +488,8 @@ class Generator(generator.Generator): |
"is_enum_kind": mojom.IsEnumKind, |
"is_integral_kind": mojom.IsIntegralKind, |
"is_move_only_kind": mojom.IsMoveOnlyKind, |
- "is_native_only_kind": IsNativeOnlyKind, |
+ "is_native_enum_kind": IsNativeEnumKind, |
+ "is_native_struct_kind": IsNativeStructKind, |
"is_any_handle_kind": mojom.IsAnyHandleKind, |
"is_interface_kind": mojom.IsInterfaceKind, |
"is_interface_request_kind": mojom.IsInterfaceRequestKind, |