racket/collects/scheme/match/runtime.ss
2008-11-18 21:17:36 +00:00

32 lines
815 B
Scheme

#lang scheme/base
(require scheme/stxparam
(for-syntax scheme/base))
(provide match-equality-test
exn:misc:match?
match:error
fail
matchable?
match-prompt-tag)
(define match-prompt-tag (make-continuation-prompt-tag 'match))
(define match-equality-test (make-parameter equal?))
(define-struct (exn:misc:match exn:fail) (value))
(define (match:error val)
(raise (make-exn:misc:match (format "match: no matching clause for ~e" val)
(current-continuation-marks)
val)))
(define-syntax-parameter fail
(lambda (stx)
(raise-syntax-error
#f "used out of context: not in match pattern" stx)))
;; can we pass this value to regexp-match?
(define (matchable? e)
(or (string? e) (bytes? e)))