it's more efficient for unbuffered fports (e.g., sockets.)
* ports.c (scm_puts): use ptob->write.
* vports.c (scm_make_sfptob): set write proc in ptob.
* strports.c (scm_make_stptob): set write proc in ptob.
* ports.c (write_void_port): new procedure.
* vports.c (sf_write): new procedure.
* ports.c (scm_lfwrite): use ptob->write.
* strports.c (st_write): new procedure.
* fports.c (fport_write): new procedure.
(scm_make_fptob): set write in ptob to fport_write.
* ports.h: prototype for scm_set_port_write.
* ports.c (scm_make_port_type): initialise ptob write procedure.
(scm_set_port_write): new proc.
code, particularly an unnecessary test (len != size, where len ==
size). (Was this leftovers from debugging code, or have I missed
something profound?)
(scm_procedure_name): Use scm_reverse_lookup to lookup the name of
internal procedure definitions; Don't use scm_i_inner_name.
* debug.c (scm_procedure_source): Cons SCM_IM_LAMBDA onto
procedure source before calling scm_unmemocopy instead of faking
an environment.
New isym operations.
* eval.c (SCM_IM_DISPATCH, SCM_IM_HASH_DISPATCH): Don't use
improper lists in the low-level representation, since that will
cause a begin to be prepended at macro expansion.
* eval.c (scm_cons_source): Version of cons which copies source
properties from an existing cell.
(scm_m_quote, scm_m_begin, scm_m_if, scm_m_set_x, scm_m_and,
scm_m_or, scm_m_case, scm_m_cond, scm_m_lambda, scm_m_letstar,
scm_m_do, scm_m_letrec, scm_m_let, scm_copy_tree): Use
scm_cons_source.
improper lists in the low-level representation, since that will
cause a begin to be prepended at macro expansion.
* eval.c, tags.h, print.c (SCM_IM_SLOT_REF, SCM_IM_SLOT_SET_X):
New isym operations.
creation of port types (replaces scm_newptob). Just as for the
smobs, we need to separate the internal representation of smob
types from the interface, so that we easily can add new fields and
rearrange things without caring about backward compatibility.
This change was forced by the need in GOOPS to create classes
representing port types.
(scm_set_ptob_mark, scm_set_ptob_free, scm_set_ptob_print,
scm_set_ptob_equalp, scm_set_ptob_flush_input, scm_set_ptob_close,
scm_set_ptob_seek, scm_set_ptob_truncate,
scm_set_ptob_input_waiting_p): New setters.
(scm_newptob): Rewritten to use scm_make_port_type. For backward
compatibility.
(scm_ptobs): Changed type scm_ptobfuns --> scm_ptob_descriptor.
(scm_prinport): Removed.
(scm_port_print): Added.
(scm_print_port_mode): Added.
(void_port_ptob, print_void_port, close_void_port, noop0):
Removed. Removed #include "genio.h" Added #include "objects.h",
#include "smobs.h"