add matchable?

svn: r9067
This commit is contained in:
Sam Tobin-Hochstadt 2008-03-22 17:07:59 +00:00
parent eedaebefaf
commit 63df5e13f7
2 changed files with 9 additions and 7 deletions

View File

@ -8,9 +8,11 @@
"compiler.ss" "compiler.ss"
(only-in srfi/1 delete-duplicates)) (only-in srfi/1 delete-duplicates))
(provide ddk? parse-literal all-vars pattern-var? match:syntax-err) (provide ddk? parse-literal all-vars pattern-var? match:syntax-err
matchable?)
(define (matchable? e)
(or (string? e) (bytes? e)))
;; raise an error, blaming stx ;; raise an error, blaming stx
(define (match:syntax-err stx msg) (define (match:syntax-err stx msg)

View File

@ -1,6 +1,6 @@
#lang scheme/base #lang scheme/base
(require (for-template scheme/base) (require (for-template scheme/base "parse-helper.ss")
syntax/boundmap syntax/boundmap
syntax/stx syntax/stx
scheme/struct-info scheme/struct-info
@ -49,18 +49,18 @@
(let ([ps (map (compose make-Not parse) (syntax->list #'(p ...)))]) (let ([ps (map (compose make-Not parse) (syntax->list #'(p ...)))])
(make-And ps))] (make-And ps))]
[(regexp r) [(regexp r)
(make-And (list (make-Pred #'string?) (make-App #'(lambda (e) (regexp-match r e)) (make-Pred #'values))))] (make-And (list (make-Pred #'matchable?) (make-App #'(lambda (e) (regexp-match r e)) (make-Pred #'values))))]
[(regexp r p) [(regexp r p)
(make-And (list (make-Pred #'string?) (make-App #'(lambda (e) (regexp-match r e)) (parse #'p))))] (make-And (list (make-Pred #'matchable?) (make-App #'(lambda (e) (regexp-match r e)) (parse #'p))))]
[(pregexp r) [(pregexp r)
(make-And (list (make-Pred #'string?) (make-App (syntax/loc #'r (make-And (list (make-Pred #'matchable?) (make-App (syntax/loc #'r
(lambda (e) (regexp-match (if (pregexp? r) (lambda (e) (regexp-match (if (pregexp? r)
r r
(pregexp r)) (pregexp r))
e))) e)))
(make-Pred #'values))))] (make-Pred #'values))))]
[(pregexp r p) [(pregexp r p)
(make-And (list (make-Pred #'string?) (make-App (syntax/loc #'r (make-And (list (make-Pred #'matchable?) (make-App (syntax/loc #'r
(lambda (e) (regexp-match (if (pregexp? r) (lambda (e) (regexp-match (if (pregexp? r)
r r
(pregexp r)) (pregexp r))