Skip to content
  • Andy Wingo's avatar
    Use heap-allocated port types instead of ptobnums · cd51ce81
    Andy Wingo authored
    This removes a limitation on the number of port types, simplifies the
    API, and removes a central point of coordination.
    
    * libguile/ports-internal.h (struct scm_t_port_type): Rename from
      scm_t_ptob_descriptor, now that it's private.  Add GOOPS class
      fields.
      (struct scm_t_port): Rename from struct scm_port, especially
      considering that deprecated.h redefines scm_port using the
      preprocessor :(.
    * libguile/ports.h: Add definitions of SCM_PORT and SCM_PORT_TYPE,
      though the scm_t_port and scm_t_port_type types are incomplete.
      (SCM_TC2PTOBNUM, SCM_PTOBNUM, SCM_PTOBNAME): Remove, as there are no
      more typecodes for port types.
      (scm_c_num_port_types, scm_c_port_type_ref, scm_c_port_type_add_x):
      Remove.
      (scm_make_port_type): Return a scm_t_port_type*.  All methods adapted
      to take a scm_t_port_type* instead of a ptobnum.
      (scm_c_make_port_with_encoding, scm_c_make_port): Take a port type
      pointer instead of a tag.
      (scm_new_port_table_entry): Remove; not useful.
    * libguile/ports.c: Remove things related to the port kind table.  Adapt
      uses of SCM_PORT_DESCRIPTOR / scm_t_ptob_descriptor to use
      SCM_PORT_TYPE and scm_t_port_type.
    * libguile/deprecated.c:
    * libguile/deprecated.h:
    * libguile/filesys.c:
    * libguile/fports.c:
    * libguile/fports.h:
    * libguile/print.c:
    * libguile/r6rs-ports.c:
    * libguile/strports.c:
    * libguile/strports.h:
    * libguile/tags.h:
    * libguile/vports.c:
    * test-suite/standalone/test-scm-c-read.c: Adapt to change.
    * libguile/goops.c (scm_class_of, make_port_classes)
      (scm_make_port_classes, create_port_classes): Adapt to store the
      classes in the ptob.
    cd51ce81