Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(813)

Side by Side Diff: mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl

Issue 611633002: mojom: Add associative arrays to the mojom language. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix gn build. Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 {%- import "interface_macros.tmpl" as interface_macros %} 1 {%- import "interface_macros.tmpl" as interface_macros %}
2 {%- set class_name = interface.name %} 2 {%- set class_name = interface.name %}
3 {%- set proxy_name = interface.name ~ "Proxy" %} 3 {%- set proxy_name = interface.name ~ "Proxy" %}
4 {%- set namespace_as_string = "%s"|format(namespace|replace(".","::")) %} 4 {%- set namespace_as_string = "%s"|format(namespace|replace(".","::")) %}
5 5
6 {%- macro alloc_params(parameters) %} 6 {%- macro alloc_params(parameters) %}
7 {%- for param in parameters %} 7 {%- for param in parameters %}
8 {%- if param.kind|is_object_kind %} 8 {%- if param.kind|is_map_kind %}
9 mojo::Array<{{param.kind.key_kind|cpp_result_type}}> p{{loop.index}}_keys;
10 Deserialize_(params->{{param.name}}_keys.ptr, &p{{loop.index}}_keys);
11 mojo::Array<{{param.kind.value_kind|cpp_result_type}}> p{{loop.index}}_values;
12 Deserialize_(params->{{param.name}}_values.ptr, &p{{loop.index}}_values);
13 {{param.kind|cpp_result_type}} p{{loop.index}}(p{{loop.index}}_keys.Pass(),
14 p{{loop.index}}_values.Pass());
15 {%- elif param.kind|is_object_kind %}
9 {{param.kind|cpp_result_type}} p{{loop.index}}; 16 {{param.kind|cpp_result_type}} p{{loop.index}};
10 Deserialize_(params->{{param.name}}.ptr, &p{{loop.index}}); 17 Deserialize_(params->{{param.name}}.ptr, &p{{loop.index}});
11 {% endif -%} 18 {% endif -%}
12 {%- endfor %} 19 {%- endfor %}
13 {%- endmacro %} 20 {%- endmacro %}
14 21
15 {%- macro pass_params(parameters) %} 22 {%- macro pass_params(parameters) %}
16 {%- for param in parameters %} 23 {%- for param in parameters %}
17 {%- if param.kind|is_string_kind -%} 24 {%- if param.kind|is_string_kind -%}
18 p{{loop.index}} 25 p{{loop.index}}
19 {%- elif param.kind|is_object_kind -%} 26 {%- elif param.kind|is_object_kind -%}
20 p{{loop.index}}.Pass() 27 p{{loop.index}}.Pass()
21 {%- elif param.kind|is_interface_kind -%} 28 {%- elif param.kind|is_interface_kind -%}
22 mojo::MakeProxy<{{param.kind|get_name_for_kind}}>(mojo::MakeScopedHandle(mojo::i nternal::FetchAndReset(&params->{{param.name}}))) 29 mojo::MakeProxy<{{param.kind|get_name_for_kind}}>(mojo::MakeScopedHandle(mojo::i nternal::FetchAndReset(&params->{{param.name}})))
23 {%- elif param.kind|is_interface_request_kind -%} 30 {%- elif param.kind|is_interface_request_kind -%}
24 mojo::MakeRequest<{{param.kind.kind|get_name_for_kind}}>(mojo::MakeScopedHandle( mojo::internal::FetchAndReset(&params->{{param.name}}))) 31 mojo::MakeRequest<{{param.kind.kind|get_name_for_kind}}>(mojo::MakeScopedHandle( mojo::internal::FetchAndReset(&params->{{param.name}})))
25 {%- elif param.kind|is_any_handle_kind -%} 32 {%- elif param.kind|is_any_handle_kind -%}
26 mojo::MakeScopedHandle(mojo::internal::FetchAndReset(&params->{{param.name}})) 33 mojo::MakeScopedHandle(mojo::internal::FetchAndReset(&params->{{param.name}}))
27 {%- elif param.kind|is_enum_kind -%} 34 {%- elif param.kind|is_enum_kind -%}
28 static_cast<{{param.kind|cpp_wrapper_type}}>(params->{{param.name}}) 35 static_cast<{{param.kind|cpp_wrapper_type}}>(params->{{param.name}})
29 {%- else -%} 36 {%- else -%}
30 params->{{param.name}} 37 params->{{param.name}}
31 {%- endif -%} 38 {%- endif -%}
32 {%- if not loop.last %}, {% endif %} 39 {%- if not loop.last %}, {% endif %}
33 {%- endfor %} 40 {%- endfor %}
34 {%- endmacro %} 41 {%- endmacro %}
35 42
43 {%- macro mapping_prelude(parameters) -%}
44 {%- for param in parameters %}
45 {%- if param.kind|is_map_kind %}
46 mojo::Array<{{param.kind.key_kind|cpp_result_type}}> in_{{param.name}}_keys;
47 mojo::Array<{{param.kind.value_kind|cpp_result_type}}> in_{{param.name}}_value s;
48 in_{{param.name}}.DecomposeMapTo(&in_{{param.name}}_keys,
49 &in_{{param.name}}_values);
50 {%- endif -%}
51 {%- endfor -%}
52 {%- endmacro %}
53
54
36 {%- macro compute_payload_size(params_name, parameters) -%} 55 {%- macro compute_payload_size(params_name, parameters) -%}
37 size_t payload_size = 56 size_t payload_size =
38 mojo::internal::Align(sizeof({{params_name}})); 57 mojo::internal::Align(sizeof({{params_name}}));
39 {#--- Computes #} 58 {#--- Computes #}
40 {%- for param in parameters %} 59 {%- for param in parameters %}
41 {%- if param.kind|is_object_kind %} 60 {%- if param.kind|is_map_kind %}
61 payload_size += GetSerializedSize_(in_{{param.name}}_keys);
62 payload_size += GetSerializedSize_(in_{{param.name}}_values);
63 {%- elif param.kind|is_object_kind %}
42 payload_size += GetSerializedSize_(in_{{param.name}}); 64 payload_size += GetSerializedSize_(in_{{param.name}});
43 {%- endif %} 65 {%- endif %}
44 {%- endfor %} 66 {%- endfor %}
45 {%- endmacro %} 67 {%- endmacro %}
46 68
47 {%- macro build_message(params_name, parameters, params_description) -%} 69 {%- macro build_message(params_name, parameters, params_description) -%}
48 {# TODO(yzshen): Consider refactoring to share code with 70 {# TODO(yzshen): Consider refactoring to share code with
49 struct_serialization_definition.tmpl #} 71 struct_serialization_definition.tmpl #}
50 {{params_name}}* params = 72 {{params_name}}* params =
51 {{params_name}}::New(builder.buffer()); 73 {{params_name}}::New(builder.buffer());
52 {#--- Sets #} 74 {#--- Sets #}
53 {% for param in parameters %} 75 {% for param in parameters %}
54 {%- if param.kind|is_object_kind %} 76 {%- if param.kind|is_object_kind %}
55 {%- if param.kind|is_any_array_kind %} 77 {%- if param.kind|is_any_array_kind %}
56 mojo::SerializeArray_<{{param.kind|get_array_validate_params|indent(24)}}>( 78 mojo::SerializeArray_<{{param.kind|get_array_validate_params|indent(24)}}>(
57 mojo::internal::Forward(in_{{param.name}}), builder.buffer(), &params->{{p aram.name}}.ptr); 79 mojo::internal::Forward(in_{{param.name}}), builder.buffer(), &params->{{p aram.name}}.ptr);
80 {%- elif param.kind|is_map_kind %}
81 mojo::SerializeArray_<{{param.kind.key_kind|get_map_validate_params|indent(24) }}>(
82 mojo::internal::Forward(in_{{param.name}}_keys), builder.buffer(), &params ->{{param.name}}_keys.ptr);
83 mojo::SerializeArray_<{{param.kind.value_kind|get_map_validate_params|indent(2 4)}}>(
84 mojo::internal::Forward(in_{{param.name}}_values), builder.buffer(), &para ms->{{param.name}}_values.ptr);
58 {%- else %} 85 {%- else %}
59 Serialize_(mojo::internal::Forward(in_{{param.name}}), builder.buffer(), &para ms->{{param.name}}.ptr); 86 Serialize_(mojo::internal::Forward(in_{{param.name}}), builder.buffer(), &para ms->{{param.name}}.ptr);
60 {%- endif %} 87 {%- endif %}
61 {%- if not param.kind|is_nullable_kind %} 88 {%- if not param.kind|is_nullable_kind %}
89 {%- if param.kind|is_map_kind %}
90 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
91 !params->{{param.name}}_keys.ptr,
92 mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
93 "null key array for {{param.name}} argument in {{params_description}}");
94 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
95 !params->{{param.name}}_values.ptr,
96 mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
97 "null key array for {{param.name}} argument in {{params_description}}");
98 {%- else %}
62 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( 99 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
63 !params->{{param.name}}.ptr, 100 !params->{{param.name}}.ptr,
64 mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER, 101 mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
65 "null {{param.name}} argument in {{params_description}}"); 102 "null {{param.name}} argument in {{params_description}}");
103 {%- endif %}
66 {%- endif %} 104 {%- endif %}
67 {%- elif param.kind|is_any_handle_kind %} 105 {%- elif param.kind|is_any_handle_kind %}
68 {%- if param.kind|is_interface_kind or 106 {%- if param.kind|is_interface_kind or
69 param.kind|is_interface_request_kind %} 107 param.kind|is_interface_request_kind %}
70 // Delegate handle. 108 // Delegate handle.
71 params->{{param.name}} = in_{{param.name}}.PassMessagePipe().release(); 109 params->{{param.name}} = in_{{param.name}}.PassMessagePipe().release();
72 {%- else %} 110 {%- else %}
73 params->{{param.name}} = in_{{param.name}}.release(); 111 params->{{param.name}} = in_{{param.name}}.release();
74 {%- endif %} 112 {%- endif %}
75 {%- if not param.kind|is_nullable_kind %} 113 {%- if not param.kind|is_nullable_kind %}
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 169
132 {%- for method in interface.methods %} 170 {%- for method in interface.methods %}
133 {%- set message_name = 171 {%- set message_name =
134 "internal::k%s_%s_Name"|format(interface.name, method.name) %} 172 "internal::k%s_%s_Name"|format(interface.name, method.name) %}
135 {%- set params_name = 173 {%- set params_name =
136 "internal::%s_%s_Params_Data"|format(interface.name, method.name) %} 174 "internal::%s_%s_Params_Data"|format(interface.name, method.name) %}
137 {%- set params_description = 175 {%- set params_description =
138 "%s.%s request"|format(interface.name, method.name) %} 176 "%s.%s request"|format(interface.name, method.name) %}
139 void {{proxy_name}}::{{method.name}}( 177 void {{proxy_name}}::{{method.name}}(
140 {{interface_macros.declare_request_params("in_", method)}}) { 178 {{interface_macros.declare_request_params("in_", method)}}) {
179 {{mapping_prelude(method.parameters)}}
180
141 {{compute_payload_size(params_name, method.parameters)}} 181 {{compute_payload_size(params_name, method.parameters)}}
142 182
143 {%- if method.response_parameters != None %} 183 {%- if method.response_parameters != None %}
144 mojo::internal::RequestMessageBuilder builder({{message_name}}, payload_size); 184 mojo::internal::RequestMessageBuilder builder({{message_name}}, payload_size);
145 {%- else %} 185 {%- else %}
146 mojo::internal::MessageBuilder builder({{message_name}}, payload_size); 186 mojo::internal::MessageBuilder builder({{message_name}}, payload_size);
147 {%- endif %} 187 {%- endif %}
148 188
149 {{build_message(params_name, method.parameters, params_description)}} 189 {{build_message(params_name, method.parameters, params_description)}}
150 190
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 226
187 virtual void Run({{interface_macros.declare_params("in_", method.response_para meters)}}) const override; 227 virtual void Run({{interface_macros.declare_params("in_", method.response_para meters)}}) const override;
188 228
189 private: 229 private:
190 uint64_t request_id_; 230 uint64_t request_id_;
191 mutable mojo::MessageReceiver* responder_; 231 mutable mojo::MessageReceiver* responder_;
192 MOJO_DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ProxyToResponder) ; 232 MOJO_DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ProxyToResponder) ;
193 }; 233 };
194 void {{class_name}}_{{method.name}}_ProxyToResponder::Run( 234 void {{class_name}}_{{method.name}}_ProxyToResponder::Run(
195 {{interface_macros.declare_params("in_", method.response_parameters)}}) cons t { 235 {{interface_macros.declare_params("in_", method.response_parameters)}}) cons t {
236 {{mapping_prelude(method.response_parameters)}}
237
196 {{compute_payload_size(params_name, method.response_parameters)}} 238 {{compute_payload_size(params_name, method.response_parameters)}}
197 mojo::internal::ResponseMessageBuilder builder( 239 mojo::internal::ResponseMessageBuilder builder(
198 {{message_name}}, payload_size, request_id_); 240 {{message_name}}, payload_size, request_id_);
199 {{build_message(params_name, method.response_parameters, params_description)}} 241 {{build_message(params_name, method.response_parameters, params_description)}}
200 bool ok MOJO_ALLOW_UNUSED = responder_->Accept(&message); 242 bool ok MOJO_ALLOW_UNUSED = responder_->Accept(&message);
201 // TODO(darin): !ok returned here indicates a malformed message, and that may 243 // TODO(darin): !ok returned here indicates a malformed message, and that may
202 // be good reason to close the connection. However, we don't have a way to do 244 // be good reason to close the connection. However, we don't have a way to do
203 // that from here. We should add a way. 245 // that from here. We should add a way.
204 delete responder_; 246 delete responder_;
205 responder_ = nullptr; 247 responder_ = nullptr;
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 } 367 }
326 break; 368 break;
327 } 369 }
328 {%- endfor %} 370 {%- endfor %}
329 } 371 }
330 {%- endif %} 372 {%- endif %}
331 373
332 return sink_->Accept(message); 374 return sink_->Accept(message);
333 } 375 }
334 {%- endif -%} 376 {%- endif -%}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698