From 9ae75f92f805e23b0b151cf8be18a3fe96935c3b Mon Sep 17 00:00:00 2001 From: DeaDDooMER Date: Mon, 28 Aug 2017 15:12:32 +0300 Subject: [PATCH] =?utf8?q?JVM:=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?utf8?q?=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C?= =?utf8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20HUGEINT=20=D0=B4?= =?utf8?q?=D0=BB=D1=8F=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE?= =?utf8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B2=20NEW?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- Test.obn | 20 ++++++++++++++++++++ src/backends/jvm/generator-jvm.c | 17 +++++++++-------- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/Test.obn b/Test.obn index 6fae529..a704f0d 100644 --- a/Test.obn +++ b/Test.obn @@ -1,3 +1,23 @@ MODULE Test; + TYPE + CPinfo = RECORD + tag : INTEGER; + index : ARRAY 2 OF LONGINT; + int : LONGINT; + float : REAL; + long : HUGEINT; + double : LONGREAL; + utf8 : POINTER TO ARRAY OF CHAR; + END; + + CPool = POINTER TO ARRAY OF CPinfo; + + VAR + i : HUGEINT; + cpool : CPool; + +BEGIN + i := 16; + NEW(cpool, i); END Test. diff --git a/src/backends/jvm/generator-jvm.c b/src/backends/jvm/generator-jvm.c index 4f49cfb..79da2b9 100644 --- a/src/backends/jvm/generator-jvm.c +++ b/src/backends/jvm/generator-jvm.c @@ -103,6 +103,14 @@ jvm_generate_hard_cast_type(gen_proc_t * p, oberon_type_t * from, oberon_type_t } } +static void +check_index(gen_proc_t * p, oberon_type_t * index_type) +{ + // TODO проверка валидности границ + char prefix = jvm_get_prefix(index_type); + jvm_generate_cast_prefix(p, prefix, 'i'); +} + /* * Генерирует код для инициализации массива со статическим базовым типом * ( aref -- ) @@ -1146,14 +1154,6 @@ oberon_generate_branch(oberon_context_t * ctx, oberon_expr_t * cond, bool gotoif } } -static void -check_index(gen_proc_t * p, oberon_type_t * index_type) -{ - // TODO проверка валидности границ - char prefix = jvm_get_prefix(index_type); - jvm_generate_cast_prefix(p, prefix, 'i'); -} - static void push_varptr(gen_proc_t * p, oberon_expr_t * expr) { @@ -1286,6 +1286,7 @@ jvm_generate_expr_new_pointer(gen_proc_t * p, oberon_type_t * type, int num, obe for(int i = 0; i < num; i++) { push_expr(p, arg); + check_index(p, arg -> result); arg = arg -> next; } -- 2.29.2