index bf3b07b52aee0c728cf194e2fbb521b635500557..681b4df71ddf6ea5f4c4c885016b2f1557002fea 100644 (file)
jvm_generate_var_initialization(p, copy_dst);
jvm_generate_var_initialization(p, copy_src);
+ if(rec -> base)
+ {
+ jvm_generate_load(p, copy_dst);
+ jvm_generate_load(p, copy_src);
+ jvm_generate_copy_record(p, rec -> base);
+ }
+
num = rec -> num_decl;
field = rec -> decl;
for(int i = 0; i < num; i++)
@@ -1197,11 +1204,22 @@ jvm_generate_expr_new_pointer(gen_proc_t * p, oberon_type_t * type, int num, obe
static void
jvm_generate_cast_prefix(gen_proc_t * p, char prefix, char postfix)
{
+ if((prefix == 'b' || prefix == 's') && (postfix = 'l' || postfix == 'd'))
+ {
+ prefix = 'i';
+ }
+
if(prefix == postfix)
{
return;
}
+ if((prefix == 'l' || prefix == 'd') && (postfix == 'b' || postfix == 's'))
+ {
+ jvm_generate(p, 2, 1, "%c2i", prefix);
+ prefix = 'i';
+ }
+
int from_cell_size = jvm_cell_size_for_postfix(prefix);
int to_cell_size = jvm_cell_size_for_postfix(postfix);
jvm_generate(p, from_cell_size, to_cell_size, "%c2%c", prefix, postfix);