scsh-users
[Top] [All Lists]

(rx (|)) fix

To: scsh-news@zurich.ai.mit.edu
Subject: (rx (|)) fix
From: Peter Wang <tjaden@users.sourceforge.net>
Date: 03 Aug 2003 09:59:47 +1000
Organization: Alphalink (Australia) Pty. Ltd. Network News
--=-=-=

Hello.  A while back I posted that typing (rx (|)) into scsh did not
work as expected.  I think I've got a fix here, but someone who
understands the regexp code should check it.

After patching:

  Welcome to scsh 0.6.4 (Olin Shivers)
  Type ,? for help.
  > (rx (|))
  '#{re-char-set}
  > (eq? (rx (|)) re-empty)
  #t
  > (regexp-search (rx (|)) "test")
  #f
  > (regexp-search (rx (|)) "")
  #f


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment; filename=scsh-rx-empty.diff

--- scsh/rx/parse.scm.old       Thu Jul 24 15:31:48 2003
+++ scsh/rx/parse.scm   Thu Jul 24 15:33:14 2003
@@ -437,11 +437,15 @@
              re-choice:posix))
 
        ((re-char-set? re)
-       (if (re-any? re)
-           (r 're-any)                 ; Special hack for ANY.
-           (doit/leaf 'make-re-char-set 'make-re-char-set/posix
-                      `(,(char-set->scheme (re-char-set:cset re) r))
-                      re-char-set:posix)))
+       (cond
+        ((re-any? re)
+         (r 're-any))                  ; Special hack for ANY.
+        ((re-empty? re)
+         (r 're-empty))                ; Special hack for EMPTY.
+        (else
+         (doit/leaf 'make-re-char-set 'make-re-char-set/posix
+                    `(,(char-set->scheme (re-char-set:cset re) r))
+                    re-char-set:posix))))
 
        ((re-repeat? re)
        (doit 'make-re-repeat 'make-re-repeat/tsm (re-repeat:tsm re)
--- scsh/rx/posixstr.scm.old    Thu Jul 24 15:37:18 2003
+++ scsh/rx/posixstr.scm        Thu Jul 24 15:37:36 2003
@@ -93,7 +93,7 @@
 (define (regexp->posix-string re)
   ;; We *must* simplify, to guarantee correct translation.
   (let ((re (simplify-regexp re))) 
-    (if (simple-empty-re? re) (values #f #f #f #f)
+    (if (simple-empty-re? re) (values #f #f #f '#())
        (translate-regexp re))))
 
 

--=-=-=--

<Prev in Thread] Current Thread [Next in Thread>
  • (rx (|)) fix, Peter Wang <=