From ab13caca4af9fb7617a6dfeaaec3b250c5bda0ac Mon Sep 17 00:00:00 2001 From: DeaDDooMER Date: Fri, 18 Aug 2017 19:27:54 +0300 Subject: [PATCH] =?utf8?q?=D0=A4=D0=B8=D0=BA=D1=81=D1=8B=20=D0=BF=D1=80?= =?utf8?q?=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B8=20=D1=82=D0=B8=D0=BF=D0=BE?= =?utf8?q?=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- Test.obn | 27 ++++++++++++++++++--------- src/oberon-type-compat.c | 7 ++++--- src/oberon.c | 2 +- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/Test.obn b/Test.obn index 67a35e4..f47edbb 100644 --- a/Test.obn +++ b/Test.obn @@ -1,14 +1,23 @@ MODULE Test; -IMPORT Out; +IMPORT Files; + +TYPE + String = POINTER TO ARRAY OF CHAR; + R* = RECORD ch : CHAR END; + +VAR + f : Files.File; + r : Files.Rider; + m : R; + s : String; BEGIN - Out.String("A"); - Out.Char("A"); - Out.Ln; - ASSERT("A" = 041X); - ASSERT(041X = "A"); - ASSERT(ORD("A") = 041H); - ASSERT(041H = ORD("A")); - ASSERT("A" = "A"); + f := Files.Old("Test.obn"); + ASSERT(f # NIL); + Files.Set(r, f, 0); + + Files.Read(r, m.ch); + + ASSERT(s = NIL); END Test. diff --git a/src/oberon-type-compat.c b/src/oberon-type-compat.c index 3da62ed..a308499 100644 --- a/src/oberon-type-compat.c +++ b/src/oberon-type-compat.c @@ -302,7 +302,7 @@ oberon_is_assignment_compatible_expressions(oberon_expr_t * e, oberon_type_t * T /* совпадают с параметрами Tv. */ /* Доп: Tv - символ, е - строковая константа из одного символа */ - /* SYSTEM: переменным типа BYTE можно присваивать значения переменных типа CHAR или SHORTINT. */ + /* SYSTEM: Переменным типа BYTE можно присваивать значения переменных типа CHAR или SHORTINT. */ /* SYSTEM: Переменным типа PTR могут быть присвоены значения переменных-указателей любого типа. */ oberon_type_t * Te = e -> result; @@ -422,8 +422,8 @@ oberon_is_compatible_bin_expr_types(int token, oberon_type_t * a, oberon_type_t { return true; } - else if((oberon_is_nil_type(a) || oberon_is_pointer_to_record(a) || oberon_is_procedure_type(a)) - && (oberon_is_nil_type(b) || oberon_is_pointer_to_record(b) || oberon_is_procedure_type(b))) + else if((oberon_is_nil_type(a) || oberon_is_pointer_type(a) || oberon_is_procedure_type(a)) + && (oberon_is_nil_type(b) || oberon_is_pointer_type(b) || oberon_is_procedure_type(b))) { return true; } @@ -477,6 +477,7 @@ oberon_is_compatible_var_param(oberon_type_t * Tf, oberon_type_t * Ta) return oberon_is_some_types(Tf, Ta) || (oberon_is_record_type(Tf) && oberon_extension_of(Ta, Tf)) + || (oberon_is_system_byte_type(Tf) && (oberon_is_char_type(Ta) || oberon_is_byte_type(Ta))) || (oberon_is_array_of_system_byte_type(Tf)) || (oberon_is_system_ptr_type(Tf)); } diff --git a/src/oberon.c b/src/oberon.c index 04d4c6d..29c40cb 100644 --- a/src/oberon.c +++ b/src/oberon.c @@ -3156,7 +3156,7 @@ oberon_case_labels(oberon_context_t * ctx, oberon_expr_t * val) oberon_expr_t * cond2; e1 = (oberon_expr_t *) oberon_const_expr(ctx); - + e2 = NULL; if(ctx -> token == DOTDOT) { -- 2.29.2