DEADSOFTWARE

Добавлен счёт строк
[dsw-obn.git] / src / backends / jvm / generator-jvm-basic.c
index 9c8b78c598e73aaacc9644309c4e5a654146ad44..e4c6c15635a591cefe9800074670bd34dc29f4cb 100644 (file)
@@ -7,7 +7,6 @@
 
 #include <gc.h>
 
-#include "../../../include/oberon.h"
 #include "../../oberon-internals.h"
 #include "generator-jvm.h"
 #include "generator-jvm-basic.h"
@@ -77,6 +76,9 @@ jvm_get_descriptor(oberon_type_t * type)
                                        break;
                        }
                        break;
+               case OBERON_TYPE_SYSTEM_BYTE:
+                       return new_string("B");
+                       break;
                case OBERON_TYPE_REAL:
                        switch(type -> size)
                        {
@@ -146,6 +148,9 @@ jvm_get_descriptor(oberon_type_t * type)
                                        break;
                        }
                        break;
+               case OBERON_TYPE_SYSTEM_PTR:
+                       return new_string("Ljava/lang/Object;");
+                       break;
                default:
                        gen_error("jvm_get_descriptor: unsupported type class %i", type -> class);
                        break;
@@ -169,6 +174,9 @@ jvm_get_descriptor_safe(oberon_type_t * type)
                case OBERON_TYPE_ARRAY:
                        return new_string("A%s", jvm_get_descriptor_safe(type -> base));
                        break;
+               case OBERON_TYPE_SYSTEM_PTR:
+                       return new_string("SYSPTR");
+                       break;
                default:
                        return jvm_get_descriptor(type);
                        break;
@@ -187,6 +195,7 @@ jvm_get_prefix(oberon_type_t * type)
                case OBERON_TYPE_INTEGER:
                case OBERON_TYPE_CHAR:
                case OBERON_TYPE_SET:
+               case OBERON_TYPE_SYSTEM_BYTE:
                        return (size <= 4) ? ('i') : ('l');
                        break;
                case OBERON_TYPE_PROCEDURE:
@@ -195,6 +204,7 @@ jvm_get_prefix(oberon_type_t * type)
                case OBERON_TYPE_POINTER:
                case OBERON_TYPE_STRING:
                case OBERON_TYPE_NIL:
+               case OBERON_TYPE_SYSTEM_PTR:
                        return 'a';
                        break;
                case OBERON_TYPE_REAL:
@@ -237,6 +247,9 @@ jvm_get_postfix(oberon_type_t * type)
                                        break;
                        }
                        break;
+               case OBERON_TYPE_SYSTEM_BYTE:
+                       return 'b';
+                       break;
                case OBERON_TYPE_CHAR:
                        switch(size)
                        {
@@ -263,6 +276,7 @@ jvm_get_postfix(oberon_type_t * type)
                case OBERON_TYPE_POINTER:
                case OBERON_TYPE_STRING:
                case OBERON_TYPE_NIL:
+               case OBERON_TYPE_SYSTEM_PTR:
                        return 'a';
                        break;
                case OBERON_TYPE_REAL:
@@ -366,6 +380,7 @@ jvm_get_class_full_name(oberon_type_t * type)
 
                        int num = type -> num_decl;
                        oberon_object_t * arg = type -> decl;
+
                        for(int i = 0; i < num; i++)
                        {
                                desc = jvm_get_descriptor_safe(arg -> type);
@@ -378,6 +393,9 @@ jvm_get_class_full_name(oberon_type_t * type)
                        rec_id = type -> gen_type -> rec_id;
                        name = new_string("%s$RECORD%i", type -> module -> name, rec_id);
                        break;
+               case OBERON_TYPE_SYSTEM_PTR:
+                       name = new_string("java/lang/Object");
+                       break;
                default:
                        gen_error("jvm_get_class_full_name: unk type class %i", type -> class);
                        break;