This patch turns superfluous typedefs into struct forward-references,
and gets rid of a few unused macros.  It also moves some definitions
from the a68-types.h header to a68-parser-scope.

Signed-off-by: Jose E. Marchesi <[email protected]>

gcc/algol68/ChangeLog

        PR algol68/122954
        * a68-types.h (NO_A68_REF): Delete.
        (NO_ARRAY): Likewise.
        (NO_BOOK): Likewise.
        (NO_BOOL): Likewise.
        (NO_BYTE): Likewise.
        (NO_CONSTANT): Likewise.
        (NO_DEC): Likewise.
        (NO_EDLIN): Likewise.
        (NO_FILE): Likewise.
        (NO_FORMAT): Likewise.
        (NO_GPROC): Likewise.
        (NO_HANDLE): Likewise.
        (NO_INT): Likewise.
        (NO_JMP_BUF): Likewise.
        (NO_SCOPE): Moved to a68-parser-scope.cc.
        (NO_TUPLE): Likewise.
        (TUPLE): Likewise.
        (NO_GINFO): Converted from macro to contexpr.
        (NO_KEYWORD): Likewise.
        (NO_NINFO): Likewise.
        (NO_PACK): Likewise.
        (NO_SOID): Likewise.
        (NO_TOKEN): Likewise.
        (NO_NOTE): Likewise.
        (MODES_T): Turned from typedef to forward declaration.
        (NODE_T): Likewise.
        (MODE_CACHE_T): Likewise.
        (MOID_T): Likewise.
        (GINFO_T): Likewise.
        (KEYWORD_T): Likewise.
        (LINE_T): Likewise.
        (NODE_INFO_T): Likewise.
        (PACK_T): Likewise.
        (SOID_T): Likewise.
        (TABLE_T): Likewise.
        (TAG_T): Likewise.
        (TOKEN_T): Likewise.
        (ORIGIN_T): Likewise.
        (POSTULATE_T): Likewise.
        (OPTIONS_T): Likewise.
        (PARSER_T): Likewise.
        (MODULE_T): Likewise.
        (EXTRACT_T): Likewise.
        (MOIF_T): Likewise.
        (A68_T): Likewise.
        * a68-parser-scope.cc (NO_TUPLE): Moved from a68-types.h
        (NO_SCOPE): Likewise.
        (TUPLE): Likewise.
---
 gcc/algol68/a68-parser-scope.cc |  8 +--
 gcc/algol68/a68-types.h         | 88 ++++++++++++---------------------
 2 files changed, 37 insertions(+), 59 deletions(-)

diff --git a/gcc/algol68/a68-parser-scope.cc b/gcc/algol68/a68-parser-scope.cc
index ad542ed3a15..e76a3c04409 100644
--- a/gcc/algol68/a68-parser-scope.cc
+++ b/gcc/algol68/a68-parser-scope.cc
@@ -29,9 +29,6 @@
 
 #include "a68.h"
 
-typedef struct TUPLE_T TUPLE_T;
-typedef struct SCOPE_T SCOPE_T;
-
 struct TUPLE_T
 {
   int level;
@@ -45,6 +42,11 @@ struct SCOPE_T
   SCOPE_T *next;
 };
 
+constexpr TUPLE_T *NO_TUPLE = nullptr;
+constexpr SCOPE_T *NO_SCOPE = nullptr;
+
+#define TUPLE(p) ((p)->tuple)
+
 enum { NOT_TRANSIENT = 0, TRANSIENT };
 
 static void gather_scopes_for_youngest (NODE_T *, SCOPE_T **);
diff --git a/gcc/algol68/a68-types.h b/gcc/algol68/a68-types.h
index df9133fb12f..06d05e7f8f5 100644
--- a/gcc/algol68/a68-types.h
+++ b/gcc/algol68/a68-types.h
@@ -75,61 +75,38 @@ enum a68_tree_index
 
 typedef char BUFFER[BUFFER_SIZE + 1];
 
-typedef struct MODES_T MODES_T;
-typedef struct NODE_T NODE_T;
-typedef struct MODE_CACHE_T MODE_CACHE_T;
-typedef struct MOID_T MOID_T;
-typedef struct GINFO_T GINFO_T;
-typedef struct KEYWORD_T KEYWORD_T;
-typedef struct LINE_T LINE_T;
-typedef struct NODE_INFO_T NODE_INFO_T;
-typedef struct PACK_T PACK_T;
-typedef struct SOID_T SOID_T;
-typedef struct TABLE_T TABLE_T;
-typedef struct TAG_T TAG_T;
-typedef struct TOKEN_T TOKEN_T;
-typedef struct ORIGIN_T ORIGIN_T;
-typedef struct POSTULATE_T POSTULATE_T;
-typedef struct OPTIONS_T OPTIONS_T;
-typedef struct PARSER_T PARSER_T;
-typedef struct MODULE_T MODULE_T;
-typedef struct EXTRACT_T EXTRACT_T;
-typedef struct MOIF_T MOIF_T;
-typedef struct A68_T A68_T;
-
-#define NO_A68_REF ((A68_REF *) 0)
-#define NO_ARRAY ((A68_ARRAY *) 0)
-#define NO_BOOK ((BOOK_T *) 0)
-#define NO_BOOL ((bool *) 0)
-#define NO_BYTE ((BYTE_T *) 0)
-#define NO_CONSTANT ((void *) 0)
-#define NO_DEC ((DEC_T *) 0)
-#define NO_EDLIN ((EDLIN_T *) 0)
-#define NO_FILE ((FILE *) 0)
-#define NO_FORMAT ((A68_FORMAT *) 0)
-#define NO_GINFO ((GINFO_T *) 0)
-#define NO_GPROC ((void (*) (NODE_T *)) 0)
-#define NO_HANDLE ((A68_HANDLE *) 0)
-#define NO_INT ((int *) 0)
-#define NO_JMP_BUF ((jmp_buf *) 0)
-#define NO_KEYWORD ((KEYWORD_T *) 0)
-#define NO_NINFO ((NODE_INFO_T *) 0)
-#define NO_NOTE ((void (*) (NODE_T *)) 0)
-#define NO_OPTION_LIST ((OPTION_LIST_T *) 0)
-#define NO_PACK ((PACK_T *) 0)
-#define NO_PPROC ((PROP_T (*) (NODE_T *)) 0)
-#define NO_PROCEDURE ((A68_PROCEDURE *) 0)
-#define NO_REAL ((REAL_T *) 0)
-#define NO_REFINEMENT ((REFINEMENT_T *) 0)
-#define NO_REGMATCH ((regmatch_t *) 0)
-#define NO_SCOPE ((SCOPE_T *) 0)
-#define NO_SOID ((SOID_T *) 0)
-#define NO_STREAM NO_FILE
-#define NO_TEXT ((char *) 0)
-#define NO_TICK ((bool *) 0)
-#define NO_TOKEN ((TOKEN_T *) 0)
-#define NO_TUPLE ((A68_TUPLE *) 0)
-#define NO_VAR (0)
+struct MODES_T;
+struct NODE_T;
+struct MODE_CACHE_T;
+struct MOID_T;
+struct GINFO_T;
+struct KEYWORD_T;
+struct LINE_T;
+struct NODE_INFO_T;
+struct PACK_T;
+struct SOID_T;
+struct TABLE_T;
+struct TAG_T;
+struct TOKEN_T;
+struct ORIGIN_T;
+struct POSTULATE_T;
+struct OPTIONS_T;
+struct PARSER_T;
+struct MODULE_T;
+struct EXTRACT_T;
+struct MOIF_T;
+struct A68_T;
+
+constexpr GINFO_T *NO_GINFO = nullptr;
+constexpr KEYWORD_T *NO_KEYWORD = nullptr;
+constexpr NODE_INFO_T *NO_NINFO = nullptr;
+constexpr void (*NO_NOTE) (NODE_T *) = nullptr;
+constexpr PACK_T *NO_PACK = nullptr;
+constexpr SOID_T *NO_SOID = nullptr;
+constexpr char *NO_TEXT = nullptr;
+constexpr bool *NO_TICK = nullptr;
+constexpr TOKEN_T *NO_TOKEN = nullptr;
+#define NO_VAR nullptr
 
 /* A STATUS_MASK_T is a word of flags denoting states.
 
@@ -1123,7 +1100,6 @@ struct GTY(()) A68_T
 #define TRANSIENT(p) ((p)->transient)
 #define TREE_LISTING_SAFE(p) ((p)->tree_listing_safe)
 #define TRIM(p) ((p)->trim)
-#define TUPLE(p) ((p)->tuple)
 #define UNIT(p) ((p)->unit)
 #define USE(p) ((p)->use)
 #define VALUE(p) ((p)->value)
-- 
2.30.2

Reply via email to