From 950cb449744bc5d4e3d8ad8432e4549f5e29863c Mon Sep 17 00:00:00 2001 From: Alexis Hetu Date: Mon, 6 Jul 2015 11:38:53 -0400 Subject: [PATCH] Completing the "length()" intrinsic function implementation MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Nicolas Capens --- src/OpenGL/compiler/glslang.y | 15 ++++---- src/OpenGL/compiler/glslang_tab.cpp | 69 +++++++++++++++++++------------------ 2 files changed, 43 insertions(+), 41 deletions(-) diff --git a/src/OpenGL/compiler/glslang.y b/src/OpenGL/compiler/glslang.y index 47f22fad9..17b5ceec0 100644 --- a/src/OpenGL/compiler/glslang.y +++ b/src/OpenGL/compiler/glslang.y @@ -290,7 +290,7 @@ integer_expression 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 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_generic 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 @@ function_call_header_with_parameters 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 ca610b934..c5c98bb30 100644 --- a/src/OpenGL/compiler/glslang_tab.cpp +++ b/src/OpenGL/compiler/glslang_tab.cpp @@ -779,33 +779,33 @@ static const yytype_int16 yyrhs[] = 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 @@ yyreduce: { 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 @@ yyreduce: { (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 @@ yyreduce: { (yyval.interm).function = (yyvsp[(1) - (2)].interm.function); - (yyval.interm).intermNode = 0; + (yyval.interm).nodePair.node1 = nullptr; } break; @@ -2678,7 +2679,7 @@ yyreduce: { (yyval.interm).function = (yyvsp[(1) - (1)].interm.function); - (yyval.interm).intermNode = 0; + (yyval.interm).nodePair.node1 = nullptr; } break; @@ -2688,7 +2689,7 @@ yyreduce: 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 @@ yyreduce: 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; -- 2.11.0