| OLD | NEW |
| 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 #} |
| 11 {% if method.number_of_required_arguments and not method.overload_index %} | 11 {% if method.number_of_required_arguments and not method.overload_index %} |
| 12 if (UNLIKELY(info.Length() < {{method.number_of_required_arguments}})) { | 12 if (UNLIKELY(info.Length() < {{method.number_of_required_arguments}})) { |
| 13 {{throw_minimum_arity_type_error(method, method.number_of_required_argum
ents)}}; | 13 {{throw_minimum_arity_type_error(method, method.number_of_required_argum
ents) | indent(8)}} |
| 14 return; | 14 return; |
| 15 } | 15 } |
| 16 {% endif %} | 16 {% endif %} |
| 17 {% if not method.is_static %} | 17 {% if not method.is_static %} |
| 18 {{cpp_class}}* impl = {{v8_class}}::toNative(info.Holder()); | 18 {{cpp_class}}* impl = {{v8_class}}::toNative(info.Holder()); |
| 19 {% endif %} | 19 {% endif %} |
| 20 {% if method.is_custom_element_callbacks %} | 20 {% if method.is_custom_element_callbacks %} |
| 21 CustomElementCallbackDispatcher::CallbackDeliveryScope deliveryScope; | 21 CustomElementCallbackDispatcher::CallbackDeliveryScope deliveryScope; |
| 22 {% endif %} | 22 {% endif %} |
| 23 {# Security checks #} | 23 {# Security checks #} |
| (...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 314 {# Fall back to null if none of the union members results are returned #} | 314 {# Fall back to null if none of the union members results are returned #} |
| 315 v8SetReturnValueNull(info); | 315 v8SetReturnValueNull(info); |
| 316 {% endmacro %} | 316 {% endmacro %} |
| 317 | 317 |
| 318 | 318 |
| 319 {######################################} | 319 {######################################} |
| 320 {% macro throw_type_error(method, error_message) %} | 320 {% macro throw_type_error(method, error_message) %} |
| 321 {% if method.has_exception_state %} | 321 {% if method.has_exception_state %} |
| 322 exceptionState.throwTypeError({{error_message}}); | 322 exceptionState.throwTypeError({{error_message}}); |
| 323 {{throw_from_exception_state(method)}}; | 323 {{throw_from_exception_state(method)}}; |
| 324 {% elif method.is_constructor %} | 324 {% elif method.idl_type == 'Promise' %} |
| 325 {% if method.idl_type == 'Promise' %} | 325 v8SetReturnValue(info, ScriptPromise::rejectRaw(info.GetIsolate(), V8ThrowExcept
ion::createTypeError({{type_error_message(method, error_message)}}, info.GetIsol
ate()))); |
| 326 {# FIXME: reduce code duplication between sync / async exception handling. #} | |
| 327 v8SetReturnValue(info, ScriptPromise::rejectWithTypeError(ScriptState::current(i
nfo.GetIsolate()), ExceptionMessages::failedToConstruct("{{interface_name}}", {{
error_message}})).v8Value()); | |
| 328 {% else %} | 326 {% else %} |
| 329 V8ThrowException::throwTypeError(ExceptionMessages::failedToConstruct("{{interfa
ce_name}}", {{error_message}}), info.GetIsolate()); | 327 V8ThrowException::throwTypeError({{type_error_message(method, error_message)}},
info.GetIsolate()); |
| 330 {% endif %} | |
| 331 {% else %}{# method.has_exception_state #} | |
| 332 {% if method.idl_type == 'Promise' %} | |
| 333 v8SetReturnValue(info, ScriptPromise::rejectWithTypeError(ScriptState::current(i
nfo.GetIsolate()), ExceptionMessages::failedToExecute("{{method.name}}", "{{inte
rface_name}}", {{error_message}})).v8Value()); | |
| 334 {% else %} | |
| 335 V8ThrowException::throwTypeError(ExceptionMessages::failedToExecute("{{method.na
me}}", "{{interface_name}}", {{error_message}}), info.GetIsolate()); | |
| 336 {% endif %} | |
| 337 {% endif %}{# method.has_exception_state #} | 328 {% endif %}{# method.has_exception_state #} |
| 338 {% endmacro %} | 329 {% endmacro %} |
| 339 | 330 |
| 340 | 331 |
| 341 {######################################} | 332 {######################################} |
| 333 {% macro type_error_message(method, error_message) %} |
| 334 {% if method.is_constructor %} |
| 335 ExceptionMessages::failedToConstruct("{{interface_name}}", {{error_message}}) |
| 336 {%- else %} |
| 337 ExceptionMessages::failedToExecute("{{method.name}}", "{{interface_name}}", {{er
ror_message}}) |
| 338 {%- endif %} |
| 339 {%- endmacro %} |
| 340 |
| 341 |
| 342 {######################################} |
| 342 {% macro throw_from_exception_state(method) %} | 343 {% macro throw_from_exception_state(method) %} |
| 343 {% if method.idl_type == 'Promise' %} | 344 {% if method.idl_type == 'Promise' %} |
| 344 v8SetReturnValue(info, exceptionState.reject(ScriptState::current(info.GetIsolat
e())).v8Value()) | 345 v8SetReturnValue(info, exceptionState.reject(ScriptState::current(info.GetIsolat
e())).v8Value()) |
| 345 {%- else %} | 346 {%- else %} |
| 346 exceptionState.throwIfNeeded() | 347 exceptionState.throwIfNeeded() |
| 347 {%- endif %} | 348 {%- endif %} |
| 348 {%- endmacro %} | 349 {%- endmacro %} |
| 349 | 350 |
| 350 | 351 |
| 351 {######################################} | 352 {######################################} |
| 352 {% macro throw_arity_type_error(method, valid_arities) %} | 353 {% macro throw_minimum_arity_type_error(method, number_of_required_arguments) %} |
| 353 {% if method.idl_type == 'Promise' %} | |
| 354 {% if method.has_exception_state %} | 354 {% if method.has_exception_state %} |
| 355 v8SetReturnValue(info, ScriptPromise::rejectWithArityTypeError(ScriptState::curr
ent(info.GetIsolate()), exceptionState, {{valid_arities}}, info.Length()).v8Valu
e()) | 355 setMinimumArityTypeError(exceptionState, {{number_of_required_arguments}}, info.
Length()); |
| 356 {%- elif method.is_constructor %} | 356 {{throw_from_exception_state(method)}}; |
| 357 v8SetReturnValue(info, ScriptPromise::rejectWithArityTypeErrorForConstructor(Scr
iptState::current(info.GetIsolate()), "{{interface_name}}", {{valid_arities}}, i
nfo.Length()).v8Value()) | 357 {%- elif method.idl_type == 'Promise' %} |
| 358 v8SetReturnValue(info, ScriptPromise::rejectRaw(info.GetIsolate(), {{create_mini
mum_arity_type_error_without_exception_state(method, number_of_required_argument
s)}})); |
| 358 {%- else %} | 359 {%- else %} |
| 359 v8SetReturnValue(info, ScriptPromise::rejectWithArityTypeErrorForMethod(ScriptSt
ate::current(info.GetIsolate()), "{{method.name}}", "{{interface_name}}", {{vali
d_arities}}, info.Length()).v8Value()) | 360 V8ThrowException::throwException({{create_minimum_arity_type_error_without_excep
tion_state(method, number_of_required_arguments)}}, info.GetIsolate()); |
| 360 {%- endif %} | 361 {%- endif %} |
| 361 {%- else %}{# methods.idl_type == 'Promise' #} | 362 {%- endmacro %} |
| 362 {% if method.has_exception_state %} | |
| 363 throwArityTypeError(exceptionState, {{valid_arities}}, info.Length()) | |
| 364 {%- elif method.is_constructor %} | |
| 365 throwArityTypeErrorForConstructor("{{interface_name}}", {{valid_arities}}, info.
Length(), info.GetIsolate()) | |
| 366 {%- else %} | |
| 367 throwArityTypeErrorForMethod("{{method.name}}", "{{interface_name}}", {{valid_ar
ities}}, info.Length(), info.GetIsolate()) | |
| 368 {%- endif %} | |
| 369 {%- endif %}{# methods.idl_type == 'Promise' #} | |
| 370 {% endmacro %} | |
| 371 | 363 |
| 372 | 364 |
| 373 {######################################} | 365 {######################################} |
| 374 {% macro throw_minimum_arity_type_error(method, number_of_required_arguments) %} | 366 {% macro create_minimum_arity_type_error_without_exception_state(method, number_
of_required_arguments) %} |
| 375 {% if method.idl_type == 'Promise' %} | 367 {% if method.is_constructor %} |
| 376 {% if method.has_exception_state %} | 368 createMinimumArityTypeErrorForConstructor("{{interface_name}}", {{number_of_requ
ired_arguments}}, info.Length(), info.GetIsolate()) |
| 377 v8SetReturnValue(info, ScriptPromise::rejectWithMinimumArityTypeError(ScriptStat
e::current(info.GetIsolate()), exceptionState, {{number_of_required_arguments}},
info.Length()).v8Value()) | |
| 378 {%- elif method.is_constructor %} | |
| 379 v8SetReturnValue(info, ScriptPromise::rejectWithMinimumArityTypeErrorForConstruc
tor(ScriptState::current(info.GetIsolate()), "{{interface_name}}", {{number_of_r
equired_arguments}}, info.Length()).v8Value()) | |
| 380 {%- else %} | 369 {%- else %} |
| 381 v8SetReturnValue(info, ScriptPromise::rejectWithMinimumArityTypeErrorForMethod(S
criptState::current(info.GetIsolate()), "{{method.name}}", "{{interface_name}}",
{{number_of_required_arguments}}, info.Length()).v8Value()) | 370 createMinimumArityTypeErrorForMethod("{{method.name}}", "{{interface_name}}", {{
number_of_required_arguments}}, info.Length(), info.GetIsolate()) |
| 382 {%- endif %} | 371 {%- endif %} |
| 383 {%- else %}{# methods.idl_type == 'Promise' #} | 372 {%- endmacro %} |
| 384 {% if method.has_exception_state %} | |
| 385 throwMinimumArityTypeError(exceptionState, {{number_of_required_arguments}}, inf
o.Length()) | |
| 386 {%- elif method.is_constructor %} | |
| 387 throwMinimumArityTypeErrorForConstructor("{{interface_name}}", {{number_of_requi
red_arguments}}, info.Length(), info.GetIsolate()) | |
| 388 {%- else %} | |
| 389 throwMinimumArityTypeErrorForMethod("{{method.name}}", "{{interface_name}}", {{n
umber_of_required_arguments}}, info.Length(), info.GetIsolate()) | |
| 390 {%- endif %} | |
| 391 {%- endif %}{# methods.idl_type == 'Promise' #} | |
| 392 {% endmacro %} | |
| 393 | 373 |
| 394 | 374 |
| 395 {##############################################################################} | 375 {##############################################################################} |
| 376 {# FIXME: We should return a rejected Promise if an error occurs in this |
| 377 function when ALL methods in this overload return Promise. In order to do so, |
| 378 we must ensure either ALL or NO methods in this overload return Promise #} |
| 396 {% macro overload_resolution_method(overloads, world_suffix) %} | 379 {% macro overload_resolution_method(overloads, world_suffix) %} |
| 397 static void {{overloads.name}}Method{{world_suffix}}(const v8::FunctionCallbackI
nfo<v8::Value>& info) | 380 static void {{overloads.name}}Method{{world_suffix}}(const v8::FunctionCallbackI
nfo<v8::Value>& info) |
| 398 { | 381 { |
| 399 ExceptionState exceptionState(ExceptionState::ExecutionContext, "{{overloads
.name}}", "{{interface_name}}", info.Holder(), info.GetIsolate()); | 382 ExceptionState exceptionState(ExceptionState::ExecutionContext, "{{overloads
.name}}", "{{interface_name}}", info.Holder(), info.GetIsolate()); |
| 400 {% if overloads.measure_all_as %} | 383 {% if overloads.measure_all_as %} |
| 401 UseCounter::count(callingExecutionContext(info.GetIsolate()), UseCounter::{{
overloads.measure_all_as}}); | 384 UseCounter::count(callingExecutionContext(info.GetIsolate()), UseCounter::{{
overloads.measure_all_as}}); |
| 402 {% endif %} | 385 {% endif %} |
| 403 {% if overloads.deprecate_all_as %} | 386 {% if overloads.deprecate_all_as %} |
| 404 UseCounter::countDeprecation(callingExecutionContext(info.GetIsolate()), Use
Counter::{{overloads.deprecate_all_as}}); | 387 UseCounter::countDeprecation(callingExecutionContext(info.GetIsolate()), Use
Counter::{{overloads.deprecate_all_as}}); |
| 405 {% endif %} | 388 {% endif %} |
| (...skipping 20 matching lines...) Expand all Loading... |
| 426 } | 409 } |
| 427 {% endfilter %} | 410 {% endfilter %} |
| 428 {% endfor %} | 411 {% endfor %} |
| 429 break; | 412 break; |
| 430 {% endfor %} | 413 {% endfor %} |
| 431 default: | 414 default: |
| 432 {# Invalid arity, throw error #} | 415 {# Invalid arity, throw error #} |
| 433 {# Report full list of valid arities if gaps and above minimum #} | 416 {# Report full list of valid arities if gaps and above minimum #} |
| 434 {% if overloads.valid_arities %} | 417 {% if overloads.valid_arities %} |
| 435 if (info.Length() >= {{overloads.minarg}}) { | 418 if (info.Length() >= {{overloads.minarg}}) { |
| 436 throwArityTypeError(exceptionState, "{{overloads.valid_arities}}", i
nfo.Length()); | 419 setArityTypeError(exceptionState, "{{overloads.valid_arities}}", inf
o.Length()); |
| 420 exceptionState.throwIfNeeded(); |
| 437 return; | 421 return; |
| 438 } | 422 } |
| 439 {% endif %} | 423 {% endif %} |
| 440 {# Otherwise just report "not enough arguments" #} | 424 {# Otherwise just report "not enough arguments" #} |
| 441 exceptionState.throwTypeError(ExceptionMessages::notEnoughArguments({{ov
erloads.minarg}}, info.Length())); | 425 exceptionState.throwTypeError(ExceptionMessages::notEnoughArguments({{ov
erloads.minarg}}, info.Length())); |
| 442 exceptionState.throwIfNeeded(); | 426 exceptionState.throwIfNeeded(); |
| 443 return; | 427 return; |
| 444 } | 428 } |
| 445 {# No match, throw error #} | 429 {# No match, throw error #} |
| 446 exceptionState.throwTypeError("No function was found that matched the signat
ure provided."); | 430 exceptionState.throwTypeError("No function was found that matched the signat
ure provided."); |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 607 v8SetReturnValue(info, info.Holder()); | 591 v8SetReturnValue(info, info.Holder()); |
| 608 return; | 592 return; |
| 609 } | 593 } |
| 610 {% endif %} | 594 {% endif %} |
| 611 {% if constructor.has_exception_state %} | 595 {% if constructor.has_exception_state %} |
| 612 ExceptionState exceptionState(ExceptionState::ConstructionContext, "{{interf
ace_name}}", info.Holder(), info.GetIsolate()); | 596 ExceptionState exceptionState(ExceptionState::ConstructionContext, "{{interf
ace_name}}", info.Holder(), info.GetIsolate()); |
| 613 {% endif %} | 597 {% endif %} |
| 614 {# Overloaded constructors have length checked during overload resolution #} | 598 {# Overloaded constructors have length checked during overload resolution #} |
| 615 {% if constructor.number_of_required_arguments and not constructor.overload_
index %} | 599 {% if constructor.number_of_required_arguments and not constructor.overload_
index %} |
| 616 if (UNLIKELY(info.Length() < {{constructor.number_of_required_arguments}}))
{ | 600 if (UNLIKELY(info.Length() < {{constructor.number_of_required_arguments}}))
{ |
| 617 {{throw_minimum_arity_type_error(constructor, constructor.number_of_requ
ired_arguments)}}; | 601 {{throw_minimum_arity_type_error(constructor, constructor.number_of_requ
ired_arguments) | indent(8)}} |
| 618 return; | 602 return; |
| 619 } | 603 } |
| 620 {% endif %} | 604 {% endif %} |
| 621 {% if constructor.arguments %} | 605 {% if constructor.arguments %} |
| 622 {{generate_arguments(constructor) | indent}} | 606 {{generate_arguments(constructor) | indent}} |
| 623 {% endif %} | 607 {% endif %} |
| 624 {{cpp_method_call(constructor, constructor.v8_set_return_value, constructor.
cpp_value) | indent}} | 608 {{cpp_method_call(constructor, constructor.v8_set_return_value, constructor.
cpp_value) | indent}} |
| 625 } | 609 } |
| 626 {% endmacro %} | 610 {% endmacro %} |
| 627 | 611 |
| 628 | 612 |
| 629 {##############################################################################} | 613 {##############################################################################} |
| 630 {% macro generate_constructor_wrapper(constructor) %} | 614 {% macro generate_constructor_wrapper(constructor) %} |
| 631 {% if has_custom_wrap %} | 615 {% if has_custom_wrap %} |
| 632 v8::Handle<v8::Object> wrapper = wrap(impl.get(), info.Holder(), info.GetIsolate
()); | 616 v8::Handle<v8::Object> wrapper = wrap(impl.get(), info.Holder(), info.GetIsolate
()); |
| 633 {% else %} | 617 {% else %} |
| 634 {% set constructor_class = v8_class + ('Constructor' | 618 {% set constructor_class = v8_class + ('Constructor' |
| 635 if constructor.is_named_constructor else | 619 if constructor.is_named_constructor else |
| 636 '') %} | 620 '') %} |
| 637 v8::Handle<v8::Object> wrapper = info.Holder(); | 621 v8::Handle<v8::Object> wrapper = info.Holder(); |
| 638 V8DOMWrapper::associateObjectWithWrapper<{{v8_class}}>(impl.release(), &{{constr
uctor_class}}::wrapperTypeInfo, wrapper, info.GetIsolate(), {{wrapper_configurat
ion}}); | 622 V8DOMWrapper::associateObjectWithWrapper<{{v8_class}}>(impl.release(), &{{constr
uctor_class}}::wrapperTypeInfo, wrapper, info.GetIsolate(), {{wrapper_configurat
ion}}); |
| 639 {% endif %} | 623 {% endif %} |
| 640 v8SetReturnValue(info, wrapper); | 624 v8SetReturnValue(info, wrapper); |
| 641 {% endmacro %} | 625 {% endmacro %} |
| OLD | NEW |