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

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

Issue 459873003: Mojom generator: move Is.*Kind() functions into module.py and use them from all mojom_.*_generator.… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix java compilation Created 6 years, 4 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 98f56b60743275b01e8ece8bc060a8e84576c328..8f90c419d57c1dc1377f79806d743a5723290856 100644
--- a/mojo/public/tools/bindings/generators/mojom_cpp_generator.py
+++ b/mojo/public/tools/bindings/generators/mojom_cpp_generator.py
@@ -11,22 +11,27 @@ from mojom.generate.template_expander import UseJinja
_kind_to_cpp_type = {
- mojom.BOOL: "bool",
- mojom.INT8: "int8_t",
- mojom.UINT8: "uint8_t",
- mojom.INT16: "int16_t",
- mojom.UINT16: "uint16_t",
- mojom.INT32: "int32_t",
- mojom.UINT32: "uint32_t",
- mojom.FLOAT: "float",
- mojom.HANDLE: "mojo::Handle",
- mojom.DCPIPE: "mojo::DataPipeConsumerHandle",
- mojom.DPPIPE: "mojo::DataPipeProducerHandle",
- mojom.MSGPIPE: "mojo::MessagePipeHandle",
- mojom.SHAREDBUFFER: "mojo::SharedBufferHandle",
- mojom.INT64: "int64_t",
- mojom.UINT64: "uint64_t",
- mojom.DOUBLE: "double",
+ mojom.BOOL: "bool",
+ mojom.INT8: "int8_t",
+ mojom.UINT8: "uint8_t",
+ mojom.INT16: "int16_t",
+ mojom.UINT16: "uint16_t",
+ mojom.INT32: "int32_t",
+ mojom.UINT32: "uint32_t",
+ mojom.FLOAT: "float",
+ mojom.HANDLE: "mojo::Handle",
+ mojom.DCPIPE: "mojo::DataPipeConsumerHandle",
+ mojom.DPPIPE: "mojo::DataPipeProducerHandle",
+ mojom.MSGPIPE: "mojo::MessagePipeHandle",
+ mojom.SHAREDBUFFER: "mojo::SharedBufferHandle",
+ mojom.NULLABLE_HANDLE: "mojo::Handle",
+ mojom.NULLABLE_DCPIPE: "mojo::DataPipeConsumerHandle",
+ mojom.NULLABLE_DPPIPE: "mojo::DataPipeProducerHandle",
+ mojom.NULLABLE_MSGPIPE: "mojo::MessagePipeHandle",
+ mojom.NULLABLE_SHAREDBUFFER: "mojo::SharedBufferHandle",
+ mojom.INT64: "int64_t",
+ mojom.UINT64: "uint64_t",
+ mojom.DOUBLE: "double",
}
_kind_to_cpp_literal_suffix = {
@@ -42,7 +47,7 @@ def ConstantValue(constant):
def DefaultValue(field):
if field.default:
- if isinstance(field.kind, mojom.Struct):
+ if mojom.IsStructKind(field.kind):
assert field.default == "default"
return "%s::New()" % GetNameForKind(field.kind)
return ExpressionToText(field.default, kind=field.kind)
@@ -63,149 +68,147 @@ def GetNameForKind(kind, internal = False):
return "::".join(parts)
def GetCppType(kind):
- if isinstance(kind, mojom.Struct):
+ if mojom.IsStructKind(kind):
return "%s_Data*" % GetNameForKind(kind, internal=True)
- if isinstance(kind, (mojom.Array, mojom.FixedArray)):
+ if mojom.IsAnyArrayKind(kind):
return "mojo::internal::Array_Data<%s>*" % GetCppType(kind.kind)
- if isinstance(kind, mojom.Interface) or \
- isinstance(kind, mojom.InterfaceRequest):
+ if mojom.IsInterfaceKind(kind) or mojom.IsInterfaceRequestKind(kind):
return "mojo::MessagePipeHandle"
- if isinstance(kind, mojom.Enum):
+ if mojom.IsEnumKind(kind):
return "int32_t"
- if kind.spec == 's':
+ if mojom.IsStringKind(kind):
return "mojo::internal::String_Data*"
return _kind_to_cpp_type[kind]
def GetCppPodType(kind):
- if kind.spec == 's':
+ if mojom.IsStringKind(kind):
return "char*"
return _kind_to_cpp_type[kind]
def GetCppArrayArgWrapperType(kind):
- if isinstance(kind, mojom.Enum):
+ if mojom.IsEnumKind(kind):
return GetNameForKind(kind)
- if isinstance(kind, mojom.Struct):
+ if mojom.IsStructKind(kind):
return "%sPtr" % GetNameForKind(kind)
- if isinstance(kind, (mojom.Array, mojom.FixedArray)):
+ if mojom.IsAnyArrayKind(kind):
return "mojo::Array<%s> " % GetCppArrayArgWrapperType(kind.kind)
- if isinstance(kind, mojom.Interface):
+ if mojom.IsInterfaceKind(kind):
raise Exception("Arrays of interfaces not yet supported!")
- if isinstance(kind, mojom.InterfaceRequest):
+ if mojom.IsInterfaceRequestKind(kind):
raise Exception("Arrays of interface requests not yet supported!")
- if kind.spec == 's':
+ if mojom.IsStringKind(kind):
return "mojo::String"
- if kind.spec == 'h':
+ if mojom.IsHandleKind(kind):
return "mojo::ScopedHandle"
- if kind.spec == 'h:d:c':
+ if mojom.IsDataPipeConsumerKind(kind):
return "mojo::ScopedDataPipeConsumerHandle"
- if kind.spec == 'h:d:p':
+ if mojom.IsDataPipeProducerKind(kind):
return "mojo::ScopedDataPipeProducerHandle"
- if kind.spec == 'h:m':
+ if mojom.IsMessagePipeKind(kind):
return "mojo::ScopedMessagePipeHandle"
- if kind.spec == 'h:s':
+ if mojom.IsSharedBufferKind(kind):
return "mojo::ScopedSharedBufferHandle"
return _kind_to_cpp_type[kind]
def GetCppResultWrapperType(kind):
- if isinstance(kind, mojom.Enum):
+ if mojom.IsEnumKind(kind):
return GetNameForKind(kind)
- if isinstance(kind, mojom.Struct):
+ if mojom.IsStructKind(kind):
return "%sPtr" % GetNameForKind(kind)
- if isinstance(kind, (mojom.Array, mojom.FixedArray)):
+ if mojom.IsAnyArrayKind(kind):
return "mojo::Array<%s>" % GetCppArrayArgWrapperType(kind.kind)
- if isinstance(kind, mojom.Interface):
+ if mojom.IsInterfaceKind(kind):
return "%sPtr" % GetNameForKind(kind)
- if isinstance(kind, mojom.InterfaceRequest):
+ if mojom.IsInterfaceRequestKind(kind):
return "mojo::InterfaceRequest<%s>" % GetNameForKind(kind.kind)
- if kind.spec == 's':
+ if mojom.IsStringKind(kind):
return "mojo::String"
- if kind.spec == 'h':
+ if mojom.IsHandleKind(kind):
return "mojo::ScopedHandle"
- if kind.spec == 'h:d:c':
+ if mojom.IsDataPipeConsumerKind(kind):
return "mojo::ScopedDataPipeConsumerHandle"
- if kind.spec == 'h:d:p':
+ if mojom.IsDataPipeProducerKind(kind):
return "mojo::ScopedDataPipeProducerHandle"
- if kind.spec == 'h:m':
+ if mojom.IsMessagePipeKind(kind):
return "mojo::ScopedMessagePipeHandle"
- if kind.spec == 'h:s':
+ if mojom.IsSharedBufferKind(kind):
return "mojo::ScopedSharedBufferHandle"
return _kind_to_cpp_type[kind]
def GetCppWrapperType(kind):
- if isinstance(kind, mojom.Enum):
+ if mojom.IsEnumKind(kind):
return GetNameForKind(kind)
- if isinstance(kind, mojom.Struct):
+ if mojom.IsStructKind(kind):
return "%sPtr" % GetNameForKind(kind)
- if isinstance(kind, (mojom.Array, mojom.FixedArray)):
+ if mojom.IsAnyArrayKind(kind):
return "mojo::Array<%s>" % GetCppArrayArgWrapperType(kind.kind)
- if isinstance(kind, mojom.Interface):
+ if mojom.IsInterfaceKind(kind):
return "%sPtr" % GetNameForKind(kind)
- if isinstance(kind, mojom.InterfaceRequest):
+ if mojom.IsInterfaceRequestKind(kind):
raise Exception("InterfaceRequest fields not supported!")
- if kind.spec == 's':
+ if mojom.IsStringKind(kind):
return "mojo::String"
- if kind.spec == 'h':
+ if mojom.IsHandleKind(kind):
return "mojo::ScopedHandle"
- if kind.spec == 'h:d:c':
+ if mojom.IsDataPipeConsumerKind(kind):
return "mojo::ScopedDataPipeConsumerHandle"
- if kind.spec == 'h:d:p':
+ if mojom.IsDataPipeProducerKind(kind):
return "mojo::ScopedDataPipeProducerHandle"
- if kind.spec == 'h:m':
+ if mojom.IsMessagePipeKind(kind):
return "mojo::ScopedMessagePipeHandle"
- if kind.spec == 'h:s':
+ if mojom.IsSharedBufferKind(kind):
return "mojo::ScopedSharedBufferHandle"
return _kind_to_cpp_type[kind]
def GetCppConstWrapperType(kind):
- if isinstance(kind, mojom.Struct):
+ if mojom.IsStructKind(kind):
return "%sPtr" % GetNameForKind(kind)
- if isinstance(kind, (mojom.Array, mojom.FixedArray)):
+ if mojom.IsAnyArrayKind(kind):
return "mojo::Array<%s>" % GetCppArrayArgWrapperType(kind.kind)
- if isinstance(kind, mojom.Interface):
+ if mojom.IsInterfaceKind(kind):
return "%sPtr" % GetNameForKind(kind)
- if isinstance(kind, mojom.InterfaceRequest):
+ if mojom.IsInterfaceRequestKind(kind):
return "mojo::InterfaceRequest<%s>" % GetNameForKind(kind.kind)
- if isinstance(kind, mojom.Enum):
+ if mojom.IsEnumKind(kind):
return GetNameForKind(kind)
- if kind.spec == 's':
+ if mojom.IsStringKind(kind):
return "const mojo::String&"
- if kind.spec == 'h':
+ if mojom.IsHandleKind(kind):
return "mojo::ScopedHandle"
- if kind.spec == 'h:d:c':
+ if mojom.IsDataPipeConsumerKind(kind):
return "mojo::ScopedDataPipeConsumerHandle"
- if kind.spec == 'h:d:p':
+ if mojom.IsDataPipeProducerKind(kind):
return "mojo::ScopedDataPipeProducerHandle"
- if kind.spec == 'h:m':
+ if mojom.IsMessagePipeKind(kind):
return "mojo::ScopedMessagePipeHandle"
- if kind.spec == 'h:s':
+ if mojom.IsSharedBufferKind(kind):
return "mojo::ScopedSharedBufferHandle"
if not kind in _kind_to_cpp_type:
print "missing:", kind.spec
return _kind_to_cpp_type[kind]
def GetCppFieldType(kind):
- if isinstance(kind, mojom.Struct):
+ if mojom.IsStructKind(kind):
return ("mojo::internal::StructPointer<%s_Data>" %
GetNameForKind(kind, internal=True))
- if isinstance(kind, (mojom.Array, mojom.FixedArray)):
+ if mojom.IsAnyArrayKind(kind):
return "mojo::internal::ArrayPointer<%s>" % GetCppType(kind.kind)
- if isinstance(kind, mojom.Interface) or \
- isinstance(kind, mojom.InterfaceRequest):
+ if mojom.IsInterfaceKind(kind) or mojom.IsInterfaceRequestKind(kind):
return "mojo::MessagePipeHandle"
- if isinstance(kind, mojom.Enum):
+ if mojom.IsEnumKind(kind):
return GetNameForKind(kind)
- if kind.spec == 's':
+ if mojom.IsStringKind(kind):
return "mojo::internal::StringPointer"
return _kind_to_cpp_type[kind]
def IsStructWithHandles(struct):
for pf in struct.packed.packed_fields:
- if generator.IsHandleKind(pf.field.kind):
+ if mojom.IsAnyHandleKind(pf.field.kind):
return True
return False
def TranslateConstants(token, kind):
- if isinstance(token, (mojom.NamedValue, mojom.EnumValue)):
+ if isinstance(token, mojom.NamedValue):
# Both variable and enum constants are constructed like:
# Namespace::Struct::CONSTANT_NAME
# For enums, CONSTANT_NAME is ENUM_NAME_ENUM_VALUE.
@@ -236,7 +239,7 @@ def ShouldInlineStruct(struct):
if len(struct.fields) > 4:
return False
for field in struct.fields:
- if generator.IsHandleKind(field.kind) or generator.IsObjectKind(field.kind):
+ if mojom.IsMoveOnlyKind(field.kind):
return False
return True
@@ -259,14 +262,14 @@ class Generator(generator.Generator):
"get_pad": pack.GetPad,
"has_callbacks": HasCallbacks,
"should_inline": ShouldInlineStruct,
- "is_array_kind": generator.IsArrayKind,
- "is_enum_kind": generator.IsEnumKind,
- "is_move_only_kind": generator.IsMoveOnlyKind,
- "is_handle_kind": generator.IsHandleKind,
- "is_interface_kind": generator.IsInterfaceKind,
- "is_interface_request_kind": generator.IsInterfaceRequestKind,
- "is_object_kind": generator.IsObjectKind,
- "is_string_kind": generator.IsStringKind,
+ "is_any_array_kind": mojom.IsAnyArrayKind,
+ "is_enum_kind": mojom.IsEnumKind,
+ "is_move_only_kind": mojom.IsMoveOnlyKind,
+ "is_any_handle_kind": mojom.IsAnyHandleKind,
+ "is_interface_kind": mojom.IsInterfaceKind,
+ "is_interface_request_kind": mojom.IsInterfaceRequestKind,
+ "is_object_kind": mojom.IsObjectKind,
+ "is_string_kind": mojom.IsStringKind,
"is_struct_with_handles": IsStructWithHandles,
"struct_size": lambda ps: ps.GetTotalSize() + _HEADER_SIZE,
"struct_from_method": generator.GetStructFromMethod,

Powered by Google App Engine
This is Rietveld 408576698