DWARF and GDB Algol 68 support - notes
Jose E. Marchesi
jemarch@gnu.org
Fri May 8 18:23:01 GMT 2026
Hi Cuper.
These are the notes from the discussion we have just had over jitsi
about adding support for Algol 68 to GDB.
begin int x := 20; (*)
prio > = 4;
real i = (x_1>10 | 10 | x_2);
{ Without -g: real(x) }
{ With -g: (real x_2 = real(x); x) }
puts (fixed(1) + "'n")
end
unit
|
widen
|
deref deref
| |
x x
(gdb) print x_2 + 10
For unit_is_applied_identifier (p)
Skip zero or more nodes:
WIDENING
VOIDING
ROWING
UNITING
DEREFERENCING
DEPROCEDURING
If next node is IDENTIFIER, return TREE_DECL (TAX (node))
Otherwise, return NULL_TREE
Code sketch:
diff --git a/gcc/algol68/a68-low-units.cc b/gcc/algol68/a68-low-units.cc
index 3cbf131112b..831fd509c2f 100644
--- a/gcc/algol68/a68-low-units.cc
+++ b/gcc/algol68/a68-low-units.cc
@@ -1371,5 +1371,27 @@ a68_lower_formal_hole (NODE_T *p, LOW_CTX_T ctx ATTRIBUTE_UNUSED)
tree
a68_lower_unit (NODE_T *p, LOW_CTX_T ctx)
{
- return a68_lower_tree (SUB (p), ctx);
+ tree unit = a68_lower_tree (SUB (p), ctx);
+
+ if (debug_info)
+ {
+ tree *id_decl = unit_is_applied_identifier (p);
+
+ /* If the unit is an applied identifier after zero or more coercions. */
+ if (id_decl != NULL_TREE)
+ {
+ /* Return a compound_stmt
+
+ (var_decl for an object named ID_N, and value UNIT,
+ ID_N)
+ */
+ unit = save_expr (unit);
+ return fold_build2 (COMPOUND_EXPR, TREE_TYPE (unit),
+ build_decl (LOC (unit),
+ VAR_DECL,
+ DECL_NAME (id_decl) + "_" + ++(NAMECNT (TAX (id_decl))),
+ unit),
+ unit);
+ }
+ }
}
diff --git a/gcc/algol68/a68-types.h b/gcc/algol68/a68-types.h
index 9dc3d006e9f..6736c51ca18 100644
--- a/gcc/algol68/a68-types.h
+++ b/gcc/algol68/a68-types.h
@@ -638,6 +638,7 @@ struct GTY((chain_next ("%h.next"))) TAG_T
LOWERER_T lowerer;
TAG_T *next, *body;
const char *extern_symbol;
+ int name_counter;
};
#define NO_TAG ((TAG_T *) 0)
@@ -1021,6 +1022,7 @@ struct GTY(()) A68_T
#define MULTIPLE(p) ((p)->multiple_mode)
#define MULTIPLE_MODE(p) ((p)->multiple_mode)
#define NAME(p) ((p)->name)
+#define NAMECNT(p) ((p)->name_counter)
#define NEST(p) ((p)->nest)
#define NEST_PROC(p) ((p)->nest_proc)
#define NEXT(p) ((p)->next)
More information about the Algol68
mailing list