X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fbackends%2Fjvm%2Fgenerator-jvm-basic.c;h=aad9747f25cbf4d091e86db1f0ea9a3d098753dc;hb=36c1947b3e98abab25f16a0f1c2679125651fe95;hp=865ffdd4177f7625fb1f5fdef57b2f3ba6c0cb39;hpb=7bb96abf74bcb31d9a3ecb820b0b6565813bf324;p=dsw-obn.git diff --git a/src/backends/jvm/generator-jvm-basic.c b/src/backends/jvm/generator-jvm-basic.c index 865ffdd..aad9747 100644 --- a/src/backends/jvm/generator-jvm-basic.c +++ b/src/backends/jvm/generator-jvm-basic.c @@ -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");