shithub: sl

Download patch

ref: 38d2a2ed5d6ab788cb451b716b35d40413e1c33b
parent: d8eb8e5e022b06179cfa69c784daed68fdac0ba0
author: spew <spew@cbza.org>
date: Fri Mar 21 23:11:30 EDT 2025

system.sl: expose sort to the world, lsd minor fixes

--- a/boot/sl.boot
+++ b/boot/sl.boot
@@ -316,21 +316,16 @@
                                                             print) print-val)
   #fn("n370A3U0FEl23N071A72151523A0A182ML237023@4024751K~512602765:" #(princ >= 1- " >" "  " hex5
                                                                        ":  " " ") print-inst)
- " ") print-inst)
-  #fn(length) #fn(table-foldl) #fn("n382;J@041AF<Gl2;34040:") Instructions #fn("n1702161:" #(princ
-  "\t")) #fn(memq) (loadv.l loadg.l setg.l) ref-s32-LE (loadv loadg setg)
-  (loada seta loadc call tcall list + - * / < = vec argc vargc loadi8 apply tapply closure box
-   shift aref) princ #fn(num->str) aref (loada.l seta.l loadc.l argc.l vargc.l call.l tcall.l box.l)
-  (optargs keyargs) keyargs " " brbound (jmp brne brnn brn) "@" hex5 ref-s16-LE (jmp.l brne.l
-                                                                                       brnn.l brn.l)) fn-disasm)
+ " ") print-inst)
+  #fn(length) #fn(table-foldl) #fn("n382;J@041AF<Gl2;34040:") Instructions #fn("n1702161:" #(princ
+  "\t")) #fn(memq) (loadv.l loadg.l setg.l) ref-s32-LE (loadv loadg setg)
+  (loada seta loadc call tcall list + - * / < = vec argc vargc loadi8 apply tapply closure box
 l) foldl) foldr
--vars #fn("n170A<05161:" #(delete-duplicates) #(#2=(#fn("n10H340q:0<20Cd00=B3^00TR;37040Te1;JM040TB;3E0471051R;3:0471051e1:0<22C?07324A<0=52}2:q:" #(def
-  caadr begin nconc #fn(map)) #(#2#)))))
-            get-syntax #fn("n120710q63:" #(#fn(get)
-                                           *syntax-environment*) get-syntax)
-            getprop #fn("\x8720003000W2000J60q?2420711q5387;3<04208708253;J50482:" #(#fn(get)
-                                                                                     *properties*) getprop)
-            help-print-header #fn("n213?020210>1152@<0720514735047360:" #(#fn(for-each)
+.l
+                                                                                       brnn.l brn.l)) fn-disasm)
+            foldl #fn("n382J401:700082<15282=63:" #(foldl) foldl) foldr
+            #fn("n382J401:082<700182=5362:" #(foldr) foldr) get-defined-vars #fn("n170A<05161:" #(delete-duplicates) #(#2=(#fn("n10H340q:0<20Cd00=B3^00TR;37040Te1;JM040TB;3E0471051R;3:0471051e1:0<22C?07324A<0=52}2:q:" #(def
+  caadr begin nconc #fn(map)) #(#2#)))))
 ewline) help-print-header)
             hex5 #fn("n170210r@52r52263:" #(str-lpad #fn(num->str) #\0) hex5) identity
             #fn("n10:" #() identity) in-env? #fn("n21B;3F042001<52;J:047101=62:" #(#fn(assq)
@@ -406,6 +401,9 @@
 94<0=61:92:" #(caar
   cdar)))) #fn(length)) make-perfect-hash-table)
             make-system-image #fn("n1Ib520852185>1_51422023242554267778Dw74Dw84298889>22:878586>32;8:>1{8:504:" #(#0#
+2205151162:" #(mod0 abs #fn(hash)) $hash-keyword)
+  #fn("n120r20i2q52Ib68621A085F86>5_486<^19261:" #(#fn(vec-alloc)
+                                                   #fn("n10B3p070051r2A<85F52i29286G3;093<FKM61:928685p49286KM71051p494<0=61:92:" #(caar
 " #(#0#
   #fn("n10S;J6040=S3400:0<7021850>222A85>262:" #(call-with-values #fn("n07021A>1F=62:" #(partition
   #fn("n10AL2:"))) #fn("n220A<051Fe1A<15163:" #(#fn(nconc)))) sort)
--- a/src/plan9/lsd.sl
+++ b/src/plan9/lsd.sl
@@ -207,10 +207,7 @@
 
 (def ctrace (get tracers (os-getenv "objtype")))
 
-(def (_stk)
-  (reverse!
-    (map (λ (f) (frame-locals f (reverse! (frame-locals f))) f)
-      (ctrace))))
+(def (_stk) (reverse! (ctrace)))
 
 (def (curPC) (and (>= pid 0) (readreg PC)))
 
@@ -260,13 +257,17 @@
     (go)))
 
 (def (over)
-  "Step one line of source code, going over a function call, not in"
+  "Step one line of source code, going over a function call, not in.
+
+   BUGS
+       Stepping over a function call will remain on the same line
+       whenever there is an assignment of the return value. You
+       will have to step twice in that case."
   (let ((f (car (_stk))))
     (line)
     (if (equal? f (car (_stk)))
         (curPC)
-        (begin (func)
-               (line)))))
+        (func))))
 
 (def (asmlist (n 5) (addr (curPC)))
   "Return a list of the next `n` disassembled instructions starting at `addr`.
@@ -298,7 +299,7 @@
 (def (src (addr (curPC)))
   "Return a string of the filename and line number corresponding
    to the instruction address."
-  (lsd-fileline addr))
+  (when addr (lsd-fileline addr)))
 
 (def (Bsrc (addr (curPC)))
   "Send a plumb message of the filename and line number
--- a/src/system.sl
+++ b/src/system.sl
@@ -1338,16 +1338,17 @@
 
   (princ *linefeed*))
 
+(def (sort l cmp (:key identity))
+  (if (or (not l) (not (cdr l)))
+      l
+      (let ((piv (car l)))
+        (receive (less grtr)
+                 (partition (λ (x) (cmp (key x) (key piv))) (cdr l))
+                 (nconc (sort less cmp :key key)
+                        (list piv)
+                        (sort grtr cmp :key key))))))
+
 (def (make-system-image fname)
-  (def (sort l)
-    (if (or (not l) (not (cdr l)))
-        l
-        (let ((piv (car l)))
-          (receive (less grtr)
-                   (partition (λ (x) (< x piv)) (cdr l))
-                   (nconc (sort less)
-                          (list piv)
-                          (sort grtr))))))
   (let ((f (file fname :write :create :truncate))
         (excludes '(*linefeed* *directory-separator* *argv* that *exit-hooks*
                     *print-pretty* *print-width* *print-readably*
@@ -1364,7 +1365,7 @@
                                               (str (top-level-value s)))))
                              (not (memq s excludes))
                              (not (io? (top-level-value s)))))
-                      (sort (environment))))
+                      (sort (environment) #.<)))
              (data (apply nconc (map list syms (map top-level-value syms)))))
         (write data f)
         (io-write f *linefeed*))