diff options
author | Tom Tromey <tromey@redhat.com> | 2003-01-24 19:58:21 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 2003-01-24 19:58:21 +0000 |
commit | 4c98b1b0782cb1ad25a5d1f44391d65b12f9a566 (patch) | |
tree | f37c4a601e54ff85516e178f32e45db587bf62ce /libjava/defineclass.cc | |
parent | d291503a6733535c462bf71c03347c2452a523ee (diff) | |
download | gcc-4c98b1b0782cb1ad25a5d1f44391d65b12f9a566.zip gcc-4c98b1b0782cb1ad25a5d1f44391d65b12f9a566.tar.gz gcc-4c98b1b0782cb1ad25a5d1f44391d65b12f9a566.tar.bz2 |
defineclass.cc (handleMethodsEnd): Precompute code for static method.
* defineclass.cc (handleMethodsEnd): Precompute code for static
method.
(handleCodeAttribute): Likewise.
* resolve.cc (ncode): Use run_class for unsynchronized static
methods.
* include/java-interp.h (class _Jv_InterpMethod): Declare
run_class.
* interpret.cc (run_synch_class): Initialize class.
(run) [insn_invokestatic]: Don't initialize class.
[insn_anewarray]: Likewise.
[insn_multianewarray]: Likewise.
(run_class): New function.
From-SVN: r61727
Diffstat (limited to 'libjava/defineclass.cc')
-rw-r--r-- | libjava/defineclass.cc | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/libjava/defineclass.cc b/libjava/defineclass.cc index 81de5ad..001fa01 100644 --- a/libjava/defineclass.cc +++ b/libjava/defineclass.cc @@ -1,6 +1,6 @@ // defineclass.cc - defining a class from .class format. -/* Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation +/* Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -1267,6 +1267,15 @@ void _Jv_ClassReader::handleCodeAttribute code_length); def->interpreted_methods[method_index] = method; + + if ((method->self->accflags & java::lang::reflect::Modifier::STATIC)) + { + // Precompute the ncode field for a static method. This lets us + // call a static method of an interpreted class from precompiled + // code without first resolving the class (that will happen + // during class initialization instead). + method->self->ncode = method->ncode (); + } } void _Jv_ClassReader::handleExceptionTableEntry @@ -1302,6 +1311,16 @@ void _Jv_ClassReader::handleMethodsEnd () m->self = method; m->function = NULL; def->interpreted_methods[i] = m; + + if ((method->accflags & Modifier::STATIC)) + { + // Precompute the ncode field for a static method. + // This lets us call a static method of an + // interpreted class from precompiled code without + // first resolving the class (that will happen + // during class initialization instead). + method->ncode = m->ncode (); + } } } else if ((method->accflags & Modifier::ABSTRACT) != 0) |