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

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

Issue 1719873003: Mojom runtime type info: New implementation for Go. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Rebasing Created 4 years, 10 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_go_generator.py
diff --git a/mojo/public/tools/bindings/generators/mojom_go_generator.py b/mojo/public/tools/bindings/generators/mojom_go_generator.py
index 2c167f40d0c3db43476375eddbdf2ab692580873..cd2eb3efd847c2a52bd62028e59a20473200af30 100644
--- a/mojo/public/tools/bindings/generators/mojom_go_generator.py
+++ b/mojo/public/tools/bindings/generators/mojom_go_generator.py
@@ -193,40 +193,6 @@ def EncodeSuffix(kind):
return EncodeSuffix(mojom.MSGPIPE)
return _kind_infos[kind].encode_suffix
-# This helper assists in the production of mojom_types.Type for simple kinds.
-# See _kind_infos above.
-def GetMojomTypeValue(kind, typepkg=''):
- if not kind in _kind_infos:
- return ''
-
- nullable = 'true' if mojom.IsNullableKind(kind) else 'false'
- if kind == mojom.BOOL or kind == mojom.FLOAT or kind == mojom.DOUBLE or \
- mojom.IsIntegralKind(kind):
-
- kind_name = UpperCamelCase(_kind_infos[kind].decode_suffix.upper())
- if kind == mojom.FLOAT:
- kind_name = "Float"
- elif kind == mojom.DOUBLE:
- kind_name = "Double"
- return '%sTypeSimpleType{%sSimpleType_%s}' % (typepkg, typepkg, kind_name)
- elif mojom.IsAnyHandleKind(kind):
- kind_name = 'Unspecified'
- if kind == mojom.DCPIPE:
- kind_name = 'DataPipeConsumer'
- elif kind == mojom.DPPIPE:
- kind_name = 'DataPipeProducer'
- elif kind == mojom.MSGPIPE:
- kind_name = 'MessagePipe'
- elif kind == mojom.SHAREDBUFFER:
- kind_name = 'SharedBuffer'
- return '%sTypeHandleType{%sHandleType{' \
- 'Nullable: %s, Kind: %sHandleType_Kind_%s}}' % \
- (typepkg, typepkg, nullable, typepkg, kind_name)
- elif mojom.IsStringKind(kind):
- return '%sTypeStringType{%sStringType{%s}}' % (typepkg, typepkg, nullable)
- else:
- raise Exception('Missing case for kind: %s' % kind)
-
def GetPackageName(module):
return module.name.split('.')[0]
@@ -235,6 +201,11 @@ def GetPackageNameForElement(element):
return ''
return element.imported_from.get('go_name', '')
+def GetTypeKeyForElement(element):
+ if not hasattr(element, 'type_key') or not element.type_key:
+ return ''
+ return element.type_key
+
def GetQualifiedName(name, package=None, exported=True):
if not package:
return FormatName(name, exported)
@@ -254,6 +225,27 @@ def GetAllEnums(module):
enums = [x.enums for x in data]
return [i for i in chain.from_iterable(enums)]
+def GetSerializedRuntimeTypeInfoLiteral(module, enabled):
+ """ Constructs a string that represents a literal definition in Go of
+ an array of bytes corresponding to |module.serialized_runtime_type_info|.
+
+ Args:
+ module: {mojom.Module} the module being processed.
+ enabled: {bool} Is this feature enabled.
+
+ Returns: A string of the form '{b0, b1, b2,...}' where the 'bi' are
+ the decimal representation of the bytes of
+ |module.serialized_runtime_type_info| or the string '{}' if either
+ |enabled| is false or |module.serialized_runtime_type_info| is None.
+ Furthermore the returned string will have embedded newline characters inserted
+ every 1000 characters to make the generated source code more tractable.
+ """
+ if not enabled or not module.serialized_runtime_type_info:
+ return '{}'
+ return '{%s}' % ','.join('%s%d' %
+ ('\n' if index > 0 and index%1000 == 0 else '', b)
+ for index, b in enumerate(module.serialized_runtime_type_info))
+
def AddImport(imports, mojom_imports, module, element):
"""Adds an import required to use the provided element.
@@ -324,9 +316,7 @@ class Generator(generator.Generator):
'is_struct': mojom.IsStructKind,
'is_union': mojom.IsUnionKind,
'qualified': GetQualifiedName,
- 'fullidentifier': mojom.GetMojomTypeFullIdentifier,
- 'mojom_type': GetMojomTypeValue,
- 'mojom_type_identifier': mojom.GetMojomTypeIdentifier,
+ 'mojom_type_key' : GetTypeKeyForElement,
'name': GetNameForElement,
'unqualified_name': GetUnqualifiedNameForElement,
'package': GetPackageNameForElement,
@@ -350,7 +340,10 @@ class Generator(generator.Generator):
if package != _service_describer_pkg_short else '',
'typepkg': '%s.' % _mojom_types_pkg_short \
if package != _mojom_types_pkg_short else '',
- 'unions': self.GetUnions()
+ 'unions': self.GetUnions(),
+ 'serialized_runtime_type_info_literal' : (
+ GetSerializedRuntimeTypeInfoLiteral(self.module,
+ self.should_gen_mojom_types))
}
@UseJinja('go_templates/source.tmpl', filters=go_filters)

Powered by Google App Engine
This is Rietveld 408576698