Represent vector construction with ConstructorVector.

This constructor aggregates scalars and smaller vectors together into
one vector. It is not responsible for splats or typecasts; those are
handled in separate classes which were added previously.

Change-Id: I9194bec50d58d94c331e0bb883686e26b86af347
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/392816
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
diff --git a/src/sksl/SkSLInliner.cpp b/src/sksl/SkSLInliner.cpp
index 1ec8742..cbd973b 100644
--- a/src/sksl/SkSLInliner.cpp
+++ b/src/sksl/SkSLInliner.cpp
@@ -22,6 +22,7 @@
 #include "src/sksl/ir/SkSLConstructorMatrixResize.h"
 #include "src/sksl/ir/SkSLConstructorScalarCast.h"
 #include "src/sksl/ir/SkSLConstructorSplat.h"
+#include "src/sksl/ir/SkSLConstructorVector.h"
 #include "src/sksl/ir/SkSLConstructorVectorCast.h"
 #include "src/sksl/ir/SkSLContinueStatement.h"
 #include "src/sksl/ir/SkSLDiscardStatement.h"
@@ -348,6 +349,12 @@
                                           *ctor.type().clone(symbolTableForExpression),
                                           expr(ctor.argument()));
         }
+        case Expression::Kind::kConstructorVector: {
+            const ConstructorVector& ctor = expression.as<ConstructorVector>();
+            return ConstructorVector::Make(*fContext, offset,
+                                           *ctor.type().clone(symbolTableForExpression),
+                                           argList(ctor.arguments()));
+        }
         case Expression::Kind::kConstructorVectorCast: {
             const ConstructorVectorCast& ctor = expression.as<ConstructorVectorCast>();
             return ConstructorVectorCast::Make(*fContext, offset,
@@ -954,6 +961,7 @@
             case Expression::Kind::kConstructorMatrixResize:
             case Expression::Kind::kConstructorScalarCast:
             case Expression::Kind::kConstructorSplat:
+            case Expression::Kind::kConstructorVector:
             case Expression::Kind::kConstructorVectorCast: {
                 AnyConstructor& constructorExpr = (*expr)->asAnyConstructor();
                 for (std::unique_ptr<Expression>& arg : constructorExpr.argumentSpan()) {