2 * "The Road goes ever on and on, down from the door where it began."
5 #include "PerlInterpreter.h"
13 # define EXTERN_C extern "C"
15 # define EXTERN_C extern
19 static void xs_init (pTHX);
20 static PerlInterpreter *my_perl;
25 JNIEXPORT void JNICALL
26 Java_PerlInterpreter_init(JNIEnv *env, jobject obj, jstring js)
33 static char *argv[] = {"perl", "-e", "1", 0};
35 if (getenv("JPLDEBUG"))
36 jpldebug = atoi(getenv("JPLDEBUG"));
39 fprintf(stderr, "init\n");
41 if (!dlopen("libperl.so", RTLD_LAZY|RTLD_GLOBAL)) {
42 fprintf(stderr, "%s\n", dlerror());
50 my_perl = perl_alloc();
53 perl_construct( my_perl );
54 PL_perl_destruct_level = 0;
57 exitstatus = perl_parse( my_perl, xs_init, argc, argv, (char **) NULL );
60 Java_PerlInterpreter_eval(env, obj, js);
64 JNIEXPORT void JNICALL
65 Java_PerlInterpreter_eval(void *perl, JNIEnv *env, jobject obj, jstring js)
77 envsv = get_sv("JPL::_env_", 1);
78 sv_setiv(envsv, (IV)(void*)env);
79 objsv = get_sv("JPL::_obj_", 1);
80 sv_setiv(objsv, (IV)(void*)obj);
82 jb = (jbyte*)(*env)->GetStringUTFChars(env,js,0);
85 fprintf(stderr, "eval %s\n", (char*)jb);
87 eval_pv( (char*)jb, 0 );
92 (*env)->ExceptionDescribe(env);
93 (*env)->ExceptionClear(env);
95 newExcCls = (*env)->FindClass(env, "java/lang/RuntimeException");
97 (*env)->ThrowNew(env, newExcCls, SvPV(ERRSV,PL_na));
100 (*env)->ReleaseStringUTFChars(env,js,jb);
107 JNIEXPORT jint JNICALL
108 Java_PerlInterpreter_eval(void *perl, JNIEnv *env, jobject obj, jint ji)
112 op = (*op->op_ppaddr)(pTHX);
113 return (jint)(void*)op;
117 /* Register any extra external extensions */
119 /* Do not delete this line--writemain depends on it */
120 EXTERN_C void boot_DynaLoader (pTHX_ CV* cv);
121 EXTERN_C void boot_JNI (pTHX_ CV* cv);
126 char *file = __FILE__;
128 newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file);