diff options
author | Andy Wingo <wingo@pobox.com> | 2013-11-28 16:15:38 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2013-11-28 16:15:38 +0100 |
commit | 9b95f3ced4f4cc4c7d0ffa59c530a2e1a17a19fc (patch) | |
tree | 93c10f0a6fa6c224df9e76df63d32cc3ac2d65ca | |
parent | 6683f204ba95321f2cf904d0508117b027f2f2fc (diff) | |
parent | a38024baaa32d1a6d91fdc81388c88bbb926c3ae (diff) | |
download | guile-9b95f3ced4f4cc4c7d0ffa59c530a2e1a17a19fc.tar.gz |
Merge commit 'a38024baaa32d1a6d91fdc81388c88bbb926c3ae'
Conflicts:
libguile/ports.h
-rw-r--r-- | libguile/ports.c | 25 | ||||
-rw-r--r-- | libguile/ports.h | 6 | ||||
-rw-r--r-- | libguile/read.c | 23 |
3 files changed, 32 insertions, 22 deletions
diff --git a/libguile/ports.c b/libguile/ports.c index 960dfa8e7..61bd57739 100644 --- a/libguile/ports.c +++ b/libguile/ports.c @@ -60,6 +60,7 @@ #include "libguile/weak-set.h" #include "libguile/fluids.h" #include "libguile/eq.h" +#include "libguile/alist.h" #ifdef HAVE_STRING_H #include <string.h> @@ -342,17 +343,29 @@ scm_i_clear_pending_eof (SCM port) SCM_PORT_GET_INTERNAL (port)->pending_eof = 0; } -SCM -scm_i_port_alist (SCM port) +SCM_DEFINE (scm_i_port_property, "%port-property", 2, 0, 0, + (SCM port, SCM key), + "Return the property of @var{port} associated with @var{key}.") +#define FUNC_NAME s_scm_i_port_property { - return SCM_PORT_GET_INTERNAL (port)->alist; + SCM_VALIDATE_OPPORT (1, port); + return scm_assq_ref (SCM_PORT_GET_INTERNAL (port)->alist, key); } +#undef FUNC_NAME -void -scm_i_set_port_alist_x (SCM port, SCM alist) +SCM_DEFINE (scm_i_set_port_property_x, "%set-port-property!", 3, 0, 0, + (SCM port, SCM key, SCM value), + "Set the property of @var{port} associated with @var{key} to @var{value}.") +#define FUNC_NAME s_scm_i_set_port_property_x { - SCM_PORT_GET_INTERNAL (port)->alist = alist; + scm_t_port_internal *pti; + + SCM_VALIDATE_OPPORT (1, port); + pti = SCM_PORT_GET_INTERNAL (port); + pti->alist = scm_assq_set_x (pti->alist, key, value); + return SCM_UNSPECIFIED; } +#undef FUNC_NAME diff --git a/libguile/ports.h b/libguile/ports.h index 806448980..a7fde39a3 100644 --- a/libguile/ports.h +++ b/libguile/ports.h @@ -362,9 +362,9 @@ SCM_API SCM scm_set_port_column_x (SCM port, SCM line); SCM_API SCM scm_port_filename (SCM port); SCM_API SCM scm_set_port_filename_x (SCM port, SCM filename); -/* Port alist. */ -SCM_INTERNAL SCM scm_i_port_alist (SCM port); -SCM_INTERNAL void scm_i_set_port_alist_x (SCM port, SCM alist); +/* Port properties. */ +SCM_INTERNAL SCM scm_i_port_property (SCM port, SCM key); +SCM_INTERNAL SCM scm_i_set_port_property_x (SCM port, SCM key, SCM value); /* Implementation helpers for port printing functions. */ SCM_API int scm_port_print (SCM exp, SCM port, scm_print_state *); diff --git a/libguile/read.c b/libguile/read.c index c8db81277..d1e1be372 100644 --- a/libguile/read.c +++ b/libguile/read.c @@ -2115,10 +2115,10 @@ SCM_DEFINE (scm_file_encoding, "file-encoding", 1, 0, 0, /* Per-port read options. - We store per-port read options in the 'port-read-options' key of the - port's alist, which is stored in the internal port structure. The - value stored in the alist is a single integer that contains a two-bit - field for each read option. + We store per-port read options in the 'port-read-options' port + property, which is stored in the internal port structure. The value + stored is a single integer that contains a two-bit field for each + read option. If a bit field contains READ_OPTION_INHERIT (3), that indicates that the applicable value should be inherited from the corresponding @@ -2128,7 +2128,7 @@ SCM_DEFINE (scm_file_encoding, "file-encoding", 1, 0, 0, read option has been set per-port, its possible values are those in 'enum t_keyword_style'. */ -/* Key to read options in per-port alists. */ +/* Key to read options in port properties. */ SCM_SYMBOL (sym_port_read_options, "port-read-options"); /* Offsets of bit fields for each per-port override */ @@ -2153,12 +2153,11 @@ SCM_SYMBOL (sym_port_read_options, "port-read-options"); static void set_port_read_option (SCM port, int option, int new_value) { - SCM alist, scm_read_options; + SCM scm_read_options; unsigned int read_options; new_value &= READ_OPTION_MASK; - alist = scm_i_port_alist (port); - scm_read_options = scm_assq_ref (alist, sym_port_read_options); + scm_read_options = scm_i_port_property (port, sym_port_read_options); if (scm_is_unsigned_integer (scm_read_options, 0, READ_OPTIONS_MAX_VALUE)) read_options = scm_to_uint (scm_read_options); else @@ -2166,8 +2165,7 @@ set_port_read_option (SCM port, int option, int new_value) read_options &= ~(READ_OPTION_MASK << option); read_options |= new_value << option; scm_read_options = scm_from_uint (read_options); - alist = scm_assq_set_x (alist, sym_port_read_options, scm_read_options); - scm_i_set_port_alist_x (port, alist); + scm_i_set_port_property_x (port, sym_port_read_options, scm_read_options); } /* Set OPTS and PORT's case-insensitivity according to VALUE. */ @@ -2202,11 +2200,10 @@ set_port_curly_infix_p (SCM port, scm_t_read_opts *opts, int value) static void init_read_options (SCM port, scm_t_read_opts *opts) { - SCM alist, val, scm_read_options; + SCM val, scm_read_options; unsigned int read_options, x; - alist = scm_i_port_alist (port); - scm_read_options = scm_assq_ref (alist, sym_port_read_options); + scm_read_options = scm_i_port_property (port, sym_port_read_options); if (scm_is_unsigned_integer (scm_read_options, 0, READ_OPTIONS_MAX_VALUE)) read_options = scm_to_uint (scm_read_options); |