aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/lang/natObject.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/java/lang/natObject.cc')
-rw-r--r--libjava/java/lang/natObject.cc258
1 files changed, 0 insertions, 258 deletions
diff --git a/libjava/java/lang/natObject.cc b/libjava/java/lang/natObject.cc
deleted file mode 100644
index 25b29660ae0..00000000000
--- a/libjava/java/lang/natObject.cc
+++ /dev/null
@@ -1,258 +0,0 @@
-// natObject.cc - Implementation of the Object class.
-
-/* Copyright (C) 1998, 1999, 2000 Free Software Foundation
-
- This file is part of libgcj.
-
-This software is copyrighted work licensed under the terms of the
-Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
-details. */
-
-#include <config.h>
-
-#include <string.h>
-
-#pragma implementation "Object.h"
-
-#include <gcj/cni.h>
-#include <jvm.h>
-#include <java/lang/Object.h>
-#include <java-threads.h>
-#include <java/lang/CloneNotSupportedException.h>
-#include <java/lang/IllegalArgumentException.h>
-#include <java/lang/IllegalMonitorStateException.h>
-#include <java/lang/InterruptedException.h>
-#include <java/lang/NullPointerException.h>
-#include <java/lang/Class.h>
-#include <java/lang/Cloneable.h>
-#include <java/lang/Thread.h>
-
-#define CloneableClass _CL_Q34java4lang9Cloneable
-extern java::lang::Class CloneableClass;
-
-
-
-// This is used to represent synchronization information.
-struct _Jv_SyncInfo
-{
-#if defined (_Jv_HaveCondDestroy) || defined (_Jv_HaveMutexDestroy)
- // We only need to keep track of initialization state if we can
- // possibly finalize this object.
- bool init;
-#endif
- _Jv_ConditionVariable_t condition;
- _Jv_Mutex_t mutex;
-};
-
-
-
-jclass
-java::lang::Object::getClass (void)
-{
- _Jv_VTable **dt = (_Jv_VTable **) this;
- return (*dt)->clas;
-}
-
-jint
-java::lang::Object::hashCode (void)
-{
- return _Jv_HashCode (this);
-}
-
-jobject
-java::lang::Object::clone (void)
-{
- jclass klass = getClass ();
- jobject r;
- jint size;
-
- // We also clone arrays here. If we put the array code into
- // __JArray, then we'd have to figure out a way to find the array
- // vtbl when creating a new array class. This is easier, if uglier.
- if (klass->isArray())
- {
- __JArray *array = (__JArray *) this;
- jclass comp = getClass()->getComponentType();
- jint eltsize;
- if (comp->isPrimitive())
- {
- r = _Jv_NewPrimArray (comp, array->length);
- eltsize = comp->size();
- }
- else
- {
- r = _Jv_NewObjectArray (array->length, comp, NULL);
- eltsize = sizeof (jobject);
- }
- // We can't use sizeof on __JArray because we must account for
- // alignment of the element type.
- size = (_Jv_GetArrayElementFromElementType (array, comp) - (char *) array
- + array->length * eltsize);
- }
- else
- {
- if (! CloneableClass.isAssignableFrom(klass))
- JvThrow (new CloneNotSupportedException);
-
- size = klass->size();
- r = JvAllocObject (klass, size);
- }
-
- memcpy ((void *) r, (void *) this, size);
- return r;
-}
-
-
-//
-// Synchronization code.
-//
-
-// This global is used to make sure that only one thread sets an
-// object's `sync_info' field.
-static _Jv_Mutex_t sync_mutex;
-
-// This macro is used to see if synchronization initialization is
-// needed.
-#if defined (_Jv_HaveCondDestroy) || defined (_Jv_HaveMutexDestroy)
-# define INIT_NEEDED(Obj) (! (Obj)->sync_info \
- || ! ((_Jv_SyncInfo *) ((Obj)->sync_info))->init)
-#else
-# define INIT_NEEDED(Obj) (! (Obj)->sync_info)
-#endif
-
-#if defined (_Jv_HaveCondDestroy) || defined (_Jv_HaveMutexDestroy)
-// If we have to run a destructor for a sync_info member, then this
-// function is registered as a finalizer for the sync_info.
-static void
-finalize_sync_info (jobject obj)
-{
- _Jv_SyncInfo *si = (_Jv_SyncInfo *) obj;
-#if defined (_Jv_HaveCondDestroy)
- _Jv_CondDestroy (&si->condition);
-#endif
-#if defined (_Jv_HaveMutexDestroy)
- _Jv_MutexDestroy (&si->mutex);
-#endif
- si->init = false;
-}
-#endif
-
-// This is called to initialize the sync_info element of an object.
-void
-java::lang::Object::sync_init (void)
-{
- _Jv_MutexLock (&sync_mutex);
- // Check again to see if initialization is needed now that we have
- // the lock.
- if (INIT_NEEDED (this))
- {
- // We assume there are no pointers in the sync_info
- // representation.
- _Jv_SyncInfo *si;
- // We always create a new sync_info, even if there is already
- // one available. Any given object can only be finalized once.
- // If we get here and sync_info is not null, then it has already
- // been finalized. So if we just reinitialize the old one,
- // we'll never be able to (re-)destroy the mutex and/or
- // condition variable.
- si = (_Jv_SyncInfo *) _Jv_AllocBytesChecked (sizeof (_Jv_SyncInfo));
- _Jv_MutexInit (&si->mutex);
- _Jv_CondInit (&si->condition);
-#if defined (_Jv_HaveCondDestroy) || defined (_Jv_HaveMutexDestroy)
- // Register a finalizer.
- si->init = true;
- _Jv_RegisterFinalizer (si, finalize_sync_info);
-#endif
- sync_info = (jobject) si;
- }
- _Jv_MutexUnlock (&sync_mutex);
-}
-
-void
-java::lang::Object::notify (void)
-{
- if (INIT_NEEDED (this))
- sync_init ();
- _Jv_SyncInfo *si = (_Jv_SyncInfo *) sync_info;
- if (_Jv_CondNotify (&si->condition, &si->mutex))
- JvThrow (new IllegalMonitorStateException(JvNewStringLatin1
- ("current thread not owner")));
-}
-
-void
-java::lang::Object::notifyAll (void)
-{
- if (INIT_NEEDED (this))
- sync_init ();
- _Jv_SyncInfo *si = (_Jv_SyncInfo *) sync_info;
- if (_Jv_CondNotifyAll (&si->condition, &si->mutex))
- JvThrow (new IllegalMonitorStateException(JvNewStringLatin1
- ("current thread not owner")));
-}
-
-void
-java::lang::Object::wait (jlong timeout, jint nanos)
-{
- if (INIT_NEEDED (this))
- sync_init ();
- if (timeout < 0 || nanos < 0 || nanos > 999999)
- JvThrow (new IllegalArgumentException);
- _Jv_SyncInfo *si = (_Jv_SyncInfo *) sync_info;
- switch (_Jv_CondWait (&si->condition, &si->mutex, timeout, nanos))
- {
- case _JV_NOT_OWNER:
- JvThrow (new IllegalMonitorStateException (JvNewStringLatin1
- ("current thread not owner")));
- case _JV_INTERRUPTED:
- if (Thread::interrupted ())
- JvThrow (new InterruptedException);
- }
-}
-
-//
-// Some runtime code.
-//
-
-// This function is called at system startup to initialize the
-// `sync_mutex'.
-void
-_Jv_InitializeSyncMutex (void)
-{
- _Jv_MutexInit (&sync_mutex);
-}
-
-jint
-_Jv_MonitorEnter (jobject obj)
-{
- if (! obj)
- JvThrow (new java::lang::NullPointerException);
- if (INIT_NEEDED (obj))
- obj->sync_init ();
- _Jv_SyncInfo *si = (_Jv_SyncInfo *) obj->sync_info;
- return _Jv_MutexLock (&si->mutex);
-}
-
-jint
-_Jv_MonitorExit (jobject obj)
-{
- JvAssert (obj);
- JvAssert (! INIT_NEEDED (obj));
- _Jv_SyncInfo *si = (_Jv_SyncInfo *) obj->sync_info;
- if (_Jv_MutexUnlock (&si->mutex))
- JvThrow (new java::lang::IllegalMonitorStateException);
- return 0;
-}
-
-void
-_Jv_FinalizeObject (jobject obj)
-{
- // Ignore exceptions. From section 12.6 of the Java Language Spec.
- try
- {
- obj->finalize ();
- }
- catch (java::lang::Throwable *t)
- {
- // Ignore.
- }
-}