X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fbackends%2Fjvm%2Fgenerator-jvm-abi.c;h=48b3951ac5ea30d296263ee7f14338ee23561b9a;hb=8db9b6a5f0d565ae2994cefeb081712ce917f67f;hp=2889ae3c718437b3220ae308ba0e446a9fec55bc;hpb=023ef0d8349acdfe751bba1b50749361682f72ff;p=dsw-obn.git diff --git a/src/backends/jvm/generator-jvm-abi.c b/src/backends/jvm/generator-jvm-abi.c index 2889ae3..48b3951 100644 --- a/src/backends/jvm/generator-jvm-abi.c +++ b/src/backends/jvm/generator-jvm-abi.c @@ -8,7 +8,6 @@ #include -#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