shithub: sl

Download patch

ref: 55b7bab03a1c5586d253c26a3b09ca16bfb1a939
parent: 2105ddb8e9e096adb877d922b8193166f7d60e76
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Tue Apr 15 02:35:42 EDT 2025

defstruct: use arg-supplied feature

--- a/boot/sl.boot
+++ b/boot/sl.boot
@@ -92,9 +92,9 @@
   "\n\n" #fn(str-sub) "" #fn(str) "\n\n    " #fn(append) defstruct :type :named :constructor
   :conc-name :predicate) fmt) sym-set-doc #fn(append) :doc-fmt #fn(nconc) begin def s equal?
   type-of quote and eq? aref = length 1+ %struct% #fn(copy-list) foldr #fn("n2202105201PP:" #(#fn(sym)
-  ":")) putprop constructor list map-int #fn("n1A<70F05251709205221938652943<0r20i2KM@30022872324Ie2e3953U0259523e226272829e22896e223e4e2e3@30q2:2;24e22<2397360K@30E88Me37=2>85523O02?2@2A2886e22B2898e22Ce6e2@G02D2397360K@30E88M24e4e4e4:" #(list-ref
-  #fn(sym) def s v unless raise list quote type-error if void? aref member :read-only error str "slot "
-  " in struct " " is :read-only" aset!))))  bcode:ctable #fn("n1200Ke3:" #(aref))  with-output-to #fn("z12021e1220e2e1e12315163:" #(#fn(nconc)
+  ":")) putprop constructor list map-int #fn("n1A<70F05251709205221938652943<0r20i2KM@30022872324q25e3e3953U0269523e22728292:e22996e223e4e2e3@30q2;2<25e22=2397360K@30E88Me37>2?85523O02@2A2B2986e22C2998e22De6e2@G02E2397360K@30E88M24e4e4e4:" #(list-ref
+  #fn(sym) def s v v-supplied? unless raise list quote type-error if not aref member :read-only
+  error str "slot " " in struct " " is :read-only" aset!))))  bcode:ctable #fn("n1200Ke3:" #(aref))  with-output-to #fn("z12021e1220e2e1e12315163:" #(#fn(nconc)
   with-bindings *io-out* #fn(copy-list)))  catch #fn("n22012122e123242522e2262722e22829e2e3262:22e20e3e42;22e22<22e2e4e3e3:" #(trycatch
   λ #:g429 if and cons? eq? car quote thrown-value cadr caddr raise))  let* #fn("z10H3E02021e1qe12215153e1:2021e173051e1e1220=B3H02024e10=e12215153e1@301515375051e2:" #(#fn(nconc)
   λ #fn(copy-list) caar let* cadar))  letrec #fn("z1202021e12273052e122240522515154e1227605262:" #(#fn(nconc)
--- a/src/system.sl
+++ b/src/system.sl
@@ -1205,11 +1205,11 @@
                                [fld (list-ref slots-car i)]
                                [fun (sym access fld)]
                                [iv (if isvec (+ (* 2 i) 1) i)]}
-                          `(def (,fun s (v #.(void)))
+                          `(def (,fun s (v NIL v-supplied?))
                              ,(when is?
                                 `(unless (,is? s)
                                    (raise (list 'type-error ',type-of-value s))))
-                             (if (void? v)
+                             (if (not v-supplied?)
                                  (aref s ,[+ (if named 1 0) iv])
                                  ,(if (member :read-only opts)
                                       `(error (str "slot " ',fld " in struct " ',name " is :read-only"))