clean up native init

This commit is contained in:
Julian Dolby 2017-10-17 20:12:42 -04:00
parent b3fbbe0edb
commit b504165e64
4 changed files with 44 additions and 33 deletions

View File

@ -2,8 +2,35 @@
#include <stdlib.h>
#include <string.h>
void die(JNIEnv *java_env) {
jclass Object =
java_env->FindClass("java/lang/Object");
jclass NativeTranslatorTest =
java_env->FindClass("com/ibm/wala/cast/test/TestNativeTranslator");
jmethodID testInit =
java_env->GetMethodID(NativeTranslatorTest, "<init>", "()V");
jmethodID toString =
java_env->GetMethodID(Object, "toString", "()Ljava/lang/String;");
jthrowable real_ex = java_env->ExceptionOccurred();
jstring msg = (jstring) java_env->CallObjectMethod(real_ex, toString);
jboolean f = true;
const char *text = java_env->GetStringUTFChars(msg, &f);
printf("exception: %s\n", text);
java_env->ReleaseStringUTFChars(msg, text);
exit(-1);
}
int main(int argc, char **argv) {
char buf[ strlen(argv[1]) + 1 ];
char *buf = (char *)malloc((strlen(argv[1]) + 100) * sizeof(char));
strcpy(buf, argv[1]);
printf("%s\n", buf);
@ -12,40 +39,22 @@ int main(int argc, char **argv) {
jclass NativeTranslatorTest =
java_env->FindClass("com/ibm/wala/cast/test/TestNativeTranslator");
if (java_env->ExceptionCheck()) { die(java_env); }
jmethodID testInit =
java_env->GetMethodID(NativeTranslatorTest, "<init>", "()V");
if (java_env->ExceptionCheck()) { die(java_env); }
jobject test =
java_env->NewObject(NativeTranslatorTest, testInit);
if (java_env->ExceptionCheck()) { die(java_env); }
jmethodID testAst =
java_env->GetMethodID(NativeTranslatorTest, "testNativeCAst", "()V");
if (java_env->ExceptionCheck()) { die(java_env); }
java_env->CallVoidMethod(test, testAst);
if (java_env->ExceptionCheck()) {
jclass Object =
java_env->FindClass("java/lang/Object");
jmethodID testInit =
java_env->GetMethodID(NativeTranslatorTest, "<init>", "()V");
if (java_env->ExceptionCheck()) { die(java_env); }
jmethodID toString =
java_env->GetMethodID(Object, "toString", "()Ljava/lang/String;");
jthrowable real_ex = java_env->ExceptionOccurred();
jstring msg = (jstring) java_env->CallObjectMethod(real_ex, toString);
jboolean f = true;
const char *text = java_env->GetStringUTFChars(msg, &f);
printf("exception: %s\n", text);
java_env->ReleaseStringUTFChars(msg, text);
exit(-1);
} else {
exit(0);
}
exit(0);
}

View File

@ -105,6 +105,9 @@ private:
jmethodID codeSetLabelledGotoTarget;
jobject callReference;
static bool initialized;
static void initialize(JNIEnv *java_env);
public:
#define _INCLUDE_CONSTANTS

View File

@ -69,6 +69,11 @@ static const char *GlobalCls = XLATOR_PKG "AbstractGlobalEntity";
CAstWrapper::CAstWrapper(JNIEnv *env, Exceptions &ex, jobject xlator)
: java_ex(ex), env(env), xlator(xlator)
{
if (!initialized) {
initialized = true;
initialize(env);
}
this->CAstNode = env->FindClass( __CNN );
this->CAstInterface = env->FindClass( __CTN );
this->HashSet = env->FindClass("java/util/HashSet");

View File

@ -3,15 +3,10 @@
#include "CAstWrapper.h"
#include "Exceptions.h"
#include "com_ibm_wala_cast_ir_translator_NativeBridge.h"
extern "C" {
bool CAstWrapper::initialized = false;
JNIEXPORT void JNICALL
Java_com_ibm_wala_cast_ir_translator_NativeBridge_initialize(
JNIEnv *env,
jclass cls)
{
void CAstWrapper::initialize(JNIEnv *env) {
TRY(exp, env)
jclass CAstNode = env->FindClass( "com/ibm/wala/cast/tree/CAstNode" );
@ -38,4 +33,3 @@ Java_com_ibm_wala_cast_ir_translator_NativeBridge_initialize(
CATCH()
}
}