DEADSOFTWARE

Добавлены тесты экспорта
authorDeaDDooMER <deaddoomer@deadsoftware.ru>
Sun, 13 Aug 2017 16:55:51 +0000 (19:55 +0300)
committerDeaDDooMER <deaddoomer@deadsoftware.ru>
Sun, 13 Aug 2017 16:55:51 +0000 (19:55 +0300)
Test17A.obn [new file with mode: 0644]
Test17B.obn [new file with mode: 0644]
Test17C.obn [new file with mode: 0644]
Test17Common.obn [new file with mode: 0644]
Test17D.obn [new file with mode: 0644]
Test17E.obn [new file with mode: 0644]
Test17F.obn [new file with mode: 0644]
notes
obn-run-tests.sh
src/oberon-common.c
src/oberon.c

diff --git a/Test17A.obn b/Test17A.obn
new file mode 100644 (file)
index 0000000..8b823e0
--- /dev/null
@@ -0,0 +1,12 @@
+MODULE Test17A;
+
+IMPORT C := Test17Common;
+
+BEGIN
+  C.rec.fldRW := 666;
+  С.p.fldRW := 666;
+  С.arr[0] := 666;
+  С.pa[0] := 666;
+END Test17A.
+
+Тест экспорта. Копиляция должна проваливаться. Переменные не экспортированы.
diff --git a/Test17B.obn b/Test17B.obn
new file mode 100644 (file)
index 0000000..dc7a3d1
--- /dev/null
@@ -0,0 +1,11 @@
+MODULE Test17B;
+
+IMPORT C := Test17Common;
+
+BEGIN
+  C.recRO.fldRW := 666;
+END Test17B.
+
+Тест экспорта на чтение. Компиляция должна проваливаться.
+Переменные-статические-записи экспортированные только для чтения,
+но с полями допускающие запись - все равно должны быть только для чтения.
diff --git a/Test17C.obn b/Test17C.obn
new file mode 100644 (file)
index 0000000..35d89b0
--- /dev/null
@@ -0,0 +1,11 @@
+MODULE Test17C;
+
+IMPORT C := Test17Common;
+
+BEGIN
+  C.pRO.fldRW := 666;
+END Test17C.
+
+Тест экспорта на чтение. Компиляция должна быть успешна.
+Переменные-указатели экспортированные только для чтения должны допускать
+запись в структуру по указателю, но запрещать изменение самого указателя.
diff --git a/Test17Common.obn b/Test17Common.obn
new file mode 100644 (file)
index 0000000..734d7b0
--- /dev/null
@@ -0,0 +1,15 @@
+MODULE Test17Common;
+
+TYPE
+  PRec = POINTER TO RecDesc;
+  RecDesc = RECORD fld, fldRO-, fldRW* : INTEGER END;
+  PArr = POINTER TO Arr;
+  Arr = ARRAY 3 OF INTEGER;
+
+VAR
+  rec, recRO-, recRW* : RecDesc;
+  p, pRO-, pRW* : PRec;
+  arr, arrRO-, arrRW* : Arr;
+  pa, paRO-, paRW* : PArr;
+
+END Test17Common.
diff --git a/Test17D.obn b/Test17D.obn
new file mode 100644 (file)
index 0000000..965bb47
--- /dev/null
@@ -0,0 +1,10 @@
+MODULE Test17D;
+
+IMPORT C := Test17Common;
+
+BEGIN
+  C.recRW.fldRW := 666;
+  C.pRW.fldRW := 666;
+END Test17D.
+
+Тест экспорта на запись. Компиляция должна быть успешна.
diff --git a/Test17E.obn b/Test17E.obn
new file mode 100644 (file)
index 0000000..b28c97f
--- /dev/null
@@ -0,0 +1,10 @@
+MODULE Test17E;
+
+IMPORT C := Test17Common;
+
+BEGIN
+  C.recRW.fld := 666;
+  C.pRW.fld := 666;
+END Test17E.
+
+Тест экспорта. Копиляция должна проваливаться т.к. поля не экспортированы.
diff --git a/Test17F.obn b/Test17F.obn
new file mode 100644 (file)
index 0000000..b8a45f2
--- /dev/null
@@ -0,0 +1,10 @@
+MODULE Test17F;
+
+IMPORT C := Test17Common;
+
+BEGIN
+  C.recRW.fldRO := 666;
+  C.pRW.fldRO := 666;
+END Test17F.
+
+Тест экспорта. Копиляция должна проваливаться т.к. поля только для чтения.
diff --git a/notes b/notes
index b09a685024b85d77f9e5078f6cad92b11bd73e63..191dfc91c615a73869b09d6aec434b678a113a58 100644 (file)
--- a/notes
+++ b/notes
   1.2.6 Module Strings
   1.2.7 Module Math and MathL
 
-- Уточнить как должна работать проверка импорта на чтение. (8.1)
 - Примеры -5 DIV 3 и -5 MOD 3 работают не так как в (8.2.2)
     Нужен другой тип округления?
 
 - Нет модуля SYSTEM (на жабе он особо и не нужен)
-- Ð\9dÑ\83жнÑ\8b Ñ\81Ñ\80едÑ\81Ñ\82ва Ñ\81озданиÑ\8f Ð±Ð¸Ð½Ð´Ð¸Ð½Ð³Ð¾Ð². Ð\9dа Ð´Ð°Ð½Ð½Ñ\8bй Ð¼Ð¾Ð¼ÐµÐ½Ñ\82 Ñ\80еализÑ\83емо ÐºÐ°Ðº Ð·Ð°Ð³Ð»Ñ\83Ñ\88ки Ð´Ð»Ñ\8f Ð¼Ð¾Ð´Ñ\83лей.
+- Ð\9dÑ\83жнÑ\8b Ñ\81Ñ\80едÑ\81Ñ\82ва Ñ\81озданиÑ\8f Ð±Ð¸Ð½Ð´Ð¸Ð½Ð³Ð¾Ð². Ð\9dа Ð´Ð°Ð½Ð½Ñ\8bй Ð¼Ð¾Ð¼ÐµÐ½Ñ\82 Ñ\80еализÑ\83емо ÐºÐ°Ðº Ð¿Ñ\83Ñ\81Ñ\82Ñ\8bе Ð¼Ð¾Ð´Ñ\83ли.
 - Любая ошибка фатальна
 - Нет проверок переполнения в компилтайме.
     Возможно можно заюзать это:
index 62fc96760156fc02822c440e67fdc10232c438b4..e3e3d5af23365db90c84c03533503c0a55d0c127 100755 (executable)
@@ -2,20 +2,27 @@
 
 set -e
 
+# Тест: компиляция и исполнение
 maketest()
 {
        local OK=1
        local LOG=""
        if ! LOG="$(./obn-compile.sh $1)"; then
                OK=0;
+               echo "=============================="
+               echo "Test fail: $1 compile-time $?:"
                echo "$LOG"
-               echo "Test fail: $1 compile-time $?"
+               echo "=============================="
+               echo
        fi
        if [ $OK = 1 ]; then
                if ! ./obn-run.sh $1; then
                        OK=0
+                       echo "=============================="
+                       echo "Test fail: $1 run-time $?:"
                        echo "$LOG"
-                       echo "Test fail: $1 run-time $?"
+                       echo "=============================="
+                       echo
                fi
        fi
        if [ $OK = 1 ]; then
@@ -23,13 +30,35 @@ maketest()
        fi
 }
 
-compile_false_positive()
+# Тест: только компиляция
+makecomp()
 {
-       if ./obn-compile.sh $1; then
-               echo "Test fail: $1 compile-time $?"
+       local LOG=""
+       if ! LOG="$(./obn-compile.sh $1)"; then
+               echo "=============================="
+               echo "Test fail: $1 compile-time $?:"
+               echo "$LOG"
+               echo "=============================="
+               echo
        else
                echo "Test ok: $1"
        fi
+
+}
+
+# Тест: Компиляция не должна проходить
+makefail()
+{
+       local LOG=""
+       if ! LOG="$(./obn-compile.sh $1)"; then
+               echo "Test ok: $1"
+       else
+               echo "=============================="
+               echo "Test fail: $1 compile-time $?:"
+               echo "$LOG"
+               echo "=============================="
+               echo
+       fi
 }
 
 ./make.sh jvm
@@ -50,3 +79,10 @@ maketest Test13
 maketest Test14
 maketest Test15
 maketest Test16
+makefail Test17A
+makefail Test17B
+makecomp Test17C
+makecomp Test17D
+makefail Test17E
+makefail Test17F
+
index f1b67112f251d8a0e368aa52d1e78ed16d3c90ef..01f2c9e5aab0ab553f2c527349c5731d4802daa4 100644 (file)
@@ -11,12 +11,12 @@ oberon_error(oberon_context_t * ctx, const char * fmt, ...)
 {
         va_list ptr;
         va_start(ptr, fmt);
-        fprintf(stderr, "error: ");
-        vfprintf(stderr, fmt, ptr);
-        fprintf(stderr, "\n");
-        fprintf(stderr, "  code_index = %i\n", ctx -> code_index);
-        fprintf(stderr, "  c          = %c\n", ctx -> c);
-        fprintf(stderr, "  token      = %i\n", ctx -> token);
+        printf("error: ");
+        vprintf(fmt, ptr);
+        printf("\n");
+        printf("  code_index = %i\n", ctx -> code_index);
+        printf("  c          = %c\n", ctx -> c);
+        printf("  token      = %i\n", ctx -> token);
         va_end(ptr);
         exit(1);
 }
index 830844a16aedb87eb17d805361346d80930d0e3a..efa6fed9c13a02e3e3d5438a8be29c7121768970 100644 (file)
@@ -1248,7 +1248,7 @@ oberno_make_dereferencing(oberon_context_t * ctx, oberon_expr_t * expr)
        assert(expr -> is_item);
 
        oberon_expr_t * selector;
-       selector = oberon_new_item(MODE_DEREF, expr -> result -> base, expr -> read_only);
+       selector = oberon_new_item(MODE_DEREF, expr -> result -> base, false);
        selector -> item.parent = (oberon_item_t *) expr;
 
        return selector;