[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