def _generate_conversions_for_command(self, domain, command): lines = [] if command.call_parameters: lines.append("") def in_param_expression(param_name, parameter): _type = parameter.type if isinstance(_type, AliasedType): _type = _type.aliased_type # Fall through to enum or primitive. if isinstance(_type, EnumType): _type = _type.primitive_type # Fall through to primitive. if isinstance(_type, PrimitiveType): if _type.raw_name() in ["array", "any", "object"]: return "&%s" % param_name if not parameter.is_optional else param_name return "*%s" % param_name if parameter.is_optional else param_name return "&%s" % param_name if not parameter.is_optional else param_name for parameter in command.call_parameters: in_param_name = "in_%s" % parameter.parameter_name objc_in_param_name = "o_%s" % in_param_name objc_type = ObjCGenerator.objc_type_for_param(domain, command.command_name, parameter, False) param_expression = in_param_expression(in_param_name, parameter) import_expression = ObjCGenerator.objc_protocol_import_expression_for_parameter( param_expression, domain, command.command_name, parameter ) if not parameter.is_optional: lines.append(" %s = %s;" % (join_type_and_name(objc_type, objc_in_param_name), import_expression)) else: lines.append(" %s;" % join_type_and_name(objc_type, objc_in_param_name)) lines.append(" if (%s)" % in_param_name) lines.append(" %s = %s;" % (objc_in_param_name, import_expression)) if lines: lines.append("") return "\n".join(lines)
def _generate_conversions_for_command(self, domain, command): lines = [] if command.call_parameters: lines.append('') def in_param_expression(param_name, parameter): _type = parameter.type if isinstance(_type, AliasedType): _type = _type.aliased_type # Fall through to enum or primitive. if isinstance(_type, EnumType): _type = _type.primitive_type # Fall through to primitive. if isinstance(_type, PrimitiveType): return '*%s' % param_name if parameter.is_optional else param_name return '%s.copyRef()' % param_name for parameter in command.call_parameters: in_param_name = 'in_%s' % parameter.parameter_name objc_in_param_name = 'o_%s' % in_param_name objc_type = ObjCGenerator.objc_type_for_param(domain, command.command_name, parameter, False) param_expression = in_param_expression(in_param_name, parameter) import_expression = ObjCGenerator.objc_protocol_import_expression_for_parameter(param_expression, domain, command.command_name, parameter) if not parameter.is_optional: lines.append(' %s = %s;' % (join_type_and_name(objc_type, objc_in_param_name), import_expression)) else: lines.append(' %s;' % join_type_and_name(objc_type, objc_in_param_name)) lines.append(' if (%s)' % in_param_name) lines.append(' %s = %s;' % (objc_in_param_name, import_expression)) if lines: lines.append('') return '\n'.join(lines)
def _generate_conversions_for_command(self, domain, command): lines = [] if command.call_parameters: lines.append('') def in_param_expression(param_name, parameter): _type = parameter.type if isinstance(_type, AliasedType): _type = _type.aliased_type if isinstance(_type, EnumType): _type = _type.primitive_type if _type.is_enum(): if parameter.is_optional: param_name = '*' + param_name return 'Protocol::Helpers::getEnumConstantValue(%s)' % param_name if CppGenerator.should_release_argument(_type, parameter.is_optional): return param_name + '.releaseNonNull()' if CppGenerator.should_dereference_argument( _type, parameter.is_optional): return '*' + param_name if CppGenerator.should_move_argument(_type, parameter.is_optional): return 'WTFMove(%s)' % param_name return param_name for parameter in command.call_parameters: in_param_name = parameter.parameter_name if parameter.is_optional: in_param_name = 'opt_' + in_param_name in_param_name = 'in_' + in_param_name objc_in_param_name = 'o_%s' % in_param_name objc_type = self.objc_type_for_param(domain, command.command_name, parameter, False) if isinstance(parameter.type, EnumType): objc_type = 'std::optional<%s>' % objc_type param_expression = in_param_expression(in_param_name, parameter) import_expression = self.objc_protocol_import_expression_for_parameter( param_expression, domain, command.command_name, parameter) if not parameter.is_optional: lines.append(' %s = %s;' % (join_type_and_name( objc_type, objc_in_param_name), import_expression)) if isinstance(parameter.type, EnumType): lines.append(' if (!%s) {' % objc_in_param_name) lines.append( ' backendDispatcher()->reportProtocolError(BackendDispatcher::InvalidParams, "Parameter \'%s\' of method \'%s.%s\' cannot be processed"_s);' % (parameter.parameter_name, domain.domain_name, command.command_name)) lines.append(' return;') lines.append(' }') else: lines.append(' %s;' % join_type_and_name(objc_type, objc_in_param_name)) lines.append(' if (!!%s)' % in_param_name) lines.append(' %s = %s;' % (objc_in_param_name, import_expression)) return '\n'.join(lines)
def _generate_conversions_for_command(self, domain, command): lines = [] if command.call_parameters: lines.append('') def in_param_expression(param_name, parameter): _type = parameter.type if isinstance(_type, AliasedType): _type = _type.aliased_type # Fall through to enum or primitive. if isinstance(_type, EnumType): _type = _type.primitive_type # Fall through to primitive. if isinstance(_type, PrimitiveType): if _type.raw_name() in ['array', 'any', 'object']: return '&%s' % param_name if not parameter.is_optional else param_name return '*%s' % param_name if parameter.is_optional else param_name return '&%s' % param_name if not parameter.is_optional else param_name for parameter in command.call_parameters: in_param_name = 'in_%s' % parameter.parameter_name objc_in_param_name = 'o_%s' % in_param_name objc_type = self.objc_type_for_param(domain, command.command_name, parameter, False) if isinstance(parameter.type, EnumType): objc_type = 'std::optional<%s>' % objc_type param_expression = in_param_expression(in_param_name, parameter) import_expression = self.objc_protocol_import_expression_for_parameter( param_expression, domain, command.command_name, parameter) if not parameter.is_optional: lines.append(' %s = %s;' % (join_type_and_name( objc_type, objc_in_param_name), import_expression)) if isinstance(parameter.type, EnumType): lines.append(' if (!%s) {' % objc_in_param_name) lines.append( ' backendDispatcher()->reportProtocolError(BackendDispatcher::InvalidParams, "Parameter \'%s\' of method \'%s.%s\' cannot be processed"_s);' % (parameter.parameter_name, domain.domain_name, command.command_name)) lines.append(' return;') lines.append(' }') else: lines.append(' %s;' % join_type_and_name(objc_type, objc_in_param_name)) lines.append(' if (%s)' % in_param_name) lines.append(' %s = %s;' % (objc_in_param_name, import_expression)) if lines: lines.append('') return '\n'.join(lines)
def _callback_block_for_command(self, domain, command): pairs = [] for parameter in command.return_parameters: pairs.append(join_type_and_name(self.objc_type_for_param(domain, command.command_name, parameter), parameter.parameter_name)) params = 'void' if pairs: params = ', '.join(pairs) return 'void(^)(%s)' % params
def _generate_member_property(self, declaration, member): accessor_type = self.objc_accessor_type_for_member(member) objc_type = self.objc_type_for_member(declaration, member) return '@property (nonatomic, %s) %s;' % ( accessor_type, join_type_and_name( objc_type, ObjCGenerator.identifier_to_objc_identifier( member.member_name)))
def _generate_success_block_for_command(self, domain, command): lines = [] if command.return_parameters: success_block_parameters = [] for parameter in command.return_parameters: out_param_name = parameter.parameter_name if parameter.is_optional: out_param_name = 'opt_' + out_param_name out_param_name = 'out_' + out_param_name objc_type = self.objc_type_for_param(domain, command.command_name, parameter) success_block_parameters.append(join_type_and_name(objc_type, out_param_name)) lines.append(' id successCallback = ^(%s) {' % ', '.join(success_block_parameters)) else: lines.append(' id successCallback = ^{') lines.append(' auto protocol_jsonMessage = JSON::Object::create();') if command.return_parameters: required_pointer_parameters = [parameter for parameter in command.return_parameters if not parameter.is_optional and ObjCGenerator.is_type_objc_pointer_type(parameter.type)] for parameter in required_pointer_parameters: out_param_name = parameter.parameter_name if parameter.is_optional: out_param_name = 'opt_' + out_param_name out_param_name = 'out_' + out_param_name lines.append(' THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(%s, @"%s");' % (out_param_name, parameter.parameter_name)) objc_array_class = self.objc_class_for_array_type(parameter.type) if objc_array_class and objc_array_class.startswith(self.objc_prefix()): lines.append(' THROW_EXCEPTION_FOR_BAD_TYPE_IN_ARRAY(%s, [%s class]);' % (out_param_name, objc_array_class)) optional_pointer_parameters = [parameter for parameter in command.return_parameters if parameter.is_optional and ObjCGenerator.is_type_objc_pointer_type(parameter.type)] for parameter in optional_pointer_parameters: out_param_name = parameter.parameter_name if parameter.is_optional: out_param_name = 'opt_' + out_param_name out_param_name = 'out_' + out_param_name lines.append(' THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(%s, @"%s");' % (out_param_name, parameter.parameter_name)) objc_array_class = self.objc_class_for_array_type(parameter.type) if objc_array_class and objc_array_class.startswith(self.objc_prefix()): lines.append(' THROW_EXCEPTION_FOR_BAD_TYPE_IN_OPTIONAL_ARRAY(%s, [%s class]);' % (out_param_name, objc_array_class)) for parameter in command.return_parameters: out_param_name = parameter.parameter_name if parameter.is_optional: out_param_name = 'opt_' + out_param_name out_param_name = 'out_' + out_param_name keyed_set_method = CppGenerator.cpp_setter_method_for_type(parameter.type) var_expression = '*%s' % out_param_name if parameter.is_optional else out_param_name export_expression = self.objc_protocol_export_expression_for_variable(parameter.type, var_expression) if not parameter.is_optional: lines.append(' protocol_jsonMessage->%s("%s"_s, %s);' % (keyed_set_method, parameter.parameter_name, export_expression)) else: lines.append(' if (!!%s)' % out_param_name) lines.append(' protocol_jsonMessage->%s("%s"_s, %s);' % (keyed_set_method, parameter.parameter_name, export_expression)) lines.append(' backendDispatcher()->sendResponse(protocol_requestId, WTFMove(protocol_jsonMessage), false);') lines.append(' };') return '\n'.join(lines)
def _generate_conversions_for_command(self, domain, command): lines = [] if command.call_parameters: lines.append('') def in_param_expression(param_name, parameter): _type = parameter.type if isinstance(_type, AliasedType): _type = _type.aliased_type # Fall through to enum or primitive. if isinstance(_type, EnumType): _type = _type.primitive_type # Fall through to primitive. if isinstance(_type, PrimitiveType): if _type.raw_name() in ['array', 'any', 'object']: return '&%s' % param_name if not parameter.is_optional else param_name return '*%s' % param_name if parameter.is_optional else param_name return '&%s' % param_name if not parameter.is_optional else param_name for parameter in command.call_parameters: in_param_name = 'in_%s' % parameter.parameter_name objc_in_param_name = 'o_%s' % in_param_name objc_type = self.objc_type_for_param(domain, command.command_name, parameter, False) if isinstance(parameter.type, EnumType): objc_type = 'std::optional<%s>' % objc_type param_expression = in_param_expression(in_param_name, parameter) import_expression = self.objc_protocol_import_expression_for_parameter(param_expression, domain, command.command_name, parameter) if not parameter.is_optional: lines.append(' %s = %s;' % (join_type_and_name(objc_type, objc_in_param_name), import_expression)) if isinstance(parameter.type, EnumType): lines.append(' if (!%s) {' % objc_in_param_name) lines.append(' backendDispatcher()->reportProtocolError(BackendDispatcher::InvalidParams, String::format("Parameter \'%%s\' of method \'%%s\' cannot be processed", "%s", "%s.%s"));' % (parameter.parameter_name, domain.domain_name, command.command_name)) lines.append(' return;') lines.append(' }') else: lines.append(' %s;' % join_type_and_name(objc_type, objc_in_param_name)) lines.append(' if (%s)' % in_param_name) lines.append(' %s = %s;' % (objc_in_param_name, import_expression)) if lines: lines.append('') return '\n'.join(lines)
def _generate_conversions_for_command(self, domain, command): lines = [] if command.call_parameters: lines.append('') for parameter in command.call_parameters: in_param_name = 'in_%s' % parameter.parameter_name objc_in_param_name = 'o_%s' % in_param_name objc_type = ObjCGenerator.objc_type_for_param(domain, command.command_name, parameter, False) in_param_optional_safe_name = '*%s' % in_param_name if parameter.is_optional else in_param_name import_expression = ObjCGenerator.objc_protocol_import_expression_for_parameter(in_param_optional_safe_name, domain, command.command_name, parameter) if not parameter.is_optional: lines.append(' %s = %s;' % (join_type_and_name(objc_type, objc_in_param_name), import_expression)) else: lines.append(' %s;' % join_type_and_name(objc_type, objc_in_param_name)) lines.append(' if (%s)' % in_param_name) lines.append(' %s = %s;' % (objc_in_param_name, import_expression)) if lines: lines.append('') return '\n'.join(lines)
def _generate_conversions_for_command(self, domain, command): lines = [] if command.call_parameters: lines.append('') def in_param_expression(param_name, parameter): _type = parameter.type if isinstance(_type, AliasedType): _type = _type.aliased_type # Fall through to enum or primitive. if isinstance(_type, EnumType): _type = _type.primitive_type # Fall through to primitive. if isinstance(_type, PrimitiveType): if _type.raw_name() in ['array', 'any', 'object']: return '&%s' % param_name if not parameter.is_optional else param_name return '*%s' % param_name if parameter.is_optional else param_name return '&%s' % param_name if not parameter.is_optional else param_name for parameter in command.call_parameters: in_param_name = 'in_%s' % parameter.parameter_name objc_in_param_name = 'o_%s' % in_param_name objc_type = self.objc_type_for_param(domain, command.command_name, parameter, False) param_expression = in_param_expression(in_param_name, parameter) import_expression = self.objc_protocol_import_expression_for_parameter( param_expression, domain, command.command_name, parameter) if not parameter.is_optional: lines.append(' %s = %s;' % (join_type_and_name( objc_type, objc_in_param_name), import_expression)) else: lines.append(' %s;' % join_type_and_name(objc_type, objc_in_param_name)) lines.append(' if (%s)' % in_param_name) lines.append(' %s = %s;' % (objc_in_param_name, import_expression)) if lines: lines.append('') return '\n'.join(lines)
def _generate_success_block_for_command(self, domain, command): lines = [] if command.return_parameters: success_block_parameters = [] for parameter in command.return_parameters: objc_type = ObjCGenerator.objc_type_for_param(domain, command.command_name, parameter) var_name = ObjCGenerator.identifier_to_objc_identifier(parameter.parameter_name) success_block_parameters.append(join_type_and_name(objc_type, var_name)) lines.append(' id successCallback = ^(%s) {' % ', '.join(success_block_parameters)) else: lines.append(' id successCallback = ^{') if command.return_parameters: lines.append(' Ref<InspectorObject> resultObject = InspectorObject::create();') required_pointer_parameters = filter(lambda parameter: not parameter.is_optional and ObjCGenerator.is_type_objc_pointer_type(parameter.type), command.return_parameters) for parameter in required_pointer_parameters: var_name = ObjCGenerator.identifier_to_objc_identifier(parameter.parameter_name) lines.append(' THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(%s, @"%s");' % (var_name, var_name)) objc_array_class = ObjCGenerator.objc_class_for_array_type(parameter.type) if objc_array_class and objc_array_class.startswith(ObjCGenerator.OBJC_PREFIX): lines.append(' THROW_EXCEPTION_FOR_BAD_TYPE_IN_ARRAY(%s, [%s class]);' % (var_name, objc_array_class)) optional_pointer_parameters = filter(lambda parameter: parameter.is_optional and ObjCGenerator.is_type_objc_pointer_type(parameter.type), command.return_parameters) for parameter in optional_pointer_parameters: var_name = ObjCGenerator.identifier_to_objc_identifier(parameter.parameter_name) lines.append(' THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(%s, @"%s");' % (var_name, var_name)) objc_array_class = ObjCGenerator.objc_class_for_array_type(parameter.type) if objc_array_class and objc_array_class.startswith(ObjCGenerator.OBJC_PREFIX): lines.append(' THROW_EXCEPTION_FOR_BAD_TYPE_IN_OPTIONAL_ARRAY(%s, [%s class]);' % (var_name, objc_array_class)) for parameter in command.return_parameters: keyed_set_method = CppGenerator.cpp_setter_method_for_type(parameter.type) var_name = ObjCGenerator.identifier_to_objc_identifier(parameter.parameter_name) var_expression = '*%s' % var_name if parameter.is_optional else var_name export_expression = ObjCGenerator.objc_protocol_export_expression_for_variable(parameter.type, var_expression) if not parameter.is_optional: lines.append(' resultObject->%s(ASCIILiteral("%s"), %s);' % (keyed_set_method, parameter.parameter_name, export_expression)) else: lines.append(' if (%s)' % var_name) lines.append(' resultObject->%s(ASCIILiteral("%s"), %s);' % (keyed_set_method, parameter.parameter_name, export_expression)) lines.append(' backendDispatcher()->sendResponse(requestId, WTF::move(resultObject));') else: lines.append(' backendDispatcher()->sendResponse(requestId, InspectorObject::create());') lines.append(' };') return '\n'.join(lines)
def _generate_success_block_for_command(self, domain, command): lines = [] if command.return_parameters: success_block_parameters = [] for parameter in command.return_parameters: objc_type = ObjCGenerator.objc_type_for_param( domain, command.command_name, parameter) var_name = ObjCGenerator.identifier_to_objc_identifier( parameter.parameter_name) success_block_parameters.append( join_type_and_name(objc_type, var_name)) lines.append(' id successCallback = ^(%s) {' % ', '.join(success_block_parameters)) else: lines.append(' id successCallback = ^{') if command.return_parameters: lines.append( ' Ref<InspectorObject> resultObject = InspectorObject::create();' ) required_pointer_parameters = filter( lambda parameter: not parameter.is_optional and ObjCGenerator. is_type_objc_pointer_type(parameter.type), command.return_parameters) for parameter in required_pointer_parameters: var_name = ObjCGenerator.identifier_to_objc_identifier( parameter.parameter_name) lines.append( ' THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(%s, @"%s");' % (var_name, var_name)) objc_array_class = ObjCGenerator.objc_class_for_array_type( parameter.type) if objc_array_class and objc_array_class.startswith( ObjCGenerator.OBJC_PREFIX): lines.append( ' THROW_EXCEPTION_FOR_BAD_TYPE_IN_ARRAY(%s, [%s class]);' % (var_name, objc_array_class)) optional_pointer_parameters = filter( lambda parameter: parameter.is_optional and ObjCGenerator. is_type_objc_pointer_type(parameter.type), command.return_parameters) for parameter in optional_pointer_parameters: var_name = ObjCGenerator.identifier_to_objc_identifier( parameter.parameter_name) lines.append( ' THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(%s, @"%s");' % (var_name, var_name)) objc_array_class = ObjCGenerator.objc_class_for_array_type( parameter.type) if objc_array_class and objc_array_class.startswith( ObjCGenerator.OBJC_PREFIX): lines.append( ' THROW_EXCEPTION_FOR_BAD_TYPE_IN_OPTIONAL_ARRAY(%s, [%s class]);' % (var_name, objc_array_class)) for parameter in command.return_parameters: keyed_set_method = CppGenerator.cpp_setter_method_for_type( parameter.type) var_name = ObjCGenerator.identifier_to_objc_identifier( parameter.parameter_name) var_expression = '*%s' % var_name if parameter.is_optional else var_name export_expression = ObjCGenerator.objc_protocol_export_expression_for_variable( parameter.type, var_expression) if not parameter.is_optional: lines.append( ' resultObject->%s(ASCIILiteral("%s"), %s);' % (keyed_set_method, parameter.parameter_name, export_expression)) else: lines.append(' if (%s)' % var_name) lines.append( ' resultObject->%s(ASCIILiteral("%s"), %s);' % (keyed_set_method, parameter.parameter_name, export_expression)) lines.append( ' backendDispatcher()->sendResponse(callId, WTF::move(resultObject), String());' ) else: lines.append( ' backendDispatcher()->sendResponse(callId, InspectorObject::create(), String());' ) lines.append(' };') return '\n'.join(lines)
def _generate_member_property(self, declaration, member): accessor_type = ObjCGenerator.objc_accessor_type_for_member(member) objc_type = ObjCGenerator.objc_type_for_member(declaration, member) return '@property (nonatomic, %s) %s;' % (accessor_type, join_type_and_name(objc_type, ObjCGenerator.identifier_to_objc_identifier(member.member_name)))