Only set declaration operator if not already set.
This allows us to return different operators from single
declarations, which will be useful for treating invariant
declarations as different operators.
BUG=angle:711
Change-Id: Id278b91854bbefe8e635380d7b27198198236fef
Reviewed-on: https://chromium-review.googlesource.com/212939
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
diff --git a/src/compiler/translator/glslang.y b/src/compiler/translator/glslang.y
index 831b54c..c0479f6 100644
--- a/src/compiler/translator/glslang.y
+++ b/src/compiler/translator/glslang.y
@@ -785,9 +785,10 @@
context->symbolTable.pop();
}
| init_declarator_list SEMICOLON {
- if ($1.intermAggregate)
- $1.intermAggregate->setOp(EOpDeclaration);
- $$ = $1.intermAggregate;
+ TIntermAggregate *aggNode = $1.intermAggregate;
+ if (aggNode && aggNode->getOp() == EOpNull)
+ aggNode->setOp(EOpDeclaration);
+ $$ = aggNode;
}
| PRECISION precision_qualifier type_specifier_no_prec SEMICOLON {
if (($2 == EbpHigh) && (context->shaderType == GL_FRAGMENT_SHADER) && !context->fragmentPrecisionHigh) {
diff --git a/src/compiler/translator/glslang_tab.cpp b/src/compiler/translator/glslang_tab.cpp
index 49c267b..2fb9089 100644
--- a/src/compiler/translator/glslang_tab.cpp
+++ b/src/compiler/translator/glslang_tab.cpp
@@ -802,25 +802,25 @@
544, 545, 553, 564, 568, 569, 579, 589, 599, 612,
613, 623, 636, 640, 644, 648, 649, 662, 663, 676,
677, 690, 691, 708, 709, 722, 723, 724, 725, 726,
- 730, 733, 744, 752, 760, 787, 792, 803, 807, 811,
- 815, 822, 878, 881, 888, 896, 917, 938, 948, 976,
- 981, 991, 996, 1006, 1009, 1012, 1015, 1021, 1028, 1031,
- 1035, 1039, 1043, 1050, 1054, 1058, 1065, 1069, 1073, 1081,
- 1090, 1096, 1099, 1105, 1111, 1118, 1127, 1136, 1144, 1147,
- 1154, 1158, 1165, 1168, 1172, 1176, 1185, 1194, 1202, 1212,
- 1224, 1227, 1230, 1236, 1243, 1246, 1252, 1255, 1258, 1264,
- 1267, 1282, 1286, 1290, 1294, 1298, 1302, 1307, 1312, 1317,
- 1322, 1327, 1332, 1337, 1342, 1347, 1352, 1357, 1362, 1367,
- 1372, 1377, 1382, 1387, 1392, 1397, 1402, 1407, 1411, 1415,
- 1419, 1423, 1427, 1431, 1435, 1439, 1443, 1447, 1451, 1455,
- 1459, 1463, 1467, 1475, 1483, 1487, 1500, 1500, 1503, 1503,
- 1509, 1512, 1528, 1531, 1540, 1544, 1550, 1557, 1572, 1576,
- 1580, 1581, 1587, 1588, 1589, 1590, 1591, 1595, 1596, 1596,
- 1596, 1606, 1607, 1611, 1611, 1612, 1612, 1617, 1620, 1630,
- 1633, 1639, 1640, 1644, 1652, 1656, 1666, 1671, 1688, 1688,
- 1693, 1693, 1700, 1700, 1708, 1711, 1717, 1720, 1726, 1730,
- 1737, 1744, 1751, 1758, 1769, 1778, 1782, 1789, 1792, 1798,
- 1798
+ 730, 733, 744, 752, 760, 787, 793, 804, 808, 812,
+ 816, 823, 879, 882, 889, 897, 918, 939, 949, 977,
+ 982, 992, 997, 1007, 1010, 1013, 1016, 1022, 1029, 1032,
+ 1036, 1040, 1044, 1051, 1055, 1059, 1066, 1070, 1074, 1082,
+ 1091, 1097, 1100, 1106, 1112, 1119, 1128, 1137, 1145, 1148,
+ 1155, 1159, 1166, 1169, 1173, 1177, 1186, 1195, 1203, 1213,
+ 1225, 1228, 1231, 1237, 1244, 1247, 1253, 1256, 1259, 1265,
+ 1268, 1283, 1287, 1291, 1295, 1299, 1303, 1308, 1313, 1318,
+ 1323, 1328, 1333, 1338, 1343, 1348, 1353, 1358, 1363, 1368,
+ 1373, 1378, 1383, 1388, 1393, 1398, 1403, 1408, 1412, 1416,
+ 1420, 1424, 1428, 1432, 1436, 1440, 1444, 1448, 1452, 1456,
+ 1460, 1464, 1468, 1476, 1484, 1488, 1501, 1501, 1504, 1504,
+ 1510, 1513, 1529, 1532, 1541, 1545, 1551, 1558, 1573, 1577,
+ 1581, 1582, 1588, 1589, 1590, 1591, 1592, 1596, 1597, 1597,
+ 1597, 1607, 1608, 1612, 1612, 1613, 1613, 1618, 1621, 1631,
+ 1634, 1640, 1641, 1645, 1653, 1657, 1667, 1672, 1689, 1689,
+ 1694, 1694, 1701, 1701, 1709, 1712, 1718, 1721, 1727, 1731,
+ 1738, 1745, 1752, 1759, 1770, 1779, 1783, 1790, 1793, 1799,
+ 1799
};
#endif
@@ -3313,9 +3313,10 @@
case 75:
{
- if ((yyvsp[(1) - (2)].interm).intermAggregate)
- (yyvsp[(1) - (2)].interm).intermAggregate->setOp(EOpDeclaration);
- (yyval.interm.intermNode) = (yyvsp[(1) - (2)].interm).intermAggregate;
+ TIntermAggregate *aggNode = (yyvsp[(1) - (2)].interm).intermAggregate;
+ if (aggNode && aggNode->getOp() == EOpNull)
+ aggNode->setOp(EOpDeclaration);
+ (yyval.interm.intermNode) = aggNode;
}
break;