guile-commits
[Top][All Lists]
Advanced

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

[Guile-commits] branch main updated: Fix crash on #nil in syntaxes


From: Rob Browning
Subject: [Guile-commits] branch main updated: Fix crash on #nil in syntaxes
Date: Sun, 11 Jul 2021 16:05:21 -0400

This is an automated email from the git hooks/post-receive script.

rlb pushed a commit to branch main
in repository guile.

The following commit(s) were added to refs/heads/main by this push:
     new d79a226  Fix crash on #nil in syntaxes
d79a226 is described below

commit d79a226359d28f4a1dc5df136e5544d699903a96
Author: Rob Browning <rlb@defaultvalue.org>
AuthorDate: Sat Jul 3 14:01:12 2021 -0500

    Fix crash on #nil in syntaxes
    
    In 3.0.7 (after 0cc799185576712d69f11fc794454f2f5447bef7 "Ensure
    that (syntax ()) results in ("), the use of #nil in syntax-rules
    expansions like this:
    
      (define-syntax foo
        (syntax-rules ()
          ((_ x) (eq? #nil x))))
    
      (foo #t)
    
    could cause a crash that looks like this:
    
      ice-9/psyntax.scm:2795:12: In procedure syntax-violation:
      Syntax error:
      unknown location: unexpected syntax in form ()
    
    To fix it, add another special case (the commit mentioned above
    special-cased the empty list) to preserve #nil
    
    * module/ice-9/psyntax.scm (gen-syntax): Preserve #nil.
    * test-suite/tests/syntax.test: Test #nil in syntax expansions.
    
    Closes: 49305
---
 module/ice-9/psyntax.scm     |  1 +
 test-suite/tests/syntax.test | 10 ++++++++++
 2 files changed, 11 insertions(+)

diff --git a/module/ice-9/psyntax.scm b/module/ice-9/psyntax.scm
index 663d927..bd4bd67 100644
--- a/module/ice-9/psyntax.scm
+++ b/module/ice-9/psyntax.scm
@@ -2157,6 +2157,7 @@
                       (lambda ()
                         (gen-syntax src #'(e1 e2 ...) r maps ellipsis? mod))
                     (lambda (e maps) (values (gen-vector e) maps))))
+                 (x (eq? (syntax->datum #'x) #nil) (values '(quote #nil) maps))
                  (() (values '(quote ()) maps))
                  (_ (values `(quote ,e) maps))))))
 
diff --git a/test-suite/tests/syntax.test b/test-suite/tests/syntax.test
index a2999ac..510e710 100644
--- a/test-suite/tests/syntax.test
+++ b/test-suite/tests/syntax.test
@@ -1684,6 +1684,16 @@
         (hash interpreted most-positive-fixnum)
       (hash compiled most-positive-fixnum))))
 
+(with-test-prefix "#nil in syntaxes"
+  (pass-if-equal "does not crash"
+      42
+    (let ()
+      (define-syntax foo
+        (syntax-rules ()
+          ;; In 3.0.7 this would crash with
+          ;;   unknown location: unexpected syntax in form ()
+          ((_ x) (when (eq? x #nil) 42))))
+      (foo #nil))))
 
 ;;; Local Variables:
 ;;; eval: (put 'pass-if-syntax-error 'scheme-indent-function 1)



reply via email to

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