DEADSOFTWARE

Добавлены строки в отладочную информацию класса (быстрохак)
[dsw-obn.git] / src / backends / jvm / generator-jvm.h
1 #define MAX_REGISTERS 256
3 struct gen_register_file
4 {
5 struct
6 {
7 bool used;
8 bool wide;
9 } reg[MAX_REGISTERS];
10 int num_used;
11 int max_used;
12 };
14 struct gen_stack
15 {
16 int pointer;
17 int max_pointer;
18 };
20 struct gen_class
21 {
22 char * full_name;
23 FILE * fp;
24 gen_proc_t * p;
25 struct gen_class * base;
26 const char * dir;
27 };
29 enum gen_storage
30 {
31 JVM_STORAGE_UNKNOWN,
32 /* Обыкновенные Java-переменные */
33 JVM_STORAGE_REGISTER,
34 JVM_STORAGE_STATIC,
35 JVM_STORAGE_FIELD,
36 JVM_STORAGE_PARAM,
37 /* Переменные на которые можно делать указатели без кеширования */
38 JVM_STORAGE_REGISTER_VAR,
39 JVM_STORAGE_STATIC_VAR,
40 JVM_STORAGE_FIELD_VAR,
41 JVM_STORAGE_PARAM_VAR,
42 JVM_STORAGE_PARAM_VARPTR,
43 /* Локальные переменные доступные локальным функциям */
44 JVM_STORAGE_FRAME,
45 JVM_STORAGE_FRAME_VAR,
46 JVM_STORAGE_FRAME_PARAM,
47 JVM_STORAGE_FRAME_PARAM_VAR,
48 JVM_STORAGE_FRAME_PARAM_VARPTR
49 };
52 struct gen_proc_t
53 {
54 char * full_name;
55 int label_id;
56 struct gen_register_file * rf;
57 struct gen_stack * stack;
58 struct gen_class * class;
60 char ret_prefix;
62 int level;
63 int max_frames;
64 int * reg_frame;
65 gen_var_t * frame_v;
66 };
68 struct gen_type_t
69 {
70 int rec_id;
71 struct gen_class * class;
73 bool wide;
74 char prefix;
75 char postfix;
76 char * full_name;
77 char * desc;
78 int cell_size;
79 };
81 struct gen_var_t
82 {
83 enum gen_storage storage;
84 gen_type_t * type;
85 int reg;
86 int level;
88 bool typecheck;
89 gen_type_t * forcetype;
91 char * name;
92 char * full_name;
93 gen_proc_t * p;
94 struct gen_class * class;
95 };
97 struct gen_context_t
98 {
99 gen_module_t * current_m;
100 const char * dir;
101 };
103 struct gen_module_t
105 struct gen_class * class;
106 int rec_id;
107 int line;
108 };
110 struct gen_label_t
112 int id;
113 };