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

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: 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 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 V8DOMWrapper::associateObjectWithWrapper<{{v8_class}}>(event.release(), &{{v 8_class}}::wrapperTypeInfo, wrapper, info.GetIsolate(), WrapperConfiguration::De pendent); 251 V8DOMWrapper::associateObjectWithWrapper<{{v8_class}}>(event.release(), &{{v 8_class}}::wrapperTypeInfo, wrapper, info.GetIsolate(), WrapperConfiguration::De pendent);
252 v8SetReturnValue(info, wrapper); 252 v8SetReturnValue(info, wrapper);
253 } 253 }
254 254
255 {% endif %} 255 {% endif %}
256 {% endblock %} 256 {% endblock %}
257 257
258 258
259 {##############################################################################} 259 {##############################################################################}
260 {% block visit_dom_wrapper %} 260 {% block visit_dom_wrapper %}
261 {% if generate_visit_dom_wrapper_function %} 261 {% if check_reachable_method or set_reference_list %}
262 void {{v8_class}}::visitDOMWrapper(void* object, const v8::Persistent<v8::Object >& wrapper, v8::Isolate* isolate) 262 void {{v8_class}}::visitDOMWrapper(void* object, const v8::Persistent<v8::Object >& wrapper, v8::Isolate* isolate)
263 { 263 {
264 {{cpp_class}}* impl = fromInternalPointer(object); 264 {{cpp_class}}* impl = fromInternalPointer(object);
265 if (Node* owner = impl->{{generate_visit_dom_wrapper_function}}()) { 265 {% if set_reference_list %}
266 v8::Local<v8::Object> creationContext = v8::Local<v8::Object>::New(isolate, wrapper);
haraken 2013/12/17 09:13:09 kouhei: Why do we need to create a new Local handl
kouhei (in TOK) 2013/12/17 09:15:00 I don't remember if there was a specific reason. I
267 V8WrapperInstantiationScope scope(creationContext, isolate);
268 {% for set_reference in set_reference_list %}
269 {{set_reference.idl_type}}* {{set_reference.name}} = impl->{{set_reference.n ame}}();
270 if ({{set_reference.name}}) {
271 if (!DOMDataStore::containsWrapper<{{set_reference.v8_type}}>({{set_refe rence.name}}, isolate))
272 wrap({{set_reference.name}}, creationContext, isolate);
273 DOMDataStore::setWrapperReference<{{set_reference.v8_type}}>(wrapper, {{ set_reference.name}}, isolate);
274 }
275 {% endfor %}
276 {% endif %}
277 {% if check_reachable_method %}
278 if (Node* owner = impl->{{check_reachable_method}}()) {
haraken 2013/12/17 09:13:09 check_reachable_method => reachable_node_function
Nils Barth (inactive) 2013/12/18 01:57:49 Good point, fixed!
266 setObjectGroup(V8GCController::opaqueRootForGC(owner, isolate), wrapper, isolate); 279 setObjectGroup(V8GCController::opaqueRootForGC(owner, isolate), wrapper, isolate);
267 return; 280 return;
268 } 281 }
282 {% endif %}
269 setObjectGroup(object, wrapper, isolate); 283 setObjectGroup(object, wrapper, isolate);
270 } 284 }
271 285
272 {% endif %} 286 {% endif %}
273 {% endblock %} 287 {% endblock %}
274 288
275 289
276 {##############################################################################} 290 {##############################################################################}
277 {% block class_attributes %} 291 {% block class_attributes %}
278 {# FIXME: rename to install_attributes and put into configure_class_template #} 292 {# FIXME: rename to install_attributes and put into configure_class_template #}
(...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after
725 fromInternalPointer(object)->deref(); 739 fromInternalPointer(object)->deref();
726 } 740 }
727 741
728 template<> 742 template<>
729 v8::Handle<v8::Value> toV8NoInline({{cpp_class}}* impl, v8::Handle<v8::Object> c reationContext, v8::Isolate* isolate) 743 v8::Handle<v8::Value> toV8NoInline({{cpp_class}}* impl, v8::Handle<v8::Object> c reationContext, v8::Isolate* isolate)
730 { 744 {
731 return toV8(impl, creationContext, isolate); 745 return toV8(impl, creationContext, isolate);
732 } 746 }
733 747
734 {% endblock %} 748 {% 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