| 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,
|
|
|