DEADSOFTWARE

Исправлено приведение типа long -> char; Исправлено копирование полей базы расширяемо...
[dsw-obn.git] / src / backends / jvm / generator-jvm.c
index bf3b07b52aee0c728cf194e2fbb521b635500557..681b4df71ddf6ea5f4c4c885016b2f1557002fea 100644 (file)
@@ -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);