DEADSOFTWARE

Добавлены списки объявлений
[dsw-obn.git] / generator.c
index b7c24b3968cd780b14e47bc5a26c591179dc8f1a..991b6dd83c416be4d19a81a0722c30f29d6e12d5 100644 (file)
@@ -153,34 +153,36 @@ oberon_generator_init_record(oberon_context_t * ctx, oberon_type_t * type)
 }
 
 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;
        }
 
        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;
-//     }
+       parent[0] = 0;
+
+       switch(x -> class)
+       {
+               case OBERON_CLASS_FIELD:
+               case OBERON_CLASS_PARAM:
+               case OBERON_CLASS_VAR_PARAM:
+                       /* В локальных областях префиксы излишни */
+                       break;
+               default:
+                       oberon_generator_get_full_name(parent, 256, x -> parent);
+                       break;
+       }
 
        if(strlen(parent) > 0)
        {
-               snprintf(name, max_len, "%s_%s", parent, xname);
+               snprintf(name, max_len, "%s_%s", parent, x -> name);
        }
        else
        {
-               snprintf(name, max_len, "%s", xname);
+               snprintf(name, max_len, "%s", x -> name);
        }
 }