X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=generator.c;h=ff4896d3880de3b018213680a62c216a192e05da;hb=89dfaf94ddbbc501020554232ce026b6584e8045;hp=b7c24b3968cd780b14e47bc5a26c591179dc8f1a;hpb=c15b86365824545bdee7d813ce0c796f1bdff592;p=dsw-obn.git diff --git a/generator.c b/generator.c index b7c24b3..ff4896d 100644 --- a/generator.c +++ b/generator.c @@ -153,34 +153,42 @@ 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; } + 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); } }