diff --git a/hphp/compiler/analysis/emitter.cpp b/hphp/compiler/analysis/emitter.cpp index 7928e9ce4..d1b884ff3 100644 --- a/hphp/compiler/analysis/emitter.cpp +++ b/hphp/compiler/analysis/emitter.cpp @@ -109,6 +109,11 @@ TRACE_SET_MOD(emitter) using boost::dynamic_pointer_cast; using boost::static_pointer_cast; +namespace { + const StringData* s_continuationVarArgsLocal + = StringData::GetStaticString("0ContinuationVarArgsLocal"); +} + namespace StackSym { static const char None = 0x00; @@ -3217,6 +3222,38 @@ bool EmitterVisitor::visitImpl(ConstructPtr node) { return true; } } + } else if (call->isCallToFunction("func_num_args") && + m_curFunc->isGenerator()) { + static const StringData* s_count = + StringData::GetStaticString("count"); + + emitVirtualLocal(m_curFunc->lookupVarId(s_continuationVarArgsLocal)); + emitConvertToCell(e); + e.False(); + e.FCallBuiltin(2, 1, s_count); + m_metaInfo.add(m_ue.bcPos(), Unit::MetaInfo::NopOut, false, 0, 0); + e.UnboxR(); + return true; + } else if (call->isCallToFunction("func_get_args") && + m_curFunc->isGenerator()) { + emitVirtualLocal(m_curFunc->lookupVarId(s_continuationVarArgsLocal)); + emitConvertToCell(e); + return true; + } else if (call->isCallToFunction("func_get_arg") && + m_curFunc->isGenerator()) { + if (!params || params->getCount() == 0) { + e.Null(); + return true; + } + + visit((*params)[0]); + emitConvertToCell(e); + e.CastInt(); + emitVirtualLocal(m_curFunc->lookupVarId(s_continuationVarArgsLocal)); + emitConvertToCell(e); + e.False(); + e.ArrayIdx(); + return true; } else if (call->isCompilerCallToFunction("hphp_unpack_continuation")) { assert(!params || params->getCount() == 0); int yieldLabelCount = call->getFunctionScope()->getYieldLabelCount(); @@ -3224,16 +3261,28 @@ bool EmitterVisitor::visitImpl(ConstructPtr node) { emitContinuationSwitch(e, yieldLabelCount); return false; } else if (call->isCompilerCallToFunction("hphp_create_continuation")) { - assert(params && (params->getCount() == 3 || - params->getCount() == 4)); + assert(params && params->getCount() == 3); ExpressionPtr name = (*params)[1]; Variant nameVar; UNUSED bool isScalar = name->getScalarValue(nameVar); assert(isScalar && nameVar.isString()); + + if (m_curFunc->hasVar(s_continuationVarArgsLocal)) { + static const StringData* s_func_get_args = + StringData::GetStaticString("func_get_args"); + + Id local = m_curFunc->lookupVarId(s_continuationVarArgsLocal); + emitVirtualLocal(local); + e.FCallBuiltin(0, 0, s_func_get_args); + m_metaInfo.add(m_ue.bcPos(), Unit::MetaInfo::NopOut, false, 0, 0); + e.UnboxR(); + emitSet(e); + e.PopC(); + } + const StringData* nameStr = StringData::GetStaticString(nameVar.getStringData()); - bool callGetArgs = params->getCount() == 4; - e.CreateCont(callGetArgs, nameStr); + e.CreateCont(nameStr); return true; } else if (call->isCompilerCallToFunction("hphp_continuation_done")) { assert(params && params->getCount() == 1); @@ -5363,6 +5412,10 @@ void EmitterVisitor::emitPostponedMeths() { } } + if (p.m_meth->hasCallToGetArgs()) { + fe->allocVarId(s_continuationVarArgsLocal); + } + // Assign ids to all of the local variables eagerly. This gives us the // nice property that all named local variables will be assigned ids // 0 through k-1, while any unnamed local variable will have an id >= k. @@ -5379,7 +5432,7 @@ void EmitterVisitor::emitPostponedMeths() { if (allowOverride) attrs = attrs | AttrAllowOverride; - if (funcScope->mayUseVV()) { + if (funcScope->mayUseVV() || p.m_meth->hasCallToGetArgs()) { attrs = attrs | AttrMayUseVV; } @@ -5901,12 +5954,6 @@ bool EmitterVisitor::canEmitBuiltinCall(FunctionCallPtr fn, return false; } } - // Special handling for func_get_args and friends inside a generator. - if (m_curFunc->isGenerator() && - (name == "func_get_args" || name == "func_num_args" - || name == "func_get_arg")) { - return false; - } // in sandbox mode, don't emit FCallBuiltin for redefinable functions if (func->allowOverride() && !Option::WholeProgram) { return false; @@ -5977,46 +6024,13 @@ void EmitterVisitor::emitFuncCall(Emitter& e, FunctionCallPtr node) { } } - if (useFCallBuiltin) { - } else if (!m_curFunc->isGenerator()) { + if (!useFCallBuiltin) { fpiStart = m_ue.bcPos(); - if (nsName == nullptr) { e.FPushFuncD(numParams, nLiteral); } else { e.FPushFuncU(numParams, nsName, nLiteral); } - } else { - // Special handling for func_get_args and friends inside a generator. - const StringData* specialMethodName = nullptr; - static const StringData* contName = - StringData::GetStaticString(CONTINUATION_OBJECT_NAME); - Id contId = m_curFunc->lookupVarId(contName); - static const StringData* s_get_args = - StringData::GetStaticString("get_args"); - static const StringData* s_num_args = - StringData::GetStaticString("num_args"); - static const StringData* s_get_arg = - StringData::GetStaticString("get_arg"); - if (nameStr == "func_get_args") { - specialMethodName = s_get_args; - } else if (nameStr == "func_num_args") { - specialMethodName = s_num_args; - } else if (nameStr == "func_get_arg") { - specialMethodName = s_get_arg; - } - - if (nsName != nullptr) { - e.FPushFuncU(numParams, nsName, nLiteral); - } else if (specialMethodName != nullptr) { - emitVirtualLocal(contId); - emitCGet(e); - fpiStart = m_ue.bcPos(); - e.FPushObjMethodD(numParams, specialMethodName); - } else { - fpiStart = m_ue.bcPos(); - e.FPushFuncD(numParams, nLiteral); - } } } else { // $foo() diff --git a/hphp/compiler/parser/hphp.tab.cpp b/hphp/compiler/parser/hphp.tab.cpp index 197bd1143..9f71f4f48 100644 --- a/hphp/compiler/parser/hphp.tab.cpp +++ b/hphp/compiler/parser/hphp.tab.cpp @@ -249,7 +249,7 @@ void prepare_generator(Parser *_p, Token &stmt, Token ¶ms) { // create a generator function with original name and parameters void create_generator(Parser *_p, Token &out, Token ¶ms, Token &name, const std::string &closureName, - const char *clsname, Token *modifiers, bool getArgs, + const char *clsname, Token *modifiers, Token &origGenFunc, bool isHhvm, Token *attr) { _p->pushFuncLocation(); if (clsname) { @@ -282,18 +282,12 @@ void create_generator(Parser *_p, Token &out, Token ¶ms, _p->onCallParam(param1, ¶m1, fname, false); _p->onCallParam(param1, ¶m1, oname, false); - if (getArgs) { - Token cname; cname.setText("func_get_args"); - Token empty; - Token call; _p->onCall(call, false, cname, empty, NULL); - _p->onCallParam(param1, ¶m1, call, false); - } + Token stmts0; _p->onStatementListStart(stmts0); Token cname0; cname0.setText("hphp_create_continuation"); Token call; _p->onCall(call, false, cname0, param1, NULL, true); Token ret; _p->onReturn(ret, &call); - Token stmts0; _p->onStatementListStart(stmts0); Token stmts1; _p->addStatement(stmts1, stmts0, ret); _p->finishStatement(scont, stmts1); scont = 1; } @@ -745,7 +739,7 @@ static int yylex(YYSTYPE *token, HPHP::Location *loc, Parser *_p) { /* Line 189 of yacc.c */ -#line 749 "new_hphp.tab.cpp" +#line 743 "new_hphp.tab.cpp" /* Enabling traces. */ #ifndef YYDEBUG @@ -950,7 +944,7 @@ typedef struct YYLTYPE /* Line 264 of yacc.c */ -#line 954 "new_hphp.tab.cpp" +#line 948 "new_hphp.tab.cpp" #ifdef short # undef short @@ -1552,78 +1546,78 @@ static const yytype_int16 yyrhs[] = /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 808, 808, 808, 813, 815, 818, 819, 820, 821, - 822, 823, 826, 828, 828, 830, 830, 832, 833, 838, - 839, 840, 841, 842, 843, 847, 849, 852, 853, 854, - 855, 860, 861, 865, 866, 868, 871, 877, 884, 891, - 895, 901, 903, 906, 907, 908, 909, 912, 913, 917, - 922, 922, 926, 926, 931, 930, 934, 934, 937, 938, - 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, - 949, 952, 950, 955, 957, 965, 968, 969, 973, 974, - 975, 976, 977, 984, 990, 994, 994, 1000, 1001, 1005, - 1006, 1010, 1015, 1014, 1024, 1023, 1036, 1035, 1054, 1052, - 1071, 1070, 1079, 1077, 1089, 1088, 1100, 1098, 1111, 1112, - 1116, 1119, 1122, 1123, 1124, 1127, 1129, 1132, 1133, 1136, - 1137, 1140, 1141, 1145, 1146, 1151, 1152, 1155, 1156, 1160, - 1161, 1165, 1166, 1170, 1171, 1175, 1176, 1181, 1182, 1187, - 1188, 1189, 1190, 1193, 1196, 1198, 1201, 1202, 1206, 1208, - 1211, 1214, 1217, 1218, 1221, 1222, 1226, 1228, 1230, 1231, - 1235, 1237, 1239, 1242, 1245, 1248, 1251, 1255, 1262, 1264, - 1267, 1268, 1269, 1271, 1276, 1277, 1280, 1281, 1282, 1286, - 1287, 1289, 1290, 1294, 1296, 1299, 1299, 1303, 1302, 1306, - 1310, 1308, 1321, 1318, 1329, 1331, 1333, 1335, 1337, 1341, - 1342, 1343, 1346, 1352, 1355, 1361, 1364, 1369, 1371, 1376, - 1381, 1385, 1386, 1392, 1393, 1398, 1399, 1404, 1405, 1409, - 1410, 1414, 1416, 1422, 1427, 1428, 1430, 1434, 1435, 1436, - 1437, 1441, 1442, 1443, 1444, 1445, 1446, 1448, 1453, 1456, - 1457, 1461, 1462, 1465, 1466, 1469, 1470, 1473, 1474, 1478, - 1479, 1480, 1481, 1482, 1483, 1486, 1488, 1490, 1491, 1494, - 1496, 1500, 1501, 1503, 1504, 1507, 1511, 1512, 1516, 1517, - 1521, 1525, 1529, 1534, 1535, 1536, 1539, 1541, 1542, 1543, - 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, - 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, - 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, - 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, - 1586, 1588, 1589, 1591, 1593, 1594, 1595, 1596, 1597, 1598, - 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, - 1609, 1610, 1612, 1611, 1620, 1619, 1627, 1628, 1632, 1636, - 1640, 1646, 1650, 1656, 1658, 1662, 1664, 1668, 1673, 1674, - 1678, 1685, 1692, 1694, 1699, 1700, 1701, 1705, 1709, 1713, - 1714, 1715, 1716, 1720, 1726, 1731, 1740, 1741, 1744, 1747, - 1750, 1751, 1754, 1758, 1761, 1764, 1771, 1772, 1776, 1777, - 1779, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, - 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, - 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, - 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, - 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, - 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, - 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, - 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1863, 1868, - 1869, 1872, 1873, 1874, 1878, 1879, 1880, 1884, 1885, 1886, - 1890, 1891, 1892, 1895, 1897, 1901, 1902, 1903, 1905, 1906, - 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1917, 1922, - 1923, 1924, 1925, 1926, 1928, 1929, 1932, 1933, 1937, 1940, - 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1957, 1959, 1963, - 1964, 1967, 1968, 1972, 1975, 1977, 1979, 1983, 1984, 1985, - 1987, 1990, 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2003, - 2005, 2006, 2012, 2014, 2017, 2020, 2022, 2024, 2027, 2029, - 2033, 2035, 2038, 2041, 2047, 2049, 2052, 2053, 2058, 2061, - 2065, 2065, 2070, 2073, 2074, 2078, 2079, 2084, 2085, 2089, - 2090, 2094, 2095, 2100, 2102, 2107, 2108, 2109, 2110, 2111, - 2112, 2113, 2115, 2118, 2120, 2124, 2125, 2126, 2127, 2128, - 2130, 2132, 2134, 2138, 2139, 2140, 2144, 2147, 2150, 2153, - 2157, 2161, 2168, 2172, 2179, 2180, 2185, 2187, 2188, 2191, - 2192, 2195, 2196, 2200, 2201, 2205, 2206, 2207, 2208, 2210, - 2213, 2216, 2217, 2218, 2220, 2222, 2226, 2227, 2228, 2230, - 2231, 2232, 2236, 2238, 2241, 2243, 2244, 2245, 2246, 2249, - 2251, 2252, 2256, 2258, 2261, 2263, 2264, 2265, 2269, 2271, - 2274, 2277, 2279, 2281, 2285, 2286, 2288, 2289, 2295, 2296, - 2298, 2300, 2302, 2304, 2307, 2308, 2309, 2313, 2314, 2315, - 2316, 2317, 2318, 2319, 2323, 2324, 2328, 2337, 2344, 2345, - 2351, 2352, 2360, 2363, 2367, 2370, 2375, 2376, 2377, 2378, - 2382, 2383, 2387, 2389, 2390, 2392, 2396, 2402, 2404, 2408, - 2411, 2414, 2423, 2426, 2429, 2430, 2433, 2434, 2438, 2443, - 2447, 2453, 2461, 2462 + 0, 802, 802, 802, 807, 809, 812, 813, 814, 815, + 816, 817, 820, 822, 822, 824, 824, 826, 827, 832, + 833, 834, 835, 836, 837, 841, 843, 846, 847, 848, + 849, 854, 855, 859, 860, 862, 865, 871, 878, 885, + 889, 895, 897, 900, 901, 902, 903, 906, 907, 911, + 916, 916, 920, 920, 925, 924, 928, 928, 931, 932, + 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, + 943, 946, 944, 949, 951, 959, 962, 963, 967, 968, + 969, 970, 971, 978, 984, 988, 988, 994, 995, 999, + 1000, 1004, 1009, 1008, 1018, 1017, 1030, 1029, 1048, 1046, + 1065, 1064, 1073, 1071, 1083, 1082, 1094, 1092, 1105, 1106, + 1110, 1113, 1116, 1117, 1118, 1121, 1123, 1126, 1127, 1130, + 1131, 1134, 1135, 1139, 1140, 1145, 1146, 1149, 1150, 1154, + 1155, 1159, 1160, 1164, 1165, 1169, 1170, 1175, 1176, 1181, + 1182, 1183, 1184, 1187, 1190, 1192, 1195, 1196, 1200, 1202, + 1205, 1208, 1211, 1212, 1215, 1216, 1220, 1222, 1224, 1225, + 1229, 1231, 1233, 1236, 1239, 1242, 1245, 1249, 1256, 1258, + 1261, 1262, 1263, 1265, 1270, 1271, 1274, 1275, 1276, 1280, + 1281, 1283, 1284, 1288, 1290, 1293, 1293, 1297, 1296, 1300, + 1304, 1302, 1315, 1312, 1323, 1325, 1327, 1329, 1331, 1335, + 1336, 1337, 1340, 1346, 1349, 1355, 1358, 1363, 1365, 1370, + 1375, 1379, 1380, 1386, 1387, 1392, 1393, 1398, 1399, 1403, + 1404, 1408, 1410, 1416, 1421, 1422, 1424, 1428, 1429, 1430, + 1431, 1435, 1436, 1437, 1438, 1439, 1440, 1442, 1447, 1450, + 1451, 1455, 1456, 1459, 1460, 1463, 1464, 1467, 1468, 1472, + 1473, 1474, 1475, 1476, 1477, 1480, 1482, 1484, 1485, 1488, + 1490, 1494, 1495, 1497, 1498, 1501, 1505, 1506, 1510, 1511, + 1515, 1519, 1523, 1528, 1529, 1530, 1533, 1535, 1536, 1537, + 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, + 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, + 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, + 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, + 1580, 1582, 1583, 1585, 1587, 1588, 1589, 1590, 1591, 1592, + 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, + 1603, 1604, 1606, 1605, 1614, 1613, 1621, 1622, 1626, 1630, + 1634, 1640, 1644, 1650, 1652, 1656, 1658, 1662, 1667, 1668, + 1672, 1679, 1686, 1688, 1693, 1694, 1695, 1699, 1703, 1707, + 1708, 1709, 1710, 1714, 1720, 1725, 1734, 1735, 1738, 1741, + 1744, 1745, 1748, 1752, 1755, 1758, 1765, 1766, 1770, 1771, + 1773, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, + 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, + 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, + 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, + 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, + 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, + 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, + 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1857, 1862, + 1863, 1866, 1867, 1868, 1872, 1873, 1874, 1878, 1879, 1880, + 1884, 1885, 1886, 1889, 1891, 1895, 1896, 1897, 1899, 1900, + 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1911, 1916, + 1917, 1918, 1919, 1920, 1922, 1923, 1926, 1927, 1931, 1934, + 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1951, 1953, 1957, + 1958, 1961, 1962, 1966, 1969, 1971, 1973, 1977, 1978, 1979, + 1981, 1984, 1988, 1989, 1990, 1993, 1994, 1995, 1996, 1997, + 1999, 2000, 2006, 2008, 2011, 2014, 2016, 2018, 2021, 2023, + 2027, 2029, 2032, 2035, 2041, 2043, 2046, 2047, 2052, 2055, + 2059, 2059, 2064, 2067, 2068, 2072, 2073, 2078, 2079, 2083, + 2084, 2088, 2089, 2094, 2096, 2101, 2102, 2103, 2104, 2105, + 2106, 2107, 2109, 2112, 2114, 2118, 2119, 2120, 2121, 2122, + 2124, 2126, 2128, 2132, 2133, 2134, 2138, 2141, 2144, 2147, + 2151, 2155, 2162, 2166, 2173, 2174, 2179, 2181, 2182, 2185, + 2186, 2189, 2190, 2194, 2195, 2199, 2200, 2201, 2202, 2204, + 2207, 2210, 2211, 2212, 2214, 2216, 2220, 2221, 2222, 2224, + 2225, 2226, 2230, 2232, 2235, 2237, 2238, 2239, 2240, 2243, + 2245, 2246, 2250, 2252, 2255, 2257, 2258, 2259, 2263, 2265, + 2268, 2271, 2273, 2275, 2279, 2280, 2282, 2283, 2289, 2290, + 2292, 2294, 2296, 2298, 2301, 2302, 2303, 2307, 2308, 2309, + 2310, 2311, 2312, 2313, 2317, 2318, 2322, 2331, 2338, 2339, + 2345, 2346, 2354, 2357, 2361, 2364, 2369, 2370, 2371, 2372, + 2376, 2377, 2381, 2383, 2384, 2386, 2390, 2396, 2398, 2402, + 2405, 2408, 2417, 2420, 2423, 2424, 2427, 2428, 2432, 2437, + 2441, 2447, 2455, 2456 }; #endif @@ -5456,14 +5450,14 @@ yyreduce: case 2: /* Line 1455 of yacc.c */ -#line 808 "hphp.y" +#line 802 "hphp.y" { _p->initParseTree(); ;} break; case 3: /* Line 1455 of yacc.c */ -#line 808 "hphp.y" +#line 802 "hphp.y" { _p->popLabelInfo(); _p->finiParseTree();;} break; @@ -5471,56 +5465,56 @@ yyreduce: case 4: /* Line 1455 of yacc.c */ -#line 814 "hphp.y" +#line 808 "hphp.y" { _p->addTopStatement((yyvsp[(2) - (2)]));;} break; case 5: /* Line 1455 of yacc.c */ -#line 815 "hphp.y" +#line 809 "hphp.y" { ;} break; case 6: /* Line 1455 of yacc.c */ -#line 818 "hphp.y" +#line 812 "hphp.y" { _p->nns((yyvsp[(1) - (1)]).num()); (yyval) = (yyvsp[(1) - (1)]);;} break; case 7: /* Line 1455 of yacc.c */ -#line 819 "hphp.y" +#line 813 "hphp.y" { _p->nns(); (yyval) = (yyvsp[(1) - (1)]);;} break; case 8: /* Line 1455 of yacc.c */ -#line 820 "hphp.y" +#line 814 "hphp.y" { _p->nns(); (yyval) = (yyvsp[(1) - (1)]);;} break; case 9: /* Line 1455 of yacc.c */ -#line 821 "hphp.y" +#line 815 "hphp.y" { _p->nns(); (yyval) = (yyvsp[(1) - (1)]);;} break; case 10: /* Line 1455 of yacc.c */ -#line 822 "hphp.y" +#line 816 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]); ;} break; case 11: /* Line 1455 of yacc.c */ -#line 823 "hphp.y" +#line 817 "hphp.y" { _p->onHaltCompiler(); _p->finiParseTree(); YYACCEPT;;} @@ -5529,7 +5523,7 @@ yyreduce: case 12: /* Line 1455 of yacc.c */ -#line 826 "hphp.y" +#line 820 "hphp.y" { _p->onNamespaceStart((yyvsp[(2) - (3)]).text(), true); (yyval).reset();;} break; @@ -5537,42 +5531,42 @@ yyreduce: case 13: /* Line 1455 of yacc.c */ -#line 828 "hphp.y" +#line 822 "hphp.y" { _p->onNamespaceStart((yyvsp[(2) - (3)]).text());;} break; case 14: /* Line 1455 of yacc.c */ -#line 829 "hphp.y" +#line 823 "hphp.y" { _p->onNamespaceEnd(); (yyval) = (yyvsp[(5) - (6)]);;} break; case 15: /* Line 1455 of yacc.c */ -#line 830 "hphp.y" +#line 824 "hphp.y" { _p->onNamespaceStart("");;} break; case 16: /* Line 1455 of yacc.c */ -#line 831 "hphp.y" +#line 825 "hphp.y" { _p->onNamespaceEnd(); (yyval) = (yyvsp[(4) - (5)]);;} break; case 17: /* Line 1455 of yacc.c */ -#line 832 "hphp.y" +#line 826 "hphp.y" { _p->nns(); (yyval).reset();;} break; case 18: /* Line 1455 of yacc.c */ -#line 833 "hphp.y" +#line 827 "hphp.y" { _p->nns(); _p->finishStatement((yyval), (yyvsp[(1) - (2)])); (yyval) = 1;;} break; @@ -5580,126 +5574,126 @@ yyreduce: case 19: /* Line 1455 of yacc.c */ -#line 838 "hphp.y" +#line 832 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 20: /* Line 1455 of yacc.c */ -#line 839 "hphp.y" +#line 833 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 21: /* Line 1455 of yacc.c */ -#line 840 "hphp.y" +#line 834 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 22: /* Line 1455 of yacc.c */ -#line 841 "hphp.y" +#line 835 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 23: /* Line 1455 of yacc.c */ -#line 842 "hphp.y" +#line 836 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 24: /* Line 1455 of yacc.c */ -#line 843 "hphp.y" +#line 837 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 25: /* Line 1455 of yacc.c */ -#line 848 "hphp.y" +#line 842 "hphp.y" { ;} break; case 26: /* Line 1455 of yacc.c */ -#line 849 "hphp.y" +#line 843 "hphp.y" { ;} break; case 27: /* Line 1455 of yacc.c */ -#line 852 "hphp.y" +#line 846 "hphp.y" { _p->onUse((yyvsp[(1) - (1)]).text(),"");;} break; case 28: /* Line 1455 of yacc.c */ -#line 853 "hphp.y" +#line 847 "hphp.y" { _p->onUse((yyvsp[(2) - (2)]).text(),"");;} break; case 29: /* Line 1455 of yacc.c */ -#line 854 "hphp.y" +#line 848 "hphp.y" { _p->onUse((yyvsp[(1) - (3)]).text(),(yyvsp[(3) - (3)]).text());;} break; case 30: /* Line 1455 of yacc.c */ -#line 856 "hphp.y" +#line 850 "hphp.y" { _p->onUse((yyvsp[(2) - (4)]).text(),(yyvsp[(4) - (4)]).text());;} break; case 31: /* Line 1455 of yacc.c */ -#line 860 "hphp.y" +#line 854 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 32: /* Line 1455 of yacc.c */ -#line 862 "hphp.y" +#line 856 "hphp.y" { (yyval) = (yyvsp[(1) - (3)]) + (yyvsp[(2) - (3)]) + (yyvsp[(3) - (3)]); (yyval) = (yyvsp[(1) - (3)]).num() | 2;;} break; case 33: /* Line 1455 of yacc.c */ -#line 865 "hphp.y" +#line 859 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]); (yyval) = (yyval).num() | 1;;} break; case 34: /* Line 1455 of yacc.c */ -#line 867 "hphp.y" +#line 861 "hphp.y" { (yyval).set((yyvsp[(3) - (3)]).num() | 2, _p->nsDecl((yyvsp[(3) - (3)]).text()));;} break; case 35: /* Line 1455 of yacc.c */ -#line 868 "hphp.y" +#line 862 "hphp.y" { (yyval) = (yyvsp[(2) - (2)]); (yyval) = (yyval).num() | 2;;} break; case 36: /* Line 1455 of yacc.c */ -#line 871 "hphp.y" +#line 865 "hphp.y" { if ((yyvsp[(1) - (1)]).num() & 1) { (yyvsp[(1) - (1)]).setText(_p->resolve((yyvsp[(1) - (1)]).text(),0)); } @@ -5709,7 +5703,7 @@ yyreduce: case 37: /* Line 1455 of yacc.c */ -#line 878 "hphp.y" +#line 872 "hphp.y" { if ((yyvsp[(1) - (2)]).num() & 1) { (yyvsp[(1) - (2)]).setText(_p->resolve((yyvsp[(1) - (2)]).text(),0)); } @@ -5719,7 +5713,7 @@ yyreduce: case 38: /* Line 1455 of yacc.c */ -#line 885 "hphp.y" +#line 879 "hphp.y" { if ((yyvsp[(1) - (2)]).num() & 1) { (yyvsp[(1) - (2)]).setText(_p->resolve((yyvsp[(1) - (2)]).text(),1)); } @@ -5729,7 +5723,7 @@ yyreduce: case 39: /* Line 1455 of yacc.c */ -#line 893 "hphp.y" +#line 887 "hphp.y" { (yyvsp[(3) - (5)]).setText(_p->nsDecl((yyvsp[(3) - (5)]).text())); on_constant(_p,(yyval),(yyvsp[(3) - (5)]),(yyvsp[(5) - (5)]));;} break; @@ -5737,7 +5731,7 @@ yyreduce: case 40: /* Line 1455 of yacc.c */ -#line 896 "hphp.y" +#line 890 "hphp.y" { (yyvsp[(2) - (4)]).setText(_p->nsDecl((yyvsp[(2) - (4)]).text())); on_constant(_p,(yyval),(yyvsp[(2) - (4)]),(yyvsp[(4) - (4)]));;} break; @@ -5745,77 +5739,77 @@ yyreduce: case 41: /* Line 1455 of yacc.c */ -#line 902 "hphp.y" +#line 896 "hphp.y" { _p->addStatement((yyval),(yyvsp[(1) - (2)]),(yyvsp[(2) - (2)]));;} break; case 42: /* Line 1455 of yacc.c */ -#line 903 "hphp.y" +#line 897 "hphp.y" { _p->onStatementListStart((yyval));;} break; case 43: /* Line 1455 of yacc.c */ -#line 906 "hphp.y" +#line 900 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 44: /* Line 1455 of yacc.c */ -#line 907 "hphp.y" +#line 901 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 45: /* Line 1455 of yacc.c */ -#line 908 "hphp.y" +#line 902 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 46: /* Line 1455 of yacc.c */ -#line 909 "hphp.y" +#line 903 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 47: /* Line 1455 of yacc.c */ -#line 912 "hphp.y" +#line 906 "hphp.y" { _p->onBlock((yyval), (yyvsp[(2) - (3)]));;} break; case 48: /* Line 1455 of yacc.c */ -#line 916 "hphp.y" +#line 910 "hphp.y" { _p->onIf((yyval),(yyvsp[(2) - (5)]),(yyvsp[(3) - (5)]),(yyvsp[(4) - (5)]),(yyvsp[(5) - (5)]));;} break; case 49: /* Line 1455 of yacc.c */ -#line 921 "hphp.y" +#line 915 "hphp.y" { _p->onIf((yyval),(yyvsp[(2) - (8)]),(yyvsp[(4) - (8)]),(yyvsp[(5) - (8)]),(yyvsp[(6) - (8)]));;} break; case 50: /* Line 1455 of yacc.c */ -#line 922 "hphp.y" +#line 916 "hphp.y" { _p->pushLabelScope();;} break; case 51: /* Line 1455 of yacc.c */ -#line 923 "hphp.y" +#line 917 "hphp.y" { _p->popLabelScope(); _p->onWhile((yyval),(yyvsp[(2) - (4)]),(yyvsp[(4) - (4)]));;} break; @@ -5823,14 +5817,14 @@ yyreduce: case 52: /* Line 1455 of yacc.c */ -#line 926 "hphp.y" +#line 920 "hphp.y" { _p->pushLabelScope();;} break; case 53: /* Line 1455 of yacc.c */ -#line 928 "hphp.y" +#line 922 "hphp.y" { _p->popLabelScope(); _p->onDo((yyval),(yyvsp[(3) - (6)]),(yyvsp[(5) - (6)]));;} break; @@ -5838,14 +5832,14 @@ yyreduce: case 54: /* Line 1455 of yacc.c */ -#line 931 "hphp.y" +#line 925 "hphp.y" { _p->pushLabelScope();;} break; case 55: /* Line 1455 of yacc.c */ -#line 932 "hphp.y" +#line 926 "hphp.y" { _p->popLabelScope(); _p->onFor((yyval),(yyvsp[(3) - (10)]),(yyvsp[(5) - (10)]),(yyvsp[(7) - (10)]),(yyvsp[(10) - (10)]));;} break; @@ -5853,14 +5847,14 @@ yyreduce: case 56: /* Line 1455 of yacc.c */ -#line 934 "hphp.y" +#line 928 "hphp.y" { _p->pushLabelScope();;} break; case 57: /* Line 1455 of yacc.c */ -#line 935 "hphp.y" +#line 929 "hphp.y" { _p->popLabelScope(); _p->onSwitch((yyval),(yyvsp[(2) - (4)]),(yyvsp[(4) - (4)]));;} break; @@ -5868,105 +5862,105 @@ yyreduce: case 58: /* Line 1455 of yacc.c */ -#line 937 "hphp.y" +#line 931 "hphp.y" { _p->onBreak((yyval), NULL);;} break; case 59: /* Line 1455 of yacc.c */ -#line 938 "hphp.y" +#line 932 "hphp.y" { _p->onBreak((yyval), &(yyvsp[(2) - (3)]));;} break; case 60: /* Line 1455 of yacc.c */ -#line 939 "hphp.y" +#line 933 "hphp.y" { _p->onContinue((yyval), NULL);;} break; case 61: /* Line 1455 of yacc.c */ -#line 940 "hphp.y" +#line 934 "hphp.y" { _p->onContinue((yyval), &(yyvsp[(2) - (3)]));;} break; case 62: /* Line 1455 of yacc.c */ -#line 941 "hphp.y" +#line 935 "hphp.y" { _p->onReturn((yyval), NULL);;} break; case 63: /* Line 1455 of yacc.c */ -#line 942 "hphp.y" +#line 936 "hphp.y" { _p->onReturn((yyval), &(yyvsp[(2) - (3)]));;} break; case 64: /* Line 1455 of yacc.c */ -#line 943 "hphp.y" +#line 937 "hphp.y" { _p->onYieldBreak((yyval));;} break; case 65: /* Line 1455 of yacc.c */ -#line 944 "hphp.y" +#line 938 "hphp.y" { _p->onGlobal((yyval), (yyvsp[(2) - (3)]));;} break; case 66: /* Line 1455 of yacc.c */ -#line 945 "hphp.y" +#line 939 "hphp.y" { _p->onStatic((yyval), (yyvsp[(2) - (3)]));;} break; case 67: /* Line 1455 of yacc.c */ -#line 946 "hphp.y" +#line 940 "hphp.y" { _p->onEcho((yyval), (yyvsp[(2) - (3)]), 0);;} break; case 68: /* Line 1455 of yacc.c */ -#line 947 "hphp.y" +#line 941 "hphp.y" { _p->onUnset((yyval), (yyvsp[(3) - (5)]));;} break; case 69: /* Line 1455 of yacc.c */ -#line 948 "hphp.y" +#line 942 "hphp.y" { (yyval).reset(); (yyval) = ';';} break; case 70: /* Line 1455 of yacc.c */ -#line 949 "hphp.y" +#line 943 "hphp.y" { _p->onEcho((yyval), (yyvsp[(1) - (1)]), 1);;} break; case 71: /* Line 1455 of yacc.c */ -#line 952 "hphp.y" +#line 946 "hphp.y" { _p->pushLabelScope();;} break; case 72: /* Line 1455 of yacc.c */ -#line 953 "hphp.y" +#line 947 "hphp.y" { _p->popLabelScope(); _p->onForEach((yyval),(yyvsp[(3) - (9)]),(yyvsp[(5) - (9)]),(yyvsp[(6) - (9)]),(yyvsp[(9) - (9)]));;} break; @@ -5974,35 +5968,35 @@ yyreduce: case 73: /* Line 1455 of yacc.c */ -#line 956 "hphp.y" +#line 950 "hphp.y" { _p->onBlock((yyval), (yyvsp[(5) - (5)])); (yyval) = T_DECLARE;;} break; case 74: /* Line 1455 of yacc.c */ -#line 964 "hphp.y" +#line 958 "hphp.y" { _p->onTry((yyval),(yyvsp[(3) - (14)]),(yyvsp[(7) - (14)]),(yyvsp[(8) - (14)]),(yyvsp[(11) - (14)]),(yyvsp[(13) - (14)]),(yyvsp[(14) - (14)]));;} break; case 75: /* Line 1455 of yacc.c */ -#line 967 "hphp.y" +#line 961 "hphp.y" { _p->onTry((yyval), (yyvsp[(3) - (5)]), (yyvsp[(5) - (5)]));;} break; case 76: /* Line 1455 of yacc.c */ -#line 968 "hphp.y" +#line 962 "hphp.y" { _p->onThrow((yyval), (yyvsp[(2) - (3)]));;} break; case 77: /* Line 1455 of yacc.c */ -#line 969 "hphp.y" +#line 963 "hphp.y" { _p->onGoto((yyval), (yyvsp[(2) - (3)]), true); _p->addGoto((yyvsp[(2) - (3)]).text(), _p->getLocation(), @@ -6012,35 +6006,35 @@ yyreduce: case 78: /* Line 1455 of yacc.c */ -#line 973 "hphp.y" +#line 967 "hphp.y" { _p->onExpStatement((yyval), (yyvsp[(1) - (2)]));;} break; case 79: /* Line 1455 of yacc.c */ -#line 974 "hphp.y" +#line 968 "hphp.y" { _p->onExpStatement((yyval), (yyvsp[(1) - (2)]));;} break; case 80: /* Line 1455 of yacc.c */ -#line 975 "hphp.y" +#line 969 "hphp.y" { _p->onExpStatement((yyval), (yyvsp[(1) - (2)]));;} break; case 81: /* Line 1455 of yacc.c */ -#line 976 "hphp.y" +#line 970 "hphp.y" { _p->onExpStatement((yyval), (yyvsp[(1) - (2)]));;} break; case 82: /* Line 1455 of yacc.c */ -#line 977 "hphp.y" +#line 971 "hphp.y" { _p->onLabel((yyval), (yyvsp[(1) - (2)])); _p->addLabel((yyvsp[(1) - (2)]).text(), _p->getLocation(), @@ -6050,63 +6044,63 @@ yyreduce: case 83: /* Line 1455 of yacc.c */ -#line 989 "hphp.y" +#line 983 "hphp.y" { _p->onCatch((yyval), (yyvsp[(1) - (9)]), (yyvsp[(4) - (9)]), (yyvsp[(5) - (9)]), (yyvsp[(8) - (9)]));;} break; case 84: /* Line 1455 of yacc.c */ -#line 990 "hphp.y" +#line 984 "hphp.y" { (yyval).reset();;} break; case 85: /* Line 1455 of yacc.c */ -#line 994 "hphp.y" +#line 988 "hphp.y" { finally_statement(_p);;} break; case 86: /* Line 1455 of yacc.c */ -#line 996 "hphp.y" +#line 990 "hphp.y" { _p->onFinally((yyval), (yyvsp[(4) - (5)]));;} break; case 88: /* Line 1455 of yacc.c */ -#line 1001 "hphp.y" +#line 995 "hphp.y" { (yyval).reset();;} break; case 89: /* Line 1455 of yacc.c */ -#line 1005 "hphp.y" +#line 999 "hphp.y" { (yyval) = 1;;} break; case 90: /* Line 1455 of yacc.c */ -#line 1006 "hphp.y" +#line 1000 "hphp.y" { (yyval).reset();;} break; case 91: /* Line 1455 of yacc.c */ -#line 1010 "hphp.y" +#line 1004 "hphp.y" { _p->pushFuncLocation();;} break; case 92: /* Line 1455 of yacc.c */ -#line 1015 "hphp.y" +#line 1009 "hphp.y" { (yyvsp[(3) - (3)]).setText(_p->nsDecl((yyvsp[(3) - (3)]).text())); _p->onFunctionStart((yyvsp[(3) - (3)])); _p->pushLabelInfo();;} @@ -6115,7 +6109,7 @@ yyreduce: case 93: /* Line 1455 of yacc.c */ -#line 1020 "hphp.y" +#line 1014 "hphp.y" { _p->onFunction((yyval),0,(yyvsp[(8) - (11)]),(yyvsp[(2) - (11)]),(yyvsp[(3) - (11)]),(yyvsp[(6) - (11)]),(yyvsp[(10) - (11)]),0); _p->popLabelInfo(); _p->popTypeScope();;} @@ -6124,7 +6118,7 @@ yyreduce: case 94: /* Line 1455 of yacc.c */ -#line 1024 "hphp.y" +#line 1018 "hphp.y" { (yyvsp[(4) - (4)]).setText(_p->nsDecl((yyvsp[(4) - (4)]).text())); _p->onFunctionStart((yyvsp[(4) - (4)])); _p->pushLabelInfo();;} @@ -6133,7 +6127,7 @@ yyreduce: case 95: /* Line 1455 of yacc.c */ -#line 1029 "hphp.y" +#line 1023 "hphp.y" { _p->onFunction((yyval),0,(yyvsp[(9) - (12)]),(yyvsp[(3) - (12)]),(yyvsp[(4) - (12)]),(yyvsp[(7) - (12)]),(yyvsp[(11) - (12)]),&(yyvsp[(1) - (12)])); _p->popLabelInfo(); _p->popTypeScope();;} @@ -6142,7 +6136,7 @@ yyreduce: case 96: /* Line 1455 of yacc.c */ -#line 1036 "hphp.y" +#line 1030 "hphp.y" { (yyvsp[(2) - (2)]).setText(_p->nsDecl((yyvsp[(2) - (2)]).text())); _p->onClassStart((yyvsp[(1) - (2)]).num(),(yyvsp[(2) - (2)]));;} break; @@ -6150,7 +6144,7 @@ yyreduce: case 97: /* Line 1455 of yacc.c */ -#line 1039 "hphp.y" +#line 1033 "hphp.y" { Token stmts; if (_p->peekClass()) { xhp_collect_attributes(_p,stmts,(yyvsp[(7) - (8)])); @@ -6169,7 +6163,7 @@ yyreduce: case 98: /* Line 1455 of yacc.c */ -#line 1054 "hphp.y" +#line 1048 "hphp.y" { (yyvsp[(3) - (3)]).setText(_p->nsDecl((yyvsp[(3) - (3)]).text())); _p->onClassStart((yyvsp[(2) - (3)]).num(),(yyvsp[(3) - (3)]));;} break; @@ -6177,7 +6171,7 @@ yyreduce: case 99: /* Line 1455 of yacc.c */ -#line 1057 "hphp.y" +#line 1051 "hphp.y" { Token stmts; if (_p->peekClass()) { xhp_collect_attributes(_p,stmts,(yyvsp[(8) - (9)])); @@ -6196,7 +6190,7 @@ yyreduce: case 100: /* Line 1455 of yacc.c */ -#line 1071 "hphp.y" +#line 1065 "hphp.y" { (yyvsp[(2) - (2)]).setText(_p->nsDecl((yyvsp[(2) - (2)]).text())); _p->onClassStart(T_INTERFACE,(yyvsp[(2) - (2)]));;} break; @@ -6204,7 +6198,7 @@ yyreduce: case 101: /* Line 1455 of yacc.c */ -#line 1074 "hphp.y" +#line 1068 "hphp.y" { _p->onInterface((yyval),(yyvsp[(2) - (7)]),(yyvsp[(4) - (7)]),(yyvsp[(6) - (7)]),0); _p->popClass(); _p->popTypeScope();;} @@ -6213,7 +6207,7 @@ yyreduce: case 102: /* Line 1455 of yacc.c */ -#line 1079 "hphp.y" +#line 1073 "hphp.y" { (yyvsp[(3) - (3)]).setText(_p->nsDecl((yyvsp[(3) - (3)]).text())); _p->onClassStart(T_INTERFACE,(yyvsp[(3) - (3)]));;} break; @@ -6221,7 +6215,7 @@ yyreduce: case 103: /* Line 1455 of yacc.c */ -#line 1082 "hphp.y" +#line 1076 "hphp.y" { _p->onInterface((yyval),(yyvsp[(3) - (8)]),(yyvsp[(5) - (8)]),(yyvsp[(7) - (8)]),&(yyvsp[(1) - (8)])); _p->popClass(); _p->popTypeScope();;} @@ -6230,7 +6224,7 @@ yyreduce: case 104: /* Line 1455 of yacc.c */ -#line 1089 "hphp.y" +#line 1083 "hphp.y" { (yyvsp[(2) - (2)]).setText(_p->nsDecl((yyvsp[(2) - (2)]).text())); _p->onClassStart(T_TRAIT, (yyvsp[(2) - (2)]));;} break; @@ -6238,7 +6232,7 @@ yyreduce: case 105: /* Line 1455 of yacc.c */ -#line 1092 "hphp.y" +#line 1086 "hphp.y" { Token t_ext, t_imp; t_ext.reset(); t_imp.reset(); _p->onClass((yyval),T_TRAIT,(yyvsp[(2) - (7)]),t_ext,t_imp, @@ -6250,7 +6244,7 @@ yyreduce: case 106: /* Line 1455 of yacc.c */ -#line 1100 "hphp.y" +#line 1094 "hphp.y" { (yyvsp[(3) - (3)]).setText(_p->nsDecl((yyvsp[(3) - (3)]).text())); _p->onClassStart(T_TRAIT, (yyvsp[(3) - (3)]));;} break; @@ -6258,7 +6252,7 @@ yyreduce: case 107: /* Line 1455 of yacc.c */ -#line 1103 "hphp.y" +#line 1097 "hphp.y" { Token t_ext, t_imp; t_ext.reset(); t_imp.reset(); _p->onClass((yyval),T_TRAIT,(yyvsp[(3) - (8)]),t_ext,t_imp, @@ -6270,14 +6264,14 @@ yyreduce: case 108: /* Line 1455 of yacc.c */ -#line 1111 "hphp.y" +#line 1105 "hphp.y" { _p->pushClass(false); (yyval) = (yyvsp[(1) - (1)]);;} break; case 109: /* Line 1455 of yacc.c */ -#line 1112 "hphp.y" +#line 1106 "hphp.y" { (yyvsp[(1) - (1)]).xhpLabel(); _p->pushTypeScope(); _p->pushClass(true); (yyval) = (yyvsp[(1) - (1)]);;} break; @@ -6285,525 +6279,525 @@ yyreduce: case 110: /* Line 1455 of yacc.c */ -#line 1116 "hphp.y" +#line 1110 "hphp.y" { _p->pushClass(false); (yyval) = (yyvsp[(1) - (1)]);;} break; case 111: /* Line 1455 of yacc.c */ -#line 1119 "hphp.y" +#line 1113 "hphp.y" { _p->pushClass(false); (yyval) = (yyvsp[(1) - (1)]);;} break; case 112: /* Line 1455 of yacc.c */ -#line 1122 "hphp.y" +#line 1116 "hphp.y" { (yyval) = T_CLASS;;} break; case 113: /* Line 1455 of yacc.c */ -#line 1123 "hphp.y" +#line 1117 "hphp.y" { (yyval) = T_ABSTRACT;;} break; case 114: /* Line 1455 of yacc.c */ -#line 1124 "hphp.y" +#line 1118 "hphp.y" { (yyval) = T_FINAL;;} break; case 115: /* Line 1455 of yacc.c */ -#line 1128 "hphp.y" +#line 1122 "hphp.y" { (yyval) = (yyvsp[(2) - (2)]);;} break; case 116: /* Line 1455 of yacc.c */ -#line 1129 "hphp.y" +#line 1123 "hphp.y" { (yyval).reset();;} break; case 117: /* Line 1455 of yacc.c */ -#line 1132 "hphp.y" +#line 1126 "hphp.y" { (yyval) = (yyvsp[(2) - (2)]);;} break; case 118: /* Line 1455 of yacc.c */ -#line 1133 "hphp.y" +#line 1127 "hphp.y" { (yyval).reset();;} break; case 119: /* Line 1455 of yacc.c */ -#line 1136 "hphp.y" +#line 1130 "hphp.y" { (yyval) = (yyvsp[(2) - (2)]);;} break; case 120: /* Line 1455 of yacc.c */ -#line 1137 "hphp.y" +#line 1131 "hphp.y" { (yyval).reset();;} break; case 121: /* Line 1455 of yacc.c */ -#line 1140 "hphp.y" +#line 1134 "hphp.y" { _p->onInterfaceName((yyval), NULL, (yyvsp[(1) - (1)]));;} break; case 122: /* Line 1455 of yacc.c */ -#line 1142 "hphp.y" +#line 1136 "hphp.y" { _p->onInterfaceName((yyval), &(yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]));;} break; case 123: /* Line 1455 of yacc.c */ -#line 1145 "hphp.y" +#line 1139 "hphp.y" { _p->onTraitName((yyval), NULL, (yyvsp[(1) - (1)]));;} break; case 124: /* Line 1455 of yacc.c */ -#line 1147 "hphp.y" +#line 1141 "hphp.y" { _p->onTraitName((yyval), &(yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]));;} break; case 125: /* Line 1455 of yacc.c */ -#line 1151 "hphp.y" +#line 1145 "hphp.y" { (yyval) = (yyvsp[(2) - (2)]);;} break; case 126: /* Line 1455 of yacc.c */ -#line 1152 "hphp.y" +#line 1146 "hphp.y" { (yyval).reset();;} break; case 127: /* Line 1455 of yacc.c */ -#line 1155 "hphp.y" +#line 1149 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 128: /* Line 1455 of yacc.c */ -#line 1156 "hphp.y" +#line 1150 "hphp.y" { (yyval) = (yyvsp[(2) - (2)]); (yyval) = 1;;} break; case 129: /* Line 1455 of yacc.c */ -#line 1160 "hphp.y" +#line 1154 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 130: /* Line 1455 of yacc.c */ -#line 1162 "hphp.y" +#line 1156 "hphp.y" { (yyval) = (yyvsp[(2) - (4)]);;} break; case 131: /* Line 1455 of yacc.c */ -#line 1165 "hphp.y" +#line 1159 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 132: /* Line 1455 of yacc.c */ -#line 1167 "hphp.y" +#line 1161 "hphp.y" { (yyval) = (yyvsp[(2) - (4)]);;} break; case 133: /* Line 1455 of yacc.c */ -#line 1170 "hphp.y" +#line 1164 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 134: /* Line 1455 of yacc.c */ -#line 1172 "hphp.y" +#line 1166 "hphp.y" { (yyval) = (yyvsp[(2) - (4)]);;} break; case 135: /* Line 1455 of yacc.c */ -#line 1175 "hphp.y" +#line 1169 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 136: /* Line 1455 of yacc.c */ -#line 1177 "hphp.y" +#line 1171 "hphp.y" { (yyval) = (yyvsp[(2) - (4)]);;} break; case 139: /* Line 1455 of yacc.c */ -#line 1187 "hphp.y" +#line 1181 "hphp.y" { (yyval) = (yyvsp[(2) - (3)]);;} break; case 140: /* Line 1455 of yacc.c */ -#line 1188 "hphp.y" +#line 1182 "hphp.y" { (yyval) = (yyvsp[(3) - (4)]);;} break; case 141: /* Line 1455 of yacc.c */ -#line 1189 "hphp.y" +#line 1183 "hphp.y" { (yyval) = (yyvsp[(2) - (4)]);;} break; case 142: /* Line 1455 of yacc.c */ -#line 1190 "hphp.y" +#line 1184 "hphp.y" { (yyval) = (yyvsp[(3) - (5)]);;} break; case 143: /* Line 1455 of yacc.c */ -#line 1195 "hphp.y" +#line 1189 "hphp.y" { _p->onCase((yyval),(yyvsp[(1) - (5)]),&(yyvsp[(3) - (5)]),(yyvsp[(5) - (5)]));;} break; case 144: /* Line 1455 of yacc.c */ -#line 1197 "hphp.y" +#line 1191 "hphp.y" { _p->onCase((yyval),(yyvsp[(1) - (4)]),NULL,(yyvsp[(4) - (4)]));;} break; case 145: /* Line 1455 of yacc.c */ -#line 1198 "hphp.y" +#line 1192 "hphp.y" { (yyval).reset();;} break; case 146: /* Line 1455 of yacc.c */ -#line 1201 "hphp.y" +#line 1195 "hphp.y" { (yyval).reset();;} break; case 147: /* Line 1455 of yacc.c */ -#line 1202 "hphp.y" +#line 1196 "hphp.y" { (yyval).reset();;} break; case 148: /* Line 1455 of yacc.c */ -#line 1207 "hphp.y" +#line 1201 "hphp.y" { _p->onElseIf((yyval),(yyvsp[(1) - (4)]),(yyvsp[(3) - (4)]),(yyvsp[(4) - (4)]));;} break; case 149: /* Line 1455 of yacc.c */ -#line 1208 "hphp.y" +#line 1202 "hphp.y" { (yyval).reset();;} break; case 150: /* Line 1455 of yacc.c */ -#line 1213 "hphp.y" +#line 1207 "hphp.y" { _p->onElseIf((yyval),(yyvsp[(1) - (5)]),(yyvsp[(3) - (5)]),(yyvsp[(5) - (5)]));;} break; case 151: /* Line 1455 of yacc.c */ -#line 1214 "hphp.y" +#line 1208 "hphp.y" { (yyval).reset();;} break; case 152: /* Line 1455 of yacc.c */ -#line 1217 "hphp.y" +#line 1211 "hphp.y" { (yyval) = (yyvsp[(2) - (2)]);;} break; case 153: /* Line 1455 of yacc.c */ -#line 1218 "hphp.y" +#line 1212 "hphp.y" { (yyval).reset();;} break; case 154: /* Line 1455 of yacc.c */ -#line 1221 "hphp.y" +#line 1215 "hphp.y" { (yyval) = (yyvsp[(3) - (3)]);;} break; case 155: /* Line 1455 of yacc.c */ -#line 1222 "hphp.y" +#line 1216 "hphp.y" { (yyval).reset();;} break; case 156: /* Line 1455 of yacc.c */ -#line 1227 "hphp.y" +#line 1221 "hphp.y" { only_in_hh_syntax(_p); (yyval) = (yyvsp[(1) - (3)]); ;} break; case 157: /* Line 1455 of yacc.c */ -#line 1229 "hphp.y" +#line 1223 "hphp.y" { (yyval) = (yyvsp[(1) - (2)]);;} break; case 158: /* Line 1455 of yacc.c */ -#line 1230 "hphp.y" +#line 1224 "hphp.y" { only_in_hh_syntax(_p); (yyval).reset(); ;} break; case 159: /* Line 1455 of yacc.c */ -#line 1231 "hphp.y" +#line 1225 "hphp.y" { (yyval).reset();;} break; case 160: /* Line 1455 of yacc.c */ -#line 1236 "hphp.y" +#line 1230 "hphp.y" { _p->onParam((yyval),NULL,(yyvsp[(2) - (3)]),(yyvsp[(3) - (3)]),0,NULL,&(yyvsp[(1) - (3)]));;} break; case 161: /* Line 1455 of yacc.c */ -#line 1238 "hphp.y" +#line 1232 "hphp.y" { _p->onParam((yyval),NULL,(yyvsp[(2) - (4)]),(yyvsp[(4) - (4)]),1,NULL,&(yyvsp[(1) - (4)]));;} break; case 162: /* Line 1455 of yacc.c */ -#line 1241 "hphp.y" +#line 1235 "hphp.y" { _p->onParam((yyval),NULL,(yyvsp[(2) - (6)]),(yyvsp[(4) - (6)]),1,&(yyvsp[(6) - (6)]),&(yyvsp[(1) - (6)]));;} break; case 163: /* Line 1455 of yacc.c */ -#line 1244 "hphp.y" +#line 1238 "hphp.y" { _p->onParam((yyval),NULL,(yyvsp[(2) - (5)]),(yyvsp[(3) - (5)]),0,&(yyvsp[(5) - (5)]),&(yyvsp[(1) - (5)]));;} break; case 164: /* Line 1455 of yacc.c */ -#line 1247 "hphp.y" +#line 1241 "hphp.y" { _p->onParam((yyval),&(yyvsp[(1) - (5)]),(yyvsp[(4) - (5)]),(yyvsp[(5) - (5)]),0,NULL,&(yyvsp[(3) - (5)]));;} break; case 165: /* Line 1455 of yacc.c */ -#line 1250 "hphp.y" +#line 1244 "hphp.y" { _p->onParam((yyval),&(yyvsp[(1) - (6)]),(yyvsp[(4) - (6)]),(yyvsp[(6) - (6)]),1,NULL,&(yyvsp[(3) - (6)]));;} break; case 166: /* Line 1455 of yacc.c */ -#line 1254 "hphp.y" +#line 1248 "hphp.y" { _p->onParam((yyval),&(yyvsp[(1) - (8)]),(yyvsp[(4) - (8)]),(yyvsp[(6) - (8)]),1,&(yyvsp[(8) - (8)]),&(yyvsp[(3) - (8)]));;} break; case 167: /* Line 1455 of yacc.c */ -#line 1258 "hphp.y" +#line 1252 "hphp.y" { _p->onParam((yyval),&(yyvsp[(1) - (7)]),(yyvsp[(4) - (7)]),(yyvsp[(5) - (7)]),0,&(yyvsp[(7) - (7)]),&(yyvsp[(3) - (7)]));;} break; case 168: /* Line 1455 of yacc.c */ -#line 1263 "hphp.y" +#line 1257 "hphp.y" { (yyval) = (yyvsp[(1) - (2)]);;} break; case 169: /* Line 1455 of yacc.c */ -#line 1264 "hphp.y" +#line 1258 "hphp.y" { (yyval).reset();;} break; case 170: /* Line 1455 of yacc.c */ -#line 1267 "hphp.y" +#line 1261 "hphp.y" { _p->onCallParam((yyval),NULL,(yyvsp[(1) - (1)]),0);;} break; case 171: /* Line 1455 of yacc.c */ -#line 1268 "hphp.y" +#line 1262 "hphp.y" { _p->onCallParam((yyval),NULL,(yyvsp[(2) - (2)]),1);;} break; case 172: /* Line 1455 of yacc.c */ -#line 1270 "hphp.y" +#line 1264 "hphp.y" { _p->onCallParam((yyval),&(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),0);;} break; case 173: /* Line 1455 of yacc.c */ -#line 1272 "hphp.y" +#line 1266 "hphp.y" { _p->onCallParam((yyval),&(yyvsp[(1) - (4)]),(yyvsp[(4) - (4)]),1);;} break; case 174: /* Line 1455 of yacc.c */ -#line 1276 "hphp.y" +#line 1270 "hphp.y" { _p->onGlobalVar((yyval), &(yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]));;} break; case 175: /* Line 1455 of yacc.c */ -#line 1277 "hphp.y" +#line 1271 "hphp.y" { _p->onGlobalVar((yyval), NULL, (yyvsp[(1) - (1)]));;} break; case 176: /* Line 1455 of yacc.c */ -#line 1280 "hphp.y" +#line 1274 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 177: /* Line 1455 of yacc.c */ -#line 1281 "hphp.y" +#line 1275 "hphp.y" { (yyval) = (yyvsp[(2) - (2)]); (yyval) = 1;;} break; case 178: /* Line 1455 of yacc.c */ -#line 1282 "hphp.y" +#line 1276 "hphp.y" { (yyval) = (yyvsp[(3) - (4)]); (yyval) = 1;;} break; case 179: /* Line 1455 of yacc.c */ -#line 1286 "hphp.y" +#line 1280 "hphp.y" { _p->onStaticVariable((yyval),&(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),0);;} break; case 180: /* Line 1455 of yacc.c */ -#line 1288 "hphp.y" +#line 1282 "hphp.y" { _p->onStaticVariable((yyval),&(yyvsp[(1) - (5)]),(yyvsp[(3) - (5)]),&(yyvsp[(5) - (5)]));;} break; case 181: /* Line 1455 of yacc.c */ -#line 1289 "hphp.y" +#line 1283 "hphp.y" { _p->onStaticVariable((yyval),0,(yyvsp[(1) - (1)]),0);;} break; case 182: /* Line 1455 of yacc.c */ -#line 1290 "hphp.y" +#line 1284 "hphp.y" { _p->onStaticVariable((yyval),0,(yyvsp[(1) - (3)]),&(yyvsp[(3) - (3)]));;} break; case 183: /* Line 1455 of yacc.c */ -#line 1295 "hphp.y" +#line 1289 "hphp.y" { _p->onClassStatement((yyval), (yyvsp[(1) - (2)]), (yyvsp[(2) - (2)]));;} break; case 184: /* Line 1455 of yacc.c */ -#line 1296 "hphp.y" +#line 1290 "hphp.y" { (yyval).reset();;} break; case 185: /* Line 1455 of yacc.c */ -#line 1299 "hphp.y" +#line 1293 "hphp.y" { _p->onClassVariableModifer((yyvsp[(1) - (1)]));;} break; case 186: /* Line 1455 of yacc.c */ -#line 1300 "hphp.y" +#line 1294 "hphp.y" { _p->onClassVariableStart ((yyval),&(yyvsp[(1) - (4)]),(yyvsp[(3) - (4)]),NULL);;} break; @@ -6811,14 +6805,14 @@ yyreduce: case 187: /* Line 1455 of yacc.c */ -#line 1303 "hphp.y" +#line 1297 "hphp.y" { _p->onClassVariableModifer((yyvsp[(1) - (2)]));;} break; case 188: /* Line 1455 of yacc.c */ -#line 1304 "hphp.y" +#line 1298 "hphp.y" { _p->onClassVariableStart ((yyval),&(yyvsp[(1) - (5)]),(yyvsp[(4) - (5)]),&(yyvsp[(2) - (5)]));;} break; @@ -6826,7 +6820,7 @@ yyreduce: case 189: /* Line 1455 of yacc.c */ -#line 1306 "hphp.y" +#line 1300 "hphp.y" { _p->onClassVariableStart ((yyval),NULL,(yyvsp[(1) - (2)]),NULL);;} break; @@ -6834,7 +6828,7 @@ yyreduce: case 190: /* Line 1455 of yacc.c */ -#line 1310 "hphp.y" +#line 1304 "hphp.y" { _p->onMethodStart((yyvsp[(4) - (5)]), (yyvsp[(1) - (5)])); _p->pushLabelInfo();;} break; @@ -6842,7 +6836,7 @@ yyreduce: case 191: /* Line 1455 of yacc.c */ -#line 1315 "hphp.y" +#line 1309 "hphp.y" { _p->onMethod((yyval),(yyvsp[(1) - (10)]),(yyvsp[(9) - (10)]),(yyvsp[(3) - (10)]),(yyvsp[(4) - (10)]),(yyvsp[(7) - (10)]),(yyvsp[(10) - (10)]),0); _p->popLabelInfo(); _p->popTypeScope();;} @@ -6851,7 +6845,7 @@ yyreduce: case 192: /* Line 1455 of yacc.c */ -#line 1321 "hphp.y" +#line 1315 "hphp.y" { _p->onMethodStart((yyvsp[(5) - (6)]), (yyvsp[(2) - (6)])); _p->pushLabelInfo();;} break; @@ -6859,7 +6853,7 @@ yyreduce: case 193: /* Line 1455 of yacc.c */ -#line 1326 "hphp.y" +#line 1320 "hphp.y" { _p->onMethod((yyval),(yyvsp[(2) - (11)]),(yyvsp[(10) - (11)]),(yyvsp[(4) - (11)]),(yyvsp[(5) - (11)]),(yyvsp[(8) - (11)]),(yyvsp[(11) - (11)]),&(yyvsp[(1) - (11)])); _p->popLabelInfo(); _p->popTypeScope();;} @@ -6868,28 +6862,28 @@ yyreduce: case 194: /* Line 1455 of yacc.c */ -#line 1330 "hphp.y" +#line 1324 "hphp.y" { _p->xhpSetAttributes((yyvsp[(2) - (3)]));;} break; case 195: /* Line 1455 of yacc.c */ -#line 1332 "hphp.y" +#line 1326 "hphp.y" { xhp_category_stmt(_p,(yyval),(yyvsp[(2) - (3)]));;} break; case 196: /* Line 1455 of yacc.c */ -#line 1334 "hphp.y" +#line 1328 "hphp.y" { xhp_children_stmt(_p,(yyval),(yyvsp[(2) - (3)]));;} break; case 197: /* Line 1455 of yacc.c */ -#line 1335 "hphp.y" +#line 1329 "hphp.y" { Token t; t.reset(); _p->onTraitUse((yyval),(yyvsp[(2) - (3)]),t); ;} break; @@ -6897,42 +6891,42 @@ yyreduce: case 198: /* Line 1455 of yacc.c */ -#line 1338 "hphp.y" +#line 1332 "hphp.y" { _p->onTraitUse((yyval),(yyvsp[(2) - (5)]),(yyvsp[(4) - (5)])); ;} break; case 199: /* Line 1455 of yacc.c */ -#line 1341 "hphp.y" +#line 1335 "hphp.y" { _p->onTraitRule((yyval),(yyvsp[(1) - (2)]),(yyvsp[(2) - (2)])); ;} break; case 200: /* Line 1455 of yacc.c */ -#line 1342 "hphp.y" +#line 1336 "hphp.y" { _p->onTraitRule((yyval),(yyvsp[(1) - (2)]),(yyvsp[(2) - (2)])); ;} break; case 201: /* Line 1455 of yacc.c */ -#line 1343 "hphp.y" +#line 1337 "hphp.y" { (yyval).reset(); ;} break; case 202: /* Line 1455 of yacc.c */ -#line 1349 "hphp.y" +#line 1343 "hphp.y" { _p->onTraitPrecRule((yyval),(yyvsp[(1) - (6)]),(yyvsp[(3) - (6)]),(yyvsp[(5) - (6)]));;} break; case 203: /* Line 1455 of yacc.c */ -#line 1353 "hphp.y" +#line 1347 "hphp.y" { _p->onTraitAliasRuleModify((yyval),(yyvsp[(1) - (5)]),(yyvsp[(3) - (5)]), (yyvsp[(4) - (5)]));;} break; @@ -6940,7 +6934,7 @@ yyreduce: case 204: /* Line 1455 of yacc.c */ -#line 1356 "hphp.y" +#line 1350 "hphp.y" { Token t; t.reset(); _p->onTraitAliasRuleModify((yyval),(yyvsp[(1) - (4)]),(yyvsp[(3) - (4)]), t);;} @@ -6949,14 +6943,14 @@ yyreduce: case 205: /* Line 1455 of yacc.c */ -#line 1363 "hphp.y" +#line 1357 "hphp.y" { _p->onTraitAliasRuleStart((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]));;} break; case 206: /* Line 1455 of yacc.c */ -#line 1364 "hphp.y" +#line 1358 "hphp.y" { Token t; t.reset(); _p->onTraitAliasRuleStart((yyval),t,(yyvsp[(1) - (1)]));;} break; @@ -6964,7 +6958,7 @@ yyreduce: case 207: /* Line 1455 of yacc.c */ -#line 1369 "hphp.y" +#line 1363 "hphp.y" { xhp_attribute_list(_p,(yyval), _p->xhpGetAttributes(),(yyvsp[(1) - (1)]));;} break; @@ -6972,14 +6966,14 @@ yyreduce: case 208: /* Line 1455 of yacc.c */ -#line 1372 "hphp.y" +#line 1366 "hphp.y" { xhp_attribute_list(_p,(yyval), &(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]));;} break; case 209: /* Line 1455 of yacc.c */ -#line 1379 "hphp.y" +#line 1373 "hphp.y" { xhp_attribute(_p,(yyval),(yyvsp[(1) - (4)]),(yyvsp[(2) - (4)]),(yyvsp[(3) - (4)]),(yyvsp[(4) - (4)])); (yyval) = 1;;} break; @@ -6987,21 +6981,21 @@ yyreduce: case 210: /* Line 1455 of yacc.c */ -#line 1381 "hphp.y" +#line 1375 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]); (yyval) = 0;;} break; case 211: /* Line 1455 of yacc.c */ -#line 1385 "hphp.y" +#line 1379 "hphp.y" { (yyval) = 4;;} break; case 212: /* Line 1455 of yacc.c */ -#line 1386 "hphp.y" +#line 1380 "hphp.y" { /* This case handles all types other than "array", "var" and "enum". For now we just use type code 5; @@ -7013,63 +7007,63 @@ yyreduce: case 213: /* Line 1455 of yacc.c */ -#line 1392 "hphp.y" +#line 1386 "hphp.y" { (yyval) = 6;;} break; case 214: /* Line 1455 of yacc.c */ -#line 1394 "hphp.y" +#line 1388 "hphp.y" { (yyval) = (yyvsp[(3) - (4)]); (yyval) = 7;;} break; case 215: /* Line 1455 of yacc.c */ -#line 1398 "hphp.y" +#line 1392 "hphp.y" { _p->onArrayPair((yyval), 0,0,(yyvsp[(1) - (1)]),0);;} break; case 216: /* Line 1455 of yacc.c */ -#line 1400 "hphp.y" +#line 1394 "hphp.y" { _p->onArrayPair((yyval),&(yyvsp[(1) - (3)]),0,(yyvsp[(3) - (3)]),0);;} break; case 217: /* Line 1455 of yacc.c */ -#line 1404 "hphp.y" +#line 1398 "hphp.y" { (yyval) = (yyvsp[(2) - (2)]);;} break; case 218: /* Line 1455 of yacc.c */ -#line 1405 "hphp.y" +#line 1399 "hphp.y" { scalar_null(_p, (yyval));;} break; case 219: /* Line 1455 of yacc.c */ -#line 1409 "hphp.y" +#line 1403 "hphp.y" { scalar_num(_p, (yyval), "1");;} break; case 220: /* Line 1455 of yacc.c */ -#line 1410 "hphp.y" +#line 1404 "hphp.y" { scalar_num(_p, (yyval), "0");;} break; case 221: /* Line 1455 of yacc.c */ -#line 1414 "hphp.y" +#line 1408 "hphp.y" { Token t; scalar_num(_p, t, "1"); _p->onArrayPair((yyval),0,&(yyvsp[(1) - (1)]),t,0);;} break; @@ -7077,7 +7071,7 @@ yyreduce: case 222: /* Line 1455 of yacc.c */ -#line 1417 "hphp.y" +#line 1411 "hphp.y" { Token t; scalar_num(_p, t, "1"); _p->onArrayPair((yyval),&(yyvsp[(1) - (3)]),&(yyvsp[(3) - (3)]),t,0);;} break; @@ -7085,7 +7079,7 @@ yyreduce: case 223: /* Line 1455 of yacc.c */ -#line 1422 "hphp.y" +#line 1416 "hphp.y" { _p->onScalar((yyval), T_CONSTANT_ENCAPSED_STRING, (yyvsp[(1) - (1)]));;} break; @@ -7093,14 +7087,14 @@ yyreduce: case 224: /* Line 1455 of yacc.c */ -#line 1427 "hphp.y" +#line 1421 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]); (yyval) = 2;;} break; case 225: /* Line 1455 of yacc.c */ -#line 1428 "hphp.y" +#line 1422 "hphp.y" { (yyval) = -1; if ((yyvsp[(1) - (1)]).same("any")) (yyval) = 1;;} break; @@ -7108,91 +7102,91 @@ yyreduce: case 226: /* Line 1455 of yacc.c */ -#line 1430 "hphp.y" +#line 1424 "hphp.y" { (yyval) = 0;;} break; case 227: /* Line 1455 of yacc.c */ -#line 1434 "hphp.y" +#line 1428 "hphp.y" { xhp_children_paren(_p, (yyval), (yyvsp[(2) - (3)]), 0);;} break; case 228: /* Line 1455 of yacc.c */ -#line 1435 "hphp.y" +#line 1429 "hphp.y" { xhp_children_paren(_p, (yyval), (yyvsp[(2) - (4)]), 1);;} break; case 229: /* Line 1455 of yacc.c */ -#line 1436 "hphp.y" +#line 1430 "hphp.y" { xhp_children_paren(_p, (yyval), (yyvsp[(2) - (4)]), 2);;} break; case 230: /* Line 1455 of yacc.c */ -#line 1437 "hphp.y" +#line 1431 "hphp.y" { xhp_children_paren(_p, (yyval), (yyvsp[(2) - (4)]), 3);;} break; case 231: /* Line 1455 of yacc.c */ -#line 1441 "hphp.y" +#line 1435 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 232: /* Line 1455 of yacc.c */ -#line 1442 "hphp.y" +#line 1436 "hphp.y" { xhp_children_decl(_p,(yyval),(yyvsp[(1) - (1)]),0, 0);;} break; case 233: /* Line 1455 of yacc.c */ -#line 1443 "hphp.y" +#line 1437 "hphp.y" { xhp_children_decl(_p,(yyval),(yyvsp[(1) - (2)]),1, 0);;} break; case 234: /* Line 1455 of yacc.c */ -#line 1444 "hphp.y" +#line 1438 "hphp.y" { xhp_children_decl(_p,(yyval),(yyvsp[(1) - (2)]),2, 0);;} break; case 235: /* Line 1455 of yacc.c */ -#line 1445 "hphp.y" +#line 1439 "hphp.y" { xhp_children_decl(_p,(yyval),(yyvsp[(1) - (2)]),3, 0);;} break; case 236: /* Line 1455 of yacc.c */ -#line 1447 "hphp.y" +#line 1441 "hphp.y" { xhp_children_decl(_p,(yyval),(yyvsp[(1) - (3)]),4,&(yyvsp[(3) - (3)]));;} break; case 237: /* Line 1455 of yacc.c */ -#line 1449 "hphp.y" +#line 1443 "hphp.y" { xhp_children_decl(_p,(yyval),(yyvsp[(1) - (3)]),5,&(yyvsp[(3) - (3)]));;} break; case 238: /* Line 1455 of yacc.c */ -#line 1453 "hphp.y" +#line 1447 "hphp.y" { (yyval) = -1; if ((yyvsp[(1) - (1)]).same("any")) (yyval) = 1; else if ((yyvsp[(1) - (1)]).same("pcdata")) (yyval) = 2;;} @@ -7201,574 +7195,574 @@ yyreduce: case 239: /* Line 1455 of yacc.c */ -#line 1456 "hphp.y" +#line 1450 "hphp.y" { (yyvsp[(1) - (1)]).xhpLabel(); (yyval) = (yyvsp[(1) - (1)]); (yyval) = 3;;} break; case 240: /* Line 1455 of yacc.c */ -#line 1457 "hphp.y" +#line 1451 "hphp.y" { (yyvsp[(1) - (1)]).xhpLabel(0); (yyval) = (yyvsp[(1) - (1)]); (yyval) = 4;;} break; case 241: /* Line 1455 of yacc.c */ -#line 1461 "hphp.y" +#line 1455 "hphp.y" { (yyval).reset();;} break; case 242: /* Line 1455 of yacc.c */ -#line 1462 "hphp.y" +#line 1456 "hphp.y" { _p->finishStatement((yyval), (yyvsp[(2) - (3)])); (yyval) = 1;;} break; case 243: /* Line 1455 of yacc.c */ -#line 1465 "hphp.y" +#line 1459 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 244: /* Line 1455 of yacc.c */ -#line 1466 "hphp.y" +#line 1460 "hphp.y" { (yyval).reset();;} break; case 245: /* Line 1455 of yacc.c */ -#line 1469 "hphp.y" +#line 1463 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 246: /* Line 1455 of yacc.c */ -#line 1470 "hphp.y" +#line 1464 "hphp.y" { (yyval).reset();;} break; case 247: /* Line 1455 of yacc.c */ -#line 1473 "hphp.y" +#line 1467 "hphp.y" { _p->onMemberModifier((yyval),NULL,(yyvsp[(1) - (1)]));;} break; case 248: /* Line 1455 of yacc.c */ -#line 1475 "hphp.y" +#line 1469 "hphp.y" { _p->onMemberModifier((yyval),&(yyvsp[(1) - (2)]),(yyvsp[(2) - (2)]));;} break; case 249: /* Line 1455 of yacc.c */ -#line 1478 "hphp.y" +#line 1472 "hphp.y" { (yyval) = T_PUBLIC;;} break; case 250: /* Line 1455 of yacc.c */ -#line 1479 "hphp.y" +#line 1473 "hphp.y" { (yyval) = T_PROTECTED;;} break; case 251: /* Line 1455 of yacc.c */ -#line 1480 "hphp.y" +#line 1474 "hphp.y" { (yyval) = T_PRIVATE;;} break; case 252: /* Line 1455 of yacc.c */ -#line 1481 "hphp.y" +#line 1475 "hphp.y" { (yyval) = T_STATIC;;} break; case 253: /* Line 1455 of yacc.c */ -#line 1482 "hphp.y" +#line 1476 "hphp.y" { (yyval) = T_ABSTRACT;;} break; case 254: /* Line 1455 of yacc.c */ -#line 1483 "hphp.y" +#line 1477 "hphp.y" { (yyval) = T_FINAL;;} break; case 255: /* Line 1455 of yacc.c */ -#line 1487 "hphp.y" +#line 1481 "hphp.y" { _p->onClassVariable((yyval),&(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),0);;} break; case 256: /* Line 1455 of yacc.c */ -#line 1489 "hphp.y" +#line 1483 "hphp.y" { _p->onClassVariable((yyval),&(yyvsp[(1) - (5)]),(yyvsp[(3) - (5)]),&(yyvsp[(5) - (5)]));;} break; case 257: /* Line 1455 of yacc.c */ -#line 1490 "hphp.y" +#line 1484 "hphp.y" { _p->onClassVariable((yyval),0,(yyvsp[(1) - (1)]),0);;} break; case 258: /* Line 1455 of yacc.c */ -#line 1491 "hphp.y" +#line 1485 "hphp.y" { _p->onClassVariable((yyval),0,(yyvsp[(1) - (3)]),&(yyvsp[(3) - (3)]));;} break; case 259: /* Line 1455 of yacc.c */ -#line 1495 "hphp.y" +#line 1489 "hphp.y" { _p->onClassConstant((yyval),&(yyvsp[(1) - (5)]),(yyvsp[(3) - (5)]),(yyvsp[(5) - (5)]));;} break; case 260: /* Line 1455 of yacc.c */ -#line 1496 "hphp.y" +#line 1490 "hphp.y" { _p->onClassConstant((yyval),0,(yyvsp[(2) - (4)]),(yyvsp[(4) - (4)]));;} break; case 261: /* Line 1455 of yacc.c */ -#line 1500 "hphp.y" +#line 1494 "hphp.y" { (yyval) = (yyvsp[(2) - (3)]);;} break; case 262: /* Line 1455 of yacc.c */ -#line 1502 "hphp.y" +#line 1496 "hphp.y" { _p->onNewObject((yyval), (yyvsp[(2) - (3)]), (yyvsp[(3) - (3)]));;} break; case 263: /* Line 1455 of yacc.c */ -#line 1503 "hphp.y" +#line 1497 "hphp.y" { UEXP((yyval),(yyvsp[(2) - (2)]),T_CLONE,1);;} break; case 264: /* Line 1455 of yacc.c */ -#line 1504 "hphp.y" +#line 1498 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 265: /* Line 1455 of yacc.c */ -#line 1507 "hphp.y" +#line 1501 "hphp.y" { (yyval) = (yyvsp[(2) - (3)]);;} break; case 266: /* Line 1455 of yacc.c */ -#line 1511 "hphp.y" +#line 1505 "hphp.y" { _p->onExprListElem((yyval), &(yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]));;} break; case 267: /* Line 1455 of yacc.c */ -#line 1512 "hphp.y" +#line 1506 "hphp.y" { _p->onExprListElem((yyval), NULL, (yyvsp[(1) - (1)]));;} break; case 268: /* Line 1455 of yacc.c */ -#line 1516 "hphp.y" +#line 1510 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 269: /* Line 1455 of yacc.c */ -#line 1517 "hphp.y" +#line 1511 "hphp.y" { (yyval).reset();;} break; case 270: /* Line 1455 of yacc.c */ -#line 1521 "hphp.y" +#line 1515 "hphp.y" { _p->onYield((yyval), (yyvsp[(2) - (2)]));;} break; case 271: /* Line 1455 of yacc.c */ -#line 1525 "hphp.y" +#line 1519 "hphp.y" { _p->onAssign((yyval), (yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), 0, true);;} break; case 272: /* Line 1455 of yacc.c */ -#line 1530 "hphp.y" +#line 1524 "hphp.y" { _p->onListAssignment((yyval), (yyvsp[(3) - (6)]), &(yyvsp[(6) - (6)]), true);;} break; case 273: /* Line 1455 of yacc.c */ -#line 1534 "hphp.y" +#line 1528 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 274: /* Line 1455 of yacc.c */ -#line 1535 "hphp.y" +#line 1529 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 275: /* Line 1455 of yacc.c */ -#line 1536 "hphp.y" +#line 1530 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 276: /* Line 1455 of yacc.c */ -#line 1540 "hphp.y" +#line 1534 "hphp.y" { _p->onListAssignment((yyval), (yyvsp[(3) - (6)]), &(yyvsp[(6) - (6)]));;} break; case 277: /* Line 1455 of yacc.c */ -#line 1541 "hphp.y" +#line 1535 "hphp.y" { _p->onAssign((yyval), (yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), 0);;} break; case 278: /* Line 1455 of yacc.c */ -#line 1542 "hphp.y" +#line 1536 "hphp.y" { _p->onAssign((yyval), (yyvsp[(1) - (4)]), (yyvsp[(4) - (4)]), 1);;} break; case 279: /* Line 1455 of yacc.c */ -#line 1545 "hphp.y" +#line 1539 "hphp.y" { _p->onAssignNew((yyval),(yyvsp[(1) - (6)]),(yyvsp[(5) - (6)]),(yyvsp[(6) - (6)]));;} break; case 280: /* Line 1455 of yacc.c */ -#line 1546 "hphp.y" +#line 1540 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),T_PLUS_EQUAL);;} break; case 281: /* Line 1455 of yacc.c */ -#line 1547 "hphp.y" +#line 1541 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),T_MINUS_EQUAL);;} break; case 282: /* Line 1455 of yacc.c */ -#line 1548 "hphp.y" +#line 1542 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),T_MUL_EQUAL);;} break; case 283: /* Line 1455 of yacc.c */ -#line 1549 "hphp.y" +#line 1543 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),T_DIV_EQUAL);;} break; case 284: /* Line 1455 of yacc.c */ -#line 1550 "hphp.y" +#line 1544 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),T_CONCAT_EQUAL);;} break; case 285: /* Line 1455 of yacc.c */ -#line 1551 "hphp.y" +#line 1545 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),T_MOD_EQUAL);;} break; case 286: /* Line 1455 of yacc.c */ -#line 1552 "hphp.y" +#line 1546 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),T_AND_EQUAL);;} break; case 287: /* Line 1455 of yacc.c */ -#line 1553 "hphp.y" +#line 1547 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),T_OR_EQUAL);;} break; case 288: /* Line 1455 of yacc.c */ -#line 1554 "hphp.y" +#line 1548 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),T_XOR_EQUAL);;} break; case 289: /* Line 1455 of yacc.c */ -#line 1555 "hphp.y" +#line 1549 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),T_SL_EQUAL);;} break; case 290: /* Line 1455 of yacc.c */ -#line 1556 "hphp.y" +#line 1550 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),T_SR_EQUAL);;} break; case 291: /* Line 1455 of yacc.c */ -#line 1557 "hphp.y" +#line 1551 "hphp.y" { UEXP((yyval),(yyvsp[(1) - (2)]),T_INC,0);;} break; case 292: /* Line 1455 of yacc.c */ -#line 1558 "hphp.y" +#line 1552 "hphp.y" { UEXP((yyval),(yyvsp[(2) - (2)]),T_INC,1);;} break; case 293: /* Line 1455 of yacc.c */ -#line 1559 "hphp.y" +#line 1553 "hphp.y" { UEXP((yyval),(yyvsp[(1) - (2)]),T_DEC,0);;} break; case 294: /* Line 1455 of yacc.c */ -#line 1560 "hphp.y" +#line 1554 "hphp.y" { UEXP((yyval),(yyvsp[(2) - (2)]),T_DEC,1);;} break; case 295: /* Line 1455 of yacc.c */ -#line 1561 "hphp.y" +#line 1555 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),T_BOOLEAN_OR);;} break; case 296: /* Line 1455 of yacc.c */ -#line 1562 "hphp.y" +#line 1556 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),T_BOOLEAN_AND);;} break; case 297: /* Line 1455 of yacc.c */ -#line 1563 "hphp.y" +#line 1557 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),T_LOGICAL_OR);;} break; case 298: /* Line 1455 of yacc.c */ -#line 1564 "hphp.y" +#line 1558 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),T_LOGICAL_AND);;} break; case 299: /* Line 1455 of yacc.c */ -#line 1565 "hphp.y" +#line 1559 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),T_LOGICAL_XOR);;} break; case 300: /* Line 1455 of yacc.c */ -#line 1566 "hphp.y" +#line 1560 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),'|');;} break; case 301: /* Line 1455 of yacc.c */ -#line 1567 "hphp.y" +#line 1561 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),'&');;} break; case 302: /* Line 1455 of yacc.c */ -#line 1568 "hphp.y" +#line 1562 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),'^');;} break; case 303: /* Line 1455 of yacc.c */ -#line 1569 "hphp.y" +#line 1563 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),'.');;} break; case 304: /* Line 1455 of yacc.c */ -#line 1570 "hphp.y" +#line 1564 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),'+');;} break; case 305: /* Line 1455 of yacc.c */ -#line 1571 "hphp.y" +#line 1565 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),'-');;} break; case 306: /* Line 1455 of yacc.c */ -#line 1572 "hphp.y" +#line 1566 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),'*');;} break; case 307: /* Line 1455 of yacc.c */ -#line 1573 "hphp.y" +#line 1567 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),'/');;} break; case 308: /* Line 1455 of yacc.c */ -#line 1574 "hphp.y" +#line 1568 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),'%');;} break; case 309: /* Line 1455 of yacc.c */ -#line 1575 "hphp.y" +#line 1569 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),T_SL);;} break; case 310: /* Line 1455 of yacc.c */ -#line 1576 "hphp.y" +#line 1570 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),T_SR);;} break; case 311: /* Line 1455 of yacc.c */ -#line 1577 "hphp.y" +#line 1571 "hphp.y" { UEXP((yyval),(yyvsp[(2) - (2)]),'+',1);;} break; case 312: /* Line 1455 of yacc.c */ -#line 1578 "hphp.y" +#line 1572 "hphp.y" { UEXP((yyval),(yyvsp[(2) - (2)]),'-',1);;} break; case 313: /* Line 1455 of yacc.c */ -#line 1579 "hphp.y" +#line 1573 "hphp.y" { UEXP((yyval),(yyvsp[(2) - (2)]),'!',1);;} break; case 314: /* Line 1455 of yacc.c */ -#line 1580 "hphp.y" +#line 1574 "hphp.y" { UEXP((yyval),(yyvsp[(2) - (2)]),'~',1);;} break; case 315: /* Line 1455 of yacc.c */ -#line 1581 "hphp.y" +#line 1575 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),T_IS_IDENTICAL);;} break; case 316: /* Line 1455 of yacc.c */ -#line 1582 "hphp.y" +#line 1576 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),T_IS_NOT_IDENTICAL);;} break; case 317: /* Line 1455 of yacc.c */ -#line 1583 "hphp.y" +#line 1577 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),T_IS_EQUAL);;} break; case 318: /* Line 1455 of yacc.c */ -#line 1584 "hphp.y" +#line 1578 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),T_IS_NOT_EQUAL);;} break; case 319: /* Line 1455 of yacc.c */ -#line 1585 "hphp.y" +#line 1579 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),'<');;} break; case 320: /* Line 1455 of yacc.c */ -#line 1586 "hphp.y" +#line 1580 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]), T_IS_SMALLER_OR_EQUAL);;} break; @@ -7776,14 +7770,14 @@ yyreduce: case 321: /* Line 1455 of yacc.c */ -#line 1588 "hphp.y" +#line 1582 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),'>');;} break; case 322: /* Line 1455 of yacc.c */ -#line 1589 "hphp.y" +#line 1583 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]), T_IS_GREATER_OR_EQUAL);;} break; @@ -7791,140 +7785,140 @@ yyreduce: case 323: /* Line 1455 of yacc.c */ -#line 1592 "hphp.y" +#line 1586 "hphp.y" { BEXP((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),T_INSTANCEOF);;} break; case 324: /* Line 1455 of yacc.c */ -#line 1593 "hphp.y" +#line 1587 "hphp.y" { (yyval) = (yyvsp[(2) - (3)]);;} break; case 325: /* Line 1455 of yacc.c */ -#line 1594 "hphp.y" +#line 1588 "hphp.y" { _p->onQOp((yyval), (yyvsp[(1) - (5)]), &(yyvsp[(3) - (5)]), (yyvsp[(5) - (5)]));;} break; case 326: /* Line 1455 of yacc.c */ -#line 1595 "hphp.y" +#line 1589 "hphp.y" { _p->onQOp((yyval), (yyvsp[(1) - (4)]), 0, (yyvsp[(4) - (4)]));;} break; case 327: /* Line 1455 of yacc.c */ -#line 1596 "hphp.y" +#line 1590 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 328: /* Line 1455 of yacc.c */ -#line 1597 "hphp.y" +#line 1591 "hphp.y" { UEXP((yyval),(yyvsp[(2) - (2)]),T_INT_CAST,1);;} break; case 329: /* Line 1455 of yacc.c */ -#line 1598 "hphp.y" +#line 1592 "hphp.y" { UEXP((yyval),(yyvsp[(2) - (2)]),T_DOUBLE_CAST,1);;} break; case 330: /* Line 1455 of yacc.c */ -#line 1599 "hphp.y" +#line 1593 "hphp.y" { UEXP((yyval),(yyvsp[(2) - (2)]),T_STRING_CAST,1);;} break; case 331: /* Line 1455 of yacc.c */ -#line 1600 "hphp.y" +#line 1594 "hphp.y" { UEXP((yyval),(yyvsp[(2) - (2)]),T_ARRAY_CAST,1);;} break; case 332: /* Line 1455 of yacc.c */ -#line 1601 "hphp.y" +#line 1595 "hphp.y" { UEXP((yyval),(yyvsp[(2) - (2)]),T_OBJECT_CAST,1);;} break; case 333: /* Line 1455 of yacc.c */ -#line 1602 "hphp.y" +#line 1596 "hphp.y" { UEXP((yyval),(yyvsp[(2) - (2)]),T_BOOL_CAST,1);;} break; case 334: /* Line 1455 of yacc.c */ -#line 1603 "hphp.y" +#line 1597 "hphp.y" { UEXP((yyval),(yyvsp[(2) - (2)]),T_UNSET_CAST,1);;} break; case 335: /* Line 1455 of yacc.c */ -#line 1604 "hphp.y" +#line 1598 "hphp.y" { UEXP((yyval),(yyvsp[(2) - (2)]),T_EXIT,1);;} break; case 336: /* Line 1455 of yacc.c */ -#line 1605 "hphp.y" +#line 1599 "hphp.y" { UEXP((yyval),(yyvsp[(2) - (2)]),'@',1);;} break; case 337: /* Line 1455 of yacc.c */ -#line 1606 "hphp.y" +#line 1600 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]); ;} break; case 338: /* Line 1455 of yacc.c */ -#line 1607 "hphp.y" +#line 1601 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]); ;} break; case 339: /* Line 1455 of yacc.c */ -#line 1608 "hphp.y" +#line 1602 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]); ;} break; case 340: /* Line 1455 of yacc.c */ -#line 1609 "hphp.y" +#line 1603 "hphp.y" { _p->onEncapsList((yyval),'`',(yyvsp[(2) - (3)]));;} break; case 341: /* Line 1455 of yacc.c */ -#line 1610 "hphp.y" +#line 1604 "hphp.y" { UEXP((yyval),(yyvsp[(2) - (2)]),T_PRINT,1);;} break; case 342: /* Line 1455 of yacc.c */ -#line 1612 "hphp.y" +#line 1606 "hphp.y" { Token t; _p->onClosureStart(t); _p->pushLabelInfo();;} break; @@ -7932,7 +7926,7 @@ yyreduce: case 343: /* Line 1455 of yacc.c */ -#line 1616 "hphp.y" +#line 1610 "hphp.y" { Token u; u.reset(); _p->onClosure((yyval),u,(yyvsp[(2) - (11)]),(yyvsp[(5) - (11)]),(yyvsp[(8) - (11)]),(yyvsp[(10) - (11)]),0); _p->popLabelInfo();;} @@ -7941,7 +7935,7 @@ yyreduce: case 344: /* Line 1455 of yacc.c */ -#line 1620 "hphp.y" +#line 1614 "hphp.y" { Token t; _p->onClosureStart(t); _p->pushLabelInfo();;} break; @@ -7949,7 +7943,7 @@ yyreduce: case 345: /* Line 1455 of yacc.c */ -#line 1624 "hphp.y" +#line 1618 "hphp.y" { Token u; u.reset(); _p->onClosure((yyval),u,(yyvsp[(3) - (12)]),(yyvsp[(6) - (12)]),(yyvsp[(9) - (12)]),(yyvsp[(11) - (12)]),1); _p->popLabelInfo();;} @@ -7958,21 +7952,21 @@ yyreduce: case 346: /* Line 1455 of yacc.c */ -#line 1627 "hphp.y" +#line 1621 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 347: /* Line 1455 of yacc.c */ -#line 1628 "hphp.y" +#line 1622 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 348: /* Line 1455 of yacc.c */ -#line 1632 "hphp.y" +#line 1626 "hphp.y" { validate_shape_keyname((yyvsp[(1) - (1)]), _p); _p->onScalar((yyval), T_CONSTANT_ENCAPSED_STRING, (yyvsp[(1) - (1)])); ;} break; @@ -7980,63 +7974,63 @@ yyreduce: case 349: /* Line 1455 of yacc.c */ -#line 1639 "hphp.y" +#line 1633 "hphp.y" { _p->onArrayPair((yyval),&(yyvsp[(1) - (5)]),&(yyvsp[(3) - (5)]),(yyvsp[(5) - (5)]),0); ;} break; case 350: /* Line 1455 of yacc.c */ -#line 1642 "hphp.y" +#line 1636 "hphp.y" { _p->onArrayPair((yyval), 0,&(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),0); ;} break; case 351: /* Line 1455 of yacc.c */ -#line 1649 "hphp.y" +#line 1643 "hphp.y" { _p->onArrayPair((yyval),&(yyvsp[(1) - (5)]),&(yyvsp[(3) - (5)]),(yyvsp[(5) - (5)]),0); ;} break; case 352: /* Line 1455 of yacc.c */ -#line 1652 "hphp.y" +#line 1646 "hphp.y" { _p->onArrayPair((yyval), 0,&(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),0); ;} break; case 353: /* Line 1455 of yacc.c */ -#line 1657 "hphp.y" +#line 1651 "hphp.y" { (yyval) = (yyvsp[(1) - (2)]); ;} break; case 354: /* Line 1455 of yacc.c */ -#line 1658 "hphp.y" +#line 1652 "hphp.y" { (yyval).reset(); ;} break; case 355: /* Line 1455 of yacc.c */ -#line 1663 "hphp.y" +#line 1657 "hphp.y" { (yyval) = (yyvsp[(1) - (2)]); ;} break; case 356: /* Line 1455 of yacc.c */ -#line 1664 "hphp.y" +#line 1658 "hphp.y" { (yyval).reset(); ;} break; case 357: /* Line 1455 of yacc.c */ -#line 1668 "hphp.y" +#line 1662 "hphp.y" { only_in_hh_syntax(_p); _p->onArray((yyval), (yyvsp[(3) - (4)]), T_ARRAY); ;} break; @@ -8044,21 +8038,21 @@ yyreduce: case 358: /* Line 1455 of yacc.c */ -#line 1673 "hphp.y" +#line 1667 "hphp.y" { _p->onArray((yyval),(yyvsp[(3) - (4)]),T_ARRAY);;} break; case 359: /* Line 1455 of yacc.c */ -#line 1674 "hphp.y" +#line 1668 "hphp.y" { _p->onArray((yyval),(yyvsp[(2) - (3)]),T_ARRAY);;} break; case 360: /* Line 1455 of yacc.c */ -#line 1679 "hphp.y" +#line 1673 "hphp.y" { Token t; _p->onName(t,(yyvsp[(1) - (4)]),Parser::StringName); BEXP((yyval),t,(yyvsp[(3) - (4)]),T_COLLECTION);;} @@ -8067,7 +8061,7 @@ yyreduce: case 361: /* Line 1455 of yacc.c */ -#line 1686 "hphp.y" +#line 1680 "hphp.y" { Token t; _p->onName(t,(yyvsp[(1) - (4)]),Parser::StringName); BEXP((yyval),t,(yyvsp[(3) - (4)]),T_COLLECTION);;} @@ -8076,91 +8070,91 @@ yyreduce: case 362: /* Line 1455 of yacc.c */ -#line 1693 "hphp.y" +#line 1687 "hphp.y" { _p->onRefDim((yyval), (yyvsp[(1) - (4)]), (yyvsp[(3) - (4)]));;} break; case 363: /* Line 1455 of yacc.c */ -#line 1695 "hphp.y" +#line 1689 "hphp.y" { _p->onRefDim((yyval), (yyvsp[(1) - (4)]), (yyvsp[(3) - (4)]));;} break; case 364: /* Line 1455 of yacc.c */ -#line 1699 "hphp.y" +#line 1693 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 365: /* Line 1455 of yacc.c */ -#line 1700 "hphp.y" +#line 1694 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 366: /* Line 1455 of yacc.c */ -#line 1701 "hphp.y" +#line 1695 "hphp.y" { (yyval) = (yyvsp[(2) - (3)]);;} break; case 367: /* Line 1455 of yacc.c */ -#line 1708 "hphp.y" +#line 1702 "hphp.y" { (yyval) = (yyvsp[(3) - (5)]);;} break; case 368: /* Line 1455 of yacc.c */ -#line 1709 "hphp.y" +#line 1703 "hphp.y" { (yyval).reset();;} break; case 369: /* Line 1455 of yacc.c */ -#line 1713 "hphp.y" +#line 1707 "hphp.y" { _p->onClosureParam((yyval),&(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),0);;} break; case 370: /* Line 1455 of yacc.c */ -#line 1714 "hphp.y" +#line 1708 "hphp.y" { _p->onClosureParam((yyval),&(yyvsp[(1) - (4)]),(yyvsp[(4) - (4)]),1);;} break; case 371: /* Line 1455 of yacc.c */ -#line 1715 "hphp.y" +#line 1709 "hphp.y" { _p->onClosureParam((yyval), 0,(yyvsp[(1) - (1)]),0);;} break; case 372: /* Line 1455 of yacc.c */ -#line 1716 "hphp.y" +#line 1710 "hphp.y" { _p->onClosureParam((yyval), 0,(yyvsp[(2) - (2)]),1);;} break; case 373: /* Line 1455 of yacc.c */ -#line 1723 "hphp.y" +#line 1717 "hphp.y" { xhp_tag(_p,(yyval),(yyvsp[(2) - (4)]),(yyvsp[(3) - (4)]));;} break; case 374: /* Line 1455 of yacc.c */ -#line 1726 "hphp.y" +#line 1720 "hphp.y" { Token t1; _p->onArray(t1,(yyvsp[(1) - (2)])); Token t2; _p->onArray(t2,(yyvsp[(2) - (2)])); _p->onCallParam((yyvsp[(1) - (2)]),NULL,t1,0); @@ -8171,7 +8165,7 @@ yyreduce: case 375: /* Line 1455 of yacc.c */ -#line 1733 "hphp.y" +#line 1727 "hphp.y" { _p->onArray((yyvsp[(4) - (6)]),(yyvsp[(1) - (6)])); _p->onArray((yyvsp[(5) - (6)]),(yyvsp[(3) - (6)])); _p->onCallParam((yyvsp[(2) - (6)]),NULL,(yyvsp[(4) - (6)]),0); @@ -8182,49 +8176,49 @@ yyreduce: case 376: /* Line 1455 of yacc.c */ -#line 1740 "hphp.y" +#line 1734 "hphp.y" { (yyval).reset(); (yyval).setText("");;} break; case 377: /* Line 1455 of yacc.c */ -#line 1741 "hphp.y" +#line 1735 "hphp.y" { (yyval).reset(); (yyval).setText((yyvsp[(1) - (1)]));;} break; case 378: /* Line 1455 of yacc.c */ -#line 1746 "hphp.y" +#line 1740 "hphp.y" { _p->onArrayPair((yyval),&(yyvsp[(1) - (4)]),&(yyvsp[(2) - (4)]),(yyvsp[(4) - (4)]),0);;} break; case 379: /* Line 1455 of yacc.c */ -#line 1747 "hphp.y" +#line 1741 "hphp.y" { (yyval).reset();;} break; case 380: /* Line 1455 of yacc.c */ -#line 1750 "hphp.y" +#line 1744 "hphp.y" { _p->onArrayPair((yyval),&(yyvsp[(1) - (2)]),0,(yyvsp[(2) - (2)]),0);;} break; case 381: /* Line 1455 of yacc.c */ -#line 1751 "hphp.y" +#line 1745 "hphp.y" { (yyval).reset();;} break; case 382: /* Line 1455 of yacc.c */ -#line 1754 "hphp.y" +#line 1748 "hphp.y" { _p->onScalar((yyval), T_CONSTANT_ENCAPSED_STRING, (yyvsp[(1) - (1)]));;} break; @@ -8232,7 +8226,7 @@ yyreduce: case 383: /* Line 1455 of yacc.c */ -#line 1758 "hphp.y" +#line 1752 "hphp.y" { (yyvsp[(1) - (1)]).xhpDecode(); _p->onScalar((yyval), T_CONSTANT_ENCAPSED_STRING, (yyvsp[(1) - (1)]));;} @@ -8241,14 +8235,14 @@ yyreduce: case 384: /* Line 1455 of yacc.c */ -#line 1761 "hphp.y" +#line 1755 "hphp.y" { (yyval) = (yyvsp[(2) - (3)]);;} break; case 385: /* Line 1455 of yacc.c */ -#line 1764 "hphp.y" +#line 1758 "hphp.y" { (yyval).reset(); if ((yyvsp[(1) - (1)]).htmlTrim()) { (yyvsp[(1) - (1)]).xhpDecode(); @@ -8261,616 +8255,616 @@ yyreduce: case 386: /* Line 1455 of yacc.c */ -#line 1771 "hphp.y" +#line 1765 "hphp.y" { (yyval) = (yyvsp[(2) - (3)]); ;} break; case 387: /* Line 1455 of yacc.c */ -#line 1772 "hphp.y" +#line 1766 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]); ;} break; case 388: /* Line 1455 of yacc.c */ -#line 1776 "hphp.y" +#line 1770 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 389: /* Line 1455 of yacc.c */ -#line 1778 "hphp.y" +#line 1772 "hphp.y" { (yyval) = (yyvsp[(1) - (3)]) + ":" + (yyvsp[(3) - (3)]);;} break; case 390: /* Line 1455 of yacc.c */ -#line 1780 "hphp.y" +#line 1774 "hphp.y" { (yyval) = (yyvsp[(1) - (3)]) + "-" + (yyvsp[(3) - (3)]);;} break; case 391: /* Line 1455 of yacc.c */ -#line 1783 "hphp.y" +#line 1777 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 392: /* Line 1455 of yacc.c */ -#line 1784 "hphp.y" +#line 1778 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 393: /* Line 1455 of yacc.c */ -#line 1785 "hphp.y" +#line 1779 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 394: /* Line 1455 of yacc.c */ -#line 1786 "hphp.y" +#line 1780 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 395: /* Line 1455 of yacc.c */ -#line 1787 "hphp.y" +#line 1781 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 396: /* Line 1455 of yacc.c */ -#line 1788 "hphp.y" +#line 1782 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 397: /* Line 1455 of yacc.c */ -#line 1789 "hphp.y" +#line 1783 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 398: /* Line 1455 of yacc.c */ -#line 1790 "hphp.y" +#line 1784 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 399: /* Line 1455 of yacc.c */ -#line 1791 "hphp.y" +#line 1785 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 400: /* Line 1455 of yacc.c */ -#line 1792 "hphp.y" +#line 1786 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 401: /* Line 1455 of yacc.c */ -#line 1793 "hphp.y" +#line 1787 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 402: /* Line 1455 of yacc.c */ -#line 1794 "hphp.y" +#line 1788 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 403: /* Line 1455 of yacc.c */ -#line 1795 "hphp.y" +#line 1789 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 404: /* Line 1455 of yacc.c */ -#line 1796 "hphp.y" +#line 1790 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 405: /* Line 1455 of yacc.c */ -#line 1797 "hphp.y" +#line 1791 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 406: /* Line 1455 of yacc.c */ -#line 1798 "hphp.y" +#line 1792 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 407: /* Line 1455 of yacc.c */ -#line 1799 "hphp.y" +#line 1793 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 408: /* Line 1455 of yacc.c */ -#line 1800 "hphp.y" +#line 1794 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 409: /* Line 1455 of yacc.c */ -#line 1801 "hphp.y" +#line 1795 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 410: /* Line 1455 of yacc.c */ -#line 1802 "hphp.y" +#line 1796 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 411: /* Line 1455 of yacc.c */ -#line 1803 "hphp.y" +#line 1797 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 412: /* Line 1455 of yacc.c */ -#line 1804 "hphp.y" +#line 1798 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 413: /* Line 1455 of yacc.c */ -#line 1805 "hphp.y" +#line 1799 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 414: /* Line 1455 of yacc.c */ -#line 1806 "hphp.y" +#line 1800 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 415: /* Line 1455 of yacc.c */ -#line 1807 "hphp.y" +#line 1801 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 416: /* Line 1455 of yacc.c */ -#line 1808 "hphp.y" +#line 1802 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 417: /* Line 1455 of yacc.c */ -#line 1809 "hphp.y" +#line 1803 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 418: /* Line 1455 of yacc.c */ -#line 1810 "hphp.y" +#line 1804 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 419: /* Line 1455 of yacc.c */ -#line 1811 "hphp.y" +#line 1805 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 420: /* Line 1455 of yacc.c */ -#line 1812 "hphp.y" +#line 1806 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 421: /* Line 1455 of yacc.c */ -#line 1813 "hphp.y" +#line 1807 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 422: /* Line 1455 of yacc.c */ -#line 1814 "hphp.y" +#line 1808 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 423: /* Line 1455 of yacc.c */ -#line 1815 "hphp.y" +#line 1809 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 424: /* Line 1455 of yacc.c */ -#line 1816 "hphp.y" +#line 1810 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 425: /* Line 1455 of yacc.c */ -#line 1817 "hphp.y" +#line 1811 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 426: /* Line 1455 of yacc.c */ -#line 1818 "hphp.y" +#line 1812 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 427: /* Line 1455 of yacc.c */ -#line 1819 "hphp.y" +#line 1813 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 428: /* Line 1455 of yacc.c */ -#line 1820 "hphp.y" +#line 1814 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 429: /* Line 1455 of yacc.c */ -#line 1821 "hphp.y" +#line 1815 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 430: /* Line 1455 of yacc.c */ -#line 1822 "hphp.y" +#line 1816 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 431: /* Line 1455 of yacc.c */ -#line 1823 "hphp.y" +#line 1817 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 432: /* Line 1455 of yacc.c */ -#line 1824 "hphp.y" +#line 1818 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 433: /* Line 1455 of yacc.c */ -#line 1825 "hphp.y" +#line 1819 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 434: /* Line 1455 of yacc.c */ -#line 1826 "hphp.y" +#line 1820 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 435: /* Line 1455 of yacc.c */ -#line 1827 "hphp.y" +#line 1821 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 436: /* Line 1455 of yacc.c */ -#line 1828 "hphp.y" +#line 1822 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 437: /* Line 1455 of yacc.c */ -#line 1829 "hphp.y" +#line 1823 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 438: /* Line 1455 of yacc.c */ -#line 1830 "hphp.y" +#line 1824 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 439: /* Line 1455 of yacc.c */ -#line 1831 "hphp.y" +#line 1825 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 440: /* Line 1455 of yacc.c */ -#line 1832 "hphp.y" +#line 1826 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 441: /* Line 1455 of yacc.c */ -#line 1833 "hphp.y" +#line 1827 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 442: /* Line 1455 of yacc.c */ -#line 1834 "hphp.y" +#line 1828 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 443: /* Line 1455 of yacc.c */ -#line 1835 "hphp.y" +#line 1829 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 444: /* Line 1455 of yacc.c */ -#line 1836 "hphp.y" +#line 1830 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 445: /* Line 1455 of yacc.c */ -#line 1837 "hphp.y" +#line 1831 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 446: /* Line 1455 of yacc.c */ -#line 1838 "hphp.y" +#line 1832 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 447: /* Line 1455 of yacc.c */ -#line 1839 "hphp.y" +#line 1833 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 448: /* Line 1455 of yacc.c */ -#line 1840 "hphp.y" +#line 1834 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 449: /* Line 1455 of yacc.c */ -#line 1841 "hphp.y" +#line 1835 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 450: /* Line 1455 of yacc.c */ -#line 1842 "hphp.y" +#line 1836 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 451: /* Line 1455 of yacc.c */ -#line 1843 "hphp.y" +#line 1837 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 452: /* Line 1455 of yacc.c */ -#line 1844 "hphp.y" +#line 1838 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 453: /* Line 1455 of yacc.c */ -#line 1845 "hphp.y" +#line 1839 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 454: /* Line 1455 of yacc.c */ -#line 1846 "hphp.y" +#line 1840 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 455: /* Line 1455 of yacc.c */ -#line 1847 "hphp.y" +#line 1841 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 456: /* Line 1455 of yacc.c */ -#line 1848 "hphp.y" +#line 1842 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 457: /* Line 1455 of yacc.c */ -#line 1849 "hphp.y" +#line 1843 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 458: /* Line 1455 of yacc.c */ -#line 1850 "hphp.y" +#line 1844 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 459: /* Line 1455 of yacc.c */ -#line 1851 "hphp.y" +#line 1845 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 460: /* Line 1455 of yacc.c */ -#line 1852 "hphp.y" +#line 1846 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 461: /* Line 1455 of yacc.c */ -#line 1853 "hphp.y" +#line 1847 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 462: /* Line 1455 of yacc.c */ -#line 1854 "hphp.y" +#line 1848 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 463: /* Line 1455 of yacc.c */ -#line 1855 "hphp.y" +#line 1849 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 464: /* Line 1455 of yacc.c */ -#line 1856 "hphp.y" +#line 1850 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 465: /* Line 1455 of yacc.c */ -#line 1857 "hphp.y" +#line 1851 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 466: /* Line 1455 of yacc.c */ -#line 1858 "hphp.y" +#line 1852 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 467: /* Line 1455 of yacc.c */ -#line 1859 "hphp.y" +#line 1853 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 468: /* Line 1455 of yacc.c */ -#line 1864 "hphp.y" +#line 1858 "hphp.y" { _p->onCall((yyval),0,(yyvsp[(1) - (4)]),(yyvsp[(3) - (4)]),NULL);;} break; case 469: /* Line 1455 of yacc.c */ -#line 1868 "hphp.y" +#line 1862 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 470: /* Line 1455 of yacc.c */ -#line 1869 "hphp.y" +#line 1863 "hphp.y" { (yyvsp[(1) - (1)]).xhpLabel(); (yyval) = (yyvsp[(1) - (1)]);;} break; case 471: /* Line 1455 of yacc.c */ -#line 1872 "hphp.y" +#line 1866 "hphp.y" { _p->onName((yyval),(yyvsp[(1) - (1)]),Parser::StringName);;} break; case 472: /* Line 1455 of yacc.c */ -#line 1873 "hphp.y" +#line 1867 "hphp.y" { _p->onName((yyval),(yyvsp[(1) - (1)]),Parser::StaticName);;} break; case 473: /* Line 1455 of yacc.c */ -#line 1874 "hphp.y" +#line 1868 "hphp.y" { _p->onName((yyval),(yyvsp[(1) - (1)]), Parser::StaticClassExprName);;} break; @@ -8878,98 +8872,98 @@ yyreduce: case 474: /* Line 1455 of yacc.c */ -#line 1878 "hphp.y" +#line 1872 "hphp.y" { _p->onName((yyval),(yyvsp[(1) - (1)]),Parser::StringName);;} break; case 475: /* Line 1455 of yacc.c */ -#line 1879 "hphp.y" +#line 1873 "hphp.y" { _p->onName((yyval),(yyvsp[(1) - (1)]),Parser::StaticName);;} break; case 476: /* Line 1455 of yacc.c */ -#line 1880 "hphp.y" +#line 1874 "hphp.y" { _p->onName((yyval),(yyvsp[(1) - (1)]),Parser::ExprName);;} break; case 477: /* Line 1455 of yacc.c */ -#line 1884 "hphp.y" +#line 1878 "hphp.y" { (yyval).reset();;} break; case 478: /* Line 1455 of yacc.c */ -#line 1885 "hphp.y" +#line 1879 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 479: /* Line 1455 of yacc.c */ -#line 1886 "hphp.y" +#line 1880 "hphp.y" { (yyval).reset();;} break; case 480: /* Line 1455 of yacc.c */ -#line 1890 "hphp.y" +#line 1884 "hphp.y" { (yyval).reset();;} break; case 481: /* Line 1455 of yacc.c */ -#line 1891 "hphp.y" +#line 1885 "hphp.y" { _p->addEncap((yyval), NULL, (yyvsp[(1) - (1)]), 0);;} break; case 482: /* Line 1455 of yacc.c */ -#line 1892 "hphp.y" +#line 1886 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 483: /* Line 1455 of yacc.c */ -#line 1896 "hphp.y" +#line 1890 "hphp.y" { (yyval) = (yyvsp[(2) - (3)]);;} break; case 484: /* Line 1455 of yacc.c */ -#line 1897 "hphp.y" +#line 1891 "hphp.y" { (yyval).reset();;} break; case 485: /* Line 1455 of yacc.c */ -#line 1901 "hphp.y" +#line 1895 "hphp.y" { _p->onScalar((yyval), T_LNUMBER, (yyvsp[(1) - (1)]));;} break; case 486: /* Line 1455 of yacc.c */ -#line 1902 "hphp.y" +#line 1896 "hphp.y" { _p->onScalar((yyval), T_DNUMBER, (yyvsp[(1) - (1)]));;} break; case 487: /* Line 1455 of yacc.c */ -#line 1903 "hphp.y" +#line 1897 "hphp.y" { _p->onScalar((yyval), T_CONSTANT_ENCAPSED_STRING, (yyvsp[(1) - (1)]));;} break; @@ -8977,126 +8971,126 @@ yyreduce: case 488: /* Line 1455 of yacc.c */ -#line 1905 "hphp.y" +#line 1899 "hphp.y" { _p->onScalar((yyval), T_LINE, (yyvsp[(1) - (1)]));;} break; case 489: /* Line 1455 of yacc.c */ -#line 1906 "hphp.y" +#line 1900 "hphp.y" { _p->onScalar((yyval), T_FILE, (yyvsp[(1) - (1)]));;} break; case 490: /* Line 1455 of yacc.c */ -#line 1907 "hphp.y" +#line 1901 "hphp.y" { _p->onScalar((yyval), T_DIR, (yyvsp[(1) - (1)]));;} break; case 491: /* Line 1455 of yacc.c */ -#line 1908 "hphp.y" +#line 1902 "hphp.y" { _p->onScalar((yyval), T_CLASS_C, (yyvsp[(1) - (1)]));;} break; case 492: /* Line 1455 of yacc.c */ -#line 1909 "hphp.y" +#line 1903 "hphp.y" { _p->onScalar((yyval), T_TRAIT_C, (yyvsp[(1) - (1)]));;} break; case 493: /* Line 1455 of yacc.c */ -#line 1910 "hphp.y" +#line 1904 "hphp.y" { _p->onScalar((yyval), T_METHOD_C, (yyvsp[(1) - (1)]));;} break; case 494: /* Line 1455 of yacc.c */ -#line 1911 "hphp.y" +#line 1905 "hphp.y" { _p->onScalar((yyval), T_FUNC_C, (yyvsp[(1) - (1)]));;} break; case 495: /* Line 1455 of yacc.c */ -#line 1912 "hphp.y" +#line 1906 "hphp.y" { _p->onScalar((yyval), T_NS_C, (yyvsp[(1) - (1)]));;} break; case 496: /* Line 1455 of yacc.c */ -#line 1913 "hphp.y" +#line 1907 "hphp.y" { _p->onScalar((yyval), T_COMPILER_HALT_OFFSET, (yyvsp[(1) - (1)]));;} break; case 497: /* Line 1455 of yacc.c */ -#line 1916 "hphp.y" +#line 1910 "hphp.y" { _p->onScalar((yyval), T_CONSTANT_ENCAPSED_STRING, (yyvsp[(2) - (3)]));;} break; case 498: /* Line 1455 of yacc.c */ -#line 1918 "hphp.y" +#line 1912 "hphp.y" { (yyval).setText(""); _p->onScalar((yyval), T_CONSTANT_ENCAPSED_STRING, (yyval));;} break; case 499: /* Line 1455 of yacc.c */ -#line 1922 "hphp.y" +#line 1916 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 500: /* Line 1455 of yacc.c */ -#line 1923 "hphp.y" +#line 1917 "hphp.y" { _p->onConstantValue((yyval), (yyvsp[(1) - (1)]));;} break; case 501: /* Line 1455 of yacc.c */ -#line 1924 "hphp.y" +#line 1918 "hphp.y" { UEXP((yyval),(yyvsp[(2) - (2)]),'+',1);;} break; case 502: /* Line 1455 of yacc.c */ -#line 1925 "hphp.y" +#line 1919 "hphp.y" { UEXP((yyval),(yyvsp[(2) - (2)]),'-',1);;} break; case 503: /* Line 1455 of yacc.c */ -#line 1927 "hphp.y" +#line 1921 "hphp.y" { _p->onArray((yyval),(yyvsp[(3) - (4)]),T_ARRAY); ;} break; case 504: /* Line 1455 of yacc.c */ -#line 1928 "hphp.y" +#line 1922 "hphp.y" { _p->onArray((yyval),(yyvsp[(2) - (3)]),T_ARRAY); ;} break; case 505: /* Line 1455 of yacc.c */ -#line 1930 "hphp.y" +#line 1924 "hphp.y" { only_in_hh_syntax(_p); _p->onArray((yyval),(yyvsp[(3) - (4)]),T_ARRAY); ;} break; @@ -9104,28 +9098,28 @@ yyreduce: case 506: /* Line 1455 of yacc.c */ -#line 1932 "hphp.y" +#line 1926 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 507: /* Line 1455 of yacc.c */ -#line 1933 "hphp.y" +#line 1927 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 508: /* Line 1455 of yacc.c */ -#line 1939 "hphp.y" +#line 1933 "hphp.y" { _p->onClassConst((yyval), (yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), 1);;} break; case 509: /* Line 1455 of yacc.c */ -#line 1941 "hphp.y" +#line 1935 "hphp.y" { (yyvsp[(1) - (3)]).xhpLabel(); _p->onClassConst((yyval), (yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), 1);;} break; @@ -9133,49 +9127,49 @@ yyreduce: case 510: /* Line 1455 of yacc.c */ -#line 1946 "hphp.y" +#line 1940 "hphp.y" { _p->onConstantValue((yyval), (yyvsp[(1) - (1)]));;} break; case 511: /* Line 1455 of yacc.c */ -#line 1947 "hphp.y" +#line 1941 "hphp.y" { _p->onConstantValue((yyval), (yyvsp[(1) - (1)]));;} break; case 512: /* Line 1455 of yacc.c */ -#line 1948 "hphp.y" +#line 1942 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 513: /* Line 1455 of yacc.c */ -#line 1949 "hphp.y" +#line 1943 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 514: /* Line 1455 of yacc.c */ -#line 1950 "hphp.y" +#line 1944 "hphp.y" { _p->onEncapsList((yyval),'"',(yyvsp[(2) - (3)]));;} break; case 515: /* Line 1455 of yacc.c */ -#line 1951 "hphp.y" +#line 1945 "hphp.y" { _p->onEncapsList((yyval),'\'',(yyvsp[(2) - (3)]));;} break; case 516: /* Line 1455 of yacc.c */ -#line 1953 "hphp.y" +#line 1947 "hphp.y" { _p->onEncapsList((yyval),T_START_HEREDOC, (yyvsp[(2) - (3)]));;} break; @@ -9183,91 +9177,91 @@ yyreduce: case 517: /* Line 1455 of yacc.c */ -#line 1958 "hphp.y" +#line 1952 "hphp.y" { (yyval) = (yyvsp[(1) - (2)]);;} break; case 518: /* Line 1455 of yacc.c */ -#line 1959 "hphp.y" +#line 1953 "hphp.y" { (yyval).reset();;} break; case 519: /* Line 1455 of yacc.c */ -#line 1963 "hphp.y" +#line 1957 "hphp.y" { (yyval).reset();;} break; case 520: /* Line 1455 of yacc.c */ -#line 1964 "hphp.y" +#line 1958 "hphp.y" { (yyval).reset();;} break; case 521: /* Line 1455 of yacc.c */ -#line 1967 "hphp.y" +#line 1961 "hphp.y" { only_in_hh_syntax(_p); (yyval).reset();;} break; case 522: /* Line 1455 of yacc.c */ -#line 1968 "hphp.y" +#line 1962 "hphp.y" { (yyval).reset();;} break; case 523: /* Line 1455 of yacc.c */ -#line 1974 "hphp.y" +#line 1968 "hphp.y" { _p->onArrayPair((yyval),&(yyvsp[(1) - (5)]),&(yyvsp[(3) - (5)]),(yyvsp[(5) - (5)]),0);;} break; case 524: /* Line 1455 of yacc.c */ -#line 1976 "hphp.y" +#line 1970 "hphp.y" { _p->onArrayPair((yyval),&(yyvsp[(1) - (3)]), 0,(yyvsp[(3) - (3)]),0);;} break; case 525: /* Line 1455 of yacc.c */ -#line 1978 "hphp.y" +#line 1972 "hphp.y" { _p->onArrayPair((yyval), 0,&(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),0);;} break; case 526: /* Line 1455 of yacc.c */ -#line 1979 "hphp.y" +#line 1973 "hphp.y" { _p->onArrayPair((yyval), 0, 0,(yyvsp[(1) - (1)]),0);;} break; case 527: /* Line 1455 of yacc.c */ -#line 1983 "hphp.y" +#line 1977 "hphp.y" { _p->onScalar((yyval), T_LNUMBER, (yyvsp[(1) - (1)]));;} break; case 528: /* Line 1455 of yacc.c */ -#line 1984 "hphp.y" +#line 1978 "hphp.y" { _p->onScalar((yyval), T_DNUMBER, (yyvsp[(1) - (1)]));;} break; case 529: /* Line 1455 of yacc.c */ -#line 1985 "hphp.y" +#line 1979 "hphp.y" { _p->onScalar((yyval), T_CONSTANT_ENCAPSED_STRING, (yyvsp[(1) - (1)]));;} break; @@ -9275,84 +9269,84 @@ yyreduce: case 530: /* Line 1455 of yacc.c */ -#line 1989 "hphp.y" +#line 1983 "hphp.y" { _p->onScalar((yyval), T_CONSTANT_ENCAPSED_STRING, (yyvsp[(2) - (3)]));;} break; case 531: /* Line 1455 of yacc.c */ -#line 1991 "hphp.y" +#line 1985 "hphp.y" { (yyval).setText(""); _p->onScalar((yyval), T_CONSTANT_ENCAPSED_STRING, (yyval));;} break; case 532: /* Line 1455 of yacc.c */ -#line 1994 "hphp.y" +#line 1988 "hphp.y" { _p->onScalar((yyval),T_LNUMBER,(yyvsp[(1) - (1)]));;} break; case 533: /* Line 1455 of yacc.c */ -#line 1995 "hphp.y" +#line 1989 "hphp.y" { _p->onScalar((yyval),T_DNUMBER,(yyvsp[(1) - (1)]));;} break; case 534: /* Line 1455 of yacc.c */ -#line 1996 "hphp.y" +#line 1990 "hphp.y" { constant_ae(_p,(yyval),(yyvsp[(1) - (1)]));;} break; case 535: /* Line 1455 of yacc.c */ -#line 1999 "hphp.y" +#line 1993 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 536: /* Line 1455 of yacc.c */ -#line 2000 "hphp.y" +#line 1994 "hphp.y" { constant_ae(_p,(yyval),(yyvsp[(1) - (1)]));;} break; case 537: /* Line 1455 of yacc.c */ -#line 2001 "hphp.y" +#line 1995 "hphp.y" { UEXP((yyval),(yyvsp[(2) - (2)]),'+',1);;} break; case 538: /* Line 1455 of yacc.c */ -#line 2002 "hphp.y" +#line 1996 "hphp.y" { UEXP((yyval),(yyvsp[(2) - (2)]),'-',1);;} break; case 539: /* Line 1455 of yacc.c */ -#line 2004 "hphp.y" +#line 1998 "hphp.y" { _p->onArray((yyval),(yyvsp[(3) - (4)]),T_ARRAY);;} break; case 540: /* Line 1455 of yacc.c */ -#line 2005 "hphp.y" +#line 1999 "hphp.y" { _p->onArray((yyval),(yyvsp[(2) - (3)]),T_ARRAY);;} break; case 541: /* Line 1455 of yacc.c */ -#line 2007 "hphp.y" +#line 2001 "hphp.y" { only_in_hh_syntax(_p); _p->onArray((yyval),(yyvsp[(3) - (4)]),T_ARRAY); ;} break; @@ -9360,112 +9354,112 @@ yyreduce: case 542: /* Line 1455 of yacc.c */ -#line 2013 "hphp.y" +#line 2007 "hphp.y" { (yyval) = (yyvsp[(1) - (2)]);;} break; case 543: /* Line 1455 of yacc.c */ -#line 2014 "hphp.y" +#line 2008 "hphp.y" { (yyval).reset();;} break; case 544: /* Line 1455 of yacc.c */ -#line 2019 "hphp.y" +#line 2013 "hphp.y" { _p->onArrayPair((yyval),&(yyvsp[(1) - (5)]),&(yyvsp[(3) - (5)]),(yyvsp[(5) - (5)]),0);;} break; case 545: /* Line 1455 of yacc.c */ -#line 2021 "hphp.y" +#line 2015 "hphp.y" { _p->onArrayPair((yyval),&(yyvsp[(1) - (3)]), 0,(yyvsp[(3) - (3)]),0);;} break; case 546: /* Line 1455 of yacc.c */ -#line 2023 "hphp.y" +#line 2017 "hphp.y" { _p->onArrayPair((yyval), 0,&(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),0);;} break; case 547: /* Line 1455 of yacc.c */ -#line 2024 "hphp.y" +#line 2018 "hphp.y" { _p->onArrayPair((yyval), 0, 0,(yyvsp[(1) - (1)]),0);;} break; case 548: /* Line 1455 of yacc.c */ -#line 2028 "hphp.y" +#line 2022 "hphp.y" { _p->onArrayPair((yyval),&(yyvsp[(1) - (3)]), 0,(yyvsp[(3) - (3)]),0);;} break; case 549: /* Line 1455 of yacc.c */ -#line 2029 "hphp.y" +#line 2023 "hphp.y" { _p->onArrayPair((yyval), 0, 0,(yyvsp[(1) - (1)]),0);;} break; case 550: /* Line 1455 of yacc.c */ -#line 2034 "hphp.y" +#line 2028 "hphp.y" { (yyval) = (yyvsp[(1) - (2)]); ;} break; case 551: /* Line 1455 of yacc.c */ -#line 2035 "hphp.y" +#line 2029 "hphp.y" { (yyval).reset(); ;} break; case 552: /* Line 1455 of yacc.c */ -#line 2040 "hphp.y" +#line 2034 "hphp.y" { _p->onArrayPair((yyval),&(yyvsp[(1) - (5)]),&(yyvsp[(3) - (5)]),(yyvsp[(5) - (5)]),0); ;} break; case 553: /* Line 1455 of yacc.c */ -#line 2043 "hphp.y" +#line 2037 "hphp.y" { _p->onArrayPair((yyval), 0,&(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),0); ;} break; case 554: /* Line 1455 of yacc.c */ -#line 2048 "hphp.y" +#line 2042 "hphp.y" { (yyval) = (yyvsp[(1) - (2)]);;} break; case 555: /* Line 1455 of yacc.c */ -#line 2049 "hphp.y" +#line 2043 "hphp.y" { (yyval).reset();;} break; case 556: /* Line 1455 of yacc.c */ -#line 2052 "hphp.y" +#line 2046 "hphp.y" { _p->onArray((yyval),(yyvsp[(2) - (3)]),T_ARRAY);;} break; case 557: /* Line 1455 of yacc.c */ -#line 2053 "hphp.y" +#line 2047 "hphp.y" { Token t; t.reset(); _p->onArray((yyval),t,T_ARRAY);;} break; @@ -9473,693 +9467,693 @@ yyreduce: case 558: /* Line 1455 of yacc.c */ -#line 2060 "hphp.y" +#line 2054 "hphp.y" { _p->onUserAttribute((yyval),&(yyvsp[(1) - (4)]),(yyvsp[(3) - (4)]),(yyvsp[(4) - (4)]));;} break; case 559: /* Line 1455 of yacc.c */ -#line 2062 "hphp.y" +#line 2056 "hphp.y" { _p->onUserAttribute((yyval), 0,(yyvsp[(1) - (2)]),(yyvsp[(2) - (2)]));;} break; case 560: /* Line 1455 of yacc.c */ -#line 2065 "hphp.y" +#line 2059 "hphp.y" { user_attribute_check(_p);;} break; case 561: /* Line 1455 of yacc.c */ -#line 2067 "hphp.y" +#line 2061 "hphp.y" { (yyval) = (yyvsp[(2) - (3)]);;} break; case 562: /* Line 1455 of yacc.c */ -#line 2070 "hphp.y" +#line 2064 "hphp.y" { (yyval) = (yyvsp[(2) - (3)]);;} break; case 563: /* Line 1455 of yacc.c */ -#line 2073 "hphp.y" +#line 2067 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 564: /* Line 1455 of yacc.c */ -#line 2074 "hphp.y" +#line 2068 "hphp.y" { (yyval).reset();;} break; case 565: /* Line 1455 of yacc.c */ -#line 2078 "hphp.y" +#line 2072 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 566: /* Line 1455 of yacc.c */ -#line 2080 "hphp.y" +#line 2074 "hphp.y" { (yyval) = (yyvsp[(2) - (2)]);;} break; case 567: /* Line 1455 of yacc.c */ -#line 2084 "hphp.y" +#line 2078 "hphp.y" { (yyval) = (yyvsp[(2) - (2)]);;} break; case 568: /* Line 1455 of yacc.c */ -#line 2085 "hphp.y" +#line 2079 "hphp.y" { (yyval) = (yyvsp[(3) - (4)]);;} break; case 569: /* Line 1455 of yacc.c */ -#line 2089 "hphp.y" +#line 2083 "hphp.y" { (yyval) = (yyvsp[(2) - (3)]);;} break; case 570: /* Line 1455 of yacc.c */ -#line 2090 "hphp.y" +#line 2084 "hphp.y" { (yyval) = (yyvsp[(2) - (3)]);;} break; case 571: /* Line 1455 of yacc.c */ -#line 2094 "hphp.y" +#line 2088 "hphp.y" { _p->onRefDim((yyval), (yyvsp[(1) - (2)]), (yyvsp[(2) - (2)]));;} break; case 572: /* Line 1455 of yacc.c */ -#line 2096 "hphp.y" +#line 2090 "hphp.y" { _p->onRefDim((yyval), (yyvsp[(2) - (4)]), (yyvsp[(4) - (4)]));;} break; case 573: /* Line 1455 of yacc.c */ -#line 2101 "hphp.y" +#line 2095 "hphp.y" { _p->onRefDim((yyval), (yyvsp[(1) - (2)]), (yyvsp[(2) - (2)]));;} break; case 574: /* Line 1455 of yacc.c */ -#line 2103 "hphp.y" +#line 2097 "hphp.y" { _p->onRefDim((yyval), (yyvsp[(2) - (4)]), (yyvsp[(4) - (4)]));;} break; case 575: /* Line 1455 of yacc.c */ -#line 2107 "hphp.y" +#line 2101 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 576: /* Line 1455 of yacc.c */ -#line 2108 "hphp.y" +#line 2102 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 577: /* Line 1455 of yacc.c */ -#line 2109 "hphp.y" +#line 2103 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 578: /* Line 1455 of yacc.c */ -#line 2110 "hphp.y" +#line 2104 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 579: /* Line 1455 of yacc.c */ -#line 2111 "hphp.y" +#line 2105 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 580: /* Line 1455 of yacc.c */ -#line 2112 "hphp.y" +#line 2106 "hphp.y" { _p->onObjectProperty((yyval),(yyvsp[(1) - (2)]),(yyvsp[(2) - (2)]));;} break; case 581: /* Line 1455 of yacc.c */ -#line 2114 "hphp.y" +#line 2108 "hphp.y" { _p->onObjectProperty((yyval),(yyvsp[(2) - (4)]),(yyvsp[(4) - (4)]));;} break; case 582: /* Line 1455 of yacc.c */ -#line 2117 "hphp.y" +#line 2111 "hphp.y" { _p->onStaticMember((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]));;} break; case 583: /* Line 1455 of yacc.c */ -#line 2119 "hphp.y" +#line 2113 "hphp.y" { _p->onCall((yyval),1,(yyvsp[(1) - (4)]),(yyvsp[(3) - (4)]),NULL);;} break; case 584: /* Line 1455 of yacc.c */ -#line 2120 "hphp.y" +#line 2114 "hphp.y" { (yyval) = (yyvsp[(2) - (3)]);;} break; case 585: /* Line 1455 of yacc.c */ -#line 2124 "hphp.y" +#line 2118 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 586: /* Line 1455 of yacc.c */ -#line 2125 "hphp.y" +#line 2119 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 587: /* Line 1455 of yacc.c */ -#line 2126 "hphp.y" +#line 2120 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 588: /* Line 1455 of yacc.c */ -#line 2127 "hphp.y" +#line 2121 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 589: /* Line 1455 of yacc.c */ -#line 2129 "hphp.y" +#line 2123 "hphp.y" { _p->onObjectProperty((yyval),(yyvsp[(1) - (2)]),(yyvsp[(2) - (2)]));;} break; case 590: /* Line 1455 of yacc.c */ -#line 2131 "hphp.y" +#line 2125 "hphp.y" { _p->onObjectProperty((yyval),(yyvsp[(2) - (4)]),(yyvsp[(4) - (4)]));;} break; case 591: /* Line 1455 of yacc.c */ -#line 2133 "hphp.y" +#line 2127 "hphp.y" { _p->onCall((yyval),1,(yyvsp[(1) - (4)]),(yyvsp[(3) - (4)]),NULL);;} break; case 592: /* Line 1455 of yacc.c */ -#line 2134 "hphp.y" +#line 2128 "hphp.y" { (yyval) = (yyvsp[(2) - (3)]);;} break; case 593: /* Line 1455 of yacc.c */ -#line 2138 "hphp.y" +#line 2132 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 594: /* Line 1455 of yacc.c */ -#line 2139 "hphp.y" +#line 2133 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 595: /* Line 1455 of yacc.c */ -#line 2140 "hphp.y" +#line 2134 "hphp.y" { (yyval) = (yyvsp[(2) - (3)]);;} break; case 596: /* Line 1455 of yacc.c */ -#line 2146 "hphp.y" +#line 2140 "hphp.y" { _p->onObjectMethodCall((yyval),(yyvsp[(1) - (7)]),(yyvsp[(3) - (7)]),(yyvsp[(6) - (7)]));;} break; case 597: /* Line 1455 of yacc.c */ -#line 2149 "hphp.y" +#line 2143 "hphp.y" { _p->onObjectMethodCall((yyval),(yyvsp[(1) - (6)]),(yyvsp[(3) - (6)]),(yyvsp[(5) - (6)]));;} break; case 598: /* Line 1455 of yacc.c */ -#line 2152 "hphp.y" +#line 2146 "hphp.y" { _p->onObjectMethodCall((yyval),(yyvsp[(1) - (8)]),(yyvsp[(4) - (8)]),(yyvsp[(7) - (8)]));;} break; case 599: /* Line 1455 of yacc.c */ -#line 2156 "hphp.y" +#line 2150 "hphp.y" { _p->onObjectMethodCall((yyval),(yyvsp[(2) - (9)]),(yyvsp[(5) - (9)]),(yyvsp[(8) - (9)]));;} break; case 600: /* Line 1455 of yacc.c */ -#line 2160 "hphp.y" +#line 2154 "hphp.y" { _p->onObjectMethodCall((yyval),(yyvsp[(2) - (8)]),(yyvsp[(5) - (8)]),(yyvsp[(7) - (8)]));;} break; case 601: /* Line 1455 of yacc.c */ -#line 2164 "hphp.y" +#line 2158 "hphp.y" { _p->onObjectMethodCall((yyval),(yyvsp[(2) - (10)]),(yyvsp[(6) - (10)]),(yyvsp[(9) - (10)]));;} break; case 602: /* Line 1455 of yacc.c */ -#line 2171 "hphp.y" +#line 2165 "hphp.y" { _p->onCall((yyval),0,(yyvsp[(3) - (7)]),(yyvsp[(6) - (7)]),&(yyvsp[(1) - (7)]));;} break; case 603: /* Line 1455 of yacc.c */ -#line 2175 "hphp.y" +#line 2169 "hphp.y" { _p->onCall((yyval),1,(yyvsp[(3) - (6)]),(yyvsp[(5) - (6)]),&(yyvsp[(1) - (6)]));;} break; case 604: /* Line 1455 of yacc.c */ -#line 2179 "hphp.y" +#line 2173 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 605: /* Line 1455 of yacc.c */ -#line 2181 "hphp.y" +#line 2175 "hphp.y" { _p->onIndirectRef((yyval),(yyvsp[(1) - (2)]),(yyvsp[(2) - (2)]));;} break; case 606: /* Line 1455 of yacc.c */ -#line 2186 "hphp.y" +#line 2180 "hphp.y" { _p->onRefDim((yyval), (yyvsp[(1) - (4)]), (yyvsp[(3) - (4)]));;} break; case 607: /* Line 1455 of yacc.c */ -#line 2187 "hphp.y" +#line 2181 "hphp.y" { _p->onRefDim((yyval), (yyvsp[(1) - (4)]), (yyvsp[(3) - (4)]));;} break; case 608: /* Line 1455 of yacc.c */ -#line 2188 "hphp.y" +#line 2182 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 609: /* Line 1455 of yacc.c */ -#line 2191 "hphp.y" +#line 2185 "hphp.y" { _p->onSimpleVariable((yyval), (yyvsp[(1) - (1)]));;} break; case 610: /* Line 1455 of yacc.c */ -#line 2192 "hphp.y" +#line 2186 "hphp.y" { _p->onDynamicVariable((yyval), (yyvsp[(3) - (4)]), 0);;} break; case 611: /* Line 1455 of yacc.c */ -#line 2195 "hphp.y" +#line 2189 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 612: /* Line 1455 of yacc.c */ -#line 2196 "hphp.y" +#line 2190 "hphp.y" { (yyval).reset();;} break; case 613: /* Line 1455 of yacc.c */ -#line 2200 "hphp.y" +#line 2194 "hphp.y" { (yyval) = 1;;} break; case 614: /* Line 1455 of yacc.c */ -#line 2201 "hphp.y" +#line 2195 "hphp.y" { (yyval)++;;} break; case 615: /* Line 1455 of yacc.c */ -#line 2205 "hphp.y" +#line 2199 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 616: /* Line 1455 of yacc.c */ -#line 2206 "hphp.y" +#line 2200 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 617: /* Line 1455 of yacc.c */ -#line 2207 "hphp.y" +#line 2201 "hphp.y" { _p->onObjectProperty((yyval),(yyvsp[(1) - (2)]),(yyvsp[(2) - (2)]));;} break; case 618: /* Line 1455 of yacc.c */ -#line 2209 "hphp.y" +#line 2203 "hphp.y" { _p->onObjectProperty((yyval),(yyvsp[(2) - (4)]),(yyvsp[(4) - (4)]));;} break; case 619: /* Line 1455 of yacc.c */ -#line 2212 "hphp.y" +#line 2206 "hphp.y" { _p->onStaticMember((yyval),(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]));;} break; case 620: /* Line 1455 of yacc.c */ -#line 2213 "hphp.y" +#line 2207 "hphp.y" { (yyval) = (yyvsp[(2) - (3)]);;} break; case 622: /* Line 1455 of yacc.c */ -#line 2217 "hphp.y" +#line 2211 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]);;} break; case 623: /* Line 1455 of yacc.c */ -#line 2219 "hphp.y" +#line 2213 "hphp.y" { _p->onObjectProperty((yyval),(yyvsp[(1) - (2)]),(yyvsp[(2) - (2)]));;} break; case 624: /* Line 1455 of yacc.c */ -#line 2221 "hphp.y" +#line 2215 "hphp.y" { _p->onObjectProperty((yyval),(yyvsp[(2) - (4)]),(yyvsp[(4) - (4)]));;} break; case 625: /* Line 1455 of yacc.c */ -#line 2222 "hphp.y" +#line 2216 "hphp.y" { (yyval) = (yyvsp[(2) - (3)]);;} break; case 626: /* Line 1455 of yacc.c */ -#line 2226 "hphp.y" +#line 2220 "hphp.y" { _p->onAListVar((yyval),&(yyvsp[(1) - (2)]),NULL);;} break; case 627: /* Line 1455 of yacc.c */ -#line 2227 "hphp.y" +#line 2221 "hphp.y" { _p->onAListVar((yyval),&(yyvsp[(1) - (3)]),&(yyvsp[(3) - (3)]));;} break; case 628: /* Line 1455 of yacc.c */ -#line 2229 "hphp.y" +#line 2223 "hphp.y" { _p->onAListSub((yyval),&(yyvsp[(1) - (6)]),(yyvsp[(5) - (6)]));;} break; case 629: /* Line 1455 of yacc.c */ -#line 2230 "hphp.y" +#line 2224 "hphp.y" { _p->onAListVar((yyval),NULL,NULL);;} break; case 630: /* Line 1455 of yacc.c */ -#line 2231 "hphp.y" +#line 2225 "hphp.y" { _p->onAListVar((yyval),NULL,&(yyvsp[(1) - (1)]));;} break; case 631: /* Line 1455 of yacc.c */ -#line 2232 "hphp.y" +#line 2226 "hphp.y" { _p->onAListSub((yyval),NULL,(yyvsp[(3) - (4)]));;} break; case 632: /* Line 1455 of yacc.c */ -#line 2237 "hphp.y" +#line 2231 "hphp.y" { (yyval) = (yyvsp[(1) - (2)]);;} break; case 633: /* Line 1455 of yacc.c */ -#line 2238 "hphp.y" +#line 2232 "hphp.y" { (yyval).reset();;} break; case 634: /* Line 1455 of yacc.c */ -#line 2242 "hphp.y" +#line 2236 "hphp.y" { _p->onArrayPair((yyval),&(yyvsp[(1) - (5)]),&(yyvsp[(3) - (5)]),(yyvsp[(5) - (5)]),0);;} break; case 635: /* Line 1455 of yacc.c */ -#line 2243 "hphp.y" +#line 2237 "hphp.y" { _p->onArrayPair((yyval),&(yyvsp[(1) - (3)]), 0,(yyvsp[(3) - (3)]),0);;} break; case 636: /* Line 1455 of yacc.c */ -#line 2244 "hphp.y" +#line 2238 "hphp.y" { _p->onArrayPair((yyval), 0,&(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]),0);;} break; case 637: /* Line 1455 of yacc.c */ -#line 2245 "hphp.y" +#line 2239 "hphp.y" { _p->onArrayPair((yyval), 0, 0,(yyvsp[(1) - (1)]),0);;} break; case 638: /* Line 1455 of yacc.c */ -#line 2248 "hphp.y" +#line 2242 "hphp.y" { _p->onArrayPair((yyval),&(yyvsp[(1) - (6)]),&(yyvsp[(3) - (6)]),(yyvsp[(6) - (6)]),1);;} break; case 639: /* Line 1455 of yacc.c */ -#line 2250 "hphp.y" +#line 2244 "hphp.y" { _p->onArrayPair((yyval),&(yyvsp[(1) - (4)]), 0,(yyvsp[(4) - (4)]),1);;} break; case 640: /* Line 1455 of yacc.c */ -#line 2251 "hphp.y" +#line 2245 "hphp.y" { _p->onArrayPair((yyval), 0,&(yyvsp[(1) - (4)]),(yyvsp[(4) - (4)]),1);;} break; case 641: /* Line 1455 of yacc.c */ -#line 2252 "hphp.y" +#line 2246 "hphp.y" { _p->onArrayPair((yyval), 0, 0,(yyvsp[(2) - (2)]),1);;} break; case 642: /* Line 1455 of yacc.c */ -#line 2257 "hphp.y" +#line 2251 "hphp.y" { (yyval) = (yyvsp[(1) - (2)]);;} break; case 643: /* Line 1455 of yacc.c */ -#line 2258 "hphp.y" +#line 2252 "hphp.y" { _p->onEmptyCollection((yyval));;} break; case 644: /* Line 1455 of yacc.c */ -#line 2262 "hphp.y" +#line 2256 "hphp.y" { _p->onCollectionPair((yyval),&(yyvsp[(1) - (5)]),&(yyvsp[(3) - (5)]),(yyvsp[(5) - (5)]));;} break; case 645: /* Line 1455 of yacc.c */ -#line 2263 "hphp.y" +#line 2257 "hphp.y" { _p->onCollectionPair((yyval),&(yyvsp[(1) - (3)]), 0,(yyvsp[(3) - (3)]));;} break; case 646: /* Line 1455 of yacc.c */ -#line 2264 "hphp.y" +#line 2258 "hphp.y" { _p->onCollectionPair((yyval), 0,&(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]));;} break; case 647: /* Line 1455 of yacc.c */ -#line 2265 "hphp.y" +#line 2259 "hphp.y" { _p->onCollectionPair((yyval), 0, 0,(yyvsp[(1) - (1)]));;} break; case 648: /* Line 1455 of yacc.c */ -#line 2270 "hphp.y" +#line 2264 "hphp.y" { (yyval) = (yyvsp[(1) - (2)]);;} break; case 649: /* Line 1455 of yacc.c */ -#line 2271 "hphp.y" +#line 2265 "hphp.y" { _p->onEmptyCollection((yyval));;} break; case 650: /* Line 1455 of yacc.c */ -#line 2276 "hphp.y" +#line 2270 "hphp.y" { _p->onCollectionPair((yyval),&(yyvsp[(1) - (5)]),&(yyvsp[(3) - (5)]),(yyvsp[(5) - (5)]));;} break; case 651: /* Line 1455 of yacc.c */ -#line 2278 "hphp.y" +#line 2272 "hphp.y" { _p->onCollectionPair((yyval),&(yyvsp[(1) - (3)]), 0,(yyvsp[(3) - (3)]));;} break; case 652: /* Line 1455 of yacc.c */ -#line 2280 "hphp.y" +#line 2274 "hphp.y" { _p->onCollectionPair((yyval), 0,&(yyvsp[(1) - (3)]),(yyvsp[(3) - (3)]));;} break; case 653: /* Line 1455 of yacc.c */ -#line 2281 "hphp.y" +#line 2275 "hphp.y" { _p->onCollectionPair((yyval), 0, 0,(yyvsp[(1) - (1)]));;} break; case 654: /* Line 1455 of yacc.c */ -#line 2285 "hphp.y" +#line 2279 "hphp.y" { _p->addEncap((yyval), &(yyvsp[(1) - (2)]), (yyvsp[(2) - (2)]), -1);;} break; case 655: /* Line 1455 of yacc.c */ -#line 2287 "hphp.y" +#line 2281 "hphp.y" { _p->addEncap((yyval), &(yyvsp[(1) - (2)]), (yyvsp[(2) - (2)]), 0);;} break; case 656: /* Line 1455 of yacc.c */ -#line 2288 "hphp.y" +#line 2282 "hphp.y" { _p->addEncap((yyval), NULL, (yyvsp[(1) - (1)]), -1);;} break; case 657: /* Line 1455 of yacc.c */ -#line 2290 "hphp.y" +#line 2284 "hphp.y" { _p->addEncap((yyval), NULL, (yyvsp[(1) - (2)]), 0); _p->addEncap((yyval), &(yyval), (yyvsp[(2) - (2)]), -1); ;} break; @@ -10167,140 +10161,140 @@ yyreduce: case 658: /* Line 1455 of yacc.c */ -#line 2295 "hphp.y" +#line 2289 "hphp.y" { _p->onSimpleVariable((yyval), (yyvsp[(1) - (1)]));;} break; case 659: /* Line 1455 of yacc.c */ -#line 2297 "hphp.y" +#line 2291 "hphp.y" { _p->encapRefDim((yyval), (yyvsp[(1) - (4)]), (yyvsp[(3) - (4)]));;} break; case 660: /* Line 1455 of yacc.c */ -#line 2299 "hphp.y" +#line 2293 "hphp.y" { _p->encapObjProp((yyval), (yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]));;} break; case 661: /* Line 1455 of yacc.c */ -#line 2301 "hphp.y" +#line 2295 "hphp.y" { _p->onDynamicVariable((yyval), (yyvsp[(2) - (3)]), 1);;} break; case 662: /* Line 1455 of yacc.c */ -#line 2303 "hphp.y" +#line 2297 "hphp.y" { _p->encapArray((yyval), (yyvsp[(2) - (6)]), (yyvsp[(4) - (6)]));;} break; case 663: /* Line 1455 of yacc.c */ -#line 2304 "hphp.y" +#line 2298 "hphp.y" { (yyval) = (yyvsp[(2) - (3)]);;} break; case 664: /* Line 1455 of yacc.c */ -#line 2307 "hphp.y" +#line 2301 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]); (yyval) = T_STRING;;} break; case 665: /* Line 1455 of yacc.c */ -#line 2308 "hphp.y" +#line 2302 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]); (yyval) = T_NUM_STRING;;} break; case 666: /* Line 1455 of yacc.c */ -#line 2309 "hphp.y" +#line 2303 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]); (yyval) = T_VARIABLE;;} break; case 667: /* Line 1455 of yacc.c */ -#line 2313 "hphp.y" +#line 2307 "hphp.y" { UEXP((yyval),(yyvsp[(3) - (4)]),T_ISSET,1);;} break; case 668: /* Line 1455 of yacc.c */ -#line 2314 "hphp.y" +#line 2308 "hphp.y" { UEXP((yyval),(yyvsp[(3) - (4)]),T_EMPTY,1);;} break; case 669: /* Line 1455 of yacc.c */ -#line 2315 "hphp.y" +#line 2309 "hphp.y" { UEXP((yyval),(yyvsp[(2) - (2)]),T_INCLUDE,1);;} break; case 670: /* Line 1455 of yacc.c */ -#line 2316 "hphp.y" +#line 2310 "hphp.y" { UEXP((yyval),(yyvsp[(2) - (2)]),T_INCLUDE_ONCE,1);;} break; case 671: /* Line 1455 of yacc.c */ -#line 2317 "hphp.y" +#line 2311 "hphp.y" { UEXP((yyval),(yyvsp[(3) - (4)]),T_EVAL,1);;} break; case 672: /* Line 1455 of yacc.c */ -#line 2318 "hphp.y" +#line 2312 "hphp.y" { UEXP((yyval),(yyvsp[(2) - (2)]),T_REQUIRE,1);;} break; case 673: /* Line 1455 of yacc.c */ -#line 2319 "hphp.y" +#line 2313 "hphp.y" { UEXP((yyval),(yyvsp[(2) - (2)]),T_REQUIRE_ONCE,1);;} break; case 674: /* Line 1455 of yacc.c */ -#line 2323 "hphp.y" +#line 2317 "hphp.y" { _p->onExprListElem((yyval), NULL, (yyvsp[(1) - (1)]));;} break; case 675: /* Line 1455 of yacc.c */ -#line 2324 "hphp.y" +#line 2318 "hphp.y" { _p->onExprListElem((yyval), &(yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]));;} break; case 676: /* Line 1455 of yacc.c */ -#line 2329 "hphp.y" +#line 2323 "hphp.y" { _p->onClassConst((yyval), (yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), 0);;} break; case 677: /* Line 1455 of yacc.c */ -#line 2338 "hphp.y" +#line 2332 "hphp.y" { only_in_hh_syntax(_p); _p->onTypedef((yyval), (yyvsp[(2) - (5)]), (yyvsp[(4) - (5)])); _p->popTypeScope(); ;} @@ -10309,28 +10303,28 @@ yyreduce: case 678: /* Line 1455 of yacc.c */ -#line 2344 "hphp.y" +#line 2338 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]); ;} break; case 679: /* Line 1455 of yacc.c */ -#line 2345 "hphp.y" +#line 2339 "hphp.y" { only_in_hh_syntax(_p); (yyval) = (yyvsp[(2) - (2)]); ;} break; case 680: /* Line 1455 of yacc.c */ -#line 2351 "hphp.y" +#line 2345 "hphp.y" { _p->pushTypeScope(); (yyval) = (yyvsp[(1) - (1)]); ;} break; case 681: /* Line 1455 of yacc.c */ -#line 2355 "hphp.y" +#line 2349 "hphp.y" { _p->pushTypeScope(); (yyval) = (yyvsp[(1) - (4)]); only_in_hh_syntax(_p); ;} break; @@ -10338,21 +10332,21 @@ yyreduce: case 682: /* Line 1455 of yacc.c */ -#line 2362 "hphp.y" +#line 2356 "hphp.y" { only_in_hh_syntax(_p); (yyval) = (yyvsp[(2) - (3)]); ;} break; case 683: /* Line 1455 of yacc.c */ -#line 2363 "hphp.y" +#line 2357 "hphp.y" { (yyval).reset(); ;} break; case 684: /* Line 1455 of yacc.c */ -#line 2367 "hphp.y" +#line 2361 "hphp.y" { Token t; t.reset(); _p->onTypeList((yyvsp[(1) - (1)]), t); (yyval) = (yyvsp[(1) - (1)]); ;} @@ -10361,7 +10355,7 @@ yyreduce: case 685: /* Line 1455 of yacc.c */ -#line 2370 "hphp.y" +#line 2364 "hphp.y" { _p->onTypeList((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)])); (yyval) = (yyvsp[(1) - (3)]); ;} break; @@ -10369,98 +10363,98 @@ yyreduce: case 686: /* Line 1455 of yacc.c */ -#line 2375 "hphp.y" +#line 2369 "hphp.y" { (yyval) = (yyvsp[(1) - (3)]); ;} break; case 687: /* Line 1455 of yacc.c */ -#line 2376 "hphp.y" +#line 2370 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]); ;} break; case 688: /* Line 1455 of yacc.c */ -#line 2377 "hphp.y" +#line 2371 "hphp.y" { (yyval).reset(); ;} break; case 689: /* Line 1455 of yacc.c */ -#line 2378 "hphp.y" +#line 2372 "hphp.y" { (yyval).reset(); ;} break; case 690: /* Line 1455 of yacc.c */ -#line 2382 "hphp.y" +#line 2376 "hphp.y" { (yyval).reset(); ;} break; case 691: /* Line 1455 of yacc.c */ -#line 2383 "hphp.y" +#line 2377 "hphp.y" { only_in_hh_syntax(_p); (yyval) = (yyvsp[(2) - (2)]); ;} break; case 692: /* Line 1455 of yacc.c */ -#line 2388 "hphp.y" +#line 2382 "hphp.y" { _p->addTypeVar((yyvsp[(3) - (3)]).text()); ;} break; case 693: /* Line 1455 of yacc.c */ -#line 2389 "hphp.y" +#line 2383 "hphp.y" { _p->addTypeVar((yyvsp[(1) - (1)]).text()); ;} break; case 694: /* Line 1455 of yacc.c */ -#line 2391 "hphp.y" +#line 2385 "hphp.y" { _p->addTypeVar((yyvsp[(3) - (5)]).text()); ;} break; case 695: /* Line 1455 of yacc.c */ -#line 2392 "hphp.y" +#line 2386 "hphp.y" { _p->addTypeVar((yyvsp[(1) - (3)]).text()); ;} break; case 696: /* Line 1455 of yacc.c */ -#line 2398 "hphp.y" +#line 2392 "hphp.y" { validate_shape_keyname((yyvsp[(1) - (3)]), _p); ;} break; case 699: /* Line 1455 of yacc.c */ -#line 2409 "hphp.y" +#line 2403 "hphp.y" { (yyval) = (yyvsp[(1) - (2)]); ;} break; case 700: /* Line 1455 of yacc.c */ -#line 2411 "hphp.y" +#line 2405 "hphp.y" {;} break; case 701: /* Line 1455 of yacc.c */ -#line 2415 "hphp.y" +#line 2409 "hphp.y" { only_in_hh_syntax(_p); (yyval).setText("array"); ;} break; @@ -10468,7 +10462,7 @@ yyreduce: case 702: /* Line 1455 of yacc.c */ -#line 2423 "hphp.y" +#line 2417 "hphp.y" { only_in_hh_syntax(_p); _p->onTypeSpecialization((yyvsp[(2) - (2)]), '?'); (yyval) = (yyvsp[(2) - (2)]); ;} @@ -10477,7 +10471,7 @@ yyreduce: case 703: /* Line 1455 of yacc.c */ -#line 2426 "hphp.y" +#line 2420 "hphp.y" { only_in_hh_syntax(_p); _p->onTypeSpecialization((yyvsp[(2) - (2)]), '@'); (yyval) = (yyvsp[(2) - (2)]); ;} @@ -10486,14 +10480,14 @@ yyreduce: case 704: /* Line 1455 of yacc.c */ -#line 2429 "hphp.y" +#line 2423 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]); ;} break; case 705: /* Line 1455 of yacc.c */ -#line 2430 "hphp.y" +#line 2424 "hphp.y" { Token t; t.reset(); (yyvsp[(1) - (1)]).setText("array"); _p->onTypeAnnotation((yyval), (yyvsp[(1) - (1)]), t); ;} @@ -10502,14 +10496,14 @@ yyreduce: case 706: /* Line 1455 of yacc.c */ -#line 2433 "hphp.y" +#line 2427 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]); ;} break; case 707: /* Line 1455 of yacc.c */ -#line 2435 "hphp.y" +#line 2429 "hphp.y" { only_in_hh_syntax(_p); (yyvsp[(1) - (4)]).setText("array"); _p->onTypeAnnotation((yyval), (yyvsp[(1) - (4)]), (yyvsp[(3) - (4)])); ;} @@ -10518,7 +10512,7 @@ yyreduce: case 708: /* Line 1455 of yacc.c */ -#line 2439 "hphp.y" +#line 2433 "hphp.y" { only_in_hh_syntax(_p); _p->onTypeList((yyvsp[(3) - (6)]), (yyvsp[(5) - (6)])); (yyvsp[(1) - (6)]).setText("array"); @@ -10528,7 +10522,7 @@ yyreduce: case 709: /* Line 1455 of yacc.c */ -#line 2443 "hphp.y" +#line 2437 "hphp.y" { (yyvsp[(1) - (1)]).xhpLabel(); Token t; t.reset(); _p->onTypeAnnotation((yyval), (yyvsp[(1) - (1)]), t); @@ -10538,7 +10532,7 @@ yyreduce: case 710: /* Line 1455 of yacc.c */ -#line 2449 "hphp.y" +#line 2443 "hphp.y" { only_in_hh_syntax(_p); _p->onTypeList((yyvsp[(7) - (8)]), (yyvsp[(4) - (8)])); _p->onTypeAnnotation((yyval), (yyvsp[(2) - (8)]), (yyvsp[(7) - (8)])); @@ -10548,7 +10542,7 @@ yyreduce: case 711: /* Line 1455 of yacc.c */ -#line 2453 "hphp.y" +#line 2447 "hphp.y" { only_in_hh_syntax(_p); _p->onTypeList((yyvsp[(2) - (5)]), (yyvsp[(4) - (5)])); Token t; t.reset(); t.setText("array"); @@ -10559,21 +10553,21 @@ yyreduce: case 712: /* Line 1455 of yacc.c */ -#line 2461 "hphp.y" +#line 2455 "hphp.y" { (yyval) = (yyvsp[(1) - (1)]); ;} break; case 713: /* Line 1455 of yacc.c */ -#line 2462 "hphp.y" +#line 2456 "hphp.y" { (yyval).reset(); ;} break; /* Line 1455 of yacc.c */ -#line 10577 "new_hphp.tab.cpp" +#line 10571 "new_hphp.tab.cpp" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -10792,7 +10786,7 @@ yyreturn: /* Line 1675 of yacc.c */ -#line 2465 "hphp.y" +#line 2459 "hphp.y" bool Parser::parseImpl() { return yyparse(this) == 0; diff --git a/hphp/compiler/parser/parser.cpp b/hphp/compiler/parser/parser.cpp index 00be9c4b9..a8ab64236 100644 --- a/hphp/compiler/parser/parser.cpp +++ b/hphp/compiler/parser/parser.cpp @@ -115,7 +115,7 @@ extern void prepare_generator(Parser *_p, Token &stmt, Token ¶ms); extern void create_generator(Parser *_p, Token &out, Token ¶ms, Token &name, const std::string &closureName, const char *clsname, Token *modifiers, - bool getArgs, Token &origGenFunc, bool isHhvm, + Token &origGenFunc, bool isHhvm, Token *attr); namespace HPHP { @@ -858,7 +858,7 @@ void Parser::onFunction(Token &out, Token *modifiers, Token &ret, Token &ref, pushComment(comment); Token origGenFunc; create_generator(this, out, params, name, closureName, nullptr, nullptr, - hasCallToGetArgs, origGenFunc, + origGenFunc, (!Option::WholeProgram || !Option::ParseTimeOpts), attr); m_closureGenerator = false; @@ -867,6 +867,8 @@ void Parser::onFunction(Token &out, Token *modifiers, Token &ret, Token &ref, assert(origStmt); func->setOrigGeneratorFunc(origStmt); origStmt->setGeneratorFunc(func); + origStmt->setHasCallToGetArgs(hasCallToGetArgs); + func->setHasCallToGetArgs(hasCallToGetArgs); } } else { @@ -1155,7 +1157,7 @@ void Parser::onMethod(Token &out, Token &modifiers, Token &ret, Token &ref, pushComment(comment); Token origGenFunc; create_generator(this, out, params, name, closureName, m_clsName.c_str(), - &modifiers, hasCallToGetArgs, origGenFunc, + &modifiers, origGenFunc, (!Option::WholeProgram || !Option::ParseTimeOpts), attr); MethodStatementPtr origStmt = @@ -1163,7 +1165,8 @@ void Parser::onMethod(Token &out, Token &modifiers, Token &ret, Token &ref, assert(origStmt); mth->setOrigGeneratorFunc(origStmt); origStmt->setGeneratorFunc(mth); - + origStmt->setHasCallToGetArgs(hasCallToGetArgs); + mth->setHasCallToGetArgs(hasCallToGetArgs); } else { ExpressionListPtr attrList; if (attr && attr->exp) { diff --git a/hphp/compiler/statement/method_statement.cpp b/hphp/compiler/statement/method_statement.cpp index c7e3d61f6..299c5f3ae 100644 --- a/hphp/compiler/statement/method_statement.cpp +++ b/hphp/compiler/statement/method_statement.cpp @@ -63,7 +63,7 @@ MethodStatement::MethodStatement StatementListPtr stmt, int attr, const string &docComment, ExpressionListPtr attrList, bool method /* = true */) : Statement(STATEMENT_CONSTRUCTOR_BASE_PARAMETER_VALUES), - m_method(method), m_ref(ref), m_attribute(attr), + m_method(method), m_ref(ref), m_hasCallToGetArgs(false), m_attribute(attr), m_cppLength(-1), m_modifiers(modifiers), m_originalName(name), m_params(params), m_retTypeConstraint(retTypeConstraint), m_stmt(stmt), @@ -79,8 +79,8 @@ MethodStatement::MethodStatement int attr, const string &docComment, ExpressionListPtr attrList, bool method /* = true */) : Statement(STATEMENT_CONSTRUCTOR_PARAMETER_VALUES(MethodStatement)), - m_method(method), m_ref(ref), m_attribute(attr), m_cppLength(-1), - m_modifiers(modifiers), m_originalName(name), + m_method(method), m_ref(ref), m_hasCallToGetArgs(false), m_attribute(attr), + m_cppLength(-1), m_modifiers(modifiers), m_originalName(name), m_params(params), m_retTypeConstraint(retTypeConstraint), m_stmt(stmt), m_docComment(docComment), m_attrList(attrList) { m_name = Util::toLower(name); diff --git a/hphp/compiler/statement/method_statement.h b/hphp/compiler/statement/method_statement.h index e92bacdc6..d473f81bc 100644 --- a/hphp/compiler/statement/method_statement.h +++ b/hphp/compiler/statement/method_statement.h @@ -130,9 +130,13 @@ public: void addTraitMethodToScope(AnalysisResultConstPtr ar, ClassScopePtr classScope); + void setHasCallToGetArgs(bool f) { m_hasCallToGetArgs = f; } + bool hasCallToGetArgs() const { return m_hasCallToGetArgs; } + protected: bool m_method; bool m_ref; + bool m_hasCallToGetArgs; int m_attribute; int m_cppLength; ModifierExpressionPtr m_modifiers; diff --git a/hphp/doc/bytecode.specification b/hphp/doc/bytecode.specification index 61d2e0451..608a7f062 100644 --- a/hphp/doc/bytecode.specification +++ b/hphp/doc/bytecode.specification @@ -3680,13 +3680,12 @@ ArrayIdx [C C C] -> [C] 14. Continuation creation and execution --------------------------------------- -CreateCont [] -> [C] +CreateCont [] -> [C] - Creates a GenericContinuation object and pushes it on the stack. The - Continuation will capture all defined local variables in the current - function, and if the immediate is nonzero it will also store the - result of func_get_args(). The Continuation will store a reference to the - function named by the string immediate to be used as its body. + Creates a Continuation object and pushes it on the stack. The Continuation + will capture all defined local variables in the current function. The + Continuation will store a reference to the function named by the string + immediate to be used as its body. ContEnter [] -> [] diff --git a/hphp/idl/continuation.idl.json b/hphp/idl/continuation.idl.json index 4c6cd85aa..5eb1e11fb 100644 --- a/hphp/idl/continuation.idl.json +++ b/hphp/idl/continuation.idl.json @@ -93,40 +93,6 @@ "args": [ ] }, - { - "name": "num_args", - "return": { - "type": "Int64" - }, - "flags": [ - ], - "args": [ - ] - }, - { - "name": "get_args", - "return": { - "type": "VariantVec" - }, - "flags": [ - ], - "args": [ - ] - }, - { - "name": "get_arg", - "return": { - "type": "Variant" - }, - "args": [ - { - "name": "id", - "type": "Int64" - } - ], - "flags": [ - ] - }, { "name": "current", "return": { diff --git a/hphp/runtime/base/execution_context.h b/hphp/runtime/base/execution_context.h index 360dcbccb..ddca7b47c 100644 --- a/hphp/runtime/base/execution_context.h +++ b/hphp/runtime/base/execution_context.h @@ -436,10 +436,9 @@ public: const Func* origFunc, const Func* genFunc, ObjectData* thisPtr, - ArrayData* args, Class* frameStaticCls); template - static c_Continuation* createContinuation(ActRec* fp, bool getArgs, + static c_Continuation* createContinuation(ActRec* fp, const Func* origFunc, const Func* genFunc); static c_Continuation* fillContinuationVars( diff --git a/hphp/runtime/ext/ext_continuation.cpp b/hphp/runtime/ext/ext_continuation.cpp index b1919460a..0650ff1f1 100644 --- a/hphp/runtime/ext/ext_continuation.cpp +++ b/hphp/runtime/ext/ext_continuation.cpp @@ -91,19 +91,6 @@ int64_t c_Continuation::t_getlabel() { return m_label; } -int64_t c_Continuation::t_num_args() { - return m_args.size(); -} - -Array c_Continuation::t_get_args() { - return m_args; -} - -Variant c_Continuation::t_get_arg(int64_t id) { - if (id < 0LL || id >= m_args.size()) return false; - return m_args.rvalAt(id, AccessFlags::Error); -} - Variant c_Continuation::t_current() { const_assert(false); return m_value; diff --git a/hphp/runtime/ext/ext_continuation.h b/hphp/runtime/ext/ext_continuation.h index 4ddd4941d..bdc1e5c49 100644 --- a/hphp/runtime/ext/ext_continuation.h +++ b/hphp/runtime/ext/ext_continuation.h @@ -45,13 +45,6 @@ class c_Continuation : public ExtObjectData { ~c_Continuation(); public: - void init(const Func* origFunc, - ArrayData* args) noexcept { - m_origFunc = const_cast(origFunc); - assert(m_origFunc); - m_args = args; - } - bool done() const { return o_subclassData.u8[0]; } bool running() const { return o_subclassData.u8[1]; } void setDone(bool done) { o_subclassData.u8[0] = done; } @@ -67,9 +60,6 @@ public: void t_update(int64_t label, CVarRef value); Object t_getwaithandle(); int64_t t_getlabel(); - int64_t t_num_args(); - Array t_get_args(); - Variant t_get_arg(int64_t id); Variant t_current(); int64_t t_key(); void t_next(); @@ -81,14 +71,17 @@ public: String t_getcalledclass(); Variant t___clone(); - static c_Continuation* alloc(Class* cls, int nLocals, int nIters) { + static c_Continuation* alloc(const Func* origFunc, int nLocals, int nIters) { + assert(origFunc); + size_t arOffset = sizeof(c_Continuation) + sizeof(Iter) * nIters + sizeof(TypedValue) * nLocals; arOffset += sizeof(TypedValue) - 1; arOffset &= ~(sizeof(TypedValue) - 1); c_Continuation* cont = (c_Continuation*)ALLOCOBJSZ(arOffset + sizeof(ActRec)); - new ((void *)cont) c_Continuation(cls); + new ((void *)cont) c_Continuation(); + cont->m_origFunc = const_cast(origFunc); cont->m_arPtr = (ActRec*)(uintptr_t(cont) + arOffset); memset((void*)((uintptr_t)cont + sizeof(c_Continuation)), 0, arOffset - sizeof(c_Continuation)); @@ -129,7 +122,6 @@ public: Variant m_received; Func *m_origFunc; ActRec* m_arPtr; - Array m_args; p_ContinuationWaitHandle m_waitHandle; String& getCalledClass() { not_reached(); } diff --git a/hphp/runtime/vm/bytecode.cpp b/hphp/runtime/vm/bytecode.cpp index c482c5bd6..3f6cd4628 100644 --- a/hphp/runtime/vm/bytecode.cpp +++ b/hphp/runtime/vm/bytecode.cpp @@ -6986,16 +6986,14 @@ c_Continuation* VMExecutionContext::createContinuationHelper(const Func* origFunc, const Func* genFunc, ObjectData* thisPtr, - ArrayData* args, Class* frameStaticCls) { auto const cont = c_Continuation::alloc( - SystemLib::s_ContinuationClass, + origFunc, genFunc->numLocals(), genFunc->numIterators() ); cont->incRefCount(); cont->setNoDestruct(); - cont->init(origFunc, args); // The ActRec corresponding to the generator body lives as long as the object // does. We set it up once, here, and then just change FP to point to it when @@ -7035,21 +7033,14 @@ VMExecutionContext::createContinuationHelper(const Func* origFunc, template c_Continuation* VMExecutionContext::createContinuation(ActRec* fp, - bool getArgs, const Func* origFunc, const Func* genFunc) { ObjectData* const thisPtr = fp->hasThis() ? fp->getThis() : nullptr; - Array args; - if (getArgs) { - args = hhvm_get_frame_args(fp); - } - return createContinuationHelper( origFunc, genFunc, thisPtr, - args.get(), frameStaticClass(fp) ); } @@ -7118,17 +7109,16 @@ VMExecutionContext::fillContinuationVars(ActRec* fp, // Explicitly instantiate for hhbctranslator.o and codegen.o template c_Continuation* VMExecutionContext::createContinuation( - ActRec*, bool, const Func*, const Func*); + ActRec*, const Func*, const Func*); template c_Continuation* VMExecutionContext::createContinuation( - ActRec*, bool, const Func*, const Func*); + ActRec*, const Func*, const Func*); template c_Continuation* VMExecutionContext::createContinuationHelper( - const Func*, const Func*, ObjectData*, ArrayData*, Class*); + const Func*, const Func*, ObjectData*, Class*); template c_Continuation* VMExecutionContext::createContinuationHelper( - const Func*, const Func*, ObjectData*, ArrayData*, Class*); + const Func*, const Func*, ObjectData*, Class*); inline void OPTBLD_INLINE VMExecutionContext::iopCreateCont(PC& pc) { NEXT(); - DECODE_IVA(getArgs); DECODE_LITSTR(genName); const Func* origFunc = m_fp->m_func; @@ -7137,8 +7127,8 @@ inline void OPTBLD_INLINE VMExecutionContext::iopCreateCont(PC& pc) { bool isMethod = origFunc->isMethod(); c_Continuation* cont = isMethod ? - createContinuation(m_fp, getArgs, origFunc, genFunc) : - createContinuation(m_fp, getArgs, origFunc, genFunc); + createContinuation(m_fp, origFunc, genFunc) : + createContinuation(m_fp, origFunc, genFunc); fillContinuationVars(m_fp, origFunc, genFunc, cont); diff --git a/hphp/runtime/vm/hhbc.h b/hphp/runtime/vm/hhbc.h index f01541466..0ebb7d32f 100644 --- a/hphp/runtime/vm/hhbc.h +++ b/hphp/runtime/vm/hhbc.h @@ -546,7 +546,7 @@ enum SetOpOp { O(LateBoundCls, NA, NOV, ONE(AV), NF) \ O(NativeImpl, NA, NOV, NOV, CF_TF) \ O(CreateCl, TWO(IVA,SA), CVMANY, ONE(CV), NF) \ - O(CreateCont, TWO(IVA,SA), NOV, ONE(CV), NF) \ + O(CreateCont, ONE(SA), NOV, ONE(CV), NF) \ O(ContEnter, NA, NOV, NOV, CF) \ O(ContExit, NA, NOV, NOV, CF) \ O(UnpackCont, NA, NOV, TWO(CV,CV), NF) \ diff --git a/hphp/runtime/vm/jit/codegen.cpp b/hphp/runtime/vm/jit/codegen.cpp index d5ee87a24..f15a95ccb 100644 --- a/hphp/runtime/vm/jit/codegen.cpp +++ b/hphp/runtime/vm/jit/codegen.cpp @@ -3499,7 +3499,6 @@ void CodeGenerator::cgInlineCreateCont(IRInstruction* inst) { .immPtr(data.origFunc) .immPtr(data.genFunc) .ssa(inst->src(0)) - .immPtr(nullptr) // getArgs array // Deliberately ignoring frameStaticClass parameter, because // it's unused if we have a $this pointer, and we don't inline // functions with a null $this. diff --git a/hphp/runtime/vm/jit/dce.cpp b/hphp/runtime/vm/jit/dce.cpp index dc715aeb1..6ba8a6c14 100644 --- a/hphp/runtime/vm/jit/dce.cpp +++ b/hphp/runtime/vm/jit/dce.cpp @@ -467,8 +467,8 @@ void optimizeActRecs(IRTrace* trace, DceState& state, IRFactory* factory, FTRACE(5, "CreateCont ({}) -> InlineCreateCont\n", inst->id()); CreateContData data; - data.origFunc = inst->src(3)->getValFunc(); - data.genFunc = inst->src(4)->getValFunc(); + data.origFunc = inst->src(2)->getValFunc(); + data.genFunc = inst->src(3)->getValFunc(); assert(fp->inst()->src(0)->inst()->op() == SpillFrame); auto const thisPtr = fp->inst()->src(0)->inst()->src(3); diff --git a/hphp/runtime/vm/jit/hhbctranslator.cpp b/hphp/runtime/vm/jit/hhbctranslator.cpp index 2b0e43d0d..e1e4baa8c 100644 --- a/hphp/runtime/vm/jit/hhbctranslator.cpp +++ b/hphp/runtime/vm/jit/hhbctranslator.cpp @@ -998,8 +998,7 @@ bool mapContParams(ContParamMap& map, return true; } -void HhbcTranslator::emitCreateCont(bool getArgs, - Id funNameStrId) { +void HhbcTranslator::emitCreateCont(Id funNameStrId) { gen(ExitOnVarEnv, getExitSlowTrace()->front(), m_tb->fp()); auto const genName = lookupStringId(funNameStrId); @@ -1015,7 +1014,6 @@ void HhbcTranslator::emitCreateCont(bool getArgs, (TCA)&VMExecutionContext::createContinuation ), m_tb->fp(), - cns(getArgs), cns(origFunc), cns(genFunc) ); diff --git a/hphp/runtime/vm/jit/hhbctranslator.h b/hphp/runtime/vm/jit/hhbctranslator.h index b151d0b56..02134b1df 100644 --- a/hphp/runtime/vm/jit/hhbctranslator.h +++ b/hphp/runtime/vm/jit/hhbctranslator.h @@ -358,7 +358,7 @@ struct HhbcTranslator { void emitVerifyParamType(uint32_t paramId); // continuations - void emitCreateCont(bool getArgs, Id funNameStrId); + void emitCreateCont(Id funNameStrId); void emitContEnter(int32_t returnBcOffset); void emitContExitImpl(); void emitContExit(); diff --git a/hphp/runtime/vm/jit/ir.h b/hphp/runtime/vm/jit/ir.h index a47666b7e..4975e614f 100644 --- a/hphp/runtime/vm/jit/ir.h +++ b/hphp/runtime/vm/jit/ir.h @@ -436,7 +436,6 @@ O(Spill, DofS(0), SUnk, Mem) \ O(Reload, DofS(0), SUnk, Mem) \ O(CreateCont, D(Obj), C(TCA) \ S(FramePtr) \ - C(Bool) \ C(Func) \ C(Func), E|N|Mem|PRc) \ O(InlineCreateCont, D(Obj), S(Obj,Null), E|N|PRc) \ diff --git a/hphp/runtime/vm/jit/irtranslator.cpp b/hphp/runtime/vm/jit/irtranslator.cpp index 411b3e8e1..bc5830967 100644 --- a/hphp/runtime/vm/jit/irtranslator.cpp +++ b/hphp/runtime/vm/jit/irtranslator.cpp @@ -546,7 +546,7 @@ void Translator::translateDup(const NormalizedInstruction& ni) { } void Translator::translateCreateCont(const NormalizedInstruction& i) { - HHIR_EMIT(CreateCont, i.imm[0].u_IVA, i.imm[1].u_SA); + HHIR_EMIT(CreateCont, i.imm[0].u_SA); } void Translator::translateContEnter(const NormalizedInstruction& i) { @@ -1198,7 +1198,7 @@ bool shouldIRInline(const Func* curFunc, * Continuation allocation functions that take no arguments. */ resetCursor(); - if (current == OpCreateCont && cursor->imm[0].u_IVA == 0) { + if (current == OpCreateCont) { if (func->numParams()) { FTRACE(1, "CreateCont with {} args\n", func->numParams()); } diff --git a/hphp/runtime/vm/jit/nativecalls.cpp b/hphp/runtime/vm/jit/nativecalls.cpp index 99d1f438c..2e69838e8 100644 --- a/hphp/runtime/vm/jit/nativecalls.cpp +++ b/hphp/runtime/vm/jit/nativecalls.cpp @@ -176,7 +176,7 @@ static CallMap s_callMap({ /* Continuation support helpers */ {CreateCont, {FSSA, 0}, DSSA, SNone, - {{SSA, 1}, {SSA, 2}, {SSA, 3}, {SSA, 4}}}, + {{SSA, 1}, {SSA, 2}, {SSA, 3}}}, {InlineCreateCont, nullptr, DSSA, SSync, {{Immed}, {Immed}, {SSA, 0}}}, {FillContLocals, (TCA)&VMExecutionContext::fillContinuationVars, diff --git a/hphp/system/class_map.cpp b/hphp/system/class_map.cpp index e449d2c0a..637397a56 100644 --- a/hphp/system/class_map.cpp +++ b/hphp/system/class_map.cpp @@ -24092,22 +24092,6 @@ const char *g_class_map[] = { (const char *)0xa /* KindOfInt64 */, NULL, NULL, NULL, - (const char *)0x10006040, "num_args", "", (const char*)0, (const char*)0, - " /**\n * ( excerpt from http://php.net/manual/en/continuation.num-args.php )\n *\n *\n * @return int\n */", - (const char *)0xa /* KindOfInt64 */, NULL, - NULL, - NULL, - (const char *)0x10006040, "get_args", "", (const char*)0, (const char*)0, - " /**\n * ( excerpt from http://php.net/manual/en/continuation.get-args.php )\n *\n *\n * @return vector\n */", - (const char *)0x20 /* KindOfArray */, NULL, - NULL, - NULL, - (const char *)0x10006040, "get_arg", "", (const char*)0, (const char*)0, - " /**\n * ( excerpt from http://php.net/manual/en/continuation.get-arg.php )\n *\n *\n * @id int\n *\n * @return mixed\n */", - (const char *)0xffffffff /* KindOfUnknown: $t: Variant */, (const char *)0x2000, "id", "", (const char *)0xa /* KindOfInt64 */, "", (const char *)0, "", (const char *)0, NULL, - NULL, - NULL, - NULL, (const char *)0x10006040, "current", "", (const char*)0, (const char*)0, " /**\n * ( excerpt from http://php.net/manual/en/continuation.current.php )\n *\n *\n * @return mixed\n */", (const char *)0xffffffff /* KindOfUnknown: $t: Variant */, NULL, diff --git a/hphp/test/quick/function_varargs.php b/hphp/test/quick/function_varargs.php new file mode 100644 index 000000000..984b25be4 --- /dev/null +++ b/hphp/test/quick/function_varargs.php @@ -0,0 +1,101 @@ += 0 in %s on line %d +bool(false) +int(0) +HipHop Warning: func_get_arg(): Argument 1 not passed to function in %s on line %d +bool(false) +int(1) +array(1) { + [0]=> + string(11) "defined_arg" +} +HipHop Warning: func_get_arg(): The argument number should be >= 0 in %s on line %d +bool(false) +string(11) "defined_arg" +int(1) +HipHop Warning: func_get_arg(): Argument 2 not passed to function in %s on line %d +bool(false) +int(2) +array(2) { + [0]=> + string(11) "replacement" + [1]=> + string(11) "replacement" +} +HipHop Warning: func_get_arg(): The argument number should be >= 0 in %s on line %d +bool(false) +string(11) "replacement" +string(11) "replacement" +int(2) +HipHop Warning: func_get_arg(): Argument 3 not passed to function in %s on line %d +bool(false) +int(2) +array(2) { + [0]=> + string(3) "src" + [1]=> + string(11) "replacement" +} +HipHop Warning: func_get_arg(): The argument number should be >= 0 in %s on line %d +bool(false) +string(3) "src" +string(11) "replacement" +int(2) +HipHop Warning: func_get_arg(): Argument 3 not passed to function in %s on line %d +bool(false) +int(2) +array(2) { + [0]=> + string(3) "idx" + [1]=> + string(11) "replacement" +} +string(3) "idx" +string(3) "idx" +string(3) "idx" +string(3) "idx" +string(3) "idx" +int(2) +array(2) { + [0]=> + string(5) "undef" + [1]=> + string(11) "replacement" +} +HipHop Warning: func_get_arg(): The argument number should be >= 0 in %s on line %d +bool(false) +string(5) "undef" +string(11) "replacement" +int(2) +HipHop Warning: func_get_arg(): Argument 3 not passed to function in %s on line %d +bool(false) +int(1) +array(1) { + [0]=> + string(5) "hello" +} +HipHop Warning: func_get_arg(): The argument number should be >= 0 in %s on line %d +bool(false) +int(0) +string(5) "hello" +HipHop Warning: func_get_arg(): Argument 2 not passed to function in %s on line %d +bool(false) +int(2) +array(2) { + [0]=> + string(11) "defined_arg" + [1]=> + string(5) "hello" +} +HipHop Warning: func_get_arg(): The argument number should be >= 0 in %s on line %d +bool(false) +string(11) "defined_arg" +int(1) +string(5) "hello" +HipHop Warning: func_get_arg(): Argument 3 not passed to function in %s on line %d +bool(false) +int(3) +array(3) { + [0]=> + string(11) "replacement" + [1]=> + string(11) "replacement" + [2]=> + string(5) "hello" +} +HipHop Warning: func_get_arg(): The argument number should be >= 0 in %s on line %d +bool(false) +string(11) "replacement" +string(11) "replacement" +int(2) +string(5) "hello" +HipHop Warning: func_get_arg(): Argument 4 not passed to function in %s on line %d +bool(false) +int(3) +array(3) { + [0]=> + string(3) "src" + [1]=> + string(11) "replacement" + [2]=> + string(5) "hello" +} +HipHop Warning: func_get_arg(): The argument number should be >= 0 in %s on line %d +bool(false) +string(3) "src" +string(11) "replacement" +int(2) +string(5) "hello" +HipHop Warning: func_get_arg(): Argument 4 not passed to function in %s on line %d +bool(false) +int(3) +array(3) { + [0]=> + string(3) "idx" + [1]=> + string(11) "replacement" + [2]=> + string(5) "hello" +} +string(3) "idx" +string(3) "idx" +string(3) "idx" +string(3) "idx" +string(3) "idx" +string(3) "idx" +int(3) +array(3) { + [0]=> + string(5) "undef" + [1]=> + string(11) "replacement" + [2]=> + string(5) "hello" +} +HipHop Warning: func_get_arg(): The argument number should be >= 0 in %s on line %d +bool(false) +string(5) "undef" +string(11) "replacement" +int(2) +string(5) "hello" +HipHop Warning: func_get_arg(): Argument 4 not passed to function in %s on line %d +bool(false) +int(2) +array(2) { + [0]=> + string(5) "hello" + [1]=> + int(47) +} +HipHop Warning: func_get_arg(): The argument number should be >= 0 in %s on line %d +bool(false) +int(0) +string(5) "hello" +int(47) +HipHop Warning: func_get_arg(): Argument 3 not passed to function in %s on line %d +bool(false) +int(3) +array(3) { + [0]=> + string(11) "defined_arg" + [1]=> + string(5) "hello" + [2]=> + int(47) +} +HipHop Warning: func_get_arg(): The argument number should be >= 0 in %s on line %d +bool(false) +string(11) "defined_arg" +int(1) +string(5) "hello" +int(47) +HipHop Warning: func_get_arg(): Argument 4 not passed to function in %s on line %d +bool(false) +int(4) +array(4) { + [0]=> + string(11) "replacement" + [1]=> + string(11) "replacement" + [2]=> + string(5) "hello" + [3]=> + int(47) +} +HipHop Warning: func_get_arg(): The argument number should be >= 0 in %s on line %d +bool(false) +string(11) "replacement" +string(11) "replacement" +int(2) +string(5) "hello" +int(47) +HipHop Warning: func_get_arg(): Argument 5 not passed to function in %s on line %d +bool(false) +int(4) +array(4) { + [0]=> + string(3) "src" + [1]=> + string(11) "replacement" + [2]=> + string(5) "hello" + [3]=> + int(47) +} +HipHop Warning: func_get_arg(): The argument number should be >= 0 in %s on line %d +bool(false) +string(3) "src" +string(11) "replacement" +int(2) +string(5) "hello" +int(47) +HipHop Warning: func_get_arg(): Argument 5 not passed to function in %s on line %d +bool(false) +int(4) +array(4) { + [0]=> + string(3) "idx" + [1]=> + string(11) "replacement" + [2]=> + string(5) "hello" + [3]=> + int(47) +} +string(3) "idx" +string(3) "idx" +string(3) "idx" +string(3) "idx" +string(3) "idx" +string(3) "idx" +string(3) "idx" +int(4) +array(4) { + [0]=> + string(5) "undef" + [1]=> + string(11) "replacement" + [2]=> + string(5) "hello" + [3]=> + int(47) +} +HipHop Warning: func_get_arg(): The argument number should be >= 0 in %s on line %d +bool(false) +string(5) "undef" +string(11) "replacement" +int(2) +string(5) "hello" +int(47) +HipHop Warning: func_get_arg(): Argument 5 not passed to function in %s on line %d +bool(false) diff --git a/hphp/test/quick/generator_varargs.php b/hphp/test/quick/generator_varargs.php new file mode 100644 index 000000000..b0e15ecfb --- /dev/null +++ b/hphp/test/quick/generator_varargs.php @@ -0,0 +1,104 @@ + + string(11) "defined_arg" +} +bool(false) +string(11) "defined_arg" +int(1) +bool(false) +int(2) +array(2) { + [0]=> + string(3) "dst" + [1]=> + string(11) "replacement" +} +bool(false) +string(3) "dst" +string(11) "replacement" +int(2) +bool(false) +int(2) +array(2) { + [0]=> + string(3) "src" + [1]=> + string(11) "replacement" +} +bool(false) +string(3) "src" +string(11) "replacement" +int(2) +bool(false) +int(2) +array(2) { + [0]=> + string(3) "idx" + [1]=> + string(11) "replacement" +} +string(3) "idx" +string(3) "idx" +string(3) "idx" +string(3) "idx" +string(3) "idx" +int(2) +array(2) { + [0]=> + string(5) "undef" + [1]=> + string(11) "replacement" +} +bool(false) +string(5) "undef" +string(11) "replacement" +int(2) +bool(false) +int(1) +array(1) { + [0]=> + string(5) "hello" +} +bool(false) +int(0) +string(5) "hello" +bool(false) +int(2) +array(2) { + [0]=> + string(11) "defined_arg" + [1]=> + string(5) "hello" +} +bool(false) +string(11) "defined_arg" +int(1) +string(5) "hello" +bool(false) +int(3) +array(3) { + [0]=> + string(3) "dst" + [1]=> + string(11) "replacement" + [2]=> + string(5) "hello" +} +bool(false) +string(3) "dst" +string(11) "replacement" +int(2) +string(5) "hello" +bool(false) +int(3) +array(3) { + [0]=> + string(3) "src" + [1]=> + string(11) "replacement" + [2]=> + string(5) "hello" +} +bool(false) +string(3) "src" +string(11) "replacement" +int(2) +string(5) "hello" +bool(false) +int(3) +array(3) { + [0]=> + string(3) "idx" + [1]=> + string(11) "replacement" + [2]=> + string(5) "hello" +} +string(3) "idx" +string(3) "idx" +string(3) "idx" +string(3) "idx" +string(3) "idx" +string(3) "idx" +int(3) +array(3) { + [0]=> + string(5) "undef" + [1]=> + string(11) "replacement" + [2]=> + string(5) "hello" +} +bool(false) +string(5) "undef" +string(11) "replacement" +int(2) +string(5) "hello" +bool(false) +int(2) +array(2) { + [0]=> + string(5) "hello" + [1]=> + int(47) +} +bool(false) +int(0) +string(5) "hello" +int(47) +bool(false) +int(3) +array(3) { + [0]=> + string(11) "defined_arg" + [1]=> + string(5) "hello" + [2]=> + int(47) +} +bool(false) +string(11) "defined_arg" +int(1) +string(5) "hello" +int(47) +bool(false) +int(4) +array(4) { + [0]=> + string(3) "dst" + [1]=> + string(11) "replacement" + [2]=> + string(5) "hello" + [3]=> + int(47) +} +bool(false) +string(3) "dst" +string(11) "replacement" +int(2) +string(5) "hello" +int(47) +bool(false) +int(4) +array(4) { + [0]=> + string(3) "src" + [1]=> + string(11) "replacement" + [2]=> + string(5) "hello" + [3]=> + int(47) +} +bool(false) +string(3) "src" +string(11) "replacement" +int(2) +string(5) "hello" +int(47) +bool(false) +int(4) +array(4) { + [0]=> + string(3) "idx" + [1]=> + string(11) "replacement" + [2]=> + string(5) "hello" + [3]=> + int(47) +} +string(3) "idx" +string(3) "idx" +string(3) "idx" +string(3) "idx" +string(3) "idx" +string(3) "idx" +string(3) "idx" +int(4) +array(4) { + [0]=> + string(5) "undef" + [1]=> + string(11) "replacement" + [2]=> + string(5) "hello" + [3]=> + int(47) +} +bool(false) +string(5) "undef" +string(11) "replacement" +int(2) +string(5) "hello" +int(47) +bool(false) diff --git a/hphp/util/parser/hphp.y b/hphp/util/parser/hphp.y index ec2d61cf9..7b468c5e7 100644 --- a/hphp/util/parser/hphp.y +++ b/hphp/util/parser/hphp.y @@ -170,7 +170,7 @@ void prepare_generator(Parser *_p, Token &stmt, Token ¶ms) { // create a generator function with original name and parameters void create_generator(Parser *_p, Token &out, Token ¶ms, Token &name, const std::string &closureName, - const char *clsname, Token *modifiers, bool getArgs, + const char *clsname, Token *modifiers, Token &origGenFunc, bool isHhvm, Token *attr) { _p->pushFuncLocation(); if (clsname) { @@ -203,18 +203,12 @@ void create_generator(Parser *_p, Token &out, Token ¶ms, _p->onCallParam(param1, ¶m1, fname, false); _p->onCallParam(param1, ¶m1, oname, false); - if (getArgs) { - Token cname; cname.setText("func_get_args"); - Token empty; - Token call; _p->onCall(call, false, cname, empty, NULL); - _p->onCallParam(param1, ¶m1, call, false); - } + Token stmts0; _p->onStatementListStart(stmts0); Token cname0; cname0.setText("hphp_create_continuation"); Token call; _p->onCall(call, false, cname0, param1, NULL, true); Token ret; _p->onReturn(ret, &call); - Token stmts0; _p->onStatementListStart(stmts0); Token stmts1; _p->addStatement(stmts1, stmts0, ret); _p->finishStatement(scont, stmts1); scont = 1; }