mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-07 16:52:23 +02:00
Publish the maximum number of port types as `SCM_I_MAX_PORT_TYPE_COUNT'.
* libguile/goops.c (create_port_classes): Use `SCM_I_MAX_PORT_TYPE_COUNT' instead of a hard-wired 256. * libguile/objects.h (SCM_OUT_PCLASS_INDEX, SCM_INOUT_PCLASS_INDEX): Likewise. * libguile/ports.c (scm_make_port_type): Likewise. * libguile/ports.h (SCM_I_MAX_PORT_TYPE_COUNT): New macro.
This commit is contained in:
parent
474554694f
commit
0953b54946
4 changed files with 14 additions and 10 deletions
|
@ -2741,9 +2741,10 @@ create_port_classes (void)
|
|||
{
|
||||
long i;
|
||||
|
||||
scm_port_class = (SCM *) scm_malloc (3 * 256 * sizeof (SCM));
|
||||
for (i = 0; i < 3 * 256; ++i)
|
||||
scm_port_class[i] = 0;
|
||||
/* Allocate 3 times the maximum number of port types so that input ports,
|
||||
output ports, and in/out ports can be stored at different offsets. See
|
||||
`SCM_IN_PCLASS_INDEX' et al. */
|
||||
scm_port_class = scm_calloc (3 * SCM_I_MAX_PORT_TYPE_COUNT * sizeof (SCM));
|
||||
|
||||
for (i = 0; i < scm_numptob; ++i)
|
||||
scm_make_port_classes (i, SCM_PTOBNAME (i));
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#ifndef SCM_OBJECTS_H
|
||||
#define SCM_OBJECTS_H
|
||||
|
||||
/* Copyright (C) 1996,1999,2000,2001, 2003, 2006, 2008 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1996,1999,2000,2001, 2003, 2006, 2008, 2009 Free Software Foundation, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -171,9 +171,9 @@ typedef struct scm_effective_slot_definition {
|
|||
#define SCM_CMETHOD_ENV(cmethod) SCM_CAR (cmethod)
|
||||
|
||||
/* Port classes */
|
||||
#define SCM_IN_PCLASS_INDEX 0x000
|
||||
#define SCM_OUT_PCLASS_INDEX 0x100
|
||||
#define SCM_INOUT_PCLASS_INDEX 0x200
|
||||
#define SCM_IN_PCLASS_INDEX 0
|
||||
#define SCM_OUT_PCLASS_INDEX SCM_I_MAX_PORT_TYPE_COUNT
|
||||
#define SCM_INOUT_PCLASS_INDEX (2 * SCM_I_MAX_PORT_TYPE_COUNT)
|
||||
|
||||
/* Plugin proxy classes for basic types. */
|
||||
SCM_API SCM scm_metaclass_standard;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 1995,1996,1997,1998,1999,2000,2001, 2003, 2004, 2006, 2007, 2008 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1995,1996,1997,1998,1999,2000,2001, 2003, 2004, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -134,7 +134,7 @@ scm_make_port_type (char *name,
|
|||
void (*write) (SCM port, const void *data, size_t size))
|
||||
{
|
||||
char *tmp;
|
||||
if (255 <= scm_numptob)
|
||||
if (SCM_I_MAX_PORT_TYPE_COUNT - 1 <= scm_numptob)
|
||||
goto ptoberr;
|
||||
SCM_CRITICAL_SECTION_START;
|
||||
tmp = (char *) scm_gc_realloc ((char *) scm_ptobs,
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#ifndef SCM_PORTS_H
|
||||
#define SCM_PORTS_H
|
||||
|
||||
/* Copyright (C) 1995,1996,1997,1998,1999,2000,2001, 2003, 2004, 2006, 2008 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1995,1996,1997,1998,1999,2000,2001, 2003, 2004, 2006, 2008, 2009 Free Software Foundation, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -162,6 +162,9 @@ SCM_INTERNAL SCM scm_i_port_weak_hash;
|
|||
#define SCM_DECCOL(port) {if (SCM_COL (port) > 0) SCM_COL (port) -= 1;}
|
||||
#define SCM_TABCOL(port) {SCM_COL (port) += 8 - SCM_COL (port) % 8;}
|
||||
|
||||
/* Maximum number of port types. */
|
||||
#define SCM_I_MAX_PORT_TYPE_COUNT 256
|
||||
|
||||
|
||||
|
||||
/* port-type description. */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue