Refactor TConstantUnion.

In preparation for constant folding fixes.

BUG=chromium:637050

Change-Id: I9ea49ce96b34c6ac3d2f0478b8fc6732c59e28be
Reviewed-on: https://chromium-review.googlesource.com/373741
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
diff --git a/src/compiler/translator/IntermNode.cpp b/src/compiler/translator/IntermNode.cpp
index 0d4104e..48949a8 100644
--- a/src/compiler/translator/IntermNode.cpp
+++ b/src/compiler/translator/IntermNode.cpp
@@ -1126,12 +1126,12 @@
       case EOpAdd:
         resultArray = new TConstantUnion[objectSize];
         for (size_t i = 0; i < objectSize; i++)
-            resultArray[i] = leftArray[i] + rightArray[i];
+            resultArray[i] = TConstantUnion::add(leftArray[i], rightArray[i], diagnostics);
         break;
       case EOpSub:
         resultArray = new TConstantUnion[objectSize];
         for (size_t i = 0; i < objectSize; i++)
-            resultArray[i] = leftArray[i] - rightArray[i];
+            resultArray[i] = TConstantUnion::sub(leftArray[i], rightArray[i], diagnostics);
         break;
 
       case EOpMul:
@@ -1139,7 +1139,7 @@
       case EOpMatrixTimesScalar:
         resultArray = new TConstantUnion[objectSize];
         for (size_t i = 0; i < objectSize; i++)
-            resultArray[i] = leftArray[i] * rightArray[i];
+            resultArray[i] = TConstantUnion::mul(leftArray[i], rightArray[i], diagnostics);
         break;
 
       case EOpMatrixTimesMatrix: