aboutsummaryrefslogtreecommitdiff
path: root/gcc/java/parse.y
diff options
context:
space:
mode:
authorAlexandre Petit-Bianco <apbianco@redhat.com>2001-07-11 00:33:43 -0700
committerAlexandre Petit-Bianco <apbianco@gcc.gnu.org>2001-07-11 00:33:43 -0700
commit2df37a59e2e67d2f044c8609d12d5263b52b21bc (patch)
tree0a8efa7d178e22f6ccfca66a5e9ef32573adf206 /gcc/java/parse.y
parent3a2a1b5264c1610b99b992f923261b5c80f96bf9 (diff)
downloadgcc-2df37a59e2e67d2f044c8609d12d5263b52b21bc.zip
gcc-2df37a59e2e67d2f044c8609d12d5263b52b21bc.tar.gz
gcc-2df37a59e2e67d2f044c8609d12d5263b52b21bc.tar.bz2
[multiple changes]
2001-07-10 Alexandre Petit-Bianco <apbianco@redhat.com> * lang-specs.h: Forbit the use if `-femit-class-file{s}' without `-fsyntax-only.' Fixes PR java/3248 2001-07-10 Alexandre Petit-Bianco <apbianco@redhat.com> * jcf-io.c (find_class): Clarified error message. Fixes PR java/2603 2001-07-10 Alexandre Petit-Bianco <apbianco@redhat.com> * parse.h (INNER_ENCLOSING_SCOPE_CHECK): No `this' is fine if the current function is static. Fixes PR java/1970 2001-07-09 Alexandre Petit-Bianco <apbianco@redhat.com> * parse.y (patch_method_invocation): Add enclosing context to ctor calls if necessary. Fixes PR java/2953 2001-07-09 Alexandre Petit-Bianco <apbianco@redhat.com> * parse.y (resolve_package): Abort if qualified expression member isn't right. (qualify_ambiguous_name): Don't qualify as type if `this' in use. Fixes PR java/1391 (http://gcc.gnu.org/ml/gcc-patches/2001-07/msg00701.html ) From-SVN: r43927
Diffstat (limited to 'gcc/java/parse.y')
-rw-r--r--gcc/java/parse.y17
1 files changed, 13 insertions, 4 deletions
diff --git a/gcc/java/parse.y b/gcc/java/parse.y
index e4e682b..8c18069 100644
--- a/gcc/java/parse.y
+++ b/gcc/java/parse.y
@@ -6818,6 +6818,10 @@ resolve_package (pkg, next)
for (acc = NULL_TREE, current = EXPR_WFL_QUALIFICATION (pkg);
current; current = TREE_CHAIN (current))
{
+ /* If we don't have what we're expecting, exit now. TYPE_NAME
+ will be null and the error caught later. */
+ if (TREE_CODE (QUAL_WFL (current)) != EXPR_WITH_FILE_LOCATION)
+ break;
acc = merge_qualified_name (acc, EXPR_WFL_NODE (QUAL_WFL (current)));
if ((type_name = resolve_no_layout (acc, NULL_TREE)))
{
@@ -10120,7 +10124,9 @@ patch_method_invocation (patch, primary, where, from_super,
to have an enclosing context passed as a second parameter (the
constructor is one of an inner class. We extract it from the
current function. */
- if (is_super_init && PURE_INNER_CLASS_TYPE_P (DECL_CONTEXT (list)))
+ if ((is_super_init ||
+ (TREE_CODE (patch) == CALL_EXPR && name == this_identifier_node))
+ && PURE_INNER_CLASS_TYPE_P (DECL_CONTEXT (list)))
{
tree enclosing_decl = DECL_CONTEXT (TYPE_NAME (current_class));
tree extra_arg;
@@ -10986,9 +10992,12 @@ qualify_ambiguous_name (id)
of the compilation unit containing NAME,
- NAME is declared by exactly on type-import-on-demand declaration
of the compilation unit containing NAME.
- - NAME is actually a STRING_CST. */
- else if (TREE_CODE (name) == STRING_CST || TREE_CODE (name) == INTEGER_CST
- || (decl = resolve_and_layout (name, NULL_TREE)))
+ - NAME is actually a STRING_CST.
+ This can't happen if the expression was qualified by `this.' */
+ else if (! this_found &&
+ (TREE_CODE (name) == STRING_CST ||
+ TREE_CODE (name) == INTEGER_CST ||
+ (decl = resolve_and_layout (name, NULL_TREE))))
{
RESOLVE_TYPE_NAME_P (qual_wfl) = 1;
QUAL_RESOLUTION (qual) = decl;