[COMMITTED] a68: use GC for parser node memory management

Jose E. Marchesi jemarch@gnu.org
Sat Nov 22 16:06:18 GMT 2025


---
 gcc/algol68/a68-exports.cc          | 85 ++++++++---------------------
 gcc/algol68/a68-imports.cc          | 26 ++++-----
 gcc/algol68/a68-lang.cc             |  6 +-
 gcc/algol68/a68-low-ranges.cc       |  4 +-
 gcc/algol68/a68-parser-bottom-up.cc |  1 -
 gcc/algol68/a68-parser-scanner.cc   |  3 +-
 gcc/algol68/a68-parser.cc           | 14 ++---
 gcc/algol68/a68-types.h             | 39 +++++++------
 gcc/algol68/config-lang.in          |  2 +-
 9 files changed, 72 insertions(+), 108 deletions(-)

diff --git a/gcc/algol68/a68-exports.cc b/gcc/algol68/a68-exports.cc
index 3092467a730..99ac1d200c2 100644
--- a/gcc/algol68/a68-exports.cc
+++ b/gcc/algol68/a68-exports.cc
@@ -52,64 +52,28 @@
 MOIF_T *
 a68_moif_new (const char *module_name)
 {
-  MOIF_T *moif = (MOIF_T *) xmalloc (sizeof (MOIF_T));
+  MOIF_T *moif = ggc_cleared_alloc<MOIF_T> ();
 
   VERSION (moif) = GA68_EXPORTS_VERSION;
   NAME (moif) = (module_name == NULL ? NULL : xstrdup (module_name));
   PRELUDE (moif) = NULL;
   POSTLUDE (moif) = NULL;
-  MODES (moif).create (16);
-  MODULES (moif).create (16);
-  IDENTIFIERS (moif).create (16);
-  INDICANTS (moif).create (16);
-  PRIOS (moif).create (16);
-  OPERATORS (moif).create (16);
+  vec_alloc (MODES (moif), 16);
+  vec_alloc (MODULES (moif), 16);
+  vec_alloc (IDENTIFIERS (moif), 16);
+  vec_alloc (INDICANTS (moif), 16);
+  vec_alloc (PRIOS (moif), 16);
+  vec_alloc (OPERATORS (moif), 16);
   return moif;
 }
 
-/* Free resources used by a moif.  */
-
-void
-a68_moif_free (MOIF_T *moif)
-{
-  free (NAME (moif));
-  free (PRELUDE (moif));
-  free (POSTLUDE (moif));
-  for (EXTRACT_T *e : MODULES (moif))
-    {
-      free (EXTRACT_SYMBOL (e));
-      free (e);
-    }
-  for (EXTRACT_T *e : INDICANTS (moif))
-    {
-      free (EXTRACT_SYMBOL (e));
-      free (e);
-    }
-  for (EXTRACT_T *e : IDENTIFIERS (moif))
-    {
-      free (EXTRACT_SYMBOL (e));
-      free (e);
-    }
-  for (EXTRACT_T *e : PRIOS (moif))
-    {
-      free (EXTRACT_SYMBOL (e));
-      free (e);
-    }
-  for (EXTRACT_T *e : OPERATORS (moif))
-    {
-      free (EXTRACT_SYMBOL (e));
-      free (e);
-    }
-  free (moif);
-}
-
 /* Add a new mode to a module interface.  */
 
 static void
 a68_add_moid_to_moif (MOIF_T *moif, MOID_T *m)
 {
-  if (! MODES(moif).contains (m))
-    MODES (moif).safe_push (m);
+  if (! MODES(moif)->contains (m))
+    vec_safe_push (MODES (moif), m);
 }
 
 /* Add a new identifier extract to a module interface.  */
@@ -117,7 +81,7 @@ a68_add_moid_to_moif (MOIF_T *moif, MOID_T *m)
 void
 a68_add_identifier_to_moif (MOIF_T *moif, TAG_T *tag)
 {
-  EXTRACT_T *e = (EXTRACT_T *) xmalloc (sizeof (struct EXTRACT_T));
+  EXTRACT_T *e = ggc_alloc<EXTRACT_T> ();
   const char *tag_symbol = IDENTIFIER_POINTER (DECL_NAME (TAX_TREE_DECL (tag)));
 
   EXTRACT_KIND (e) = GA68_EXTRACT_IDEN;
@@ -127,10 +91,10 @@ a68_add_identifier_to_moif (MOIF_T *moif, TAG_T *tag)
   EXTRACT_VARIABLE (e) = VARIABLE (tag);
   EXTRACT_IN_PROC (e) = IN_PROC (tag);
 
-  if (! IDENTIFIERS (moif).contains (e))
+  if (! IDENTIFIERS (moif)->contains (e))
     {
       a68_add_moid_to_moif (moif, MOID (tag));
-      IDENTIFIERS (moif).safe_push (e);
+      vec_safe_push (IDENTIFIERS (moif), e);
     }
 }
 
@@ -139,7 +103,7 @@ a68_add_identifier_to_moif (MOIF_T *moif, TAG_T *tag)
 static void
 a68_add_indicant_to_moif (MOIF_T *moif, TAG_T *tag)
 {
-  EXTRACT_T *e = (EXTRACT_T *) xmalloc (sizeof (struct EXTRACT_T));
+  EXTRACT_T *e = ggc_alloc<EXTRACT_T> ();
   /* Mode tags are not associated with declarations, so we have to do the
      mangling here.  */
   tree id = a68_get_mangled_indicant (NSYMBOL (NODE (tag)), NAME (moif));
@@ -152,10 +116,10 @@ a68_add_indicant_to_moif (MOIF_T *moif, TAG_T *tag)
   EXTRACT_VARIABLE (e) = false;
   EXTRACT_IN_PROC (e) = false;
 
-  if (! INDICANTS (moif).contains (e))
+  if (! INDICANTS (moif)->contains (e))
     {
       a68_add_moid_to_moif (moif, MOID (tag));
-      INDICANTS (moif).safe_push (e);
+      vec_safe_push (INDICANTS (moif), e);
     }
 }
 
@@ -164,7 +128,7 @@ a68_add_indicant_to_moif (MOIF_T *moif, TAG_T *tag)
 static void
 a68_add_module_to_moif (MOIF_T *moif, TAG_T *tag)
 {
-  EXTRACT_T *e = (EXTRACT_T *) xmalloc (sizeof (struct EXTRACT_T));
+  EXTRACT_T *e = ggc_alloc<EXTRACT_T> ();
   /* Module tags are not associated with declarations, so we have to do the
      mangling here.  */
   tree id = a68_get_mangled_indicant (NSYMBOL (NODE (tag)), NAME (moif));
@@ -177,8 +141,8 @@ a68_add_module_to_moif (MOIF_T *moif, TAG_T *tag)
   EXTRACT_VARIABLE (e) = false;
   EXTRACT_IN_PROC (e) = false;
 
-  if (! MODULES (moif).contains (e))
-    MODULES (moif).safe_push (e);
+  if (! MODULES (moif)->contains (e))
+    vec_safe_push (MODULES (moif), e);
 }
 
 /* Add a new priority extract to a module interface.  */
@@ -186,7 +150,7 @@ a68_add_module_to_moif (MOIF_T *moif, TAG_T *tag)
 static void
 a68_add_prio_to_moif (MOIF_T *moif, TAG_T *tag)
 {
-  EXTRACT_T *e = (EXTRACT_T *) xmalloc (sizeof (struct EXTRACT_T));
+  EXTRACT_T *e = ggc_alloc<EXTRACT_T> ();
   /* Priority tags are not associated with declarations, so we have to do the
      mangling here.  */
   tree id = a68_get_mangled_indicant (NSYMBOL (NODE (tag)), NAME (moif));
@@ -199,8 +163,8 @@ a68_add_prio_to_moif (MOIF_T *moif, TAG_T *tag)
   EXTRACT_VARIABLE (e) = false;
   EXTRACT_IN_PROC (e) = false;
 
-  if (! PRIOS (moif).contains (e))
-    PRIOS (moif).safe_push (e);
+  if (! PRIOS (moif)->contains (e))
+    vec_safe_push (PRIOS (moif), e);
 }
 
 /* Add a new operator extract to a module interface.  */
@@ -208,7 +172,7 @@ a68_add_prio_to_moif (MOIF_T *moif, TAG_T *tag)
 static void
 a68_add_operator_to_moif (MOIF_T *moif, TAG_T *tag)
 {
-  EXTRACT_T *e = (EXTRACT_T *) xmalloc (sizeof (struct EXTRACT_T));
+  EXTRACT_T *e = ggc_alloc<EXTRACT_T> ();
   const char *tag_symbol = IDENTIFIER_POINTER (DECL_NAME (TAX_TREE_DECL (tag)));
 
   EXTRACT_KIND (e) = GA68_EXTRACT_OPER;
@@ -220,10 +184,10 @@ a68_add_operator_to_moif (MOIF_T *moif, TAG_T *tag)
   gcc_assert (EXTRACT_VARIABLE (e) == false);
   EXTRACT_IN_PROC (e) = IN_PROC (tag);
 
-  if (! OPERATORS (moif).contains (e))
+  if (! OPERATORS (moif)->contains (e))
     {
       a68_add_moid_to_moif (moif, MOID (tag));
-      OPERATORS (moif).safe_push (e);
+      vec_safe_push (OPERATORS (moif), e);
     }
 }
 
@@ -625,7 +589,6 @@ a68_do_exports (NODE_T *p)
 	      a68_asm_output_moif (moif);
 	      if (flag_a68_dump_moif)
 		a68_dump_moif (moif);
-	      a68_moif_free (moif);
 	    }
 	}
       else
diff --git a/gcc/algol68/a68-imports.cc b/gcc/algol68/a68-imports.cc
index 55fdfb6ac22..fd1414be4c8 100644
--- a/gcc/algol68/a68-imports.cc
+++ b/gcc/algol68/a68-imports.cc
@@ -811,14 +811,15 @@ a68_replace_submode (MOID_T *t, MOID_T *m, MOID_T *r)
    The entry for M in MODES_LIST is set to NO_MOID.  */
 
 static void
-a68_replace_equivalent_mode (vec<MOID_T*> mode_list, MOID_T *m, MOID_T *r)
+a68_replace_equivalent_mode (vec<MOID_T*,va_gc> *mode_list,
+			     MOID_T *m, MOID_T *r)
 {
-  for (size_t i = 0; i < mode_list.length (); ++i)
+  for (size_t i = 0; i < mode_list->length (); ++i)
     {
-      if (mode_list[i] == m)
-	mode_list[i] = NO_MOID;
-      else if (mode_list[i] != NO_MOID)
-	a68_replace_submode (mode_list[i], m, r);
+      if ((*mode_list)[i] == m)
+	(*mode_list)[i] = NO_MOID;
+      else if ((*mode_list)[i] != NO_MOID)
+	a68_replace_submode ((*mode_list)[i], m, r);
     }
 }
 
@@ -973,7 +974,7 @@ a68_decode_modes (MOIF_T *moif, encoded_modes_map_t &encoded_modes,
   for (auto entry : encoded_modes)
     {
       struct encoded_mode *em = entry.second;
-      MODES (moif).safe_push (em->moid);
+      vec_safe_push (MODES (moif), em->moid);
     }
 
   /* Next step is to see if equivalent modes the any of the modes in the moif
@@ -1048,7 +1049,7 @@ a68_decode_extracts (MOIF_T *moif, encoded_modes_map_t &encoded_modes,
 	  EXTRACT_PRIO (e) = 0;
 	  EXTRACT_VARIABLE (e) = false;
 	  EXTRACT_IN_PROC (e) = false;
-	  MODULES (moif).safe_push (e);
+	  vec_safe_push (MODULES (moif), e);
 	  break;
 	case GA68_EXTRACT_IDEN:
 	  DSTR (name);
@@ -1067,7 +1068,7 @@ a68_decode_extracts (MOIF_T *moif, encoded_modes_map_t &encoded_modes,
 	  EXTRACT_PRIO (e) = 0;
 	  EXTRACT_VARIABLE (e) = variable;
 	  EXTRACT_IN_PROC (e) = in_proc;
-	  IDENTIFIERS (moif).safe_push (e);
+	  vec_safe_push (IDENTIFIERS (moif), e);
 	  break;
 	case GA68_EXTRACT_MODE:
 	  DSTR (name);
@@ -1084,7 +1085,7 @@ a68_decode_extracts (MOIF_T *moif, encoded_modes_map_t &encoded_modes,
 	  EXTRACT_PRIO (e) = 0;
 	  EXTRACT_VARIABLE (e) = false;
 	  EXTRACT_IN_PROC (e) = false;
-	  INDICANTS (moif).safe_push (e);
+	  vec_safe_push (INDICANTS (moif), e);
 	  break;
 	case GA68_EXTRACT_PRIO:
 	  DSTR (name);
@@ -1101,7 +1102,7 @@ a68_decode_extracts (MOIF_T *moif, encoded_modes_map_t &encoded_modes,
 	  EXTRACT_PRIO (e) = prio;
 	  EXTRACT_VARIABLE (e) = false;
 	  EXTRACT_IN_PROC (e) = false;
-	  PRIOS (moif).safe_push (e);
+	  vec_safe_push (PRIOS (moif), e);
 	  break;
 	case GA68_EXTRACT_OPER:
 	  DSTR (name);
@@ -1120,7 +1121,7 @@ a68_decode_extracts (MOIF_T *moif, encoded_modes_map_t &encoded_modes,
 	  EXTRACT_PRIO (e) = 0;
 	  EXTRACT_VARIABLE (e) = variable;
 	  EXTRACT_IN_PROC (e) = in_proc;
-	  OPERATORS (moif).safe_push (e);
+	  vec_safe_push (OPERATORS (moif), e);
 	  break;
 	default:
 	  *errstr = "invalid marker in extract";
@@ -1210,7 +1211,6 @@ a68_decode_moif (const char *data, size_t size, const char **errstr)
  decode_error:
   if (*errstr == NULL)
     *errstr = "premature end of data";
-  a68_moif_free (moif);
   return NULL;
 }
 
diff --git a/gcc/algol68/a68-lang.cc b/gcc/algol68/a68-lang.cc
index 2cbafd49382..4cb1d931b65 100644
--- a/gcc/algol68/a68-lang.cc
+++ b/gcc/algol68/a68-lang.cc
@@ -32,8 +32,6 @@
 #include "stor-layout.h" /* For layout_type */
 #include "vec.h"
 
-#include <string>
-
 #include "a68.h"
 
 /* Global state for the Algol 68 front end.  */
@@ -56,12 +54,12 @@ tree a68_global_trees[ATI_MAX];
 
 struct GTY(()) lang_type
 {
-  MOID_T * GTY((skip)) moid;
+  MOID_T * moid;
 };
 
 struct GTY(()) lang_decl
 {
-  NODE_T * GTY((skip)) node;
+  NODE_T * node;
 };
 
 /* Language-specific identifier information.  This must include a
diff --git a/gcc/algol68/a68-low-ranges.cc b/gcc/algol68/a68-low-ranges.cc
index 8b9a802b249..9a2008aa571 100644
--- a/gcc/algol68/a68-low-ranges.cc
+++ b/gcc/algol68/a68-low-ranges.cc
@@ -530,7 +530,7 @@ a68_push_serial_clause_range (MOID_T *clause_mode,
 					clause_type);
   char *clause_result_name = xasprintf ("clause_result%d%%", DECL_UID (clause_result_decl));
   DECL_NAME (clause_result_decl) = get_identifier (clause_result_name);
-  free (clause_result_name);
+  //  free (clause_result_name);
   DECL_INITIAL (clause_result_decl) = a68_get_skip_tree (clause_mode);
   DECL_CONTEXT (clause_result_decl) = current_range->context;
   current_range->clause_result_decl = clause_result_decl;
@@ -695,3 +695,5 @@ a68_init_ranges (void)
   global_range->context = build_translation_unit_decl (NULL);
   current_range = global_range;
 }
+
+#include "gt-algol68-a68-low-ranges.h"
diff --git a/gcc/algol68/a68-parser-bottom-up.cc b/gcc/algol68/a68-parser-bottom-up.cc
index 68c735a5327..a87a94007b7 100644
--- a/gcc/algol68/a68-parser-bottom-up.cc
+++ b/gcc/algol68/a68-parser-bottom-up.cc
@@ -3019,7 +3019,6 @@ a68_bottom_up_coalesce_pub (NODE_T *p)
 	      /* Unlink the PUBLIC_SYMBOL node and get rid of it.  */
 	      SUB (p) = NEXT (public_symbol);
 	      PREVIOUS (NEXT (public_symbol)) = NO_NODE;
-	      free (public_symbol);
 	    }
 	}
       a68_bottom_up_coalesce_pub (SUB (p));
diff --git a/gcc/algol68/a68-parser-scanner.cc b/gcc/algol68/a68-parser-scanner.cc
index 87708f2c650..c0edb6685fc 100644
--- a/gcc/algol68/a68-parser-scanner.cc
+++ b/gcc/algol68/a68-parser-scanner.cc
@@ -189,7 +189,7 @@ restore_state (LINE_T **ref_l, char **ref_s, char *ch)
 static LINE_T *
 new_source_line (void)
 {
-  LINE_T *z = (LINE_T *) xmalloc (sizeof (LINE_T));
+  LINE_T *z = ggc_cleared_alloc<LINE_T> ();
 
   MARKER (z)[0] = '\0';
   STRING (z) = NO_TEXT;
@@ -2330,7 +2330,6 @@ a68_lexical_analyser (const char *filename)
 		PREVIOUS (NEXT (p)) = PREVIOUS (p);
 
 	      NODE_T *next = NEXT (p);
-	      free (p);
 	      p = next;
 	    }
 	  else
diff --git a/gcc/algol68/a68-parser.cc b/gcc/algol68/a68-parser.cc
index 1f59177c81b..f01ecbee434 100644
--- a/gcc/algol68/a68-parser.cc
+++ b/gcc/algol68/a68-parser.cc
@@ -615,7 +615,7 @@ a68_parser (const char *filename)
 NODE_INFO_T *
 a68_new_node_info (void)
 {
-  NODE_INFO_T *z = (NODE_INFO_T *) xmalloc (sizeof (NODE_INFO_T));
+  NODE_INFO_T *z = ggc_cleared_alloc<NODE_INFO_T> ();
 
   A68 (new_node_infos)++;
   PROCEDURE_LEVEL (z) = 0;
@@ -638,7 +638,7 @@ a68_new_node_info (void)
 GINFO_T *
 a68_new_genie_info (void)
 {
-  GINFO_T *z = (GINFO_T *) xmalloc (sizeof (GINFO_T));
+  GINFO_T *z = ggc_cleared_alloc<GINFO_T> ();
 
   A68 (new_genie_infos)++;
   PARTIAL_PROC (z) = NO_MOID;
@@ -651,7 +651,7 @@ a68_new_genie_info (void)
 NODE_T *
 a68_new_node (void)
 {
-  NODE_T *z = (NODE_T *) xmalloc (sizeof (NODE_T));
+  NODE_T *z = ggc_cleared_alloc<NODE_T> ();
 
   A68 (new_nodes)++;
   TABLE (z) = NO_TABLE;
@@ -691,7 +691,7 @@ a68_some_node (const char *t)
 TABLE_T *
 a68_new_symbol_table (TABLE_T *p)
 {
-  TABLE_T *z = (TABLE_T *) xmalloc (sizeof (TABLE_T));
+  TABLE_T *z = ggc_cleared_alloc<TABLE_T> ();
 
   NUM (z) = A68 (symbol_table_count);
   LEVEL (z) = A68 (symbol_table_count)++;
@@ -720,7 +720,7 @@ a68_new_symbol_table (TABLE_T *p)
 MOID_T *
 a68_new_moid (void)
 {
-  MOID_T *z = (MOID_T *) xmalloc (sizeof (MOID_T));
+  MOID_T *z = ggc_cleared_alloc<MOID_T> ();
 
   A68 (new_modes)++;
   ATTRIBUTE (z) = 0;
@@ -750,7 +750,7 @@ a68_new_moid (void)
 PACK_T *
 a68_new_pack (void)
 {
-  PACK_T *z = (PACK_T *) xmalloc (sizeof (PACK_T));
+  PACK_T *z = ggc_cleared_alloc<PACK_T> ();
 
   MOID (z) = NO_MOID;
   TEXT (z) = NO_TEXT;
@@ -765,7 +765,7 @@ a68_new_pack (void)
 TAG_T *
 a68_new_tag (void)
 {
-  TAG_T *z = (TAG_T *) xmalloc (sizeof (TAG_T));
+  TAG_T *z = ggc_cleared_alloc<TAG_T> ();
 
   STATUS (z) = NULL_MASK;
   TAG_TABLE (z) = NO_TABLE;
diff --git a/gcc/algol68/a68-types.h b/gcc/algol68/a68-types.h
index f96afa0ff2c..fd9d90c9b3e 100644
--- a/gcc/algol68/a68-types.h
+++ b/gcc/algol68/a68-types.h
@@ -22,6 +22,9 @@
 #ifndef __A68_TYPES_H__
 #define __A68_TYPES_H__
 
+#include "config.h"
+#include "system.h"
+
 #include <setjmp.h>
 #include "vec.h"
 
@@ -236,7 +239,7 @@ struct KEYWORD_T
 
 #define NO_MOID ((MOID_T *) 0)
 
-struct MOID_T
+struct GTY(()) MOID_T
 {
   int number;
   int attribute;
@@ -431,7 +434,7 @@ struct OPTIONS_T
    CDECL is a GCC GENERIC tree corresponding to a DECL_FIELD for FIELD
    nodes.  */
 
-struct NODE_T
+struct GTY(()) NODE_T
 {
   GINFO_T *genie;
   int number;
@@ -475,7 +478,7 @@ struct NODE_T
    This is set for tree nodes representing tokens and is set by the
    parser-scanner.  */
 
-struct NODE_INFO_T
+struct GTY(()) NODE_INFO_T
 {
   int procedure_level;
   int priority;
@@ -492,12 +495,12 @@ struct NODE_INFO_T
   LINE_T *line;
 };
 
-struct GINFO_T
+struct GTY(()) GINFO_T
 {
   MOID_T *partial_proc, *partial_locale;
 };
 
-struct PACK_T
+struct GTY(()) PACK_T
 {
   MOID_T *type;
   const char *text;
@@ -523,7 +526,7 @@ struct SOID_T
   SOID_T *next;
 };
 
-struct LINE_T
+struct GTY(()) LINE_T
 {
   char marker[6], *string;
   const char *filename;
@@ -539,7 +542,7 @@ struct LINE_T
    ranges will be put in the top-level block.  This is used for top-level
    module declarations.  */
 
-struct TABLE_T
+struct GTY(()) TABLE_T
 {
   int num, level, nest, attribute;
   bool initialise_frame, initialise_anon, proc_ops, public_range;
@@ -610,7 +613,7 @@ struct TABLE_T
    LOWERER is a lowering routine defined in a68-low-prelude.cc.  These are used
    in taxes that denote some pre-defined operator.  */
 
-struct TAG_T
+struct GTY(()) TAG_T
 {
   TABLE_T *symbol_table;
   MOID_T *type;
@@ -673,9 +676,9 @@ struct MODULE_T
    set, the exported symbol shall not be indirected.  This is compiler-specific
    and part of mdextra.  */
 
-struct EXTRACT_T
+struct GTY(()) EXTRACT_T
 {
-  uint8_t kind;
+  unsigned int kind;
   char *symbol;
   MOID_T *mode;
   int priority;
@@ -702,18 +705,18 @@ struct EXTRACT_T
 
 #define NO_MOIF ((MOIF_T *) 0)
 
-struct MOIF_T
+struct GTY(()) MOIF_T
 {
-  uint16_t version;
+  unsigned int version;
   char *name;
   char *prelude;
   char *postlude;
-  vec<MOID_T*> modes;
-  vec<EXTRACT_T*> modules;
-  vec<EXTRACT_T*> indicants;
-  vec<EXTRACT_T*> identifiers;
-  vec<EXTRACT_T*> prios;
-  vec<EXTRACT_T*> operators;
+  vec<MOID_T*,va_gc> *modes;
+  vec<EXTRACT_T*,va_gc> *modules;
+  vec<EXTRACT_T*,va_gc> *indicants;
+  vec<EXTRACT_T*,va_gc> *identifiers;
+  vec<EXTRACT_T*,va_gc> *prios;
+  vec<EXTRACT_T*,va_gc> *operators;
 };
 
 struct MODE_CACHE_T
diff --git a/gcc/algol68/config-lang.in b/gcc/algol68/config-lang.in
index 88370b06cad..881bd033ea8 100644
--- a/gcc/algol68/config-lang.in
+++ b/gcc/algol68/config-lang.in
@@ -24,6 +24,6 @@
 
 language="algol68"
 compilers="a681\$(exeext)"
-gtfiles="\$(srcdir)/algol68/a68-lang.cc"
+gtfiles="\$(srcdir)/algol68/a68-types.h \$(srcdir)/algol68/a68.h \$(srcdir)/algol68/a68-lang.cc \$(srcdir)/algol68/a68-low-ranges.cc"
 
 target_libs="target-libga68"
-- 
2.30.2



More information about the Algol68 mailing list