DEADSOFTWARE

Добавлен тип CHAR
[dsw-obn.git] / src / backends / jvm / generator-jvm-basic.c
index 865ffdd4177f7625fb1f5fdef57b2f3ba6c0cb39..aad9747f25cbf4d091e86db1f0ea9a3d098753dc 100644 (file)
@@ -90,6 +90,26 @@ jvm_get_descriptor(oberon_type_t * type)
                                        break;
                        }
                        break;
+               case OBERON_TYPE_CHAR:
+                       switch(type -> size)
+                       {
+                               case 1:
+                                       return new_string("B");
+                                       break;
+                               case 2:
+                                       return new_string("C");
+                                       break;
+                               case 4:
+                                       return new_string("I");
+                                       break;
+                               case 8:
+                                       return new_string("J");
+                                       break;
+                               default:
+                                       gen_error("jvm_get_descriptor: unsupported char size %i", type -> size);
+                                       break;
+                       }
+                       break;
                case OBERON_TYPE_BOOLEAN:
                        return new_string("Z");
                        break;
@@ -121,6 +141,7 @@ jvm_get_prefix(oberon_type_t * type)
        {
                case OBERON_TYPE_BOOLEAN:
                case OBERON_TYPE_INTEGER:
+               case OBERON_TYPE_CHAR:
                        return (size <= 4) ? ('i') : ('l');
                        break;
                case OBERON_TYPE_PROCEDURE:
@@ -132,10 +153,11 @@ jvm_get_prefix(oberon_type_t * type)
                case OBERON_TYPE_REAL:
                        return (size <= 4) ? ('f') : ('d');
                        break;
+               default:
+                       gen_error("jvm_get_prefix: wat");
+                       return '!';
+                       break;
        }
-
-       gen_error("jvm_get_prefix: wat");
-       return '!';
 }
 
 char
@@ -167,6 +189,26 @@ jvm_get_postfix(oberon_type_t * type)
                                        break;
                        }
                        break;
+               case OBERON_TYPE_CHAR:
+                       switch(size)
+                       {
+                               case 1:
+                                       return 'b';
+                                       break;
+                               case 2:
+                                       return 'c';
+                                       break;
+                               case 4:
+                                       return 'i';
+                                       break;
+                               case 8:
+                                       return 'l';
+                                       break;
+                               default:
+                                       gen_error("jvm_get_postfix: char wat");
+                                       break;
+                       }
+                       break;
                case OBERON_TYPE_PROCEDURE:
                case OBERON_TYPE_ARRAY:
                case OBERON_TYPE_RECORD:
@@ -234,6 +276,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");