summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 9f8036e)
raw | patch | inline | side by side (parent: 9f8036e)
author | DeaDDooMER <deaddoomer@deadsoftware.ru> | |
Fri, 11 Aug 2017 11:50:26 +0000 (14:50 +0300) | ||
committer | DeaDDooMER <deaddoomer@deadsoftware.ru> | |
Fri, 11 Aug 2017 11:50:26 +0000 (14:50 +0300) |
Test.obn | patch | blob | history | |
Test7.obn | [new file with mode: 0644] | patch | blob |
notes | patch | blob | history | |
obn-run-tests.sh | patch | blob | history | |
rtl/SYSTEM.java | patch | blob | history | |
src/oberon.c | patch | blob | history |
diff --git a/Test.obn b/Test.obn
index 8c3a8d1458efc80ddf4837c106b664b70a3abfae..f0552a93a06abbaed7841faf482aae3f99251f7f 100644 (file)
--- a/Test.obn
+++ b/Test.obn
IMPORT Out;
VAR
- msg : ARRAY 20 OF CHAR;
+ i : INTEGER;
BEGIN
Out.Open;
- COPY("Hello World!", msg);
- Out.String(msg); Out.Ln;
- COPY("Hell!", msg);
- Out.String(msg); Out.Ln;
- COPY("The quick brown fox jumps over the lazy dog", msg);
- Out.String(msg); Out.Ln;
- msg := "Hello World!";
- Out.String(msg); Out.Ln;
+ i := 48;
+ FOR i := 32 TO i DO
+ Out.Int(i, 0); Out.Char(' ');
+ END;
+ Out.Ln;
END Test.
diff --git a/Test7.obn b/Test7.obn
--- /dev/null
+++ b/Test7.obn
@@ -0,0 +1,19 @@
+MODULE Test7;
+
+IMPORT Out;
+
+VAR
+ i : INTEGER;
+
+BEGIN
+ Out.Open;
+ i := 48;
+ FOR i := 32 TO i DO
+ Out.Int(i, 0); Out.Char(' ');
+ END;
+ Out.Ln;
+END Test7.
+
+Проверка корректности FOR.
+Сначала должна вычисляться выражение TO и только потом присвоение индекса.
+Результат должен быть: 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
index ce31365148ecc7ab65d5dc428e6953540148651d..7d6b72b343800718f28760503f77260056198640 100644 (file)
--- a/notes
+++ b/notes
- Сделать проверку повторов в CASE и выполнять прирывание при отсутствии ELSE.
-- В FOR сначала должна вычисляться переменная temp.
- Сделать выполнение прерывания при отсутствии ELSE в операторе WITH.
- Сделать нормальную проверку наличия RETURN.
- Запретить массивы и записи как результат процедуры-функции.
diff --git a/obn-run-tests.sh b/obn-run-tests.sh
index d809c75a049eba6821cf82b0fbe0a4ef2be4e278..404c84011aacac3002ce19ea23b0fe738c7d3e4e 100755 (executable)
--- a/obn-run-tests.sh
+++ b/obn-run-tests.sh
maketest Test4
maketest Test5
maketest Test6
+maketest Test7
diff --git a/rtl/SYSTEM.java b/rtl/SYSTEM.java
index f98236bd90926eeb0ca4d8dd58c46e190e43cd8e..38f488694a9b8996766edfa36d342f7a00b33a3c 100644 (file)
--- a/rtl/SYSTEM.java
+++ b/rtl/SYSTEM.java
return i;
}
- /* Встроенная процедура COPY(x, v) */
public static void COPY(byte[] x, byte[] v)
{
int len_x = LEN(x);
diff --git a/src/oberon.c b/src/oberon.c
index 1f33a03c9d82bc084e3ffb1b38777b6750bc9c2f..36736a4bf9384333eb1226c1b6835f202cdabab1 100644 (file)
--- a/src/oberon.c
+++ b/src/oberon.c
index = oberon_ident_item(ctx, iname);
oberon_assert_token(ctx, ASSIGN);
from = oberon_expr(ctx);
- oberon_assign(ctx, from, index);
oberon_assert_token(ctx, TO);
bound = oberon_make_temp_var_item(ctx, index -> result);
to = oberon_expr(ctx);
- oberon_assign(ctx, to, bound);
+ oberon_assign(ctx, to, bound); // сначала temp
+ oberon_assign(ctx, from, index); // потом i
if(ctx -> token == BY)
{
oberon_assert_token(ctx, BY);