Add new R4RS-compliant syntax for keywords.
authorJim Blandy <jimb@red-bean.com>
Tue, 27 May 1997 23:58:26 +0000 (23:58 +0000)
committerJim Blandy <jimb@red-bean.com>
Tue, 27 May 1997 23:58:26 +0000 (23:58 +0000)
* 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.

libguile/kw.c
libguile/read.c

index 73ee17f..e60cba9 100644 (file)
@@ -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),
index c5eac9e..db5742f 100644 (file)
@@ -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: