Commit 950cb449 by Alexis Hetu Committed by Alexis Hétu

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