summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 8e830d8)
raw | patch | inline | side by side (parent: 8e830d8)
author | DeaDDooMER <deaddoomer@deadsoftware.ru> | |
Sun, 13 Aug 2017 16:55:51 +0000 (19:55 +0300) | ||
committer | DeaDDooMER <deaddoomer@deadsoftware.ru> | |
Sun, 13 Aug 2017 16:55:51 +0000 (19:55 +0300) |
Test17A.obn | [new file with mode: 0644] | patch | blob |
Test17B.obn | [new file with mode: 0644] | patch | blob |
Test17C.obn | [new file with mode: 0644] | patch | blob |
Test17Common.obn | [new file with mode: 0644] | patch | blob |
Test17D.obn | [new file with mode: 0644] | patch | blob |
Test17E.obn | [new file with mode: 0644] | patch | blob |
Test17F.obn | [new file with mode: 0644] | patch | blob |
notes | patch | blob | history | |
obn-run-tests.sh | patch | blob | history | |
src/oberon-common.c | patch | blob | history | |
src/oberon.c | patch | blob | history |
diff --git a/Test17A.obn b/Test17A.obn
--- /dev/null
+++ b/Test17A.obn
@@ -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
--- /dev/null
+++ b/Test17B.obn
@@ -0,0 +1,11 @@
+MODULE Test17B;
+
+IMPORT C := Test17Common;
+
+BEGIN
+ C.recRO.fldRW := 666;
+END Test17B.
+
+Тест экспорта на чтение. Компиляция должна проваливаться.
+Переменные-статические-записи экспортированные только для чтения,
+но с полями допускающие запись - все равно должны быть только для чтения.
diff --git a/Test17C.obn b/Test17C.obn
--- /dev/null
+++ b/Test17C.obn
@@ -0,0 +1,11 @@
+MODULE Test17C;
+
+IMPORT C := Test17Common;
+
+BEGIN
+ C.pRO.fldRW := 666;
+END Test17C.
+
+Тест экспорта на чтение. Компиляция должна быть успешна.
+Переменные-указатели экспортированные только для чтения должны допускать
+запись в структуру по указателю, но запрещать изменение самого указателя.
diff --git a/Test17Common.obn b/Test17Common.obn
--- /dev/null
+++ b/Test17Common.obn
@@ -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
--- /dev/null
+++ b/Test17D.obn
@@ -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
--- /dev/null
+++ b/Test17E.obn
@@ -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
--- /dev/null
+++ b/Test17F.obn
@@ -0,0 +1,10 @@
+MODULE Test17F;
+
+IMPORT C := Test17Common;
+
+BEGIN
+ C.recRW.fldRO := 666;
+ C.pRW.fldRO := 666;
+END Test17F.
+
+Тест экспорта. Копиляция должна проваливаться т.к. поля только для чтения.
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ли.
- Любая ошибка фатальна
- Нет проверок переполнения в компилтайме.
Возможно можно заюзать это:
diff --git a/obn-run-tests.sh b/obn-run-tests.sh
index 62fc96760156fc02822c440e67fdc10232c438b4..e3e3d5af23365db90c84c03533503c0a55d0c127 100755 (executable)
--- a/obn-run-tests.sh
+++ b/obn-run-tests.sh
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
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
maketest Test14
maketest Test15
maketest Test16
+makefail Test17A
+makefail Test17B
+makecomp Test17C
+makecomp Test17D
+makefail Test17E
+makefail Test17F
+
diff --git a/src/oberon-common.c b/src/oberon-common.c
index f1b67112f251d8a0e368aa52d1e78ed16d3c90ef..01f2c9e5aab0ab553f2c527349c5731d4802daa4 100644 (file)
--- a/src/oberon-common.c
+++ b/src/oberon-common.c
{
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);
}
diff --git a/src/oberon.c b/src/oberon.c
index 830844a16aedb87eb17d805361346d80930d0e3a..efa6fed9c13a02e3e3d5438a8be29c7121768970 100644 (file)
--- a/src/oberon.c
+++ b/src/oberon.c
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;