diff --git a/generator.c b/generator.c
index b7c24b3968cd780b14e47bc5a26c591179dc8f1a..ff4896d3880de3b018213680a62c216a192e05da 100644 (file)
--- a/generator.c
+++ b/generator.c
}
static void
-oberon_generator_get_full_name(char * name, int max_len, oberon_object_t * o)
+oberon_generator_get_full_name(char * name, int max_len, oberon_object_t * x)
{
- if(!o)
+ if(!x)
{
name[0] = 0;
return;
}
+ int add_module_prefix;
+ switch(x -> class)
+ {
+ case OBERON_CLASS_FIELD:
+ case OBERON_CLASS_PARAM:
+ case OBERON_CLASS_VAR_PARAM:
+ /* В локальных областях префиксы излишни */
+ add_module_prefix = 0;
+ break;
+ default:
+ add_module_prefix = 1;
+ break;
+ }
+
char parent[256];
- oberon_generator_get_full_name(parent, 256, o -> parent);
-
- char * xname;
-// if(o -> class == OBERON_CLASS_MODULE)
-// {
-// xname = o -> module -> name;
-// }
-// else
-// {
- xname = o -> name;
-// }
+ oberon_generator_get_full_name(parent, 256, x -> parent);
if(strlen(parent) > 0)
{
- snprintf(name, max_len, "%s_%s", parent, xname);
+ snprintf(name, max_len, "%s_%s", parent, x -> name);
+ }
+ else if(add_module_prefix)
+ {
+ snprintf(name, max_len, "%s_%s", x -> module -> name, x -> name);
}
else
{
- snprintf(name, max_len, "%s", xname);
+ snprintf(name, max_len, "%s", x -> name);
}
}