Commit 82371d41 by Alexandre Petit-Bianco Committed by Alexandre Petit-Bianco

class.c (layout_class_method): Don't report error on non-static overriding…

class.c (layout_class_method): Don't report error on non-static overriding static if the method is private.

Tue Dec  1 13:53:24 1998  Alexandre Petit-Bianco  <apbianco@cygnus.com>
	* class.c (layout_class_method): Don't report error on non-static
 	overriding static if the method is private.
	* java-tree.h (finish_class): Prototype added.
	* lex.c (java_get_line_col): Handle col argument -2 value.
	* parse.h: All static method declarations moved to parse.y.
	* parse.y: Now contains all static method declarations previously
 	found in parse.h.
	(find_expr_with_wfl, missing_return_error,
 	unreachable_stmt_error): New functions.
	(java_get_real_method_name): Identify constructors bearing class
 	names in source code compiled classes only.
	(java_complete_expand_methods): Call missing_return_error.
	(invocation_mode): Private methods invoked as static methods.
	(java_complete_tree): Call unreachable_stmt_error.
This patch corrects the way unreachable statement and missing return
statement errors are reported. It also fixes random bugs.

From-SVN: r24036
parent df3ba30a
Tue Dec 1 13:53:24 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
* class.c (layout_class_method): Don't report error on non-static
overriding static if the method is private.
* java-tree.h (finish_class): Prototype added.
* lex.c (java_get_line_col): Handle col argument -2 value.
* parse.h: All static method declarations moved to parse.y.
* parse.y: Now contains all static method declarations previously
found in parse.h.
(find_expr_with_wfl, missing_return_error,
unreachable_stmt_error): New functions.
(java_get_real_method_name): Identify constructors bearing class
names in source code compiled classes only.
(java_complete_expand_methods): Call missing_return_error.
(invocation_mode): Private methods invoked as static methods.
(java_complete_tree): Call unreachable_stmt_error.
1998-12-01 Tom Tromey <tromey@cygnus.com> 1998-12-01 Tom Tromey <tromey@cygnus.com>
* Makefile.in (+target): Removed. * Makefile.in (+target): Removed.
......
...@@ -1588,7 +1588,8 @@ layout_class_method (this_class, super_class, method_decl, dtable_count) ...@@ -1588,7 +1588,8 @@ layout_class_method (this_class, super_class, method_decl, dtable_count)
if (super_method != NULL_TREE) if (super_method != NULL_TREE)
{ {
DECL_VINDEX (method_decl) = DECL_VINDEX (super_method); DECL_VINDEX (method_decl) = DECL_VINDEX (super_method);
if (DECL_VINDEX (method_decl) == NULL_TREE) if (DECL_VINDEX (method_decl) == NULL_TREE &&
! TREE_PRIVATE (method_decl))
error_with_decl (method_decl, error_with_decl (method_decl,
"non-static method '%s' overrides static method"); "non-static method '%s' overrides static method");
#if 0 #if 0
......
...@@ -561,6 +561,7 @@ extern char *print_int_node PROTO ((tree)); ...@@ -561,6 +561,7 @@ extern char *print_int_node PROTO ((tree));
extern void parse_error_context VPROTO ((tree cl, char *msg, ...)); extern void parse_error_context VPROTO ((tree cl, char *msg, ...));
extern tree build_primtype_type_ref PROTO ((char *)); extern tree build_primtype_type_ref PROTO ((char *));
extern tree java_get_real_method_name PROTO ((tree)); extern tree java_get_real_method_name PROTO ((tree));
extern void finish_class PROTO ((tree));
/* Access flags etc for a method (a FUNCTION_DECL): */ /* Access flags etc for a method (a FUNCTION_DECL): */
......
...@@ -1315,11 +1315,14 @@ java_get_line_col (filename, line, col) ...@@ -1315,11 +1315,14 @@ java_get_line_col (filename, line, col)
/* Dumb implementation. Doesn't try to cache or optimize things. */ /* Dumb implementation. Doesn't try to cache or optimize things. */
/* First line of the file is line 1, first column is 1 */ /* First line of the file is line 1, first column is 1 */
/* COL <= 0 means, at the CR/LF in LINE */ /* COL == -1 means, at the CR/LF in LINE */
/* COL == -2 means, at the first non space char in LINE */
FILE *fp; FILE *fp;
int c, ccol, cline = 1; int c, ccol, cline = 1;
int current_line_col = 0; int current_line_col = 0;
int first_non_space = 0;
char *base;
if (!(fp = fopen (filename, "r"))) if (!(fp = fopen (filename, "r")))
fatal ("Can't open file - java_display_line_col"); fatal ("Can't open file - java_display_line_col");
...@@ -1343,6 +1346,8 @@ java_get_line_col (filename, line, col) ...@@ -1343,6 +1346,8 @@ java_get_line_col (filename, line, col)
c = getc (fp); c = getc (fp);
if (c < 0 || java_is_eol (fp, c)) if (c < 0 || java_is_eol (fp, c))
break; break;
if (!first_non_space && !JAVA_WHITE_SPACE_P (c))
first_non_space = current_line_col;
obstack_1grow (&temporary_obstack, c); obstack_1grow (&temporary_obstack, c);
current_line_col++; current_line_col++;
} }
...@@ -1350,12 +1355,25 @@ java_get_line_col (filename, line, col) ...@@ -1350,12 +1355,25 @@ java_get_line_col (filename, line, col)
obstack_1grow (&temporary_obstack, '\n'); obstack_1grow (&temporary_obstack, '\n');
if (col < 0) if (col == -1)
{
col = current_line_col; col = current_line_col;
first_non_space = 0;
}
else if (col == -2)
col = first_non_space;
else
first_non_space = 0;
/* Place the '^' a the right position */ /* Place the '^' a the right position */
base = obstack_base (&temporary_obstack);
for (ccol = 1; ccol <= col; ccol++) for (ccol = 1; ccol <= col; ccol++)
obstack_1grow (&temporary_obstack, ' '); {
/* Compute \t when reaching first_non_space */
char c = (first_non_space ?
(base [ccol-1] == '\t' ? '\t' : ' ') : ' ');
obstack_1grow (&temporary_obstack, c);
}
obstack_grow0 (&temporary_obstack, "^", 1); obstack_grow0 (&temporary_obstack, "^", 1);
fclose (fp); fclose (fp);
......
...@@ -145,6 +145,171 @@ ...@@ -145,6 +145,171 @@
#include "zipfile.h" #include "zipfile.h"
#include "convert.h" #include "convert.h"
/* Local function prototypes */
static char *java_accstring_lookup PROTO ((int));
static void classitf_redefinition_error PROTO ((char *,tree, tree, tree));
static void variable_redefinition_error PROTO ((tree, tree, tree, int));
static void check_modifiers PROTO ((char *, int, int));
static tree create_class PROTO ((int, tree, tree, tree));
static tree create_interface PROTO ((int, tree, tree));
static tree find_field PROTO ((tree, tree));
static tree lookup_field_wrapper PROTO ((tree, tree));
static int duplicate_declaration_error_p PROTO ((tree, tree, tree));
static void register_fields PROTO ((int, tree, tree));
static tree parser_qualified_classname PROTO ((tree));
static int parser_check_super PROTO ((tree, tree, tree));
static int parser_check_super_interface PROTO ((tree, tree, tree));
static void check_modifiers_consistency PROTO ((int));
static tree lookup_cl PROTO ((tree));
static tree lookup_java_method2 PROTO ((tree, tree, int));
static tree method_header PROTO ((int, tree, tree, tree));
static void fix_method_argument_names PROTO ((tree ,tree));
static tree method_declarator PROTO ((tree, tree));
static void parse_warning_context VPROTO ((tree cl, char *msg, ...));
static void issue_warning_error_from_context PROTO ((tree, char *msg, va_list));
static tree parse_jdk1_1_error PROTO ((char *));
static void complete_class_report_errors PROTO ((jdep *));
static int process_imports PROTO ((void));
static void read_import_dir PROTO ((tree));
static int find_in_imports_on_demand PROTO ((tree));
static int find_in_imports PROTO ((tree));
static int check_pkg_class_access PROTO ((tree, tree));
static tree resolve_package PROTO ((tree, tree *));
static tree lookup_package_type PROTO ((char *, int));
static tree resolve_class PROTO ((tree, tree, tree));
static tree do_resolve_class PROTO ((tree, tree, tree));
static void declare_local_variables PROTO ((int, tree, tree));
static void source_start_java_method PROTO ((tree));
static void source_end_java_method PROTO ((void));
static void expand_start_java_method PROTO ((tree));
static tree find_name_in_single_imports PROTO ((tree));
static void check_abstract_method_header PROTO ((tree));
static tree lookup_java_interface_method2 PROTO ((tree, tree));
static tree resolve_expression_name PROTO ((tree, tree *));
static tree maybe_create_class_interface_decl PROTO ((tree, tree, tree));
static int check_class_interface_creation PROTO ((int, int, tree,
tree, tree, tree));
static tree patch_method_invocation PROTO ((tree, tree, tree,
int *, tree *, int));
static int breakdown_qualified PROTO ((tree *, tree *, tree));
static tree resolve_and_layout PROTO ((tree, tree));
static tree resolve_no_layout PROTO ((tree, tree));
static int invocation_mode PROTO ((tree, int));
static tree find_applicable_accessible_methods_list PROTO ((int, tree,
tree, tree));
static tree find_most_specific_methods_list PROTO ((tree));
static int argument_types_convertible PROTO ((tree, tree));
static tree patch_invoke PROTO ((tree, tree, tree, int));
static tree lookup_method_invoke PROTO ((int, tree, tree, tree, tree));
static tree register_incomplete_type PROTO ((int, tree, tree, tree));
static tree obtain_incomplete_type PROTO ((tree));
static tree java_complete_tree PROTO ((tree));
static void java_complete_expand_method PROTO ((tree));
static int unresolved_type_p PROTO ((tree, tree *));
static void create_jdep_list PROTO ((struct parser_ctxt *));
static tree build_expr_block PROTO ((tree, tree));
static tree enter_block PROTO ((void));
static tree enter_a_block PROTO ((tree));
static tree exit_block PROTO ((void));
static tree lookup_name_in_blocks PROTO ((tree));
static void maybe_absorb_scoping_blocks PROTO ((void));
static tree build_method_invocation PROTO ((tree, tree));
static tree build_new_invocation PROTO ((tree, tree));
static tree build_assignment PROTO ((int, int, tree, tree));
static tree build_binop PROTO ((enum tree_code, int, tree, tree));
static int check_final_assignment PROTO ((tree ,tree));
static tree patch_assignment PROTO ((tree, tree, tree ));
static tree patch_binop PROTO ((tree, tree, tree));
static tree build_unaryop PROTO ((int, int, tree));
static tree build_incdec PROTO ((int, int, tree, int));
static tree patch_unaryop PROTO ((tree, tree));
static tree build_cast PROTO ((int, tree, tree));
static tree build_null_of_type PROTO ((tree));
static tree patch_cast PROTO ((tree, tree));
static int valid_ref_assignconv_cast_p PROTO ((tree, tree, int));
static int valid_builtin_assignconv_identity_widening_p PROTO ((tree, tree));
static int valid_cast_to_p PROTO ((tree, tree));
static int valid_method_invocation_conversion_p PROTO ((tree, tree));
static tree try_builtin_assignconv PROTO ((tree, tree, tree));
static tree try_reference_assignconv PROTO ((tree, tree));
static tree build_unresolved_array_type PROTO ((tree));
static tree build_array_from_name PROTO ((tree, tree, tree, tree *));
static tree build_array_ref PROTO ((int, tree, tree));
static tree patch_array_ref PROTO ((tree));
static tree make_qualified_name PROTO ((tree, tree, int));
static tree merge_qualified_name PROTO ((tree, tree));
static tree make_qualified_primary PROTO ((tree, tree, int));
static int resolve_qualified_expression_name PROTO ((tree, tree *,
tree *, tree *));
static void qualify_ambiguous_name PROTO ((tree));
static void maybe_generate_clinit PROTO ((void));
static tree resolve_field_access PROTO ((tree, tree *, tree *));
static tree build_newarray_node PROTO ((tree, tree, int));
static tree patch_newarray PROTO ((tree));
static tree resolve_type_during_patch PROTO ((tree));
static tree build_this PROTO ((int));
static tree build_return PROTO ((int, tree));
static tree patch_return PROTO ((tree));
static tree maybe_access_field PROTO ((tree, tree, tree));
static int complete_function_arguments PROTO ((tree));
static int check_for_static_method_reference PROTO ((tree, tree, tree, tree, tree));
static int not_accessible_p PROTO ((tree, tree, int));
static void check_deprecation PROTO ((tree, tree));
static int class_in_current_package PROTO ((tree));
static tree build_if_else_statement PROTO ((int, tree, tree, tree));
static tree patch_if_else_statement PROTO ((tree));
static tree add_stmt_to_compound PROTO ((tree, tree, tree));
static tree add_stmt_to_block PROTO ((tree, tree, tree));
static tree patch_exit_expr PROTO ((tree));
static tree build_labeled_block PROTO ((int, tree));
static tree generate_labeled_block PROTO (());
static tree complete_labeled_statement PROTO ((tree, tree));
static tree build_bc_statement PROTO ((int, int, tree));
static tree patch_bc_statement PROTO ((tree));
static tree patch_loop_statement PROTO ((tree));
static tree build_new_loop PROTO ((tree));
static tree build_loop_body PROTO ((int, tree, int));
static tree complete_loop_body PROTO ((int, tree, tree, int));
static tree build_debugable_stmt PROTO ((int, tree));
static tree complete_for_loop PROTO ((int, tree, tree, tree));
static tree patch_switch_statement PROTO ((tree));
static tree string_constant_concatenation PROTO ((tree, tree));
static tree build_string_concatenation PROTO ((tree, tree));
static tree patch_string_cst PROTO ((tree));
static tree patch_string PROTO ((tree));
static tree build_jump_to_finally PROTO ((tree, tree, tree, tree));
static tree build_try_statement PROTO ((int, tree, tree, tree));
static tree patch_try_statement PROTO ((tree));
static tree patch_synchronized_statement PROTO ((tree, tree));
static tree patch_throw_statement PROTO ((tree, tree));
static void check_thrown_exceptions PROTO ((int, tree));
static int check_thrown_exceptions_do PROTO ((tree));
static void purge_unchecked_exceptions PROTO ((tree));
static void check_throws_clauses PROTO ((tree, tree, tree));
static void complete_method_declaration PROTO ((tree));
static tree build_super_invocation PROTO (());
static int verify_constructor_circularity PROTO ((tree, tree));
static char *constructor_circularity_msg PROTO ((tree, tree));
static tree build_this_super_qualified_invocation PROTO ((int, tree, tree,
int, int));
static char *get_printable_method_name PROTO ((tree));
static tree patch_conditional_expr PROTO ((tree, tree, tree));
static void maybe_generate_finit PROTO (());
static void fix_constructors PROTO ((tree));
static int verify_constructor_super PROTO (());
static tree create_artificial_method PROTO ((tree, int, tree, tree, tree));
static void start_artificial_method_body PROTO ((tree));
static void end_artificial_method_body PROTO ((tree));
static tree generate_field_initialization_code PROTO ((tree));
static int check_method_redefinition PROTO ((tree, tree));
static int reset_method_name PROTO ((tree));
static void java_check_regular_methods PROTO ((tree));
static void java_check_abstract_methods PROTO ((tree));
static tree maybe_build_primttype_type_ref PROTO ((tree, tree));
static void unreachable_stmt_error PROTO ((tree));
static tree find_expr_with_wfl PROTO ((tree));
static void missing_return_error PROTO ((tree));
/* Number of error found so far. */ /* Number of error found so far. */
int java_error_count; int java_error_count;
/* Number of warning found so far. */ /* Number of warning found so far. */
...@@ -189,7 +354,7 @@ static tree wfl_append = NULL_TREE; ...@@ -189,7 +354,7 @@ static tree wfl_append = NULL_TREE;
/* The "toString" identifier used for String `+' operator. */ /* The "toString" identifier used for String `+' operator. */
static tree wfl_to_string = NULL_TREE; static tree wfl_to_string = NULL_TREE;
#line 117 "./parse.y" #line 282 "./parse.y"
typedef union { typedef union {
tree node; tree node;
int sub_token; int sub_token;
...@@ -493,56 +658,56 @@ static const short yyrhs[] = { 123, ...@@ -493,56 +658,56 @@ static const short yyrhs[] = { 123,
#if YYDEBUG != 0 #if YYDEBUG != 0
static const short yyrline[] = { 0, static const short yyrline[] = { 0,
266, 272, 274, 275, 276, 277, 278, 282, 284, 287, 431, 437, 439, 440, 441, 442, 443, 447, 449, 452,
289, 290, 293, 295, 298, 302, 306, 310, 316, 318, 454, 455, 458, 460, 463, 467, 471, 475, 481, 483,
320, 322, 327, 329, 332, 336, 341, 346, 348, 349, 485, 487, 492, 494, 497, 501, 506, 511, 513, 514,
350, 351, 352, 353, 354, 357, 362, 368, 370, 373, 515, 516, 517, 518, 519, 522, 527, 533, 535, 538,
376, 378, 382, 384, 387, 414, 416, 420, 433, 435, 541, 543, 547, 549, 552, 579, 581, 585, 598, 600,
439, 446, 447, 449, 459, 464, 479, 483, 486, 489, 604, 611, 612, 614, 624, 629, 644, 648, 651, 654,
492, 494, 496, 498, 502, 504, 506, 508, 512, 514, 657, 659, 661, 663, 667, 669, 671, 673, 677, 679,
516, 523, 529, 534, 538, 541, 545, 547, 550, 552, 681, 688, 694, 699, 703, 706, 710, 712, 715, 717,
553, 554, 558, 560, 561, 563, 568, 571, 581, 584, 718, 719, 723, 725, 726, 728, 733, 736, 746, 749,
586, 590, 593, 600, 606, 614, 616, 618, 620, 622, 751, 755, 758, 765, 771, 779, 781, 783, 785, 787,
626, 628, 633, 640, 641, 645, 648, 650, 652, 654, 791, 793, 798, 805, 806, 810, 813, 815, 817, 819,
656, 658, 660, 662, 669, 672, 674, 679, 681, 685, 821, 823, 825, 827, 834, 837, 839, 844, 846, 850,
690, 695, 699, 704, 706, 708, 715, 717, 719, 723, 855, 860, 864, 869, 871, 873, 880, 882, 884, 888,
726, 728, 732, 734, 735, 740, 745, 751, 759, 766, 891, 893, 897, 899, 900, 905, 910, 916, 924, 931,
769, 772, 776, 779, 783, 792, 794, 796, 801, 808, 934, 937, 941, 944, 948, 957, 959, 961, 966, 973,
816, 818, 822, 830, 841, 845, 848, 851, 854, 857, 981, 983, 987, 995, 1006, 1010, 1013, 1016, 1019, 1022,
860, 863, 866, 868, 872, 878, 883, 885, 889, 892, 1025, 1028, 1031, 1033, 1037, 1043, 1048, 1050, 1054, 1057,
896, 898, 901, 903, 904, 906, 910, 914, 920, 925, 1061, 1063, 1066, 1068, 1069, 1071, 1075, 1079, 1085, 1090,
930, 934, 938, 944, 946, 947, 952, 955, 959, 964, 1095, 1099, 1103, 1109, 1111, 1112, 1117, 1120, 1124, 1129,
972, 974, 977, 979, 981, 985, 989, 992, 996, 998, 1137, 1139, 1142, 1144, 1146, 1150, 1154, 1157, 1161, 1163,
999, 1000, 1001, 1002, 1012, 1014, 1015, 1016, 1017, 1020, 1164, 1165, 1166, 1167, 1177, 1179, 1180, 1181, 1182, 1185,
1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196,
1034, 1039, 1050, 1057, 1061, 1072, 1082, 1088, 1094, 1100, 1199, 1204, 1215, 1222, 1226, 1237, 1247, 1253, 1259, 1265,
1102, 1108, 1110, 1116, 1118, 1120, 1122, 1124, 1128, 1130, 1267, 1273, 1275, 1281, 1283, 1285, 1287, 1289, 1293, 1295,
1131, 1132, 1133, 1134, 1135, 1138, 1141, 1143, 1145, 1149, 1296, 1297, 1298, 1299, 1300, 1303, 1306, 1308, 1310, 1314,
1154, 1159, 1165, 1174, 1180, 1182, 1184, 1188, 1190, 1191, 1319, 1324, 1330, 1339, 1345, 1347, 1349, 1353, 1355, 1356,
1192, 1195, 1197, 1200, 1204, 1206, 1209, 1216, 1222, 1224, 1357, 1360, 1362, 1365, 1369, 1371, 1374, 1381, 1387, 1389,
1226, 1230, 1238, 1241, 1243, 1245, 1249, 1254, 1263, 1268, 1391, 1395, 1403, 1406, 1408, 1410, 1414, 1419, 1428, 1433,
1271, 1278, 1280, 1282, 1286, 1289, 1298, 1305, 1307, 1311, 1436, 1443, 1445, 1447, 1451, 1454, 1463, 1470, 1472, 1476,
1324, 1326, 1332, 1338, 1342, 1344, 1348, 1351, 1353, 1357, 1489, 1491, 1497, 1503, 1507, 1509, 1513, 1516, 1518, 1522,
1360, 1362, 1364, 1368, 1371, 1373, 1375, 1379, 1382, 1384, 1525, 1527, 1529, 1533, 1536, 1538, 1540, 1544, 1547, 1549,
1386, 1390, 1396, 1398, 1402, 1409, 1411, 1413, 1415, 1419, 1551, 1555, 1561, 1563, 1567, 1574, 1576, 1578, 1580, 1584,
1427, 1430, 1432, 1434, 1438, 1440, 1447, 1455, 1472, 1474, 1592, 1595, 1597, 1599, 1603, 1605, 1612, 1620, 1637, 1639,
1476, 1480, 1486, 1491, 1493, 1496, 1498, 1500, 1502, 1503, 1641, 1645, 1651, 1656, 1658, 1661, 1663, 1665, 1667, 1668,
1504, 1505, 1509, 1511, 1513, 1518, 1520, 1522, 1524, 1526, 1669, 1670, 1674, 1676, 1678, 1683, 1685, 1687, 1689, 1691,
1530, 1533, 1538, 1540, 1545, 1546, 1547, 1548, 1549, 1551, 1695, 1698, 1703, 1705, 1710, 1711, 1712, 1713, 1714, 1716,
1553, 1555, 1557, 1559, 1563, 1565, 1568, 1574, 1579, 1583, 1718, 1720, 1722, 1724, 1728, 1730, 1733, 1739, 1744, 1748,
1586, 1588, 1590, 1594, 1596, 1598, 1600, 1604, 1607, 1611, 1751, 1753, 1755, 1759, 1761, 1763, 1765, 1769, 1772, 1776,
1617, 1619, 1627, 1630, 1632, 1636, 1641, 1649, 1653, 1656, 1782, 1784, 1792, 1795, 1797, 1801, 1806, 1814, 1818, 1821,
1658, 1669, 1680, 1685, 1694, 1696, 1700, 1703, 1705, 1710, 1823, 1834, 1845, 1850, 1859, 1861, 1865, 1868, 1870, 1875,
1715, 1720, 1727, 1729, 1730, 1731, 1734, 1739, 1744, 1746, 1880, 1885, 1892, 1894, 1895, 1896, 1899, 1904, 1909, 1911,
1747, 1749, 1751, 1752, 1754, 1758, 1761, 1765, 1768, 1772, 1912, 1914, 1916, 1917, 1919, 1923, 1926, 1930, 1933, 1937,
1774, 1776, 1778, 1779, 1781, 1785, 1793, 1795, 1797, 1809, 1939, 1941, 1943, 1944, 1946, 1950, 1958, 1960, 1962, 1974,
1811, 1817, 1819, 1821, 1825, 1827, 1832, 1837, 1842, 1844, 1976, 1982, 1984, 1986, 1990, 1992, 1997, 2002, 2007, 2009,
1846, 1850, 1852, 1857, 1862, 1864, 1868, 1870, 1875, 1880, 2011, 2015, 2017, 2022, 2027, 2029, 2033, 2035, 2040, 2045,
1885, 1887, 1889, 1893, 1895, 1900, 1905, 1910, 1915, 1917, 2050, 2052, 2054, 2058, 2060, 2065, 2070, 2075, 2080, 2082,
1919, 1921, 1923, 1925, 1929, 1931, 1936, 1941, 1943, 1947, 2084, 2086, 2088, 2090, 2094, 2096, 2101, 2106, 2108, 2112,
1949, 1954, 1958, 1960, 1965, 1969, 1971, 1976, 1980, 1982, 2114, 2119, 2123, 2125, 2130, 2134, 2136, 2141, 2145, 2147,
1987, 1991, 1993, 1998, 2002, 2004, 2009, 2015, 2017, 2021, 2152, 2156, 2158, 2163, 2167, 2169, 2174, 2180, 2182, 2186,
2023, 2026, 2029, 2037, 2039, 2040, 2043, 2045, 2048, 2052 2188, 2191, 2194, 2202, 2204, 2205, 2208, 2210, 2213, 2217
}; };
#endif #endif
...@@ -2552,66 +2717,66 @@ yyreduce: ...@@ -2552,66 +2717,66 @@ yyreduce:
switch (yyn) { switch (yyn) {
case 1: case 1:
#line 268 "./parse.y" #line 433 "./parse.y"
{; {;
break;} break;}
case 18: case 18:
#line 312 "./parse.y" #line 477 "./parse.y"
{ {
yyval.node = build_java_array_type (yyvsp[-2].node, -1); yyval.node = build_java_array_type (yyvsp[-2].node, -1);
CLASS_LOADED_P (yyval.node) = 1; CLASS_LOADED_P (yyval.node) = 1;
; ;
break;} break;}
case 19: case 19:
#line 317 "./parse.y" #line 482 "./parse.y"
{ yyval.node = build_unresolved_array_type (yyvsp[-2].node); ; { yyval.node = build_unresolved_array_type (yyvsp[-2].node); ;
break;} break;}
case 20: case 20:
#line 319 "./parse.y" #line 484 "./parse.y"
{ yyval.node = build_unresolved_array_type (yyvsp[-2].node); ; { yyval.node = build_unresolved_array_type (yyvsp[-2].node); ;
break;} break;}
case 21: case 21:
#line 321 "./parse.y" #line 486 "./parse.y"
{RULE ("']' expected"); RECOVER;; {RULE ("']' expected"); RECOVER;;
break;} break;}
case 22: case 22:
#line 323 "./parse.y" #line 488 "./parse.y"
{RULE ("']' expected"); RECOVER;; {RULE ("']' expected"); RECOVER;;
break;} break;}
case 26: case 26:
#line 338 "./parse.y" #line 503 "./parse.y"
{ yyval.node = make_qualified_name (yyvsp[-2].node, yyvsp[0].node, yyvsp[-1].operator.location); ; { yyval.node = make_qualified_name (yyvsp[-2].node, yyvsp[0].node, yyvsp[-1].operator.location); ;
break;} break;}
case 28: case 28:
#line 347 "./parse.y" #line 512 "./parse.y"
{yyval.node = NULL;; {yyval.node = NULL;;
break;} break;}
case 36: case 36:
#line 359 "./parse.y" #line 524 "./parse.y"
{ {
yyval.node = NULL; yyval.node = NULL;
; ;
break;} break;}
case 37: case 37:
#line 363 "./parse.y" #line 528 "./parse.y"
{ {
yyval.node = NULL; yyval.node = NULL;
; ;
break;} break;}
case 40: case 40:
#line 375 "./parse.y" #line 540 "./parse.y"
{ ctxp->package = EXPR_WFL_NODE (yyvsp[-1].node); ; { ctxp->package = EXPR_WFL_NODE (yyvsp[-1].node); ;
break;} break;}
case 41: case 41:
#line 377 "./parse.y" #line 542 "./parse.y"
{yyerror ("Missing name"); RECOVER;; {yyerror ("Missing name"); RECOVER;;
break;} break;}
case 42: case 42:
#line 379 "./parse.y" #line 544 "./parse.y"
{yyerror ("';' expected"); RECOVER;; {yyerror ("';' expected"); RECOVER;;
break;} break;}
case 45: case 45:
#line 389 "./parse.y" #line 554 "./parse.y"
{ {
tree name = EXPR_WFL_NODE (yyvsp[-1].node), node, last_name; tree name = EXPR_WFL_NODE (yyvsp[-1].node), node, last_name;
int i = IDENTIFIER_LENGTH (name)-1; int i = IDENTIFIER_LENGTH (name)-1;
...@@ -2639,15 +2804,15 @@ case 45: ...@@ -2639,15 +2804,15 @@ case 45:
; ;
break;} break;}
case 46: case 46:
#line 415 "./parse.y" #line 580 "./parse.y"
{yyerror ("Missing name"); RECOVER;; {yyerror ("Missing name"); RECOVER;;
break;} break;}
case 47: case 47:
#line 417 "./parse.y" #line 582 "./parse.y"
{yyerror ("';' expected"); RECOVER;; {yyerror ("';' expected"); RECOVER;;
break;} break;}
case 48: case 48:
#line 422 "./parse.y" #line 587 "./parse.y"
{ {
tree name = EXPR_WFL_NODE (yyvsp[-3].node); tree name = EXPR_WFL_NODE (yyvsp[-3].node);
tree node = build_tree_list (yyvsp[-3].node, NULL_TREE); tree node = build_tree_list (yyvsp[-3].node, NULL_TREE);
...@@ -2661,15 +2826,15 @@ case 48: ...@@ -2661,15 +2826,15 @@ case 48:
; ;
break;} break;}
case 49: case 49:
#line 434 "./parse.y" #line 599 "./parse.y"
{yyerror ("'*' expected"); RECOVER;; {yyerror ("'*' expected"); RECOVER;;
break;} break;}
case 50: case 50:
#line 436 "./parse.y" #line 601 "./parse.y"
{yyerror ("';' expected"); RECOVER;; {yyerror ("';' expected"); RECOVER;;
break;} break;}
case 51: case 51:
#line 441 "./parse.y" #line 606 "./parse.y"
{ {
maybe_generate_clinit (); maybe_generate_clinit ();
maybe_generate_finit (); maybe_generate_finit ();
...@@ -2677,24 +2842,24 @@ case 51: ...@@ -2677,24 +2842,24 @@ case 51:
; ;
break;} break;}
case 53: case 53:
#line 448 "./parse.y" #line 613 "./parse.y"
{ yyval.node = NULL; ; { yyval.node = NULL; ;
break;} break;}
case 54: case 54:
#line 450 "./parse.y" #line 615 "./parse.y"
{ {
YYERROR_NOW; YYERROR_NOW;
yyerror ("Class or interface declaration expected"); yyerror ("Class or interface declaration expected");
; ;
break;} break;}
case 55: case 55:
#line 461 "./parse.y" #line 626 "./parse.y"
{ {
yyval.value = (1 << yyvsp[0].value); yyval.value = (1 << yyvsp[0].value);
; ;
break;} break;}
case 56: case 56:
#line 465 "./parse.y" #line 630 "./parse.y"
{ {
int acc = (1 << yyvsp[0].value); int acc = (1 << yyvsp[0].value);
if (yyval.value & acc) if (yyval.value & acc)
...@@ -2708,116 +2873,116 @@ case 56: ...@@ -2708,116 +2873,116 @@ case 56:
; ;
break;} break;}
case 57: case 57:
#line 481 "./parse.y" #line 646 "./parse.y"
{ create_class (yyvsp[-4].value, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ; { create_class (yyvsp[-4].value, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ;
break;} break;}
case 58: case 58:
#line 483 "./parse.y" #line 648 "./parse.y"
{ {
yyval.node = yyvsp[0].node; yyval.node = yyvsp[0].node;
; ;
break;} break;}
case 59: case 59:
#line 487 "./parse.y" #line 652 "./parse.y"
{ create_class (0, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ; { create_class (0, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ;
break;} break;}
case 60: case 60:
#line 489 "./parse.y" #line 654 "./parse.y"
{ {
yyval.node = yyvsp[0].node; yyval.node = yyvsp[0].node;
; ;
break;} break;}
case 61: case 61:
#line 493 "./parse.y" #line 658 "./parse.y"
{yyerror ("Missing class name"); RECOVER;; {yyerror ("Missing class name"); RECOVER;;
break;} break;}
case 62: case 62:
#line 495 "./parse.y" #line 660 "./parse.y"
{yyerror ("Missing class name"); RECOVER;; {yyerror ("Missing class name"); RECOVER;;
break;} break;}
case 63: case 63:
#line 497 "./parse.y" #line 662 "./parse.y"
{if (!ctxp->class_err) yyerror ("'{' expected"); DRECOVER(class1);; {if (!ctxp->class_err) yyerror ("'{' expected"); DRECOVER(class1);;
break;} break;}
case 64: case 64:
#line 499 "./parse.y" #line 664 "./parse.y"
{if (!ctxp->class_err) yyerror ("'{' expected"); RECOVER;; {if (!ctxp->class_err) yyerror ("'{' expected"); RECOVER;;
break;} break;}
case 65: case 65:
#line 503 "./parse.y" #line 668 "./parse.y"
{ yyval.node = NULL; ; { yyval.node = NULL; ;
break;} break;}
case 66: case 66:
#line 505 "./parse.y" #line 670 "./parse.y"
{ yyval.node = yyvsp[0].node; ; { yyval.node = yyvsp[0].node; ;
break;} break;}
case 67: case 67:
#line 507 "./parse.y" #line 672 "./parse.y"
{yyerror ("'{' expected"); ctxp->class_err=1;; {yyerror ("'{' expected"); ctxp->class_err=1;;
break;} break;}
case 68: case 68:
#line 509 "./parse.y" #line 674 "./parse.y"
{yyerror ("Missing super class name"); ctxp->class_err=1;; {yyerror ("Missing super class name"); ctxp->class_err=1;;
break;} break;}
case 69: case 69:
#line 513 "./parse.y" #line 678 "./parse.y"
{ yyval.node = NULL_TREE; ; { yyval.node = NULL_TREE; ;
break;} break;}
case 70: case 70:
#line 515 "./parse.y" #line 680 "./parse.y"
{ yyval.node = yyvsp[0].node; ; { yyval.node = yyvsp[0].node; ;
break;} break;}
case 71: case 71:
#line 517 "./parse.y" #line 682 "./parse.y"
{ {
ctxp->class_err=1; ctxp->class_err=1;
yyerror ("Missing interface name"); yyerror ("Missing interface name");
; ;
break;} break;}
case 72: case 72:
#line 525 "./parse.y" #line 690 "./parse.y"
{ {
ctxp->interface_number = 1; ctxp->interface_number = 1;
yyval.node = build_tree_list (yyvsp[0].node, NULL_TREE); yyval.node = build_tree_list (yyvsp[0].node, NULL_TREE);
; ;
break;} break;}
case 73: case 73:
#line 530 "./parse.y" #line 695 "./parse.y"
{ {
ctxp->interface_number++; ctxp->interface_number++;
yyval.node = chainon (yyvsp[-2].node, build_tree_list (yyvsp[0].node, NULL_TREE)); yyval.node = chainon (yyvsp[-2].node, build_tree_list (yyvsp[0].node, NULL_TREE));
; ;
break;} break;}
case 74: case 74:
#line 535 "./parse.y" #line 700 "./parse.y"
{yyerror ("Missing interface name"); RECOVER;; {yyerror ("Missing interface name"); RECOVER;;
break;} break;}
case 75: case 75:
#line 540 "./parse.y" #line 705 "./parse.y"
{ yyval.node = ctxp->current_parsed_class; ; { yyval.node = ctxp->current_parsed_class; ;
break;} break;}
case 76: case 76:
#line 542 "./parse.y" #line 707 "./parse.y"
{ yyval.node = ctxp->current_parsed_class; ; { yyval.node = ctxp->current_parsed_class; ;
break;} break;}
case 82: case 82:
#line 555 "./parse.y" #line 720 "./parse.y"
{ yyval.node = parse_jdk1_1_error ("instance initializer"); ; { yyval.node = parse_jdk1_1_error ("instance initializer"); ;
break;} break;}
case 85: case 85:
#line 562 "./parse.y" #line 727 "./parse.y"
{ yyval.node = parse_jdk1_1_error ("inner classe declaration"); ; { yyval.node = parse_jdk1_1_error ("inner classe declaration"); ;
break;} break;}
case 86: case 86:
#line 564 "./parse.y" #line 729 "./parse.y"
{ yyval.node = parse_jdk1_1_error ("inner interface declaration"); ; { yyval.node = parse_jdk1_1_error ("inner interface declaration"); ;
break;} break;}
case 87: case 87:
#line 570 "./parse.y" #line 735 "./parse.y"
{ register_fields (0, yyvsp[-2].node, yyvsp[-1].node); ; { register_fields (0, yyvsp[-2].node, yyvsp[-1].node); ;
break;} break;}
case 88: case 88:
#line 572 "./parse.y" #line 737 "./parse.y"
{ {
check_modifiers check_modifiers
("Illegal modifier `%s' for field declaration", ("Illegal modifier `%s' for field declaration",
...@@ -2827,19 +2992,19 @@ case 88: ...@@ -2827,19 +2992,19 @@ case 88:
; ;
break;} break;}
case 90: case 90:
#line 585 "./parse.y" #line 750 "./parse.y"
{ yyval.node = chainon (yyvsp[-2].node, yyvsp[0].node); ; { yyval.node = chainon (yyvsp[-2].node, yyvsp[0].node); ;
break;} break;}
case 91: case 91:
#line 587 "./parse.y" #line 752 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 92: case 92:
#line 592 "./parse.y" #line 757 "./parse.y"
{ yyval.node = build_tree_list (yyvsp[0].node, NULL_TREE); ; { yyval.node = build_tree_list (yyvsp[0].node, NULL_TREE); ;
break;} break;}
case 93: case 93:
#line 594 "./parse.y" #line 759 "./parse.y"
{ {
if (java_error_count) if (java_error_count)
yyvsp[0].node = NULL_TREE; yyvsp[0].node = NULL_TREE;
...@@ -2848,7 +3013,7 @@ case 93: ...@@ -2848,7 +3013,7 @@ case 93:
; ;
break;} break;}
case 94: case 94:
#line 601 "./parse.y" #line 766 "./parse.y"
{ {
yyerror ("Missing variable initializer"); yyerror ("Missing variable initializer");
yyval.node = build_tree_list (yyvsp[-2].node, NULL_TREE); yyval.node = build_tree_list (yyvsp[-2].node, NULL_TREE);
...@@ -2856,7 +3021,7 @@ case 94: ...@@ -2856,7 +3021,7 @@ case 94:
; ;
break;} break;}
case 95: case 95:
#line 607 "./parse.y" #line 772 "./parse.y"
{ {
yyerror ("';' expected"); yyerror ("';' expected");
yyval.node = build_tree_list (yyvsp[-3].node, NULL_TREE); yyval.node = build_tree_list (yyvsp[-3].node, NULL_TREE);
...@@ -2864,234 +3029,234 @@ case 95: ...@@ -2864,234 +3029,234 @@ case 95:
; ;
break;} break;}
case 97: case 97:
#line 617 "./parse.y" #line 782 "./parse.y"
{ yyval.node = build_unresolved_array_type (yyvsp[-2].node); ; { yyval.node = build_unresolved_array_type (yyvsp[-2].node); ;
break;} break;}
case 98: case 98:
#line 619 "./parse.y" #line 784 "./parse.y"
{yyerror ("Invalid declaration"); DRECOVER(vdi);; {yyerror ("Invalid declaration"); DRECOVER(vdi);;
break;} break;}
case 99: case 99:
#line 621 "./parse.y" #line 786 "./parse.y"
{yyerror ("']' expected"); DRECOVER(vdi);; {yyerror ("']' expected"); DRECOVER(vdi);;
break;} break;}
case 100: case 100:
#line 623 "./parse.y" #line 788 "./parse.y"
{yyerror ("Unbalanced ']'"); DRECOVER(vdi);; {yyerror ("Unbalanced ']'"); DRECOVER(vdi);;
break;} break;}
case 102: case 102:
#line 629 "./parse.y" #line 794 "./parse.y"
{ yyval.node = NULL; ; { yyval.node = NULL; ;
break;} break;}
case 103: case 103:
#line 635 "./parse.y" #line 800 "./parse.y"
{ {
current_function_decl = yyvsp[0].node; current_function_decl = yyvsp[0].node;
source_start_java_method (current_function_decl); source_start_java_method (current_function_decl);
; ;
break;} break;}
case 104: case 104:
#line 640 "./parse.y" #line 805 "./parse.y"
{ complete_method_declaration (yyvsp[0].node); ; { complete_method_declaration (yyvsp[0].node); ;
break;} break;}
case 105: case 105:
#line 642 "./parse.y" #line 807 "./parse.y"
{YYNOT_TWICE yyerror ("'{' expected"); RECOVER;; {YYNOT_TWICE yyerror ("'{' expected"); RECOVER;;
break;} break;}
case 106: case 106:
#line 647 "./parse.y" #line 812 "./parse.y"
{ yyval.node = method_header (0, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ; { yyval.node = method_header (0, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ;
break;} break;}
case 107: case 107:
#line 649 "./parse.y" #line 814 "./parse.y"
{ yyval.node = method_header (0, void_type_node, yyvsp[-1].node, yyvsp[0].node); ; { yyval.node = method_header (0, void_type_node, yyvsp[-1].node, yyvsp[0].node); ;
break;} break;}
case 108: case 108:
#line 651 "./parse.y" #line 816 "./parse.y"
{ yyval.node = method_header (yyvsp[-3].value, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ; { yyval.node = method_header (yyvsp[-3].value, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ;
break;} break;}
case 109: case 109:
#line 653 "./parse.y" #line 818 "./parse.y"
{ yyval.node = method_header (yyvsp[-3].value, void_type_node, yyvsp[-1].node, yyvsp[0].node); ; { yyval.node = method_header (yyvsp[-3].value, void_type_node, yyvsp[-1].node, yyvsp[0].node); ;
break;} break;}
case 110: case 110:
#line 655 "./parse.y" #line 820 "./parse.y"
{RECOVER;; {RECOVER;;
break;} break;}
case 111: case 111:
#line 657 "./parse.y" #line 822 "./parse.y"
{RECOVER;; {RECOVER;;
break;} break;}
case 112: case 112:
#line 659 "./parse.y" #line 824 "./parse.y"
{yyerror ("Identifier expected"); RECOVER;; {yyerror ("Identifier expected"); RECOVER;;
break;} break;}
case 113: case 113:
#line 661 "./parse.y" #line 826 "./parse.y"
{yyerror ("Identifier expected"); RECOVER;; {yyerror ("Identifier expected"); RECOVER;;
break;} break;}
case 114: case 114:
#line 663 "./parse.y" #line 828 "./parse.y"
{ {
yyerror ("Invalid method declaration, return type required"); yyerror ("Invalid method declaration, return type required");
RECOVER; RECOVER;
; ;
break;} break;}
case 115: case 115:
#line 671 "./parse.y" #line 836 "./parse.y"
{ yyval.node = method_declarator (yyvsp[-2].node, NULL_TREE); ; { yyval.node = method_declarator (yyvsp[-2].node, NULL_TREE); ;
break;} break;}
case 116: case 116:
#line 673 "./parse.y" #line 838 "./parse.y"
{ yyval.node = method_declarator (yyvsp[-3].node, yyvsp[-1].node); ; { yyval.node = method_declarator (yyvsp[-3].node, yyvsp[-1].node); ;
break;} break;}
case 117: case 117:
#line 675 "./parse.y" #line 840 "./parse.y"
{ {
/* Issue a warning here: obsolete declaration. FIXME */ /* Issue a warning here: obsolete declaration. FIXME */
yyval.node = NULL; /* FIXME */ yyval.node = NULL; /* FIXME */
; ;
break;} break;}
case 118: case 118:
#line 680 "./parse.y" #line 845 "./parse.y"
{yyerror ("')' expected"); DRECOVER(method_declarator);; {yyerror ("')' expected"); DRECOVER(method_declarator);;
break;} break;}
case 119: case 119:
#line 682 "./parse.y" #line 847 "./parse.y"
{yyerror ("']' expected"); RECOVER;; {yyerror ("']' expected"); RECOVER;;
break;} break;}
case 120: case 120:
#line 687 "./parse.y" #line 852 "./parse.y"
{ {
ctxp->formal_parameter_number = 1; ctxp->formal_parameter_number = 1;
; ;
break;} break;}
case 121: case 121:
#line 691 "./parse.y" #line 856 "./parse.y"
{ {
ctxp->formal_parameter_number += 1; ctxp->formal_parameter_number += 1;
yyval.node = chainon (yyvsp[-2].node, yyvsp[0].node); yyval.node = chainon (yyvsp[-2].node, yyvsp[0].node);
; ;
break;} break;}
case 122: case 122:
#line 696 "./parse.y" #line 861 "./parse.y"
{yyerror ("Missing formal parameter term"); RECOVER;; {yyerror ("Missing formal parameter term"); RECOVER;;
break;} break;}
case 123: case 123:
#line 701 "./parse.y" #line 866 "./parse.y"
{ {
yyval.node = build_tree_list (yyvsp[0].node, yyvsp[-1].node); yyval.node = build_tree_list (yyvsp[0].node, yyvsp[-1].node);
; ;
break;} break;}
case 124: case 124:
#line 705 "./parse.y" #line 870 "./parse.y"
{ yyval.node = parse_jdk1_1_error ("final parameters"); ; { yyval.node = parse_jdk1_1_error ("final parameters"); ;
break;} break;}
case 125: case 125:
#line 707 "./parse.y" #line 872 "./parse.y"
{yyerror ("Missing identifier"); RECOVER;; {yyerror ("Missing identifier"); RECOVER;;
break;} break;}
case 126: case 126:
#line 709 "./parse.y" #line 874 "./parse.y"
{ {
SOURCE_FRONTEND_DEBUG (("Modifiers: %d", yyvsp[-2].value)); SOURCE_FRONTEND_DEBUG (("Modifiers: %d", yyvsp[-2].value));
yyerror ("Missing identifier"); RECOVER; yyerror ("Missing identifier"); RECOVER;
; ;
break;} break;}
case 127: case 127:
#line 716 "./parse.y" #line 881 "./parse.y"
{ yyval.node = NULL_TREE; ; { yyval.node = NULL_TREE; ;
break;} break;}
case 128: case 128:
#line 718 "./parse.y" #line 883 "./parse.y"
{ yyval.node = yyvsp[0].node; ; { yyval.node = yyvsp[0].node; ;
break;} break;}
case 129: case 129:
#line 720 "./parse.y" #line 885 "./parse.y"
{yyerror ("Missing class type term"); RECOVER;; {yyerror ("Missing class type term"); RECOVER;;
break;} break;}
case 130: case 130:
#line 725 "./parse.y" #line 890 "./parse.y"
{ yyval.node = build_tree_list (yyvsp[0].node, yyvsp[0].node); ; { yyval.node = build_tree_list (yyvsp[0].node, yyvsp[0].node); ;
break;} break;}
case 131: case 131:
#line 727 "./parse.y" #line 892 "./parse.y"
{ yyval.node = tree_cons (yyvsp[0].node, yyvsp[0].node, yyvsp[-2].node); ; { yyval.node = tree_cons (yyvsp[0].node, yyvsp[0].node, yyvsp[-2].node); ;
break;} break;}
case 132: case 132:
#line 729 "./parse.y" #line 894 "./parse.y"
{yyerror ("Missing class type term"); RECOVER;; {yyerror ("Missing class type term"); RECOVER;;
break;} break;}
case 135: case 135:
#line 736 "./parse.y" #line 901 "./parse.y"
{ yyval.node = NULL_TREE; ; { yyval.node = NULL_TREE; ;
break;} break;}
case 136: case 136:
#line 742 "./parse.y" #line 907 "./parse.y"
{ {
RULE ("STATIC_INITIALIZER"); RULE ("STATIC_INITIALIZER");
; ;
break;} break;}
case 137: case 137:
#line 746 "./parse.y" #line 911 "./parse.y"
{ {
RULE ("STATIC_INITIALIZER"); RULE ("STATIC_INITIALIZER");
; ;
break;} break;}
case 138: case 138:
#line 753 "./parse.y" #line 918 "./parse.y"
{ {
SOURCE_FRONTEND_DEBUG (("Modifiers: %d", yyvsp[0].value)); SOURCE_FRONTEND_DEBUG (("Modifiers: %d", yyvsp[0].value));
; ;
break;} break;}
case 139: case 139:
#line 761 "./parse.y" #line 926 "./parse.y"
{ {
current_function_decl = yyvsp[0].node; current_function_decl = yyvsp[0].node;
source_start_java_method (current_function_decl); source_start_java_method (current_function_decl);
; ;
break;} break;}
case 140: case 140:
#line 766 "./parse.y" #line 931 "./parse.y"
{ complete_method_declaration (yyvsp[0].node); ; { complete_method_declaration (yyvsp[0].node); ;
break;} break;}
case 141: case 141:
#line 771 "./parse.y" #line 936 "./parse.y"
{ yyval.node = method_header (0, NULL_TREE, yyvsp[-1].node, yyvsp[0].node); ; { yyval.node = method_header (0, NULL_TREE, yyvsp[-1].node, yyvsp[0].node); ;
break;} break;}
case 142: case 142:
#line 773 "./parse.y" #line 938 "./parse.y"
{ yyval.node = method_header (yyvsp[-2].value, NULL_TREE, yyvsp[-1].node, yyvsp[0].node); ; { yyval.node = method_header (yyvsp[-2].value, NULL_TREE, yyvsp[-1].node, yyvsp[0].node); ;
break;} break;}
case 143: case 143:
#line 778 "./parse.y" #line 943 "./parse.y"
{ yyval.node = method_declarator (yyvsp[-2].node, NULL_TREE); ; { yyval.node = method_declarator (yyvsp[-2].node, NULL_TREE); ;
break;} break;}
case 144: case 144:
#line 780 "./parse.y" #line 945 "./parse.y"
{ yyval.node = method_declarator (yyvsp[-3].node, yyvsp[-1].node); ; { yyval.node = method_declarator (yyvsp[-3].node, yyvsp[-1].node); ;
break;} break;}
case 145: case 145:
#line 788 "./parse.y" #line 953 "./parse.y"
{ {
BLOCK_EXPR_BODY (yyvsp[0].node) = empty_stmt_node; BLOCK_EXPR_BODY (yyvsp[0].node) = empty_stmt_node;
yyval.node = yyvsp[0].node; yyval.node = yyvsp[0].node;
; ;
break;} break;}
case 146: case 146:
#line 793 "./parse.y" #line 958 "./parse.y"
{ yyval.node = yyvsp[0].node; ; { yyval.node = yyvsp[0].node; ;
break;} break;}
case 147: case 147:
#line 795 "./parse.y" #line 960 "./parse.y"
{ yyval.node = yyvsp[0].node; ; { yyval.node = yyvsp[0].node; ;
break;} break;}
case 148: case 148:
#line 797 "./parse.y" #line 962 "./parse.y"
{ yyval.node = yyvsp[0].node; ; { yyval.node = yyvsp[0].node; ;
break;} break;}
case 149: case 149:
#line 803 "./parse.y" #line 968 "./parse.y"
{ {
yyval.node = build_method_invocation (yyvsp[-3].node, NULL_TREE); yyval.node = build_method_invocation (yyvsp[-3].node, NULL_TREE);
yyval.node = build_debugable_stmt (EXPR_WFL_LINECOL (yyvsp[-3].node), yyval.node); yyval.node = build_debugable_stmt (EXPR_WFL_LINECOL (yyvsp[-3].node), yyval.node);
...@@ -3099,7 +3264,7 @@ case 149: ...@@ -3099,7 +3264,7 @@ case 149:
; ;
break;} break;}
case 150: case 150:
#line 809 "./parse.y" #line 974 "./parse.y"
{ {
yyval.node = build_method_invocation (yyvsp[-4].node, yyvsp[-2].node); yyval.node = build_method_invocation (yyvsp[-4].node, yyvsp[-2].node);
yyval.node = build_debugable_stmt (EXPR_WFL_LINECOL (yyvsp[-4].node), yyval.node); yyval.node = build_debugable_stmt (EXPR_WFL_LINECOL (yyvsp[-4].node), yyval.node);
...@@ -3107,15 +3272,15 @@ case 150: ...@@ -3107,15 +3272,15 @@ case 150:
; ;
break;} break;}
case 151: case 151:
#line 817 "./parse.y" #line 982 "./parse.y"
{yyval.node = parse_jdk1_1_error ("explicit constructor invocation"); ; {yyval.node = parse_jdk1_1_error ("explicit constructor invocation"); ;
break;} break;}
case 152: case 152:
#line 819 "./parse.y" #line 984 "./parse.y"
{yyval.node = parse_jdk1_1_error ("explicit constructor invocation"); ; {yyval.node = parse_jdk1_1_error ("explicit constructor invocation"); ;
break;} break;}
case 153: case 153:
#line 824 "./parse.y" #line 989 "./parse.y"
{ {
tree wfl = build_wfl_node (this_identifier_node, tree wfl = build_wfl_node (this_identifier_node,
input_filename, 0, 0); input_filename, 0, 0);
...@@ -3124,7 +3289,7 @@ case 153: ...@@ -3124,7 +3289,7 @@ case 153:
; ;
break;} break;}
case 154: case 154:
#line 831 "./parse.y" #line 996 "./parse.y"
{ {
tree wfl = build_wfl_node (super_identifier_node, tree wfl = build_wfl_node (super_identifier_node,
input_filename, 0, 0); input_filename, 0, 0);
...@@ -3133,167 +3298,167 @@ case 154: ...@@ -3133,167 +3298,167 @@ case 154:
; ;
break;} break;}
case 155: case 155:
#line 843 "./parse.y" #line 1008 "./parse.y"
{ create_interface (0, yyvsp[0].node, NULL_TREE); ; { create_interface (0, yyvsp[0].node, NULL_TREE); ;
break;} break;}
case 156: case 156:
#line 845 "./parse.y" #line 1010 "./parse.y"
{ {
yyval.node = yyvsp[0].node; yyval.node = yyvsp[0].node;
; ;
break;} break;}
case 157: case 157:
#line 849 "./parse.y" #line 1014 "./parse.y"
{ create_interface (yyvsp[-2].value, yyvsp[0].node, NULL_TREE); ; { create_interface (yyvsp[-2].value, yyvsp[0].node, NULL_TREE); ;
break;} break;}
case 158: case 158:
#line 851 "./parse.y" #line 1016 "./parse.y"
{ {
yyval.node = yyvsp[0].node; yyval.node = yyvsp[0].node;
; ;
break;} break;}
case 159: case 159:
#line 855 "./parse.y" #line 1020 "./parse.y"
{ create_interface (0, yyvsp[-1].node, yyvsp[0].node); ; { create_interface (0, yyvsp[-1].node, yyvsp[0].node); ;
break;} break;}
case 160: case 160:
#line 857 "./parse.y" #line 1022 "./parse.y"
{ {
yyval.node = yyvsp[0].node; yyval.node = yyvsp[0].node;
; ;
break;} break;}
case 161: case 161:
#line 861 "./parse.y" #line 1026 "./parse.y"
{ create_interface (yyvsp[-3].value, yyvsp[-1].node, yyvsp[0].node); ; { create_interface (yyvsp[-3].value, yyvsp[-1].node, yyvsp[0].node); ;
break;} break;}
case 162: case 162:
#line 863 "./parse.y" #line 1028 "./parse.y"
{ {
yyval.node = yyvsp[0].node; yyval.node = yyvsp[0].node;
; ;
break;} break;}
case 163: case 163:
#line 867 "./parse.y" #line 1032 "./parse.y"
{yyerror ("(here)'{' expected"); RECOVER;; {yyerror ("(here)'{' expected"); RECOVER;;
break;} break;}
case 164: case 164:
#line 869 "./parse.y" #line 1034 "./parse.y"
{yyerror ("(there)'{' expected"); RECOVER;; {yyerror ("(there)'{' expected"); RECOVER;;
break;} break;}
case 165: case 165:
#line 874 "./parse.y" #line 1039 "./parse.y"
{ {
ctxp->interface_number = 1; ctxp->interface_number = 1;
yyval.node = build_tree_list (yyvsp[0].node, NULL_TREE); yyval.node = build_tree_list (yyvsp[0].node, NULL_TREE);
; ;
break;} break;}
case 166: case 166:
#line 879 "./parse.y" #line 1044 "./parse.y"
{ {
ctxp->interface_number++; ctxp->interface_number++;
yyval.node = chainon (yyvsp[-2].node, build_tree_list (yyvsp[0].node, NULL_TREE)); yyval.node = chainon (yyvsp[-2].node, build_tree_list (yyvsp[0].node, NULL_TREE));
; ;
break;} break;}
case 167: case 167:
#line 884 "./parse.y" #line 1049 "./parse.y"
{yyerror ("Invalid interface type"); RECOVER;; {yyerror ("Invalid interface type"); RECOVER;;
break;} break;}
case 168: case 168:
#line 886 "./parse.y" #line 1051 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 169: case 169:
#line 891 "./parse.y" #line 1056 "./parse.y"
{ yyval.node = NULL_TREE; ; { yyval.node = NULL_TREE; ;
break;} break;}
case 170: case 170:
#line 893 "./parse.y" #line 1058 "./parse.y"
{ yyval.node = NULL_TREE; ; { yyval.node = NULL_TREE; ;
break;} break;}
case 175: case 175:
#line 905 "./parse.y" #line 1070 "./parse.y"
{ yyval.node = parse_jdk1_1_error ("inner class declaration"); ; { yyval.node = parse_jdk1_1_error ("inner class declaration"); ;
break;} break;}
case 176: case 176:
#line 907 "./parse.y" #line 1072 "./parse.y"
{ yyval.node = parse_jdk1_1_error ("inner interface declaration"); ; { yyval.node = parse_jdk1_1_error ("inner interface declaration"); ;
break;} break;}
case 178: case 178:
#line 916 "./parse.y" #line 1081 "./parse.y"
{ {
check_abstract_method_header (yyvsp[-1].node); check_abstract_method_header (yyvsp[-1].node);
current_function_decl = NULL_TREE; /* FIXME ? */ current_function_decl = NULL_TREE; /* FIXME ? */
; ;
break;} break;}
case 179: case 179:
#line 921 "./parse.y" #line 1086 "./parse.y"
{yyerror ("';' expected"); RECOVER;; {yyerror ("';' expected"); RECOVER;;
break;} break;}
case 180: case 180:
#line 927 "./parse.y" #line 1092 "./parse.y"
{ {
RULE ("ARRAY_INITIALIZER (empty)"); RULE ("ARRAY_INITIALIZER (empty)");
; ;
break;} break;}
case 181: case 181:
#line 931 "./parse.y" #line 1096 "./parse.y"
{ {
RULE ("ARRAY_INITIALIZER (variable)"); RULE ("ARRAY_INITIALIZER (variable)");
; ;
break;} break;}
case 182: case 182:
#line 935 "./parse.y" #line 1100 "./parse.y"
{ {
RULE ("ARRAY_INITIALIZER (,)"); RULE ("ARRAY_INITIALIZER (,)");
; ;
break;} break;}
case 183: case 183:
#line 939 "./parse.y" #line 1104 "./parse.y"
{ {
RULE ("ARRAY_INITIALIZER (variable, ,)"); RULE ("ARRAY_INITIALIZER (variable, ,)");
; ;
break;} break;}
case 186: case 186:
#line 948 "./parse.y" #line 1113 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 187: case 187:
#line 954 "./parse.y" #line 1119 "./parse.y"
{ yyval.node = empty_stmt_node; ; { yyval.node = empty_stmt_node; ;
break;} break;}
case 188: case 188:
#line 956 "./parse.y" #line 1121 "./parse.y"
{ yyval.node = yyvsp[0].node; ; { yyval.node = yyvsp[0].node; ;
break;} break;}
case 189: case 189:
#line 961 "./parse.y" #line 1126 "./parse.y"
{ enter_block (); ; { enter_block (); ;
break;} break;}
case 190: case 190:
#line 966 "./parse.y" #line 1131 "./parse.y"
{ {
maybe_absorb_scoping_blocks (); maybe_absorb_scoping_blocks ();
yyval.node = exit_block (); yyval.node = exit_block ();
; ;
break;} break;}
case 194: case 194:
#line 980 "./parse.y" #line 1145 "./parse.y"
{ java_method_add_stmt (current_function_decl, yyvsp[0].node); ; { java_method_add_stmt (current_function_decl, yyvsp[0].node); ;
break;} break;}
case 195: case 195:
#line 982 "./parse.y" #line 1147 "./parse.y"
{ parse_jdk1_1_error ("inner class declaration"); ; { parse_jdk1_1_error ("inner class declaration"); ;
break;} break;}
case 197: case 197:
#line 991 "./parse.y" #line 1156 "./parse.y"
{ declare_local_variables (0, yyvsp[-1].node, yyvsp[0].node); ; { declare_local_variables (0, yyvsp[-1].node, yyvsp[0].node); ;
break;} break;}
case 198: case 198:
#line 993 "./parse.y" #line 1158 "./parse.y"
{ declare_local_variables (yyvsp[-2].value, yyvsp[-1].node, yyvsp[0].node); ; { declare_local_variables (yyvsp[-2].value, yyvsp[-1].node, yyvsp[0].node); ;
break;} break;}
case 204: case 204:
#line 1003 "./parse.y" #line 1168 "./parse.y"
{ {
/* If the for loop is unlabeled, we must return the /* If the for loop is unlabeled, we must return the
block it was defined it. It our last chance to block it was defined it. It our last chance to
...@@ -3303,11 +3468,11 @@ case 204: ...@@ -3303,11 +3468,11 @@ case 204:
; ;
break;} break;}
case 221: case 221:
#line 1036 "./parse.y" #line 1201 "./parse.y"
{ yyval.node = empty_stmt_node; ; { yyval.node = empty_stmt_node; ;
break;} break;}
case 222: case 222:
#line 1041 "./parse.y" #line 1206 "./parse.y"
{ {
yyval.node = build_labeled_block (EXPR_WFL_LINECOL (yyvsp[-1].node), yyval.node = build_labeled_block (EXPR_WFL_LINECOL (yyvsp[-1].node),
EXPR_WFL_NODE (yyvsp[-1].node)); EXPR_WFL_NODE (yyvsp[-1].node));
...@@ -3317,7 +3482,7 @@ case 222: ...@@ -3317,7 +3482,7 @@ case 222:
; ;
break;} break;}
case 223: case 223:
#line 1052 "./parse.y" #line 1217 "./parse.y"
{ {
yyval.node = complete_labeled_statement (yyvsp[-1].node, yyvsp[0].node); yyval.node = complete_labeled_statement (yyvsp[-1].node, yyvsp[0].node);
pop_labeled_block (); pop_labeled_block ();
...@@ -3325,11 +3490,11 @@ case 223: ...@@ -3325,11 +3490,11 @@ case 223:
; ;
break;} break;}
case 224: case 224:
#line 1058 "./parse.y" #line 1223 "./parse.y"
{yyerror ("':' expected"); RECOVER;; {yyerror ("':' expected"); RECOVER;;
break;} break;}
case 225: case 225:
#line 1063 "./parse.y" #line 1228 "./parse.y"
{ {
yyval.node = complete_labeled_statement (yyvsp[-1].node, yyvsp[0].node); yyval.node = complete_labeled_statement (yyvsp[-1].node, yyvsp[0].node);
pop_labeled_block (); pop_labeled_block ();
...@@ -3337,7 +3502,7 @@ case 225: ...@@ -3337,7 +3502,7 @@ case 225:
; ;
break;} break;}
case 226: case 226:
#line 1074 "./parse.y" #line 1239 "./parse.y"
{ {
/* We have a statement. Generate a WFL around it so /* We have a statement. Generate a WFL around it so
we can debug it */ we can debug it */
...@@ -3348,7 +3513,7 @@ case 226: ...@@ -3348,7 +3513,7 @@ case 226:
; ;
break;} break;}
case 227: case 227:
#line 1083 "./parse.y" #line 1248 "./parse.y"
{ {
if (ctxp->prevent_ese != lineno) if (ctxp->prevent_ese != lineno)
yyerror ("Invalid expression statement"); yyerror ("Invalid expression statement");
...@@ -3356,7 +3521,7 @@ case 227: ...@@ -3356,7 +3521,7 @@ case 227:
; ;
break;} break;}
case 228: case 228:
#line 1089 "./parse.y" #line 1254 "./parse.y"
{ {
if (ctxp->prevent_ese != lineno) if (ctxp->prevent_ese != lineno)
yyerror ("Invalid expression statement"); yyerror ("Invalid expression statement");
...@@ -3364,7 +3529,7 @@ case 228: ...@@ -3364,7 +3529,7 @@ case 228:
; ;
break;} break;}
case 229: case 229:
#line 1095 "./parse.y" #line 1260 "./parse.y"
{ {
if (ctxp->prevent_ese != lineno) if (ctxp->prevent_ese != lineno)
yyerror ("Invalid expression statement"); yyerror ("Invalid expression statement");
...@@ -3372,11 +3537,11 @@ case 229: ...@@ -3372,11 +3537,11 @@ case 229:
; ;
break;} break;}
case 230: case 230:
#line 1101 "./parse.y" #line 1266 "./parse.y"
{yyerror ("')' expected"); RECOVER;; {yyerror ("')' expected"); RECOVER;;
break;} break;}
case 231: case 231:
#line 1103 "./parse.y" #line 1268 "./parse.y"
{ {
yyerror ("Constructor invocation must be first " yyerror ("Constructor invocation must be first "
"thing in a constructor"); "thing in a constructor");
...@@ -3384,11 +3549,11 @@ case 231: ...@@ -3384,11 +3549,11 @@ case 231:
; ;
break;} break;}
case 232: case 232:
#line 1109 "./parse.y" #line 1274 "./parse.y"
{yyerror ("')' expected"); RECOVER;; {yyerror ("')' expected"); RECOVER;;
break;} break;}
case 233: case 233:
#line 1111 "./parse.y" #line 1276 "./parse.y"
{ {
yyerror ("Constructor invocation must be first " yyerror ("Constructor invocation must be first "
"thing in a constructor"); "thing in a constructor");
...@@ -3396,57 +3561,57 @@ case 233: ...@@ -3396,57 +3561,57 @@ case 233:
; ;
break;} break;}
case 234: case 234:
#line 1117 "./parse.y" #line 1282 "./parse.y"
{yyerror ("'(' expected"); RECOVER;; {yyerror ("'(' expected"); RECOVER;;
break;} break;}
case 235: case 235:
#line 1119 "./parse.y" #line 1284 "./parse.y"
{yyerror ("')' expected"); RECOVER;; {yyerror ("')' expected"); RECOVER;;
break;} break;}
case 236: case 236:
#line 1121 "./parse.y" #line 1286 "./parse.y"
{yyerror ("')' expected"); RECOVER;; {yyerror ("')' expected"); RECOVER;;
break;} break;}
case 237: case 237:
#line 1123 "./parse.y" #line 1288 "./parse.y"
{yyerror ("';' expected"); RECOVER;; {yyerror ("';' expected"); RECOVER;;
break;} break;}
case 238: case 238:
#line 1125 "./parse.y" #line 1290 "./parse.y"
{yyerror ("';' expected"); RECOVER;; {yyerror ("';' expected"); RECOVER;;
break;} break;}
case 246: case 246:
#line 1140 "./parse.y" #line 1305 "./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;} break;}
case 247: case 247:
#line 1142 "./parse.y" #line 1307 "./parse.y"
{yyerror ("'(' expected"); RECOVER;; {yyerror ("'(' expected"); RECOVER;;
break;} break;}
case 248: case 248:
#line 1144 "./parse.y" #line 1309 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 249: case 249:
#line 1146 "./parse.y" #line 1311 "./parse.y"
{yyerror ("')' expected"); RECOVER;; {yyerror ("')' expected"); RECOVER;;
break;} break;}
case 250: case 250:
#line 1151 "./parse.y" #line 1316 "./parse.y"
{ yyval.node = build_if_else_statement (yyvsp[-5].operator.location, yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node); ; { yyval.node = build_if_else_statement (yyvsp[-5].operator.location, yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node); ;
break;} break;}
case 251: case 251:
#line 1156 "./parse.y" #line 1321 "./parse.y"
{ yyval.node = build_if_else_statement (yyvsp[-5].operator.location, yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node); ; { yyval.node = build_if_else_statement (yyvsp[-5].operator.location, yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node); ;
break;} break;}
case 252: case 252:
#line 1161 "./parse.y" #line 1326 "./parse.y"
{ {
enter_block (); enter_block ();
; ;
break;} break;}
case 253: case 253:
#line 1165 "./parse.y" #line 1330 "./parse.y"
{ {
/* Make into "proper list" of COMPOUND_EXPRs. /* Make into "proper list" of COMPOUND_EXPRs.
I.e. make the last statment also have its own COMPOUND_EXPR. */ I.e. make the last statment also have its own COMPOUND_EXPR. */
...@@ -3456,26 +3621,26 @@ case 253: ...@@ -3456,26 +3621,26 @@ case 253:
; ;
break;} break;}
case 254: case 254:
#line 1176 "./parse.y" #line 1341 "./parse.y"
{ {
yyval.node = build (SWITCH_EXPR, NULL_TREE, yyvsp[-1].node, NULL_TREE); yyval.node = build (SWITCH_EXPR, NULL_TREE, yyvsp[-1].node, NULL_TREE);
EXPR_WFL_LINECOL (yyval.node) = yyvsp[-2].operator.location; EXPR_WFL_LINECOL (yyval.node) = yyvsp[-2].operator.location;
; ;
break;} break;}
case 255: case 255:
#line 1181 "./parse.y" #line 1346 "./parse.y"
{yyerror ("'(' expected"); RECOVER;; {yyerror ("'(' expected"); RECOVER;;
break;} break;}
case 256: case 256:
#line 1183 "./parse.y" #line 1348 "./parse.y"
{yyerror ("Missing term or ')'"); DRECOVER(switch_statement);; {yyerror ("Missing term or ')'"); DRECOVER(switch_statement);;
break;} break;}
case 257: case 257:
#line 1185 "./parse.y" #line 1350 "./parse.y"
{yyerror ("'{' expected"); RECOVER;; {yyerror ("'{' expected"); RECOVER;;
break;} break;}
case 267: case 267:
#line 1211 "./parse.y" #line 1376 "./parse.y"
{ {
tree lab = build1 (CASE_EXPR, NULL_TREE, yyvsp[-1].node); tree lab = build1 (CASE_EXPR, NULL_TREE, yyvsp[-1].node);
EXPR_WFL_LINECOL (lab) = yyvsp[-2].operator.location; EXPR_WFL_LINECOL (lab) = yyvsp[-2].operator.location;
...@@ -3483,7 +3648,7 @@ case 267: ...@@ -3483,7 +3648,7 @@ case 267:
; ;
break;} break;}
case 268: case 268:
#line 1217 "./parse.y" #line 1382 "./parse.y"
{ {
tree lab = build1 (DEFAULT_EXPR, NULL_TREE, NULL_TREE); tree lab = build1 (DEFAULT_EXPR, NULL_TREE, NULL_TREE);
EXPR_WFL_LINECOL (lab) = yyvsp[-1].operator.location; EXPR_WFL_LINECOL (lab) = yyvsp[-1].operator.location;
...@@ -3491,61 +3656,61 @@ case 268: ...@@ -3491,61 +3656,61 @@ case 268:
; ;
break;} break;}
case 269: case 269:
#line 1223 "./parse.y" #line 1388 "./parse.y"
{yyerror ("Missing or invalid constant expression"); RECOVER;; {yyerror ("Missing or invalid constant expression"); RECOVER;;
break;} break;}
case 270: case 270:
#line 1225 "./parse.y" #line 1390 "./parse.y"
{yyerror ("':' expected"); RECOVER;; {yyerror ("':' expected"); RECOVER;;
break;} break;}
case 271: case 271:
#line 1227 "./parse.y" #line 1392 "./parse.y"
{yyerror ("':' expected"); RECOVER;; {yyerror ("':' expected"); RECOVER;;
break;} break;}
case 272: case 272:
#line 1232 "./parse.y" #line 1397 "./parse.y"
{ {
tree body = build_loop_body (yyvsp[-2].operator.location, yyvsp[-1].node, 0); tree body = build_loop_body (yyvsp[-2].operator.location, yyvsp[-1].node, 0);
yyval.node = build_new_loop (body); yyval.node = build_new_loop (body);
; ;
break;} break;}
case 273: case 273:
#line 1240 "./parse.y" #line 1405 "./parse.y"
{ yyval.node = complete_loop_body (0, NULL_TREE, yyvsp[0].node, 0); ; { yyval.node = complete_loop_body (0, NULL_TREE, yyvsp[0].node, 0); ;
break;} break;}
case 274: case 274:
#line 1242 "./parse.y" #line 1407 "./parse.y"
{YYERROR_NOW; yyerror ("'(' expected"); RECOVER;; {YYERROR_NOW; yyerror ("'(' expected"); RECOVER;;
break;} break;}
case 275: case 275:
#line 1244 "./parse.y" #line 1409 "./parse.y"
{yyerror ("Missing term and ')' expected"); RECOVER;; {yyerror ("Missing term and ')' expected"); RECOVER;;
break;} break;}
case 276: case 276:
#line 1246 "./parse.y" #line 1411 "./parse.y"
{yyerror ("')' expected"); RECOVER;; {yyerror ("')' expected"); RECOVER;;
break;} break;}
case 277: case 277:
#line 1251 "./parse.y" #line 1416 "./parse.y"
{ yyval.node = complete_loop_body (0, NULL_TREE, yyvsp[0].node, 0); ; { yyval.node = complete_loop_body (0, NULL_TREE, yyvsp[0].node, 0); ;
break;} break;}
case 278: case 278:
#line 1256 "./parse.y" #line 1421 "./parse.y"
{ {
tree body = build_loop_body (0, NULL_TREE, 1); tree body = build_loop_body (0, NULL_TREE, 1);
yyval.node = build_new_loop (body); yyval.node = build_new_loop (body);
; ;
break;} break;}
case 279: case 279:
#line 1265 "./parse.y" #line 1430 "./parse.y"
{ yyval.node = complete_loop_body (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[-5].node, 1); ; { yyval.node = complete_loop_body (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[-5].node, 1); ;
break;} break;}
case 280: case 280:
#line 1270 "./parse.y" #line 1435 "./parse.y"
{ yyval.node = complete_for_loop (EXPR_WFL_LINECOL (yyvsp[-4].node), yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node);; { yyval.node = complete_for_loop (EXPR_WFL_LINECOL (yyvsp[-4].node), yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node);;
break;} break;}
case 281: case 281:
#line 1272 "./parse.y" #line 1437 "./parse.y"
{ {
yyval.node = complete_for_loop (0, NULL_TREE, yyvsp[-2].node, yyvsp[0].node); 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 */ /* We have not condition, so we get rid of the EXIT_EXPR */
...@@ -3554,23 +3719,23 @@ case 281: ...@@ -3554,23 +3719,23 @@ case 281:
; ;
break;} break;}
case 282: case 282:
#line 1279 "./parse.y" #line 1444 "./parse.y"
{yyerror ("Invalid control expression"); RECOVER;; {yyerror ("Invalid control expression"); RECOVER;;
break;} break;}
case 283: case 283:
#line 1281 "./parse.y" #line 1446 "./parse.y"
{yyerror ("Invalid update expression"); RECOVER;; {yyerror ("Invalid update expression"); RECOVER;;
break;} break;}
case 284: case 284:
#line 1283 "./parse.y" #line 1448 "./parse.y"
{yyerror ("Invalid update expression"); RECOVER;; {yyerror ("Invalid update expression"); RECOVER;;
break;} break;}
case 285: case 285:
#line 1288 "./parse.y" #line 1453 "./parse.y"
{ yyval.node = complete_for_loop (EXPR_WFL_LINECOL (yyvsp[-4].node), yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node);; { yyval.node = complete_for_loop (EXPR_WFL_LINECOL (yyvsp[-4].node), yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node);;
break;} break;}
case 286: case 286:
#line 1290 "./parse.y" #line 1455 "./parse.y"
{ {
yyval.node = complete_for_loop (0, NULL_TREE, yyvsp[-2].node, yyvsp[0].node); 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 */ /* We have not condition, so we get rid of the EXIT_EXPR */
...@@ -3579,7 +3744,7 @@ case 286: ...@@ -3579,7 +3744,7 @@ case 286:
; ;
break;} break;}
case 287: case 287:
#line 1300 "./parse.y" #line 1465 "./parse.y"
{ {
/* This scope defined for local variable that may be /* This scope defined for local variable that may be
defined within the scope of the for loop */ defined within the scope of the for loop */
...@@ -3587,15 +3752,15 @@ case 287: ...@@ -3587,15 +3752,15 @@ case 287:
; ;
break;} break;}
case 288: case 288:
#line 1306 "./parse.y" #line 1471 "./parse.y"
{yyerror ("'(' expected"); DRECOVER(for_1);; {yyerror ("'(' expected"); DRECOVER(for_1);;
break;} break;}
case 289: case 289:
#line 1308 "./parse.y" #line 1473 "./parse.y"
{yyerror ("Invalid init statement"); RECOVER;; {yyerror ("Invalid init statement"); RECOVER;;
break;} break;}
case 290: case 290:
#line 1313 "./parse.y" #line 1478 "./parse.y"
{ {
/* We now declare the loop body. The loop is /* We now declare the loop body. The loop is
declared as a for loop. */ declared as a for loop. */
...@@ -3608,11 +3773,11 @@ case 290: ...@@ -3608,11 +3773,11 @@ case 290:
; ;
break;} break;}
case 291: case 291:
#line 1325 "./parse.y" #line 1490 "./parse.y"
{ yyval.node = empty_stmt_node; ; { yyval.node = empty_stmt_node; ;
break;} break;}
case 292: case 292:
#line 1327 "./parse.y" #line 1492 "./parse.y"
{ {
/* Init statement recorded within the previously /* Init statement recorded within the previously
defined block scope */ defined block scope */
...@@ -3620,7 +3785,7 @@ case 292: ...@@ -3620,7 +3785,7 @@ case 292:
; ;
break;} break;}
case 293: case 293:
#line 1333 "./parse.y" #line 1498 "./parse.y"
{ {
/* Local variable are recorded within the previously /* Local variable are recorded within the previously
defined block scope */ defined block scope */
...@@ -3628,94 +3793,94 @@ case 293: ...@@ -3628,94 +3793,94 @@ case 293:
; ;
break;} break;}
case 294: case 294:
#line 1339 "./parse.y" #line 1504 "./parse.y"
{yyerror ("';' expected"); DRECOVER(for_init_1);; {yyerror ("';' expected"); DRECOVER(for_init_1);;
break;} break;}
case 295: case 295:
#line 1343 "./parse.y" #line 1508 "./parse.y"
{yyval.node = empty_stmt_node;; {yyval.node = empty_stmt_node;;
break;} break;}
case 296: case 296:
#line 1345 "./parse.y" #line 1510 "./parse.y"
{ yyval.node = build_debugable_stmt (BUILD_LOCATION (), yyvsp[0].node); ; { yyval.node = build_debugable_stmt (BUILD_LOCATION (), yyvsp[0].node); ;
break;} break;}
case 297: case 297:
#line 1350 "./parse.y" #line 1515 "./parse.y"
{ yyval.node = add_stmt_to_compound (NULL_TREE, NULL_TREE, yyvsp[0].node); ; { yyval.node = add_stmt_to_compound (NULL_TREE, NULL_TREE, yyvsp[0].node); ;
break;} break;}
case 298: case 298:
#line 1352 "./parse.y" #line 1517 "./parse.y"
{ yyval.node = add_stmt_to_compound (yyvsp[-2].node, NULL_TREE, yyvsp[0].node); ; { yyval.node = add_stmt_to_compound (yyvsp[-2].node, NULL_TREE, yyvsp[0].node); ;
break;} break;}
case 299: case 299:
#line 1354 "./parse.y" #line 1519 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 300: case 300:
#line 1359 "./parse.y" #line 1524 "./parse.y"
{ yyval.node = build_bc_statement (yyvsp[-1].operator.location, 1, NULL_TREE); ; { yyval.node = build_bc_statement (yyvsp[-1].operator.location, 1, NULL_TREE); ;
break;} break;}
case 301: case 301:
#line 1361 "./parse.y" #line 1526 "./parse.y"
{ yyval.node = build_bc_statement (yyvsp[-2].operator.location, 1, yyvsp[-1].node); ; { yyval.node = build_bc_statement (yyvsp[-2].operator.location, 1, yyvsp[-1].node); ;
break;} break;}
case 302: case 302:
#line 1363 "./parse.y" #line 1528 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 303: case 303:
#line 1365 "./parse.y" #line 1530 "./parse.y"
{yyerror ("';' expected"); RECOVER;; {yyerror ("';' expected"); RECOVER;;
break;} break;}
case 304: case 304:
#line 1370 "./parse.y" #line 1535 "./parse.y"
{ yyval.node = build_bc_statement (yyvsp[-1].operator.location, 0, NULL_TREE); ; { yyval.node = build_bc_statement (yyvsp[-1].operator.location, 0, NULL_TREE); ;
break;} break;}
case 305: case 305:
#line 1372 "./parse.y" #line 1537 "./parse.y"
{ yyval.node = build_bc_statement (yyvsp[-2].operator.location, 0, yyvsp[-1].node); ; { yyval.node = build_bc_statement (yyvsp[-2].operator.location, 0, yyvsp[-1].node); ;
break;} break;}
case 306: case 306:
#line 1374 "./parse.y" #line 1539 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 307: case 307:
#line 1376 "./parse.y" #line 1541 "./parse.y"
{yyerror ("';' expected"); RECOVER;; {yyerror ("';' expected"); RECOVER;;
break;} break;}
case 308: case 308:
#line 1381 "./parse.y" #line 1546 "./parse.y"
{ yyval.node = build_return (yyvsp[-1].operator.location, NULL_TREE); ; { yyval.node = build_return (yyvsp[-1].operator.location, NULL_TREE); ;
break;} break;}
case 309: case 309:
#line 1383 "./parse.y" #line 1548 "./parse.y"
{ yyval.node = build_return (yyvsp[-2].operator.location, yyvsp[-1].node); ; { yyval.node = build_return (yyvsp[-2].operator.location, yyvsp[-1].node); ;
break;} break;}
case 310: case 310:
#line 1385 "./parse.y" #line 1550 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 311: case 311:
#line 1387 "./parse.y" #line 1552 "./parse.y"
{yyerror ("';' expected"); RECOVER;; {yyerror ("';' expected"); RECOVER;;
break;} break;}
case 312: case 312:
#line 1392 "./parse.y" #line 1557 "./parse.y"
{ {
yyval.node = build1 (THROW_EXPR, NULL_TREE, yyvsp[-1].node); yyval.node = build1 (THROW_EXPR, NULL_TREE, yyvsp[-1].node);
EXPR_WFL_LINECOL (yyval.node) = yyvsp[-2].operator.location; EXPR_WFL_LINECOL (yyval.node) = yyvsp[-2].operator.location;
; ;
break;} break;}
case 313: case 313:
#line 1397 "./parse.y" #line 1562 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 314: case 314:
#line 1399 "./parse.y" #line 1564 "./parse.y"
{yyerror ("';' expected"); RECOVER;; {yyerror ("';' expected"); RECOVER;;
break;} break;}
case 315: case 315:
#line 1404 "./parse.y" #line 1569 "./parse.y"
{ {
yyval.node = build (SYNCHRONIZED_EXPR, NULL_TREE, yyvsp[-2].node, yyvsp[0].node); yyval.node = build (SYNCHRONIZED_EXPR, NULL_TREE, yyvsp[-2].node, yyvsp[0].node);
EXPR_WFL_LINECOL (yyval.node) = EXPR_WFL_LINECOL (yyval.node) =
...@@ -3723,53 +3888,53 @@ case 315: ...@@ -3723,53 +3888,53 @@ case 315:
; ;
break;} break;}
case 316: case 316:
#line 1410 "./parse.y" #line 1575 "./parse.y"
{yyerror ("'{' expected"); RECOVER;; {yyerror ("'{' expected"); RECOVER;;
break;} break;}
case 317: case 317:
#line 1412 "./parse.y" #line 1577 "./parse.y"
{yyerror ("'(' expected"); RECOVER;; {yyerror ("'(' expected"); RECOVER;;
break;} break;}
case 318: case 318:
#line 1414 "./parse.y" #line 1579 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 319: case 319:
#line 1416 "./parse.y" #line 1581 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 320: case 320:
#line 1421 "./parse.y" #line 1586 "./parse.y"
{ {
if ((1 << yyvsp[0].value) != ACC_SYNCHRONIZED) if ((1 << yyvsp[0].value) != ACC_SYNCHRONIZED)
fatal ("synchronized was '%d' - yyparse", (1 << yyvsp[0].value)); fatal ("synchronized was '%d' - yyparse", (1 << yyvsp[0].value));
; ;
break;} break;}
case 321: case 321:
#line 1429 "./parse.y" #line 1594 "./parse.y"
{ yyval.node = build_try_statement (yyvsp[-2].operator.location, yyvsp[-1].node, yyvsp[0].node, NULL_TREE); ; { yyval.node = build_try_statement (yyvsp[-2].operator.location, yyvsp[-1].node, yyvsp[0].node, NULL_TREE); ;
break;} break;}
case 322: case 322:
#line 1431 "./parse.y" #line 1596 "./parse.y"
{ yyval.node = build_try_statement (yyvsp[-2].operator.location, yyvsp[-1].node, NULL_TREE, yyvsp[0].node); ; { yyval.node = build_try_statement (yyvsp[-2].operator.location, yyvsp[-1].node, NULL_TREE, yyvsp[0].node); ;
break;} break;}
case 323: case 323:
#line 1433 "./parse.y" #line 1598 "./parse.y"
{ yyval.node = build_try_statement (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ; { yyval.node = build_try_statement (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ;
break;} break;}
case 324: case 324:
#line 1435 "./parse.y" #line 1600 "./parse.y"
{yyerror ("'{' expected"); DRECOVER (try_statement);; {yyerror ("'{' expected"); DRECOVER (try_statement);;
break;} break;}
case 326: case 326:
#line 1441 "./parse.y" #line 1606 "./parse.y"
{ {
TREE_CHAIN (yyvsp[0].node) = yyvsp[-1].node; TREE_CHAIN (yyvsp[0].node) = yyvsp[-1].node;
yyval.node = yyvsp[0].node; yyval.node = yyvsp[0].node;
; ;
break;} break;}
case 327: case 327:
#line 1449 "./parse.y" #line 1614 "./parse.y"
{ {
java_method_add_stmt (current_function_decl, yyvsp[0].node); java_method_add_stmt (current_function_decl, yyvsp[0].node);
exit_block (); exit_block ();
...@@ -3777,7 +3942,7 @@ case 327: ...@@ -3777,7 +3942,7 @@ case 327:
; ;
break;} break;}
case 328: case 328:
#line 1457 "./parse.y" #line 1622 "./parse.y"
{ {
/* We add a block to define a scope for /* We add a block to define a scope for
formal_parameter (CCBP). The formal parameter is formal_parameter (CCBP). The formal parameter is
...@@ -3795,179 +3960,179 @@ case 328: ...@@ -3795,179 +3960,179 @@ case 328:
; ;
break;} break;}
case 329: case 329:
#line 1473 "./parse.y" #line 1638 "./parse.y"
{yyerror ("'(' expected"); RECOVER;; {yyerror ("'(' expected"); RECOVER;;
break;} break;}
case 330: case 330:
#line 1475 "./parse.y" #line 1640 "./parse.y"
{yyerror ("Missing term or ')' expected"); DRECOVER (2);; {yyerror ("Missing term or ')' expected"); DRECOVER (2);;
break;} break;}
case 331: case 331:
#line 1477 "./parse.y" #line 1642 "./parse.y"
{yyerror ("')' expected"); DRECOVER (1);; {yyerror ("')' expected"); DRECOVER (1);;
break;} break;}
case 332: case 332:
#line 1482 "./parse.y" #line 1647 "./parse.y"
{ {
yyval.node = build (FINALLY_EXPR, NULL_TREE, yyval.node = build (FINALLY_EXPR, NULL_TREE,
create_label_decl (generate_name ()), yyvsp[0].node); create_label_decl (generate_name ()), yyvsp[0].node);
; ;
break;} break;}
case 333: case 333:
#line 1487 "./parse.y" #line 1652 "./parse.y"
{yyerror ("'{' expected"); RECOVER; ; {yyerror ("'{' expected"); RECOVER; ;
break;} break;}
case 337: case 337:
#line 1499 "./parse.y" #line 1664 "./parse.y"
{ yyval.node = build_this (yyvsp[0].operator.location); ; { yyval.node = build_this (yyvsp[0].operator.location); ;
break;} break;}
case 338: case 338:
#line 1501 "./parse.y" #line 1666 "./parse.y"
{yyval.node = yyvsp[-1].node;; {yyval.node = yyvsp[-1].node;;
break;} break;}
case 343: case 343:
#line 1510 "./parse.y" #line 1675 "./parse.y"
{ yyval.node = parse_jdk1_1_error ("named class literals"); ; { yyval.node = parse_jdk1_1_error ("named class literals"); ;
break;} break;}
case 344: case 344:
#line 1512 "./parse.y" #line 1677 "./parse.y"
{ yyval.node = build_class_ref (yyvsp[-2].node); ; { yyval.node = build_class_ref (yyvsp[-2].node); ;
break;} break;}
case 345: case 345:
#line 1514 "./parse.y" #line 1679 "./parse.y"
{ yyval.node = build_class_ref (void_type_node); ; { yyval.node = build_class_ref (void_type_node); ;
break;} break;}
case 346: case 346:
#line 1519 "./parse.y" #line 1684 "./parse.y"
{ yyval.node = parse_jdk1_1_error ("class literals"); ; { yyval.node = parse_jdk1_1_error ("class literals"); ;
break;} break;}
case 347: case 347:
#line 1521 "./parse.y" #line 1686 "./parse.y"
{yyerror ("')' expected"); RECOVER;; {yyerror ("')' expected"); RECOVER;;
break;} break;}
case 348: case 348:
#line 1523 "./parse.y" #line 1688 "./parse.y"
{yyerror ("'class' or 'this' expected" ); RECOVER;; {yyerror ("'class' or 'this' expected" ); RECOVER;;
break;} break;}
case 349: case 349:
#line 1525 "./parse.y" #line 1690 "./parse.y"
{yyerror ("'class' expected" ); RECOVER;; {yyerror ("'class' expected" ); RECOVER;;
break;} break;}
case 350: case 350:
#line 1527 "./parse.y" #line 1692 "./parse.y"
{yyerror ("'class' expected" ); RECOVER;; {yyerror ("'class' expected" ); RECOVER;;
break;} break;}
case 351: case 351:
#line 1532 "./parse.y" #line 1697 "./parse.y"
{ yyval.node = build_new_invocation (yyvsp[-3].node, yyvsp[-1].node); ; { yyval.node = build_new_invocation (yyvsp[-3].node, yyvsp[-1].node); ;
break;} break;}
case 352: case 352:
#line 1534 "./parse.y" #line 1699 "./parse.y"
{ yyval.node = build_new_invocation (yyvsp[-2].node, NULL_TREE); ; { yyval.node = build_new_invocation (yyvsp[-2].node, NULL_TREE); ;
break;} break;}
case 353: case 353:
#line 1539 "./parse.y" #line 1704 "./parse.y"
{ yyval.node = parse_jdk1_1_error ("inner class instance creation"); ; { yyval.node = parse_jdk1_1_error ("inner class instance creation"); ;
break;} break;}
case 354: case 354:
#line 1541 "./parse.y" #line 1706 "./parse.y"
{ yyval.node = parse_jdk1_1_error ("inner class instance creation"); ; { yyval.node = parse_jdk1_1_error ("inner class instance creation"); ;
break;} break;}
case 359: case 359:
#line 1550 "./parse.y" #line 1715 "./parse.y"
{yyerror ("'(' expected"); DRECOVER(new_1);; {yyerror ("'(' expected"); DRECOVER(new_1);;
break;} break;}
case 360: case 360:
#line 1552 "./parse.y" #line 1717 "./parse.y"
{yyerror ("'(' expected"); RECOVER;; {yyerror ("'(' expected"); RECOVER;;
break;} break;}
case 361: case 361:
#line 1554 "./parse.y" #line 1719 "./parse.y"
{yyerror ("')' or term expected"); RECOVER;; {yyerror ("')' or term expected"); RECOVER;;
break;} break;}
case 362: case 362:
#line 1556 "./parse.y" #line 1721 "./parse.y"
{yyerror ("')' expected"); RECOVER;; {yyerror ("')' expected"); RECOVER;;
break;} break;}
case 363: case 363:
#line 1558 "./parse.y" #line 1723 "./parse.y"
{YYERROR_NOW; yyerror ("Identifier expected"); RECOVER;; {YYERROR_NOW; yyerror ("Identifier expected"); RECOVER;;
break;} break;}
case 364: case 364:
#line 1560 "./parse.y" #line 1725 "./parse.y"
{yyerror ("'(' expected"); RECOVER;; {yyerror ("'(' expected"); RECOVER;;
break;} break;}
case 367: case 367:
#line 1570 "./parse.y" #line 1735 "./parse.y"
{ {
yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, NULL_TREE); yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, NULL_TREE);
ctxp->formal_parameter_number = 1; ctxp->formal_parameter_number = 1;
; ;
break;} break;}
case 368: case 368:
#line 1575 "./parse.y" #line 1740 "./parse.y"
{ {
ctxp->formal_parameter_number += 1; ctxp->formal_parameter_number += 1;
yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, yyvsp[-2].node); yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, yyvsp[-2].node);
; ;
break;} break;}
case 369: case 369:
#line 1580 "./parse.y" #line 1745 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 370: case 370:
#line 1585 "./parse.y" #line 1750 "./parse.y"
{ yyval.node = build_newarray_node (yyvsp[-1].node, yyvsp[0].node, 0); ; { yyval.node = build_newarray_node (yyvsp[-1].node, yyvsp[0].node, 0); ;
break;} break;}
case 371: case 371:
#line 1587 "./parse.y" #line 1752 "./parse.y"
{ yyval.node = build_newarray_node (yyvsp[-1].node, yyvsp[0].node, 0); ; { yyval.node = build_newarray_node (yyvsp[-1].node, yyvsp[0].node, 0); ;
break;} break;}
case 372: case 372:
#line 1589 "./parse.y" #line 1754 "./parse.y"
{ yyval.node = build_newarray_node (yyvsp[-2].node, yyvsp[-1].node, ctxp->osb_number); ; { yyval.node = build_newarray_node (yyvsp[-2].node, yyvsp[-1].node, ctxp->osb_number); ;
break;} break;}
case 373: case 373:
#line 1591 "./parse.y" #line 1756 "./parse.y"
{ yyval.node = build_newarray_node (yyvsp[-2].node, yyvsp[-1].node, ctxp->osb_number); ; { yyval.node = build_newarray_node (yyvsp[-2].node, yyvsp[-1].node, ctxp->osb_number); ;
break;} break;}
case 374: case 374:
#line 1595 "./parse.y" #line 1760 "./parse.y"
{ yyval.node = parse_jdk1_1_error ("anonymous array"); ; { yyval.node = parse_jdk1_1_error ("anonymous array"); ;
break;} break;}
case 375: case 375:
#line 1597 "./parse.y" #line 1762 "./parse.y"
{ yyval.node = parse_jdk1_1_error ("anonymous array"); ; { yyval.node = parse_jdk1_1_error ("anonymous array"); ;
break;} break;}
case 376: case 376:
#line 1599 "./parse.y" #line 1764 "./parse.y"
{yyerror ("'[' expected"); DRECOVER ("]");; {yyerror ("'[' expected"); DRECOVER ("]");;
break;} break;}
case 377: case 377:
#line 1601 "./parse.y" #line 1766 "./parse.y"
{yyerror ("']' expected"); RECOVER;; {yyerror ("']' expected"); RECOVER;;
break;} break;}
case 378: case 378:
#line 1606 "./parse.y" #line 1771 "./parse.y"
{ yyval.node = build_tree_list (NULL_TREE, yyvsp[0].node); ; { yyval.node = build_tree_list (NULL_TREE, yyvsp[0].node); ;
break;} break;}
case 379: case 379:
#line 1608 "./parse.y" #line 1773 "./parse.y"
{ yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, yyval.node); ; { yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, yyval.node); ;
break;} break;}
case 380: case 380:
#line 1613 "./parse.y" #line 1778 "./parse.y"
{ {
EXPR_WFL_LINECOL (yyvsp[-1].node) = yyvsp[-2].operator.location; EXPR_WFL_LINECOL (yyvsp[-1].node) = yyvsp[-2].operator.location;
yyval.node = yyvsp[-1].node; yyval.node = yyvsp[-1].node;
; ;
break;} break;}
case 381: case 381:
#line 1618 "./parse.y" #line 1783 "./parse.y"
{yyerror ("']' expected"); RECOVER;; {yyerror ("']' expected"); RECOVER;;
break;} break;}
case 382: case 382:
#line 1620 "./parse.y" #line 1785 "./parse.y"
{ {
yyerror ("Missing term"); yyerror ("Missing term");
yyerror ("']' expected"); yyerror ("']' expected");
...@@ -3975,23 +4140,23 @@ case 382: ...@@ -3975,23 +4140,23 @@ case 382:
; ;
break;} break;}
case 383: case 383:
#line 1629 "./parse.y" #line 1794 "./parse.y"
{ ctxp->osb_number = 1; ; { ctxp->osb_number = 1; ;
break;} break;}
case 384: case 384:
#line 1631 "./parse.y" #line 1796 "./parse.y"
{ ctxp->osb_number++; ; { ctxp->osb_number++; ;
break;} break;}
case 385: case 385:
#line 1633 "./parse.y" #line 1798 "./parse.y"
{ yyerror ("']' expected"); RECOVER;; { yyerror ("']' expected"); RECOVER;;
break;} break;}
case 386: case 386:
#line 1638 "./parse.y" #line 1803 "./parse.y"
{ yyval.node = make_qualified_primary (yyvsp[-2].node, yyvsp[0].node, yyvsp[-1].operator.location); ; { yyval.node = make_qualified_primary (yyvsp[-2].node, yyvsp[0].node, yyvsp[-1].operator.location); ;
break;} break;}
case 387: case 387:
#line 1642 "./parse.y" #line 1807 "./parse.y"
{ {
tree super_wfl = tree super_wfl =
build_wfl_node (super_identifier_node, build_wfl_node (super_identifier_node,
...@@ -4001,19 +4166,19 @@ case 387: ...@@ -4001,19 +4166,19 @@ case 387:
; ;
break;} break;}
case 388: case 388:
#line 1650 "./parse.y" #line 1815 "./parse.y"
{yyerror ("Field expected"); DRECOVER (super_field_acces);; {yyerror ("Field expected"); DRECOVER (super_field_acces);;
break;} break;}
case 389: case 389:
#line 1655 "./parse.y" #line 1820 "./parse.y"
{ yyval.node = build_method_invocation (yyvsp[-2].node, NULL_TREE); ; { yyval.node = build_method_invocation (yyvsp[-2].node, NULL_TREE); ;
break;} break;}
case 390: case 390:
#line 1657 "./parse.y" #line 1822 "./parse.y"
{ yyval.node = build_method_invocation (yyvsp[-3].node, yyvsp[-1].node); ; { yyval.node = build_method_invocation (yyvsp[-3].node, yyvsp[-1].node); ;
break;} break;}
case 391: case 391:
#line 1659 "./parse.y" #line 1824 "./parse.y"
{ {
if (TREE_CODE (yyvsp[-4].node) == THIS_EXPR) if (TREE_CODE (yyvsp[-4].node) == THIS_EXPR)
yyval.node = build_this_super_qualified_invocation yyval.node = build_this_super_qualified_invocation
...@@ -4026,7 +4191,7 @@ case 391: ...@@ -4026,7 +4191,7 @@ case 391:
; ;
break;} break;}
case 392: case 392:
#line 1670 "./parse.y" #line 1835 "./parse.y"
{ {
if (TREE_CODE (yyvsp[-5].node) == THIS_EXPR) if (TREE_CODE (yyvsp[-5].node) == THIS_EXPR)
yyval.node = build_this_super_qualified_invocation yyval.node = build_this_super_qualified_invocation
...@@ -4039,121 +4204,121 @@ case 392: ...@@ -4039,121 +4204,121 @@ case 392:
; ;
break;} break;}
case 393: case 393:
#line 1681 "./parse.y" #line 1846 "./parse.y"
{ {
yyval.node = build_this_super_qualified_invocation yyval.node = build_this_super_qualified_invocation
(0, yyvsp[-2].node, NULL_TREE, yyvsp[-4].operator.location, yyvsp[-3].operator.location); (0, yyvsp[-2].node, NULL_TREE, yyvsp[-4].operator.location, yyvsp[-3].operator.location);
; ;
break;} break;}
case 394: case 394:
#line 1686 "./parse.y" #line 1851 "./parse.y"
{ {
yyval.node = build_this_super_qualified_invocation yyval.node = build_this_super_qualified_invocation
(0, yyvsp[-3].node, yyvsp[-1].node, yyvsp[-5].operator.location, yyvsp[-4].operator.location); (0, yyvsp[-3].node, yyvsp[-1].node, yyvsp[-5].operator.location, yyvsp[-4].operator.location);
; ;
break;} break;}
case 395: case 395:
#line 1695 "./parse.y" #line 1860 "./parse.y"
{ yyerror ("'(' expected"); DRECOVER (method_invocation); ; { yyerror ("'(' expected"); DRECOVER (method_invocation); ;
break;} break;}
case 396: case 396:
#line 1697 "./parse.y" #line 1862 "./parse.y"
{ yyerror ("'(' expected"); DRECOVER (method_invocation); ; { yyerror ("'(' expected"); DRECOVER (method_invocation); ;
break;} break;}
case 397: case 397:
#line 1702 "./parse.y" #line 1867 "./parse.y"
{ yyval.node = build_array_ref (yyvsp[-2].operator.location, yyvsp[-3].node, yyvsp[-1].node); ; { yyval.node = build_array_ref (yyvsp[-2].operator.location, yyvsp[-3].node, yyvsp[-1].node); ;
break;} break;}
case 398: case 398:
#line 1704 "./parse.y" #line 1869 "./parse.y"
{ yyval.node = build_array_ref (yyvsp[-2].operator.location, yyvsp[-3].node, yyvsp[-1].node); ; { yyval.node = build_array_ref (yyvsp[-2].operator.location, yyvsp[-3].node, yyvsp[-1].node); ;
break;} break;}
case 399: case 399:
#line 1706 "./parse.y" #line 1871 "./parse.y"
{ {
yyerror ("Missing term and ']' expected"); yyerror ("Missing term and ']' expected");
DRECOVER(array_access); DRECOVER(array_access);
; ;
break;} break;}
case 400: case 400:
#line 1711 "./parse.y" #line 1876 "./parse.y"
{ {
yyerror ("']' expected"); yyerror ("']' expected");
DRECOVER(array_access); DRECOVER(array_access);
; ;
break;} break;}
case 401: case 401:
#line 1716 "./parse.y" #line 1881 "./parse.y"
{ {
yyerror ("Missing term and ']' expected"); yyerror ("Missing term and ']' expected");
DRECOVER(array_access); DRECOVER(array_access);
; ;
break;} break;}
case 402: case 402:
#line 1721 "./parse.y" #line 1886 "./parse.y"
{ {
yyerror ("']' expected"); yyerror ("']' expected");
DRECOVER(array_access); DRECOVER(array_access);
; ;
break;} break;}
case 407: case 407:
#line 1736 "./parse.y" #line 1901 "./parse.y"
{ yyval.node = build_incdec (yyvsp[0].operator.token, yyvsp[0].operator.location, yyvsp[-1].node, 1); ; { yyval.node = build_incdec (yyvsp[0].operator.token, yyvsp[0].operator.location, yyvsp[-1].node, 1); ;
break;} break;}
case 408: case 408:
#line 1741 "./parse.y" #line 1906 "./parse.y"
{ yyval.node = build_incdec (yyvsp[0].operator.token, yyvsp[0].operator.location, yyvsp[-1].node, 1); ; { yyval.node = build_incdec (yyvsp[0].operator.token, yyvsp[0].operator.location, yyvsp[-1].node, 1); ;
break;} break;}
case 411: case 411:
#line 1748 "./parse.y" #line 1913 "./parse.y"
{yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ; {yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ;
break;} break;}
case 412: case 412:
#line 1750 "./parse.y" #line 1915 "./parse.y"
{yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ; {yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ;
break;} break;}
case 414: case 414:
#line 1753 "./parse.y" #line 1918 "./parse.y"
{yyerror ("Missing term"); RECOVER; {yyerror ("Missing term"); RECOVER;
break;} break;}
case 415: case 415:
#line 1755 "./parse.y" #line 1920 "./parse.y"
{yyerror ("Missing term"); RECOVER; {yyerror ("Missing term"); RECOVER;
break;} break;}
case 416: case 416:
#line 1760 "./parse.y" #line 1925 "./parse.y"
{yyval.node = build_incdec (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node, 0); ; {yyval.node = build_incdec (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node, 0); ;
break;} break;}
case 417: case 417:
#line 1762 "./parse.y" #line 1927 "./parse.y"
{yyerror ("Missing term"); RECOVER; {yyerror ("Missing term"); RECOVER;
break;} break;}
case 418: case 418:
#line 1767 "./parse.y" #line 1932 "./parse.y"
{yyval.node = build_incdec (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node, 0); ; {yyval.node = build_incdec (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node, 0); ;
break;} break;}
case 419: case 419:
#line 1769 "./parse.y" #line 1934 "./parse.y"
{yyerror ("Missing term"); RECOVER; {yyerror ("Missing term"); RECOVER;
break;} break;}
case 421: case 421:
#line 1775 "./parse.y" #line 1940 "./parse.y"
{yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ; {yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ;
break;} break;}
case 422: case 422:
#line 1777 "./parse.y" #line 1942 "./parse.y"
{yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ; {yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ;
break;} break;}
case 424: case 424:
#line 1780 "./parse.y" #line 1945 "./parse.y"
{yyerror ("Missing term"); RECOVER; {yyerror ("Missing term"); RECOVER;
break;} break;}
case 425: case 425:
#line 1782 "./parse.y" #line 1947 "./parse.y"
{yyerror ("Missing term"); RECOVER; {yyerror ("Missing term"); RECOVER;
break;} break;}
case 426: case 426:
#line 1787 "./parse.y" #line 1952 "./parse.y"
{ {
tree type = yyvsp[-3].node; tree type = yyvsp[-3].node;
while (ctxp->osb_number--) while (ctxp->osb_number--)
...@@ -4162,15 +4327,15 @@ case 426: ...@@ -4162,15 +4327,15 @@ case 426:
; ;
break;} break;}
case 427: case 427:
#line 1794 "./parse.y" #line 1959 "./parse.y"
{ yyval.node = build_cast (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[0].node); ; { yyval.node = build_cast (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[0].node); ;
break;} break;}
case 428: case 428:
#line 1796 "./parse.y" #line 1961 "./parse.y"
{ yyval.node = build_cast (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[0].node); ; { yyval.node = build_cast (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[0].node); ;
break;} break;}
case 429: case 429:
#line 1798 "./parse.y" #line 1963 "./parse.y"
{ {
char *ptr; char *ptr;
while (ctxp->osb_number--) while (ctxp->osb_number--)
...@@ -4184,11 +4349,11 @@ case 429: ...@@ -4184,11 +4349,11 @@ case 429:
; ;
break;} break;}
case 430: case 430:
#line 1810 "./parse.y" #line 1975 "./parse.y"
{yyerror ("']' expected, invalid type expression");; {yyerror ("']' expected, invalid type expression");;
break;} break;}
case 431: case 431:
#line 1812 "./parse.y" #line 1977 "./parse.y"
{ {
if (ctxp->prevent_ese != lineno) if (ctxp->prevent_ese != lineno)
yyerror ("Invalid type expression"); RECOVER; yyerror ("Invalid type expression"); RECOVER;
...@@ -4196,243 +4361,243 @@ case 431: ...@@ -4196,243 +4361,243 @@ case 431:
; ;
break;} break;}
case 432: case 432:
#line 1818 "./parse.y" #line 1983 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 433: case 433:
#line 1820 "./parse.y" #line 1985 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 434: case 434:
#line 1822 "./parse.y" #line 1987 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 436: case 436:
#line 1828 "./parse.y" #line 1993 "./parse.y"
{ {
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token),
yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node);
; ;
break;} break;}
case 437: case 437:
#line 1833 "./parse.y" #line 1998 "./parse.y"
{ {
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node); yyvsp[-2].node, yyvsp[0].node);
; ;
break;} break;}
case 438: case 438:
#line 1838 "./parse.y" #line 2003 "./parse.y"
{ {
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node); yyvsp[-2].node, yyvsp[0].node);
; ;
break;} break;}
case 439: case 439:
#line 1843 "./parse.y" #line 2008 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 440: case 440:
#line 1845 "./parse.y" #line 2010 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 441: case 441:
#line 1847 "./parse.y" #line 2012 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 443: case 443:
#line 1853 "./parse.y" #line 2018 "./parse.y"
{ {
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node); yyvsp[-2].node, yyvsp[0].node);
; ;
break;} break;}
case 444: case 444:
#line 1858 "./parse.y" #line 2023 "./parse.y"
{ {
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node); yyvsp[-2].node, yyvsp[0].node);
; ;
break;} break;}
case 445: case 445:
#line 1863 "./parse.y" #line 2028 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 446: case 446:
#line 1865 "./parse.y" #line 2030 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 448: case 448:
#line 1871 "./parse.y" #line 2036 "./parse.y"
{ {
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node); yyvsp[-2].node, yyvsp[0].node);
; ;
break;} break;}
case 449: case 449:
#line 1876 "./parse.y" #line 2041 "./parse.y"
{ {
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node); yyvsp[-2].node, yyvsp[0].node);
; ;
break;} break;}
case 450: case 450:
#line 1881 "./parse.y" #line 2046 "./parse.y"
{ {
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node); yyvsp[-2].node, yyvsp[0].node);
; ;
break;} break;}
case 451: case 451:
#line 1886 "./parse.y" #line 2051 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 452: case 452:
#line 1888 "./parse.y" #line 2053 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 453: case 453:
#line 1890 "./parse.y" #line 2055 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 455: case 455:
#line 1896 "./parse.y" #line 2061 "./parse.y"
{ {
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node); yyvsp[-2].node, yyvsp[0].node);
; ;
break;} break;}
case 456: case 456:
#line 1901 "./parse.y" #line 2066 "./parse.y"
{ {
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node); yyvsp[-2].node, yyvsp[0].node);
; ;
break;} break;}
case 457: case 457:
#line 1906 "./parse.y" #line 2071 "./parse.y"
{ {
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node); yyvsp[-2].node, yyvsp[0].node);
; ;
break;} break;}
case 458: case 458:
#line 1911 "./parse.y" #line 2076 "./parse.y"
{ {
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node); yyvsp[-2].node, yyvsp[0].node);
; ;
break;} break;}
case 459: case 459:
#line 1916 "./parse.y" #line 2081 "./parse.y"
{ yyval.node = build_binop (INSTANCEOF_EXPR, yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; { yyval.node = build_binop (INSTANCEOF_EXPR, yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ;
break;} break;}
case 460: case 460:
#line 1918 "./parse.y" #line 2083 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 461: case 461:
#line 1920 "./parse.y" #line 2085 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 462: case 462:
#line 1922 "./parse.y" #line 2087 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 463: case 463:
#line 1924 "./parse.y" #line 2089 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 464: case 464:
#line 1926 "./parse.y" #line 2091 "./parse.y"
{yyerror ("Invalid reference type"); RECOVER;; {yyerror ("Invalid reference type"); RECOVER;;
break;} break;}
case 466: case 466:
#line 1932 "./parse.y" #line 2097 "./parse.y"
{ {
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node); yyvsp[-2].node, yyvsp[0].node);
; ;
break;} break;}
case 467: case 467:
#line 1937 "./parse.y" #line 2102 "./parse.y"
{ {
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node); yyvsp[-2].node, yyvsp[0].node);
; ;
break;} break;}
case 468: case 468:
#line 1942 "./parse.y" #line 2107 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 469: case 469:
#line 1944 "./parse.y" #line 2109 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 471: case 471:
#line 1950 "./parse.y" #line 2115 "./parse.y"
{ {
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node); yyvsp[-2].node, yyvsp[0].node);
; ;
break;} break;}
case 472: case 472:
#line 1955 "./parse.y" #line 2120 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 474: case 474:
#line 1961 "./parse.y" #line 2126 "./parse.y"
{ {
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node); yyvsp[-2].node, yyvsp[0].node);
; ;
break;} break;}
case 475: case 475:
#line 1966 "./parse.y" #line 2131 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 477: case 477:
#line 1972 "./parse.y" #line 2137 "./parse.y"
{ {
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node); yyvsp[-2].node, yyvsp[0].node);
; ;
break;} break;}
case 478: case 478:
#line 1977 "./parse.y" #line 2142 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 480: case 480:
#line 1983 "./parse.y" #line 2148 "./parse.y"
{ {
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node); yyvsp[-2].node, yyvsp[0].node);
; ;
break;} break;}
case 481: case 481:
#line 1988 "./parse.y" #line 2153 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 483: case 483:
#line 1994 "./parse.y" #line 2159 "./parse.y"
{ {
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node); yyvsp[-2].node, yyvsp[0].node);
; ;
break;} break;}
case 484: case 484:
#line 1999 "./parse.y" #line 2164 "./parse.y"
{yyerror ("Missing term"); RECOVER;; {yyerror ("Missing term"); RECOVER;;
break;} break;}
case 486: case 486:
#line 2005 "./parse.y" #line 2170 "./parse.y"
{ {
yyval.node = build (CONDITIONAL_EXPR, NULL_TREE, yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node); 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; EXPR_WFL_LINECOL (yyval.node) = yyvsp[-3].operator.location;
; ;
break;} break;}
case 487: case 487:
#line 2010 "./parse.y" #line 2175 "./parse.y"
{ {
YYERROR_NOW; YYERROR_NOW;
yyerror ("Missing term"); yyerror ("Missing term");
...@@ -4440,19 +4605,19 @@ case 487: ...@@ -4440,19 +4605,19 @@ case 487:
; ;
break;} break;}
case 488: case 488:
#line 2016 "./parse.y" #line 2181 "./parse.y"
{yyerror ("Missing term"); DRECOVER (2);; {yyerror ("Missing term"); DRECOVER (2);;
break;} break;}
case 489: case 489:
#line 2018 "./parse.y" #line 2183 "./parse.y"
{yyerror ("Missing term"); DRECOVER (3);; {yyerror ("Missing term"); DRECOVER (3);;
break;} break;}
case 492: case 492:
#line 2028 "./parse.y" #line 2193 "./parse.y"
{ yyval.node = build_assignment (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; { yyval.node = build_assignment (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ;
break;} break;}
case 493: case 493:
#line 2030 "./parse.y" #line 2195 "./parse.y"
{ {
if (ctxp->prevent_ese != lineno) if (ctxp->prevent_ese != lineno)
yyerror ("Missing term"); yyerror ("Missing term");
...@@ -4657,7 +4822,7 @@ yyerrhandle: ...@@ -4657,7 +4822,7 @@ yyerrhandle:
yystate = yyn; yystate = yyn;
goto yynewstate; goto yynewstate;
} }
#line 2056 "./parse.y" #line 2221 "./parse.y"
...@@ -4854,7 +5019,8 @@ issue_warning_error_from_context (cl, msg, ap) ...@@ -4854,7 +5019,8 @@ issue_warning_error_from_context (cl, msg, ap)
force_error = 1; force_error = 1;
ctxp->elc.line = EXPR_WFL_LINENO (cl); ctxp->elc.line = EXPR_WFL_LINENO (cl);
ctxp->elc.col = (EXPR_WFL_COLNO (cl) == 0xfff ? -1 : EXPR_WFL_COLNO (cl)); ctxp->elc.col = (EXPR_WFL_COLNO (cl) == 0xfff ? -1 :
(EXPR_WFL_COLNO (cl) == 0xffe ? -2 : EXPR_WFL_COLNO (cl)));
/* We have a CL, that's a good reason for using it if it contains data */ /* We have a CL, that's a good reason for using it if it contains data */
saved = ctxp->filename; saved = ctxp->filename;
...@@ -4909,6 +5075,75 @@ parse_warning_context VPROTO ((tree cl, char *msg, ...)) ...@@ -4909,6 +5075,75 @@ parse_warning_context VPROTO ((tree cl, char *msg, ...))
va_end (ap); va_end (ap);
} }
static tree
find_expr_with_wfl (node)
tree node;
{
while (node)
{
char code;
tree to_return;
switch (TREE_CODE (node))
{
case BLOCK:
return find_expr_with_wfl (BLOCK_EXPR_BODY (node));
case COMPOUND_EXPR:
to_return = find_expr_with_wfl (TREE_OPERAND (node, 0));
if (to_return)
return to_return;
to_return = find_expr_with_wfl (TREE_OPERAND (node, 1));
return to_return;
case LOOP_EXPR:
return find_expr_with_wfl (TREE_OPERAND (node, 0));
case LABELED_BLOCK_EXPR:
return find_expr_with_wfl (TREE_OPERAND (node, 1));
default:
code = TREE_CODE_CLASS (TREE_CODE (node));
if (((code == '1') || (code == '2') || (code == 'e'))
&& EXPR_WFL_LINECOL (node))
return node;
}
}
return NULL_TREE;
}
/* Issue a missing return statement error. Uses METHOD to figure the
last line of the method the error occurs in. */
static void
missing_return_error (method)
tree method;
{
EXPR_WFL_SET_LINECOL (wfl_operator, DECL_SOURCE_LINE_LAST (method), -2);
parse_error_context (wfl_operator, "Missing return statement");
}
/* Issue an unreachable statement error. From NODE, find the next
statement to report appropriately. */
static void
unreachable_stmt_error (node)
tree node;
{
/* Browse node to find the next expression node that has a WFL. Use
the location to report the error */
if (TREE_CODE (node) == COMPOUND_EXPR)
node = find_expr_with_wfl (TREE_OPERAND (node, 1));
else
node = find_expr_with_wfl (node);
if (node)
{
EXPR_WFL_SET_LINECOL (wfl_operator, EXPR_WFL_LINENO (node), -2);
parse_error_context (wfl_operator, "Unreachable statement");
}
else
fatal ("Can't get valid statement - unreachable_stmt_error");
}
int int
java_report_errors () java_report_errors ()
{ {
...@@ -5530,7 +5765,7 @@ maybe_generate_finit () ...@@ -5530,7 +5765,7 @@ maybe_generate_finit ()
mdecl = create_artificial_method (TREE_TYPE (ctxp->current_parsed_class), mdecl = create_artificial_method (TREE_TYPE (ctxp->current_parsed_class),
ACC_PRIVATE|ACC_FINAL, void_type_node, ACC_PRIVATE|ACC_FINAL, void_type_node,
finit_identifier_node, NULL_TREE); finit_identifier_node, end_params_node);
start_artificial_method_body (mdecl); start_artificial_method_body (mdecl);
ctxp->non_static_initialized = nreverse (ctxp->non_static_initialized); ctxp->non_static_initialized = nreverse (ctxp->non_static_initialized);
...@@ -5558,7 +5793,7 @@ maybe_generate_clinit () ...@@ -5558,7 +5793,7 @@ maybe_generate_clinit ()
mdecl = create_artificial_method (TREE_TYPE (ctxp->current_parsed_class), mdecl = create_artificial_method (TREE_TYPE (ctxp->current_parsed_class),
ACC_STATIC, void_type_node, ACC_STATIC, void_type_node,
clinit_identifier_node, NULL_TREE); clinit_identifier_node, end_params_node);
start_artificial_method_body (mdecl); start_artificial_method_body (mdecl);
/* Keep initialization in order to enforce 8.5 */ /* Keep initialization in order to enforce 8.5 */
...@@ -5784,7 +6019,7 @@ fix_method_argument_names (orig_arg, meth) ...@@ -5784,7 +6019,7 @@ fix_method_argument_names (orig_arg, meth)
TREE_PURPOSE (arg) = this_identifier_node; TREE_PURPOSE (arg) = this_identifier_node;
arg = TREE_CHAIN (arg); arg = TREE_CHAIN (arg);
} }
while (orig_arg) while (orig_arg != end_params_node)
{ {
TREE_PURPOSE (arg) = TREE_PURPOSE (orig_arg); TREE_PURPOSE (arg) = TREE_PURPOSE (orig_arg);
orig_arg = TREE_CHAIN (orig_arg); orig_arg = TREE_CHAIN (orig_arg);
...@@ -5975,7 +6210,7 @@ method_declarator (id, list) ...@@ -5975,7 +6210,7 @@ method_declarator (id, list)
TREE_CHAIN (arg_node) = arg_types; TREE_CHAIN (arg_node) = arg_types;
arg_types = arg_node; arg_types = arg_node;
} }
TYPE_ARG_TYPES (meth) = nreverse (arg_types); TYPE_ARG_TYPES (meth) = chainon (nreverse (arg_types), end_params_node);
node = build_tree_list (id, meth); node = build_tree_list (id, meth);
return node; return node;
} }
...@@ -6569,9 +6804,7 @@ resolve_no_layout (name, cl) ...@@ -6569,9 +6804,7 @@ resolve_no_layout (name, cl)
} }
/* Called when reporting errors. Skip leader '[' in a complex array /* Called when reporting errors. Skip leader '[' in a complex array
type description that failed to be resolved. Append a matching type description that failed to be resolved. */
number of [] at the end of a newly allocated string that contains
the type's name part. */
static char * static char *
purify_type_name (name) purify_type_name (name)
...@@ -6579,7 +6812,6 @@ purify_type_name (name) ...@@ -6579,7 +6812,6 @@ purify_type_name (name)
{ {
while (*name && *name == '[') while (*name && *name == '[')
name++; name++;
return name; return name;
} }
...@@ -6711,9 +6943,15 @@ java_get_real_method_name (method_decl) ...@@ -6711,9 +6943,15 @@ java_get_real_method_name (method_decl)
tree method_name = DECL_NAME (method_decl); tree method_name = DECL_NAME (method_decl);
if (DECL_CONSTRUCTOR_P (method_decl)) if (DECL_CONSTRUCTOR_P (method_decl))
return init_identifier_node; return init_identifier_node;
/* Explain here why METHOD_DECL doesn't have the DECL_CONSTRUCTUR_P
and still can be a constructor. FIXME */
/* Don't confuse method only bearing the name of their class as /* Don't confuse method only bearing the name of their class as
constructors */ constructors */
else if (ctxp && ctxp->current_parsed_class_un == EXPR_WFL_NODE (method_name) else if (!CLASS_FROM_SOURCE_P (DECL_CONTEXT (method_decl))
&& ctxp
&& ctxp->current_parsed_class_un == EXPR_WFL_NODE (method_name)
&& get_access_flags_from_decl (method_decl) <= ACC_PROTECTED && get_access_flags_from_decl (method_decl) <= ACC_PROTECTED
&& TREE_TYPE (TREE_TYPE (method_decl)) == void_type_node) && TREE_TYPE (TREE_TYPE (method_decl)) == void_type_node)
return init_identifier_node; return init_identifier_node;
...@@ -6948,7 +7186,7 @@ java_check_regular_methods (class_decl) ...@@ -6948,7 +7186,7 @@ java_check_regular_methods (class_decl)
flags = (get_access_flags_from_decl (class_decl) & ACC_PUBLIC ? flags = (get_access_flags_from_decl (class_decl) & ACC_PUBLIC ?
ACC_PUBLIC : 0); ACC_PUBLIC : 0);
decl = create_artificial_method (class, flags, void_type_node, decl = create_artificial_method (class, flags, void_type_node,
init_identifier_node, NULL_TREE); init_identifier_node, end_params_node);
DECL_CONSTRUCTOR_P (decl) = 1; DECL_CONSTRUCTOR_P (decl) = 1;
layout_class_method (TREE_TYPE (class_decl), NULL_TREE, decl, NULL_TREE); layout_class_method (TREE_TYPE (class_decl), NULL_TREE, decl, NULL_TREE);
} }
...@@ -7639,7 +7877,7 @@ source_start_java_method (fndecl) ...@@ -7639,7 +7877,7 @@ source_start_java_method (fndecl)
/* New scope for the function */ /* New scope for the function */
enter_block (); enter_block ();
for (tem = TYPE_ARG_TYPES (TREE_TYPE (fndecl)), i = 0; for (tem = TYPE_ARG_TYPES (TREE_TYPE (fndecl)), i = 0;
tem != NULL_TREE; tem = TREE_CHAIN (tem), i++) tem != end_params_node; tem = TREE_CHAIN (tem), i++)
{ {
tree type = TREE_VALUE (tem); tree type = TREE_VALUE (tem);
tree name = TREE_PURPOSE (tem); tree name = TREE_PURPOSE (tem);
...@@ -7949,12 +8187,7 @@ java_complete_expand_methods () ...@@ -7949,12 +8187,7 @@ java_complete_expand_methods ()
/* Make the class data, register it and run the rest of decl /* Make the class data, register it and run the rest of decl
compilation on it */ compilation on it */
if (!java_error_count && ! flag_emit_class_files) if (!java_error_count && ! flag_emit_class_files)
{ finish_class (current_class);
make_class_data (current_class);
register_class ();
rest_of_decl_compilation (TYPE_NAME (current_class),
(char*) 0, 1, 0);
}
} }
} }
...@@ -7995,9 +8228,7 @@ java_complete_expand_method (mdecl) ...@@ -7995,9 +8228,7 @@ java_complete_expand_method (mdecl)
if ((block_body == NULL_TREE || CAN_COMPLETE_NORMALLY (block_body)) if ((block_body == NULL_TREE || CAN_COMPLETE_NORMALLY (block_body))
&& TREE_CODE (TREE_TYPE (TREE_TYPE (mdecl))) != VOID_TYPE) && TREE_CODE (TREE_TYPE (TREE_TYPE (mdecl))) != VOID_TYPE)
{ missing_return_error (current_function_decl);
parse_error_context (fbody, "Missing return statement");
}
/* Don't go any further if we've found error(s) during the /* Don't go any further if we've found error(s) during the
expansion */ expansion */
...@@ -8122,7 +8353,7 @@ verify_constructor_super () ...@@ -8122,7 +8353,7 @@ verify_constructor_super ()
for (mdecl = TYPE_METHODS (class); mdecl; mdecl = TREE_CHAIN (mdecl)) for (mdecl = TYPE_METHODS (class); mdecl; mdecl = TREE_CHAIN (mdecl))
{ {
if (DECL_CONSTRUCTOR_P (mdecl) if (DECL_CONSTRUCTOR_P (mdecl)
&& !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (mdecl)))) && TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (mdecl))) == end_params_node)
return 0; return 0;
} }
} }
...@@ -9196,7 +9427,7 @@ patch_invoke (patch, method, args, from_super) ...@@ -9196,7 +9427,7 @@ patch_invoke (patch, method, args, from_super)
t = TYPE_ARG_TYPES (TREE_TYPE (method)); t = TYPE_ARG_TYPES (TREE_TYPE (method));
if (TREE_CODE (patch) == NEW_CLASS_EXPR) if (TREE_CODE (patch) == NEW_CLASS_EXPR)
t = TREE_CHAIN (t); t = TREE_CHAIN (t);
for (ta = args; t && ta; t = TREE_CHAIN (t), ta = TREE_CHAIN (ta)) for (ta = args; t != end_params_node && ta; t = TREE_CHAIN (t), ta = TREE_CHAIN (ta))
if (JPRIMITIVE_TYPE_P (TREE_TYPE (TREE_VALUE (ta))) && if (JPRIMITIVE_TYPE_P (TREE_TYPE (TREE_VALUE (ta))) &&
TREE_TYPE (TREE_VALUE (ta)) != TREE_VALUE (t)) TREE_TYPE (TREE_VALUE (ta)) != TREE_VALUE (t))
TREE_VALUE (ta) = convert (TREE_VALUE (t), TREE_VALUE (ta)); TREE_VALUE (ta) = convert (TREE_VALUE (t), TREE_VALUE (ta));
...@@ -9282,7 +9513,7 @@ invocation_mode (method, super) ...@@ -9282,7 +9513,7 @@ invocation_mode (method, super)
if (super) if (super)
return INVOKE_SUPER; return INVOKE_SUPER;
if (access & ACC_STATIC || access & ACC_FINAL) if (access & ACC_STATIC || access & ACC_FINAL || access & ACC_PRIVATE)
return INVOKE_STATIC; return INVOKE_STATIC;
if (CLASS_FINAL (TYPE_NAME (DECL_CONTEXT (method)))) if (CLASS_FINAL (TYPE_NAME (DECL_CONTEXT (method))))
...@@ -9306,7 +9537,7 @@ lookup_method_invoke (lc, cl, class, name, arg_list) ...@@ -9306,7 +9537,7 @@ lookup_method_invoke (lc, cl, class, name, arg_list)
tree cl; tree cl;
tree class, name, arg_list; tree class, name, arg_list;
{ {
tree atl = NULL_TREE; /* Arg Type List */ tree atl = end_params_node; /* Arg Type List */
tree method, signature, list, node; tree method, signature, list, node;
char *candidates; /* Used for error report */ char *candidates; /* Used for error report */
...@@ -9507,7 +9738,7 @@ argument_types_convertible (m1, m2_or_arglist) ...@@ -9507,7 +9738,7 @@ argument_types_convertible (m1, m2_or_arglist)
m2_arg_cache = m2_arg; m2_arg_cache = m2_arg;
} }
while (m1_arg && m2_arg) while (m1_arg != end_params_node && m2_arg != end_params_node)
{ {
resolve_and_layout (TREE_VALUE (m1_arg), NULL_TREE); resolve_and_layout (TREE_VALUE (m1_arg), NULL_TREE);
if (!valid_method_invocation_conversion_p (TREE_VALUE (m1_arg), if (!valid_method_invocation_conversion_p (TREE_VALUE (m1_arg),
...@@ -9516,7 +9747,7 @@ argument_types_convertible (m1, m2_or_arglist) ...@@ -9516,7 +9747,7 @@ argument_types_convertible (m1, m2_or_arglist)
m1_arg = TREE_CHAIN (m1_arg); m1_arg = TREE_CHAIN (m1_arg);
m2_arg = TREE_CHAIN (m2_arg); m2_arg = TREE_CHAIN (m2_arg);
} }
return (!m1_arg && !m2_arg ? 1 : 0); return m1_arg == end_params_node && m2_arg == end_params_node;
} }
/* Qualification routines */ /* Qualification routines */
...@@ -9785,11 +10016,7 @@ java_complete_tree (node) ...@@ -9785,11 +10016,7 @@ java_complete_tree (node)
} }
if (TREE_CODE (wfl_op2) != CASE_EXPR if (TREE_CODE (wfl_op2) != CASE_EXPR
&& TREE_CODE (wfl_op2) != DEFAULT_EXPR) && TREE_CODE (wfl_op2) != DEFAULT_EXPR)
{ unreachable_stmt_error (*ptr);
SET_WFL_OPERATOR (wfl_operator, *ptr, wfl_op2);
parse_error_context (wfl_operator,
"Unreachable statement");
}
} }
ptr = next; ptr = next;
} }
...@@ -10029,7 +10256,6 @@ java_complete_tree (node) ...@@ -10029,7 +10256,6 @@ java_complete_tree (node)
case NEW_CLASS_EXPR: case NEW_CLASS_EXPR:
case CALL_EXPR: case CALL_EXPR:
CAN_COMPLETE_NORMALLY (node) = 1;
/* Complete function's argument(s) first */ /* Complete function's argument(s) first */
if (complete_function_arguments (node)) if (complete_function_arguments (node))
return error_mark_node; return error_mark_node;
...@@ -10049,6 +10275,7 @@ java_complete_tree (node) ...@@ -10049,6 +10275,7 @@ java_complete_tree (node)
DECL_CONSTRUCTOR_CALLS (current_function_decl) = DECL_CONSTRUCTOR_CALLS (current_function_decl) =
tree_cons (wfl, decl, tree_cons (wfl, decl,
DECL_CONSTRUCTOR_CALLS (current_function_decl)); DECL_CONSTRUCTOR_CALLS (current_function_decl));
CAN_COMPLETE_NORMALLY (node) = 1;
return node; return node;
} }
...@@ -12623,6 +12850,7 @@ build_jump_to_finally (block, decl, finally_label, type) ...@@ -12623,6 +12850,7 @@ build_jump_to_finally (block, decl, finally_label, type)
stmt = build (MODIFY_EXPR, void_type_node, decl, stmt = build (MODIFY_EXPR, void_type_node, decl,
build_address_of (LABELED_BLOCK_LABEL (new_block))); build_address_of (LABELED_BLOCK_LABEL (new_block)));
TREE_SIDE_EFFECTS (stmt) = 1; TREE_SIDE_EFFECTS (stmt) = 1;
CAN_COMPLETE_NORMALLY (stmt) = 1;
add_stmt_to_block (block, type, stmt); add_stmt_to_block (block, type, stmt);
stmt = build (GOTO_EXPR, void_type_node, finally_label); stmt = build (GOTO_EXPR, void_type_node, finally_label);
TREE_SIDE_EFFECTS (stmt) = 1; TREE_SIDE_EFFECTS (stmt) = 1;
......
...@@ -640,169 +640,7 @@ struct parser_ctxt { ...@@ -640,169 +640,7 @@ struct parser_ctxt {
#endif /* JC1_LITE */ #endif /* JC1_LITE */
}; };
/* Functions declarations */
#ifndef JC1_LITE #ifndef JC1_LITE
static char *java_accstring_lookup PROTO ((int));
static void classitf_redefinition_error PROTO ((char *,tree, tree, tree));
static void variable_redefinition_error PROTO ((tree, tree, tree, int));
static void check_modifiers PROTO ((char *, int, int));
static tree create_class PROTO ((int, tree, tree, tree));
static tree create_interface PROTO ((int, tree, tree));
static tree find_field PROTO ((tree, tree));
static tree lookup_field_wrapper PROTO ((tree, tree));
static int duplicate_declaration_error_p PROTO ((tree, tree, tree));
static void register_fields PROTO ((int, tree, tree));
static tree parser_qualified_classname PROTO ((tree));
static int parser_check_super PROTO ((tree, tree, tree));
static int parser_check_super_interface PROTO ((tree, tree, tree));
static void check_modifiers_consistency PROTO ((int));
static tree lookup_cl PROTO ((tree));
static tree lookup_java_method2 PROTO ((tree, tree, int));
static tree method_header PROTO ((int, tree, tree, tree));
static void fix_method_argument_names PROTO ((tree ,tree));
static tree method_declarator PROTO ((tree, tree));
static void parse_warning_context VPROTO ((tree cl, char *msg, ...));
static void issue_warning_error_from_context PROTO ((tree, char *msg, va_list));
static tree parse_jdk1_1_error PROTO ((char *));
static void complete_class_report_errors PROTO ((jdep *));
static int process_imports PROTO ((void));
static void read_import_dir PROTO ((tree));
static int find_in_imports_on_demand PROTO ((tree));
static int find_in_imports PROTO ((tree));
static int check_pkg_class_access PROTO ((tree, tree));
static tree resolve_package PROTO ((tree, tree *));
static tree lookup_package_type PROTO ((char *, int));
static tree resolve_class PROTO ((tree, tree, tree));
static tree do_resolve_class PROTO ((tree, tree, tree));
static void declare_local_variables PROTO ((int, tree, tree));
static void source_start_java_method PROTO ((tree));
static void source_end_java_method PROTO ((void));
static void expand_start_java_method PROTO ((tree));
static tree find_name_in_single_imports PROTO ((tree));
static void check_abstract_method_header PROTO ((tree));
static tree lookup_java_interface_method2 PROTO ((tree, tree));
static tree resolve_expression_name PROTO ((tree, tree *));
static tree maybe_create_class_interface_decl PROTO ((tree, tree, tree));
static int check_class_interface_creation PROTO ((int, int, tree,
tree, tree, tree));
static tree patch_method_invocation PROTO ((tree, tree, tree,
int *, tree *, int));
static int breakdown_qualified PROTO ((tree *, tree *, tree));
static tree resolve_and_layout PROTO ((tree, tree));
static tree resolve_no_layout PROTO ((tree, tree));
static int invocation_mode PROTO ((tree, int));
static tree find_applicable_accessible_methods_list PROTO ((int, tree,
tree, tree));
static tree find_most_specific_methods_list PROTO ((tree));
static int argument_types_convertible PROTO ((tree, tree));
static tree patch_invoke PROTO ((tree, tree, tree, int));
static tree lookup_method_invoke PROTO ((int, tree, tree, tree, tree));
static tree register_incomplete_type PROTO ((int, tree, tree, tree));
static tree obtain_incomplete_type PROTO ((tree));
static tree java_complete_tree PROTO ((tree));
static void java_complete_expand_method PROTO ((tree));
static int unresolved_type_p PROTO ((tree, tree *));
static void create_jdep_list PROTO ((struct parser_ctxt *));
static tree build_expr_block PROTO ((tree, tree));
static tree enter_block PROTO ((void));
static tree enter_a_block PROTO ((tree));
static tree exit_block PROTO ((void));
static tree lookup_name_in_blocks PROTO ((tree));
static void maybe_absorb_scoping_blocks PROTO ((void));
static tree build_method_invocation PROTO ((tree, tree));
static tree build_new_invocation PROTO ((tree, tree));
static tree build_assignment PROTO ((int, int, tree, tree));
static tree build_binop PROTO ((enum tree_code, int, tree, tree));
static int check_final_assignment PROTO ((tree ,tree));
static tree patch_assignment PROTO ((tree, tree, tree ));
static tree patch_binop PROTO ((tree, tree, tree));
static tree build_unaryop PROTO ((int, int, tree));
static tree build_incdec PROTO ((int, int, tree, int));
static tree patch_unaryop PROTO ((tree, tree));
static tree build_cast PROTO ((int, tree, tree));
static tree build_null_of_type PROTO ((tree));
static tree patch_cast PROTO ((tree, tree));
static int valid_ref_assignconv_cast_p PROTO ((tree, tree, int));
static int valid_builtin_assignconv_identity_widening_p PROTO ((tree, tree));
static int valid_cast_to_p PROTO ((tree, tree));
static int valid_method_invocation_conversion_p PROTO ((tree, tree));
static tree try_builtin_assignconv PROTO ((tree, tree, tree));
static tree try_reference_assignconv PROTO ((tree, tree));
static tree build_unresolved_array_type PROTO ((tree));
static tree build_array_from_name PROTO ((tree, tree, tree, tree *));
static tree build_array_ref PROTO ((int, tree, tree));
static tree patch_array_ref PROTO ((tree));
static tree make_qualified_name PROTO ((tree, tree, int));
static tree merge_qualified_name PROTO ((tree, tree));
static tree make_qualified_primary PROTO ((tree, tree, int));
static int resolve_qualified_expression_name PROTO ((tree, tree *,
tree *, tree *));
static void qualify_ambiguous_name PROTO ((tree));
static void maybe_generate_clinit PROTO ((void));
static tree resolve_field_access PROTO ((tree, tree *, tree *));
static tree build_newarray_node PROTO ((tree, tree, int));
static tree patch_newarray PROTO ((tree));
static tree resolve_type_during_patch PROTO ((tree));
static tree build_this PROTO ((int));
static tree build_return PROTO ((int, tree));
static tree patch_return PROTO ((tree));
static tree maybe_access_field PROTO ((tree, tree, tree));
static int complete_function_arguments PROTO ((tree));
static int check_for_static_method_reference PROTO ((tree, tree, tree, tree, tree));
static int not_accessible_p PROTO ((tree, tree, int));
static void check_deprecation PROTO ((tree, tree));
static int class_in_current_package PROTO ((tree));
static tree build_if_else_statement PROTO ((int, tree, tree, tree));
static tree patch_if_else_statement PROTO ((tree));
static tree add_stmt_to_compound PROTO ((tree, tree, tree));
static tree add_stmt_to_block PROTO ((tree, tree, tree));
static tree patch_exit_expr PROTO ((tree));
static tree build_labeled_block PROTO ((int, tree));
static tree generate_labeled_block PROTO (());
static tree complete_labeled_statement PROTO ((tree, tree));
static tree build_bc_statement PROTO ((int, int, tree));
static tree patch_bc_statement PROTO ((tree));
static tree patch_loop_statement PROTO ((tree));
static tree build_new_loop PROTO ((tree));
static tree build_loop_body PROTO ((int, tree, int));
static tree complete_loop_body PROTO ((int, tree, tree, int));
static tree build_debugable_stmt PROTO ((int, tree));
static tree complete_for_loop PROTO ((int, tree, tree, tree));
static tree patch_switch_statement PROTO ((tree));
static tree string_constant_concatenation PROTO ((tree, tree));
static tree build_string_concatenation PROTO ((tree, tree));
static tree patch_string_cst PROTO ((tree));
static tree patch_string PROTO ((tree));
static tree build_jump_to_finally PROTO ((tree, tree, tree, tree));
static tree build_try_statement PROTO ((int, tree, tree, tree));
static tree patch_try_statement PROTO ((tree));
static tree patch_synchronized_statement PROTO ((tree, tree));
static tree patch_throw_statement PROTO ((tree, tree));
static void check_thrown_exceptions PROTO ((int, tree));
static int check_thrown_exceptions_do PROTO ((tree));
static void purge_unchecked_exceptions PROTO ((tree));
static void check_throws_clauses PROTO ((tree, tree, tree));
static void complete_method_declaration PROTO ((tree));
static tree build_super_invocation PROTO (());
static int verify_constructor_circularity PROTO ((tree, tree));
static char *constructor_circularity_msg PROTO ((tree, tree));
static tree build_this_super_qualified_invocation PROTO ((int, tree, tree,
int, int));
static char *get_printable_method_name PROTO ((tree));
static tree patch_conditional_expr PROTO ((tree, tree, tree));
static void maybe_generate_finit PROTO (());
static void fix_constructors PROTO ((tree));
static int verify_constructor_super PROTO (());
static tree create_artificial_method PROTO ((tree, int, tree, tree, tree));
static void start_artificial_method_body PROTO ((tree));
static void end_artificial_method_body PROTO ((tree));
static tree generate_field_initialization_code PROTO ((tree));
static int check_method_redefinition PROTO ((tree, tree));
static int reset_method_name PROTO ((tree));
static void java_check_regular_methods PROTO ((tree));
static void java_check_abstract_methods PROTO ((tree));
static tree maybe_build_primttype_type_ref PROTO ((tree, tree));
void safe_layout_class PROTO ((tree)); void safe_layout_class PROTO ((tree));
void java_complete_class PROTO ((void)); void java_complete_class PROTO ((void));
void java_check_circular_reference PROTO ((void)); void java_check_circular_reference PROTO ((void));
...@@ -813,10 +651,9 @@ char *java_get_line_col PROTO ((char *, int, int)); ...@@ -813,10 +651,9 @@ char *java_get_line_col PROTO ((char *, int, int));
void java_expand_switch PROTO ((tree)); void java_expand_switch PROTO ((tree));
tree java_get_catch_block PROTO ((tree, int)); tree java_get_catch_block PROTO ((tree, int));
int java_report_errors PROTO (()); int java_report_errors PROTO (());
#endif /* JC1_LITE */ #endif
/* Always in use, no matter what you compile */ /* Always in use, no matter what you compile */
void java_push_parser_context PROTO ((void)); void java_push_parser_context PROTO ((void));
void java_pop_parser_context PROTO ((int)); void java_pop_parser_context PROTO ((int));
void java_init_lex PROTO ((void)); void java_init_lex PROTO ((void));
......
...@@ -69,6 +69,171 @@ definitions and other extensions. */ ...@@ -69,6 +69,171 @@ definitions and other extensions. */
#include "zipfile.h" #include "zipfile.h"
#include "convert.h" #include "convert.h"
/* Local function prototypes */
static char *java_accstring_lookup PROTO ((int));
static void classitf_redefinition_error PROTO ((char *,tree, tree, tree));
static void variable_redefinition_error PROTO ((tree, tree, tree, int));
static void check_modifiers PROTO ((char *, int, int));
static tree create_class PROTO ((int, tree, tree, tree));
static tree create_interface PROTO ((int, tree, tree));
static tree find_field PROTO ((tree, tree));
static tree lookup_field_wrapper PROTO ((tree, tree));
static int duplicate_declaration_error_p PROTO ((tree, tree, tree));
static void register_fields PROTO ((int, tree, tree));
static tree parser_qualified_classname PROTO ((tree));
static int parser_check_super PROTO ((tree, tree, tree));
static int parser_check_super_interface PROTO ((tree, tree, tree));
static void check_modifiers_consistency PROTO ((int));
static tree lookup_cl PROTO ((tree));
static tree lookup_java_method2 PROTO ((tree, tree, int));
static tree method_header PROTO ((int, tree, tree, tree));
static void fix_method_argument_names PROTO ((tree ,tree));
static tree method_declarator PROTO ((tree, tree));
static void parse_warning_context VPROTO ((tree cl, char *msg, ...));
static void issue_warning_error_from_context PROTO ((tree, char *msg, va_list));
static tree parse_jdk1_1_error PROTO ((char *));
static void complete_class_report_errors PROTO ((jdep *));
static int process_imports PROTO ((void));
static void read_import_dir PROTO ((tree));
static int find_in_imports_on_demand PROTO ((tree));
static int find_in_imports PROTO ((tree));
static int check_pkg_class_access PROTO ((tree, tree));
static tree resolve_package PROTO ((tree, tree *));
static tree lookup_package_type PROTO ((char *, int));
static tree resolve_class PROTO ((tree, tree, tree));
static tree do_resolve_class PROTO ((tree, tree, tree));
static void declare_local_variables PROTO ((int, tree, tree));
static void source_start_java_method PROTO ((tree));
static void source_end_java_method PROTO ((void));
static void expand_start_java_method PROTO ((tree));
static tree find_name_in_single_imports PROTO ((tree));
static void check_abstract_method_header PROTO ((tree));
static tree lookup_java_interface_method2 PROTO ((tree, tree));
static tree resolve_expression_name PROTO ((tree, tree *));
static tree maybe_create_class_interface_decl PROTO ((tree, tree, tree));
static int check_class_interface_creation PROTO ((int, int, tree,
tree, tree, tree));
static tree patch_method_invocation PROTO ((tree, tree, tree,
int *, tree *, int));
static int breakdown_qualified PROTO ((tree *, tree *, tree));
static tree resolve_and_layout PROTO ((tree, tree));
static tree resolve_no_layout PROTO ((tree, tree));
static int invocation_mode PROTO ((tree, int));
static tree find_applicable_accessible_methods_list PROTO ((int, tree,
tree, tree));
static tree find_most_specific_methods_list PROTO ((tree));
static int argument_types_convertible PROTO ((tree, tree));
static tree patch_invoke PROTO ((tree, tree, tree, int));
static tree lookup_method_invoke PROTO ((int, tree, tree, tree, tree));
static tree register_incomplete_type PROTO ((int, tree, tree, tree));
static tree obtain_incomplete_type PROTO ((tree));
static tree java_complete_tree PROTO ((tree));
static void java_complete_expand_method PROTO ((tree));
static int unresolved_type_p PROTO ((tree, tree *));
static void create_jdep_list PROTO ((struct parser_ctxt *));
static tree build_expr_block PROTO ((tree, tree));
static tree enter_block PROTO ((void));
static tree enter_a_block PROTO ((tree));
static tree exit_block PROTO ((void));
static tree lookup_name_in_blocks PROTO ((tree));
static void maybe_absorb_scoping_blocks PROTO ((void));
static tree build_method_invocation PROTO ((tree, tree));
static tree build_new_invocation PROTO ((tree, tree));
static tree build_assignment PROTO ((int, int, tree, tree));
static tree build_binop PROTO ((enum tree_code, int, tree, tree));
static int check_final_assignment PROTO ((tree ,tree));
static tree patch_assignment PROTO ((tree, tree, tree ));
static tree patch_binop PROTO ((tree, tree, tree));
static tree build_unaryop PROTO ((int, int, tree));
static tree build_incdec PROTO ((int, int, tree, int));
static tree patch_unaryop PROTO ((tree, tree));
static tree build_cast PROTO ((int, tree, tree));
static tree build_null_of_type PROTO ((tree));
static tree patch_cast PROTO ((tree, tree));
static int valid_ref_assignconv_cast_p PROTO ((tree, tree, int));
static int valid_builtin_assignconv_identity_widening_p PROTO ((tree, tree));
static int valid_cast_to_p PROTO ((tree, tree));
static int valid_method_invocation_conversion_p PROTO ((tree, tree));
static tree try_builtin_assignconv PROTO ((tree, tree, tree));
static tree try_reference_assignconv PROTO ((tree, tree));
static tree build_unresolved_array_type PROTO ((tree));
static tree build_array_from_name PROTO ((tree, tree, tree, tree *));
static tree build_array_ref PROTO ((int, tree, tree));
static tree patch_array_ref PROTO ((tree));
static tree make_qualified_name PROTO ((tree, tree, int));
static tree merge_qualified_name PROTO ((tree, tree));
static tree make_qualified_primary PROTO ((tree, tree, int));
static int resolve_qualified_expression_name PROTO ((tree, tree *,
tree *, tree *));
static void qualify_ambiguous_name PROTO ((tree));
static void maybe_generate_clinit PROTO ((void));
static tree resolve_field_access PROTO ((tree, tree *, tree *));
static tree build_newarray_node PROTO ((tree, tree, int));
static tree patch_newarray PROTO ((tree));
static tree resolve_type_during_patch PROTO ((tree));
static tree build_this PROTO ((int));
static tree build_return PROTO ((int, tree));
static tree patch_return PROTO ((tree));
static tree maybe_access_field PROTO ((tree, tree, tree));
static int complete_function_arguments PROTO ((tree));
static int check_for_static_method_reference PROTO ((tree, tree, tree, tree, tree));
static int not_accessible_p PROTO ((tree, tree, int));
static void check_deprecation PROTO ((tree, tree));
static int class_in_current_package PROTO ((tree));
static tree build_if_else_statement PROTO ((int, tree, tree, tree));
static tree patch_if_else_statement PROTO ((tree));
static tree add_stmt_to_compound PROTO ((tree, tree, tree));
static tree add_stmt_to_block PROTO ((tree, tree, tree));
static tree patch_exit_expr PROTO ((tree));
static tree build_labeled_block PROTO ((int, tree));
static tree generate_labeled_block PROTO (());
static tree complete_labeled_statement PROTO ((tree, tree));
static tree build_bc_statement PROTO ((int, int, tree));
static tree patch_bc_statement PROTO ((tree));
static tree patch_loop_statement PROTO ((tree));
static tree build_new_loop PROTO ((tree));
static tree build_loop_body PROTO ((int, tree, int));
static tree complete_loop_body PROTO ((int, tree, tree, int));
static tree build_debugable_stmt PROTO ((int, tree));
static tree complete_for_loop PROTO ((int, tree, tree, tree));
static tree patch_switch_statement PROTO ((tree));
static tree string_constant_concatenation PROTO ((tree, tree));
static tree build_string_concatenation PROTO ((tree, tree));
static tree patch_string_cst PROTO ((tree));
static tree patch_string PROTO ((tree));
static tree build_jump_to_finally PROTO ((tree, tree, tree, tree));
static tree build_try_statement PROTO ((int, tree, tree, tree));
static tree patch_try_statement PROTO ((tree));
static tree patch_synchronized_statement PROTO ((tree, tree));
static tree patch_throw_statement PROTO ((tree, tree));
static void check_thrown_exceptions PROTO ((int, tree));
static int check_thrown_exceptions_do PROTO ((tree));
static void purge_unchecked_exceptions PROTO ((tree));
static void check_throws_clauses PROTO ((tree, tree, tree));
static void complete_method_declaration PROTO ((tree));
static tree build_super_invocation PROTO (());
static int verify_constructor_circularity PROTO ((tree, tree));
static char *constructor_circularity_msg PROTO ((tree, tree));
static tree build_this_super_qualified_invocation PROTO ((int, tree, tree,
int, int));
static char *get_printable_method_name PROTO ((tree));
static tree patch_conditional_expr PROTO ((tree, tree, tree));
static void maybe_generate_finit PROTO (());
static void fix_constructors PROTO ((tree));
static int verify_constructor_super PROTO (());
static tree create_artificial_method PROTO ((tree, int, tree, tree, tree));
static void start_artificial_method_body PROTO ((tree));
static void end_artificial_method_body PROTO ((tree));
static tree generate_field_initialization_code PROTO ((tree));
static int check_method_redefinition PROTO ((tree, tree));
static int reset_method_name PROTO ((tree));
static void java_check_regular_methods PROTO ((tree));
static void java_check_abstract_methods PROTO ((tree));
static tree maybe_build_primttype_type_ref PROTO ((tree, tree));
static void unreachable_stmt_error PROTO ((tree));
static tree find_expr_with_wfl PROTO ((tree));
static void missing_return_error PROTO ((tree));
/* Number of error found so far. */ /* Number of error found so far. */
int java_error_count; int java_error_count;
/* Number of warning found so far. */ /* Number of warning found so far. */
...@@ -2249,7 +2414,8 @@ issue_warning_error_from_context (cl, msg, ap) ...@@ -2249,7 +2414,8 @@ issue_warning_error_from_context (cl, msg, ap)
force_error = 1; force_error = 1;
ctxp->elc.line = EXPR_WFL_LINENO (cl); ctxp->elc.line = EXPR_WFL_LINENO (cl);
ctxp->elc.col = (EXPR_WFL_COLNO (cl) == 0xfff ? -1 : EXPR_WFL_COLNO (cl)); ctxp->elc.col = (EXPR_WFL_COLNO (cl) == 0xfff ? -1 :
(EXPR_WFL_COLNO (cl) == 0xffe ? -2 : EXPR_WFL_COLNO (cl)));
/* We have a CL, that's a good reason for using it if it contains data */ /* We have a CL, that's a good reason for using it if it contains data */
saved = ctxp->filename; saved = ctxp->filename;
...@@ -2304,6 +2470,75 @@ parse_warning_context VPROTO ((tree cl, char *msg, ...)) ...@@ -2304,6 +2470,75 @@ parse_warning_context VPROTO ((tree cl, char *msg, ...))
va_end (ap); va_end (ap);
} }
static tree
find_expr_with_wfl (node)
tree node;
{
while (node)
{
char code;
tree to_return;
switch (TREE_CODE (node))
{
case BLOCK:
return find_expr_with_wfl (BLOCK_EXPR_BODY (node));
case COMPOUND_EXPR:
to_return = find_expr_with_wfl (TREE_OPERAND (node, 0));
if (to_return)
return to_return;
to_return = find_expr_with_wfl (TREE_OPERAND (node, 1));
return to_return;
case LOOP_EXPR:
return find_expr_with_wfl (TREE_OPERAND (node, 0));
case LABELED_BLOCK_EXPR:
return find_expr_with_wfl (TREE_OPERAND (node, 1));
default:
code = TREE_CODE_CLASS (TREE_CODE (node));
if (((code == '1') || (code == '2') || (code == 'e'))
&& EXPR_WFL_LINECOL (node))
return node;
}
}
return NULL_TREE;
}
/* Issue a missing return statement error. Uses METHOD to figure the
last line of the method the error occurs in. */
static void
missing_return_error (method)
tree method;
{
EXPR_WFL_SET_LINECOL (wfl_operator, DECL_SOURCE_LINE_LAST (method), -2);
parse_error_context (wfl_operator, "Missing return statement");
}
/* Issue an unreachable statement error. From NODE, find the next
statement to report appropriately. */
static void
unreachable_stmt_error (node)
tree node;
{
/* Browse node to find the next expression node that has a WFL. Use
the location to report the error */
if (TREE_CODE (node) == COMPOUND_EXPR)
node = find_expr_with_wfl (TREE_OPERAND (node, 1));
else
node = find_expr_with_wfl (node);
if (node)
{
EXPR_WFL_SET_LINECOL (wfl_operator, EXPR_WFL_LINENO (node), -2);
parse_error_context (wfl_operator, "Unreachable statement");
}
else
fatal ("Can't get valid statement - unreachable_stmt_error");
}
int int
java_report_errors () java_report_errors ()
{ {
...@@ -4103,9 +4338,15 @@ java_get_real_method_name (method_decl) ...@@ -4103,9 +4338,15 @@ java_get_real_method_name (method_decl)
tree method_name = DECL_NAME (method_decl); tree method_name = DECL_NAME (method_decl);
if (DECL_CONSTRUCTOR_P (method_decl)) if (DECL_CONSTRUCTOR_P (method_decl))
return init_identifier_node; return init_identifier_node;
/* Explain here why METHOD_DECL doesn't have the DECL_CONSTRUCTUR_P
and still can be a constructor. FIXME */
/* Don't confuse method only bearing the name of their class as /* Don't confuse method only bearing the name of their class as
constructors */ constructors */
else if (ctxp && ctxp->current_parsed_class_un == EXPR_WFL_NODE (method_name) else if (!CLASS_FROM_SOURCE_P (DECL_CONTEXT (method_decl))
&& ctxp
&& ctxp->current_parsed_class_un == EXPR_WFL_NODE (method_name)
&& get_access_flags_from_decl (method_decl) <= ACC_PROTECTED && get_access_flags_from_decl (method_decl) <= ACC_PROTECTED
&& TREE_TYPE (TREE_TYPE (method_decl)) == void_type_node) && TREE_TYPE (TREE_TYPE (method_decl)) == void_type_node)
return init_identifier_node; return init_identifier_node;
...@@ -5382,9 +5623,7 @@ java_complete_expand_method (mdecl) ...@@ -5382,9 +5623,7 @@ java_complete_expand_method (mdecl)
if ((block_body == NULL_TREE || CAN_COMPLETE_NORMALLY (block_body)) if ((block_body == NULL_TREE || CAN_COMPLETE_NORMALLY (block_body))
&& TREE_CODE (TREE_TYPE (TREE_TYPE (mdecl))) != VOID_TYPE) && TREE_CODE (TREE_TYPE (TREE_TYPE (mdecl))) != VOID_TYPE)
{ missing_return_error (current_function_decl);
parse_error_context (fbody, "Missing return statement");
}
/* Don't go any further if we've found error(s) during the /* Don't go any further if we've found error(s) during the
expansion */ expansion */
...@@ -6669,7 +6908,7 @@ invocation_mode (method, super) ...@@ -6669,7 +6908,7 @@ invocation_mode (method, super)
if (super) if (super)
return INVOKE_SUPER; return INVOKE_SUPER;
if (access & ACC_STATIC || access & ACC_FINAL) if (access & ACC_STATIC || access & ACC_FINAL || access & ACC_PRIVATE)
return INVOKE_STATIC; return INVOKE_STATIC;
if (CLASS_FINAL (TYPE_NAME (DECL_CONTEXT (method)))) if (CLASS_FINAL (TYPE_NAME (DECL_CONTEXT (method))))
...@@ -7172,11 +7411,7 @@ java_complete_tree (node) ...@@ -7172,11 +7411,7 @@ java_complete_tree (node)
} }
if (TREE_CODE (wfl_op2) != CASE_EXPR if (TREE_CODE (wfl_op2) != CASE_EXPR
&& TREE_CODE (wfl_op2) != DEFAULT_EXPR) && TREE_CODE (wfl_op2) != DEFAULT_EXPR)
{ unreachable_stmt_error (*ptr);
SET_WFL_OPERATOR (wfl_operator, *ptr, wfl_op2);
parse_error_context (wfl_operator,
"Unreachable statement");
}
} }
ptr = next; ptr = next;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment