[vmkit-commits] [vmkit] r198260 - some cleanup
Gael Thomas
gael.thomas at lip6.fr
Tue Dec 31 00:16:09 PST 2013
Author: gthomas
Date: Tue Dec 31 02:16:09 2013
New Revision: 198260
URL: http://llvm.org/viewvc/llvm-project?rev=198260&view=rev
Log:
some cleanup
Added:
vmkit/branches/mcjit/include/j3/j3attribute.h
vmkit/branches/mcjit/include/j3/j3field.h
vmkit/branches/mcjit/lib/j3/vm/j3attribute.cc
vmkit/branches/mcjit/lib/j3/vm/j3field.cc
Modified:
vmkit/branches/mcjit/include/j3/j3class.h
vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
vmkit/branches/mcjit/lib/j3/vm/j3.cc
vmkit/branches/mcjit/lib/j3/vm/j3class.cc
vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc
vmkit/branches/mcjit/lib/j3/vm/j3object.cc
Added: vmkit/branches/mcjit/include/j3/j3attribute.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3attribute.h?rev=198260&view=auto
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3attribute.h (added)
+++ vmkit/branches/mcjit/include/j3/j3attribute.h Tue Dec 31 02:16:09 2013
@@ -0,0 +1,39 @@
+#ifndef _J3_ATTRIBUTE_H_
+#define _J3_ATTRIBUTE_H_
+
+#include "vmkit/allocator.h"
+
+namespace vmkit {
+ class Name;
+}
+
+namespace j3 {
+ class J3Attribute : public vmkit::PermanentObject {
+ friend class J3Class;
+
+ const vmkit::Name* _id;
+ uint32_t _offset;
+ public:
+
+ const vmkit::Name* id() { return _id; }
+ uint32_t offset() { return _offset; }
+ };
+
+ class J3Attributes : public vmkit::PermanentObject {
+ size_t _nbAttributes;
+ J3Attribute _attributes[1];
+ public:
+ J3Attributes(size_t n) { _nbAttributes = n; }
+
+ void* operator new(size_t unused, vmkit::BumpAllocator* allocator, size_t n) {
+ return vmkit::PermanentObject::operator new(sizeof(J3Attributes) + (n - 1) * sizeof(J3Attribute), allocator);
+ }
+
+ size_t nbAttributes() { return _nbAttributes; }
+ J3Attribute* attribute(size_t n);
+
+ J3Attribute* lookup(const vmkit::Name* attr);
+ };
+}
+
+#endif
Modified: vmkit/branches/mcjit/include/j3/j3class.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3class.h?rev=198260&r1=198259&r2=198260&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3class.h (original)
+++ vmkit/branches/mcjit/include/j3/j3class.h Tue Dec 31 02:16:09 2013
@@ -29,6 +29,14 @@ namespace j3 {
class J3ObjectType;
class J3Method;
class J3Field;
+ class J3Attributes;
+
+ class J3InterfaceSlotDescriptor {
+ public:
+ uint32_t nbMethods;
+ J3Method** methods;
+ };
+
class J3Type : public vmkit::Symbol {
pthread_mutex_t _mutex;
@@ -94,71 +102,14 @@ namespace j3 {
virtual bool isLayout() { return 0; }
virtual bool isClass() { return 0; }
virtual bool isPrimitive() { return 0; }
+
virtual llvm::Type* llvmType() = 0;
void dump();
};
- class J3Attribute : public vmkit::PermanentObject {
- friend class J3Class;
-
- const vmkit::Name* _id;
- uint32_t _offset;
- public:
-
- const vmkit::Name* id() { return _id; }
- uint32_t offset() { return _offset; }
- };
-
- class J3Attributes : public vmkit::PermanentObject {
- size_t _nbAttributes;
- J3Attribute _attributes[1];
- public:
- J3Attributes(size_t n) { _nbAttributes = n; }
-
- void* operator new(size_t unused, vmkit::BumpAllocator* allocator, size_t n) {
- return vmkit::PermanentObject::operator new(sizeof(J3Attributes) + (n - 1) * sizeof(J3Attribute), allocator);
- }
-
- size_t nbAttributes() { return _nbAttributes; }
- J3Attribute* attribute(size_t n);
-
- J3Attribute* lookup(const vmkit::Name* attr);
- };
-
- class J3Field : public vmkit::PermanentObject {
- friend class J3Class;
-
- J3Layout* _layout;
- uint16_t _access;
- const vmkit::Name* _name;
- J3Type* _type;
- J3Attributes* _attributes;
- uintptr_t _offset;
-
- public:
- J3Field() {}
- J3Field(uint16_t access, const vmkit::Name* name, J3Type* type) { _access = access; _name = name; _type = type; }
-
- J3Attributes* attributes() const { return _attributes; }
- uint16_t access() { return _access; }
- J3Layout* layout() { return _layout; }
- const vmkit::Name* name() { return _name; }
- J3Type* type() { return _type; }
-
- uintptr_t offset() { return _offset; }
-
- void dump();
- };
-
- class J3InterfaceSlotDescriptor {
- public:
- uint32_t nbMethods;
- J3Method** methods;
- };
-
class J3ObjectType : public J3Type {
- J3ObjectHandle* _javaClass;
+ J3ObjectHandle* volatile _javaClass;
J3InterfaceSlotDescriptor _interfaceSlotDescriptors[J3VirtualTable::nbInterfaceMethodTable];
public:
@@ -185,10 +136,12 @@ namespace j3 {
class J3Layout : public J3ObjectType {
friend class J3Class;
- size_t nbFields;
- J3Field* fields;
+ size_t _nbFields;
+ size_t _nbPublicFields;
+ J3Field* _fields;
size_t _nbMethods;
+ size_t _nbPublicMethods;
J3Method** _methods;
uintptr_t _structSize;
@@ -199,7 +152,12 @@ namespace j3 {
uintptr_t structSize();
+ size_t nbFields() { return _nbFields; }
+ size_t nbPublicFields() { return _nbPublicFields; }
+ J3Field* fields() { return _fields; }
+
size_t nbMethods() { return _nbMethods; }
+ size_t nbPublicMethods() { return _nbPublicMethods; }
J3Method** methods() { return _methods; }
J3Method* findMethod(const vmkit::Name* name, const vmkit::Name* sign);
@@ -217,7 +175,7 @@ namespace j3 {
};
class J3Class : public J3Layout {
- J3StaticLayout staticLayout;
+ J3StaticLayout _staticLayout;
uint16_t _access;
@@ -252,6 +210,8 @@ namespace j3 {
public:
J3Class(J3ClassLoader* loader, const vmkit::Name* name, J3ClassBytes* bytes);
+ J3StaticLayout* staticLayout() { return &_staticLayout; }
+
size_t nbInterfaces() { return _nbInterfaces; }
J3Class** interfaces() { return _interfaces; }
J3Class* super() { return _super; }
Added: vmkit/branches/mcjit/include/j3/j3field.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3field.h?rev=198260&view=auto
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3field.h (added)
+++ vmkit/branches/mcjit/include/j3/j3field.h Tue Dec 31 02:16:09 2013
@@ -0,0 +1,44 @@
+#ifndef _J3_FIELD_H_
+#define _J3_FIELD_H_
+
+#include "vmkit/allocator.h"
+
+namespace vmkit {
+ class Name;
+}
+
+namespace j3 {
+ class J3Layout;
+ class J3Type;
+ class J3Attributes;
+ class J3ObjectHandle;
+
+ class J3Field : public vmkit::PermanentObject {
+ friend class J3Class;
+
+ J3Layout* _layout;
+ uint16_t _access;
+ const vmkit::Name* _name;
+ J3Type* _type;
+ J3Attributes* _attributes;
+ uintptr_t _offset;
+ J3ObjectHandle* volatile _javaField;
+
+ public:
+ J3Field() {}
+ J3Field(uint16_t access, const vmkit::Name* name, J3Type* type) { _access = access; _name = name; _type = type; }
+
+ J3ObjectHandle* javaField();
+ J3Attributes* attributes() const { return _attributes; }
+ uint16_t access() { return _access; }
+ J3Layout* layout() { return _layout; }
+ const vmkit::Name* name() { return _name; }
+ J3Type* type() { return _type; }
+
+ uintptr_t offset() { return _offset; }
+
+ void dump();
+ };
+}
+
+#endif
Modified: vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc?rev=198260&r1=198259&r2=198260&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc (original)
+++ vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc Tue Dec 31 02:16:09 2013
@@ -4,6 +4,8 @@
#include "j3/j3classloader.h"
#include "j3/j3class.h"
#include "j3/j3method.h"
+#include "j3/j3constants.h"
+#include "j3/j3field.h"
#include "jvm.h"
using namespace j3;
@@ -385,11 +387,31 @@ jbyteArray JNICALL JVM_GetClassTypeAnnot
jobjectArray JNICALL JVM_GetClassDeclaredMethods(JNIEnv* env, jclass ofClass, jboolean publicOnly) { enterJVM(); NYI(); leaveJVM(); }
jobjectArray JNICALL JVM_GetClassDeclaredFields(JNIEnv* env, jclass ofClass, jboolean publicOnly) {
+ jobjectArray res;
+
enterJVM();
J3ObjectType* type = J3ObjectType::nativeClass(ofClass);
+ if(type->isClass()) {
+ J3Class* cl = type->asClass();
+ cl->resolve();
+ size_t total = publicOnly ?
+ cl->nbPublicFields() + cl->staticLayout()->nbPublicFields() :
+ cl->nbFields() + cl->staticLayout()->nbFields();
+
+ res = J3ObjectHandle::doNewArray(type->loader()->vm()->fieldClass->getArray(), total);
+
+ size_t cur = 0;
+ for(uint32_t i=0; i<cl->nbFields(); i++)
+ if(!publicOnly || J3Cst::isPublic(cl->fields()[i].access()))
+ res->setObjectAt(i, cl->fields()[i].javaField());
+ } else
+ res = J3ObjectHandle::doNewArray(type->loader()->vm()->fieldClass->getArray(), 0);
+
NYI();
- leaveJVM();
+ leaveJVM();
+
+ return res;
}
jobjectArray JNICALL JVM_GetClassDeclaredConstructors(JNIEnv* env, jclass ofClass, jboolean publicOnly) { enterJVM(); NYI(); leaveJVM(); }
Modified: vmkit/branches/mcjit/lib/j3/vm/j3.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3.cc?rev=198260&r1=198259&r2=198260&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3.cc Tue Dec 31 02:16:09 2013
@@ -10,6 +10,7 @@
#include "j3/j3thread.h"
#include "j3/j3trampoline.h"
#include "j3/j3lib.h"
+#include "j3/j3field.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/DerivedTypes.h"
Added: vmkit/branches/mcjit/lib/j3/vm/j3attribute.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3attribute.cc?rev=198260&view=auto
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3attribute.cc (added)
+++ vmkit/branches/mcjit/lib/j3/vm/j3attribute.cc Tue Dec 31 02:16:09 2013
@@ -0,0 +1,20 @@
+#include "j3/j3attribute.h"
+#include "j3/j3.h"
+
+using namespace j3;
+
+J3Attribute* J3Attributes::attribute(size_t n) {
+ if(n >= _nbAttributes)
+ J3::internalError(L"should not happen");
+ return _attributes + n;
+}
+
+J3Attribute* J3Attributes::lookup(const vmkit::Name* id) {
+ for(size_t i=0; i<_nbAttributes; i++) {
+ if(_attributes[i].id() == id)
+ return _attributes+i;
+ }
+
+ return 0;
+}
+
Modified: vmkit/branches/mcjit/lib/j3/vm/j3class.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3class.cc?rev=198260&r1=198259&r2=198260&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3class.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3class.cc Tue Dec 31 02:16:09 2013
@@ -15,6 +15,8 @@
#include "j3/j3mangler.h"
#include "j3/j3object.h"
#include "j3/j3thread.h"
+#include "j3/j3field.h"
+#include "j3/j3attribute.h"
using namespace j3;
@@ -170,8 +172,8 @@ J3ObjectHandle* J3ObjectType::javaClass(
J3ObjectHandle* prev = J3Thread::get()->tell();
_javaClass = loader()->globalReferences()->add(J3ObjectHandle::doNewObject(loader()->vm()->classClass));
J3Thread::get()->restore(prev);
- _javaClass->setLong(loader()->vm()->classVMData, (int64_t)(uintptr_t)this);
- loader()->vm()->classInit->invokeSpecial(_javaClass);
+ javaClass()->setLong(loader()->vm()->classVMData, (int64_t)(uintptr_t)this);
+ loader()->vm()->classInit->invokeSpecial(javaClass());
}
unlock();
}
@@ -268,8 +270,8 @@ J3Method* J3Layout::findMethod(const vmk
}
J3Field* J3Layout::findField(const vmkit::Name* name, const J3Type* type) {
- for(size_t i=0; i<nbFields; i++) {
- J3Field* cur = fields + i;
+ for(size_t i=0; i<nbFields(); i++) {
+ J3Field* cur = fields() + i;
//printf("Compare %ls - %ls\n", cur->name()->cStr(), cur->type()->name()->cStr());
//printf(" with %ls - %ls\n", name->cStr(), type->name()->cStr());
@@ -285,7 +287,7 @@ J3Field* J3Layout::findField(const vmkit
*/
J3Class::J3Class(J3ClassLoader* loader, const vmkit::Name* name, J3ClassBytes* bytes) :
J3Layout(loader, name),
- staticLayout(loader, this, name){
+ _staticLayout(loader, this, name){
_bytes = bytes;
status = LOADED;
}
@@ -319,7 +321,7 @@ J3Method* J3Class::findStaticMethod(cons
J3Class* cur = this;
J3Method* res;
while(1) {
- res = cur->staticLayout.findMethod(name, sign);
+ res = cur->staticLayout()->findMethod(name, sign);
if(res)
return res;
@@ -352,7 +354,7 @@ J3Field* J3Class::findStaticField(const
//fprintf(stderr, "Lookup static field %ls %ls::%ls\n", ftype->name()->cStr(), name()->cStr(), fname->cStr());
resolve();
- J3Field* res = staticLayout.findField(fname, ftype);
+ J3Field* res = staticLayout()->findField(fname, ftype);
if(!res)
J3::internalError(L"implement me");
@@ -362,7 +364,7 @@ J3Field* J3Class::findStaticField(const
void J3Class::registerNative(const vmkit::Name* methName, const vmkit::Name* methSign, void* fnPtr) {
resolve();
- J3Method* res = staticLayout.findMethod(methName, methSign);
+ J3Method* res = staticLayout()->findMethod(methName, methSign);
if(!res)
res = findMethod(methName, methSign);
if(!res || !J3Cst::isNative(res->access()))
@@ -389,13 +391,13 @@ void J3Class::doInitialise() {
interfaces()[i]->initialise();
J3ObjectHandle* prev = J3Thread::get()->tell();
- J3ObjectHandle* stacked = J3ObjectHandle::allocate(staticLayout.vt(), staticLayout.structSize());
+ J3ObjectHandle* stacked = J3ObjectHandle::allocate(staticLayout()->vt(), staticLayout()->structSize());
_staticInstance = loader()->globalReferences()->add(stacked);
J3Thread::get()->restore(prev);
- for(size_t i=0; i<staticLayout.nbFields; i++) {
- J3Field* cur = staticLayout.fields + i;
+ for(size_t i=0; i<staticLayout()->nbFields(); i++) {
+ J3Field* cur = staticLayout()->fields() + i;
J3Attribute* attr = cur->attributes()->lookup(loader()->vm()->constantValueAttr);
if(attr) {
@@ -420,7 +422,7 @@ void J3Class::doInitialise() {
}
}
- J3Method* clinit = staticLayout.findMethod(loader()->vm()->clinitName, loader()->vm()->clinitSign);
+ J3Method* clinit = staticLayout()->findMethod(loader()->vm()->clinitName, loader()->vm()->clinitSign);
if(clinit)
clinit->invokeStatic();
@@ -437,7 +439,7 @@ void J3Class::doResolve(J3Field* hiddenF
status = RESOLVED;
readClassBytes(hiddenFields, nbHiddenFields);
- staticLayout._vt = J3VirtualTable::create(&staticLayout);
+ staticLayout()->_vt = J3VirtualTable::create(staticLayout());
_vt = J3VirtualTable::create(this);
@@ -522,16 +524,16 @@ void J3Class::readClassBytes(J3Field* hi
}
size_t n = nbHiddenFields + reader.readU2(), nbStaticFields = 0, nbVirtualFields = 0;
- fields = (J3Field*)alloca(sizeof(J3Field)*n);
+ _fields = (J3Field*)alloca(sizeof(J3Field)*n);
J3Field* pFields0[n]; size_t i0 = 0; /* sort fields by reverse size */
J3Field* pFields1[n]; size_t i1 = 0;
J3Field* pFields2[n]; size_t i2 = 0;
J3Field* pFields3[n]; size_t i3 = 0;
- memset(fields, 0, sizeof(J3Field)*n);
+ memset(fields(), 0, sizeof(J3Field)*n);
for(size_t i=0; i<n; i++) {
- J3Field* f = fields + i;
+ J3Field* f = fields() + i;
if(i < nbHiddenFields) {
f->_access = hiddenFields[i].access();
@@ -546,7 +548,7 @@ void J3Class::readClassBytes(J3Field* hi
}
if(J3Cst::isStatic(f->access())) {
- f->_layout = &staticLayout;
+ f->_layout = staticLayout();
nbStaticFields++;
} else {
f->_layout = this;
@@ -562,8 +564,8 @@ void J3Class::readClassBytes(J3Field* hi
}
}
- staticLayout.fields = new(loader()->allocator()) J3Field[nbStaticFields];
- fields = new(loader()->allocator()) J3Field[nbVirtualFields];
+ staticLayout()->_fields = new(loader()->allocator()) J3Field[nbStaticFields];
+ _fields = new(loader()->allocator()) J3Field[nbVirtualFields];
if(super() == this)
_structSize = sizeof(J3Object);
@@ -601,16 +603,18 @@ void J3Class::readClassBytes(J3Field* hi
nbVirtualMethods++;
}
- staticLayout._methods = (J3Method**)loader()->allocator()->allocate(sizeof(J3Method*)*nbStaticMethods);
+ staticLayout()->_methods = (J3Method**)loader()->allocator()->allocate(sizeof(J3Method*)*nbStaticMethods);
_methods = (J3Method**)loader()->allocator()->allocate(sizeof(J3Method*)*nbVirtualMethods);
for(int i=0; i<n; i++) {
J3Layout* layout;
if(J3Cst::isStatic(methodsTmp[i]->access()))
- layout = &staticLayout;
+ layout = staticLayout();
else
layout = this;
layout->_methods[layout->_nbMethods++] = methodsTmp[i];
+ if(J3Cst::isPublic(methodsTmp[i]->access()))
+ layout->_nbPublicMethods++;
}
_attributes = readAttributes(&reader);
@@ -623,13 +627,16 @@ void J3Class::fillFields(J3Field** field
if(J3Cst::isStatic(fields[i]->access())) {
//fprintf(stderr, " adding static field: %ls %ls::%ls\n", cur->type()->name()->cStr(), name()->cStr(), cur->name()->cStr());
- layout = &staticLayout;
+ layout = staticLayout();
} else {
layout = this;
}
cur->_offset = layout->structSize();
layout->_structSize += 1 << fields[i]->type()->logSize();
- layout->fields[layout->nbFields++] = *fields[i];
+ layout->fields()[layout->_nbFields++] = *fields[i];
+
+ if(J3Cst::isPublic(fields[i]->access()))
+ layout->_nbPublicFields++;
}
}
@@ -802,26 +809,6 @@ void J3Class::doNativeName() {
loader()->addSymbol(_nativeName, this);
}
-void J3Field::dump() {
- printf("Field: %ls %ls::%ls (%d)\n", type()->name()->cStr(), layout()->name()->cStr(), name()->cStr(), access());
-}
-
-
-J3Attribute* J3Attributes::attribute(size_t n) {
- if(n >= _nbAttributes)
- J3::internalError(L"should not happen");
- return _attributes + n;
-}
-
-J3Attribute* J3Attributes::lookup(const vmkit::Name* id) {
- for(size_t i=0; i<_nbAttributes; i++) {
- if(_attributes[i].id() == id)
- return _attributes+i;
- }
-
- return 0;
-}
-
/*
* ------------ J3ArrayClass ------------
*/
Modified: vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc?rev=198260&r1=198259&r2=198260&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc Tue Dec 31 02:16:09 2013
@@ -11,6 +11,8 @@
#include "j3/j3mangler.h"
#include "j3/j3jni.h"
#include "j3/j3object.h"
+#include "j3/j3field.h"
+#include "j3/j3attribute.h"
#include "llvm/ExecutionEngine/ExecutionEngine.h"
Added: vmkit/branches/mcjit/lib/j3/vm/j3field.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3field.cc?rev=198260&view=auto
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3field.cc (added)
+++ vmkit/branches/mcjit/lib/j3/vm/j3field.cc Tue Dec 31 02:16:09 2013
@@ -0,0 +1,21 @@
+#include "j3/j3field.h"
+#include "j3/j3class.h"
+#include "j3/j3classloader.h"
+#include "j3/j3.h"
+
+using namespace j3;
+
+J3ObjectHandle* J3Field::javaField() {
+ if(!_javaField) {
+ layout()->lock();
+ _javaField = J3ObjectHandle::doNewObject(layout()->loader()->vm()->fieldClass);
+ J3::internalError(L"implement me: javaField");
+ layout()->unlock();
+ }
+ return _javaField;
+}
+
+void J3Field::dump() {
+ printf("Field: %ls %ls::%ls (%d)\n", type()->name()->cStr(), layout()->name()->cStr(), name()->cStr(), access());
+}
+
Modified: vmkit/branches/mcjit/lib/j3/vm/j3object.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3object.cc?rev=198260&r1=198259&r2=198260&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3object.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3object.cc Tue Dec 31 02:16:09 2013
@@ -14,6 +14,7 @@
#include "j3/j3constants.h"
#include "j3/j3thread.h"
#include "j3/j3monitor.h"
+#include "j3/j3field.h"
using namespace j3;
@@ -455,11 +456,11 @@ void J3ObjectHandle::rawArrayCopyTo(uint
}
void J3ObjectHandle::rawSetObject(uint32_t offset, J3ObjectHandle* value) {
- *((J3Object**)((uintptr_t)obj() + offset)) = value->obj();
+ *((J3Object**)((uintptr_t)obj() + offset)) = value ? value->obj() : 0;
}
J3ObjectHandle* J3ObjectHandle::rawGetObject(uint32_t offset) {
- return J3Thread::get()->push(*((J3Object**)((uintptr_t)obj() + offset)));
+ return obj() ? J3Thread::get()->push(*((J3Object**)((uintptr_t)obj() + offset))) : 0;
}
void J3ObjectHandle::setObject(J3Field* field, J3ObjectHandle* value) {
More information about the vmkit-commits
mailing list