From 2cb3951d3277847945a0c1cc1516fdcde59a1912 Mon Sep 17 00:00:00 2001 From: Alexandre Petit-Bianco Date: Mon, 30 Oct 2000 02:37:25 +0000 Subject: [PATCH] parse.y (patch_method_invocation): NULLify this_arg when already inserted. 2000-10-25 Alexandre Petit-Bianco * parse.y (patch_method_invocation): NULLify this_arg when already inserted. (maybe_use_access_method): Handle call to methods unrelated to the current class. Fixed comment. Fixes gcj/361. (http://sources.redhat.com/ml/java-prs/2000-q4/msg00072.html http://gcc.gnu.org/ml/gcc-patches/2000-10/msg00993.html) From-SVN: r37139 --- gcc/java/ChangeLog | 8 ++++++++ gcc/java/parse.y | 10 +++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 78d2cf851b0..363b6da61fd 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -10,6 +10,14 @@ * Makefile.in: Delete. * config-lang.in: Delete outputs= line. +2000-10-25 Alexandre Petit-Bianco + + * parse.y (patch_method_invocation): NULLify this_arg when already + inserted. + (maybe_use_access_method): Handle call to methods unrelated to the + current class. Fixed comment. + Fixes gcj/361. + 2000-10-24 Tom Tromey * lex.c (java_new_lexer): Initialize new fields. Work around diff --git a/gcc/java/parse.y b/gcc/java/parse.y index fce75642764..b705fc6f594 100644 --- a/gcc/java/parse.y +++ b/gcc/java/parse.y @@ -9930,7 +9930,10 @@ patch_method_invocation (patch, primary, where, is_static, ret_decl) argument list. In the meantime, the selected function might have be replaced by a generated stub. */ if (maybe_use_access_method (is_super_init, &list, &this_arg)) - args = tree_cons (NULL_TREE, this_arg, args); + { + args = tree_cons (NULL_TREE, this_arg, args); + this_arg = NULL_TREE; /* So it doesn't get chained twice */ + } } } @@ -10086,9 +10089,10 @@ maybe_use_access_method (is_super_init, mdecl, this_arg) /* If we're calling a method found in an enclosing class, generate what it takes to retrieve the right this. Don't do that if we're - invoking a static method. */ + invoking a static method. Note that if MD's type is unrelated to + CURRENT_CLASS, then the current this can be used. */ - if (non_static_context) + if (non_static_context && DECL_CONTEXT (md) != object_type_node) { ctx = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (current_class))); if (inherits_from_p (ctx, DECL_CONTEXT (md))) -- 2.30.2