X-Git-Url: http://deadsoftware.ru/gitweb?p=dsw-obn.git;a=blobdiff_plain;f=src%2Fbackends%2Fjvm%2Fgenerator-jvm.c;h=79da2b9f68fac681b5624a512508c7228702eeb1;hp=4f49cfb86ca94df0b220be27f0d5fad68ac99a3b;hb=9ae75f92f805e23b0b151cf8be18a3fe96935c3b;hpb=9cc08bacbf56ebf49e17c8745ac6418fa4be1d0c 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; }