Completing the "length()" intrinsic function implementation
The implementation of the length() function was already added
to TParseContext::addFunctionCallOrMethod() in a previous cl,
but it was still unused because addFunctionCallOrMethod() was
always called with the 3rd argument as nullptr. This cl adds
the missing code required to get the length function working.
Change-Id: I3339ae8b60f5f577caa0a39f88c6ed0c626879b2
Reviewed-on: https://swiftshader-review.googlesource.com/3641
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/OpenGL/compiler/glslang.y b/src/OpenGL/compiler/glslang.y
index 47f22fa..17b5cee 100644
--- a/src/OpenGL/compiler/glslang.y
+++ b/src/OpenGL/compiler/glslang.y
@@ -290,7 +290,7 @@
function_call
: function_call_or_method {
bool fatalError = false;
- $$ = context->addFunctionCallOrMethod($1.function, $1.intermNode, nullptr, @1, &fatalError);
+ $$ = context->addFunctionCallOrMethod($1.function, $1.nodePair.node1, $1.nodePair.node2, @1, &fatalError);
if (fatalError)
{
YYERROR;
@@ -301,11 +301,12 @@
function_call_or_method
: function_call_generic {
$$ = $1;
+ $$.nodePair.node2 = nullptr;
}
| postfix_expression DOT function_call_generic {
- context->error(@3, "methods are not supported", "");
- context->recover();
+ ES3_ONLY("", @3, "methods");
$$ = $3;
+ $$.nodePair.node2 = $1;
}
;
@@ -321,11 +322,11 @@
function_call_header_no_parameters
: function_call_header VOID_TYPE {
$$.function = $1;
- $$.intermNode = 0;
+ $$.nodePair.node1 = nullptr;
}
| function_call_header {
$$.function = $1;
- $$.intermNode = 0;
+ $$.nodePair.node1 = nullptr;
}
;
@@ -334,13 +335,13 @@
TParameter param = { 0, new TType($2->getType()) };
$1->addParameter(param);
$$.function = $1;
- $$.intermNode = $2;
+ $$.nodePair.node1 = $2;
}
| function_call_header_with_parameters COMMA assignment_expression {
TParameter param = { 0, new TType($3->getType()) };
$1.function->addParameter(param);
$$.function = $1.function;
- $$.intermNode = context->intermediate.growAggregate($1.intermNode, $3, @2);
+ $$.nodePair.node1 = context->intermediate.growAggregate($1.intermNode, $3, @2);
}
;
diff --git a/src/OpenGL/compiler/glslang_tab.cpp b/src/OpenGL/compiler/glslang_tab.cpp
index ca610b9..c5c98bb 100644
--- a/src/OpenGL/compiler/glslang_tab.cpp
+++ b/src/OpenGL/compiler/glslang_tab.cpp
@@ -779,33 +779,33 @@
static const yytype_uint16 yyrline[] =
{
0, 214, 214, 233, 236, 241, 246, 251, 256, 262,
- 265, 268, 271, 274, 277, 283, 291, 302, 305, 313,
- 316, 322, 326, 333, 339, 348, 356, 362, 369, 379,
- 382, 392, 402, 424, 425, 426, 427, 435, 436, 440,
- 444, 452, 453, 456, 462, 463, 467, 474, 475, 478,
- 481, 484, 490, 491, 494, 500, 501, 508, 509, 516,
- 517, 524, 525, 531, 532, 538, 539, 545, 546, 552,
- 553, 561, 562, 563, 564, 566, 567, 568, 571, 574,
- 577, 580, 586, 589, 600, 608, 616, 643, 649, 656,
- 660, 664, 668, 675, 712, 715, 722, 730, 751, 772,
- 782, 810, 815, 825, 830, 840, 843, 846, 849, 855,
- 862, 865, 869, 873, 878, 883, 890, 894, 898, 902,
- 907, 912, 916, 923, 933, 939, 942, 948, 954, 961,
- 970, 979, 982, 985, 992, 996, 1000, 1005, 1013, 1016,
- 1020, 1024, 1033, 1042, 1050, 1060, 1067, 1070, 1073, 1079,
- 1086, 1089, 1095, 1098, 1101, 1107, 1110, 1115, 1130, 1134,
- 1138, 1142, 1146, 1150, 1155, 1160, 1165, 1170, 1175, 1180,
- 1185, 1190, 1195, 1200, 1205, 1210, 1216, 1222, 1228, 1234,
- 1240, 1246, 1252, 1258, 1264, 1269, 1274, 1283, 1288, 1293,
- 1298, 1303, 1308, 1313, 1318, 1323, 1328, 1333, 1338, 1343,
- 1348, 1353, 1366, 1366, 1369, 1369, 1375, 1378, 1394, 1397,
- 1406, 1410, 1416, 1423, 1438, 1442, 1446, 1447, 1453, 1454,
- 1455, 1456, 1457, 1458, 1459, 1463, 1464, 1464, 1464, 1474,
- 1475, 1479, 1479, 1480, 1480, 1485, 1488, 1498, 1501, 1507,
- 1508, 1512, 1520, 1524, 1531, 1531, 1538, 1541, 1550, 1555,
- 1572, 1572, 1577, 1577, 1584, 1584, 1592, 1595, 1601, 1604,
- 1610, 1614, 1621, 1624, 1627, 1630, 1633, 1642, 1646, 1653,
- 1656, 1662, 1662
+ 265, 268, 271, 274, 277, 283, 291, 302, 306, 314,
+ 317, 323, 327, 334, 340, 349, 357, 363, 370, 380,
+ 383, 393, 403, 425, 426, 427, 428, 436, 437, 441,
+ 445, 453, 454, 457, 463, 464, 468, 475, 476, 479,
+ 482, 485, 491, 492, 495, 501, 502, 509, 510, 517,
+ 518, 525, 526, 532, 533, 539, 540, 546, 547, 553,
+ 554, 562, 563, 564, 565, 567, 568, 569, 572, 575,
+ 578, 581, 587, 590, 601, 609, 617, 644, 650, 657,
+ 661, 665, 669, 676, 713, 716, 723, 731, 752, 773,
+ 783, 811, 816, 826, 831, 841, 844, 847, 850, 856,
+ 863, 866, 870, 874, 879, 884, 891, 895, 899, 903,
+ 908, 913, 917, 924, 934, 940, 943, 949, 955, 962,
+ 971, 980, 983, 986, 993, 997, 1001, 1006, 1014, 1017,
+ 1021, 1025, 1034, 1043, 1051, 1061, 1068, 1071, 1074, 1080,
+ 1087, 1090, 1096, 1099, 1102, 1108, 1111, 1116, 1131, 1135,
+ 1139, 1143, 1147, 1151, 1156, 1161, 1166, 1171, 1176, 1181,
+ 1186, 1191, 1196, 1201, 1206, 1211, 1217, 1223, 1229, 1235,
+ 1241, 1247, 1253, 1259, 1265, 1270, 1275, 1284, 1289, 1294,
+ 1299, 1304, 1309, 1314, 1319, 1324, 1329, 1334, 1339, 1344,
+ 1349, 1354, 1367, 1367, 1370, 1370, 1376, 1379, 1395, 1398,
+ 1407, 1411, 1417, 1424, 1439, 1443, 1447, 1448, 1454, 1455,
+ 1456, 1457, 1458, 1459, 1460, 1464, 1465, 1465, 1465, 1475,
+ 1476, 1480, 1480, 1481, 1481, 1486, 1489, 1499, 1502, 1508,
+ 1509, 1513, 1521, 1525, 1532, 1532, 1539, 1542, 1551, 1556,
+ 1573, 1573, 1578, 1578, 1585, 1585, 1593, 1596, 1602, 1605,
+ 1611, 1615, 1622, 1625, 1628, 1631, 1634, 1643, 1647, 1654,
+ 1657, 1663, 1663
};
#endif
@@ -2628,7 +2628,7 @@
{
bool fatalError = false;
- (yyval.interm.intermTypedNode) = context->addFunctionCallOrMethod((yyvsp[(1) - (1)].interm).function, (yyvsp[(1) - (1)].interm).intermNode, nullptr, (yylsp[(1) - (1)]), &fatalError);
+ (yyval.interm.intermTypedNode) = context->addFunctionCallOrMethod((yyvsp[(1) - (1)].interm).function, (yyvsp[(1) - (1)].interm).nodePair.node1, (yyvsp[(1) - (1)].interm).nodePair.node2, (yylsp[(1) - (1)]), &fatalError);
if (fatalError)
{
YYERROR;
@@ -2640,15 +2640,16 @@
{
(yyval.interm) = (yyvsp[(1) - (1)].interm);
+ (yyval.interm).nodePair.node2 = nullptr;
}
break;
case 18:
{
- context->error((yylsp[(3) - (3)]), "methods are not supported", "");
- context->recover();
+ ES3_ONLY("", (yylsp[(3) - (3)]), "methods");
(yyval.interm) = (yyvsp[(3) - (3)].interm);
+ (yyval.interm).nodePair.node2 = (yyvsp[(1) - (3)].interm.intermTypedNode);
}
break;
@@ -2670,7 +2671,7 @@
{
(yyval.interm).function = (yyvsp[(1) - (2)].interm.function);
- (yyval.interm).intermNode = 0;
+ (yyval.interm).nodePair.node1 = nullptr;
}
break;
@@ -2678,7 +2679,7 @@
{
(yyval.interm).function = (yyvsp[(1) - (1)].interm.function);
- (yyval.interm).intermNode = 0;
+ (yyval.interm).nodePair.node1 = nullptr;
}
break;
@@ -2688,7 +2689,7 @@
TParameter param = { 0, new TType((yyvsp[(2) - (2)].interm.intermTypedNode)->getType()) };
(yyvsp[(1) - (2)].interm.function)->addParameter(param);
(yyval.interm).function = (yyvsp[(1) - (2)].interm.function);
- (yyval.interm).intermNode = (yyvsp[(2) - (2)].interm.intermTypedNode);
+ (yyval.interm).nodePair.node1 = (yyvsp[(2) - (2)].interm.intermTypedNode);
}
break;
@@ -2698,7 +2699,7 @@
TParameter param = { 0, new TType((yyvsp[(3) - (3)].interm.intermTypedNode)->getType()) };
(yyvsp[(1) - (3)].interm).function->addParameter(param);
(yyval.interm).function = (yyvsp[(1) - (3)].interm).function;
- (yyval.interm).intermNode = context->intermediate.growAggregate((yyvsp[(1) - (3)].interm).intermNode, (yyvsp[(3) - (3)].interm.intermTypedNode), (yylsp[(2) - (3)]));
+ (yyval.interm).nodePair.node1 = context->intermediate.growAggregate((yyvsp[(1) - (3)].interm).intermNode, (yyvsp[(3) - (3)].interm.intermTypedNode), (yylsp[(2) - (3)]));
}
break;