X-Git-Url: http://deadsoftware.ru/gitweb?p=dsw-obn.git;a=blobdiff_plain;f=generator.c;h=991b6dd83c416be4d19a81a0722c30f29d6e12d5;hp=b7c24b3968cd780b14e47bc5a26c591179dc8f1a;hb=3818049ca3679e8fcc432345d41a2d930f7874e4;hpb=0833fd8741d5215e8e8576fecd1f5a5f5dfc84f6 diff --git a/generator.c b/generator.c index b7c24b3..991b6dd 100644 --- a/generator.c +++ b/generator.c @@ -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); } }