- if optimize for size, use leave and do not align labels
[libfirm] / firmjni / auxilliary / Dbginfo.c
1 /*
2  * Project:     libFIRM / Recoder frontend for libFIRM
3  * File name:   firmjni/Dbginfo.c
4  * Purpose:     Testing callback.
5  * Author:      Goetz Lindenmaier
6  * Modified by:
7  * Created:     26.2.2003
8  * CVS-ID:      $Id$
9  * Copyright:   (c) 2003 Universität Karlsruhe
10  * Licence:     This file protected by GPL -  GNU GENERAL PUBLIC LICENSE.
11  */
12
13 #include "Dbginfo.h"   /* Generated. */
14
15 #include "firm.h"
16 #include "dbginfo.h"
17 #include <stdio.h>
18
19 static jmethodID pair_id;
20 static jmethodID sets_id;
21 static JNIEnv   *my_env_jni_;
22 static jclass    my_cls_jni_;
23
24 struct dbg_info
25 {
26   int idx;
27 };
28
29 static void
30 my_dbg_info_merge_pair(ir_node *nw, ir_node *old, dbg_action info) {
31   if (pair_id) {
32     (*my_env_jni_)->CallStaticVoidMethod(my_env_jni_, my_cls_jni_, pair_id, nw, old, info);
33   }
34 }
35
36 static void
37 my_dbg_info_merge_sets(ir_node **new_nodes, int n_new_nodes,
38                     ir_node **old_nodes, int n_old_nodes,
39                     dbg_action info) {
40   if (sets_id) {
41     /* Convert argument arrays to java arrays. */
42     jintArray j_new_nodes = (*my_env_jni_)->NewIntArray(my_env_jni_, n_new_nodes);
43     jintArray j_old_nodes = (*my_env_jni_)->NewIntArray(my_env_jni_, n_old_nodes);
44     if (j_new_nodes)
45       (*my_env_jni_)->SetIntArrayRegion(my_env_jni_, j_new_nodes, 0, n_new_nodes, (jint *)new_nodes);
46     if (j_old_nodes)
47       (*my_env_jni_)->SetIntArrayRegion(my_env_jni_, j_old_nodes, 0, n_old_nodes, (jint *)old_nodes);
48
49     (*my_env_jni_)->CallStaticVoidMethod(my_env_jni_, my_cls_jni_, sets_id, j_new_nodes, j_old_nodes, info);
50   }
51 }
52
53
54 void Java_firmjni_Dbginfo_dbgInit (JNIEnv *env_jni_, jclass cls_jni_) {
55   pair_id = (*env_jni_)->GetStaticMethodID(env_jni_, cls_jni_, "myJavaDbgInfoMergePair", "(III)V");
56   sets_id = (*env_jni_)->GetStaticMethodID(env_jni_, cls_jni_, "myJavaDbgInfoMergeSets", "([I[II)V");
57   my_env_jni_ = env_jni_;
58   my_cls_jni_ = cls_jni_;
59
60   dbg_init(&my_dbg_info_merge_pair, &my_dbg_info_merge_sets, NULL);
61 }
62
63 /** Return the dbg object index of the given node. A new dbg object is created, if needed. */
64 jint Java_firmjni_Dbginfo_getDbgInfoIdx (JNIEnv *env, jclass clss, jint jnode)
65 {
66   /*
67   ir_node *node = (ir_node*) jnode;
68
69   dbg_info *info = get_irn_dbg_info (node);
70
71   if (0 == info) {
72         info = get_dbg_info ();
73         set_irn_dbg_info (node, info);
74   }
75
76   return (info->idx);
77   */
78
79   return (0);
80 }
81
82 /** Return the dbg object index of the given node, or <TT>-1</TT> if none has been set. */
83 jint Java_firmjni_Dbginfo_doGetDbgInfoIdx (JNIEnv *env, jclass clss, jint jnode)
84 {
85   /*
86   ir_node *node = (ir_node*) jnode;
87
88   dbg_info *info = get_irn_dbg_info (node);
89
90   if (0 == info) {
91         return (-1);
92   }
93
94   return (info->idx);
95   */
96
97   return (0);
98 }
99
100 /** return the name of a debug action. */
101 jstring Java_firmjni_Dbginfo_dbgActionToString (JNIEnv *env, jclass clss, jint a) {
102   return (*env)->NewStringUTF(env, dbg_action_2_str(a));
103 }