jvmti.cc (CHECK_FOR_NATIVE_METHOD): New macro.

2007-02-07  Kyle Galloway  <kgallowa@redhat.com>

    * jvmti.cc (CHECK_FOR_NATIVE_METHOD): New macro.
    (_Jv_JVMTI_GetMaxLocals): New method.
    * include/java-interp.h
    (_Jv_InterpMethod::get_max_locals): New method.

From-SVN: r121700
This commit is contained in:
Kyle Galloway 2007-02-07 23:28:04 +00:00 committed by Kyle Galloway
parent 304237321b
commit 04ab45732d
3 changed files with 50 additions and 1 deletions

View File

@ -1,3 +1,10 @@
2007-02-07 Kyle Galloway <kgallowa@redhat.com>
* jvmti.cc (CHECK_FOR_NATIVE_METHOD): New macro.
(_Jv_JVMTI_GetMaxLocals): New method.
* include/java-interp.h
(_Jv_InterpMethod::get_max_locals): New method.
2007-02-01 Marco Trudel <mtrudel@gmx.ch>
* jni.cc (_Jv_JNI_DeleteWeakGlobalRef): Check for NULL objects.

View File

@ -219,6 +219,11 @@ class _Jv_InterpMethod : public _Jv_MethodBase
*/
void get_line_table (jlong& start, jlong& end, jintArray& line_numbers,
jlongArray& code_indices);
int get_max_locals ()
{
return static_cast<int> (max_locals);
}
/* Installs a break instruction at the given code index. Returns
the pc_t of the breakpoint or NULL if index is invalid. */

View File

@ -155,6 +155,18 @@ ReentrantReadWriteLock *_envListLock = NULL;
} \
while (0)
#define CHECK_FOR_NATIVE_METHOD(AjmethodID) \
do \
{ \
jboolean is_native; \
jvmtiError jerr = env->IsMethodNative (AjmethodID, &is_native); \
if (jerr != JVMTI_ERROR_NONE) \
return jerr; \
if (is_native) \
return JVMTI_ERROR_NATIVE_METHOD; \
} \
while (0)
static jvmtiError JNICALL
_Jv_JVMTI_SuspendThread (MAYBE_UNUSED jvmtiEnv *env, jthread thread)
{
@ -729,6 +741,31 @@ _Jv_JVMTI_IsMethodSynthetic (MAYBE_UNUSED jvmtiEnv *env, jmethodID method,
return JVMTI_ERROR_NONE;
}
static jvmtiError JNICALL
_Jv_JVMTI_GetMaxLocals (MAYBE_UNUSED jvmtiEnv *env, jmethodID method,
jint *max_locals)
{
REQUIRE_PHASE (env, JVMTI_PHASE_START | JVMTI_PHASE_LIVE);
NULL_CHECK (max_locals);
CHECK_FOR_NATIVE_METHOD (method);
jclass klass;
jvmtiError jerr = env->GetMethodDeclaringClass (method, &klass);
if (jerr != JVMTI_ERROR_NONE)
return jerr;
_Jv_InterpMethod *imeth = reinterpret_cast<_Jv_InterpMethod *>
(_Jv_FindInterpreterMethod (klass, method));
if (imeth == NULL)
return JVMTI_ERROR_INVALID_METHODID;
*max_locals = imeth->get_max_locals ();
return JVMTI_ERROR_NONE;
}
static jvmtiError JNICALL
_Jv_JVMTI_GetMethodDeclaringClass (MAYBE_UNUSED jvmtiEnv *env,
jmethodID method,
@ -1656,7 +1693,7 @@ struct _Jv_jvmtiEnv _Jv_JVMTI_Interface =
_Jv_JVMTI_GetMethodDeclaringClass, // GetMethodDeclaringClass
_Jv_JVMTI_GetMethodModifiers, // GetMethodModifers
RESERVED, // reserved67
UNIMPLEMENTED, // GetMaxLocals
_Jv_JVMTI_GetMaxLocals, // GetMaxLocals
UNIMPLEMENTED, // GetArgumentsSize
_Jv_JVMTI_GetLineNumberTable, // GetLineNumberTable
UNIMPLEMENTED, // GetMethodLocation