| Index: mojo/public/bindings/generators/mojom_cpp_generator.py
|
| diff --git a/mojo/public/bindings/generators/mojom_cpp_generator.py b/mojo/public/bindings/generators/mojom_cpp_generator.py
|
| deleted file mode 100644
|
| index a95e711d85e7844801a3159e6f4d2d6b8504db5a..0000000000000000000000000000000000000000
|
| --- a/mojo/public/bindings/generators/mojom_cpp_generator.py
|
| +++ /dev/null
|
| @@ -1,219 +0,0 @@
|
| -# Copyright 2013 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -"""Generates C++ source files from a mojom.Module."""
|
| -
|
| -from generate import mojom
|
| -from generate import mojom_pack
|
| -from generate import mojom_generator
|
| -
|
| -from 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",
|
| -}
|
| -
|
| -
|
| -def GetNameForKind(kind, internal = False):
|
| - parts = []
|
| - if kind.imported_from:
|
| - parts.append(kind.imported_from["namespace"])
|
| - if internal:
|
| - parts.append("internal")
|
| - if kind.parent_kind:
|
| - parts.append(kind.parent_kind.name)
|
| - parts.append(kind.name)
|
| - return "::".join(parts)
|
| -
|
| -def GetCppType(kind):
|
| - if isinstance(kind, mojom.Struct):
|
| - return "%s_Data*" % GetNameForKind(kind, internal=True)
|
| - if isinstance(kind, mojom.Array):
|
| - return "mojo::internal::Array_Data<%s>*" % GetCppType(kind.kind)
|
| - if isinstance(kind, mojom.Interface):
|
| - return "%sHandle" % kind.name
|
| - if isinstance(kind, mojom.Enum):
|
| - return "int32_t"
|
| - if kind.spec == 's':
|
| - return "mojo::internal::String_Data*"
|
| - return _kind_to_cpp_type[kind]
|
| -
|
| -def GetCppArrayArgWrapperType(kind):
|
| - if isinstance(kind, (mojom.Struct, mojom.Enum)):
|
| - return GetNameForKind(kind)
|
| - if isinstance(kind, mojom.Array):
|
| - return "mojo::Array<%s >" % GetCppArrayArgWrapperType(kind.kind)
|
| - if isinstance(kind, mojom.Interface):
|
| - return "%sHandle" % kind.name
|
| - if kind.spec == 's':
|
| - return "mojo::String"
|
| - return _kind_to_cpp_type[kind]
|
| -
|
| -def GetCppResultWrapperType(kind):
|
| - if isinstance(kind, (mojom.Struct, mojom.Enum)):
|
| - return GetNameForKind(kind)
|
| - if isinstance(kind, mojom.Array):
|
| - return "mojo::Array<%s >" % GetCppArrayArgWrapperType(kind.kind)
|
| - if isinstance(kind, mojom.Interface):
|
| - return "Scoped%sHandle" % kind.name
|
| - if kind.spec == 's':
|
| - return "mojo::String"
|
| - if kind.spec == 'h':
|
| - return "mojo::ScopedHandle"
|
| - if kind.spec == 'h:d:c':
|
| - return "mojo::ScopedDataPipeConsumerHandle"
|
| - if kind.spec == 'h:d:p':
|
| - return "mojo::ScopedDataPipeProducerHandle"
|
| - if kind.spec == 'h:m':
|
| - return "mojo::ScopedMessagePipeHandle"
|
| - if kind.spec == 'h:s':
|
| - return "mojo::ScopedSharedBufferHandle"
|
| - return _kind_to_cpp_type[kind]
|
| -
|
| -def GetCppWrapperType(kind):
|
| - if isinstance(kind, (mojom.Struct, mojom.Enum)):
|
| - return GetNameForKind(kind)
|
| - if isinstance(kind, mojom.Array):
|
| - return "mojo::Array<%s >" % GetCppArrayArgWrapperType(kind.kind)
|
| - if isinstance(kind, mojom.Interface):
|
| - return "mojo::Passable<%sHandle>" % kind.name
|
| - if kind.spec == 's':
|
| - return "mojo::String"
|
| - if mojom_generator.IsHandleKind(kind):
|
| - return "mojo::Passable<%s>" % _kind_to_cpp_type[kind]
|
| - return _kind_to_cpp_type[kind]
|
| -
|
| -def GetCppConstWrapperType(kind):
|
| - if isinstance(kind, mojom.Struct):
|
| - return "const %s&" % GetNameForKind(kind)
|
| - if isinstance(kind, mojom.Array):
|
| - return "const mojo::Array<%s >&" % GetCppArrayArgWrapperType(kind.kind)
|
| - if isinstance(kind, mojom.Interface):
|
| - return "Scoped%sHandle" % kind.name
|
| - if isinstance(kind, mojom.Enum):
|
| - return GetNameForKind(kind)
|
| - if kind.spec == 's':
|
| - return "const mojo::String&"
|
| - if kind.spec == 'h':
|
| - return "mojo::ScopedHandle"
|
| - if kind.spec == 'h:d:c':
|
| - return "mojo::ScopedDataPipeConsumerHandle"
|
| - if kind.spec == 'h:d:p':
|
| - return "mojo::ScopedDataPipeProducerHandle"
|
| - if kind.spec == 'h:m':
|
| - return "mojo::ScopedMessagePipeHandle"
|
| - if kind.spec == 'h:s':
|
| - 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):
|
| - return ("mojo::internal::StructPointer<%s_Data>" %
|
| - GetNameForKind(kind, internal=True))
|
| - if isinstance(kind, mojom.Array):
|
| - return "mojo::internal::ArrayPointer<%s>" % GetCppType(kind.kind)
|
| - if isinstance(kind, mojom.Interface):
|
| - return "%sHandle" % kind.name
|
| - if isinstance(kind, mojom.Enum):
|
| - return GetNameForKind(kind)
|
| - if kind.spec == 's':
|
| - return "mojo::internal::StringPointer"
|
| - return _kind_to_cpp_type[kind]
|
| -
|
| -def IsStructWithHandles(struct):
|
| - for pf in struct.packed.packed_fields:
|
| - if mojom_generator.IsHandleKind(pf.field.kind):
|
| - return True
|
| - return False
|
| -
|
| -def TranslateConstants(token, module):
|
| - if isinstance(token, mojom.Constant):
|
| - # Enum constants are constructed like:
|
| - # Namespace::Struct::FIELD_NAME
|
| - name = []
|
| - if token.imported_from:
|
| - name.append(token.namespace)
|
| - if token.parent_kind:
|
| - name.append(token.parent_kind.name)
|
| - name.append(token.name[1])
|
| - return "::".join(name)
|
| - return token
|
| -
|
| -def ExpressionToText(value, module):
|
| - if value[0] != "EXPRESSION":
|
| - raise Exception("Expected EXPRESSION, got" + value)
|
| - return "".join(mojom_generator.ExpressionMapper(value,
|
| - lambda token: TranslateConstants(token, module)))
|
| -
|
| -_HEADER_SIZE = 8
|
| -
|
| -class Generator(mojom_generator.Generator):
|
| -
|
| - cpp_filters = {
|
| - "cpp_const_wrapper_type": GetCppConstWrapperType,
|
| - "cpp_field_type": GetCppFieldType,
|
| - "cpp_type": GetCppType,
|
| - "cpp_result_type": GetCppResultWrapperType,
|
| - "cpp_wrapper_type": GetCppWrapperType,
|
| - "expression_to_text": ExpressionToText,
|
| - "get_pad": mojom_pack.GetPad,
|
| - "is_enum_kind": mojom_generator.IsEnumKind,
|
| - "is_handle_kind": mojom_generator.IsHandleKind,
|
| - "is_object_kind": mojom_generator.IsObjectKind,
|
| - "is_string_kind": mojom_generator.IsStringKind,
|
| - "is_array_kind": lambda kind: isinstance(kind, mojom.Array),
|
| - "is_struct_with_handles": IsStructWithHandles,
|
| - "struct_size": lambda ps: ps.GetTotalSize() + _HEADER_SIZE,
|
| - "struct_from_method": mojom_generator.GetStructFromMethod,
|
| - "response_struct_from_method": mojom_generator.GetResponseStructFromMethod,
|
| - "stylize_method": mojom_generator.StudlyCapsToCamel,
|
| - "verify_token_type": mojom_generator.VerifyTokenType,
|
| - }
|
| -
|
| - def GetJinjaExports(self):
|
| - return {
|
| - "module": self.module,
|
| - "namespace": self.module.namespace,
|
| - "imports": self.module.imports,
|
| - "kinds": self.module.kinds,
|
| - "enums": self.module.enums,
|
| - "structs": self.GetStructs(),
|
| - "interfaces": self.module.interfaces,
|
| - }
|
| -
|
| - @UseJinja("cpp_templates/module.h.tmpl", filters=cpp_filters)
|
| - def GenerateModuleHeader(self):
|
| - return self.GetJinjaExports()
|
| -
|
| - @UseJinja("cpp_templates/module-internal.h.tmpl", filters=cpp_filters)
|
| - def GenerateModuleInternalHeader(self):
|
| - return self.GetJinjaExports()
|
| -
|
| - @UseJinja("cpp_templates/module.cc.tmpl", filters=cpp_filters)
|
| - def GenerateModuleSource(self):
|
| - return self.GetJinjaExports()
|
| -
|
| - def GenerateFiles(self):
|
| - self.Write(self.GenerateModuleHeader(), "%s.h" % self.module.name)
|
| - self.Write(self.GenerateModuleInternalHeader(),
|
| - "%s-internal.h" % self.module.name)
|
| - self.Write(self.GenerateModuleSource(), "%s.cc" % self.module.name)
|
|
|