From: DeaDDooMER Date: Sun, 8 Oct 2017 15:25:39 +0000 (+0300) Subject: Добавлены строки в отладочную информацию класса (быстрохак) X-Git-Url: http://deadsoftware.ru/gitweb?a=commitdiff_plain;ds=sidebyside;p=dsw-obn.git Добавлены строки в отладочную информацию класса (быстрохак) --- diff --git a/Test.obn b/Test.obn index 22a2a55..ea2d143 100644 --- a/Test.obn +++ b/Test.obn @@ -1,15 +1,17 @@ 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. diff --git a/notes b/notes index 0aa5f4e..9ff5af3 100644 --- a/notes +++ b/notes @@ -1,7 +1,6 @@ - Jasmin создаёт ошибку в float константах, надо как-то порешать. - Нужно делать проверку границ при касте индекса массива с типом HUGEINT -- Нужно передавать информацию о файле и строках в кодогенератор. - Нет процедур привязанных к типм (10.2) - Не полная реализация модуля Files * Нет процедур ReadNum WriteNum diff --git a/src/backends/jvm/generator-jvm.c b/src/backends/jvm/generator-jvm.c index 9cade33..f26c951 100644 --- a/src/backends/jvm/generator-jvm.c +++ b/src/backends/jvm/generator-jvm.c @@ -1988,3 +1988,21 @@ oberon_set_typecheck(oberon_object_t * var, bool enable) 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; + } +} diff --git a/src/backends/jvm/generator-jvm.h b/src/backends/jvm/generator-jvm.h index 44f8932..52d59fa 100644 --- a/src/backends/jvm/generator-jvm.h +++ b/src/backends/jvm/generator-jvm.h @@ -104,6 +104,7 @@ struct gen_module_t { struct gen_class * class; int rec_id; + int line; }; struct gen_label_t diff --git a/src/generator.h b/src/generator.h index 2618ec7..03e410e 100644 --- a/src/generator.h +++ b/src/generator.h @@ -48,3 +48,5 @@ void oberon_generate_halt(oberon_context_t * ctx, int64_t n); 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); diff --git a/src/oberon.c b/src/oberon.c index 8256647..931a307 100644 --- a/src/oberon.c +++ b/src/oberon.c @@ -390,6 +390,7 @@ oberon_init_scaner(oberon_context_t * ctx, oberon_scanner_t * s) ctx -> xloc.col = 1; ctx -> loc = ctx -> xloc; ctx -> c = ctx -> code[ctx -> code_index]; + oberon_set_line(ctx, 1); } static void @@ -721,12 +722,14 @@ oberon_get_lined_char(oberon_context_t * ctx) } 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 {