DEADSOFTWARE

Добавлены фунции вывода для компилируемой программы
[dsw-obn.git] / generator.c
index 991b6dd83c416be4d19a81a0722c30f29d6e12d5..bad063d57adcac9ee2c45d5f1442febdf5839055 100644 (file)
@@ -161,25 +161,31 @@ oberon_generator_get_full_name(char * name, int max_len, oberon_object_t * x)
                return;
        }
 
-       char parent[256];
-       parent[0] = 0;
-
+       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:
-                       oberon_generator_get_full_name(parent, 256, x -> parent);
+                       add_module_prefix = 1;
                        break;
        }
 
+       char parent[256];
+       oberon_generator_get_full_name(parent, 256, x -> parent);
+
        if(strlen(parent) > 0)
        {
                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", x -> name);
@@ -217,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
                        );
                }
        }