jcf-write.c (generate_bytecode_insns): Use qualifying type for non-static method calls.
gcc/java * jcf-write.c (generate_bytecode_insns): Use qualifying type for non-static method calls. libjava * testsuite/libjava.jacks/jacks.xfail: Removed 13.1-runtime-method-5. From-SVN: r112102
This commit is contained in:
parent
34a9f549fd
commit
b32d6f93f8
4 changed files with 29 additions and 10 deletions
|
@ -1,3 +1,8 @@
|
|||
2006-03-15 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* jcf-write.c (generate_bytecode_insns): Use qualifying type for
|
||||
non-static method calls.
|
||||
|
||||
2006-03-15 David Daney <ddaney@avtrex.com>
|
||||
|
||||
* java-tree.h : Moved comment for TYPE_DOT_CLASS adjacent to its
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Write out a Java(TM) class file.
|
||||
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
|
||||
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
@ -2610,26 +2610,36 @@ generate_bytecode_insns (tree exp, int target, struct jcf_partial *state)
|
|||
tree context = DECL_CONTEXT (f);
|
||||
int index, interface = 0;
|
||||
RESERVE (5);
|
||||
|
||||
/* If the method is not static, use the qualifying type.
|
||||
However, don't use the qualifying type if the method
|
||||
was declared in Object. */
|
||||
if (! METHOD_STATIC (f)
|
||||
&& ! DECL_CONSTRUCTOR_P (f)
|
||||
&& ! METHOD_PRIVATE (f)
|
||||
&& DECL_CONTEXT (f) != object_type_node)
|
||||
{
|
||||
tree arg1 = TREE_VALUE (TREE_OPERAND (exp, 1));
|
||||
context = TREE_TYPE (TREE_TYPE (arg1));
|
||||
}
|
||||
|
||||
if (METHOD_STATIC (f))
|
||||
OP1 (OPCODE_invokestatic);
|
||||
else if (DECL_CONSTRUCTOR_P (f) || CALL_USING_SUPER (exp)
|
||||
|| METHOD_PRIVATE (f))
|
||||
|| METHOD_PRIVATE (f))
|
||||
OP1 (OPCODE_invokespecial);
|
||||
else
|
||||
{
|
||||
if (CLASS_INTERFACE (TYPE_NAME (context)))
|
||||
{
|
||||
tree arg1 = TREE_VALUE (TREE_OPERAND (exp, 1));
|
||||
context = TREE_TYPE (TREE_TYPE (arg1));
|
||||
if (CLASS_INTERFACE (TYPE_NAME (context)))
|
||||
interface = 1;
|
||||
}
|
||||
interface = 1;
|
||||
if (interface)
|
||||
OP1 (OPCODE_invokeinterface);
|
||||
else
|
||||
OP1 (OPCODE_invokevirtual);
|
||||
}
|
||||
index = find_methodref_with_class_index (&state->cpool, f, context);
|
||||
|
||||
index = find_methodref_with_class_index (&state->cpool, f,
|
||||
context);
|
||||
OP2 (index);
|
||||
if (interface)
|
||||
{
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2006-03-15 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* testsuite/libjava.jacks/jacks.xfail: Removed
|
||||
13.1-runtime-method-5.
|
||||
|
||||
2006-03-15 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
PR java/26638:
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
13.1-runtime-constant-1
|
||||
13.1-runtime-constant-3
|
||||
13.1-runtime-field-1
|
||||
13.1-runtime-method-5
|
||||
13.1-runtime-method-6
|
||||
13.4.8-constant-runtime-1
|
||||
13.4.8-constant-runtime-2
|
||||
|
|
Loading…
Add table
Reference in a new issue