[gcc r16-5851] a68: small C++ improvements [PR algol68/122954]
Jose E. Marchesi
jemarch@gcc.gnu.org
Wed Dec 3 11:59:59 GMT 2025
https://gcc.gnu.org/g:054732562874062fe7aa7184a0056394de9f0b4f
commit r16-5851-g054732562874062fe7aa7184a0056394de9f0b4f
Author: Jose E. Marchesi <jose.marchesi@oracle.com>
Date: Wed Dec 3 12:49:32 2025 +0100
a68: small C++ improvements [PR algol68/122954]
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 <jemarch@gnu.org>
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.
Diff:
---
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 ad542ed3a150..e76a3c044097 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 df9133fb12fe..06d05e7f8f53 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)
More information about the Gcc-cvs
mailing list