X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fbackends%2Fjvm%2Fgenerator-jvm-basic.c;h=e4c6c15635a591cefe9800074670bd34dc29f4cb;hb=4e58c0e61815196bcf87405ab9d070631bc72f90;hp=9c8b78c598e73aaacc9644309c4e5a654146ad44;hpb=a0ff807fe0e69c50469e506836467da32f23f754;p=dsw-obn.git diff --git a/src/backends/jvm/generator-jvm-basic.c b/src/backends/jvm/generator-jvm-basic.c index 9c8b78c..e4c6c15 100644 --- a/src/backends/jvm/generator-jvm-basic.c +++ b/src/backends/jvm/generator-jvm-basic.c @@ -7,7 +7,6 @@ #include -#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;