index 27f1c56390802b409621ef18779d6781c6f10595..2088559c7e7089b6609e4857179125f70cda025e 100644 (file)
#include <gc.h>
-#include "../../../include/oberon.h"
#include "../../oberon-internals.h"
#include "generator-jvm.h"
#include "generator-jvm-basic.h"
break;
}
break;
+ case OBERON_TYPE_SYSTEM_BYTE:
+ return new_string("B");
+ break;
case OBERON_TYPE_REAL:
switch(type -> size)
{
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;
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;
int size = type -> size;
switch(type -> class)
{
+ case OBERON_TYPE_NOTYPE:
+ return ' ';
+ break;
case OBERON_TYPE_BOOLEAN:
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:
case OBERON_TYPE_POINTER:
case OBERON_TYPE_STRING:
case OBERON_TYPE_NIL:
+ case OBERON_TYPE_SYSTEM_PTR:
return 'a';
break;
case OBERON_TYPE_REAL:
int size = type -> size;
switch(type -> class)
{
+ case OBERON_TYPE_NOTYPE:
+ return ' ';
+ break;
case OBERON_TYPE_BOOLEAN:
return 'b';
break;
break;
}
break;
+ case OBERON_TYPE_SYSTEM_BYTE:
+ return 'b';
+ break;
case OBERON_TYPE_CHAR:
switch(size)
{
case OBERON_TYPE_POINTER:
case OBERON_TYPE_STRING:
case OBERON_TYPE_NIL:
+ case OBERON_TYPE_SYSTEM_PTR:
return 'a';
break;
case OBERON_TYPE_REAL:
{
case OBERON_CLASS_VAR:
return new_string("%s/%s", x -> module -> name, jvm_get_name(x));
+ break;
case OBERON_CLASS_PROC:
return new_string("%s/%s", x -> module -> name, jvm_get_name(x));
+ break;
case OBERON_CLASS_FIELD:
parent = jvm_get_class_full_name(x -> parent_type);
return new_string("%s/%s", parent, jvm_get_name(x));
+ break;
case OBERON_CLASS_MODULE:
return new_string(x -> module -> name);
+ break;
default:
gen_error("jvm_get_field_full_name: wat");
break;
switch(x -> class)
{
case OBERON_CLASS_VAR:
- case OBERON_CLASS_PROC:
return new_string("%s$%s", x -> module -> name, x -> name);
+ break;
+ case OBERON_CLASS_PROC:
+ return new_string("%s$%s", x -> module -> name, jvm_get_name(x));
+ break;
case OBERON_CLASS_FIELD:;
char * rec_name = jvm_get_class_full_name(x -> parent_type);
return new_string("%s$%s", rec_name, x -> name);
+ break;
case OBERON_CLASS_MODULE:
return new_string(x -> module -> name);
+ break;
default:
gen_error("jvm_get_field_full_name: wat");
break;
name = new_string("SYSTEM$PROCEDURE");
char * desc;
+ char * spec;
desc = jvm_get_descriptor_safe(type -> base);
name = new_string("%s$%s", name, desc);
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;
}
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;
{
switch(postfix)
{
+ case ' ':
+ return 0;
case 'a':
case 'b':
case 's':
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;
{
switch(prefix)
{
+ case ' ':
+ return 'V';
case 'b':
return 'B';
case 'c':