DEADSOFTWARE

Исправлено действие конструкции WITH
[dsw-obn.git] / src / backends / jvm / generator-jvm-abi.c
index 2889ae3c718437b3220ae308ba0e446a9fec55bc..48b3951ac5ea30d296263ee7f14338ee23561b9a 100644 (file)
@@ -8,7 +8,6 @@
 
 #include <gc.h>
 
-#include "../../../include/oberon.h"
 #include "../../oberon-internals.h"
 #include "generator-jvm.h"
 #include "generator-jvm-abi.h"
@@ -106,6 +105,11 @@ jvm_generate_load(gen_proc_t * p, gen_var_t * src)
                        gen_error("jvm_generate_load: unknow storage type %i", src -> storage);
                        break;
        }
+
+       if(src -> typecheck)
+       {
+               jvm_generate(p, 1, 1, "checkcast %s", src -> forcetype -> full_name);
+       }
 }
 
 void
@@ -257,12 +261,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;
@@ -623,7 +628,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
@@ -655,10 +660,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