Object* _bcLdcString(Env* env, char* s) { ENTER; // TODO: The caller knows the length of the string in Java chars // TODO: Use rvmNewStringAscii if string only contains ASCII Object* o = rvmNewInternedStringUTF(env, s, -1); LEAVE(o); }
Object* _bcLdcString(Env* env, Object** ptr, char* s, jint length) { Object* o = *ptr; if (o) return o; ENTER; o = rvmNewInternedStringUTF(env, s, length); if (!rvmExceptionCheck(env)) { *ptr = o; rvmRegisterDisappearingLink(env, (void**) ptr, o); } LEAVE(o); }
Class* rvmFindClassUsingLoader(Env* env, const char* className, ClassLoader* classLoader) { if (!classLoader || classLoader->parent == NULL) { // This is the bootstrap classloader. No need to call ClassLoader.loadClass() return findBootClass(env, className); } char* binaryClassName = rvmToBinaryClassName(env, className); if (!binaryClassName) return NULL; Object* binaryClassNameString = rvmNewInternedStringUTF(env, binaryClassName, -1); if (!binaryClassNameString) return NULL; Method* loadClassMethod = rvmGetInstanceMethod(env, java_lang_ClassLoader, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;"); if (!loadClassMethod) return NULL; Object* clazz = rvmCallObjectInstanceMethod(env, (Object*) classLoader, loadClassMethod, binaryClassNameString); if (rvmExceptionOccurred(env)) return NULL; return (Class*) clazz; }