Prevent changing AST expression type from outside
TIntermNode classes now contain all the logic for setting node types.
Changing the constant values of constant union nodes from outside is
also not necessary anymore.
BUG=angleproject:2267
TEST=angle_unittests
Change-Id: Ic10d41b1e5f93152df440a655057591dc1b783b0
Reviewed-on: https://chromium-review.googlesource.com/863626
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
diff --git a/src/compiler/translator/ParseContext.cpp b/src/compiler/translator/ParseContext.cpp
index 139fe56..c6bb87f 100644
--- a/src/compiler/translator/ParseContext.cpp
+++ b/src/compiler/translator/ParseContext.cpp
@@ -4054,8 +4054,9 @@
{
TConstantUnion *safeConstantUnion = new TConstantUnion();
safeConstantUnion->setIConst(safeIndex);
- indexConstantUnion->replaceConstantUnion(safeConstantUnion);
- indexConstantUnion->getTypePointer()->setBasicType(EbtInt);
+ indexExpression = new TIntermConstantUnion(
+ safeConstantUnion, TType(EbtInt, indexExpression->getPrecision(),
+ indexExpression->getQualifier()));
}
TIntermBinary *node =
@@ -5435,9 +5436,7 @@
",");
}
- TIntermBinary *commaNode = new TIntermBinary(EOpComma, left, right);
- TQualifier resultQualifier = TIntermBinary::GetCommaQualifier(mShaderVersion, left, right);
- commaNode->getTypePointer()->setQualifier(resultQualifier);
+ TIntermBinary *commaNode = TIntermBinary::CreateComma(left, right, mShaderVersion);
return expressionOrFoldedResult(commaNode);
}