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