X-Git-Url: https://deadsoftware.ru/gitweb?p=dsw-obn.git;a=blobdiff_plain;f=src%2Fbackends%2Fjvm%2Fgenerator-jvm.c;h=681b4df71ddf6ea5f4c4c885016b2f1557002fea;hp=bf3b07b52aee0c728cf194e2fbb521b635500557;hb=10288ed60f876a14746b17976fd9d84ed58042cc;hpb=57963798c338b0b73e032e9288003fd462f8b954 diff --git a/src/backends/jvm/generator-jvm.c b/src/backends/jvm/generator-jvm.c index bf3b07b..681b4df 100644 --- a/src/backends/jvm/generator-jvm.c +++ b/src/backends/jvm/generator-jvm.c @@ -583,6 +583,13 @@ oberon_generator_init_record(oberon_context_t * ctx, oberon_type_t * rec) 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);