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

Unified Diff: Source/bindings/templates/attributes.cpp

Issue 214143003: Bindings: use |holder| local variable in attribute getters and setters (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebased Created 6 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | Source/bindings/tests/results/V8SVGTestInterface.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/bindings/templates/attributes.cpp
diff --git a/Source/bindings/templates/attributes.cpp b/Source/bindings/templates/attributes.cpp
index c873f3731cefbec93507d21da8e3a2cfe8bbc56f..f2a8cf02d5b32d1eea751a4663ecc3e8ac3c9811 100644
--- a/Source/bindings/templates/attributes.cpp
+++ b/Source/bindings/templates/attributes.cpp
@@ -12,31 +12,29 @@ const v8::PropertyCallbackInfo<v8::Value>& info
attribute.idl_type == 'DOMString' and is_node %}
{% set cpp_class, v8_class = 'Element', 'V8Element' %}
{% endif %}
- {# impl #}
- {# FIXME: use a local variable for holder more often and simplify below #}
- {% if attribute.is_unforgeable or
- interface_name == 'Window' and attribute.idl_type == 'EventHandler' %}
- {% if interface_name == 'Window' %}
- v8::Handle<v8::Object> holder = info.Holder();
- {% else %}{# perform lookup first #}
+ {# holder #}
+ {% if attribute.is_unforgeable and interface_name != 'Window' %}
+ {# perform lookup first #}
{# FIXME: can we remove this lookup? #}
v8::Handle<v8::Object> holder = {{v8_class}}::findInstanceInPrototypeChain(info.This(), info.GetIsolate());
if (holder.IsEmpty())
return;
- {% endif %}{# Window #}
- {{cpp_class}}* impl = {{v8_class}}::toNative(holder);
- {% elif attribute.cached_attribute_validation_method %}
+ {% elif not attribute.is_static %}
+ v8::Handle<v8::Object> holder = info.Holder();
+ {% endif %}
+ {# impl #}
+ {% if attribute.cached_attribute_validation_method %}
v8::Handle<v8::String> propertyName = v8AtomicString(info.GetIsolate(), "{{attribute.name}}");
- {{cpp_class}}* impl = {{v8_class}}::toNative(info.Holder());
+ {{cpp_class}}* impl = {{v8_class}}::toNative(holder);
if (!impl->{{attribute.cached_attribute_validation_method}}()) {
- v8::Handle<v8::Value> jsValue = V8HiddenValue::getHiddenValue(info.GetIsolate(), info.Holder(), propertyName);
+ v8::Handle<v8::Value> jsValue = V8HiddenValue::getHiddenValue(info.GetIsolate(), holder, propertyName);
if (!jsValue.IsEmpty()) {
v8SetReturnValue(info, jsValue);
return;
}
}
- {% elif not (attribute.is_static or attribute.is_unforgeable) %}
- {{cpp_class}}* impl = {{v8_class}}::toNative(info.Holder());
+ {% elif not attribute.is_static %}
+ {{cpp_class}}* impl = {{v8_class}}::toNative(holder);
{% endif %}
{% if attribute.is_implemented_by and not attribute.is_static %}
ASSERT(impl);
@@ -51,7 +49,7 @@ const v8::PropertyCallbackInfo<v8::Value>& info
{% endif %}
{% if attribute.is_check_security_for_node or
attribute.is_getter_raises_exception %}
- ExceptionState exceptionState(ExceptionState::GetterContext, "{{attribute.name}}", "{{interface_name}}", info.Holder(), info.GetIsolate());
+ ExceptionState exceptionState(ExceptionState::GetterContext, "{{attribute.name}}", "{{interface_name}}", holder, info.GetIsolate());
{% endif %}
{% if attribute.is_nullable %}
bool isNull = false;
@@ -89,7 +87,7 @@ const v8::PropertyCallbackInfo<v8::Value>& info
}
{% endif %}
{% if attribute.cached_attribute_validation_method %}
- V8HiddenValue::setHiddenValue(info.GetIsolate(), info.Holder(), propertyName, {{attribute.cpp_value}}.v8Value());
+ V8HiddenValue::setHiddenValue(info.GetIsolate(), holder, propertyName, {{attribute.cpp_value}}.v8Value());
{% endif %}
{# v8SetReturnValue #}
{% if attribute.is_keep_alive_for_gc %}
@@ -97,9 +95,9 @@ const v8::PropertyCallbackInfo<v8::Value>& info
{{attribute.cpp_type}} result({{attribute.cpp_value}});
if (result && DOMDataStore::setReturnValueFromWrapper{{world_suffix}}<{{attribute.v8_type}}>(info.GetReturnValue(), result.get()))
return;
- v8::Handle<v8::Value> wrapper = toV8(result.get(), info.Holder(), info.GetIsolate());
+ v8::Handle<v8::Value> wrapper = toV8(result.get(), holder, info.GetIsolate());
if (!wrapper.IsEmpty()) {
- V8HiddenValue::setHiddenValue(info.GetIsolate(), info.Holder(), v8AtomicString(info.GetIsolate(), "{{attribute.name}}"), wrapper);
+ V8HiddenValue::setHiddenValue(info.GetIsolate(), holder, v8AtomicString(info.GetIsolate(), "{{attribute.name}}"), wrapper);
{{attribute.v8_set_return_value}};
}
{% elif world_suffix %}
@@ -211,9 +209,14 @@ v8::Local<v8::Value> jsValue, const v8::PropertyCallbackInfo<void>& info
is_node %}
{% set cpp_class, v8_class = 'Element', 'V8Element' %}
{% endif %}
+ {# Local variables #}
+ {% if not attribute.is_static %}
+ v8::Handle<v8::Object> holder = info.Holder();
+ {% endif %}
{% if attribute.has_setter_exception_state %}
- ExceptionState exceptionState(ExceptionState::SetterContext, "{{attribute.name}}", "{{interface_name}}", info.Holder(), info.GetIsolate());
+ ExceptionState exceptionState(ExceptionState::SetterContext, "{{attribute.name}}", "{{interface_name}}", holder, info.GetIsolate());
{% endif %}
+ {# Type checking #}
{% if attribute.has_strict_type_checking %}
{# Type checking for interface types (if interface not implemented, throw
TypeError), per http://www.w3.org/TR/WebIDL/#es-interface #}
@@ -225,12 +228,12 @@ v8::Local<v8::Value> jsValue, const v8::PropertyCallbackInfo<void>& info
{% endif %}
{# impl #}
{% if attribute.put_forwards %}
- {{cpp_class}}* proxyImpl = {{v8_class}}::toNative(info.Holder());
+ {{cpp_class}}* proxyImpl = {{v8_class}}::toNative(holder);
{{attribute.ref_ptr}}<{{attribute.idl_type}}> impl = WTF::getPtr(proxyImpl->{{attribute.name}}());
if (!impl)
return;
{% elif not attribute.is_static %}
- {{cpp_class}}* impl = {{v8_class}}::toNative(info.Holder());
+ {{cpp_class}}* impl = {{v8_class}}::toNative(holder);
{% endif %}
{% if attribute.is_implemented_by and not attribute.is_static %}
ASSERT(impl);
@@ -243,7 +246,7 @@ v8::Local<v8::Value> jsValue, const v8::PropertyCallbackInfo<void>& info
{% if attribute.idl_type != 'EventHandler' %}
{{attribute.v8_value_to_local_cpp_value}};
{% elif not is_node %}{# EventHandler hack #}
- moveEventListenerToNewWrapper(info.Holder(), {{attribute.event_handler_getter_expression}}, jsValue, {{v8_class}}::eventListenerCacheIndex, info.GetIsolate());
+ moveEventListenerToNewWrapper(holder, {{attribute.event_handler_getter_expression}}, jsValue, {{v8_class}}::eventListenerCacheIndex, info.GetIsolate());
{% endif %}
{% if attribute.enum_validation_expression %}
{# Setter ignores invalid enum values: http://www.w3.org/TR/WebIDL/#idl-enums #}
@@ -269,7 +272,7 @@ v8::Local<v8::Value> jsValue, const v8::PropertyCallbackInfo<void>& info
exceptionState.throwIfNeeded();
{% endif %}
{% if attribute.cached_attribute_validation_method %}
- V8HiddenValue::deleteHiddenValue(info.GetIsolate(), info.Holder(), v8AtomicString(info.GetIsolate(), "{{attribute.name}}")); // Invalidate the cached value.
+ V8HiddenValue::deleteHiddenValue(info.GetIsolate(), holder, v8AtomicString(info.GetIsolate(), "{{attribute.name}}")); // Invalidate the cached value.
{% endif %}
}
{% endfilter %}
« no previous file with comments | « no previous file | Source/bindings/tests/results/V8SVGTestInterface.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698