MODULE Test;
-PROCEDURE A(a : INTEGER);
VAR
x : INTEGER;
-END A;
+ p : PROCEDURE;
-PROCEDURE B(b : SHORTINT);
- PROCEDURE A(c : LONGINT);
- VAR
- y : ARRAY 3 OF INTEGER;
- END A;
-END B;
+ PROCEDURE X;
+ BEGIN
+ x := 1;
+ x := 2;
+ x := 3;
+ p
+ END X;
+BEGIN
+ X;
END Test.
- Jasmin создаёт ошибку в float константах, надо как-то порешать.
- Нужно делать проверку границ при касте индекса массива с типом HUGEINT
-- Нужно передавать информацию о файле и строках в кодогенератор.
- Нет процедур привязанных к типм (10.2)
- Не полная реализация модуля Files
* Нет процедур ReadNum WriteNum
var -> gen_var -> forcetype = (enable) ? (var -> type -> gen_type) : (NULL);
}
+void oberon_set_line(oberon_context_t * ctx, int line)
+{
+ gen_module_t * m;
+ gen_proc_t * p;
+
+ m = ctx -> mod -> gen_mod;
+ if(m != NULL)
+ {
+ p = m -> class -> p;
+
+ if(p != NULL)
+ {
+ jvm_generate(p, 0, 0, ".line %i", line);
+ }
+
+ m -> line = line;
+ }
+}
{
struct gen_class * class;
int rec_id;
+ int line;
};
struct gen_label_t
void oberon_generate_return(oberon_context_t * ctx, oberon_expr_t * expr);
void oberon_set_out_directory(oberon_context_t * ctx, const char * path);
+
+void oberon_set_line(oberon_context_t * ctx, int line);
ctx -> xloc.col = 1;
ctx -> loc = ctx -> xloc;
ctx -> c = ctx -> code[ctx -> code_index];
+ oberon_set_line(ctx, 1);
}
static void
}
ctx -> xloc.line += 1;
ctx -> xloc.col = 1;
+ oberon_set_line(ctx, ctx -> xloc.line);
}
else if(ctx -> c == 0xA)
{
oberon_get_char(ctx);
ctx -> xloc.line += 1;
ctx -> xloc.col = 1;
+ oberon_set_line(ctx, ctx -> xloc.line);
}
else
{