[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] R6RS-style block comments
From: |
Andreas Rottmann |
Subject: |
[PATCH] R6RS-style block comments |
Date: |
Sat, 25 Jul 2009 23:32:14 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.0.96 (gnu/linux) |
Attached is a patch that extends the read syntax to allow for #| ... |#
block comments.
From: Andreas Rottmann <address@hidden>
Subject: [PATCH] Add support for #| ... |# comments
This syntax has been added by R6RS.
---
NEWS | 5 +++++
libguile/read.c | 35 +++++++++++++++++++++--------------
2 files changed, 26 insertions(+), 14 deletions(-)
diff --git a/NEWS b/NEWS
index 445bb1c..e58915e 100644
--- a/NEWS
+++ b/NEWS
@@ -356,6 +356,11 @@ actually used this, this behavior may be reinstated via the
#; comments out an entire expression. See SRFI-62 or the R6RS for more
information.
+** Additional syntax for block comments
+
+#| ... |# is now accepted syntax for block comments, in addition to
+#! ... !#.
+
** `make-stack' with a tail-called procedural narrowing argument no longer
works (with compiled procedures)
diff --git a/libguile/read.c b/libguile/read.c
index bd028ea..46d4582 100644
--- a/libguile/read.c
+++ b/libguile/read.c
@@ -182,8 +182,8 @@ static SCM *scm_read_hash_procedures;
(((_chr) <= UCHAR_MAX) ? tolower (_chr) : (_chr))
-/* Read an SCSH block comment. */
-static inline SCM scm_read_scsh_block_comment (int chr, SCM port);
+/* Read an SCSH or R6RS block comment. */
+static inline SCM scm_read_block_comment (int chr, SCM port);
static SCM scm_read_commented_expression (int chr, SCM port);
/* Read from PORT until a delimiter (e.g., a whitespace) is read. Return
@@ -258,7 +258,8 @@ flush_ws (SCM port, const char *eoferr)
eoferr = "read_sharp";
goto goteof;
case '!':
- scm_read_scsh_block_comment (c, port);
+ case '|':
+ scm_read_block_comment (c, port);
break;
case ';':
scm_read_commented_expression (c, port);
@@ -928,24 +929,29 @@ scm_read_guile_bit_vector (int chr, SCM port)
}
static inline SCM
-scm_read_scsh_block_comment (int chr, SCM port)
+scm_read_block_comment (int chr, SCM port)
{
- int bang_seen = 0;
-
+ int comment_char_seen = 0;
+ int comment_char = chr;
+
for (;;)
{
int c = scm_getc (port);
if (c == EOF)
- scm_i_input_error ("skip_block_comment", port,
- "unterminated `#! ... !#' comment", SCM_EOL);
-
- if (c == '!')
- bang_seen = 1;
- else if (c == '#' && bang_seen)
+ {
+ scm_i_input_error ("skip_block_comment", port,
+ "unterminated `#~A ... ~A#' comment",
+ scm_list_2 (SCM_MAKE_CHAR (comment_char),
+ SCM_MAKE_CHAR (comment_char)));
+ }
+
+ if (c == comment_char)
+ comment_char_seen = 1;
+ else if (c == '#' && comment_char_seen)
break;
else
- bang_seen = 0;
+ comment_char_seen = 0;
}
return SCM_UNSPECIFIED;
@@ -1127,7 +1133,8 @@ scm_read_sharp (int chr, SCM port)
case '{':
return (scm_read_extended_symbol (chr, port));
case '!':
- return (scm_read_scsh_block_comment (chr, port));
+ case '|':
+ return (scm_read_block_comment (chr, port));
case ';':
return (scm_read_commented_expression (chr, port));
case '`':
--
tg: (74deff3..) t/r6rs-block-comments (depends on: master)
Cheers, Rotty
--
Andreas Rottmann -- <http://rotty.yi.org/>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] R6RS-style block comments,
Andreas Rottmann <=