DEADSOFTWARE

Добавлен тип SET
[dsw-obn.git] / src / backends / jvm / generator-jvm-basic.c
index 24c28b057429313018bf1529c64154c1e2a27825..bcd82a25476803cbcd4aca6e8aa0ecf9f4c24934 100644 (file)
@@ -57,6 +57,7 @@ jvm_get_descriptor(oberon_type_t * type)
                        return new_string("V");
                        break;
                case OBERON_TYPE_INTEGER:
+               case OBERON_TYPE_SET:
                        switch(type -> size)
                        {
                                case 1:
@@ -146,7 +147,7 @@ jvm_get_descriptor_safe(oberon_type_t * type)
                        return jvm_get_class_full_name(type);
                        break;
                case OBERON_TYPE_ARRAY:
-                       return new_string("A%sX", jvm_get_descriptor_safe(type -> base));
+                       return new_string("A%s", jvm_get_descriptor_safe(type -> base));
                        break;
                default:
                        return jvm_get_descriptor(type);
@@ -165,6 +166,7 @@ jvm_get_prefix(oberon_type_t * type)
                case OBERON_TYPE_BOOLEAN:
                case OBERON_TYPE_INTEGER:
                case OBERON_TYPE_CHAR:
+               case OBERON_TYPE_SET:
                        return (size <= 4) ? ('i') : ('l');
                        break;
                case OBERON_TYPE_PROCEDURE:
@@ -193,6 +195,7 @@ jvm_get_postfix(oberon_type_t * type)
                        return 'b';
                        break;
                case OBERON_TYPE_INTEGER:
+               case OBERON_TYPE_SET:
                        switch(size)
                        {
                                case 1:
@@ -358,13 +361,19 @@ int
 jvm_cell_size_for_type(oberon_type_t * type)
 {
        if(type -> class == OBERON_TYPE_INTEGER
-               || type -> class == OBERON_TYPE_REAL)
+               || type -> class == OBERON_TYPE_REAL
+               || type -> class == OBERON_TYPE_CHAR
+               || type -> class == OBERON_TYPE_SET)
        {
                if(type -> size > 4)
                {
                        return 2;
                }
        }
+       else if(type -> class == OBERON_TYPE_VOID)
+       {
+               return 0;
+       }
 
        return 1;
 }