mirror of
https://github.com/corda/corda.git
synced 2025-01-19 03:06:36 +00:00
staticly type GcClassLoader instances
This commit is contained in:
parent
6a0502bbfe
commit
9ffbd7e9fe
@ -343,7 +343,7 @@ translateInvokeResult(Thread* t, unsigned returnCode, object o)
|
||||
}
|
||||
|
||||
GcClass*
|
||||
resolveClassBySpec(Thread* t, object loader, const char* spec,
|
||||
resolveClassBySpec(Thread* t, GcClassLoader* loader, const char* spec,
|
||||
unsigned specLength)
|
||||
{
|
||||
switch (*spec) {
|
||||
@ -367,13 +367,13 @@ resolveClassBySpec(Thread* t, object loader, const char* spec,
|
||||
}
|
||||
|
||||
GcJclass*
|
||||
resolveJType(Thread* t, object loader, const char* spec, unsigned specLength)
|
||||
resolveJType(Thread* t, GcClassLoader* loader, const char* spec, unsigned specLength)
|
||||
{
|
||||
return getJClass(t, resolveClassBySpec(t, loader, spec, specLength));
|
||||
}
|
||||
|
||||
object
|
||||
resolveParameterTypes(Thread* t, object loader, object spec,
|
||||
resolveParameterTypes(Thread* t, GcClassLoader* loader, GcByteArray* spec,
|
||||
unsigned* parameterCount, unsigned* returnTypeSpec)
|
||||
{
|
||||
PROTECT(t, loader);
|
||||
@ -384,16 +384,16 @@ resolveParameterTypes(Thread* t, object loader, object spec,
|
||||
|
||||
unsigned offset = 1;
|
||||
unsigned count = 0;
|
||||
while (byteArrayBody(t, spec, offset) != ')') {
|
||||
switch (byteArrayBody(t, spec, offset)) {
|
||||
while (spec->body()[offset] != ')') {
|
||||
switch (spec->body()[offset]) {
|
||||
case 'L': {
|
||||
unsigned start = offset;
|
||||
++ offset;
|
||||
while (byteArrayBody(t, spec, offset) != ';') ++ offset;
|
||||
while (spec->body()[offset] != ';') ++ offset;
|
||||
++ offset;
|
||||
|
||||
GcClass* type = resolveClassBySpec
|
||||
(t, loader, reinterpret_cast<char*>(&byteArrayBody(t, spec, start)),
|
||||
(t, loader, reinterpret_cast<char*>(&spec->body()[start]),
|
||||
offset - start);
|
||||
|
||||
list = reinterpret_cast<object>(makePair(t, reinterpret_cast<object>(type), list));
|
||||
@ -403,11 +403,11 @@ resolveParameterTypes(Thread* t, object loader, object spec,
|
||||
|
||||
case '[': {
|
||||
unsigned start = offset;
|
||||
while (byteArrayBody(t, spec, offset) == '[') ++ offset;
|
||||
switch (byteArrayBody(t, spec, offset)) {
|
||||
while (spec->body()[offset] == '[') ++ offset;
|
||||
switch (spec->body()[offset]) {
|
||||
case 'L':
|
||||
++ offset;
|
||||
while (byteArrayBody(t, spec, offset) != ';') ++ offset;
|
||||
while (spec->body()[offset] != ';') ++ offset;
|
||||
++ offset;
|
||||
break;
|
||||
|
||||
@ -417,7 +417,7 @@ resolveParameterTypes(Thread* t, object loader, object spec,
|
||||
}
|
||||
|
||||
GcClass* type = resolveClassBySpec
|
||||
(t, loader, reinterpret_cast<char*>(&byteArrayBody(t, spec, start)),
|
||||
(t, loader, reinterpret_cast<char*>(&spec->body()[start]),
|
||||
offset - start);
|
||||
|
||||
list = reinterpret_cast<object>(makePair(t, reinterpret_cast<object>(type), list));
|
||||
@ -426,7 +426,7 @@ resolveParameterTypes(Thread* t, object loader, object spec,
|
||||
|
||||
default:
|
||||
list = reinterpret_cast<object>(makePair
|
||||
(t, reinterpret_cast<object>(primitiveClass(t, byteArrayBody(t, spec, offset))), list));
|
||||
(t, reinterpret_cast<object>(primitiveClass(t, spec->body()[offset])), list));
|
||||
++ offset;
|
||||
++ count;
|
||||
break;
|
||||
@ -439,7 +439,7 @@ resolveParameterTypes(Thread* t, object loader, object spec,
|
||||
}
|
||||
|
||||
object
|
||||
resolveParameterJTypes(Thread* t, object loader, object spec,
|
||||
resolveParameterJTypes(Thread* t, GcClassLoader* loader, GcByteArray* spec,
|
||||
unsigned* parameterCount, unsigned* returnTypeSpec)
|
||||
{
|
||||
object list = resolveParameterTypes
|
||||
@ -461,9 +461,9 @@ resolveParameterJTypes(Thread* t, object loader, object spec,
|
||||
}
|
||||
|
||||
object
|
||||
resolveExceptionJTypes(Thread* t, object loader, object addendum)
|
||||
resolveExceptionJTypes(Thread* t, GcClassLoader* loader, GcMethodAddendum* addendum)
|
||||
{
|
||||
if (addendum == 0 or methodAddendumExceptionTable(t, addendum) == 0) {
|
||||
if (addendum == 0 or addendum->exceptionTable() == 0) {
|
||||
return makeObjectArray(t, type(t, GcJclass::Type), 0);
|
||||
}
|
||||
|
||||
@ -472,21 +472,21 @@ resolveExceptionJTypes(Thread* t, object loader, object addendum)
|
||||
|
||||
object array = makeObjectArray
|
||||
(t, type(t, GcJclass::Type),
|
||||
shortArrayLength(t, methodAddendumExceptionTable(t, addendum)));
|
||||
shortArrayLength(t, addendum->exceptionTable()));
|
||||
PROTECT(t, array);
|
||||
|
||||
for (unsigned i = 0; i < shortArrayLength
|
||||
(t, methodAddendumExceptionTable(t, addendum)); ++i)
|
||||
(t, addendum->exceptionTable()); ++i)
|
||||
{
|
||||
uint16_t index = shortArrayBody
|
||||
(t, methodAddendumExceptionTable(t, addendum), i) - 1;
|
||||
(t, addendum->exceptionTable(), i) - 1;
|
||||
|
||||
object o = singletonObject(t, cast<GcSingleton>(t, addendumPool(t, addendum)), index);
|
||||
object o = singletonObject(t, addendum->pool(), index);
|
||||
|
||||
if (objectClass(t, o) == type(t, GcReference::Type)) {
|
||||
o = reinterpret_cast<object>(resolveClass(t, loader, referenceName(t, o)));
|
||||
|
||||
set(t, addendumPool(t, addendum), SingletonBody + (index * BytesPerWord),
|
||||
set(t, reinterpret_cast<object>(addendum->pool()), SingletonBody + (index * BytesPerWord),
|
||||
o);
|
||||
}
|
||||
|
||||
@ -549,7 +549,7 @@ invoke(Thread* t, GcMethod* method, object instance, object args)
|
||||
memcpy(RUNTIME_ARRAY_BODY(name), p, nameLength - 1);
|
||||
RUNTIME_ARRAY_BODY(name)[nameLength - 1] = 0;
|
||||
type = resolveClass
|
||||
(t, reinterpret_cast<object>(method->class_()->loader()),
|
||||
(t, method->class_()->loader(),
|
||||
RUNTIME_ARRAY_BODY(name));
|
||||
} break;
|
||||
|
||||
@ -710,7 +710,7 @@ getDeclaredClasses(Thread* t, object c, bool publicOnly)
|
||||
t,
|
||||
resolveClass(
|
||||
t,
|
||||
classLoader(t, c),
|
||||
cast<GcClassLoader>(t, classLoader(t, c)),
|
||||
innerClassReferenceInner(t, arrayBody(t, table, i)))));
|
||||
|
||||
-- count;
|
||||
@ -741,7 +741,7 @@ getDeclaringClass(Thread* t, object c)
|
||||
return getJClass(
|
||||
t,
|
||||
resolveClass(t,
|
||||
classLoader(t, c),
|
||||
cast<GcClassLoader>(t, classLoader(t, c)),
|
||||
innerClassReferenceOuter(t, reference)));
|
||||
}
|
||||
}
|
||||
|
@ -2620,7 +2620,7 @@ scanMethodSpec(Thread* t, const char* s, bool static_,
|
||||
}
|
||||
|
||||
GcClass*
|
||||
findLoadedClass(Thread* t, object loader, object spec);
|
||||
findLoadedClass(Thread* t, GcClassLoader* loader, object spec);
|
||||
|
||||
inline bool
|
||||
emptyMethod(Thread* t UNUSED, GcMethod* method)
|
||||
@ -2637,15 +2637,15 @@ object
|
||||
parseUtf8(Thread* t, object array);
|
||||
|
||||
GcClass*
|
||||
parseClass(Thread* t, object loader, const uint8_t* data, unsigned length,
|
||||
parseClass(Thread* t, GcClassLoader* loader, const uint8_t* data, unsigned length,
|
||||
Gc::Type throwType = GcNoClassDefFoundError::Type);
|
||||
|
||||
GcClass*
|
||||
resolveClass(Thread* t, object loader, object name, bool throw_ = true,
|
||||
resolveClass(Thread* t, GcClassLoader* loader, object name, bool throw_ = true,
|
||||
Gc::Type throwType = GcNoClassDefFoundError::Type);
|
||||
|
||||
inline GcClass*
|
||||
resolveClass(Thread* t, object loader, const char* name, bool throw_ = true,
|
||||
resolveClass(Thread* t, GcClassLoader* loader, const char* name, bool throw_ = true,
|
||||
Gc::Type throwType = GcNoClassDefFoundError::Type)
|
||||
{
|
||||
PROTECT(t, loader);
|
||||
@ -2655,24 +2655,24 @@ resolveClass(Thread* t, object loader, const char* name, bool throw_ = true,
|
||||
|
||||
GcClass*
|
||||
resolveSystemClass
|
||||
(Thread* t, object loader, object name, bool throw_ = true,
|
||||
(Thread* t, GcClassLoader* loader, object name, bool throw_ = true,
|
||||
Gc::Type throwType = GcNoClassDefFoundError::Type);
|
||||
|
||||
inline GcClass*
|
||||
resolveSystemClass(Thread* t, object loader, const char* name)
|
||||
resolveSystemClass(Thread* t, GcClassLoader* loader, const char* name)
|
||||
{
|
||||
return resolveSystemClass(t, loader, makeByteArray(t, "%s", name));
|
||||
}
|
||||
|
||||
void
|
||||
linkClass(Thread* t, object loader, GcClass* class_);
|
||||
linkClass(Thread* t, GcClassLoader* loader, GcClass* class_);
|
||||
|
||||
GcMethod*
|
||||
resolveMethod(Thread* t, GcClass* class_, const char* methodName,
|
||||
const char* methodSpec);
|
||||
|
||||
inline GcMethod*
|
||||
resolveMethod(Thread* t, object loader, const char* className,
|
||||
resolveMethod(Thread* t, GcClassLoader* loader, const char* className,
|
||||
const char* methodName, const char* methodSpec)
|
||||
{
|
||||
return resolveMethod
|
||||
@ -2684,7 +2684,7 @@ resolveField(Thread* t, GcClass* class_, const char* fieldName,
|
||||
const char* fieldSpec);
|
||||
|
||||
inline object
|
||||
resolveField(Thread* t, object loader, const char* className,
|
||||
resolveField(Thread* t, GcClassLoader* loader, const char* className,
|
||||
const char* fieldName, const char* fieldSpec)
|
||||
{
|
||||
return resolveField
|
||||
@ -2704,7 +2704,7 @@ void
|
||||
initClass(Thread* t, GcClass* c);
|
||||
|
||||
GcClass*
|
||||
resolveObjectArrayClass(Thread* t, object loader, object elementClass);
|
||||
resolveObjectArrayClass(Thread* t, GcClassLoader* loader, object elementClass);
|
||||
|
||||
object
|
||||
makeObjectArray(Thread* t, GcClass* elementClass, unsigned count);
|
||||
@ -3613,7 +3613,7 @@ poolSize(Thread* t, GcSingleton* pool)
|
||||
}
|
||||
|
||||
inline GcClass*
|
||||
resolveClassInObject(Thread* t, object loader, object container,
|
||||
resolveClassInObject(Thread* t, GcClassLoader* loader, object container,
|
||||
unsigned classOffset, bool throw_ = true)
|
||||
{
|
||||
object o = fieldAtOffset<object>(container, classOffset);
|
||||
@ -3637,7 +3637,7 @@ resolveClassInObject(Thread* t, object loader, object container,
|
||||
}
|
||||
|
||||
inline GcClass*
|
||||
resolveClassInPool(Thread* t, object loader, GcMethod* method, unsigned index,
|
||||
resolveClassInPool(Thread* t, GcClassLoader* loader, GcMethod* method, unsigned index,
|
||||
bool throw_ = true)
|
||||
{
|
||||
object o = singletonObject(t, method->code()->pool(), index);
|
||||
@ -3664,12 +3664,12 @@ inline GcClass*
|
||||
resolveClassInPool(Thread* t, GcMethod* method, unsigned index,
|
||||
bool throw_ = true)
|
||||
{
|
||||
return resolveClassInPool(t, reinterpret_cast<object>(method->class_()->loader()),
|
||||
return resolveClassInPool(t, method->class_()->loader(),
|
||||
method, index, throw_);
|
||||
}
|
||||
|
||||
inline object
|
||||
resolve(Thread* t, object loader, GcMethod* method, unsigned index,
|
||||
resolve(Thread* t, GcClassLoader* loader, GcMethod* method, unsigned index,
|
||||
object (*find)(vm::Thread*, GcClass*, object, object),
|
||||
Gc::Type errorType, bool throw_ = true)
|
||||
{
|
||||
@ -3705,7 +3705,7 @@ resolve(Thread* t, object loader, GcMethod* method, unsigned index,
|
||||
}
|
||||
|
||||
inline object
|
||||
resolveField(Thread* t, object loader, GcMethod* method, unsigned index,
|
||||
resolveField(Thread* t, GcClassLoader* loader, GcMethod* method, unsigned index,
|
||||
bool throw_ = true)
|
||||
{
|
||||
return resolve(t, loader, method, index, findFieldInClass,
|
||||
@ -3716,7 +3716,7 @@ inline object
|
||||
resolveField(Thread* t, GcMethod* method, unsigned index, bool throw_ = true)
|
||||
{
|
||||
return resolveField
|
||||
(t, reinterpret_cast<object>(method->class_()->loader()), method, index, throw_);
|
||||
(t, method->class_()->loader(), method, index, throw_);
|
||||
}
|
||||
|
||||
inline void
|
||||
@ -3807,7 +3807,7 @@ class FieldWriteResource {
|
||||
};
|
||||
|
||||
inline GcMethod*
|
||||
resolveMethod(Thread* t, object loader, GcMethod* method, unsigned index,
|
||||
resolveMethod(Thread* t, GcClassLoader* loader, GcMethod* method, unsigned index,
|
||||
bool throw_ = true)
|
||||
{
|
||||
return cast<GcMethod>(t, resolve(t, loader, method, index, findMethodInClass,
|
||||
@ -3818,7 +3818,7 @@ inline GcMethod*
|
||||
resolveMethod(Thread* t, GcMethod* method, unsigned index, bool throw_ = true)
|
||||
{
|
||||
return resolveMethod
|
||||
(t, reinterpret_cast<object>(method->class_()->loader()), method, index, throw_);
|
||||
(t, method->class_()->loader(), method, index, throw_);
|
||||
}
|
||||
|
||||
GcVector*
|
||||
@ -3969,7 +3969,7 @@ GcMethod*
|
||||
getCaller(Thread* t, unsigned target, bool skipMethodInvoke = false);
|
||||
|
||||
object
|
||||
defineClass(Thread* t, object loader, const uint8_t* buffer, unsigned length);
|
||||
defineClass(Thread* t, GcClassLoader* loader, const uint8_t* buffer, unsigned length);
|
||||
|
||||
inline GcMethod*
|
||||
methodClone(Thread* t, GcMethod* method)
|
||||
|
@ -20,8 +20,8 @@ using namespace vm;
|
||||
namespace {
|
||||
|
||||
int64_t
|
||||
search(Thread* t, object loader, object name,
|
||||
GcClass* (*op)(Thread*, object, object), bool replaceDots)
|
||||
search(Thread* t, GcClassLoader* loader, object name,
|
||||
GcClass* (*op)(Thread*, GcClassLoader*, object), bool replaceDots)
|
||||
{
|
||||
if (LIKELY(name)) {
|
||||
PROTECT(t, loader);
|
||||
@ -42,7 +42,7 @@ search(Thread* t, object loader, object name,
|
||||
}
|
||||
|
||||
GcClass*
|
||||
resolveSystemClassThrow(Thread* t, object loader, object spec)
|
||||
resolveSystemClassThrow(Thread* t, GcClassLoader* loader, object spec)
|
||||
{
|
||||
return resolveSystemClass
|
||||
(t, loader, spec, true, GcClassNotFoundException::Type);
|
||||
@ -131,7 +131,7 @@ extern "C" AVIAN_EXPORT int64_t JNICALL
|
||||
Avian_avian_Classes_resolveVMClass
|
||||
(Thread* t, object, uintptr_t* arguments)
|
||||
{
|
||||
object loader = reinterpret_cast<object>(arguments[0]);
|
||||
GcClassLoader* loader = cast<GcClassLoader>(t, reinterpret_cast<object>(arguments[0]));
|
||||
object spec = reinterpret_cast<object>(arguments[1]);
|
||||
|
||||
return reinterpret_cast<int64_t>
|
||||
@ -142,7 +142,7 @@ extern "C" AVIAN_EXPORT int64_t JNICALL
|
||||
Avian_avian_Classes_defineVMClass
|
||||
(Thread* t, object, uintptr_t* arguments)
|
||||
{
|
||||
object loader = reinterpret_cast<object>(arguments[0]);
|
||||
GcClassLoader* loader = cast<GcClassLoader>(t, reinterpret_cast<object>(arguments[0]));
|
||||
object b = reinterpret_cast<object>(arguments[1]);
|
||||
int offset = arguments[2];
|
||||
int length = arguments[3];
|
||||
@ -162,7 +162,7 @@ extern "C" AVIAN_EXPORT int64_t JNICALL
|
||||
Avian_avian_SystemClassLoader_findLoadedVMClass
|
||||
(Thread* t, object, uintptr_t* arguments)
|
||||
{
|
||||
object loader = reinterpret_cast<object>(arguments[0]);
|
||||
GcClassLoader* loader = cast<GcClassLoader>(t, reinterpret_cast<object>(arguments[0]));
|
||||
object name = reinterpret_cast<object>(arguments[1]);
|
||||
|
||||
return search(t, loader, name, findLoadedClass, true);
|
||||
@ -180,7 +180,7 @@ extern "C" AVIAN_EXPORT int64_t JNICALL
|
||||
Avian_avian_SystemClassLoader_findVMClass
|
||||
(Thread* t, object, uintptr_t* arguments)
|
||||
{
|
||||
object loader = reinterpret_cast<object>(arguments[0]);
|
||||
GcClassLoader* loader = cast<GcClassLoader>(t, reinterpret_cast<object>(arguments[0]));
|
||||
object name = reinterpret_cast<object>(arguments[1]);
|
||||
|
||||
return search(t, loader, name, resolveSystemClassThrow, true);
|
||||
@ -190,7 +190,7 @@ extern "C" AVIAN_EXPORT int64_t JNICALL
|
||||
Avian_avian_SystemClassLoader_resourceURLPrefix
|
||||
(Thread* t, object, uintptr_t* arguments)
|
||||
{
|
||||
object loader = reinterpret_cast<object>(arguments[0]);
|
||||
GcClassLoader* loader = cast<GcClassLoader>(t, reinterpret_cast<object>(arguments[0]));
|
||||
object name = reinterpret_cast<object>(arguments[1]);
|
||||
|
||||
if (LIKELY(name)) {
|
||||
@ -198,7 +198,7 @@ Avian_avian_SystemClassLoader_resourceURLPrefix
|
||||
stringChars(t, name, RUNTIME_ARRAY_BODY(n));
|
||||
|
||||
const char* name = static_cast<Finder*>
|
||||
(systemClassLoaderFinder(t, loader))->urlPrefix(RUNTIME_ARRAY_BODY(n));
|
||||
(loader->as<GcSystemClassLoader>(t)->finder())->urlPrefix(RUNTIME_ARRAY_BODY(n));
|
||||
|
||||
return name ? reinterpret_cast<uintptr_t>(makeString(t, "%s", name)) : 0;
|
||||
} else {
|
||||
@ -210,7 +210,7 @@ extern "C" AVIAN_EXPORT int64_t JNICALL
|
||||
Avian_avian_SystemClassLoader_00024ResourceEnumeration_nextResourceURLPrefix
|
||||
(Thread* t, object, uintptr_t* arguments)
|
||||
{
|
||||
object loader = reinterpret_cast<object>(arguments[1]);
|
||||
GcClassLoader* loader = cast<GcClassLoader>(t, reinterpret_cast<object>(arguments[1]));
|
||||
object name = reinterpret_cast<object>(arguments[2]);
|
||||
object finderElementPtrPtr = reinterpret_cast<object>(arguments[3]);
|
||||
|
||||
@ -221,7 +221,7 @@ Avian_avian_SystemClassLoader_00024ResourceEnumeration_nextResourceURLPrefix
|
||||
void *&finderElementPtr = reinterpret_cast<void *&>(longArrayBody(t,
|
||||
finderElementPtrPtr, 0));
|
||||
const char* name = static_cast<Finder*>
|
||||
(systemClassLoaderFinder(t, loader))->nextUrlPrefix(RUNTIME_ARRAY_BODY(n),
|
||||
(loader->as<GcSystemClassLoader>(t)->finder())->nextUrlPrefix(RUNTIME_ARRAY_BODY(n),
|
||||
finderElementPtr);
|
||||
|
||||
return name ? reinterpret_cast<uintptr_t>(makeString(t, "%s", name)) : 0;
|
||||
|
@ -43,11 +43,11 @@ getDirectBufferAddress(Thread* t, object b)
|
||||
{
|
||||
PROTECT(t, b);
|
||||
|
||||
object field = resolveField
|
||||
(t, objectClass(t, b), "effectiveDirectAddress", "J");
|
||||
GcField* field = cast<GcField>(t, resolveField
|
||||
(t, objectClass(t, b), "effectiveDirectAddress", "J"));
|
||||
|
||||
return reinterpret_cast<void*>
|
||||
(fieldAtOffset<int64_t>(b, fieldOffset(t, field)));
|
||||
(fieldAtOffset<int64_t>(b, field->offset()));
|
||||
}
|
||||
|
||||
void JNICALL
|
||||
@ -111,35 +111,35 @@ makeMethodOrConstructor(Thread* t, GcJclass* c, unsigned index)
|
||||
{
|
||||
PROTECT(t, c);
|
||||
|
||||
object method = arrayBody
|
||||
(t, classMethodTable(t, c->vmClass()), index);
|
||||
GcMethod* method = cast<GcMethod>(t, arrayBody
|
||||
(t, classMethodTable(t, c->vmClass()), index));
|
||||
PROTECT(t, method);
|
||||
|
||||
unsigned parameterCount;
|
||||
unsigned returnTypeSpec;
|
||||
object parameterTypes = resolveParameterJTypes
|
||||
(t, classLoader(t, methodClass(t, method)), methodSpec(t, method),
|
||||
(t, method->class_()->loader(), method->spec(),
|
||||
¶meterCount, &returnTypeSpec);
|
||||
PROTECT(t, parameterTypes);
|
||||
|
||||
GcJclass* returnType = resolveJType
|
||||
(t, classLoader(t, methodClass(t, method)), reinterpret_cast<char*>
|
||||
(&byteArrayBody(t, methodSpec(t, method), returnTypeSpec)),
|
||||
byteArrayLength(t, methodSpec(t, method)) - 1 - returnTypeSpec);
|
||||
(t, method->class_()->loader(), reinterpret_cast<char*>
|
||||
(&method->spec()->body()[returnTypeSpec]),
|
||||
method->spec()->length() - 1 - returnTypeSpec);
|
||||
PROTECT(t, returnType);
|
||||
|
||||
object exceptionTypes = resolveExceptionJTypes
|
||||
(t, classLoader(t, methodClass(t, method)), methodAddendum(t, method));
|
||||
(t, method->class_()->loader(), method->addendum());
|
||||
|
||||
if (byteArrayBody(t, methodName(t, method), 0) == '<') {
|
||||
if (method->name()->body()[0] == '<') {
|
||||
return reinterpret_cast<object>(makeJconstructor
|
||||
(t, 0, c, parameterTypes, exceptionTypes, 0, 0, 0, 0, index));
|
||||
} else {
|
||||
PROTECT(t, exceptionTypes);
|
||||
|
||||
GcString* name = cast<GcString>(t, t->m->classpath->makeString
|
||||
(t, methodName(t, method), 0,
|
||||
byteArrayLength(t, methodName(t, method)) - 1));
|
||||
(t, reinterpret_cast<object>(method->name()), 0,
|
||||
method->name()->length() - 1));
|
||||
|
||||
return reinterpret_cast<object>(makeJmethod
|
||||
(t, 0, index, c, name, parameterTypes, exceptionTypes, returnType, 0, 0,
|
||||
@ -152,22 +152,22 @@ makeField(Thread* t, GcJclass* c, unsigned index)
|
||||
{
|
||||
PROTECT(t, c);
|
||||
|
||||
object field = arrayBody
|
||||
(t, classFieldTable(t, c->vmClass()), index);
|
||||
GcField* field = cast<GcField>(t, arrayBody
|
||||
(t, classFieldTable(t, c->vmClass()), index));
|
||||
|
||||
PROTECT(t, field);
|
||||
|
||||
GcJclass* type = getJClass
|
||||
(t, resolveClassBySpec
|
||||
(t, classLoader(t, fieldClass(t, field)),
|
||||
(t, field->class_()->loader(),
|
||||
reinterpret_cast<char*>
|
||||
(&byteArrayBody(t, fieldSpec(t, field), 0)),
|
||||
byteArrayLength(t, fieldSpec(t, field)) - 1));
|
||||
(field->spec()->body().begin()),
|
||||
field->spec()->length() - 1));
|
||||
PROTECT(t, type);
|
||||
|
||||
GcString* name = cast<GcString>(t, t->m->classpath->makeString
|
||||
(t, fieldName(t, field), 0,
|
||||
byteArrayLength(t, fieldName(t, field)) - 1));
|
||||
(t, reinterpret_cast<object>(field->name()), 0,
|
||||
field->name()->length() - 1));
|
||||
|
||||
return reinterpret_cast<object>(makeJfield(t, 0, c, type, 0, 0, name, index));
|
||||
}
|
||||
@ -178,7 +178,7 @@ void initVmThread(Thread* t, GcThread* thread, unsigned offset)
|
||||
|
||||
if (fieldAtOffset<object>(thread, offset) == 0) {
|
||||
GcClass* c = resolveClass
|
||||
(t, root(t, Machine::BootLoader), "java/lang/VMThread");
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/lang/VMThread");
|
||||
PROTECT(t, c);
|
||||
|
||||
object instance = makeNew(t, c);
|
||||
@ -216,7 +216,7 @@ translateStackTrace(Thread* t, object raw)
|
||||
|
||||
object array = makeObjectArray
|
||||
(t, resolveClass
|
||||
(t, root(t, Machine::BootLoader), "java/lang/StackTraceElement"),
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/lang/StackTraceElement"),
|
||||
objectArrayLength(t, raw));
|
||||
PROTECT(t, array);
|
||||
|
||||
@ -279,7 +279,7 @@ class MyClasspath : public Classpath {
|
||||
group = threadGroup(t, parent->javaThread);
|
||||
} else {
|
||||
resolveSystemClass
|
||||
(t, root(t, Machine::BootLoader),
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)),
|
||||
reinterpret_cast<object>(type(t, GcThreadGroup::Type)->name()), false);
|
||||
|
||||
group = makeNew(t, type(t, GcThreadGroup::Type));
|
||||
@ -291,7 +291,7 @@ class MyClasspath : public Classpath {
|
||||
}
|
||||
|
||||
resolveSystemClass
|
||||
(t, root(t, Machine::BootLoader),
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)),
|
||||
reinterpret_cast<object>(type(t, GcThread::Type)->name()), false);
|
||||
|
||||
GcThread* thread = cast<GcThread>(t, makeNew(t, type(t, GcThread::Type)));
|
||||
@ -372,10 +372,10 @@ class MyClasspath : public Classpath {
|
||||
// later when we try to acquire it:
|
||||
objectMonitor(t, t->javaThread, true);
|
||||
|
||||
object field = resolveField(
|
||||
t, objectClass(t, t->javaThread), "vmThread", "Ljava/lang/VMThread;");
|
||||
GcField* field = cast<GcField>(t, resolveField(
|
||||
t, objectClass(t, t->javaThread), "vmThread", "Ljava/lang/VMThread;"));
|
||||
|
||||
unsigned offset = fieldOffset(t, field);
|
||||
unsigned offset = field->offset();
|
||||
|
||||
THREAD_RESOURCE(t, unsigned, offset, {
|
||||
object vmt = fieldAtOffset<object>(t->javaThread, offset);
|
||||
@ -396,7 +396,7 @@ class MyClasspath : public Classpath {
|
||||
initVmThread(t, cast<GcThread>(t, t->javaThread), offset);
|
||||
|
||||
GcMethod* method = resolveMethod
|
||||
(t, root(t, Machine::BootLoader), "java/lang/Thread", "run", "()V");
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/lang/Thread", "run", "()V");
|
||||
|
||||
t->m->processor->invoke(t, method, t->javaThread);
|
||||
}
|
||||
@ -411,7 +411,7 @@ class MyClasspath : public Classpath {
|
||||
interceptMethods(Thread* t, bool updateRuntimeData)
|
||||
{
|
||||
{ GcClass* c = resolveClass
|
||||
(t, root(t, Machine::BootLoader), "java/lang/Runtime", false);
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/lang/Runtime", false);
|
||||
|
||||
if (c) {
|
||||
PROTECT(t, c);
|
||||
@ -423,7 +423,7 @@ class MyClasspath : public Classpath {
|
||||
}
|
||||
|
||||
{ GcClass* c = resolveClass
|
||||
(t, root(t, Machine::BootLoader), "java/lang/ref/FinalizerReference",
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/lang/ref/FinalizerReference",
|
||||
false);
|
||||
|
||||
if (c) {
|
||||
@ -435,7 +435,7 @@ class MyClasspath : public Classpath {
|
||||
}
|
||||
|
||||
{ GcClass* c = resolveClass
|
||||
(t, root(t, Machine::BootLoader), "java/lang/ClassLoader", false);
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/lang/ClassLoader", false);
|
||||
|
||||
if (c) {
|
||||
PROTECT(t, c);
|
||||
@ -450,7 +450,7 @@ class MyClasspath : public Classpath {
|
||||
}
|
||||
|
||||
{ GcClass* c = resolveClass
|
||||
(t, root(t, Machine::BootLoader), "libcore/util/ZoneInfoDB", false);
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "libcore/util/ZoneInfoDB", false);
|
||||
|
||||
if (c) {
|
||||
PROTECT(t, c);
|
||||
@ -461,7 +461,7 @@ class MyClasspath : public Classpath {
|
||||
}
|
||||
|
||||
{ GcClass* c = resolveClass
|
||||
(t, root(t, Machine::BootLoader), "libcore/io/MemoryMappedFile",
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "libcore/io/MemoryMappedFile",
|
||||
false);
|
||||
|
||||
if (c) {
|
||||
@ -508,7 +508,7 @@ class MyClasspath : public Classpath {
|
||||
boot(Thread* t)
|
||||
{
|
||||
GcClass* c = resolveClass
|
||||
(t, root(t, Machine::BootLoader), "java/lang/ClassLoader");
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/lang/ClassLoader");
|
||||
PROTECT(t, c);
|
||||
|
||||
GcMethod* constructor = resolveMethod
|
||||
@ -533,7 +533,7 @@ class MyClasspath : public Classpath {
|
||||
makeDirectByteBuffer(Thread* t, void* p, jlong capacity)
|
||||
{
|
||||
GcClass* c = resolveClass
|
||||
(t, root(t, Machine::BootLoader), "java/nio/DirectByteBuffer");
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/nio/DirectByteBuffer");
|
||||
PROTECT(t, c);
|
||||
|
||||
object instance = makeNew(t, c);
|
||||
@ -559,10 +559,10 @@ class MyClasspath : public Classpath {
|
||||
{
|
||||
PROTECT(t, b);
|
||||
|
||||
object field = resolveField
|
||||
(t, objectClass(t, b), "capacity", "I");
|
||||
GcField* field = cast<GcField>(t, resolveField
|
||||
(t, objectClass(t, b), "capacity", "I"));
|
||||
|
||||
return fieldAtOffset<int32_t>(b, fieldOffset(t, field));
|
||||
return fieldAtOffset<int32_t>(b, field->offset());
|
||||
}
|
||||
|
||||
virtual bool
|
||||
@ -606,7 +606,7 @@ int64_t JNICALL
|
||||
mapData(Thread* t, object, uintptr_t*)
|
||||
{
|
||||
GcClass* c = resolveClass
|
||||
(t, root(t, Machine::BootLoader), "libcore/io/MemoryMappedFile");
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "libcore/io/MemoryMappedFile");
|
||||
PROTECT(t, c);
|
||||
|
||||
object instance = makeNew(t, c);
|
||||
@ -645,15 +645,15 @@ closeMemoryMappedFile(Thread* t, GcMethod* method, uintptr_t* arguments)
|
||||
MyClasspath* cp = static_cast<MyClasspath*>(t->m->classpath);
|
||||
|
||||
if (cp->tzdata) {
|
||||
object field = resolveField(t, objectClass(t, file), "address", "J");
|
||||
GcField* field = cast<GcField>(t, resolveField(t, objectClass(t, file), "address", "J"));
|
||||
|
||||
if (fieldAtOffset<int64_t>(file, fieldOffset(t, field))
|
||||
if (fieldAtOffset<int64_t>(file, field->offset())
|
||||
== reinterpret_cast<int64_t>(cp->tzdata->start()))
|
||||
{
|
||||
cp->tzdata->dispose();
|
||||
cp->tzdata = 0;
|
||||
|
||||
fieldAtOffset<int64_t>(file, fieldOffset(t, field)) = 0;
|
||||
fieldAtOffset<int64_t>(file, field->offset()) = 0;
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -665,9 +665,9 @@ closeMemoryMappedFile(Thread* t, GcMethod* method, uintptr_t* arguments)
|
||||
}
|
||||
|
||||
bool
|
||||
matchType(Thread* t, object field, object o)
|
||||
matchType(Thread* t, GcField* field, object o)
|
||||
{
|
||||
switch (fieldCode(t, field)) {
|
||||
switch (field->code()) {
|
||||
case ByteField:
|
||||
return objectClass(t, o) == type(t, GcByte::Type);
|
||||
|
||||
@ -698,22 +698,21 @@ matchType(Thread* t, object field, object o)
|
||||
} else {
|
||||
PROTECT(t, o);
|
||||
|
||||
object spec;
|
||||
if (byteArrayBody(t, fieldSpec(t, field), 0) == '[') {
|
||||
spec = fieldSpec(t, field);;
|
||||
GcByteArray* spec;
|
||||
if (field->spec()->body()[0] == '[') {
|
||||
spec = field->spec();
|
||||
} else {
|
||||
spec = reinterpret_cast<object>(makeByteArray(t, byteArrayLength(t, fieldSpec(t, field)) - 2));
|
||||
spec = makeByteArray(t, field->spec()->length() - 2);
|
||||
|
||||
memcpy(&byteArrayBody(t, spec, 0),
|
||||
&byteArrayBody(t, fieldSpec(t, field), 1),
|
||||
byteArrayLength(t, fieldSpec(t, field)) - 3);
|
||||
memcpy(spec->body().begin(),
|
||||
&field->spec()->body()[1],
|
||||
field->spec()->length() - 3);
|
||||
|
||||
byteArrayBody
|
||||
(t, spec, byteArrayLength(t, fieldSpec(t, field)) - 3) = 0;
|
||||
spec->body()[field->spec()->length() - 3] = 0;
|
||||
}
|
||||
|
||||
return instanceOf
|
||||
(t, resolveClass(t, classLoader(t, fieldClass(t, field)), spec), o);
|
||||
(t, resolveClass(t, field->class_()->loader(), reinterpret_cast<object>(spec)), o);
|
||||
}
|
||||
|
||||
default: abort(t);
|
||||
@ -721,24 +720,24 @@ matchType(Thread* t, object field, object o)
|
||||
}
|
||||
|
||||
object
|
||||
getField(Thread* t, object field, object instance)
|
||||
getField(Thread* t, GcField* field, object instance)
|
||||
{
|
||||
PROTECT(t, field);
|
||||
PROTECT(t, instance);
|
||||
|
||||
initClass(t, cast<GcClass>(t, fieldClass(t, field)));
|
||||
initClass(t, field->class_());
|
||||
|
||||
object target;
|
||||
if (fieldFlags(t, field) & ACC_STATIC) {
|
||||
target = classStaticTable(t, fieldClass(t, field));
|
||||
} else if (instanceOf(t, cast<GcClass>(t, fieldClass(t, field)), instance)){
|
||||
if (field->flags() & ACC_STATIC) {
|
||||
target = reinterpret_cast<object>(field->class_()->staticTable());
|
||||
} else if (instanceOf(t, field->class_(), instance)){
|
||||
target = instance;
|
||||
} else {
|
||||
throwNew(t, GcIllegalArgumentException::Type);
|
||||
}
|
||||
|
||||
unsigned offset = fieldOffset(t, field);
|
||||
switch (fieldCode(t, field)) {
|
||||
unsigned offset = field->offset();
|
||||
switch (field->code()) {
|
||||
case ByteField:
|
||||
return reinterpret_cast<object>(makeByte(t, fieldAtOffset<int8_t>(target, offset)));
|
||||
|
||||
@ -771,7 +770,7 @@ getField(Thread* t, object field, object instance)
|
||||
}
|
||||
|
||||
void
|
||||
setField(Thread* t, object field, object instance, object value)
|
||||
setField(Thread* t, GcField* field, object instance, object value)
|
||||
{
|
||||
PROTECT(t, field);
|
||||
PROTECT(t, instance);
|
||||
@ -782,19 +781,19 @@ setField(Thread* t, object field, object instance, object value)
|
||||
}
|
||||
|
||||
object target;
|
||||
if ((fieldFlags(t, field) & ACC_STATIC) != 0) {
|
||||
target = classStaticTable(t, fieldClass(t, field));
|
||||
} else if (instanceOf(t, cast<GcClass>(t, fieldClass(t, field)), instance)){
|
||||
if ((field->flags() & ACC_STATIC) != 0) {
|
||||
target = reinterpret_cast<object>(field->class_()->staticTable());
|
||||
} else if (instanceOf(t, field->class_(), instance)){
|
||||
target = instance;
|
||||
} else {
|
||||
throwNew(t, GcIllegalArgumentException::Type);
|
||||
}
|
||||
PROTECT(t, target);
|
||||
|
||||
initClass(t, cast<GcClass>(t, fieldClass(t, field)));
|
||||
initClass(t, field->class_());
|
||||
|
||||
unsigned offset = fieldOffset(t, field);
|
||||
switch (fieldCode(t, field)) {
|
||||
unsigned offset = field->offset();
|
||||
switch (field->code()) {
|
||||
case ByteField:
|
||||
fieldAtOffset<int8_t>(target, offset) = byteValue(t, value);
|
||||
break;
|
||||
@ -1220,11 +1219,11 @@ Avian_java_lang_Class_classForName
|
||||
object name = reinterpret_cast<object>(arguments[0]);
|
||||
PROTECT(t, name);
|
||||
|
||||
object loader = reinterpret_cast<object>(arguments[2]);
|
||||
GcClassLoader* loader = cast<GcClassLoader>(t, reinterpret_cast<object>(arguments[2]));
|
||||
PROTECT(t, loader);
|
||||
|
||||
GcMethod* method = resolveMethod
|
||||
(t, root(t, Machine::BootLoader), "avian/Classes", "forName",
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "avian/Classes", "forName",
|
||||
"(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;");
|
||||
|
||||
return reinterpret_cast<uintptr_t>
|
||||
@ -1243,7 +1242,7 @@ Avian_java_lang_Class_getDeclaredField
|
||||
PROTECT(t, name);
|
||||
|
||||
GcMethod* method = resolveMethod
|
||||
(t, root(t, Machine::BootLoader), "avian/Classes", "findField",
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "avian/Classes", "findField",
|
||||
"(Lavian/VMClass;Ljava/lang/String;)I");
|
||||
|
||||
int index = intValue
|
||||
@ -1271,7 +1270,7 @@ Avian_java_lang_Class_getDeclaredConstructorOrMethod
|
||||
PROTECT(t, parameterTypes);
|
||||
|
||||
GcMethod* method = resolveMethod
|
||||
(t, root(t, Machine::BootLoader), "avian/Classes", "findMethod",
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "avian/Classes", "findMethod",
|
||||
"(Lavian/VMClass;Ljava/lang/String;[Ljava/lang/Class;)I");
|
||||
|
||||
int index = intValue
|
||||
@ -1420,12 +1419,12 @@ Avian_java_lang_VMThread_interrupt
|
||||
object vmThread = reinterpret_cast<object>(arguments[0]);
|
||||
PROTECT(t, vmThread);
|
||||
|
||||
object field = resolveField
|
||||
(t, objectClass(t, vmThread), "thread", "Ljava/lang/Thread;");
|
||||
GcField* field = cast<GcField>(t, resolveField
|
||||
(t, objectClass(t, vmThread), "thread", "Ljava/lang/Thread;"));
|
||||
|
||||
interrupt
|
||||
(t, reinterpret_cast<Thread*>
|
||||
(threadPeer(t, fieldAtOffset<object>(vmThread, fieldOffset(t, field)))));
|
||||
(threadPeer(t, fieldAtOffset<object>(vmThread, field->offset()))));
|
||||
}
|
||||
|
||||
extern "C" AVIAN_EXPORT int64_t JNICALL
|
||||
@ -1442,11 +1441,11 @@ Avian_java_lang_VMThread_isInterrupted
|
||||
object vmThread = reinterpret_cast<object>(arguments[0]);
|
||||
PROTECT(t, vmThread);
|
||||
|
||||
object field = resolveField
|
||||
(t, objectClass(t, vmThread), "thread", "Ljava/lang/Thread;");
|
||||
GcField* field = cast<GcField>(t, resolveField
|
||||
(t, objectClass(t, vmThread), "thread", "Ljava/lang/Thread;"));
|
||||
|
||||
return threadInterrupted
|
||||
(t, fieldAtOffset<object>(vmThread, fieldOffset(t, field)));
|
||||
(t, fieldAtOffset<object>(vmThread, field->offset()));
|
||||
}
|
||||
|
||||
extern "C" AVIAN_EXPORT int64_t JNICALL
|
||||
@ -1835,7 +1834,7 @@ Avian_java_lang_Class_getDeclaredMethods
|
||||
bool publicOnly = arguments[1];
|
||||
|
||||
GcMethod* get = resolveMethod
|
||||
(t, root(t, Machine::BootLoader), "avian/Classes", "getMethods",
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "avian/Classes", "getMethods",
|
||||
"(Lavian/VMClass;Z)[Ljava/lang/reflect/Method;");
|
||||
|
||||
return reinterpret_cast<uintptr_t>
|
||||
@ -1852,7 +1851,7 @@ Avian_java_lang_Class_getDeclaredFields
|
||||
bool publicOnly = arguments[1];
|
||||
|
||||
GcMethod* get = resolveMethod
|
||||
(t, root(t, Machine::BootLoader), "avian/Classes", "getFields",
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "avian/Classes", "getFields",
|
||||
"(Lavian/VMClass;Z)[Ljava/lang/reflect/Field;");
|
||||
|
||||
return reinterpret_cast<uintptr_t>
|
||||
@ -1931,7 +1930,7 @@ Avian_java_lang_reflect_Method_getAnnotation
|
||||
PROTECT(t, table);
|
||||
|
||||
GcMethod* get = resolveMethod
|
||||
(t, root(t, Machine::BootLoader), "avian/Classes", "getAnnotation",
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "avian/Classes", "getAnnotation",
|
||||
"(Ljava/lang/ClassLoader;[Ljava/lang/Object;)"
|
||||
"Ljava/lang/annotation/Annotation;");
|
||||
|
||||
@ -1965,12 +1964,12 @@ Avian_java_lang_reflect_Method_getDeclaredAnnotations
|
||||
|
||||
object array = makeObjectArray
|
||||
(t, resolveClass
|
||||
(t, root(t, Machine::BootLoader), "java/lang/annotation/Annotation"),
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/lang/annotation/Annotation"),
|
||||
objectArrayLength(t, table));
|
||||
PROTECT(t, array);
|
||||
|
||||
GcMethod* get = resolveMethod
|
||||
(t, root(t, Machine::BootLoader), "avian/Classes", "getAnnotation",
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "avian/Classes", "getAnnotation",
|
||||
"(Ljava/lang/ClassLoader;[Ljava/lang/Object;)"
|
||||
"Ljava/lang/annotation/Annotation;");
|
||||
PROTECT(t, get);
|
||||
@ -1990,7 +1989,7 @@ Avian_java_lang_reflect_Method_getDeclaredAnnotations
|
||||
return reinterpret_cast<uintptr_t>
|
||||
(makeObjectArray
|
||||
(t, resolveClass
|
||||
(t, root(t, Machine::BootLoader), "java/lang/annotation/Annotation"),
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/lang/annotation/Annotation"),
|
||||
0));
|
||||
}
|
||||
|
||||
@ -1999,13 +1998,13 @@ extern "C" AVIAN_EXPORT int64_t JNICALL
|
||||
object,
|
||||
uintptr_t* arguments)
|
||||
{
|
||||
object field = arrayBody(
|
||||
GcField* field = cast<GcField>(t, arrayBody(
|
||||
t,
|
||||
classFieldTable(
|
||||
t, jclassVmClass(t, reinterpret_cast<object>(arguments[0]))),
|
||||
arguments[1]);
|
||||
arguments[1]));
|
||||
|
||||
object addendum = fieldAddendum(t, field);
|
||||
object addendum = reinterpret_cast<object>(field->addendum());
|
||||
if (addendum) {
|
||||
object table = addendumAnnotationTable(t, addendum);
|
||||
if (table) {
|
||||
@ -2015,13 +2014,13 @@ extern "C" AVIAN_EXPORT int64_t JNICALL
|
||||
object array
|
||||
= makeObjectArray(t,
|
||||
resolveClass(t,
|
||||
root(t, Machine::BootLoader),
|
||||
cast<GcClassLoader>(t, root(t, Machine::BootLoader)),
|
||||
"java/lang/annotation/Annotation"),
|
||||
objectArrayLength(t, table));
|
||||
PROTECT(t, array);
|
||||
|
||||
GcMethod* get = resolveMethod(t,
|
||||
root(t, Machine::BootLoader),
|
||||
cast<GcClassLoader>(t, root(t, Machine::BootLoader)),
|
||||
"avian/Classes",
|
||||
"getAnnotation",
|
||||
"(Ljava/lang/ClassLoader;[Ljava/lang/Object;)"
|
||||
@ -2046,7 +2045,7 @@ extern "C" AVIAN_EXPORT int64_t JNICALL
|
||||
return reinterpret_cast<uintptr_t>(makeObjectArray(
|
||||
t,
|
||||
resolveClass(
|
||||
t, root(t, Machine::BootLoader), "java/lang/annotation/Annotation"),
|
||||
t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/lang/annotation/Annotation"),
|
||||
0));
|
||||
}
|
||||
|
||||
@ -2062,7 +2061,7 @@ Avian_java_lang_reflect_Method_getDefaultValue
|
||||
object addendum = methodAddendum(t, method);
|
||||
if (addendum) {
|
||||
GcMethod* get = resolveMethod
|
||||
(t, root(t, Machine::BootLoader), "avian/Classes",
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "avian/Classes",
|
||||
"getAnnotationDefaultValue",
|
||||
"(Ljava/lang/ClassLoader;Lavian/MethodAddendum;)"
|
||||
"Ljava/lang/Object;");
|
||||
@ -2102,10 +2101,10 @@ extern "C" AVIAN_EXPORT int64_t JNICALL
|
||||
Avian_java_lang_reflect_Field_getField
|
||||
(Thread* t, object, uintptr_t* arguments)
|
||||
{
|
||||
object field = arrayBody
|
||||
GcField* field = cast<GcField>(t, arrayBody
|
||||
(t, classFieldTable
|
||||
(t, jclassVmClass(t, reinterpret_cast<object>(arguments[2]))),
|
||||
arguments[4]);
|
||||
arguments[4]));
|
||||
|
||||
PROTECT(t, field);
|
||||
|
||||
@ -2119,10 +2118,10 @@ extern "C" AVIAN_EXPORT int64_t JNICALL
|
||||
Avian_java_lang_reflect_Field_getIField
|
||||
(Thread* t, object, uintptr_t* arguments)
|
||||
{
|
||||
object field = arrayBody
|
||||
GcField* field = cast<GcField>(t, arrayBody
|
||||
(t, classFieldTable
|
||||
(t, jclassVmClass(t, reinterpret_cast<object>(arguments[2]))),
|
||||
arguments[4]);
|
||||
arguments[4]));
|
||||
|
||||
PROTECT(t, field);
|
||||
|
||||
@ -2136,10 +2135,10 @@ extern "C" AVIAN_EXPORT int64_t JNICALL
|
||||
Avian_java_lang_reflect_Field_getJField
|
||||
(Thread* t, object, uintptr_t* arguments)
|
||||
{
|
||||
object field = arrayBody
|
||||
GcField* field = cast<GcField>(t, arrayBody
|
||||
(t, classFieldTable
|
||||
(t, jclassVmClass(t, reinterpret_cast<object>(arguments[2]))),
|
||||
arguments[4]);
|
||||
arguments[4]));
|
||||
|
||||
PROTECT(t, field);
|
||||
|
||||
@ -2153,10 +2152,10 @@ extern "C" AVIAN_EXPORT void JNICALL
|
||||
Avian_java_lang_reflect_Field_setField
|
||||
(Thread* t, object, uintptr_t* arguments)
|
||||
{
|
||||
object field = arrayBody
|
||||
GcField* field = cast<GcField>(t, arrayBody
|
||||
(t, classFieldTable
|
||||
(t, jclassVmClass(t, reinterpret_cast<object>(arguments[2]))),
|
||||
arguments[4]);
|
||||
arguments[4]));
|
||||
|
||||
PROTECT(t, field);
|
||||
|
||||
@ -2173,10 +2172,10 @@ extern "C" AVIAN_EXPORT void JNICALL
|
||||
Avian_java_lang_reflect_Field_setIField
|
||||
(Thread* t, object, uintptr_t* arguments)
|
||||
{
|
||||
object field = arrayBody
|
||||
GcField* field = cast<GcField>(t, arrayBody
|
||||
(t, classFieldTable
|
||||
(t, jclassVmClass(t, reinterpret_cast<object>(arguments[2]))),
|
||||
arguments[4]);
|
||||
arguments[4]));
|
||||
|
||||
object instance = reinterpret_cast<object>(arguments[1]);
|
||||
PROTECT(t, instance);
|
||||
@ -2201,12 +2200,12 @@ extern "C" AVIAN_EXPORT int64_t JNICALL
|
||||
Avian_java_lang_reflect_Field_getAnnotation
|
||||
(Thread* t, object, uintptr_t* arguments)
|
||||
{
|
||||
object field = arrayBody
|
||||
GcField* field = cast<GcField>(t, arrayBody
|
||||
(t, classFieldTable
|
||||
(t, jclassVmClass(t, reinterpret_cast<object>(arguments[0]))),
|
||||
arguments[1]);
|
||||
arguments[1]));
|
||||
|
||||
object addendum = fieldAddendum(t, field);
|
||||
object addendum = reinterpret_cast<object>(field->addendum());
|
||||
if (addendum) {
|
||||
object table = addendumAnnotationTable(t, addendum);
|
||||
if (table) {
|
||||
@ -2218,13 +2217,13 @@ Avian_java_lang_reflect_Field_getAnnotation
|
||||
PROTECT(t, table);
|
||||
|
||||
GcMethod* get = resolveMethod
|
||||
(t, root(t, Machine::BootLoader), "avian/Classes", "getAnnotation",
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "avian/Classes", "getAnnotation",
|
||||
"(Ljava/lang/ClassLoader;[Ljava/lang/Object;)"
|
||||
"Ljava/lang/annotation/Annotation;");
|
||||
|
||||
return reinterpret_cast<uintptr_t>
|
||||
(t->m->processor->invoke
|
||||
(t, get, 0, classLoader(t, fieldClass(t, field)),
|
||||
(t, get, 0, field->class_()->loader(),
|
||||
objectArrayBody(t, table, i)));
|
||||
}
|
||||
}
|
||||
@ -2238,12 +2237,12 @@ extern "C" AVIAN_EXPORT int64_t JNICALL
|
||||
Avian_java_lang_reflect_Field_getSignatureAnnotation
|
||||
(Thread* t, object, uintptr_t* arguments)
|
||||
{
|
||||
object field = arrayBody
|
||||
GcField* field = cast<GcField>(t, arrayBody
|
||||
(t, classFieldTable
|
||||
(t, jclassVmClass(t, reinterpret_cast<object>(arguments[1]))),
|
||||
arguments[2]);
|
||||
arguments[2]));
|
||||
|
||||
object addendum = fieldAddendum(t, field);
|
||||
object addendum = reinterpret_cast<object>(field->addendum());
|
||||
if (addendum) {
|
||||
object signature = addendumSignature(t, addendum);
|
||||
if (signature) {
|
||||
@ -2460,14 +2459,14 @@ Avian_libcore_io_OsConstants_initConstants
|
||||
object table = classStaticTable(t, c);
|
||||
PROTECT(t, table);
|
||||
|
||||
object field = resolveField(t, c, "STDIN_FILENO", "I");
|
||||
fieldAtOffset<jint>(table, fieldOffset(t, field)) = 0;
|
||||
GcField* field = cast<GcField>(t, resolveField(t, c, "STDIN_FILENO", "I");
|
||||
fieldAtOffset<jint>(table, field->offset()) = 0;
|
||||
|
||||
field = resolveField(t, c, "STDOUT_FILENO", "I");
|
||||
fieldAtOffset<jint>(table, fieldOffset(t, field)) = 1;
|
||||
fieldAtOffset<jint>(table, field->offset()) = 1;
|
||||
|
||||
field = resolveField(t, c, "STDERR_FILENO", "I");
|
||||
fieldAtOffset<jint>(table, fieldOffset(t, field)) = 2;
|
||||
fieldAtOffset<jint>(table, field->offset()) = 2;
|
||||
}
|
||||
|
||||
extern "C" AVIAN_EXPORT int64_t JNICALL
|
||||
|
@ -97,7 +97,7 @@ class MyClasspath : public Classpath {
|
||||
runThread(Thread* t)
|
||||
{
|
||||
GcMethod* method = resolveMethod
|
||||
(t, root(t, Machine::BootLoader), "java/lang/Thread", "run",
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/lang/Thread", "run",
|
||||
"(Ljava/lang/Thread;)V");
|
||||
|
||||
t->m->processor->invoke(t, method, 0, t->javaThread);
|
||||
@ -142,7 +142,7 @@ class MyClasspath : public Classpath {
|
||||
makeDirectByteBuffer(Thread* t, void* p, jlong capacity)
|
||||
{
|
||||
GcClass* c = resolveClass
|
||||
(t, root(t, Machine::BootLoader), "java/nio/DirectByteBuffer");
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/nio/DirectByteBuffer");
|
||||
PROTECT(t, c);
|
||||
|
||||
object instance = makeNew(t, c);
|
||||
@ -793,7 +793,7 @@ Avian_avian_Classes_makeMethod
|
||||
PROTECT(t, method);
|
||||
|
||||
GcClass* c = resolveClass
|
||||
(t, root(t, Machine::BootLoader), "java/lang/reflect/Method");
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/lang/reflect/Method");
|
||||
PROTECT(t, c);
|
||||
|
||||
object instance = makeNew(t, c);
|
||||
@ -807,7 +807,7 @@ Avian_avian_Classes_makeMethod
|
||||
method = instance;
|
||||
|
||||
c = resolveClass
|
||||
(t, root(t, Machine::BootLoader), "java/lang/reflect/Constructor");
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/lang/reflect/Constructor");
|
||||
|
||||
object instance = makeNew(t, c);
|
||||
|
||||
|
@ -345,10 +345,10 @@ makeClassNameString(Thread* t, object name)
|
||||
}
|
||||
|
||||
object
|
||||
makeJmethod(Thread* t, object vmMethod, int index = -1);
|
||||
makeJmethod(Thread* t, GcMethod* vmMethod, int index = -1);
|
||||
|
||||
object
|
||||
makeJconstructor(Thread* t, object vmMethod, int index = -1);
|
||||
makeJconstructor(Thread* t, GcMethod* vmMethod, int index = -1);
|
||||
|
||||
object
|
||||
makeJfield(Thread* t, object vmField, int index = -1);
|
||||
@ -580,8 +580,8 @@ class MyClasspath : public Classpath {
|
||||
PROTECT(t, vmMethod);
|
||||
|
||||
return vmMethod->name()->body()[0] == '<'
|
||||
? reinterpret_cast<object>(makeJconstructor(t, reinterpret_cast<object>(vmMethod)))
|
||||
: reinterpret_cast<object>(makeJmethod(t, reinterpret_cast<object>(vmMethod)));
|
||||
? reinterpret_cast<object>(makeJconstructor(t, vmMethod))
|
||||
: reinterpret_cast<object>(makeJmethod(t, vmMethod));
|
||||
}
|
||||
|
||||
virtual object
|
||||
@ -644,7 +644,7 @@ class MyClasspath : public Classpath {
|
||||
});
|
||||
|
||||
GcMethod* method = resolveMethod
|
||||
(t, root(t, Machine::BootLoader), "java/lang/Thread", "run", "()V");
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/lang/Thread", "run", "()V");
|
||||
|
||||
t->m->processor->invoke(t, method, t->javaThread);
|
||||
}
|
||||
@ -691,11 +691,11 @@ class MyClasspath : public Classpath {
|
||||
{
|
||||
globalMachine = t->m;
|
||||
|
||||
resolveSystemClass(t, root(t, Machine::BootLoader),
|
||||
resolveSystemClass(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)),
|
||||
reinterpret_cast<object>(type(t, GcClassLoader::Type)->name()));
|
||||
|
||||
setRoot(t, Machine::ThreadTerminated, reinterpret_cast<object>(resolveMethod
|
||||
(t, root(t, Machine::BootLoader), "java/lang/ThreadGroup",
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/lang/ThreadGroup",
|
||||
"threadTerminated", "(Ljava/lang/Thread;)V")));
|
||||
|
||||
#ifdef AVIAN_OPENJDK_SRC
|
||||
@ -709,12 +709,12 @@ class MyClasspath : public Classpath {
|
||||
(t, type(t, GcClassLoader::Type), "assertionLock",
|
||||
"Ljava/lang/Object;");
|
||||
|
||||
set(t, root(t, Machine::BootLoader), fieldOffset(t, assertionLock),
|
||||
root(t, Machine::BootLoader));
|
||||
set(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), fieldOffset(t, assertionLock),
|
||||
cast<GcClassLoader>(t, root(t, Machine::BootLoader)));
|
||||
}
|
||||
|
||||
{ GcClass* class_ = resolveClass
|
||||
(t, root(t, Machine::BootLoader), "java/util/Properties", true,
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/util/Properties", true,
|
||||
GcNoClassDefFoundError::Type);
|
||||
|
||||
PROTECT(t, class_);
|
||||
@ -742,7 +742,7 @@ class MyClasspath : public Classpath {
|
||||
|
||||
t->m->processor->invoke
|
||||
(t, constructor, root(t, Machine::AppLoader),
|
||||
root(t, Machine::BootLoader));
|
||||
cast<GcClassLoader>(t, root(t, Machine::BootLoader)));
|
||||
}
|
||||
|
||||
{ object scl = resolveField
|
||||
@ -783,7 +783,7 @@ class MyClasspath : public Classpath {
|
||||
makeDirectByteBuffer(Thread* t, void* p, jlong capacity)
|
||||
{
|
||||
GcClass* c = resolveClass
|
||||
(t, root(t, Machine::BootLoader), "java/nio/DirectByteBuffer");
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/nio/DirectByteBuffer");
|
||||
PROTECT(t, c);
|
||||
|
||||
object instance = makeNew(t, c);
|
||||
@ -872,7 +872,7 @@ class MyClasspath : public Classpath {
|
||||
shutDown(Thread* t)
|
||||
{
|
||||
GcClass* c = resolveClass
|
||||
(t, root(t, Machine::BootLoader), "java/lang/Shutdown", false);
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/lang/Shutdown", false);
|
||||
|
||||
if (c) {
|
||||
GcMethod* m = findMethodOrNull(t, c, "shutdown", "()V");
|
||||
@ -1836,7 +1836,7 @@ getBootstrapResource(Thread* t, object, uintptr_t* arguments)
|
||||
|
||||
if (m) {
|
||||
return reinterpret_cast<int64_t>
|
||||
(t->m->processor->invoke(t, m, root(t, Machine::BootLoader), name));
|
||||
(t->m->processor->invoke(t, m, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), name));
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
@ -1854,7 +1854,7 @@ getBootstrapResources(Thread* t, object, uintptr_t* arguments)
|
||||
|
||||
if (m) {
|
||||
return reinterpret_cast<int64_t>
|
||||
(t->m->processor->invoke(t, m, root(t, Machine::BootLoader), name));
|
||||
(t->m->processor->invoke(t, m, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), name));
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
@ -1932,7 +1932,7 @@ interceptFileOperations(Thread* t, bool updateRuntimeData)
|
||||
MyClasspath* cp = static_cast<MyClasspath*>(t->m->classpath);
|
||||
|
||||
{ object fileClass = resolveClass
|
||||
(t, root(t, Machine::BootLoader), "java/io/File", false);
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/io/File", false);
|
||||
|
||||
if (fileClass) {
|
||||
object filePathField = findFieldInClass2
|
||||
@ -1945,7 +1945,7 @@ interceptFileOperations(Thread* t, bool updateRuntimeData)
|
||||
}
|
||||
|
||||
{ object fileDescriptorClass = resolveClass
|
||||
(t, root(t, Machine::BootLoader), "java/io/FileDescriptor", false);
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/io/FileDescriptor", false);
|
||||
|
||||
if (fileDescriptorClass) {
|
||||
object fileDescriptorFdField = findFieldInClass2
|
||||
@ -1958,7 +1958,7 @@ interceptFileOperations(Thread* t, bool updateRuntimeData)
|
||||
}
|
||||
|
||||
{ object fileInputStreamClass = resolveClass
|
||||
(t, root(t, Machine::BootLoader), "java/io/FileInputStream", false);
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/io/FileInputStream", false);
|
||||
|
||||
if (fileInputStreamClass) {
|
||||
PROTECT(t, fileInputStreamClass);
|
||||
@ -1996,7 +1996,7 @@ interceptFileOperations(Thread* t, bool updateRuntimeData)
|
||||
}
|
||||
|
||||
{ object zipFileClass = resolveClass
|
||||
(t, root(t, Machine::BootLoader), "java/util/zip/ZipFile", false);
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/util/zip/ZipFile", false);
|
||||
|
||||
if (zipFileClass) {
|
||||
PROTECT(t, zipFileClass);
|
||||
@ -2049,7 +2049,7 @@ interceptFileOperations(Thread* t, bool updateRuntimeData)
|
||||
}
|
||||
|
||||
{ object jarFileClass = resolveClass
|
||||
(t, root(t, Machine::BootLoader), "java/util/jar/JarFile", false);
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/util/jar/JarFile", false);
|
||||
|
||||
if (jarFileClass) {
|
||||
intercept(t, jarFileClass, "getMetaInfEntryNames",
|
||||
@ -2068,7 +2068,7 @@ interceptFileOperations(Thread* t, bool updateRuntimeData)
|
||||
#endif
|
||||
|
||||
object fsClass = resolveClass
|
||||
(t, root(t, Machine::BootLoader), fsClassName, false);
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), fsClassName, false);
|
||||
|
||||
if (fsClass) {
|
||||
PROTECT(t, fsClass);
|
||||
@ -2118,9 +2118,9 @@ countMethods(Thread* t, object c, bool publicOnly)
|
||||
object table = classMethodTable(t, c);
|
||||
unsigned count = 0;
|
||||
for (unsigned i = 0, j = classDeclaredMethodCount(t, c); i < j; ++i) {
|
||||
object vmMethod = arrayBody(t, table, i);
|
||||
if (((not publicOnly) or (methodFlags(t, vmMethod) & ACC_PUBLIC))
|
||||
and byteArrayBody(t, methodName(t, vmMethod), 0) != '<')
|
||||
GcMethod* vmMethod = cast<GcMethod>(t, arrayBody(t, table, i));
|
||||
if (((not publicOnly) or (vmMethod->flags() & ACC_PUBLIC))
|
||||
and vmMethod->name()->body()[0] != '<')
|
||||
{
|
||||
++ count;
|
||||
}
|
||||
@ -2152,10 +2152,10 @@ countConstructors(Thread* t, object c, bool publicOnly)
|
||||
object table = classMethodTable(t, c);
|
||||
unsigned count = 0;
|
||||
for (unsigned i = 0, j = classDeclaredMethodCount(t, c); i < j; ++i) {
|
||||
object vmMethod = arrayBody(t, table, i);
|
||||
if (((not publicOnly) or (methodFlags(t, vmMethod) & ACC_PUBLIC))
|
||||
GcMethod* vmMethod = cast<GcMethod>(t, arrayBody(t, table, i));
|
||||
if (((not publicOnly) or (vmMethod->flags() & ACC_PUBLIC))
|
||||
and strcmp(reinterpret_cast<char*>
|
||||
(&byteArrayBody(t, methodName(t, vmMethod), 0)),
|
||||
(vmMethod->name()->body().begin()),
|
||||
"<init>") == 0)
|
||||
{
|
||||
++ count;
|
||||
@ -2217,39 +2217,38 @@ makeJconstructor(Thread* t,
|
||||
#endif // HAVE_JexecutableHasRealParameterData
|
||||
|
||||
object
|
||||
makeJmethod(Thread* t, object vmMethod, int index)
|
||||
makeJmethod(Thread* t, GcMethod* vmMethod, int index)
|
||||
{
|
||||
PROTECT(t, vmMethod);
|
||||
|
||||
object name = intern
|
||||
(t, t->m->classpath->makeString
|
||||
(t, methodName(t, vmMethod), 0, byteArrayLength
|
||||
(t, methodName(t, vmMethod)) - 1));
|
||||
(t, reinterpret_cast<object>(vmMethod->name()), 0, vmMethod->name()->length() - 1));
|
||||
PROTECT(t, name);
|
||||
|
||||
unsigned parameterCount;
|
||||
unsigned returnTypeSpec;
|
||||
object parameterTypes = resolveParameterJTypes
|
||||
(t, classLoader(t, methodClass(t, vmMethod)), methodSpec(t, vmMethod),
|
||||
(t, vmMethod->class_()->loader(), vmMethod->spec(),
|
||||
¶meterCount, &returnTypeSpec);
|
||||
PROTECT(t, parameterTypes);
|
||||
|
||||
GcJclass* returnType = resolveJType
|
||||
(t, classLoader(t, methodClass(t, vmMethod)), reinterpret_cast<char*>
|
||||
(&byteArrayBody(t, methodSpec(t, vmMethod), returnTypeSpec)),
|
||||
byteArrayLength(t, methodSpec(t, vmMethod)) - 1 - returnTypeSpec);
|
||||
(t, vmMethod->class_()->loader(), reinterpret_cast<char*>
|
||||
(&vmMethod->spec()->body()[returnTypeSpec]),
|
||||
vmMethod->spec()->length() - 1 - returnTypeSpec);
|
||||
PROTECT(t, returnType);
|
||||
|
||||
object exceptionTypes = resolveExceptionJTypes
|
||||
(t, classLoader(t, methodClass(t, vmMethod)),
|
||||
methodAddendum(t, vmMethod));
|
||||
(t, vmMethod->class_()->loader(),
|
||||
vmMethod->addendum());
|
||||
PROTECT(t, exceptionTypes);
|
||||
|
||||
object signature;
|
||||
object annotationTable;
|
||||
object parameterAnnotationTable;
|
||||
object annotationDefault;
|
||||
object addendum = methodAddendum(t, vmMethod);
|
||||
object addendum = reinterpret_cast<object>(vmMethod->addendum());
|
||||
if (addendum) {
|
||||
signature = addendumSignature(t, addendum);
|
||||
if (signature) {
|
||||
@ -2278,16 +2277,16 @@ makeJmethod(Thread* t, object vmMethod, int index)
|
||||
PROTECT(t, annotationDefault);
|
||||
|
||||
if (annotationTable or parameterAnnotationTable or annotationDefault) {
|
||||
object runtimeData = getClassRuntimeData(t, cast<GcClass>(t, methodClass(t, vmMethod)));
|
||||
object runtimeData = getClassRuntimeData(t, vmMethod->class_());
|
||||
|
||||
set(t, runtimeData, ClassRuntimeDataPool,
|
||||
addendumPool(t, methodAddendum(t, vmMethod)));
|
||||
reinterpret_cast<object>(vmMethod->addendum()->pool()));
|
||||
}
|
||||
|
||||
if (index == -1) {
|
||||
object table = classMethodTable(t, methodClass(t, vmMethod));
|
||||
object table = vmMethod->class_()->methodTable();
|
||||
for (unsigned i = 0; i < arrayLength(t, table); ++i) {
|
||||
if (vmMethod == arrayBody(t, table, i)) {
|
||||
if (reinterpret_cast<object>(vmMethod) == arrayBody(t, table, i)) {
|
||||
index = i;
|
||||
break;
|
||||
}
|
||||
@ -2296,35 +2295,35 @@ makeJmethod(Thread* t, object vmMethod, int index)
|
||||
|
||||
expect(t, index != -1);
|
||||
|
||||
GcJclass* jclass = getJClass(t, cast<GcClass>(t, methodClass(t, vmMethod)));
|
||||
GcJclass* jclass = getJClass(t, vmMethod->class_());
|
||||
|
||||
return reinterpret_cast<object>(makeJmethod
|
||||
(t, true, 0, jclass, index, cast<GcString>(t, name), returnType, parameterTypes,
|
||||
exceptionTypes, methodFlags(t, vmMethod), cast<GcString>(t, signature), 0, cast<GcByteArray>(t, annotationTable),
|
||||
exceptionTypes, vmMethod->flags(), cast<GcString>(t, signature), 0, cast<GcByteArray>(t, annotationTable),
|
||||
cast<GcByteArray>(t, parameterAnnotationTable), cast<GcByteArray>(t, annotationDefault), 0, 0, 0));
|
||||
}
|
||||
|
||||
object
|
||||
makeJconstructor(Thread* t, object vmMethod, int index)
|
||||
makeJconstructor(Thread* t, GcMethod* vmMethod, int index)
|
||||
{
|
||||
PROTECT(t, vmMethod);
|
||||
|
||||
unsigned parameterCount;
|
||||
unsigned returnTypeSpec;
|
||||
object parameterTypes = resolveParameterJTypes
|
||||
(t, classLoader(t, methodClass(t, vmMethod)), methodSpec(t, vmMethod),
|
||||
(t, vmMethod->class_()->loader(), vmMethod->spec(),
|
||||
¶meterCount, &returnTypeSpec);
|
||||
PROTECT(t, parameterTypes);
|
||||
|
||||
object exceptionTypes = resolveExceptionJTypes
|
||||
(t, classLoader(t, methodClass(t, vmMethod)),
|
||||
methodAddendum(t, vmMethod));
|
||||
(t, vmMethod->class_()->loader(),
|
||||
vmMethod->addendum());
|
||||
PROTECT(t, exceptionTypes);
|
||||
|
||||
object signature;
|
||||
object annotationTable;
|
||||
object parameterAnnotationTable;
|
||||
object addendum = methodAddendum(t, vmMethod);
|
||||
object addendum = reinterpret_cast<object>(vmMethod->addendum());
|
||||
if (addendum) {
|
||||
signature = addendumSignature(t, addendum);
|
||||
if (signature) {
|
||||
@ -2348,16 +2347,16 @@ makeJconstructor(Thread* t, object vmMethod, int index)
|
||||
PROTECT(t, parameterAnnotationTable);
|
||||
|
||||
if (annotationTable or parameterAnnotationTable) {
|
||||
object runtimeData = getClassRuntimeData(t, cast<GcClass>(t, methodClass(t, vmMethod)));
|
||||
object runtimeData = getClassRuntimeData(t, vmMethod->class_());
|
||||
|
||||
set(t, runtimeData, ClassRuntimeDataPool,
|
||||
addendumPool(t, methodAddendum(t, vmMethod)));
|
||||
reinterpret_cast<object>(vmMethod->addendum()->pool()));
|
||||
}
|
||||
|
||||
if (index == -1) {
|
||||
object table = classMethodTable(t, methodClass(t, vmMethod));
|
||||
object table = vmMethod->class_()->methodTable();
|
||||
for (unsigned i = 0; i < arrayLength(t, table); ++i) {
|
||||
if (vmMethod == arrayBody(t, table, i)) {
|
||||
if (reinterpret_cast<object>(vmMethod) == arrayBody(t, table, i)) {
|
||||
index = i;
|
||||
break;
|
||||
}
|
||||
@ -2366,12 +2365,24 @@ makeJconstructor(Thread* t, object vmMethod, int index)
|
||||
|
||||
expect(t, index != -1);
|
||||
|
||||
GcJclass* jclass = getJClass(t, cast<GcClass>(t, methodClass(t, vmMethod)));
|
||||
GcJclass* jclass = getJClass(t, vmMethod->class_());
|
||||
|
||||
return reinterpret_cast<object>(makeJconstructor
|
||||
(t, true, 0, jclass, index, parameterTypes, exceptionTypes, methodFlags
|
||||
(t, vmMethod), cast<GcString>(t, signature), 0, cast<GcByteArray>(t, annotationTable), cast<GcByteArray>(t, parameterAnnotationTable),
|
||||
0, 0, 0));
|
||||
return reinterpret_cast<object>(
|
||||
makeJconstructor(t,
|
||||
true,
|
||||
0,
|
||||
jclass,
|
||||
index,
|
||||
parameterTypes,
|
||||
exceptionTypes,
|
||||
vmMethod->flags(),
|
||||
cast<GcString>(t, signature),
|
||||
0,
|
||||
cast<GcByteArray>(t, annotationTable),
|
||||
cast<GcByteArray>(t, parameterAnnotationTable),
|
||||
0,
|
||||
0,
|
||||
0));
|
||||
}
|
||||
|
||||
object
|
||||
@ -2386,7 +2397,7 @@ makeJfield(Thread* t, object vmField, int index)
|
||||
PROTECT(t, name);
|
||||
|
||||
GcClass* type = resolveClassBySpec
|
||||
(t, classLoader(t, fieldClass(t, vmField)),
|
||||
(t, cast<GcClassLoader>(t, classLoader(t, fieldClass(t, vmField))),
|
||||
reinterpret_cast<char*>
|
||||
(&byteArrayBody(t, fieldSpec(t, vmField), 0)),
|
||||
byteArrayLength(t, fieldSpec(t, vmField)) - 1);
|
||||
@ -2531,7 +2542,7 @@ Avian_sun_misc_Perf_createLong
|
||||
return reinterpret_cast<int64_t>
|
||||
(t->m->processor->invoke
|
||||
(t, resolveMethod
|
||||
(t, root(t, Machine::BootLoader), "java/nio/ByteBuffer", "allocate",
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/nio/ByteBuffer", "allocate",
|
||||
"(I)Ljava/nio/ByteBuffer;"), 0, 8));
|
||||
}
|
||||
|
||||
@ -2550,7 +2561,7 @@ Avian_sun_misc_Unsafe_defineClass__Ljava_lang_String_2_3BIILjava_lang_ClassLoade
|
||||
object data = reinterpret_cast<object>(arguments[2]);
|
||||
int32_t offset = arguments[3];
|
||||
int32_t length = arguments[4];
|
||||
object loader = reinterpret_cast<object>(arguments[5]);
|
||||
GcClassLoader* loader = cast<GcClassLoader>(t, reinterpret_cast<object>(arguments[5]));
|
||||
//object domain = reinterpret_cast<object>(arguments[6]);
|
||||
|
||||
uint8_t* buffer = static_cast<uint8_t*>(t->m->heap->allocate(length));
|
||||
@ -2941,7 +2952,7 @@ jvmInitProperties(Thread* t, uintptr_t* arguments)
|
||||
jobject properties = reinterpret_cast<jobject>(arguments[0]);
|
||||
|
||||
GcMethod* method = resolveMethod
|
||||
(t, root(t, Machine::BootLoader), "java/util/Properties", "setProperty",
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/util/Properties", "setProperty",
|
||||
"(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;");
|
||||
|
||||
PROTECT(t, method);
|
||||
@ -3009,7 +3020,7 @@ jvmInitProperties(Thread* t, uintptr_t* arguments)
|
||||
local::setProperty
|
||||
(t, method, *properties, "sun.boot.class.path",
|
||||
static_cast<Finder*>
|
||||
(systemClassLoaderFinder(t, root(t, Machine::BootLoader)))->path());
|
||||
(cast<GcSystemClassLoader>(t, root(t, Machine::BootLoader))->finder())->path());
|
||||
|
||||
local::setProperty(t, method, *properties, "file.encoding", "UTF-8");
|
||||
#ifdef ARCH_x86_32
|
||||
@ -3412,7 +3423,7 @@ jvmDumpThreads(Thread* t, uintptr_t* arguments)
|
||||
|
||||
unsigned threadsLength = objectArrayLength(t, *threads);
|
||||
GcClass* arrayClass = resolveObjectArrayClass
|
||||
(t, reinterpret_cast<object>(type(t, GcStackTraceElement::Type)->loader()),
|
||||
(t, type(t, GcStackTraceElement::Type)->loader(),
|
||||
reinterpret_cast<object>(type(t, GcStackTraceElement::Type)));
|
||||
object result = makeObjectArray(t, arrayClass, threadsLength);
|
||||
PROTECT(t, result);
|
||||
@ -3542,7 +3553,7 @@ jvmGetSystemPackages(Thread* t, uintptr_t*)
|
||||
makeObjectArray(
|
||||
t,
|
||||
resolveClass(
|
||||
t, root(t, Machine::BootLoader), "java/lang/Package"),
|
||||
t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/lang/Package"),
|
||||
0)));
|
||||
}
|
||||
|
||||
@ -3572,9 +3583,9 @@ EXPORT(JVM_LatestUserDefinedLoader)(Thread* t)
|
||||
{ }
|
||||
|
||||
virtual bool visit(Processor::StackWalker* walker) {
|
||||
object loader = reinterpret_cast<object>(walker->method()->class_()->loader());
|
||||
GcClassLoader* loader = walker->method()->class_()->loader();
|
||||
if (loader
|
||||
and loader != root(t, Machine::BootLoader)
|
||||
and loader != cast<GcClassLoader>(t, root(t, Machine::BootLoader))
|
||||
and strcmp
|
||||
(objectClass(t, loader)->name()->body().begin(),
|
||||
reinterpret_cast<const int8_t*>
|
||||
@ -3588,12 +3599,12 @@ EXPORT(JVM_LatestUserDefinedLoader)(Thread* t)
|
||||
}
|
||||
|
||||
Thread* t;
|
||||
object loader;
|
||||
GcClassLoader* loader;
|
||||
} v(t);
|
||||
|
||||
t->m->processor->walkStack(t, &v);
|
||||
|
||||
return makeLocalReference(t, v.loader);
|
||||
return makeLocalReference(t, reinterpret_cast<object>(v.loader));
|
||||
}
|
||||
|
||||
extern "C" AVIAN_EXPORT jclass JNICALL
|
||||
@ -3853,7 +3864,7 @@ jvmResolveClass(Thread* t, uintptr_t* arguments)
|
||||
jclass c = reinterpret_cast<jclass>(arguments[0]);
|
||||
|
||||
GcMethod* method = resolveMethod
|
||||
(t, root(t, Machine::BootLoader), "avian/Classes", "link",
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "avian/Classes", "link",
|
||||
"(Lavian/VMClass;)V");
|
||||
|
||||
t->m->processor->invoke(t, method, 0, jclassVmClass(t, *c));
|
||||
@ -3878,7 +3889,7 @@ jvmFindClassFromClassLoader(Thread* t, uintptr_t* arguments)
|
||||
jboolean throwError = arguments[3];
|
||||
|
||||
GcClass* c = resolveClass
|
||||
(t, loader ? *loader : root(t, Machine::BootLoader), name, true,
|
||||
(t, cast<GcClassLoader>(t, loader ? *loader : root(t, Machine::BootLoader)), name, true,
|
||||
throwError ? static_cast<Gc::Type>(GcNoClassDefFoundError::Type)
|
||||
: static_cast<Gc::Type>(GcClassNotFoundException::Type));
|
||||
|
||||
@ -3893,7 +3904,7 @@ jvmFindClassFromClassLoader(Thread* t, uintptr_t* arguments)
|
||||
|
||||
extern "C" AVIAN_EXPORT jclass JNICALL
|
||||
EXPORT(JVM_FindClassFromClassLoader)(Thread* t, const char* name,
|
||||
jboolean init, jobject loader,
|
||||
jboolean init, jobject* loader,
|
||||
jboolean throwError)
|
||||
{
|
||||
uintptr_t arguments[] = { reinterpret_cast<uintptr_t>(name),
|
||||
@ -3928,14 +3939,14 @@ jvmFindLoadedClass(Thread* t, uintptr_t* arguments)
|
||||
replace('.', '/', s);
|
||||
}
|
||||
|
||||
GcClass* c = findLoadedClass(t, *loader, spec);
|
||||
GcClass* c = findLoadedClass(t, cast<GcClassLoader>(t, *loader), spec);
|
||||
|
||||
return reinterpret_cast<uint64_t>
|
||||
(c ? makeLocalReference(t, reinterpret_cast<object>(getJClass(t, c))) : 0);
|
||||
}
|
||||
|
||||
extern "C" AVIAN_EXPORT jclass JNICALL
|
||||
EXPORT(JVM_FindLoadedClass)(Thread* t, jobject loader, jstring name)
|
||||
EXPORT(JVM_FindLoadedClass)(Thread* t, jobject* loader, jstring name)
|
||||
{
|
||||
uintptr_t arguments[] = { reinterpret_cast<uintptr_t>(loader),
|
||||
reinterpret_cast<uintptr_t>(name) };
|
||||
@ -3952,11 +3963,11 @@ jvmDefineClass(Thread* t, uintptr_t* arguments)
|
||||
|
||||
return reinterpret_cast<uint64_t>
|
||||
(makeLocalReference
|
||||
(t, reinterpret_cast<object>(getJClass(t, cast<GcClass>(t, defineClass(t, *loader, data, length))))));
|
||||
(t, reinterpret_cast<object>(getJClass(t, cast<GcClass>(t, defineClass(t, cast<GcClassLoader>(t, *loader), data, length))))));
|
||||
}
|
||||
|
||||
extern "C" AVIAN_EXPORT jclass JNICALL
|
||||
EXPORT(JVM_DefineClass)(Thread* t, const char*, jobject loader,
|
||||
EXPORT(JVM_DefineClass)(Thread* t, const char*, jobject* loader,
|
||||
const uint8_t* data, jsize length, jobject)
|
||||
{
|
||||
uintptr_t arguments[] = { reinterpret_cast<uintptr_t>(loader),
|
||||
@ -3967,7 +3978,7 @@ EXPORT(JVM_DefineClass)(Thread* t, const char*, jobject loader,
|
||||
}
|
||||
|
||||
extern "C" AVIAN_EXPORT jclass JNICALL
|
||||
EXPORT(JVM_DefineClassWithSource)(Thread* t, const char*, jobject loader,
|
||||
EXPORT(JVM_DefineClassWithSource)(Thread* t, const char*, jobject* loader,
|
||||
const uint8_t* data, jsize length, jobject,
|
||||
const char*)
|
||||
{
|
||||
@ -3975,7 +3986,7 @@ EXPORT(JVM_DefineClassWithSource)(Thread* t, const char*, jobject loader,
|
||||
}
|
||||
|
||||
extern "C" AVIAN_EXPORT jclass JNICALL
|
||||
EXPORT(JVM_DefineClassWithSourceCond)(Thread* t, const char*, jobject loader,
|
||||
EXPORT(JVM_DefineClassWithSourceCond)(Thread* t, const char*, jobject* loader,
|
||||
const uint8_t* data, jsize length,
|
||||
jobject, const char*, jboolean)
|
||||
{
|
||||
@ -4032,9 +4043,9 @@ EXPORT(JVM_GetClassLoader)(Thread* t, jclass c)
|
||||
{
|
||||
ENTER(t, Thread::ActiveState);
|
||||
|
||||
object loader = classLoader(t, jclassVmClass(t, *c));
|
||||
GcClassLoader* loader = cast<GcClassLoader>(t, classLoader(t, jclassVmClass(t, *c)));
|
||||
|
||||
if (loader == root(t, Machine::BootLoader)) {
|
||||
if (loader == cast<GcClassLoader>(t, root(t, Machine::BootLoader))) {
|
||||
// sun.misc.Unsafe.getUnsafe expects a null result if the class
|
||||
// loader is the boot classloader and will throw a
|
||||
// SecurityException otherwise.
|
||||
@ -4049,7 +4060,7 @@ EXPORT(JVM_GetClassLoader)(Thread* t, jclass c)
|
||||
return makeLocalReference(t, root(t, Machine::BootLoader));
|
||||
}
|
||||
} else {
|
||||
return makeLocalReference(t, loader);
|
||||
return makeLocalReference(t, reinterpret_cast<object>(loader));
|
||||
}
|
||||
}
|
||||
|
||||
@ -4106,7 +4117,7 @@ jvmGetProtectionDomain(Thread* t, uintptr_t* arguments)
|
||||
jclass c = reinterpret_cast<jclass>(arguments[0]);
|
||||
|
||||
GcMethod* method = resolveMethod
|
||||
(t, root(t, Machine::BootLoader), "avian/Classes", "getProtectionDomain",
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "avian/Classes", "getProtectionDomain",
|
||||
"(Lavian/VMClass;)Ljava/security/ProtectionDomain;");
|
||||
|
||||
return reinterpret_cast<uint64_t>
|
||||
@ -4273,11 +4284,11 @@ jvmGetClassDeclaredMethods(Thread* t, uintptr_t* arguments)
|
||||
for (unsigned i = 0, j = classDeclaredMethodCount(t, jclassVmClass(t, *c));
|
||||
i < j; ++i)
|
||||
{
|
||||
object vmMethod = arrayBody(t, table, i);
|
||||
GcMethod* vmMethod = cast<GcMethod>(t, arrayBody(t, table, i));
|
||||
PROTECT(t, vmMethod);
|
||||
|
||||
if (((not publicOnly) or (methodFlags(t, vmMethod) & ACC_PUBLIC))
|
||||
and byteArrayBody(t, methodName(t, vmMethod), 0) != '<')
|
||||
if (((not publicOnly) or (vmMethod->flags() & ACC_PUBLIC))
|
||||
and vmMethod->name()->body()[0] != '<')
|
||||
{
|
||||
object method = makeJmethod(t, vmMethod, i);
|
||||
|
||||
@ -4369,12 +4380,12 @@ jvmGetClassDeclaredConstructors(Thread* t, uintptr_t* arguments)
|
||||
for (unsigned i = 0, j = classDeclaredMethodCount(t, jclassVmClass(t, *c));
|
||||
i < j; ++i)
|
||||
{
|
||||
object vmMethod = arrayBody(t, table, i);
|
||||
GcMethod* vmMethod = cast<GcMethod>(t, arrayBody(t, table, i));
|
||||
PROTECT(t, vmMethod);
|
||||
|
||||
if (((not publicOnly) or (methodFlags(t, vmMethod) & ACC_PUBLIC))
|
||||
if (((not publicOnly) or (vmMethod->flags() & ACC_PUBLIC))
|
||||
and strcmp(reinterpret_cast<char*>
|
||||
(&byteArrayBody(t, methodName(t, vmMethod), 0)),
|
||||
(vmMethod->name()->body().begin()),
|
||||
"<init>") == 0)
|
||||
{
|
||||
object method = makeJconstructor(t, vmMethod, i);
|
||||
@ -4621,7 +4632,7 @@ maybeWrap(Thread* t, bool wrapException)
|
||||
PROTECT(t, exception);
|
||||
|
||||
GcClass* paeClass = resolveClass
|
||||
(t, root(t, Machine::BootLoader),
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)),
|
||||
"java/security/PrivilegedActionException");
|
||||
PROTECT(t, paeClass);
|
||||
|
||||
@ -4648,7 +4659,7 @@ jvmDoPrivileged(Thread* t, uintptr_t* arguments)
|
||||
// object:
|
||||
|
||||
GcClass* privilegedAction = resolveClass
|
||||
(t, root(t, Machine::BootLoader), "java/security/PrivilegedAction");
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/security/PrivilegedAction");
|
||||
|
||||
GcMethod* method;
|
||||
if (instanceOf(t, privilegedAction, *action)) {
|
||||
@ -4656,7 +4667,7 @@ jvmDoPrivileged(Thread* t, uintptr_t* arguments)
|
||||
(t, privilegedAction, "run", "()Ljava/lang/Object;");
|
||||
} else {
|
||||
GcClass* privilegedExceptionAction = resolveClass
|
||||
(t, root(t, Machine::BootLoader),
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)),
|
||||
"java/security/PrivilegedExceptionAction");
|
||||
|
||||
method = resolveMethod
|
||||
@ -5186,7 +5197,7 @@ getMemoryManagers(Thread* t, uintptr_t*)
|
||||
t,
|
||||
makeObjectArray(t,
|
||||
resolveClass(t,
|
||||
root(t, Machine::BootLoader),
|
||||
cast<GcClassLoader>(t, root(t, Machine::BootLoader)),
|
||||
"java/lang/management/MemoryManagerMXBean"),
|
||||
0)));
|
||||
}
|
||||
@ -5204,7 +5215,7 @@ getMemoryPools(Thread* t, uintptr_t*)
|
||||
t,
|
||||
makeObjectArray(t,
|
||||
resolveClass(t,
|
||||
root(t, Machine::BootLoader),
|
||||
cast<GcClassLoader>(t, root(t, Machine::BootLoader)),
|
||||
"java/lang/management/MemoryPoolMXBean"),
|
||||
0)));
|
||||
}
|
||||
@ -5259,7 +5270,7 @@ getEnclosingMethodInfo(Thread* t, uintptr_t* arguments)
|
||||
PROTECT(t, array);
|
||||
|
||||
enclosingClass = reinterpret_cast<object>(getJClass
|
||||
(t, resolveClass(t, classLoader(t, class_), enclosingClass)));
|
||||
(t, resolveClass(t, cast<GcClassLoader>(t, classLoader(t, class_)), enclosingClass)));
|
||||
|
||||
set(t, array, ArrayBody, enclosingClass);
|
||||
|
||||
|
@ -336,7 +336,7 @@ resolveTarget(MyThread* t, void* stack, GcMethod* method)
|
||||
PROTECT(t, method);
|
||||
PROTECT(t, class_);
|
||||
|
||||
resolveSystemClass(t, root(t, Machine::BootLoader), reinterpret_cast<object>(class_->name()));
|
||||
resolveSystemClass(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), reinterpret_cast<object>(class_->name()));
|
||||
}
|
||||
|
||||
if (method->class_()->flags() & ACC_INTERFACE) {
|
||||
@ -352,7 +352,7 @@ resolveTarget(MyThread* t, GcClass* class_, unsigned index)
|
||||
if (class_->vmFlags() & BootstrapFlag) {
|
||||
PROTECT(t, class_);
|
||||
|
||||
resolveSystemClass(t, root(t, Machine::BootLoader), reinterpret_cast<object>(class_->name()));
|
||||
resolveSystemClass(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), reinterpret_cast<object>(class_->name()));
|
||||
}
|
||||
|
||||
return cast<GcMethod>(t, arrayBody(t, class_->virtualTable(), index));
|
||||
@ -2281,7 +2281,7 @@ resolveMethod(Thread* t, object pair)
|
||||
PROTECT(t, reference);
|
||||
|
||||
GcClass* class_ = resolveClassInObject
|
||||
(t, classLoader(t, methodClass(t, pairFirst(t, pair))), reference,
|
||||
(t, cast<GcMethod>(t, cast<GcPair>(t, pair)->first())->class_()->loader(), reference,
|
||||
ReferenceClass);
|
||||
|
||||
return cast<GcMethod>(t, findInHierarchy
|
||||
@ -2419,7 +2419,7 @@ getJClassFromReference(MyThread* t, object pair)
|
||||
return reinterpret_cast<intptr_t>(getJClass(
|
||||
t,
|
||||
resolveClass(t,
|
||||
classLoader(t, methodClass(t, pairFirst(t, pair))),
|
||||
cast<GcMethod>(t, cast<GcPair>(t, pair)->first())->class_()->loader(),
|
||||
referenceName(t, pairSecond(t, pair)))));
|
||||
}
|
||||
|
||||
@ -2512,7 +2512,7 @@ makeBlankObjectArrayFromReference(MyThread* t, object pair,
|
||||
return makeBlankObjectArray(
|
||||
t,
|
||||
resolveClass(t,
|
||||
classLoader(t, methodClass(t, pairFirst(t, pair))),
|
||||
cast<GcMethod>(t, cast<GcPair>(t, pair)->first())->class_()->loader(),
|
||||
referenceName(t, pairSecond(t, pair))),
|
||||
length);
|
||||
}
|
||||
@ -2651,7 +2651,7 @@ makeMultidimensionalArrayFromReference(MyThread* t, object pair,
|
||||
{
|
||||
return makeMultidimensionalArray
|
||||
(t, resolveClass
|
||||
(t, classLoader(t, methodClass(t, pairFirst(t, pair))),
|
||||
(t, cast<GcMethod>(t, cast<GcPair>(t, pair)->first())->class_()->loader(),
|
||||
referenceName(t, pairSecond(t, pair))), dimensions, offset);
|
||||
}
|
||||
|
||||
@ -2710,7 +2710,7 @@ checkCastFromReference(MyThread* t, object pair, object o)
|
||||
PROTECT(t, o);
|
||||
|
||||
GcClass* c = resolveClass
|
||||
(t, classLoader(t, methodClass(t, pairFirst(t, pair))),
|
||||
(t, cast<GcMethod>(t, cast<GcPair>(t, pair)->first())->class_()->loader(),
|
||||
referenceName(t, pairSecond(t, pair)));
|
||||
|
||||
checkCast(t, c, o);
|
||||
@ -2723,7 +2723,7 @@ resolveField(Thread* t, object pair)
|
||||
PROTECT(t, reference);
|
||||
|
||||
GcClass* class_ = resolveClassInObject
|
||||
(t, classLoader(t, methodClass(t, pairFirst(t, pair))), reference,
|
||||
(t, cast<GcMethod>(t, cast<GcPair>(t, pair)->first())->class_()->loader(), reference,
|
||||
ReferenceClass);
|
||||
|
||||
return findInHierarchy
|
||||
@ -2906,7 +2906,7 @@ instanceOfFromReference(Thread* t, object pair, object o)
|
||||
PROTECT(t, o);
|
||||
|
||||
GcClass* c = resolveClass
|
||||
(t, classLoader(t, methodClass(t, pairFirst(t, pair))),
|
||||
(t, cast<GcMethod>(t, cast<GcPair>(t, pair)->first())->class_()->loader(),
|
||||
referenceName(t, pairSecond(t, pair)));
|
||||
|
||||
return instanceOf64(t, c, o);
|
||||
@ -2936,7 +2936,7 @@ uint64_t
|
||||
makeNewFromReference(Thread* t, object pair)
|
||||
{
|
||||
GcClass* class_ = resolveClass
|
||||
(t, classLoader(t, methodClass(t, pairFirst(t, pair))),
|
||||
(t, cast<GcMethod>(t, cast<GcPair>(t, pair)->first())->class_()->loader(),
|
||||
referenceName(t, pairSecond(t, pair)));
|
||||
|
||||
PROTECT(t, class_);
|
||||
@ -7593,7 +7593,7 @@ returnClass(MyThread* t, GcMethod* method)
|
||||
memcpy(&byteArrayBody(t, name, 0), spec + 1, length - 2);
|
||||
}
|
||||
|
||||
return resolveClass(t, reinterpret_cast<object>(method->class_()->loader()), name);
|
||||
return resolveClass(t, method->class_()->loader(), name);
|
||||
}
|
||||
|
||||
bool
|
||||
@ -7717,7 +7717,7 @@ callContinuation(MyThread* t, object continuation, object result,
|
||||
PROTECT(t, nextContinuation);
|
||||
|
||||
GcMethod* method = resolveMethod
|
||||
(t, root(t, Machine::BootLoader), "avian/Continuations", "rewind",
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "avian/Continuations", "rewind",
|
||||
"(Ljava/lang/Runnable;Lavian/Callback;Ljava/lang/Object;"
|
||||
"Ljava/lang/Throwable;)V");
|
||||
|
||||
@ -7777,7 +7777,7 @@ callWithCurrentContinuation(MyThread* t, object receiver)
|
||||
|
||||
if (root(t, ReceiveMethod) == 0) {
|
||||
GcMethod* m = resolveMethod
|
||||
(t, root(t, Machine::BootLoader), "avian/Function", "call",
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "avian/Function", "call",
|
||||
"(Ljava/lang/Object;)Ljava/lang/Object;");
|
||||
|
||||
if (m) {
|
||||
@ -7787,7 +7787,7 @@ callWithCurrentContinuation(MyThread* t, object receiver)
|
||||
|
||||
if (classVmFlags(t, continuationClass) & BootstrapFlag) {
|
||||
resolveSystemClass
|
||||
(t, root(t, Machine::BootLoader),
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)),
|
||||
vm::className(t, continuationClass));
|
||||
}
|
||||
}
|
||||
@ -7817,7 +7817,7 @@ dynamicWind(MyThread* t, object before, object thunk, object after)
|
||||
|
||||
if (root(t, WindMethod) == 0) {
|
||||
GcMethod* method = resolveMethod
|
||||
(t, root(t, Machine::BootLoader), "avian/Continuations", "wind",
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "avian/Continuations", "wind",
|
||||
"(Ljava/lang/Runnable;Ljava/util/concurrent/Callable;"
|
||||
"Ljava/lang/Runnable;)Lavian/Continuations$UnwindResult;");
|
||||
|
||||
@ -8024,7 +8024,7 @@ invoke(Thread* thread, GcMethod* method, ArgumentList* arguments)
|
||||
|
||||
compile(t, local::codeAllocator(static_cast<MyThread*>(t)), 0,
|
||||
resolveMethod
|
||||
(t, root(t, Machine::AppLoader),
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::AppLoader)),
|
||||
"foo/ClassName",
|
||||
"methodName",
|
||||
"()V"));
|
||||
@ -8664,7 +8664,7 @@ class MyProcessor: public Processor {
|
||||
this_, methodSpec, false, arguments);
|
||||
|
||||
GcMethod* method = resolveMethod
|
||||
(t, reinterpret_cast<object>(loader), className, methodName, methodSpec);
|
||||
(t, loader, className, methodName, methodSpec);
|
||||
|
||||
assertT(t, ((method->flags() & ACC_STATIC) == 0) xor (this_ == 0));
|
||||
|
||||
|
@ -2665,7 +2665,7 @@ interpret3(Thread* t, const int base)
|
||||
GcClass* class_ = objectClass(t, peekObject(t, sp - parameterFootprint));
|
||||
assertT(t, class_->vmFlags() & BootstrapFlag);
|
||||
|
||||
resolveClass(t, reinterpret_cast<object>(frameMethod(t, frame)->class_()->loader()),
|
||||
resolveClass(t, frameMethod(t, frame)->class_()->loader(),
|
||||
reinterpret_cast<object>(class_->name()));
|
||||
|
||||
ip -= 3;
|
||||
@ -2891,7 +2891,7 @@ invoke(Thread* t, GcMethod* method)
|
||||
class_ = objectClass(t, peekObject(t, t->sp - parameterFootprint));
|
||||
|
||||
if (class_->vmFlags() & BootstrapFlag) {
|
||||
resolveClass(t, root(t, Machine::BootLoader), reinterpret_cast<object>(class_->name()));
|
||||
resolveClass(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), reinterpret_cast<object>(class_->name()));
|
||||
}
|
||||
|
||||
if (method->class_()->flags() & ACC_INTERFACE) {
|
||||
@ -3219,7 +3219,7 @@ class MyProcessor: public Processor {
|
||||
pushArguments(t, this_, methodSpec, false, arguments);
|
||||
|
||||
GcMethod* method = resolveMethod
|
||||
(t, reinterpret_cast<object>(loader), className, methodName, methodSpec);
|
||||
(t, loader, className, methodName, methodSpec);
|
||||
|
||||
assertT(t, ((method->flags() & ACC_STATIC) == 0) xor (this_ == 0));
|
||||
|
||||
|
@ -325,7 +325,7 @@ defineClass(Thread* t, uintptr_t* arguments)
|
||||
t,
|
||||
reinterpret_cast<object>(getJClass(t,
|
||||
cast<GcClass>(t, defineClass(t,
|
||||
loader ? *loader : root(t, Machine::BootLoader),
|
||||
cast<GcClassLoader>(t, loader ? *loader : root(t, Machine::BootLoader)),
|
||||
buffer,
|
||||
length))))));
|
||||
}
|
||||
@ -353,9 +353,8 @@ findClass(Thread* t, uintptr_t* arguments)
|
||||
|
||||
GcClass* c = resolveClass(
|
||||
t,
|
||||
caller ? reinterpret_cast
|
||||
<object>(t->m->classpath->libraryClassLoader(t, caller))
|
||||
: root(t, Machine::AppLoader),
|
||||
caller ? t->m->classpath->libraryClassLoader(t, caller) : cast
|
||||
<GcClassLoader>(t, root(t, Machine::AppLoader)),
|
||||
n);
|
||||
|
||||
if (t->m->classpath->mayInitClasses()) {
|
||||
@ -3564,7 +3563,7 @@ boot(Thread* t, uintptr_t*)
|
||||
PROTECT(t, host);
|
||||
|
||||
GcMethod* method = resolveMethod
|
||||
(t, root(t, Machine::BootLoader), "avian/Traces", "startTraceListener",
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "avian/Traces", "startTraceListener",
|
||||
"(Ljava/lang/String;I)V");
|
||||
|
||||
t->m->processor->invoke(t, method, 0, host, atoi(port));
|
||||
|
@ -1253,7 +1253,7 @@ parseInterfaceTable(Thread* t, Stream& s, GcClass* class_, GcSingleton* pool,
|
||||
PROTECT(t, name);
|
||||
|
||||
GcClass* interface = resolveClass
|
||||
(t, reinterpret_cast<object>(class_->loader()), name, true, throwType);
|
||||
(t, class_->loader(), name, true, throwType);
|
||||
|
||||
PROTECT(t, interface);
|
||||
|
||||
@ -2523,7 +2523,7 @@ updateBootstrapClass(Thread* t, GcClass* bootstrapClass, GcClass* class_)
|
||||
}
|
||||
|
||||
GcClass*
|
||||
makeArrayClass(Thread* t, object loader, unsigned dimensions, object spec,
|
||||
makeArrayClass(Thread* t, GcClassLoader* loader, unsigned dimensions, object spec,
|
||||
object elementClass)
|
||||
{
|
||||
if (type(t, GcJobject::Type)->vmFlags() & BootstrapFlag) {
|
||||
@ -2536,7 +2536,7 @@ makeArrayClass(Thread* t, object loader, unsigned dimensions, object spec,
|
||||
// avoid infinite recursion due to trying to create an array to
|
||||
// make a stack trace for a ClassNotFoundException.
|
||||
resolveSystemClass
|
||||
(t, root(t, Machine::BootLoader),
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)),
|
||||
reinterpret_cast<object>(type(t, GcJobject::Type)->name()), false);
|
||||
}
|
||||
|
||||
@ -2560,7 +2560,7 @@ makeArrayClass(Thread* t, object loader, unsigned dimensions, object spec,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
cast<GcClassLoader>(t, loader),
|
||||
loader,
|
||||
arrayLength(t, vtable));
|
||||
|
||||
PROTECT(t, c);
|
||||
@ -2571,27 +2571,27 @@ makeArrayClass(Thread* t, object loader, unsigned dimensions, object spec,
|
||||
}
|
||||
|
||||
void
|
||||
saveLoadedClass(Thread* t, object loader, GcClass* c)
|
||||
saveLoadedClass(Thread* t, GcClassLoader* loader, GcClass* c)
|
||||
{
|
||||
PROTECT(t, loader);
|
||||
PROTECT(t, c);
|
||||
|
||||
ACQUIRE(t, t->m->classLock);
|
||||
|
||||
if (classLoaderMap(t, loader) == 0) {
|
||||
if (loader->map() == 0) {
|
||||
GcHashMap* map = makeHashMap(t, 0, 0);
|
||||
set(t, loader, ClassLoaderMap, reinterpret_cast<object>(map));
|
||||
set(t, reinterpret_cast<object>(loader), ClassLoaderMap, reinterpret_cast<object>(map));
|
||||
}
|
||||
|
||||
hashMapInsert(t,
|
||||
cast<GcHashMap>(t, classLoaderMap(t, loader)),
|
||||
cast<GcHashMap>(t, loader->map()),
|
||||
reinterpret_cast<object>(c->name()),
|
||||
reinterpret_cast<object>(c),
|
||||
byteArrayHash);
|
||||
}
|
||||
|
||||
GcClass*
|
||||
makeArrayClass(Thread* t, object loader, object spec, bool throw_,
|
||||
makeArrayClass(Thread* t, GcClassLoader* loader, object spec, bool throw_,
|
||||
Gc::Type throwType)
|
||||
{
|
||||
PROTECT(t, loader);
|
||||
@ -2649,23 +2649,23 @@ makeArrayClass(Thread* t, object loader, object spec, bool throw_,
|
||||
|
||||
ACQUIRE(t, t->m->classLock);
|
||||
|
||||
GcClass* class_ = findLoadedClass(t, reinterpret_cast<object>(elementClass->loader()), spec);
|
||||
GcClass* class_ = findLoadedClass(t, elementClass->loader(), spec);
|
||||
if (class_) {
|
||||
return class_;
|
||||
}
|
||||
|
||||
class_ = makeArrayClass
|
||||
(t, reinterpret_cast<object>(elementClass->loader()), dimensions, spec, reinterpret_cast<object>(elementClass));
|
||||
(t, elementClass->loader(), dimensions, spec, reinterpret_cast<object>(elementClass));
|
||||
|
||||
PROTECT(t, class_);
|
||||
|
||||
saveLoadedClass(t, reinterpret_cast<object>(elementClass->loader()), class_);
|
||||
saveLoadedClass(t, elementClass->loader(), class_);
|
||||
|
||||
return class_;
|
||||
}
|
||||
|
||||
GcClass*
|
||||
resolveArrayClass(Thread* t, object loader, object spec, bool throw_,
|
||||
resolveArrayClass(Thread* t, GcClassLoader* loader, object spec, bool throw_,
|
||||
Gc::Type throwType)
|
||||
{
|
||||
GcClass* c = cast<GcClass>(t,
|
||||
@ -2684,7 +2684,7 @@ resolveArrayClass(Thread* t, object loader, object spec, bool throw_,
|
||||
PROTECT(t, loader);
|
||||
PROTECT(t, spec);
|
||||
|
||||
c = findLoadedClass(t, root(t, Machine::BootLoader), spec);
|
||||
c = findLoadedClass(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), spec);
|
||||
|
||||
if (c) {
|
||||
return c;
|
||||
@ -2899,13 +2899,13 @@ boot(Thread* t)
|
||||
set(t, root(t, Machine::BootLoader), ClassLoaderMap, reinterpret_cast<object>(map));
|
||||
}
|
||||
|
||||
systemClassLoaderFinder(t, root(t, Machine::BootLoader)) = m->bootFinder;
|
||||
cast<GcSystemClassLoader>(t, root(t, Machine::BootLoader))->finder() = m->bootFinder;
|
||||
|
||||
{ GcHashMap* map = makeHashMap(t, 0, 0);
|
||||
set(t, root(t, Machine::AppLoader), ClassLoaderMap, reinterpret_cast<object>(map));
|
||||
}
|
||||
|
||||
systemClassLoaderFinder(t, root(t, Machine::AppLoader)) = m->appFinder;
|
||||
cast<GcSystemClassLoader>(t, root(t, Machine::AppLoader))->finder() = m->appFinder;
|
||||
|
||||
set(t, root(t, Machine::AppLoader), ClassLoaderParent,
|
||||
root(t, Machine::BootLoader));
|
||||
@ -4081,7 +4081,7 @@ resolveBootstrap(Thread* t, uintptr_t* arguments)
|
||||
{
|
||||
object name = reinterpret_cast<object>(arguments[0]);
|
||||
|
||||
resolveSystemClass(t, root(t, Machine::BootLoader), name);
|
||||
resolveSystemClass(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), name);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@ -4238,7 +4238,7 @@ primitiveSize(Thread* t, unsigned code)
|
||||
}
|
||||
|
||||
GcClass*
|
||||
parseClass(Thread* t, object loader, const uint8_t* data, unsigned size,
|
||||
parseClass(Thread* t, GcClassLoader* loader, const uint8_t* data, unsigned size,
|
||||
Gc::Type throwType)
|
||||
{
|
||||
PROTECT(t, loader);
|
||||
@ -4289,7 +4289,7 @@ parseClass(Thread* t, object loader, const uint8_t* data, unsigned size,
|
||||
0, // methods
|
||||
0, // addendum
|
||||
0, // static table
|
||||
cast<GcClassLoader>(t, loader),
|
||||
loader,
|
||||
0, // source
|
||||
0);// vtable length
|
||||
PROTECT(t, class_);
|
||||
@ -4369,7 +4369,7 @@ parseClass(Thread* t, object loader, const uint8_t* data, unsigned size,
|
||||
uint64_t
|
||||
runParseClass(Thread* t, uintptr_t* arguments)
|
||||
{
|
||||
object loader = reinterpret_cast<object>(arguments[0]);
|
||||
GcClassLoader* loader = cast<GcClassLoader>(t, reinterpret_cast<object>(arguments[0]));
|
||||
System::Region* region = reinterpret_cast<System::Region*>(arguments[1]);
|
||||
Gc::Type throwType = static_cast<Gc::Type>(arguments[2]);
|
||||
|
||||
@ -4378,7 +4378,7 @@ runParseClass(Thread* t, uintptr_t* arguments)
|
||||
}
|
||||
|
||||
GcClass*
|
||||
resolveSystemClass(Thread* t, object loader, object spec, bool throw_,
|
||||
resolveSystemClass(Thread* t, GcClassLoader* loader, object spec, bool throw_,
|
||||
Gc::Type throwType)
|
||||
{
|
||||
PROTECT(t, loader);
|
||||
@ -4387,14 +4387,14 @@ resolveSystemClass(Thread* t, object loader, object spec, bool throw_,
|
||||
ACQUIRE(t, t->m->classLock);
|
||||
|
||||
GcClass* class_ = cast<GcClass>(t, hashMapFind
|
||||
(t, cast<GcHashMap>(t, classLoaderMap(t, loader)), spec, byteArrayHash, byteArrayEqual));
|
||||
(t, cast<GcHashMap>(t, loader->map()), spec, byteArrayHash, byteArrayEqual));
|
||||
|
||||
if (class_ == 0) {
|
||||
PROTECT(t, class_);
|
||||
|
||||
if (classLoaderParent(t, loader)) {
|
||||
if (loader->parent()) {
|
||||
class_ = resolveSystemClass
|
||||
(t, classLoaderParent(t, loader), spec, false);
|
||||
(t, loader->parent(), spec, false);
|
||||
if (class_) {
|
||||
return class_;
|
||||
}
|
||||
@ -4412,7 +4412,7 @@ resolveSystemClass(Thread* t, object loader, object spec, bool throw_,
|
||||
7);
|
||||
|
||||
System::Region* region = static_cast<Finder*>
|
||||
(systemClassLoaderFinder(t, loader))->find
|
||||
(loader->as<GcSystemClassLoader>(t)->finder())->find
|
||||
(RUNTIME_ARRAY_BODY(file));
|
||||
|
||||
if (region) {
|
||||
@ -4449,7 +4449,7 @@ resolveSystemClass(Thread* t, object loader, object spec, bool throw_,
|
||||
}
|
||||
|
||||
{ const char* source = static_cast<Finder*>
|
||||
(systemClassLoaderFinder(t, loader))->sourceUrl
|
||||
(loader->as<GcSystemClassLoader>(t)->finder())->sourceUrl
|
||||
(RUNTIME_ARRAY_BODY(file));
|
||||
|
||||
if (source) {
|
||||
@ -4476,7 +4476,7 @@ resolveSystemClass(Thread* t, object loader, object spec, bool throw_,
|
||||
}
|
||||
|
||||
if (class_) {
|
||||
hashMapInsert(t, cast<GcHashMap>(t, classLoaderMap(t, loader)), spec, reinterpret_cast<object>(class_), byteArrayHash);
|
||||
hashMapInsert(t, cast<GcHashMap>(t, loader->map()), spec, reinterpret_cast<object>(class_), byteArrayHash);
|
||||
|
||||
updatePackageMap(t, class_);
|
||||
} else if (throw_) {
|
||||
@ -4488,19 +4488,19 @@ resolveSystemClass(Thread* t, object loader, object spec, bool throw_,
|
||||
}
|
||||
|
||||
GcClass*
|
||||
findLoadedClass(Thread* t, object loader, object spec)
|
||||
findLoadedClass(Thread* t, GcClassLoader* loader, object spec)
|
||||
{
|
||||
PROTECT(t, loader);
|
||||
PROTECT(t, spec);
|
||||
|
||||
ACQUIRE(t, t->m->classLock);
|
||||
|
||||
return classLoaderMap(t, loader) ? cast<GcClass>(t, hashMapFind
|
||||
(t, cast<GcHashMap>(t, classLoaderMap(t, loader)), spec, byteArrayHash, byteArrayEqual)) : 0;
|
||||
return loader->map() ? cast<GcClass>(t, hashMapFind
|
||||
(t, cast<GcHashMap>(t, loader->map()), spec, byteArrayHash, byteArrayEqual)) : 0;
|
||||
}
|
||||
|
||||
GcClass*
|
||||
resolveClass(Thread* t, object loader, object spec, bool throw_,
|
||||
resolveClass(Thread* t, GcClassLoader* loader, object spec, bool throw_,
|
||||
Gc::Type throwType)
|
||||
{
|
||||
if (objectClass(t, loader) == type(t, GcSystemClassLoader::Type)) {
|
||||
@ -4519,7 +4519,7 @@ resolveClass(Thread* t, object loader, object spec, bool throw_,
|
||||
} else {
|
||||
if (root(t, Machine::LoadClassMethod) == 0) {
|
||||
GcMethod* m = resolveMethod
|
||||
(t, root(t, Machine::BootLoader), "java/lang/ClassLoader",
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), "java/lang/ClassLoader",
|
||||
"loadClass", "(Ljava/lang/String;)Ljava/lang/Class;");
|
||||
|
||||
if (m) {
|
||||
@ -4529,7 +4529,7 @@ resolveClass(Thread* t, object loader, object spec, bool throw_,
|
||||
|
||||
if (classLoaderClass->vmFlags() & BootstrapFlag) {
|
||||
resolveSystemClass
|
||||
(t, root(t, Machine::BootLoader),
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)),
|
||||
reinterpret_cast<object>(classLoaderClass->name()));
|
||||
}
|
||||
}
|
||||
@ -4740,7 +4740,7 @@ initClass(Thread* t, GcClass* c)
|
||||
}
|
||||
|
||||
GcClass*
|
||||
resolveObjectArrayClass(Thread* t, object loader, object elementClass)
|
||||
resolveObjectArrayClass(Thread* t, GcClassLoader* loader, object elementClass)
|
||||
{
|
||||
PROTECT(t, loader);
|
||||
PROTECT(t, elementClass);
|
||||
@ -4785,7 +4785,7 @@ object
|
||||
makeObjectArray(Thread* t, GcClass* elementClass, unsigned count)
|
||||
{
|
||||
GcClass* arrayClass = resolveObjectArrayClass
|
||||
(t, reinterpret_cast<object>(elementClass->loader()), reinterpret_cast<object>(elementClass));
|
||||
(t, elementClass->loader(), reinterpret_cast<object>(elementClass));
|
||||
|
||||
PROTECT(t, arrayClass);
|
||||
|
||||
@ -5315,7 +5315,7 @@ getCaller(Thread* t, unsigned target, bool skipMethodInvoke)
|
||||
}
|
||||
|
||||
object
|
||||
defineClass(Thread* t, object loader, const uint8_t* buffer, unsigned length)
|
||||
defineClass(Thread* t, GcClassLoader* loader, const uint8_t* buffer, unsigned length)
|
||||
{
|
||||
PROTECT(t, loader);
|
||||
|
||||
@ -5362,7 +5362,7 @@ populateMultiArray(Thread* t, object array, int32_t* counts,
|
||||
byteArrayLength(t, spec) - 1);
|
||||
|
||||
GcClass* class_ = resolveClass
|
||||
(t, reinterpret_cast<object>(objectClass(t, array)->loader()), elementSpec);
|
||||
(t, objectClass(t, array)->loader(), elementSpec);
|
||||
PROTECT(t, class_);
|
||||
|
||||
for (int32_t i = 0; i < counts[index]; ++i) {
|
||||
|
@ -311,7 +311,7 @@ makeCodeImage(Thread* t, Zone* zone, BootImage* image, uint8_t* code,
|
||||
} resolver(&typeMaps);
|
||||
|
||||
Finder* finder = static_cast<Finder*>
|
||||
(systemClassLoaderFinder(t, root(t, Machine::BootLoader)));
|
||||
(cast<GcSystemClassLoader>(t, root(t, Machine::BootLoader))->finder());
|
||||
|
||||
for (Finder::Iterator it(finder); it.hasMore();) {
|
||||
unsigned nameSize = 0;
|
||||
@ -322,7 +322,7 @@ makeCodeImage(Thread* t, Zone* zone, BootImage* image, uint8_t* code,
|
||||
{
|
||||
// fprintf(stderr, "pass 1 %.*s\n", nameSize - 6, name);
|
||||
object c = reinterpret_cast<object>(resolveSystemClass
|
||||
(t, root(t, Machine::BootLoader),
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)),
|
||||
makeByteArray(t, "%.*s", nameSize - 6, name), true));
|
||||
|
||||
PROTECT(t, c);
|
||||
@ -607,7 +607,7 @@ makeCodeImage(Thread* t, Zone* zone, BootImage* image, uint8_t* code,
|
||||
{
|
||||
// fprintf(stderr, "pass 2 %.*s\n", nameSize - 6, name);
|
||||
object c = reinterpret_cast<object>(resolveSystemClass
|
||||
(t, root(t, Machine::BootLoader),
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)),
|
||||
makeByteArray(t, "%.*s", nameSize - 6, name), true));
|
||||
|
||||
PROTECT(t, c);
|
||||
@ -655,7 +655,7 @@ makeCodeImage(Thread* t, Zone* zone, BootImage* image, uint8_t* code,
|
||||
|
||||
if (objectClass(t, o) == type(t, GcReference::Type)) {
|
||||
o = reinterpret_cast<object>(resolveClass
|
||||
(t, root(t, Machine::BootLoader), referenceName(t, o)));
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), referenceName(t, o)));
|
||||
|
||||
set(t, reinterpret_cast<object>(addendum->pool()),
|
||||
SingletonBody + (index * BytesPerWord), o);
|
||||
@ -704,7 +704,7 @@ visitRoots(Thread* t, BootImage* image, HeapWalker* w, object constants)
|
||||
{
|
||||
Machine* m = t->m;
|
||||
|
||||
for (HashMapIterator it(t, cast<GcHashMap>(t, classLoaderMap(t, root(t, Machine::BootLoader))));
|
||||
for (HashMapIterator it(t, cast<GcHashMap>(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader))->map()));
|
||||
it.hasMore();)
|
||||
{
|
||||
w->visitRoot(it.next()->second());
|
||||
@ -1523,28 +1523,28 @@ writeBootImage2(Thread* t, OutputStream* bootimageOutput, OutputStream* codeOutp
|
||||
// resolve primitive array classes in case they are needed at
|
||||
// runtime:
|
||||
{ object name = reinterpret_cast<object>(makeByteArray(t, "[B"));
|
||||
resolveSystemClass(t, root(t, Machine::BootLoader), name, true);
|
||||
resolveSystemClass(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), name, true);
|
||||
|
||||
name = reinterpret_cast<object>(makeByteArray(t, "[Z"));
|
||||
resolveSystemClass(t, root(t, Machine::BootLoader), name, true);
|
||||
resolveSystemClass(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), name, true);
|
||||
|
||||
name = reinterpret_cast<object>(makeByteArray(t, "[S"));
|
||||
resolveSystemClass(t, root(t, Machine::BootLoader), name, true);
|
||||
resolveSystemClass(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), name, true);
|
||||
|
||||
name = reinterpret_cast<object>(makeByteArray(t, "[C"));
|
||||
resolveSystemClass(t, root(t, Machine::BootLoader), name, true);
|
||||
resolveSystemClass(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), name, true);
|
||||
|
||||
name = reinterpret_cast<object>(makeByteArray(t, "[I"));
|
||||
resolveSystemClass(t, root(t, Machine::BootLoader), name, true);
|
||||
resolveSystemClass(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), name, true);
|
||||
|
||||
name = reinterpret_cast<object>(makeByteArray(t, "[J"));
|
||||
resolveSystemClass(t, root(t, Machine::BootLoader), name, true);
|
||||
resolveSystemClass(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), name, true);
|
||||
|
||||
name = reinterpret_cast<object>(makeByteArray(t, "[F"));
|
||||
resolveSystemClass(t, root(t, Machine::BootLoader), name, true);
|
||||
resolveSystemClass(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), name, true);
|
||||
|
||||
name = reinterpret_cast<object>(makeByteArray(t, "[D"));
|
||||
resolveSystemClass(t, root(t, Machine::BootLoader), name, true);
|
||||
resolveSystemClass(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader)), name, true);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1561,14 +1561,14 @@ writeBootImage2(Thread* t, OutputStream* bootimageOutput, OutputStream* codeOutp
|
||||
updateConstants(t, constants, heapWalker->map());
|
||||
|
||||
image->bootClassCount = hashMapSize
|
||||
(t, classLoaderMap(t, root(t, Machine::BootLoader)));
|
||||
(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader))->map());
|
||||
|
||||
unsigned* bootClassTable = static_cast<unsigned*>
|
||||
(t->m->heap->allocate(image->bootClassCount * sizeof(unsigned)));
|
||||
|
||||
{ unsigned i = 0;
|
||||
for (HashMapIterator it
|
||||
(t, cast<GcHashMap>(t, classLoaderMap(t, root(t, Machine::BootLoader))));
|
||||
(t, cast<GcHashMap>(t, cast<GcClassLoader>(t, root(t, Machine::BootLoader))->map()));
|
||||
it.hasMore();)
|
||||
{
|
||||
bootClassTable[i++] = targetVW
|
||||
|
Loading…
Reference in New Issue
Block a user