guile-devel
[Top][All Lists]
Advanced

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

Re: Block comments and `read-hash-extend'


From: Ludovic Courtès
Subject: Re: Block comments and `read-hash-extend'
Date: Fri, 19 Aug 2005 10:11:05 +0200
User-agent: Gnus/5.110004 (No Gnus v0.4) Emacs/21.4 (gnu/linux)

The patch below (<address@hidden>) also failed to live through
the summer.  ;-)

Is it acceptable?

Thanks,
Ludovic.

address@hidden (Ludovic Courtès) writes:

> 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.htm
>
>
> 2005-06-16  Ludovic Courtès  <address@hidden>
>
>       * 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
> ===================================================================
> 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 = "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 
>         goto num;
>  
>       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;
>  
>       case '*':
>         j = scm_read_token (c, tok_buf, port, 0);
>
>
>
> _______________________________________________
> Guile-devel mailing list
> address@hidden
> http://lists.gnu.org/mailman/listinfo/guile-devel




reply via email to

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