index a750b927fb170a568a27f0f5bc29fe1ab6bdf038..8d966cbe4877ac404487fbd308d8bc2d5a359deb 100644 (file)
#include "generator-jvm-asm.h"
#include "generator-jvm-basic.h"
-/*
- * --- Каждый модуль является объектом.
- * Импортируемые модули представляются полями.
- * Каждая глобальная переменная представляется не статическим полем.
- * Каждая процедура представляется не статическим метеодом.
- * Процедура инициализации модуля имеет название BEGIN.
- * Процедура финализации модуля имеет название END.
- * Это позволит сделать динамическую загрузку и выгрузку.
- * +++ всем переменным и полям в дескриптор добавляется "["
- * Это позволит делать ссылки на переменные в VAR-параметрах.
- * --- Каждая процедура снабжается параметром-фреймом.
- * Это позволит реализовать локальные процедуры и средства рефлекции над стеком.
- */
-
void
jvm_generate_ldst_prepare(gen_proc_t * p, gen_var_t * v)
{
jvm_generate_load(gen_proc_t * p, gen_var_t * src)
{
char prefix = src -> type -> prefix;
+ char postfix = src -> type -> postfix;
int cell_size = src -> type -> cell_size;
char * full_name = src -> full_name;
char * desc = src -> type -> desc;
case JVM_STORAGE_FRAME_PARAM_VAR:
case JVM_STORAGE_FRAME_PARAM_VARPTR:
jvm_generate_ldst_prepare(p, src);
- jvm_generate(p, 1 + 1, cell_size, "%caload", prefix);
+ jvm_generate(p, 1 + 1, cell_size, "%caload", postfix);
break;
case JVM_STORAGE_FRAME:
case JVM_STORAGE_FRAME_PARAM:
jvm_generate_store(gen_proc_t * p, gen_var_t * dst)
{
char prefix = dst -> type -> prefix;
+ char postfix = dst -> type -> postfix;
int cell_size = dst -> type -> cell_size;
char * full_name = dst -> full_name;
char * desc = dst -> type -> desc;
case JVM_STORAGE_FRAME_VAR:
case JVM_STORAGE_FRAME_PARAM_VAR:
case JVM_STORAGE_FRAME_PARAM_VARPTR:
- jvm_generate(p, 1 + 1 + cell_size, 0, "%castore", prefix);
+ jvm_generate(p, 1 + 1 + cell_size, 0, "%castore", postfix);
break;
case JVM_STORAGE_FRAME:
case JVM_STORAGE_FRAME_PARAM:
int old_reg = v -> reg;
int cell_size = v -> type -> cell_size;
char prefix = v -> type -> prefix;
+ char postfix = v -> type -> postfix;
char * name = v -> name;
char * desc = v -> type -> desc;
jvm_generate(p, 0, 1, "iconst_0");
jvm_generate(p, 0, cell_size, "%cload %i", prefix, old_reg);
- jvm_generate(p, 1 + 1 + cell_size, 0, "%castore", prefix);
+ jvm_generate(p, 1 + 1 + cell_size, 0, "%castore", postfix);
}
void
}
}
+/*
static void
jvm_generate_abstract_frame_class()
{
jvm_destroy_class(class);
}
+*/
static struct gen_class *
jvm_generate_frame_class(oberon_object_t * proc)
abscname = "SYSTEM$FRAME";
cname = jvm_get_field_full_name_safe(proc);
cname = new_string("%s$FRAME", cname);
- class = jvm_create_class(cname);
+ class = jvm_create_class(proc -> gen_proc -> class -> dir, cname);
fp = class -> fp;
class -> full_name = cname;
p = proc -> gen_proc;
- jvm_generate_abstract_frame_class();
+// jvm_generate_abstract_frame_class();
+
class = jvm_generate_frame_class(proc);
t = GC_MALLOC(sizeof *t);