X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fbackends%2Fjvm%2Fgenerator-jvm.h;h=44f89324f4c4495a063db9119e0bd1e73e6e1e07;hb=0c29ba1953327a9b476a825d8b9b9d185d544972;hp=3095a49070d204df2acb0fb2fa7a89ddfc9abc2a;hpb=51a1ab2543ec5c221d4a3a9ab89968ae7dd39981;p=dsw-obn.git diff --git a/src/backends/jvm/generator-jvm.h b/src/backends/jvm/generator-jvm.h index 3095a49..44f8932 100644 --- a/src/backends/jvm/generator-jvm.h +++ b/src/backends/jvm/generator-jvm.h @@ -23,42 +23,81 @@ struct gen_class FILE * fp; gen_proc_t * p; struct gen_class * base; + const char * dir; }; enum gen_storage { JVM_STORAGE_UNKNOWN, + /* Обыкновенные Java-переменные */ JVM_STORAGE_REGISTER, JVM_STORAGE_STATIC, - JVM_STORAGE_FIELD + 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; + + char ret_prefix; + + 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 * full_name; + char * desc; + int cell_size; }; struct gen_var_t { enum gen_storage storage; + gen_type_t * type; int reg; + int level; + + bool typecheck; + gen_type_t * forcetype; + + char * name; char * full_name; - char * desc; + gen_proc_t * p; + struct gen_class * class; }; struct gen_context_t { gen_module_t * current_m; + const char * dir; }; struct gen_module_t