OSDN Git Service

Completing the "length()" intrinsic function implementation
authorAlexis Hetu <sugoi@google.com>
Mon, 6 Jul 2015 15:38:53 +0000 (11:38 -0400)
committerAlexis Hétu <sugoi@google.com>
Wed, 8 Jul 2015 19:45:40 +0000 (19:45 +0000)
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>
src/OpenGL/compiler/glslang.y
src/OpenGL/compiler/glslang_tab.cpp

index 47f22fa..17b5cee 100644 (file)
@@ -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);
     }
     ;
 
index ca610b9..c5c98bb 100644 (file)
@@ -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;