DEADSOFTWARE

JVM: Добавлены фреймы (без передачи их локальным функциям)
[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 };
28 enum gen_storage
29 {
30 JVM_STORAGE_UNKNOWN,
31 /* Обыкновенные Java-переменные */
32 JVM_STORAGE_REGISTER,
33 JVM_STORAGE_STATIC,
34 JVM_STORAGE_FIELD,
35 JVM_STORAGE_PARAM,
36 /* Переменные на которые можно делать указатели без кеширования */
37 JVM_STORAGE_REGISTER_VAR,
38 JVM_STORAGE_STATIC_VAR,
39 JVM_STORAGE_FIELD_VAR,
40 JVM_STORAGE_PARAM_VAR,
41 JVM_STORAGE_PARAM_VARPTR,
42 /* Локальные переменные доступные локальным функциям */
43 JVM_STORAGE_FRAME,
44 JVM_STORAGE_FRAME_VAR,
45 JVM_STORAGE_FRAME_PARAM,
46 JVM_STORAGE_FRAME_PARAM_VAR,
47 JVM_STORAGE_FRAME_PARAM_VARPTR
48 };
51 struct gen_proc_t
52 {
53 char * full_name;
54 int label_id;
55 gen_var_t * frame_v;
56 gen_type_t * frame_t;
57 struct gen_register_file * rf;
58 struct gen_stack * stack;
59 struct gen_class * class;
60 };
62 struct gen_type_t
63 {
64 int rec_id;
65 struct gen_class * class;
67 bool wide;
68 char prefix;
69 char postfix;
70 char * desc;
71 int cell_size;
72 };
74 struct gen_var_t
75 {
76 enum gen_storage storage;
77 gen_type_t * type;
78 int reg;
80 char * name;
81 char * full_name;
82 gen_proc_t * p;
83 struct gen_class * class;
84 };
86 struct gen_context_t
87 {
88 gen_module_t * current_m;
89 };
91 struct gen_module_t
92 {
93 struct gen_class * class;
94 int rec_id;
95 };
97 struct gen_label_t
98 {
99 int id;
100 };