DEADSOFTWARE

JVM: исправлен конфлик имён локальных и глобальных процедур
[dsw-obn.git] / src / backends / jvm / generator-jvm-basic.c
index 61088af9bfb6a30b372fe071e85a30b4387d1dc8..2088559c7e7089b6609e4857179125f70cda025e 100644 (file)
@@ -191,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:
@@ -223,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;
@@ -324,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;
@@ -345,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;
@@ -436,6 +451,8 @@ jvm_cell_size_for_postfix(char postfix)
 {
        switch(postfix)
        {
+               case ' ':
+                       return 0;
                case 'a':
                case 'b':
                case 's':
@@ -523,6 +540,8 @@ jvm_get_type_of_prefix(char prefix)
 {
        switch(prefix)
        {
+               case ' ':
+                       return 'V';
                case 'b':
                        return 'B';
                case 'c':