X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fbackends%2Fjvm%2Fgenerator-jvm-basic.c;h=2088559c7e7089b6609e4857179125f70cda025e;hb=ac2eb0e30e5c65480e72565b104ea9a602fe31e2;hp=2baed6556849dc01aa1d61d9fda6836cccf7642c;hpb=0570527a2279ee6bd14b4c08e653b6d68369475a;p=dsw-obn.git diff --git a/src/backends/jvm/generator-jvm-basic.c b/src/backends/jvm/generator-jvm-basic.c index 2baed65..2088559 100644 --- a/src/backends/jvm/generator-jvm-basic.c +++ b/src/backends/jvm/generator-jvm-basic.c @@ -7,7 +7,6 @@ #include -#include "../../../include/oberon.h" #include "../../oberon-internals.h" #include "generator-jvm.h" #include "generator-jvm-basic.h" @@ -192,6 +191,9 @@ jvm_get_prefix(oberon_type_t * type) int size = type -> size; switch(type -> class) { + case OBERON_TYPE_NOTYPE: + return ' '; + break; case OBERON_TYPE_BOOLEAN: case OBERON_TYPE_INTEGER: case OBERON_TYPE_CHAR: @@ -224,6 +226,9 @@ jvm_get_postfix(oberon_type_t * type) int size = type -> size; switch(type -> class) { + case OBERON_TYPE_NOTYPE: + return ' '; + break; case OBERON_TYPE_BOOLEAN: return 'b'; break; @@ -325,13 +330,17 @@ jvm_get_field_full_name(oberon_object_t * x) { case OBERON_CLASS_VAR: return new_string("%s/%s", x -> module -> name, jvm_get_name(x)); + break; case OBERON_CLASS_PROC: return new_string("%s/%s", x -> module -> name, jvm_get_name(x)); + break; case OBERON_CLASS_FIELD: parent = jvm_get_class_full_name(x -> parent_type); return new_string("%s/%s", parent, jvm_get_name(x)); + break; case OBERON_CLASS_MODULE: return new_string(x -> module -> name); + break; default: gen_error("jvm_get_field_full_name: wat"); break; @@ -346,13 +355,18 @@ jvm_get_field_full_name_safe(oberon_object_t * x) switch(x -> class) { case OBERON_CLASS_VAR: - case OBERON_CLASS_PROC: return new_string("%s$%s", x -> module -> name, x -> name); + break; + case OBERON_CLASS_PROC: + return new_string("%s$%s", x -> module -> name, jvm_get_name(x)); + break; case OBERON_CLASS_FIELD:; char * rec_name = jvm_get_class_full_name(x -> parent_type); return new_string("%s$%s", rec_name, x -> name); + break; case OBERON_CLASS_MODULE: return new_string(x -> module -> name); + break; default: gen_error("jvm_get_field_full_name: wat"); break; @@ -376,6 +390,7 @@ jvm_get_class_full_name(oberon_type_t * type) name = new_string("SYSTEM$PROCEDURE"); char * desc; + char * spec; desc = jvm_get_descriptor_safe(type -> base); name = new_string("%s$%s", name, desc); @@ -384,8 +399,13 @@ jvm_get_class_full_name(oberon_type_t * type) for(int i = 0; i < num; i++) { + spec = ""; + if(arg -> class == OBERON_CLASS_VAR_PARAM) + { + spec = "VAR"; + } desc = jvm_get_descriptor_safe(arg -> type); - name = new_string("%s%s", name, desc); + name = new_string("%s%s%s", name, spec, desc); arg = arg -> next; } @@ -431,6 +451,8 @@ jvm_cell_size_for_postfix(char postfix) { switch(postfix) { + case ' ': + return 0; case 'a': case 'b': case 's': @@ -441,7 +463,7 @@ jvm_cell_size_for_postfix(char postfix) case 'd': return 2; default: - gen_error("jvm_cell_size_for_postfix: unk postfix %c", postfix); + gen_error("jvm_cell_size_for_postfix: unk postfix %c (%i)", postfix, postfix); } return -666; @@ -518,6 +540,8 @@ jvm_get_type_of_prefix(char prefix) { switch(prefix) { + case ' ': + return 'V'; case 'b': return 'B'; case 'c':