summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 734fa8f)
raw | patch | inline | side by side (parent: 734fa8f)
author | DeaDDooMER <deaddoomer@deadsoftware.ru> | |
Mon, 24 Jul 2017 19:41:17 +0000 (22:41 +0300) | ||
committer | DeaDDooMER <deaddoomer@deadsoftware.ru> | |
Mon, 24 Jul 2017 19:41:17 +0000 (22:41 +0300) |
generator.c | patch | blob | history | |
notes | patch | blob | history | |
oberon.c | patch | blob | history | |
oberon.h | patch | blob | history |
diff --git a/generator.c b/generator.c
index 419a2b22c4c2dbb765a9656163f701c645637eb8..b17a8cd977cf450733a38fe9510b01db8754bd6f 100644 (file)
--- a/generator.c
+++ b/generator.c
}
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)
index 0bf5789be9888a088582eaf1b13f0654952d719e..ec0a69c441200b6244b0b59de931b9deadfd8be3 100644 (file)
--- a/notes
+++ b/notes
- нету процедуры NEW
- нету открытых массивов
-- нету секции import
+- нету секции import + identdef + qualident
- нету операторов if, while и т.д.
- libgccjit не умеет в локальные функции (опять пилить костыли как в jvm)
- не понятен результат присваивания статических/разыменованных структур (* reca := recb; *)
- не понятен результат присваивания статических/разыменованных массивов (* arr1 := arr2; *)
+
+- нету счёта строк
+- любая ошибка фатальна
diff --git a/oberon.c b/oberon.c
index 4eb240b043479840196b87af05eb0fb037ebba10..c3a6f86ce77fc9d57002b7263e394f218b2140ce 100644 (file)
--- a/oberon.c
+++ b/oberon.c
{
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 f84d332ca73124ace42cbaaa6c097586038bd114..30c4cbe47e3bf7b847aab2a5ea966f2f484fa31b 100644 (file)
--- a/oberon.h
+++ b/oberon.h
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;