Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1270)

Unified Diff: mojo/public/tools/bindings/generators/mojom_cpp_generator.py

Issue 1635613002: [mojo-bindings] Support reuse of native enum classes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix more missing public_deps Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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,

Powered by Google App Engine
This is Rietveld 408576698