DEADSOFTWARE

Добавлены фунции вывода для компилируемой программы
[dsw-obn.git] / generator.c
index b7c24b3968cd780b14e47bc5a26c591179dc8f1a..bad063d57adcac9ee2c45d5f1442febdf5839055 100644 (file)
@@ -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);
        }
 }
 
@@ -215,7 +223,7 @@ oberon_generator_init_var(oberon_context_t * ctx, oberon_object_t * var)
                else
                {
                        gcc_lvalue = gcc_jit_context_new_global(
-                               gcc_context, NULL, GCC_JIT_GLOBAL_INTERNAL, gcc_type, name
+                               gcc_context, NULL, GCC_JIT_GLOBAL_EXPORTED, gcc_type, name
                        );
                }
        }