| Index: Source/bindings/templates/methods.cpp | 
| diff --git a/Source/bindings/templates/methods.cpp b/Source/bindings/templates/methods.cpp | 
| index dc4c6c056086660b95067762469ad7af99ba2458..d08e90f85a018c776988099720ebec1ea2b69ef2 100644 | 
| --- a/Source/bindings/templates/methods.cpp | 
| +++ b/Source/bindings/templates/methods.cpp | 
| @@ -44,9 +44,9 @@ static void {{method.name}}{{method.overload_index}}Method{{world_suffix}}(const | 
| } | 
| {% endif %} | 
| {# Call method #} | 
| -    {% for argument in method.arguments %} | 
| -    {{generate_argument(method, argument, world_suffix) | indent}} | 
| -    {% endfor %} | 
| +    {% if method.arguments %} | 
| +    {{generate_arguments(method, world_suffix) | indent}} | 
| +    {% endif %} | 
| {% if world_suffix %} | 
| {{cpp_method_call(method, method.v8_set_return_value_for_main_world, method.cpp_value) | indent}} | 
| {% else %} | 
| @@ -73,6 +73,42 @@ if (listener && !impl->toNode()) | 
|  | 
|  | 
| {######################################} | 
| +{% macro generate_arguments(method, world_suffix) %} | 
| +{% for argument in method.arguments %} | 
| +{{generate_argument_var_declaration(argument)}}; | 
| +{% endfor %} | 
| +{ | 
| +    {% if method.arguments_need_try_catch %} | 
| +    v8::TryCatch block; | 
| +    {% endif %} | 
| +    {% for argument in method.arguments %} | 
| +    {{generate_argument(method, argument, world_suffix) | indent}} | 
| +    {% endfor %} | 
| +} | 
| +{% endmacro %} | 
| + | 
| + | 
| +{######################################} | 
| +{% macro generate_argument_var_declaration(argument) %} | 
| +{% if argument.is_callback_interface %} | 
| +{# FIXME: remove EventListener special case #} | 
| +{% if argument.idl_type == 'EventListener' %} | 
| +RefPtr<{{argument.idl_type}}> {{argument.name}} | 
| +{%- else %} | 
| +OwnPtr<{{argument.idl_type}}> {{argument.name}} | 
| +{%- endif %}{# argument.idl_type == 'EventListener' #} | 
| +{%- elif argument.is_clamp %}{# argument.is_callback_interface #} | 
| +{# NaN is treated as 0: http://www.w3.org/TR/WebIDL/#es-type-mapping #} | 
| +{{argument.cpp_type}} {{argument.name}} = 0 | 
| +{%- elif argument.is_variadic_wrapper_type %} | 
| +{{argument.vector_type}}<{{argument.cpp_type}} > {{argument.name}} | 
| +{%- else %} | 
| +{{argument.cpp_type}} {{argument.name}} | 
| +{%- endif %} | 
| +{% endmacro %} | 
| + | 
| + | 
| +{######################################} | 
| {% macro generate_argument(method, argument, world_suffix) %} | 
| {% if argument.is_optional and not argument.has_default and | 
| argument.idl_type != 'Dictionary' and | 
| @@ -100,20 +136,19 @@ if (info.Length() > {{argument.index}} && {% if argument.is_nullable %}!isUndefi | 
| (argument.index + 1, argument.idl_type)) | indent}} | 
| return; | 
| } | 
| -{% endif %} | 
| +{% endif %}{# argument.has_type_checking_interface #} | 
| {% if argument.is_callback_interface %} | 
| {# FIXME: remove EventListener special case #} | 
| {% if argument.idl_type == 'EventListener' %} | 
| {% if method.name == 'removeEventListener' %} | 
| -RefPtr<{{argument.idl_type}}> {{argument.name}} = V8EventListenerList::getEventListener(info[1], false, ListenerFindOnly); | 
| +{{argument.name}} = V8EventListenerList::getEventListener(info[1], false, ListenerFindOnly); | 
| {% else %}{# method.name == 'addEventListener' #} | 
| -RefPtr<{{argument.idl_type}}> {{argument.name}} = V8EventListenerList::getEventListener(info[1], false, ListenerFindOrCreate); | 
| +{{argument.name}} = V8EventListenerList::getEventListener(info[1], false, ListenerFindOrCreate); | 
| {% endif %}{# method.name #} | 
| -{% else %} | 
| +{% else %}{# argument.idl_type == 'EventListener' #} | 
| {# Callback functions must be functions: | 
| http://www.w3.org/TR/WebIDL/#es-callback-function #} | 
| {% if argument.is_optional %} | 
| -OwnPtr<{{argument.idl_type}}> {{argument.name}}; | 
| if (info.Length() > {{argument.index}} && !isUndefinedOrNull(info[{{argument.index}}])) { | 
| if (!info[{{argument.index}}]->IsFunction()) { | 
| {{throw_type_error(method, | 
| @@ -123,30 +158,29 @@ if (info.Length() > {{argument.index}} && !isUndefinedOrNull(info[{{argument.ind | 
| } | 
| {{argument.name}} = V8{{argument.idl_type}}::create(v8::Handle<v8::Function>::Cast(info[{{argument.index}}]), currentExecutionContext(info.GetIsolate())); | 
| } | 
| -{% else %} | 
| +{% else %}{# argument.is_optional #} | 
| if (info.Length() <= {{argument.index}} || !{% if argument.is_nullable %}(info[{{argument.index}}]->IsFunction() || info[{{argument.index}}]->IsNull()){% else %}info[{{argument.index}}]->IsFunction(){% endif %}) { | 
| {{throw_type_error(method, | 
| '"The callback provided as parameter %s is not a function."' % | 
| (argument.index + 1)) | indent }} | 
| return; | 
| } | 
| -OwnPtr<{{argument.idl_type}}> {{argument.name}} = {% if argument.is_nullable %}info[{{argument.index}}]->IsNull() ? nullptr : {% endif %}V8{{argument.idl_type}}::create(v8::Handle<v8::Function>::Cast(info[{{argument.index}}]), currentExecutionContext(info.GetIsolate())); | 
| +{{argument.name}} = {% if argument.is_nullable %}info[{{argument.index}}]->IsNull() ? nullptr : {% endif %}V8{{argument.idl_type}}::create(v8::Handle<v8::Function>::Cast(info[{{argument.index}}]), currentExecutionContext(info.GetIsolate())); | 
| {% endif %}{# argument.is_optional #} | 
| {% endif %}{# argument.idl_type == 'EventListener' #} | 
| {% elif argument.is_clamp %}{# argument.is_callback_interface #} | 
| {# NaN is treated as 0: http://www.w3.org/TR/WebIDL/#es-type-mapping #} | 
| -{{argument.cpp_type}} {{argument.name}} = 0; | 
| -TONATIVE_VOID(double, {{argument.name}}NativeValue, info[{{argument.index}}]->NumberValue()); | 
| +double {{argument.name}}NativeValue; | 
| +TONATIVE_VOID_NO_DECL({{argument.name}}NativeValue, info[{{argument.index}}]->NumberValue()); | 
| if (!std::isnan({{argument.name}}NativeValue)) | 
| {# IDL type is used for clamping, for the right bounds, since different | 
| IDL integer types have same internal C++ type (int or unsigned) #} | 
| {{argument.name}} = clampTo<{{argument.idl_type}}>({{argument.name}}NativeValue); | 
| {% elif argument.idl_type == 'SerializedScriptValue' %} | 
| -{{argument.cpp_type}} {{argument.name}} = SerializedScriptValue::create(info[{{argument.index}}], 0, 0, exceptionState, info.GetIsolate()); | 
| +{{argument.name}} = SerializedScriptValue::create(info[{{argument.index}}], 0, 0, exceptionState, info.GetIsolate()); | 
| if (exceptionState.throwIfNeeded()) | 
| return; | 
| {% elif argument.is_variadic_wrapper_type %} | 
| -{{argument.vector_type}}<{{argument.cpp_type}} > {{argument.name}}; | 
| for (int i = {{argument.index}}; i < info.Length(); ++i) { | 
| if (!V8{{argument.idl_type}}::hasInstance(info[i], info.GetIsolate())) { | 
| {{throw_type_error(method, '"parameter %s is not of type \'%s\'."' % | 
| @@ -407,9 +441,9 @@ static void constructor{{constructor.overload_index}}(const v8::FunctionCallback | 
| return; | 
| } | 
| {% endif %} | 
| -    {% for argument in constructor.arguments %} | 
| -    {{generate_argument(constructor, argument) | indent}} | 
| -    {% endfor %} | 
| +    {% if constructor.arguments %} | 
| +    {{generate_arguments(constructor) | indent}} | 
| +    {% endif %} | 
| {% if is_constructor_call_with_execution_context %} | 
| ExecutionContext* context = currentExecutionContext(isolate); | 
| {% endif %} | 
| @@ -473,9 +507,9 @@ static void {{v8_class}}ConstructorCallback(const v8::FunctionCallbackInfo<v8::V | 
| return; | 
| } | 
| {% endif %} | 
| -    {% for argument in constructor.arguments %} | 
| -    {{generate_argument(constructor, argument) | indent}} | 
| -    {% endfor %} | 
| +    {% if constructor.arguments %} | 
| +    {{generate_arguments(constructor) | indent}} | 
| +    {% endif %} | 
| {{constructor.cpp_type}} impl = {{cpp_class}}::createForJSConstructor({{constructor.argument_list | join(', ')}}); | 
| {% if is_constructor_raises_exception %} | 
| if (exceptionState.throwIfNeeded()) | 
|  |