def generate_callback_interface(callback_interface): includes.clear() includes.update(CALLBACK_INTERFACE_CPP_INCLUDES) name = callback_interface.name methods = [generate_method(operation) for operation in callback_interface.operations] template_contents = { 'cpp_class': name, 'dart_class': dart_types.dart_type(callback_interface.name), 'header_includes': set(CALLBACK_INTERFACE_H_INCLUDES), 'methods': methods, } return template_contents
def generate_callback_interface(callback_interface): includes.clear() includes.update(CALLBACK_INTERFACE_CPP_INCLUDES) name = callback_interface.name methods = [ generate_method(operation) for operation in callback_interface.operations ] template_contents = { 'cpp_class': name, 'dart_class': dart_types.dart_type(callback_interface.name), 'header_includes': set(CALLBACK_INTERFACE_H_INCLUDES), 'methods': methods, } return template_contents
def interface_context(interface): context = v8_interface.interface_context(interface) includes.clear() includes.update(INTERFACE_CPP_INCLUDES) header_includes = set(INTERFACE_H_INCLUDES) parent_interface = interface.parent if parent_interface: header_includes.update(dart_types.includes_for_interface(parent_interface)) extended_attributes = interface.extended_attributes if inherits_interface(interface.name, 'EventTarget'): includes.update(['bindings/dart_event_listener.h']) # [SetWrapperReferenceTo] set_wrapper_reference_to_list = [{ 'name': argument.name, # FIXME: properly should be: # 'cpp_type': argument.idl_type.cpp_type_args(used_as_rvalue_type=True), # (if type is non-wrapper type like NodeFilter, normally RefPtr) # Raw pointers faster though, and NodeFilter hacky anyway. 'cpp_type': argument.idl_type.implemented_as + '*', 'idl_type': argument.idl_type, } for argument in extended_attributes.get('SetWrapperReferenceTo', [])] for set_wrapper_reference_to in set_wrapper_reference_to_list: set_wrapper_reference_to['idl_type'].add_includes_for_type() context.update({ 'cpp_class': DartUtilities.cpp_name(interface), 'header_includes': header_includes, 'set_wrapper_reference_to_list': set_wrapper_reference_to_list, 'dart_class': dart_types.dart_type(interface.name), }) # Constructors constructors = [constructor_context(interface, constructor) for constructor in interface.constructors # FIXME: shouldn't put named constructors with constructors # (currently needed for Perl compatibility) # Handle named constructors separately if constructor.name == 'Constructor'] if len(constructors) > 1: context.update({'constructor_overloads': overloads_context(constructors)}) # [CustomConstructor] custom_constructors = [custom_constructor_context(interface, constructor) for constructor in interface.custom_constructors] # [NamedConstructor] named_constructor = generate_named_constructor(interface) generate_method_native_entries(interface, constructors, 'Constructor') generate_method_native_entries(interface, custom_constructors, 'Constructor') if named_constructor: generate_method_native_entries(interface, [named_constructor], 'Constructor') event_constructor = None if context['has_event_constructor']: event_constructor = { 'native_entries': [ DartUtilities.generate_native_entry( interface.name, None, 'Constructor', False, 2)], } if (context['constructors'] or custom_constructors or context['has_event_constructor'] or named_constructor): includes.add('core/frame/LocalDOMWindow.h') context.update({ 'constructors': constructors, 'custom_constructors': custom_constructors, 'event_constructor': event_constructor, 'has_custom_constructor': bool(custom_constructors), 'interface_length': v8_interface.interface_length(interface, constructors + custom_constructors), 'is_constructor_call_with_document': DartUtilities.has_extended_attribute_value( interface, 'ConstructorCallWith', 'Document'), # [ConstructorCallWith=Document] 'is_constructor_call_with_execution_context': DartUtilities.has_extended_attribute_value( interface, 'ConstructorCallWith', 'ExecutionContext'), # [ConstructorCallWith=ExeuctionContext] 'named_constructor': named_constructor, }) # Attributes attributes = [dart_attributes.attribute_context(interface, attribute) for attribute in interface.attributes if not v8_attributes.is_constructor_attribute(attribute)] context.update({ 'attributes': attributes, 'has_constructor_attributes': any(attribute['constructor_type'] for attribute in attributes), 'has_replaceable_attributes': any(attribute['is_replaceable'] for attribute in attributes), }) # Methods methods = [dart_methods.method_context(interface, method) for method in interface.operations # Skip anonymous special operations (methods name empty). if (method.name and # detect unnamed getters from v8_interface. method.name != 'anonymousNamedGetter')] compute_method_overloads_context(methods) for method in methods: method['do_generate_method_configuration'] = ( # For overloaded methods, only generate one accessor ('overload_index' not in method or method['overload_index'] == 1)) for method in methods: assert 'overloads' not in method, 'Dart does not support overloads, %s in %s' % (method['name'], interface.name) generate_method_native_entries(interface, methods, 'Method') context.update({ 'has_method_configuration': any(method['do_generate_method_configuration'] for method in methods), 'methods': methods, }) context.update({ 'indexed_property_getter': indexed_property_getter(interface), 'indexed_property_setter': indexed_property_setter(interface), 'indexed_property_deleter': v8_interface.indexed_property_deleter(interface), 'is_override_builtins': 'OverrideBuiltins' in extended_attributes, 'named_property_getter': named_property_getter(interface), 'named_property_setter': named_property_setter(interface), 'named_property_deleter': v8_interface.named_property_deleter(interface), }) generate_native_entries_for_specials(interface, context) native_entries = generate_interface_native_entries(context) context.update({ 'native_entries': native_entries, }) return context
def interface_context(interface): context = v8_interface.interface_context(interface) includes.clear() includes.update(INTERFACE_CPP_INCLUDES) header_includes = set(INTERFACE_H_INCLUDES) parent_interface = interface.parent if parent_interface: header_includes.update( dart_types.includes_for_interface(parent_interface)) extended_attributes = interface.extended_attributes if inherits_interface(interface.name, 'EventTarget'): includes.update(['bindings/dart_event_listener.h']) # [SetWrapperReferenceTo] set_wrapper_reference_to_list = [ { 'name': argument.name, # FIXME: properly should be: # 'cpp_type': argument.idl_type.cpp_type_args(used_as_rvalue_type=True), # (if type is non-wrapper type like NodeFilter, normally RefPtr) # Raw pointers faster though, and NodeFilter hacky anyway. 'cpp_type': argument.idl_type.implemented_as + '*', 'idl_type': argument.idl_type, } for argument in extended_attributes.get('SetWrapperReferenceTo', []) ] for set_wrapper_reference_to in set_wrapper_reference_to_list: set_wrapper_reference_to['idl_type'].add_includes_for_type() context.update({ 'cpp_class': DartUtilities.cpp_name(interface), 'header_includes': header_includes, 'set_wrapper_reference_to_list': set_wrapper_reference_to_list, 'dart_class': dart_types.dart_type(interface.name), }) # Constructors constructors = [ constructor_context(interface, constructor) for constructor in interface.constructors # FIXME: shouldn't put named constructors with constructors # (currently needed for Perl compatibility) # Handle named constructors separately if constructor.name == 'Constructor' ] if len(constructors) > 1: context.update( {'constructor_overloads': overloads_context(constructors)}) # [CustomConstructor] custom_constructors = [ custom_constructor_context(interface, constructor) for constructor in interface.custom_constructors ] # [NamedConstructor] named_constructor = generate_named_constructor(interface) generate_method_native_entries(interface, constructors, 'Constructor') generate_method_native_entries(interface, custom_constructors, 'Constructor') if named_constructor: generate_method_native_entries(interface, [named_constructor], 'Constructor') event_constructor = None if context['has_event_constructor']: event_constructor = { 'native_entries': [ DartUtilities.generate_native_entry(interface.name, None, 'Constructor', False, 2) ], } context.update({ 'constructors': constructors, 'custom_constructors': custom_constructors, 'event_constructor': event_constructor, 'has_custom_constructor': bool(custom_constructors), 'interface_length': v8_interface.interface_length(interface, constructors + custom_constructors), 'is_constructor_call_with_execution_context': DartUtilities.has_extended_attribute_value( interface, 'ConstructorCallWith', 'ExecutionContext'), # [ConstructorCallWith=ExeuctionContext] 'named_constructor': named_constructor, }) # Attributes attributes = [ dart_attributes.attribute_context(interface, attribute) for attribute in interface.attributes if not v8_attributes.is_constructor_attribute(attribute) ] context.update({ 'attributes': attributes, 'has_constructor_attributes': any(attribute['constructor_type'] for attribute in attributes), 'has_replaceable_attributes': any(attribute['is_replaceable'] for attribute in attributes), }) # Methods methods = [ dart_methods.method_context(interface, method) for method in interface.operations # Skip anonymous special operations (methods name empty). if (method.name and # detect unnamed getters from v8_interface. method.name != 'anonymousNamedGetter') ] compute_method_overloads_context(methods) for method in methods: method['do_generate_method_configuration'] = ( # For overloaded methods, only generate one accessor ('overload_index' not in method or method['overload_index'] == 1)) for method in methods: assert 'overloads' not in method, 'Dart does not support overloads, %s in %s' % ( method['name'], interface.name) generate_method_native_entries(interface, methods, 'Method') context.update({ 'has_method_configuration': any(method['do_generate_method_configuration'] for method in methods), 'methods': methods, }) context.update({ 'indexed_property_getter': indexed_property_getter(interface), 'indexed_property_setter': indexed_property_setter(interface), 'indexed_property_deleter': v8_interface.indexed_property_deleter(interface), 'is_override_builtins': 'OverrideBuiltins' in extended_attributes, 'named_property_getter': named_property_getter(interface), 'named_property_setter': named_property_setter(interface), 'named_property_deleter': v8_interface.named_property_deleter(interface), }) generate_native_entries_for_specials(interface, context) native_entries = generate_interface_native_entries(context) context.update({ 'native_entries': native_entries, }) return context
def interface_context(interface): context = v8_interface.interface_context(interface) includes.clear() includes.update(INTERFACE_CPP_INCLUDES) header_includes = set(INTERFACE_H_INCLUDES) parent_interface = interface.parent if parent_interface: header_includes.update(dart_types.includes_for_interface(parent_interface)) extended_attributes = interface.extended_attributes if inherits_interface(interface.name, "EventTarget"): includes.update(["bindings/dart_event_listener.h"]) # [SetWrapperReferenceTo] set_wrapper_reference_to_list = [ { "name": argument.name, # FIXME: properly should be: # 'cpp_type': argument.idl_type.cpp_type_args(used_as_rvalue_type=True), # (if type is non-wrapper type like NodeFilter, normally RefPtr) # Raw pointers faster though, and NodeFilter hacky anyway. "cpp_type": argument.idl_type.implemented_as + "*", "idl_type": argument.idl_type, } for argument in extended_attributes.get("SetWrapperReferenceTo", []) ] for set_wrapper_reference_to in set_wrapper_reference_to_list: set_wrapper_reference_to["idl_type"].add_includes_for_type() context.update( { "cpp_class": DartUtilities.cpp_name(interface), "header_includes": header_includes, "set_wrapper_reference_to_list": set_wrapper_reference_to_list, "dart_class": dart_types.dart_type(interface.name), } ) # Constructors constructors = [ constructor_context(interface, constructor) for constructor in interface.constructors # FIXME: shouldn't put named constructors with constructors # (currently needed for Perl compatibility) # Handle named constructors separately if constructor.name == "Constructor" ] if len(constructors) > 1: context.update({"constructor_overloads": overloads_context(constructors)}) # [CustomConstructor] custom_constructors = [ custom_constructor_context(interface, constructor) for constructor in interface.custom_constructors ] # [NamedConstructor] named_constructor = generate_named_constructor(interface) generate_method_native_entries(interface, constructors, "Constructor") generate_method_native_entries(interface, custom_constructors, "Constructor") if named_constructor: generate_method_native_entries(interface, [named_constructor], "Constructor") event_constructor = None if context["has_event_constructor"]: event_constructor = { "native_entries": [DartUtilities.generate_native_entry(interface.name, None, "Constructor", False, 2)] } context.update( { "constructors": constructors, "custom_constructors": custom_constructors, "event_constructor": event_constructor, "has_custom_constructor": bool(custom_constructors), "interface_length": v8_interface.interface_length(interface, constructors + custom_constructors), "is_constructor_call_with_execution_context": DartUtilities.has_extended_attribute_value( interface, "ConstructorCallWith", "ExecutionContext" ), # [ConstructorCallWith=ExeuctionContext] "named_constructor": named_constructor, } ) # Attributes attributes = [ dart_attributes.attribute_context(interface, attribute) for attribute in interface.attributes if not v8_attributes.is_constructor_attribute(attribute) ] context.update( { "attributes": attributes, "has_constructor_attributes": any(attribute["constructor_type"] for attribute in attributes), "has_replaceable_attributes": any(attribute["is_replaceable"] for attribute in attributes), } ) # Methods methods = [ dart_methods.method_context(interface, method) for method in interface.operations # Skip anonymous special operations (methods name empty). if ( method.name and # detect unnamed getters from v8_interface. method.name != "anonymousNamedGetter" ) ] compute_method_overloads_context(methods) for method in methods: method["do_generate_method_configuration"] = ( # For overloaded methods, only generate one accessor "overload_index" not in method or method["overload_index"] == 1 ) for method in methods: assert "overloads" not in method, "Dart does not support overloads, %s in %s" % (method["name"], interface.name) generate_method_native_entries(interface, methods, "Method") context.update( { "has_method_configuration": any(method["do_generate_method_configuration"] for method in methods), "methods": methods, } ) context.update( { "indexed_property_getter": indexed_property_getter(interface), "indexed_property_setter": indexed_property_setter(interface), "indexed_property_deleter": v8_interface.indexed_property_deleter(interface), "is_override_builtins": "OverrideBuiltins" in extended_attributes, "named_property_getter": named_property_getter(interface), "named_property_setter": named_property_setter(interface), "named_property_deleter": v8_interface.named_property_deleter(interface), } ) generate_native_entries_for_specials(interface, context) native_entries = generate_interface_native_entries(context) context.update({"native_entries": native_entries}) return context
def interface_context(interface): context = v8_interface.interface_context(interface) includes.clear() includes.update(INTERFACE_CPP_INCLUDES) header_includes = set(INTERFACE_H_INCLUDES) parent_interface = interface.parent if parent_interface: header_includes.update( dart_types.includes_for_interface(parent_interface)) extended_attributes = interface.extended_attributes is_document = inherits_interface(interface.name, 'Document') if is_document: # FIXME(vsm): We probably need bindings/dart/DartController and # core/frame/LocalFrame.h here. includes.update(['DartDocument.h']) if inherits_interface(interface.name, 'DataTransferItemList'): # FIXME(jacobr): this is a hack. includes.update(['core/html/HTMLCollection.h']) if inherits_interface(interface.name, 'EventTarget'): includes.update(['bindings/core/dart/DartEventListener.h']) # [SetWrapperReferenceTo] set_wrapper_reference_to_list = [ { 'name': argument.name, # FIXME: properly should be: # 'cpp_type': argument.idl_type.cpp_type_args(used_as_rvalue_type=True), # (if type is non-wrapper type like NodeFilter, normally RefPtr) # Raw pointers faster though, and NodeFilter hacky anyway. 'cpp_type': argument.idl_type.implemented_as + '*', 'idl_type': argument.idl_type, 'v8_type': dart_types.v8_type(argument.idl_type.name), } for argument in extended_attributes.get('SetWrapperReferenceTo', []) ] for set_wrapper_reference_to in set_wrapper_reference_to_list: set_wrapper_reference_to['idl_type'].add_includes_for_type() context.update({ 'conditional_string': DartUtilities.conditional_string(interface), # [Conditional] 'cpp_class': DartUtilities.cpp_name(interface), 'header_includes': header_includes, 'is_garbage_collected': context['gc_type'] == 'GarbageCollectedObject', 'is_will_be_garbage_collected': context['gc_type'] == 'WillBeGarbageCollectedObject', 'measure_as': DartUtilities.measure_as(interface), # [MeasureAs] 'pass_cpp_type': dart_types.cpp_template_type( dart_types.cpp_ptr_type('PassRefPtr', 'RawPtr', context['gc_type']), DartUtilities.cpp_name(interface)), 'runtime_enabled_function': DartUtilities.runtime_enabled_function_name( interface), # [RuntimeEnabled] 'set_wrapper_reference_to_list': set_wrapper_reference_to_list, 'dart_class': dart_types.dart_type(interface.name), 'v8_class': DartUtilities.v8_class_name(interface), }) # Constructors constructors = [ constructor_context(interface, constructor) for constructor in interface.constructors # FIXME: shouldn't put named constructors with constructors # (currently needed for Perl compatibility) # Handle named constructors separately if constructor.name == 'Constructor' ] if len(constructors) > 1: context.update( {'constructor_overloads': overloads_context(constructors)}) # [CustomConstructor] custom_constructors = [ custom_constructor_context(interface, constructor) for constructor in interface.custom_constructors ] # [NamedConstructor] named_constructor = generate_named_constructor(interface) generate_method_native_entries(interface, constructors, 'Constructor') generate_method_native_entries(interface, custom_constructors, 'Constructor') if named_constructor: generate_method_native_entries(interface, [named_constructor], 'Constructor') event_constructor = None if context['has_event_constructor']: event_constructor = { 'native_entries': [ DartUtilities.generate_native_entry(interface.name, None, 'Constructor', False, 2) ], } if (context['constructors'] or custom_constructors or context['has_event_constructor'] or named_constructor): includes.add('core/frame/LocalDOMWindow.h') context.update({ 'constructors': constructors, 'custom_constructors': custom_constructors, 'event_constructor': event_constructor, 'has_custom_constructor': bool(custom_constructors), 'interface_length': v8_interface.interface_length(interface, constructors + custom_constructors), 'is_constructor_call_with_document': DartUtilities.has_extended_attribute_value( interface, 'ConstructorCallWith', 'Document'), # [ConstructorCallWith=Document] 'is_constructor_call_with_execution_context': DartUtilities.has_extended_attribute_value( interface, 'ConstructorCallWith', 'ExecutionContext'), # [ConstructorCallWith=ExeuctionContext] 'named_constructor': named_constructor, }) # Attributes attributes = [ dart_attributes.attribute_context(interface, attribute) for attribute in interface.attributes # Skip attributes in the IGNORE_MEMBERS list or if an # extended attribute is in the IGNORE_EXTENDED_ATTRIBUTES. if (not _suppress_attribute(interface.name, attribute.name) and not v8_attributes.is_constructor_attribute(attribute) and not _suppress_extended_attributes(attribute.extended_attributes) and not ('DartSuppress' in attribute.extended_attributes and attribute.extended_attributes.get('DartSuppress') == None)) ] context.update({ 'attributes': attributes, 'has_accessors': any(attribute['is_expose_js_accessors'] for attribute in attributes), 'has_attribute_configuration': any(not (attribute['is_expose_js_accessors'] or attribute['is_static'] or attribute['runtime_enabled_function'] or attribute['per_context_enabled_function']) for attribute in attributes), 'has_constructor_attributes': any(attribute['constructor_type'] for attribute in attributes), 'has_per_context_enabled_attributes': any(attribute['per_context_enabled_function'] for attribute in attributes), 'has_replaceable_attributes': any(attribute['is_replaceable'] for attribute in attributes), }) # Methods methods = [ dart_methods.method_context(interface, method) for method in interface.operations # Skip anonymous special operations (methods name empty). # Skip methods in our IGNORE_MEMBERS list. # Skip methods w/ extended attributes in IGNORE_EXTENDED_ATTRIBUTES list. if (method.name and # detect unnamed getters from v8_interface. method.name != 'anonymousNamedGetter' and # TODO(terry): Eventual eliminate the IGNORE_MEMBERS in favor of DartSupress. not _suppress_method(interface.name, method.name) and not _suppress_extended_attributes(method.extended_attributes) and not 'DartSuppress' in method.extended_attributes) ] compute_method_overloads_context(methods) for method in methods: method['do_generate_method_configuration'] = ( method['do_not_check_signature'] and not method['per_context_enabled_function'] and # For overloaded methods, only generate one accessor ('overload_index' not in method or method['overload_index'] == 1)) generate_method_native_entries(interface, methods, 'Method') context.update({ 'has_origin_safe_method_setter': any(method['is_check_security_for_frame'] and not method['is_read_only'] for method in methods), 'has_method_configuration': any(method['do_generate_method_configuration'] for method in methods), 'has_per_context_enabled_methods': any(method['per_context_enabled_function'] for method in methods), 'methods': methods, }) context.update({ 'indexed_property_getter': indexed_property_getter(interface), 'indexed_property_setter': indexed_property_setter(interface), 'indexed_property_deleter': v8_interface.indexed_property_deleter(interface), 'is_override_builtins': 'OverrideBuiltins' in extended_attributes, 'named_property_getter': named_property_getter(interface), 'named_property_setter': named_property_setter(interface), 'named_property_deleter': v8_interface.named_property_deleter(interface), }) generate_native_entries_for_specials(interface, context) native_entries = generate_interface_native_entries(context) context.update({ 'native_entries': native_entries, }) return context