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 (void);
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());
49 perl_init_i18nl10n(1);
52 my_perl = perl_alloc();
55 perl_construct( my_perl );
56 PL_perl_destruct_level = 0;
59 exitstatus = perl_parse( my_perl, xs_init, argc, argv, (char **) NULL );
62 Java_PerlInterpreter_eval(env, obj, js);
66 JNIEXPORT void JNICALL
67 Java_PerlInterpreter_eval(JNIEnv *env, jobject obj, jstring js)
78 envsv = perl_get_sv("JPL::_env_", 1);
79 sv_setiv(envsv, (IV)(void*)env);
80 objsv = perl_get_sv("JPL::_obj_", 1);
81 sv_setiv(objsv, (IV)(void*)obj);
83 jb = (jbyte*)(*env)->GetStringUTFChars(env,js,0);
86 fprintf(stderr, "eval %s\n", (char*)jb);
88 perl_eval_pv( (char*)jb, 0 );
93 (*env)->ExceptionDescribe(env);
94 (*env)->ExceptionClear(env);
96 newExcCls = (*env)->FindClass(env, "java/lang/RuntimeException");
98 (*env)->ThrowNew(env, newExcCls, SvPV(ERRSV,PL_na));
101 (*env)->ReleaseStringUTFChars(env,js,jb);
108 JNIEXPORT jint JNICALL
109 Java_PerlInterpreter_eval(JNIEnv *env, jobject obj, jint ji)
112 op = (*op->op_ppaddr)();
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 (CV* cv);
121 EXTERN_C void boot_JNI (CV* cv);
126 char *file = __FILE__;
128 newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file);