From: DeaDDooMER Date: Mon, 28 Aug 2017 12:12:32 +0000 (+0300) Subject: JVM: исправлено использование HUGEINT для использования в NEW X-Git-Url: http://deadsoftware.ru/gitweb?p=dsw-obn.git;a=commitdiff_plain;h=9ae75f92f805e23b0b151cf8be18a3fe96935c3b JVM: исправлено использование HUGEINT для использования в NEW --- 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; }