blob: 992f7ee2e700edcdf48bfdecf6c6d1d806d2e250 [file] [log] [blame]
#include "j3/j3field.h"
#include "j3/j3class.h"
#include "j3/j3classloader.h"
#include "j3/j3.h"
#include "j3/j3method.h"
#include "j3/j3thread.h"
#include "j3/j3attribute.h"
using namespace j3;
J3ObjectHandle* J3Field::javaField() {
if(!_javaField) {
layout()->lock();
if(!_javaField) {
J3ObjectHandle* prev = J3Thread::get()->tell();
J3* vm = J3Thread::get()->vm();
_javaField = layout()->loader()->globalReferences()->add(J3ObjectHandle::doNewObject(vm->fieldClass));
vm->fieldClassInit->invokeSpecial(_javaField, /* this */
layout()->javaClass(0), /* declaring class */
vm->nameToString(name(), 0), /* name */
type()->javaClass(0), /* type */
access(), /* access */
slot(), /* slot */
vm->nameToString(type()->name(), 0), /* signature */
layout()->extractAttribute(attributes()->lookup(vm->annotationsAttribute)));/* annotations */
J3Thread::get()->restore(prev);
}
layout()->unlock();
}
return _javaField;
}
void J3Field::dump() {
printf("Field: %s %s::%s (%d)\n", type()->name()->cStr(), layout()->name()->cStr(), name()->cStr(), access());
}