Split TIntermFunctionPrototype from TIntermAggregate

Function prototypes now have their own class TIntermFunctionPrototype.
It's only used for prototypes, not function parameter lists.

TIntermAggregate is still used for parameter lists and function calls.

BUGS=angleproject:1490
TEST=angle_unittests

Change-Id: I6e246ad00a29c2335bd2ab7f61cf73fe463b74bb
Reviewed-on: https://chromium-review.googlesource.com/427944
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
diff --git a/src/compiler/translator/intermOut.cpp b/src/compiler/translator/intermOut.cpp
index 088448b..b538f2b 100644
--- a/src/compiler/translator/intermOut.cpp
+++ b/src/compiler/translator/intermOut.cpp
@@ -49,6 +49,7 @@
     bool visitIfElse(Visit visit, TIntermIfElse *node) override;
     bool visitSwitch(Visit visit, TIntermSwitch *node) override;
     bool visitCase(Visit visit, TIntermCase *node) override;
+    bool visitFunctionPrototype(Visit visit, TIntermFunctionPrototype *node) override;
     bool visitFunctionDefinition(Visit visit, TIntermFunctionDefinition *node) override;
     bool visitAggregate(Visit visit, TIntermAggregate *) override;
     bool visitBlock(Visit visit, TIntermBlock *) override;
@@ -506,6 +507,18 @@
     return true;
 }
 
+bool TOutputTraverser::visitFunctionPrototype(Visit visit, TIntermFunctionPrototype *node)
+{
+    TInfoSinkBase &out = sink;
+
+    OutputTreeText(out, node, mDepth);
+    OutputFunction(out, "Function Prototype", node->getFunctionSymbolInfo());
+    out << " (" << node->getCompleteString() << ")";
+    out << "\n";
+
+    return true;
+}
+
 bool TOutputTraverser::visitAggregate(Visit visit, TIntermAggregate *node)
 {
     TInfoSinkBase &out = sink;
@@ -527,9 +540,6 @@
         case EOpParameters:
             out << "Function Parameters: ";
             break;
-        case EOpPrototype:
-            OutputFunction(out, "Function Prototype", node->getFunctionSymbolInfo());
-            break;
 
         case EOpConstructFloat:
             out << "Construct float";