aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandre Petit-Bianco <apbianco@gcc.gnu.org>2000-06-21 22:17:35 -0700
committerAlexandre Petit-Bianco <apbianco@gcc.gnu.org>2000-06-21 22:17:35 -0700
commit9a7ab4b335fbcbe44a95d92defed46c0e16a5b8e (patch)
treeff9df27c0d4cd502638abc1b22e1967847919550
parente605b0403e89c0286910889cfca158bfc2567cfa (diff)
downloadgcc-9a7ab4b335fbcbe44a95d92defed46c0e16a5b8e.zip
gcc-9a7ab4b335fbcbe44a95d92defed46c0e16a5b8e.tar.gz
gcc-9a7ab4b335fbcbe44a95d92defed46c0e16a5b8e.tar.bz2
[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
-rw-r--r--gcc/java/ChangeLog64
-rw-r--r--gcc/java/check-init.c4
-rw-r--r--gcc/java/except.c2
-rw-r--r--gcc/java/expr.c5
-rw-r--r--gcc/java/java-tree.def4
-rw-r--r--gcc/java/java-tree.h5
-rw-r--r--gcc/java/jcf-parse.c2
-rw-r--r--gcc/java/jcf-write.c5
-rw-r--r--gcc/java/parse.c1097
-rw-r--r--gcc/java/parse.h11
-rw-r--r--gcc/java/parse.y231
11 files changed, 806 insertions, 624 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index 1c4743f..70b26f0 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -1,3 +1,43 @@
+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
diff --git a/gcc/java/check-init.c b/gcc/java/check-init.c
index 24be236..ffa65da 100644
--- a/gcc/java/check-init.c
+++ b/gcc/java/check-init.c
@@ -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
diff --git a/gcc/java/except.c b/gcc/java/except.c
index 80f24f8..9075e61 100644
--- a/gcc/java/except.c
+++ b/gcc/java/except.c
@@ -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
diff --git a/gcc/java/expr.c b/gcc/java/expr.c
index 9a583b1..886c0cd 100644
--- a/gcc/java/expr.c
+++ b/gcc/java/expr.c
@@ -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,
diff --git a/gcc/java/java-tree.def b/gcc/java/java-tree.def
index 1b00769..930979b 100644
--- a/gcc/java/java-tree.def
+++ b/gcc/java/java-tree.def
@@ -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,
diff --git a/gcc/java/java-tree.h b/gcc/java/java-tree.h
index 8f2b2c8..6f3d327 100644
--- a/gcc/java/java-tree.h
+++ b/gcc/java/java-tree.h
@@ -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)
diff --git a/gcc/java/jcf-parse.c b/gcc/java/jcf-parse.c
index 6ef02bc..bd41b8b 100644
--- a/gcc/java/jcf-parse.c
+++ b/gcc/java/jcf-parse.c
@@ -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))); \
diff --git a/gcc/java/jcf-write.c b/gcc/java/jcf-write.c
index 483a4a9..3fc8b30 100644
--- a/gcc/java/jcf-write.c
+++ b/gcc/java/jcf-write.c
@@ -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);
diff --git a/gcc/java/parse.c b/gcc/java/parse.c
index 22c5bf1..415d877 100644
--- a/gcc/java/parse.c
+++ b/gcc/java/parse.c
@@ -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;
}
diff --git a/gcc/java/parse.h b/gcc/java/parse.h
index 24b0b9b..45573fb 100644
--- a/gcc/java/parse.h
+++ b/gcc/java/parse.h
@@ -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 */
diff --git a/gcc/java/parse.y b/gcc/java/parse.y
index 6b13e0c..3cf2df4 100644
--- a/gcc/java/parse.y
+++ b/gcc/java/parse.y
@@ -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;
}