guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] GNU Guile branch, master, updated. release_1-9-10-200-g9


From: Julian Graham
Subject: [Guile-commits] GNU Guile branch, master, updated. release_1-9-10-200-g911b03b
Date: Thu, 27 May 2010 13:22:08 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Guile".

http://git.savannah.gnu.org/cgit/guile.git/commit/?id=911b03b20c0e75b2379440064f7d8d8fd24453c2

The branch, master has been updated
       via  911b03b20c0e75b2379440064f7d8d8fd24453c2 (commit)
      from  26997111c869348170bdb9280b7963318c701ae6 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 911b03b20c0e75b2379440064f7d8d8fd24453c2
Author: Julian Graham <address@hidden>
Date:   Thu May 27 09:20:53 2010 -0400

    Support for the #!r6rs lexeme.
    
    * libguile/read.c (scm_read_shebang): New function;
      (scm_read_sharp): Call scm_read_shebang on '!', which delegates to
      scm_read_scsh_block_comment as necessary.
    * test-suite/tests/reader.test ("R6RS lexeme comment", "partial R6RS
      lexeme comment"): New tests.

-----------------------------------------------------------------------

Summary of changes:
 libguile/read.c              |   39 +++++++++++++++++++++++++++++++++++++--
 test-suite/tests/reader.test |    8 ++++++++
 2 files changed, 45 insertions(+), 2 deletions(-)

diff --git a/libguile/read.c b/libguile/read.c
index c54fbb6..d169167 100644
--- a/libguile/read.c
+++ b/libguile/read.c
@@ -189,6 +189,7 @@ static SCM *scm_read_hash_procedures;
 static inline SCM scm_read_scsh_block_comment (scm_t_wchar, SCM);
 static SCM scm_read_r6rs_block_comment (scm_t_wchar, SCM);
 static SCM scm_read_commented_expression (scm_t_wchar, SCM);
+static SCM scm_read_shebang (scm_t_wchar, SCM);
 static SCM scm_get_hash_procedure (int);
 
 /* Read from PORT until a delimiter (e.g., a whitespace) is read.  Put the
@@ -309,7 +310,7 @@ flush_ws (SCM port, const char *eoferr)
            eoferr = "read_sharp";
            goto goteof;
          case '!':
-           scm_read_scsh_block_comment (c, port);
+           scm_read_shebang (c, port);
            break;
          case ';':
            scm_read_commented_expression (c, port);
@@ -1109,6 +1110,40 @@ scm_read_scsh_block_comment (scm_t_wchar chr, SCM port)
   return SCM_UNSPECIFIED;
 }
 
+static inline SCM
+scm_read_shebang (scm_t_wchar chr, SCM port)
+{
+  int c = 0;
+  if ((c = scm_get_byte_or_eof (port)) != 'r')
+    {
+      scm_ungetc (c, port);
+      return scm_read_scsh_block_comment (chr, port);
+    }
+  if ((c = scm_get_byte_or_eof (port)) != '6')
+    {
+      scm_ungetc (c, port);
+      scm_ungetc ('r', port);
+      return scm_read_scsh_block_comment (chr, port);
+    }
+  if ((c = scm_get_byte_or_eof (port)) != 'r')
+    {
+      scm_ungetc (c, port);
+      scm_ungetc ('6', port);
+      scm_ungetc ('r', port);
+      return scm_read_scsh_block_comment (chr, port);
+    }
+  if ((c = scm_get_byte_or_eof (port)) != 's')
+    {
+      scm_ungetc (c, port);
+      scm_ungetc ('r', port);
+      scm_ungetc ('6', port);
+      scm_ungetc ('r', port);
+      return scm_read_scsh_block_comment (chr, port);
+    }
+  
+  return SCM_UNSPECIFIED;
+}
+
 static SCM
 scm_read_r6rs_block_comment (scm_t_wchar chr, SCM port)
 {
@@ -1323,7 +1358,7 @@ scm_read_sharp (scm_t_wchar chr, SCM port)
     case '{':
       return (scm_read_extended_symbol (chr, port));
     case '!':
-      return (scm_read_scsh_block_comment (chr, port));
+      return (scm_read_shebang (chr, port));
     case ';':
       return (scm_read_commented_expression (chr, port));
     case '`':
diff --git a/test-suite/tests/reader.test b/test-suite/tests/reader.test
index 84c20b2..d1b9dda 100644
--- a/test-suite/tests/reader.test
+++ b/test-suite/tests/reader.test
@@ -85,6 +85,14 @@
     (equal? '(+ 2)
             (read-string "(+ 2 #! a comment\n!#\n) ")))
 
+  (pass-if "R6RS lexeme comment"
+    (equal? '(+ 1 2 3)
+            (read-string "(+ 1 #!r6rs 2 3)")))
+
+  (pass-if "partial R6RS lexeme comment"
+    (equal? '(+ 1 2 3)
+            (read-string "(+ 1 #!r6r !# 2 3)")))
+
   (pass-if "R6RS/SRFI-30 block comment"
     (equal? '(+ 1 2 3)
             (read-string "(+ 1 #| this is a\ncomment |# 2 3)")))


hooks/post-receive
-- 
GNU Guile



reply via email to

[Prev in Thread] Current Thread [Next in Thread]