From: Alexandre Petit-Bianco Date: Fri, 12 Mar 1999 18:19:04 +0000 (-0800) Subject: parse.y (java_stabilize_reference): Return NODE when patching a COMPOUND_EXPR. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2aa11e9772e5ffc892a8e5f9a169555fa5af1bef;p=gcc.git parse.y (java_stabilize_reference): Return NODE when patching a COMPOUND_EXPR. 1999-03-12 Alexandre Petit-Bianco * parse.y (java_stabilize_reference): Return NODE when patching a COMPOUND_EXPR. (java_complete_lhs): Put parenthesis around truth values. 1999-03-12 Alexandre Petit-Bianco * class.c (layout_class_method): Don't make rtl for interface methods. * parse.h (GET_TYPE_NAME): New macro. * parse.y (if_then_statement:): Fixed indentation. (if_then_else_statement:): Likewise. (for_statement:): Fixed spacing. (try_statement:): Fixed indentation. (create_interface): Don't force interfaces to be abstract. (method_header): Abstract methods are OK in interfaces. (declare_local_variables): Fixed typo in comment. (java_complete_expand_method): Fixed indentation. (resolve_qualified_expression_name): Use GET_TYPE_NAME to report non accessible fields. (java_stabilize_reference): New function. (java_complete_lhs): Fixed indentation. Use java_stabilize_reference in compound assignement. Insert the cast. If not processing `+' fix string constants before processing binop. From-SVN: r25733 --- diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index f5829259057..d39c4b870ca 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,30 @@ +1999-03-12 Alexandre Petit-Bianco + + * parse.y (java_stabilize_reference): Return NODE when patching a + COMPOUND_EXPR. + (java_complete_lhs): Put parenthesis around truth values. + +1999-03-12 Alexandre Petit-Bianco + + * class.c (layout_class_method): Don't make rtl for interface + methods. + * parse.h (GET_TYPE_NAME): New macro. + * parse.y (if_then_statement:): Fixed indentation. + (if_then_else_statement:): Likewise. + (for_statement:): Fixed spacing. + (try_statement:): Fixed indentation. + (create_interface): Don't force interfaces to be abstract. + (method_header): Abstract methods are OK in interfaces. + (declare_local_variables): Fixed typo in comment. + (java_complete_expand_method): Fixed indentation. + (resolve_qualified_expression_name): Use GET_TYPE_NAME to report + non accessible fields. + (java_stabilize_reference): New function. + (java_complete_lhs): Fixed indentation. Use + java_stabilize_reference in compound assignement. Insert the + cast. If not processing `+' fix string constants before processing + binop. + Fri Mar 12 19:42:55 1999 Kaveh R. Ghazi * constants.c (find_class_or_string_constant): Cast variable `j' @@ -37,6 +64,11 @@ Wed Mar 10 23:20:11 1999 Per Bothner * jcf-write.c (generate_bytecode_insns): Handle __builtin_fmod, for %. + Tue Mar 9 11:52:08 1999 Alexandre Petit-Bianco + + * parse.y (method_header): Don't set ACC_ABSTRACT flags on + interfaces. + Fri Mar 5 15:17:29 1999 Per Bothner * lex.c (java_parse_end_comment): Take extra parameter (next char). @@ -54,7 +86,7 @@ Fri Mar 5 15:17:29 1999 Per Bothner * parse.y (find_expr_with_wfl): Optimize tail-calls. (build_array_from_name): Re-order &index[string] to &string[index]. - * parse.y (java_complete_tree): Don't call patch_assignment if rhs is + * parse.y (java_complete_lhs): Don't call patch_assignment if rhs is error_mark (it might catch more errors, but it is more likely to lose). Sat Mar 6 11:17:16 1999 Kaveh R. Ghazi diff --git a/gcc/java/class.c b/gcc/java/class.c index e4f4224b415..f05cf16099c 100644 --- a/gcc/java/class.c +++ b/gcc/java/class.c @@ -1604,7 +1604,8 @@ layout_class_method (this_class, super_class, method_decl, dtable_count) obstack_1grow (&temporary_obstack, '\0'); asm_name = obstack_finish (&temporary_obstack); DECL_ASSEMBLER_NAME (method_decl) = get_identifier (asm_name); - if (! METHOD_ABSTRACT (method_decl)) + if (! METHOD_ABSTRACT (method_decl) + && ! CLASS_INTERFACE (TYPE_NAME (this_class))) make_function_rtl (method_decl); obstack_free (&temporary_obstack, asm_name); diff --git a/gcc/java/parse.c b/gcc/java/parse.c index 485ed0e9665..30ecc5f95cf 100644 --- a/gcc/java/parse.c +++ b/gcc/java/parse.c @@ -5,6 +5,13 @@ #define YYBISON 1 /* Identify Bison output. */ +#define yyparse java_parse +#define yylex java_lex +#define yyerror java_error +#define yylval java_lval +#define yychar java_char +#define yydebug java_debug +#define yynerrs java_nerrs #define PLUS_TK 258 #define MINUS_TK 259 #define MULT_TK 260 @@ -687,32 +694,32 @@ static const short yyrline[] = { 0, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1217, 1222, 1233, 1240, 1244, 1255, 1265, 1271, 1277, 1283, 1285, 1291, 1293, 1299, 1301, 1303, 1305, 1307, 1311, 1313, - 1314, 1315, 1316, 1317, 1318, 1321, 1324, 1326, 1328, 1332, - 1337, 1342, 1348, 1358, 1364, 1366, 1368, 1375, 1378, 1380, - 1382, 1386, 1388, 1391, 1395, 1397, 1400, 1407, 1413, 1415, - 1417, 1421, 1429, 1432, 1434, 1436, 1440, 1445, 1454, 1459, - 1462, 1469, 1471, 1473, 1477, 1480, 1489, 1496, 1498, 1502, - 1515, 1517, 1523, 1529, 1533, 1535, 1539, 1542, 1544, 1548, - 1551, 1553, 1555, 1559, 1562, 1564, 1566, 1570, 1573, 1575, - 1577, 1581, 1587, 1589, 1593, 1600, 1602, 1604, 1606, 1610, - 1618, 1621, 1623, 1628, 1632, 1634, 1641, 1649, 1666, 1668, - 1670, 1674, 1677, 1682, 1684, 1687, 1689, 1691, 1693, 1694, - 1695, 1696, 1700, 1702, 1704, 1709, 1711, 1713, 1715, 1717, - 1721, 1724, 1729, 1731, 1736, 1737, 1738, 1739, 1740, 1742, - 1744, 1746, 1748, 1750, 1754, 1756, 1759, 1765, 1770, 1774, - 1777, 1779, 1781, 1785, 1787, 1789, 1791, 1795, 1798, 1802, - 1808, 1810, 1818, 1845, 1847, 1851, 1856, 1864, 1868, 1871, - 1873, 1884, 1895, 1900, 1909, 1911, 1915, 1918, 1920, 1925, - 1930, 1935, 1942, 1944, 1945, 1946, 1949, 1954, 1959, 1961, - 1962, 1964, 1966, 1967, 1969, 1973, 1976, 1980, 1983, 1987, - 1989, 1991, 1993, 1994, 1996, 2000, 2009, 2011, 2013, 2026, - 2028, 2034, 2036, 2038, 2042, 2044, 2049, 2054, 2059, 2061, - 2063, 2067, 2069, 2074, 2079, 2081, 2085, 2087, 2092, 2097, - 2102, 2104, 2106, 2110, 2112, 2117, 2122, 2127, 2132, 2134, - 2136, 2138, 2140, 2142, 2146, 2148, 2153, 2158, 2160, 2164, - 2166, 2171, 2175, 2177, 2182, 2186, 2188, 2193, 2197, 2199, - 2204, 2208, 2210, 2215, 2219, 2221, 2226, 2232, 2234, 2238, - 2240, 2243, 2246, 2254, 2256, 2257, 2260, 2262, 2265, 2269 + 1314, 1315, 1316, 1317, 1318, 1321, 1327, 1329, 1331, 1335, + 1340, 1345, 1351, 1361, 1367, 1369, 1371, 1378, 1381, 1383, + 1385, 1389, 1391, 1394, 1398, 1400, 1403, 1410, 1416, 1418, + 1420, 1424, 1432, 1435, 1437, 1439, 1443, 1448, 1457, 1462, + 1465, 1472, 1474, 1476, 1480, 1483, 1492, 1499, 1501, 1505, + 1518, 1520, 1526, 1532, 1536, 1538, 1542, 1545, 1547, 1551, + 1554, 1556, 1558, 1562, 1565, 1567, 1569, 1573, 1576, 1578, + 1580, 1584, 1590, 1592, 1596, 1603, 1605, 1607, 1609, 1613, + 1621, 1624, 1626, 1631, 1635, 1637, 1644, 1652, 1669, 1671, + 1673, 1677, 1680, 1685, 1687, 1690, 1692, 1694, 1696, 1697, + 1698, 1699, 1703, 1705, 1707, 1712, 1714, 1716, 1718, 1720, + 1724, 1727, 1732, 1734, 1739, 1740, 1741, 1742, 1743, 1745, + 1747, 1749, 1751, 1753, 1757, 1759, 1762, 1768, 1773, 1777, + 1780, 1782, 1784, 1788, 1790, 1792, 1794, 1798, 1801, 1805, + 1811, 1813, 1821, 1848, 1850, 1854, 1859, 1867, 1871, 1874, + 1876, 1887, 1898, 1903, 1912, 1914, 1918, 1921, 1923, 1928, + 1933, 1938, 1945, 1947, 1948, 1949, 1952, 1957, 1962, 1964, + 1965, 1967, 1969, 1970, 1972, 1976, 1979, 1983, 1986, 1990, + 1992, 1994, 1996, 1997, 1999, 2003, 2012, 2014, 2016, 2029, + 2031, 2037, 2039, 2041, 2045, 2047, 2052, 2057, 2062, 2064, + 2066, 2070, 2072, 2077, 2082, 2084, 2088, 2090, 2095, 2100, + 2105, 2107, 2109, 2113, 2115, 2120, 2125, 2130, 2135, 2137, + 2139, 2141, 2143, 2145, 2149, 2151, 2156, 2161, 2163, 2167, + 2169, 2174, 2178, 2180, 2185, 2189, 2191, 2196, 2200, 2202, + 2207, 2211, 2213, 2218, 2222, 2224, 2229, 2235, 2237, 2241, + 2243, 2246, 2249, 2257, 2259, 2260, 2263, 2265, 2268, 2272 }; #endif @@ -2210,7 +2217,7 @@ static const short yycheck[] = { 3, #define YYPURE 1 /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ -#line 3 "/usr/local/gnu/share/bison.simple" +#line 3 "/usr/lib/bison.simple" /* Skeleton output parser for bison, Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. @@ -2403,7 +2410,7 @@ __yy_memcpy (char *to, char *from, int count) #endif #endif -#line 196 "/usr/local/gnu/share/bison.simple" +#line 196 "/usr/lib/bison.simple" /* The user can define YYPARSE_PARAM as the name of an argument to be passed into yyparse. The argument should have type void *. @@ -3581,36 +3588,39 @@ case 238: break;} case 246: #line 1323 "./parse.y" -{ yyval.node = build_if_else_statement (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[0].node, NULL_TREE); ; +{ + yyval.node = build_if_else_statement (yyvsp[-3].operator.location, yyvsp[-2].node, + yyvsp[0].node, NULL_TREE); + ; break;} case 247: -#line 1325 "./parse.y" +#line 1328 "./parse.y" {yyerror ("'(' expected"); RECOVER;; break;} case 248: -#line 1327 "./parse.y" +#line 1330 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 249: -#line 1329 "./parse.y" +#line 1332 "./parse.y" {yyerror ("')' expected"); RECOVER;; break;} case 250: -#line 1334 "./parse.y" +#line 1337 "./parse.y" { yyval.node = build_if_else_statement (yyvsp[-5].operator.location, yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node); ; break;} case 251: -#line 1339 "./parse.y" +#line 1342 "./parse.y" { yyval.node = build_if_else_statement (yyvsp[-5].operator.location, yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node); ; break;} case 252: -#line 1344 "./parse.y" +#line 1347 "./parse.y" { enter_block (); ; break;} case 253: -#line 1348 "./parse.y" +#line 1351 "./parse.y" { /* Make into "proper list" of COMPOUND_EXPRs. I.e. make the last statment also have its own @@ -3621,42 +3631,42 @@ case 253: ; break;} case 254: -#line 1360 "./parse.y" +#line 1363 "./parse.y" { yyval.node = build (SWITCH_EXPR, NULL_TREE, yyvsp[-1].node, NULL_TREE); EXPR_WFL_LINECOL (yyval.node) = yyvsp[-2].operator.location; ; break;} case 255: -#line 1365 "./parse.y" +#line 1368 "./parse.y" {yyerror ("'(' expected"); RECOVER;; break;} case 256: -#line 1367 "./parse.y" +#line 1370 "./parse.y" {yyerror ("Missing term or ')'"); DRECOVER(switch_statement);; break;} case 257: -#line 1369 "./parse.y" +#line 1372 "./parse.y" {yyerror ("'{' expected"); RECOVER;; break;} case 258: -#line 1377 "./parse.y" +#line 1380 "./parse.y" { yyval.node = NULL_TREE; ; break;} case 259: -#line 1379 "./parse.y" +#line 1382 "./parse.y" { yyval.node = NULL_TREE; ; break;} case 260: -#line 1381 "./parse.y" +#line 1384 "./parse.y" { yyval.node = NULL_TREE; ; break;} case 261: -#line 1383 "./parse.y" +#line 1386 "./parse.y" { yyval.node = NULL_TREE; ; break;} case 267: -#line 1402 "./parse.y" +#line 1405 "./parse.y" { tree lab = build1 (CASE_EXPR, NULL_TREE, yyvsp[-1].node); EXPR_WFL_LINECOL (lab) = yyvsp[-2].operator.location; @@ -3664,7 +3674,7 @@ case 267: ; break;} case 268: -#line 1408 "./parse.y" +#line 1411 "./parse.y" { tree lab = build1 (DEFAULT_EXPR, NULL_TREE, NULL_TREE); EXPR_WFL_LINECOL (lab) = yyvsp[-1].operator.location; @@ -3672,61 +3682,61 @@ case 268: ; break;} case 269: -#line 1414 "./parse.y" +#line 1417 "./parse.y" {yyerror ("Missing or invalid constant expression"); RECOVER;; break;} case 270: -#line 1416 "./parse.y" +#line 1419 "./parse.y" {yyerror ("':' expected"); RECOVER;; break;} case 271: -#line 1418 "./parse.y" +#line 1421 "./parse.y" {yyerror ("':' expected"); RECOVER;; break;} case 272: -#line 1423 "./parse.y" +#line 1426 "./parse.y" { tree body = build_loop_body (yyvsp[-2].operator.location, yyvsp[-1].node, 0); yyval.node = build_new_loop (body); ; break;} case 273: -#line 1431 "./parse.y" +#line 1434 "./parse.y" { yyval.node = complete_loop_body (0, NULL_TREE, yyvsp[0].node, 0); ; break;} case 274: -#line 1433 "./parse.y" +#line 1436 "./parse.y" {YYERROR_NOW; yyerror ("'(' expected"); RECOVER;; break;} case 275: -#line 1435 "./parse.y" +#line 1438 "./parse.y" {yyerror ("Missing term and ')' expected"); RECOVER;; break;} case 276: -#line 1437 "./parse.y" +#line 1440 "./parse.y" {yyerror ("')' expected"); RECOVER;; break;} case 277: -#line 1442 "./parse.y" +#line 1445 "./parse.y" { yyval.node = complete_loop_body (0, NULL_TREE, yyvsp[0].node, 0); ; break;} case 278: -#line 1447 "./parse.y" +#line 1450 "./parse.y" { tree body = build_loop_body (0, NULL_TREE, 1); yyval.node = build_new_loop (body); ; break;} case 279: -#line 1456 "./parse.y" +#line 1459 "./parse.y" { yyval.node = complete_loop_body (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[-5].node, 1); ; break;} case 280: -#line 1461 "./parse.y" -{ yyval.node = complete_for_loop (EXPR_WFL_LINECOL (yyvsp[-4].node), yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node);; +#line 1464 "./parse.y" +{ yyval.node = complete_for_loop (EXPR_WFL_LINECOL (yyvsp[-4].node), yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node); ; break;} case 281: -#line 1463 "./parse.y" +#line 1466 "./parse.y" { yyval.node = complete_for_loop (0, NULL_TREE, yyvsp[-2].node, yyvsp[0].node); /* We have not condition, so we get rid of the EXIT_EXPR */ @@ -3735,23 +3745,23 @@ case 281: ; break;} case 282: -#line 1470 "./parse.y" +#line 1473 "./parse.y" {yyerror ("Invalid control expression"); RECOVER;; break;} case 283: -#line 1472 "./parse.y" +#line 1475 "./parse.y" {yyerror ("Invalid update expression"); RECOVER;; break;} case 284: -#line 1474 "./parse.y" +#line 1477 "./parse.y" {yyerror ("Invalid update expression"); RECOVER;; break;} case 285: -#line 1479 "./parse.y" +#line 1482 "./parse.y" { yyval.node = complete_for_loop (EXPR_WFL_LINECOL (yyvsp[-4].node), yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node);; break;} case 286: -#line 1481 "./parse.y" +#line 1484 "./parse.y" { yyval.node = complete_for_loop (0, NULL_TREE, yyvsp[-2].node, yyvsp[0].node); /* We have not condition, so we get rid of the EXIT_EXPR */ @@ -3760,7 +3770,7 @@ case 286: ; break;} case 287: -#line 1491 "./parse.y" +#line 1494 "./parse.y" { /* This scope defined for local variable that may be defined within the scope of the for loop */ @@ -3768,15 +3778,15 @@ case 287: ; break;} case 288: -#line 1497 "./parse.y" +#line 1500 "./parse.y" {yyerror ("'(' expected"); DRECOVER(for_1);; break;} case 289: -#line 1499 "./parse.y" +#line 1502 "./parse.y" {yyerror ("Invalid init statement"); RECOVER;; break;} case 290: -#line 1504 "./parse.y" +#line 1507 "./parse.y" { /* We now declare the loop body. The loop is declared as a for loop. */ @@ -3789,11 +3799,11 @@ case 290: ; break;} case 291: -#line 1516 "./parse.y" +#line 1519 "./parse.y" { yyval.node = empty_stmt_node; ; break;} case 292: -#line 1518 "./parse.y" +#line 1521 "./parse.y" { /* Init statement recorded within the previously defined block scope */ @@ -3801,7 +3811,7 @@ case 292: ; break;} case 293: -#line 1524 "./parse.y" +#line 1527 "./parse.y" { /* Local variable are recorded within the previously defined block scope */ @@ -3809,94 +3819,94 @@ case 293: ; break;} case 294: -#line 1530 "./parse.y" +#line 1533 "./parse.y" {yyerror ("';' expected"); DRECOVER(for_init_1);; break;} case 295: -#line 1534 "./parse.y" +#line 1537 "./parse.y" {yyval.node = empty_stmt_node;; break;} case 296: -#line 1536 "./parse.y" +#line 1539 "./parse.y" { yyval.node = build_debugable_stmt (BUILD_LOCATION (), yyvsp[0].node); ; break;} case 297: -#line 1541 "./parse.y" +#line 1544 "./parse.y" { yyval.node = add_stmt_to_compound (NULL_TREE, NULL_TREE, yyvsp[0].node); ; break;} case 298: -#line 1543 "./parse.y" +#line 1546 "./parse.y" { yyval.node = add_stmt_to_compound (yyvsp[-2].node, NULL_TREE, yyvsp[0].node); ; break;} case 299: -#line 1545 "./parse.y" +#line 1548 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 300: -#line 1550 "./parse.y" +#line 1553 "./parse.y" { yyval.node = build_bc_statement (yyvsp[-1].operator.location, 1, NULL_TREE); ; break;} case 301: -#line 1552 "./parse.y" +#line 1555 "./parse.y" { yyval.node = build_bc_statement (yyvsp[-2].operator.location, 1, yyvsp[-1].node); ; break;} case 302: -#line 1554 "./parse.y" +#line 1557 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 303: -#line 1556 "./parse.y" +#line 1559 "./parse.y" {yyerror ("';' expected"); RECOVER;; break;} case 304: -#line 1561 "./parse.y" +#line 1564 "./parse.y" { yyval.node = build_bc_statement (yyvsp[-1].operator.location, 0, NULL_TREE); ; break;} case 305: -#line 1563 "./parse.y" +#line 1566 "./parse.y" { yyval.node = build_bc_statement (yyvsp[-2].operator.location, 0, yyvsp[-1].node); ; break;} case 306: -#line 1565 "./parse.y" +#line 1568 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 307: -#line 1567 "./parse.y" +#line 1570 "./parse.y" {yyerror ("';' expected"); RECOVER;; break;} case 308: -#line 1572 "./parse.y" +#line 1575 "./parse.y" { yyval.node = build_return (yyvsp[-1].operator.location, NULL_TREE); ; break;} case 309: -#line 1574 "./parse.y" +#line 1577 "./parse.y" { yyval.node = build_return (yyvsp[-2].operator.location, yyvsp[-1].node); ; break;} case 310: -#line 1576 "./parse.y" +#line 1579 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 311: -#line 1578 "./parse.y" +#line 1581 "./parse.y" {yyerror ("';' expected"); RECOVER;; break;} case 312: -#line 1583 "./parse.y" +#line 1586 "./parse.y" { yyval.node = build1 (THROW_EXPR, NULL_TREE, yyvsp[-1].node); EXPR_WFL_LINECOL (yyval.node) = yyvsp[-2].operator.location; ; break;} case 313: -#line 1588 "./parse.y" +#line 1591 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 314: -#line 1590 "./parse.y" +#line 1593 "./parse.y" {yyerror ("';' expected"); RECOVER;; break;} case 315: -#line 1595 "./parse.y" +#line 1598 "./parse.y" { yyval.node = build (SYNCHRONIZED_EXPR, NULL_TREE, yyvsp[-2].node, yyvsp[0].node); EXPR_WFL_LINECOL (yyval.node) = @@ -3904,56 +3914,56 @@ case 315: ; break;} case 316: -#line 1601 "./parse.y" +#line 1604 "./parse.y" {yyerror ("'{' expected"); RECOVER;; break;} case 317: -#line 1603 "./parse.y" +#line 1606 "./parse.y" {yyerror ("'(' expected"); RECOVER;; break;} case 318: -#line 1605 "./parse.y" +#line 1608 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 319: -#line 1607 "./parse.y" +#line 1610 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 320: -#line 1612 "./parse.y" +#line 1615 "./parse.y" { if ((1 << yyvsp[0].value) != ACC_SYNCHRONIZED) fatal ("synchronized was '%d' - yyparse", (1 << yyvsp[0].value)); ; break;} case 321: -#line 1620 "./parse.y" +#line 1623 "./parse.y" { yyval.node = build_try_statement (yyvsp[-2].operator.location, yyvsp[-1].node, yyvsp[0].node); ; break;} case 322: -#line 1622 "./parse.y" +#line 1625 "./parse.y" { yyval.node = build_try_finally_statement (yyvsp[-2].operator.location, yyvsp[-1].node, yyvsp[0].node); ; break;} case 323: -#line 1624 "./parse.y" -{ yyval.node = build_try_finally_statement (yyvsp[-3].operator.location, - build_try_statement (yyvsp[-3].operator.location, - yyvsp[-2].node, yyvsp[-1].node), - yyvsp[0].node); ; +#line 1627 "./parse.y" +{ yyval.node = build_try_finally_statement + (yyvsp[-3].operator.location, build_try_statement (yyvsp[-3].operator.location, + yyvsp[-2].node, yyvsp[-1].node), yyvsp[0].node); + ; break;} case 324: -#line 1629 "./parse.y" +#line 1632 "./parse.y" {yyerror ("'{' expected"); DRECOVER (try_statement);; break;} case 326: -#line 1635 "./parse.y" +#line 1638 "./parse.y" { TREE_CHAIN (yyvsp[0].node) = yyvsp[-1].node; yyval.node = yyvsp[0].node; ; break;} case 327: -#line 1643 "./parse.y" +#line 1646 "./parse.y" { java_method_add_stmt (current_function_decl, yyvsp[0].node); exit_block (); @@ -3961,7 +3971,7 @@ case 327: ; break;} case 328: -#line 1651 "./parse.y" +#line 1654 "./parse.y" { /* We add a block to define a scope for formal_parameter (CCBP). The formal parameter is @@ -3979,176 +3989,176 @@ case 328: ; break;} case 329: -#line 1667 "./parse.y" +#line 1670 "./parse.y" {yyerror ("'(' expected"); RECOVER;; break;} case 330: -#line 1669 "./parse.y" +#line 1672 "./parse.y" {yyerror ("Missing term or ')' expected"); DRECOVER (2);; break;} case 331: -#line 1671 "./parse.y" +#line 1674 "./parse.y" {yyerror ("')' expected"); DRECOVER (1);; break;} case 332: -#line 1676 "./parse.y" +#line 1679 "./parse.y" { yyval.node = yyvsp[0].node; ; break;} case 333: -#line 1678 "./parse.y" +#line 1681 "./parse.y" {yyerror ("'{' expected"); RECOVER; ; break;} case 337: -#line 1690 "./parse.y" +#line 1693 "./parse.y" { yyval.node = build_this (yyvsp[0].operator.location); ; break;} case 338: -#line 1692 "./parse.y" +#line 1695 "./parse.y" {yyval.node = yyvsp[-1].node;; break;} case 343: -#line 1701 "./parse.y" +#line 1704 "./parse.y" { yyval.node = parse_jdk1_1_error ("named class literals"); ; break;} case 344: -#line 1703 "./parse.y" +#line 1706 "./parse.y" { yyval.node = build_class_ref (yyvsp[-2].node); ; break;} case 345: -#line 1705 "./parse.y" +#line 1708 "./parse.y" { yyval.node = build_class_ref (void_type_node); ; break;} case 346: -#line 1710 "./parse.y" +#line 1713 "./parse.y" { yyval.node = parse_jdk1_1_error ("class literals"); ; break;} case 347: -#line 1712 "./parse.y" +#line 1715 "./parse.y" {yyerror ("')' expected"); RECOVER;; break;} case 348: -#line 1714 "./parse.y" +#line 1717 "./parse.y" {yyerror ("'class' or 'this' expected" ); RECOVER;; break;} case 349: -#line 1716 "./parse.y" +#line 1719 "./parse.y" {yyerror ("'class' expected" ); RECOVER;; break;} case 350: -#line 1718 "./parse.y" +#line 1721 "./parse.y" {yyerror ("'class' expected" ); RECOVER;; break;} case 351: -#line 1723 "./parse.y" +#line 1726 "./parse.y" { yyval.node = build_new_invocation (yyvsp[-3].node, yyvsp[-1].node); ; break;} case 352: -#line 1725 "./parse.y" +#line 1728 "./parse.y" { yyval.node = build_new_invocation (yyvsp[-2].node, NULL_TREE); ; break;} case 353: -#line 1730 "./parse.y" +#line 1733 "./parse.y" { yyval.node = parse_jdk1_1_error ("inner class instance creation"); ; break;} case 354: -#line 1732 "./parse.y" +#line 1735 "./parse.y" { yyval.node = parse_jdk1_1_error ("inner class instance creation"); ; break;} case 359: -#line 1741 "./parse.y" +#line 1744 "./parse.y" {yyerror ("'(' expected"); DRECOVER(new_1);; break;} case 360: -#line 1743 "./parse.y" +#line 1746 "./parse.y" {yyerror ("'(' expected"); RECOVER;; break;} case 361: -#line 1745 "./parse.y" +#line 1748 "./parse.y" {yyerror ("')' or term expected"); RECOVER;; break;} case 362: -#line 1747 "./parse.y" +#line 1750 "./parse.y" {yyerror ("')' expected"); RECOVER;; break;} case 363: -#line 1749 "./parse.y" +#line 1752 "./parse.y" {YYERROR_NOW; yyerror ("Identifier expected"); RECOVER;; break;} case 364: -#line 1751 "./parse.y" +#line 1754 "./parse.y" {yyerror ("'(' expected"); RECOVER;; break;} case 367: -#line 1761 "./parse.y" +#line 1764 "./parse.y" { yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, NULL_TREE); ctxp->formal_parameter_number = 1; ; break;} case 368: -#line 1766 "./parse.y" +#line 1769 "./parse.y" { ctxp->formal_parameter_number += 1; yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, yyvsp[-2].node); ; break;} case 369: -#line 1771 "./parse.y" +#line 1774 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 370: -#line 1776 "./parse.y" +#line 1779 "./parse.y" { yyval.node = build_newarray_node (yyvsp[-1].node, yyvsp[0].node, 0); ; break;} case 371: -#line 1778 "./parse.y" +#line 1781 "./parse.y" { yyval.node = build_newarray_node (yyvsp[-1].node, yyvsp[0].node, 0); ; break;} case 372: -#line 1780 "./parse.y" +#line 1783 "./parse.y" { yyval.node = build_newarray_node (yyvsp[-2].node, yyvsp[-1].node, CURRENT_OSB (ctxp));; break;} case 373: -#line 1782 "./parse.y" +#line 1785 "./parse.y" { yyval.node = build_newarray_node (yyvsp[-2].node, yyvsp[-1].node, CURRENT_OSB (ctxp));; break;} case 374: -#line 1786 "./parse.y" +#line 1789 "./parse.y" { yyval.node = parse_jdk1_1_error ("anonymous array"); ; break;} case 375: -#line 1788 "./parse.y" +#line 1791 "./parse.y" { yyval.node = parse_jdk1_1_error ("anonymous array"); ; break;} case 376: -#line 1790 "./parse.y" +#line 1793 "./parse.y" {yyerror ("'[' expected"); DRECOVER ("]");; break;} case 377: -#line 1792 "./parse.y" +#line 1795 "./parse.y" {yyerror ("']' expected"); RECOVER;; break;} case 378: -#line 1797 "./parse.y" +#line 1800 "./parse.y" { yyval.node = build_tree_list (NULL_TREE, yyvsp[0].node); ; break;} case 379: -#line 1799 "./parse.y" +#line 1802 "./parse.y" { yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, yyval.node); ; break;} case 380: -#line 1804 "./parse.y" +#line 1807 "./parse.y" { EXPR_WFL_LINECOL (yyvsp[-1].node) = yyvsp[-2].operator.location; yyval.node = yyvsp[-1].node; ; break;} case 381: -#line 1809 "./parse.y" +#line 1812 "./parse.y" {yyerror ("']' expected"); RECOVER;; break;} case 382: -#line 1811 "./parse.y" +#line 1814 "./parse.y" { yyerror ("Missing term"); yyerror ("']' expected"); @@ -4156,7 +4166,7 @@ case 382: ; break;} case 383: -#line 1820 "./parse.y" +#line 1823 "./parse.y" { int allocate = 0; /* If not initialized, allocate memory for the osb @@ -4184,19 +4194,19 @@ case 383: ; break;} case 384: -#line 1846 "./parse.y" +#line 1849 "./parse.y" { CURRENT_OSB (ctxp)++; ; break;} case 385: -#line 1848 "./parse.y" +#line 1851 "./parse.y" { yyerror ("']' expected"); RECOVER;; break;} case 386: -#line 1853 "./parse.y" +#line 1856 "./parse.y" { yyval.node = make_qualified_primary (yyvsp[-2].node, yyvsp[0].node, yyvsp[-1].operator.location); ; break;} case 387: -#line 1857 "./parse.y" +#line 1860 "./parse.y" { tree super_wfl = build_wfl_node (super_identifier_node, @@ -4206,19 +4216,19 @@ case 387: ; break;} case 388: -#line 1865 "./parse.y" +#line 1868 "./parse.y" {yyerror ("Field expected"); DRECOVER (super_field_acces);; break;} case 389: -#line 1870 "./parse.y" +#line 1873 "./parse.y" { yyval.node = build_method_invocation (yyvsp[-2].node, NULL_TREE); ; break;} case 390: -#line 1872 "./parse.y" +#line 1875 "./parse.y" { yyval.node = build_method_invocation (yyvsp[-3].node, yyvsp[-1].node); ; break;} case 391: -#line 1874 "./parse.y" +#line 1877 "./parse.y" { if (TREE_CODE (yyvsp[-4].node) == THIS_EXPR) yyval.node = build_this_super_qualified_invocation @@ -4231,7 +4241,7 @@ case 391: ; break;} case 392: -#line 1885 "./parse.y" +#line 1888 "./parse.y" { if (TREE_CODE (yyvsp[-5].node) == THIS_EXPR) yyval.node = build_this_super_qualified_invocation @@ -4244,121 +4254,121 @@ case 392: ; break;} case 393: -#line 1896 "./parse.y" +#line 1899 "./parse.y" { yyval.node = build_this_super_qualified_invocation (0, yyvsp[-2].node, NULL_TREE, yyvsp[-4].operator.location, yyvsp[-3].operator.location); ; break;} case 394: -#line 1901 "./parse.y" +#line 1904 "./parse.y" { yyval.node = build_this_super_qualified_invocation (0, yyvsp[-3].node, yyvsp[-1].node, yyvsp[-5].operator.location, yyvsp[-4].operator.location); ; break;} case 395: -#line 1910 "./parse.y" +#line 1913 "./parse.y" { yyerror ("'(' expected"); DRECOVER (method_invocation); ; break;} case 396: -#line 1912 "./parse.y" +#line 1915 "./parse.y" { yyerror ("'(' expected"); DRECOVER (method_invocation); ; break;} case 397: -#line 1917 "./parse.y" +#line 1920 "./parse.y" { yyval.node = build_array_ref (yyvsp[-2].operator.location, yyvsp[-3].node, yyvsp[-1].node); ; break;} case 398: -#line 1919 "./parse.y" +#line 1922 "./parse.y" { yyval.node = build_array_ref (yyvsp[-2].operator.location, yyvsp[-3].node, yyvsp[-1].node); ; break;} case 399: -#line 1921 "./parse.y" +#line 1924 "./parse.y" { yyerror ("Missing term and ']' expected"); DRECOVER(array_access); ; break;} case 400: -#line 1926 "./parse.y" +#line 1929 "./parse.y" { yyerror ("']' expected"); DRECOVER(array_access); ; break;} case 401: -#line 1931 "./parse.y" +#line 1934 "./parse.y" { yyerror ("Missing term and ']' expected"); DRECOVER(array_access); ; break;} case 402: -#line 1936 "./parse.y" +#line 1939 "./parse.y" { yyerror ("']' expected"); DRECOVER(array_access); ; break;} case 407: -#line 1951 "./parse.y" +#line 1954 "./parse.y" { yyval.node = build_incdec (yyvsp[0].operator.token, yyvsp[0].operator.location, yyvsp[-1].node, 1); ; break;} case 408: -#line 1956 "./parse.y" +#line 1959 "./parse.y" { yyval.node = build_incdec (yyvsp[0].operator.token, yyvsp[0].operator.location, yyvsp[-1].node, 1); ; break;} case 411: -#line 1963 "./parse.y" +#line 1966 "./parse.y" {yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ; break;} case 412: -#line 1965 "./parse.y" +#line 1968 "./parse.y" {yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ; break;} case 414: -#line 1968 "./parse.y" +#line 1971 "./parse.y" {yyerror ("Missing term"); RECOVER; break;} case 415: -#line 1970 "./parse.y" +#line 1973 "./parse.y" {yyerror ("Missing term"); RECOVER; break;} case 416: -#line 1975 "./parse.y" +#line 1978 "./parse.y" {yyval.node = build_incdec (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node, 0); ; break;} case 417: -#line 1977 "./parse.y" +#line 1980 "./parse.y" {yyerror ("Missing term"); RECOVER; break;} case 418: -#line 1982 "./parse.y" +#line 1985 "./parse.y" {yyval.node = build_incdec (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node, 0); ; break;} case 419: -#line 1984 "./parse.y" +#line 1987 "./parse.y" {yyerror ("Missing term"); RECOVER; break;} case 421: -#line 1990 "./parse.y" +#line 1993 "./parse.y" {yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ; break;} case 422: -#line 1992 "./parse.y" +#line 1995 "./parse.y" {yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ; break;} case 424: -#line 1995 "./parse.y" +#line 1998 "./parse.y" {yyerror ("Missing term"); RECOVER; break;} case 425: -#line 1997 "./parse.y" +#line 2000 "./parse.y" {yyerror ("Missing term"); RECOVER; break;} case 426: -#line 2002 "./parse.y" +#line 2005 "./parse.y" { tree type = yyvsp[-3].node; while (CURRENT_OSB (ctxp)--) @@ -4368,15 +4378,15 @@ case 426: ; break;} case 427: -#line 2010 "./parse.y" +#line 2013 "./parse.y" { yyval.node = build_cast (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} case 428: -#line 2012 "./parse.y" +#line 2015 "./parse.y" { yyval.node = build_cast (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} case 429: -#line 2014 "./parse.y" +#line 2017 "./parse.y" { char *ptr; while (CURRENT_OSB (ctxp)--) @@ -4391,11 +4401,11 @@ case 429: ; break;} case 430: -#line 2027 "./parse.y" +#line 2030 "./parse.y" {yyerror ("']' expected, invalid type expression");; break;} case 431: -#line 2029 "./parse.y" +#line 2032 "./parse.y" { if (ctxp->prevent_ese != lineno) yyerror ("Invalid type expression"); RECOVER; @@ -4403,243 +4413,243 @@ case 431: ; break;} case 432: -#line 2035 "./parse.y" +#line 2038 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 433: -#line 2037 "./parse.y" +#line 2040 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 434: -#line 2039 "./parse.y" +#line 2042 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 436: -#line 2045 "./parse.y" +#line 2048 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} case 437: -#line 2050 "./parse.y" +#line 2053 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} case 438: -#line 2055 "./parse.y" +#line 2058 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} case 439: -#line 2060 "./parse.y" +#line 2063 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 440: -#line 2062 "./parse.y" +#line 2065 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 441: -#line 2064 "./parse.y" +#line 2067 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 443: -#line 2070 "./parse.y" +#line 2073 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} case 444: -#line 2075 "./parse.y" +#line 2078 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} case 445: -#line 2080 "./parse.y" +#line 2083 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 446: -#line 2082 "./parse.y" +#line 2085 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 448: -#line 2088 "./parse.y" +#line 2091 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} case 449: -#line 2093 "./parse.y" +#line 2096 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} case 450: -#line 2098 "./parse.y" +#line 2101 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} case 451: -#line 2103 "./parse.y" +#line 2106 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 452: -#line 2105 "./parse.y" +#line 2108 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 453: -#line 2107 "./parse.y" +#line 2110 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 455: -#line 2113 "./parse.y" +#line 2116 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} case 456: -#line 2118 "./parse.y" +#line 2121 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} case 457: -#line 2123 "./parse.y" +#line 2126 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} case 458: -#line 2128 "./parse.y" +#line 2131 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} case 459: -#line 2133 "./parse.y" +#line 2136 "./parse.y" { yyval.node = build_binop (INSTANCEOF_EXPR, yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} case 460: -#line 2135 "./parse.y" +#line 2138 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 461: -#line 2137 "./parse.y" +#line 2140 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 462: -#line 2139 "./parse.y" +#line 2142 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 463: -#line 2141 "./parse.y" +#line 2144 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 464: -#line 2143 "./parse.y" +#line 2146 "./parse.y" {yyerror ("Invalid reference type"); RECOVER;; break;} case 466: -#line 2149 "./parse.y" +#line 2152 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} case 467: -#line 2154 "./parse.y" +#line 2157 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} case 468: -#line 2159 "./parse.y" +#line 2162 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 469: -#line 2161 "./parse.y" +#line 2164 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 471: -#line 2167 "./parse.y" +#line 2170 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} case 472: -#line 2172 "./parse.y" +#line 2175 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 474: -#line 2178 "./parse.y" +#line 2181 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} case 475: -#line 2183 "./parse.y" +#line 2186 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 477: -#line 2189 "./parse.y" +#line 2192 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} case 478: -#line 2194 "./parse.y" +#line 2197 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 480: -#line 2200 "./parse.y" +#line 2203 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} case 481: -#line 2205 "./parse.y" +#line 2208 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 483: -#line 2211 "./parse.y" +#line 2214 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} case 484: -#line 2216 "./parse.y" +#line 2219 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} case 486: -#line 2222 "./parse.y" +#line 2225 "./parse.y" { yyval.node = build (CONDITIONAL_EXPR, NULL_TREE, yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node); EXPR_WFL_LINECOL (yyval.node) = yyvsp[-3].operator.location; ; break;} case 487: -#line 2227 "./parse.y" +#line 2230 "./parse.y" { YYERROR_NOW; yyerror ("Missing term"); @@ -4647,19 +4657,19 @@ case 487: ; break;} case 488: -#line 2233 "./parse.y" +#line 2236 "./parse.y" {yyerror ("Missing term"); DRECOVER (2);; break;} case 489: -#line 2235 "./parse.y" +#line 2238 "./parse.y" {yyerror ("Missing term"); DRECOVER (3);; break;} case 492: -#line 2245 "./parse.y" +#line 2248 "./parse.y" { yyval.node = build_assignment (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} case 493: -#line 2247 "./parse.y" +#line 2250 "./parse.y" { if (ctxp->prevent_ese != lineno) yyerror ("Missing term"); @@ -4668,7 +4678,7 @@ case 493: break;} } /* the action file gets copied in in place of this dollarsign */ -#line 498 "/usr/local/gnu/share/bison.simple" +#line 498 "/usr/lib/bison.simple" yyvsp -= yylen; yyssp -= yylen; @@ -4864,7 +4874,7 @@ yyerrhandle: yystate = yyn; goto yynewstate; } -#line 2273 "./parse.y" +#line 2276 "./parse.y" @@ -5532,7 +5542,7 @@ create_interface (flags, id, super) decl = maybe_create_class_interface_decl (decl, q_name, id); /* Set super info and mark the class a complete */ - set_super_info (ACC_ABSTRACT | ACC_INTERFACE | flags, TREE_TYPE (decl), + set_super_info (ACC_INTERFACE | flags, TREE_TYPE (decl), object_type_node, ctxp->interface_number); ctxp->interface_number = 0; CLASS_COMPLETE_P (decl) = 1; @@ -5892,7 +5902,8 @@ method_header (flags, type, mdecl, throws) ABSTRACT_CHECK (flags, ACC_FINAL, id, "Final"); ABSTRACT_CHECK (flags, ACC_NATIVE, id, "Native"); ABSTRACT_CHECK (flags, ACC_SYNCHRONIZED,id, "Synchronized"); - if (!CLASS_ABSTRACT (TYPE_NAME (this_class))) + if (!CLASS_ABSTRACT (TYPE_NAME (this_class)) + && !CLASS_INTERFACE (TYPE_NAME (this_class))) parse_error_context (id, "Class `%s' must be declared abstract to define abstract " "method `%s'", @@ -7843,7 +7854,7 @@ declare_local_variables (modifier, type, vlist) tree type_wfl = NULL_TREE; int must_chain = 0; - /* Push a new block if statement were seen between the last time we + /* Push a new block if statements were seen between the last time we pushed a block and now. Keep a cound of block to close */ if (BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (current_function_decl))) { @@ -8989,7 +9000,7 @@ resolve_qualified_expression_name (wfl, found_decl, where_found, type_found) parse_error_context (qual_wfl, "Can't access %s field `%s.%s' from `%s'", java_accstring_lookup (get_access_flags_from_decl (decl)), - IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))), + GET_TYPE_NAME (type), IDENTIFIER_POINTER (DECL_NAME (decl)), IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (current_class)))); return 1; @@ -9050,9 +9061,9 @@ resolve_qualified_expression_name (wfl, found_decl, where_found, type_found) if (field_decl == NULL_TREE) { parse_error_context - (qual_wfl, "No variable `%s' defined in class `%s'", + (qual_wfl, "No variable `%s' defined in type `%s'", IDENTIFIER_POINTER (EXPR_WFL_NODE (qual_wfl)), - IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)))); + GET_TYPE_NAME (type)); return 1; } if (field_decl == error_mark_node) @@ -9081,7 +9092,7 @@ resolve_qualified_expression_name (wfl, found_decl, where_found, type_found) "Can't access %s field `%s.%s' from `%s'", java_accstring_lookup (get_access_flags_from_decl (field_decl)), - IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))), + GET_TYPE_NAME (type), IDENTIFIER_POINTER (DECL_NAME (field_decl)), IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (current_class)))); @@ -10112,6 +10123,22 @@ java_complete_tree (node) return node; } +static tree +java_stabilize_reference (node) + tree node; +{ + if (TREE_CODE (node) == COMPOUND_EXPR) + { + tree op0 = TREE_OPERAND (node, 0); + tree op1 = TREE_OPERAND (node, 1); + TREE_OPERAND (node, 0) = build1 (SAVE_EXPR, TREE_TYPE (op0), op0); + TREE_OPERAND (node, 1) = java_stabilize_reference (op1); + return node; + } + else + return stabilize_reference (node); +} + /* Patch tree nodes in a function body. When a BLOCK is found, push local variable decls if present. Same as java_complete_tree, but does not resolve static finals to values. */ @@ -10239,13 +10266,15 @@ java_complete_lhs (node) case CLEANUP_POINT_EXPR: COMPLETE_CHECK_OP_0 (node); TREE_TYPE (node) = void_type_node; - CAN_COMPLETE_NORMALLY (node) = CAN_COMPLETE_NORMALLY (TREE_OPERAND (node, 0)); + CAN_COMPLETE_NORMALLY (node) = + CAN_COMPLETE_NORMALLY (TREE_OPERAND (node, 0)); return node; case WITH_CLEANUP_EXPR: COMPLETE_CHECK_OP_0 (node); COMPLETE_CHECK_OP_2 (node); - CAN_COMPLETE_NORMALLY (node) = CAN_COMPLETE_NORMALLY (TREE_OPERAND (node, 0)); + CAN_COMPLETE_NORMALLY (node) = + CAN_COMPLETE_NORMALLY (TREE_OPERAND (node, 0)); TREE_TYPE (node) = void_type_node; return node; @@ -10508,26 +10537,33 @@ java_complete_lhs (node) if (COMPOUND_ASSIGN_P (wfl_op2)) { - tree lvalue; - tree other = - java_complete_tree (TREE_OPERAND (wfl_op2, 0)); + tree lvalue = java_stabilize_reference (TREE_OPERAND (node, 0)); /* Hand stablize the lhs on both places */ - lvalue = stabilize_reference (other); TREE_OPERAND (node, 0) = lvalue; TREE_OPERAND (TREE_OPERAND (node, 1), 0) = lvalue; + + /* Now complete the RHS. We write it back later on. */ + nn = java_complete_tree (TREE_OPERAND (node, 1)); + + /* The last part of the rewrite for E1 op= E2 is to have + E1 = (T)(E1 op E2), with T being the type of E1. */ + nn = build_cast (EXPR_WFL_LINECOL (wfl_op2), TREE_TYPE (lvalue), nn); } /* If we're about to patch a NEW_ARRAY_INIT, we call a special function to complete this RHS */ - if (TREE_CODE (wfl_op2) == NEW_ARRAY_INIT) + else if (TREE_CODE (wfl_op2) == NEW_ARRAY_INIT) nn = patch_new_array_init (TREE_TYPE (TREE_OPERAND (node, 0)), TREE_OPERAND (node, 1)); + /* Otherwise we simply complete the RHS */ else nn = java_complete_tree (TREE_OPERAND (node, 1)); if (nn == error_mark_node) return error_mark_node; + + /* Write back the RHS as we evaluated it. */ TREE_OPERAND (node, 1) = nn; /* In case we're handling = with a String as a RHS, we need to @@ -10576,17 +10612,23 @@ java_complete_lhs (node) CAN_COMPLETE_NORMALLY (node) = 1; /* Don't complete string nodes if dealing with the PLUS operand. */ if (TREE_CODE (node) != PLUS_EXPR || !JSTRING_P (wfl_op1)) - { - TREE_OPERAND (node, 0) = java_complete_tree (wfl_op1); - if (TREE_OPERAND (node, 0) == error_mark_node) - return error_mark_node; - } + { + nn = java_complete_tree (wfl_op1); + if (nn == error_mark_node) + return error_mark_node; + if ((cn = patch_string (nn))) + nn = cn; + TREE_OPERAND (node, 0) = nn; + } if (TREE_CODE (node) != PLUS_EXPR || !JSTRING_P (wfl_op2)) - { - TREE_OPERAND (node, 1) = java_complete_tree (wfl_op2); - if (TREE_OPERAND (node, 1) == error_mark_node) - return error_mark_node; - } + { + nn = java_complete_tree (wfl_op2); + if (nn == error_mark_node) + return error_mark_node; + if ((cn = patch_string (nn))) + nn = cn; + TREE_OPERAND (node, 1) = nn; + } return force_evaluation_order (patch_binop (node, wfl_op1, wfl_op2)); case INSTANCEOF_EXPR: diff --git a/gcc/java/parse.h b/gcc/java/parse.h index f917127577b..c78c5bb6807 100644 --- a/gcc/java/parse.h +++ b/gcc/java/parse.h @@ -129,6 +129,13 @@ extern tree stabilize_reference PROTO ((tree)); (TREE_CODE (DECL_NAME (METHOD)) == EXPR_WITH_FILE_LOCATION ? \ EXPR_WFL_NODE (DECL_NAME (METHOD)) : DECL_NAME (METHOD)) +/* Get TYPE name string, regardless whether TYPE is a class or an + array. */ +#define GET_TYPE_NAME(TYPE) \ + (TREE_CODE (TYPE_NAME (TYPE)) == IDENTIFIER_NODE ? \ + IDENTIFIER_POINTER (TYPE_NAME (TYPE)) : \ + IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (TYPE)))) + /* Pedantic warning on obsolete modifiers. Note: when cl is NULL, flags was set artificially, such as for a interface method */ #define OBSOLETE_MODIFIER_WARNING(cl, flags, modifier, format, arg) \ diff --git a/gcc/java/parse.y b/gcc/java/parse.y index ad6122b8fd6..c4378dae51d 100644 --- a/gcc/java/parse.y +++ b/gcc/java/parse.y @@ -1320,7 +1320,10 @@ statement_expression: if_then_statement: IF_TK OP_TK expression CP_TK statement - { $$ = build_if_else_statement ($2.location, $3, $5, NULL_TREE); } + { + $$ = build_if_else_statement ($2.location, $3, + $5, NULL_TREE); + } | IF_TK error {yyerror ("'(' expected"); RECOVER;} | IF_TK OP_TK error @@ -1331,12 +1334,12 @@ if_then_statement: if_then_else_statement: IF_TK OP_TK expression CP_TK statement_nsi ELSE_TK statement - { $$ = build_if_else_statement ($2.location, $3, $5, $7); } + { $$ = build_if_else_statement ($2.location, $3, $5, $7); } ; if_then_else_statement_nsi: IF_TK OP_TK expression CP_TK statement_nsi ELSE_TK statement_nsi - { $$ = build_if_else_statement ($2.location, $3, $5, $7); } + { $$ = build_if_else_statement ($2.location, $3, $5, $7); } ; switch_statement: @@ -1458,7 +1461,7 @@ do_statement: for_statement: for_begin SC_TK expression SC_TK for_update CP_TK statement - { $$ = complete_for_loop (EXPR_WFL_LINECOL ($3), $3, $5, $7);} + { $$ = complete_for_loop (EXPR_WFL_LINECOL ($3), $3, $5, $7); } | for_begin SC_TK SC_TK for_update CP_TK statement { $$ = complete_for_loop (0, NULL_TREE, $4, $6); @@ -1621,10 +1624,10 @@ try_statement: | TRY_TK block finally { $$ = build_try_finally_statement ($1.location, $2, $3); } | TRY_TK block catches finally - { $$ = build_try_finally_statement ($1.location, - build_try_statement ($1.location, - $2, $3), - $4); } + { $$ = build_try_finally_statement + ($1.location, build_try_statement ($1.location, + $2, $3), $4); + } | TRY_TK error {yyerror ("'{' expected"); DRECOVER (try_statement);} ; @@ -2937,7 +2940,7 @@ create_interface (flags, id, super) decl = maybe_create_class_interface_decl (decl, q_name, id); /* Set super info and mark the class a complete */ - set_super_info (ACC_ABSTRACT | ACC_INTERFACE | flags, TREE_TYPE (decl), + set_super_info (ACC_INTERFACE | flags, TREE_TYPE (decl), object_type_node, ctxp->interface_number); ctxp->interface_number = 0; CLASS_COMPLETE_P (decl) = 1; @@ -3297,7 +3300,8 @@ method_header (flags, type, mdecl, throws) ABSTRACT_CHECK (flags, ACC_FINAL, id, "Final"); ABSTRACT_CHECK (flags, ACC_NATIVE, id, "Native"); ABSTRACT_CHECK (flags, ACC_SYNCHRONIZED,id, "Synchronized"); - if (!CLASS_ABSTRACT (TYPE_NAME (this_class))) + if (!CLASS_ABSTRACT (TYPE_NAME (this_class)) + && !CLASS_INTERFACE (TYPE_NAME (this_class))) parse_error_context (id, "Class `%s' must be declared abstract to define abstract " "method `%s'", @@ -5248,7 +5252,7 @@ declare_local_variables (modifier, type, vlist) tree type_wfl = NULL_TREE; int must_chain = 0; - /* Push a new block if statement were seen between the last time we + /* Push a new block if statements were seen between the last time we pushed a block and now. Keep a cound of block to close */ if (BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (current_function_decl))) { @@ -6394,7 +6398,7 @@ resolve_qualified_expression_name (wfl, found_decl, where_found, type_found) parse_error_context (qual_wfl, "Can't access %s field `%s.%s' from `%s'", java_accstring_lookup (get_access_flags_from_decl (decl)), - IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))), + GET_TYPE_NAME (type), IDENTIFIER_POINTER (DECL_NAME (decl)), IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (current_class)))); return 1; @@ -6455,9 +6459,9 @@ resolve_qualified_expression_name (wfl, found_decl, where_found, type_found) if (field_decl == NULL_TREE) { parse_error_context - (qual_wfl, "No variable `%s' defined in class `%s'", + (qual_wfl, "No variable `%s' defined in type `%s'", IDENTIFIER_POINTER (EXPR_WFL_NODE (qual_wfl)), - IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)))); + GET_TYPE_NAME (type)); return 1; } if (field_decl == error_mark_node) @@ -6486,7 +6490,7 @@ resolve_qualified_expression_name (wfl, found_decl, where_found, type_found) "Can't access %s field `%s.%s' from `%s'", java_accstring_lookup (get_access_flags_from_decl (field_decl)), - IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))), + GET_TYPE_NAME (type), IDENTIFIER_POINTER (DECL_NAME (field_decl)), IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (current_class)))); @@ -7517,6 +7521,22 @@ java_complete_tree (node) return node; } +static tree +java_stabilize_reference (node) + tree node; +{ + if (TREE_CODE (node) == COMPOUND_EXPR) + { + tree op0 = TREE_OPERAND (node, 0); + tree op1 = TREE_OPERAND (node, 1); + TREE_OPERAND (node, 0) = build1 (SAVE_EXPR, TREE_TYPE (op0), op0); + TREE_OPERAND (node, 1) = java_stabilize_reference (op1); + return node; + } + else + return stabilize_reference (node); +} + /* Patch tree nodes in a function body. When a BLOCK is found, push local variable decls if present. Same as java_complete_tree, but does not resolve static finals to values. */ @@ -7644,13 +7664,15 @@ java_complete_lhs (node) case CLEANUP_POINT_EXPR: COMPLETE_CHECK_OP_0 (node); TREE_TYPE (node) = void_type_node; - CAN_COMPLETE_NORMALLY (node) = CAN_COMPLETE_NORMALLY (TREE_OPERAND (node, 0)); + CAN_COMPLETE_NORMALLY (node) = + CAN_COMPLETE_NORMALLY (TREE_OPERAND (node, 0)); return node; case WITH_CLEANUP_EXPR: COMPLETE_CHECK_OP_0 (node); COMPLETE_CHECK_OP_2 (node); - CAN_COMPLETE_NORMALLY (node) = CAN_COMPLETE_NORMALLY (TREE_OPERAND (node, 0)); + CAN_COMPLETE_NORMALLY (node) = + CAN_COMPLETE_NORMALLY (TREE_OPERAND (node, 0)); TREE_TYPE (node) = void_type_node; return node; @@ -7913,26 +7935,33 @@ java_complete_lhs (node) if (COMPOUND_ASSIGN_P (wfl_op2)) { - tree lvalue; - tree other = - java_complete_tree (TREE_OPERAND (wfl_op2, 0)); + tree lvalue = java_stabilize_reference (TREE_OPERAND (node, 0)); /* Hand stablize the lhs on both places */ - lvalue = stabilize_reference (other); TREE_OPERAND (node, 0) = lvalue; TREE_OPERAND (TREE_OPERAND (node, 1), 0) = lvalue; + + /* Now complete the RHS. We write it back later on. */ + nn = java_complete_tree (TREE_OPERAND (node, 1)); + + /* The last part of the rewrite for E1 op= E2 is to have + E1 = (T)(E1 op E2), with T being the type of E1. */ + nn = build_cast (EXPR_WFL_LINECOL (wfl_op2), TREE_TYPE (lvalue), nn); } /* If we're about to patch a NEW_ARRAY_INIT, we call a special function to complete this RHS */ - if (TREE_CODE (wfl_op2) == NEW_ARRAY_INIT) + else if (TREE_CODE (wfl_op2) == NEW_ARRAY_INIT) nn = patch_new_array_init (TREE_TYPE (TREE_OPERAND (node, 0)), TREE_OPERAND (node, 1)); + /* Otherwise we simply complete the RHS */ else nn = java_complete_tree (TREE_OPERAND (node, 1)); if (nn == error_mark_node) return error_mark_node; + + /* Write back the RHS as we evaluated it. */ TREE_OPERAND (node, 1) = nn; /* In case we're handling = with a String as a RHS, we need to @@ -7981,17 +8010,23 @@ java_complete_lhs (node) CAN_COMPLETE_NORMALLY (node) = 1; /* Don't complete string nodes if dealing with the PLUS operand. */ if (TREE_CODE (node) != PLUS_EXPR || !JSTRING_P (wfl_op1)) - { - TREE_OPERAND (node, 0) = java_complete_tree (wfl_op1); - if (TREE_OPERAND (node, 0) == error_mark_node) - return error_mark_node; - } + { + nn = java_complete_tree (wfl_op1); + if (nn == error_mark_node) + return error_mark_node; + if ((cn = patch_string (nn))) + nn = cn; + TREE_OPERAND (node, 0) = nn; + } if (TREE_CODE (node) != PLUS_EXPR || !JSTRING_P (wfl_op2)) - { - TREE_OPERAND (node, 1) = java_complete_tree (wfl_op2); - if (TREE_OPERAND (node, 1) == error_mark_node) - return error_mark_node; - } + { + nn = java_complete_tree (wfl_op2); + if (nn == error_mark_node) + return error_mark_node; + if ((cn = patch_string (nn))) + nn = cn; + TREE_OPERAND (node, 1) = nn; + } return force_evaluation_order (patch_binop (node, wfl_op1, wfl_op2)); case INSTANCEOF_EXPR: