Index: third_party/mojo/src/mojo/public/tools/bindings/generators/mojom_cpp_generator.py |
diff --git a/third_party/mojo/src/mojo/public/tools/bindings/generators/mojom_cpp_generator.py b/third_party/mojo/src/mojo/public/tools/bindings/generators/mojom_cpp_generator.py |
index b5bf6a460ee00c54a435f4840d94d0026dfb4611..70dc94b5c0ebdfa8a236999f19dbadbe725bb28f 100644 |
--- a/third_party/mojo/src/mojo/public/tools/bindings/generators/mojom_cpp_generator.py |
+++ b/third_party/mojo/src/mojo/public/tools/bindings/generators/mojom_cpp_generator.py |
@@ -108,7 +108,7 @@ def GetCppArrayArgWrapperType(kind): |
raise Exception("Arrays of interface requests not yet supported!") |
if mojom.IsStringKind(kind): |
return "mojo::String" |
- if mojom.IsHandleKind(kind): |
+ if mojom.IsGenericHandleKind(kind): |
return "mojo::ScopedHandle" |
if mojom.IsDataPipeConsumerKind(kind): |
return "mojo::ScopedDataPipeConsumerHandle" |
@@ -123,7 +123,7 @@ def GetCppArrayArgWrapperType(kind): |
def GetCppResultWrapperType(kind): |
if mojom.IsEnumKind(kind): |
return GetNameForKind(kind) |
- if mojom.IsStructKind(kind): |
+ if mojom.IsStructKind(kind) or mojom.IsUnionKind(kind): |
return "%sPtr" % GetNameForKind(kind) |
if mojom.IsArrayKind(kind): |
return "mojo::Array<%s>" % GetCppArrayArgWrapperType(kind.kind) |
@@ -136,7 +136,7 @@ def GetCppResultWrapperType(kind): |
return "mojo::InterfaceRequest<%s>" % GetNameForKind(kind.kind) |
if mojom.IsStringKind(kind): |
return "mojo::String" |
- if mojom.IsHandleKind(kind): |
+ if mojom.IsGenericHandleKind(kind): |
return "mojo::ScopedHandle" |
if mojom.IsDataPipeConsumerKind(kind): |
return "mojo::ScopedDataPipeConsumerHandle" |
@@ -164,7 +164,7 @@ def GetCppWrapperType(kind): |
raise Exception("InterfaceRequest fields not supported!") |
if mojom.IsStringKind(kind): |
return "mojo::String" |
- if mojom.IsHandleKind(kind): |
+ if mojom.IsGenericHandleKind(kind): |
return "mojo::ScopedHandle" |
if mojom.IsDataPipeConsumerKind(kind): |
return "mojo::ScopedDataPipeConsumerHandle" |
@@ -177,7 +177,7 @@ def GetCppWrapperType(kind): |
return _kind_to_cpp_type[kind] |
def GetCppConstWrapperType(kind): |
- if mojom.IsStructKind(kind): |
+ if mojom.IsStructKind(kind) or mojom.IsUnionKind(kind): |
return "%sPtr" % GetNameForKind(kind) |
if mojom.IsArrayKind(kind): |
return "mojo::Array<%s>" % GetCppArrayArgWrapperType(kind.kind) |
@@ -192,7 +192,7 @@ def GetCppConstWrapperType(kind): |
return GetNameForKind(kind) |
if mojom.IsStringKind(kind): |
return "const mojo::String&" |
- if mojom.IsHandleKind(kind): |
+ if mojom.IsGenericHandleKind(kind): |
return "mojo::ScopedHandle" |
if mojom.IsDataPipeConsumerKind(kind): |
return "mojo::ScopedDataPipeConsumerHandle" |
@@ -227,18 +227,23 @@ def GetCppFieldType(kind): |
return "mojo::internal::StringPointer" |
return _kind_to_cpp_type[kind] |
+def GetCppUnionFieldType(kind): |
+ if mojom.IsAnyHandleKind(kind): |
+ return "MojoHandle" |
+ if mojom.IsEnumKind(kind): |
+ return "int32_t" |
+ if mojom.IsUnionKind(kind): |
+ return ("mojo::internal::UnionPointer<%s_Data>" % |
+ GetNameForKind(kind, internal=True)) |
+ return GetCppFieldType(kind) |
+ |
def GetUnionGetterReturnType(kind): |
- if (mojom.IsStructKind(kind) or mojom.IsArrayKind(kind) or |
- mojom.IsMapKind(kind)): |
+ if (mojom.IsStructKind(kind) or mojom.IsUnionKind(kind) or |
+ mojom.IsArrayKind(kind) or mojom.IsMapKind(kind) or |
+ mojom.IsAnyHandleKind(kind)): |
return "%s&" % GetCppWrapperType(kind) |
return GetCppResultWrapperType(kind) |
-def IsStructWithHandles(struct): |
- for pf in struct.packed.packed_fields: |
- if mojom.IsAnyHandleKind(pf.field.kind): |
- return True |
- return False |
- |
def TranslateConstants(token, kind): |
if isinstance(token, mojom.NamedValue): |
# Both variable and enum constants are constructed like: |
@@ -338,6 +343,7 @@ class Generator(generator.Generator): |
"constant_value": ConstantValue, |
"cpp_const_wrapper_type": GetCppConstWrapperType, |
"cpp_field_type": GetCppFieldType, |
+ "cpp_union_field_type": GetCppUnionFieldType, |
"cpp_pod_type": GetCppPodType, |
"cpp_result_type": GetCppResultWrapperType, |
"cpp_type": GetCppType, |
@@ -355,6 +361,7 @@ class Generator(generator.Generator): |
"is_array_kind": mojom.IsArrayKind, |
"is_cloneable_kind": mojom.IsCloneableKind, |
"is_enum_kind": mojom.IsEnumKind, |
+ "is_integral_kind": mojom.IsIntegralKind, |
"is_move_only_kind": mojom.IsMoveOnlyKind, |
"is_any_handle_kind": mojom.IsAnyHandleKind, |
"is_interface_kind": mojom.IsInterfaceKind, |
@@ -364,7 +371,6 @@ class Generator(generator.Generator): |
"is_object_kind": mojom.IsObjectKind, |
"is_string_kind": mojom.IsStringKind, |
"is_struct_kind": mojom.IsStructKind, |
- "is_struct_with_handles": IsStructWithHandles, |
"is_union_kind": mojom.IsUnionKind, |
"struct_size": lambda ps: ps.GetTotalSize() + _HEADER_SIZE, |
"stylize_method": generator.StudlyCapsToCamel, |