aboutsummaryrefslogtreecommitdiff
path: root/libjava/interpret.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/interpret.cc')
-rw-r--r--libjava/interpret.cc47
1 files changed, 16 insertions, 31 deletions
diff --git a/libjava/interpret.cc b/libjava/interpret.cc
index 43d627921fb..15fb413e835 100644
--- a/libjava/interpret.cc
+++ b/libjava/interpret.cc
@@ -1,6 +1,6 @@
// interpret.cc - Code for the interpreter
-/* Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation
+/* Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation
This file is part of libgcj.
@@ -240,21 +240,19 @@ static jint get4(unsigned char* loc) {
} \
while (0)
-void
-_Jv_InterpMethod::run_normal (ffi_cif *,
- void* ret,
- ffi_raw * args,
- void* __this)
+void _Jv_InterpMethod::run_normal (ffi_cif *,
+ void* ret,
+ ffi_raw * args,
+ void* __this)
{
_Jv_InterpMethod *_this = (_Jv_InterpMethod *) __this;
_this->run (ret, args);
}
-void
-_Jv_InterpMethod::run_synch_object (ffi_cif *,
- void* ret,
- ffi_raw * args,
- void* __this)
+void _Jv_InterpMethod::run_synch_object (ffi_cif *,
+ void* ret,
+ ffi_raw * args,
+ void* __this)
{
_Jv_InterpMethod *_this = (_Jv_InterpMethod *) __this;
@@ -264,27 +262,14 @@ _Jv_InterpMethod::run_synch_object (ffi_cif *,
_this->run (ret, args);
}
-void
-_Jv_InterpMethod::run_class (ffi_cif *,
- void* ret,
- ffi_raw * args,
- void* __this)
-{
- _Jv_InterpMethod *_this = (_Jv_InterpMethod *) __this;
- _Jv_InitClass (_this->defining_class);
- _this->run (ret, args);
-}
-
-void
-_Jv_InterpMethod::run_synch_class (ffi_cif *,
- void* ret,
- ffi_raw * args,
- void* __this)
+void _Jv_InterpMethod::run_synch_class (ffi_cif *,
+ void* ret,
+ ffi_raw * args,
+ void* __this)
{
_Jv_InterpMethod *_this = (_Jv_InterpMethod *) __this;
jclass sync = _this->defining_class;
- _Jv_InitClass (sync);
JvSynchronize mutex (sync);
_this->run (ret, args);
@@ -2848,6 +2833,7 @@ _Jv_InterpMethod::run (void *retp, ffi_raw *args)
sp -= rmeth->stack_item_count;
+ _Jv_InitClass (rmeth->klass);
fun = (void (*)()) rmeth->method->ncode;
#ifdef DIRECT_THREADED
@@ -2917,9 +2903,6 @@ _Jv_InterpMethod::run (void *retp, ffi_raw *args)
{
int index = GET2U ();
jclass klass = (_Jv_ResolvePoolEntry (defining_class, index)).clazz;
- // We initialize here because otherwise `size_in_bytes' may
- // not be set correctly, leading us to pass `0' as the size.
- // FIXME: fix in the allocator? There is a PR for this.
_Jv_InitClass (klass);
jobject res = _Jv_AllocObject (klass, klass->size_in_bytes);
PUSHA (res);
@@ -2955,6 +2938,7 @@ _Jv_InterpMethod::run (void *retp, ffi_raw *args)
int index = GET2U ();
jclass klass = (_Jv_ResolvePoolEntry (defining_class, index)).clazz;
int size = POPI();
+ _Jv_InitClass (klass);
jobject result = _Jv_NewObjectArray (size, klass, 0);
PUSHA (result);
@@ -3088,6 +3072,7 @@ _Jv_InterpMethod::run (void *retp, ffi_raw *args)
jclass type
= (_Jv_ResolvePoolEntry (defining_class, kind_index)).clazz;
+ _Jv_InitClass (type);
jint *sizes = (jint*) __builtin_alloca (sizeof (jint)*dim);
for (int i = dim - 1; i >= 0; i--)