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

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

Issue 114813006: IDL compiler: [SetReference] (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: gclw Created 7 years 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 | Annotate | Revision Log
OLDNEW
1 {% extends 'interface_base.cpp' %} 1 {% extends 'interface_base.cpp' %}
2 2
3 3
4 {##############################################################################} 4 {##############################################################################}
5 {% macro attribute_configuration(attribute) %} 5 {% macro attribute_configuration(attribute) %}
6 {% set getter_callback = 6 {% set getter_callback =
7 '%sV8Internal::%sAttributeGetterCallback' % 7 '%sV8Internal::%sAttributeGetterCallback' %
8 (cpp_class, attribute.name) 8 (cpp_class, attribute.name)
9 if not attribute.constructor_type else 9 if not attribute.constructor_type else
10 '{0}V8Internal::{0}ConstructorGetter'.format(interface_name) %} 10 '{0}V8Internal::{0}ConstructorGetter'.format(interface_name) %}
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 V8DOMWrapper::associateObjectWithWrapper<{{v8_class}}>(event.release(), &{{v 8_class}}::wrapperTypeInfo, wrapper, info.GetIsolate(), WrapperConfiguration::De pendent); 253 V8DOMWrapper::associateObjectWithWrapper<{{v8_class}}>(event.release(), &{{v 8_class}}::wrapperTypeInfo, wrapper, info.GetIsolate(), WrapperConfiguration::De pendent);
254 v8SetReturnValue(info, wrapper); 254 v8SetReturnValue(info, wrapper);
255 } 255 }
256 256
257 {% endif %} 257 {% endif %}
258 {% endblock %} 258 {% endblock %}
259 259
260 260
261 {##############################################################################} 261 {##############################################################################}
262 {% block visit_dom_wrapper %} 262 {% block visit_dom_wrapper %}
263 {% if generate_visit_dom_wrapper_function %} 263 {% if reachable_node_function or set_reference_list %}
264 void {{v8_class}}::visitDOMWrapper(void* object, const v8::Persistent<v8::Object >& wrapper, v8::Isolate* isolate) 264 void {{v8_class}}::visitDOMWrapper(void* object, const v8::Persistent<v8::Object >& wrapper, v8::Isolate* isolate)
265 { 265 {
266 {{cpp_class}}* impl = fromInternalPointer(object); 266 {{cpp_class}}* impl = fromInternalPointer(object);
267 if (Node* owner = impl->{{generate_visit_dom_wrapper_function}}()) { 267 {% if set_reference_list %}
268 v8::Local<v8::Object> creationContext = v8::Local<v8::Object>::New(isolate, wrapper);
269 V8WrapperInstantiationScope scope(creationContext, isolate);
270 {% for set_reference in set_reference_list %}
271 {{set_reference.idl_type}}* {{set_reference.name}} = impl->{{set_reference.n ame}}();
272 if ({{set_reference.name}}) {
273 if (!DOMDataStore::containsWrapper<{{set_reference.v8_type}}>({{set_refe rence.name}}, isolate))
274 wrap({{set_reference.name}}, creationContext, isolate);
275 DOMDataStore::setWrapperReference<{{set_reference.v8_type}}>(wrapper, {{ set_reference.name}}, isolate);
276 }
277 {% endfor %}
278 {% endif %}
279 {% if reachable_node_function %}
280 if (Node* owner = impl->{{reachable_node_function}}()) {
268 setObjectGroup(V8GCController::opaqueRootForGC(owner, isolate), wrapper, isolate); 281 setObjectGroup(V8GCController::opaqueRootForGC(owner, isolate), wrapper, isolate);
269 return; 282 return;
270 } 283 }
284 {% endif %}
271 setObjectGroup(object, wrapper, isolate); 285 setObjectGroup(object, wrapper, isolate);
272 } 286 }
273 287
274 {% endif %} 288 {% endif %}
275 {% endblock %} 289 {% endblock %}
276 290
277 291
278 {##############################################################################} 292 {##############################################################################}
279 {% block class_attributes %} 293 {% block class_attributes %}
280 {# FIXME: rename to install_attributes and put into configure_class_template #} 294 {# FIXME: rename to install_attributes and put into configure_class_template #}
(...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after
727 fromInternalPointer(object)->deref(); 741 fromInternalPointer(object)->deref();
728 } 742 }
729 743
730 template<> 744 template<>
731 v8::Handle<v8::Value> toV8NoInline({{cpp_class}}* impl, v8::Handle<v8::Object> c reationContext, v8::Isolate* isolate) 745 v8::Handle<v8::Value> toV8NoInline({{cpp_class}}* impl, v8::Handle<v8::Object> c reationContext, v8::Isolate* isolate)
732 { 746 {
733 return toV8(impl, creationContext, isolate); 747 return toV8(impl, creationContext, isolate);
734 } 748 }
735 749
736 {% endblock %} 750 {% endblock %}
OLDNEW
« no previous file with comments | « Source/bindings/scripts/unstable/v8_interface.py ('k') | Source/bindings/tests/idls/TestInterface.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698