DEADSOFTWARE

JVM: return генерируется после TRAP(-4)
[dsw-obn.git] / src / backends / jvm / generator-jvm-basic.c
index 855a61722c677d750a8bd84ea2fe27a1652e2723..033b84227d1eebfb4bbda213e94e19e889229f78 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;
@@ -375,6 +381,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);
 
@@ -383,8 +390,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;
                        }
 
@@ -430,6 +442,8 @@ jvm_cell_size_for_postfix(char postfix)
 {
        switch(postfix)
        {
+               case ' ':
+                       return 0;
                case 'a':
                case 'b':
                case 's':
@@ -517,6 +531,8 @@ jvm_get_type_of_prefix(char prefix)
 {
        switch(prefix)
        {
+               case ' ':
+                       return 'V';
                case 'b':
                        return 'B';
                case 'c':