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

Side by Side Diff: Source/bindings/templates/methods.cpp

Issue 680193003: IDL: Generate union type containers (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 1 month 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 {##############################################################################} 1 {##############################################################################}
2 {% macro generate_method(method, world_suffix) %} 2 {% macro generate_method(method, world_suffix) %}
3 {% filter conditional(method.conditional_string) %} 3 {% filter conditional(method.conditional_string) %}
4 static void {{method.name}}{{method.overload_index}}Method{{world_suffix}}(const v8::FunctionCallbackInfo<v8::Value>& info) 4 static void {{method.name}}{{method.overload_index}}Method{{world_suffix}}(const v8::FunctionCallbackInfo<v8::Value>& info)
5 { 5 {
6 {# Local variables #} 6 {# Local variables #}
7 {% if method.has_exception_state %} 7 {% if method.has_exception_state %}
8 ExceptionState exceptionState(ExceptionState::ExecutionContext, "{{method.na me}}", "{{interface_name}}", info.Holder(), info.GetIsolate()); 8 ExceptionState exceptionState(ExceptionState::ExecutionContext, "{{method.na me}}", "{{interface_name}}", info.Holder(), info.GetIsolate());
9 {% endif %} 9 {% endif %}
10 {# Overloaded methods have length checked during overload resolution #} 10 {# Overloaded methods have length checked during overload resolution #}
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 {{cpp_value}}; 231 {{cpp_value}};
232 {% elif method.is_implemented_in_private_script %} 232 {% elif method.is_implemented_in_private_script %}
233 {{method.cpp_type}} result{{method.cpp_type_initializer}}; 233 {{method.cpp_type}} result{{method.cpp_type_initializer}};
234 if (!{{method.cpp_value}}) 234 if (!{{method.cpp_value}})
235 return; 235 return;
236 {% elif method.use_output_parameter_for_result %} 236 {% elif method.use_output_parameter_for_result %}
237 {{method.cpp_type}} result; 237 {{method.cpp_type}} result;
238 {{cpp_value}}; 238 {{cpp_value}};
239 {% elif method.is_constructor %} 239 {% elif method.is_constructor %}
240 {{method.cpp_type}} impl = {{cpp_value}}; 240 {{method.cpp_type}} impl = {{cpp_value}};
241 {% elif method.use_local_result and not method.union_arguments %} 241 {% elif method.use_local_result and not method.union_result_members %}
242 {{method.cpp_type}} result = {{cpp_value}}; 242 {{method.cpp_type}} result = {{cpp_value}};
243 {% endif %} 243 {% endif %}
244 {# Post-call #} 244 {# Post-call #}
245 {% if method.is_raises_exception %} 245 {% if method.is_raises_exception %}
246 if (exceptionState.hadException()) { 246 if (exceptionState.hadException()) {
247 {{throw_from_exception_state(method)}}; 247 {{throw_from_exception_state(method)}};
248 return; 248 return;
249 } 249 }
250 {% endif %} 250 {% endif %}
251 {# Set return value #} 251 {# Set return value #}
252 {% if method.is_constructor %} 252 {% if method.is_constructor %}
253 {{generate_constructor_wrapper(method)}} 253 {{generate_constructor_wrapper(method)}}
254 {%- elif method.union_arguments %} 254 {%- elif method.union_result_members %}
255 {{union_type_method_call_and_set_return_value(method)}} 255 {{union_type_method_call_and_set_return_value(method)}}
256 {%- elif v8_set_return_value %} 256 {%- elif v8_set_return_value %}
257 {% if method.is_explicit_nullable %} 257 {% if method.is_explicit_nullable %}
258 if (result.isNull()) 258 if (result.isNull())
259 v8SetReturnValueNull(info); 259 v8SetReturnValueNull(info);
260 else 260 else
261 {{v8_set_return_value}}; 261 {{v8_set_return_value}};
262 {% else %} 262 {% else %}
263 {{v8_set_return_value}}; 263 {{v8_set_return_value}};
264 {% endif %} 264 {% endif %}
265 {%- endif %}{# None for void #} 265 {%- endif %}{# None for void #}
266 {# Post-set #} 266 {# Post-set #}
267 {% if interface_name in ('EventTarget', 'MediaQueryList') 267 {% if interface_name in ('EventTarget', 'MediaQueryList')
268 and method.name in ('addEventListener', 'removeEventListener', 'addListener' , 'removeListener') %} 268 and method.name in ('addEventListener', 'removeEventListener', 'addListener' , 'removeListener') %}
269 {% set hidden_dependency_action = 'addHiddenValueToArray' 269 {% set hidden_dependency_action = 'addHiddenValueToArray'
270 if method.name in ('addEventListener', 'addListener') else 'removeHiddenV alueFromArray' %} 270 if method.name in ('addEventListener', 'addListener') else 'removeHiddenV alueFromArray' %}
271 {% set argument_index = '1' if interface_name == 'EventTarget' else '0' %} 271 {% set argument_index = '1' if interface_name == 'EventTarget' else '0' %}
272 {# Length check needed to skip action on legacy calls without enough arguments. 272 {# Length check needed to skip action on legacy calls without enough arguments.
273 http://crbug.com/353484 #} 273 http://crbug.com/353484 #}
274 if (info.Length() >= {{argument_index}} + 1 && listener && !impl->toNode()) 274 if (info.Length() >= {{argument_index}} + 1 && listener && !impl->toNode())
275 {{hidden_dependency_action}}(info.GetIsolate(), info.Holder(), info[{{argume nt_index}}], {{v8_class}}::eventListenerCacheIndex); 275 {{hidden_dependency_action}}(info.GetIsolate(), info.Holder(), info[{{argume nt_index}}], {{v8_class}}::eventListenerCacheIndex);
276 {% endif %} 276 {% endif %}
277 {% endmacro %} 277 {% endmacro %}
278 278
279 279
280 {######################################} 280 {######################################}
281 {% macro union_type_method_call_and_set_return_value(method) %} 281 {% macro union_type_method_call_and_set_return_value(method) %}
Jens Widell 2014/10/28 11:31:38 Could the scope of this macro now be reduced to ju
bashi 2014/10/29 01:34:32 Took the later approach, and removed special code
282 {% for argument in method.union_arguments %} 282 {{method.cpp_type}} result;
283 {{argument.cpp_type}} {{argument.cpp_value}}{{argument.cpp_type_initializer}};
284 {% endfor %}
285 {{method.cpp_value}}; 283 {{method.cpp_value}};
286 {% if method.is_null_expression %}{# used by getters #} 284 {% if method.is_null_expression %}{# used by getters #}
287 if ({{method.is_null_expression}}) 285 if ({{method.is_null_expression}})
288 return; 286 return;
289 {% endif %} 287 {% endif %}
290 {% for argument in method.union_arguments %} 288 {% for member in method.union_result_members %}
291 if ({{argument.null_check_value}}) { 289 if ({{member.null_check_value}}) {
292 {{argument.v8_set_return_value}}; 290 {{member.v8_set_return_value}};
293 return; 291 return;
294 } 292 }
295 {% endfor %} 293 {% endfor %}
296 {# Fall back to null if none of the union members results are returned #} 294 {# Fall back to null if none of the union members results are returned #}
297 {% if method.is_null_expression %} 295 {% if method.is_null_expression %}
298 ASSERT_NOT_REACHED(); 296 ASSERT_NOT_REACHED();
299 {% else %} 297 {% else %}
300 v8SetReturnValueNull(info); 298 v8SetReturnValueNull(info);
301 {% endif %} 299 {% endif %}
302 {% endmacro %} 300 {% endmacro %}
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after
656 {% for method in conditionally_enabled_methods %} 654 {% for method in conditionally_enabled_methods %}
657 {% filter per_context_enabled(method.per_context_enabled_function) %} 655 {% filter per_context_enabled(method.per_context_enabled_function) %}
658 {% filter exposed(method.exposed_test) %} 656 {% filter exposed(method.exposed_test) %}
659 prototypeObject->Set(v8AtomicString(isolate, "{{method.name}}"), v8::Functio nTemplate::New(isolate, {{cpp_class_or_partial}}V8Internal::{{method.name}}Metho dCallback, v8Undefined(), defaultSignature, {{method.number_of_required_argument s}})->GetFunction()); 657 prototypeObject->Set(v8AtomicString(isolate, "{{method.name}}"), v8::Functio nTemplate::New(isolate, {{cpp_class_or_partial}}V8Internal::{{method.name}}Metho dCallback, v8Undefined(), defaultSignature, {{method.number_of_required_argument s}})->GetFunction());
660 {% endfilter %} 658 {% endfilter %}
661 {% endfilter %} 659 {% endfilter %}
662 {% endfor %} 660 {% endfor %}
663 {% endif %} 661 {% endif %}
664 } 662 }
665 {%- endmacro %} 663 {%- endmacro %}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698