shithub: fnt

Download patch

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)))]))