The binding for getDistributedNodes unnecessarily makes a vector of nodes
authorrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 22 Sep 2015 00:26:06 +0000 (00:26 +0000)
committerrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 22 Sep 2015 00:26:06 +0000 (00:26 +0000)
https://bugs.webkit.org/show_bug.cgi?id=149434

Reviewed by Darin Adler.

Added a jsArray for const Vector<T*>* so that we can generate the binding code for getDistributedNodes()
without having to create Vector<RefPtr<Node>> out of Vector<Node*>*.

* bindings/js/JSDOMBinding.h:
(WebCore::jsArray): Added.
* html/HTMLSlotElement.cpp:
(WebCore::HTMLSlotElement::assignedNodes):
(WebCore::HTMLSlotElement::getDistributedNodes): Deleted.
* html/HTMLSlotElement.h:
* html/HTMLSlotElement.idl:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@190093 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/bindings/js/JSDOMBinding.h
Source/WebCore/html/HTMLSlotElement.cpp
Source/WebCore/html/HTMLSlotElement.h
Source/WebCore/html/HTMLSlotElement.idl

index e004906..ffd8707 100644 (file)
@@ -1,3 +1,21 @@
+2015-09-21  Ryosuke Niwa  <rniwa@webkit.org>
+
+        The binding for getDistributedNodes unnecessarily makes a vector of nodes
+        https://bugs.webkit.org/show_bug.cgi?id=149434
+
+        Reviewed by Darin Adler.
+
+        Added a jsArray for const Vector<T*>* so that we can generate the binding code for getDistributedNodes()
+        without having to create Vector<RefPtr<Node>> out of Vector<Node*>*.
+
+        * bindings/js/JSDOMBinding.h:
+        (WebCore::jsArray): Added.
+        * html/HTMLSlotElement.cpp:
+        (WebCore::HTMLSlotElement::assignedNodes):
+        (WebCore::HTMLSlotElement::getDistributedNodes): Deleted.
+        * html/HTMLSlotElement.h:
+        * html/HTMLSlotElement.idl:
+
 2015-09-21  Brent Fulgham  <bfulgham@apple.com>
 
         [Win] Show tiled drawing debug overlay on Windows
index a20c794..7312e8d 100644 (file)
@@ -455,6 +455,13 @@ template<typename T, size_t inlineCapacity> JSC::JSValue jsArray(JSC::ExecState*
     return JSC::constructArray(exec, nullptr, globalObject, list);
 }
 
+template<typename T, size_t inlineCapacity> inline JSC::JSValue jsArray(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, const Vector<T, inlineCapacity>* vector)
+{
+    if (!vector)
+        return JSC::constructEmptyArray(exec, nullptr, globalObject, 0);
+    return jsArray(exec, globalObject, *vector);
+}
+
 WEBCORE_EXPORT JSC::JSValue jsArray(JSC::ExecState*, JSDOMGlobalObject*, PassRefPtr<DOMStringList>);
 
 inline PassRefPtr<JSC::ArrayBufferView> toArrayBufferView(JSC::JSValue value)
index 720a34a..cfe03ca 100644 (file)
@@ -94,16 +94,4 @@ const Vector<Node*>* HTMLSlotElement::assignedNodes() const
     return shadowRoot->assignedNodesForSlot(*this);
 }
 
-Vector<RefPtr<Node>> HTMLSlotElement::getDistributedNodes() const
-{
-    Vector<RefPtr<Node>> distributedNodes;
-
-    if (auto* assignedNodes = this->assignedNodes()) {
-        for (auto* node : *assignedNodes)
-            distributedNodes.append(node);
-    }
-
-    return distributedNodes;
-}
-
 }
index 098916c..f798473 100644 (file)
@@ -38,8 +38,6 @@ public:
 
     const Vector<Node*>* assignedNodes() const;
 
-    Vector<RefPtr<Node>> getDistributedNodes() const;
-
 private:
     HTMLSlotElement(const QualifiedName&, Document&);
 
index b056cef..e16d742 100644 (file)
@@ -30,6 +30,6 @@
 ] interface HTMLSlotElement : HTMLElement {
 
     [Reflect] attribute DOMString name;
-    sequence<Node> getDistributedNodes();
+    [ImplementedAs=assignedNodes] sequence<Node> getDistributedNodes();
 
 };