From 13d2ebdd52d42ab2e9d5f3764a9296a25fe16464 Mon Sep 17 00:00:00 2001 From: DeaDDooMER Date: Fri, 28 Jul 2017 16:31:04 +0300 Subject: [PATCH] =?utf8?q?JVM:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?utf8?q?=D0=B5=D0=BD=D0=B0=20=D0=B8=D0=BD=D0=B8=D1=86=D0=B8=D0=B0=D0=BB?= =?utf8?q?=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B3=D0=BB=D0=BE=D0=B1?= =?utf8?q?=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D1=85=20=D0=BF=D0=B5=D1=80=D0=B5?= =?utf8?q?=D0=BC=D0=B5=D0=BD=D0=BD=D1=8B=D1=85=20=D1=81=20=D1=82=D0=B8?= =?utf8?q?=D0=BF=D0=B0=D0=BC=D0=B8=20=D1=81=D1=82=D0=B0=D1=82=D0=B8=D1=87?= =?utf8?q?=D0=B5=D1=81=D0=BA=D0=B8=D1=85=20=D0=BC=D0=B0=D1=81=D1=81=D0=B8?= =?utf8?q?=D0=B2=D0=BE=D0=B2=20=D0=B8=D0=BB=D0=B8=20=D0=B7=D0=B0=D0=BF?= =?utf8?q?=D0=B8=D1=81=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/backends/jvm/generator-jvm.c | 16 ++++++++++++++++ src/test.c | 13 ++++--------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/backends/jvm/generator-jvm.c b/src/backends/jvm/generator-jvm.c index af45a63..9408eca 100644 --- a/src/backends/jvm/generator-jvm.c +++ b/src/backends/jvm/generator-jvm.c @@ -650,6 +650,22 @@ oberon_generate_begin_module(oberon_context_t * ctx) jvm_alloc_register_untyped(p -> rf, false); jvm_generate(p, 0, 1, "aload_0"); jvm_generate(p, 1, 0, "invokespecial java/lang/Object/()V"); + + /* Инициализация переменных объявленных в модуле */ + oberon_object_t * x = ctx -> mod -> decl -> list -> next; + while(x != NULL) + { + if(x -> class == OBERON_CLASS_VAR) + { + if(x -> type -> class == OBERON_TYPE_ARRAY + || x -> type -> class == OBERON_TYPE_RECORD) + { + jvm_generate_new_static(p, x -> type); + jvm_generate_store(p, x -> type, x -> gen_var); + } + } + x = x -> next; + } } void diff --git a/src/test.c b/src/test.c index 2419c3b..92223cd 100644 --- a/src/test.c +++ b/src/test.c @@ -7,17 +7,12 @@ static char source_test[] = "(* Main module *)" "MODULE Test;" - "TYPE" - " Packed = ARRAY 16, 32 OF RECORD a : INTEGER; r : RECORD x : INTEGER; END; END;" - " IArray = ARRAY 16, 32, 666 OF INTEGER;" "VAR" - " k : POINTER TO Packed;" - " ii : POINTER TO IArray;" + " g : ARRAY 4 OF INTEGER;" + " r : RECORD x : INTEGER; END;" "BEGIN" - " NEW(k);" - " k[1, 2].a := 666;" - " k[5, 2].r.x := 456;" - " NEW(ii);" + " g[3] := 4;" + " r.x := 4546;" "END Test." ; -- 2.29.2