diff options
Diffstat (limited to 'module/system/base')
-rw-r--r-- | module/system/base/syntax.scm | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/module/system/base/syntax.scm b/module/system/base/syntax.scm index 6c98b90c4..3a61ea6f6 100644 --- a/module/system/base/syntax.scm +++ b/module/system/base/syntax.scm @@ -175,11 +175,21 @@ (cond ,@(map process-clause clauses) (else (error "unhandled record" ,r)))))) +;; These are short-lived, and headed to the chopping block. (use-modules (ice-9 match)) (define-macro (record-case record . clauses) (define (process-clause clause) - `(($ ,@(car clause)) ,@(cdr clause))) - `(match ,record ,(map process-clause clauses))) + (if (eq? (car clause) 'else) + clause + `(($ ,@(car clause)) ,@(cdr clause)))) + `(match ,record ,@(map process-clause clauses))) + +(define (record? x) + (and (vector? x) + (not (zero? (vector-length x))) + (symbol? (vector-ref x 0)) + (eqv? (string-ref (symbol->string (vector-ref x 0)) 0) #\<))) +(export record?) ;;; |