From 9e9567b22afa1a251cda6e35eaa300f84a3ffe77 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Wed, 25 Jun 2025 12:29:21 +0200 Subject: [PATCH] Port type objects are tagged * libguile/scm.h (scm_tc7_port_type): * libguile/ports-internal.h (struct scm_t_port_type): * libguile/ports.c (scm_make_port_type): These objects have been allocated pointerless since 2011, but since 2016 at least they have had SCM members. Oops! --- libguile/ports-internal.h | 1 + libguile/ports.c | 3 ++- libguile/scm.h | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/libguile/ports-internal.h b/libguile/ports-internal.h index 2b2ccc4fb..7b2bd68b2 100644 --- a/libguile/ports-internal.h +++ b/libguile/ports-internal.h @@ -42,6 +42,7 @@ typedef enum scm_t_port_type_flags { /* port-type description. */ struct scm_t_port_type { + scm_t_bits tag; char *name; int (*print) (SCM exp, SCM port, scm_print_state *pstate); diff --git a/libguile/ports.c b/libguile/ports.c index c2b79ab0e..d21786dc3 100644 --- a/libguile/ports.c +++ b/libguile/ports.c @@ -250,9 +250,10 @@ scm_make_port_type (char *name, { scm_t_port_type *desc; - desc = scm_allocate_pointerless (SCM_I_CURRENT_THREAD, sizeof (*desc)); + desc = scm_allocate_tagged (SCM_I_CURRENT_THREAD, sizeof (*desc)); memset (desc, 0, sizeof (*desc)); + desc->tag = scm_tc7_port_type; desc->name = name; desc->print = scm_port_print; desc->c_read = read; diff --git a/libguile/scm.h b/libguile/scm.h index 5509d239e..c887424ea 100644 --- a/libguile/scm.h +++ b/libguile/scm.h @@ -487,7 +487,7 @@ typedef uintptr_t scm_t_bits; #define scm_tc7_vm_cont 0x47 #define scm_tc7_bytevector 0x4d #define scm_tc7_thread 0x4f -#define scm_tc7_unused_55 0x55 +#define scm_tc7_port_type 0x55 #define scm_tc7_unused_57 0x57 #define scm_tc7_array 0x5d #define scm_tc7_bitvector 0x5f