X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fbackends%2Fjvm%2Fgenerator-jvm-basic.c;h=2b9b5483efa3b7b76050a4c105d3cb4b20dc655c;hb=e6a70a3b694efa5600cfcd0d8110f8d9e8866342;hp=5fabc3171bf03787173e193640811e552934bd4a;hpb=e8f94e8772c0eaa4fb7f0e6b9f892f014d3423df;p=dsw-obn.git diff --git a/src/backends/jvm/generator-jvm-basic.c b/src/backends/jvm/generator-jvm-basic.c index 5fabc31..2b9b548 100644 --- a/src/backends/jvm/generator-jvm-basic.c +++ b/src/backends/jvm/generator-jvm-basic.c @@ -190,6 +190,7 @@ jvm_get_field_full_name(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); case OBERON_CLASS_FIELD:; char * rec_name = jvm_get_class_full_name(x -> parent_type); @@ -204,6 +205,27 @@ jvm_get_field_full_name(oberon_object_t * x) return NULL; } +char * +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); + case OBERON_CLASS_FIELD:; + char * rec_name = jvm_get_class_full_name(x -> parent_type); + return new_string("%s$%s", rec_name, x -> name); + case OBERON_CLASS_MODULE: + return new_string(x -> module -> name); + default: + gen_error("jvm_get_field_full_name: wat"); + break; + } + + return NULL; +} + char * jvm_get_class_full_name(oberon_type_t * type) { @@ -212,6 +234,9 @@ jvm_get_class_full_name(oberon_type_t * type) switch(type -> class) { + case OBERON_TYPE_POINTER: + name = jvm_get_class_full_name(type -> base); + break; case OBERON_TYPE_PROCEDURE: name = new_string("SYSTEM$PROCEDURE");