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.
}
}
+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 -- )
}
}
-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)
{
for(int i = 0; i < num; i++)
{
push_expr(p, arg);
+ check_index(p, arg -> result);
arg = arg -> next;
}