Adapted to tv/irmode changes
[libfirm] / firmjni / Dbginfo.c
1 /**
2  * @file firmjni/Dbginfo.cc
3  *
4  *
5  *
6  * @author   Goetz Lindenmaier
7  * CVS-ID:   $Id$
8  * Copyright (c) 2003 University of Karlsruhe
9  * Created:  26.2.2003
10  * Project:  Recoder frontend for libfirm
11  *
12  *
13  */
14 #include "Dbginfo.h"
15
16 #include <firm.h>
17 #include "dbginfo.h"
18 #include <stdio.h>
19
20 static jmethodID pair_id;
21 static jmethodID sets_id;
22 static JNIEnv   *my_env_jni_;
23 static jclass    my_cls_jni_;
24
25 static void
26 my_dbg_info_merge_pair(ir_node *nw, ir_node *old, dbg_action info) {
27   if (pair_id) {
28     (*my_env_jni_)->CallStaticVoidMethod(my_env_jni_, my_cls_jni_, pair_id, nw, old, info);
29   }
30 }
31
32 static void
33 my_dbg_info_merge_sets(ir_node **new_nodes, int n_new_nodes,
34                     ir_node **old_nodes, int n_old_nodes,
35                     dbg_action info) {
36   if (sets_id) {
37     /* Convert argument arrays to java arrays. */
38     jintArray j_new_nodes = (*my_env_jni_)->NewIntArray(my_env_jni_, n_new_nodes);
39     jintArray j_old_nodes = (*my_env_jni_)->NewIntArray(my_env_jni_, n_old_nodes);
40     if (j_new_nodes)
41       (*my_env_jni_)->SetIntArrayRegion(my_env_jni_, j_new_nodes, 0, n_new_nodes, (jint *)new_nodes);
42     if (j_old_nodes)
43       (*my_env_jni_)->SetIntArrayRegion(my_env_jni_, j_old_nodes, 0, n_old_nodes, (jint *)old_nodes);
44
45     (*my_env_jni_)->CallStaticVoidMethod(my_env_jni_, my_cls_jni_, sets_id, j_new_nodes, j_old_nodes, info);
46   }
47 }
48
49
50 void Java_firmjni_Dbginfo_dbgInit (JNIEnv *env_jni_, jclass cls_jni_) {
51   pair_id = (*env_jni_)->GetStaticMethodID(env_jni_, cls_jni_, "myJavaDbgInfoMergePair", "(III)V");
52   sets_id = (*env_jni_)->GetStaticMethodID(env_jni_, cls_jni_, "myJavaDbgInfoMergeSets", "([I[II)V");
53   my_env_jni_ = env_jni_;
54   my_cls_jni_ = cls_jni_;
55
56   dbg_init(&my_dbg_info_merge_pair, &my_dbg_info_merge_sets);
57 }