Index: mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl |
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl |
index ef091d6b29ded1c6d3c8af6ea006a417753b9ce1..7d6711ae8d97b7fb2f153ad34d9f261278cbd692 100644 |
--- a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl |
+++ b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl |
@@ -2,10 +2,19 @@ |
{%- set class_name = interface.name %} |
{%- set proxy_name = interface.name ~ "Proxy" %} |
+{%- 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}}(), &p{{loop.index}}); |
+{% endif -%} |
+{%- endfor %} |
+{%- endmacro %} |
+ |
{%- macro pass_params(parameters) %} |
{%- for param in parameters %} |
{%- if param.kind|is_object_kind -%} |
-mojo::internal::Wrap(params->{{param.name}}()) |
+p{{loop.index}}.Pass() |
{%- elif param.kind|is_interface_kind -%} |
mojo::MakeProxy<{{param.kind.name}}>(mojo::MakePassable(params->{{param.name}}()).Pass()) |
{%- elif param.kind|is_handle_kind -%} |
@@ -25,8 +34,8 @@ params->{{param.name}}() |
{#--- Computes #} |
{%- for param in parameters %} |
{%- if param.kind|is_object_kind %} |
- if (!in_{{param.name}}.is_null()) |
- payload_size += mojo::internal::Unwrap(in_{{param.name}})->ComputeSize(); |
+ if (in_{{param.name}}) |
+ payload_size += GetSerializedSize_(in_{{param.name}}); |
{%- endif %} |
{%- endfor %} |
{%- endmacro %} |
@@ -37,9 +46,11 @@ params->{{param.name}}() |
{#--- Sets #} |
{% for param in parameters %} |
{%- if param.kind|is_object_kind %} |
- if (!in_{{param.name}}.is_null()) |
- params->set_{{param.name}}( |
- mojo::internal::Unwrap(in_{{param.name}})->Clone(builder.buffer())); |
+ if (in_{{param.name}}) { |
+ {{param.kind|cpp_type}} tmp; |
+ Serialize_(in_{{param.name}}, builder.buffer(), &tmp); |
+ params->set_{{param.name}}(tmp); |
+ } |
{%- elif param.kind|is_interface_kind %} |
if (!in_{{param.name}}.get()) { |
params->set_{{param.name}}(mojo::MessagePipeHandle()); |
@@ -95,6 +106,7 @@ bool {{class_name}}_{{method.name}}_ForwardToCallback::Accept( |
if (!params->DecodePointersAndHandles(message)) |
return false; |
+ {{alloc_params(method.response_parameters)|indent(2)}} |
callback_.Run({{pass_params(method.response_parameters)}}); |
params->CloseHandles(); |
return true; |
@@ -200,6 +212,7 @@ bool {{class_name}}Stub::Accept(mojo::Message* message) { |
if (!params->DecodePointersAndHandles(message)) |
return false; |
+ {{alloc_params(method.parameters)|indent(6)}} |
sink_->{{method.name}}({{pass_params(method.parameters)}}); |
params->CloseHandles(); |
return true; |
@@ -230,6 +243,7 @@ bool {{class_name}}Stub::AcceptWithResponder( |
new {{class_name}}_{{method.name}}_ProxyToResponder( |
message->request_id(), responder); |
{{interface_macros.declare_callback(method)}} callback(runnable); |
+ {{alloc_params(method.parameters)|indent(6)}} |
sink_->{{method.name}}( |
{%- if method.parameters -%}{{pass_params(method.parameters)}}, {% endif -%}callback); |
params->CloseHandles(); |