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