shithub: sl

Download patch

ref: c37206a50fffdbe6e4efc37e75dfaa47f3da59af
parent: 611771698871131b70da808cd7359dc2c923d53f
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Sun Apr 13 23:46:53 EDT 2025

defstruct: fix another "isvec" issue

--- a/boot/sl.boot
+++ b/boot/sl.boot
@@ -78,7 +78,7 @@
   #fn(get) *properties* :kind *doc-extra* filter #fn("n10<20Q:" #(:doc-fmt))
   #fn("n10<20Q:" #(:doc-see)) princ foldl #fn("n20=161:") newline "See also:" #fn("n1A<0=700=21522263:" #(getprop
   *formals-list* "    ")) "Members:" #fn("n1A<070021522263:" #(getprop *formals-list* "    ")) void
-  "no help for " #fn(str) " " "" " (undefined)"))  defstruct #fn("O10005000*///W1000J7021?14W2000J60q?24W3000J60D?34W4000J60q?44W5000J60D?54z6IIb;228;230>1_5142224?<5147586518=<8==268?5127288?528<8?51121Q85;3E0485DC<02902:52@408583;3\\0483H;3M0483DQ;3:04292;052;J504838BP;J5048382;J704171Q;3404084;J:042<02=52I222>8C18F8E848508?>8?H5148>3G07?02@8>2A8HPe15252@30q42B2Ce18D3\x9902D8D2Ee22F2G2H2Ee22I2J0e2e2e32K2L2I8Fe2e22M2N2EEe32I0e2e3e32O2P2Ee22Q360K@30E8C3;0r28@i2@408@Me3e4e3@30qe18E3\xae08C3t02C2D8E2B1e12I2Re2e12I0e2e12S7T2Uq8A535154e32V2I0e22I2We28E<e4e3@d02D8E8F3K02B2Xe12I8Fe2e12S8A5153@@02B2Xe12S8A5152e3@30qe12S7Y2Z8;8B8A8G8C8D8F0>88@525164:" #(#(:constructor
+  "no help for " #fn(str) " " "" " (undefined)"))  defstruct #fn("O10005000*///W1000J7021?14W2000J60q?24W3000J60D?34W4000J60q?44W5000J60D?54z6IIb;228;230>1_5142224?<5147586518=<8==268?5127288?528<8?51121Q85;3E0485DC<02902:52@408583;3\\0483H;3M0483DQ;3:04292;052;J504838BP;J5048382;J5048C;3404084;J:042<02=52I222>8C18F8E848508?>8?H5148>3G07?02@8>2A8HPe15252@30q42B2Ce18D3\x9902D8D2Ee22F2G2H2Ee22I2J0e2e2e32K2L2I8Fe2e22M2N2EEe32I0e2e3e32O2P2Ee28F360K@30E8C3;0r28@i2@408@Me3e4e3@30qe18E3\xae08C3t02C2D8E2B1e12I2Qe2e12I0e2e12R7S2Tq8A535154e32U2I0e22I2Ve28E<e4e3@d02D8E8F3K02B2We12I8Fe2e12R8A5153@@02B2We12R8A5152e3@30qe12R7X2Y8;8B8A8G8C8D8F0>88@525164:" #(#(:constructor
   2 :predicate 4 NIL NIL :type 0 :named 1 :conc-name 3 NIL NIL) vec #0#
   #fn("n17005121220A>28552485:" #(cddr #fn(for-each)
                                   #fn("n17002152340q:722324A<25F2605661:" #(member (:read-only)
@@ -89,7 +89,7 @@
   #fn(map) #fn("n10B3500<:0:") #fn(sym) #\? "make-" #fn(str) "-" #fn("n12002152853=0220E8553@300853<02208552@40232486252627e1A360q@7028Fe292360q@802992e293360q@802:93e2943;02;94e2@30q95S;J80495DQS;39042<95e29697P578764:" #(#fn(str-find)
   "\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 and equal?
-  typeof quote struct or not eq? aref = length ,named %struct% #fn(copy-list) foldr #fn("n2202105201PP:" #(#fn(sym)
+  typeof quote struct or not eq? aref = length %struct% #fn(copy-list) foldr #fn("n2202105201PP:" #(#fn(sym)
   ":")) putprop constructor list map-int #fn("n1A<70F05251709205221938652943<0r20i2KM@30022872324Ie2e3953?0259523e2e2@30q262724e2282396360K@30E88Me3792:85523O02;2<2=2>86e22?2>97e22@e6e2@G02A2396360K@30E88M24e4e4e4:" #(list-ref
   #fn(sym) def s v assert if void? aref member :read-only error str "slot " quote " in struct " " is :read-only"
   aset!))))  bcode:ctable #fn("n1200Ke3:" #(aref))  with-output-to #fn("z12021e1220e2e1e12315163:" #(#fn(nconc)
--- a/src/system.sl
+++ b/src/system.sl
@@ -1144,7 +1144,7 @@
                                slots-kw))
                     constructor))] ; anything else means custom name and args
          ; should the struct name appear as the first element?
-         [named (and (or named (eq? type vec)) name)]
+         [named (and (or named isvec) name)]
          ; accessor prefix
          [access (or conc-name
                      (str name "-"))]}
@@ -1171,9 +1171,9 @@
       ,(when is? `(def (,is? s)
                     (and [equal? (typeof s) '(struct ,name)]
                          [or (not ',named) (eq? (aref s 0) ',name)]
-                         [= (length s) ,(+ (if ',named 1 0) (if isvec
-                                                                (* 2 num-slots)
-                                                                num-slots))])))
+                         [= (length s) ,(+ (if named 1 0) (if isvec
+                                                              (* 2 num-slots)
+                                                              num-slots))])))
       ; constructor
       ,(when constructor
          (if isvec