X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fbackends%2Fjvm%2Fgenerator-jvm.c;h=1ba25c9afe28ee69e957cb10b6c9572814f06176;hb=1233fb1d5d8f67a8f5e970386c1c4cbb6691ec04;hp=e897f6e98cb64913f5e58b9612ad8be3e7ef1c9c;hpb=9531d399c60190a8daf625dd99f9c141753bba5e;p=dsw-obn.git diff --git a/src/backends/jvm/generator-jvm.c b/src/backends/jvm/generator-jvm.c index e897f6e..1ba25c9 100644 --- a/src/backends/jvm/generator-jvm.c +++ b/src/backends/jvm/generator-jvm.c @@ -492,6 +492,7 @@ oberon_generator_init_type(oberon_context_t * ctx, oberon_type_t * type) case OBERON_TYPE_STRING: case OBERON_TYPE_SET: case OBERON_TYPE_NIL: + case OBERON_TYPE_SYSTEM_BYTE: break; case OBERON_TYPE_RECORD: m = type -> module -> gen_mod; @@ -750,7 +751,10 @@ oberon_generate_begin_module(oberon_context_t * ctx) { if(x -> class == OBERON_CLASS_MODULE) { - jvm_generate(p, 0, 0, "invokestatic %s/BEGIN()V", x -> module -> gen_mod -> class -> full_name); + if(!x -> module -> intrinsic) + { + jvm_generate(p, 0, 0, "invokestatic %s/BEGIN()V", x -> module -> gen_mod -> class -> full_name); + } } else if(x -> class == OBERON_CLASS_VAR) { @@ -886,7 +890,6 @@ jvm_generate_local_initialization(gen_proc_t * p, oberon_object_t * x) case OBERON_CLASS_VAR_PARAM: case OBERON_CLASS_PARAM: case OBERON_CLASS_VAR: - jvm_generate_var(v); jvm_generate_var_initialization(p, v); break; case OBERON_CLASS_PROC: @@ -1045,13 +1048,16 @@ push_varptr(gen_proc_t * p, oberon_expr_t * expr) jvm_generate_ldst_prepare(p, expr -> item.var -> gen_var); break; case MODE_INDEX: - push_item(p, (oberon_item_t *) expr -> item.parent); + push_item(p, expr -> item.parent); push_expr(p, expr -> item.args); break; case MODE_FIELD: - push_item(p, (oberon_item_t *) expr -> item.parent); + push_item(p, expr -> item.parent); jvm_generate_ldst_prepare(p, expr -> item.var -> gen_var); break; + case MODE_DEREF: + push_varptr(p, (oberon_expr_t *) expr -> item.parent); + break; default: gen_error("push_varptr: wat %i", expr -> item.mode); break;