ref: 3f1cdca6a49814f573386880bb46839f1c68ac16
parent: 5dff14b0bebf5aa06127beb54f964421cc57a2b9
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Tue Jun 18 21:21:34 EDT 2024
mkattr: protect against missing referenced field in conditions
--- a/otf.rkt
+++ b/otf.rkt
@@ -342,10 +342,13 @@
[(_ {~literal hex}) #''(verb "%#ux")]
[(_ (p:expr vs:number ...+)) #''(test p vs ...)]
[(_ (p:expr ref:id vs:number ...+))
- #''(cond
- p
- ref
- vs ...)]
+ (begin
+ (when (not (assoc (syntax->datum #`ref) fields))
+ (raise-syntax-error #f "no such field" stx #'ref))
+ #''(cond
+ p
+ ref
+ vs ...))]
[(_ ({~literal count} n:id))
(begin
(define counter (assoc (syntax->datum #`n) fields))
@@ -369,7 +372,7 @@
(list (mkattr [~@ attrs]) ...))])
(begin
(when (assoc (syntax->datum #`name) fields)
- (raise-syntax-error #f (~a "duplicate field") stx #'name))
+ (raise-syntax-error #f "duplicate field" stx #'name))
(set! fields (cons (syntax->datum #'(name type)) fields))
f)))]))