[multiple changes]

2000-06-21  Alexandre Petit-Bianco  <apbianco@cygnus.com>

	* except.c (prepare_eh_table_type): Use `CATCH_ALL_TYPE'.

2000-06-20  Alexandre Petit-Bianco  <apbianco@cygnus.com>

	* check-init.c (ENABLE_JC1_CHECKING): Replaces ENABLE_CHECKING for
	Java specific checks.
	* expr.c (build_instanceof): CLASS_INTERFACE and CLASS_FINAL usage
	screened by DECL_P.
	* java-tree.def (CASE_EXPR): Marked 'e'.
	(DEFAULT_EXPR): Likewise.
	* jcf-parse.c (set_source_filename): CLASS_COMPLETE_P usage
	screened by DECL_P.
	* jcf-write.c (ENABLE_JC1_CHECKING): Replaces ENABLE_CHECKING for
	Java specific checks.
	(generate_bytecode_insns): Test try_block for BLOCK before using
	BLOCK_EXPR_BODY.
	* parse.y (build_wfl_wrap): Added `location' argument. Set
	EXPR_WFL_LINECOL accordingly.
	(dim_expr:): Wrap constants with WFLs.
	(method_declarator): Use TREE_TYPE not TYPE_NAME on GET_CPC.
	(resolve_package): Check for `stmt' not being a BLOCK before
	building a debuggable statement with it.
	(make_qualified_primary): Added extra parameter to build_wfl_wrap
	invocation.
	(resolve_field_access): Make sure `decl' is a DECL before treating
	it as such.
	(maybe_build_primttype_type_ref): Make sure `wfl''s node is an
	IDENTIFIER_NODE before treating it as such.
	(patch_new_array_init): Make sure `elt' is a TREE_LIST before
	treating it as such.
	(find_applicable_accessible_methods_list): CLASS_INTERFACE macro
	to be applied only on non array types.

2000-06-16  Per Bothner  <per@bothner.com>

	* java-tree.h (LABEL_RETURN_LABELS, LABEL_PENDING_CHAIN):  Don't
	define in terms of DECL_RESULT, as that fails when --enable-checking.

2000-06-06  Alexandre Petit-Bianco  <apbianco@cygnus.com>

	* parse.h (REGISTER_IMPORT): Use `chainon' to link new entries.
	* parse.y (find_in_imports): Returned type changed to void,
	leading comment fixed.
	(register_package): New function.
	(qualify_and_find): Likewise.
	(package_declaration:): Use `register_package'.
	(single_type_import_declaration:): Removed local variable
	`node'. Added missing `;' for consistency.
	(type_import_on_demand_declaration:): Use `chainon' to link new
	entries.
	(lookup_field_wrapper): Lookup local variables defined in outer
	contexts first.
	(java_complete_class): Don't reverse the list of imported on demand.
	(do_resolve_class): Reorganized. Removed local variable
	`original_name'. Call `qualify_and_find' with the current package
	name, invoke `find_in_imports_on_demand' right after. Call
	`qualify_and_find' with the packages we've seen so far. Fixed
	operations numbering in comments.
	(java_expand_class): Don't reverse `package_list'.
	(find_most_specific_methods_list): New local variables `abstract'
	and `candidates'. Use them to pick the right method.

(Fixes for the ENABLE_TREE_CHECKING Java run-time build problem:
 http://gcc.gnu.org/ml/gcc-patches/2000-06/msg00551.html)

From-SVN: r34642
parent e605b040
2000-06-21 Alexandre Petit-Bianco <apbianco@cygnus.com>
* except.c (prepare_eh_table_type): Use `CATCH_ALL_TYPE'.
2000-06-20 Alexandre Petit-Bianco <apbianco@cygnus.com>
* check-init.c (ENABLE_JC1_CHECKING): Replaces ENABLE_CHECKING for
Java specific checks.
* expr.c (build_instanceof): CLASS_INTERFACE and CLASS_FINAL usage
screened by DECL_P.
* java-tree.def (CASE_EXPR): Marked 'e'.
(DEFAULT_EXPR): Likewise.
* jcf-parse.c (set_source_filename): CLASS_COMPLETE_P usage
screened by DECL_P.
* jcf-write.c (ENABLE_JC1_CHECKING): Replaces ENABLE_CHECKING for
Java specific checks.
(generate_bytecode_insns): Test try_block for BLOCK before using
BLOCK_EXPR_BODY.
* parse.y (build_wfl_wrap): Added `location' argument. Set
EXPR_WFL_LINECOL accordingly.
(dim_expr:): Wrap constants with WFLs.
(method_declarator): Use TREE_TYPE not TYPE_NAME on GET_CPC.
(resolve_package): Check for `stmt' not being a BLOCK before
building a debuggable statement with it.
(make_qualified_primary): Added extra parameter to build_wfl_wrap
invocation.
(resolve_field_access): Make sure `decl' is a DECL before treating
it as such.
(maybe_build_primttype_type_ref): Make sure `wfl''s node is an
IDENTIFIER_NODE before treating it as such.
(patch_new_array_init): Make sure `elt' is a TREE_LIST before
treating it as such.
(find_applicable_accessible_methods_list): CLASS_INTERFACE macro
to be applied only on non array types.
2000-06-16 Per Bothner <per@bothner.com>
* java-tree.h (LABEL_RETURN_LABELS, LABEL_PENDING_CHAIN): Don't
define in terms of DECL_RESULT, as that fails when --enable-checking.
2000-06-15 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* jcf-write.c (CHECK_PUT): Add static prototype. Make pointer
......@@ -19,6 +59,30 @@
* lang.c (lang_get_alias_set): Mark parameter with ATTRIBUTE_UNUSED.
2000-06-06 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.h (REGISTER_IMPORT): Use `chainon' to link new entries.
* parse.y (find_in_imports): Returned type changed to void,
leading comment fixed.
(register_package): New function.
(qualify_and_find): Likewise.
(package_declaration:): Use `register_package'.
(single_type_import_declaration:): Removed local variable
`node'. Added missing `;' for consistency.
(type_import_on_demand_declaration:): Use `chainon' to link new
entries.
(lookup_field_wrapper): Lookup local variables defined in outer
contexts first.
(java_complete_class): Don't reverse the list of imported on demand.
(do_resolve_class): Reorganized. Removed local variable
`original_name'. Call `qualify_and_find' with the current package
name, invoke `find_in_imports_on_demand' right after. Call
`qualify_and_find' with the packages we've seen so far. Fixed
operations numbering in comments.
(java_expand_class): Don't reverse `package_list'.
(find_most_specific_methods_list): New local variables `abstract'
and `candidates'. Use them to pick the right method.
Tue Jun 6 11:39:05 2000 Tom Tromey <tromey@ferrule.cygnus.com>
* parse.y (check_modifiers_consistency): Don't subtract out
......
......@@ -463,7 +463,7 @@ check_init (exp, before)
words tmp = ALLOC_WORDS (2 * num_current_words);
words when_true = tmp;
words when_false = tmp + num_current_words;
#ifdef ENABLE_CHECKING
#ifdef ENABLE_JC1_CHECKING
if (TREE_CODE (alt->block) != LOOP_EXPR)
fatal ("internal error in check-init: EXIT_EXPR not in LOOP_EXPR");
#endif
......@@ -534,7 +534,7 @@ check_init (exp, before)
case WITH_CLEANUP_EXPR:
{
struct alternatives *alt = alternatives;
#ifdef ENABLE_CHECKING
#ifdef ENABLE_JC1_CHECKING
if (TREE_CODE (alt->block) != CLEANUP_POINT_EXPR)
fatal ("internal error in check-init: WITH_CLEANUP_EXPR not in CLEANUP_POINT_EXPR");
#endif
......
......@@ -325,7 +325,7 @@ prepare_eh_table_type (type)
push_obstacks (&permanent_obstack, &permanent_obstack);
if (type == NULL_TREE)
exp = null_pointer_node;
exp = CATCH_ALL_TYPE;
else if (is_compiled_class (type))
exp = build_class_ref (type);
else
......
......@@ -1087,7 +1087,8 @@ build_instanceof (value, type)
value,
boolean_true_node, boolean_false_node);
}
else if (! CLASS_INTERFACE (valclass)
else if (DECL_P (klass) && DECL_P (valclass)
&& ! CLASS_INTERFACE (valclass)
&& ! CLASS_INTERFACE (klass)
&& ! inherits_from_p (type, valtype)
&& (CLASS_FINAL (klass)
......@@ -1097,7 +1098,7 @@ build_instanceof (value, type)
tree, so we immediately know the answer. */
expr = boolean_false_node;
}
else if (CLASS_FINAL (klass))
else if (DECL_P (klass) && CLASS_FINAL (klass))
{
tree save = save_expr (value);
expr = build (COND_EXPR, itype,
......
......@@ -42,10 +42,10 @@ DEFTREECODE (THIS_EXPR, "this", '1', 0)
/* Case statement expression.
Operand 1 is the case value. */
DEFTREECODE (CASE_EXPR, "case", 'x', 1)
DEFTREECODE (CASE_EXPR, "case", 'e', 1)
/* Default statement expression. */
DEFTREECODE (DEFAULT_EXPR, "default", 'x', 0)
DEFTREECODE (DEFAULT_EXPR, "default", 'e', 0)
/* Try expression
Operand 0 is the tried block,
......
......@@ -465,11 +465,12 @@ struct lang_identifier
#define RETURN_MAP_ADJUSTED(NODE) TREE_LANG_FLAG_2(NODE)
/* In the label of a sub-routine, a chain of the return location labels. */
#define LABEL_RETURN_LABELS(node) DECL_RESULT (LABEL_RETURN_LABEL(node))
#define LABEL_RETURN_LABELS(node) \
(LABEL_DECL_CHECK (LABEL_RETURN_LABEL(node))->decl.result)
/* In a LABEL_DECL, the next pending label.
See pending_blocks in expr.c. */
#define LABEL_PENDING_CHAIN(NODE) DECL_RESULT(NODE)
#define LABEL_PENDING_CHAIN(NODE) (LABEL_DECL_CHECK (NODE)->decl.result)
/* In a LABEL_DECL, the corresponding bytecode program counter. */
#define LABEL_PC(NODE) ((NODE)->decl.u2.i)
......
......@@ -193,7 +193,7 @@ set_source_filename (jcf, index)
while (c--) \
{ \
tree class = get_class_constant (jcf, JCF_readu2 (jcf)); \
if (!CLASS_COMPLETE_P (class)) \
if (DECL_P (class) && !CLASS_COMPLETE_P (class)) \
{ \
tree outer = TYPE_NAME (get_class_constant (jcf, \
JCF_readu2 (jcf))); \
......
......@@ -347,7 +347,7 @@ static void append_innerclasses_attribute_entry PARAMS ((struct jcf_partial *, t
We assume a local variable 'ptr' points into where we want to
write next, and we assume enoygh space has been allocated. */
#ifdef ENABLE_CHECKING
#ifdef ENABLE_JC1_CHECKING
static int CHECK_PUT PARAMS ((void *, struct jcf_partial *, int));
static int
......@@ -403,7 +403,7 @@ alloc_chunk (last, data, size, work)
return chunk;
}
#ifdef ENABLE_CHECKING
#ifdef ENABLE_JC1_CHECKING
static int CHECK_OP PARAMS ((struct jcf_partial *));
static int
......@@ -2358,6 +2358,7 @@ generate_bytecode_insns (exp, target, state)
}
if (CAN_COMPLETE_NORMALLY (try_block)
&& TREE_CODE (try_block) == BLOCK
&& BLOCK_EXPR_BODY (try_block) != empty_stmt_node)
emit_goto (finished_label, state);
......
......@@ -174,8 +174,9 @@ static void complete_class_report_errors PARAMS ((jdep *));
static int process_imports PARAMS ((void));
static void read_import_dir PARAMS ((tree));
static int find_in_imports_on_demand PARAMS ((tree));
static int find_in_imports PARAMS ((tree));
static void find_in_imports PARAMS ((tree));
static int check_pkg_class_access PARAMS ((tree, tree));
static void register_package PARAMS ((tree));
static tree resolve_package PARAMS ((tree, tree *));
static tree lookup_package_type PARAMS ((const char *, int));
static tree lookup_package_type_and_set_next PARAMS ((const char *, int, tree *));
......@@ -195,6 +196,7 @@ static tree patch_method_invocation PARAMS ((tree, tree, tree,
int *, tree *));
static int breakdown_qualified PARAMS ((tree *, tree *, tree));
static tree resolve_and_layout PARAMS ((tree, tree));
static tree qualify_and_find PARAMS ((tree, tree, tree));
static tree resolve_no_layout PARAMS ((tree, tree));
static int invocation_mode PARAMS ((tree, int));
static tree find_applicable_accessible_methods_list PARAMS ((int, tree,
......@@ -209,7 +211,7 @@ static tree lookup_method_invoke PARAMS ((int, tree, tree, tree, tree));
static tree register_incomplete_type PARAMS ((int, tree, tree, tree));
static tree obtain_incomplete_type PARAMS ((tree));
static tree java_complete_lhs PARAMS ((tree));
static tree java_complete_tree PARAMS ((tree));
tree java_complete_tree PARAMS ((tree));
static tree maybe_generate_pre_expand_clinit PARAMS ((tree));
static int maybe_yank_clinit PARAMS ((tree));
static void java_complete_expand_method PARAMS ((tree));
......@@ -255,7 +257,7 @@ static tree build_newarray_node PARAMS ((tree, tree, int));
static tree patch_newarray PARAMS ((tree));
static tree resolve_type_during_patch PARAMS ((tree));
static tree build_this PARAMS ((int));
static tree build_wfl_wrap PARAMS ((tree));
static tree build_wfl_wrap PARAMS ((tree, int));
static tree build_return PARAMS ((int, tree));
static tree patch_return PARAMS ((tree));
static tree maybe_access_field PARAMS ((tree, tree, tree));
......@@ -486,7 +488,7 @@ static tree package_list = NULL_TREE;
} while (0)
#line 415 "./parse.y"
#line 417 "./parse.y"
typedef union {
tree node;
int sub_token;
......@@ -496,7 +498,7 @@ typedef union {
} operator;
int value;
} YYSTYPE;
#line 425 "./parse.y"
#line 427 "./parse.y"
#include "lex.c"
#ifndef YYDEBUG
......@@ -797,57 +799,57 @@ static const short yyrhs[] = { 123,
#if YYDEBUG != 0
static const short yyrline[] = { 0,
574, 580, 582, 583, 584, 585, 586, 590, 592, 595,
597, 598, 601, 603, 606, 610, 614, 618, 624, 626,
628, 630, 635, 637, 640, 644, 649, 654, 656, 657,
658, 659, 660, 661, 662, 665, 670, 676, 678, 681,
687, 689, 693, 695, 698, 725, 727, 731, 744, 746,
750, 753, 755, 757, 767, 772, 787, 791, 791, 794,
794, 796, 798, 803, 807, 809, 811, 813, 817, 819,
821, 828, 834, 839, 843, 852, 862, 864, 867, 869,
870, 871, 878, 880, 882, 883, 885, 890, 893, 903,
906, 908, 912, 915, 922, 928, 936, 938, 940, 942,
944, 948, 950, 954, 965, 966, 970, 973, 975, 977,
979, 984, 986, 988, 990, 997, 1003, 1005, 1014, 1016,
1020, 1025, 1030, 1034, 1039, 1044, 1049, 1056, 1066, 1068,
1070, 1074, 1077, 1079, 1083, 1085, 1086, 1091, 1097, 1104,
1120, 1127, 1130, 1133, 1137, 1143, 1147, 1156, 1158, 1160,
1164, 1166, 1169, 1176, 1184, 1186, 1190, 1197, 1207, 1211,
1211, 1214, 1214, 1217, 1217, 1220, 1220, 1222, 1226, 1232,
1237, 1239, 1243, 1246, 1250, 1252, 1255, 1257, 1258, 1260,
1264, 1268, 1274, 1279, 1282, 1284, 1288, 1294, 1298, 1303,
1312, 1316, 1321, 1335, 1337, 1340, 1342, 1344, 1351, 1355,
1358, 1362, 1364, 1365, 1366, 1367, 1368, 1372, 1374, 1375,
1376, 1377, 1381, 1383, 1384, 1385, 1386, 1387, 1388, 1389,
1390, 1391, 1392, 1395, 1400, 1411, 1414, 1418, 1425, 1435,
1441, 1447, 1453, 1455, 1460, 1462, 1467, 1469, 1471, 1473,
1475, 1479, 1481, 1482, 1483, 1484, 1485, 1486, 1489, 1495,
1497, 1499, 1503, 1508, 1513, 1519, 1529, 1535, 1537, 1539,
1546, 1549, 1551, 1553, 1557, 1559, 1562, 1566, 1568, 1571,
1578, 1584, 1586, 1588, 1592, 1600, 1603, 1605, 1607, 1611,
1616, 1625, 1630, 1633, 1640, 1642, 1644, 1648, 1651, 1660,
1667, 1669, 1673, 1686, 1688, 1694, 1700, 1704, 1706, 1710,
1713, 1715, 1719, 1722, 1724, 1726, 1730, 1733, 1735, 1737,
1741, 1744, 1746, 1748, 1752, 1758, 1760, 1764, 1771, 1773,
1775, 1777, 1781, 1793, 1796, 1798, 1803, 1807, 1809, 1816,
1824, 1841, 1843, 1848, 1852, 1855, 1860, 1862, 1865, 1867,
1869, 1871, 1872, 1873, 1874, 1875, 1879, 1884, 1886, 1888,
1890, 1897, 1903, 1912, 1915, 1917, 1919, 1923, 1926, 1928,
1932, 1938, 1939, 1945, 1946, 1948, 1950, 1952, 1954, 1956,
1965, 1969, 1999, 2002, 2016, 2019, 2023, 2029, 2034, 2038,
2041, 2043, 2045, 2049, 2058, 2066, 2068, 2072, 2075, 2079,
2085, 2087, 2095, 2122, 2124, 2128, 2133, 2140, 2144, 2147,
2149, 2160, 2171, 2176, 2185, 2187, 2191, 2194, 2196, 2201,
2206, 2211, 2218, 2220, 2221, 2222, 2225, 2230, 2235, 2237,
2238, 2240, 2242, 2243, 2245, 2249, 2252, 2256, 2259, 2263,
2265, 2267, 2269, 2270, 2272, 2276, 2285, 2287, 2289, 2302,
2304, 2310, 2312, 2314, 2318, 2320, 2325, 2330, 2335, 2337,
2339, 2343, 2345, 2350, 2355, 2357, 2361, 2363, 2368, 2373,
2378, 2380, 2382, 2386, 2388, 2393, 2398, 2403, 2408, 2410,
2412, 2414, 2416, 2418, 2422, 2424, 2429, 2434, 2436, 2440,
2442, 2447, 2451, 2453, 2458, 2462, 2464, 2469, 2473, 2475,
2480, 2484, 2486, 2491, 2495, 2497, 2502, 2508, 2510, 2514,
2516, 2519, 2522, 2530, 2532, 2533, 2536, 2538, 2541, 2545
576, 582, 584, 585, 586, 587, 588, 592, 594, 597,
599, 600, 603, 605, 608, 612, 616, 620, 626, 628,
630, 632, 637, 639, 642, 646, 651, 656, 658, 659,
660, 661, 662, 663, 664, 667, 672, 678, 680, 683,
689, 691, 695, 697, 700, 727, 729, 733, 746, 748,
752, 755, 757, 759, 769, 774, 789, 793, 793, 796,
796, 798, 800, 805, 809, 811, 813, 815, 819, 821,
823, 830, 836, 841, 845, 854, 864, 866, 869, 871,
872, 873, 880, 882, 884, 885, 887, 892, 895, 905,
908, 910, 914, 917, 924, 930, 938, 940, 942, 944,
946, 950, 952, 956, 967, 968, 972, 975, 977, 979,
981, 986, 988, 990, 992, 999, 1005, 1007, 1016, 1018,
1022, 1027, 1032, 1036, 1041, 1046, 1051, 1058, 1068, 1070,
1072, 1076, 1079, 1081, 1085, 1087, 1088, 1093, 1099, 1106,
1122, 1129, 1132, 1135, 1139, 1145, 1149, 1158, 1160, 1162,
1166, 1168, 1171, 1178, 1186, 1188, 1192, 1199, 1209, 1213,
1213, 1216, 1216, 1219, 1219, 1222, 1222, 1224, 1228, 1234,
1239, 1241, 1245, 1248, 1252, 1254, 1257, 1259, 1260, 1262,
1266, 1270, 1276, 1281, 1284, 1286, 1290, 1296, 1300, 1305,
1314, 1318, 1323, 1337, 1339, 1342, 1344, 1346, 1353, 1357,
1360, 1364, 1366, 1367, 1368, 1369, 1370, 1374, 1376, 1377,
1378, 1379, 1383, 1385, 1386, 1387, 1388, 1389, 1390, 1391,
1392, 1393, 1394, 1397, 1402, 1413, 1416, 1420, 1427, 1437,
1443, 1449, 1455, 1457, 1462, 1464, 1469, 1471, 1473, 1475,
1477, 1481, 1483, 1484, 1485, 1486, 1487, 1488, 1491, 1497,
1499, 1501, 1505, 1510, 1515, 1521, 1531, 1537, 1539, 1541,
1548, 1551, 1553, 1555, 1559, 1561, 1564, 1568, 1570, 1573,
1580, 1586, 1588, 1590, 1594, 1602, 1605, 1607, 1609, 1613,
1618, 1627, 1632, 1635, 1642, 1644, 1646, 1650, 1653, 1662,
1669, 1671, 1675, 1688, 1690, 1696, 1702, 1706, 1708, 1712,
1715, 1717, 1721, 1724, 1726, 1728, 1732, 1735, 1737, 1739,
1743, 1746, 1748, 1750, 1754, 1760, 1762, 1766, 1773, 1775,
1777, 1779, 1783, 1795, 1798, 1800, 1805, 1809, 1811, 1818,
1826, 1843, 1845, 1850, 1854, 1857, 1862, 1864, 1867, 1869,
1871, 1873, 1874, 1875, 1876, 1877, 1881, 1886, 1888, 1890,
1892, 1899, 1905, 1914, 1917, 1919, 1921, 1925, 1928, 1930,
1934, 1940, 1941, 1947, 1948, 1950, 1952, 1954, 1956, 1958,
1967, 1971, 2001, 2004, 2018, 2021, 2025, 2031, 2036, 2040,
2043, 2045, 2047, 2051, 2060, 2068, 2070, 2074, 2077, 2081,
2092, 2094, 2102, 2129, 2131, 2135, 2140, 2147, 2151, 2154,
2156, 2167, 2178, 2183, 2192, 2194, 2198, 2201, 2203, 2208,
2213, 2218, 2225, 2227, 2228, 2229, 2232, 2237, 2242, 2244,
2245, 2247, 2249, 2250, 2252, 2256, 2259, 2263, 2266, 2270,
2272, 2274, 2276, 2277, 2279, 2283, 2292, 2294, 2296, 2309,
2311, 2317, 2319, 2321, 2325, 2327, 2332, 2337, 2342, 2344,
2346, 2350, 2352, 2357, 2362, 2364, 2368, 2370, 2375, 2380,
2385, 2387, 2389, 2393, 2395, 2400, 2405, 2410, 2415, 2417,
2419, 2421, 2423, 2425, 2429, 2431, 2436, 2441, 2443, 2447,
2449, 2454, 2458, 2460, 2465, 2469, 2471, 2476, 2480, 2482,
2487, 2491, 2493, 2498, 2502, 2504, 2509, 2515, 2517, 2521,
2523, 2526, 2529, 2537, 2539, 2540, 2543, 2545, 2548, 2552
};
#endif
......@@ -2930,71 +2932,71 @@ yyreduce:
switch (yyn) {
case 1:
#line 576 "./parse.y"
#line 578 "./parse.y"
{;
break;}
case 18:
#line 620 "./parse.y"
#line 622 "./parse.y"
{
yyval.node = build_java_array_type (yyvsp[-2].node, -1);
CLASS_LOADED_P (yyval.node) = 1;
;
break;}
case 19:
#line 625 "./parse.y"
#line 627 "./parse.y"
{ yyval.node = build_unresolved_array_type (yyvsp[-2].node); ;
break;}
case 20:
#line 627 "./parse.y"
#line 629 "./parse.y"
{ yyval.node = build_unresolved_array_type (yyvsp[-2].node); ;
break;}
case 21:
#line 629 "./parse.y"
#line 631 "./parse.y"
{RULE ("']' expected"); RECOVER;;
break;}
case 22:
#line 631 "./parse.y"
#line 633 "./parse.y"
{RULE ("']' expected"); RECOVER;;
break;}
case 26:
#line 646 "./parse.y"
#line 648 "./parse.y"
{ yyval.node = make_qualified_name (yyvsp[-2].node, yyvsp[0].node, yyvsp[-1].operator.location); ;
break;}
case 28:
#line 655 "./parse.y"
#line 657 "./parse.y"
{yyval.node = NULL;;
break;}
case 36:
#line 667 "./parse.y"
#line 669 "./parse.y"
{
yyval.node = NULL;
;
break;}
case 37:
#line 671 "./parse.y"
#line 673 "./parse.y"
{
yyval.node = NULL;
;
break;}
case 40:
#line 683 "./parse.y"
#line 685 "./parse.y"
{
ctxp->package = EXPR_WFL_NODE (yyvsp[-1].node);
package_list = tree_cons (ctxp->package, NULL, package_list);
register_package (ctxp->package);
;
break;}
case 41:
#line 688 "./parse.y"
#line 690 "./parse.y"
{yyerror ("Missing name"); RECOVER;;
break;}
case 42:
#line 690 "./parse.y"
#line 692 "./parse.y"
{yyerror ("';' expected"); RECOVER;;
break;}
case 45:
#line 700 "./parse.y"
#line 702 "./parse.y"
{
tree name = EXPR_WFL_NODE (yyvsp[-1].node), node, last_name;
tree name = EXPR_WFL_NODE (yyvsp[-1].node), last_name;
int i = IDENTIFIER_LENGTH (name)-1;
const char *last = &IDENTIFIER_POINTER (name)[i];
while (last != IDENTIFIER_POINTER (name))
......@@ -3013,69 +3015,69 @@ case 45:
IDENTIFIER_POINTER (name),
IDENTIFIER_POINTER (err));
else
REGISTER_IMPORT (yyvsp[-1].node, last_name)
REGISTER_IMPORT (yyvsp[-1].node, last_name);
}
else
REGISTER_IMPORT (yyvsp[-1].node, last_name);
;
break;}
case 46:
#line 726 "./parse.y"
#line 728 "./parse.y"
{yyerror ("Missing name"); RECOVER;;
break;}
case 47:
#line 728 "./parse.y"
#line 730 "./parse.y"
{yyerror ("';' expected"); RECOVER;;
break;}
case 48:
#line 733 "./parse.y"
#line 735 "./parse.y"
{
tree name = EXPR_WFL_NODE (yyvsp[-3].node);
/* Don't import java.lang.* twice. */
if (name != java_lang_id)
{
tree node = build_tree_list (yyvsp[-3].node, NULL_TREE);
read_import_dir (yyvsp[-3].node);
TREE_CHAIN (node) = ctxp->import_demand_list;
ctxp->import_demand_list = node;
ctxp->import_demand_list =
chainon (ctxp->import_demand_list,
build_tree_list (yyvsp[-3].node, NULL_TREE));
}
;
break;}
case 49:
#line 745 "./parse.y"
#line 747 "./parse.y"
{yyerror ("'*' expected"); RECOVER;;
break;}
case 50:
#line 747 "./parse.y"
#line 749 "./parse.y"
{yyerror ("';' expected"); RECOVER;;
break;}
case 51:
#line 752 "./parse.y"
#line 754 "./parse.y"
{ end_class_declaration (0); ;
break;}
case 52:
#line 754 "./parse.y"
#line 756 "./parse.y"
{ end_class_declaration (0); ;
break;}
case 53:
#line 756 "./parse.y"
#line 758 "./parse.y"
{ yyval.node = NULL; ;
break;}
case 54:
#line 758 "./parse.y"
#line 760 "./parse.y"
{
YYERROR_NOW;
yyerror ("Class or interface declaration expected");
;
break;}
case 55:
#line 769 "./parse.y"
#line 771 "./parse.y"
{
yyval.value = (1 << yyvsp[0].value);
;
break;}
case 56:
#line 773 "./parse.y"
#line 775 "./parse.y"
{
int acc = (1 << yyvsp[0].value);
if (yyval.value & acc)
......@@ -3089,83 +3091,83 @@ case 56:
;
break;}
case 57:
#line 789 "./parse.y"
#line 791 "./parse.y"
{ create_class (yyvsp[-4].value, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ;
break;}
case 59:
#line 792 "./parse.y"
#line 794 "./parse.y"
{ create_class (0, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ;
break;}
case 61:
#line 795 "./parse.y"
#line 797 "./parse.y"
{yyerror ("Missing class name"); RECOVER;;
break;}
case 62:
#line 797 "./parse.y"
#line 799 "./parse.y"
{yyerror ("Missing class name"); RECOVER;;
break;}
case 63:
#line 799 "./parse.y"
#line 801 "./parse.y"
{
if (!ctxp->class_err) yyerror ("'{' expected");
DRECOVER(class1);
;
break;}
case 64:
#line 804 "./parse.y"
#line 806 "./parse.y"
{if (!ctxp->class_err) yyerror ("'{' expected"); RECOVER;;
break;}
case 65:
#line 808 "./parse.y"
#line 810 "./parse.y"
{ yyval.node = NULL; ;
break;}
case 66:
#line 810 "./parse.y"
#line 812 "./parse.y"
{ yyval.node = yyvsp[0].node; ;
break;}
case 67:
#line 812 "./parse.y"
#line 814 "./parse.y"
{yyerror ("'{' expected"); ctxp->class_err=1;;
break;}
case 68:
#line 814 "./parse.y"
#line 816 "./parse.y"
{yyerror ("Missing super class name"); ctxp->class_err=1;;
break;}
case 69:
#line 818 "./parse.y"
#line 820 "./parse.y"
{ yyval.node = NULL_TREE; ;
break;}
case 70:
#line 820 "./parse.y"
#line 822 "./parse.y"
{ yyval.node = yyvsp[0].node; ;
break;}
case 71:
#line 822 "./parse.y"
#line 824 "./parse.y"
{
ctxp->class_err=1;
yyerror ("Missing interface name");
;
break;}
case 72:
#line 830 "./parse.y"
#line 832 "./parse.y"
{
ctxp->interface_number = 1;
yyval.node = build_tree_list (yyvsp[0].node, NULL_TREE);
;
break;}
case 73:
#line 835 "./parse.y"
#line 837 "./parse.y"
{
ctxp->interface_number++;
yyval.node = chainon (yyvsp[-2].node, build_tree_list (yyvsp[0].node, NULL_TREE));
;
break;}
case 74:
#line 840 "./parse.y"
#line 842 "./parse.y"
{yyerror ("Missing interface name"); RECOVER;;
break;}
case 75:
#line 845 "./parse.y"
#line 847 "./parse.y"
{
/* Store the location of the `}' when doing xrefs */
if (flag_emit_xref)
......@@ -3175,7 +3177,7 @@ case 75:
;
break;}
case 76:
#line 853 "./parse.y"
#line 855 "./parse.y"
{
/* Store the location of the `}' when doing xrefs */
if (flag_emit_xref)
......@@ -3185,30 +3187,30 @@ case 76:
;
break;}
case 82:
#line 872 "./parse.y"
#line 874 "./parse.y"
{
TREE_CHAIN (yyvsp[0].node) = CPC_INSTANCE_INITIALIZER_STMT (ctxp);
SET_CPC_INSTANCE_INITIALIZER_STMT (ctxp, yyvsp[0].node);
;
break;}
case 84:
#line 881 "./parse.y"
#line 883 "./parse.y"
{ yyval.node = yyvsp[-1].node; ;
break;}
case 86:
#line 884 "./parse.y"
#line 886 "./parse.y"
{ end_class_declaration (1); ;
break;}
case 87:
#line 886 "./parse.y"
#line 888 "./parse.y"
{ end_class_declaration (1); ;
break;}
case 88:
#line 892 "./parse.y"
#line 894 "./parse.y"
{ register_fields (0, yyvsp[-2].node, yyvsp[-1].node); ;
break;}
case 89:
#line 894 "./parse.y"
#line 896 "./parse.y"
{
check_modifiers
("Illegal modifier `%s' for field declaration",
......@@ -3218,19 +3220,19 @@ case 89:
;
break;}
case 91:
#line 907 "./parse.y"
#line 909 "./parse.y"
{ yyval.node = chainon (yyvsp[-2].node, yyvsp[0].node); ;
break;}
case 92:
#line 909 "./parse.y"
#line 911 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 93:
#line 914 "./parse.y"
#line 916 "./parse.y"
{ yyval.node = build_tree_list (yyvsp[0].node, NULL_TREE); ;
break;}
case 94:
#line 916 "./parse.y"
#line 918 "./parse.y"
{
if (java_error_count)
yyvsp[0].node = NULL_TREE;
......@@ -3239,7 +3241,7 @@ case 94:
;
break;}
case 95:
#line 923 "./parse.y"
#line 925 "./parse.y"
{
yyerror ("Missing variable initializer");
yyval.node = build_tree_list (yyvsp[-2].node, NULL_TREE);
......@@ -3247,7 +3249,7 @@ case 95:
;
break;}
case 96:
#line 929 "./parse.y"
#line 931 "./parse.y"
{
yyerror ("';' expected");
yyval.node = build_tree_list (yyvsp[-3].node, NULL_TREE);
......@@ -3255,23 +3257,23 @@ case 96:
;
break;}
case 98:
#line 939 "./parse.y"
#line 941 "./parse.y"
{ yyval.node = build_unresolved_array_type (yyvsp[-2].node); ;
break;}
case 99:
#line 941 "./parse.y"
#line 943 "./parse.y"
{yyerror ("Invalid declaration"); DRECOVER(vdi);;
break;}
case 100:
#line 943 "./parse.y"
#line 945 "./parse.y"
{yyerror ("']' expected"); DRECOVER(vdi);;
break;}
case 101:
#line 945 "./parse.y"
#line 947 "./parse.y"
{yyerror ("Unbalanced ']'"); DRECOVER(vdi);;
break;}
case 104:
#line 956 "./parse.y"
#line 958 "./parse.y"
{
current_function_decl = yyvsp[0].node;
if (current_function_decl
......@@ -3282,68 +3284,68 @@ case 104:
;
break;}
case 105:
#line 965 "./parse.y"
#line 967 "./parse.y"
{ finish_method_declaration (yyvsp[0].node); ;
break;}
case 106:
#line 967 "./parse.y"
#line 969 "./parse.y"
{YYNOT_TWICE yyerror ("'{' expected"); RECOVER;;
break;}
case 107:
#line 972 "./parse.y"
#line 974 "./parse.y"
{ yyval.node = method_header (0, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ;
break;}
case 108:
#line 974 "./parse.y"
#line 976 "./parse.y"
{ yyval.node = method_header (0, void_type_node, yyvsp[-1].node, yyvsp[0].node); ;
break;}
case 109:
#line 976 "./parse.y"
#line 978 "./parse.y"
{ yyval.node = method_header (yyvsp[-3].value, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ;
break;}
case 110:
#line 978 "./parse.y"
#line 980 "./parse.y"
{ yyval.node = method_header (yyvsp[-3].value, void_type_node, yyvsp[-1].node, yyvsp[0].node); ;
break;}
case 111:
#line 980 "./parse.y"
#line 982 "./parse.y"
{
yyerror ("Invalid method declaration, method name required");
RECOVER;
;
break;}
case 112:
#line 985 "./parse.y"
#line 987 "./parse.y"
{RECOVER;;
break;}
case 113:
#line 987 "./parse.y"
#line 989 "./parse.y"
{yyerror ("Identifier expected"); RECOVER;;
break;}
case 114:
#line 989 "./parse.y"
#line 991 "./parse.y"
{yyerror ("Identifier expected"); RECOVER;;
break;}
case 115:
#line 991 "./parse.y"
#line 993 "./parse.y"
{
yyerror ("Invalid method declaration, return type required");
RECOVER;
;
break;}
case 116:
#line 999 "./parse.y"
#line 1001 "./parse.y"
{
ctxp->formal_parameter_number = 0;
yyval.node = method_declarator (yyvsp[-2].node, NULL_TREE);
;
break;}
case 117:
#line 1004 "./parse.y"
#line 1006 "./parse.y"
{ yyval.node = method_declarator (yyvsp[-3].node, yyvsp[-1].node); ;
break;}
case 118:
#line 1006 "./parse.y"
#line 1008 "./parse.y"
{
EXPR_WFL_LINECOL (wfl_operator) = yyvsp[-1].operator.location;
TREE_PURPOSE (yyvsp[-2].node) =
......@@ -3354,59 +3356,59 @@ case 118:
;
break;}
case 119:
#line 1015 "./parse.y"
#line 1017 "./parse.y"
{yyerror ("')' expected"); DRECOVER(method_declarator);;
break;}
case 120:
#line 1017 "./parse.y"
#line 1019 "./parse.y"
{yyerror ("']' expected"); RECOVER;;
break;}
case 121:
#line 1022 "./parse.y"
#line 1024 "./parse.y"
{
ctxp->formal_parameter_number = 1;
;
break;}
case 122:
#line 1026 "./parse.y"
#line 1028 "./parse.y"
{
ctxp->formal_parameter_number += 1;
yyval.node = chainon (yyvsp[-2].node, yyvsp[0].node);
;
break;}
case 123:
#line 1031 "./parse.y"
#line 1033 "./parse.y"
{ yyerror ("Missing formal parameter term"); RECOVER; ;
break;}
case 124:
#line 1036 "./parse.y"
#line 1038 "./parse.y"
{
yyval.node = build_tree_list (yyvsp[0].node, yyvsp[-1].node);
;
break;}
case 125:
#line 1040 "./parse.y"
#line 1042 "./parse.y"
{
yyval.node = build_tree_list (yyvsp[0].node, yyvsp[-1].node);
ARG_FINAL_P (yyval.node) = 1;
;
break;}
case 126:
#line 1045 "./parse.y"
#line 1047 "./parse.y"
{
yyerror ("Missing identifier"); RECOVER;
yyval.node = NULL_TREE;
;
break;}
case 127:
#line 1050 "./parse.y"
#line 1052 "./parse.y"
{
yyerror ("Missing identifier"); RECOVER;
yyval.node = NULL_TREE;
;
break;}
case 128:
#line 1058 "./parse.y"
#line 1060 "./parse.y"
{
check_modifiers ("Illegal modifier `%s'. Only `final' was expected here",
yyvsp[0].value, ACC_FINAL);
......@@ -3415,49 +3417,49 @@ case 128:
;
break;}
case 129:
#line 1067 "./parse.y"
#line 1069 "./parse.y"
{ yyval.node = NULL_TREE; ;
break;}
case 130:
#line 1069 "./parse.y"
#line 1071 "./parse.y"
{ yyval.node = yyvsp[0].node; ;
break;}
case 131:
#line 1071 "./parse.y"
#line 1073 "./parse.y"
{yyerror ("Missing class type term"); RECOVER;;
break;}
case 132:
#line 1076 "./parse.y"
#line 1078 "./parse.y"
{ yyval.node = build_tree_list (yyvsp[0].node, yyvsp[0].node); ;
break;}
case 133:
#line 1078 "./parse.y"
#line 1080 "./parse.y"
{ yyval.node = tree_cons (yyvsp[0].node, yyvsp[0].node, yyvsp[-2].node); ;
break;}
case 134:
#line 1080 "./parse.y"
#line 1082 "./parse.y"
{yyerror ("Missing class type term"); RECOVER;;
break;}
case 137:
#line 1087 "./parse.y"
#line 1089 "./parse.y"
{ yyval.node = NULL_TREE; ;
break;}
case 138:
#line 1093 "./parse.y"
#line 1095 "./parse.y"
{
TREE_CHAIN (yyvsp[0].node) = CPC_STATIC_INITIALIZER_STMT (ctxp);
SET_CPC_STATIC_INITIALIZER_STMT (ctxp, yyvsp[0].node);
;
break;}
case 139:
#line 1098 "./parse.y"
#line 1100 "./parse.y"
{
TREE_CHAIN (yyvsp[-1].node) = CPC_STATIC_INITIALIZER_STMT (ctxp);
SET_CPC_STATIC_INITIALIZER_STMT (ctxp, yyvsp[-1].node);
;
break;}
case 140:
#line 1106 "./parse.y"
#line 1108 "./parse.y"
{
check_modifiers ("Illegal modifier `%s' for static initializer", yyvsp[0].value, ACC_STATIC);
/* Can't have a static initializer in an innerclass */
......@@ -3471,56 +3473,56 @@ case 140:
;
break;}
case 141:
#line 1122 "./parse.y"
#line 1124 "./parse.y"
{
current_function_decl = yyvsp[0].node;
source_start_java_method (current_function_decl);
;
break;}
case 142:
#line 1127 "./parse.y"
#line 1129 "./parse.y"
{ finish_method_declaration (yyvsp[0].node); ;
break;}
case 143:
#line 1132 "./parse.y"
#line 1134 "./parse.y"
{ yyval.node = method_header (0, NULL_TREE, yyvsp[-1].node, yyvsp[0].node); ;
break;}
case 144:
#line 1134 "./parse.y"
#line 1136 "./parse.y"
{ yyval.node = method_header (yyvsp[-2].value, NULL_TREE, yyvsp[-1].node, yyvsp[0].node); ;
break;}
case 145:
#line 1139 "./parse.y"
#line 1141 "./parse.y"
{
ctxp->formal_parameter_number = 0;
yyval.node = method_declarator (yyvsp[-2].node, NULL_TREE);
;
break;}
case 146:
#line 1144 "./parse.y"
#line 1146 "./parse.y"
{ yyval.node = method_declarator (yyvsp[-3].node, yyvsp[-1].node); ;
break;}
case 147:
#line 1152 "./parse.y"
#line 1154 "./parse.y"
{
BLOCK_EXPR_BODY (yyvsp[0].node) = empty_stmt_node;
yyval.node = yyvsp[0].node;
;
break;}
case 148:
#line 1157 "./parse.y"
#line 1159 "./parse.y"
{ yyval.node = yyvsp[0].node; ;
break;}
case 149:
#line 1159 "./parse.y"
#line 1161 "./parse.y"
{ yyval.node = yyvsp[0].node; ;
break;}
case 150:
#line 1161 "./parse.y"
#line 1163 "./parse.y"
{ yyval.node = yyvsp[0].node; ;
break;}
case 153:
#line 1171 "./parse.y"
#line 1173 "./parse.y"
{
yyval.node = build_method_invocation (yyvsp[-3].node, NULL_TREE);
yyval.node = build_debugable_stmt (EXPR_WFL_LINECOL (yyvsp[-3].node), yyval.node);
......@@ -3528,7 +3530,7 @@ case 153:
;
break;}
case 154:
#line 1177 "./parse.y"
#line 1179 "./parse.y"
{
yyval.node = build_method_invocation (yyvsp[-4].node, yyvsp[-2].node);
yyval.node = build_debugable_stmt (EXPR_WFL_LINECOL (yyvsp[-4].node), yyval.node);
......@@ -3536,15 +3538,15 @@ case 154:
;
break;}
case 155:
#line 1185 "./parse.y"
#line 1187 "./parse.y"
{yyval.node = parse_jdk1_1_error ("explicit constructor invocation"); ;
break;}
case 156:
#line 1187 "./parse.y"
#line 1189 "./parse.y"
{yyval.node = parse_jdk1_1_error ("explicit constructor invocation"); ;
break;}
case 157:
#line 1192 "./parse.y"
#line 1194 "./parse.y"
{
tree wfl = build_wfl_node (this_identifier_node);
EXPR_WFL_LINECOL (wfl) = yyvsp[0].operator.location;
......@@ -3552,7 +3554,7 @@ case 157:
;
break;}
case 158:
#line 1198 "./parse.y"
#line 1200 "./parse.y"
{
tree wfl = build_wfl_node (super_identifier_node);
EXPR_WFL_LINECOL (wfl) = yyvsp[0].operator.location;
......@@ -3560,109 +3562,109 @@ case 158:
;
break;}
case 159:
#line 1209 "./parse.y"
#line 1211 "./parse.y"
{ create_interface (0, yyvsp[0].node, NULL_TREE); ;
break;}
case 161:
#line 1212 "./parse.y"
#line 1214 "./parse.y"
{ create_interface (yyvsp[-2].value, yyvsp[0].node, NULL_TREE); ;
break;}
case 163:
#line 1215 "./parse.y"
#line 1217 "./parse.y"
{ create_interface (0, yyvsp[-1].node, yyvsp[0].node); ;
break;}
case 165:
#line 1218 "./parse.y"
#line 1220 "./parse.y"
{ create_interface (yyvsp[-3].value, yyvsp[-1].node, yyvsp[0].node); ;
break;}
case 167:
#line 1221 "./parse.y"
#line 1223 "./parse.y"
{yyerror ("'{' expected"); RECOVER;;
break;}
case 168:
#line 1223 "./parse.y"
#line 1225 "./parse.y"
{yyerror ("'{' expected"); RECOVER;;
break;}
case 169:
#line 1228 "./parse.y"
#line 1230 "./parse.y"
{
ctxp->interface_number = 1;
yyval.node = build_tree_list (yyvsp[0].node, NULL_TREE);
;
break;}
case 170:
#line 1233 "./parse.y"
#line 1235 "./parse.y"
{
ctxp->interface_number++;
yyval.node = chainon (yyvsp[-2].node, build_tree_list (yyvsp[0].node, NULL_TREE));
;
break;}
case 171:
#line 1238 "./parse.y"
#line 1240 "./parse.y"
{yyerror ("Invalid interface type"); RECOVER;;
break;}
case 172:
#line 1240 "./parse.y"
#line 1242 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 173:
#line 1245 "./parse.y"
#line 1247 "./parse.y"
{ yyval.node = NULL_TREE; ;
break;}
case 174:
#line 1247 "./parse.y"
#line 1249 "./parse.y"
{ yyval.node = NULL_TREE; ;
break;}
case 179:
#line 1259 "./parse.y"
#line 1261 "./parse.y"
{ end_class_declaration (1); ;
break;}
case 180:
#line 1261 "./parse.y"
#line 1263 "./parse.y"
{ end_class_declaration (1); ;
break;}
case 182:
#line 1270 "./parse.y"
#line 1272 "./parse.y"
{
check_abstract_method_header (yyvsp[-1].node);
current_function_decl = NULL_TREE; /* FIXME ? */
;
break;}
case 183:
#line 1275 "./parse.y"
#line 1277 "./parse.y"
{yyerror ("';' expected"); RECOVER;;
break;}
case 184:
#line 1281 "./parse.y"
#line 1283 "./parse.y"
{ yyval.node = build_new_array_init (yyvsp[-1].operator.location, NULL_TREE); ;
break;}
case 185:
#line 1283 "./parse.y"
#line 1285 "./parse.y"
{ yyval.node = build_new_array_init (yyvsp[-2].operator.location, yyvsp[-1].node); ;
break;}
case 186:
#line 1285 "./parse.y"
#line 1287 "./parse.y"
{ yyval.node = build_new_array_init (yyvsp[-3].operator.location, yyvsp[-2].node); ;
break;}
case 187:
#line 1290 "./parse.y"
#line 1292 "./parse.y"
{
yyval.node = tree_cons (maybe_build_array_element_wfl (yyvsp[0].node),
yyvsp[0].node, NULL_TREE);
;
break;}
case 188:
#line 1295 "./parse.y"
#line 1297 "./parse.y"
{
yyval.node = tree_cons (maybe_build_array_element_wfl (yyvsp[0].node), yyvsp[0].node, yyvsp[-2].node);
;
break;}
case 189:
#line 1299 "./parse.y"
#line 1301 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 190:
#line 1305 "./parse.y"
#line 1307 "./parse.y"
{
/* Store the location of the `}' when doing xrefs */
if (current_function_decl && flag_emit_xref)
......@@ -3672,15 +3674,15 @@ case 190:
;
break;}
case 191:
#line 1313 "./parse.y"
#line 1315 "./parse.y"
{ yyval.node = yyvsp[0].node; ;
break;}
case 192:
#line 1318 "./parse.y"
#line 1320 "./parse.y"
{ enter_block (); ;
break;}
case 193:
#line 1323 "./parse.y"
#line 1325 "./parse.y"
{
maybe_absorb_scoping_blocks ();
/* Store the location of the `}' when doing xrefs */
......@@ -3693,38 +3695,38 @@ case 193:
;
break;}
case 197:
#line 1343 "./parse.y"
#line 1345 "./parse.y"
{ java_method_add_stmt (current_function_decl, yyvsp[0].node); ;
break;}
case 198:
#line 1345 "./parse.y"
#line 1347 "./parse.y"
{
LOCAL_CLASS_P (TREE_TYPE (GET_CPC ())) = 1;
end_class_declaration (1);
;
break;}
case 200:
#line 1357 "./parse.y"
#line 1359 "./parse.y"
{ declare_local_variables (0, yyvsp[-1].node, yyvsp[0].node); ;
break;}
case 201:
#line 1359 "./parse.y"
#line 1361 "./parse.y"
{ declare_local_variables (yyvsp[-2].value, yyvsp[-1].node, yyvsp[0].node); ;
break;}
case 207:
#line 1369 "./parse.y"
#line 1371 "./parse.y"
{ yyval.node = exit_block (); ;
break;}
case 212:
#line 1378 "./parse.y"
#line 1380 "./parse.y"
{ yyval.node = exit_block (); ;
break;}
case 224:
#line 1397 "./parse.y"
#line 1399 "./parse.y"
{ yyval.node = empty_stmt_node; ;
break;}
case 225:
#line 1402 "./parse.y"
#line 1404 "./parse.y"
{
yyval.node = build_labeled_block (EXPR_WFL_LINECOL (yyvsp[-1].node),
EXPR_WFL_NODE (yyvsp[-1].node));
......@@ -3734,19 +3736,19 @@ case 225:
;
break;}
case 226:
#line 1413 "./parse.y"
#line 1415 "./parse.y"
{ yyval.node = finish_labeled_statement (yyvsp[-1].node, yyvsp[0].node); ;
break;}
case 227:
#line 1415 "./parse.y"
#line 1417 "./parse.y"
{yyerror ("':' expected"); RECOVER;;
break;}
case 228:
#line 1420 "./parse.y"
#line 1422 "./parse.y"
{ yyval.node = finish_labeled_statement (yyvsp[-1].node, yyvsp[0].node); ;
break;}
case 229:
#line 1427 "./parse.y"
#line 1429 "./parse.y"
{
/* We have a statement. Generate a WFL around it so
we can debug it */
......@@ -3757,7 +3759,7 @@ case 229:
;
break;}
case 230:
#line 1436 "./parse.y"
#line 1438 "./parse.y"
{
if (ctxp->prevent_ese != lineno)
yyerror ("Invalid expression statement");
......@@ -3765,7 +3767,7 @@ case 230:
;
break;}
case 231:
#line 1442 "./parse.y"
#line 1444 "./parse.y"
{
if (ctxp->prevent_ese != lineno)
yyerror ("Invalid expression statement");
......@@ -3773,7 +3775,7 @@ case 231:
;
break;}
case 232:
#line 1448 "./parse.y"
#line 1450 "./parse.y"
{
if (ctxp->prevent_ese != lineno)
yyerror ("Invalid expression statement");
......@@ -3781,82 +3783,82 @@ case 232:
;
break;}
case 233:
#line 1454 "./parse.y"
#line 1456 "./parse.y"
{yyerror ("')' expected"); RECOVER;;
break;}
case 234:
#line 1456 "./parse.y"
#line 1458 "./parse.y"
{
parse_ctor_invocation_error ();
RECOVER;
;
break;}
case 235:
#line 1461 "./parse.y"
#line 1463 "./parse.y"
{yyerror ("')' expected"); RECOVER;;
break;}
case 236:
#line 1463 "./parse.y"
#line 1465 "./parse.y"
{
parse_ctor_invocation_error ();
RECOVER;
;
break;}
case 237:
#line 1468 "./parse.y"
#line 1470 "./parse.y"
{yyerror ("'(' expected"); RECOVER;;
break;}
case 238:
#line 1470 "./parse.y"
#line 1472 "./parse.y"
{yyerror ("')' expected"); RECOVER;;
break;}
case 239:
#line 1472 "./parse.y"
#line 1474 "./parse.y"
{yyerror ("')' expected"); RECOVER;;
break;}
case 240:
#line 1474 "./parse.y"
#line 1476 "./parse.y"
{yyerror ("';' expected"); RECOVER;;
break;}
case 241:
#line 1476 "./parse.y"
#line 1478 "./parse.y"
{yyerror ("';' expected"); RECOVER;;
break;}
case 249:
#line 1491 "./parse.y"
#line 1493 "./parse.y"
{
yyval.node = build_if_else_statement (yyvsp[-3].operator.location, yyvsp[-2].node,
yyvsp[0].node, NULL_TREE);
;
break;}
case 250:
#line 1496 "./parse.y"
#line 1498 "./parse.y"
{yyerror ("'(' expected"); RECOVER;;
break;}
case 251:
#line 1498 "./parse.y"
#line 1500 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 252:
#line 1500 "./parse.y"
#line 1502 "./parse.y"
{yyerror ("')' expected"); RECOVER;;
break;}
case 253:
#line 1505 "./parse.y"
#line 1507 "./parse.y"
{ yyval.node = build_if_else_statement (yyvsp[-5].operator.location, yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node); ;
break;}
case 254:
#line 1510 "./parse.y"
#line 1512 "./parse.y"
{ yyval.node = build_if_else_statement (yyvsp[-5].operator.location, yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node); ;
break;}
case 255:
#line 1515 "./parse.y"
#line 1517 "./parse.y"
{
enter_block ();
;
break;}
case 256:
#line 1519 "./parse.y"
#line 1521 "./parse.y"
{
/* Make into "proper list" of COMPOUND_EXPRs.
I.e. make the last statment also have its own
......@@ -3867,42 +3869,42 @@ case 256:
;
break;}
case 257:
#line 1531 "./parse.y"
#line 1533 "./parse.y"
{
yyval.node = build (SWITCH_EXPR, NULL_TREE, yyvsp[-1].node, NULL_TREE);
EXPR_WFL_LINECOL (yyval.node) = yyvsp[-2].operator.location;
;
break;}
case 258:
#line 1536 "./parse.y"
#line 1538 "./parse.y"
{yyerror ("'(' expected"); RECOVER;;
break;}
case 259:
#line 1538 "./parse.y"
#line 1540 "./parse.y"
{yyerror ("Missing term or ')'"); DRECOVER(switch_statement);;
break;}
case 260:
#line 1540 "./parse.y"
#line 1542 "./parse.y"
{yyerror ("'{' expected"); RECOVER;;
break;}
case 261:
#line 1548 "./parse.y"
#line 1550 "./parse.y"
{ yyval.node = NULL_TREE; ;
break;}
case 262:
#line 1550 "./parse.y"
#line 1552 "./parse.y"
{ yyval.node = NULL_TREE; ;
break;}
case 263:
#line 1552 "./parse.y"
#line 1554 "./parse.y"
{ yyval.node = NULL_TREE; ;
break;}
case 264:
#line 1554 "./parse.y"
#line 1556 "./parse.y"
{ yyval.node = NULL_TREE; ;
break;}
case 270:
#line 1573 "./parse.y"
#line 1575 "./parse.y"
{
tree lab = build1 (CASE_EXPR, NULL_TREE, yyvsp[-1].node);
EXPR_WFL_LINECOL (lab) = yyvsp[-2].operator.location;
......@@ -3910,7 +3912,7 @@ case 270:
;
break;}
case 271:
#line 1579 "./parse.y"
#line 1581 "./parse.y"
{
tree lab = build1 (DEFAULT_EXPR, NULL_TREE, NULL_TREE);
EXPR_WFL_LINECOL (lab) = yyvsp[-1].operator.location;
......@@ -3918,61 +3920,61 @@ case 271:
;
break;}
case 272:
#line 1585 "./parse.y"
#line 1587 "./parse.y"
{yyerror ("Missing or invalid constant expression"); RECOVER;;
break;}
case 273:
#line 1587 "./parse.y"
#line 1589 "./parse.y"
{yyerror ("':' expected"); RECOVER;;
break;}
case 274:
#line 1589 "./parse.y"
#line 1591 "./parse.y"
{yyerror ("':' expected"); RECOVER;;
break;}
case 275:
#line 1594 "./parse.y"
#line 1596 "./parse.y"
{
tree body = build_loop_body (yyvsp[-2].operator.location, yyvsp[-1].node, 0);
yyval.node = build_new_loop (body);
;
break;}
case 276:
#line 1602 "./parse.y"
#line 1604 "./parse.y"
{ yyval.node = finish_loop_body (0, NULL_TREE, yyvsp[0].node, 0); ;
break;}
case 277:
#line 1604 "./parse.y"
#line 1606 "./parse.y"
{YYERROR_NOW; yyerror ("'(' expected"); RECOVER;;
break;}
case 278:
#line 1606 "./parse.y"
#line 1608 "./parse.y"
{yyerror ("Missing term and ')' expected"); RECOVER;;
break;}
case 279:
#line 1608 "./parse.y"
#line 1610 "./parse.y"
{yyerror ("')' expected"); RECOVER;;
break;}
case 280:
#line 1613 "./parse.y"
#line 1615 "./parse.y"
{ yyval.node = finish_loop_body (0, NULL_TREE, yyvsp[0].node, 0); ;
break;}
case 281:
#line 1618 "./parse.y"
#line 1620 "./parse.y"
{
tree body = build_loop_body (0, NULL_TREE, 1);
yyval.node = build_new_loop (body);
;
break;}
case 282:
#line 1627 "./parse.y"
#line 1629 "./parse.y"
{ yyval.node = finish_loop_body (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[-5].node, 1); ;
break;}
case 283:
#line 1632 "./parse.y"
#line 1634 "./parse.y"
{ yyval.node = finish_for_loop (EXPR_WFL_LINECOL (yyvsp[-4].node), yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node); ;
break;}
case 284:
#line 1634 "./parse.y"
#line 1636 "./parse.y"
{
yyval.node = finish_for_loop (0, NULL_TREE, yyvsp[-2].node, yyvsp[0].node);
/* We have not condition, so we get rid of the EXIT_EXPR */
......@@ -3981,23 +3983,23 @@ case 284:
;
break;}
case 285:
#line 1641 "./parse.y"
#line 1643 "./parse.y"
{yyerror ("Invalid control expression"); RECOVER;;
break;}
case 286:
#line 1643 "./parse.y"
#line 1645 "./parse.y"
{yyerror ("Invalid update expression"); RECOVER;;
break;}
case 287:
#line 1645 "./parse.y"
#line 1647 "./parse.y"
{yyerror ("Invalid update expression"); RECOVER;;
break;}
case 288:
#line 1650 "./parse.y"
#line 1652 "./parse.y"
{ yyval.node = finish_for_loop (EXPR_WFL_LINECOL (yyvsp[-4].node), yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node);;
break;}
case 289:
#line 1652 "./parse.y"
#line 1654 "./parse.y"
{
yyval.node = finish_for_loop (0, NULL_TREE, yyvsp[-2].node, yyvsp[0].node);
/* We have not condition, so we get rid of the EXIT_EXPR */
......@@ -4006,7 +4008,7 @@ case 289:
;
break;}
case 290:
#line 1662 "./parse.y"
#line 1664 "./parse.y"
{
/* This scope defined for local variable that may be
defined within the scope of the for loop */
......@@ -4014,15 +4016,15 @@ case 290:
;
break;}
case 291:
#line 1668 "./parse.y"
#line 1670 "./parse.y"
{yyerror ("'(' expected"); DRECOVER(for_1);;
break;}
case 292:
#line 1670 "./parse.y"
#line 1672 "./parse.y"
{yyerror ("Invalid init statement"); RECOVER;;
break;}
case 293:
#line 1675 "./parse.y"
#line 1677 "./parse.y"
{
/* We now declare the loop body. The loop is
declared as a for loop. */
......@@ -4035,11 +4037,11 @@ case 293:
;
break;}
case 294:
#line 1687 "./parse.y"
#line 1689 "./parse.y"
{ yyval.node = empty_stmt_node; ;
break;}
case 295:
#line 1689 "./parse.y"
#line 1691 "./parse.y"
{
/* Init statement recorded within the previously
defined block scope */
......@@ -4047,7 +4049,7 @@ case 295:
;
break;}
case 296:
#line 1695 "./parse.y"
#line 1697 "./parse.y"
{
/* Local variable are recorded within the previously
defined block scope */
......@@ -4055,94 +4057,94 @@ case 296:
;
break;}
case 297:
#line 1701 "./parse.y"
#line 1703 "./parse.y"
{yyerror ("';' expected"); DRECOVER(for_init_1);;
break;}
case 298:
#line 1705 "./parse.y"
#line 1707 "./parse.y"
{yyval.node = empty_stmt_node;;
break;}
case 299:
#line 1707 "./parse.y"
#line 1709 "./parse.y"
{ yyval.node = build_debugable_stmt (BUILD_LOCATION (), yyvsp[0].node); ;
break;}
case 300:
#line 1712 "./parse.y"
#line 1714 "./parse.y"
{ yyval.node = add_stmt_to_compound (NULL_TREE, NULL_TREE, yyvsp[0].node); ;
break;}
case 301:
#line 1714 "./parse.y"
#line 1716 "./parse.y"
{ yyval.node = add_stmt_to_compound (yyvsp[-2].node, NULL_TREE, yyvsp[0].node); ;
break;}
case 302:
#line 1716 "./parse.y"
#line 1718 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 303:
#line 1721 "./parse.y"
#line 1723 "./parse.y"
{ yyval.node = build_bc_statement (yyvsp[-1].operator.location, 1, NULL_TREE); ;
break;}
case 304:
#line 1723 "./parse.y"
#line 1725 "./parse.y"
{ yyval.node = build_bc_statement (yyvsp[-2].operator.location, 1, yyvsp[-1].node); ;
break;}
case 305:
#line 1725 "./parse.y"
#line 1727 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 306:
#line 1727 "./parse.y"
#line 1729 "./parse.y"
{yyerror ("';' expected"); RECOVER;;
break;}
case 307:
#line 1732 "./parse.y"
#line 1734 "./parse.y"
{ yyval.node = build_bc_statement (yyvsp[-1].operator.location, 0, NULL_TREE); ;
break;}
case 308:
#line 1734 "./parse.y"
#line 1736 "./parse.y"
{ yyval.node = build_bc_statement (yyvsp[-2].operator.location, 0, yyvsp[-1].node); ;
break;}
case 309:
#line 1736 "./parse.y"
#line 1738 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 310:
#line 1738 "./parse.y"
#line 1740 "./parse.y"
{yyerror ("';' expected"); RECOVER;;
break;}
case 311:
#line 1743 "./parse.y"
#line 1745 "./parse.y"
{ yyval.node = build_return (yyvsp[-1].operator.location, NULL_TREE); ;
break;}
case 312:
#line 1745 "./parse.y"
#line 1747 "./parse.y"
{ yyval.node = build_return (yyvsp[-2].operator.location, yyvsp[-1].node); ;
break;}
case 313:
#line 1747 "./parse.y"
#line 1749 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 314:
#line 1749 "./parse.y"
#line 1751 "./parse.y"
{yyerror ("';' expected"); RECOVER;;
break;}
case 315:
#line 1754 "./parse.y"
#line 1756 "./parse.y"
{
yyval.node = build1 (THROW_EXPR, NULL_TREE, yyvsp[-1].node);
EXPR_WFL_LINECOL (yyval.node) = yyvsp[-2].operator.location;
;
break;}
case 316:
#line 1759 "./parse.y"
#line 1761 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 317:
#line 1761 "./parse.y"
#line 1763 "./parse.y"
{yyerror ("';' expected"); RECOVER;;
break;}
case 318:
#line 1766 "./parse.y"
#line 1768 "./parse.y"
{
yyval.node = build (SYNCHRONIZED_EXPR, NULL_TREE, yyvsp[-2].node, yyvsp[0].node);
EXPR_WFL_LINECOL (yyval.node) =
......@@ -4150,23 +4152,23 @@ case 318:
;
break;}
case 319:
#line 1772 "./parse.y"
#line 1774 "./parse.y"
{yyerror ("'{' expected"); RECOVER;;
break;}
case 320:
#line 1774 "./parse.y"
#line 1776 "./parse.y"
{yyerror ("'(' expected"); RECOVER;;
break;}
case 321:
#line 1776 "./parse.y"
#line 1778 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 322:
#line 1778 "./parse.y"
#line 1780 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 323:
#line 1783 "./parse.y"
#line 1785 "./parse.y"
{
check_modifiers (
"Illegal modifier `%s'. Only `synchronized' was expected here",
......@@ -4177,33 +4179,33 @@ case 323:
;
break;}
case 324:
#line 1795 "./parse.y"
#line 1797 "./parse.y"
{ yyval.node = build_try_statement (yyvsp[-2].operator.location, yyvsp[-1].node, yyvsp[0].node); ;
break;}
case 325:
#line 1797 "./parse.y"
#line 1799 "./parse.y"
{ yyval.node = build_try_finally_statement (yyvsp[-2].operator.location, yyvsp[-1].node, yyvsp[0].node); ;
break;}
case 326:
#line 1799 "./parse.y"
#line 1801 "./parse.y"
{ yyval.node = build_try_finally_statement
(yyvsp[-3].operator.location, build_try_statement (yyvsp[-3].operator.location,
yyvsp[-2].node, yyvsp[-1].node), yyvsp[0].node);
;
break;}
case 327:
#line 1804 "./parse.y"
#line 1806 "./parse.y"
{yyerror ("'{' expected"); DRECOVER (try_statement);;
break;}
case 329:
#line 1810 "./parse.y"
#line 1812 "./parse.y"
{
TREE_CHAIN (yyvsp[0].node) = yyvsp[-1].node;
yyval.node = yyvsp[0].node;
;
break;}
case 330:
#line 1818 "./parse.y"
#line 1820 "./parse.y"
{
java_method_add_stmt (current_function_decl, yyvsp[0].node);
exit_block ();
......@@ -4211,7 +4213,7 @@ case 330:
;
break;}
case 331:
#line 1826 "./parse.y"
#line 1828 "./parse.y"
{
/* We add a block to define a scope for
formal_parameter (CCBP). The formal parameter is
......@@ -4229,96 +4231,96 @@ case 331:
;
break;}
case 332:
#line 1842 "./parse.y"
#line 1844 "./parse.y"
{yyerror ("'(' expected"); RECOVER; yyval.node = NULL_TREE;;
break;}
case 333:
#line 1844 "./parse.y"
#line 1846 "./parse.y"
{
yyerror ("Missing term or ')' expected");
RECOVER; yyval.node = NULL_TREE;
;
break;}
case 334:
#line 1849 "./parse.y"
#line 1851 "./parse.y"
{yyerror ("Missing term"); RECOVER; yyval.node = NULL_TREE;;
break;}
case 335:
#line 1854 "./parse.y"
#line 1856 "./parse.y"
{ yyval.node = yyvsp[0].node; ;
break;}
case 336:
#line 1856 "./parse.y"
#line 1858 "./parse.y"
{yyerror ("'{' expected"); RECOVER; ;
break;}
case 340:
#line 1868 "./parse.y"
#line 1870 "./parse.y"
{ yyval.node = build_this (yyvsp[0].operator.location); ;
break;}
case 341:
#line 1870 "./parse.y"
#line 1872 "./parse.y"
{yyval.node = yyvsp[-1].node;;
break;}
case 347:
#line 1880 "./parse.y"
#line 1882 "./parse.y"
{
tree wfl = build_wfl_node (this_identifier_node);
yyval.node = make_qualified_primary (yyvsp[-2].node, wfl, EXPR_WFL_LINECOL (yyvsp[-2].node));
;
break;}
case 348:
#line 1885 "./parse.y"
#line 1887 "./parse.y"
{yyerror ("')' expected"); RECOVER;;
break;}
case 349:
#line 1887 "./parse.y"
#line 1889 "./parse.y"
{yyerror ("'class' or 'this' expected" ); RECOVER;;
break;}
case 350:
#line 1889 "./parse.y"
#line 1891 "./parse.y"
{yyerror ("'class' expected" ); RECOVER;;
break;}
case 351:
#line 1891 "./parse.y"
#line 1893 "./parse.y"
{yyerror ("'class' expected" ); RECOVER;;
break;}
case 352:
#line 1899 "./parse.y"
#line 1901 "./parse.y"
{
yyval.node = build_java_array_type (yyvsp[-2].node, -1);
CLASS_LOADED_P (yyval.node) = 1;
;
break;}
case 353:
#line 1904 "./parse.y"
#line 1906 "./parse.y"
{ yyval.node = build_unresolved_array_type (yyvsp[-2].node); ;
break;}
case 354:
#line 1914 "./parse.y"
#line 1916 "./parse.y"
{ yyval.node = build_incomplete_class_ref (yyvsp[-1].operator.location, yyvsp[-2].node); ;
break;}
case 355:
#line 1916 "./parse.y"
#line 1918 "./parse.y"
{ yyval.node = build_incomplete_class_ref (yyvsp[-1].operator.location, yyvsp[-2].node); ;
break;}
case 356:
#line 1918 "./parse.y"
#line 1920 "./parse.y"
{ yyval.node = build_class_ref (yyvsp[-2].node); ;
break;}
case 357:
#line 1920 "./parse.y"
#line 1922 "./parse.y"
{ yyval.node = build_class_ref (void_type_node); ;
break;}
case 358:
#line 1925 "./parse.y"
#line 1927 "./parse.y"
{ yyval.node = build_new_invocation (yyvsp[-3].node, yyvsp[-1].node); ;
break;}
case 359:
#line 1927 "./parse.y"
#line 1929 "./parse.y"
{ yyval.node = build_new_invocation (yyvsp[-2].node, NULL_TREE); ;
break;}
case 361:
#line 1933 "./parse.y"
#line 1935 "./parse.y"
{
tree ctor = build_new_invocation (yyvsp[-2].node, NULL_TREE);
yyval.node = make_qualified_primary (yyvsp[-3].node, ctor,
......@@ -4326,7 +4328,7 @@ case 361:
;
break;}
case 363:
#line 1940 "./parse.y"
#line 1942 "./parse.y"
{
tree ctor = build_new_invocation (yyvsp[-3].node, yyvsp[-1].node);
yyval.node = make_qualified_primary (yyvsp[-4].node, ctor,
......@@ -4334,35 +4336,35 @@ case 363:
;
break;}
case 365:
#line 1947 "./parse.y"
#line 1949 "./parse.y"
{yyerror ("'(' expected"); DRECOVER(new_1);;
break;}
case 366:
#line 1949 "./parse.y"
#line 1951 "./parse.y"
{yyerror ("'(' expected"); RECOVER;;
break;}
case 367:
#line 1951 "./parse.y"
#line 1953 "./parse.y"
{yyerror ("')' or term expected"); RECOVER;;
break;}
case 368:
#line 1953 "./parse.y"
#line 1955 "./parse.y"
{yyerror ("')' expected"); RECOVER;;
break;}
case 369:
#line 1955 "./parse.y"
#line 1957 "./parse.y"
{YYERROR_NOW; yyerror ("Identifier expected"); RECOVER;;
break;}
case 370:
#line 1957 "./parse.y"
#line 1959 "./parse.y"
{yyerror ("'(' expected"); RECOVER;;
break;}
case 371:
#line 1967 "./parse.y"
#line 1969 "./parse.y"
{ create_anonymous_class (yyvsp[-4].operator.location, yyvsp[-3].node); ;
break;}
case 372:
#line 1969 "./parse.y"
#line 1971 "./parse.y"
{
tree id = build_wfl_node (DECL_NAME (GET_CPC ()));
EXPR_WFL_LINECOL (id) = EXPR_WFL_LINECOL (yyvsp[-5].node);
......@@ -4395,11 +4397,11 @@ case 372:
;
break;}
case 373:
#line 2000 "./parse.y"
#line 2002 "./parse.y"
{ create_anonymous_class (yyvsp[-3].operator.location, yyvsp[-2].node); ;
break;}
case 374:
#line 2002 "./parse.y"
#line 2004 "./parse.y"
{
tree id = build_wfl_node (DECL_NAME (GET_CPC ()));
EXPR_WFL_LINECOL (id) = EXPR_WFL_LINECOL (yyvsp[-4].node);
......@@ -4414,49 +4416,49 @@ case 374:
;
break;}
case 375:
#line 2018 "./parse.y"
#line 2020 "./parse.y"
{ yyval.node = yyvsp[-2].node; ;
break;}
case 376:
#line 2020 "./parse.y"
#line 2022 "./parse.y"
{ yyval.node = yyvsp[-2].node; ;
break;}
case 377:
#line 2025 "./parse.y"
#line 2027 "./parse.y"
{
yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, NULL_TREE);
ctxp->formal_parameter_number = 1;
;
break;}
case 378:
#line 2030 "./parse.y"
#line 2032 "./parse.y"
{
ctxp->formal_parameter_number += 1;
yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, yyvsp[-2].node);
;
break;}
case 379:
#line 2035 "./parse.y"
#line 2037 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 380:
#line 2040 "./parse.y"
#line 2042 "./parse.y"
{ yyval.node = build_newarray_node (yyvsp[-1].node, yyvsp[0].node, 0); ;
break;}
case 381:
#line 2042 "./parse.y"
#line 2044 "./parse.y"
{ yyval.node = build_newarray_node (yyvsp[-1].node, yyvsp[0].node, 0); ;
break;}
case 382:
#line 2044 "./parse.y"
#line 2046 "./parse.y"
{ yyval.node = build_newarray_node (yyvsp[-2].node, yyvsp[-1].node, CURRENT_OSB (ctxp));;
break;}
case 383:
#line 2046 "./parse.y"
#line 2048 "./parse.y"
{ yyval.node = build_newarray_node (yyvsp[-2].node, yyvsp[-1].node, CURRENT_OSB (ctxp));;
break;}
case 384:
#line 2050 "./parse.y"
#line 2052 "./parse.y"
{
char *sig;
while (CURRENT_OSB (ctxp)--)
......@@ -4467,7 +4469,7 @@ case 384:
;
break;}
case 385:
#line 2059 "./parse.y"
#line 2061 "./parse.y"
{
tree type = yyvsp[-2].node;
while (CURRENT_OSB (ctxp)--)
......@@ -4477,34 +4479,39 @@ case 385:
;
break;}
case 386:
#line 2067 "./parse.y"
#line 2069 "./parse.y"
{yyerror ("'[' expected"); DRECOVER ("]");;
break;}
case 387:
#line 2069 "./parse.y"
#line 2071 "./parse.y"
{yyerror ("']' expected"); RECOVER;;
break;}
case 388:
#line 2074 "./parse.y"
#line 2076 "./parse.y"
{ yyval.node = build_tree_list (NULL_TREE, yyvsp[0].node); ;
break;}
case 389:
#line 2076 "./parse.y"
#line 2078 "./parse.y"
{ yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, yyval.node); ;
break;}
case 390:
#line 2081 "./parse.y"
#line 2083 "./parse.y"
{
if (JNUMERIC_TYPE_P (TREE_TYPE (yyvsp[-1].node)))
{
yyvsp[-1].node = build_wfl_node (yyvsp[-1].node);
TREE_TYPE (yyvsp[-1].node) = NULL_TREE;
}
EXPR_WFL_LINECOL (yyvsp[-1].node) = yyvsp[-2].operator.location;
yyval.node = yyvsp[-1].node;
;
break;}
case 391:
#line 2086 "./parse.y"
#line 2093 "./parse.y"
{yyerror ("']' expected"); RECOVER;;
break;}
case 392:
#line 2088 "./parse.y"
#line 2095 "./parse.y"
{
yyerror ("Missing term");
yyerror ("']' expected");
......@@ -4512,7 +4519,7 @@ case 392:
;
break;}
case 393:
#line 2097 "./parse.y"
#line 2104 "./parse.y"
{
int allocate = 0;
/* If not initialized, allocate memory for the osb
......@@ -4540,19 +4547,19 @@ case 393:
;
break;}
case 394:
#line 2123 "./parse.y"
#line 2130 "./parse.y"
{ CURRENT_OSB (ctxp)++; ;
break;}
case 395:
#line 2125 "./parse.y"
#line 2132 "./parse.y"
{ yyerror ("']' expected"); RECOVER;;
break;}
case 396:
#line 2130 "./parse.y"
#line 2137 "./parse.y"
{ yyval.node = make_qualified_primary (yyvsp[-2].node, yyvsp[0].node, yyvsp[-1].operator.location); ;
break;}
case 397:
#line 2134 "./parse.y"
#line 2141 "./parse.y"
{
tree super_wfl =
build_wfl_node (super_identifier_node);
......@@ -4561,19 +4568,19 @@ case 397:
;
break;}
case 398:
#line 2141 "./parse.y"
#line 2148 "./parse.y"
{yyerror ("Field expected"); DRECOVER (super_field_acces);;
break;}
case 399:
#line 2146 "./parse.y"
#line 2153 "./parse.y"
{ yyval.node = build_method_invocation (yyvsp[-2].node, NULL_TREE); ;
break;}
case 400:
#line 2148 "./parse.y"
#line 2155 "./parse.y"
{ yyval.node = build_method_invocation (yyvsp[-3].node, yyvsp[-1].node); ;
break;}
case 401:
#line 2150 "./parse.y"
#line 2157 "./parse.y"
{
if (TREE_CODE (yyvsp[-4].node) == THIS_EXPR)
yyval.node = build_this_super_qualified_invocation
......@@ -4586,7 +4593,7 @@ case 401:
;
break;}
case 402:
#line 2161 "./parse.y"
#line 2168 "./parse.y"
{
if (TREE_CODE (yyvsp[-5].node) == THIS_EXPR)
yyval.node = build_this_super_qualified_invocation
......@@ -4599,121 +4606,121 @@ case 402:
;
break;}
case 403:
#line 2172 "./parse.y"
#line 2179 "./parse.y"
{
yyval.node = build_this_super_qualified_invocation
(0, yyvsp[-2].node, NULL_TREE, yyvsp[-4].operator.location, yyvsp[-3].operator.location);
;
break;}
case 404:
#line 2177 "./parse.y"
#line 2184 "./parse.y"
{
yyval.node = build_this_super_qualified_invocation
(0, yyvsp[-3].node, yyvsp[-1].node, yyvsp[-5].operator.location, yyvsp[-4].operator.location);
;
break;}
case 405:
#line 2186 "./parse.y"
#line 2193 "./parse.y"
{ yyerror ("'(' expected"); DRECOVER (method_invocation); ;
break;}
case 406:
#line 2188 "./parse.y"
#line 2195 "./parse.y"
{ yyerror ("'(' expected"); DRECOVER (method_invocation); ;
break;}
case 407:
#line 2193 "./parse.y"
#line 2200 "./parse.y"
{ yyval.node = build_array_ref (yyvsp[-2].operator.location, yyvsp[-3].node, yyvsp[-1].node); ;
break;}
case 408:
#line 2195 "./parse.y"
#line 2202 "./parse.y"
{ yyval.node = build_array_ref (yyvsp[-2].operator.location, yyvsp[-3].node, yyvsp[-1].node); ;
break;}
case 409:
#line 2197 "./parse.y"
#line 2204 "./parse.y"
{
yyerror ("Missing term and ']' expected");
DRECOVER(array_access);
;
break;}
case 410:
#line 2202 "./parse.y"
#line 2209 "./parse.y"
{
yyerror ("']' expected");
DRECOVER(array_access);
;
break;}
case 411:
#line 2207 "./parse.y"
#line 2214 "./parse.y"
{
yyerror ("Missing term and ']' expected");
DRECOVER(array_access);
;
break;}
case 412:
#line 2212 "./parse.y"
#line 2219 "./parse.y"
{
yyerror ("']' expected");
DRECOVER(array_access);
;
break;}
case 417:
#line 2227 "./parse.y"
#line 2234 "./parse.y"
{ yyval.node = build_incdec (yyvsp[0].operator.token, yyvsp[0].operator.location, yyvsp[-1].node, 1); ;
break;}
case 418:
#line 2232 "./parse.y"
#line 2239 "./parse.y"
{ yyval.node = build_incdec (yyvsp[0].operator.token, yyvsp[0].operator.location, yyvsp[-1].node, 1); ;
break;}
case 421:
#line 2239 "./parse.y"
#line 2246 "./parse.y"
{yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ;
break;}
case 422:
#line 2241 "./parse.y"
#line 2248 "./parse.y"
{yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ;
break;}
case 424:
#line 2244 "./parse.y"
#line 2251 "./parse.y"
{yyerror ("Missing term"); RECOVER;
break;}
case 425:
#line 2246 "./parse.y"
#line 2253 "./parse.y"
{yyerror ("Missing term"); RECOVER;
break;}
case 426:
#line 2251 "./parse.y"
#line 2258 "./parse.y"
{yyval.node = build_incdec (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node, 0); ;
break;}
case 427:
#line 2253 "./parse.y"
#line 2260 "./parse.y"
{yyerror ("Missing term"); RECOVER;
break;}
case 428:
#line 2258 "./parse.y"
#line 2265 "./parse.y"
{yyval.node = build_incdec (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node, 0); ;
break;}
case 429:
#line 2260 "./parse.y"
#line 2267 "./parse.y"
{yyerror ("Missing term"); RECOVER;
break;}
case 431:
#line 2266 "./parse.y"
#line 2273 "./parse.y"
{yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ;
break;}
case 432:
#line 2268 "./parse.y"
#line 2275 "./parse.y"
{yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ;
break;}
case 434:
#line 2271 "./parse.y"
#line 2278 "./parse.y"
{yyerror ("Missing term"); RECOVER;
break;}
case 435:
#line 2273 "./parse.y"
#line 2280 "./parse.y"
{yyerror ("Missing term"); RECOVER;
break;}
case 436:
#line 2278 "./parse.y"
#line 2285 "./parse.y"
{
tree type = yyvsp[-3].node;
while (CURRENT_OSB (ctxp)--)
......@@ -4723,15 +4730,15 @@ case 436:
;
break;}
case 437:
#line 2286 "./parse.y"
#line 2293 "./parse.y"
{ yyval.node = build_cast (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[0].node); ;
break;}
case 438:
#line 2288 "./parse.y"
#line 2295 "./parse.y"
{ yyval.node = build_cast (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[0].node); ;
break;}
case 439:
#line 2290 "./parse.y"
#line 2297 "./parse.y"
{
const char *ptr;
while (CURRENT_OSB (ctxp)--)
......@@ -4746,11 +4753,11 @@ case 439:
;
break;}
case 440:
#line 2303 "./parse.y"
#line 2310 "./parse.y"
{yyerror ("']' expected, invalid type expression");;
break;}
case 441:
#line 2305 "./parse.y"
#line 2312 "./parse.y"
{
if (ctxp->prevent_ese != lineno)
yyerror ("Invalid type expression"); RECOVER;
......@@ -4758,243 +4765,243 @@ case 441:
;
break;}
case 442:
#line 2311 "./parse.y"
#line 2318 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 443:
#line 2313 "./parse.y"
#line 2320 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 444:
#line 2315 "./parse.y"
#line 2322 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 446:
#line 2321 "./parse.y"
#line 2328 "./parse.y"
{
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token),
yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node);
;
break;}
case 447:
#line 2326 "./parse.y"
#line 2333 "./parse.y"
{
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node);
;
break;}
case 448:
#line 2331 "./parse.y"
#line 2338 "./parse.y"
{
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node);
;
break;}
case 449:
#line 2336 "./parse.y"
#line 2343 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 450:
#line 2338 "./parse.y"
#line 2345 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 451:
#line 2340 "./parse.y"
#line 2347 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 453:
#line 2346 "./parse.y"
#line 2353 "./parse.y"
{
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node);
;
break;}
case 454:
#line 2351 "./parse.y"
#line 2358 "./parse.y"
{
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node);
;
break;}
case 455:
#line 2356 "./parse.y"
#line 2363 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 456:
#line 2358 "./parse.y"
#line 2365 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 458:
#line 2364 "./parse.y"
#line 2371 "./parse.y"
{
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node);
;
break;}
case 459:
#line 2369 "./parse.y"
#line 2376 "./parse.y"
{
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node);
;
break;}
case 460:
#line 2374 "./parse.y"
#line 2381 "./parse.y"
{
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node);
;
break;}
case 461:
#line 2379 "./parse.y"
#line 2386 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 462:
#line 2381 "./parse.y"
#line 2388 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 463:
#line 2383 "./parse.y"
#line 2390 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 465:
#line 2389 "./parse.y"
#line 2396 "./parse.y"
{
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node);
;
break;}
case 466:
#line 2394 "./parse.y"
#line 2401 "./parse.y"
{
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node);
;
break;}
case 467:
#line 2399 "./parse.y"
#line 2406 "./parse.y"
{
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node);
;
break;}
case 468:
#line 2404 "./parse.y"
#line 2411 "./parse.y"
{
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node);
;
break;}
case 469:
#line 2409 "./parse.y"
#line 2416 "./parse.y"
{ yyval.node = build_binop (INSTANCEOF_EXPR, yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ;
break;}
case 470:
#line 2411 "./parse.y"
#line 2418 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 471:
#line 2413 "./parse.y"
#line 2420 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 472:
#line 2415 "./parse.y"
#line 2422 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 473:
#line 2417 "./parse.y"
#line 2424 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 474:
#line 2419 "./parse.y"
#line 2426 "./parse.y"
{yyerror ("Invalid reference type"); RECOVER;;
break;}
case 476:
#line 2425 "./parse.y"
#line 2432 "./parse.y"
{
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node);
;
break;}
case 477:
#line 2430 "./parse.y"
#line 2437 "./parse.y"
{
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node);
;
break;}
case 478:
#line 2435 "./parse.y"
#line 2442 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 479:
#line 2437 "./parse.y"
#line 2444 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 481:
#line 2443 "./parse.y"
#line 2450 "./parse.y"
{
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node);
;
break;}
case 482:
#line 2448 "./parse.y"
#line 2455 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 484:
#line 2454 "./parse.y"
#line 2461 "./parse.y"
{
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node);
;
break;}
case 485:
#line 2459 "./parse.y"
#line 2466 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 487:
#line 2465 "./parse.y"
#line 2472 "./parse.y"
{
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node);
;
break;}
case 488:
#line 2470 "./parse.y"
#line 2477 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 490:
#line 2476 "./parse.y"
#line 2483 "./parse.y"
{
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node);
;
break;}
case 491:
#line 2481 "./parse.y"
#line 2488 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 493:
#line 2487 "./parse.y"
#line 2494 "./parse.y"
{
yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
yyvsp[-2].node, yyvsp[0].node);
;
break;}
case 494:
#line 2492 "./parse.y"
#line 2499 "./parse.y"
{yyerror ("Missing term"); RECOVER;;
break;}
case 496:
#line 2498 "./parse.y"
#line 2505 "./parse.y"
{
yyval.node = build (CONDITIONAL_EXPR, NULL_TREE, yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node);
EXPR_WFL_LINECOL (yyval.node) = yyvsp[-3].operator.location;
;
break;}
case 497:
#line 2503 "./parse.y"
#line 2510 "./parse.y"
{
YYERROR_NOW;
yyerror ("Missing term");
......@@ -5002,19 +5009,19 @@ case 497:
;
break;}
case 498:
#line 2509 "./parse.y"
#line 2516 "./parse.y"
{yyerror ("Missing term"); DRECOVER (2);;
break;}
case 499:
#line 2511 "./parse.y"
#line 2518 "./parse.y"
{yyerror ("Missing term"); DRECOVER (3);;
break;}
case 502:
#line 2521 "./parse.y"
#line 2528 "./parse.y"
{ yyval.node = build_assignment (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ;
break;}
case 503:
#line 2523 "./parse.y"
#line 2530 "./parse.y"
{
if (ctxp->prevent_ese != lineno)
yyerror ("Missing term");
......@@ -5243,7 +5250,7 @@ yyerrhandle:
}
return 1;
}
#line 2549 "./parse.y"
#line 2556 "./parse.y"
......@@ -6691,23 +6698,27 @@ lookup_field_wrapper (class, name)
tree class, name;
{
tree type = class;
tree decl;
tree decl = NULL_TREE;
java_parser_context_save_global ();
decl = lookup_field (&type, name);
/* Last chance: if we're within the context of an inner class, we
might be trying to access a local variable defined in an outer
context. We try to look for it now. */
if (INNER_CLASS_TYPE_P (class) && (!decl || decl == error_mark_node))
if (INNER_CLASS_TYPE_P (class))
{
char *alias_buffer;
tree new_name;
MANGLE_OUTER_LOCAL_VARIABLE_NAME (alias_buffer, name);
name = get_identifier (alias_buffer);
type = class;
decl = lookup_field (&type, name);
new_name = get_identifier (alias_buffer);
decl = lookup_field (&type, new_name);
if (decl && decl != error_mark_node)
FIELD_LOCAL_ALIAS_USED (decl) = 1;
}
if (!decl || decl == error_mark_node)
{
type = class;
decl = lookup_field (&type, name);
}
java_parser_context_restore_global ();
return decl == error_mark_node ? NULL : decl;
......@@ -7311,10 +7322,8 @@ check_modifiers_consistency (flags)
acc_count = 0;
cl = NULL_TREE;
THIS_MODIFIER_ONLY (flags, ACC_FINAL, FINAL_TK - PUBLIC_TK,
acc_count, cl);
THIS_MODIFIER_ONLY (flags, ACC_VOLATILE, VOLATILE_TK - PUBLIC_TK,
acc_count, cl);
THIS_MODIFIER_ONLY (flags, ACC_FINAL, FINAL_TK, acc_count, cl);
THIS_MODIFIER_ONLY (flags, ACC_VOLATILE, VOLATILE_TK, acc_count, cl);
if (acc_count > 1)
parse_error_context (cl,
"Inconsistent member declaration. At most one of `final' or `volatile' may be specified");
......@@ -7373,7 +7382,7 @@ method_declarator (id, list)
/* Then this$<n> */
type = TREE_TYPE (DECL_CONTEXT (GET_CPC ()));
thisn = build_current_thisn (TYPE_NAME (GET_CPC ()));
thisn = build_current_thisn (TREE_TYPE (GET_CPC ()));
list = tree_cons (build_wfl_node (thisn), build_pointer_type (type),
list);
}
......@@ -7907,10 +7916,8 @@ java_complete_class ()
push_obstacks (&permanent_obstack, &permanent_obstack);
/* Process imports and reverse the import on demand list */
/* Process imports */
process_imports ();
if (ctxp->import_demand_list)
ctxp->import_demand_list = nreverse (ctxp->import_demand_list);
/* Rever things so we have the right order */
ctxp->class_list = nreverse (ctxp->class_list);
......@@ -8115,10 +8122,10 @@ do_resolve_class (enclosing, class_type, decl, cl)
tree enclosing, class_type, decl, cl;
{
tree new_class_decl;
tree original_name = NULL_TREE;
/* Do not try to replace TYPE_NAME (class_type) by a variable, since
its is changed by find_in_imports{_on_demand} */
it is changed by find_in_imports{_on_demand} and (but it doesn't
really matter) qualify_and_find */
/* 0- Search in the current class as an inner class */
......@@ -8152,12 +8159,11 @@ do_resolve_class (enclosing, class_type, decl, cl)
enclosing = do_resolve_class (NULL, name, NULL, NULL);
}
/* 1- Check for the type in single imports */
if (find_in_imports (class_type))
return NULL_TREE;
/* 1- Check for the type in single imports. This will change
TYPE_NAME() if something relevant is found */
find_in_imports (class_type);
/* 2- And check for the type in the current compilation unit. If it fails,
try with a name qualified with the package name we've seen so far */
/* 2- And check for the type in the current compilation unit */
if ((new_class_decl = IDENTIFIER_CLASS_VALUE (TYPE_NAME (class_type))))
{
if (!CLASS_LOADED_P (TREE_TYPE (new_class_decl)) &&
......@@ -8166,34 +8172,37 @@ do_resolve_class (enclosing, class_type, decl, cl)
return IDENTIFIER_CLASS_VALUE (TYPE_NAME (class_type));
}
original_name = TYPE_NAME (class_type);
/* 3- Search according to the current package definition */
if (!QUALIFIED_P (TYPE_NAME (class_type)))
{
if ((new_class_decl = qualify_and_find (class_type, ctxp->package,
TYPE_NAME (class_type))))
return new_class_decl;
}
/* 4- Check the import on demands. Don't allow bar.baz to be
imported from foo.* */
if (!QUALIFIED_P (TYPE_NAME (class_type)))
if (find_in_imports_on_demand (class_type))
return NULL_TREE;
/* If found in find_in_imports_on_demant, the type has already been
loaded. */
if ((new_class_decl = IDENTIFIER_CLASS_VALUE (TYPE_NAME (class_type))))
return new_class_decl;
/* 5- Try with a name qualified with the package name we've seen so far */
if (!QUALIFIED_P (TYPE_NAME (class_type)))
{
tree package;
for (package = package_list; package; package = TREE_CHAIN (package))
{
tree new_qualified;
new_qualified = merge_qualified_name (TREE_PURPOSE (package),
original_name);
TYPE_NAME (class_type) = new_qualified;
new_class_decl = IDENTIFIER_CLASS_VALUE (TYPE_NAME (class_type));
if (!new_class_decl)
load_class (TYPE_NAME (class_type), 0);
new_class_decl = IDENTIFIER_CLASS_VALUE (TYPE_NAME (class_type));
if (new_class_decl)
{
if (!CLASS_LOADED_P (TREE_TYPE (new_class_decl)) &&
!CLASS_FROM_SOURCE_P (TREE_TYPE (new_class_decl)))
load_class (TYPE_NAME (class_type), 0);
return IDENTIFIER_CLASS_VALUE (TYPE_NAME (class_type));
}
}
if ((new_class_decl = qualify_and_find (class_type,
TREE_PURPOSE (package),
TYPE_NAME (class_type))))
return new_class_decl;
}
TYPE_NAME (class_type) = original_name;
/* 3- Check an other compilation unit that bears the name of type */
/* 5- Check an other compilation unit that bears the name of type */
load_class (TYPE_NAME (class_type), 0);
if (check_pkg_class_access (TYPE_NAME (class_type),
(cl ? cl : lookup_cl (decl))))
......@@ -8202,16 +8211,30 @@ do_resolve_class (enclosing, class_type, decl, cl)
if ((new_class_decl = IDENTIFIER_CLASS_VALUE (TYPE_NAME (class_type))))
return new_class_decl;
/* 4- Check the import on demands. Don't allow bar.baz to be
imported from foo.* */
if (!QUALIFIED_P (TYPE_NAME (class_type)))
if (find_in_imports_on_demand (class_type))
return NULL_TREE;
/* 5- Last call for a resolution */
/* 6- Last call for a resolution */
return IDENTIFIER_CLASS_VALUE (TYPE_NAME (class_type));
}
static tree
qualify_and_find (class_type, package, name)
tree class_type, package, name;
{
tree new_qualified = merge_qualified_name (package, name);
tree new_class_decl;
if (!IDENTIFIER_CLASS_VALUE (new_qualified))
load_class (new_qualified, 0);
if ((new_class_decl = IDENTIFIER_CLASS_VALUE (new_qualified)))
{
if (!CLASS_LOADED_P (TREE_TYPE (new_class_decl)) &&
!CLASS_FROM_SOURCE_P (TREE_TYPE (new_class_decl)))
load_class (new_qualified, 0);
TYPE_NAME (class_type) = new_qualified;
return IDENTIFIER_CLASS_VALUE (new_qualified);
}
return NULL_TREE;
}
/* Resolve NAME and lay it out (if not done and if not the current
parsed class). Return a decl node. This function is meant to be
called when type resolution is necessary during the walk pass. */
......@@ -9085,10 +9108,10 @@ process_imports ()
return 0;
}
/* Possibly find a class imported by a single-type import statement. Return
1 if an error occured, 0 otherwise. */
/* Possibly find and mark a class imported by a single-type import
statement. */
static int
static void
find_in_imports (class_type)
tree class_type;
{
......@@ -9100,7 +9123,6 @@ find_in_imports (class_type)
TYPE_NAME (class_type) = EXPR_WFL_NODE (TREE_PURPOSE (import));
QUALIFIED_P (TYPE_NAME (class_type)) = 1;
}
return 0;
}
static int
......@@ -9310,6 +9332,30 @@ find_in_imports_on_demand (class_type)
return (seen_once < 0 ? 0 : seen_once); /* It's ok not to have found */
}
/* Add package NAME to the list of package encountered so far. To
speed up class lookup in do_resolve_class, we make sure a
particular package is added only once. */
static void
register_package (name)
tree name;
{
static struct hash_table _pht, *pht = NULL;
if (!pht)
{
hash_table_init (&_pht, hash_newfunc,
java_hash_hash_tree_node, java_hash_compare_tree_node);
pht = &_pht;
}
if (!hash_lookup (pht, (const hash_table_key) name, FALSE, NULL))
{
package_list = chainon (package_list, build_tree_list (name, NULL));
hash_lookup (pht, (const hash_table_key) name, TRUE, NULL);
}
}
static tree
resolve_package (pkg, next)
tree pkg, *next;
......@@ -10078,10 +10124,12 @@ maybe_generate_pre_expand_clinit (class_type)
for (current = TYPE_CLINIT_STMT_LIST (class_type); current;
current = TREE_CHAIN (current))
{
tree stmt = current;
/* We build the assignment expression that will initialize the
field to its value. There are strict rules on static
initializers (8.5). FIXME */
tree stmt = build_debugable_stmt (EXPR_WFL_LINECOL (current), current);
if (TREE_CODE (stmt) != BLOCK)
stmt = build_debugable_stmt (EXPR_WFL_LINECOL (stmt), stmt);
java_method_add_stmt (mdecl, stmt);
}
......@@ -11042,12 +11090,6 @@ java_expand_classes ()
java_layout_classes ();
java_parse_abort_on_error ();
/* The list of packages declaration seen so far needs to be
reversed, so that package declared in a file being compiled gets
priority over packages declared as a side effect of parsing other
files.*/
package_list = nreverse (package_list);
saved_ctxp = ctxp_for_generation;
for (; ctxp_for_generation; ctxp_for_generation = ctxp_for_generation->next)
{
......@@ -11126,7 +11168,7 @@ make_qualified_primary (primary, right, location)
tree wfl;
if (TREE_CODE (primary) != EXPR_WITH_FILE_LOCATION)
wfl = build_wfl_wrap (primary);
wfl = build_wfl_wrap (primary, location);
else
{
wfl = primary;
......@@ -11343,7 +11385,8 @@ resolve_field_access (qual_wfl, field_decl, field_type)
return error_mark_node;
/* Resolve the LENGTH field of an array here */
if (DECL_NAME (decl) == length_identifier_node && TYPE_ARRAY_P (type_found)
if (DECL_P (decl) && DECL_NAME (decl) == length_identifier_node
&& TYPE_ARRAY_P (type_found)
&& ! flag_emit_class_files && ! flag_emit_xref)
{
tree length = build_java_array_length_access (where_found);
......@@ -12735,7 +12778,8 @@ find_applicable_accessible_methods_list (lc, class, name, arglist)
}
/* Search interfaces */
if (CLASS_INTERFACE (TYPE_NAME (class)))
if (TREE_CODE (TYPE_NAME (class)) == TYPE_DECL
&& CLASS_INTERFACE (TYPE_NAME (class)))
{
static struct hash_table t, *searched_interfaces = NULL;
static int search_not_done = 0;
......@@ -12883,6 +12927,7 @@ find_most_specific_methods_list (list)
tree list;
{
int max = 0;
int abstract, candidates;
tree current, new_list = NULL_TREE;
for (current = list; current; current = TREE_CHAIN (current))
{
......@@ -12909,24 +12954,33 @@ find_most_specific_methods_list (list)
}
/* Review the list and select the maximally specific methods */
for (current = list; current; current = TREE_CHAIN (current))
for (current = list, abstract = -1, candidates = -1;
current; current = TREE_CHAIN (current))
if (DECL_SPECIFIC_COUNT (TREE_VALUE (current)) == max)
new_list = tree_cons (NULL_TREE, TREE_VALUE (current), new_list);
{
new_list = tree_cons (NULL_TREE, TREE_VALUE (current), new_list);
abstract += (METHOD_ABSTRACT (TREE_VALUE (current)) ? 1 : 0);
candidates++;
}
/* If we have several and they're all abstract, just pick the
closest one. */
if (candidates > 0 && (candidates == abstract))
{
new_list = nreverse (new_list);
TREE_CHAIN (new_list) = NULL_TREE;
}
if (new_list && TREE_CHAIN (new_list))
/* We have several, we couldn't find a most specific, all but one are
abstract, we pick the only non abstract one. */
if (candidates > 0 && !max && (candidates == abstract+1))
{
tree c;
for (c = new_list; c && METHOD_ABSTRACT (TREE_VALUE (c));
c = TREE_CHAIN (c))
;
if (!c)
{
new_list = nreverse (new_list);
TREE_CHAIN (new_list) = NULL_TREE;
}
for (current = new_list; current; current = TREE_CHAIN (current))
if (!METHOD_ABSTRACT (TREE_VALUE (current)))
{
TREE_CHAIN (current) = NULL_TREE;
new_list = current;
}
}
/* If we can't find one, lower expectations and try to gather multiple
......@@ -13226,7 +13280,7 @@ breakdown_qualified (left, right, source)
local variable decls if present.
Same as java_complete_lhs, but does resolve static finals to values. */
static tree
tree
java_complete_tree (node)
tree node;
{
......@@ -14165,8 +14219,9 @@ maybe_absorb_scoping_blocks ()
/* Wrap a non WFL node around a WFL. */
static tree
build_wfl_wrap (node)
build_wfl_wrap (node, location)
tree node;
int location;
{
tree wfl, node_to_insert = node;
......@@ -14178,7 +14233,7 @@ build_wfl_wrap (node)
else
wfl = build_expr_wfl (NULL_TREE, ctxp->filename, 0, 0);
EXPR_WFL_LINECOL (wfl) = EXPR_WFL_LINECOL (node);
EXPR_WFL_LINECOL (wfl) = location;
EXPR_WFL_QUALIFICATION (wfl) = build_tree_list (node_to_insert, NULL_TREE);
return wfl;
}
......@@ -14344,7 +14399,8 @@ maybe_build_primttype_type_ref (rhs, wfl)
tree n = TREE_OPERAND (rhs, 1);
if (TREE_CODE (n) == VAR_DECL
&& DECL_NAME (n) == TYPE_identifier_node
&& rhs_type == class_ptr_type)
&& rhs_type == class_ptr_type
&& TREE_CODE (EXPR_WFL_NODE (wfl)) == IDENTIFIER_NODE)
{
const char *self_name = IDENTIFIER_POINTER (EXPR_WFL_NODE (wfl));
if (!strncmp (self_name, "java.lang.", 10))
......@@ -16236,7 +16292,8 @@ patch_new_array_init (type, node)
TREE_PURPOSE (current) = NULL_TREE;
all_constant = 0;
}
if (elt && TREE_VALUE (elt) == error_mark_node)
if (elt && TREE_CODE (elt) == TREE_LIST
&& TREE_VALUE (elt) == error_mark_node)
error_seen = 1;
}
......
......@@ -687,12 +687,11 @@ typedef struct _jdeplist {
}
/* Register an import */
#define REGISTER_IMPORT(WHOLE, NAME) \
{ \
IS_A_SINGLE_IMPORT_CLASSFILE_NAME_P ((NAME)) = 1; \
node = build_tree_list ((WHOLE), (NAME)); \
TREE_CHAIN (node) = ctxp->import_list; \
ctxp->import_list = node; \
#define REGISTER_IMPORT(WHOLE, NAME) \
{ \
IS_A_SINGLE_IMPORT_CLASSFILE_NAME_P ((NAME)) = 1; \
ctxp->import_list = chainon (ctxp->import_list, \
build_tree_list ((WHOLE), (NAME))); \
}
/* Macro to access the osb (opening square bracket) count */
......
......@@ -99,8 +99,9 @@ static void complete_class_report_errors PARAMS ((jdep *));
static int process_imports PARAMS ((void));
static void read_import_dir PARAMS ((tree));
static int find_in_imports_on_demand PARAMS ((tree));
static int find_in_imports PARAMS ((tree));
static void find_in_imports PARAMS ((tree));
static int check_pkg_class_access PARAMS ((tree, tree));
static void register_package PARAMS ((tree));
static tree resolve_package PARAMS ((tree, tree *));
static tree lookup_package_type PARAMS ((const char *, int));
static tree lookup_package_type_and_set_next PARAMS ((const char *, int, tree *));
......@@ -120,6 +121,7 @@ static tree patch_method_invocation PARAMS ((tree, tree, tree,
int *, tree *));
static int breakdown_qualified PARAMS ((tree *, tree *, tree));
static tree resolve_and_layout PARAMS ((tree, tree));
static tree qualify_and_find PARAMS ((tree, tree, tree));
static tree resolve_no_layout PARAMS ((tree, tree));
static int invocation_mode PARAMS ((tree, int));
static tree find_applicable_accessible_methods_list PARAMS ((int, tree,
......@@ -180,7 +182,7 @@ static tree build_newarray_node PARAMS ((tree, tree, int));
static tree patch_newarray PARAMS ((tree));
static tree resolve_type_during_patch PARAMS ((tree));
static tree build_this PARAMS ((int));
static tree build_wfl_wrap PARAMS ((tree));
static tree build_wfl_wrap PARAMS ((tree, int));
static tree build_return PARAMS ((int, tree));
static tree patch_return PARAMS ((tree));
static tree maybe_access_field PARAMS ((tree, tree, tree));
......@@ -682,7 +684,7 @@ package_declaration:
PACKAGE_TK name SC_TK
{
ctxp->package = EXPR_WFL_NODE ($2);
package_list = tree_cons (ctxp->package, NULL, package_list);
register_package (ctxp->package);
}
| PACKAGE_TK error
{yyerror ("Missing name"); RECOVER;}
......@@ -698,7 +700,7 @@ import_declaration:
single_type_import_declaration:
IMPORT_TK name SC_TK
{
tree name = EXPR_WFL_NODE ($2), node, last_name;
tree name = EXPR_WFL_NODE ($2), last_name;
int i = IDENTIFIER_LENGTH (name)-1;
const char *last = &IDENTIFIER_POINTER (name)[i];
while (last != IDENTIFIER_POINTER (name))
......@@ -717,7 +719,7 @@ single_type_import_declaration:
IDENTIFIER_POINTER (name),
IDENTIFIER_POINTER (err));
else
REGISTER_IMPORT ($2, last_name)
REGISTER_IMPORT ($2, last_name);
}
else
REGISTER_IMPORT ($2, last_name);
......@@ -735,10 +737,10 @@ type_import_on_demand_declaration:
/* Don't import java.lang.* twice. */
if (name != java_lang_id)
{
tree node = build_tree_list ($2, NULL_TREE);
read_import_dir ($2);
TREE_CHAIN (node) = ctxp->import_demand_list;
ctxp->import_demand_list = node;
ctxp->import_demand_list =
chainon (ctxp->import_demand_list,
build_tree_list ($2, NULL_TREE));
}
}
| IMPORT_TK name DOT_TK error
......@@ -2079,6 +2081,11 @@ dim_exprs:
dim_expr:
OSB_TK expression CSB_TK
{
if (JNUMERIC_TYPE_P (TREE_TYPE ($2)))
{
$2 = build_wfl_node ($2);
TREE_TYPE ($2) = NULL_TREE;
}
EXPR_WFL_LINECOL ($2) = $1.location;
$$ = $2;
}
......@@ -3993,23 +4000,27 @@ lookup_field_wrapper (class, name)
tree class, name;
{
tree type = class;
tree decl;
tree decl = NULL_TREE;
java_parser_context_save_global ();
decl = lookup_field (&type, name);
/* Last chance: if we're within the context of an inner class, we
might be trying to access a local variable defined in an outer
context. We try to look for it now. */
if (INNER_CLASS_TYPE_P (class) && (!decl || decl == error_mark_node))
if (INNER_CLASS_TYPE_P (class))
{
char *alias_buffer;
tree new_name;
MANGLE_OUTER_LOCAL_VARIABLE_NAME (alias_buffer, name);
name = get_identifier (alias_buffer);
type = class;
decl = lookup_field (&type, name);
new_name = get_identifier (alias_buffer);
decl = lookup_field (&type, new_name);
if (decl && decl != error_mark_node)
FIELD_LOCAL_ALIAS_USED (decl) = 1;
}
if (!decl || decl == error_mark_node)
{
type = class;
decl = lookup_field (&type, name);
}
java_parser_context_restore_global ();
return decl == error_mark_node ? NULL : decl;
......@@ -4673,7 +4684,7 @@ method_declarator (id, list)
/* Then this$<n> */
type = TREE_TYPE (DECL_CONTEXT (GET_CPC ()));
thisn = build_current_thisn (TYPE_NAME (GET_CPC ()));
thisn = build_current_thisn (TREE_TYPE (GET_CPC ()));
list = tree_cons (build_wfl_node (thisn), build_pointer_type (type),
list);
}
......@@ -5207,10 +5218,8 @@ java_complete_class ()
push_obstacks (&permanent_obstack, &permanent_obstack);
/* Process imports and reverse the import on demand list */
/* Process imports */
process_imports ();
if (ctxp->import_demand_list)
ctxp->import_demand_list = nreverse (ctxp->import_demand_list);
/* Rever things so we have the right order */
ctxp->class_list = nreverse (ctxp->class_list);
......@@ -5415,10 +5424,10 @@ do_resolve_class (enclosing, class_type, decl, cl)
tree enclosing, class_type, decl, cl;
{
tree new_class_decl;
tree original_name = NULL_TREE;
/* Do not try to replace TYPE_NAME (class_type) by a variable, since
its is changed by find_in_imports{_on_demand} */
it is changed by find_in_imports{_on_demand} and (but it doesn't
really matter) qualify_and_find */
/* 0- Search in the current class as an inner class */
......@@ -5452,12 +5461,11 @@ do_resolve_class (enclosing, class_type, decl, cl)
enclosing = do_resolve_class (NULL, name, NULL, NULL);
}
/* 1- Check for the type in single imports */
if (find_in_imports (class_type))
return NULL_TREE;
/* 1- Check for the type in single imports. This will change
TYPE_NAME() if something relevant is found */
find_in_imports (class_type);
/* 2- And check for the type in the current compilation unit. If it fails,
try with a name qualified with the package name we've seen so far */
/* 2- And check for the type in the current compilation unit */
if ((new_class_decl = IDENTIFIER_CLASS_VALUE (TYPE_NAME (class_type))))
{
if (!CLASS_LOADED_P (TREE_TYPE (new_class_decl)) &&
......@@ -5466,34 +5474,37 @@ do_resolve_class (enclosing, class_type, decl, cl)
return IDENTIFIER_CLASS_VALUE (TYPE_NAME (class_type));
}
original_name = TYPE_NAME (class_type);
/* 3- Search according to the current package definition */
if (!QUALIFIED_P (TYPE_NAME (class_type)))
{
if ((new_class_decl = qualify_and_find (class_type, ctxp->package,
TYPE_NAME (class_type))))
return new_class_decl;
}
/* 4- Check the import on demands. Don't allow bar.baz to be
imported from foo.* */
if (!QUALIFIED_P (TYPE_NAME (class_type)))
if (find_in_imports_on_demand (class_type))
return NULL_TREE;
/* If found in find_in_imports_on_demant, the type has already been
loaded. */
if ((new_class_decl = IDENTIFIER_CLASS_VALUE (TYPE_NAME (class_type))))
return new_class_decl;
/* 5- Try with a name qualified with the package name we've seen so far */
if (!QUALIFIED_P (TYPE_NAME (class_type)))
{
tree package;
for (package = package_list; package; package = TREE_CHAIN (package))
{
tree new_qualified;
new_qualified = merge_qualified_name (TREE_PURPOSE (package),
original_name);
TYPE_NAME (class_type) = new_qualified;
new_class_decl = IDENTIFIER_CLASS_VALUE (TYPE_NAME (class_type));
if (!new_class_decl)
load_class (TYPE_NAME (class_type), 0);
new_class_decl = IDENTIFIER_CLASS_VALUE (TYPE_NAME (class_type));
if (new_class_decl)
{
if (!CLASS_LOADED_P (TREE_TYPE (new_class_decl)) &&
!CLASS_FROM_SOURCE_P (TREE_TYPE (new_class_decl)))
load_class (TYPE_NAME (class_type), 0);
return IDENTIFIER_CLASS_VALUE (TYPE_NAME (class_type));
}
}
}
TYPE_NAME (class_type) = original_name;
/* 3- Check an other compilation unit that bears the name of type */
if ((new_class_decl = qualify_and_find (class_type,
TREE_PURPOSE (package),
TYPE_NAME (class_type))))
return new_class_decl;
}
/* 5- Check an other compilation unit that bears the name of type */
load_class (TYPE_NAME (class_type), 0);
if (check_pkg_class_access (TYPE_NAME (class_type),
(cl ? cl : lookup_cl (decl))))
......@@ -5502,16 +5513,30 @@ do_resolve_class (enclosing, class_type, decl, cl)
if ((new_class_decl = IDENTIFIER_CLASS_VALUE (TYPE_NAME (class_type))))
return new_class_decl;
/* 4- Check the import on demands. Don't allow bar.baz to be
imported from foo.* */
if (!QUALIFIED_P (TYPE_NAME (class_type)))
if (find_in_imports_on_demand (class_type))
return NULL_TREE;
/* 5- Last call for a resolution */
/* 6- Last call for a resolution */
return IDENTIFIER_CLASS_VALUE (TYPE_NAME (class_type));
}
static tree
qualify_and_find (class_type, package, name)
tree class_type, package, name;
{
tree new_qualified = merge_qualified_name (package, name);
tree new_class_decl;
if (!IDENTIFIER_CLASS_VALUE (new_qualified))
load_class (new_qualified, 0);
if ((new_class_decl = IDENTIFIER_CLASS_VALUE (new_qualified)))
{
if (!CLASS_LOADED_P (TREE_TYPE (new_class_decl)) &&
!CLASS_FROM_SOURCE_P (TREE_TYPE (new_class_decl)))
load_class (new_qualified, 0);
TYPE_NAME (class_type) = new_qualified;
return IDENTIFIER_CLASS_VALUE (new_qualified);
}
return NULL_TREE;
}
/* Resolve NAME and lay it out (if not done and if not the current
parsed class). Return a decl node. This function is meant to be
called when type resolution is necessary during the walk pass. */
......@@ -6385,10 +6410,10 @@ process_imports ()
return 0;
}
/* Possibly find a class imported by a single-type import statement. Return
1 if an error occured, 0 otherwise. */
/* Possibly find and mark a class imported by a single-type import
statement. */
static int
static void
find_in_imports (class_type)
tree class_type;
{
......@@ -6400,7 +6425,6 @@ find_in_imports (class_type)
TYPE_NAME (class_type) = EXPR_WFL_NODE (TREE_PURPOSE (import));
QUALIFIED_P (TYPE_NAME (class_type)) = 1;
}
return 0;
}
static int
......@@ -6610,6 +6634,30 @@ find_in_imports_on_demand (class_type)
return (seen_once < 0 ? 0 : seen_once); /* It's ok not to have found */
}
/* Add package NAME to the list of package encountered so far. To
speed up class lookup in do_resolve_class, we make sure a
particular package is added only once. */
static void
register_package (name)
tree name;
{
static struct hash_table _pht, *pht = NULL;
if (!pht)
{
hash_table_init (&_pht, hash_newfunc,
java_hash_hash_tree_node, java_hash_compare_tree_node);
pht = &_pht;
}
if (!hash_lookup (pht, (const hash_table_key) name, FALSE, NULL))
{
package_list = chainon (package_list, build_tree_list (name, NULL));
hash_lookup (pht, (const hash_table_key) name, TRUE, NULL);
}
}
static tree
resolve_package (pkg, next)
tree pkg, *next;
......@@ -7378,10 +7426,12 @@ maybe_generate_pre_expand_clinit (class_type)
for (current = TYPE_CLINIT_STMT_LIST (class_type); current;
current = TREE_CHAIN (current))
{
tree stmt = current;
/* We build the assignment expression that will initialize the
field to its value. There are strict rules on static
initializers (8.5). FIXME */
tree stmt = build_debugable_stmt (EXPR_WFL_LINECOL (current), current);
if (TREE_CODE (stmt) != BLOCK)
stmt = build_debugable_stmt (EXPR_WFL_LINECOL (stmt), stmt);
java_method_add_stmt (mdecl, stmt);
}
......@@ -8342,12 +8392,6 @@ java_expand_classes ()
java_layout_classes ();
java_parse_abort_on_error ();
/* The list of packages declaration seen so far needs to be
reversed, so that package declared in a file being compiled gets
priority over packages declared as a side effect of parsing other
files.*/
package_list = nreverse (package_list);
saved_ctxp = ctxp_for_generation;
for (; ctxp_for_generation; ctxp_for_generation = ctxp_for_generation->next)
{
......@@ -8426,7 +8470,7 @@ make_qualified_primary (primary, right, location)
tree wfl;
if (TREE_CODE (primary) != EXPR_WITH_FILE_LOCATION)
wfl = build_wfl_wrap (primary);
wfl = build_wfl_wrap (primary, location);
else
{
wfl = primary;
......@@ -8643,7 +8687,8 @@ resolve_field_access (qual_wfl, field_decl, field_type)
return error_mark_node;
/* Resolve the LENGTH field of an array here */
if (DECL_NAME (decl) == length_identifier_node && TYPE_ARRAY_P (type_found)
if (DECL_P (decl) && DECL_NAME (decl) == length_identifier_node
&& TYPE_ARRAY_P (type_found)
&& ! flag_emit_class_files && ! flag_emit_xref)
{
tree length = build_java_array_length_access (where_found);
......@@ -10035,7 +10080,8 @@ find_applicable_accessible_methods_list (lc, class, name, arglist)
}
/* Search interfaces */
if (CLASS_INTERFACE (TYPE_NAME (class)))
if (TREE_CODE (TYPE_NAME (class)) == TYPE_DECL
&& CLASS_INTERFACE (TYPE_NAME (class)))
{
static struct hash_table t, *searched_interfaces = NULL;
static int search_not_done = 0;
......@@ -10183,6 +10229,7 @@ find_most_specific_methods_list (list)
tree list;
{
int max = 0;
int abstract, candidates;
tree current, new_list = NULL_TREE;
for (current = list; current; current = TREE_CHAIN (current))
{
......@@ -10209,24 +10256,33 @@ find_most_specific_methods_list (list)
}
/* Review the list and select the maximally specific methods */
for (current = list; current; current = TREE_CHAIN (current))
for (current = list, abstract = -1, candidates = -1;
current; current = TREE_CHAIN (current))
if (DECL_SPECIFIC_COUNT (TREE_VALUE (current)) == max)
new_list = tree_cons (NULL_TREE, TREE_VALUE (current), new_list);
{
new_list = tree_cons (NULL_TREE, TREE_VALUE (current), new_list);
abstract += (METHOD_ABSTRACT (TREE_VALUE (current)) ? 1 : 0);
candidates++;
}
/* If we have several and they're all abstract, just pick the
closest one. */
if (candidates > 0 && (candidates == abstract))
{
new_list = nreverse (new_list);
TREE_CHAIN (new_list) = NULL_TREE;
}
if (new_list && TREE_CHAIN (new_list))
/* We have several, we couldn't find a most specific, all but one are
abstract, we pick the only non abstract one. */
if (candidates > 0 && !max && (candidates == abstract+1))
{
tree c;
for (c = new_list; c && METHOD_ABSTRACT (TREE_VALUE (c));
c = TREE_CHAIN (c))
;
if (!c)
{
new_list = nreverse (new_list);
TREE_CHAIN (new_list) = NULL_TREE;
}
for (current = new_list; current; current = TREE_CHAIN (current))
if (!METHOD_ABSTRACT (TREE_VALUE (current)))
{
TREE_CHAIN (current) = NULL_TREE;
new_list = current;
}
}
/* If we can't find one, lower expectations and try to gather multiple
......@@ -11465,8 +11521,9 @@ maybe_absorb_scoping_blocks ()
/* Wrap a non WFL node around a WFL. */
static tree
build_wfl_wrap (node)
build_wfl_wrap (node, location)
tree node;
int location;
{
tree wfl, node_to_insert = node;
......@@ -11478,7 +11535,7 @@ build_wfl_wrap (node)
else
wfl = build_expr_wfl (NULL_TREE, ctxp->filename, 0, 0);
EXPR_WFL_LINECOL (wfl) = EXPR_WFL_LINECOL (node);
EXPR_WFL_LINECOL (wfl) = location;
EXPR_WFL_QUALIFICATION (wfl) = build_tree_list (node_to_insert, NULL_TREE);
return wfl;
}
......@@ -11644,7 +11701,8 @@ maybe_build_primttype_type_ref (rhs, wfl)
tree n = TREE_OPERAND (rhs, 1);
if (TREE_CODE (n) == VAR_DECL
&& DECL_NAME (n) == TYPE_identifier_node
&& rhs_type == class_ptr_type)
&& rhs_type == class_ptr_type
&& TREE_CODE (EXPR_WFL_NODE (wfl)) == IDENTIFIER_NODE)
{
const char *self_name = IDENTIFIER_POINTER (EXPR_WFL_NODE (wfl));
if (!strncmp (self_name, "java.lang.", 10))
......@@ -13536,7 +13594,8 @@ patch_new_array_init (type, node)
TREE_PURPOSE (current) = NULL_TREE;
all_constant = 0;
}
if (elt && TREE_VALUE (elt) == error_mark_node)
if (elt && TREE_CODE (elt) == TREE_LIST
&& TREE_VALUE (elt) == error_mark_node)
error_seen = 1;
}
......
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