def register_backend_select_methods(declarations, template_path, file_manager): backend_select_method_definitions = [] backend_select_function_registrations = [] for decl in declarations: for option in decl["options"]: if needs_backend_select(option): name = option['name'] op_name_with_overload_name = option['name'] if option.get('overload_name', '') != '': name = "{0}_{1}".format(name, option['overload_name']) op_name_with_overload_name = "{0}.{1}".format( op_name_with_overload_name, option['overload_name']) if option['use_c10_dispatcher'] == 'full': func_reg = FUNCTION_REGISTRATION.substitute( schema_string=option['schema_string'], op_name_with_overload_name=op_name_with_overload_name, function_name=name) else: assert option[ 'use_c10_dispatcher'] == 'with_codegenerated_unboxing_wrapper' func_reg = UNBOXEDONLY_FUNCTION_REGISTRATION.substitute( schema_string=option['schema_string'], op_name_with_overload_name=op_name_with_overload_name, function_name=name) dispatch_key_init = gen_dispatch_key_init( '_dk', option['formals_list']) # See NOTE[UnboxedOnly] in function_wrapper.py if option['use_c10_dispatcher'] == 'full': function_cpp_signature = option[ 'schema_order_cpp_signature'] function_actuals = option['schema_order_actuals'] else: assert option[ 'use_c10_dispatcher'] == 'with_codegenerated_unboxing_wrapper' function_cpp_signature = option['cpp_signature'] function_actuals = option['actuals'] method_def = FUNCTION_DEFINITION.substitute( function_name=name, schema_string=option['schema_string'], method_formals=option['formals_with_defaults'], name=option['name'], overload_name=option['overload_name'], dispatch_key_init=dispatch_key_init, function_cpp_signature=function_cpp_signature, function_actuals=function_actuals) backend_select_function_registrations.append(func_reg) backend_select_method_definitions.append(method_def) env = {} env['backend_select_method_definitions'] = backend_select_method_definitions env['backend_select_function_registrations'] = backend_select_function_registrations env['generated_comment'] = GENERATED_COMMENT.substitute( filename=template_path) file_manager.write('BackendSelectRegister.cpp', template_path, env)
def register_backend_select_methods(declarations, template_path, file_manager): backend_select_method_definitions = [] backend_select_function_registrations = [] for decl in declarations: for option in decl["options"]: if needs_backend_select(option): assert option['use_c10_dispatcher'] in [ 'unboxed_only', 'with_codegenerated_unboxing_wrapper' ] name = option['name'] if option.get('overload_name', '') != '': name = "{0}_{1}".format(name, option['overload_name']) func_reg = FUNCTION_REGISTRATION.substitute( schema_string=option['schema_string'], function_name=name) dispatch_key_init = gen_dispatch_key_init( '_dk', option['formals_list']) method_def = FUNCTION_DEFINITION.substitute( function_name=name, schema_string=option['schema_string'], method_formals=option['formals_with_defaults'], name=option['name'], overload_name=option['overload_name'], dispatch_key_init=dispatch_key_init, formals_types=option['formals_types_with_return'], type_method_actuals=option['type_method_actuals']) backend_select_function_registrations.append(func_reg) backend_select_method_definitions.append(method_def) env = {} env['backend_select_method_definitions'] = backend_select_method_definitions env['backend_select_function_registrations'] = backend_select_function_registrations env['generated_comment'] = GENERATED_COMMENT.substitute( filename=template_path) file_manager.write('BackendSelectRegister.cpp', template_path, env)