def dictionary_impl_context(dictionary, interfaces_info): def remove_duplicate_members(members): # When [ImplementedAs] is used, cpp_name can conflict. For example, # dictionary D { long foo; [ImplementedAs=foo, DeprecateAs=Foo] long oldFoo; }; # This function removes such duplications, checking they have the same type. members_dict = {} for member in members: cpp_name = member['cpp_name'] duplicated_member = members_dict.get(cpp_name) if duplicated_member and duplicated_member != member: raise Exception('Member name conflict: %s' % cpp_name) members_dict[cpp_name] = member return sorted(members_dict.values(), key=lambda member: member['cpp_name']) includes.clear() header_includes = set(['platform/heap/Handle.h']) members = [member_impl_context(member, interfaces_info, header_includes) for member in dictionary.members] members = remove_duplicate_members(members) context = { 'header_includes': header_includes, 'cpp_class': v8_utilities.cpp_name(dictionary), 'members': members, } if dictionary.parent: context['parent_cpp_class'] = v8_utilities.cpp_name_from_interfaces_info( dictionary.parent, interfaces_info) parent_interface_info = interfaces_info.get(dictionary.parent) if parent_interface_info: context['header_includes'].add( parent_interface_info['include_path']) return context
def dictionary_context(dictionary, interfaces_info): includes.clear() includes.update(DICTIONARY_CPP_INCLUDES) members = [member_context(dictionary, member) for member in sorted(dictionary.members, key=operator.attrgetter('name'))] for member in members: if member['runtime_enabled_function']: includes.add('platform/RuntimeEnabledFeatures.h') break cpp_class = v8_utilities.cpp_name(dictionary) context = { 'cpp_class': cpp_class, 'header_includes': set(DICTIONARY_H_INCLUDES), 'members': members, 'required_member_names': sorted([member.name for member in dictionary.members if member.is_required]), 'use_permissive_dictionary_conversion': 'PermissiveDictionaryConversion' in dictionary.extended_attributes, 'v8_class': v8_types.v8_type(cpp_class), 'v8_original_class': v8_types.v8_type(dictionary.name), } if dictionary.parent: IdlType(dictionary.parent).add_includes_for_type() parent_cpp_class = v8_utilities.cpp_name_from_interfaces_info( dictionary.parent, interfaces_info) context.update({ 'parent_cpp_class': parent_cpp_class, 'parent_v8_class': v8_types.v8_type(parent_cpp_class), }) return context
def dictionary_context(dictionary, interfaces_info): includes.clear() includes.update(DICTIONARY_CPP_INCLUDES) cpp_class = v8_utilities.cpp_name(dictionary) context = { 'cpp_class': cpp_class, 'header_includes': set(DICTIONARY_H_INCLUDES), 'members': [ member_context(dictionary, member) for member in sorted(dictionary.members, key=operator.attrgetter('name')) ], 'use_permissive_dictionary_conversion': 'PermissiveDictionaryConversion' in dictionary.extended_attributes, 'v8_class': v8_types.v8_type(cpp_class), 'v8_original_class': v8_types.v8_type(dictionary.name), } if dictionary.parent: IdlType(dictionary.parent).add_includes_for_type() parent_cpp_class = v8_utilities.cpp_name_from_interfaces_info( dictionary.parent, interfaces_info) context.update({ 'parent_cpp_class': parent_cpp_class, 'parent_v8_class': v8_types.v8_type(parent_cpp_class), }) return context
def dictionary_context(dictionary, interfaces_info): includes.clear() includes.update(DICTIONARY_CPP_INCLUDES) if 'RuntimeEnabled' in dictionary.extended_attributes: raise Exception('Dictionary cannot be RuntimeEnabled: %s' % dictionary.name) members = [ member_context(dictionary, member) for member in sorted(dictionary.members, key=operator.attrgetter('name')) ] for member in members: if member['runtime_enabled_feature_name']: includes.add('platform/runtime_enabled_features.h') break has_origin_trial_members = False for member in members: if member['origin_trial_feature_name']: has_origin_trial_members = True includes.add('core/origin_trials/origin_trials.h') break cpp_class = v8_utilities.cpp_name(dictionary) context = { 'cpp_class': cpp_class, 'has_origin_trial_members': has_origin_trial_members, 'header_includes': set(DICTIONARY_H_INCLUDES), 'members': members, 'required_member_names': sorted([ member.name for member in dictionary.members if member.is_required ]), 'use_permissive_dictionary_conversion': 'PermissiveDictionaryConversion' in dictionary.extended_attributes, 'v8_class': v8_types.v8_type(cpp_class), 'v8_original_class': v8_types.v8_type(dictionary.name), } if dictionary.parent: IdlType(dictionary.parent).add_includes_for_type() parent_cpp_class = v8_utilities.cpp_name_from_interfaces_info( dictionary.parent, interfaces_info) context.update({ 'parent_cpp_class': parent_cpp_class, 'parent_v8_class': v8_types.v8_type(parent_cpp_class), }) return context
def dictionary_context(dictionary, interfaces_info): includes.clear() includes.update(DICTIONARY_CPP_INCLUDES) cpp_class = v8_utilities.cpp_name(dictionary) context = { "cpp_class": cpp_class, "header_includes": set(DICTIONARY_H_INCLUDES), "members": [ member_context(dictionary, member) for member in sorted(dictionary.members, key=operator.attrgetter("name")) ], "use_permissive_dictionary_conversion": "PermissiveDictionaryConversion" in dictionary.extended_attributes, "v8_class": v8_types.v8_type(cpp_class), "v8_original_class": v8_types.v8_type(dictionary.name), } if dictionary.parent: IdlType(dictionary.parent).add_includes_for_type() parent_cpp_class = v8_utilities.cpp_name_from_interfaces_info(dictionary.parent, interfaces_info) context.update({"parent_cpp_class": parent_cpp_class, "parent_v8_class": v8_types.v8_type(parent_cpp_class)}) return context
def dictionary_context(dictionary, interfaces_info): includes.clear() includes.update(DICTIONARY_CPP_INCLUDES) cpp_class = v8_utilities.cpp_name(dictionary) context = { 'cpp_class': cpp_class, 'header_includes': set(DICTIONARY_H_INCLUDES), 'members': [member_context(dictionary, member) for member in sorted(dictionary.members, key=operator.attrgetter('name'))], 'use_permissive_dictionary_conversion': 'PermissiveDictionaryConversion' in dictionary.extended_attributes, 'v8_class': v8_types.v8_type(cpp_class), 'v8_original_class': v8_types.v8_type(dictionary.name), } if dictionary.parent: IdlType(dictionary.parent).add_includes_for_type() parent_cpp_class = v8_utilities.cpp_name_from_interfaces_info( dictionary.parent, interfaces_info) context.update({ 'parent_cpp_class': parent_cpp_class, 'parent_v8_class': v8_types.v8_type(parent_cpp_class), }) return context