From e763da864f7330c2b53029782c6b0d85543eb4d2 Mon Sep 17 00:00:00 2001 From: DeaDDooMER Date: Mon, 24 Jul 2017 23:07:06 +0300 Subject: [PATCH] =?utf8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?utf8?q?=D1=8B=20=D0=BE=D1=82=D0=BA=D1=80=D1=8B=D1=82=D1=8B=D0=B5=20?= =?utf8?q?=D0=BC=D0=B0=D1=81=D1=81=D0=B8=D0=B2=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- generator.c | 1 + notes | 25 +++++++++- oberon.c | 125 +++++++++++++++++++++++++++++++++++------------- test.c | 30 +++++------- test/.gitignore | 1 + test/Test | Bin 10336 -> 10344 bytes test/Test.Mod | 18 +++---- test/Test.c | 18 ++----- 8 files changed, 142 insertions(+), 76 deletions(-) create mode 100644 test/.gitignore diff --git a/generator.c b/generator.c index d54bbfd..b0887ae 100644 --- a/generator.c +++ b/generator.c @@ -372,6 +372,7 @@ oberon_generator_get_type_size(oberon_context_t * ctx, oberon_type_t * type) case OBERON_TYPE_ARRAY: size = type -> size; type = type -> base; + size = (size == 0) ? (1) : (size); size *= oberon_generator_get_type_size(ctx, type); printf("array size: %i\n", size); break; diff --git a/notes b/notes index ebd198d..0576334 100644 --- a/notes +++ b/notes @@ -1,4 +1,27 @@ -- нету открытых массивов +- открытые массивы работкают криво как статические аргументы процедур + Случай 1: не проходит проверки libgccjit + (* + TYPE Ar = ARRAY OF INTEGER; + VAR a : POINTER TO Ar; + + (* так же и с VAR-параметром *) + PROCEDURE Ax(x : Ar); + END Ax; + + Ax(a); + *) + Случай 2: массив должен быть указателем, да и ещё копироваться + (* + TYPE Ar = ARRAY OF INTEGER; + VAR a : POINTER TO Ar; + + (* при использовании VAR-параметра работает *) + PROCEDURE Ax(x : Ar); + END Ax; + + Ax(a^); + *) + - нет символов и строк - нужен автокаст int -> real для DIV. Да и вообще каст типов. diff --git a/oberon.c b/oberon.c index 4b20dad..16043c2 100644 --- a/oberon.c +++ b/oberon.c @@ -1024,15 +1024,18 @@ oberon_make_array_selector(oberon_context_t * ctx, oberon_expr_t * desig, oberon } // Статическая проверка границ массива - if(index -> is_item) + if(desig -> result -> size != 0) { - if(index -> item.mode == MODE_INTEGER) + if(index -> is_item) { - int arr_size = desig -> result -> size; - int index_int = index -> item.integer; - if(index_int < 0 || index_int > arr_size - 1) + if(index -> item.mode == MODE_INTEGER) { - oberon_error(ctx, "not in range (dimension size 0..%i)", arr_size - 1); + int arr_size = desig -> result -> size; + int index_int = index -> item.integer; + if(index_int < 0 || index_int > arr_size - 1) + { + oberon_error(ctx, "not in range (dimension size 0..%i)", arr_size - 1); + } } } } @@ -2031,6 +2034,14 @@ oberon_make_multiarray(oberon_context_t * ctx, oberon_expr_t * sizes, oberon_typ oberon_make_array_type(ctx, sizes, dim, type); } +static void +oberon_make_open_array(oberon_context_t * ctx, oberon_type_t * base, oberon_type_t * type) +{ + type -> class = OBERON_TYPE_ARRAY; + type -> size = 0; + type -> base = base; +} + static void oberon_type(oberon_context_t * ctx, oberon_type_t ** type) { @@ -2044,7 +2055,11 @@ oberon_type(oberon_context_t * ctx, oberon_type_t ** type) int num_sizes = 0; oberon_expr_t * sizes; - oberon_expr_list(ctx, &num_sizes, &sizes, 1); + + if(ISEXPR(ctx -> token)) + { + oberon_expr_list(ctx, &num_sizes, &sizes, 1); + } oberon_assert_token(ctx, OF); @@ -2052,7 +2067,14 @@ oberon_type(oberon_context_t * ctx, oberon_type_t ** type) base = oberon_new_type_ptr(OBERON_TYPE_VOID); oberon_type(ctx, &base); - oberon_make_multiarray(ctx, sizes, base, type); + if(num_sizes == 0) + { + oberon_make_open_array(ctx, base, *type); + } + else + { + oberon_make_multiarray(ctx, sizes, base, type); + } } else if(ctx -> token == RECORD) { @@ -2360,6 +2382,17 @@ oberon_initialize_type(oberon_context_t * ctx, oberon_type_t * type) } else if(type -> class == OBERON_TYPE_ARRAY) { + if(type -> size != 0) + { + if(type -> base -> class == OBERON_TYPE_ARRAY) + { + if(type -> base -> size == 0) + { + oberon_error(ctx, "open array not allowed as array element"); + } + } + } + oberon_initialize_type(ctx, type -> base); oberon_generator_init_type(ctx, type); } @@ -2402,9 +2435,19 @@ oberon_initialize_object(oberon_context_t * ctx, oberon_object_t * x) oberon_initialize_type(ctx, x -> type); break; case OBERON_CLASS_VAR: + case OBERON_CLASS_FIELD: + if(x -> type -> class == OBERON_TYPE_ARRAY) + { + if(x -> type -> size == 0) + { + oberon_error(ctx, "open array not allowed as variable or field"); + } + } + oberon_initialize_type(ctx, x -> type); + oberon_generator_init_var(ctx, x); + break; case OBERON_CLASS_PARAM: case OBERON_CLASS_VAR_PARAM: - case OBERON_CLASS_FIELD: oberon_initialize_type(ctx, x -> type); oberon_generator_init_var(ctx, x); break; @@ -2725,11 +2768,6 @@ oberon_make_new_call(oberon_context_t * ctx, int num_args, oberon_expr_t * list_ oberon_error(ctx, "too few arguments"); } - if(num_args > 1) - { - oberon_error(ctx, "too mach arguments"); - } - oberon_expr_t * dst; dst = list_args; @@ -2748,37 +2786,58 @@ oberon_make_new_call(oberon_context_t * ctx, int num_args, oberon_expr_t * list_ src -> item.num_args = 0; src -> item.args = NULL; + int max_args = 1; if(type -> class == OBERON_TYPE_ARRAY) { - // Пригодится при работе с открытыми массивами - /* - int dim = 1; - oberon_expr_t * sizes = NULL; - oberon_expr_t * last_size = NULL; - sizes = last_size = oberon_new_item(MODE_INTEGER, ctx -> int_type, 1); - sizes -> item.integer = type -> size; - oberon_type_t * base = type -> base; - while(base -> class == OBERON_TYPE_ARRAY) + if(type -> size == 0) { - oberon_expr_t * size; - size = last_size = oberon_new_item(MODE_INTEGER, ctx -> int_type, 1); - size -> item.integer = base -> size; + oberon_type_t * x = type; + while(x -> class == OBERON_TYPE_ARRAY) + { + if(x -> size == 0) + { + max_args += 1; + } + x = x -> base; + } + } - last_size -> next = size; - last_size = size; - base = base -> base; - dim += 1; + if(num_args < max_args) + { + oberon_error(ctx, "too few arguments"); } - */ - src -> item.num_args = 0; - src -> item.args = NULL; + if(num_args > max_args) + { + oberon_error(ctx, "too mach arguments"); + } + + int num_sizes = max_args - 1; + oberon_expr_t * size_list = list_args -> next; + + oberon_expr_t * arg = size_list; + for(int i = 0; i < max_args - 1; i++) + { + if(arg -> result -> class != OBERON_TYPE_INTEGER) + { + oberon_error(ctx, "size must be integer"); + } + arg = arg -> next; + } + + src -> item.num_args = num_sizes; + src -> item.args = size_list; } else if(type -> class != OBERON_TYPE_RECORD) { oberon_error(ctx, "oberon_make_new_call: wat"); } + if(num_args > max_args) + { + oberon_error(ctx, "too mach arguments"); + } + oberon_assign(ctx, src, dst); } diff --git a/test.c b/test.c index 1780baf..6175148 100644 --- a/test.c +++ b/test.c @@ -8,30 +8,24 @@ static char source_test[] = "(* Main module *)" "MODULE Test;" "IMPORT Out;" - "CONST" - " real = 0.1E3;" + "TYPE Ar = ARRAY OF ARRAY OF INTEGER;" + "VAR a : POINTER TO Ar;" "" - "VAR" - " nx- : INTEGER;" - " p : POINTER TO ARRAY 3 OF RECORD i, j, k : INTEGER END;" - " q : POINTER TO RECORD x, y, z : INTEGER END;" - "" - "PROCEDURE ChParam(VAR i : INTEGER);" + "PROCEDURE Ax(VAR x : POINTER TO Ar);" "BEGIN" - " i := 1234;" - "END ChParam;" + " x[0, 0] := 777;" + "END Ax;" "" "BEGIN;" - " NEW(p);" - " p[2].k := 1;" - " NEW(q);" - " " + " NEW(a, 2, 2);" + " a[0, 0] := 666;" " Out.Open;" - " ChParam(nx);" - " Out.Int(nx, 0);" - " Out.Ln;" - " Out.Real(real / 3.0, 0);" + " Out.Int(a[0, 0], 0);" " Out.Ln;" + "" + " Ax(a);" +// " Out.Int(a[0, 0], 0);" +// " Out.Ln;" "END Test." ; diff --git a/test/.gitignore b/test/.gitignore new file mode 100644 index 0000000..345e6ae --- /dev/null +++ b/test/.gitignore @@ -0,0 +1 @@ +Test diff --git a/test/Test b/test/Test index de23f9b639cfb000e82fcdc28851179dcb4907da..1bf0d5aaad38f4e391972869a9b4f55d8b95a049 100755 GIT binary patch literal 10344 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 E-x`3njQ{`u literal 10336 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 diff --git a/test/Test.Mod b/test/Test.Mod index 5d8536d..22bad20 100644 --- a/test/Test.Mod +++ b/test/Test.Mod @@ -2,19 +2,15 @@ MODULE Test; IMPORT Out; -TYPE - PVector = POINTER TO Vector; - Vector = ARRAY 3 OF INTEGER; - VAR - a : PVector; - b : Vector; + a : ARRAY 3 OF INTEGER; +PROCEDURE Ax(VAR x : ARRAY OF INTEGER); BEGIN - Out.Open; - - NEW(a); - a^ := b; +END Ax; - Out.Flush; +BEGIN + Out.Open; + Ax(a); + Out.Flush; END Test. diff --git a/test/Test.c b/test/Test.c index 8f1b741..f40f138 100644 --- a/test/Test.c +++ b/test/Test.c @@ -8,22 +8,15 @@ #include "SYSTEM.h" #include "Out.h" -typedef - INT16 Test_Vector[3]; -typedef - Test_Vector *Test_PVector; +static INT16 Test_a[3]; -static Test_PVector Test_a; -static Test_Vector Test_b; +static void Test_Ax (INT16 *x, ADDRESS x__len); - - -static void EnumPtrs(void (*P)(void*)) +static void Test_Ax (INT16 *x, ADDRESS x__len) { - P(Test_a); } @@ -31,11 +24,10 @@ export int main(int argc, char **argv) { __INIT(argc, argv); __MODULE_IMPORT(Out); - __REGMAIN("Test", EnumPtrs); + __REGMAIN("Test", 0); /* BEGIN */ Out_Open(); - Test_a = __NEWARR(NIL, 2, 2, 1, 0, ((INT64)(3))); - __MOVE(Test_b, *Test_a, 6); + Test_Ax((void*)Test_a, 3); Out_Flush(); __FINI; } -- 2.29.2