X-Git-Url: https://deadsoftware.ru/gitweb?p=dsw-obn.git;a=blobdiff_plain;f=src%2Fbackends%2Fjvm%2Fgenerator-jvm.c;h=d609ed8de96c216a30ac4ec9bceda90ec230583e;hp=e4c70b1c23d312e580c24f1a2d2348963548ecc1;hb=ee7fd939ac99201466900fb3983aa90b980da5c3;hpb=36c1947b3e98abab25f16a0f1c2679125651fe95 diff --git a/src/backends/jvm/generator-jvm.c b/src/backends/jvm/generator-jvm.c index e4c70b1..d609ed8 100644 --- a/src/backends/jvm/generator-jvm.c +++ b/src/backends/jvm/generator-jvm.c @@ -761,7 +761,14 @@ oberon_generate_procedure_pointer_class(oberon_object_t * proc) fprintf(fp, ".method ()V\n"); fprintf(fp, " aload_0\n"); fprintf(fp, " invokespecial %s/()V\n", abscname); - fprintf(fp, " aload_0\n"); + fprintf(fp, " return\n"); + fprintf(fp, ".end method\n\n"); + + fprintf(fp, ".method static ()V\n"); + fprintf(fp, " .limit stack 2\n"); + fprintf(fp, " new %s\n", cname); + fprintf(fp, " dup\n"); + fprintf(fp, " invokespecial %s/()V\n", cname); fprintf(fp, " putstatic %s/pointer %s\n", cname, absdesc); fprintf(fp, " return\n"); fprintf(fp, ".end method\n\n"); @@ -1076,12 +1083,6 @@ oberon_generate_begin_module(oberon_context_t * ctx) jvm_generate_store(p, x -> type, x -> gen_var); } } - else if(x -> class == OBERON_CLASS_PROC) - { - char * cname = jvm_get_field_full_name_safe(x); - jvm_generate(p, 0, 1, "new %s", cname); - jvm_generate(p, 1, 0, "invokespecial %s/()V", cname); - } x = x -> next; }