[vmkit-commits] [vmkit] r180367 - Merge with master branch. Added missing files.

Peter Senna Tschudin peter.senna at gmail.com
Thu Apr 25 10:04:10 PDT 2013


Author: peter.senna
Date: Thu Apr 25 12:02:15 2013
New Revision: 180367

URL: http://llvm.org/viewvc/llvm-project?rev=180367&view=rev
Log:
Merge with master branch. Added missing files.
(cherry picked from commit f8768d78c8569fb7f89c0d2abeb8d1823297ad2f)

Added:
    vmkit/trunk/lib/j3/VMCore/JavaReferenceQueue.cpp
    vmkit/trunk/lib/j3/VMCore/JavaReferenceQueue.h

Added: vmkit/trunk/lib/j3/VMCore/JavaReferenceQueue.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaReferenceQueue.cpp?rev=180367&view=auto
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaReferenceQueue.cpp (added)
+++ vmkit/trunk/lib/j3/VMCore/JavaReferenceQueue.cpp Thu Apr 25 12:02:15 2013
@@ -0,0 +1,85 @@
+//===--ReferenceQueue.cpp - Implementation of soft/weak/phantom references-===//
+//
+//                            The VMKit project
+//
+// This file is distributed under the University of Pierre et Marie Curie 
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "ClasspathReflect.h"
+#include "JavaClass.h"
+#include "JavaUpcalls.h"
+#include "Jnjvm.h"
+#include "JavaReferenceQueue.h"
+
+using namespace j3;
+
+bool enqueueReference(gc* _obj) {
+  Jnjvm* vm = JavaThread::get()->getJVM();
+  JavaObject* obj = (JavaObject*)_obj;
+  llvm_gcroot(obj, 0);
+  JavaMethod* meth = vm->upcalls->EnqueueReference;
+  UserClass* cl = JavaObject::getClass(obj)->asClass();
+  return (bool)meth->invokeIntSpecialBuf(vm, cl, obj, 0);
+}
+
+void Jnjvm::invokeEnqueueReference(gc* res) {
+  llvm_gcroot(res, 0);
+  TRY {
+    enqueueReference(res);
+  } IGNORE;
+  vmkit::Thread::get()->clearException();
+}
+
+gc** Jnjvm::getObjectReferentPtr(gc* _obj) {
+  JavaObjectReference* obj = (JavaObjectReference*)_obj;
+  llvm_gcroot(obj, 0);
+  return (gc**)JavaObjectReference::getReferentPtr(obj);
+}
+
+void Jnjvm::setObjectReferent(gc* _obj, gc* val) {
+  JavaObjectReference* obj = (JavaObjectReference*)_obj;
+  llvm_gcroot(obj, 0);
+  llvm_gcroot(val, 0);
+  JavaObjectReference::setReferent(obj, (JavaObject*)val);
+}
+ 
+void Jnjvm::clearObjectReferent(gc* _obj) {
+  JavaObjectReference* obj = (JavaObjectReference*)_obj;
+  llvm_gcroot(obj, 0);
+  JavaObjectReference::setReferent(obj, NULL);
+}
+
+typedef void (*destructor_t)(void*);
+
+void invokeFinalizer(gc* _obj) {
+  Jnjvm* vm = JavaThread::get()->getJVM();
+  JavaObject* obj = (JavaObject*)_obj;
+  llvm_gcroot(obj, 0);
+  JavaMethod* meth = vm->upcalls->FinalizeObject;
+  UserClass* cl = JavaObject::getClass(obj)->asClass();
+  meth->invokeIntVirtualBuf(vm, cl, obj, 0);
+}
+
+void invokeFinalize(gc* res) {
+  llvm_gcroot(res, 0);
+  TRY {
+    invokeFinalizer(res);
+  } IGNORE;
+  vmkit::Thread::get()->clearException();
+}
+
+void Jnjvm::finalizeObject(gc* object) {
+	JavaObject* res = 0;
+	llvm_gcroot(object, 0);
+	llvm_gcroot(res, 0);
+	res = (JavaObject*) object;
+  JavaVirtualTable* VT = res->getVirtualTable();
+  if (VT->operatorDelete) {
+    destructor_t dest = (destructor_t)VT->destructor;
+    dest(res);
+  } else {
+    invokeFinalize(res);
+  }
+}

Added: vmkit/trunk/lib/j3/VMCore/JavaReferenceQueue.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaReferenceQueue.h?rev=180367&view=auto
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaReferenceQueue.h (added)
+++ vmkit/trunk/lib/j3/VMCore/JavaReferenceQueue.h Thu Apr 25 12:02:15 2013
@@ -0,0 +1,33 @@
+//===---ReferenceQueue.h - Implementation of soft/weak/phantom references--===//
+//
+//                            The VMKit project
+//
+// This file is distributed under the University of Pierre et Marie Curie 
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef J3_REFERENCE_QUEUE_H
+#define J3_REFERENCE_QUEUE_H
+
+#include "vmkit/ReferenceThread.h"
+#include "vmkit/FinalizerThread.h"
+#include "JavaThread.h"
+
+namespace j3 {
+
+class Jnjvm;
+
+class JavaFinalizerThread : public vmkit::FinalizerThread<JavaThread>{
+	public:
+		JavaFinalizerThread(Jnjvm* vm) : FinalizerThread<JavaThread>(vm) {}
+};
+
+class JavaReferenceThread : public vmkit::ReferenceThread<JavaThread> {
+public:
+	JavaReferenceThread(Jnjvm* vm) : ReferenceThread<JavaThread>(vm) {}
+};
+
+} // namespace j3
+
+#endif  //J3_REFERENCE_QUEUE_H





More information about the vmkit-commits mailing list