DEADSOFTWARE

Поправлены повторные опережающие объявления процедур, добавлено именование генерируем...
authorDeaDDooMER <deaddoomer@deadsoftware.ru>
Mon, 24 Jul 2017 19:41:17 +0000 (22:41 +0300)
committerDeaDDooMER <deaddoomer@deadsoftware.ru>
Mon, 24 Jul 2017 19:41:17 +0000 (22:41 +0300)
generator.c
notes
oberon.c
oberon.h

index 419a2b22c4c2dbb765a9656163f701c645637eb8..b17a8cd977cf450733a38fe9510b01db8754bd6f 100644 (file)
@@ -103,7 +103,11 @@ oberon_generator_init_type(oberon_context_t * ctx, oberon_type_t * type)
        }
        else if(type -> class == OBERON_TYPE_RECORD)
        {
-               gcc_struct = gcc_jit_context_new_opaque_struct(gcc_context, NULL, "");
+               char name[32];
+               snprintf(name, 32, "RECORD%u", gen_context -> record_count);
+               gen_context -> record_count += 1;
+
+               gcc_struct = gcc_jit_context_new_opaque_struct(gcc_context, NULL, name);
                gcc_type = gcc_jit_struct_as_type(gcc_struct);
        }
        else if(type -> class == OBERON_TYPE_POINTER)
diff --git a/notes b/notes
index 0bf5789be9888a088582eaf1b13f0654952d719e..ec0a69c441200b6244b0b59de931b9deadfd8be3 100644 (file)
--- a/notes
+++ b/notes
@@ -2,7 +2,7 @@
 - нету процедуры NEW
 - нету открытых массивов
 
-- нету секции import
+- нету секции import + identdef + qualident
 
 - нету операторов if, while и т.д.
 
@@ -16,3 +16,6 @@
 - libgccjit не умеет в локальные функции (опять пилить костыли как в jvm)
 - не понятен результат присваивания статических/разыменованных структур (* reca := recb; *)
 - не понятен результат присваивания статических/разыменованных массивов (* arr1 := arr2; *)
+
+- нету счёта строк
+- любая ошибка фатальна
index 4eb240b043479840196b87af05eb0fb037ebba10..c3a6f86ce77fc9d57002b7263e394f218b2140ce 100644 (file)
--- a/oberon.c
+++ b/oberon.c
@@ -1540,9 +1540,9 @@ oberon_proc_decl(oberon_context_t * ctx)
                        {
                                oberon_error(ctx, "mult procedure definition");
                        }
-
-                       oberon_compare_signatures(ctx, proc -> type, signature);
                }
+
+               oberon_compare_signatures(ctx, proc -> type, signature);
        }
        else
        {
index f84d332ca73124ace42cbaaa6c097586038bd114..30c4cbe47e3bf7b847aab2a5ea966f2f484fa31b 100644 (file)
--- a/oberon.h
+++ b/oberon.h
@@ -38,6 +38,7 @@ struct gen_context_s
         gcc_jit_context * gcc_context;
         gcc_jit_result * gcc_result;
        gen_block_t * block;
+       unsigned record_count;
 };
 
 typedef struct oberon_type_s oberon_type_t;