Implement SRFI-105 curly infix expressions.
authorMark H Weaver <mhw@netris.org>
Fri, 26 Oct 2012 21:20:16 +0000 (17:20 -0400)
committerMark H Weaver <mhw@netris.org>
Fri, 26 Oct 2012 23:52:32 +0000 (19:52 -0400)
commitbf9eb54aab23ebe01779ad0bbaab624e6ceb47b2
tree949d8034fc47498b7046122ab4fe9976a1d99fd5
parent9331ffd891d03bc736f98bf92628b4b2fa714e68
Implement SRFI-105 curly infix expressions.

* libguile/private-options.h: Add SCM_CURLY_INFIX_P macro, and increment
  SCM_N_READ_OPTIONS.

* libguile/read.c (sym_nfx, sym_bracket_list, sym_bracket_apply): New
  variables.
  (scm_read_opts): Add curly-infix reader option.  Reformat to comply
  with GNU coding standards.
  (scm_t_read_opts): Add curly_infix_p and neoteric_p fields.
  (init_read_options): Initialize new fields.
  (CHAR_IS_DELIMITER): Add '{', '}', '[', and ']' as delimiters if
  curly_infix_p is set.

  (set_port_square_brackets_p, set_port_curly_infix_p): New functions.

  (read_inner_expression): New function which contains the code that was
  previously in 'scm_read_expression'.  Handle curly braces when
  curly_infix_p is set.  If curly_infix_p is set and square_brackets_p
  is unset, follow the Kawa convention: [...] => ($bracket-list$ ...)

  (scm_read_expression): New function body to handle neoteric
  expressions where appropriate.

  (scm_read_shebang): Handle the new reader directives: '#!curly-infix'
  and the non-standard '#!curly-infix-and-bracket-lists'.

  (scm_read_sexp): Handle curly infix lists.

* module/ice-9/boot-9.scm (%cond-expand-features): Add srfi-105 feature
  identifier.

* doc/ref/srfi-modules.texi (SRFI-105): Add stub doc for SRFI-105.

* doc/ref/api-evaluation.texi (Scheme Read): Add documentation for the
  'curly-infix' read option, and the '#!curly-infix' and
  '#!curly-infix-and-bracket-lists' reader directives.

* doc/ref/api-options.texi (Runtime Options): Add 'curly-infix' to the
  list of read options.

* test-suite/Makefile.am: Add tests/srfi-105.test.

* test-suite/tests/srfi-105.test: New file.
doc/ref/api-evaluation.texi
doc/ref/api-options.texi
doc/ref/srfi-modules.texi
libguile/private-options.h
libguile/read.c
module/ice-9/boot-9.scm
test-suite/Makefile.am
test-suite/tests/srfi-105.test [new file with mode: 0644]