From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: ludovic.courtes@laas.fr (=?iso-8859-1?q?Ludovic_Court=E8s?=) Newsgroups: gmane.lisp.guile.devel Subject: Block comments and `read-hash-extend' Date: Thu, 16 Jun 2005 11:37:57 +0200 Organization: LAAS-CNRS Message-ID: <87k6kumykq.fsf@laas.fr> NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable X-Trace: sea.gmane.org 1118914499 32408 80.91.229.2 (16 Jun 2005 09:34:59 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Thu, 16 Jun 2005 09:34:59 +0000 (UTC) Original-X-From: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Thu Jun 16 11:34:57 2005 Return-path: Original-Received: from lists.gnu.org ([199.232.76.165]) by ciao.gmane.org with esmtp (Exim 4.43) id 1Diqln-0001yI-7i for guile-devel@m.gmane.org; Thu, 16 Jun 2005 11:34:43 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1DiqrB-0004Aw-3s for guile-devel@m.gmane.org; Thu, 16 Jun 2005 05:40:17 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Diqq1-0003an-A9 for guile-devel@gnu.org; Thu, 16 Jun 2005 05:39:05 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Diqpu-0003XK-1S for guile-devel@gnu.org; Thu, 16 Jun 2005 05:39:04 -0400 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Diqpr-0003SG-Ar for guile-devel@gnu.org; Thu, 16 Jun 2005 05:38:55 -0400 Original-Received: from [140.93.0.15] (helo=laas.laas.fr) by monty-python.gnu.org with esmtp (TLS-1.0:DHE_RSA_3DES_EDE_CBC_SHA:24) (Exim 4.34) id 1DiqoO-00064L-Gd for guile-devel@gnu.org; Thu, 16 Jun 2005 05:37:24 -0400 Original-Received: by laas.laas.fr (8.13.1/8.13.1) with SMTP id j5G9ZaP0007650; Thu, 16 Jun 2005 11:35:37 +0200 (CEST) Original-To: guile-devel@gnu.org X-URL: http://www.laas.fr/~lcourtes/ X-Revolutionary-Date: 28 Prairial an 213 de la =?iso-8859-1?q?R=E9volution?= X-PGP-Key-ID: 0xEB1F5364 X-PGP-Key: http://www.laas.fr/~lcourtes/ludovic.asc X-PGP-Fingerprint: 821D 815D 902A 7EAB 5CEE D120 7FBA 3D4F EB1F 5364 X-OS: powerpc-unknown-linux-gnu User-Agent: Gnus/5.1007 (Gnus v5.10.7) Emacs/21.4 (gnu/linux) X-Spam-Score: 0 () X-Scanned-By: MIMEDefang at CNRS-LAAS X-MIME-Autoconverted: from 8bit to quoted-printable by laas.laas.fr id j5G9ZaP0007650 X-BeenThere: guile-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Developers list for Guile, the GNU extensibility library" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Errors-To: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.lisp.guile.devel:5119 X-Report-Spam: http://spam.gmane.org/gmane.lisp.guile.devel:5119 Hi, The patch below (1) fixes `#! ... !#' block comments and (2) allows to override them with `read-hash-extend'. (1) This example makes Guile 1.6 and the current Guile 1.7 hang (for some reason which I did not track down): guile> #! this is a comment !# (+ 2 2) [wait forever] Once the patch is applied: guile> #! this is a comment !# (+ 2 2) 4 I guess block comments have not been widely used over the past years. ;-) (2) It makes it possible to discard the block comment syntax with `read-hash-extend'. The example below allows to recognize the DSSSL keyword syntax[*], at the expense of losing the block comment syntax: (read-hash-extend #\! (lambda (chr port) (symbol->keyword (read port)))) I find this particular example useful since, even if DSSSL is apparently not widely used, other Scheme implementations such as Bigloo do support this syntax, and allowing such extensions is what `read-hash-extend' is for. Comments? Thanks, Ludovic. [*] http://www.ibiblio.org/pub/sun-info/standards/dsssl/dssslo/do960816.h= tm 2005-06-16 Ludovic Court=E8s * read.c (scm_flush_ws): Do not handle `#! .. !#' block comments here so that the behavior of `#!' can be extended with `read-hash-extend'. (scm_lreadr): Handle the `#!' case here instead of in `scm_flush_ws ()' after making sure that no hash reader extension exists for `!'. Jump to `tryagain' after call to `skip_scsh_block_comment ()', which fixes a bug in block comments handling (where Guile would hang). Index: read.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/guile/guile/guile-core/libguile/read.c,v retrieving revision 1.117 diff -u -B -b -p -r1.117 read.c --- read.c 23 May 2005 19:57:21 -0000 1.117 +++ read.c 16 Jun 2005 09:13:28 -0000 @@ -227,9 +227,6 @@ scm_flush_ws (SCM port, const char *eofe case EOF: eoferr =3D "read_sharp"; goto goteof; - case '!': - skip_scsh_block_comment (port); - break; default: scm_ungetc (c, port); return '#'; @@ -478,9 +475,10 @@ scm_lreadr (SCM *tok_buf, SCM port, SCM=20 goto num; =20 case '!': - /* should never happen, #!...!# block comments are skipped - over in scm_flush_ws. */ - abort (); + /* Only handle `#! ... !#' block comments if no user extension was + defined for `!' using `read-hash-extend'. */ + skip_scsh_block_comment (port); + goto tryagain; =20 case '*': j =3D scm_read_token (c, tok_buf, port, 0); _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://lists.gnu.org/mailman/listinfo/guile-devel