Index: third_party/WebKit/Source/bindings/scripts/idl_definitions.py |
diff --git a/third_party/WebKit/Source/bindings/scripts/idl_definitions.py b/third_party/WebKit/Source/bindings/scripts/idl_definitions.py |
index 52937edac87fb2d5e9aac1532163f7c411428e55..4b00b56fb466e2f272dd79bb8905f85b74abcbfd 100644 |
--- a/third_party/WebKit/Source/bindings/scripts/idl_definitions.py |
+++ b/third_party/WebKit/Source/bindings/scripts/idl_definitions.py |
@@ -26,6 +26,8 @@ |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
+# pylint: disable=relative-import |
+ |
"""Blink IDL Intermediate Representation (IR) classes. |
Classes are primarily constructors, which build an IdlDefinitions object |
@@ -64,7 +66,13 @@ Design doc: http://www.chromium.org/developers/design-documents/idl-compiler |
import abc |
-from idl_types import IdlType, IdlUnionType, IdlArrayType, IdlSequenceType, IdlFrozenArrayType, IdlNullableType |
+from idl_types import IdlArrayType |
+from idl_types import IdlFrozenArrayType |
+from idl_types import IdlNullableType |
+from idl_types import IdlRecordType |
+from idl_types import IdlSequenceType |
+from idl_types import IdlType |
+from idl_types import IdlUnionType |
SPECIAL_KEYWORD_LIST = ['LEGACYCALLER', 'GETTER', 'SETTER', 'DELETER'] |
@@ -1027,9 +1035,24 @@ def type_node_inner_to_type(node): |
return union_type_node_to_idl_union_type(node) |
elif node_class == 'Promise': |
return IdlType('Promise') |
+ elif node_class == 'Record': |
+ return record_node_to_type(node) |
raise ValueError('Unrecognized node class: %s' % node_class) |
+def record_node_to_type(node): |
+ children = node.GetChildren() |
+ if len(children) != 2: |
+ raise ValueError('record<K,V> node expects exactly 2 children, got %d' % (len(children))) |
+ key_child = children[0] |
+ value_child = children[1] |
+ if key_child.GetClass() != 'StringType': |
+ raise ValueError('Keys in record<K,V> nodes must be string types.') |
+ if value_child.GetClass() != 'Type': |
+ raise ValueError('Unrecognized node class for record<K,V> value: %s' % value_child.GetClass()) |
+ return IdlRecordType(IdlType(key_child.GetName()), type_node_to_type(value_child)) |
+ |
+ |
def sequence_node_to_type(node): |
children = node.GetChildren() |
class_name = node.GetClass() |