index 277940ce17b58fb18f46ee630aa162c2a250c62a..9c8b78c598e73aaacc9644309c4e5a654146ad44 100644 (file)
switch(type -> class)
{
- case OBERON_TYPE_VOID:
+ case OBERON_TYPE_NOTYPE:
return new_string("V");
break;
case OBERON_TYPE_INTEGER:
case OBERON_TYPE_RECORD:
case OBERON_TYPE_POINTER:
case OBERON_TYPE_STRING:
+ case OBERON_TYPE_NIL:
return 'a';
break;
case OBERON_TYPE_REAL:
case OBERON_TYPE_RECORD:
case OBERON_TYPE_POINTER:
case OBERON_TYPE_STRING:
+ case OBERON_TYPE_NIL:
return 'a';
break;
case OBERON_TYPE_REAL:
return '!';
}
+char *
+jvm_get_name(oberon_object_t * x)
+{
+ switch(x -> class)
+ {
+ case OBERON_CLASS_VAR:
+ case OBERON_CLASS_VAR_PARAM:
+ case OBERON_CLASS_PARAM:
+ case OBERON_CLASS_FIELD:
+ return new_string(x -> name);
+ case OBERON_CLASS_PROC:
+ if(x -> parent)
+ {
+ return new_string("%s$%s", jvm_get_name(x -> parent), x -> name);
+ }
+ else
+ {
+ return new_string(x -> name);
+ }
+ default:
+ gen_error("jvm_get_name: wat");
+ }
+
+ return NULL;
+}
+
char *
jvm_get_field_full_name(oberon_object_t * x)
{
+ char * parent;
switch(x -> class)
{
case OBERON_CLASS_VAR:
+ return new_string("%s/%s", x -> module -> name, jvm_get_name(x));
case OBERON_CLASS_PROC:
- return new_string("%s/%s", x -> module -> name, x -> name);
- case OBERON_CLASS_FIELD:;
- char * rec_name = jvm_get_class_full_name(x -> parent_type);
- return new_string("%s/%s", rec_name, x -> name);
+ return new_string("%s/%s", x -> module -> name, jvm_get_name(x));
+ case OBERON_CLASS_FIELD:
+ parent = jvm_get_class_full_name(x -> parent_type);
+ return new_string("%s/%s", parent, jvm_get_name(x));
case OBERON_CLASS_MODULE:
return new_string(x -> module -> name);
default:
return name;
}
-char *
-jvm_get_procedure_signature(oberon_type_t * proc)
-{
- char * signature;
- char * desc;
-
- signature = new_string("(");
-
- int num = proc -> num_decl;
- oberon_object_t * arg = proc -> decl;
- for(int i = 0; i < num; i++)
- {
- desc = jvm_get_descriptor(arg -> type);
- if(arg -> class == OBERON_CLASS_VAR_PARAM)
- {
- signature = new_string("%s[%sI", signature, desc);
- }
- else
- {
- signature = new_string("%s%s", signature, desc);
- }
- arg = arg -> next;
- }
-
- desc = jvm_get_descriptor(proc -> base);
- signature = new_string("%s)%s", signature, desc);
-
- return signature;
-}
-
int
jvm_cell_size_for_type(oberon_type_t * type)
{
return 2;
}
}
- else if(type -> class == OBERON_TYPE_VOID)
+ else if(type -> class == OBERON_TYPE_NOTYPE)
{
return 0;
}