| 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 e5f5e9de9dff0059181dedfbf5699552aa2461e0..fc02a013558722186cb173976dcaad37ac371ae9 100644
|
| --- a/mojo/public/tools/bindings/generators/mojom_cpp_generator.py
|
| +++ b/mojo/public/tools/bindings/generators/mojom_cpp_generator.py
|
| @@ -72,6 +72,9 @@ def GetCppType(kind):
|
| return "%s_Data*" % GetNameForKind(kind, internal=True)
|
| if mojom.IsAnyArrayKind(kind):
|
| return "mojo::internal::Array_Data<%s>*" % GetCppType(kind.kind)
|
| + if mojom.IsMapKind(kind):
|
| + return ("mojo::internal::Map_Data<%s, %s>*" %
|
| + (GetCppType(kind.key_kind), GetCppType(kind.value_kind)))
|
| if mojom.IsInterfaceKind(kind) or mojom.IsInterfaceRequestKind(kind):
|
| return "mojo::MessagePipeHandle"
|
| if mojom.IsEnumKind(kind):
|
| @@ -92,6 +95,9 @@ def GetCppArrayArgWrapperType(kind):
|
| return "%sPtr" % GetNameForKind(kind)
|
| if mojom.IsAnyArrayKind(kind):
|
| return "mojo::Array<%s> " % GetCppArrayArgWrapperType(kind.kind)
|
| + if mojom.IsMapKind(kind):
|
| + return "mojo::Map<%s, %s> " % (GetCppArrayArgWrapperType(kind.key_kind),
|
| + GetCppArrayArgWrapperType(kind.value_kind))
|
| if mojom.IsInterfaceKind(kind):
|
| raise Exception("Arrays of interfaces not yet supported!")
|
| if mojom.IsInterfaceRequestKind(kind):
|
| @@ -117,6 +123,9 @@ def GetCppResultWrapperType(kind):
|
| return "%sPtr" % GetNameForKind(kind)
|
| if mojom.IsAnyArrayKind(kind):
|
| return "mojo::Array<%s>" % GetCppArrayArgWrapperType(kind.kind)
|
| + if mojom.IsMapKind(kind):
|
| + return "mojo::Map<%s, %s>" % (GetCppArrayArgWrapperType(kind.key_kind),
|
| + GetCppArrayArgWrapperType(kind.value_kind))
|
| if mojom.IsInterfaceKind(kind):
|
| return "%sPtr" % GetNameForKind(kind)
|
| if mojom.IsInterfaceRequestKind(kind):
|
| @@ -142,6 +151,9 @@ def GetCppWrapperType(kind):
|
| return "%sPtr" % GetNameForKind(kind)
|
| if mojom.IsAnyArrayKind(kind):
|
| return "mojo::Array<%s>" % GetCppArrayArgWrapperType(kind.kind)
|
| + if mojom.IsMapKind(kind):
|
| + return "mojo::Map<%s, %s>" % (GetCppArrayArgWrapperType(kind.key_kind),
|
| + GetCppArrayArgWrapperType(kind.value_kind))
|
| if mojom.IsInterfaceKind(kind):
|
| return "%sPtr" % GetNameForKind(kind)
|
| if mojom.IsInterfaceRequestKind(kind):
|
| @@ -165,6 +177,9 @@ def GetCppConstWrapperType(kind):
|
| return "%sPtr" % GetNameForKind(kind)
|
| if mojom.IsAnyArrayKind(kind):
|
| return "mojo::Array<%s>" % GetCppArrayArgWrapperType(kind.kind)
|
| + if mojom.IsMapKind(kind):
|
| + return "mojo::Map<%s, %s>" % (GetCppArrayArgWrapperType(kind.key_kind),
|
| + GetCppArrayArgWrapperType(kind.value_kind))
|
| if mojom.IsInterfaceKind(kind):
|
| return "%sPtr" % GetNameForKind(kind)
|
| if mojom.IsInterfaceRequestKind(kind):
|
| @@ -268,6 +283,14 @@ def GetArrayValidateParams(kind):
|
| 'true' if element_is_nullable else 'false',
|
| element_validate_params)
|
|
|
| +def GetMapValidateParams(kind):
|
| + # Unlike GetArrayValidateParams, we are given the wrapped kind, instead of
|
| + # the raw array kind. So we wrap the return value of GetArrayValidateParams.
|
| + element_is_nullable = mojom.IsNullableKind(kind)
|
| + return "mojo::internal::ArrayValidateParams<0, %s,\n%s> " % (
|
| + 'true' if element_is_nullable else 'false',
|
| + GetArrayValidateParams(kind))
|
| +
|
| _HEADER_SIZE = 8
|
|
|
| class Generator(generator.Generator):
|
| @@ -284,6 +307,7 @@ class Generator(generator.Generator):
|
| "expected_array_size": generator.ExpectedArraySize,
|
| "expression_to_text": ExpressionToText,
|
| "get_array_validate_params": GetArrayValidateParams,
|
| + "get_map_validate_params": GetMapValidateParams,
|
| "get_name_for_kind": GetNameForKind,
|
| "get_pad": pack.GetPad,
|
| "has_callbacks": mojom.HasCallbacks,
|
| @@ -294,6 +318,7 @@ class Generator(generator.Generator):
|
| "is_any_handle_kind": mojom.IsAnyHandleKind,
|
| "is_interface_kind": mojom.IsInterfaceKind,
|
| "is_interface_request_kind": mojom.IsInterfaceRequestKind,
|
| + "is_map_kind": mojom.IsMapKind,
|
| "is_nullable_kind": mojom.IsNullableKind,
|
| "is_object_kind": mojom.IsObjectKind,
|
| "is_string_kind": mojom.IsStringKind,
|
|
|