X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fbackends%2Fjvm%2Fgenerator-jvm.h;h=00c3e50757a2d58a1628dc49110182193c11b899;hb=8b545fd0349be12160b9f50c1f4b6f072eac436f;hp=d5abe38fe3fa39a99a0ce38bdd363ea7d3f91bae;hpb=f89bbec89e4dd5c7cd15954f0c02370fb9127518;p=dsw-obn.git diff --git a/src/backends/jvm/generator-jvm.h b/src/backends/jvm/generator-jvm.h index d5abe38..00c3e50 100644 --- a/src/backends/jvm/generator-jvm.h +++ b/src/backends/jvm/generator-jvm.h @@ -19,35 +19,72 @@ struct gen_stack struct gen_class { + char * full_name; FILE * fp; gen_proc_t * p; + struct gen_class * base; }; - +enum gen_storage +{ + JVM_STORAGE_UNKNOWN, + /* Обыкновенные Java-переменные */ + JVM_STORAGE_REGISTER, + JVM_STORAGE_STATIC, + JVM_STORAGE_FIELD, + JVM_STORAGE_PARAM, + /* Переменные на которые можно делать указатели без кеширования */ + JVM_STORAGE_REGISTER_VAR, + JVM_STORAGE_STATIC_VAR, + JVM_STORAGE_FIELD_VAR, + JVM_STORAGE_PARAM_VAR, + JVM_STORAGE_PARAM_VARPTR, + /* Локальные переменные доступные локальным функциям */ + JVM_STORAGE_FRAME, + JVM_STORAGE_FRAME_VAR, + JVM_STORAGE_FRAME_PARAM, + JVM_STORAGE_FRAME_PARAM_VAR, + JVM_STORAGE_FRAME_PARAM_VARPTR +}; struct gen_proc_t { + char * full_name; int label_id; struct gen_register_file * rf; struct gen_stack * stack; struct gen_class * class; + + int level; + int max_frames; + int * reg_frame; + gen_var_t * frame_v; }; struct gen_type_t { int rec_id; struct gen_class * class; + + bool wide; + char prefix; + char postfix; + char * desc; + int cell_size; }; struct gen_var_t { + enum gen_storage storage; + gen_type_t * type; int reg; -}; - -struct gen_block_t -{ + int level; + char * name; + char * full_name; + gen_proc_t * p; + struct gen_class * class; }; struct gen_context_t @@ -60,3 +97,8 @@ struct gen_module_t struct gen_class * class; int rec_id; }; + +struct gen_label_t +{ + int id; +};