Commit 4a923266 authored by Yuki Shiino's avatar Yuki Shiino Committed by Commit Bot

IDL compiler: Support extended attributes

Exposed(A B, C D) is supported, but Constructors are not.
Constructors will be supported separately.

Bug: 839389
Change-Id: Ibc000c0c454478e006daa02a7246deae52da3f25
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1752263Reviewed-by: default avatarHitoshi Yoshida <peria@chromium.org>
Commit-Queue: Yuki Shiino <yukishiino@chromium.org>
Cr-Commit-Position: refs/heads/master@{#686438}
parent 0c7ba77c
...@@ -15,6 +15,7 @@ from .constant import Constant ...@@ -15,6 +15,7 @@ from .constant import Constant
from .dictionary import Dictionary from .dictionary import Dictionary
from .dictionary import DictionaryMember from .dictionary import DictionaryMember
from .enumeration import Enumeration from .enumeration import Enumeration
from .extended_attribute import ExtendedAttribute
from .extended_attribute import ExtendedAttributes from .extended_attribute import ExtendedAttributes
from .idl_type import IdlTypeFactory from .idl_type import IdlTypeFactory
from .includes import Includes from .includes import Includes
...@@ -331,8 +332,42 @@ class _IRBuilder(object): ...@@ -331,8 +332,42 @@ class _IRBuilder(object):
return DefaultValue() return DefaultValue()
def _build_extended_attributes(self, node): def _build_extended_attributes(self, node):
def build_extended_attribute(node):
key = node.GetName()
values = node.GetProperty('VALUE', default=None)
arguments = None
# Drop constructors as they do not fit in ExtendedAttribute which
# doesn't support IdlType.
if key in ('Constructor', 'CustomConstructor', 'NamedConstructor'):
return None
child_nodes = node.GetChildren()
if child_nodes:
assert len(child_nodes) == 1
assert child_nodes[0].GetClass() == 'Arguments'
arguments = map(build_extattr_argument,
child_nodes[0].GetChildren())
return ExtendedAttribute(
key=key, values=values, arguments=arguments)
def build_extattr_argument(node):
assert node.GetClass() == 'Argument'
child_nodes = node.GetChildren()
assert len(child_nodes) == 1
assert child_nodes[0].GetClass() == 'Type'
type_node = child_nodes[0]
type_children = type_node.GetChildren()
assert len(type_children) == 1
return (type_children[0].GetName(), node.GetName())
assert node.GetClass() == 'ExtAttributes' assert node.GetClass() == 'ExtAttributes'
return ExtendedAttributes() return ExtendedAttributes(
filter(None, map(build_extended_attribute, node.GetChildren())))
def _build_inheritance(self, node): def _build_inheritance(self, node):
assert node.GetClass() == 'Inherit' assert node.GetClass() == 'Inherit'
......
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