Commit 81ba7a1a authored by Raul Tambre's avatar Raul Tambre Committed by Commit Bot

mojo: Fix map() Python 3 compatibility

map() returns a list in Python 2. Python 3 returns an iterator.
Wrapping in a list() results in the same behaviour on both.

Traceback (most recent call last):
  File "../../mojo/public/tools/bindings/mojom_bindings_generator.py", line 569, in <module>
    sys.exit(main())
  File "../../mojo/public/tools/bindings/mojom_bindings_generator.py", line 564, in main
    return args.func(args, remaining_args)
  File "../../mojo/public/tools/bindings/mojom_bindings_generator.py", line 280, in _Generate
    processor._GenerateModule(
  File "../../mojo/public/tools/bindings/mojom_bindings_generator.py", line 225, in _GenerateModule
    AddComputedData(module)
  File "C:\Google\chromium\src\mojo\public\tools\bindings\pylib\mojom\generate\generator.py", line 191, in AddComputedData
    _AddInterfaceComputedData(interface)
  File "C:\Google\chromium\src\mojo\public\tools\bindings\pylib\mojom\generate\generator.py", line 152, in _AddInterfaceComputedData
    method.param_struct = _GetStructFromMethod(method)
  File "C:\Google\chromium\src\mojo\public\tools\bindings\pylib\mojom\generate\generator.py", line 172, in _GetStructFromMethod
    _AddStructComputedData(False, struct)
  File "C:\Google\chromium\src\mojo\public\tools\bindings\pylib\mojom\generate\generator.py", line 126, in _AddStructComputedData
    struct.packed = pack.PackedStruct(struct)
  File "C:\Google\chromium\src\mojo\public\tools\bindings\pylib\mojom\generate\pack.py", line 141, in __init__
    src_fields.append(PackedField(field, index, ordinal))
  File "C:\Google\chromium\src\mojo\public\tools\bindings\pylib\mojom\generate\pack.py", line 86, in __init__
    self.size = self.GetSizeForKind(field.kind)
  File "C:\Google\chromium\src\mojo\public\tools\bindings\pylib\mojom\generate\pack.py", line 63, in GetSizeForKind
    raise Exception("Undefined type: %s. Did you forget to import the file "
Exception: Undefined type: x:IndexId. Did you forget to import the file containing the definition?

Traceback (most recent call last):
  File "../../mojo/public/tools/bindings/mojom_bindings_generator.py", line 565, in <module>
    sys.exit(main())
  File "../../mojo/public/tools/bindings/mojom_bindings_generator.py", line 560, in main
    return args.func(args, remaining_args)
  File "../../mojo/public/tools/bindings/mojom_bindings_generator.py", line 276, in _Generate
    processor._GenerateModule(
  File "../../mojo/public/tools/bindings/mojom_bindings_generator.py", line 245, in _GenerateModule
    generator.GenerateFiles(filtered_args)
  File "C:\Google\chromium\src\mojo\public\tools\bindings\generators\mojom_cpp_generator.py", line 491, in GenerateFiles
    self.WriteWithComment(self._GenerateModuleSource(),
  File "C:\Google\chromium\src\mojo\public\tools\bindings\pylib\mojom\generate\template_expander.py", line 37, in GeneratorInternal
    return ApplyTemplate(args[0], path_to_template, parameters, **kwargs)
  File "C:\Google\chromium\src\mojo\public\tools\bindings\pylib\mojom\generate\template_expander.py", line 31, in ApplyTemplate
    return template.render(params)
  File "C:\Google\chromium\src\mojo\public\tools\bindings\pylib\mojom\generate\..\..\..\..\..\..\..\third_party\jinja2\asyncsupport.py", line 76, in render
    return original_render(self, *args, **kwargs)
  File "C:\Google\chromium\src\mojo\public\tools\bindings\pylib\mojom\generate\..\..\..\..\..\..\..\third_party\jinja2\environment.py", line 1008, in render
    return self.environment.handle_exception(exc_info, True)
  File "C:\Google\chromium\src\mojo\public\tools\bindings\pylib\mojom\generate\..\..\..\..\..\..\..\third_party\jinja2\environment.py", line 780, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Google\chromium\src\mojo\public\tools\bindings\pylib\mojom\generate\..\..\..\..\..\..\..\third_party\jinja2\_compat.py", line 37, in reraise
    raise value.with_traceback(tb)
  File "gen\mojo\public\tools\bindings\cpp_templates.zip\tmpl_443233f41d2b3f893c5bf0eb0f069e01da908ebe.py", line 89, in <module>
  File "gen\mojo\public\tools\bindings\cpp_templates.zip\tmpl_c45f6ba3b78f1db0b9ac3d8f2287ed476074b615.py", line 15, in <module>
  File "C:\Google\chromium\src\mojo\public\tools\bindings\generators\mojom_cpp_generator.py", line 521, in _DefaultValue
    expression = self._ExpressionToText(field.default, kind=field.kind)
  File "C:\Google\chromium\src\mojo\public\tools\bindings\generators\mojom_cpp_generator.py", line 852, in _ExpressionToText
    return self._TranslateConstants(value, kind)
  File "C:\Google\chromium\src\mojo\public\tools\bindings\generators\mojom_cpp_generator.py", line 830, in _TranslateConstants
    return self._GetNameForKind(token, flatten_nested_kind=True)
  File "C:\Google\chromium\src\mojo\public\tools\bindings\generators\mojom_cpp_generator.py", line 530, in _GetNameForKind
    return _NameFormatter(kind, self.variant).FormatForCpp(
  File "C:\Google\chromium\src\mojo\public\tools\bindings\generators\mojom_cpp_generator.py", line 73, in FormatForCpp
    return self.Format(
  File "C:\Google\chromium\src\mojo\public\tools\bindings\generators\mojom_cpp_generator.py", line 68, in Format
    parts.extend(self._GetName(internal, flatten_nested_kind))
  File "C:\Google\chromium\src\mojo\public\tools\bindings\generators\mojom_cpp_generator.py", line 94, in _GetName
    name_parts.append(self._token.name)
  File "C:\Google\chromium\src\mojo\public\tools\bindings\pylib\mojom\generate\module.py", line 273, in name
    return self.field.name
AttributeError: 'EnumField' object has no attribute 'name'

Traceback (most recent call last):
  File "../../mojo/public/tools/bindings/mojom_bindings_generator.py", line 565, in <module>
    sys.exit(main())
  File "../../mojo/public/tools/bindings/mojom_bindings_generator.py", line 560, in main
    return args.func(args, remaining_args)
  File "../../mojo/public/tools/bindings/mojom_bindings_generator.py", line 276, in _Generate
    processor._GenerateModule(
  File "../../mojo/public/tools/bindings/mojom_bindings_generator.py", line 245, in _GenerateModule
    generator.GenerateFiles(filtered_args)
  File "C:\Google\chromium\src\mojo\public\tools\bindings\generators\mojom_cpp_generator.py", line 491, in GenerateFiles
    self.WriteWithComment(self._GenerateModuleSource(),
  File "C:\Google\chromium\src\mojo\public\tools\bindings\pylib\mojom\generate\template_expander.py", line 37, in GeneratorInternal
    return ApplyTemplate(args[0], path_to_template, parameters, **kwargs)
  File "C:\Google\chromium\src\mojo\public\tools\bindings\pylib\mojom\generate\template_expander.py", line 31, in ApplyTemplate
    return template.render(params)
  File "C:\Google\chromium\src\mojo\public\tools\bindings\pylib\mojom\generate\..\..\..\..\..\..\..\third_party\jinja2\asyncsupport.py", line 76, in render
    return original_render(self, *args, **kwargs)
  File "C:\Google\chromium\src\mojo\public\tools\bindings\pylib\mojom\generate\..\..\..\..\..\..\..\third_party\jinja2\environment.py", line 1008, in render
    return self.environment.handle_exception(exc_info, True)
  File "C:\Google\chromium\src\mojo\public\tools\bindings\pylib\mojom\generate\..\..\..\..\..\..\..\third_party\jinja2\environment.py", line 780, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Google\chromium\src\mojo\public\tools\bindings\pylib\mojom\generate\..\..\..\..\..\..\..\third_party\jinja2\_compat.py", line 37, in reraise
    raise value.with_traceback(tb)
  File "gen\mojo\public\tools\bindings\cpp_templates.zip\tmpl_443233f41d2b3f893c5bf0eb0f069e01da908ebe.py", line 95, in <module>
  File "gen\mojo\public\tools\bindings\cpp_templates.zip\tmpl_cdddecaaf43ca3c14ffb4bf4ac7c495e7415ba70.py", line 2, in <module>
  File "C:\Google\chromium\src\mojo\public\tools\bindings\pylib\mojom\generate\..\..\..\..\..\..\..\third_party\jinja2\environment.py", line 430, in getattr
    return getattr(obj, attribute)
jinja2.exceptions.UndefinedError: map object has no element 0

Traceback (most recent call last):
  File "../../mojo/public/tools/bindings/mojom_bindings_generator.py", line 565, in <module>
    sys.exit(main())
  File "../../mojo/public/tools/bindings/mojom_bindings_generator.py", line 560, in main
    return args.func(args, remaining_args)
  File "../../mojo/public/tools/bindings/mojom_bindings_generator.py", line 276, in _Generate
    processor._GenerateModule(
  File "../../mojo/public/tools/bindings/mojom_bindings_generator.py", line 221, in _GenerateModule
    AddComputedData(module)
  File "C:\Google\chromium\src\mojo\public\tools\bindings\pylib\mojom\generate\generator.py", line 187, in AddComputedData
    _AddStructComputedData(True, struct)
  File "C:\Google\chromium\src\mojo\public\tools\bindings\pylib\mojom\generate\generator.py", line 126, in _AddStructComputedData
    struct.packed = pack.PackedStruct(struct)
  File "C:\Google\chromium\src\mojo\public\tools\bindings\pylib\mojom\generate\pack.py", line 141, in __init__
    src_fields.append(PackedField(field, index, ordinal))
  File "C:\Google\chromium\src\mojo\public\tools\bindings\pylib\mojom\generate\pack.py", line 86, in __init__
    self.size = self.GetSizeForKind(field.kind)
  File "C:\Google\chromium\src\mojo\public\tools\bindings\pylib\mojom\generate\pack.py", line 63, in GetSizeForKind
    raise Exception("Undefined type: %s. Did you forget to import the file "
Exception: Undefined type: x:EnforcementLevel. Did you forget to import the file containing the definition?

Bug: 941669
Change-Id: Ia19f39d4134fb063c4407eb20a4f909f693e6f27
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2081812
Auto-Submit: Raul Tambre <raul@tambre.ee>
Commit-Queue: Ken Rockot <rockot@google.com>
Reviewed-by: default avatarKen Rockot <rockot@google.com>
Cr-Commit-Position: refs/heads/master@{#746174}
parent 31499c74
...@@ -278,9 +278,11 @@ def _Struct(module, parsed_struct): ...@@ -278,9 +278,11 @@ def _Struct(module, parsed_struct):
struct.constants = [] struct.constants = []
struct.fields_data = [] struct.fields_data = []
else: else:
struct.enums = map( struct.enums = list(
lambda enum: _Enum(module, enum, struct), map(
_ElemsOfType(parsed_struct.body, ast.Enum, parsed_struct.mojom_name)) lambda enum: _Enum(module, enum, struct),
_ElemsOfType(parsed_struct.body, ast.Enum,
parsed_struct.mojom_name)))
struct.constants = map( struct.constants = map(
lambda constant: _Constant(module, constant, struct), lambda constant: _Constant(module, constant, struct),
_ElemsOfType(parsed_struct.body, ast.Const, parsed_struct.mojom_name)) _ElemsOfType(parsed_struct.body, ast.Const, parsed_struct.mojom_name))
...@@ -428,9 +430,9 @@ def _Interface(module, parsed_iface): ...@@ -428,9 +430,9 @@ def _Interface(module, parsed_iface):
interface.mojom_name = parsed_iface.mojom_name interface.mojom_name = parsed_iface.mojom_name
interface.spec = 'x:' + module.mojom_namespace + '.' + interface.mojom_name interface.spec = 'x:' + module.mojom_namespace + '.' + interface.mojom_name
module.kinds[interface.spec] = interface module.kinds[interface.spec] = interface
interface.enums = map( interface.enums = list(
lambda enum: _Enum(module, enum, interface), map(lambda enum: _Enum(module, enum, interface),
_ElemsOfType(parsed_iface.body, ast.Enum, parsed_iface.mojom_name)) _ElemsOfType(parsed_iface.body, ast.Enum, parsed_iface.mojom_name)))
interface.constants = map( interface.constants = map(
lambda constant: _Constant(module, constant, interface), lambda constant: _Constant(module, constant, interface),
_ElemsOfType(parsed_iface.body, ast.Const, parsed_iface.mojom_name)) _ElemsOfType(parsed_iface.body, ast.Const, parsed_iface.mojom_name))
...@@ -527,9 +529,9 @@ def _Enum(module, parsed_enum, parent_kind): ...@@ -527,9 +529,9 @@ def _Enum(module, parsed_enum, parent_kind):
enum.parent_kind = parent_kind enum.parent_kind = parent_kind
enum.attributes = _AttributeListToDict(parsed_enum.attribute_list) enum.attributes = _AttributeListToDict(parsed_enum.attribute_list)
if not enum.native_only: if not enum.native_only:
enum.fields = map( enum.fields = list(
lambda field: _EnumField(module, enum, field, parent_kind), map(lambda field: _EnumField(module, enum, field, parent_kind),
parsed_enum.enum_value_list) parsed_enum.enum_value_list))
enum.min_value, enum.max_value = _ResolveNumericEnumValues(enum.fields) enum.min_value, enum.max_value = _ResolveNumericEnumValues(enum.fields)
module.kinds[enum.spec] = enum module.kinds[enum.spec] = enum
...@@ -682,8 +684,8 @@ def _Module(tree, path, imports): ...@@ -682,8 +684,8 @@ def _Module(tree, path, imports):
for enum in struct.enums: for enum in struct.enums:
all_defined_kinds[enum.spec] = enum all_defined_kinds[enum.spec] = enum
for union in module.unions: for union in module.unions:
union.fields = map(lambda field: union.fields = list(
_UnionField(module, field, union), union.fields_data) map(lambda field: _UnionField(module, field, union), union.fields_data))
del union.fields_data del union.fields_data
all_defined_kinds[union.spec] = union all_defined_kinds[union.spec] = union
for interface in module.interfaces: for interface in module.interfaces:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment