Commit 310f96a1 authored by bashi's avatar bashi Committed by Commit bot

bindings: Drop |idl_name| from IdlDefinitions

|idl_name| comes from filename but it's a bad idea to control code
generation by using filename. Fortunately we no longer use it, so let's
remove it.

BUG=658098

Review-Url: https://codereview.chromium.org/2446923002
Cr-Commit-Position: refs/heads/master@{#427281}
parent 7fffd899
...@@ -88,14 +88,13 @@ class TypedObject(object): ...@@ -88,14 +88,13 @@ class TypedObject(object):
################################################################################ ################################################################################
class IdlDefinitions(object): class IdlDefinitions(object):
def __init__(self, idl_name, node): def __init__(self, node):
"""Args: node: AST root node, class == 'File'""" """Args: node: AST root node, class == 'File'"""
self.callback_functions = {} self.callback_functions = {}
self.dictionaries = {} self.dictionaries = {}
self.enumerations = {} self.enumerations = {}
self.implements = [] self.implements = []
self.interfaces = {} self.interfaces = {}
self.idl_name = idl_name
self.typedefs = {} self.typedefs = {}
node_class = node.GetClass() node_class = node.GetClass()
...@@ -106,25 +105,25 @@ class IdlDefinitions(object): ...@@ -106,25 +105,25 @@ class IdlDefinitions(object):
for child in children: for child in children:
child_class = child.GetClass() child_class = child.GetClass()
if child_class == 'Interface': if child_class == 'Interface':
interface = IdlInterface(idl_name, child) interface = IdlInterface(child)
self.interfaces[interface.name] = interface self.interfaces[interface.name] = interface
elif child_class == 'Exception': elif child_class == 'Exception':
exception = IdlException(idl_name, child) exception = IdlException(child)
# For simplicity, treat exceptions as interfaces # For simplicity, treat exceptions as interfaces
self.interfaces[exception.name] = exception self.interfaces[exception.name] = exception
elif child_class == 'Typedef': elif child_class == 'Typedef':
typedef = IdlTypedef(child) typedef = IdlTypedef(child)
self.typedefs[typedef.name] = typedef self.typedefs[typedef.name] = typedef
elif child_class == 'Enum': elif child_class == 'Enum':
enumeration = IdlEnum(idl_name, child) enumeration = IdlEnum(child)
self.enumerations[enumeration.name] = enumeration self.enumerations[enumeration.name] = enumeration
elif child_class == 'Callback': elif child_class == 'Callback':
callback_function = IdlCallbackFunction(idl_name, child) callback_function = IdlCallbackFunction(child)
self.callback_functions[callback_function.name] = callback_function self.callback_functions[callback_function.name] = callback_function
elif child_class == 'Implements': elif child_class == 'Implements':
self.implements.append(IdlImplement(child)) self.implements.append(IdlImplement(child))
elif child_class == 'Dictionary': elif child_class == 'Dictionary':
dictionary = IdlDictionary(idl_name, child) dictionary = IdlDictionary(child)
self.dictionaries[dictionary.name] = dictionary self.dictionaries[dictionary.name] = dictionary
else: else:
raise ValueError('Unrecognized node class: %s' % child_class) raise ValueError('Unrecognized node class: %s' % child_class)
...@@ -170,7 +169,7 @@ class IdlDefinitions(object): ...@@ -170,7 +169,7 @@ class IdlDefinitions(object):
################################################################################ ################################################################################
class IdlCallbackFunction(TypedObject): class IdlCallbackFunction(TypedObject):
def __init__(self, idl_name, node): def __init__(self, node):
children = node.GetChildren() children = node.GetChildren()
num_children = len(children) num_children = len(children)
if num_children < 2 or num_children > 3: if num_children < 2 or num_children > 3:
...@@ -180,17 +179,16 @@ class IdlCallbackFunction(TypedObject): ...@@ -180,17 +179,16 @@ class IdlCallbackFunction(TypedObject):
if num_children == 3: if num_children == 3:
ext_attributes_node = children[2] ext_attributes_node = children[2]
self.extended_attributes = ( self.extended_attributes = (
ext_attributes_node_to_extended_attributes(idl_name, ext_attributes_node)) ext_attributes_node_to_extended_attributes(ext_attributes_node))
else: else:
self.extended_attributes = {} self.extended_attributes = {}
arguments_node_class = arguments_node.GetClass() arguments_node_class = arguments_node.GetClass()
if arguments_node_class != 'Arguments': if arguments_node_class != 'Arguments':
raise ValueError('Expected Arguments node, got %s' % arguments_node_class) raise ValueError('Expected Arguments node, got %s' % arguments_node_class)
self.idl_name = idl_name
self.name = node.GetName() self.name = node.GetName()
self.idl_type = type_node_to_type(type_node) self.idl_type = type_node_to_type(type_node)
self.arguments = arguments_node_to_arguments(idl_name, arguments_node) self.arguments = arguments_node_to_arguments(arguments_node)
def accept(self, visitor): def accept(self, visitor):
visitor.visit_callback_function(self) visitor.visit_callback_function(self)
...@@ -203,10 +201,9 @@ class IdlCallbackFunction(TypedObject): ...@@ -203,10 +201,9 @@ class IdlCallbackFunction(TypedObject):
################################################################################ ################################################################################
class IdlDictionary(object): class IdlDictionary(object):
def __init__(self, idl_name, node): def __init__(self, node):
self.extended_attributes = {} self.extended_attributes = {}
self.is_partial = bool(node.GetProperty('Partial')) self.is_partial = bool(node.GetProperty('Partial'))
self.idl_name = idl_name
self.name = node.GetName() self.name = node.GetName()
self.members = [] self.members = []
self.parent = None self.parent = None
...@@ -215,10 +212,10 @@ class IdlDictionary(object): ...@@ -215,10 +212,10 @@ class IdlDictionary(object):
if child_class == 'Inherit': if child_class == 'Inherit':
self.parent = child.GetName() self.parent = child.GetName()
elif child_class == 'Key': elif child_class == 'Key':
self.members.append(IdlDictionaryMember(idl_name, child)) self.members.append(IdlDictionaryMember(child))
elif child_class == 'ExtAttributes': elif child_class == 'ExtAttributes':
self.extended_attributes = ( self.extended_attributes = (
ext_attributes_node_to_extended_attributes(idl_name, child)) ext_attributes_node_to_extended_attributes(child))
else: else:
raise ValueError('Unrecognized node class: %s' % child_class) raise ValueError('Unrecognized node class: %s' % child_class)
...@@ -229,11 +226,10 @@ class IdlDictionary(object): ...@@ -229,11 +226,10 @@ class IdlDictionary(object):
class IdlDictionaryMember(TypedObject): class IdlDictionaryMember(TypedObject):
def __init__(self, idl_name, node): def __init__(self, node):
self.default_value = None self.default_value = None
self.extended_attributes = {} self.extended_attributes = {}
self.idl_type = None self.idl_type = None
self.idl_name = idl_name
self.is_required = bool(node.GetProperty('REQUIRED')) self.is_required = bool(node.GetProperty('REQUIRED'))
self.name = node.GetName() self.name = node.GetName()
for child in node.GetChildren(): for child in node.GetChildren():
...@@ -244,7 +240,7 @@ class IdlDictionaryMember(TypedObject): ...@@ -244,7 +240,7 @@ class IdlDictionaryMember(TypedObject):
self.default_value = default_node_to_idl_literal(child) self.default_value = default_node_to_idl_literal(child)
elif child_class == 'ExtAttributes': elif child_class == 'ExtAttributes':
self.extended_attributes = ( self.extended_attributes = (
ext_attributes_node_to_extended_attributes(idl_name, child)) ext_attributes_node_to_extended_attributes(child))
else: else:
raise ValueError('Unrecognized node class: %s' % child_class) raise ValueError('Unrecognized node class: %s' % child_class)
...@@ -257,9 +253,7 @@ class IdlDictionaryMember(TypedObject): ...@@ -257,9 +253,7 @@ class IdlDictionaryMember(TypedObject):
################################################################################ ################################################################################
class IdlEnum(object): class IdlEnum(object):
# FIXME: remove, just treat enums as a dictionary def __init__(self, node):
def __init__(self, idl_name, node):
self.idl_name = idl_name
self.name = node.GetName() self.name = node.GetName()
self.values = [] self.values = []
for child in node.GetChildren(): for child in node.GetChildren():
...@@ -289,7 +283,7 @@ class IdlTypedef(object): ...@@ -289,7 +283,7 @@ class IdlTypedef(object):
################################################################################ ################################################################################
class IdlInterface(object): class IdlInterface(object):
def __init__(self, idl_name, node=None): def __init__(self, node=None):
self.attributes = [] self.attributes = []
self.constants = [] self.constants = []
self.constructors = [] self.constructors = []
...@@ -312,7 +306,6 @@ class IdlInterface(object): ...@@ -312,7 +306,6 @@ class IdlInterface(object):
self.is_exception = False self.is_exception = False
# FIXME: uppercase 'Partial' => 'PARTIAL' in base IDL parser # FIXME: uppercase 'Partial' => 'PARTIAL' in base IDL parser
self.is_partial = bool(node.GetProperty('Partial')) self.is_partial = bool(node.GetProperty('Partial'))
self.idl_name = idl_name
self.name = node.GetName() self.name = node.GetName()
self.idl_type = IdlType(self.name) self.idl_type = IdlType(self.name)
...@@ -323,37 +316,37 @@ class IdlInterface(object): ...@@ -323,37 +316,37 @@ class IdlInterface(object):
for child in children: for child in children:
child_class = child.GetClass() child_class = child.GetClass()
if child_class == 'Attribute': if child_class == 'Attribute':
attr = IdlAttribute(idl_name, child) attr = IdlAttribute(child)
if attr.idl_type.is_integer_type and attr.name == 'length': if attr.idl_type.is_integer_type and attr.name == 'length':
has_integer_typed_length = True has_integer_typed_length = True
self.attributes.append(attr) self.attributes.append(attr)
elif child_class == 'Const': elif child_class == 'Const':
self.constants.append(IdlConstant(idl_name, child)) self.constants.append(IdlConstant(child))
elif child_class == 'ExtAttributes': elif child_class == 'ExtAttributes':
extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, child) extended_attributes = ext_attributes_node_to_extended_attributes(child)
self.constructors, self.custom_constructors = ( self.constructors, self.custom_constructors = (
extended_attributes_to_constructors(idl_name, extended_attributes)) extended_attributes_to_constructors(extended_attributes))
clear_constructor_attributes(extended_attributes) clear_constructor_attributes(extended_attributes)
self.extended_attributes = extended_attributes self.extended_attributes = extended_attributes
elif child_class == 'Operation': elif child_class == 'Operation':
op = IdlOperation(idl_name, child) op = IdlOperation(child)
if 'getter' in op.specials and str(op.arguments[0].idl_type) == 'unsigned long': if 'getter' in op.specials and str(op.arguments[0].idl_type) == 'unsigned long':
has_indexed_property_getter = True has_indexed_property_getter = True
self.operations.append(op) self.operations.append(op)
elif child_class == 'Inherit': elif child_class == 'Inherit':
self.parent = child.GetName() self.parent = child.GetName()
elif child_class == 'Serializer': elif child_class == 'Serializer':
self.serializer = IdlSerializer(idl_name, child) self.serializer = IdlSerializer(child)
self.process_serializer() self.process_serializer()
elif child_class == 'Stringifier': elif child_class == 'Stringifier':
self.stringifier = IdlStringifier(idl_name, child) self.stringifier = IdlStringifier(child)
self.process_stringifier() self.process_stringifier()
elif child_class == 'Iterable': elif child_class == 'Iterable':
self.iterable = IdlIterable(idl_name, child) self.iterable = IdlIterable(child)
elif child_class == 'Maplike': elif child_class == 'Maplike':
self.maplike = IdlMaplike(idl_name, child) self.maplike = IdlMaplike(child)
elif child_class == 'Setlike': elif child_class == 'Setlike':
self.setlike = IdlSetlike(idl_name, child) self.setlike = IdlSetlike(child)
else: else:
raise ValueError('Unrecognized node class: %s' % child_class) raise ValueError('Unrecognized node class: %s' % child_class)
...@@ -414,13 +407,12 @@ class IdlException(IdlInterface): ...@@ -414,13 +407,12 @@ class IdlException(IdlInterface):
# are not expected. Thus it is easier to implement exceptions as a # are not expected. Thus it is easier to implement exceptions as a
# restricted subclass of interfaces. # restricted subclass of interfaces.
# http://www.w3.org/TR/WebIDL/#idl-exceptions # http://www.w3.org/TR/WebIDL/#idl-exceptions
def __init__(self, idl_name, node): def __init__(self, node):
# Exceptions are similar to Interfaces, but simpler # Exceptions are similar to Interfaces, but simpler
IdlInterface.__init__(self, idl_name) IdlInterface.__init__(self)
self.is_callback = False self.is_callback = False
self.is_exception = True self.is_exception = True
self.is_partial = False self.is_partial = False
self.idl_name = idl_name
self.name = node.GetName() self.name = node.GetName()
self.idl_type = IdlType(self.name) self.idl_type = IdlType(self.name)
...@@ -428,18 +420,18 @@ class IdlException(IdlInterface): ...@@ -428,18 +420,18 @@ class IdlException(IdlInterface):
for child in children: for child in children:
child_class = child.GetClass() child_class = child.GetClass()
if child_class == 'Attribute': if child_class == 'Attribute':
attribute = IdlAttribute(idl_name, child) attribute = IdlAttribute(child)
self.attributes.append(attribute) self.attributes.append(attribute)
elif child_class == 'Const': elif child_class == 'Const':
self.constants.append(IdlConstant(idl_name, child)) self.constants.append(IdlConstant(child))
elif child_class == 'ExtAttributes': elif child_class == 'ExtAttributes':
extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, child) extended_attributes = ext_attributes_node_to_extended_attributes(child)
self.constructors, self.custom_constructors = ( self.constructors, self.custom_constructors = (
extended_attributes_to_constructors(idl_name, extended_attributes)) extended_attributes_to_constructors(extended_attributes))
clear_constructor_attributes(extended_attributes) clear_constructor_attributes(extended_attributes)
self.extended_attributes = extended_attributes self.extended_attributes = extended_attributes
elif child_class == 'ExceptionOperation': elif child_class == 'ExceptionOperation':
self.operations.append(IdlOperation.from_exception_operation_node(idl_name, child)) self.operations.append(IdlOperation.from_exception_operation_node(child))
else: else:
raise ValueError('Unrecognized node class: %s' % child_class) raise ValueError('Unrecognized node class: %s' % child_class)
...@@ -449,10 +441,9 @@ class IdlException(IdlInterface): ...@@ -449,10 +441,9 @@ class IdlException(IdlInterface):
################################################################################ ################################################################################
class IdlAttribute(TypedObject): class IdlAttribute(TypedObject):
def __init__(self, idl_name, node): def __init__(self, node):
self.is_read_only = bool(node.GetProperty('READONLY')) self.is_read_only = bool(node.GetProperty('READONLY'))
self.is_static = bool(node.GetProperty('STATIC')) self.is_static = bool(node.GetProperty('STATIC'))
self.idl_name = idl_name
self.name = node.GetName() self.name = node.GetName()
# Defaults, overridden below # Defaults, overridden below
self.idl_type = None self.idl_type = None
...@@ -464,7 +455,7 @@ class IdlAttribute(TypedObject): ...@@ -464,7 +455,7 @@ class IdlAttribute(TypedObject):
if child_class == 'Type': if child_class == 'Type':
self.idl_type = type_node_to_type(child) self.idl_type = type_node_to_type(child)
elif child_class == 'ExtAttributes': elif child_class == 'ExtAttributes':
self.extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, child) self.extended_attributes = ext_attributes_node_to_extended_attributes(child)
else: else:
raise ValueError('Unrecognized node class: %s' % child_class) raise ValueError('Unrecognized node class: %s' % child_class)
...@@ -477,7 +468,7 @@ class IdlAttribute(TypedObject): ...@@ -477,7 +468,7 @@ class IdlAttribute(TypedObject):
################################################################################ ################################################################################
class IdlConstant(TypedObject): class IdlConstant(TypedObject):
def __init__(self, idl_name, node): def __init__(self, node):
children = node.GetChildren() children = node.GetChildren()
num_children = len(children) num_children = len(children)
if num_children < 2 or num_children > 3: if num_children < 2 or num_children > 3:
...@@ -488,7 +479,6 @@ class IdlConstant(TypedObject): ...@@ -488,7 +479,6 @@ class IdlConstant(TypedObject):
if value_node_class != 'Value': if value_node_class != 'Value':
raise ValueError('Expected Value node, got %s' % value_node_class) raise ValueError('Expected Value node, got %s' % value_node_class)
self.idl_name = idl_name
self.name = node.GetName() self.name = node.GetName()
# ConstType is more limited than Type, so subtree is smaller and # ConstType is more limited than Type, so subtree is smaller and
# we don't use the full type_node_to_type function. # we don't use the full type_node_to_type function.
...@@ -503,7 +493,7 @@ class IdlConstant(TypedObject): ...@@ -503,7 +493,7 @@ class IdlConstant(TypedObject):
if num_children == 3: if num_children == 3:
ext_attributes_node = children[2] ext_attributes_node = children[2]
self.extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, ext_attributes_node) self.extended_attributes = ext_attributes_node_to_extended_attributes(ext_attributes_node)
else: else:
self.extended_attributes = {} self.extended_attributes = {}
...@@ -569,12 +559,11 @@ def default_node_to_idl_literal(node): ...@@ -569,12 +559,11 @@ def default_node_to_idl_literal(node):
################################################################################ ################################################################################
class IdlOperation(TypedObject): class IdlOperation(TypedObject):
def __init__(self, idl_name, node=None): def __init__(self, node=None):
self.arguments = [] self.arguments = []
self.extended_attributes = {} self.extended_attributes = {}
self.specials = [] self.specials = []
self.is_constructor = False self.is_constructor = False
self.idl_name = idl_name
self.idl_type = None self.idl_type = None
self.is_static = False self.is_static = False
...@@ -596,21 +585,21 @@ class IdlOperation(TypedObject): ...@@ -596,21 +585,21 @@ class IdlOperation(TypedObject):
for child in children: for child in children:
child_class = child.GetClass() child_class = child.GetClass()
if child_class == 'Arguments': if child_class == 'Arguments':
self.arguments = arguments_node_to_arguments(idl_name, child) self.arguments = arguments_node_to_arguments(child)
elif child_class == 'Type': elif child_class == 'Type':
self.idl_type = type_node_to_type(child) self.idl_type = type_node_to_type(child)
elif child_class == 'ExtAttributes': elif child_class == 'ExtAttributes':
self.extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, child) self.extended_attributes = ext_attributes_node_to_extended_attributes(child)
else: else:
raise ValueError('Unrecognized node class: %s' % child_class) raise ValueError('Unrecognized node class: %s' % child_class)
@classmethod @classmethod
def from_exception_operation_node(cls, idl_name, node): def from_exception_operation_node(cls, node):
# Needed to handle one case in DOMException.idl: # Needed to handle one case in DOMException.idl:
# // Override in a Mozilla compatible format # // Override in a Mozilla compatible format
# [NotEnumerable] DOMString toString(); # [NotEnumerable] DOMString toString();
# FIXME: can we remove this? replace with a stringifier? # FIXME: can we remove this? replace with a stringifier?
operation = cls(idl_name) operation = cls()
operation.name = node.GetName() operation.name = node.GetName()
children = node.GetChildren() children = node.GetChildren()
if len(children) < 1 or len(children) > 2: if len(children) < 1 or len(children) > 2:
...@@ -621,15 +610,15 @@ class IdlOperation(TypedObject): ...@@ -621,15 +610,15 @@ class IdlOperation(TypedObject):
if len(children) > 1: if len(children) > 1:
ext_attributes_node = children[1] ext_attributes_node = children[1]
operation.extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, ext_attributes_node) operation.extended_attributes = ext_attributes_node_to_extended_attributes(ext_attributes_node)
return operation return operation
@classmethod @classmethod
def constructor_from_arguments_node(cls, name, idl_name, arguments_node): def constructor_from_arguments_node(cls, name, arguments_node):
constructor = cls(idl_name) constructor = cls()
constructor.name = name constructor.name = name
constructor.arguments = arguments_node_to_arguments(idl_name, arguments_node) constructor.arguments = arguments_node_to_arguments(arguments_node)
constructor.is_constructor = True constructor.is_constructor = True
return constructor return constructor
...@@ -644,12 +633,11 @@ class IdlOperation(TypedObject): ...@@ -644,12 +633,11 @@ class IdlOperation(TypedObject):
################################################################################ ################################################################################
class IdlArgument(TypedObject): class IdlArgument(TypedObject):
def __init__(self, idl_name, node=None): def __init__(self, node=None):
self.extended_attributes = {} self.extended_attributes = {}
self.idl_type = None self.idl_type = None
self.is_optional = False # syntax: (optional T) self.is_optional = False # syntax: (optional T)
self.is_variadic = False # syntax: (T...) self.is_variadic = False # syntax: (T...)
self.idl_name = idl_name
self.default_value = None self.default_value = None
if not node: if not node:
...@@ -664,7 +652,7 @@ class IdlArgument(TypedObject): ...@@ -664,7 +652,7 @@ class IdlArgument(TypedObject):
if child_class == 'Type': if child_class == 'Type':
self.idl_type = type_node_to_type(child) self.idl_type = type_node_to_type(child)
elif child_class == 'ExtAttributes': elif child_class == 'ExtAttributes':
self.extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, child) self.extended_attributes = ext_attributes_node_to_extended_attributes(child)
elif child_class == 'Argument': elif child_class == 'Argument':
child_name = child.GetName() child_name = child.GetName()
if child_name != '...': if child_name != '...':
...@@ -679,15 +667,14 @@ class IdlArgument(TypedObject): ...@@ -679,15 +667,14 @@ class IdlArgument(TypedObject):
visitor.visit_argument(self) visitor.visit_argument(self)
def arguments_node_to_arguments(idl_name, node): def arguments_node_to_arguments(node):
# [Constructor] and [CustomConstructor] without arguments (the bare form) # [Constructor] and [CustomConstructor] without arguments (the bare form)
# have None instead of an arguments node, but have the same meaning as using # have None instead of an arguments node, but have the same meaning as using
# an empty argument list, [Constructor()], so special-case this. # an empty argument list, [Constructor()], so special-case this.
# http://www.w3.org/TR/WebIDL/#Constructor # http://www.w3.org/TR/WebIDL/#Constructor
if node is None: if node is None:
return [] return []
return [IdlArgument(idl_name, argument_node) return [IdlArgument(argument_node) for argument_node in node.GetChildren()]
for argument_node in node.GetChildren()]
################################################################################ ################################################################################
...@@ -695,7 +682,7 @@ def arguments_node_to_arguments(idl_name, node): ...@@ -695,7 +682,7 @@ def arguments_node_to_arguments(idl_name, node):
################################################################################ ################################################################################
class IdlSerializer(object): class IdlSerializer(object):
def __init__(self, idl_name, node): def __init__(self, node):
self.attribute_name = node.GetProperty('ATTRIBUTE') self.attribute_name = node.GetProperty('ATTRIBUTE')
self.attribute_names = None self.attribute_names = None
self.operation = None self.operation = None
...@@ -705,12 +692,11 @@ class IdlSerializer(object): ...@@ -705,12 +692,11 @@ class IdlSerializer(object):
self.is_inherit = False self.is_inherit = False
self.is_list = False self.is_list = False
self.is_map = False self.is_map = False
self.idl_name = idl_name
for child in node.GetChildren(): for child in node.GetChildren():
child_class = child.GetClass() child_class = child.GetClass()
if child_class == 'Operation': if child_class == 'Operation':
self.operation = IdlOperation(idl_name, child) self.operation = IdlOperation(child)
elif child_class == 'List': elif child_class == 'List':
self.is_list = True self.is_list = True
self.is_getter = bool(child.GetProperty('GETTER')) self.is_getter = bool(child.GetProperty('GETTER'))
...@@ -722,7 +708,7 @@ class IdlSerializer(object): ...@@ -722,7 +708,7 @@ class IdlSerializer(object):
self.is_inherit = bool(child.GetProperty('INHERIT')) self.is_inherit = bool(child.GetProperty('INHERIT'))
self.attributes = child.GetProperty('ATTRIBUTES') self.attributes = child.GetProperty('ATTRIBUTES')
elif child_class == 'ExtAttributes': elif child_class == 'ExtAttributes':
self.extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, child) self.extended_attributes = ext_attributes_node_to_extended_attributes(child)
else: else:
raise ValueError('Unrecognized node class: %s' % child_class) raise ValueError('Unrecognized node class: %s' % child_class)
...@@ -732,22 +718,21 @@ class IdlSerializer(object): ...@@ -732,22 +718,21 @@ class IdlSerializer(object):
################################################################################ ################################################################################
class IdlStringifier(object): class IdlStringifier(object):
def __init__(self, idl_name, node): def __init__(self, node):
self.attribute = None self.attribute = None
self.operation = None self.operation = None
self.extended_attributes = {} self.extended_attributes = {}
self.idl_name = idl_name
for child in node.GetChildren(): for child in node.GetChildren():
child_class = child.GetClass() child_class = child.GetClass()
if child_class == 'Attribute': if child_class == 'Attribute':
self.attribute = IdlAttribute(idl_name, child) self.attribute = IdlAttribute(child)
elif child_class == 'Operation': elif child_class == 'Operation':
operation = IdlOperation(idl_name, child) operation = IdlOperation(child)
if operation.name: if operation.name:
self.operation = operation self.operation = operation
elif child_class == 'ExtAttributes': elif child_class == 'ExtAttributes':
self.extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, child) self.extended_attributes = ext_attributes_node_to_extended_attributes(child)
else: else:
raise ValueError('Unrecognized node class: %s' % child_class) raise ValueError('Unrecognized node class: %s' % child_class)
...@@ -763,14 +748,14 @@ class IdlStringifier(object): ...@@ -763,14 +748,14 @@ class IdlStringifier(object):
################################################################################ ################################################################################
class IdlIterableOrMaplikeOrSetlike(TypedObject): class IdlIterableOrMaplikeOrSetlike(TypedObject):
def __init__(self, idl_name, node): def __init__(self, node):
self.extended_attributes = {} self.extended_attributes = {}
self.type_children = [] self.type_children = []
for child in node.GetChildren(): for child in node.GetChildren():
child_class = child.GetClass() child_class = child.GetClass()
if child_class == 'ExtAttributes': if child_class == 'ExtAttributes':
self.extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, child) self.extended_attributes = ext_attributes_node_to_extended_attributes(child)
elif child_class == 'Type': elif child_class == 'Type':
self.type_children.append(child) self.type_children.append(child)
else: else:
...@@ -780,8 +765,8 @@ class IdlIterableOrMaplikeOrSetlike(TypedObject): ...@@ -780,8 +765,8 @@ class IdlIterableOrMaplikeOrSetlike(TypedObject):
class IdlIterable(IdlIterableOrMaplikeOrSetlike): class IdlIterable(IdlIterableOrMaplikeOrSetlike):
idl_type_attributes = ('key_type', 'value_type') idl_type_attributes = ('key_type', 'value_type')
def __init__(self, idl_name, node): def __init__(self, node):
super(IdlIterable, self).__init__(idl_name, node) super(IdlIterable, self).__init__(node)
if len(self.type_children) == 1: if len(self.type_children) == 1:
self.key_type = None self.key_type = None
...@@ -800,8 +785,8 @@ class IdlIterable(IdlIterableOrMaplikeOrSetlike): ...@@ -800,8 +785,8 @@ class IdlIterable(IdlIterableOrMaplikeOrSetlike):
class IdlMaplike(IdlIterableOrMaplikeOrSetlike): class IdlMaplike(IdlIterableOrMaplikeOrSetlike):
idl_type_attributes = ('key_type', 'value_type') idl_type_attributes = ('key_type', 'value_type')
def __init__(self, idl_name, node): def __init__(self, node):
super(IdlMaplike, self).__init__(idl_name, node) super(IdlMaplike, self).__init__(node)
self.is_read_only = bool(node.GetProperty('READONLY')) self.is_read_only = bool(node.GetProperty('READONLY'))
...@@ -819,8 +804,8 @@ class IdlMaplike(IdlIterableOrMaplikeOrSetlike): ...@@ -819,8 +804,8 @@ class IdlMaplike(IdlIterableOrMaplikeOrSetlike):
class IdlSetlike(IdlIterableOrMaplikeOrSetlike): class IdlSetlike(IdlIterableOrMaplikeOrSetlike):
idl_type_attributes = ('value_type',) idl_type_attributes = ('value_type',)
def __init__(self, idl_name, node): def __init__(self, node):
super(IdlSetlike, self).__init__(idl_name, node) super(IdlSetlike, self).__init__(node)
self.is_read_only = bool(node.GetProperty('READONLY')) self.is_read_only = bool(node.GetProperty('READONLY'))
...@@ -862,7 +847,7 @@ class Exposure: ...@@ -862,7 +847,7 @@ class Exposure:
self.runtime_enabled = runtime_enabled self.runtime_enabled = runtime_enabled
def ext_attributes_node_to_extended_attributes(idl_name, node): def ext_attributes_node_to_extended_attributes(node):
""" """
Returns: Returns:
Dictionary of {ExtAttributeName: ExtAttributeValue}. Dictionary of {ExtAttributeName: ExtAttributeValue}.
...@@ -920,7 +905,7 @@ def ext_attributes_node_to_extended_attributes(idl_name, node): ...@@ -920,7 +905,7 @@ def ext_attributes_node_to_extended_attributes(idl_name, node):
raise ValueError('[SetWrapperReferenceTo] supports only one child.') raise ValueError('[SetWrapperReferenceTo] supports only one child.')
if child_class != 'Arguments': if child_class != 'Arguments':
raise ValueError('[SetWrapperReferenceTo] only supports Arguments as child, but has child of class: %s' % child_class) raise ValueError('[SetWrapperReferenceTo] only supports Arguments as child, but has child of class: %s' % child_class)
extended_attributes[name] = IdlArgument(idl_name, children[0]) extended_attributes[name] = IdlArgument(children[0])
elif name == 'Exposed': elif name == 'Exposed':
if child_class and child_class != 'Arguments': if child_class and child_class != 'Arguments':
raise ValueError('[Exposed] only supports Arguments as child, but has child of class: %s' % child_class) raise ValueError('[Exposed] only supports Arguments as child, but has child of class: %s' % child_class)
...@@ -928,7 +913,7 @@ def ext_attributes_node_to_extended_attributes(idl_name, node): ...@@ -928,7 +913,7 @@ def ext_attributes_node_to_extended_attributes(idl_name, node):
if child_class == 'Arguments': if child_class == 'Arguments':
exposures = [Exposure(exposed=str(arg.idl_type), exposures = [Exposure(exposed=str(arg.idl_type),
runtime_enabled=arg.name) runtime_enabled=arg.name)
for arg in arguments_node_to_arguments('*', child)] for arg in arguments_node_to_arguments(child)]
else: else:
value = extended_attribute_node.GetProperty('VALUE') value = extended_attribute_node.GetProperty('VALUE')
if type(value) is str: if type(value) is str:
...@@ -952,7 +937,7 @@ def ext_attributes_node_to_extended_attributes(idl_name, node): ...@@ -952,7 +937,7 @@ def ext_attributes_node_to_extended_attributes(idl_name, node):
return extended_attributes return extended_attributes
def extended_attributes_to_constructors(idl_name, extended_attributes): def extended_attributes_to_constructors(extended_attributes):
"""Returns constructors and custom_constructors (lists of IdlOperations). """Returns constructors and custom_constructors (lists of IdlOperations).
Auxiliary function for IdlInterface.__init__. Auxiliary function for IdlInterface.__init__.
...@@ -960,12 +945,12 @@ def extended_attributes_to_constructors(idl_name, extended_attributes): ...@@ -960,12 +945,12 @@ def extended_attributes_to_constructors(idl_name, extended_attributes):
constructor_list = extended_attributes.get('Constructors', []) constructor_list = extended_attributes.get('Constructors', [])
constructors = [ constructors = [
IdlOperation.constructor_from_arguments_node('Constructor', idl_name, arguments_node) IdlOperation.constructor_from_arguments_node('Constructor', arguments_node)
for arguments_node in constructor_list] for arguments_node in constructor_list]
custom_constructor_list = extended_attributes.get('CustomConstructors', []) custom_constructor_list = extended_attributes.get('CustomConstructors', [])
custom_constructors = [ custom_constructors = [
IdlOperation.constructor_from_arguments_node('CustomConstructor', idl_name, arguments_node) IdlOperation.constructor_from_arguments_node('CustomConstructor', arguments_node)
for arguments_node in custom_constructor_list] for arguments_node in custom_constructor_list]
if 'NamedConstructor' in extended_attributes: if 'NamedConstructor' in extended_attributes:
...@@ -977,7 +962,7 @@ def extended_attributes_to_constructors(idl_name, extended_attributes): ...@@ -977,7 +962,7 @@ def extended_attributes_to_constructors(idl_name, extended_attributes):
if len(children) != 1: if len(children) != 1:
raise ValueError('NamedConstructor node expects 1 child, got %s.' % len(children)) raise ValueError('NamedConstructor node expects 1 child, got %s.' % len(children))
arguments_node = children[0] arguments_node = children[0]
named_constructor = IdlOperation.constructor_from_arguments_node('NamedConstructor', idl_name, arguments_node) named_constructor = IdlOperation.constructor_from_arguments_node('NamedConstructor', arguments_node)
# FIXME: should return named_constructor separately; appended for Perl # FIXME: should return named_constructor separately; appended for Perl
constructors.append(named_constructor) constructors.append(named_constructor)
......
...@@ -111,7 +111,7 @@ class IdlReader(object): ...@@ -111,7 +111,7 @@ class IdlReader(object):
if not ast: if not ast:
raise Exception('Failed to parse %s' % idl_filename) raise Exception('Failed to parse %s' % idl_filename)
idl_file_basename, _ = os.path.splitext(os.path.basename(idl_filename)) idl_file_basename, _ = os.path.splitext(os.path.basename(idl_filename))
definitions = IdlDefinitions(idl_file_basename, ast) definitions = IdlDefinitions(ast)
validate_blink_idl_definitions( validate_blink_idl_definitions(
idl_filename, idl_file_basename, definitions) idl_filename, idl_file_basename, definitions)
......
...@@ -446,7 +446,7 @@ def methods_context(interface): ...@@ -446,7 +446,7 @@ def methods_context(interface):
compute_method_overloads_context(interface, methods) compute_method_overloads_context(interface, methods)
def generated_method(return_type, name, arguments=None, extended_attributes=None, implemented_as=None): def generated_method(return_type, name, arguments=None, extended_attributes=None, implemented_as=None):
operation = IdlOperation(interface.idl_name) operation = IdlOperation()
operation.idl_type = return_type operation.idl_type = return_type
operation.name = name operation.name = name
if arguments: if arguments:
...@@ -459,7 +459,7 @@ def methods_context(interface): ...@@ -459,7 +459,7 @@ def methods_context(interface):
return v8_methods.method_context(interface, operation) return v8_methods.method_context(interface, operation)
def generated_argument(idl_type, name, is_optional=False, extended_attributes=None): def generated_argument(idl_type, name, is_optional=False, extended_attributes=None):
argument = IdlArgument(interface.idl_name) argument = IdlArgument()
argument.idl_type = idl_type argument.idl_type = idl_type
argument.name = name argument.name = name
argument.is_optional = is_optional argument.is_optional = is_optional
......
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