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

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

Issue 2179273002: Mojo C++ bindings: support mapping T and T? differently. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 5 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 f4daef8f2321a8831ee2a4260efde15fa755067d..c6b0ade9e1df98aae20f963114dcc6b71f74a9bc 100644
--- a/mojo/public/tools/bindings/generators/mojom_cpp_generator.py
+++ b/mojo/public/tools/bindings/generators/mojom_cpp_generator.py
@@ -153,8 +153,17 @@ def GetCppPodType(kind):
return _kind_to_cpp_type[kind]
def GetCppWrapperType(kind):
+ def _AddOptional(type_name):
+ pattern = "WTF::Optional<%s>" if _for_blink else "base::Optional<%s>"
+ return pattern % type_name
+
if IsTypemappedKind(kind):
- return GetNativeTypeName(kind)
+ type_name = GetNativeTypeName(kind)
+ if (mojom.IsNullableKind(kind) and
+ not _current_typemap[GetFullMojomNameForKind(kind)][
+ "nullable_is_same_type"]):
+ type_name = _AddOptional(type_name)
+ return type_name
if mojom.IsEnumKind(kind):
return GetNameForKind(kind)
if mojom.IsStructKind(kind) or mojom.IsUnionKind(kind):
@@ -162,23 +171,19 @@ def GetCppWrapperType(kind):
if mojom.IsArrayKind(kind):
pattern = None
if _use_new_wrapper_types:
+ pattern = "WTF::Vector<%s>" if _for_blink else "std::vector<%s>"
if mojom.IsNullableKind(kind):
- pattern = ("WTF::Optional<WTF::Vector<%s>>" if _for_blink else
- "base::Optional<std::vector<%s>>")
- else:
- pattern = "WTF::Vector<%s>" if _for_blink else "std::vector<%s>"
+ pattern = _AddOptional(pattern)
else:
pattern = "mojo::WTFArray<%s>" if _for_blink else "mojo::Array<%s>"
return pattern % GetCppWrapperType(kind.kind)
if mojom.IsMapKind(kind):
pattern = None
if _use_new_wrapper_types:
+ pattern = ("WTF::HashMap<%s, %s>" if _for_blink else
+ "std::unordered_map<%s, %s>")
if mojom.IsNullableKind(kind):
- pattern = ("WTF::Optional<WTF::HashMap<%s, %s>>" if _for_blink else
- "base::Optional<std::unordered_map<%s, %s>>")
- else:
- pattern = ("WTF::HashMap<%s, %s>" if _for_blink else
- "std::unordered_map<%s, %s>")
+ pattern = _AddOptional(pattern)
else:
pattern = "mojo::WTFMap<%s, %s>" if _for_blink else "mojo::Map<%s, %s>"
return pattern % (GetCppWrapperType(kind.key_kind),
@@ -196,8 +201,8 @@ def GetCppWrapperType(kind):
return "WTF::String"
if not _use_new_wrapper_types:
return "mojo::String"
- return ("base::Optional<std::string>" if mojom.IsNullableKind(kind) else
- "std::string")
+ type_name = "std::string"
+ return _AddOptional(type_name) if mojom.IsNullableKind(kind) else type_name
if mojom.IsGenericHandleKind(kind):
return "mojo::ScopedHandle"
if mojom.IsDataPipeConsumerKind(kind):
« no previous file with comments | « mojo/public/tools/bindings/generate_type_mappings.py ('k') | services/ui/public/cpp/lib/window_tree_client.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698