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:
Tom Tromey 2000-02-04 20:49:27 +00:00 committed by Tom Tromey
parent a89608cbeb
commit facc279fc1
8 changed files with 312 additions and 58 deletions

View file

@ -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__ */