DEADSOFTWARE

JVM: исправлен вызов локальных процедур вложенностью больше одного
[dsw-obn.git] / src / backends / jvm / generator-jvm-abi.c
index d1e87f16a964bbb76f69eefe6c550081abda82cb..353ce21e88af205130ec950698296c57b013323f 100644 (file)
@@ -256,12 +256,13 @@ jvm_generate_var(gen_var_t * v)
                case JVM_STORAGE_REGISTER:
                case JVM_STORAGE_PARAM:
                case JVM_STORAGE_PARAM_VAR:
-               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_FRAME:
+               case JVM_STORAGE_FRAME_VAR:
+                       break;
                case JVM_STORAGE_REGISTER_VAR:
                        jvm_generate(p, 0, 0, ".var %i is '%s' [%s from start to end", reg, name, desc);
                        break;
@@ -622,7 +623,7 @@ jvm_generate_staticlinks(oberon_object_t * proc)
 
        p = proc -> gen_proc;
 
-       jvm_generate_staticlinks_recursive(p, proc -> parent, p -> level);
+       jvm_generate_staticlinks_recursive(p, proc -> parent, p -> level - 1);
 }
 
 static void
@@ -654,10 +655,11 @@ jvm_create_static_links(oberon_object_t * proc)
        size_t sz = sizeof(*p -> reg_frame) * max_frames;
        p -> max_frames = max_frames;
        p -> reg_frame = GC_MALLOC(sz);
-       memset(p -> reg_frame, 0, sz);
+       memset(p -> reg_frame, 255, sz);
 
        p -> level = max_frames - 1;
-       jvm_create_staticlinks_recursive(p, proc -> parent, p -> level);
+
+       jvm_create_staticlinks_recursive(p, proc -> parent, p -> level - 1);
 }
 
 static void