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;