GIT
/
REPO
/
FRED-BOY
Projects
/
dsw-obn.git
/ commitdiff
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
b240f3d
)
Добавлены строки в отладочную информацию класса (быстрохак)
master
author
DeaDDooMER <deaddoomer@deadsoftware.ru>
Sun, 8 Oct 2017 15:25:39 +0000
(18:25 +0300)
committer
DeaDDooMER <deaddoomer@deadsoftware.ru>
Sun, 8 Oct 2017 15:25:39 +0000
(18:25 +0300)
Test.obn
patch
|
blob
|
history
notes
patch
|
blob
|
history
src/backends/jvm/generator-jvm.c
patch
|
blob
|
history
src/backends/jvm/generator-jvm.h
patch
|
blob
|
history
src/generator.h
patch
|
blob
|
history
src/oberon.c
patch
|
blob
|
history
diff --git
a/Test.obn
b/Test.obn
index 22a2a55a2296d4cb933c58e7bf882acf1207e69e..ea2d143a6b9a4cd952a1d30505f5ff09d90616ea 100644
(file)
--- a/
Test.obn
+++ b/
Test.obn
@@
-1,15
+1,17
@@
MODULE Test;
MODULE Test;
-PROCEDURE A(a : INTEGER);
VAR
x : 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.
END Test.
diff --git
a/notes
b/notes
index 0aa5f4efc0cfacc852f08c3e7a337ebbba2b959b..9ff5af38d1d1334d8adee189a0d370664dca1269 100644
(file)
--- a/
notes
+++ b/
notes
@@
-1,7
+1,6
@@
- Jasmin создаёт ошибку в float константах, надо как-то порешать.
- Нужно делать проверку границ при касте индекса массива с типом HUGEINT
- Jasmin создаёт ошибку в float константах, надо как-то порешать.
- Нужно делать проверку границ при касте индекса массива с типом HUGEINT
-- Нужно передавать информацию о файле и строках в кодогенератор.
- Нет процедур привязанных к типм (10.2)
- Не полная реализация модуля Files
* Нет процедур ReadNum WriteNum
- Нет процедур привязанных к типм (10.2)
- Не полная реализация модуля Files
* Нет процедур ReadNum WriteNum
diff --git
a/src/backends/jvm/generator-jvm.c
b/src/backends/jvm/generator-jvm.c
index 9cade33f431a92b3db20095545b259c69f93c588..f26c9513e000ca18cc3203fc0e67155b3111398c 100644
(file)
--- 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);
}
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 44f89324f4c4495a063db9119e0bd1e73e6e1e07..52d59fa0e76eda02d804dffbcf797746dc492239 100644
(file)
--- 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;
{
struct gen_class * class;
int rec_id;
+ int line;
};
struct gen_label_t
};
struct gen_label_t
diff --git
a/src/generator.h
b/src/generator.h
index 2618ec77e09b856c78a33a094effdc8306c7dd01..03e410ed384f35b620046cde9c969ea17bada88d 100644
(file)
--- 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_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 82566471b9a11b929d832f2d51ef355aa4d23dfc..931a30724697a03476cff779779b3385bad5f2b4 100644
(file)
--- 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];
ctx -> xloc.col = 1;
ctx -> loc = ctx -> xloc;
ctx -> c = ctx -> code[ctx -> code_index];
+ oberon_set_line(ctx, 1);
}
static void
}
static void
@@
-721,12
+722,14
@@
oberon_get_lined_char(oberon_context_t * ctx)
}
ctx -> xloc.line += 1;
ctx -> xloc.col = 1;
}
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;
}
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
{
}
else
{
DEADSOFTWARE 2012-2025