Index: Source/bindings/scripts/idl_definitions.py |
diff --git a/Source/bindings/scripts/idl_definitions.py b/Source/bindings/scripts/idl_definitions.py |
index faf04fb46100aa50015b856d825fff6b9f754c95..2f3dd17e099650da2ea3a630243be865f4b62c81 100644 |
--- a/Source/bindings/scripts/idl_definitions.py |
+++ b/Source/bindings/scripts/idl_definitions.py |
@@ -48,6 +48,9 @@ IdlDefinitions |
IdlOperation < TypedObject |
IdlArgument < TypedObject |
IdlStringifier |
+ IdlIterable < IdlIterableOrMaplikeOrSetlike |
+ IdlMaplike < IdlIterableOrMaplikeOrSetlike |
+ IdlSetlike < IdlIterableOrMaplikeOrSetlike |
IdlException < IdlInterface |
(same contents as IdlInterface) |
@@ -652,49 +655,61 @@ class IdlStringifier(object): |
# Iterable, Maplike, Setlike |
################################################################################ |
-class IdlIterable(object): |
+class IdlIterableOrMaplikeOrSetlike(object): |
def __init__(self, idl_name, node): |
- children = node.GetChildren() |
+ self.extended_attributes = {} |
+ self.type_children = [] |
+ |
+ for child in node.GetChildren(): |
+ child_class = child.GetClass() |
+ if child_class == 'ExtAttributes': |
+ self.extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, child) |
+ elif child_class == 'Type': |
+ self.type_children.append(child) |
+ else: |
+ raise ValueError('Unrecognized node class: %s' % child_class) |
- # FIXME: Support extended attributes. |
- if len(children) == 1: |
+class IdlIterable(IdlIterableOrMaplikeOrSetlike): |
+ def __init__(self, idl_name, node): |
+ super(IdlIterable, self).__init__(idl_name, node) |
+ |
+ if len(self.type_children) == 1: |
self.key_type = None |
- self.value_type = type_node_to_type(children[0]) |
- elif len(children) == 2: |
- self.key_type = type_node_to_type(children[0]) |
- self.value_type = type_node_to_type(children[1]) |
+ self.value_type = type_node_to_type(self.type_children[0]) |
+ elif len(self.type_children) == 2: |
+ self.key_type = type_node_to_type(self.type_children[0]) |
+ self.value_type = type_node_to_type(self.type_children[1]) |
else: |
- raise ValueError('Unexpected number of children: %d' % len(children)) |
+ raise ValueError('Unexpected number of type children: %d' % len(self.type_children)) |
+ del self.type_children |
-class IdlMaplike(object): |
+class IdlMaplike(IdlIterableOrMaplikeOrSetlike): |
def __init__(self, idl_name, node): |
- self.is_read_only = bool(node.GetProperty('READONLY')) |
+ super(IdlMaplike, self).__init__(idl_name, node) |
- children = node.GetChildren() |
- |
- # FIXME: Support extended attributes. |
+ self.is_read_only = bool(node.GetProperty('READONLY')) |
- if len(children) == 2: |
- self.key_type = type_node_to_type(children[0]) |
- self.value_type = type_node_to_type(children[1]) |
+ if len(self.type_children) == 2: |
+ self.key_type = type_node_to_type(self.type_children[0]) |
+ self.value_type = type_node_to_type(self.type_children[1]) |
else: |
- raise ValueError('Unexpected number of children: %d' % len(children)) |
+ raise ValueError('Unexpected number of children: %d' % len(self.type_children)) |
+ del self.type_children |
-class IdlSetlike(object): |
+class IdlSetlike(IdlIterableOrMaplikeOrSetlike): |
def __init__(self, idl_name, node): |
- self.is_read_only = bool(node.GetProperty('READONLY')) |
- |
- children = node.GetChildren() |
+ super(IdlSetlike, self).__init__(idl_name, node) |
- # FIXME: Support extended attributes. |
+ self.is_read_only = bool(node.GetProperty('READONLY')) |
- if len(children) == 1: |
- self.value_type = type_node_to_type(children[0]) |
+ if len(self.type_children) == 1: |
+ self.value_type = type_node_to_type(self.type_children[0]) |
else: |
- raise ValueError('Unexpected number of children: %d' % len(children)) |
+ raise ValueError('Unexpected number of children: %d' % len(self.type_children)) |
+ del self.type_children |
################################################################################ |