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
This commit is contained in:
parent
d291503a67
commit
4c98b1b078
5 changed files with 73 additions and 21 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue