X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fbackends%2Fjvm%2Fgenerator-jvm-basic.c;h=61088af9bfb6a30b372fe071e85a30b4387d1dc8;hb=dd629f9f9b42dcca96ef4fc58df5ccb2e332b65b;hp=478a92c6f38cb91acb3c03c3f939c3158023d5f3;hpb=1233fb1d5d8f67a8f5e970386c1c4cbb6691ec04;p=dsw-obn.git diff --git a/src/backends/jvm/generator-jvm-basic.c b/src/backends/jvm/generator-jvm-basic.c index 478a92c..61088af 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" @@ -149,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; @@ -172,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; @@ -199,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: @@ -270,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: @@ -368,6 +375,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); @@ -376,8 +384,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; } @@ -386,6 +399,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; @@ -430,7 +446,7 @@ jvm_cell_size_for_postfix(char postfix) case 'd': return 2; default: - gen_error("jvm_cell_size_for_postfix: unk postfix %c", postfix); + gen_error("jvm_cell_size_for_postfix: unk postfix %c (%i)", postfix, postfix); } return -666;