index ddaf45f77cfe6e9e66b535adef6e1413ee5144fa..2889ae3c718437b3220ae308ba0e446a9fec55bc 100644 (file)
jvm_generate_load(gen_proc_t * p, gen_var_t * src)
{
char prefix = src -> type -> prefix;
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;
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);
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:
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;
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;
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:
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:
break;
case JVM_STORAGE_FRAME:
case JVM_STORAGE_FRAME_PARAM:
case JVM_STORAGE_REGISTER:
case JVM_STORAGE_PARAM:
case JVM_STORAGE_PARAM_VAR:
case JVM_STORAGE_REGISTER:
case JVM_STORAGE_PARAM:
case JVM_STORAGE_PARAM_VAR:
- jvm_generate(p, 0, 0, ".var %i is %s %s from start to end", reg, name, desc);
+ case JVM_STORAGE_FRAME:
+ case JVM_STORAGE_FRAME_VAR:
+ case JVM_STORAGE_FRAME_PARAM:
+ case JVM_STORAGE_FRAME_PARAM_VAR:
+ jvm_generate(p, 0, 0, ".var %i is '%s' %s from start to end", reg, name, desc);
break;
case JVM_STORAGE_REGISTER_VAR:
break;
case JVM_STORAGE_REGISTER_VAR:
- jvm_generate(p, 0, 0, ".var %i is %s [%s from start to end", reg, name, desc);
+ jvm_generate(p, 0, 0, ".var %i is '%s' [%s from start to end", reg, name, desc);
break;
case JVM_STORAGE_PARAM_VARPTR:
break;
case JVM_STORAGE_PARAM_VARPTR:
- jvm_generate(p, 0, 0, ".var %i is %s [%s from start to end", reg, name, desc);
- jvm_generate(p, 0, 0, ".var %i is %s$offset I from start to end", reg + 1, name);
+ case JVM_STORAGE_FRAME_PARAM_VARPTR:
+ jvm_generate(p, 0, 0, ".var %i is '%s' [%s from start to end", reg, name, desc);
+ jvm_generate(p, 0, 0, ".var %i is '%s$offset' I from start to end", reg + 1, name);
break;
case JVM_STORAGE_STATIC:
break;
case JVM_STORAGE_STATIC:
- fprintf(v -> class -> fp, ".field public static %s %s\n\n", name, desc);
+ fprintf(v -> class -> fp, ".field public static '%s' %s\n\n", name, desc);
break;
case JVM_STORAGE_STATIC_VAR:
break;
case JVM_STORAGE_STATIC_VAR:
- fprintf(v -> class -> fp, ".field public static %s [%s\n\n", name, desc);
+ fprintf(v -> class -> fp, ".field public static '%s' [%s\n\n", name, desc);
break;
case JVM_STORAGE_FIELD:
break;
case JVM_STORAGE_FIELD:
- fprintf(v -> class -> fp, ".field public %s %s\n\n", name, desc);
+ fprintf(v -> class -> fp, ".field public '%s' %s\n\n", name, desc);
break;
case JVM_STORAGE_FIELD_VAR:
break;
case JVM_STORAGE_FIELD_VAR:
- fprintf(v -> class -> fp, ".field public %s [%s\n\n", name, desc);
- break;
- case JVM_STORAGE_FRAME:
- case JVM_STORAGE_FRAME_VAR:
- case JVM_STORAGE_FRAME_PARAM:
- case JVM_STORAGE_FRAME_PARAM_VAR:
- case JVM_STORAGE_FRAME_PARAM_VARPTR:
- /* См. ниже jvm_generate_frame_class() */
+ fprintf(v -> class -> fp, ".field public '%s' [%s\n\n", name, desc);
break;
default:
gen_error("jvm_generate_var: invalid storage %i", storage);
break;
default:
gen_error("jvm_generate_var: invalid storage %i", storage);
int old_reg = v -> reg;
int cell_size = v -> type -> cell_size;
char prefix = v -> type -> prefix;
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;
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, 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
}
void
}
}
}
}
+/*
static void
jvm_generate_abstract_frame_class()
{
static void
jvm_generate_abstract_frame_class()
{
jvm_destroy_class(class);
}
jvm_destroy_class(class);
}
+*/
static struct gen_class *
jvm_generate_frame_class(oberon_object_t * proc)
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);
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;
fp = class -> fp;
class -> full_name = cname;
|| v -> storage == JVM_STORAGE_FRAME_PARAM)
{
fprintf(fp, "; LEVEL %i\n", v -> level);
|| v -> storage == JVM_STORAGE_FRAME_PARAM)
{
fprintf(fp, "; LEVEL %i\n", v -> level);
- fprintf(fp, ".field public %s %s\n\n", v -> name, v -> type -> desc);
+ fprintf(fp, ".field public '%s' %s\n\n", v -> name, v -> type -> desc);
}
else if(v -> storage == JVM_STORAGE_FRAME_VAR
|| v -> storage == JVM_STORAGE_FRAME_PARAM_VAR)
{
fprintf(fp, "; LEVEL %i\n", v -> level);
}
else if(v -> storage == JVM_STORAGE_FRAME_VAR
|| v -> storage == JVM_STORAGE_FRAME_PARAM_VAR)
{
fprintf(fp, "; LEVEL %i\n", v -> level);
- fprintf(fp, ".field public %s [%s\n\n", v -> name, v -> type -> desc);
+ fprintf(fp, ".field public '%s' [%s\n\n", v -> name, v -> type -> desc);
}
else if(v -> storage == JVM_STORAGE_FRAME_PARAM_VARPTR)
{
fprintf(fp, "; LEVEL %i\n", v -> level);
}
else if(v -> storage == JVM_STORAGE_FRAME_PARAM_VARPTR)
{
fprintf(fp, "; LEVEL %i\n", v -> level);
- fprintf(fp, ".field public %s [%s\n", v -> name, v -> type -> desc);
- fprintf(fp, ".field public %s$offset I\n\n", v -> name);
+ fprintf(fp, ".field public '%s' [%s\n", v -> name, v -> type -> desc);
+ fprintf(fp, ".field public '%s$offset' I\n\n", v -> name);
}
}
var = var -> next;
}
}
var = var -> next;
p = proc -> gen_proc;
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);
class = jvm_generate_frame_class(proc);
t = GC_MALLOC(sizeof *t);
v = jvm_create_function_var(p, JVM_STORAGE_REGISTER, "$FP$", t);
p -> frame_v = v;
v = jvm_create_function_var(p, JVM_STORAGE_REGISTER, "$FP$", t);
p -> frame_v = v;
- printf("jvm_generate_procedure_frame: %p level %i\n", p -> reg_frame, p -> level);
p -> reg_frame[p -> level] = v -> reg;
}
p -> reg_frame[p -> level] = v -> reg;
}
prc = prc -> parent;
}
prc = prc -> parent;
}
+ size_t sz = sizeof(*p -> reg_frame) * max_frames;
p -> max_frames = max_frames;
p -> max_frames = max_frames;
- p -> reg_frame = GC_MALLOC(sizeof *p -> reg_frame);
- memset(p -> reg_frame, 0, max_frames * sizeof *p -> reg_frame);
+ p -> reg_frame = GC_MALLOC(sz);
+ memset(p -> reg_frame, 0, sz);
p -> level = max_frames - 1;
jvm_create_staticlinks_recursive(p, proc -> parent, p -> level);
p -> level = max_frames - 1;
jvm_create_staticlinks_recursive(p, proc -> parent, p -> level);