| Index: third_party/mojo/src/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
|
| diff --git a/third_party/mojo/src/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl b/third_party/mojo/src/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
|
| index 2b45808774369709c4c9e0a1abdff4a643d4f7bf..308c8b67a5060845834470782594e599e915e6a6 100644
|
| --- a/third_party/mojo/src/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
|
| +++ b/third_party/mojo/src/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
|
| @@ -1,90 +1,29 @@
|
| {%- import "interface_macros.tmpl" as interface_macros %}
|
| +{%- import "struct_macros.tmpl" as struct_macros %}
|
| {%- set class_name = interface.name %}
|
| {%- set proxy_name = interface.name ~ "Proxy" %}
|
| {%- set namespace_as_string = "%s"|format(namespace|replace(".","::")) %}
|
|
|
| -{%- macro alloc_params(parameters) %}
|
| -{%- for param in parameters %}
|
| -{%- if param.kind|is_object_kind %}
|
| -{{param.kind|cpp_result_type}} p{{loop.index}};
|
| -Deserialize_(params->{{param.name}}.ptr, &p{{loop.index}});
|
| -{% endif -%}
|
| +{%- macro alloc_params(struct) %}
|
| +{%- for param in struct.packed.packed_fields_in_ordinal_order %}
|
| + {{param.field.kind|cpp_result_type}} p_{{param.field.name}}{};
|
| {%- endfor %}
|
| + {{struct_macros.deserialize(struct, "params", "p_%s")}}
|
| {%- endmacro %}
|
|
|
| {%- macro pass_params(parameters) %}
|
| {%- for param in parameters %}
|
| -{%- if param.kind|is_string_kind -%}
|
| -p{{loop.index}}
|
| -{%- elif param.kind|is_object_kind -%}
|
| -p{{loop.index}}.Pass()
|
| -{%- elif param.kind|is_interface_kind -%}
|
| -mojo::MakeProxy<{{param.kind|get_name_for_kind}}>(mojo::MakeScopedHandle(mojo::internal::FetchAndReset(¶ms->{{param.name}})))
|
| -{%- elif param.kind|is_interface_request_kind -%}
|
| -mojo::MakeRequest<{{param.kind.kind|get_name_for_kind}}>(mojo::MakeScopedHandle(mojo::internal::FetchAndReset(¶ms->{{param.name}})))
|
| -{%- elif param.kind|is_any_handle_kind -%}
|
| -mojo::MakeScopedHandle(mojo::internal::FetchAndReset(¶ms->{{param.name}}))
|
| -{%- elif param.kind|is_enum_kind -%}
|
| -static_cast<{{param.kind|cpp_wrapper_type}}>(params->{{param.name}})
|
| +{%- if param.kind|is_move_only_kind -%}
|
| +p_{{param.name}}.Pass()
|
| {%- else -%}
|
| -params->{{param.name}}
|
| +p_{{param.name}}
|
| {%- endif -%}
|
| {%- if not loop.last %}, {% endif %}
|
| {%- endfor %}
|
| {%- endmacro %}
|
|
|
| -{%- macro compute_payload_size(params_name, parameters) -%}
|
| - size_t payload_size =
|
| - mojo::internal::Align(sizeof({{params_name}}));
|
| -{#--- Computes #}
|
| -{%- for param in parameters %}
|
| -{%- if param.kind|is_object_kind %}
|
| - payload_size += GetSerializedSize_(in_{{param.name}});
|
| -{%- endif %}
|
| -{%- endfor %}
|
| -{%- endmacro %}
|
| -
|
| -{%- macro build_message(params_name, parameters, params_description) -%}
|
| - {# TODO(yzshen): Consider refactoring to share code with
|
| - struct_serialization_definition.tmpl #}
|
| - {{params_name}}* params =
|
| - {{params_name}}::New(builder.buffer());
|
| -{#--- Sets #}
|
| -{% for param in parameters %}
|
| -{%- if param.kind|is_object_kind %}
|
| -{%- if param.kind|is_array_kind %}
|
| - mojo::SerializeArray_<{{param.kind|get_array_validate_params|indent(24)}}>(
|
| - mojo::internal::Forward(in_{{param.name}}), builder.buffer(), ¶ms->{{param.name}}.ptr);
|
| -{%- elif param.kind|is_map_kind %}
|
| - mojo::SerializeMap_<{{param.kind.value_kind|get_map_validate_params|indent(24)}}>(
|
| - mojo::internal::Forward(in_{{param.name}}), builder.buffer(), ¶ms->{{param.name}}.ptr);
|
| -{%- else %}
|
| - Serialize_(mojo::internal::Forward(in_{{param.name}}), builder.buffer(), ¶ms->{{param.name}}.ptr);
|
| -{%- endif %}
|
| -{%- if not param.kind|is_nullable_kind %}
|
| - MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
|
| - !params->{{param.name}}.ptr,
|
| - mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
|
| - "null {{param.name}} argument in {{params_description}}");
|
| -{%- endif %}
|
| -{%- elif param.kind|is_any_handle_kind %}
|
| -{%- if param.kind|is_interface_kind or
|
| - param.kind|is_interface_request_kind %}
|
| - // Delegate handle.
|
| - params->{{param.name}} = in_{{param.name}}.PassMessagePipe().release();
|
| -{%- else %}
|
| - params->{{param.name}} = in_{{param.name}}.release();
|
| -{%- endif %}
|
| -{%- if not param.kind|is_nullable_kind %}
|
| - MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
|
| - !params->{{param.name}}.is_valid(),
|
| - mojo::internal::VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE,
|
| - "invalid {{param.name}} argument in {{params_description}}");
|
| -{%- endif %}
|
| -{%- else %}
|
| - params->{{param.name}} = in_{{param.name}};
|
| -{%- endif %}
|
| -{%- endfor %}
|
| +{%- macro build_message(struct, struct_display_name) -%}
|
| + {{struct_macros.serialize(struct, struct_display_name, "in_%s", "params", "builder.buffer()")}}
|
| mojo::Message message;
|
| params->EncodePointersAndHandles(message.mutable_handles());
|
| builder.Finish(&message);
|
| @@ -119,7 +58,7 @@ bool {{class_name}}_{{method.name}}_ForwardToCallback::Accept(
|
| message->mutable_payload());
|
|
|
| params->DecodePointersAndHandles(message->mutable_handles());
|
| - {{alloc_params(method.response_parameters)|indent(2)}}
|
| + {{alloc_params(method|response_struct_from_method)}}
|
| callback_.Run({{pass_params(method.response_parameters)}});
|
| return true;
|
| }
|
| @@ -135,21 +74,20 @@ bool {{class_name}}_{{method.name}}_ForwardToCallback::Accept(
|
| {%- for method in interface.methods %}
|
| {%- set message_name =
|
| "internal::k%s_%s_Name"|format(interface.name, method.name) %}
|
| -{%- set params_name =
|
| - "internal::%s_%s_Params_Data"|format(interface.name, method.name) %}
|
| +{%- set params_struct = method|struct_from_method %}
|
| {%- set params_description =
|
| "%s.%s request"|format(interface.name, method.name) %}
|
| void {{proxy_name}}::{{method.name}}(
|
| {{interface_macros.declare_request_params("in_", method)}}) {
|
| - {{compute_payload_size(params_name, method.parameters)}}
|
| + {{struct_macros.get_serialized_size(params_struct, "in_%s")}}
|
|
|
| {%- if method.response_parameters != None %}
|
| - mojo::internal::RequestMessageBuilder builder({{message_name}}, payload_size);
|
| + mojo::internal::RequestMessageBuilder builder({{message_name}}, size);
|
| {%- else %}
|
| - mojo::internal::MessageBuilder builder({{message_name}}, payload_size);
|
| + mojo::internal::MessageBuilder builder({{message_name}}, size);
|
| {%- endif %}
|
|
|
| - {{build_message(params_name, method.parameters, params_description)}}
|
| + {{build_message(params_struct, params_description)}}
|
|
|
| {%- if method.response_parameters != None %}
|
| mojo::MessageReceiver* responder =
|
| @@ -170,8 +108,7 @@ void {{proxy_name}}::{{method.name}}(
|
| {%- if method.response_parameters != None %}
|
| {%- set message_name =
|
| "internal::k%s_%s_Name"|format(interface.name, method.name) %}
|
| -{%- set params_name =
|
| - "internal::%s_%s_ResponseParams_Data"|format(interface.name, method.name) %}
|
| +{%- set response_params_struct = method|response_struct_from_method %}
|
| {%- set params_description =
|
| "%s.%s response"|format(interface.name, method.name) %}
|
| class {{class_name}}_{{method.name}}_ProxyToResponder
|
| @@ -197,10 +134,10 @@ class {{class_name}}_{{method.name}}_ProxyToResponder
|
| };
|
| void {{class_name}}_{{method.name}}_ProxyToResponder::Run(
|
| {{interface_macros.declare_params("in_", method.response_parameters)}}) const {
|
| - {{compute_payload_size(params_name, method.response_parameters)}}
|
| + {{struct_macros.get_serialized_size(response_params_struct, "in_%s")}}
|
| mojo::internal::ResponseMessageBuilder builder(
|
| - {{message_name}}, payload_size, request_id_);
|
| - {{build_message(params_name, method.response_parameters, params_description)}}
|
| + {{message_name}}, size, request_id_);
|
| + {{build_message(response_params_struct, params_description)}}
|
| bool ok = responder_->Accept(&message);
|
| MOJO_ALLOW_UNUSED_LOCAL(ok);
|
| // TODO(darin): !ok returned here indicates a malformed message, and that may
|
| @@ -229,9 +166,8 @@ bool {{class_name}}Stub::Accept(mojo::Message* message) {
|
| message->mutable_payload());
|
|
|
| params->DecodePointersAndHandles(message->mutable_handles());
|
| - {{alloc_params(method.parameters)|indent(6)}}
|
| - // A null |sink_| typically means there is a missing call to
|
| - // InterfacePtr::set_client().
|
| + {{alloc_params(method|struct_from_method)|indent(4)}}
|
| + // A null |sink_| means no implementation was bound.
|
| assert(sink_);
|
| sink_->{{method.name}}({{pass_params(method.parameters)}});
|
| return true;
|
| @@ -261,9 +197,8 @@ bool {{class_name}}Stub::AcceptWithResponder(
|
| new {{class_name}}_{{method.name}}_ProxyToResponder(
|
| message->request_id(), responder);
|
| {{class_name}}::{{method.name}}Callback callback(runnable);
|
| - {{alloc_params(method.parameters)|indent(6)}}
|
| - // A null |sink_| typically means there is a missing call to
|
| - // InterfacePtr::set_client().
|
| + {{alloc_params(method|struct_from_method)|indent(4)}}
|
| + // A null |sink_| means no implementation was bound.
|
| assert(sink_);
|
| sink_->{{method.name}}(
|
| {%- if method.parameters -%}{{pass_params(method.parameters)}}, {% endif -%}callback);
|
| @@ -311,8 +246,6 @@ bool {{class_name}}RequestValidator::Accept(mojo::Message* message) {
|
| }
|
| {%- endif %}
|
|
|
| - // A null |sink_| typically means there is a missing call to
|
| - // InterfacePtr::set_client().
|
| assert(sink_);
|
| return sink_->Accept(message);
|
| }
|
| @@ -343,8 +276,6 @@ bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) {
|
| }
|
| {%- endif %}
|
|
|
| - // A null |sink_| typically means there is a missing call to
|
| - // InterfacePtr::set_client().
|
| assert(sink_);
|
| return sink_->Accept(message);
|
| }
|
|
|