DEADSOFTWARE

Исправлено действие конструкции WITH
[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 int level;
61 int max_frames;
62 int * reg_frame;
63 gen_var_t * frame_v;
64 };
66 struct gen_type_t
67 {
68 int rec_id;
69 struct gen_class * class;
71 bool wide;
72 char prefix;
73 char postfix;
74 char * full_name;
75 char * desc;
76 int cell_size;
77 };
79 struct gen_var_t
80 {
81 enum gen_storage storage;
82 gen_type_t * type;
83 int reg;
84 int level;
86 bool typecheck;
87 gen_type_t * forcetype;
89 char * name;
90 char * full_name;
91 gen_proc_t * p;
92 struct gen_class * class;
93 };
95 struct gen_context_t
96 {
97 gen_module_t * current_m;
98 const char * dir;
99 };
101 struct gen_module_t
103 struct gen_class * class;
104 int rec_id;
105 };
107 struct gen_label_t
109 int id;
110 };