unofficial mirror of bug-guile@gnu.org 
 help / color / mirror / Atom feed
* bug#21379: datum->syntax chokes on lists of syntax objects
@ 2015-08-30  8:31 Taylan Ulrich Bayırlı/Kammer
  2015-09-02  1:26 ` Mark H Weaver
  0 siblings, 1 reply; 4+ messages in thread
From: Taylan Ulrich Bayırlı/Kammer @ 2015-08-30  8:31 UTC (permalink / raw)
  To: 21379

[-- Attachment #1: Type: text/plain, Size: 1596 bytes --]

Apparently there's two ways to represent a list syntax object:

    (datum->syntax #'x '(a b c))
    => #(syntax-object (a b c) ((top)) (hygiene guile-user))

i.e. a syntax object vector with a list payload, and

    #'(a b c)
    => (#(syntax-object a ((top)) (hygiene guile-user))
        #(syntax-object b ((top)) (hygiene guile-user))
        #(syntax-object c ((top)) (hygiene guile-user)))

i.e. a list of the elements as syntax objects.

Syntax-case and syntax->datum work fine with both.  But when the latter
form is used as the first argument to a datum->syntax call, it leads to
an error:

--- snip
scheme@(guile-user)> (datum->syntax #'(x) '(a b c))
ice-9/psyntax.scm:467:4: In procedure datum->syntax:
ice-9/psyntax.scm:467:4: In procedure vector-ref: Wrong type argument in position 1 (expecting vector): (#(syntax-object x ((top)) (hygiene guile-user)))

Entering a new prompt.  Type `,bt' for a backtrace or `,q' to continue.
scheme@(guile-user) [1]>
--- snip

I think I understand the problem: in case of a list of syntax objects,
it's ambiguous which one's environment should be used for the newly
created syntax object, so it requires it to be an "immediately wrapped"
syntax object instead.  (By the way, the psyntax sources actually call
that argument 'id', hinting that perhaps it's expected to be an
identifier, though the other representation works fine.)

I have no clue what's the best way to solve this, but if my
understanding is correct, it's a fundamental issue with datum->syntax
and not a bug, so here's a documentation patch that tries to explain the
limitation.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Amend-datum-syntax-documentation.patch --]
[-- Type: text/x-diff, Size: 1466 bytes --]

From 9578ee36ef005f0b96c1d5b120f11c178e341775 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Taylan=20Ulrich=20Bay=C4=B1rl=C4=B1/Kammer?=
 <taylanbayirli@gmail.com>
Date: Sun, 30 Aug 2015 10:24:52 +0200
Subject: [PATCH] Amend datum->syntax documentation.

* doc/ref/api-macros.texi (Syntax Case): Mention that the first argument
  to datum->syntax is invalid if it's a compound syntax object, except
  when also created with datum->syntax.
---
 doc/ref/api-macros.texi | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/doc/ref/api-macros.texi b/doc/ref/api-macros.texi
index c2910a4..9c1f023 100644
--- a/doc/ref/api-macros.texi
+++ b/doc/ref/api-macros.texi
@@ -618,7 +618,12 @@ But they can, if we explicitly introduce a binding via @code{datum->syntax}.
 
 @deffn {Scheme Procedure} datum->syntax for-syntax datum
 Create a syntax object that wraps @var{datum}, within the lexical context
-corresponding to the syntax object @var{for-syntax}.
+corresponding to the syntax object @var{for-syntax}.  @var{for-syntax} must
+either be an identifier, or a syntax object that was also created with
+@var{datum->syntax}; other compound syntax objects may be rejected because they
+contain identifiers from different lexical contexts, in which case it would be
+ambiguous which one's environment should be used for the newly created syntax
+object.
 @end deffn
 
 For completeness, we should mention that it is possible to strip the metadata
-- 
2.5.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* bug#21379: datum->syntax chokes on lists of syntax objects
  2015-08-30  8:31 bug#21379: datum->syntax chokes on lists of syntax objects Taylan Ulrich Bayırlı/Kammer
@ 2015-09-02  1:26 ` Mark H Weaver
  2015-09-02  8:28   ` Taylan Ulrich Bayırlı/Kammer
  0 siblings, 1 reply; 4+ messages in thread
From: Mark H Weaver @ 2015-09-02  1:26 UTC (permalink / raw)
  To: Taylan Ulrich "Bayırlı/Kammer"; +Cc: 21379

Hi Taylan,

You're right that this is a documentation bug, but the intended
restriction is that the first argument to 'datum->syntax' must be an
identifier, as specified in section 12.6 of the R6RS library report.  In
fact, in R6RS, the name of the first formal argument is 'template-id'.

'datum-syntax' can't do its job properly with a list structure
containing multiple identifiers, because in general, each of those
identifiers may have originated in a different place.

taylanbayirli@gmail.com (Taylan Ulrich "Bayırlı/Kammer") writes:

> From 9578ee36ef005f0b96c1d5b120f11c178e341775 Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?Taylan=20Ulrich=20Bay=C4=B1rl=C4=B1/Kammer?=
>  <taylanbayirli@gmail.com>
> Date: Sun, 30 Aug 2015 10:24:52 +0200
> Subject: [PATCH] Amend datum->syntax documentation.
>
> * doc/ref/api-macros.texi (Syntax Case): Mention that the first argument
>   to datum->syntax is invalid if it's a compound syntax object, except
>   when also created with datum->syntax.
> ---
>  doc/ref/api-macros.texi | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
>
>
> diff --git a/doc/ref/api-macros.texi b/doc/ref/api-macros.texi
> index c2910a4..9c1f023 100644
> --- a/doc/ref/api-macros.texi
> +++ b/doc/ref/api-macros.texi
> @@ -618,7 +618,12 @@ But they can, if we explicitly introduce a binding via @code{datum->syntax}.
>  
>  @deffn {Scheme Procedure} datum->syntax for-syntax datum
>  Create a syntax object that wraps @var{datum}, within the lexical context
> -corresponding to the syntax object @var{for-syntax}.

How about changing the first formal argument name to 'template-id' and
changing the words "syntax object" to "identifier"?

     Thanks!
       Mark





^ permalink raw reply	[flat|nested] 4+ messages in thread

* bug#21379: datum->syntax chokes on lists of syntax objects
  2015-09-02  1:26 ` Mark H Weaver
@ 2015-09-02  8:28   ` Taylan Ulrich Bayırlı/Kammer
  2015-09-02 18:11     ` Mark H Weaver
  0 siblings, 1 reply; 4+ messages in thread
From: Taylan Ulrich Bayırlı/Kammer @ 2015-09-02  8:28 UTC (permalink / raw)
  To: Mark H Weaver; +Cc: 21379

[-- Attachment #1: Type: text/plain, Size: 238 bytes --]

Mark H Weaver <mhw@netris.org> writes:

> How about changing the first formal argument name to 'template-id' and
> changing the words "syntax object" to "identifier"?
>
>      Thanks!
>        Mark

Sure, updated patch attached.

Taylan


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Amend-datum-syntax-documentation.patch --]
[-- Type: text/x-diff, Size: 1163 bytes --]

From 2ba9474dc8e2a56524d8c6c2f640fb3fb35b2d14 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Taylan=20Ulrich=20Bay=C4=B1rl=C4=B1/Kammer?=
 <taylanbayirli@gmail.com>
Date: Sun, 30 Aug 2015 10:24:52 +0200
Subject: [PATCH] Amend datum->syntax documentation.

* doc/ref/api-macros.texi (Syntax Case): Make it clear that the first
  argument to datum->syntax must be an identifier.
---
 doc/ref/api-macros.texi | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/doc/ref/api-macros.texi b/doc/ref/api-macros.texi
index c2910a4..a828258 100644
--- a/doc/ref/api-macros.texi
+++ b/doc/ref/api-macros.texi
@@ -616,9 +616,9 @@ won't have access to the binding of @code{it}.
 
 But they can, if we explicitly introduce a binding via @code{datum->syntax}.
 
-@deffn {Scheme Procedure} datum->syntax for-syntax datum
+@deffn {Scheme Procedure} datum->syntax template-id datum
 Create a syntax object that wraps @var{datum}, within the lexical context
-corresponding to the syntax object @var{for-syntax}.
+corresponding to the identifier @var{template-id}.
 @end deffn
 
 For completeness, we should mention that it is possible to strip the metadata
-- 
2.5.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* bug#21379: datum->syntax chokes on lists of syntax objects
  2015-09-02  8:28   ` Taylan Ulrich Bayırlı/Kammer
@ 2015-09-02 18:11     ` Mark H Weaver
  0 siblings, 0 replies; 4+ messages in thread
From: Mark H Weaver @ 2015-09-02 18:11 UTC (permalink / raw)
  To: Taylan Ulrich "Bayırlı/Kammer"; +Cc: 21379-done

taylanbayirli@gmail.com (Taylan Ulrich "Bayırlı/Kammer") writes:

> From 2ba9474dc8e2a56524d8c6c2f640fb3fb35b2d14 Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?Taylan=20Ulrich=20Bay=C4=B1rl=C4=B1/Kammer?=
>  <taylanbayirli@gmail.com>
> Date: Sun, 30 Aug 2015 10:24:52 +0200
> Subject: [PATCH] Amend datum->syntax documentation.

Pushed with minor changes: I changed "Amend" to "Clarify" in the summary
line, and updated the copyright dates in api-macros.texi.

    Thanks!
      Mark





^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2015-09-02 18:11 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-08-30  8:31 bug#21379: datum->syntax chokes on lists of syntax objects Taylan Ulrich Bayırlı/Kammer
2015-09-02  1:26 ` Mark H Weaver
2015-09-02  8:28   ` Taylan Ulrich Bayırlı/Kammer
2015-09-02 18:11     ` Mark H Weaver

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).