| Index: Source/bindings/templates/interface.cpp
|
| diff --git a/Source/bindings/templates/interface.cpp b/Source/bindings/templates/interface.cpp
|
| index 7a52a835454614793d759fa1a00727b8ec181018..66a684a96a2d7fcab4c2f1d378322673f3a52dc5 100644
|
| --- a/Source/bindings/templates/interface.cpp
|
| +++ b/Source/bindings/templates/interface.cpp
|
| @@ -678,7 +678,7 @@ static void constructor(const v8::FunctionCallbackInfo<v8::Value>& info)
|
|
|
| {##############################################################################}
|
| {% block visit_dom_wrapper %}
|
| -{% if reachable_node_function or reachable_node_reference_function or
|
| +{% if reachable_node_function or
|
| set_wrapper_reference_to_list %}
|
| void {{v8_class}}::visitDOMWrapper(void* object, const v8::Persistent<v8::Object>& wrapper, v8::Isolate* isolate)
|
| {
|
| @@ -696,14 +696,13 @@ void {{v8_class}}::visitDOMWrapper(void* object, const v8::Persistent<v8::Object
|
| {% endfor %}
|
| {% endif %}
|
| {% if reachable_node_function %}
|
| - if (Node* owner = impl->{{reachable_node_function}}()) {
|
| - Node* root = V8GCController::opaqueRootForGC(owner, isolate);
|
| + // The {{reachable_node_function}}() method may return a reference or a pointer but
|
| + // RefPtr can be constructed from either.
|
| + if (RefPtr<Node> owner = PassRefPtr<Node>(impl->{{reachable_node_function}}())) {
|
| + Node* root = V8GCController::opaqueRootForGC(owner.get(), isolate);
|
| isolate->SetReferenceFromGroup(v8::UniqueId(reinterpret_cast<intptr_t>(root)), wrapper);
|
| return;
|
| }
|
| - {% elif reachable_node_reference_function %}
|
| - Node* root = V8GCController::opaqueRootForGC(&impl->{{reachable_node_reference_function}}(), isolate);
|
| - isolate->SetReferenceFromGroup(v8::UniqueId(reinterpret_cast<intptr_t>(root)), wrapper);
|
| {% endif %}
|
| {% if reachable_node_function or set_wrapper_reference_to_list %}
|
| setObjectGroup(object, wrapper, isolate);
|
|
|