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

Unified Diff: Source/bindings/scripts/idl_definitions.py

Issue 924443002: IDL: Support iterable<>/maplike<>/setlike<> referencing typedefs (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: fix the problem Created 5 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
« no previous file with comments | « Source/bindings/scripts/code_generator_v8.py ('k') | Source/bindings/tests/idls/core/TestObject.idl » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/bindings/scripts/idl_definitions.py
diff --git a/Source/bindings/scripts/idl_definitions.py b/Source/bindings/scripts/idl_definitions.py
index 6b003f7cc351db041ea89e1f030bb535d2efbf7b..693e1114beb288fa294f4ab36ca6aef9f97bf26b 100644
--- a/Source/bindings/scripts/idl_definitions.py
+++ b/Source/bindings/scripts/idl_definitions.py
@@ -54,7 +54,7 @@ IdlDefinitions
IdlException < IdlInterface
(same contents as IdlInterface)
-TypedObject :: Object with a type.
+TypedObject :: Object with one or more attributes that is a type.
IdlArgument is 'picklable', as it is stored in interfaces_info.
@@ -79,7 +79,7 @@ class TypedObject(object):
by the TypedefResolver before passing data to the code generator.
"""
__metaclass__ = abc.ABCMeta
- idl_type = None
+ idl_type_attributes = ('idl_type',)
################################################################################
@@ -215,7 +215,7 @@ class IdlDictionary(object):
member.accept(visitor)
-class IdlDictionaryMember(object):
+class IdlDictionaryMember(TypedObject):
def __init__(self, idl_name, node):
self.default_value = None
self.extended_attributes = {}
@@ -326,6 +326,12 @@ class IdlInterface(object):
custom_constructor.accept(visitor)
for operation in self.operations:
operation.accept(visitor)
+ if self.iterable:
bashi 2015/02/12 12:36:19 Question: Could a dictionary have a member which i
Jens Widell 2015/02/12 12:47:51 You can't have dictionary Foo { iterable<DO
bashi 2015/02/12 13:08:19 Oops, I just overlooked collapsed lines (L219-L318
+ self.iterable.accept(visitor)
+ elif self.maplike:
+ self.maplike.accept(visitor)
+ elif self.setlike:
+ self.setlike.accept(visitor)
def process_stringifier(self):
"""Add the stringifier's attribute or named operation child, if it has
@@ -506,6 +512,7 @@ class IdlOperation(TypedObject):
self.specials = []
self.is_constructor = False
self.idl_name = idl_name
+ self.idl_type = None
self.is_static = False
if not node:
@@ -522,7 +529,6 @@ class IdlOperation(TypedObject):
if special_keyword in property_dictionary:
self.specials.append(special_keyword.lower())
- self.idl_type = None
children = node.GetChildren()
for child in children:
child_class = child.GetClass()
@@ -664,7 +670,7 @@ class IdlStringifier(object):
# Iterable, Maplike, Setlike
################################################################################
-class IdlIterableOrMaplikeOrSetlike(object):
+class IdlIterableOrMaplikeOrSetlike(TypedObject):
def __init__(self, idl_name, node):
self.extended_attributes = {}
self.type_children = []
@@ -680,6 +686,8 @@ class IdlIterableOrMaplikeOrSetlike(object):
class IdlIterable(IdlIterableOrMaplikeOrSetlike):
+ idl_type_attributes = ('key_type', 'value_type')
+
def __init__(self, idl_name, node):
super(IdlIterable, self).__init__(idl_name, node)
@@ -693,8 +701,13 @@ class IdlIterable(IdlIterableOrMaplikeOrSetlike):
raise ValueError('Unexpected number of type children: %d' % len(self.type_children))
del self.type_children
+ def accept(self, visitor):
+ visitor.visit_iterable(self)
+
class IdlMaplike(IdlIterableOrMaplikeOrSetlike):
+ idl_type_attributes = ('key_type', 'value_type')
+
def __init__(self, idl_name, node):
super(IdlMaplike, self).__init__(idl_name, node)
@@ -707,8 +720,13 @@ class IdlMaplike(IdlIterableOrMaplikeOrSetlike):
raise ValueError('Unexpected number of children: %d' % len(self.type_children))
del self.type_children
+ def accept(self, visitor):
+ visitor.visit_maplike(self)
+
class IdlSetlike(IdlIterableOrMaplikeOrSetlike):
+ idl_type_attributes = ('value_type',)
+
def __init__(self, idl_name, node):
super(IdlSetlike, self).__init__(idl_name, node)
@@ -720,6 +738,9 @@ class IdlSetlike(IdlIterableOrMaplikeOrSetlike):
raise ValueError('Unexpected number of children: %d' % len(self.type_children))
del self.type_children
+ def accept(self, visitor):
+ visitor.visit_setlike(self)
+
################################################################################
# Implement statements
@@ -964,26 +985,38 @@ class Visitor(object):
def visit_definitions(self, definitions):
pass
- def visit_callback_function(self, callback_function):
+ def visit_typed_object(self, typed_object):
pass
+ def visit_callback_function(self, callback_function):
+ self.visit_typed_object(callback_function)
+
def visit_dictionary(self, dictionary):
pass
def visit_dictionary_member(self, member):
- pass
+ self.visit_typed_object(member)
def visit_interface(self, interface):
pass
def visit_attribute(self, attribute):
- pass
+ self.visit_typed_object(attribute)
def visit_constant(self, constant):
- pass
+ self.visit_typed_object(constant)
def visit_operation(self, operation):
- pass
+ self.visit_typed_object(operation)
def visit_argument(self, argument):
- pass
+ self.visit_typed_object(argument)
+
+ def visit_iterable(self, iterable):
+ self.visit_typed_object(iterable)
+
+ def visit_maplike(self, maplike):
+ self.visit_typed_object(maplike)
+
+ def visit_setlike(self, setlike):
+ self.visit_typed_object(setlike)
« no previous file with comments | « Source/bindings/scripts/code_generator_v8.py ('k') | Source/bindings/tests/idls/core/TestObject.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698