aboutsummaryrefslogtreecommitdiffstats
path: root/lib/scheme/base/50-records.csc
diff options
context:
space:
mode:
Diffstat (limited to 'lib/scheme/base/50-records.csc')
-rw-r--r--lib/scheme/base/50-records.csc24
1 files changed, 15 insertions, 9 deletions
diff --git a/lib/scheme/base/50-records.csc b/lib/scheme/base/50-records.csc
index d7fa8d1..2830b3c 100644
--- a/lib/scheme/base/50-records.csc
+++ b/lib/scheme/base/50-records.csc
@@ -29,17 +29,23 @@
(define-syntax define-selectors
(syntax-rules ()
- ((define-selectors (selectors ...))
+ ((define-selectors pred (selectors ...))
(values selectors ...))
- ((define-selectors (selectors ...) (field getter) selector ...)
- (define-selectors (selectors ... (lambda (r)
- (call-builtin peek r field)))
+ ((define-selectors pred (selectors ...) (field getter) selector ...)
+ (define-selectors pred (selectors ... (lambda (r)
+ (unless (pred r)
+ (error "unexpected type in getter" r 'getter))
+ (call-builtin peek r field)))
selector ...))
- ((define-selectors (selectors ...) (field getter setter) selector ...)
- (define-selectors (selectors ... (lambda (r)
- (call-builtin peek r field))
- (lambda (r val)
- (call-builtin poke val r field)))
+ ((define-selectors pred (selectors ...) (field getter setter) selector ...)
+ (define-selectors pred (selectors ... (lambda (r)
+ (unless (pred r)
+ (error "unexpected type in getter" r 'getter))
+ (call-builtin peek r field))
+ (lambda (r val)
+ (unless (pred r)
+ (error "unexpected type in setter" r 'setter))
+ (call-builtin poke val r field)))
selector ...))))