mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-10 14:00:21 +02:00
Add new R4RS-compliant syntax for keywords.
* read.c (scm_lreadr): Recognize `#:' as a prefix for keywords, regardless of the setting of the `keywords' read option. * kw.c (prin_kw): Print keywords using the `#:' syntax, so they can be re-read no matter what the setting of the `keywords' read option.
This commit is contained in:
parent
995685aa70
commit
50a095f1c8
2 changed files with 8 additions and 1 deletions
|
@ -68,7 +68,7 @@ prin_kw (exp, port, pstate)
|
|||
SCM port;
|
||||
scm_print_state *pstate;
|
||||
{
|
||||
scm_gen_puts (scm_regular_string, ":", port);
|
||||
scm_gen_puts (scm_regular_string, "#:", port);
|
||||
scm_gen_puts((SCM_MB_STRINGP(SCM_CDR (exp))
|
||||
? scm_mb_string
|
||||
: scm_regular_string),
|
||||
|
|
|
@ -399,6 +399,13 @@ tryagain_no_flush_ws:
|
|||
return SCM_MAKICHR (scm_charnums[c]);
|
||||
scm_wta (SCM_UNDEFINED, "unknown # object: #\\", SCM_CHARS (*tok_buf));
|
||||
|
||||
/* #:SYMBOL is a syntax for keywords supported in all contexts. */
|
||||
case ':':
|
||||
j = scm_read_token ('-', tok_buf, port, 0);
|
||||
p = scm_intern (SCM_CHARS (*tok_buf), j);
|
||||
if (SCM_PORT_REPRESENTATION (port) != scm_regular_port)
|
||||
scm_set_symbol_multi_byte_x (SCM_CAR (p), SCM_BOOL_T);
|
||||
return scm_make_keyword_from_dash_symbol (SCM_CAR (p));
|
||||
|
||||
default:
|
||||
callshrp:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue