diff options
author | Mark H Weaver <mhw@netris.org> | 2012-10-24 14:37:36 -0400 |
---|---|---|
committer | Mark H Weaver <mhw@netris.org> | 2012-10-26 17:06:55 -0400 |
commit | 9331ffd891d03bc736f98bf92628b4b2fa714e68 (patch) | |
tree | 82f200c003847fe03998ee2c71ee43836ae2f912 /libguile/read.c | |
parent | ea8c97615590ec60f2df0f7f356b04aa0a174eef (diff) | |
download | guile-9331ffd891d03bc736f98bf92628b4b2fa714e68.tar.gz |
Implement #!fold-case and #!no-fold-case reader directives.
* libguile/read.c (set_port_case_insensitive_p): New function.
(scm_read_shebang): Handle #!fold-case and #!no-fold-case.
* doc/ref/api-evaluation.texi (Case Sensitivity, Scheme Read): Document
the #!fold-case and #!no-fold-case reader directives.
* test-suite/tests/reader.test ("per-port-read-options"): Add tests.
Diffstat (limited to 'libguile/read.c')
-rw-r--r-- | libguile/read.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/libguile/read.c b/libguile/read.c index f3f7d395b..ec1d394ce 100644 --- a/libguile/read.c +++ b/libguile/read.c @@ -1279,6 +1279,9 @@ scm_read_scsh_block_comment (scm_t_wchar chr, SCM port) return SCM_UNSPECIFIED; } +static void set_port_case_insensitive_p (SCM port, scm_t_read_opts *opts, + int value); + static SCM scm_read_shebang (scm_t_wchar chr, SCM port, scm_t_read_opts *opts) { @@ -1300,6 +1303,10 @@ scm_read_shebang (scm_t_wchar chr, SCM port, scm_t_read_opts *opts) name[i] = '\0'; if (0 == strcmp ("r6rs", name)) ; /* Silently ignore */ + else if (0 == strcmp ("fold-case", name)) + set_port_case_insensitive_p (port, opts, 1); + else if (0 == strcmp ("no-fold-case", name)) + set_port_case_insensitive_p (port, opts, 0); else break; @@ -2004,6 +2011,15 @@ set_port_read_option (SCM port, int option, int new_value) scm_i_pthread_mutex_unlock (&scm_i_port_table_mutex); } +/* Set OPTS and PORT's case-insensitivity according to VALUE. */ +static void +set_port_case_insensitive_p (SCM port, scm_t_read_opts *opts, int value) +{ + value = !!value; + opts->case_insensitive_p = value; + set_port_read_option (port, READ_OPTION_CASE_INSENSITIVE_P, value); +} + /* Initialize OPTS based on PORT's read options and the global read options. */ static void |