defineclass.cc (handleMethodsBegin): Allocate _Jv_MethodBase pointers.
* defineclass.cc (handleMethodsBegin): Allocate _Jv_MethodBase pointers. (handleMethodsEnd): Fixed error messages. Create a _Jv_JNIMethod if the method is native. * resolve.cc (ncode): Don't handle native methods. (_Jv_JNIMethod::ncode): New method. (_Jv_PrepareClass): Handle native methods. * jni.cc (call): Renamed from _Jv_JNI_conversion_call. Include AbstractMethodError.h. (add_char): New function. (mangled_name): Likewise. * include/java-interp.h (class _Jv_JNIMethod): New class. (class _Jv_MethodBase): New class. (class _Jv_InterpMethod): Derive from _Jv_MethodBase. (_Jv_InterpClass): Changed `interpreted_methods' field to type `_Jv_MethodBase'. * include/jvm.h (_Jv_FindSymbolInExecutable): Declare. * java/lang/natRuntime.cc (libraries_size, libraries_count, libraries): New globals. (add_library): New function. (_Jv_FindSymbolInExecutable): New function. * java/lang/natClassLoader.cc (initiated_classes, loaded_classes): Now static. From-SVN: r31790
This commit is contained in:
parent
a89608cbeb
commit
facc279fc1
8 changed files with 312 additions and 58 deletions
|
@ -14,6 +14,18 @@ details. */
|
|||
#include <jvm.h>
|
||||
#include <java-cpool.h>
|
||||
|
||||
// Base class for method representations. Subclasses are interpreted
|
||||
// and JNI methods.
|
||||
class _Jv_MethodBase
|
||||
{
|
||||
protected:
|
||||
// The class which defined this method.
|
||||
_Jv_InterpClass *defining_class;
|
||||
|
||||
// The method description.
|
||||
_Jv_Method *self;
|
||||
};
|
||||
|
||||
#ifdef INTERPRETER
|
||||
|
||||
#pragma interface
|
||||
|
@ -66,8 +78,8 @@ class _Jv_InterpException {
|
|||
friend class _Jv_InterpMethod;
|
||||
};
|
||||
|
||||
class _Jv_InterpMethod {
|
||||
|
||||
class _Jv_InterpMethod : public _Jv_MethodBase
|
||||
{
|
||||
_Jv_ushort max_stack;
|
||||
_Jv_ushort max_locals;
|
||||
int code_length;
|
||||
|
@ -75,9 +87,6 @@ class _Jv_InterpMethod {
|
|||
_Jv_ushort exc_count;
|
||||
_Jv_ushort args_raw_size;
|
||||
|
||||
_Jv_InterpClass *defining_class;
|
||||
_Jv_Method *self;
|
||||
|
||||
unsigned char* bytecode ()
|
||||
{
|
||||
return
|
||||
|
@ -121,9 +130,6 @@ class _Jv_InterpMethod {
|
|||
friend class gnu::gcj::runtime::MethodInvocation;
|
||||
|
||||
friend void _Jv_PrepareClass(jclass);
|
||||
|
||||
// This function is used when making a JNI call from the interpreter.
|
||||
friend void _Jv_JNI_conversion_call (ffi_cif *, void *, ffi_raw *, void *);
|
||||
};
|
||||
|
||||
class _Jv_InterpMethodInvocation {
|
||||
|
@ -140,7 +146,7 @@ class _Jv_InterpMethodInvocation {
|
|||
|
||||
class _Jv_InterpClass : public java::lang::Class
|
||||
{
|
||||
_Jv_InterpMethod **interpreted_methods;
|
||||
_Jv_MethodBase **interpreted_methods;
|
||||
_Jv_ushort *field_initializers;
|
||||
|
||||
friend class _Jv_ClassReader;
|
||||
|
@ -165,4 +171,19 @@ struct _Jv_ResolvedMethod {
|
|||
|
||||
#endif /* INTERPRETER */
|
||||
|
||||
class _Jv_JNIMethod : public _Jv_MethodBase
|
||||
{
|
||||
// The underlying function. If NULL we have to look for the
|
||||
// function.
|
||||
void *function;
|
||||
|
||||
// This function is used when making a JNI call from the interpreter.
|
||||
static void call (ffi_cif *, void *, ffi_raw *, void *);
|
||||
|
||||
void *ncode ();
|
||||
|
||||
friend class _Jv_ClassReader;
|
||||
friend void _Jv_PrepareClass(jclass);
|
||||
};
|
||||
|
||||
#endif /* __JAVA_INTERP_H__ */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue