translator: Refactor node replacement APIs.

BUG=angleproject:851

Change-Id: I50c3b3a4f00b27fed85f09509738513a441c7b5b
Reviewed-on: https://chromium-review.googlesource.com/363990
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
diff --git a/src/compiler/translator/EmulatePrecision.cpp b/src/compiler/translator/EmulatePrecision.cpp
index 11fa35e..5f1454b 100644
--- a/src/compiler/translator/EmulatePrecision.cpp
+++ b/src/compiler/translator/EmulatePrecision.cpp
@@ -495,9 +495,8 @@
 {
     if (canRoundFloat(node->getType()) && !mDeclaringVariables && !isLValueRequiredHere())
     {
-        TIntermNode *parent = getParentNode();
         TIntermNode *replacement = createRoundingFunctionCallNode(node);
-        mReplacements.push_back(NodeUpdateEntry(parent, node, replacement, true));
+        queueReplacement(node, replacement, OriginalNode::BECOMES_CHILD);
     }
 }
 
@@ -543,7 +542,7 @@
                 break;
             }
             TIntermNode *replacement = createRoundingFunctionCallNode(node);
-            mReplacements.push_back(NodeUpdateEntry(parent, node, replacement, true));
+            queueReplacement(node, replacement, OriginalNode::BECOMES_CHILD);
             break;
           }
 
@@ -553,10 +552,9 @@
               mEmulateCompoundAdd.insert(
                   TypePair(type.getBuiltInTypeNameString(),
                            node->getRight()->getType().getBuiltInTypeNameString()));
-              TIntermNode *parent      = getParentNode();
               TIntermNode *replacement = createCompoundAssignmentFunctionCallNode(
                   node->getLeft(), node->getRight(), "add");
-              mReplacements.push_back(NodeUpdateEntry(parent, node, replacement, false));
+              queueReplacement(node, replacement, OriginalNode::IS_DROPPED);
               break;
           }
           case EOpSubAssign:
@@ -564,10 +562,9 @@
               mEmulateCompoundSub.insert(
                   TypePair(type.getBuiltInTypeNameString(),
                            node->getRight()->getType().getBuiltInTypeNameString()));
-              TIntermNode *parent      = getParentNode();
               TIntermNode *replacement = createCompoundAssignmentFunctionCallNode(
                   node->getLeft(), node->getRight(), "sub");
-              mReplacements.push_back(NodeUpdateEntry(parent, node, replacement, false));
+              queueReplacement(node, replacement, OriginalNode::IS_DROPPED);
               break;
           }
           case EOpMulAssign:
@@ -579,10 +576,9 @@
               mEmulateCompoundMul.insert(
                   TypePair(type.getBuiltInTypeNameString(),
                            node->getRight()->getType().getBuiltInTypeNameString()));
-              TIntermNode *parent      = getParentNode();
               TIntermNode *replacement = createCompoundAssignmentFunctionCallNode(
                   node->getLeft(), node->getRight(), "mul");
-              mReplacements.push_back(NodeUpdateEntry(parent, node, replacement, false));
+              queueReplacement(node, replacement, OriginalNode::IS_DROPPED);
               break;
           }
           case EOpDivAssign:
@@ -590,10 +586,9 @@
               mEmulateCompoundDiv.insert(
                   TypePair(type.getBuiltInTypeNameString(),
                            node->getRight()->getType().getBuiltInTypeNameString()));
-              TIntermNode *parent      = getParentNode();
               TIntermNode *replacement = createCompoundAssignmentFunctionCallNode(
                   node->getLeft(), node->getRight(), "div");
-              mReplacements.push_back(NodeUpdateEntry(parent, node, replacement, false));
+              queueReplacement(node, replacement, OriginalNode::IS_DROPPED);
               break;
           }
           default:
@@ -649,7 +644,7 @@
                 parentUsesResult(parent, node))
             {
                 TIntermNode *replacement = createRoundingFunctionCallNode(node);
-                mReplacements.push_back(NodeUpdateEntry(parent, node, replacement, true));
+                queueReplacement(node, replacement, OriginalNode::BECOMES_CHILD);
             }
         }
         break;
@@ -659,7 +654,7 @@
         if (canRoundFloat(node->getType()) && visit == PreVisit && parentUsesResult(parent, node))
         {
             TIntermNode *replacement = createRoundingFunctionCallNode(node);
-            mReplacements.push_back(NodeUpdateEntry(parent, node, replacement, true));
+            queueReplacement(node, replacement, OriginalNode::BECOMES_CHILD);
         }
         break;
     }
@@ -681,9 +676,8 @@
       default:
         if (canRoundFloat(node->getType()) && visit == PreVisit)
         {
-            TIntermNode *parent = getParentNode();
             TIntermNode *replacement = createRoundingFunctionCallNode(node);
-            mReplacements.push_back(NodeUpdateEntry(parent, node, replacement, true));
+            queueReplacement(node, replacement, OriginalNode::BECOMES_CHILD);
         }
         break;
     }