From: DeaDDooMER Date: Mon, 24 Jul 2017 19:41:17 +0000 (+0300) Subject: Поправлены повторные опережающие объявления процедур, добавлено именование генерируем... X-Git-Url: http://deadsoftware.ru/gitweb?a=commitdiff_plain;h=7d4370a6cf1df8bacbead0511e4a9a1b6941003e;p=dsw-obn.git Поправлены повторные опережающие объявления процедур, добавлено именование генерируемых структур --- diff --git a/generator.c b/generator.c index 419a2b2..b17a8cd 100644 --- a/generator.c +++ b/generator.c @@ -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 0bf5789..ec0a69c 100644 --- 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; *) + +- нету счёта строк +- любая ошибка фатальна diff --git a/oberon.c b/oberon.c index 4eb240b..c3a6f86 100644 --- 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 { diff --git a/oberon.h b/oberon.h index f84d332..30c4cbe 100644 --- 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;