Mercurial > hg > truffle
view test/runtime/6929067/invoke.c @ 5762:b30cced39597
generalized functionality for finding classes based on searching for patterns in source code and moved it from commands.py to mx.py
used above functionality to find classes manually excluded from JaCoCo processing
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Wed, 04 Jul 2012 21:56:48 +0200 |
parents | 3b3d12e645e7 |
children |
line wrap: on
line source
#include <assert.h> #include <jni.h> #include <alloca.h> #include <pthread.h> union env_union { void *void_env; JNIEnv *jni_env; }; union env_union tmp; JNIEnv* env; JavaVM* jvm; JavaVMInitArgs vm_args; JavaVMOption options[1]; jclass class_id; jmethodID method_id; jint result; long product(unsigned long n, unsigned long m) { if (m == 1) { return n; } else { int *p = alloca(sizeof (int)); *p = n; return product (n, m-1) + *p; } } void * floobydust (void *p) { (*jvm)->AttachCurrentThread(jvm, &tmp.void_env, NULL); env = tmp.jni_env; class_id = (*env)->FindClass (env, "T"); assert (class_id); method_id = (*env)->GetStaticMethodID (env, class_id, "printIt", "()V"); assert (method_id); (*env)->CallStaticVoidMethod (env, class_id, method_id, NULL); (*jvm)->DetachCurrentThread(jvm); printf("%ld\n", product(5000,5000)); (*jvm)->AttachCurrentThread(jvm, &tmp.void_env, NULL); env = tmp.jni_env; class_id = (*env)->FindClass (env, "T"); assert (class_id); method_id = (*env)->GetStaticMethodID (env, class_id, "printIt", "()V"); assert (method_id); (*env)->CallStaticVoidMethod (env, class_id, method_id, NULL); (*jvm)->DetachCurrentThread(jvm); printf("%ld\n", product(5000,5000)); return NULL; } int main (int argc, const char** argv) { options[0].optionString = "-Xss320k"; vm_args.version = JNI_VERSION_1_2; vm_args.ignoreUnrecognized = JNI_TRUE; vm_args.options = options; vm_args.nOptions = 1; result = JNI_CreateJavaVM (&jvm, &tmp.void_env, &vm_args); assert (result >= 0); env = tmp.jni_env; floobydust (NULL); pthread_t thr; pthread_create (&thr, NULL, floobydust, NULL); pthread_join (thr, NULL); return 0; }