summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: a0ff807)
raw | patch | inline | side by side (parent: a0ff807)
author | DeaDDooMER <deaddoomer@deadsoftware.ru> | |
Thu, 10 Aug 2017 10:16:27 +0000 (13:16 +0300) | ||
committer | DeaDDooMER <deaddoomer@deadsoftware.ru> | |
Thu, 10 Aug 2017 10:16:27 +0000 (13:16 +0300) |
Test.obn | patch | blob | history | |
Test4.obn | patch | blob | history | |
notes | patch | blob | history | |
obn-dev-test.sh | patch | blob | history | |
src/backends/jvm/generator-jvm.c | patch | blob | history | |
src/oberon.c | patch | blob | history |
diff --git a/Test.obn b/Test.obn
index 98ac0e23e370819a8b9e96db5387e7f64d97eb65..363783e2baa8fa206a03e87c99ad827c66b77d6d 100644 (file)
--- a/Test.obn
+++ b/Test.obn
MODULE Test;
+TYPE
+ R1 = RECORD END;
+(* R2 = RECORD (R1) END; *)
+ R3 = RECORD END;
+
VAR
- a : POINTER TO RECORD END;
- b : POINTER TO ARRAY OF INTEGER;
- c : PROCEDURE;
+(*
+ a : R1;
+ b : R2;
+*)
+ c : R3;
BEGIN
- a := NIL;
- b := NIL;
- c := NIL;
+(* a := b; *)
END Test.
diff --git a/Test4.obn b/Test4.obn
index 132f8641208ae0aa13509f5951e2cab115ed6258..fba34f99c879d75c0881863e0f0bb934e4d87e82 100644 (file)
--- a/Test4.obn
+++ b/Test4.obn
b := NIL;
c := NIL;
END Test4.
+
+Проверка присвоения NIL
index 1e0a9e58c2a1176e3c9b99fc2bc23b97da5523a2..762ef894f1f8438fe3aa1206d83fdf65fdd832ad 100644 (file)
--- a/notes
+++ b/notes
+- Уточнить как должна работать проверка импорта на чтение. (8.1)
+
- Нет модуля SYSTEM
- Нет функций ASH CAP CHR ENTIER LEN LONG ODD ORD SHORT
- Нет процедур ASSERT COPY DEC EXCL HALT INC INCL
- Не реализована свёртка констант
- Нужно пробежаться по стандарту и всё перепроверить.
+- JVM: Импортируемые модули не инициализируются
- JVM: Не реализовано полное сранение массивов.
- JVM: Не реализовано полное сранение записей.
- JVM: Не достаточно средств для реализации рефлексии на уровне локальных процедур.
diff --git a/obn-dev-test.sh b/obn-dev-test.sh
index 89592dab07c051d11793c90805bfd5545e9bec2e..424cf4e63190019d4b97d3b1689d85e4e9402d4d 100755 (executable)
--- a/obn-dev-test.sh
+++ b/obn-dev-test.sh
./obn-compile.sh Test
# -a -- for asm as comments
+# -noinner
jad -o -b -noinner classes/*
./obn-run.sh Test
index 90b0e88f777caa2c3731b55241603b971d126af6..5e74d18a0acfdf31d609959415e0d7a92ecdfc5a 100644 (file)
memset(t, 0, sizeof *t);
type -> gen_type = t;
- if(type -> class != OBERON_TYPE_NOTYPE)
- {
- t -> wide = jvm_is_wide_type(type);
- t -> prefix = jvm_get_prefix(type);
- t -> postfix = jvm_get_postfix(type);
- }
-
- t -> cell_size = jvm_cell_size_for_type(type);
-
- if(type -> class != OBERON_TYPE_NIL)
- {
- t -> desc = jvm_get_descriptor(type);
- }
-
+ gen_module_t * m;
switch(type -> class)
{
case OBERON_TYPE_NOTYPE:
case OBERON_TYPE_NIL:
break;
case OBERON_TYPE_RECORD:
- ;
- gen_module_t * m;
m = type -> module -> gen_mod;
oberon_generate_record_class(m, type);
break;
gen_error("oberon_generator_init_type: unk calss %i", type -> class);
break;
}
+
+ if(type -> class != OBERON_TYPE_NOTYPE)
+ {
+ t -> wide = jvm_is_wide_type(type);
+ t -> prefix = jvm_get_prefix(type);
+ t -> postfix = jvm_get_postfix(type);
+ }
+
+ t -> cell_size = jvm_cell_size_for_type(type);
+
+ if(type -> class != OBERON_TYPE_NIL)
+ {
+ t -> desc = jvm_get_descriptor(type);
+ }
}
void
diff --git a/src/oberon.c b/src/oberon.c
index 5a93489b35ed197ee2ac10b262a95c042583d146..349015dc163318316d7ccbc8c40e964b9c78839f 100644 (file)
--- a/src/oberon.c
+++ b/src/oberon.c
@@ -1453,7 +1453,7 @@ oberon_make_record_selector(oberon_context_t * ctx, oberon_expr_t * expr, char *
}
}
- int read_only = 0;
+ int read_only = expr -> read_only;
if(field -> read_only)
{
if(field -> module != ctx -> mod)