Commit df3121fd authored by Yuki Shiino's avatar Yuki Shiino Committed by Commit Bot

IDL compiler: Record is_partial/is_mixin in CodeGeneratorInfo

The bindings generator needs to know whether a member is defined
in a partial and/or mixin IDL fragment in order to make a Blink
API call.  Thus, records such information in CodeGeneratorInfo.

Bug: 839389
Change-Id: I997e518c842e93d392846bf63480a9b8e0f7e1ab
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1942894
Commit-Queue: Yuki Shiino <yukishiino@chromium.org>
Reviewed-by: default avatarHitoshi Yoshida <peria@chromium.org>
Cr-Commit-Position: refs/heads/master@{#720422}
parent 187194e9
......@@ -5,6 +5,8 @@
# The list of attributes that CodeGeneratorInfo supports. CodeGeneratorInfo's
# attributes are auto-generated from this list because they're boilerplated.
_CODE_GENERATOR_INFO_ATTRIBUTES = (
'defined_in_mixin',
'defined_in_partial',
'property_implemented_as',
'receiver_implemented_as',
)
......
......@@ -77,6 +77,7 @@ class IdlCompiler(object):
self._did_run = True
# Merge partial definitions.
self._record_defined_in_partial_and_mixin()
self._propagate_extattrs_per_idl_fragment()
self._merge_partial_interface_likes()
self._merge_partial_dictionaries()
......@@ -106,6 +107,25 @@ class IdlCompiler(object):
return Database(self._db)
def _record_defined_in_partial_and_mixin(self):
old_irs = self._ir_map.irs_of_kinds(
IRMap.IR.Kind.DICTIONARY, IRMap.IR.Kind.INTERFACE,
IRMap.IR.Kind.INTERFACE_MIXIN, IRMap.IR.Kind.NAMESPACE,
IRMap.IR.Kind.PARTIAL_DICTIONARY, IRMap.IR.Kind.PARTIAL_INTERFACE,
IRMap.IR.Kind.PARTIAL_INTERFACE_MIXIN,
IRMap.IR.Kind.PARTIAL_NAMESPACE)
self._ir_map.move_to_new_phase()
for old_ir in old_irs:
new_ir = make_copy(old_ir)
self._ir_map.add(new_ir)
for member in new_ir.iter_all_members():
member.code_generator_info.set_defined_in_partial(
hasattr(new_ir, 'is_partial') and new_ir.is_partial)
member.code_generator_info.set_defined_in_mixin(
hasattr(new_ir, 'is_mixin') and new_ir.is_mixin)
def _propagate_extattrs_per_idl_fragment(self):
def propagate_extattr(extattr_key_and_attr_name,
bag=None,
......
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