X-Git-Url: http://deadsoftware.ru/gitweb?p=dsw-obn.git;a=blobdiff_plain;f=src%2Fbackends%2Fjvm%2Fgenerator-jvm.c;h=9cade33f431a92b3db20095545b259c69f93c588;hp=7da9b61ce94f0558220d745007e8a8f53688abf7;hb=0c29ba1953327a9b476a825d8b9b9d185d544972;hpb=f34b0f1f6a54eda1ad328576e48d92b96ad160ac diff --git a/src/backends/jvm/generator-jvm.c b/src/backends/jvm/generator-jvm.c index 7da9b61..9cade33 100644 --- a/src/backends/jvm/generator-jvm.c +++ b/src/backends/jvm/generator-jvm.c @@ -1060,6 +1060,7 @@ oberon_generate_begin_proc(oberon_context_t * ctx, oberon_object_t * proc) } name = jvm_get_name(proc); + p -> ret_prefix = jvm_get_prefix(proc -> type -> base); jvm_generate_function_header(p, "public static", name, signature); if(proc -> local) @@ -1098,6 +1099,35 @@ oberon_generate_end_proc(oberon_context_t * ctx) p = m -> class -> p; oberon_generate_trap(ctx, -4); + + if(p -> ret_prefix == ' ') + { + jvm_generate(p, 0, 0, "return"); + } + else + { + int sz = jvm_cell_size_for_postfix(p -> ret_prefix); + switch(p -> ret_prefix) + { + case 'a': + jvm_generate(p, 0, 1, "aconst_null"); + break; + case 'l': + jvm_generate_push_int_size(p, 0, 8); + break; + case 'f': + jvm_generate_push_float(p, 0, 4); + break; + case 'd': + jvm_generate_push_float(p, 0, 8); + break; + default: + jvm_generate_push_int(p, 0); + break; + } + jvm_generate(p, sz, 0, "%creturn", p -> ret_prefix); + } + jvm_generate_function_end(p); }